|
cgma
|
#include <SDLList.hpp>
Public Member Functions | |
| SDLList (int size) | |
| SDLList (const SDLList ©_from) | |
| SDLList (const DLList ©_from) | |
| virtual | ~SDLList () |
| SDLList & | operator= (const SDLList &) |
| virtual void | merge_unique (DLList &merge_list, int merge_list_unique) |
| SetDynamicMemoryAllocation(memoryManager) protected void | insert_link_first (void *new_item) |
| void | append_link (void *newBody) |
| void * | extract_link () |
| void * | change_item_to (void *newBody) |
| void | sort_list () |
| CubitBoolean | move_to_item_sorted (void *value) |
| void | insert_item_sorted (void *value, void *new_item) |
| void * | move_to_and_remove_item_sorted (void *value) |
| void | set_sorted_flag (const int sorted_flag) |
| CubitBoolean | where_is_item_sorted (void *value, int &item_index) |
Public Attributes | |
| int(* | compare_order_obj )(void *object_1, void *object_2) |
| int(* | compare_order )(void *object_1, void *object_2) |
| int(* | compare_equal )(void *object_1, void *object_2) |
Private Member Functions | |
| void | binary_search (int *min_location, int *max_location, void *item) const |
Static Private Attributes | |
| static MemoryManager | memoryManager |
Definition at line 42 of file SDLList.hpp.
| SDLList::SDLList | ( | int | size | ) |
Definition at line 19 of file SDLList.cpp.
: DLList( increment ) {}
| SDLList::SDLList | ( | const SDLList & | copy_from | ) |
Definition at line 23 of file SDLList.cpp.
: DLList(from) { listIsSorted = from.listIsSorted; }
| SDLList::SDLList | ( | const DLList & | copy_from | ) |
Definition at line 29 of file SDLList.cpp.
: DLList(from) { listIsSorted = CUBIT_FALSE; }
| SDLList::~SDLList | ( | ) | [virtual] |
Definition at line 34 of file SDLList.cpp.
{
}
| void SDLList::append_link | ( | void * | newBody | ) | [inline] |
Reimplemented from DLList.
Definition at line 161 of file SDLList.hpp.
{
assert(new_item != NULL);
// see if the list must be lengthened
if ( itemCount == listLength )
lengthen_list();
listArray[itemCount++] = new_item;
}
| void SDLList::binary_search | ( | int * | min_location, |
| int * | max_location, | ||
| void * | item | ||
| ) | const [private] |
Definition at line 143 of file SDLList.cpp.
{
// sort the list if necessary and initialize binary search parameters
assert( listIsSorted );
*min_location = 0;
*max_location = itemCount - 1;
int bracket_width = *max_location;
int compare_location = itemCount >> 1;
// bracket the location (binary search)
while(bracket_width > 1)
{
if ((*compare_order)(item, listArray[compare_location]))
{
*min_location = compare_location;
bracket_width = *max_location - *min_location;
compare_location += (bracket_width >> 1);
}
else
{
*max_location = compare_location;
bracket_width = *max_location - *min_location;
compare_location -= (bracket_width >> 1);
}
}
// if there are duplicate entries in the list, bracket them with min_location
// and max_location
while ( *min_location > 0 && (*compare_equal)(item, listArray[*min_location-1]))
(*min_location)--;
// (max_location already backets the item)
}
| void * SDLList::change_item_to | ( | void * | newBody | ) |
Reimplemented from DLList.
Definition at line 77 of file SDLList.cpp.
{
listIsSorted = CUBIT_FALSE;
return DLList::change_item_to(new_item);
}
| void * SDLList::extract_link | ( | ) |
Reimplemented from DLList.
Definition at line 70 of file SDLList.cpp.
{
listIsSorted = CUBIT_FALSE;
return DLList::extract_link();
}
| void SDLList::insert_item_sorted | ( | void * | value, |
| void * | new_item | ||
| ) |
Definition at line 242 of file SDLList.cpp.
{
assert(new_item != NULL);
// if entries exist then find insertion index
if ( itemCount > 0)
{
// perform the binary search and set index to the min_location
int min_location, max_location;
if (!listIsSorted)
{
sort_list();
}
binary_search(&min_location, &max_location, value);
index = min_location;
// test for special cases (insert first or last)
if (index == 0)
{
// if new_items value < first (ascending) or new_items value > first
// (descending) then insert as first item (index = -1)
if (!(*compare_order)(value, listArray[index]))
{
index--;
}
}
if (index == (itemCount - 2))
{
// if new_items value > last (ascending) or new_items value < last
// (descending) then insert as last item (index = itemCount - 1)
if ((*compare_order)(value, listArray[index + 1]))
{
index++;
}
}
}
// insert new_item
insert_link(new_item);
listIsSorted = CUBIT_TRUE;
}
| void SDLList::insert_link_first | ( | void * | new_item | ) |
Reimplemented from DLList.
Definition at line 54 of file SDLList.cpp.
{
DLList::insert_link_first(new_item);
listIsSorted = CUBIT_FALSE;
}
| void SDLList::merge_unique | ( | DLList & | merge_list, |
| int | merge_list_unique | ||
| ) | [virtual] |
Reimplemented from DLList.
Definition at line 47 of file SDLList.cpp.
{
DLList::merge_unique(merge_list, merge_list_unique);
listIsSorted = CUBIT_FALSE;
}
| void * SDLList::move_to_and_remove_item_sorted | ( | void * | value | ) |
Definition at line 293 of file SDLList.cpp.
{
if (move_to_item_sorted(value))
return cut_link();
else
return (void*) NULL;
}
| CubitBoolean SDLList::move_to_item_sorted | ( | void * | value | ) |
Definition at line 183 of file SDLList.cpp.
{
int item_index;
CubitBoolean item_exists = where_is_item_sorted( value, item_index );
index = item_index; // always
return item_exists;
}
Definition at line 302 of file SDLList.cpp.
{
if (this != &from) {
DLList::operator=(from);
}
return *this;
}
| void SDLList::set_sorted_flag | ( | const int | sorted_flag | ) | [inline] |
Definition at line 172 of file SDLList.hpp.
{
listIsSorted = sorted_flag;
}
| void SDLList::sort_list | ( | ) |
Definition at line 87 of file SDLList.cpp.
{
listIsSorted = CUBIT_TRUE;
if (itemCount > 1)
{
int mid = (itemCount >> 1) + 1;
int ir = itemCount;
void* temp_element = NULL;
while(CUBIT_TRUE)
{
if (mid > 1)
{
mid--;
temp_element = listArray[mid - 1];
}
else
{
ir--;
temp_element = listArray[ir];
listArray[ir] = listArray[0];
if (ir == 1)
{
listArray[0] = temp_element;
return;
}
}
int i = mid;
int j = mid + mid;
while (j <= ir)
{
if (j < ir)
{
if ((*compare_order_obj)(listArray[j], listArray[j - 1])) j++;
}
if ((*compare_order_obj)(listArray[j - 1], temp_element))
{
listArray[i - 1] = listArray[j - 1];
i = j;
j += j;
}
else
{
j = ir + 1;
}
}
listArray[i - 1] = temp_element;
}
}
}
| CubitBoolean SDLList::where_is_item_sorted | ( | void * | value, |
| int & | item_index | ||
| ) |
Definition at line 196 of file SDLList.cpp.
{
// if entries exist then find insertion index
if ( 0 == itemCount ) {
insert_index = 0;
return CUBIT_FALSE;
}
if (!listIsSorted)
{
sort_list();
}
// perform the binary search
int min_location, max_location;
binary_search(&min_location, &max_location, value);
// if item occupies a place in the list then min_location and/or
// max_location specifies the location ... otherwise item was not found
if ((*compare_equal)(value, listArray[min_location]))
{
insert_index = min_location;
return CUBIT_TRUE;
}
else if ((*compare_equal)(value, listArray[max_location]))
{
insert_index = max_location;
return CUBIT_TRUE;
}
// else not found,
insert_index = min_location;
// is it beyond the end?
if (itemCount == max_location ) {
if ((*compare_order)(value, listArray[max_location]))
insert_index = itemCount;
}
return CUBIT_FALSE;
}
| int(* SDLList::compare_equal)(void *object_1, void *object_2) |
Definition at line 133 of file SDLList.hpp.
| int(* SDLList::compare_order)(void *object_1, void *object_2) |
Definition at line 132 of file SDLList.hpp.
| int(* SDLList::compare_order_obj)(void *object_1, void *object_2) |
Definition at line 131 of file SDLList.hpp.
MemoryManager SDLList::memoryManager [static, private] |
Reimplemented from DLList.
Definition at line 152 of file SDLList.hpp.