From 7957bdde137db5d59dc39e01f08661ee8c768ebd Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 16 Apr 2008 19:01:09 +0000 Subject: (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. --- src/misc/smallvec.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/misc/smallvec.h (limited to 'src/misc') 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 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 */ -- cgit v1.2.3-54-g00ecf