LRAUV  revA
FlexArray.h
Go to the documentation of this file.
1 
9 #ifndef FLEXARRAY_H_
10 #define FLEXARRAY_H_
11 
12 #include <cstdio>
13 #include <typeinfo>
14 
23 {
24 public:
25 
26  FlexArrayBase( const bool deleteOnCleanup,
27  const unsigned int initialCapacity = 32,
28  const unsigned int maxCapacity = 16384 );
29 
30  virtual ~FlexArrayBase();
31 
32  void clear();
33 
34  int getMinIndex() const;
35 
36  int getMaxIndex() const;
37 
38  bool isEmpty() const;
39 
40  unsigned int size() const;
41 
42  void set( const unsigned int index, const void* item );
43 
44  int find( void* item ) const;
45 
46  void insert( const unsigned int index, void* item );
47 
48  void push( void* item );
49 
50  const void* peek( int index = -1 );
51 
52  const void* pop( int index = -1 );
53 
54 protected:
55 
56  virtual void freeItem( void* item );
57 
58  int getIndex( int index = -1 ) const;
59 
60  int resolveIndex( const unsigned int index );
61 
62  virtual void setArraySize( const unsigned int newSize )
63  {
64  setArraySizeBase( newSize );
65  }
66 
67  void setArraySizeBase( const unsigned int newSize );
68 
69  const unsigned int initialCapacity_;
70  unsigned int size_;
71  const bool deleteOnCleanup_;
72  const unsigned int maxCapacity_;
73  int minIndex_;
74  int maxIndex_;
75 
76  const void** array_;
77 
78 private:
79  // Note that the copy constructor below is private and not given a body.
80  // Any attempt to call it will return a compiler error.
81  FlexArrayBase( const FlexArrayBase &old ); // disallow copy constructor
82 
83 };
84 
92 template <typename T>
93 class FlexArray : public FlexArrayBase
94 {
95 public:
96  FlexArray( const bool deleteOnCleanup,
97  const unsigned int initialCapacity = 32,
98  const unsigned int maxCapacity = 16384 )
99  : FlexArrayBase( deleteOnCleanup, initialCapacity, maxCapacity ),
100  nullItem_( ( T )0 ),
101  tArray_( 0 ),
102  doArrayDelete_( false )
103  {
105  };
106 
108  {
109  // This duplicates the call in ~FlexarrayBase, but manages to use
110  // the local version of freeItem()
111  clear();
112  }
113 
114  void freeItem( void* item )
115  {
116  if( item )
117  {
118  if( doArrayDelete_ )
119  {
120  delete[]( T )item;
121  }
122  else
123  {
124  delete( T )item;
125  }
126  }
127  }
128 
129  void set( const unsigned int index, const T& item )
130  {
131  FlexArrayBase::set( index, ( void* ) item );
132  }
133 
134  const T& get( int index = -1 ) const
135  {
136  int itemIndex = FlexArrayBase::getIndex( index );
137  if( 0 > itemIndex )
138  {
139  return nullItem_;
140  }
141  return tArray_[ itemIndex ];
142  };
143 
144  T& operator[]( const unsigned int index )
145  {
146  int itemIndex = FlexArrayBase::resolveIndex( index );
147  return 0 > itemIndex ? nullItem_ : tArray_[ itemIndex ];
148  };
149 
150  int find( T item )
151  {
152  return FlexArrayBase::find( item );
153  }
154 
155  void insert( const unsigned int index, T item )
156  {
157  FlexArrayBase::insert( index, item );
158  }
159 
160  void push( T item )
161  {
162  FlexArrayBase::push( const_cast<void*>( ( const void* )item ) );
163  }
164 
165  T peek( int index = -1 )
166  {
167  const void* item = FlexArrayBase::peek( index );
168  return NULL == item ? nullItem_ : ( T )item;
169  }
170 
171  T pop( int index = -1 )
172  {
173  const void* item = FlexArrayBase::pop( index );
174  return NULL == item ? nullItem_ : ( T )item;
175  }
176 
177  T pop( T item )
178  {
179  int itemIndex = FlexArrayBase::find( item );
180  return 0 > itemIndex ? nullItem_ : pop( itemIndex );
181  }
182 
183  void setArraySize( const unsigned int newSize )
184  {
185  setArraySizeBase( newSize );
186  tArray_ = ( T* )array_;
187  }
188 
189  T* getArray()
190  {
191  return tArray_;
192  }
193 
194  void setDoArrayDelete( bool doArrayDelete )
195  {
196  doArrayDelete_ = doArrayDelete;
197  }
198 
199 protected:
200 
204 
205 private:
206  // Note that the copy constructor below is private and not given a body.
207  // Any attempt to call it will return a compiler error.
208  FlexArray( const FlexArray<T>& old ); // disallow copy constructor
209 
210 };
211 
212 #endif /*FLEXARRAY_H_*/
const void ** array_
Definition: FlexArray.h:76
virtual ~FlexArrayBase()
Definition: FlexArray.cpp:12
T & operator[](const unsigned int index)
Definition: FlexArray.h:144
virtual void freeItem(void *item)
Definition: FlexArray.cpp:35
void set(const unsigned int index, const T &item)
Definition: FlexArray.h:129
void push(T item)
Definition: FlexArray.h:160
bool doArrayDelete_
Definition: FlexArray.h:203
int minIndex_
Definition: FlexArray.h:73
~FlexArray()
Definition: FlexArray.h:107
void insert(const unsigned int index, T item)
Definition: FlexArray.h:155
bool isEmpty() const
Definition: FlexArray.cpp:64
const unsigned int initialCapacity_
Definition: FlexArray.h:69
void set(const unsigned int index, const void *item)
Definition: FlexArray.cpp:87
void insert(const unsigned int index, void *item)
Definition: FlexArray.cpp:109
unsigned int size_
Definition: FlexArray.h:70
T pop(int index=-1)
Definition: FlexArray.h:171
void freeItem(void *item)
Definition: FlexArray.h:114
const void * peek(int index=-1)
Definition: FlexArray.cpp:123
T * tArray_
Definition: FlexArray.h:202
int getMaxIndex() const
Definition: FlexArray.cpp:47
void setDoArrayDelete(bool doArrayDelete)
Definition: FlexArray.h:194
unsigned int size() const
Definition: FlexArray.cpp:69
int getIndex(int index=-1) const
Definition: FlexArray.cpp:96
T pop(T item)
Definition: FlexArray.h:177
Simple class providing a flexible size array of void*.
Definition: FlexArray.h:22
int find(void *item) const
Definition: FlexArray.cpp:52
virtual void setArraySize(const unsigned int newSize)
Definition: FlexArray.h:62
const unsigned int maxCapacity_
Definition: FlexArray.h:72
int find(T item)
Definition: FlexArray.h:150
T nullItem_
Definition: FlexArray.h:201
void setArraySizeBase(const unsigned int newSize)
Definition: FlexArray.cpp:190
Simple class providing a flexible size array of pointers.
Definition: DataReader.h:19
FlexArray(const bool deleteOnCleanup, const unsigned int initialCapacity=32, const unsigned int maxCapacity=16384)
Definition: FlexArray.h:96
int getMinIndex() const
Definition: FlexArray.cpp:42
T * getArray()
Definition: FlexArray.h:189
int maxIndex_
Definition: FlexArray.h:74
const bool deleteOnCleanup_
Definition: FlexArray.h:71
const void * pop(int index=-1)
Definition: FlexArray.cpp:140
int resolveIndex(const unsigned int index)
Definition: FlexArray.cpp:164
void setArraySize(const unsigned int newSize)
Definition: FlexArray.h:183
FlexArrayBase(const bool deleteOnCleanup, const unsigned int initialCapacity=32, const unsigned int maxCapacity=16384)
Definition: FlexArray.cpp:74
void push(void *item)
Definition: FlexArray.cpp:118
void clear()
Definition: FlexArray.cpp:22
T peek(int index=-1)
Definition: FlexArray.h:165