DCL 4.0
Loading...
Searching...
No Matches
Array< ELEMENT > Class Template Reference

#include <ArrayT.h>

Inheritance diagram for Array< ELEMENT >:
Object

Classes

struct  Buffer

Public Member Functions

virtual ~Array ()
 Array (size_t _size=0)
 Array (const Array< ELEMENT > &_src)
const Array< ELEMENT > & operator= (const Array< ELEMENT > &_src)
ConstIterator begin () const
ConstIterator end () const
Iterator begin ()
Iterator end ()
void clear ()
void shrink ()
void resize (size_t _size)
Iterator insert (Iterator _pos, const ELEMENT &_element)
Array< ELEMENT > & insert (size_t _index, const ELEMENT &_element)
Array< ELEMENT > & add (const ELEMENT &_element)
Array< ELEMENT > & add (const Array< ELEMENT > &_src)
Iterator find (const ELEMENT &_element)
Iterator erase (Iterator _pos)
Iterator erase (Iterator _first, Iterator _last)
Array< ELEMENT > & erase (size_t _index)
Array< ELEMENT > & erase (size_t _index, size_t _size)
size_t index (Iterator _pos) const
size_t size () const
bool isEmpty () const
ELEMENT & operator[] (size_t _index)
ELEMENT operator[] (size_t _index) const
ELEMENT * data () const
size_t size (ConstIterator _first, ConstIterator _last) const
size_t size (Iterator _first, Iterator _last) const
Public Member Functions inherited from Object
virtual String toString () const
virtual void destroy ()
String className () const
bool isInstanceOf (const std::type_info &typeinfo) const
virtual const std::type_info & typeInfo () const

Protected Member Functions

Buffer__buf () const
size_t & __size () const
size_t & __maxSize () const
void constructElements (ELEMENT *_pElements, size_t _size)
void destructElements (ELEMENT *_pElements, size_t _size)
Protected Member Functions inherited from Object
virtual ~Object ()
 Object ()

Protected Attributes

ELEMENT * __pData

Detailed Description

template<typename ELEMENT>
class Array< ELEMENT >

ELEMENT에 대한 배열을 표현한다.

Definition at line 41 of file ArrayT.h.

Constructor & Destructor Documentation

◆ ~Array()

template<typename ELEMENT>
Array< ELEMENT >::~Array ( )
virtual

Definition at line 324 of file ArrayT.h.

325{
326 clear();
327 free(__buf());
328}
Definition ArrayT.h:42
void clear()
Definition ArrayT.h:346
Buffer * __buf() const
Definition ArrayT.h:99

◆ Array() [1/2]

template<typename ELEMENT>
Array< ELEMENT >::Array ( size_t _size = 0)

Definition at line 310 of file ArrayT.h.

311{
312 __pData = NULL;
313 resize(_size);
314}
ELEMENT * __pData
Definition ArrayT.h:90
void resize(size_t _size)
Definition ArrayT.h:374

◆ Array() [2/2]

template<typename ELEMENT>
Array< ELEMENT >::Array ( const Array< ELEMENT > & _src)

Definition at line 317 of file ArrayT.h.

318{
319 __pData = NULL;
320 *this = _src;
321}

Member Function Documentation

◆ __buf()

template<typename ELEMENT>
Buffer * Array< ELEMENT >::__buf ( ) const
inlineprotected

Definition at line 99 of file ArrayT.h.

99{ return (Buffer*) __pData - 1; }

◆ __maxSize()

template<typename ELEMENT>
size_t & Array< ELEMENT >::__maxSize ( ) const
inlineprotected

Definition at line 101 of file ArrayT.h.

101{ return __buf()->__maxSize; }
size_t __maxSize
Definition ArrayT.h:95

◆ __size()

template<typename ELEMENT>
size_t & Array< ELEMENT >::__size ( ) const
inlineprotected

Definition at line 100 of file ArrayT.h.

100{ return __buf()->__size; }
size_t __size
Definition ArrayT.h:94

◆ add() [1/2]

template<typename ELEMENT>
Array< ELEMENT > & Array< ELEMENT >::add ( const Array< ELEMENT > & _src)

Definition at line 464 of file ArrayT.h.

465{
466 if (_src.size() > 0)
467 {
468 size_t newSize = size() + _src.size();
469 if (__maxSize() < newSize)
470 {
471 Buffer* buf = (Buffer*) realloc(__buf(), sizeof(Buffer) + newSize * sizeof(ELEMENT));
472 // FIXME!
473 // if (buf == NULL)
474 // throw new BadAllocException();
476
477 __pData = buf->data();
478 }
479
481 for(size_t i = 0; i < _src.size(); i++)
482 __pData[size() + i] = _src.__pData[i];
483
484 __maxSize() = __size() = newSize;
485 }
486 return *this;
487}
#define constructElements(_pElements, _size)
#define __DCL_ASSERT(expr)
Definition Object.h:371
ELEMENT * data() const
Definition ArrayT.h:231
size_t size() const
Definition ArrayT.h:197
size_t & __maxSize() const
Definition ArrayT.h:101
size_t & __size() const
Definition ArrayT.h:100

