16 #ifndef __COLLECTION_H__
17 #define __COLLECTION_H__
20 #include "services/daal_shared_ptr.h"
21 #include "services/error_id.h"
49 Collection() : _array(NULL), _size(0), _capacity(0)
56 explicit Collection(
size_t n) : _array(NULL), _size(0), _capacity(0)
58 if(!resize(n)) {
return;}
67 Collection(
size_t n,
const T *array) : _array(NULL), _size(0), _capacity(0)
69 if(!resize(n)) {
return;}
70 for(
size_t i = 0; i < n; i++)
81 Collection(
const Collection<T> &other) : _array(NULL), _size(0), _capacity(0)
83 if(!resize(other.capacity())) {
return;}
84 for(
size_t i = 0; i < other.size(); i++)
86 this->push_back(other[i]);
90 Collection &operator = (
const Collection<T> &other)
92 if(!resize(other.capacity())) {
return *
this;}
94 for(
size_t i = 0; i < other.size(); i++)
96 this->push_back(other[i]);
104 virtual ~Collection()
106 for(
size_t i = 0; i < _capacity; i++)
111 services::daal_free(_array);
118 size_t size()
const {
return _size;}
124 size_t capacity()
const {
return _capacity;}
131 T &operator [] (
size_t index)
133 return _array[index];
141 const T &operator [] (
size_t index)
const
143 return _array[index];
153 return _array[index];
162 const T &
get(
size_t index)
const
164 return _array[index];
171 Collection &push_back(
const T &x)
173 if(_size >= _capacity)
187 Collection &operator << (
const T &x)
189 return this->push_back(x);
196 bool resize(
size_t newCapacity)
198 if(newCapacity <= _capacity) {
return true; }
199 T *newArray = (T *)services::daal_malloc(
sizeof(T) * newCapacity);
200 if(!newArray) {
return false;}
201 for(
size_t i = 0; i < newCapacity; i++)
203 T *elementMemory = &(newArray[i]);
204 ::new(elementMemory) T;
207 size_t minSize = newCapacity < _size ? newCapacity : _size;
208 for(
size_t i = 0; i < minSize; i++)
210 newArray[i] = _array[i];
213 for(
size_t i = 0; i < _capacity; i++)
218 services::daal_free(_array);
220 _capacity = newCapacity;
229 for(
size_t i = 0; i < _capacity; i++)
234 services::daal_free(_array);
246 bool insert(
const size_t pos,
const T &x)
248 if(pos > this->size())
253 size_t newSize = 1 + this->size();
254 if(newSize > _capacity)
256 if(!_resize()) {
return false;}
259 size_t tail = _size - pos;
260 for(
size_t i = 0; i < tail; i++)
262 _array[_size - i] = _array[_size - 1 - i];
274 bool insert(
const size_t pos, Collection<T> &other)
276 if(pos > this->size())
281 size_t newSize = other.size() + this->size();
282 if(newSize > _capacity)
284 if(!resize(newSize)) {
return false;}
287 size_t length = other.size();
288 size_t tail = _size - pos;
289 for(
size_t i = 0; i < tail; i++)
291 _array[_size + length - 1 - i] = _array[_size - 1 - i];
293 for(
size_t i = 0; i < length; i++)
295 _array[pos + i] = other[i];
305 void erase(
size_t pos)
307 if(pos >= this->size())
314 for(
size_t i = 0; i < _size - pos; i++)
316 _array[pos + i] = _array[pos + 1 + i];
321 static const size_t _default_capacity = 16;
324 size_t newCapacity = 2 * _capacity;
325 if(_capacity == 0) { newCapacity = _default_capacity; }
326 return resize(newCapacity);
336 using interface1::Collection;
daal::services::interface1::Collection::erase
void erase(size_t pos)
Definition: collection.h:305
daal
Definition: algorithm_base_common.h:31
daal::services::interface1::Collection::~Collection
virtual ~Collection()
Definition: collection.h:104
daal::services::interface1::Collection::Collection
Collection(size_t n, const T *array)
Definition: collection.h:67
daal::services::interface1::Collection::operator[]
T & operator[](size_t index)
Definition: collection.h:131
daal::services::interface1::Collection::push_back
Collection & push_back(const T &x)
Definition: collection.h:171
daal::services::interface1::Collection::size
size_t size() const
Definition: collection.h:118
daal::services::interface1::Collection::Collection
Collection(const Collection< T > &other)
Definition: collection.h:81
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:187
daal::services::interface1::Collection::capacity
size_t capacity() const
Definition: collection.h:124
daal::services::interface1::Collection::clear
void clear()
Definition: collection.h:227
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:274
daal::services::interface1::Collection::Collection
Collection(size_t n)
Definition: collection.h:56
daal::services::interface1::Collection::Collection
Collection()
Definition: collection.h:49
daal::services::interface1::Collection::resize
bool resize(size_t newCapacity)
Definition: collection.h:196
daal::services::interface1::Collection
Class that implements functionality of the Collection container.
Definition: collection.h:43
daal::services::interface1::Collection::insert
bool insert(const size_t pos, const T &x)
Definition: collection.h:246