Subversion Repositories spk

Rev

Rev 111 | Rev 113 | Go to most recent revision | Details | Compare with Previous | 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
 
112 cycrow 10
 
111 cycrow 11
	template <class T>
112 cycrow 12
	class CList
111 cycrow 13
	{
112 cycrow 14
	public:
15
		typedef typename std::vector<T *>::iterator iterator ;
16
 
111 cycrow 17
	private:
18
		std::vector<T *> *_lItems;
19
		bool			 _bDontClear;
20
		typename std::vector<T *>::iterator _pItr;
21
 
22
	public:
23
		CList(bool bDontClear = false);
24
		~CList();
25
 
26
		void clear();
27
		T *push_back(T *pItem);
28
 
112 cycrow 29
		iterator begin();
30
		iterator end();
111 cycrow 31
		T *first();
32
		T *next();
33
 
34
		bool empty() const;
112 cycrow 35
		size_t size() const;
111 cycrow 36
	};
37
 
38
 
39
	///////////////////////////////////////////////////////////////////////////
40
 
41
	template<class T>
42
	CList<T>::CList(bool bDontClear) : _bDontClear(bDontClear)
43
	{
44
		_lItems = new std::vector<T *>();
45
		_pItr = _lItems->end();
46
	}
47
 
48
	template <class T>
49
	CList<T>::~CList()
50
	{
51
		clear();
52
		delete _lItems;
53
	}
54
 
55
	template <class T>
56
	void CList<T>::clear()
57
	{
58
		if ( !_bDontClear ) {
59
			for(std::vector<T *>::iterator itr = _lItems->begin(); itr != _lItems->end(); itr++) {
60
				delete *itr;
61
			}
62
		}
63
 
64
		_lItems->clear();
65
	}
66
 
67
	template <class T>
68
	T *CList<T>::push_back(T *pItem)
69
	{
70
		_lItems->push_back(pItem);
71
		return pItem;
72
	}
73
 
74
 
75
	template <class T>
112 cycrow 76
	typename CList<T>::iterator CList<T>::begin()
111 cycrow 77
	{
78
		return _lItems->begin();
79
	}
80
 
81
	template <class T>
112 cycrow 82
	typename CList<T>::iterator CList<T>::end()
111 cycrow 83
	{
84
		return _lItems->end();
85
	}
86
 
87
	template <class T>
88
	T *CList<T>::first()
89
	{
90
		if ( _lItems->empty() ) return NULL;
91
		_pItr = _lItems->begin();
92
		return *_pItr;
93
	}
94
 
95
	template <class T>
96
	T *CList<T>::next()
97
	{
98
		if ( _lItems->empty() ) return NULL;
99
		if ( _pItr == _lItems->end() ) return NULL;
100
		++_pItr;
101
		if ( _pItr == _lItems->end() ) return NULL;
102
		return *_pItr;
103
	}
104
 
105
	template <class T>
106
	bool CList<T>::empty() const
107
	{
108
		return _lItems->empty();
109
	}
112 cycrow 110
 
111
	template <class T>
112
	size_t CList<T>::size() const
113
	{
114
		return _lItems->size();
115
	}
111 cycrow 116
}
117
//}
118
 
119
#endif //__LIST_H__