16 #ifndef __DATA_MANAGEMENT_FEATURES_INTERNAL_INDICES_IMPL_H__
17 #define __DATA_MANAGEMENT_FEATURES_INTERNAL_INDICES_IMPL_H__
22 #include "services/collection.h"
23 #include "services/internal/utilities.h"
24 #include "services/internal/error_handling_helpers.h"
26 #include "data_management/features/indices.h"
30 namespace data_management
41 class FeatureIndicesList :
public FeatureIndices
44 static services::SharedPtr<FeatureIndicesList> create(services::Status *status = NULL)
46 return services::internal::wrapSharedAndTryThrow<FeatureIndicesList>(
new FeatureIndicesList(), status);
49 virtual size_t size()
const DAAL_C11_OVERRIDE
51 return _indices.size();
54 virtual bool isPlainRange()
const DAAL_C11_OVERRIDE
59 virtual bool areRawFeatureIndicesAvailable()
const DAAL_C11_OVERRIDE
64 virtual FeatureIndex getFirst()
const DAAL_C11_OVERRIDE
66 if (!size()) {
return FeatureIndexTraits::invalid(); }
70 virtual FeatureIndex getLast()
const DAAL_C11_OVERRIDE
72 if (!size()) {
return FeatureIndexTraits::invalid(); }
73 return _indices[_indices.size() - 1];
76 virtual services::BufferView<FeatureIndex> getRawFeatureIndices() DAAL_C11_OVERRIDE
78 return services::BufferView<FeatureIndex>(_indices.data(), _indices.size());
81 services::Status add(FeatureIndex index)
83 if (index > FeatureIndexTraits::maxIndex() || index == FeatureIndexTraits::invalid())
85 return services::throwIfPossible(services::ErrorIncorrectDataRange);
88 if ( !_indices.safe_push_back(index) )
90 return services::throwIfPossible(services::ErrorMemoryAllocationFailed);
93 return services::Status();
97 FeatureIndicesList() { }
99 services::Collection<FeatureIndex> _indices;
101 typedef services::SharedPtr<FeatureIndicesList> FeatureIndicesListPtr;
107 class FeatureIndicesRange :
public FeatureIndices
110 static services::SharedPtr<FeatureIndicesRange> create(FeatureIndex begin, FeatureIndex end,
111 services::Status *status = NULL)
113 if (begin == FeatureIndexTraits::invalid() ||
114 end == FeatureIndexTraits::invalid())
116 services::internal::tryAssignStatusAndThrow(status, services::ErrorIncorrectIndex);
117 return services::SharedPtr<FeatureIndicesRange>();
119 return services::internal::wrapSharedAndTryThrow<FeatureIndicesRange>(
120 new FeatureIndicesRange(begin, end), status);
123 virtual size_t size()
const DAAL_C11_OVERRIDE
125 return services::internal::maxValue(_begin, _end) -
126 services::internal::minValue(_begin, _end) + 1;
129 virtual bool isPlainRange()
const DAAL_C11_OVERRIDE
134 virtual bool areRawFeatureIndicesAvailable()
const DAAL_C11_OVERRIDE
139 virtual FeatureIndex getFirst()
const DAAL_C11_OVERRIDE
144 virtual FeatureIndex getLast()
const DAAL_C11_OVERRIDE
149 virtual services::BufferView<FeatureIndex> getRawFeatureIndices() DAAL_C11_OVERRIDE
151 return services::BufferView<FeatureIndex>();
155 explicit FeatureIndicesRange(FeatureIndex begin, FeatureIndex end) :
162 typedef services::SharedPtr<FeatureIndicesList> FeatureIndicesListPtr;
daal::data_management::features::internal::FeatureIndicesList
Implementation of FeatureIndices to store a list of feature indices.
Definition: indices_impl.h:41
daal
Definition: algorithm_base_common.h:31
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:147
daal::services::ErrorIncorrectIndex
Definition: error_indexes.h:100
daal::data_management::features::internal::FeatureIndicesRange
Implementation of FeatureIndices to store a range of feature indices.
Definition: indices_impl.h:107
daal::services::ErrorIncorrectDataRange
Definition: error_indexes.h:77