src/DataTypeReaderCatalog.h
branchv_0
changeset 8 c87e9c84f7aa
parent 7 489e52138771
equal deleted inserted replaced
7:489e52138771 8:c87e9c84f7aa
       
     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 }