42 #ifndef __COLLECTION_H__
43 #define __COLLECTION_H__
46 #include "services/daal_shared_ptr.h"
47 #include "services/error_id.h"
75 Collection() : _array(NULL), _size(0), _capacity(0)
82 explicit Collection(
size_t n) : _array(NULL), _size(0), _capacity(0)
84 if(!resize(n)) {
return;}
93 Collection(
size_t n,
const T *array) : _array(NULL), _size(0), _capacity(0)
95 if(!resize(n)) {
return;}
96 for(
size_t i = 0; i < n; i++)
107 Collection(
const Collection<T> &other) : _array(NULL), _size(0), _capacity(0)
109 if(!resize(other.capacity())) {
return;}
110 for(
size_t i = 0; i < other.size(); i++)
112 this->push_back(other[i]);
116 Collection &operator = (
const Collection<T> &other)
118 if(!resize(other.capacity())) {
return *
this;}
120 for(
size_t i = 0; i < other.size(); i++)
122 this->push_back(other[i]);
130 virtual ~Collection()
132 for(
size_t i = 0; i < _capacity; i++)
137 services::daal_free(_array);
144 size_t size()
const {
return _size;}
150 size_t capacity()
const {
return _capacity;}
157 T &operator [] (
size_t index)
159 return _array[index];
167 const T &operator [] (
size_t index)
const
169 return _array[index];
179 return _array[index];
188 const T &
get(
size_t index)
const
190 return _array[index];
197 Collection &push_back(
const T &x)
199 if(_size >= _capacity)
213 Collection &operator << (
const T &x)
215 return this->push_back(x);
222 bool resize(
size_t newCapacity)
224 if(newCapacity <= _capacity) {
return true; }
225 T *newArray = (T *)services::daal_malloc(
sizeof(T) * newCapacity);
226 if(!newArray) {
return false;}
227 for(
size_t i = 0; i < newCapacity; i++)
229 T *elementMemory = &(newArray[i]);
230 ::new(elementMemory) T;
233 size_t minSize = newCapacity < _size ? newCapacity : _size;
234 for(
size_t i = 0; i < minSize; i++)
236 newArray[i] = _array[i];
239 for(
size_t i = 0; i < _capacity; i++)
244 services::daal_free(_array);
246 _capacity = newCapacity;
255 for(
size_t i = 0; i < _capacity; i++)
260 services::daal_free(_array);
272 bool insert(
const size_t pos,
const T &x)
274 if(pos > this->size())
279 size_t newSize = 1 + this->size();
280 if(newSize > _capacity)
282 if(!_resize()) {
return false;}
285 size_t tail = _size - pos;
286 for(
size_t i = 0; i < tail; i++)
288 _array[_size - i] = _array[_size - 1 - i];
300 bool insert(
const size_t pos, Collection<T> &other)
302 if(pos > this->size())
307 size_t newSize = other.size() + this->size();
308 if(newSize > _capacity)
310 if(!resize(newSize)) {
return false;}
313 size_t length = other.size();
314 size_t tail = _size - pos;
315 for(
size_t i = 0; i < tail; i++)
317 _array[_size + length - 1 - i] = _array[_size - 1 - i];
319 for(
size_t i = 0; i < length; i++)
321 _array[pos + i] = other[i];
331 void erase(
size_t pos)
333 if(pos >= this->size())
340 for(
size_t i = 0; i < _size - pos; i++)
342 _array[pos + i] = _array[pos + 1 + i];
347 static const size_t _default_capacity = 16;
350 size_t newCapacity = 2 * _capacity;
351 if(_capacity == 0) { newCapacity = _default_capacity; }
352 return resize(newCapacity);
362 using interface1::Collection;
daal::services::interface1::Collection::erase
void erase(size_t pos)
Definition: collection.h:331
daal
Definition: algorithm_base_common.h:57
daal::services::interface1::Collection::~Collection
virtual ~Collection()
Definition: collection.h:130
daal::services::interface1::Collection::Collection
Collection(size_t n, const T *array)
Definition: collection.h:93
daal::services::interface1::Collection::operator[]
T & operator[](size_t index)
Definition: collection.h:157
daal::services::interface1::Collection::push_back
Collection & push_back(const T &x)
Definition: collection.h:197
daal::services::interface1::Collection::size
size_t size() const
Definition: collection.h:144
daal::services::interface1::Collection::Collection
Collection(const Collection< T > &other)
Definition: collection.h:107
daal::services::daal_malloc
DAAL_EXPORT void * daal_malloc(size_t size, size_t alignment=DAAL_MALLOC_DEFAULT_ALIGNMENT)
daal::services::interface1::Collection::operator<<
Collection & operator<<(const T &x)
Definition: collection.h:213
daal::services::interface1::Collection::capacity
size_t capacity() const
Definition: collection.h:150
daal::services::interface1::Collection::clear
void clear()
Definition: collection.h:253
daal::services::daal_free
DAAL_EXPORT void daal_free(void *ptr)
daal::services::interface1::Collection::insert
bool insert(const size_t pos, Collection< T > &other)
Definition: collection.h:300
daal::services::interface1::Collection::Collection
Collection(size_t n)
Definition: collection.h:82
daal::services::interface1::Collection::Collection
Collection()
Definition: collection.h:75
daal::services::interface1::Collection::resize
bool resize(size_t newCapacity)
Definition: collection.h:222
daal::services::interface1::Collection
Class that implements functionality of the Collection container.
Definition: collection.h:69
daal::services::interface1::Collection::insert
bool insert(const size_t pos, const T &x)
Definition: collection.h:272