Files @ r9334:6d079081ec24
Branch filter:

Location: cpp/openttd-patchpack/source/src/misc/smallvec.h

belugas
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
Initial concept : TTDPatch (moreairpots), Initial code : Pasky
Thanks to BigBB (help coding), Smatz Skidd13 and frosch for bugcatches and advices
/* $Id$ */

/** @file smallvec.h Simple vector class that allows allocating an item without the need to copy data needlessly. */

#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 */