libkazv
Loading...
Searching...
No Matches
immer-set.hpp
Go to the documentation of this file.
1/*
2 * This file is part of libkazv.
3 * SPDX-FileCopyrightText: 2021-2025 tusooa <tusooa@kazv.moe>
4 * SPDX-License-Identifier: AGPL-3.0-or-later
5 */
6
7
8#pragma once
9
10#include <libkazv-config.hpp>
11
12#include <boost/serialization/nvp.hpp>
13#include <boost/serialization/split_free.hpp>
14
15#include <immer/set.hpp>
16#include <immer/set_transient.hpp>
17
19{
20
21 template <class Archive, class T, class H, class E, class MP>
22 void save(Archive &ar, const immer::set<T, H, E, MP> &s, const unsigned int /* version */)
23 {
24 auto size = s.size();
25 ar << BOOST_SERIALIZATION_NVP(size);
26 for (const auto &k : s) {
27 ar << k;
28 }
29 }
30
31 template <class Archive, class T, class H, class E, class MP>
32 void load(Archive &ar, immer::set<T, H, E, MP> &s, const unsigned int /* version */)
33 {
34 using TransientT = decltype(s.transient());
35 using SizeT = decltype(s.size());
36
37 TransientT t{};
38
39 SizeT size{};
40 ar >> BOOST_SERIALIZATION_NVP(size);
41
42 for (auto i = SizeT{}; i < size; ++i) {
43 T k;
44 ar >> k;
45 t.insert(std::move(k));
46 }
47
48 assert(size == t.size());
49 s = t.persistent();
50 }
51
52 template<class Archive, class T, class H, class E, class MP>
53 inline void serialize(Archive &ar, immer::set<T, H, E, MP> &s, const unsigned int version)
54 {
55 boost::serialization::split_free(ar, s, version);
56 }
57
58}
Definition immer-array.hpp:18
void load(Archive &ar, immer::array< T, MP > &v, const unsigned int)
Definition immer-array.hpp:35
void serialize(Archive &ar, immer::array< T, MP > &v, const unsigned int version)
Definition immer-array.hpp:58
void save(Archive &ar, const immer::array< T, MP > &v, const unsigned int)
Definition immer-array.hpp:22