tesseract  4.00.00dev
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

◆ copy_first

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

Definition at line 149 of file oldlist.h.

◆ first_node

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

Definition at line 139 of file oldlist.h.

◆ iterate

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

Definition at line 159 of file oldlist.h.

◆ iterate_list

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

Definition at line 170 of file oldlist.h.

◆ JOIN_ON

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

Definition at line 180 of file oldlist.h.

◆ list_rest

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

Definition at line 138 of file oldlist.h.

◆ NIL_LIST

#define NIL_LIST   (LIST) 0

Definition at line 126 of file oldlist.h.

◆ pop_off

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

Definition at line 190 of file oldlist.h.

◆ push_on

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

Definition at line 200 of file oldlist.h.

◆ second_node

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

Definition at line 211 of file oldlist.h.

◆ set_rest

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

Definition at line 222 of file oldlist.h.

◆ third

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

Definition at line 233 of file oldlist.h.

Typedef Documentation

◆ LIST

typedef list_rec* LIST

Definition at line 132 of file oldlist.h.

Function Documentation

◆ count()

int count ( LIST  var_list)

Definition at line 103 of file oldlist.cpp.

103  {
104  int temp = 0;
105 
106  iterate (var_list) temp += 1;
107  return (temp);
108 }
#define iterate(l)
Definition: oldlist.h:159

◆ delete_d() [1/2]

LIST delete_d ( LIST  list,
void *  key,
int_compare  is_equal 
)

Definition at line 120 of file oldlist.cpp.

120  {
121  LIST result = NIL_LIST;
122  LIST last_one = NIL_LIST;
123 
124  if (is_equal == NULL)
125  is_equal = is_same;
126 
127  while (list != NIL_LIST) {
128  if (!(*is_equal) (first_node (list), key)) {
129  if (last_one == NIL_LIST) {
130  last_one = list;
131  list = list_rest (list);
132  result = last_one;
133  set_rest(last_one, NIL_LIST);
134  }
135  else {
136  set_rest(last_one, list);
137  last_one = list;
138  list = list_rest (list);
139  set_rest(last_one, NIL_LIST);
140  }
141  }
142  else {
143  list = pop (list);
144  }
145  }
146  return (result);
147 }
int is_same(void *item1, void *item2)
Definition: oldlist.cpp:246
#define NIL_LIST
Definition: oldlist.h:126
LIST pop(LIST list)
Definition: oldlist.cpp:299
#define set_rest(l, cell)
Definition: oldlist.h:222
#define first_node(l)
Definition: oldlist.h:139
#define is_equal(p1, p2)
Definition: outlines.h:109
#define list_rest(l)
Definition: oldlist.h:138

◆ delete_d() [2/2]

LIST delete_d ( LIST  list,
void *  key,
TessResultCallback2< int, void *, void *> *  is_equal 
)

Definition at line 149 of file oldlist.cpp.

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

◆ destroy()

LIST destroy ( LIST  list)

Definition at line 182 of file oldlist.cpp.

182  {
183  LIST next;
184 
185  while (list != NIL_LIST) {
186  next = list_rest (list);
187  free_cell(list);
188  list = next;
189  }
190  return (NIL_LIST);
191 }
void free_cell(LIST)
#define NIL_LIST
Definition: oldlist.h:126
#define list_rest(l)
Definition: oldlist.h:138

◆ destroy_nodes()

void destroy_nodes ( LIST  list,
void_dest  destructor 
)

Definition at line 199 of file oldlist.cpp.

199  {
200  ASSERT_HOST(destructor != NULL);
201 
202  while (list != NIL_LIST) {
203  if (first_node(list) != NULL) (*destructor)(first_node(list));
204  list = pop(list);
205  }
206 }
#define NIL_LIST
Definition: oldlist.h:126
LIST pop(LIST list)
Definition: oldlist.cpp:299
#define ASSERT_HOST(x)
Definition: errcode.h:84
#define first_node(l)
Definition: oldlist.h:139

◆ insert()

void insert ( LIST  list,
void *  node 
)

Definition at line 215 of file oldlist.cpp.

215  {
216  LIST element;
217 
218  if (list != NIL_LIST) {
219  element = push (NIL_LIST, node);
220  set_rest (element, list_rest (list));
221  set_rest(list, element);
222  node = first_node (list);
223  list->node = first_node (list_rest (list));
224  list->next->node = (LIST) node;
225  }
226 }
struct list_rec * node
Definition: oldlist.h:129
list_rec * LIST
Definition: oldlist.h:132
#define NIL_LIST
Definition: oldlist.h:126
#define set_rest(l, cell)
Definition: oldlist.h:222
#define first_node(l)
Definition: oldlist.h:139
struct list_rec * next
Definition: oldlist.h:130
LIST push(LIST list, void *element)
Definition: oldlist.cpp:317
#define list_rest(l)
Definition: oldlist.h:138

◆ is_same()

int is_same ( void *  item1,
void *  item2 
)

Definition at line 246 of file oldlist.cpp.

246  {
247  return (!strcmp ((char *) item1, (char *) item2));
248 }

◆ is_same_node()

int is_same_node ( void *  item1,
void *  item2 
)

Definition at line 235 of file oldlist.cpp.

235  {
236  return (item1 == item2);
237 }

◆ join()

LIST join ( LIST  list1,
LIST  list2 
)

Definition at line 258 of file oldlist.cpp.

