Subversion Repositories spk

Rev

Rev 112 | Rev 116 | 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++) {
113 cycrow 60
				T *data = (*itr);
61
				delete (*itr);
111 cycrow 62
			}
63
		}
64
 
65
		_lItems->clear();
66
	}
67
 
68
	template <class T>
69
	T *CList<T>::push_back(T *pItem)
70
	{
71
		_lItems->push_back(pItem);
72
		return pItem;
73
	}
74
 
75
 
76
	template <class T>
112 cycrow 77
	typename CList<T>::iterator CList<T>::begin()
111 cycrow 78
	{
79
		return _lItems->begin();
80
	}
81
 
82
	template <class T>
112 cycrow 83
	typename CList<T>::iterator CList<T>::end()
111 cycrow 84
	{
85
		return _lItems->end();
86
	}
87
 
88
	template <class T>
89
	T *CList<T>::first()
90
	{
91
		if ( _lItems->empty() ) return NULL;
92
		_pItr = _lItems->begin();
93
		return *_pItr;
94
	}
95
 
96
	template <class T>
97
	T *CList<T>::next()
98
	{
99
		if ( _lItems->empty() ) return NULL;
100
		if ( _pItr == _lItems->end() ) return NULL;
101
		++_pItr;
102
		if ( _pItr == _lItems->end() ) return NULL;
103
		return *_pItr;
104
	}
105
 
106
	template <class T>
107
	bool CList<T>::empty() const
108
	{
109
		return _lItems->empty();
110
	}
112 cycrow 111
 
112
	template <class T>
113
	size_t CList<T>::size() const
114
	{
115
		return _lItems->size();
116
	}
111 cycrow 117
}
118
//}
119
 
120
#endif //__LIST_H__