All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
oldlist.h File Reference
#include "cutil.h"
#include "tesscallback.h"

Go to the source code of this file.

Classes

struct  list_rec
 

Macros

#define NIL_LIST   (LIST) 0
 
#define list_rest(l)   ((l) ? (l)->next : NIL_LIST)
 
#define first_node(l)   ((l) ? (l)->node : NIL_LIST)
 
#define copy_first(l1, l2)   (l2=push(l2, first_node(l1)))
 
#define iterate(l)   for (; (l) != NIL_LIST; (l) = list_rest (l))
 
#define iterate_list(x, l)   for ((x)=(l); (x)!=0; (x)=list_rest(x))
 
#define JOIN_ON(list1, list2)   ((list1) = join ((list1), (list2)))
 
#define pop_off(list)   ((list) = pop (list))
 
#define push_on(list, thing)   ((list) = push (list, (LIST) (thing)))
 
#define second_node(l)   first_node (list_rest (l))
 
#define set_rest(l, cell)   ((l)->next = (cell))
 
#define third(l)   first_node (list_rest (list_rest (l)))
 

Typedefs

typedef list_recLIST
 

Functions

int count (LIST var_list)
 
LIST delete_d (LIST list, void *key, int_compare is_equal)
 
LIST delete_d (LIST list, void *key, TessResultCallback2< int, void *, void * > *is_equal)
 
LIST destroy (LIST list)
 
void destroy_nodes (LIST list, void_dest destructor)
 
void insert (LIST list, void *node)
 
int is_same_node (void *item1, void *item2)
 
int is_same (void *item1, void *item2)
 
LIST join (LIST list1, LIST list2)
 
LIST last (LIST var_list)
 
void * nth_cell (LIST var_list, int item_num)
 
LIST pop (LIST list)
 
LIST push (LIST list, void *element)
 
LIST push_last (LIST list, void *item)
 
LIST reverse (LIST list)
 
LIST reverse_d (LIST list)
 
LIST s_adjoin (LIST var_list, void *variable, int_compare compare)
 
LIST search (LIST list, void *key, int_compare is_equal)
 
LIST search (LIST list, void *key, TessResultCallback2< int, void *, void * > *)
 

Macro Definition Documentation

#define copy_first (   l1,
  l2 
)    (l2=push(l2, first_node(l1)))

Definition at line 149 of file oldlist.h.

#define first_node (   l)    ((l) ? (l)->node : NIL_LIST)

Definition at line 139 of file oldlist.h.

#define iterate (   l)    for (; (l) != NIL_LIST; (l) = list_rest (l))

Definition at line 159 of file oldlist.h.

#define iterate_list (   x,
 
)    for ((x)=(l); (x)!=0; (x)=list_rest(x))

Definition at line 170 of file oldlist.h.

#define JOIN_ON (   list1,
  list2 
)    ((list1) = join ((list1), (list2)))

Definition at line 180 of file oldlist.h.

#define list_rest (   l)    ((l) ? (l)->next : NIL_LIST)

Definition at line 138 of file oldlist.h.

#define NIL_LIST   (LIST) 0

Definition at line 126 of file oldlist.h.

#define pop_off (   list)    ((list) = pop (list))

Definition at line 190 of file oldlist.h.

#define push_on (   list,
  thing 
)    ((list) = push (list, (LIST) (thing)))

Definition at line 200 of file oldlist.h.

#define second_node (   l)    first_node (list_rest (l))

Definition at line 211 of file oldlist.h.

#define set_rest (   l,
  cell 
)    ((l)->next = (cell))

Definition at line 222 of file oldlist.h.

#define third (   l)    first_node (list_rest (list_rest (l)))

Definition at line 233 of file oldlist.h.

Typedef Documentation

typedef list_rec* LIST

Definition at line 132 of file oldlist.h.

Function Documentation

int count ( LIST  var_list)

Definition at line 108 of file oldlist.cpp.

108  {
109  int temp = 0;
110 
111  iterate (var_list) temp += 1;
112  return (temp);
113 }
#define iterate(l)
Definition: oldlist.h:159
LIST delete_d ( LIST  list,
void *  key,
int_compare  is_equal 
)

Definition at line 125 of file oldlist.cpp.

