32 #ifndef LEDGER_CORE_DYNAMICVALUE_HPP 33 #define LEDGER_CORE_DYNAMICVALUE_HPP 35 #include "../api/DynamicType.hpp" 36 #include <boost/variant.hpp> 37 #include <cereal/cereal.hpp> 38 #include <cereal/archives/portable_binary.hpp> 39 #include <cereal/archives/binary.hpp> 41 #include <utils/optional.hpp> 59 explicit DynamicValue(
const std::shared_ptr<DynamicArray>& x);
60 explicit DynamicValue(
const std::shared_ptr<DynamicObject>& x);
62 template <
class Archive>
63 void serialize(Archive& ar) {
66 std::string dump()
const;
67 std::ostream& dump(std::ostream& ss,
int depth)
const;
101 template <
typename T>
103 static const OptionalVisitor<T> visitor;
104 return boost::apply_visitor(visitor, data);
110 boost::variant<int32_t, int64_t, bool, double, std::string, std::vector<uint8_t>,
111 std::shared_ptr<DynamicArray>, std::shared_ptr<DynamicObject>> data;
114 template <
typename T>
115 struct OptionalVisitor: boost::static_visitor<optional<T>> {
120 template <
typename Q>
127 template <
typename Archive>
128 void out_serialize(Archive& ar) {
133 case api::DynamicType::STRING:
134 ar(boost::get<std::string>(data));
138 ar(boost::get<std::vector<uint8_t>>(data));
142 ar(boost::get<bool>(data));
146 ar(boost::get<int32_t>(data));
150 ar(boost::get<int64_t>(data));
153 case api::DynamicType::DOUBLE:
154 ar(boost::get<double>(data));
158 ar(boost::get<std::shared_ptr<DynamicArray>>(data));
162 ar(boost::get<std::shared_ptr<DynamicObject>>(data));
171 template <
typename Archive>
172 void in_serialize(Archive& ar) {
177 case api::DynamicType::STRING:
187 std::vector<uint8_t> x;
217 case api::DynamicType::DOUBLE:
227 std::shared_ptr<DynamicArray> x;
235 std::shared_ptr<DynamicObject> x;
247 template<>
void DynamicValue::serialize<cereal::PortableBinaryOutputArchive>(cereal::PortableBinaryOutputArchive&);
248 template<>
void DynamicValue::serialize<cereal::PortableBinaryInputArchive>(cereal::PortableBinaryInputArchive&);
249 template<>
void DynamicValue::serialize<cereal::BinaryOutputArchive>(cereal::BinaryOutputArchive&);
250 template<>
void DynamicValue::serialize<cereal::BinaryInputArchive>(cereal::BinaryInputArchive&);
254 #endif //LEDGER_CORE_DYNAMICVALUE_HPP
api::DynamicType getType() const
Get the underlying type.
Definition: DynamicValue.cpp:168
Definition: DynamicValue.hpp:48
DynamicType
Definition: DynamicType.hpp:20
Definition: Account.cpp:8
DynamicValue & operator=(const std::string &rhs)
Change the value to a std::string by copying.
Definition: DynamicValue.cpp:207
Definition: optional.hpp:177