Subversion Repositories spk

Rev

Rev 113 | Rev 121 | 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;
116 cycrow 36
 
37
		T *get(int i) const;
111 cycrow 38
	};
39
 
40
 
41
	///////////////////////////////////////////////////////////////////////////
42
 
43
	template<class T>
44
	CList<T>::CList(bool bDontClear) : _bDontClear(bDontClear)
45
	{
46
		_lItems = new std::vector<T *>();
47
		_pItr = _lItems->end();
48
	}
49
 
50
	template <class T>
51
	CList<T>::~CList()
52
	{
53
		clear();
54
		delete _lItems;
55
	}
56
 
57
	template <class T>
58
	void CList<T>::clear()
59
	{
60
		if ( !_bDontClear ) {
61
			for(std::vector<T *>::iterator itr = _lItems->begin(); itr != _lItems->end(); itr++) {
113 cycrow 62
				T *data = (*itr);
63
				delete (*itr);
111 cycrow 64
			}
65
		}
66
 
67
		_lItems->clear();
68
	}
69
 
70
	template <class T>
71
	T *CList<T>::push_back(T *pItem)
72
	{
73
		_lItems->push_back(pItem);
74
		return pItem;
75
	}
76
 
77
 
78
	template <class T>
112 cycrow 79
	typename CList<T>::iterator CList<T>::begin()
111 cycrow 80
	{
81
		return _lItems->begin();
82
	}
83
 
84
	template <class T>
112 cycrow 85
	typename CList<T>::iterator CList<T>::end()
111 cycrow 86
	{
87
		return _lItems->end();
88
	}
89
 
90
	template <class T>
91
	T *CList<T>::first()
92
	{
93
		if ( _lItems->empty() ) return NULL;
94
		_pItr = _lItems->begin();
95
		return *_pItr;
96
	}
97
 
98
	template <class T>
99
	T *CList<T>::next()
100
	{
101
		if ( _lItems->empty() ) return NULL;
102
		if ( _pItr == _lItems->end() ) return NULL;
103
		++_pItr;
104
		if ( _pItr == _lItems->end() ) return NULL;
105
		return *_pItr;
106
	}
107
 
108
	template <class T>
109
	bool CList<T>::empty() const
110
	{
111
		return _lItems->empty();
112
	}
112 cycrow 113
 
114
	template <class T>
115
	size_t CList<T>::size() const
116
	{
117
		return _lItems->size();
118
	}
116 cycrow 119
 
120
	template <class T>
121
	T *CList<T>::get(int i) const
122
	{
123
		return (*_lItems)[i];
124
	}
111 cycrow 125
}
126
//}
127
 
128
#endif //__LIST_H__