22#include <boost/serialization/split_free.hpp>
32template <std::
size_t I,
class Archive,
class Variant>
33void load_impl(Archive &ar, std::size_t index, Variant &obj) {
35 std::variant_alternative_t<I, Variant> opt{};
37 obj.template emplace<I>(std::move(opt));
38 }
else if constexpr (I + 1 < std::variant_size_v<Variant>) {
39 load_impl<I + 1>(ar, index, obj);
44template <
class Archive,
class... Ts>
45void save(Archive &ar, std::variant<Ts...>
const &obj,
unsigned const) {
47 std::visit([&](
const auto &value) { ar << value; }, obj);
50template <
class Archive,
class... Ts>
51void load(Archive &ar, std::variant<Ts...> &obj,
unsigned const) {
52 std::size_t index = 0;
54 if (index >= std::variant_size_v<std::variant<Ts...>>) {
55 throw std::domain_error(
"std::variant cannot be reloaded (type mismatch)");
57 detail::load_impl<0>(ar, index, obj);
60template <
class Archive,
class... Ts>
61void serialize(Archive &ar, std::variant<Ts...> &obj,
unsigned const version) {
62 split_free(ar, obj, version);
void serialize(Archive &ar, std::tuple< T... > &pack, unsigned int const)
Serialize std::tuple.
void load(Archive &ar, GpuParticleData::GpuParticle &p, unsigned const)
void save(Archive &ar, GpuParticleData::GpuParticle const &p, unsigned const)