3 // Copyright 1997-2007 by Christopher J. Madsen
\r
4 // (C) 2019 James Hammons
\r
6 // GUEmap is licensed under either version 2 of the GPL, or (at your option)
\r
7 // any later version. See LICENSE file for details.
\r
9 // Template class for dynamic array (based on STL vector)
\r
15 // CURRENTLY included by globals.h. !!! FIX !!!
\r
17 //#include "globals.h"
\r
18 typedef vector<uint8_t>::size_type VecSize;
\r
20 //typedef Array<MapRoom, RoomVec> RoomArray;
\r
21 //Type == MapRoom, TVec == RoomVec == vector<MapRoom *>
\r
23 //template <class Type, class TVec>
\r
31 RoomArray(RoomVec & v2) { v.swap(v2); }
\r
32 ~RoomArray() { RoomArray::removeAll(); }
\r
34 MapRoom & operator[](VecSize pos)
\r
36 ASSERT(pos < v.size());
\r
40 const MapRoom & operator[](VecSize pos) const
\r
42 ASSERT(pos < v.size());
\r
51 MapRoom * extract(VecSize pos)
\r
53 ASSERT(pos < v.size());
\r
54 MapRoom * r = v[pos];
\r
55 v.erase(v.begin() + pos);
\r
59 void extractAll(RoomVec & v2) { v2.clear(); v.swap(v2); }
\r
61 MapRoom * getPtr(VecSize pos)
\r
63 ASSERT(pos < v.size());
\r
67 const MapRoom * getPtr(VecSize pos) const
\r
69 ASSERT(pos < v.size());
\r
73 RoomVec & getVector()
\r
78 const RoomVec & getVector() const
\r
83 void append(MapRoom * obj)
\r
85 v.insert(v.end(), obj);
\r
88 void insert(VecSize pos, MapRoom * obj)
\r
90 ASSERT(pos <= v.size());
\r
91 v.insert(v.begin() + pos, obj);
\r
94 void remove(VecSize pos)
\r
96 ASSERT(pos < v.size());
\r
98 v.erase(v.begin() + pos);
\r
101 RoomVec::iterator remove(RoomVec::iterator itr)
\r
104 return v.erase(itr);
\r
109 RoomVec::iterator p = v.begin();
\r
111 while (p != v.end())
\r
117 void reserve(VecSize n)
\r
122 void resize(VecSize n)
\r
124 ASSERT(v.size() <= n);
\r
125 v.insert(v.end(), n - v.size(), NULL);
\r
128 VecSize size() const
\r
133 RoomArray & operator=(const RoomArray & source)
\r
135 if (this != &source)
\r
138 v.reserve(source.v.size());
\r
140 for(RoomVec::const_iterator e=source.v.begin(); e!=source.v.end(); e++)
\r
141 append(new MapRoom(**e));
\r
147 bool operator==(const RoomArray & x) const
\r
149 if (v.size() != x.v.size())
\r
152 for(RoomVec::const_iterator a=v.begin(), b=x.v.begin(); a!=v.end(); a++, b++)
\r
162 #endif // __ARRAY_H__
\r