Rev 112 | Rev 121 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#ifndef __LIST_H__
#define __LIST_H__
#include "../spkdll.h"
#include <vector>
//namespace SPK {
namespace Utils {
template <class T>
class CList
{
public:
typedef typename std::vector<T *>::iterator iterator ;
private:
std::vector<T *> *_lItems;
bool _bDontClear;
typename std::vector<T *>::iterator _pItr;
public:
CList(bool bDontClear = false);
~CList();
void clear();
T *push_back(T *pItem);
iterator begin();
iterator end();
T *first();
T *next();
bool empty() const;
size_t size() const;
};
///////////////////////////////////////////////////////////////////////////
template<class T>
CList<T>::CList(bool bDontClear) : _bDontClear(bDontClear)
{
_lItems = new std::vector<T *>();
_pItr = _lItems->end();
}
template <class T>
CList<T>::~CList()
{
clear();
delete _lItems;
}
template <class T>
void CList<T>::clear()
{
if ( !_bDontClear ) {
for(std::vector<T *>::iterator itr = _lItems->begin(); itr != _lItems->end(); itr++) {
T *data = (*itr);
delete (*itr);
}
}
_lItems->clear();
}
template <class T>
T *CList<T>::push_back(T *pItem)
{
_lItems->push_back(pItem);
return pItem;
}
template <class T>
typename CList<T>::iterator CList<T>::begin()
{
return _lItems->begin();
}
template <class T>
typename CList<T>::iterator CList<T>::end()
{
return _lItems->end();
}
template <class T>
T *CList<T>::first()
{
if ( _lItems->empty() ) return NULL;
_pItr = _lItems->begin();
return *_pItr;
}
template <class T>
T *CList<T>::next()
{
if ( _lItems->empty() ) return NULL;
if ( _pItr == _lItems->end() ) return NULL;
++_pItr;
if ( _pItr == _lItems->end() ) return NULL;
return *_pItr;
}
template <class T>
bool CList<T>::empty() const
{
return _lItems->empty();
}
template <class T>
size_t CList<T>::size() const
{
return _lItems->size();
}
}
//}
#endif //__LIST_H__