载入中...
搜索中...
未找到
StateValue.h
浏览该文件的文档.
1#pragma once
2
3#include "common/Export.h"
4
5#include <cstdint>
6#include <string>
7#include <utility>
8#include <vector>
9
10namespace eve {
11
21public:
23 enum class Kind { Null, Int, Float, Bool, String, Array, Object };
24
26 StateValue() = default;
28 static StateValue null() { return StateValue(); }
30 static StateValue integer(int64_t v);
32 static StateValue number(double v);
34 static StateValue boolean(bool v);
36 static StateValue string(std::string v);
38 static StateValue array() { return StateValue(Kind::Array); }
40 static StateValue object() { return StateValue(Kind::Object); }
41
43 Kind kind() const { return kind_; }
44
45 bool isNull() const { return kind_ == Kind::Null; }
46 bool isInt() const { return kind_ == Kind::Int; }
47 bool isFloat() const { return kind_ == Kind::Float; }
48 bool isBool() const { return kind_ == Kind::Bool; }
49 bool isString() const { return kind_ == Kind::String; }
50 bool isObject() const { return kind_ == Kind::Object; }
51 bool isArray() const { return kind_ == Kind::Array; }
52
54 int64_t asInt() const { return i_; }
56 double asDouble() const { return f_; }
58 bool asBool() const { return b_; }
60 const std::string& asString() const { return s_; }
61
63 void pushBack(StateValue v);
65 size_t arraySize() const { return arr_.size(); }
67 StateValue& at(size_t index) { return arr_.at(index); }
68 const StateValue& at(size_t index) const { return arr_.at(index); }
69
71 void set(const std::string& key, StateValue v);
73 const StateValue* find(const std::string& key) const;
74 StateValue* find(const std::string& key);
76 std::vector<std::string> keys() const;
77
82 const StateValue* get(const std::string& dottedPath) const;
83 StateValue* get(const std::string& dottedPath);
84
91 bool setPath(const std::string& dottedPath, StateValue v);
92
98 bool mergeDefaults(const StateValue& defaults);
99
100 bool operator==(const StateValue& o) const;
101 bool operator!=(const StateValue& o) const { return !(*this == o); }
102
103private:
104 explicit StateValue(Kind kind) : kind_(kind) {}
105
106 Kind kind_ = Kind::Null;
107 int64_t i_ = 0;
108 double f_ = 0.0;
109 bool b_ = false;
110 std::string s_;
111 std::vector<StateValue> arr_;
112 std::vector<std::pair<std::string, StateValue>> obj_;
113};
114
115} // namespace eve
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
std::uint32_t key
float v
TokenKind kind
double number
bool boolean
std::string string
uint32_t index
JSON-compatible state value tree used by state hot reload.
Definition StateValue.h:20
bool isFloat() const
Definition StateValue.h:47
static StateValue object()
Empty object.
Definition StateValue.h:40
Kind kind() const
The kind of the stored value.
Definition StateValue.h:43
bool operator!=(const StateValue &o) const
Definition StateValue.h:101
static StateValue array()
Empty array.
Definition StateValue.h:38
int64_t asInt() const
Integer payload; only valid when kind() == Kind::Int.
Definition StateValue.h:54
bool asBool() const
Boolean payload; only valid when kind() == Kind::Bool.
Definition StateValue.h:58
bool isNull() const
Definition StateValue.h:45
size_t arraySize() const
Element count; only valid on arrays.
Definition StateValue.h:65
bool isString() const
Definition StateValue.h:49
bool isBool() const
Definition StateValue.h:48
bool isObject() const
Definition StateValue.h:50
double asDouble() const
Floating-point payload; only valid when kind() == Kind::Float.
Definition StateValue.h:56
bool isArray() const
Definition StateValue.h:51
const std::string & asString() const
String payload; only valid when kind() == Kind::String.
Definition StateValue.h:60
Kind
Kind public API.
Definition StateValue.h:23
const StateValue & at(size_t index) const
Definition StateValue.h:68
static StateValue null()
Null value.
Definition StateValue.h:28
StateValue()=default
Null value.
StateValue & at(size_t index)
Indexed element (bounds-checked); only valid on arrays.
Definition StateValue.h:67
bool isInt() const
Definition StateValue.h:46
Build metadata (engine git commit, build time, third-party version).
Definition Build.cpp:16
enum EVENGINE_API_FOUNDATION Float
OT_FLOAT.
Definition Runtime.h:118
enum EVENGINE_API_FOUNDATION Bool
OT_BOOL.
Definition Runtime.h:116
enum EVENGINE_API_FOUNDATION String
OT_STRING.
Definition Runtime.h:119
enum EVENGINE_API_FOUNDATION Array
OT_ARRAY (editable via Runtime array APIs / ReflectedPropertyModel).
Definition Runtime.h:120