aboutsummaryrefslogtreecommitdiff
path: root/tool_src/QvLib/QvPList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tool_src/QvLib/QvPList.cpp')
-rw-r--r--tool_src/QvLib/QvPList.cpp64
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;
+}