◆ add() [2/2]

template<typename ELEMENT>
Array< ELEMENT > & Array< ELEMENT >::add ( const ELEMENT & _element)
inline

Definition at line 144 of file ArrayT.h.

145{
146 return insert(size(), _element);
147}
Iterator insert(Iterator _pos, const ELEMENT &_element)
Definition ArrayT.h:422

◆ begin() [1/2]

template<typename ELEMENT>
Array< ELEMENT >::Iterator Array< ELEMENT >::begin ( )
inline

Definition at line 128 of file ArrayT.h.

129{
130 return __pData;
131}

◆ begin() [2/2]

template<typename ELEMENT>
Array< ELEMENT >::ConstIterator Array< ELEMENT >::begin ( ) const
inline

Definition at line 112 of file ArrayT.h.

113{
114 return (const ELEMENT*) __pData;
115}

◆ clear()

template<typename ELEMENT>
void Array< ELEMENT >::clear ( )

Definition at line 346 of file ArrayT.h.

347{
348 if (size() > 0)
349 {
351 __size() = 0;
352 }
353}
#define destructElements(_pElements, _size)

◆ constructElements()

template<typename ELEMENT>
void Array< ELEMENT >::constructElements ( ELEMENT * _pElements,
size_t _size )
inlineprotected

Definition at line 282 of file ArrayT.h.

283{
284 for(; _size; _size--, _pElements++)
285 {
286#if __DCL_HAVE_ALLOC_DEBUG
287#undef new
288#endif
289
290 new((void*)_pElements) ELEMENT;
291
292#if __DCL_HAVE_ALLOC_DEBUG
293#define new __DCL_DEBUG_NEW
294#endif
295 }
296}

◆ data()

template<typename ELEMENT>
ELEMENT * Array< ELEMENT >::data ( ) const
inline

Definition at line 231 of file ArrayT.h.

232{
233 return __pData;
234}

◆ destructElements()

template<typename ELEMENT>
void Array< ELEMENT >::destructElements ( ELEMENT * _pElements,
size_t _size )
inlineprotected

Definition at line 301 of file ArrayT.h.

302{
303 for( ; _size; _size--, _pElements++)
304 {
305 _pElements->~ELEMENT();
306 }
307}

◆ end() [1/2]

template<typename ELEMENT>
Array< ELEMENT >::Iterator Array< ELEMENT >::end ( )
inline

Definition at line 136 of file ArrayT.h.

137{
138 return __pData + size();
139}

◆ end() [2/2]

template<typename ELEMENT>
Array< ELEMENT >::ConstIterator Array< ELEMENT >::end ( ) const
inline

Definition at line 120 of file ArrayT.h.

121{
122 return (const ELEMENT*) __pData + size();
123}

◆ erase() [1/4]

template<typename ELEMENT>
Array< ELEMENT >::Iterator Array< ELEMENT >::erase ( Iterator _first,
Iterator _last )
inline

Definition at line 168 of file ArrayT.h.

169{
172 erase(_first - begin(), _last - _first);
173 return _first;
174}
#define __DCL_ASSERT_PARAM(expr)
Definition Object.h:384
Iterator erase(Iterator _pos)
Definition ArrayT.h:152
ConstIterator end() const
Definition ArrayT.h:120
ConstIterator begin() const
Definition ArrayT.h:112

◆ erase() [2/4]

template<typename ELEMENT>
Array< ELEMENT >::Iterator Array< ELEMENT >::erase ( Iterator _pos)
inline

Definition at line 152 of file ArrayT.h.

153{
156#if 0
157 erase(_pos - begin(), 1);
158 return _pos;
159#endif
160 size_t index = _pos - begin();
161 erase(index, 1);
162 return __pData + index;
163}
size_t index(Iterator _pos) const
Definition ArrayT.h:188

◆ erase() [3/4]

template<typename ELEMENT>
Array< ELEMENT > & Array< ELEMENT >::erase ( size_t _index)
inline

Definition at line 179 of file ArrayT.h.

180{
182 return erase(_index, 1);
183}

◆ erase() [4/4]

template<typename ELEMENT>
Array< ELEMENT > & Array< ELEMENT >::erase ( size_t _index,
size_t _size )

Definition at line 504 of file ArrayT.h.

505{
507 if (_size > 0)
508 {
510 if (_index + _size < size())
511 memmove((void*)(__pData + _index), (const void*)(__pData + _index + _size),
512 (size() - (_index + _size)) * sizeof(ELEMENT));
513 __size() -= _size;
514 }
515 return *this;
516}

◆ find()

template<typename ELEMENT>
Array< ELEMENT >::Iterator Array< ELEMENT >::find ( const ELEMENT & _element)

Definition at line 491 of file ArrayT.h.

492{
493 Iterator it = begin();
494 for ( ; it != end(); it++)
495 {
496 if (*it == _element)
497 break;
498 }
499 return it;
500}

◆ index()

template<typename ELEMENT>
size_t Array< ELEMENT >::index ( Iterator _pos) const
inline

