summaryrefslogtreecommitdiff
path: root/src/misc/smallvec.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/misc/smallvec.h')
-rw-r--r--src/misc/smallvec.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/misc/smallvec.h b/src/misc/smallvec.h
new file mode 100644
index 000000000..952261ae7
--- /dev/null
+++ b/src/misc/smallvec.h
@@ -0,0 +1,44 @@
+/* $Id$ */
+
+/* @file smallvec.h */
+
+#ifndef SMALLVEC_H
+#define SMALLVEC_H
+
+template <typename T, uint S> struct SmallVector {
+ T *data;
+ uint items;
+ uint capacity;
+
+ SmallVector() : data(NULL), items(0), capacity(0) { }
+
+ ~SmallVector()
+ {
+ free(data);
+ }
+
+ /**
+ * Append an item and return it.
+ */
+ T *Append()
+ {
+ if (items == capacity) {
+ capacity += S;
+ data = ReallocT(data, capacity);
+ }
+
+ return &data[items++];
+ }
+
+ const T *Begin() const
+ {
+ return data;
+ }
+
+ const T *End() const
+ {
+ return &data[items];
+ }
+};
+
+#endif /* SMALLVEC_H */