16#include <initializer_list>
29template <
class T, u
int32_t STATICBUFFERLEN = 1>
70 for (uint32_t i = 0; i <
size; i++)
72 m_vector[i] = values[i];
89 if (reserveSize > m_reservedSize)
91 resizeVector(reserveSize);
100 vect.reserve(m_vectorSize);
101 for (uint32_t i = 0; i < m_vectorSize; i++)
102 vect.push_back(m_vector[i]);
114 return m_vectorSize == 0;
121 if (index >= m_vectorSize)
124 return m_vector[index];
129 if (m_vectorSize != other.m_vectorSize)
132 for (uint32_t i = 0; i < m_vectorSize; i++)
134 if (m_vector[i] != other.m_vector[i])
142 return !(*
this == other);
147 if (index >= m_vectorSize)
150 return m_vector[index];
166 return m_vector[m_vectorSize - 1];
174 return m_vector[m_vectorSize - 1];
188 for (uint32_t i = 0, x = m_vectorSize - 1; i < x; ++i, --x)
190 T cache = m_vector[i];
191 m_vector[i] = m_vector[x];
198 if (newSize == m_vectorSize)
201 if (newSize == 0 && m_vector)
205 else if (newSize > m_vectorSize && newSize <= m_reservedSize && m_vector)
207 for (uint32_t i = m_vectorSize; i < newSize; i++)
208 new (m_vector + i) T();
210 else if (newSize < m_vectorSize && m_vector)
212 for (uint32_t i = newSize; i < m_vectorSize; i++)
217 uint32_t reserveSize = newSize;
218 if (newSize > m_vectorSize)
220 reserveSize = m_vectorSize * 3 / 2;
221 if (reserveSize < newSize)
222 reserveSize = newSize;
225 if (reserveSize > 0 && reserveSize < STATICBUFFERLEN)
227 reserveSize = STATICBUFFERLEN;
230 resizeVector(reserveSize);
231 m_reservedSize = reserveSize;
232 if (newSize > m_vectorSize)
234 for (uint32_t i = m_vectorSize; i < newSize; i++)
235 new (m_vector + i) T();
238 m_vectorSize = newSize;
244 m_vector[m_vectorSize - 1] = obj;
249 uint32_t startPos = m_vectorSize;
251 for (uint32_t i = 0; i < items.
size(); ++i)
253 m_vector[i + startPos] = items[i];
257 void insert(uint32_t index,
const T& obj)
259 if (index > m_vectorSize)
262 if (index == m_vectorSize)
269 for (uint32_t i = m_vectorSize - 1; i > index; i--)
271 m_vector[i] = m_vector[i - 1];
273 m_vector[index] = obj;
279 for (uint32_t i = 0; i < items.
size(); ++i)
281 insert(index++, items[i]);
287 for (uint32_t i = 0; i < m_vectorSize; i++)
296 if (index >= m_vectorSize)
298 for (uint32_t i = index + 1; i < m_vectorSize; i++)
299 m_vector[i - 1] = m_vector[i];
307 for (uint32_t i = 0; i < m_vectorSize; i++)
309 if (m_vector[i] == obj)
320 for (uint32_t i = 0; i < m_vectorSize; i++)
322 if (m_vector[i] == obj)
338 return Iterator(
this, m_vectorSize);
353 for (uint32_t i = 0; i < m_vectorSize; i++)
355 if (m_vector[i] == obj)
364 for (uint32_t i = 0; i < m_vectorSize; i++)
366 if (m_vector[i] == obj)
384 uint32_t newSize = incoming.
size();
386 if (newSize != m_vectorSize)
393 for (uint32_t i = 0; i < newSize; i++)
395 m_vector[i] = incoming[i];
399 void assign(
const std::vector<T>& incoming)
401 uint32_t newSize = (uint32_t)incoming.size();
403 if (newSize != m_vectorSize)
410 for (uint32_t i = 0; i < newSize; i++)
412 m_vector[i] = incoming[i];
416 void assign(
const std::initializer_list<T>& incoming)
418 uint32_t newSize = (uint32_t)incoming.size();
420 if (newSize != m_vectorSize)
430 for (T element : incoming)
432 m_vector[i] = element;
438 void resizeVector(uint32_t newSize)
441 if (newSize > 0 && STATICBUFFERLEN > 0 && newSize < STATICBUFFERLEN)
443 newSize = STATICBUFFERLEN;
446 if (newSize == m_reservedSize)
451 T* newVect =
nullptr;
454 if (newSize == STATICBUFFERLEN)
456 newVect = (T*)m_staticVector;
460 newVect = (T*)m_allocator.allocate(
sizeof(T) * newSize);
463 uint32_t cpSz = newSize > m_vectorSize ? m_vectorSize : newSize;
464 for (uint32_t i = 0; i < cpSz; i++)
465 new (newVect + i) T(m_vector[i]);
469 for (uint32_t i = 0; i < m_vectorSize; i++)
471 if (m_vector != (T*)m_staticVector)
473 m_allocator.deallocate(m_vector);
477 m_reservedSize = newSize;
482 uint64_t m_staticVector[(
sizeof(T) * STATICBUFFERLEN + 7) / 8];
483 uint32_t m_vectorSize;
484 uint32_t m_reservedSize;
490template <
class T, u
int32_t STATICBUFFERLEN = 1>
506 m_vector = incoming.m_vector;
507 m_index = incoming.m_index;
513 return (m_vector != other.m_vector || m_index != other.m_index);
517 return m_vector == other.m_vector && m_index == other.m_index;
525 return (*m_vector)[m_index];
533 return &(*m_vector)[m_index];
575 return m_index < m_vector->size();
581 || (m_index >= m_vector->size())
586 return (*m_vector)[m_index];
594template <
class T, u
int32_t STATICBUFFERLEN = 1>
615 m_vector = incoming.m_vector;
616 m_index = incoming.m_index;
622 return (m_vector != other.m_vector) || (m_index != other.m_index);
627 return (m_vector == other.m_vector) && (m_index == other.m_index);
636 return (*m_vector)[m_index];
645 return &(*m_vector)[m_index];
673 return m_index < m_vector->size();
679 || (m_index >= m_vector->size())
684 return (*m_vector)[m_index];
Definition edlvector.h:596
const T & operator*() const
Definition edlvector.h:630
void moveNext()
Definition edlvector.h:666
bool operator!=(const CEDLVectorConstIterator &other) const
Definition edlvector.h:620
bool operator==(const CEDLVectorConstIterator &other) const
Definition edlvector.h:625
CEDLVectorConstIterator(const CEDLVectorConstIterator &other)
Definition edlvector.h:605
uint32_t getIndex() const
Definition edlvector.h:661
bool hasCurrentValue() const
Definition edlvector.h:671
const T * operator->() const
Definition edlvector.h:639
CEDLVectorConstIterator operator++(int)
Definition edlvector.h:654
T currentValue() const
Definition edlvector.h:676
const CEDLVectorConstIterator & operator++()
Definition edlvector.h:648
CEDLVectorConstIterator(const CEDLVectorIterator< T, STATICBUFFERLEN > &other)
Definition edlvector.h:609
CEDLVectorConstIterator(const CEDLVector< T, STATICBUFFERLEN > *vector=nullptr, uint32_t index=0)
Definition edlvector.h:601
CEDLVectorConstIterator & operator=(const CEDLVectorConstIterator &incoming)
Definition edlvector.h:613
Definition edlvector.h:31
T & operator[](uint32_t index) const
Definition edlvector.h:145
CEDLVectorConstIterator< IDOMImagePtr, 1 > ConstIterator
Definition edlvector.h:34
CEDLVector(const std::initializer_list< T > &incoming)
Definition edlvector.h:50
ConstIterator find(const T &obj) const
Definition edlvector.h:351
T & last() const
Definition edlvector.h:169
T & operator[](uint32_t index)
Definition edlvector.h:119
void append(const T &obj)
Definition edlvector.h:241
void insert(uint32_t index, const T &obj)
Definition edlvector.h:257
CEDLVector(uint32_t size, const T values[])
Definition edlvector.h:66
CEDLVector & operator=(const CEDLVector &incoming)
Definition edlvector.h:177
void reserve(uint32_t reserveSize)
Definition edlvector.h:87
ConstIterator end() const
Definition edlvector.h:346
T & last()
Definition edlvector.h:161
bool contains(const T &obj) const
Definition edlvector.h:318
bool empty() const
Definition edlvector.h:112
void insert(uint32_t index, const CEDLVector &items)
Definition edlvector.h:277
ConstIterator begin() const
Definition edlvector.h:341
const T * data() const
Definition edlvector.h:153
void fill(const T &obj)
Definition edlvector.h:285
uint32_t size() const
Definition edlvector.h:107
Iterator find(const T &obj)
Definition edlvector.h:362
virtual ~CEDLVector()
Definition edlvector.h:76
void erase(uint32_t index)
Definition edlvector.h:294
uint32_t indexOf(const T &obj) const
Definition edlvector.h:305
Iterator begin()
Definition edlvector.h:331
Iterator end()
Definition edlvector.h:336
void append(const CEDLVector &items)
Definition edlvector.h:247
CEDLVector(const std::vector< T > &incoming)
Definition edlvector.h:44
bool operator==(const CEDLVector &other) const
Definition edlvector.h:127
CEDLVector(const CEDLVector &incoming)
Definition edlvector.h:38
void resize(uint32_t newSize)
Definition edlvector.h:196
bool operator!=(const CEDLVector &other) const
Definition edlvector.h:140
std::vector< T > toVector()
Definition edlvector.h:96
void clear()
Definition edlvector.h:81
CEDLVectorIterator< IDOMImagePtr, 1 > Iterator
Definition edlvector.h:33
void reverse()
Definition edlvector.h:183
CEDLVector(uint32_t size=0)
Definition edlvector.h:57
Definition edlvector.h:492
CEDLVectorIterator(CEDLVector< T, STATICBUFFERLEN > *vector=nullptr, uint32_t index=0)
Definition edlvector.h:497
bool hasCurrentValue() const
Definition edlvector.h:573
const CEDLVectorIterator & operator++()
Definition edlvector.h:535
CEDLVectorIterator & operator=(const CEDLVectorIterator &incoming)
Definition edlvector.h:504
uint32_t getIndex() const
Definition edlvector.h:547
const CEDLVectorIterator operator++(int)
Definition edlvector.h:540
T & operator*()
Definition edlvector.h:519
bool operator!=(const CEDLVectorIterator &other) const
Definition edlvector.h:511
bool operator==(const CEDLVectorIterator &other) const
Definition edlvector.h:515
void moveNext()
Definition edlvector.h:568
T * operator->()
Definition edlvector.h:527
CEDLVectorIterator(const CEDLVectorIterator &other)
Definition edlvector.h:500
T currentValue() const
Definition edlvector.h:578
Definition edlallocator.h:25
#define _BEGIN_EDL_NAMESPACE
Definition edlnamespaces.h:75
#define _END_EDL_NAMESPACE
Definition edlnamespaces.h:76
EDL "standard" types including known bit-length signed and unsigned integer type[def]s and definition...
#define EDL_API
Definition edltypes.h:95
_BEGIN_EDL_NAMESPACE EDL_API void throwVectorError()