#include <assert.h> #include "array.h" Array::Array() { _size = 0; _current = 0; _stacksize = 0; } Array::Array(Array* oa) { _size = 0; _current = 0; _stacksize = 0; void* telem; int tc = oa->pos(); oa->reset(); while ( (telem = oa->next()) ) { push(telem); } oa->setPos(tc); } void Array::setPos(int np) { _current = np; } int Array::pos() { return _current; } int Array::length() { return _size; } void Array::reset() { _current = 0; } void* Array::current() { if ( _current < _size ) { return _data[_current]; } else { return 0; } } void* Array::next() { if ( _current < _size ) { _current++; return _data[_current-1]; } else { return 0; } } void Array::push(void* elem) { if ( _size >= _stacksize ) { _stacksize = _stacksize + 3; void** tdat = new void*[_stacksize]; for ( int i = 0; i < _size; i++ ) { tdat[i] = _data[i]; } if ( _size > 0 ) { delete[] _data; } _data = tdat; } _data[_size] = elem; _size++; } void* Array::pop() { _size--; if ( _current == _size ) { _current = _size-1; } return _data[_size]; } void* Array::get(int p) { assert(p>=0); assert(p<_size); return _data[p]; } void Array::set(int p, void* ne) { assert(p>=0); assert(p<_size); _data[p] = ne; } void Array::clear() { _size = 0; _current = 0; _stacksize = 0; delete[] _data; } void Array::operator+=(void* ne) { push(ne); } void*& Array::operator[](int p) { assert(p>=0); assert(p<_size); return _data[p]; } Array::~Array() { delete[] _data; }