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

data_dictionary.h
1 /* file: data_dictionary.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 /*
19 //++
20 // Implementation of a data dictionary.
21 //--
22 */
23 
24 #ifndef __DATA_DICTIONARY_H__
25 #define __DATA_DICTIONARY_H__
26 
27 #include "services/daal_defines.h"
28 #include "services/daal_memory.h"
29 #include "data_management/data/data_serialize.h"
30 #include "data_management/data/data_archive.h"
31 
32 #include "data_management/features/defines.h"
33 #include "data_management/features/internal/helpers.h"
34 
35 namespace daal
36 {
37 namespace data_management
38 {
39 
40 namespace interface1
41 {
53 class NumericTableFeature : public SerializationIface
54 {
55 public:
56  features::IndexNumType indexType;
57  features::PMMLNumType pmmlType;
58  features::FeatureType featureType;
59  size_t typeSize;
60  size_t categoryNumber;
61 
62 public:
66  NumericTableFeature()
67  {
68  indexType = features::DAAL_OTHER_T;
69  pmmlType = features::DAAL_GEN_UNKNOWN;
70  featureType = features::DAAL_CONTINUOUS;
71  typeSize = 0;
72  categoryNumber = 0;
73  }
74 
78  NumericTableFeature &operator= (const NumericTableFeature &f)
79  {
80  indexType = f.indexType ;
81  pmmlType = f.pmmlType ;
82  featureType = f.featureType ;
83  typeSize = f.typeSize ;
84  categoryNumber = f.categoryNumber;
85 
86  return *this;
87  }
88 
89  virtual ~NumericTableFeature() {}
90 
95  template<typename T>
96  void setType()
97  {
98  typeSize = sizeof(T);
99  indexType = features::internal::getIndexNumType<T>();
100  pmmlType = features::internal::getPMMLNumType<T>();
101  }
102 
104  services::Status serializeImpl (InputDataArchive *arch) DAAL_C11_OVERRIDE
105  {
106  serialImpl<InputDataArchive, false>( arch );
107 
108  return services::Status();
109  }
110 
112  services::Status deserializeImpl(const OutputDataArchive *arch) DAAL_C11_OVERRIDE
113  {
114  serialImpl<const OutputDataArchive, true>( arch );
115 
116  return services::Status();
117  }
118 
120  template<typename Archive, bool onDeserialize>
121  services::Status serialImpl( Archive *arch )
122  {
123  arch->set( pmmlType );
124  arch->set( featureType );
125  arch->set( typeSize );
126  arch->set( categoryNumber );
127  arch->set( indexType );
128 
129  return services::Status();
130  }
131 
132  virtual int getSerializationTag() const DAAL_C11_OVERRIDE
133  {
134  return SERIALIZATION_DATAFEATURE_NT_ID;
135  }
136 
137  features::IndexNumType getIndexType() const
138  {
139  return indexType;
140  }
141 };
142 
144 class DictionaryIface {
145 public:
150  enum FeaturesEqual
151  {
152  notEqual,
153  equal
154  };
155 };
156 
162 template<typename Feature, int SerializationTag>
163 class DAAL_EXPORT Dictionary : public SerializationIface, public DictionaryIface
164 {
165 public:
166  static int serializationTag() { return SerializationTag; }
167  virtual int getSerializationTag() const DAAL_C11_OVERRIDE { return serializationTag(); }
168 
175  Dictionary( size_t nfeat, FeaturesEqual featuresEqual = notEqual ):
176  _nfeat(0), _featuresEqual(featuresEqual), _dict(0), _errors(new services::KernelErrorCollection())
177  {
178  if(nfeat) { setNumberOfFeatures(nfeat); }
179  }
180 
188  static services::SharedPtr<Dictionary> create( size_t nfeat, FeaturesEqual featuresEqual = notEqual, services::Status *stat = NULL )
189  {
190  DAAL_DEFAULT_CREATE_IMPL_EX(Dictionary, nfeat, featuresEqual);
191  }
192 
197  Dictionary(): _nfeat(0), _dict(0), _featuresEqual(DictionaryIface::notEqual), _errors(new services::KernelErrorCollection()) {}
198 
204  static services::SharedPtr<Dictionary> create( services::Status *stat = NULL )
205  {
206  DAAL_DEFAULT_CREATE_IMPL(Dictionary);
207  }
208 
210  virtual ~Dictionary()
211  {
212  resetDictionary();
213  }
214 
218  services::Status resetDictionary()
219  {
220  if(_dict)
221  {
222  delete[] _dict;
223  _dict = NULL;
224  }
225  _nfeat = 0;
226  return services::Status();
227  }
228 
233  virtual services::Status setAllFeatures(const Feature &defaultFeature)
234  {
235  if (_featuresEqual == DictionaryIface::equal)
236  {
237  if (_nfeat > 0)
238  {
239  _dict[0] = defaultFeature;
240  }
241  }
242  else
243  {
244  for( size_t i = 0 ; i < _nfeat ; i++ )
245  {
246  _dict[i] = defaultFeature;
247  }
248  }
249  return services::Status();
250  }
251 
256  template<typename featureType>
257  services::Status setAllFeatures()
258  {
259  Feature defaultFeature;
260  defaultFeature.template setType<featureType>();
261  return setAllFeatures(defaultFeature);
262  }
263 
268  virtual services::Status setNumberOfFeatures(size_t numberOfFeatures)
269  {
270  resetDictionary();
271  _nfeat = numberOfFeatures;
272  if (_featuresEqual == DictionaryIface::equal)
273  {
274  _dict = new Feature[1];
275  }
276  else
277  {
278  _dict = new Feature[_nfeat];
279  }
280  return services::Status();
281  }
282 
287  size_t getNumberOfFeatures() const
288  {
289  return _nfeat;
290  }
291 
296  FeaturesEqual getFeaturesEqual() const
297  {
298  return _featuresEqual;
299  }
300 
306  Feature &operator[](const size_t idx)
307  {
308  if (_featuresEqual == DictionaryIface::equal)
309  {
310  return _dict[0];
311  }
312  else
313  {
314  return _dict[idx];
315  }
316  }
317 
325  services::Status setFeature(const Feature &feature, size_t idx)
326  {
327  if(idx >= _nfeat)
328  return services::Status(services::ErrorIncorrectNumberOfFeatures);
329 
330  if (_featuresEqual == DictionaryIface::equal)
331  {
332  _dict[0] = feature;
333  }
334  else
335  {
336  _dict[idx] = feature;
337  }
338  return services::Status();
339  }
340 
345  template<typename T>
346  services::Status setFeature(size_t idx)
347  {
348  Feature df;
349  df.template setType<T>();
350  return setFeature(df, idx);
351  }
352 
353  services::Status checkDictionary() const
354  {
355  size_t nFeat = _nfeat;
356  if (_featuresEqual == DictionaryIface::equal) nFeat = 1;
357 
358  for (size_t i = 0; i < nFeat; ++i)
359  {
360  if (_dict[i].getIndexType() == features::DAAL_OTHER_T)
361  {
362  return services::Status(services::ErrorUndefinedFeature);
363  }
364  }
365  return services::Status();
366  }
367 
373  DAAL_DEPRECATED services::SharedPtr<services::KernelErrorCollection> getErrors()
374  {
375  return _errors;
376  }
377 
379  services::Status serializeImpl (InputDataArchive *arch) DAAL_C11_OVERRIDE
380  {
381  serialImpl<InputDataArchive, false>( arch );
382 
383  return services::Status();
384  }
385 
387  services::Status deserializeImpl(const OutputDataArchive *arch) DAAL_C11_OVERRIDE
388  {
389  serialImpl<const OutputDataArchive, true>( arch );
390 
391  return services::Status();
392  }
393 
394 private:
396  template<typename Archive, bool onDeserialize>
397  services::Status serialImpl( Archive *arch )
398  {
399  arch->segmentHeader();
400 
401  arch->set( _nfeat );
402  arch->set( _featuresEqual );
403 
404  if( onDeserialize )
405  {
406  size_t nfeat = _nfeat;
407  _nfeat = 0;
408  setNumberOfFeatures(nfeat);
409  }
410 
411  if (_featuresEqual)
412  {
413  arch->setObj( _dict, 1 );
414  }
415  else
416  {
417  arch->setObj( _dict, _nfeat );
418  }
419 
420  arch->segmentFooter();
421 
422  return services::Status();
423  }
424 
425 protected:
426  size_t _nfeat;
427  FeaturesEqual _featuresEqual;
428  Feature *_dict;
429  services::SharedPtr<services::KernelErrorCollection> _errors;
430 
431  Dictionary( size_t nfeat, FeaturesEqual featuresEqual, services::Status &st ):
432  _nfeat(0), _featuresEqual(featuresEqual), _dict(0), _errors(new services::KernelErrorCollection())
433  {
434  if(nfeat) { st |= setNumberOfFeatures(nfeat); }
435  }
436 
437  Dictionary(services::Status &st): _nfeat(0), _dict(0), _featuresEqual(DictionaryIface::notEqual), _errors(new services::KernelErrorCollection()) {}
438 };
439 typedef Dictionary<NumericTableFeature, SERIALIZATION_DATADICTIONARY_NT_ID> NumericTableDictionary;
440 typedef services::SharedPtr<NumericTableDictionary> NumericTableDictionaryPtr;
441 typedef services::SharedPtr<NumericTableFeature> NumericTableFeaturePtr;
444 } // namespace interface1
445 using interface1::NumericTableFeature;
446 using interface1::NumericTableFeaturePtr;
447 using interface1::DictionaryIface;
448 using interface1::Dictionary;
449 using interface1::NumericTableDictionary;
450 using interface1::NumericTableDictionaryPtr;
451 
452 }
453 } // namespace daal
454 #endif
daal::data_management::interface1::Dictionary::setAllFeatures
virtual services::Status setAllFeatures(const Feature &defaultFeature)
Definition: data_dictionary.h:233
daal::data_management::interface1::Dictionary::operator[]
Feature & operator[](const size_t idx)
Definition: data_dictionary.h:306
daal::data_management::interface1::Dictionary::getErrors
DAAL_DEPRECATED services::SharedPtr< services::KernelErrorCollection > getErrors()
Definition: data_dictionary.h:373
daal::data_management::interface1::Dictionary
Class that represents a dictionary of a data set and provides methods to work with the data dictionar...
Definition: data_dictionary.h:163
daal::data_management::interface1::NumericTableFeature::setType
void setType()
Definition: data_dictionary.h:96
daal::data_management::interface1::Dictionary::setFeature
services::Status setFeature(size_t idx)
Definition: data_dictionary.h:346
daal::data_management::interface1::Dictionary::Dictionary
Dictionary(size_t nfeat, FeaturesEqual featuresEqual=notEqual)
Definition: data_dictionary.h:175
daal::data_management::interface1::Dictionary::setNumberOfFeatures
virtual services::Status setNumberOfFeatures(size_t numberOfFeatures)
Definition: data_dictionary.h:268
daal::data_management::interface1::NumericTableFeature::getSerializationTag
virtual int getSerializationTag() const DAAL_C11_OVERRIDE
Definition: data_dictionary.h:132
daal::data_management::interface1::Dictionary::getSerializationTag
virtual int getSerializationTag() const DAAL_C11_OVERRIDE
Definition: data_dictionary.h:167
daal::data_management::interface1::NumericTableFeature::operator=
NumericTableFeature & operator=(const NumericTableFeature &f)
Definition: data_dictionary.h:78
daal::data_management::interface1::Dictionary::setFeature
services::Status setFeature(const Feature &feature, size_t idx)
Adds a feature to a data dictionary.
Definition: data_dictionary.h:325
daal_defines.h
daal::data_management::interface1::SerializationIface
Abstract interface class that defines the interface for serialization and deserialization.
Definition: data_serialize.h:52
daal::data_management::interface1::Dictionary::getFeaturesEqual
FeaturesEqual getFeaturesEqual() const
Definition: data_dictionary.h:296
daal::data_management::interface1::Dictionary::create
static services::SharedPtr< Dictionary > create(services::Status *stat=NULL)
Definition: data_dictionary.h:204
daal::data_management::interface1::Dictionary::create
static services::SharedPtr< Dictionary > create(size_t nfeat, FeaturesEqual featuresEqual=notEqual, services::Status *stat=NULL)
Definition: data_dictionary.h:188
daal::services::SerializationTag
Definition: error_indexes.h:59
daal::services::ErrorIncorrectNumberOfFeatures
Definition: error_indexes.h:72
daal::data_management::interface1::NumericTableFeature
Data structure describes the Numeric Table feature.
Definition: data_dictionary.h:53
daal::data_management::interface1::InputDataArchive
Provides methods to create an archive data object (serialized) and access this object.
Definition: data_archive.h:725
daal::data_management::interface1::Dictionary::resetDictionary
services::Status resetDictionary()
Definition: data_dictionary.h:218
daal::data_management::interface1::NumericTableFeature::NumericTableFeature
NumericTableFeature()
Definition: data_dictionary.h:66
daal::data_management::interface1::Dictionary::setAllFeatures
services::Status setAllFeatures()
Definition: data_dictionary.h:257
daal::data_management::interface1::Dictionary::getNumberOfFeatures
size_t getNumberOfFeatures() const
Definition: data_dictionary.h:287
daal::services::ErrorUndefinedFeature
Definition: error_indexes.h:142
daal::data_management::interface1::Dictionary::Dictionary
Dictionary()
Definition: data_dictionary.h:197

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