18 #ifndef __DATA_MANAGEMENT_FEATURES_INTERNAL_INDICES_IMPL_H__
19 #define __DATA_MANAGEMENT_FEATURES_INTERNAL_INDICES_IMPL_H__
24 #include "services/collection.h"
25 #include "services/internal/utilities.h"
26 #include "services/internal/error_handling_helpers.h"
28 #include "data_management/features/indices.h"
32 namespace data_management
43 class FeatureIndicesList :
public FeatureIndices
46 static services::SharedPtr<FeatureIndicesList> create(services::Status *status = NULL)
48 return services::internal::wrapSharedAndTryThrow<FeatureIndicesList>(
new FeatureIndicesList(), status);
51 virtual size_t size()
const DAAL_C11_OVERRIDE
53 return _indices.size();
56 virtual bool isPlainRange()
const DAAL_C11_OVERRIDE
61 virtual bool areRawFeatureIndicesAvailable()
const DAAL_C11_OVERRIDE
66 virtual FeatureIndex getFirst()
const DAAL_C11_OVERRIDE
68 if (!size()) {
return FeatureIndexTraits::invalid(); }
72 virtual FeatureIndex getLast()
const DAAL_C11_OVERRIDE
74 if (!size()) {
return FeatureIndexTraits::invalid(); }
75 return _indices[_indices.size() - 1];
78 virtual services::BufferView<FeatureIndex> getRawFeatureIndices() DAAL_C11_OVERRIDE
80 return services::BufferView<FeatureIndex>(_indices.data(), _indices.size());
83 services::Status add(FeatureIndex index)
85 if (index > FeatureIndexTraits::maxIndex() || index == FeatureIndexTraits::invalid())
87 return services::throwIfPossible(services::ErrorIncorrectDataRange);
90 if ( !_indices.safe_push_back(index) )
92 return services::throwIfPossible(services::ErrorMemoryAllocationFailed);
95 return services::Status();
99 FeatureIndicesList() { }
101 services::Collection<FeatureIndex> _indices;
103 typedef services::SharedPtr<FeatureIndicesList> FeatureIndicesListPtr;
109 class FeatureIndicesRange :
public FeatureIndices
112 static services::SharedPtr<FeatureIndicesRange> create(FeatureIndex begin, FeatureIndex end,
113 services::Status *status = NULL)
115 if (begin == FeatureIndexTraits::invalid() ||
116 end == FeatureIndexTraits::invalid())
118 services::internal::tryAssignStatusAndThrow(status, services::ErrorIncorrectIndex);
119 return services::SharedPtr<FeatureIndicesRange>();
121 return services::internal::wrapSharedAndTryThrow<FeatureIndicesRange>(
122 new FeatureIndicesRange(begin, end), status);
125 virtual size_t size()
const DAAL_C11_OVERRIDE
127 return services::internal::maxValue(_begin, _end) -
128 services::internal::minValue(_begin, _end) + 1;
131 virtual bool isPlainRange()
const DAAL_C11_OVERRIDE
136 virtual bool areRawFeatureIndicesAvailable()
const DAAL_C11_OVERRIDE
141 virtual FeatureIndex getFirst()
const DAAL_C11_OVERRIDE
146 virtual FeatureIndex getLast()
const DAAL_C11_OVERRIDE
151 virtual services::BufferView<FeatureIndex> getRawFeatureIndices() DAAL_C11_OVERRIDE
153 return services::BufferView<FeatureIndex>();
157 explicit FeatureIndicesRange(FeatureIndex begin, FeatureIndex end) :
164 typedef services::SharedPtr<FeatureIndicesList> FeatureIndicesListPtr;
daal::data_management::features::internal::FeatureIndicesRange
Implementation of FeatureIndices to store a range of feature indices.
Definition: indices_impl.h:109
daal::services::ErrorIncorrectIndex
Definition: error_indexes.h:102
daal::services::ErrorIncorrectDataRange
Definition: error_indexes.h:79
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:150
daal::data_management::features::internal::FeatureIndicesList
Implementation of FeatureIndices to store a list of feature indices.
Definition: indices_impl.h:43