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 | 7957bdde137db5d59dc39e01f08661ee8c768ebd (patch) | |
tree | 02110297b3c1fa89a7568aee43bffa20b609084a /src/misc | |
parent | 208dd15c9197db185c8a7f679f67d639649b8020 (diff) | |
download | openttd-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.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 */ |