/* * LMDB Abstraction Layer. * Copyright (C) 2023 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 LMDBAL_SERIALIZER_HPP #define LMDBAL_SERIALIZER_HPP #include "serializer.h" template LMDBAL::Serializer::Serializer() : bytes(), buffer(&bytes), stream(&buffer) { buffer.open(QIODevice::ReadWrite); } template LMDBAL::Serializer::Serializer(const T& value) : bytes(), buffer(&bytes), stream(&buffer) { buffer.open(QIODevice::ReadWrite); _setValue(value); } template LMDBAL::Serializer::~Serializer() { buffer.close(); } template MDB_val LMDBAL::Serializer::setData(const T& value) { clear(); _setData(value); return getData(); } template T LMDBAL::Serializer::deserialize(const MDB_val& value) { clear(); bytes.setRawData((char*)value.mv_data, value.mv_size); T result; stream >> result; return result; } template void LMDBAL::Serializer::_setData(const T& value) { stream << value; } template void LMDBAL::Serializer::clear() { if (buffer.pos() > 0) { buffer.seek(0); } } template MDB_val LMDBAL::Serializer::getData() { MDB_val val; val.mv_size = buffer.pos(); val.mv_data = (char*)bytes.data(); return val; } #endif //LMDBAL_SERIALIZER_HPP