Tesseract  3.02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ELIST2 Class Reference

#include <elst2.h>

List of all members.

Public Member Functions

 ELIST2 ()
void internal_clear (void(*zapper)(ELIST2_LINK *))
bool empty () const
bool singleton () const
void shallow_copy (ELIST2 *from_list)
void internal_deep_copy (ELIST2_LINK *(*copier)(ELIST2_LINK *), const ELIST2 *list)
void assign_to_sublist (ELIST2_ITERATOR *start_it, ELIST2_ITERATOR *end_it)
inT32 length () const
void sort (int comparator(const void *, const void *))
void add_sorted (int comparator(const void *, const void *), ELIST2_LINK *new_link)

Friends

class ELIST2_ITERATOR

Detailed Description

Definition at line 88 of file elst2.h.


Constructor & Destructor Documentation

ELIST2::ELIST2 ( )
inline

Definition at line 99 of file elst2.h.

{ //constructor
}

Member Function Documentation

void ELIST2::add_sorted ( int   comparatorconst void *, const void *,
ELIST2_LINK new_link 
)

Definition at line 169 of file elst2.cpp.

{
// Check for adding at the end.
if (last == NULL || comparator(&last, &new_link) < 0) {
if (last == NULL) {
new_link->next = new_link;
new_link->prev = new_link;
} else {
new_link->next = last->next;
new_link->prev = last;
last->next = new_link;
new_link->next->prev = new_link;
}
last = new_link;
} else {
// Need to use an iterator.
ELIST2_ITERATOR it(this);
for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) {
ELIST2_LINK* link = it.data();
if (comparator(&link, &new_link) > 0)
break;
}
if (it.cycled_list())
it.add_to_end(new_link);
else
it.add_before_then_move(new_link);
}
}
void ELIST2::assign_to_sublist ( ELIST2_ITERATOR start_it,
ELIST2_ITERATOR end_it 
)

Definition at line 79 of file elst2.cpp.

{ //from list end
const ERRCODE LIST_NOT_EMPTY =
"Destination list must be empty before extracting a sublist";
#ifndef NDEBUG
if (!this)
NULL_OBJECT.error ("ELIST2::assign_to_sublist", ABORT, NULL);
#endif
if (!empty ())
LIST_NOT_EMPTY.error ("ELIST2.assign_to_sublist", ABORT, NULL);
last = start_it->extract_sublist (end_it);
}
bool ELIST2::empty ( ) const
inline

Definition at line 107 of file elst2.h.

{ //is list empty?
return !last;
}
void ELIST2::internal_clear ( void(*)(ELIST2_LINK *)  zapper)

Definition at line 43 of file elst2.cpp.

{
//ptr to zapper functn
ELIST2_LINK *next;
#ifndef NDEBUG
if (!this)
NULL_OBJECT.error ("ELIST2::internal_clear", ABORT, NULL);
#endif
if (!empty ()) {
ptr = last->next; //set to first
last->next = NULL; //break circle
last = NULL; //set list empty
while (ptr) {
next = ptr->next;
zapper(ptr);
ptr = next;
}
}
}
void ELIST2::internal_deep_copy ( ELIST2_LINK *(*)(ELIST2_LINK *)  copier,
const ELIST2 list 
)
inT32 ELIST2::length ( ) const

Definition at line 103 of file elst2.cpp.

{ // count elements
ELIST2_ITERATOR it(const_cast<ELIST2*>(this));
inT32 count = 0;
#ifndef NDEBUG
if (!this)
NULL_OBJECT.error ("ELIST2::length", ABORT, NULL);
#endif
for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ())
count++;
return count;
}
void ELIST2::shallow_copy ( ELIST2 from_list)
inline

Definition at line 115 of file elst2.h.

{ //beware destructors!!
last = from_list->last;
}
bool ELIST2::singleton ( ) const
inline

Definition at line 111 of file elst2.h.

{
return last ? (last == last->next) : false;
}
void ELIST2::sort ( int   comparatorconst void *, const void *)

Definition at line 127 of file elst2.cpp.

{
ELIST2_ITERATOR it(this);
ELIST2_LINK **base; //ptr array to sort
ELIST2_LINK **current;
inT32 i;
#ifndef NDEBUG
if (!this)
NULL_OBJECT.error ("ELIST2::sort", ABORT, NULL);
#endif
/* Allocate an array of pointers, one per list element */
count = length ();
base = (ELIST2_LINK **) malloc (count * sizeof (ELIST2_LINK *));
/* Extract all elements, putting the pointers in the array */
current = base;
for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) {
*current = it.extract ();
current++;
}
/* Sort the pointer array */
qsort ((char *) base, count, sizeof (*base), comparator);
/* Rebuild the list from the sorted pointers */
current = base;
for (i = 0; i < count; i++) {
it.add_to_end (*current);
current++;
}
free(base);
}

Friends And Related Function Documentation

friend class ELIST2_ITERATOR
friend

Definition at line 90 of file elst2.h.


The documentation for this class was generated from the following files: