src/misc/smallvec.h
branchNewGRF_ports
changeset 10211 c1391c8ed5c6
child 10455 22c441f5adf9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/misc/smallvec.h	Wed Apr 16 22:34:14 2008 +0000
@@ -0,0 +1,64 @@
+/* $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;
+	}
+
+	T *Begin()
+	{
+		return data;
+	}
+
+	const T *End() const
+	{
+		return &data[items];
+	}
+
+	T *End()
+	{
+		return &data[items];
+	}
+
+	const T *Get(size_t index) const
+	{
+		return &data[index];
+	}
+
+	T *Get(size_t index)
+	{
+		return &data[index];
+	}
+};
+
+#endif /* SMALLVEC_H */