Changeset View
Changeset View
Standalone View
Standalone View
src/base/serialization/immer-set.hpp
- This file was added.
| /* | |||||
| * This file is part of libkazv. | |||||
| * SPDX-FileCopyrightText: 2021-2025 tusooa <tusooa@kazv.moe> | |||||
| * SPDX-License-Identifier: AGPL-3.0-or-later | |||||
| */ | |||||
| #pragma once | |||||
| #include <libkazv-config.hpp> | |||||
| #include <boost/serialization/nvp.hpp> | |||||
| #include <boost/serialization/split_free.hpp> | |||||
| #include <immer/set.hpp> | |||||
| #include <immer/set_transient.hpp> | |||||
| namespace boost::serialization | |||||
| { | |||||
| template <class Archive, class T, class H, class E, class MP> | |||||
| void save(Archive &ar, const immer::set<T, H, E, MP> &s, const unsigned int /* version */) | |||||
| { | |||||
| auto size = s.size(); | |||||
| ar << BOOST_SERIALIZATION_NVP(size); | |||||
| for (const auto &k : s) { | |||||
| ar << k; | |||||
| } | |||||
| } | |||||
| template <class Archive, class T, class H, class E, class MP> | |||||
| void load(Archive &ar, immer::set<T, H, E, MP> &s, const unsigned int /* version */) | |||||
| { | |||||
| using TransientT = decltype(s.transient()); | |||||
| using SizeT = decltype(s.size()); | |||||
| TransientT t{}; | |||||
| SizeT size{}; | |||||
| ar >> BOOST_SERIALIZATION_NVP(size); | |||||
| for (auto i = SizeT{}; i < size; ++i) { | |||||
| T k; | |||||
| ar >> k; | |||||
| t.insert(std::move(k)); | |||||
| } | |||||
| assert(size == t.size()); | |||||
| s = t.persistent(); | |||||
| } | |||||
| template<class Archive, class T, class H, class E, class MP> | |||||
| inline void serialize(Archive &ar, immer::set<T, H, E, MP> &s, const unsigned int version) | |||||
| { | |||||
| boost::serialization::split_free(ar, s, version); | |||||
| } | |||||
| } | |||||