C++ API Reference for Intel® Data Analytics Acceleration Library 2018 Update 3

string_data_source.h
1 /* file: string_data_source.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 the string data source class.
19 //--
20 */
21 
22 #ifndef __STRING_DATA_SOURCE_H__
23 #define __STRING_DATA_SOURCE_H__
24 
25 #include "services/daal_memory.h"
26 #include "data_management/data_source/data_source.h"
27 #include "data_management/data_source/csv_data_source.h"
28 #include "data_management/data/data_dictionary.h"
29 #include "data_management/data/numeric_table.h"
30 #include "data_management/data/homogen_numeric_table.h"
31 
32 namespace daal
33 {
34 namespace data_management
35 {
36 
37 namespace interface1
38 {
48 template< typename _featureManager, typename _summaryStatisticsType = DAAL_SUMMARY_STATISTICS_TYPE >
49 class StringDataSource : public CsvDataSource< _featureManager, _summaryStatisticsType >
50 {
51 public:
52  using CsvDataSource<_featureManager,_summaryStatisticsType>::checkDictionary;
53  using CsvDataSource<_featureManager,_summaryStatisticsType>::checkNumericTable;
54  using CsvDataSource<_featureManager,_summaryStatisticsType>::freeNumericTable;
55  using CsvDataSource<_featureManager,_summaryStatisticsType>::_dict;
56  using CsvDataSource<_featureManager,_summaryStatisticsType>::_initialMaxRows;
57  using CsvDataSource<_featureManager,_summaryStatisticsType>::loadDataBlock;
58 
59  using CsvDataSource<_featureManager,_summaryStatisticsType>::featureManager;
60 
61  using CsvDataSource<_featureManager,_summaryStatisticsType>::createDictionaryFromContext;
62 
66  typedef _featureManager FeatureManager;
67 
68 protected:
69  typedef data_management::HomogenNumericTable<DAAL_DATA_TYPE> DefaultNumericTableType;
70 
71  using CsvDataSource<_featureManager,_summaryStatisticsType>::_rawLineBuffer;
72  using CsvDataSource<_featureManager,_summaryStatisticsType>::_rawLineBufferLen;
73  using CsvDataSource<_featureManager,_summaryStatisticsType>::_rawLineLength;
74  using CsvDataSource<_featureManager,_summaryStatisticsType>::enlargeBuffer;
75 
76 public:
86  StringDataSource( const byte *data,
87  DataSourceIface::NumericTableAllocationFlag doAllocateNumericTable = DataSource::notAllocateNumericTable,
88  DataSourceIface::DictionaryCreationFlag doCreateDictionaryFromContext = DataSource::notDictionaryFromContext,
89  size_t initialMaxRows = 10):
90  CsvDataSource<_featureManager,_summaryStatisticsType>(doAllocateNumericTable, doCreateDictionaryFromContext, initialMaxRows), _contextDictFlag(false)
91  {
92  setData( data );
93  }
94 
95  ~StringDataSource() {}
96 
101  void setData( const byte *data )
102  {
103  if( !data )
104  {
105  this->_status.add(services::throwIfPossible(services::Status(services::ErrorNullPtr)));
106  return;
107  }
108  _stringBufferPos = 0;
109  _stringBuffer = (char *)data;
110  }
111 
116  const byte *getData()
117  {
118  return (const byte *)(_stringBuffer);
119  }
120 
124  void resetData()
125  {
126  _stringBufferPos = 0;
127  }
128 
129 public:
130  services::Status createDictionaryFromContext() DAAL_C11_OVERRIDE
131  {
132  services::Status s = CsvDataSource<_featureManager,_summaryStatisticsType>::createDictionaryFromContext();
133  _stringBufferPos = 0;
134  return s;
135  }
136 
137  DataSourceIface::DataSourceStatus getStatus() DAAL_C11_OVERRIDE
138  {
139  return (iseof() ? DataSourceIface::endOfData : DataSourceIface::readyForLoad);
140  }
141 
142 protected:
143  bool iseof() const DAAL_C11_OVERRIDE
144  {
145  return (_stringBuffer[_stringBufferPos] == '\0');
146  }
147 
148  int readLine(char *buffer, int count)
149  {
150  int pos = 0;
151  for(;pos<count-1;pos++)
152  {
153  buffer[pos] = _stringBuffer[_stringBufferPos+pos];
154 
155  if( buffer[pos]=='\0' || buffer[pos]=='\n' )
156  {
157  break;
158  }
159  }
160  if(buffer[pos]=='\n')
161  {
162  pos++;
163  }
164  _stringBufferPos += pos;
165  buffer[pos] = '\0';
166  return pos;
167  }
168 
169  services::Status readLine() DAAL_C11_OVERRIDE
170  {
171  _rawLineLength = 0;
172  while(!iseof())
173  {
174  const int readLen = readLine (_rawLineBuffer + _rawLineLength, (int)(_rawLineBufferLen - _rawLineLength));
175  if (readLen <= 0)
176  {
177  _rawLineLength = 0;
178  return services::Status();
179  }
180  _rawLineLength += readLen;
181  if (_rawLineBuffer[_rawLineLength - 1] == '\n' || _rawLineBuffer[_rawLineLength - 1] == '\r')
182  {
183  while (_rawLineLength > 0 && (_rawLineBuffer[_rawLineLength - 1] == '\n' || _rawLineBuffer[_rawLineLength - 1] == '\r'))
184  {
185  _rawLineLength--;
186  }
187  _rawLineBuffer[_rawLineLength] = '\0';
188  return services::Status();
189  }
190  if(!enlargeBuffer())
191  return services::Status(services::ErrorMemoryAllocationFailed);
192  }
193  return services::Status();
194  }
195 
196 private:
197  char *_stringBuffer;
198  size_t _stringBufferPos;
199 
200  bool _contextDictFlag;
201 };
203 } // namespace interface1
204 using interface1::StringDataSource;
205 
206 }
207 }
208 #endif
daal::data_management::interface1::StringDataSource::resetData
void resetData()
Definition: string_data_source.h:124
daal::data_management::interface1::StringDataSource::FeatureManager
_featureManager FeatureManager
Definition: string_data_source.h:66
daal
Definition: algorithm_base_common.h:31
daal::data_management::interface1::StringDataSource::StringDataSource
StringDataSource(const byte *data, DataSourceIface::NumericTableAllocationFlag doAllocateNumericTable=DataSource::notAllocateNumericTable, DataSourceIface::DictionaryCreationFlag doCreateDictionaryFromContext=DataSource::notDictionaryFromContext, size_t initialMaxRows=10)
Definition: string_data_source.h:86
daal::data_management::interface1::StringDataSource
Specifies methods to access data stored in byte arrays in the C-string format.
Definition: string_data_source.h:49
daal::data_management::interface1::CsvDataSource::createDictionaryFromContext
services::Status createDictionaryFromContext() DAAL_C11_OVERRIDE
Definition: csv_data_source.h:249
daal::data_management::interface1::DataSourceIface::DictionaryCreationFlag
DictionaryCreationFlag
Specifies whether a Data Dictionary is created from the context of a Data Source. ...
Definition: data_source.h:69
daal::data_management::interface1::StringDataSource::setData
void setData(const byte *data)
Definition: string_data_source.h:101
daal::data_management::interface1::StringDataSource::getStatus
DataSourceIface::DataSourceStatus getStatus() DAAL_C11_OVERRIDE
Definition: string_data_source.h:137
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:146
daal::data_management::interface1::DataSourceIface::notAllocateNumericTable
Definition: data_source.h:81
daal::services::ErrorNullPtr
Definition: error_indexes.h:139
daal::data_management::interface1::DataSourceIface::doAllocateNumericTable
Definition: data_source.h:82
daal::data_management::interface1::StringDataSource::createDictionaryFromContext
services::Status createDictionaryFromContext() DAAL_C11_OVERRIDE
Definition: string_data_source.h:130
daal::data_management::interface1::CsvDataSource
Specifies methods to access data stored in files.
Definition: csv_data_source.h:48
daal::algorithms::association_rules::data
Definition: apriori_types.h:81
daal::data_management::interface1::DataSourceIface::DataSourceStatus
DataSourceStatus
Specifies the status of the Data Source.
Definition: data_source.h:57
daal::data_management::interface1::DataSourceIface::readyForLoad
Definition: data_source.h:59
daal::data_management::interface1::StringDataSource::getData
const byte * getData()
Definition: string_data_source.h:116
daal::data_management::interface1::DataSourceIface::notDictionaryFromContext
Definition: data_source.h:71
daal::data_management::interface1::DataSourceIface::endOfData
Definition: data_source.h:61
daal::data_management::interface1::DataSourceIface::NumericTableAllocationFlag
NumericTableAllocationFlag
Specifies whether a Numeric Table is allocated inside of the Data Source object.
Definition: data_source.h:79

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