DCL 4.0
Loading...
Searching...
No Matches
__ARRAY.h
Go to the documentation of this file.
1#ifdef __DCL_INTERNAL__
2
3#if defined(__COMPILE_StringArray__)
4 #define THIS_NAME __szStringArray_h__
5 #define THIS_VALUE __T("dcl/__ARRAY.h/String")
6 #define ARRAY_T StringArray
7 #define ELEMENT_T String
8 #define CONST_ELEMENT_REF const String&
9 #define HAVE_CONSTRUCTOR 1
10#elif defined(__COMPILE_ByteStringArray__)
11 #define THIS_NAME __szByteStringArray_h__
12 #define THIS_VALUE __T("dcl/__ARRAY.h/ByteString")
13 #define ARRAY_T ByteStringArray
14 #define ELEMENT_T ByteString
15 #define CONST_ELEMENT_REF const ByteString&
16 #define HAVE_CONSTRUCTOR 1
17#elif defined(__COMPILE_PointerArray__)
18 #define THIS_NAME __szPointerArray_h__
19 #define THIS_VALUE __T("dcl/__ARRAY.h/void*")
20 #define ARRAY_T PointerArray
21 #define ELEMENT_T void*
22 #define CONST_ELEMENT_REF const void*
23 #define HAVE_CONSTRUCTOR 0
24#elif defined(__COMPILE_StringStringArray__)
25 #define THIS_NAME __szStringStringArray_h__
26 #define THIS_VALUE __T("dcl/__ARRAY.h/StringString")
27 #define ARRAY_T StringStringArray
28 #define ELEMENT_T StringString
29 #define CONST_ELEMENT_REF const StringString&
30 #define HAVE_CONSTRUCTOR 1
31#endif
32
33#if __DCL_HAVE_THIS_FILE__
34 static const char_t THIS_NAME[] = THIS_VALUE;
35 #undef __THIS_FILE__
36 #define __THIS_FILE__ THIS_NAME
37#endif
38
54class DCLCAPI ARRAY_T : public Object
55{
57public:
58 virtual String toString() const;
59
60public:
61 typedef const ELEMENT_T* ConstIterator;
62 typedef ELEMENT_T* Iterator;
63
64public:
65 virtual ~ARRAY_T();
66 // ~ARRAY_T();
67 ARRAY_T(size_t _size = 0);
68 ARRAY_T(const ARRAY_T& _src);
69 const ARRAY_T& operator=(const ARRAY_T& _src);
70
71 ConstIterator begin() const;
72 ConstIterator end() const;
74 Iterator end();
75
76 void clear();
77 void shrink();
78 void resize(size_t _size);
79
80 Iterator insert(Iterator _pos, CONST_ELEMENT_REF _element);
81 ARRAY_T& insert(size_t _index, CONST_ELEMENT_REF _element);
82 ARRAY_T& add(CONST_ELEMENT_REF _element);
83 ARRAY_T& add(const ARRAY_T& _src);
84
85 Iterator find(CONST_ELEMENT_REF _element);
86
87 Iterator erase(Iterator _pos);
88 Iterator erase(Iterator _first, Iterator _last);
89 ARRAY_T& erase(size_t _index);
90 ARRAY_T& erase(size_t _index, size_t _size);
91
92 size_t index(Iterator _pos) const;
93 size_t size() const;
94 bool isEmpty() const;
95
96 ELEMENT_T& operator[](size_t _index);
97 ELEMENT_T operator[](size_t _index) const;
98 ELEMENT_T* data() const;
99
100 size_t size(ConstIterator _first, ConstIterator _last) const;
101 size_t size(Iterator _first, Iterator _last) const;
102
103protected:
104 ELEMENT_T* __pData;
105
106 struct Buffer
107 {
108 size_t __size;
109 size_t __maxSize;
110 ELEMENT_T* data() { return (ELEMENT_T*) (this + 1); }
111 } ;
112
113 Buffer* __buf() const { return (Buffer*) __pData - 1; }
114 size_t& __size() const { return __buf()->__size; }
115 size_t& __maxSize() const { return __buf()->__maxSize; }
116
117#if HAVE_CONSTRUCTOR
118 void constructElements(ELEMENT_T* _pElements, size_t _size);
119 void destructElements(ELEMENT_T* _pElements, size_t _size);
120#endif
121};
122
124
125inline
128{
129 return (const ELEMENT_T*) __pData;
130}
131
132inline
133ARRAY_T::ConstIterator
135{
136 return (const ELEMENT_T*) __pData + size();
137}
138
139inline
140ARRAY_T::Iterator
142{
143 return __pData;
144}
145
146inline
147ARRAY_T::Iterator
149{
150 return __pData + size();
151}
152
153inline
154ARRAY_T&
155ARRAY_T::add(CONST_ELEMENT_REF _element)
156{
157 return insert(size(), _element);
158}
159
160inline
161ARRAY_T::Iterator
163{
164 __DCL_ASSERT_PARAM(begin() <= _pos);
165 __DCL_ASSERT_PARAM(_pos < end());
166#if 0
167 erase(_pos - begin(), 1);
168 return _pos;
169#endif
170 size_t index = _pos - begin();
171 erase(index, 1);
172 return __pData + index;
173}
174
175inline
176ARRAY_T::Iterator
178{
179 __DCL_ASSERT_PARAM(begin() <= _first);
180 __DCL_ASSERT_PARAM(_last <= end());
181 erase(_first - begin(), _last - _first);
182 return _first;
183}
184
185inline
186ARRAY_T&
187ARRAY_T::erase(size_t _index)
188{
189 __DCL_ASSERT_PARAM(_index < size());
190 return erase(_index, 1);
191}
192
193inline
194size_t
196{
198 return _pos - __pData;
199}
200
201inline
202size_t
204{
205 return __buf()->__size;;
206}
207
208inline
209bool
211{
212 return size() == 0;
213}
214
215inline
216ELEMENT_T&
217ARRAY_T::operator[] (size_t _index)
218{
219 __DCL_ASSERT_PARAM(_index < size());
220 return __pData[_index];
221}
222
223inline
224ELEMENT_T
225ARRAY_T::operator[] (size_t _index) const
226{
227 __DCL_ASSERT_PARAM(_index < size());
228 return __pData[_index];
229}
230
231inline
232ELEMENT_T*
234{
235 return __pData;
236}
237
238inline
239size_t
241{
242 __DCL_ASSERT_PARAM(_first <= _last);
243 return _last - _first;
244}
245
246inline
247size_t
248ARRAY_T::size(Iterator _first, Iterator _last) const
249{
250 __DCL_ASSERT_PARAM(_first <= _last);
251 return _last - _first;
252}
253
254#if __DCL_HAVE_THIS_FILE__
255 #undef __THIS_FILE__
256 #define __THIS_FILE__ __T(__FILE__)
257#endif
258
259#undef THIS_NAME
260#undef THIS_VALUE
261#undef ARRAY_T
262#undef ELEMENT_T
263#undef CONST_ELEMENT_REF
264#undef HAVE_CONSTRUCTOR
265
266#endif // __DCL_INTERNAL__
#define constructElements(_pElements, _size)
#define destructElements(_pElements, _size)
#define ARRAY_T
Definition __STRING.h:25
#define DCLCAPI
Definition Config.h:100
wchar_t char_t
Definition Config.h:275
#define __DCL_ASSERT_PARAM(expr)
Definition Object.h:384
#define DECLARE_CLASSINFO(class_name)
Definition Object.h:210
void CharsetConvertException *__fields clear()
ELEMENT_T * __pData
Definition __ARRAY.h:104
const ELEMENT_T * ConstIterator
Definition __ARRAY.h:56
void shrink()
Definition __ARRAY.cpp:151
size_t index(Iterator _pos) const
Definition __ARRAY.h:195
Iterator erase(Iterator _pos)
Definition __ARRAY.h:162
size_t size() const
Definition __ARRAY.h:203
bool isEmpty() const
Definition __ARRAY.h:210
void resize(size_t _size)
Definition __ARRAY.cpp:167
ELEMENT_T * Iterator
Definition __ARRAY.h:62
ARRAY_T & add(CONST_ELEMENT_REF _element)
Definition __ARRAY.h:155
ARRAY_T(size_t _size=0)
ELEMENT_T * data() const
Definition __ARRAY.h:233
Buffer * __buf() const
Definition __ARRAY.h:113
ELEMENT_T & operator[](size_t _index)
Definition __ARRAY.h:217
size_t & __size() const
Definition __ARRAY.h:114
ConstIterator end() const
Definition __ARRAY.h:134
Iterator insert(Iterator _pos, CONST_ELEMENT_REF _element)
Definition __ARRAY.cpp:214
Iterator find(CONST_ELEMENT_REF _element)
Definition __ARRAY.cpp:280
size_t & __maxSize() const
Definition __ARRAY.h:115
const ARRAY_T & operator=(const ARRAY_T &_src)
Definition __ARRAY.cpp:129
ConstIterator begin() const
Definition __ARRAY.h:127
Object()
Definition Object.cpp:183
virtual String toString() const
Definition Object.cpp:187
size_t __size
Definition __ARRAY.h:108
size_t __maxSize
Definition __ARRAY.h:109
ELEMENT_T * data()
Definition __ARRAY.h:110