C++ API Reference for Intel® Data Analytics Acceleration Library 2020 Update 1

data_management/data_source/modifiers/csv/internal/engine.h
1 /* file: engine.h */
2 /*******************************************************************************
3 * Copyright 2014-2020 Intel Corporation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *******************************************************************************/
17 
18 #ifndef __DATA_SOURCE_MODIFIERS_CSV_INTERNAL_ENGINE_H__
19 #define __DATA_SOURCE_MODIFIERS_CSV_INTERNAL_ENGINE_H__
20 
21 #include <string>
22 
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"
29 
30 namespace daal
31 {
32 namespace data_management
33 {
34 namespace modifiers
35 {
36 namespace csv
37 {
38 namespace internal
39 {
40 
41 using data_management::internal::CSVFeaturesInfo;
42 
47 class InputFeatureInfo : public modifiers::internal::InputFeatureInfo
48 {
49 public:
50  InputFeatureInfo() : _detectedFeatureType(features::DAAL_CATEGORICAL), _token() { }
51 
52  explicit InputFeatureInfo(features::FeatureType detectedFeatureType) :
53  _detectedFeatureType(detectedFeatureType) { }
54 
55  const services::StringView &getToken() const
56  {
57  return _token;
58  }
59 
60  features::FeatureType getDetectedFeatureType() const
61  {
62  return _detectedFeatureType;
63  }
64 
65  void setToken(const services::StringView &token)
66  {
67  _token = token;
68  }
69 
70 private:
71  services::StringView _token;
72  features::FeatureType _detectedFeatureType;
73 };
74 
79 class OutputFeatureInfo : public modifiers::internal::OutputFeatureInfo { };
80 
85 class ConfigImpl : public Config,
86  public modifiers::internal::Config<InputFeatureInfo,
87  OutputFeatureInfo>
88 {
89 private:
90  typedef modifiers::internal::Config<InputFeatureInfo,
91  OutputFeatureInfo> impl;
92 
93 public:
94  ConfigImpl() { }
95 
96  explicit ConfigImpl(const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
97  services::Status *status = NULL) :
98  impl(pickedInputFeatures, status) { }
99 
100  virtual size_t getNumberOfInputFeatures() const DAAL_C11_OVERRIDE
101  {
102  return impl::getNumberOfInputFeatures();
103  }
104 
105  virtual features::FeatureType getInputFeatureDetectedType(size_t index) const DAAL_C11_OVERRIDE
106  {
107  return impl::getPickedInputFeature(index).getDetectedFeatureType();
108  }
109 
110  virtual services::Status setNumberOfOutputFeatures(size_t numberOfOutputFeatures) DAAL_C11_OVERRIDE
111  {
112  return impl::setNumberOfOutputFeatures(numberOfOutputFeatures);
113  }
114 
115  virtual services::Status setOutputFeatureType(size_t outputFeatureIndex,
116  features::FeatureType featureType) DAAL_C11_OVERRIDE
117  {
118  return impl::setOutputFeatureType(outputFeatureIndex, featureType);
119  }
120 
121  virtual services::Status setNumberOfCategories(size_t outputFeatureIndex,
122  size_t numberOfCategories) DAAL_C11_OVERRIDE
123  {
124  return impl::setNumberOfCategories(outputFeatureIndex, numberOfCategories);
125  }
126 
127  virtual services::Status setCategoricalDictionary(size_t outputFeatureIndex,
128  const CategoricalFeatureDictionaryPtr &dictionary) DAAL_C11_OVERRIDE
129  {
130  return impl::setCategoricalDictionary(outputFeatureIndex, dictionary);
131  }
132 };
133 
138 class ContextImpl : public Context,
139  public modifiers::internal::Context<InputFeatureInfo,
140  OutputFeatureInfo>
141 {
142 private:
143  typedef modifiers::internal::Context<InputFeatureInfo,
144  OutputFeatureInfo> impl;
145 
146 public:
147  ContextImpl() { }
148 
149  explicit ContextImpl(const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
150  services::Status *status = NULL) :
151  impl(pickedInputFeatures, status) { }
152 
153  virtual size_t getNumberOfTokens() const DAAL_C11_OVERRIDE
154  {
155  return impl::getNumberOfInputFeatures();
156  }
157 
158  virtual services::StringView getToken(size_t index) const DAAL_C11_OVERRIDE
159  {
160  return impl::getPickedInputFeature(index).getToken();
161  }
162 
163  virtual services::BufferView<DAAL_DATA_TYPE> getOutputBuffer() const DAAL_C11_OVERRIDE
164  {
165  return impl::getOutputBuffer();
166  }
167 };
168 
173 class ModifiersManager : public modifiers::internal::ModifiersManager<FeatureModifierIface,
174  ConfigImpl, ContextImpl>
175 {
176 public:
177  static services::SharedPtr<ModifiersManager> create(services::Status *status = NULL)
178  {
179  return services::internal::wrapSharedAndTryThrow<ModifiersManager>(new ModifiersManager(), status);
180  }
181 
182  void setToken(size_t tokenIndex, const services::StringView &token)
183  {
184  getBinder().getInputFeatureInfo(tokenIndex).setToken(token);
185  }
186 
187  services::Status prepare(const CSVFeaturesInfo &featuresInfo)
188  {
189  services::Status status;
190 
191  const features::FeatureIdMappingIfacePtr featureMapping = createFeatureMapping(featuresInfo, &status);
192  DAAL_CHECK_STATUS_VAR(status);
193 
194  const services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
195  createInputFeaturesInfo(featuresInfo, &status);
196  DAAL_CHECK_STATUS_VAR(status);
197 
198  status |= getBinder().bind(featureMapping, inputFeaturesInfo);
199 
200  return status;
201  }
202 
203 private:
204  services::internal::CollectionPtr<InputFeatureInfo> createInputFeaturesInfo(const CSVFeaturesInfo &featuresInfo,
205  services::Status *status = NULL)
206  {
207  const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
208 
209  services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
210  services::internal::HeapAllocatableCollection<InputFeatureInfo>::create(numberOfFeatures);
211  if (!inputFeaturesInfo)
212  {
213  services::internal::tryAssignStatusAndThrow(status, services::ErrorMemoryAllocationFailed);
214  return inputFeaturesInfo;
215  }
216 
217  for (size_t i = 0; i < numberOfFeatures; i++)
218  {
219  features::FeatureType fType = featuresInfo.getDetectedFeatureType(i);
220  (*inputFeaturesInfo)[i] = InputFeatureInfo(fType);
221  }
222 
223  return inputFeaturesInfo;
224  }
225 
226  features::FeatureIdMappingIfacePtr createFeatureMapping(const CSVFeaturesInfo &featuresInfo,
227  services::Status *status = NULL)
228  {
229  const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
230 
231  services::Status localStatus;
232  const features::internal::FeatureIdDefaultMappingPtr mapping =
233  features::internal::FeatureIdDefaultMapping::create(numberOfFeatures, &localStatus);
234  if (!localStatus)
235  {
236  services::internal::tryAssignStatusAndThrow(status, localStatus);
237  return mapping;
238  }
239 
240  if (featuresInfo.areFeatureNamesAvailable())
241  {
242  for (size_t i = 0; i < numberOfFeatures; ++i)
243  {
244  mapping->setFeatureKey(i, featuresInfo.getFeatureName(i));
245  }
246  }
247 
248  return mapping;
249  }
250 
251 private:
252  ModifiersManager() { }
253 };
254 typedef services::SharedPtr<ModifiersManager> ModifiersManagerPtr;
255 
256 } // namespace internal
257 } // namespace csv
258 } // namespace modifiers
259 } // namespace data_management
260 } // namespace daal
261 
262 #endif
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

For more complete information about compiler optimizations, see our Optimization Notice.