File: vec.h

package info (click to toggle)
exult 0.98rc1-2
  • links: PTS
  • area: contrib
  • in suites: woody
  • size: 6,924 kB
  • ctags: 8,928
  • sloc: cpp: 83,768; sh: 7,643; ansic: 4,328; makefile: 890; yacc: 618; lex: 255; xml: 19
file content (99 lines) | stat: -rw-r--r-- 2,262 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
 *  Copyright (C) 2000-2001  The Exult Team
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Library General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef VEC_H
#define VEC_H

#include	<vector>

template <class T>
class Exult_vector : public std::vector<T>
{
private:
	typedef	std::vector<T>	baseClass;
	typedef typename		baseClass::size_type       size_type;
public:
	Exult_vector<T>() : baseClass()
		{}
	Exult_vector<T>(size_type n) : baseClass()
		{ reserve(n); }

#ifndef MACOS /* should be something like PROPER_STD_CPP_LIB or so */
	T& at(int i) { return (*this)[i]; }
#endif
	void put(int i, T& v)		// Set i'th entry.
		{
			if (i >= size())
				{
				insert(begin() + size(), i - size(), 0);
				push_back(v);
				}
			else
				(*this)[i] = v;
		}
	int put(T& v)			// Put in a free spot & return it.
		{
			int i = find(0);
			if (i < 0)
				i = size();
			put(i, v);
			return (i);
		}
	size_type	find( const T& obj ) const
		{
			size_type pos = 0;
			for (const T *X = &*begin(); X != &*end(); ++X, ++pos)
				{
				if( *X == obj )
					return pos;
				}
			return -1;
		}

	size_type	append( const T& obj )
		{
			push_back( obj );
			return size() - 1;
		}

	void		remove( const T& obj )
		{
#if __GNUG__ > 2
			for(typename std::vector<T>::iterator X = begin(); X != end(); ++X)
#else
			for(T *X = begin(); X != end(); ++X)
#endif
				if( *X == obj )
				{
					erase(X);
					return;
				}
		}
};


class	Game_object;
class	Egg_object;
class	Actor;

typedef	Exult_vector<Game_object*>	Game_object_vector;
typedef	Exult_vector<Egg_object*>	Egg_vector;
typedef	Exult_vector<Actor*>		Actor_vector;


#endif