diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2026-08-24 11:16:07 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2026-08-24 11:16:07 +0200 |
| commit | c068f22329d5cc722622a2183bbb22eef2093df7 (patch) | |
| tree | 12d56c1aede67988a55e241364606bfbb4dba933 /tool_src/QvLib/QvPList.cpp | |
| download | openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.tar.xz openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.zip | |
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; +} |