258  {
259  if (list1 == NIL_LIST)
260  return (list2);
261  set_rest (last (list1), list2);
262  return (list1);
263 }
#define NIL_LIST
Definition: oldlist.h:126
#define set_rest(l, cell)
Definition: oldlist.h:222
LIST last(LIST var_list)
Definition: oldlist.cpp:271

◆ last()

LIST last ( LIST  var_list)

Definition at line 271 of file oldlist.cpp.

271  {
272  while (list_rest (var_list) != NIL_LIST)
273  var_list = list_rest (var_list);
274  return (var_list);
275 }
#define NIL_LIST
Definition: oldlist.h:126
#define list_rest(l)
Definition: oldlist.h:138

◆ nth_cell()

void* nth_cell ( LIST  var_list,
int  item_num 
)

Definition at line 283 of file oldlist.cpp.

283  {
284  int x = 0;
285  iterate(var_list) {
286  if (x++ == item_num)
287  return (var_list);
288  }
289  return (var_list);
290 }
#define iterate(l)
Definition: oldlist.h:159

◆ pop()

LIST pop ( LIST  list)

Definition at line 299 of file oldlist.cpp.

299  {
300  LIST temp;
301 
302  temp = list_rest (list);
303 
304  if (list != NIL_LIST) {
305  free_cell(list);
306  }
307  return (temp);
308 }
void free_cell(LIST)
#define NIL_LIST
Definition: oldlist.h:126
#define list_rest(l)
Definition: oldlist.h:138

◆ push()

LIST push ( LIST  list,
void *  element 
)

Definition at line 317 of file oldlist.cpp.

317  {
318  LIST t;
319 
320  t = new_cell ();
321  t->node = (LIST) element;
322  set_rest(t, list);
323  return (t);
324 }
struct list_rec * node
Definition: oldlist.h:129
list_rec * LIST
Definition: oldlist.h:132
#define set_rest(l, cell)
Definition: oldlist.h:222
LIST new_cell()

◆ push_last()

LIST push_last ( LIST  list,
void *  item 
)

Definition at line 332 of file oldlist.cpp.

332  {
333  LIST t;
334 
335  if (list != NIL_LIST) {
336  t = last (list);
337  t->next = push (NIL_LIST, item);
338  return (list);
339  }
340  else
341  return (push (NIL_LIST, item));
342 }
#define NIL_LIST
Definition: oldlist.h:126
struct list_rec * next
Definition: oldlist.h:130
LIST last(LIST var_list)
Definition: oldlist.cpp:271
LIST push(LIST list, void *element)
Definition: oldlist.cpp:317

◆ reverse()

LIST reverse ( LIST  list)

Definition at line 351 of file oldlist.cpp.

351  {
352  LIST newlist = NIL_LIST;
353 
354  iterate (list) copy_first (list, newlist);
355  return (newlist);
356 }
#define NIL_LIST
Definition: oldlist.h:126
#define copy_first(l1, l2)
Definition: oldlist.h:149
#define iterate(l)
Definition: oldlist.h:159

◆ reverse_d()

LIST reverse_d ( LIST  list)

Definition at line 365 of file oldlist.cpp.

365  {
366  LIST result = reverse (list);
367  destroy(list);
368  return (result);
369 }
LIST destroy(LIST list)
Definition: oldlist.cpp:182
LIST reverse(LIST list)
Definition: oldlist.cpp:351

◆ s_adjoin()

LIST s_adjoin ( LIST  var_list,
void *  variable,
int_compare  compare 
)

Definition at line 378 of file oldlist.cpp.

378  {
379  LIST l;
380  int result;
381 
382  if (compare == NULL)
383  compare = (int_compare) strcmp;
384 
385  l = var_list;
386  iterate(l) {
387  result = (*compare) (variable, first_node (l));
388  if (result == 0)
389  return (var_list);
390  else if (result < 0) {
391  insert(l, variable);
392  return (var_list);
393  }
394  }
395  return (push_last (var_list, variable));
396 }
LIST push_last(LIST list, void *item)
Definition: oldlist.cpp:332
#define first_node(l)
Definition: oldlist.h:139
void insert(LIST list, void *node)
Definition: oldlist.cpp:215
#define iterate(l)
Definition: oldlist.h:159
int(* int_compare)(void *, void *)
Definition: cutil.h:71

◆ search() [1/2]

LIST search ( LIST  list,
void *  key,
int_compare  is_equal 
)

Definition at line 406 of file oldlist.cpp.

406  {
407  if (is_equal == NULL)
408  is_equal = is_same;
409 
410  iterate (list) if ((*is_equal) (first_node (list), key))
411  return (list);
412  return (NIL_LIST);
413 }
int is_same(void *item1, void *item2)
Definition: oldlist.cpp:246
#define NIL_LIST
Definition: oldlist.h:126
#define first_node(l)
Definition: oldlist.h:139
#define is_equal(p1, p2)
Definition: outlines.h:109
#define iterate(l)
Definition: oldlist.h:159

◆ search() [2/2]

LIST search ( LIST  list,
void *  key,
TessResultCallback2< int, void *, void *> *   
)

Definition at line 415 of file oldlist.cpp.

415  {
416  iterate (list) if ((*is_equal).Run(first_node (list), key))
417  return (list);
418  return (NIL_LIST);
419 }
#define NIL_LIST
Definition: oldlist.h:126
#define first_node(l)
Definition: oldlist.h:139
#define iterate(l)
Definition: oldlist.h:159