Subversion Repositories spk

Rev

Rev 112 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
111 cycrow 1
#ifndef __LIST_H__
2
#define __LIST_H__
3
 
4
#include "../spkdll.h"
5
#include <vector>
6
 
7
//namespace SPK {
8
namespace Utils {
9
 
10
	template <class T>
11
	class SPKEXPORT CList
12
	{
13
	private:
14
		std::vector<T *> *_lItems;
15
		bool			 _bDontClear;
16
		typename std::vector<T *>::iterator _pItr;
17
 
18
	public:
19
		CList(bool bDontClear = false);
20
		~CList();
21
 
22
		void clear();
23
		T *push_back(T *pItem);
24
 
25
		typename std::vector<T *>::iterator begin();
26
		typename std::vector<T *>::iterator end();
27
		T *first();
28
		T *next();
29
 
30
		bool empty() const;
31
	};
32
 
33
 
34
	///////////////////////////////////////////////////////////////////////////
35
 
36
	template<class T>
37
	CList<T>::CList(bool bDontClear) : _bDontClear(bDontClear)
38
	{
39
		_lItems = new std::vector<T *>();
40
		_pItr = _lItems->end();
41
	}
42
 
43
	template <class T>
44
	CList<T>::~CList()
45
	{
46
		clear();
47
		delete _lItems;
48
	}
49
 
50
	template <class T>
51
	void CList<T>::clear()
52
	{
53
		if ( !_bDontClear ) {
54
			for(std::vector<T *>::iterator itr = _lItems->begin(); itr != _lItems->end(); itr++) {
55
				delete *itr;
56
			}
57
		}
58
 
59
		_lItems->clear();
60
	}
61
 
62
	template <class T>
63
	T *CList<T>::push_back(T *pItem)
64
	{
65
		_lItems->push_back(pItem);
66
		return pItem;
67
	}
68
 
69
 
70
	template <class T>
71
	typename std::vector<T *>::iterator CList<T>::begin()
72
	{
73
		return _lItems->begin();
74
	}
75
 
76
	template <class T>
77
	typename std::vector<T *>::iterator CList<T>::end()
78
	{
79
		return _lItems->end();
80
	}
81
 
82
	template <class T>
83
	T *CList<T>::first()
84
	{
85
		if ( _lItems->empty() ) return NULL;
86
		_pItr = _lItems->begin();
87
		return *_pItr;
88
	}
89
 
90
	template <class T>
91
	T *CList<T>::next()
92
	{
93
		if ( _lItems->empty() ) return NULL;
94
		if ( _pItr == _lItems->end() ) return NULL;
95
		++_pItr;
96
		if ( _pItr == _lItems->end() ) return NULL;
97
		return *_pItr;
98
	}
99
 
100
	template <class T>
101
	bool CList<T>::empty() const
102
	{
103
		return _lItems->empty();
104
	}
105
}
106
//}
107
 
108
#endif //__LIST_H__