version 1.17, 2002/07/19 21:18:23
|
version 1.18, 2002/07/19 23:00:25
|
|
|
#ifndef PEGASUS_ARRAY_T | #ifndef PEGASUS_ARRAY_T |
template<class PEGASUS_ARRAY_T> | template<class PEGASUS_ARRAY_T> |
#endif | #endif |
void Array<PEGASUS_ARRAY_T>::reserve(Uint32 capacity) |
void Array<PEGASUS_ARRAY_T>::reserveCapacity(Uint32 capacity) |
{ | { |
if (capacity > static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->capacity) | if (capacity > static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->capacity) |
{ | { |
|
|
void Array<PEGASUS_ARRAY_T>::grow(Uint32 size, const PEGASUS_ARRAY_T& x) | void Array<PEGASUS_ARRAY_T>::grow(Uint32 size, const PEGASUS_ARRAY_T& x) |
{ | { |
Uint32 oldSize = static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size; | Uint32 oldSize = static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size; |
reserve(oldSize + size); |
reserveCapacity(oldSize + size); |
| |
PEGASUS_ARRAY_T* p = static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data() + oldSize; | PEGASUS_ARRAY_T* p = static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data() + oldSize; |
Uint32 n = size; | Uint32 n = size; |
|
|
#endif | #endif |
void Array<PEGASUS_ARRAY_T>::append(const PEGASUS_ARRAY_T& x) | void Array<PEGASUS_ARRAY_T>::append(const PEGASUS_ARRAY_T& x) |
{ | { |
reserve(size() + 1); |
reserveCapacity(size() + 1); |
new (_data() + size()) PEGASUS_ARRAY_T(x); | new (_data() + size()) PEGASUS_ARRAY_T(x); |
static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size++; | static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size++; |
} | } |
|
|
#endif | #endif |
void Array<PEGASUS_ARRAY_T>::append(const PEGASUS_ARRAY_T* x, Uint32 size) | void Array<PEGASUS_ARRAY_T>::append(const PEGASUS_ARRAY_T* x, Uint32 size) |
{ | { |
reserve(this->size() + size); |
reserveCapacity(this->size() + size); |
CopyToRaw(_data() + this->size(), x, size); | CopyToRaw(_data() + this->size(), x, size); |
static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size += size; | static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size += size; |
} | } |
|
|
#endif | #endif |
void Array<PEGASUS_ARRAY_T>::prepend(const PEGASUS_ARRAY_T* x, Uint32 size) | void Array<PEGASUS_ARRAY_T>::prepend(const PEGASUS_ARRAY_T* x, Uint32 size) |
{ | { |
reserve(this->size() + size); |
reserveCapacity(this->size() + size); |
memmove(_data() + size, _data(), sizeof(PEGASUS_ARRAY_T) * this->size()); | memmove(_data() + size, _data(), sizeof(PEGASUS_ARRAY_T) * this->size()); |
CopyToRaw(_data(), x, size); | CopyToRaw(_data(), x, size); |
static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size += size; | static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size += size; |
|
|
if (pos > this->size()) | if (pos > this->size()) |
throw OutOfBounds(); | throw OutOfBounds(); |
| |
reserve(this->size() + size); |
reserveCapacity(this->size() + size); |
| |
Uint32 n = this->size() - pos; | Uint32 n = this->size() - pos; |
| |