From 6d4909c74dbcaebc6c5b0513361654987ece6323 Mon Sep 17 00:00:00 2001 From: Eremey Valetov Date: Mon, 16 Feb 2026 18:14:35 -0500 Subject: [PATCH] feat(smp): add SerializableBase wrapper for MPI population transfer Template wrapper making any type T serializable via eoserial::Persistent, required for transferring populations between MPI ranks in the island model. --- smp/src/SerializableBase.h | 59 ++++++++++++++++++++++++++++++++++++ smp/src/SerializableBase.tpp | 46 ++++++++++++++++++++++++++++ smp/src/smp.h | 1 + 3 files changed, 106 insertions(+) create mode 100644 smp/src/SerializableBase.h create mode 100644 smp/src/SerializableBase.tpp diff --git a/smp/src/SerializableBase.h b/smp/src/SerializableBase.h new file mode 100644 index 000000000..aeda44f80 --- /dev/null +++ b/smp/src/SerializableBase.h @@ -0,0 +1,59 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2012 + +Eremey Valetov + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef SERIALIZABLE_BASE_H +#define SERIALIZABLE_BASE_H + +#include +#include + +/** + * Wrapper that makes any type T serializable via ParadisEO's eoserial framework. + * Used by MPI_IslandModel to serialize/deserialize populations for inter-process transfer. + */ +template +class SerializableBase : public eoserial::Persistent { +public: + SerializableBase(); + SerializableBase(T base); + virtual ~SerializableBase(); + + operator T&(); + void setValue(const T& newValue); + + void unpack(const eoserial::Object* obj) override; + eoserial::Object* pack() const override; + +private: + T _value; +}; + +#include "SerializableBase.tpp" + +#endif // SERIALIZABLE_BASE_H diff --git a/smp/src/SerializableBase.tpp b/smp/src/SerializableBase.tpp new file mode 100644 index 000000000..a5e7472b6 --- /dev/null +++ b/smp/src/SerializableBase.tpp @@ -0,0 +1,46 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2012 + +Eremey Valetov + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +template +SerializableBase::SerializableBase() : _value() {} + +template +SerializableBase::SerializableBase(T base) : _value(std::move(base)) {} + +template +SerializableBase::~SerializableBase() = default; + +template +SerializableBase::operator T&() { + return _value; +} + +template +void SerializableBase::setValue(const T& newValue) { + _value = newValue; +} + +template +void SerializableBase::unpack(const eoserial::Object* obj) { + eoserial::unpack(*obj, "value", _value); +} + +template +eoserial::Object* SerializableBase::pack() const { + eoserial::Object* obj = new eoserial::Object; + obj->add("value", eoserial::make(_value)); + return obj; +} diff --git a/smp/src/smp.h b/smp/src/smp.h index 7bfb17864..12d76b3d4 100644 --- a/smp/src/smp.h +++ b/smp/src/smp.h @@ -32,6 +32,7 @@ Contact: paradiseo-help@lists.gforge.inria.fr #include #include +#include #include #include #include