C++ API Reference for Intel® Data Analytics Acceleration Library 2019

data_dictionary.h
1 /* file: data_dictionary.h */
2 /*******************************************************************************
3 * Copyright 2014-2018 Intel Corporation.
4 *
5 * This software and the related documents are Intel copyrighted materials, and
6 * your use of them is governed by the express license under which they were
7 * provided to you (License). Unless the License provides otherwise, you may not
8 * use, modify, copy, publish, distribute, disclose or transmit this software or
9 * the related documents without Intel's prior written permission.
10 *
11 * This software and the related documents are provided as is, with no express
12 * or implied warranties, other than those that are expressly stated in the
13 * License.
14 *******************************************************************************/
15 
16 /*
17 //++
18 // Implementation of a data dictionary.
19 //--
20 */
21 
22 #ifndef __DATA_DICTIONARY_H__
23 #define __DATA_DICTIONARY_H__
24 
25 #include "services/daal_defines.h"
26 #include "services/daal_memory.h"
27 #include "data_management/data/data_serialize.h"
28 #include "data_management/data/data_archive.h"
29 
30 #include "data_management/features/defines.h"
31 #include "data_management/features/internal/helpers.h"
32 
33 namespace daal
34 {
35 namespace data_management
36 {
37 
38 namespace interface1
39 {
51 class NumericTableFeature : public SerializationIface
52 {
53 public:
54  features::IndexNumType indexType;
55  features::PMMLNumType pmmlType;
56  features::FeatureType featureType;
57  size_t typeSize;
58  size_t categoryNumber;
59 
60 public:
64  NumericTableFeature()
65  {
66  indexType = features::DAAL_OTHER_T;
67  pmmlType = features::DAAL_GEN_UNKNOWN;
68  featureType = features::DAAL_CONTINUOUS;
69  typeSize = 0;
70  categoryNumber = 0;
71  }
72 
76  NumericTableFeature &operator= (const NumericTableFeature &f)
77  {
78  indexType = f.indexType ;
79  pmmlType = f.pmmlType ;
80  featureType = f.featureType ;
81  typeSize = f.typeSize ;
82  categoryNumber = f.categoryNumber;
83 
84  return *this;
85  }
86 
87  virtual ~NumericTableFeature() {}
88 
93  template<typename T>
94  void setType()
95  {
96  typeSize = sizeof(T);
97  indexType = features::internal::getIndexNumType<T>();
98  pmmlType = features::internal::getPMMLNumType<T>();
99  }
100 
102  services::Status serializeImpl (InputDataArchive *arch) DAAL_C11_OVERRIDE
103  {
104  serialImpl<InputDataArchive, false>( arch );
105 
106  return services::Status();
107  }
108 
110  services::Status deserializeImpl(const OutputDataArchive *arch) DAAL_C11_OVERRIDE
111  {
112  serialImpl<const OutputDataArchive, true>( arch );
113 
114  return services::Status();
115  }
116 
118  template<typename Archive, bool onDeserialize>
119  services::Status serialImpl( Archive *arch )
120  {
121  arch->set( pmmlType );
122  arch->set( featureType );
123  arch->set( typeSize );
124  arch->set( categoryNumber );
125  arch->set( indexType );
126 
127  return services::Status();
128  }
129 
130  virtual int getSerializationTag() const DAAL_C11_OVERRIDE
131  {
132  return SERIALIZATION_DATAFEATURE_NT_ID;
133  }
134 
135  features::IndexNumType getIndexType() const
136  {
137  return indexType;
138  }
139 };
140 
142 class DictionaryIface {
143 public:
148  enum FeaturesEqual
149  {
150  notEqual,
151  equal
152  };
153 };
154 
160 template<typename Feature, int SerializationTag>
161 class DAAL_EXPORT Dictionary : public SerializationIface, public DictionaryIface
162 {
163 public:
164  static int serializationTag() { return SerializationTag; }
165  virtual int getSerializationTag() const DAAL_C11_OVERRIDE { return serializationTag(); }
166 
173  Dictionary( size_t nfeat, FeaturesEqual featuresEqual = notEqual ):
174  _nfeat(0), _featuresEqual(featuresEqual), _dict(0), _errors(new services::KernelErrorCollection())
175  {
176  if(nfeat) { setNumberOfFeatures(nfeat); }
177  }
178 
186  static services::SharedPtr<Dictionary> create( size_t nfeat, FeaturesEqual featuresEqual = notEqual, services::Status *stat = NULL )
187  {
188  DAAL_DEFAULT_CREATE_IMPL_EX(Dictionary, nfeat, featuresEqual);
189  }
190 
195  Dictionary(): _nfeat(0), _dict(0), _featuresEqual(DictionaryIface::notEqual), _errors(new services::KernelErrorCollection()) {}
196 
202  static services::SharedPtr<Dictionary> create( services::Status *stat = NULL )
203  {
204  DAAL_DEFAULT_CREATE_IMPL(Dictionary);
205  }
206 
208  virtual ~Dictionary()
209  {
210  resetDictionary();
211  }
212 
216  services::Status resetDictionary()
217  {
218  if(_dict)
219  {
220  delete[] _dict;
221  _dict = NULL;
222  }
223  _nfeat = 0;
224  return services::Status();
225  }
226 
231  virtual services::Status setAllFeatures(const Feature &defaultFeature)
232  {
233  if (_featuresEqual == DictionaryIface::equal)
234  {
235  if (_nfeat > 0)
236  {
237  _dict[0] = defaultFeature;
238  }
239  }
240  else
241  {
242  for( size_t i = 0 ; i < _nfeat ; i++ )
243  {
244  _dict[i] = defaultFeature;
245  }
246  }
247  return services::Status();
248  }
249 
254  template<typename featureType>
255  services::Status setAllFeatures()
256  {
257  Feature defaultFeature;
258  defaultFeature.template setType<featureType>();
259  return setAllFeatures(defaultFeature);
260  }
261 
266  virtual services::Status setNumberOfFeatures(size_t numberOfFeatures)
267  {
268  resetDictionary();
269  _nfeat = numberOfFeatures;
270  if (_featuresEqual == DictionaryIface::equal)
271  {
272  _dict = new Feature[1];
273  }
274  else
275  {
276  _dict = new Feature[_nfeat];
277  }
278  return services::Status();
279  }
280 
285  size_t getNumberOfFeatures() const
286  {
287  return _nfeat;
288  }
289 
294  FeaturesEqual getFeaturesEqual() const
295  {
296  return _featuresEqual;
297  }
298 
304  Feature &operator[](const size_t idx)
305  {
306  if (_featuresEqual == DictionaryIface::equal)
307  {
308  return _dict[0];
309  }
310  else
311  {
312  return _dict[idx];
313  }
314  }
315 
323  services::Status setFeature(const Feature &feature, size_t idx)
324  {
325  if(idx >= _nfeat)
326  return services::Status(services::ErrorIncorrectNumberOfFeatures);
327 
328  if (_featuresEqual == DictionaryIface::equal)
329  {
330  _dict[0] = feature;
331  }
332  else
333  {
334  _dict[idx] = feature;
335  }
336  return services::Status();
337  }
338 
343  template<typename T>
344  services::Status setFeature(size_t idx)
345  {
346  Feature df;
347  df.template setType<T>();
348  return setFeature(df, idx);
349  }
350 
351  services::Status checkDictionary() const
352  {
353  size_t nFeat = _nfeat;
354  if (_featuresEqual == DictionaryIface::equal) nFeat = 1;
355 
356  for (size_t i = 0; i < nFeat; ++i)
357  {
358  if (_dict[i].getIndexType() == features::DAAL_OTHER_T)
359  {
360  return services::Status(services::ErrorUndefinedFeature);
361  }
362  }
363  return services::Status();
364  }
365 
371  DAAL_DEPRECATED services::SharedPtr<services::KernelErrorCollection> getErrors()
372  {
373  return _errors;
374  }
375 
377  services::Status serializeImpl (InputDataArchive *arch) DAAL_C11_OVERRIDE
378  {
379  serialImpl<InputDataArchive, false>( arch );
380 
381  return services::Status();
382  }
383 
385  services::Status deserializeImpl(const OutputDataArchive *arch) DAAL_C11_OVERRIDE
386  {
387  serialImpl<const OutputDataArchive, true>( arch );
388 
389  return services::Status();
390  }
391 
392 private:
394  template<typename Archive, bool onDeserialize>
395  services::Status serialImpl( Archive *arch )
396  {
397  arch->segmentHeader();
398 
399  arch->set( _nfeat );
400  arch->set( _featuresEqual );
401 
402  if( onDeserialize )
403  {
404  size_t nfeat = _nfeat;
405  _nfeat = 0;
406  setNumberOfFeatures(nfeat);
407  }
408 
409  if (_featuresEqual)
410  {
411  arch->setObj( _dict, 1 );
412  }
413  else
414  {
415  arch->setObj( _dict, _nfeat );
416  }
417 
418  arch->segmentFooter();
419 
420  return services::Status();
421  }
422 
423 protected:
424  size_t _nfeat;
425  FeaturesEqual _featuresEqual;
426  Feature *_dict;
427  services::SharedPtr<services::KernelErrorCollection> _errors;
428 
429  Dictionary( size_t nfeat, FeaturesEqual featuresEqual, services::Status &st ):
430  _nfeat(0), _featuresEqual(featuresEqual), _dict(0), _errors(new services::KernelErrorCollection())
431  {
432  if(nfeat) { st |= setNumberOfFeatures(nfeat); }
433  }
434 
435  Dictionary(services::Status &st): _nfeat(0), _dict(0), _featuresEqual(DictionaryIface::notEqual), _errors(new services::KernelErrorCollection()) {}
436 };
437 typedef Dictionary<NumericTableFeature, SERIALIZATION_DATADICTIONARY_NT_ID> NumericTableDictionary;
438 typedef services::SharedPtr<NumericTableDictionary> NumericTableDictionaryPtr;
439 typedef services::SharedPtr<NumericTableFeature> NumericTableFeaturePtr;
442 } // namespace interface1
443 using interface1::NumericTableFeature;
444 using interface1::NumericTableFeaturePtr;
445 using interface1::DictionaryIface;
446 using interface1::Dictionary;
447 using interface1::NumericTableDictionary;
448 using interface1::NumericTableDictionaryPtr;
449 
450 }
451 } // namespace daal
452 #endif
daal::data_management::interface1::Dictionary::resetDictionary
services::Status resetDictionary()
Definition: data_dictionary.h:216
daal
Definition: algorithm_base_common.h:31
daal::data_management::interface1::InputDataArchive
Provides methods to create an archive data object (serialized) and access this object.
Definition: data_archive.h:689
daal::data_management::interface1::NumericTableFeature::NumericTableFeature
NumericTableFeature()
Definition: data_dictionary.h:64
daal::data_management::interface1::DictionaryIface::notEqual
Definition: data_dictionary.h:150
daal::data_management::interface1::Dictionary::operator[]
Feature & operator[](const size_t idx)
Definition: data_dictionary.h:304
daal::data_management::interface1::Dictionary::create
static services::SharedPtr< Dictionary > create(services::Status *stat=NULL)
Definition: data_dictionary.h:202
daal::services::ErrorIncorrectNumberOfFeatures
Definition: error_indexes.h:70
daal::data_management::interface1::Dictionary::getErrors
DAAL_DEPRECATED services::SharedPtr< services::KernelErrorCollection > getErrors()
Definition: data_dictionary.h:371
daal::services::SerializationTag
Definition: error_indexes.h:57
daal_defines.h
daal::data_management::interface1::Dictionary::getNumberOfFeatures
size_t getNumberOfFeatures() const
Definition: data_dictionary.h:285
daal::data_management::interface1::Dictionary::setFeature
services::Status setFeature(size_t idx)
Definition: data_dictionary.h:344
daal::data_management::interface1::NumericTableFeature::operator=
NumericTableFeature & operator=(const NumericTableFeature &f)
Definition: data_dictionary.h:76
daal::data_management::interface1::Dictionary::getSerializationTag
virtual int getSerializationTag() const DAAL_C11_OVERRIDE
Definition: data_dictionary.h:165
daal::data_management::interface1::NumericTableFeature::getSerializationTag
virtual int getSerializationTag() const DAAL_C11_OVERRIDE
Definition: data_dictionary.h:130
daal::data_management::interface1::Dictionary::setNumberOfFeatures
virtual services::Status setNumberOfFeatures(size_t numberOfFeatures)
Definition: data_dictionary.h:266
daal::data_management::interface1::Dictionary::setAllFeatures
services::Status setAllFeatures()
Definition: data_dictionary.h:255
daal::data_management::interface1::Dictionary::Dictionary
Dictionary(size_t nfeat, FeaturesEqual featuresEqual=notEqual)
Definition: data_dictionary.h:173
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:323
daal::data_management::interface1::DictionaryIface::FeaturesEqual
FeaturesEqual
Enumeration to specify whether the Data Dictionary contains equal features.
Definition: data_dictionary.h:148
daal::data_management::interface1::NumericTableFeature::setType
void setType()
Definition: data_dictionary.h:94
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:186
daal::services::ErrorUndefinedFeature
Definition: error_indexes.h:140
daal::data_management::interface1::Dictionary::setAllFeatures
virtual services::Status setAllFeatures(const Feature &defaultFeature)
Definition: data_dictionary.h:231
daal::data_management::interface1::Dictionary::Dictionary
Dictionary()
Definition: data_dictionary.h:195
daal::data_management::interface1::SerializationIface
Abstract interface class that defines the interface for serialization and deserialization.
Definition: data_serialize.h:50
daal::data_management::interface1::NumericTableFeature
Data structure describes the Numeric Table feature.
Definition: data_dictionary.h:51
daal::data_management::interface1::Dictionary::getFeaturesEqual
FeaturesEqual getFeaturesEqual() const
Definition: data_dictionary.h:294
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:161

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