1
//========================================================================
5
// Copyright 2001-2003 Glyph & Cog, LLC
7
//========================================================================
12
#ifdef USE_GCC_PRAGMAS
18
//------------------------------------------------------------------------
20
//------------------------------------------------------------------------
25
// Create an empty list.
28
// Create an empty list with space for <size1> elements.
31
// Destructor - does not free pointed-to objects.
36
// Get the number of elements.
37
int getLength() { return length; }
39
//----- ordered list support
41
// Return the <i>th element.
42
// Assumes 0 <= i < length.
43
void *get(int i) { return data[i]; }
45
// Append an element to the end of the list.
48
// Append another list to the end of this one.
49
void append(GooList *list);
51
// Insert an element at index <i>.
52
// Assumes 0 <= i <= length.
53
void insert(int i, void *p);
55
// Deletes and returns the element at index <i>.
56
// Assumes 0 <= i < length.
59
// Sort the list accoring to the given comparison function.
60
// NB: this sorts an array of pointers, so the pointer args need to
61
// be double-dereferenced.
62
void sort(int (*cmp)(const void *ptr1, const void *ptr2));
66
// Set allocation increment to <inc>. If inc > 0, that many
67
// elements will be allocated every time the list is expanded.
68
// If inc <= 0, the list will be doubled in size.
69
void setAllocIncr(int incA) { inc = incA; }
76
void **data; // the list elements
77
int size; // size of data array
78
int length; // number of elements on list
79
int inc; // allocation increment
82
#define deleteGooList(list, T) \
84
GooList *_list = (list); \
87
for (_i = 0; _i < _list->getLength(); ++_i) { \
88
delete (T*)_list->get(_i); \