rename and make shared library: relpipe-lib-protocol.cpp → relpipe-lib-common.cpp
/**
* Relational pipes (library)
* Copyright © 2018 František Kučera (Frantovo.cz, GlobalCode.info)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the:
* - GNU Lesser General Public License as published by the Free Software Foundation;
* version 3 of the License or (at your option)
* - GNU General Public License as published by the Free Software Foundation;
* version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <sstream>
#include <functional>
#include "DataTypeReaderBase.h"
namespace relpipe {
namespace reader {
template<typename T> class DataTypeReader : public DataTypeReaderBase {
public:
DataTypeReader(const TypeId typeId, const string_t typeCode) : DataTypeReaderBase(typeId, typeCode) {
}
virtual ~DataTypeReader() {
};
virtual T readValue(std::istream& input) = 0;
virtual string_t readString(std::istream &input) {
return toString(readValue(input));
}
virtual void read(std::istream &input, std::function<void(const void *, const std::type_info&) > handler) override {
T value = readValue(input);
handler(&value, typeid (T));
}
virtual void read(std::istream &input, std::function<void(const string_t&, const void *, const std::type_info&) > handler) override {
T value = readValue(input);
handler(toString(value), &value, typeid (T));
}
virtual string_t toString(const T& value) = 0;
};
}
}