Changeset - r9555:95ac8b32acff
[Not reviewed]
master
1 7 1
skidd13 - 16 years ago 2008-06-19 10:19:02
skidd13@openttd.org
(svn r13575) -Codechange: Move small vector to core since it fits better in there
-Codechange: convert smallvector from struct to class
9 files changed with 178 insertions and 176 deletions:
0 comments (0 inline, 0 general)
projects/openttd_vs80.vcproj
Show inline comments
 
@@ -1452,6 +1452,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\smallvec_type.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\sort_func.hpp"
 
				>
 
			</File>
 
@@ -2404,10 +2408,6 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\misc\smallvec.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\misc\str.hpp"
 
				>
 
			</File>
projects/openttd_vs90.vcproj
Show inline comments
 
@@ -1449,6 +1449,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\smallvec_type.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\sort_func.hpp"
 
				>
 
			</File>
 
@@ -2401,10 +2405,6 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\misc\smallvec.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\misc\str.hpp"
 
				>
 
			</File>
source.list
Show inline comments
 
@@ -288,6 +288,7 @@ signs_func.h
 
signs_type.h
 
slope_func.h
 
slope_type.h
 
core/smallvec_type.hpp
 
core/sort_func.hpp
 
sortlist_type.h
 
sound_func.h
 
@@ -552,7 +553,6 @@ misc/dbg_helpers.cpp
 
misc/dbg_helpers.h
 
misc/fixedsizearray.hpp
 
misc/hashtable.hpp
 
misc/smallvec.h
 
misc/str.hpp
 
misc/strapi.hpp
 

	
src/core/smallvec_type.hpp
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/** @file smallvec_type.hpp Simple vector class that allows allocating an item without the need to copy this->data needlessly. */
 

	
 
#ifndef SMALLVEC_TYPE_HPP
 
#define SMALLVEC_TYPE_HPP
 

	
 
#include "alloc_func.hpp"
 
#include "math_func.hpp"
 

	
 
/**
 
 * Simple vector template class.
 
 *
 
 * @note There are no asserts in the class so you have
 
 *       to care about that you grab an item which is
 
 *       inside the list.
 
 *
 
 * @param T The type of the items stored
 
 * @param S The steps of allocation
 
 */
 
template <typename T, uint S>
 
class SmallVector {
 
protected:
 
	T *data;       ///< The pointer to the first item
 
	uint items;    ///< The number of items stored
 
	uint capacity; ///< The avalible space for storing items
 

	
 
public:
 
	SmallVector() : data(NULL), items(0), capacity(0) { }
 

	
 
	~SmallVector()
 
	{
 
		free(this->data);
 
	}
 

	
 
	/**
 
	 * Remove all items from the list.
 
	 */
 
	void Clear()
 
	{
 
		/* In fact we just reset the item counter avoiding the need to
 
		 * probably reallocate the same amount of memory the list was
 
		 * previously using. */
 
		this->items = 0;
 
	}
 

	
 
	/**
 
	 * Compact the list down to the smallest block size boundary.
 
	 */
 
	void Compact()
 
	{
 
		uint capacity = Align(this->items, S);
 
		if (capacity >= this->capacity) return;
 

	
 
		this->capacity = capacity;
 
		this->data = ReallocT(this->data, this->capacity);
 
	}
 

	
 
	/**
 
	 * Append an item and return it.
 
	 */
 
	T *Append()
 
	{
 
		if (this->items == this->capacity) {
 
			this->capacity += S;
 
			this->data = ReallocT(this->data, this->capacity);
 
		}
 

	
 
		return &this->data[this->items++];
 
	}
 

	
 
	/**
 
	 * Get the number of items in the list.
 
	 */
 
	uint Length() const
 
	{
 
		return this->items;
 
	}
 

	
 
	/**
 
	 * Get the pointer to the first item (const)
 
	 *
 
	 * @return the pointer to the first item
 
	 */
 
	const T *Begin() const
 
	{
 
		return this->data;
 
	}
 

	
 
	/**
 
	 * Get the pointer to the first item
 
	 *
 
	 * @return the pointer to the first item
 
	 */
 
	T *Begin()
 
	{
 
		return this->data;
 
	}
 

	
 
	/**
 
	 * Get the pointer behind the last valid item (const)
 
	 *
 
	 * @return the pointer behind the last valid item
 
	 */
 
	const T *End() const
 
	{
 
		return &this->data[this->items];
 
	}
 

	
 
	/**
 
	 * Get the pointer behind the last valid item
 
	 *
 
	 * @return the pointer behind the last valid item
 
	 */
 
	T *End()
 
	{
 
		return &this->data[this->items];
 
	}
 

	
 
	/**
 
	 * Get the pointer to item "number" (const)
 
	 *
 
	 * @param index the position of the item
 
	 * @return the pointer to the item
 
	 */
 
	const T *Get(uint index) const
 
	{
 
		return &this->data[index];
 
	}
 

	
 
	/**
 
	 * Get the pointer to item "number"
 
	 *
 
	 * @param index the position of the item
 
	 * @return the pointer to the item
 
	 */
 
	T *Get(uint index)
 
	{
 
		return &this->data[index];
 
	}
 

	
 
	/**
 
	 * Get item "number" (const)
 
	 *
 
	 * @param index the positon of the item
 
	 * @return the item
 
	 */
 
	const T &operator[](uint index) const
 
	{
 
		return this->data[index];
 
	}
 

	
 
	/**
 
	 * Get item "number"
 
	 *
 
	 * @param index the positon of the item
 
	 * @return the item
 
	 */
 
	T &operator[](uint index)
 
	{
 
		return this->data[index];
 
	}
 
};
 

	
 
#endif /* SMALLVEC_TYPE_HPP */
src/fios.h
Show inline comments
 
@@ -6,7 +6,7 @@
 
#define FIOS_H
 

	
 
#include "strings_type.h"
 
#include "misc/smallvec.h"
 
#include "core/smallvec_type.hpp"
 

	
 
enum {
 
	/**
src/misc/smallvec.h
Show inline comments
 
deleted file
src/sortlist_type.h
Show inline comments
 
@@ -9,7 +9,7 @@
 
#include "core/bitmath_func.hpp"
 
#include "core/mem_func.hpp"
 
#include "core/sort_func.hpp"
 
#include "misc/smallvec.h"
 
#include "core/smallvec_type.hpp"
 
#include "date_type.h"
 

	
 
enum SortListFlags {
src/vehiclelist.h
Show inline comments
 
@@ -5,7 +5,7 @@
 
#ifndef VEHICLELIST_H
 
#define VEHICLELIST_H
 

	
 
#include "misc/smallvec.h"
 
#include "core/smallvec_type.hpp"
 

	
 
typedef SmallVector<const Vehicle *, 32> VehicleList;
 

	
src/viewport.cpp
Show inline comments
 
@@ -44,7 +44,7 @@
 
#include "settings_type.h"
 
#include "station_func.h"
 
#include "core/alloc_type.hpp"
 
#include "misc/smallvec.h"
 
#include "core/smallvec_type.hpp"
 
#include "window_func.h"
 
#include "tilehighlight_func.h"
 
#include "window_gui.h"
0 comments (0 inline, 0 general)