载入中...
搜索中...
未找到
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:
22 enum class Kind { Null, Int, Float, Bool, String, Array, Object };
23
25 StateValue() = default;
27 static StateValue null() { return StateValue(); }
29 static StateValue integer(int64_t v);
31 static StateValue number(double v);
33 static StateValue boolean(bool v);
35 static StateValue string(std::string v);
37 static StateValue array() { return StateValue(Kind::Array); }
39 static StateValue object() { return StateValue(Kind::Object); }
40
42 Kind kind() const { return kind_; }
43
44 bool isNull() const { return kind_ == Kind::Null; }
45 bool isInt() const { return kind_ == Kind::Int; }
46 bool isFloat() const { return kind_ == Kind::Float; }
47 bool isBool() const { return kind_ == Kind::Bool; }
48 bool isString() const { return kind_ == Kind::String; }
49 bool isObject() const { return kind_ == Kind::Object; }
50 bool isArray() const { return kind_ == Kind::Array; }
51
53 int64_t asInt() const { return i_; }
55 double asDouble() const { return f_; }
57 bool asBool() const { return b_; }
59 const std::string& asString() const { return s_; }
60
62 void pushBack(StateValue v);
64 size_t arraySize() const { return arr_.size(); }
66 StateValue& at(size_t index) { return arr_.at(index); }
67 const StateValue& at(size_t index) const { return arr_.at(index); }
68
70 void set(const std::string& key, StateValue v);
72 const StateValue* find(const std::string& key) const;
73 StateValue* find(const std::string& key);
75 std::vector<std::string> keys() const;
76
81 const StateValue* get(const std::string& dottedPath) const;
82 StateValue* get(const std::string& dottedPath);
83
90 bool setPath(const std::string& dottedPath, StateValue v);
91
97 bool mergeDefaults(const StateValue& defaults);
98
99 bool operator==(const StateValue& o) const;
100 bool operator!=(const StateValue& o) const { return !(*this == o); }
101
102private:
103 explicit StateValue(Kind kind) : kind_(kind) {}
104
105 Kind kind_ = Kind::Null;
106 int64_t i_ = 0;
107 double f_ = 0.0;
108 bool b_ = false;
109 std::string s_;
110 std::vector<StateValue> arr_;
111 std::vector<std::pair<std::string, StateValue>> obj_;
112};
113
114} // namespace eve
Tok kind
#define EVENGINE_API
宿主(eve / libmain)导出宏;插件从进程导入同一批符号。
Definition Export.h:16
int v
Object is the base class for all game objects. It provides reference counting and dirty flag for upda...
Definition Object.h:18
JSON-compatible state value tree used by state hot reload.
Definition StateValue.h:20
bool isFloat() const
Definition StateValue.h:46
static StateValue object()
Empty object.
Definition StateValue.h:39
Kind kind() const
The kind of the stored value.
Definition StateValue.h:42
bool operator!=(const StateValue &o) const
Definition StateValue.h:100
static StateValue array()
Empty array.
Definition StateValue.h:37
int64_t asInt() const
Integer payload; only valid when kind() == Kind::Int.
Definition StateValue.h:53
bool asBool() const
Boolean payload; only valid when kind() == Kind::Bool.
Definition StateValue.h:57
bool isNull() const
Definition StateValue.h:44
size_t arraySize() const
Element count; only valid on arrays.
Definition StateValue.h:64
bool isString() const
Definition StateValue.h:48
bool isBool() const
Definition StateValue.h:47
bool isObject() const
Definition StateValue.h:49
double asDouble() const
Floating-point payload; only valid when kind() == Kind::Float.
Definition StateValue.h:55
bool isArray() const
Definition StateValue.h:50
const std::string & asString() const
String payload; only valid when kind() == Kind::String.
Definition StateValue.h:59
const StateValue & at(size_t index) const
Definition StateValue.h:67
static StateValue null()
Null value.
Definition StateValue.h:27
StateValue()=default
Null value.
StateValue & at(size_t index)
Indexed element (bounds-checked); only valid on arrays.
Definition StateValue.h:66
bool isInt() const
Definition StateValue.h:45
Definition Build.cpp:11