"Fossies" - the Fresh Open Source Software Archive

Member "tesseract-ocr/doc/html/class_c_l_i_s_t.html" (26 Oct 2012, 41506 Bytes) of package /linux/misc/old/tesseract-ocr-3.02.02-doc-html.tar.gz:


Caution: In this restricted "Fossies" environment the current HTML page may not be correctly presentated and may have some non-functional links. You can here alternatively try to browse the pure source code or just view or download the uninterpreted raw source code. If the rendering is insufficient you may try to find and view the page on the tesseract-ocr-3.02.02-doc-html.tar.gz project site itself.

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

#include <clst.h>

List of all members.

Public Member Functions

 CLIST ()
 ~CLIST ()
void internal_deep_clear (void(*zapper)(void *))
void shallow_clear ()
bool empty () const
bool singleton () const
void shallow_copy (CLIST *from_list)
void assign_to_sublist (CLIST_ITERATOR *start_it, CLIST_ITERATOR *end_it)
inT32 length () const
void sort (int comparator(const void *, const void *))
bool add_sorted (int comparator(const void *, const void *), bool unique, void *new_data)
void set_subtract (int comparator(const void *, const void *), bool unique, CLIST *minuend, CLIST *subtrahend)

Friends

class CLIST_ITERATOR

Detailed Description

Definition at line 70 of file clst.h.


Constructor & Destructor Documentation

CLIST::CLIST ( )
inline

Definition at line 81 of file clst.h.

{ //constructor
}
CLIST::~CLIST ( )
inline

Definition at line 85 of file clst.h.

{ //destructor
}

Member Function Documentation

bool CLIST::add_sorted ( int   comparatorconst void *, const void *,
bool  unique,
void *  new_data 
)

Definition at line 199 of file clst.cpp.

{
// Check for adding at the end.
if (last == NULL || comparator(&last->data, &new_data) < 0) {
CLIST_LINK* new_element = new CLIST_LINK;
new_element->data = new_data;
if (last == NULL) {
new_element->next = new_element;
} else {
new_element->next = last->next;
last->next = new_element;
}
last = new_element;
return true;
} else if (!unique || last->data != new_data) {
// Need to use an iterator.
CLIST_ITERATOR it(this);
for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) {
void* data = it.data();
if (data == new_data && unique)
return false;
if (comparator(&data, &new_data) > 0)
break;
}
if (it.cycled_list())
it.add_to_end(new_data);
else
it.add_before_then_move(new_data);
return true;
}
return false;
}
void CLIST::assign_to_sublist ( CLIST_ITERATOR start_it,
CLIST_ITERATOR end_it 
)

Definition at line 109 of file clst.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 ("CLIST::assign_to_sublist", ABORT, NULL);
#endif
if (!empty ())
LIST_NOT_EMPTY.error ("CLIST.assign_to_sublist", ABORT, NULL);
last = start_it->extract_sublist (end_it);
}
bool CLIST::empty ( ) const
inline

Definition at line 95 of file clst.h.

{ //is list empty?
return !last;
}
void CLIST::internal_deep_clear ( void(*)(void *)  zapper)

Definition at line 42 of file clst.cpp.

{ //ptr to zapper functn
CLIST_LINK *ptr;
CLIST_LINK *next;
#ifndef NDEBUG
if (!this)
NULL_OBJECT.error ("CLIST::internal_deep_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->data);
delete(ptr);
ptr = next;
}
}
}
inT32 CLIST::length ( ) const

Definition at line 133 of file clst.cpp.

{ //count elements
CLIST_ITERATOR it(const_cast<CLIST*>(this));
inT32 count = 0;
#ifndef NDEBUG
if (!this)
NULL_OBJECT.error ("CLIST::length", ABORT, NULL);
#endif
for (it.mark_cycle_pt(); !it.cycled_list(); it.forward())
count++;
return count;
}
void CLIST::set_subtract ( int   comparatorconst void *, const void *,
bool  unique,
CLIST minuend,
CLIST subtrahend 
)

Definition at line 237 of file clst.cpp.

{
CLIST_ITERATOR m_it(minuend);
CLIST_ITERATOR s_it(subtrahend);
// Since both lists are sorted, finding the subtras that are not
// minus is a case of a parallel iteration.
for (m_it.mark_cycle_pt(); !m_it.cycled_list(); m_it.forward()) {
void* minu = m_it.data();
void* subtra = NULL;
if (!s_it.empty()) {
subtra = s_it.data();
while (!s_it.at_last() &&
comparator(&subtra, &minu) < 0) {
s_it.forward();
subtra = s_it.data();
}
}
if (subtra == NULL || comparator(&subtra, &minu) != 0)
add_sorted(comparator, unique, minu);
}
}
void CLIST::shallow_clear ( )

Definition at line 75 of file clst.cpp.

{ //destroy all links
CLIST_LINK *ptr;
CLIST_LINK *next;
#ifndef NDEBUG
if (!this)
NULL_OBJECT.error ("CLIST::shallow_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;
delete(ptr);
ptr = next;
}
}
}
void CLIST::shallow_copy ( CLIST from_list)
inline

Definition at line 103 of file clst.h.

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

Definition at line 99 of file clst.h.

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

Definition at line 155 of file clst.cpp.

{
CLIST_ITERATOR it(this);
void **base; //ptr array to sort
void **current;
inT32 i;
#ifndef NDEBUG
if (!this)
NULL_OBJECT.error ("CLIST::sort", ABORT, NULL);
#endif
/* Allocate an array of pointers, one per list element */
count = length ();
base = (void **) malloc (count * sizeof (void *));
/* 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 CLIST_ITERATOR
friend

Definition at line 72 of file clst.h.


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