diff options
Diffstat (limited to 'tool_src/QvLib/QvPList.cpp')
| -rw-r--r-- | tool_src/QvLib/QvPList.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tool_src/QvLib/QvPList.cpp b/tool_src/QvLib/QvPList.cpp new file mode 100644 index 0000000..6872428 --- /dev/null +++ b/tool_src/QvLib/QvPList.cpp @@ -0,0 +1,64 @@ +#include <QvPList.h> + +#define DEFAULT_INITIAL_SIZE 4 + +QvPList::QvPList() +{ + ptrs = NULL; + nPtrs = ptrsSize = 0; + + setSize(0); +} + +QvPList::~QvPList() +{ + if (ptrs != NULL) + delete [] ptrs; +} + +int +QvPList::find(const void *ptr) const +{ + int i; + + for (i = 0; i < nPtrs; i++) + if (ptrs[i] == ptr) + return(i); + + return -1; +} + +void +QvPList::remove(int which) +{ + int i; + + for (i = which; i < nPtrs - 1; i++) + ptrs[i] = ptrs[i + 1]; + + setSize(nPtrs - 1); +} + +void +QvPList::expand(int size) +{ + void **newPtrs; + int i; + + if (ptrsSize == 0) + ptrsSize = DEFAULT_INITIAL_SIZE; + + while (size > ptrsSize) { + ptrsSize *= 2; + } + + newPtrs = (void **) new uintptr_t[ptrsSize]; + + if (ptrs != NULL) { + for (i = 0; i < nPtrs; i++) + newPtrs[i] = ptrs[i]; + delete [] ptrs; + } + + ptrs = newPtrs; +} |
