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)
81 return &vector == &rhs.vector && index == rhs.index;
89 template <
typename U = Element>
typename std::enable_if<!is_const, U&>::type
operator*()
104 Vector(
unsigned int initialCapacity = 10,
unsigned int capacityIncrement = 10) :
_increment(capacityIncrement)
106 _data.allocate(initialCapacity);
124 template <
typename T>
bool contains(
const T& elem)
const
138 template <
typename T>
int indexOf(
const T& elem)
const;
168 bool add(
const Element& obj)
231 const Element&
get(
unsigned int index)
const
261 std::swap(
_data, other._data);
262 std::swap(
_size, other._size);
303 if(!_data.allocate(rhv.
_data.size)) {
304 _size = _increment = 0;
311 for(
unsigned int i = 0; i < _size; i++) {
312 _data[i] = rhv.
_data[i];
318 if(array ==
nullptr) {
322 for(
unsigned int i = 0; i < _size; i++) {
329 for(
unsigned int i = 0; i < _size; i++) {
330 if(_data[i] == elem) {
345 unsigned int i = _size;
349 if(_data[i] == elem) {
359 if(!ensureCapacity(_size + 1)) {
362 _data[_size++] = obj;
368 if(!ensureCapacity(_size + 1)) {
371 _data[_size++] = objp;
377 if(_data.size >= minCapacity) {
381 auto newCapacity = std::max(minCapacity, _data.size + _increment);
382 return _data.allocate(newCapacity);
388 return addElement(obj);
394 if(!ensureCapacity(_size + 1)) {
398 if(!_data.insert(index, obj)) {
430 if(!ensureCapacity(newSize)) {
434 _data.trim(newSize,
false);
435 _size = std::min(_size, newSize);
442 for(
unsigned j = 1; j < _size; j++) {
443 auto key = _data.values[j];
444 Element& keyRef = _data[j];
447 for(i =
int(j) - 1; (i >= 0) && compareFunction(_data[i], keyRef) > 0; i--) {
448 _data.values[i + 1] = _data.values[i];
451 _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:65
std::random_access_iterator_tag iterator_category
Definition: WVector.h:39
Iterator & operator=(const Iterator &)=default
Iterator & operator=(Iterator &&)=default
Iterator & operator++()
Definition: WVector.h:59
E & operator*() const
Definition: WVector.h:94
bool operator!=(const Iterator &rhs) const
Definition: WVector.h:84
Iterator operator+=(size_t distance)
Definition: WVector.h:72
std::enable_if<!is_const, U & >::type operator*()
Definition: WVector.h:89
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:79
Iterator(Iterator &&)=default
Vector class template.
Definition: WVector.h:32
bool ensureCapacity(size_t minCapacity)
Definition: WVector.h:375
bool setElementAt(const Element &obj, unsigned int index)
Definition: WVector.h:418
bool addElement(const Element &obj)
Definition: WVector.h:357
bool setSize(unsigned int newSize)
Reduce or increase number of items.
Definition: WVector.h:428
const Iterator< true > begin() const
Definition: WVector.h:279
bool contains(const T &elem) const
Definition: WVector.h:124
bool removeElementAt(unsigned int index)
Definition: WVector.h:406
unsigned int count() const override
Definition: WVector.h:156
bool add(const Element &obj)
Definition: WVector.h:168
Vector< Element > & operator=(Vector< Element > &&other) noexcept
Definition: WVector.h:257
void clear()
Definition: WVector.h:176
Iterator< false > end()
Definition: WVector.h:274
int(*)(const Element &lhs, const Element &rhs) Comparer
Definition: WVector.h:34
void copyFrom(const Vector &rhv)
Definition: WVector.h:300
bool remove(unsigned int index)
Definition: WVector.h:223
unsigned int capacity() const
Definition: WVector.h:119
bool isEmpty() const
Definition: WVector.h:140
void removeAllElements()
Definition: WVector.h:183
const Element & get(unsigned int index) const
Definition: WVector.h:231
Iterator< false > begin()
Definition: WVector.h:269
void trimToSize()
Reduce capacity to match current size.
Definition: WVector.h:206
void sort(Comparer compareFunction)
Definition: WVector.h:439
Element & operator[](unsigned int index) override
Definition: WVector.h:241
unsigned int size() const
Definition: WVector.h:161
Vector(const Vector &rhv)
Definition: WVector.h:109
int lastIndexOf(const T &elem) const
Definition: WVector.h:338
ElementList _data
Definition: WVector.h:297
unsigned int _size
Definition: WVector.h:295
Vector< Element > & operator=(const Vector< Element > &rhv)
Definition: WVector.h:249
wiring_private::List< Element > ElementList
Definition: WVector.h:293
bool removeElement(const T &elem)
Definition: WVector.h:189
int indexOf(const T &elem) const
Definition: WVector.h:327
bool insertElementAt(const Element &obj, unsigned int index)
Definition: WVector.h:385
const Element & lastElement() const
Definition: WVector.h:145
const Element & elementAt(unsigned int index) const
Definition: WVector.h:213
const Element & firstElement() const
Definition: WVector.h:129
void copyInto(Element *array) const
Definition: WVector.h:316
const Element & operator[](unsigned int index) const override
Definition: WVector.h:236
Vector(unsigned int initialCapacity=10, unsigned int capacityIncrement=10)
Definition: WVector.h:104
unsigned int _increment
Definition: WVector.h:296
const Iterator< true > end() const
Definition: WVector.h:284
bool addElement(Element *objp)
Definition: WVector.h:366
typename std::conditional< std::is_scalar< T >::value, ScalarList< T >, ObjectList< T > >::type List
Definition: WiringList.h:197