Subversion Repositories spk

Rev

Rev 121 | Rev 170 | 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);
121 cycrow 28
		T *push_front(T *pItem);
160 cycrow 29
		void pop_back();
111 cycrow 30
 
160 cycrow 31
		iterator insert(iterator itr, T *pItem);
32
		iterator insertAt(int idx, T* pItem);
33
 
112 cycrow 34
		iterator begin();
35
		iterator end();
111 cycrow 36
		T *first();
37
		T *next();
38
 
160 cycrow 39
		T* front() const;
40
		T* back() const;
41
 
111 cycrow 42
		bool empty() const;
112 cycrow 43
		size_t size() const;
116 cycrow 44
 
45
		T *get(int i) const;
121 cycrow 46
 
47
		iterator remove(iterator itr);
48
		iterator removeAt(int idx);
111 cycrow 49
	};
50
 
51
 
52
	///////////////////////////////////////////////////////////////////////////
53
 
54
	template<class T>
55
	CList<T>::CList(bool bDontClear) : _bDontClear(bDontClear)
56
	{
57
		_lItems = new std::vector<T *>();
58
		_pItr = _lItems->end();
59
	}
60
 
61
	template <class T>
62
	CList<T>::~CList()
63
	{
64
		clear();
65
		delete _lItems;
66
	}
67
 
68
	template <class T>
69
	void CList<T>::clear()
70
	{
71
		if ( !_bDontClear ) {
72
			for(std::vector<T *>::iterator itr = _lItems->begin(); itr != _lItems->end(); itr++) {
113 cycrow 73
				T *data = (*itr);
74
				delete (*itr);
111 cycrow 75
			}
76
		}
77
 
78
		_lItems->clear();
79
	}
80
 
81
	template <class T>
160 cycrow 82
	T* CList<T>::push_back(T* pItem)
111 cycrow 83
	{
84
		_lItems->push_back(pItem);
85
		return pItem;
86
	}
87
 
121 cycrow 88
	template <class T>
160 cycrow 89
	void CList<T>::pop_back()
90
	{
91
		_lItems->pop_back();
92
	}
93
 
94
	template <class T>
95
	typename CList<T>::iterator CList<T>::insert(CList<T>::iterator itr, T *pItem)
96
	{
97
		return _lItems->insert(itr, pItem);
98
	}
99
 
100
	template <class T>
101
	typename CList<T>::iterator CList<T>::insertAt(int idx, T *pItem)
102
	{
103
		return _lItems->insert(_lItems->begin() + idx, pItem);
104
	}
105
 
106
	template <class T>
121 cycrow 107
	T *CList<T>::push_front(T *pItem)
108
	{
109
		_lItems->insert(_lItems->begin(), pItem);
110
		return pItem;
111
	}
111 cycrow 112
 
113
	template <class T>
112 cycrow 114
	typename CList<T>::iterator CList<T>::begin()
111 cycrow 115
	{
116
		return _lItems->begin();
117
	}
118
 
119
	template <class T>
112 cycrow 120
	typename CList<T>::iterator CList<T>::end()
111 cycrow 121
	{
122
		return _lItems->end();
123
	}
124
 
125
	template <class T>
160 cycrow 126
	T* CList<T>::front() const
111 cycrow 127
	{
160 cycrow 128
		if (_lItems->empty()) return NULL;
129
		return _lItems->front();
130
	}
131
 
132
	template <class T>
133
	T* CList<T>::back() const
134
	{
135
		if (_lItems->empty()) return NULL;
136
		return _lItems->back();
137
	}
138
 
139
	template <class T>
140
	T* CList<T>::first()
141
	{
142
		if (_lItems->empty()) return NULL;
111 cycrow 143
		_pItr = _lItems->begin();
144
		return *_pItr;
145
	}
146
 
147
	template <class T>
148
	T *CList<T>::next()
149
	{
150
		if ( _lItems->empty() ) return NULL;
151
		if ( _pItr == _lItems->end() ) return NULL;
152
		++_pItr;
153
		if ( _pItr == _lItems->end() ) return NULL;
154
		return *_pItr;
155
	}
156
 
157
	template <class T>
158
	bool CList<T>::empty() const
159
	{
160
		return _lItems->empty();
161
	}
112 cycrow 162
 
163
	template <class T>
164
	size_t CList<T>::size() const
165
	{
166
		return _lItems->size();
167
	}
116 cycrow 168
 
169
	template <class T>
170
	T *CList<T>::get(int i) const
171
	{
172
		return (*_lItems)[i];
173
	}
121 cycrow 174
 
175
	template <class T>
176
	typename CList<T>::iterator CList<T>::remove(CList<T>::iterator itr)
177
	{
178
		return _lItems->erase(itr);
179
	}
180
 
181
	template <class T>
182
	typename CList<T>::iterator CList<T>::removeAt(int idx)
183
	{
184
		return _lItems->erase(_lItems->begin() + idx);
185
	}
111 cycrow 186
}
187
//}
188
 
189
#endif //__LIST_H__