Blender V4.3
BLI_serialize.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
61
62#include <iosfwd>
63
64#include "BLI_map.hh"
65#include "BLI_string_ref.hh"
66#include "BLI_vector.hh"
67
68namespace blender::io::serialize {
69
85
86class Value;
87class StringValue;
88class DictionaryValue;
89template<typename T, eValueType V> class PrimitiveValue;
94class ArrayValue;
95
112class Value {
113 private:
114 eValueType type_;
115
116 protected:
117 Value() = delete;
118 explicit Value(eValueType type) : type_(type) {}
119
120 public:
121 virtual ~Value() = default;
123 {
124 return type_;
125 }
126
131 const StringValue *as_string_value() const;
132
137 const IntValue *as_int_value() const;
138
143 const DoubleValue *as_double_value() const;
144
149 const BooleanValue *as_boolean_value() const;
150
155 const EnumValue *as_enum_value() const;
156
161 const ArrayValue *as_array_value() const;
162
168};
169
173template<
175 typename T,
178class PrimitiveValue : public Value {
179 private:
180 T inner_value_{};
181
182 public:
183 explicit PrimitiveValue(const T value) : Value(V), inner_value_(value) {}
184
185 const T value() const
186 {
187 return inner_value_;
188 }
189};
190
191class NullValue : public Value {
192 public:
194};
195
196class StringValue : public Value {
197 private:
198 std::string string_;
199
200 public:
201 StringValue(std::string string) : Value(eValueType::String), string_(std::move(string)) {}
202
203 const std::string &value() const
204 {
205 return string_;
206 }
207};
208
209class ArrayValue : public Value {
211
212 public:
214
215 void append(std::shared_ptr<Value> value);
216 void append_bool(bool value);
217 void append_int(int value);
218 void append_double(double value);
219 void append_str(std::string value);
220 void append_null();
221 std::shared_ptr<DictionaryValue> append_dict();
222 std::shared_ptr<ArrayValue> append_array();
223
225 {
226 return values_;
227 }
228};
229
234class DictionaryValue : public Value {
235 public:
240 using Item = std::pair<std::string, std::shared_ptr<Value>>;
242
243 private:
244 Vector<Item> values_;
245
246 public:
248
254 Lookup create_lookup() const;
255
256 const std::shared_ptr<Value> *lookup(const StringRef key) const;
257 std::optional<StringRefNull> lookup_str(const StringRef key) const;
258 std::optional<int64_t> lookup_int(const StringRef key) const;
259 std::optional<double> lookup_double(const StringRef key) const;
260 const DictionaryValue *lookup_dict(const StringRef key) const;
261 const ArrayValue *lookup_array(const StringRef key) const;
263 {
264 return values_;
265 }
266
267 void append(std::string key, std::shared_ptr<Value> value);
268 void append_int(std::string key, int64_t value);
269 void append_double(std::string key, double value);
270 void append_str(std::string key, std::string value);
271 std::shared_ptr<DictionaryValue> append_dict(std::string key);
272 std::shared_ptr<ArrayValue> append_array(std::string key);
273};
274
279 public:
280 virtual ~Formatter() = default;
281
283 virtual void serialize(std::ostream &os, const Value &value) = 0;
284
286 virtual std::unique_ptr<Value> deserialize(std::istream &is) = 0;
287};
288
292class JsonFormatter : public Formatter {
293 public:
299
300 public:
301 void serialize(std::ostream &os, const Value &value) override;
306 std::unique_ptr<Value> deserialize(std::istream &is) override;
307};
308
309void write_json_file(StringRef path, const Value &value);
310std::shared_ptr<Value> read_json_file(StringRef path);
311
312} // namespace blender::io::serialize
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a producing a negative Combine Generate a color from its and blue Hue Saturation Value
void append(std::shared_ptr< Value > value)
Definition serialize.cc:208
Span< std::shared_ptr< Value > > elements() const
std::shared_ptr< ArrayValue > append_array()
Definition serialize.cc:245
void append_str(std::string value)
Definition serialize.cc:228
std::shared_ptr< DictionaryValue > append_dict()
Definition serialize.cc:238
void append(std::string key, std::shared_ptr< Value > value)
Definition serialize.cc:317
const std::shared_ptr< Value > * lookup(const StringRef key) const
Definition serialize.cc:261
void append_str(std::string key, std::string value)
Definition serialize.cc:332
std::shared_ptr< DictionaryValue > append_dict(std::string key)
Definition serialize.cc:337
std::pair< std::string, std::shared_ptr< Value > > Item
const DictionaryValue * lookup_dict(const StringRef key) const
Definition serialize.cc:301
void append_double(std::string key, double value)
Definition serialize.cc:327
void append_int(std::string key, int64_t value)
Definition serialize.cc:322
const ArrayValue * lookup_array(const StringRef key) const
Definition serialize.cc:309
Map< std::string, std::shared_ptr< Value > > Lookup
std::optional< int64_t > lookup_int(const StringRef key) const
Definition serialize.cc:281
std::shared_ptr< ArrayValue > append_array(std::string key)
Definition serialize.cc:344
std::optional< StringRefNull > lookup_str(const StringRef key) const
Definition serialize.cc:271
std::optional< double > lookup_double(const StringRef key) const
Definition serialize.cc:291
virtual void serialize(std::ostream &os, const Value &value)=0
virtual std::unique_ptr< Value > deserialize(std::istream &is)=0
std::unique_ptr< Value > deserialize(std::istream &is) override
Definition serialize.cc:363
void serialize(std::ostream &os, const Value &value) override
Definition serialize.cc:351
const std::string & value() const
const EnumValue * as_enum_value() const
Definition serialize.cc:44
const BooleanValue * as_boolean_value() const
Definition serialize.cc:36
const ArrayValue * as_array_value() const
Definition serialize.cc:52
const StringValue * as_string_value() const
Definition serialize.cc:12
const IntValue * as_int_value() const
Definition serialize.cc:20
const DoubleValue * as_double_value() const
Definition serialize.cc:28
const DictionaryValue * as_dictionary_value() const
Definition serialize.cc:60
#define T
void write_json_file(StringRef path, const Value &value)
Definition serialize.cc:375
PrimitiveValue< int64_t, eValueType::Int > IntValue
PrimitiveValue< bool, eValueType::Boolean > BooleanValue
PrimitiveValue< int, eValueType::Enum > EnumValue
PrimitiveValue< double, eValueType::Double > DoubleValue
std::shared_ptr< Value > read_json_file(StringRef path)
Definition serialize.cc:382
__int64 int64_t
Definition stdint.h:89
signed char int8_t
Definition stdint.h:75
CCL_NAMESPACE_BEGIN struct Window V