Enzo
Loading...
Searching...
No Matches
ParameterSerializable.h
1#pragma once
2#include "Engine/Core/Types.h"
3#include "Engine/Parameter/Parameter.h"
4#include <cereal/types/optional.hpp>
5#include <cereal/types/string.hpp>
6#include <cereal/types/vector.hpp>
7#include <optional>
8#include <string>
9#include <vector>
10
12{
13 std::string name;
14 std::vector<enzo::floatT> floatValues;
15 std::vector<enzo::intT> intValues;
16 std::vector<std::string> stringValues;
17 // One optional expression per component, parallel to the value vector. An
18 // empty slot means the component uses its literal value.
19 std::vector<std::optional<std::string>> expressions;
20 // Multiparm parameters such as ramps store nothing flat. Each instance is a
21 // list of field models, so the structure nests one level per instance.
22 std::vector<std::vector<ParameterSerializable>> instances;
23
24 bool operator==(const ParameterSerializable& other) const = default;
25
26 template <class Archive> void serialize(Archive& ar)
27 {
28 ar(CEREAL_NVP(name),
29 CEREAL_NVP(floatValues),
30 CEREAL_NVP(intValues),
31 CEREAL_NVP(stringValues),
32 CEREAL_NVP(expressions),
33 CEREAL_NVP(instances));
34 }
35};
36
37// Capture a parameter's live state into a serializable model. Multiparms recurse
38// one model per instance field, flat parameters store their value vector.
39ParameterSerializable toSerializable(enzo::prm::Parameter& parameter);
40
41// Snapshots a flat parameter from its name and values without a live Parameter.
42ParameterSerializable toSerializable(std::string name, const enzo::prm::PrmValues& values);
43
44// Write a serialized model back onto a live parameter. Multiparms reconcile their
45// instance count to the model before writing each field by name.
46void applySerializable(enzo::prm::Parameter& parameter, const ParameterSerializable& model);
Basic attribute, parameter, and node types for Enzo.
Definition Parameter.h:19
Definition ParameterSerializable.h:12