Newer
Older
cg / sources / array.cpp
@ajaggi ajaggi on 26 Dec 2005 1 KB Changes:
#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;
}