Definition at line 188 of file ArrayT.h.

189{
191 return _pos - __pData;
192}

◆ insert() [1/2]

template<typename ELEMENT>
Array< ELEMENT >::Iterator Array< ELEMENT >::insert ( Iterator _pos,
const ELEMENT & _element )

Definition at line 422 of file ArrayT.h.

423{
426
427 size_t index = _pos - __pData;
429 return __pData + index + 1;
430}

◆ insert() [2/2]

template<typename ELEMENT>
Array< ELEMENT > & Array< ELEMENT >::insert ( size_t _index,
const ELEMENT & _element )

Definition at line 434 of file ArrayT.h.

435{
438
439 size_t newSize = size() + 1;
440 if (__maxSize() < newSize)
441 {
442 Buffer* buf = (Buffer*) realloc(__buf(), sizeof(Buffer) + newSize * sizeof(ELEMENT));
443 // FIXME!
444 // if (buf == NULL)
445 // throw new BadAllocException();
447
449 __pData = buf->data();
450
452 memmove((void*)(__pData + _index + 1), (const void*)(__pData + _index),
453 sizeof(ELEMENT) * (buf->__size - _index));
454 }
455
457 __size() = newSize;
459 return *this;
460}
#define __DCL_ASSERT_HANDLE(expr)
Definition Object.h:383

◆ isEmpty()

template<typename ELEMENT>
bool Array< ELEMENT >::isEmpty ( ) const
inline

Definition at line 205 of file ArrayT.h.

206{
207 return size() == 0;
208}

◆ operator=()

template<typename ELEMENT>
const Array< ELEMENT > & Array< ELEMENT >::operator= ( const Array< ELEMENT > & _src)

Definition at line 333 of file ArrayT.h.

334{
335 if (&_src != this)
336 {
337 resize(_src.size());
338 for(size_t i = 0; i < _src.size(); i++)
339 __pData[i] = _src.__pData[i];
340 }
341 return *this;
342}

◆ operator[]() [1/2]

template<typename ELEMENT>
ELEMENT & Array< ELEMENT >::operator[] ( size_t _index)
inline

Definition at line 213 of file ArrayT.h.

214{
216 return __pData[_index];
217}

◆ operator[]() [2/2]

template<typename ELEMENT>
ELEMENT Array< ELEMENT >::operator[] ( size_t _index) const
inline

Definition at line 222 of file ArrayT.h.

223{
225 return __pData[_index];
226}

◆ resize()

template<typename ELEMENT>
void Array< ELEMENT >::resize ( size_t _size)

Definition at line 374 of file ArrayT.h.

375{
376 if (__pData != NULL)
377 {
378 if (size() == _size)
379 return;
380
381 if (size() > _size)
382 {
384 __size() = _size;
385 return;
386 }
387 }
388
389 if (__pData == NULL || __maxSize() < _size)
390 {
391 Buffer* buf = NULL;
392 if (__pData == NULL)
393 {
394 buf = (Buffer*) malloc(sizeof(Buffer) + _size * sizeof(ELEMENT));
395 // FIXME!
396 // if (buf == NULL)
397 // throw new BadAllocException();
399
400 buf->__size = 0;
401 }
402 else
403 {
404 buf = (Buffer*) realloc(__buf(), sizeof(Buffer) + _size * sizeof(ELEMENT));
405 // FIXME!
406 // if (buf == NULL)
407 // throw new BadAllocException();
409 }
410
412 __pData = buf->data();
413 memset((void*)(__pData + buf->__size), 0, (_size - buf->__size) * sizeof(ELEMENT));
414 }
415
417 __size() = _size;
418}

◆ shrink()

template<typename ELEMENT>
void Array< ELEMENT >::shrink ( )

Definition at line 357 of file ArrayT.h.

358{
359 if (size() <__maxSize())
360 {
361 Buffer* buf = (Buffer*) realloc(__buf(), sizeof(Buffer) + size() * sizeof(ELEMENT));
362 // FIXME!
363 // if (buf == NULL)
364 // throw new BadAllocException();
366
368 __pData = buf->data();
369 }
370}

◆ size() [1/3]

template<typename ELEMENT>
size_t Array< ELEMENT >::size ( ) const
inline

Definition at line 197 of file ArrayT.h.

198{
199 return __buf()->__size;;
200}

◆ size() [2/3]

template<typename ELEMENT>
size_t Array< ELEMENT >::size ( ConstIterator _first,
ConstIterator _last ) const
inline

Definition at line 239 of file ArrayT.h.

240{
242 return _last - _first;
243}

◆ size() [3/3]

template<typename ELEMENT>
size_t Array< ELEMENT >::size ( Iterator _first,
Iterator _last ) const
inline

Definition at line 248 of file ArrayT.h.

249{
251 return _last - _first;
252}

Member Data Documentation

◆ __pData

template<typename ELEMENT>
ELEMENT* Array< ELEMENT >::__pData
protected

Definition at line 90 of file ArrayT.h.


The documentation for this class was generated from the following file: