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;
53 Iterator(
V& vector,
unsigned index) : vector(vector), index(index)
83 return &vector == &rhs.vector && index == rhs.index;
91 template <
typename U = Element>
typename std::enable_if<!is_const, U&>::type
operator*()
106 Vector(
unsigned int initialCapacity = 10,
unsigned int capacityIncrement = 10) :
_increment(capacityIncrement)
108 _data.allocate(initialCapacity);
128 template <
typename T>
bool contains(
const T& elem)
const
142 template <
typename T>
int indexOf(
const T& elem)
const;
172 bool add(
const Element& obj)
235 const Element&
get(
unsigned int index)
const
265 std::swap(
_data, other._data);
266 std::swap(
_size, other._size);
307 if(!_data.allocate(rhv.
_data.size)) {
308 _size = _increment = 0;
315 for(
unsigned int i = 0; i < _size; i++) {
316 _data[i] = rhv.
_data[i];
322 if(array ==
nullptr) {
326 for(
unsigned int i = 0; i < _size; i++) {
333 for(
unsigned int i = 0; i < _size; i++) {
334 if(_data[i] == elem) {
349 unsigned int i = _size;
353 if(_data[i] == elem) {
363 if(!ensureCapacity(_size + 1)) {
366 _data[_size++] = obj;
372 if(!ensureCapacity(_size + 1)) {
375 _data[_size++] = objp;
381 if(_data.size >= minCapacity) {
385 auto newCapacity = std::max(minCapacity, _data.size + _increment);
386 return _data.allocate(newCapacity);
392 return addElement(obj);
398 if(!ensureCapacity(_size + 1)) {
402 if(!_data.insert(index, obj)) {
434 if(!ensureCapacity(newSize)) {
438 _data.trim(newSize,
false);
439 _size = std::min(_size, newSize);
446 for(
unsigned j = 1; j < _size; j++) {
447 auto key = _data.values[j];
448 Element& keyRef = _data[j];
451 for(i =
int(j) - 1; (i >= 0) && compareFunction(_data[i], keyRef) > 0; i--) {
452 _data.values[i + 1] = _data.values[i];
455 _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:53
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:67
std::random_access_iterator_tag iterator_category
Definition: WVector.h:39
Iterator & operator=(const Iterator &)=default
~Iterator()
Definition: WVector.h:57
Iterator & operator=(Iterator &&)=default
Iterator & operator++()
Definition: WVector.h:61
E & operator*() const
Definition: WVector.h:96
bool operator!=(const Iterator &rhs) const
Definition: WVector.h:86
Iterator operator+=(size_t distance)
Definition: WVector.h:74
std::enable_if<!is_const, U & >::type operator*()
Definition: WVector.h:91
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:81
Iterator(Iterator &&)=default
Vector class template.
Definition: WVector.h:32
bool setElementAt(const Element &obj, unsigned int index)
Definition: WVector.h:422
~Vector()
Definition: WVector.h:118
bool addElement(const Element &obj)
Definition: WVector.h:361
bool setSize(unsigned int newSize)
Reduce or increase number of items.
Definition: WVector.h:432
const Iterator< true > begin() const
Definition: WVector.h:283
bool contains(const T &elem) const
Definition: WVector.h:128
bool removeElementAt(unsigned int index)
Definition: WVector.h:410
unsigned int count() const override
Definition: WVector.h:160
bool add(const Element &obj)
Definition: WVector.h:172
Vector< Element > & operator=(Vector< Element > &&other) noexcept
Definition: WVector.h:261
void clear()
Definition: WVector.h:180
Iterator< false > end()
Definition: WVector.h:278
int(*)(const Element &lhs, const Element &rhs) Comparer
Definition: WVector.h:34
void copyFrom(const Vector &rhv)
Definition: WVector.h:304
bool remove(unsigned int index)
Definition: WVector.h:227
unsigned int capacity() const
Definition: WVector.h:123
bool isEmpty() const
Definition: WVector.h:144
void removeAllElements()
Definition: WVector.h:187
const Element & get(unsigned int index) const
Definition: WVector.h:235
Iterator< false > begin()
Definition: WVector.h:273
void trimToSize()
Reduce capacity to match current size.
Definition: WVector.h:210
void sort(Comparer compareFunction)
Definition: WVector.h:443
Element & operator[](unsigned int index) override
Definition: WVector.h:245
unsigned int size() const
Definition: WVector.h:165
Vector(const Vector &rhv)
Definition: WVector.h:111
int lastIndexOf(const T &elem) const
Definition: WVector.h:342
ElementList _data
Definition: WVector.h:301
unsigned int _size
Definition: WVector.h:299
Vector< Element > & operator=(const Vector< Element > &rhv)
Definition: WVector.h:253
wiring_private::List< Element > ElementList
Definition: WVector.h:297
bool removeElement(const T &elem)
Definition: WVector.h:193
bool ensureCapacity(unsigned int minCapacity)
Definition: WVector.h:379
int indexOf(const T &elem) const
Definition: WVector.h:331
bool insertElementAt(const Element &obj, unsigned int index)
Definition: WVector.h:389
const Element & lastElement() const
Definition: WVector.h:149
const Element & elementAt(unsigned int index) const
Definition: WVector.h:217
const Element & firstElement() const
Definition: WVector.h:133
void copyInto(Element *array) const
Definition: WVector.h:320
const Element & operator[](unsigned int index) const override
Definition: WVector.h:240
Vector(unsigned int initialCapacity=10, unsigned int capacityIncrement=10)
Definition: WVector.h:106
unsigned int _increment
Definition: WVector.h:300
const Iterator< true > end() const
Definition: WVector.h:288
bool addElement(Element *objp)
Definition: WVector.h:370
typename std::conditional< std::is_scalar< T >::value, ScalarList< T >, ObjectList< T > >::type List
Definition: WiringList.h:197