From c6632d5b8314a523015a718bb03226a84b9de74e Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Tue, 31 Jan 2023 11:41:41 +0100 Subject: [PATCH] added: file for extra serialization packers for now, it holds a packer for boost::gregorian::date --- CMakeLists_files.cmake | 2 + opm/simulators/utils/SerializationPackers.cpp | 53 +++++++++++++++++++ opm/simulators/utils/SerializationPackers.hpp | 49 +++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 opm/simulators/utils/SerializationPackers.cpp create mode 100644 opm/simulators/utils/SerializationPackers.hpp diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake index f0a4fc0de..d99886baa 100644 --- a/CMakeLists_files.cmake +++ b/CMakeLists_files.cmake @@ -82,6 +82,7 @@ list (APPEND MAIN_SOURCE_FILES opm/simulators/utils/gatherDeferredLogger.cpp opm/simulators/utils/ParallelFileMerger.cpp opm/simulators/utils/ParallelRestart.cpp + opm/simulators/utils/SerializationPackers.cpp opm/simulators/wells/ALQState.cpp opm/simulators/wells/BlackoilWellModelConstraints.cpp opm/simulators/wells/BlackoilWellModelGeneric.cpp @@ -372,6 +373,7 @@ list (APPEND PUBLIC_HEADER_FILES opm/simulators/utils/ParallelEclipseState.hpp opm/simulators/utils/ParallelRestart.hpp opm/simulators/utils/PropsCentroidsDataHandle.hpp + opm/simulators/utils/SerializationPackers.hpp opm/simulators/utils/VectorVectorDataHandle.hpp opm/simulators/wells/ALQState.hpp opm/simulators/wells/BlackoilWellModel.hpp diff --git a/opm/simulators/utils/SerializationPackers.cpp b/opm/simulators/utils/SerializationPackers.cpp new file mode 100644 index 000000000..6d7d927db --- /dev/null +++ b/opm/simulators/utils/SerializationPackers.cpp @@ -0,0 +1,53 @@ +/* + Copyright 2019 Equinor AS. + + This file is part of the Open Porous Media project (OPM). + + OPM 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. + + OPM 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 OPM. If not, see . +*/ + +#include +#include + +#include + +namespace Opm { +namespace Serialization { +namespace detail { + +std::size_t Packing:: +packSize(const boost::gregorian::date& data) +{ + return Packing::packSize(boost::gregorian::to_simple_string(data)); +} + +void Packing:: +pack(const boost::gregorian::date& data, + std::vector& buffer, int& position) +{ + Packing::pack(boost::gregorian::to_simple_string(data), buffer, position); +} + +void Packing:: +unpack(boost::gregorian::date& data, + std::vector& buffer, int& position) +{ + std::string date; + Packing::unpack(date, buffer, position); + data = boost::gregorian::from_simple_string(date); +} + +} // end namespace detail +} // end namespace Serialization +} // end namespace Opm diff --git a/opm/simulators/utils/SerializationPackers.hpp b/opm/simulators/utils/SerializationPackers.hpp new file mode 100644 index 000000000..d30bb50df --- /dev/null +++ b/opm/simulators/utils/SerializationPackers.hpp @@ -0,0 +1,49 @@ +/* + Copyright 2019 Equinor AS. + + This file is part of the Open Porous Media project (OPM). + + OPM 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. + + OPM 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 OPM. If not, see . +*/ +#ifndef SERIALIZATION_PACKERS_HPP +#define SERIALIZATION_PACKERS_HPP + +#include + +#include + +// Additional packers for serializers using the mempacker. + +namespace Opm { +namespace Serialization { +namespace detail { + +template<> +struct Packing +{ + static std::size_t packSize(const boost::gregorian::date& data); + + static void pack(const boost::gregorian::date& data, + std::vector& buffer, int& position); + + static void unpack(boost::gregorian::date& data, + std::vector& buffer, int& position); +}; + +} + +} // end namespace Serialization +} // end namespace Opm + +#endif // SERIALIZATION_PACKERS_HPP