equal
deleted
inserted
replaced
|
1 #pragma once |
|
2 |
|
3 #include <string> |
|
4 #include <iostream> |
|
5 #include <vector> |
|
6 |
|
7 #include "../include/typedefs.h" |
|
8 #include "../include/DataTypeReaderBase.h" |
|
9 #include "../include/RelpipeReaderException.h" |
|
10 |
|
11 #include "BooleanDataTypeReader.h" |
|
12 #include "IntegerDataTypeReader.h" |
|
13 #include "StringDataTypeReader.h" |
|
14 |
|
15 using namespace std; |
|
16 |
|
17 namespace relpipe { |
|
18 namespace reader { |
|
19 |
|
20 class DataTypeReaderCatalog { |
|
21 private: |
|
22 BooleanDataTypeReader booleanReader; |
|
23 IntegerDataTypeReader integerReader; |
|
24 StringDataTypeReader stringReader; |
|
25 vector<DataTypeReaderBase*> readers = {&booleanReader, &integerReader, &stringReader}; |
|
26 public: |
|
27 |
|
28 integer_t toTypeId(const wstring typeCode) { |
|
29 for (DataTypeReaderBase* reader : readers) if (reader->supports(typeCode)) return reader->getTypeId(); |
|
30 throw RelpipeReaderException(L"Unsupported data type: " + typeCode); |
|
31 } |
|
32 |
|
33 wstring toTypeCode(const integer_t typeId) { |
|
34 for (DataTypeReaderBase* reader : readers) if (reader->supports(typeId)) return reader->getTypeCode(); |
|
35 throw RelpipeReaderException(L"Unsupported data type: " + typeId); |
|
36 } |
|
37 |
|
38 wstring readString(istream &input, const integer_t typeId) { |
|
39 for (DataTypeReaderBase* reader : readers) if (reader->supports(typeId)) return reader->readString(input); |
|
40 throw RelpipeReaderException(L"Unsupported data type: " + typeId); |
|
41 } |
|
42 |
|
43 }; |
|
44 |
|
45 } |
|
46 } |