15#include <initializer_list>
28template <
class T, u
int32_t STATICBUFFERLEN = 1>
69 for (uint32_t i = 0; i <
size; i++)
71 m_vector[i] = values[i];
88 if (reserveSize > m_reservedSize)
90 resizeVector(reserveSize);
99 vect.reserve(m_vectorSize);
100 for (uint32_t i = 0; i < m_vectorSize; i++)
101 vect.push_back(m_vector[i]);
113 return m_vectorSize == 0;
120 if (index >= m_vectorSize)
123 return m_vector[index];
128 if (m_vectorSize != other.m_vectorSize)
131 for (uint32_t i = 0; i < m_vectorSize; i++)
133 if (m_vector[i] != other.m_vector[i])
141 return !(*
this == other);
146 if (index >= m_vectorSize)
149 return m_vector[index];
157 return m_vector[m_vectorSize - 1];
165 return m_vector[m_vectorSize - 1];
179 for (uint32_t i = 0, x = m_vectorSize - 1; i < x; ++i, --x)
181 T cache = m_vector[i];
182 m_vector[i] = m_vector[x];
189 if (newSize == m_vectorSize)
192 if (newSize == 0 && m_vector)
196 else if (newSize > m_vectorSize && newSize <= m_reservedSize && m_vector)
198 for (uint32_t i = m_vectorSize; i < newSize; i++)
199 new (m_vector + i) T();
201 else if (newSize < m_vectorSize && m_vector)
203 for (uint32_t i = newSize; i < m_vectorSize; i++)
208 uint32_t reserveSize = newSize;
209 if (newSize > m_vectorSize)
211 reserveSize = m_vectorSize * 3 / 2;
212 if (reserveSize < newSize)
213 reserveSize = newSize;
216 if (reserveSize > 0 && reserveSize < STATICBUFFERLEN)
218 reserveSize = STATICBUFFERLEN;
221 resizeVector(reserveSize);
222 m_reservedSize = reserveSize;
223 if (newSize > m_vectorSize)
225 for (uint32_t i = m_vectorSize; i < newSize; i++)
226 new (m_vector + i) T();
229 m_vectorSize = newSize;
235 m_vector[m_vectorSize - 1] = obj;
240 uint32_t startPos = m_vectorSize;
242 for (uint32_t i = 0; i < items.
size(); ++i)
244 m_vector[i + startPos] = items[i];
248 void insert(uint32_t index,
const T& obj)
250 if (index > m_vectorSize)
253 if (index == m_vectorSize)
260 for (uint32_t i = m_vectorSize - 1; i > index; i--)
262 m_vector[i] = m_vector[i - 1];
264 m_vector[index] = obj;
270 for (uint32_t i = 0; i < items.
size(); ++i)
272 insert(index++, items[i]);
278 for (uint32_t i = 0; i < m_vectorSize; i++)
287 if (index >= m_vectorSize)
289 for (uint32_t i = index + 1; i < m_vectorSize; i++)
290 m_vector[i - 1] = m_vector[i];
298 for (uint32_t i = 0; i < m_vectorSize; i++)
300 if (m_vector[i] == obj)
311 for (uint32_t i = 0; i < m_vectorSize; i++)
313 if (m_vector[i] == obj)
329 return Iterator(
this, m_vectorSize);
344 for (uint32_t i = 0; i < m_vectorSize; i++)
346 if (m_vector[i] == obj)
355 for (uint32_t i = 0; i < m_vectorSize; i++)
357 if (m_vector[i] == obj)
375 uint32_t newSize = incoming.
size();
377 if (newSize != m_vectorSize)
384 for (uint32_t i = 0; i < newSize; i++)
386 m_vector[i] = incoming[i];
390 void assign(
const std::vector<T>& incoming)
392 uint32_t newSize = (uint32_t)incoming.size();
394 if (newSize != m_vectorSize)
401 for (uint32_t i = 0; i < newSize; i++)
403 m_vector[i] = incoming[i];
407 void assign(
const std::initializer_list<T>& incoming)
409 uint32_t newSize = (uint32_t)incoming.size();
411 if (newSize != m_vectorSize)
421 for (T element : incoming)
423 m_vector[i] = element;
429 void resizeVector(uint32_t newSize)
432 if (newSize > 0 && STATICBUFFERLEN > 0 && newSize < STATICBUFFERLEN)
434 newSize = STATICBUFFERLEN;
437 if (newSize == m_reservedSize)
442 T* newVect =
nullptr;
445 if (newSize == STATICBUFFERLEN)
447 newVect = (T*)m_staticVector;
451 newVect = (T*)m_allocator.allocate(
sizeof(T) * newSize);
454 uint32_t cpSz = newSize > m_vectorSize ? m_vectorSize : newSize;
455 for (uint32_t i = 0; i < cpSz; i++)
456 new (newVect + i) T(m_vector[i]);
460 for (uint32_t i = 0; i < m_vectorSize; i++)
462 if (m_vector != (T*)m_staticVector)
464 m_allocator.deallocate(m_vector);
468 m_reservedSize = newSize;
473 uint64_t m_staticVector[(
sizeof(T) * STATICBUFFERLEN + 7) / 8];
474 uint32_t m_vectorSize;
475 uint32_t m_reservedSize;
481template <
class T, u
int32_t STATICBUFFERLEN = 1>
497 m_vector = incoming.m_vector;
498 m_index = incoming.m_index;
504 return (m_vector != other.m_vector || m_index != other.m_index);
508 return m_vector == other.m_vector && m_index == other.m_index;
516 return (*m_vector)[m_index];
524 return &(*m_vector)[m_index];
566 return m_index < m_vector->size();
572 || (m_index >= m_vector->size())
577 return (*m_vector)[m_index];
585template <
class T, u
int32_t STATICBUFFERLEN = 1>
606 m_vector = incoming.m_vector;
607 m_index = incoming.m_index;
613 return (m_vector != other.m_vector) || (m_index != other.m_index);
618 return (m_vector == other.m_vector) && (m_index == other.m_index);
627 return (*m_vector)[m_index];
636 return &(*m_vector)[m_index];
664 return m_index < m_vector->size();
670 || (m_index >= m_vector->size())
675 return (*m_vector)[m_index];
Definition edlvector.h:587
const T & operator*() const
Definition edlvector.h:621
void moveNext()
Definition edlvector.h:657
bool operator!=(const CEDLVectorConstIterator &other) const
Definition edlvector.h:611
bool operator==(const CEDLVectorConstIterator &other) const
Definition edlvector.h:616
CEDLVectorConstIterator(const CEDLVectorConstIterator &other)
Definition edlvector.h:596
uint32_t getIndex() const
Definition edlvector.h:652
bool hasCurrentValue() const
Definition edlvector.h:662
const T * operator->() const
Definition edlvector.h:630
CEDLVectorConstIterator operator++(int)
Definition edlvector.h:645
T currentValue() const
Definition edlvector.h:667
const CEDLVectorConstIterator & operator++()
Definition edlvector.h:639
CEDLVectorConstIterator(const CEDLVectorIterator< T, STATICBUFFERLEN > &other)
Definition edlvector.h:600
CEDLVectorConstIterator(const CEDLVector< T, STATICBUFFERLEN > *vector=nullptr, uint32_t index=0)
Definition edlvector.h:592
CEDLVectorConstIterator & operator=(const CEDLVectorConstIterator &incoming)
Definition edlvector.h:604
Definition edlvector.h:30
T & operator[](uint32_t index) const
Definition edlvector.h:144
CEDLVectorConstIterator< IDOMImagePtr, 1 > ConstIterator
Definition edlvector.h:33
CEDLVector(const std::initializer_list< T > &incoming)
Definition edlvector.h:49
ConstIterator find(const T &obj) const
Definition edlvector.h:342
T & last() const
Definition edlvector.h:160
T & operator[](uint32_t index)
Definition edlvector.h:118
void append(const T &obj)
Definition edlvector.h:232
void insert(uint32_t index, const T &obj)
Definition edlvector.h:248
CEDLVector(uint32_t size, const T values[])
Definition edlvector.h:65
CEDLVector & operator=(const CEDLVector &incoming)
Definition edlvector.h:168
void reserve(uint32_t reserveSize)
Definition edlvector.h:86
ConstIterator end() const
Definition edlvector.h:337
T & last()
Definition edlvector.h:152
bool contains(const T &obj) const
Definition edlvector.h:309
bool empty() const
Definition edlvector.h:111
void insert(uint32_t index, const CEDLVector &items)
Definition edlvector.h:268
ConstIterator begin() const
Definition edlvector.h:332
void fill(const T &obj)
Definition edlvector.h:276
uint32_t size() const
Definition edlvector.h:106
Iterator find(const T &obj)
Definition edlvector.h:353
virtual ~CEDLVector()
Definition edlvector.h:75
void erase(uint32_t index)
Definition edlvector.h:285
uint32_t indexOf(const T &obj) const
Definition edlvector.h:296
Iterator begin()
Definition edlvector.h:322
Iterator end()
Definition edlvector.h:327
void append(const CEDLVector &items)
Definition edlvector.h:238
CEDLVector(const std::vector< T > &incoming)
Definition edlvector.h:43
bool operator==(const CEDLVector &other) const
Definition edlvector.h:126
CEDLVector(const CEDLVector &incoming)
Definition edlvector.h:37
void resize(uint32_t newSize)
Definition edlvector.h:187
bool operator!=(const CEDLVector &other) const
Definition edlvector.h:139
std::vector< T > toVector()
Definition edlvector.h:95
void clear()
Definition edlvector.h:80
CEDLVectorIterator< IDOMImagePtr, 1 > Iterator
Definition edlvector.h:32
void reverse()
Definition edlvector.h:174
CEDLVector(uint32_t size=0)
Definition edlvector.h:56
Definition edlvector.h:483
CEDLVectorIterator(CEDLVector< T, STATICBUFFERLEN > *vector=nullptr, uint32_t index=0)
Definition edlvector.h:488
bool hasCurrentValue() const
Definition edlvector.h:564
const CEDLVectorIterator & operator++()
Definition edlvector.h:526
CEDLVectorIterator & operator=(const CEDLVectorIterator &incoming)
Definition edlvector.h:495
uint32_t getIndex() const
Definition edlvector.h:538
const CEDLVectorIterator operator++(int)
Definition edlvector.h:531
T & operator*()
Definition edlvector.h:510
bool operator!=(const CEDLVectorIterator &other) const
Definition edlvector.h:502
bool operator==(const CEDLVectorIterator &other) const
Definition edlvector.h:506
void moveNext()
Definition edlvector.h:559
T * operator->()
Definition edlvector.h:518
CEDLVectorIterator(const CEDLVectorIterator &other)
Definition edlvector.h:491
T currentValue() const
Definition edlvector.h:569
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:86
_BEGIN_EDL_NAMESPACE EDL_API void throwVectorError()