template <class DATA>
class dataiterator
{
	datafile<DATA>			&_manager;
	stack<long>				_prev;

	long					_pos;
	datafile<DATA>::RECORD	_rec;
public:
	dataiterator(long,datafile<DATA> &);
	~dataiterator(){};

	DATA data() const { return _rec.data; };
	bool next();
	bool prev();
	void last();
};

template <class DATA>
dataiterator<DATA>::dataiterator(long start,datafile<DATA> &file):_pos(start),_manager(file)
{
	_manager.get_record(_pos,_rec);
}

template <class DATA>
bool dataiterator<DATA>::next()
{
	if ( !_rec.next )
		return false;

	_prev.push(_pos);
	_pos = _rec.next;
	_manager.get_record(_pos,_rec);

	return true;
}

template <class DATA>
bool dataiterator<DATA>::prev()
{
	if ( _prev.empty() )
		return false;

	_pos = _prev.pop();
	_manager.get_record(_pos,_rec);

	return true;
}

template <class DATA>
void dataiterator<DATA>::last()
{
	while( next() )
		;
}