diff -r 543f1613c2da -r e8de089f95dd src/StringDataTypeReader.h --- a/src/StringDataTypeReader.h Sat Aug 25 17:39:27 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -#include - -#include "../include/typedefs.h" -#include "../include/DataTypeReader.h" - -namespace relpipe { -namespace reader { - -/** - * The prototype does not recognize any encoding, - * it just works with c++ strings in encoding default to given platform. - * In the real implementation of relational pipes, there will be DataTypes for particular encodings. - */ -class StringDataTypeReader : public DataTypeReader { -private: - IntegerDataTypeReader integerType; - std::wstring_convert> convertor; // TODO: support also other encodings. -public: - - StringDataTypeReader() : DataTypeReader(DATA_TYPE_ID_STRING, DATA_TYPE_CODE_STRING) { - } - - string_t readValue(std::istream &input) override { - integer_t length = integerType.readValue(input); - // TODO: check maximum length of single field - // if (length > 4000) throw RelpipeException("data too long", EXIT_CODE_DATA_ERROR); - std::vector buf(length); - input.read(buf.data(), length); - if (input.good()) { - return convertor.from_bytes(std::string(buf.data(), length)); - } else { - throw RelpipeReaderException(L"Error while reading string from the stream."); - } - } - - string_t toString(const string_t &value) override { - return value; - } - -}; - -} -} \ No newline at end of file