34 using Comparer = int (*)(
const Element& lhs,
const Element& rhs);
45 using V =
typename std::conditional<is_const, const Vector, Vector>::type;
46 using E =
typename std::conditional<is_const, const Element, Element>::type;
50 Iterator(
V& vector,
unsigned index) : vector(vector), index(index)
76 return &vector == &rhs.vector && index == rhs.index;
84 template <
typename U = Element>
typename std::enable_if<!is_const, U&>::type
operator*()
100 Vector(
unsigned int initialCapacity = 10,
unsigned int capacityIncrement = 10) :
_increment(capacityIncrement)
102 _data.allocate(initialCapacity);
160 bool add(
const Element& obj)
223 const Element&
get(
unsigned int index)
const
253 std::swap(
_data, other._data);
254 std::swap(
_size, other._size);
295 if(!_data.allocate(rhv.
_data.size)) {
296 _size = _increment = 0;
303 for(
unsigned int i = 0; i < _size; i++) {
304 _data[i] = rhv.
_data[i];
310 if(array ==
nullptr) {
314 for(
unsigned int i = 0; i < _size; i++) {
321 for(
unsigned int i = 0; i < _size; i++) {
322 if(_data[i] == elem) {
337 unsigned int i = _size;
341 if(_data[i] == elem) {
351 if(!ensureCapacity(_size + 1)) {
354 _data[_size++] = obj;
360 if(!ensureCapacity(_size + 1)) {
363 _data[_size++] = objp;
369 if(_data.size >= minCapacity) {
373 auto newCapacity = std::max(minCapacity, _data.size + _increment);
374 return _data.allocate(newCapacity);
380 return addElement(obj);
386 if(!ensureCapacity(_size + 1)) {
390 if(!_data.insert(index, obj)) {
422 if(!ensureCapacity(newSize)) {
426 _data.trim(newSize,
false);
427 _size = std::min(_size, newSize);
434 for(
unsigned j = 1; j < _size; j++) {
435 auto key = _data.values[j];
436 Element& keyRef = _data[j];
439 for(i = j - 1; (i >= 0) && compareFunction(_data[i], keyRef) > 0; i--) {
440 _data.values[i + 1] = _data.values[i];
443 _data.values[i + 1] =
key;
void size_t const void * key
Definition: blake2s.h:33
Definition: Countable.h:20
Iterator(V &vector, unsigned index)
Definition: WVector.h:50
typename std::conditional< is_const, const Element, Element >::type E
Definition: WVector.h:46
Element value_type
Definition: WVector.h:40
Element * pointer
Definition: WVector.h:42
typename std::conditional< is_const, const Vector, Vector >::type V
Definition: WVector.h:45
Iterator operator++(int)
Definition: WVector.h:60
std::random_access_iterator_tag iterator_category
Definition: WVector.h:39
Iterator & operator++()
Definition: WVector.h:54
E & operator*() const
Definition: WVector.h:89
bool operator!=(const Iterator &rhs) const
Definition: WVector.h:79
Iterator operator+=(size_t distance)
Definition: WVector.h:67
std::enable_if<!is_const, U & >::type operator*()
Definition: WVector.h:84
std::ptrdiff_t difference_type
Definition: WVector.h:41
Iterator(const Iterator &)=default
Element & reference
Definition: WVector.h:43
bool operator==(const Iterator &rhs) const
Definition: WVector.h:74
Vector class template.
Definition: WVector.h:32
bool setElementAt(const Element &obj, unsigned int index)
Definition: WVector.h:410
bool addElement(const Element &obj)
Definition: WVector.h:349
bool setSize(unsigned int newSize)
Reduce or increase number of items.
Definition: WVector.h:420
const Vector< Element > & operator=(const Vector< Element > &rhv)
Definition: WVector.h:241
bool contains(const Element &elem) const
Definition: WVector.h:116
const Iterator< true > begin() const
Definition: WVector.h:271
bool removeElementAt(unsigned int index)
Definition: WVector.h:398
unsigned int count() const override
Definition: WVector.h:148
bool add(const Element &obj)
Definition: WVector.h:160
void clear()
Definition: WVector.h:168
Iterator< false > end()
Definition: WVector.h:266
int(*)(const Element &lhs, const Element &rhs) Comparer
Definition: WVector.h:34
void copyFrom(const Vector &rhv)
Definition: WVector.h:292
bool remove(unsigned int index)
Definition: WVector.h:215
unsigned int capacity() const
Definition: WVector.h:111
bool isEmpty() const
Definition: WVector.h:132
const Vector< Element > & operator=(Vector< Element > &&other) noexcept
Definition: WVector.h:249
void removeAllElements()
Definition: WVector.h:175
const Element & get(unsigned int index) const
Definition: WVector.h:223
Iterator< false > begin()
Definition: WVector.h:261
void trimToSize()
Reduce capacity to match current size.
Definition: WVector.h:198
void sort(Comparer compareFunction)
Definition: WVector.h:431
int indexOf(const Element &elem) const
Definition: WVector.h:319
Element & operator[](unsigned int index) override
Definition: WVector.h:233
unsigned int size() const
Definition: WVector.h:153
Vector(const Vector &rhv)
Definition: WVector.h:105
ElementList _data
Definition: WVector.h:289
unsigned int _size
Definition: WVector.h:287
wiring_private::List< Element > ElementList
Definition: WVector.h:285
bool ensureCapacity(unsigned int minCapacity)
Definition: WVector.h:367
bool removeElement(const Element &obj)
Definition: WVector.h:181
bool insertElementAt(const Element &obj, unsigned int index)
Definition: WVector.h:377
const Element & lastElement() const
Definition: WVector.h:137
const Element & elementAt(unsigned int index) const
Definition: WVector.h:205
const Element & firstElement() const
Definition: WVector.h:121
void copyInto(Element *array) const
Definition: WVector.h:308
const Element & operator[](unsigned int index) const override
Definition: WVector.h:228
Vector(unsigned int initialCapacity=10, unsigned int capacityIncrement=10)
Definition: WVector.h:100
unsigned int _increment
Definition: WVector.h:288
int lastIndexOf(const Element &elem) const
Definition: WVector.h:330
const Iterator< true > end() const
Definition: WVector.h:276
bool addElement(Element *objp)
Definition: WVector.h:358
typename std::conditional< std::is_scalar< T >::value, ScalarList< T >, ObjectList< T > >::type List
Definition: WiringList.h:182