// Squawk messenger. // Copyright (C) 2019 Yury Gubich // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // 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 . #ifndef CORE_DATABASE_SERIALIZER_HPP #define CORE_DATABASE_SERIALIZER_HPP #include "serializer.h" template DataBase::Serializer::Serializer() : bytes(), buffer(&bytes), stream(&buffer) { buffer.open(QIODevice::ReadWrite); } template DataBase::Serializer::Serializer(const T& value) : bytes(), buffer(&bytes), stream(&buffer) { buffer.open(QIODevice::ReadWrite); _setValue(value); } template DataBase::Serializer::~Serializer() { buffer.close(); } template MDB_val DataBase::Serializer::setData(const T& value) { clear(); _setData(value); return getData(); } template T DataBase::Serializer::deserialize(const MDB_val& value) { clear(); bytes.setRawData((char*)value.mv_data, value.mv_size); T result; stream >> result; return result; } template void DataBase::Serializer::_setData(const T& value) { stream << value; } template void DataBase::Serializer::clear() { if (buffer.pos() > 0) { buffer.seek(0); } } template MDB_val DataBase::Serializer::getData() { MDB_val val; val.mv_size = buffer.pos(); val.mv_data = (char*)bytes.data(); return val; } #endif //CORE_DATABASE_SERIALIZER_HPP