diff options
author | peter1138 <peter1138@openttd.org> | 2008-04-16 19:01:09 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2008-04-16 19:01:09 +0000 |
commit | efdf8b8c8a9b9260de260367041503923fad9673 (patch) | |
tree | 02110297b3c1fa89a7568aee43bffa20b609084a /src/misc/smallvec.h | |
parent | 47365fee116b8c8efb8296bbb26f513c2756578d (diff) | |
download | openttd-efdf8b8c8a9b9260de260367041503923fad9673.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/smallvec.h')
-rw-r--r-- | src/misc/smallvec.h | 44 |
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 */ |