66 lines
1.1 KiB
C++
66 lines
1.1 KiB
C++
|
#ifndef _VECTOR_HPP
|
||
|
#define _VECTOR_HPP
|
||
|
|
||
|
//
|
||
|
// Excruciatingly simple vector-of-pointers class. Easy & useful.
|
||
|
// No support for addition of elements anywhere but at the end of the
|
||
|
// list, nor for removal of elements. Does not delete (or interpret
|
||
|
// in any way) its contents.
|
||
|
//
|
||
|
class Vector {
|
||
|
public:
|
||
|
Vector();
|
||
|
int add(void* p);
|
||
|
void* get(int i);
|
||
|
void set(int i, void* p);
|
||
|
int size();
|
||
|
private:
|
||
|
void realloc();
|
||
|
|
||
|
int _nelem;
|
||
|
int _sz;
|
||
|
void** _array;
|
||
|
};
|
||
|
|
||
|
inline Vector::Vector()
|
||
|
{
|
||
|
_nelem = 0;
|
||
|
_sz = 0;
|
||
|
_array = 0;
|
||
|
}
|
||
|
|
||
|
inline int Vector::add(void* p)
|
||
|
{
|
||
|
if(_nelem == _sz)
|
||
|
realloc();
|
||
|
_array[_sz] = p;
|
||
|
return _sz++;
|
||
|
}
|
||
|
|
||
|
inline void* Vector::get(int i)
|
||
|
{
|
||
|
return _array[i];
|
||
|
}
|
||
|
|
||
|
inline void Vector::set(int i, void* p)
|
||
|
{
|
||
|
_array[i] = p;
|
||
|
}
|
||
|
|
||
|
inline int Vector::size()
|
||
|
{
|
||
|
return _sz;
|
||
|
}
|
||
|
|
||
|
inline void Vector::realloc()
|
||
|
{
|
||
|
_nelem = 2*_nelem + 1;
|
||
|
void** array = new void*[_nelem];
|
||
|
for(int i=0; i<_sz; i++)
|
||
|
array[i] = _array[i];
|
||
|
delete[] _array;
|
||
|
_array = array;
|
||
|
}
|
||
|
|
||
|
#endif // _VECTOR_HPP
|