Files
source/VFS/Interface/vfs_iterator_interface.h
T
Wanne 14750c6903 **********************************************************
** Big Maps Projects code (incl. Multiplayer v1.5 **
**********************************************************
- Merged Big Maps Project code from BMP+MP trunk (Revision: 3340)
o Complete SVN Revision history: https://81.169.133.124/source/ja2/branches/Wanne/JA2%201.13%20MP
- Before THIS merge, I made a branch of the existing 1.13 source
o SVN Branch: https://81.169.133.124/source/ja2/branches/JA2_rev.3336/src
- Removed old VS 6.0 and VS 2003 project and solutions files, because compilation is broken long time ago
- I will add VS 2010 projects and solution file in the next few days

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@3341 3b4a5df2-a311-0410-b5c6-a8a6f20db521
2010-02-28 18:38:52 +00:00

66 lines
1.2 KiB
C++

#ifndef _VFS_ITERATOR_INTERFACE_H_
#define _VFS_ITERATOR_INTERFACE_H_
namespace vfs
{
template<typename T>
class VFS_API TIterator
{
public:
class IImplementation
{
friend class TIterator<T>;
public:
virtual ~IImplementation() {};
virtual T* value() = 0;
virtual void next() = 0;
protected:
virtual IImplementation* clone() = 0;
};
public:
TIterator() : _obj(NULL), _iter_impl(NULL) {};
TIterator(IImplementation* impl) : _obj(NULL), _iter_impl(impl)
{
if(_iter_impl)
{
_obj = _iter_impl->value();
}
}
~TIterator()
{
if(_iter_impl) delete _iter_impl;
};
TIterator& operator=(TIterator const& t)
{
_obj = t._obj;
_iter_impl = NULL;
if(t._iter_impl)
{
_iter_impl = t._iter_impl->clone();
}
return *this;
}
//////////////////////////////
T* value() { return _obj; };
bool end() { return _obj == NULL; };
void next()
{
if(_iter_impl)
{
_iter_impl->next();
_obj = _iter_impl->value();
if(!_obj)
{
delete _iter_impl;
_iter_impl = NULL;
}
}
}
private:
T* _obj;
IImplementation* _iter_impl;
};
}
#endif // _VFS_ITERATOR_INTERFACE_H_