125  {
126  LIST result = NIL_LIST;
127  LIST last_one = NIL_LIST;
128 
129  if (is_equal == NULL)
130  is_equal = is_same;
131 
132  while (list != NIL_LIST) {
133  if (!(*is_equal) (first_node (list), key)) {
134  if (last_one == NIL_LIST) {
135  last_one = list;
136  list = list_rest (list);
137  result = last_one;
138  set_rest(last_one, NIL_LIST);
139  }
140  else {
141  set_rest(last_one, list);
142  last_one = list;
143  list = list_rest (list);
144  set_rest(last_one, NIL_LIST);
145  }
146  }
147  else {
148  list = pop (list);
149  }
150  }
151  return (result);
152 }
#define is_equal(p1, p2)
Definition: outlines.h:109
#define NIL_LIST
Definition: oldlist.h:126
#define set_rest(l, cell)
Definition: oldlist.h:222
#define first_node(l)
Definition: oldlist.h:139
LIST pop(LIST list)
Definition: oldlist.cpp:305
int is_same(void *item1, void *item2)
Definition: oldlist.cpp:252
#define NULL
Definition: host.h:144
#define list_rest(l)
Definition: oldlist.h:138
LIST delete_d ( LIST  list,
void *  key,
TessResultCallback2< int, void *, void * > *  is_equal 
)

Definition at line 154 of file oldlist.cpp.

155  {
156  LIST result = NIL_LIST;
157  LIST last_one = NIL_LIST;
158 
159  while (list != NIL_LIST) {
160  if (!(*is_equal).Run (first_node (list), key)) {
161  if (last_one == NIL_LIST) {
162  last_one = list;
163  list = list_rest (list);
164  result = last_one;
165  set_rest(last_one, NIL_LIST);
166  }
167  else {
168  set_rest(last_one, list);
169  last_one = list;
170  list = list_rest (list);
171  set_rest(last_one, NIL_LIST);
172  }
173  }
174  else {
175  list = pop (list);
176  }
177  }
178  return (result);
179 }
#define NIL_LIST
Definition: oldlist.h:126
#define set_rest(l, cell)
Definition: oldlist.h:222
#define first_node(l)
Definition: oldlist.h:139
LIST pop(LIST list)
Definition: oldlist.cpp:305
#define list_rest(l)
Definition: oldlist.h:138
LIST destroy ( LIST  list)

Definition at line 187 of file oldlist.cpp.

187  {
188  LIST next;
189 
190  while (list != NIL_LIST) {
191  next = list_rest (list);
192  free_cell(list);
193  list = next;
194  }
195  return (NIL_LIST);
196 }
#define NIL_LIST
Definition: oldlist.h:126
void free_cell(LIST)
#define list_rest(l)
Definition: oldlist.h:138
void destroy_nodes ( LIST  list,
void_dest  destructor 
)

Definition at line 204 of file oldlist.cpp.

204  {
205  if (destructor == NULL)
206  destructor = memfree;
207 
208  while (list != NIL_LIST) {
209  (*destructor) (first_node (list));
210  list = pop (list);
211  }
212 }
void memfree(void *element)
Definition: freelist.cpp:30
#define NIL_LIST
Definition: oldlist.h:126
#define first_node(l)
Definition: oldlist.h:139
LIST pop(LIST list)
Definition: oldlist.cpp:305
#define NULL
Definition: host.h:144
void insert ( LIST  list,
void *  node 
)

Definition at line 221 of file oldlist.cpp.

221  {
222  LIST element;
223 
224  if (list != NIL_LIST) {
225  element = push (NIL_LIST, node);
226  set_rest (element, list_rest (list));
227  set_rest(list, element);
228  node = first_node (list);
229  list->node = first_node (list_rest (list));
230  list->next->node = (LIST) node;
231  }
232 }
#define NIL_LIST
Definition: oldlist.h:126
#define set_rest(l, cell)
Definition: oldlist.h:222
struct list_rec * node
Definition: oldlist.h:129
struct list_rec * next
Definition: oldlist.h:130
#define first_node(l)
Definition: oldlist.h:139
#define list_rest(l)
Definition: oldlist.h:138
LIST push(LIST list, void *element)
Definition: oldlist.cpp:323
list_rec * LIST
Definition: oldlist.h:132
int is_same ( void *  item1,
void *  item2 
)

Definition at line 252 of file oldlist.cpp.

252  {
253  return (!strcmp ((char *) item1, (char *) item2));
254 }
int is_same_node ( void *  item1,
void *  item2 
)

Definition at line 241 of file oldlist.cpp.

241  {
242  return (item1 == item2);
243 }
LIST join ( LIST  list1,
LIST  list2 
)

Definition at line 264 of file oldlist.cpp.

264  {
265  if (list1 == NIL_LIST)
266  return (list2);
267  set_rest (last (list1), list2);
268  return (list1);
269 }
#define NIL_LIST
Definition: oldlist.h:126
LIST last(LIST var_list)
Definition: oldlist.cpp:277
#define set_rest(l, cell)
Definition: oldlist.h:222
LIST last ( LIST  var_list)

Definition at line 277 of file oldlist.cpp.

277  {
278  while (list_rest (var_list) != NIL_LIST)
279  var_list = list_rest (var_list);
280  return (var_list);
281 }
#define NIL_LIST
Definition: oldlist.h:126
#define list_rest(l)
Definition: oldlist.h:138
void* nth_cell ( LIST  var_list,
int  item_num 
)

