29#include <boost/serialization/access.hpp>
30#include <boost/serialization/string.hpp>
31#include <boost/serialization/vector.hpp>
38#include <unordered_map>
53using PackedMap = std::vector<std::pair<std::string, PackedVariant>>;
64 mutable std::unordered_map<ObjectId, ObjectRef> m_objects;
68 auto const &
objects()
const {
return m_objects; }
72 std::vector<PackedVariant>
ret(
vec.size());
74 std::ranges::transform(
vec,
ret.begin(), [
this](
const Variant &v) {
75 return std::visit(*this, v);
84 std::unordered_map<K, PackedVariant>
ret{};
104 return std::forward<T>(
val);
114 std::unordered_map<ObjectId, ObjectRef>
const &
objects;
121 std::vector<Variant>
ret(
vec.size());
124 return std::visit(*this, v);
131 template <
typename K>
133 std::unordered_map<K, Variant>
ret{};
144 return std::forward<T>(
val);
173 std::unordered_map<ObjectId, ObjectRef>
const &objects) {
186 std::ranges::transform(v,
ret.begin(), [](
auto const &kv) {
187 return std::pair<std::string, PackedVariant>{kv.first, pack(kv.second)};
201 std::unordered_map<ObjectId, ObjectRef>
const &objects) {
204 std::ranges::transform(
205 v, std::inserter(
ret,
ret.end()),
206 [&objects](
auto const &kv) -> std::pair<std::string, Variant> {
207 return {kv.first, unpack(kv.second, objects)};
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
PackedVariant pack(const Variant &v)
Transform a Variant to a PackedVariant.
std::shared_ptr< ObjectHandle > ObjectRef
std::unordered_map< std::string, Variant > VariantMap
std::vector< std::pair< std::string, PackedVariant > > PackedMap
Variant unpack(const PackedVariant &v, std::unordered_map< ObjectId, ObjectRef > const &objects)
Unpack a PackedVariant.
Strongly typed integer type to hold a unique identifier for a ObjectHandle object,...
Visitor that converts a Variant to a PackedVariant.
PackedVariant operator()(const ObjectRef &so_ptr) const
PackedVariant operator()(T &&val) const
PackedVariant operator()(const std::unordered_map< K, Variant > &map) const
PackedVariant operator()(const std::vector< Variant > &vec) const
auto const & objects() const
Map of objects whose references were replaced by ids.
Visitor that converts a PackedVariant to a Variant.
UnpackVisitor(std::unordered_map< ObjectId, ObjectRef > const &objects)
Variant operator()(const ObjectId &id) const
Variant operator()(const std::vector< PackedVariant > &vec) const
Variant operator()(T &&val) const
Variant operator()(const std::unordered_map< K, PackedVariant > &map) const
std::unordered_map< ObjectId, ObjectRef > const & objects
Recursive variant implementation.