Rev 170 | 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();void deleteItems();T *push_back(T *pItem);T *push_front(T *pItem);void pop_back();iterator insert(iterator itr, T *pItem);iterator insertAt(size_t idx, T* pItem);iterator begin() const;iterator end() const;T *first();T *next();T* front() const;T* back() const;bool empty() const;size_t size() const;T *get(size_t i) const;iterator remove(iterator itr);iterator removeAt(size_t idx);T* operator[](size_t idx);};///////////////////////////////////////////////////////////////////////////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>void CList<T>::deleteItems(){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>void CList<T>::pop_back(){_lItems->pop_back();}template <class T>typename CList<T>::iterator CList<T>::insert(CList<T>::iterator itr, T *pItem){return _lItems->insert(itr, pItem);}template <class T>typename CList<T>::iterator CList<T>::insertAt(size_t idx, T *pItem){return _lItems->insert(_lItems->begin() + idx, pItem);}template <class T>T *CList<T>::push_front(T *pItem){_lItems->insert(_lItems->begin(), pItem);return pItem;}template <class T>typename CList<T>::iterator CList<T>::begin() const{return _lItems->begin();}template <class T>typename CList<T>::iterator CList<T>::end() const{return _lItems->end();}template <class T>T* CList<T>::front() const{if (_lItems->empty()) return NULL;return _lItems->front();}template <class T>T* CList<T>::back() const{if (_lItems->empty()) return NULL;return _lItems->back();}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();}template <class T>T *CList<T>::get(size_t i) const{return (*_lItems)[i];}template <class T>typename CList<T>::iterator CList<T>::remove(CList<T>::iterator itr){return _lItems->erase(itr);}template <class T>typename CList<T>::iterator CList<T>::removeAt(size_t idx){return _lItems->erase(_lItems->begin() + idx);}template <class T>T* CList<T>::operator[](size_t idx){if(idx < _lItems->size())return _lItems[idx];return nullptr;}}//}#endif //__LIST_H__