18 #ifndef __DATA_SOURCE_MODIFIERS_CSV_INTERNAL_ENGINE_H__
19 #define __DATA_SOURCE_MODIFIERS_CSV_INTERNAL_ENGINE_H__
23 #include "services/internal/error_handling_helpers.h"
24 #include "data_management/features/internal/helpers.h"
25 #include "data_management/features/internal/identifiers_impl.h"
26 #include "data_management/data_source/modifiers/csv/modifier.h"
27 #include "data_management/data_source/modifiers/internal/engine.h"
28 #include "data_management/data_source/internal/csv_feature_utils.h"
32 namespace data_management
41 using data_management::internal::CSVFeaturesInfo;
47 class InputFeatureInfo :
public modifiers::internal::InputFeatureInfo
50 InputFeatureInfo() : _detectedFeatureType(features::DAAL_CATEGORICAL), _token() { }
52 explicit InputFeatureInfo(features::FeatureType detectedFeatureType) :
53 _detectedFeatureType(detectedFeatureType) { }
55 const services::StringView &getToken()
const
60 features::FeatureType getDetectedFeatureType()
const
62 return _detectedFeatureType;
65 void setToken(
const services::StringView &token)
71 services::StringView _token;
72 features::FeatureType _detectedFeatureType;
79 class OutputFeatureInfo :
public modifiers::internal::OutputFeatureInfo { };
85 class ConfigImpl :
public Config,
86 public modifiers::internal::Config<InputFeatureInfo,
90 typedef modifiers::internal::Config<InputFeatureInfo,
91 OutputFeatureInfo> impl;
96 explicit ConfigImpl(
const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
97 services::Status *status = NULL) :
98 impl(pickedInputFeatures, status) { }
100 virtual size_t getNumberOfInputFeatures()
const DAAL_C11_OVERRIDE
102 return impl::getNumberOfInputFeatures();
105 virtual features::FeatureType getInputFeatureDetectedType(
size_t index)
const DAAL_C11_OVERRIDE
107 return impl::getPickedInputFeature(index).getDetectedFeatureType();
110 virtual services::Status setNumberOfOutputFeatures(
size_t numberOfOutputFeatures) DAAL_C11_OVERRIDE
112 return impl::setNumberOfOutputFeatures(numberOfOutputFeatures);
115 virtual services::Status setOutputFeatureType(
size_t outputFeatureIndex,
116 features::FeatureType featureType) DAAL_C11_OVERRIDE
118 return impl::setOutputFeatureType(outputFeatureIndex, featureType);
121 virtual services::Status setNumberOfCategories(
size_t outputFeatureIndex,
122 size_t numberOfCategories) DAAL_C11_OVERRIDE
124 return impl::setNumberOfCategories(outputFeatureIndex, numberOfCategories);
127 virtual services::Status setCategoricalDictionary(
size_t outputFeatureIndex,
128 const CategoricalFeatureDictionaryPtr &dictionary) DAAL_C11_OVERRIDE
130 return impl::setCategoricalDictionary(outputFeatureIndex, dictionary);
138 class ContextImpl :
public Context,
139 public modifiers::internal::Context<InputFeatureInfo,
143 typedef modifiers::internal::Context<InputFeatureInfo,
144 OutputFeatureInfo> impl;
149 explicit ContextImpl(
const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
150 services::Status *status = NULL) :
151 impl(pickedInputFeatures, status) { }
153 virtual size_t getNumberOfTokens()
const DAAL_C11_OVERRIDE
155 return impl::getNumberOfInputFeatures();
158 virtual services::StringView getToken(
size_t index)
const DAAL_C11_OVERRIDE
160 return impl::getPickedInputFeature(index).getToken();
163 virtual services::BufferView<DAAL_DATA_TYPE> getOutputBuffer()
const DAAL_C11_OVERRIDE
165 return impl::getOutputBuffer();
173 class ModifiersManager :
public modifiers::internal::ModifiersManager<FeatureModifierIface,
174 ConfigImpl, ContextImpl>
177 static services::SharedPtr<ModifiersManager> create(services::Status *status = NULL)
179 return services::internal::wrapSharedAndTryThrow<ModifiersManager>(
new ModifiersManager(), status);
182 void setToken(
size_t tokenIndex,
const services::StringView &token)
184 getBinder().getInputFeatureInfo(tokenIndex).setToken(token);
187 services::Status prepare(
const CSVFeaturesInfo &featuresInfo)
189 services::Status status;
191 const features::FeatureIdMappingIfacePtr featureMapping = createFeatureMapping(featuresInfo, &status);
192 DAAL_CHECK_STATUS_VAR(status);
194 const services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
195 createInputFeaturesInfo(featuresInfo, &status);
196 DAAL_CHECK_STATUS_VAR(status);
198 status |= getBinder().bind(featureMapping, inputFeaturesInfo);
204 services::internal::CollectionPtr<InputFeatureInfo> createInputFeaturesInfo(
const CSVFeaturesInfo &featuresInfo,
205 services::Status *status = NULL)
207 const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
209 services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
210 services::internal::HeapAllocatableCollection<InputFeatureInfo>::create(numberOfFeatures);
211 if (!inputFeaturesInfo)
213 services::internal::tryAssignStatusAndThrow(status, services::ErrorMemoryAllocationFailed);
214 return inputFeaturesInfo;
217 for (
size_t i = 0; i < numberOfFeatures; i++)
219 features::FeatureType fType = featuresInfo.getDetectedFeatureType(i);
220 (*inputFeaturesInfo)[i] = InputFeatureInfo(fType);
223 return inputFeaturesInfo;
226 features::FeatureIdMappingIfacePtr createFeatureMapping(
const CSVFeaturesInfo &featuresInfo,
227 services::Status *status = NULL)
229 const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
231 services::Status localStatus;
232 const features::internal::FeatureIdDefaultMappingPtr mapping =
233 features::internal::FeatureIdDefaultMapping::create(numberOfFeatures, &localStatus);
236 services::internal::tryAssignStatusAndThrow(status, localStatus);
240 if (featuresInfo.areFeatureNamesAvailable())
242 for (
size_t i = 0; i < numberOfFeatures; ++i)
244 mapping->setFeatureKey(i, featuresInfo.getFeatureName(i));
252 ModifiersManager() { }
254 typedef services::SharedPtr<ModifiersManager> ModifiersManagerPtr;
daal::data_management::modifiers::internal::Context
Base class for modifier context.
Definition: data_management/data_source/modifiers/internal/engine.h:216
daal::data_management::modifiers::internal::ModifiersManager
Class that holds modifiers and implements logic of modifiers applying flow.
Definition: data_management/data_source/modifiers/internal/engine.h:451
daal::data_management::modifiers::internal::Config
Base class for modifier configuration.
Definition: data_management/data_source/modifiers/internal/engine.h:102
daal::services::internal::HeapAllocatableCollection
Wrapper for services::Collection that allocates and deallocates memory using internal new/delete oper...
Definition: internal/collection.h:94
daal::data_management::modifiers::csv::internal::ModifiersManager
Class that holds modifiers and implements logic of modifiers applying flow.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:173
daal::data_management::modifiers::csv::internal::OutputFeatureInfo
Class represents configuration of single output feature.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:79
daal::data_management::modifiers::internal::InputFeatureInfo
Base class represents input feature for modifier, contains information about single input feature...
Definition: data_management/data_source/modifiers/internal/engine.h:37
daal::services::internal::CollectionPtr
Shared pointer to the Collection object.
Definition: internal/collection.h:138
daal::data_management::modifiers::csv::internal::ConfigImpl
Internal implementation of feature modifier configuration.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:85
daal::data_management::modifiers::csv::internal::ContextImpl
Internal implementation of feature modifier context.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:138
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:150
daal::data_management::modifiers::internal::OutputFeatureInfo
Base class represents output feature for modifier, contains information about single output feature...
Definition: data_management/data_source/modifiers/internal/engine.h:43
daal::data_management::modifiers::csv::internal::InputFeatureInfo
Class represents configuration of single input feature.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:47