summaryrefslogtreecommitdiff
path: root/src/misc
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2008-04-16 19:01:09 +0000
committerpeter1138 <peter1138@openttd.org>2008-04-16 19:01:09 +0000
commit7957bdde137db5d59dc39e01f08661ee8c768ebd (patch)
tree02110297b3c1fa89a7568aee43bffa20b609084a /src/misc
parent208dd15c9197db185c8a7f679f67d639649b8020 (diff)
downloadopenttd-7957bdde137db5d59dc39e01f08661ee8c768ebd.tar.xz
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
Diffstat (limited to 'src/misc')
-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 */