Definition at line 289 of file oldlist.cpp.

289  {
290  int x = 0;
291  iterate(var_list) {
292  if (x++ == item_num)
293  return (var_list);
294  }
295  return (var_list);
296 }
#define iterate(l)
Definition: oldlist.h:159
LIST pop ( LIST  list)

Definition at line 305 of file oldlist.cpp.

305  {
306  LIST temp;
307 
308  temp = list_rest (list);
309 
310  if (list != NIL_LIST) {
311  free_cell(list);
312  }
313  return (temp);
314 }
#define NIL_LIST
Definition: oldlist.h:126
void free_cell(LIST)
#define list_rest(l)
Definition: oldlist.h:138
LIST push ( LIST  list,
void *  element 
)

Definition at line 323 of file oldlist.cpp.

323  {
324  LIST t;
325 
326  t = new_cell ();
327  t->node = (LIST) element;
328  set_rest(t, list);
329  return (t);
330 }
LIST new_cell()
#define set_rest(l, cell)
Definition: oldlist.h:222
struct list_rec * node
Definition: oldlist.h:129
list_rec * LIST
Definition: oldlist.h:132
LIST push_last ( LIST  list,
void *  item 
)

Definition at line 338 of file oldlist.cpp.

338  {
339  LIST t;
340 
341  if (list != NIL_LIST) {
342  t = last (list);
343  t->next = push (NIL_LIST, item);
344  return (list);
345  }
346  else
347  return (push (NIL_LIST, item));
348 }
#define NIL_LIST
Definition: oldlist.h:126
LIST last(LIST var_list)
Definition: oldlist.cpp:277
struct list_rec * next
Definition: oldlist.h:130
LIST push(LIST list, void *element)
Definition: oldlist.cpp:323
LIST reverse ( LIST  list)

Definition at line 357 of file oldlist.cpp.

357  {
358  LIST newlist = NIL_LIST;
359 
360  iterate (list) copy_first (list, newlist);
361  return (newlist);
362 }
#define NIL_LIST
Definition: oldlist.h:126
#define copy_first(l1, l2)
Definition: oldlist.h:149
#define iterate(l)
Definition: oldlist.h:159
LIST reverse_d ( LIST  list)

Definition at line 371 of file oldlist.cpp.

371  {
372  LIST result = reverse (list);
373  destroy(list);
374  return (result);
375 }
LIST reverse(LIST list)
Definition: oldlist.cpp:357
LIST destroy(LIST list)
Definition: oldlist.cpp:187
LIST s_adjoin ( LIST  var_list,
void *  variable,
int_compare  compare 
)

Definition at line 384 of file oldlist.cpp.

384  {
385  LIST l;
386  int result;
387 
388  if (compare == NULL)
389  compare = (int_compare) strcmp;
390 
391  l = var_list;
392  iterate(l) {
393  result = (*compare) (variable, first_node (l));
394  if (result == 0)
395  return (var_list);
396  else if (result < 0) {
397  insert(l, variable);
398  return (var_list);
399  }
400  }
401  return (push_last (var_list, variable));
402 }
void insert(LIST list, void *node)
Definition: oldlist.cpp:221
int(* int_compare)(void *, void *)
Definition: cutil.h:71
LIST push_last(LIST list, void *item)
Definition: oldlist.cpp:338
#define first_node(l)
Definition: oldlist.h:139
#define iterate(l)
Definition: oldlist.h:159
#define NULL
Definition: host.h:144
LIST search ( LIST  list,
void *  key,
int_compare  is_equal 
)

Definition at line 413 of file oldlist.cpp.

413  {
414  if (is_equal == NULL)
415  is_equal = is_same;
416 
417  iterate (list) if ((*is_equal) (first_node (list), key))
418  return (list);
419  return (NIL_LIST);
420 }
#define is_equal(p1, p2)
Definition: outlines.h:109
#define NIL_LIST
Definition: oldlist.h:126
#define first_node(l)
Definition: oldlist.h:139
#define iterate(l)
Definition: oldlist.h:159
int is_same(void *item1, void *item2)
Definition: oldlist.cpp:252
#define NULL
Definition: host.h:144
LIST search ( LIST  list,
void *  key,
TessResultCallback2< int, void *, void * > *   
)

Definition at line 422 of file oldlist.cpp.

422  {
423  iterate (list) if ((*is_equal).Run(first_node (list), key))
424  return (list);
425  return (NIL_LIST);
426 }
#define is_equal(p1, p2)
Definition: outlines.h:109
#define NIL_LIST
Definition: oldlist.h:126
#define first_node(l)
Definition: oldlist.h:139
#define iterate(l)
Definition: oldlist.h:159