18 #ifndef __COLLECTION_H__
19 #define __COLLECTION_H__
22 #include "services/daal_shared_ptr.h"
51 Collection() : _array(NULL), _size(0), _capacity(0)
58 explicit Collection(
size_t n) : _array(NULL), _size(0), _capacity(0)
60 if(!resize(n)) {
return;}
69 Collection(
size_t n,
const T *array) : _array(NULL), _size(0), _capacity(0)
71 if(!resize(n)) {
return;}
72 for(
size_t i = 0; i < n; i++)
83 Collection(
const Collection<T> &other) : _array(NULL), _size(0), _capacity(0)
85 if(!resize(other.capacity())) {
return;}
86 for(
size_t i = 0; i < other.size(); i++)
88 this->push_back(other[i]);
92 Collection &operator = (
const Collection<T> &other)
94 if(!resize(other.capacity())) {
return *
this;}
96 for(
size_t i = 0; i < other.size(); i++)
98 this->push_back(other[i]);
106 virtual ~Collection()
108 for(
size_t i = 0; i < _capacity; i++)
113 services::daal_free(_array);
121 size_t size()
const {
return _size;}
127 size_t capacity()
const {
return _capacity;}
134 T &operator [] (
size_t index)
136 return _array[index];
144 const T &operator [] (
size_t index)
const
146 return _array[index];
156 return _array[index];
165 const T &
get(
size_t index)
const
167 return _array[index];
183 const T* data()
const
192 Collection &push_back(
const T &x)
203 bool safe_push_back(
const T &x)
205 if (_size >= _capacity)
207 if (!_resize()) {
return false; }
219 Collection &operator << (
const T &x)
221 return this->push_back(x);
228 bool resize(
size_t newCapacity)
230 if(newCapacity <= _capacity) {
return true; }
231 T *newArray = (T *)services::daal_calloc(
sizeof(T) * newCapacity);
232 if(!newArray) {
return false;}
233 for(
size_t i = 0; i < newCapacity; i++)
235 T *elementMemory = &(newArray[i]);
236 ::new(elementMemory) T;
239 size_t minSize = newCapacity < _size ? newCapacity : _size;
240 for(
size_t i = 0; i < minSize; i++)
242 newArray[i] = _array[i];
245 for(
size_t i = 0; i < _capacity; i++)
250 services::daal_free(_array);
252 _capacity = newCapacity;
261 for(
size_t i = 0; i < _capacity; i++)
266 services::daal_free(_array);
278 bool insert(
const size_t pos,
const T &x)
280 if(pos > this->size())
285 size_t newSize = 1 + this->size();
286 if(newSize > _capacity)
288 if(!_resize()) {
return false;}
291 size_t tail = _size - pos;
292 for(
size_t i = 0; i < tail; i++)
294 _array[_size - i] = _array[_size - 1 - i];
306 bool insert(
const size_t pos, Collection<T> &other)
308 if(pos > this->size())
313 size_t newSize = other.size() + this->size();
314 if(newSize > _capacity)
316 if(!resize(newSize)) {
return false;}
319 size_t length = other.size();
320 size_t tail = _size - pos;
321 for(
size_t i = 0; i < tail; i++)
323 _array[_size + length - 1 - i] = _array[_size - 1 - i];
325 for(
size_t i = 0; i < length; i++)
327 _array[pos + i] = other[i];
337 void erase(
size_t pos)
339 if(pos >= this->size())
346 for(
size_t i = 0; i < _size - pos; i++)
348 _array[pos + i] = _array[pos + 1 + i];
353 static const size_t _default_capacity = 16;
356 size_t newCapacity = 2 * _capacity;
357 if(_capacity == 0) { newCapacity = _default_capacity; }
358 return resize(newCapacity);
370 using interface1::Collection;
daal::services::interface1::Collection
Class that implements functionality of the Collection container.
Definition: collection.h:45
daal::services::interface1::Collection::Collection
Collection(size_t n)
Definition: collection.h:58
daal::services::daal_calloc
DAAL_EXPORT void * daal_calloc(size_t size, size_t alignment=DAAL_MALLOC_DEFAULT_ALIGNMENT)
daal::services::interface1::Collection::Collection
Collection()
Definition: collection.h:51
daal::services::interface1::Collection::erase
void erase(size_t pos)
Definition: collection.h:337
daal::services::interface1::Collection::data
T * data()
Definition: collection.h:174
daal::services::interface1::Collection::resize
bool resize(size_t newCapacity)
Definition: collection.h:228
daal::services::interface1::Collection::clear
void clear()
Definition: collection.h:259
daal::services::interface1::Collection::data
const T * data() const
Definition: collection.h:183
daal::services::interface1::Collection::insert
bool insert(const size_t pos, Collection< T > &other)
Definition: collection.h:306
daal::services::interface1::Collection::capacity
size_t capacity() const
Definition: collection.h:127
daal::services::interface1::Collection::safe_push_back
bool safe_push_back(const T &x)
Definition: collection.h:203
daal::services::interface1::Collection::insert
bool insert(const size_t pos, const T &x)
Definition: collection.h:278
daal::services::interface1::Collection::Collection
Collection(size_t n, const T *array)
Definition: collection.h:69
daal::services::interface1::Collection::push_back
Collection & push_back(const T &x)
Definition: collection.h:192
daal::services::interface1::Collection::size
size_t size() const
Definition: collection.h:121
daal::services::interface1::Collection::Collection
Collection(const Collection< T > &other)
Definition: collection.h:83
daal::services::daal_free
DAAL_EXPORT void daal_free(void *ptr)
daal::services::interface1::Collection::operator[]
T & operator[](size_t index)
Definition: collection.h:134
daal::services::interface1::Collection::~Collection
virtual ~Collection()
Definition: collection.h:106
daal::services::interface1::Collection::operator<<
Collection & operator<<(const T &x)
Definition: collection.h:219