🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
Attribute.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/Property.hpp"
25#include "AstUtil/SharedPtr.hpp"
26#include "AstUtil/WeakPtr.hpp"
27#include "AstUtil/Object.hpp"
28
29AST_NAMESPACE_BEGIN
30
37class Property;
38class Object;
40template<typename ObjectPtrType=WeakPtr<Object>, typename PropertyType=Property>
42{
43public:
44 AttributeBasic() = default;
45
46 AttributeBasic(ObjectPtrType object, PropertyType* property)
47 : object_(object)
48 , property_(property)
49 {
50 }
51
52 bool isValid() const {return object_ && property_;}
53
54 EValueType getValueType() const {
55 if(!property_) return EValueType::eInvalid;
56 return property_->getValueType();
57 }
58
59 errc_t getValueDouble(double& value) const
60 {
61 auto object = getObject();
62 if(!property_ || !object) return eErrorInvalidParam;
63 return property_->getValueDouble(object, value);
64 }
65 errc_t setValueDouble(double value)
66 {
67 auto object = getObject();
68 if(!property_ || !object) return eErrorInvalidParam;
69 return property_->setValueDouble(object, value);
70 }
71 errc_t getValueInt(int& value) const
72 {
73 auto object = getObject();
74 if(!property_ || !object) return eErrorInvalidParam;
75 return property_->getValueInt(object, value);
76 }
77 errc_t setValueInt(int value)
78 {
79 auto object = getObject();
80 if(!property_ || !object) return eErrorInvalidParam;
81 return property_->setValueInt(object, value);
82 }
83 errc_t getValueBool(bool& value) const
84 {
85 auto object = getObject();
86 if(!property_ || !object) return eErrorInvalidParam;
87 return property_->getValueBool(object, value);
88 }
89 errc_t setValueBool(bool value)
90 {
91 auto object = getObject();
92 if(!property_ || !object) return eErrorInvalidParam;
93 return property_->setValueBool(object, value);
94 }
95 errc_t getValueString(std::string& value) const
96 {
97 auto object = getObject();
98 if(!property_ || !object) return eErrorInvalidParam;
99 return property_->getValueString(object, value);
100 }
101 errc_t setValueString(StringView value)
102 {
103 auto object = getObject();
104 if(!property_ || !object) return eErrorInvalidParam;
105 return property_->setValueString(object, value);
106 }
107 errc_t getValueObject(Object*& value) const
108 {
109 auto object = getObject();
110 if(!property_ || !object) return eErrorInvalidParam;
111 return property_->getValueObject(object, value);
112 }
113 errc_t setValueObject(Object* value)
114 {
115 auto object = getObject();
116 if(!property_ || !object) return eErrorInvalidParam;
117 return property_->setValueObject(object, value);
118 }
119public:
120 double getValueDouble() const
121 {
122 double value = 0.0;
123 getValueDouble(value);
124 return value;
125 }
126 int getValueInt() const
127 {
128 int value = 0;
129 getValueInt(value);
130 return value;
131 }
132 bool getValueBool() const
133 {
134 bool value = false;
135 getValueBool(value);
136 return value;
137 }
138 std::string getValueString() const
139 {
140 std::string value;
141 getValueString(value);
142 return value;
143 }
144 Object* getValueObject() const
145 {
146 Object* value = nullptr;
147 getValueObject(value);
148 return value;
149 }
150public:
151 operator double() const
152 {
153 return getValueDouble();
154 }
155 operator int() const
156 {
157 return getValueInt();
158 }
159 operator bool() const
160 {
161 return getValueBool();
162 }
163 operator std::string() const
164 {
165 return getValueString();
166 }
167public:
168 AttributeBasic& operator=(double value)
169 {
170 setValueDouble(value);
171 return *this;
172 }
173 AttributeBasic& operator=(int value)
174 {
175 setValueInt(value);
176 return *this;
177 }
178 // 避免对bool类型的隐式转换
179 template<typename T, typename = typename std::enable_if<std::is_same<T, bool>::value>::type>
180 AttributeBasic& operator=(T value)
181 {
182 setValueBool(value);
183 return *this;
184 }
185 AttributeBasic& operator=(StringView value)
186 {
187 setValueString(value);
188 return *this;
189 }
190protected:
191 void* getObject() const;
192protected:
193 ObjectPtrType object_{};
194 PropertyType* property_{nullptr};
195};
196
197template<>
198inline void* AttributeBasic<WeakPtr<Object>, Property>::getObject() const
199{
200 return object_.get();
201}
202
203template<typename ObjectPtrType, typename PropertyType>
204inline void* AttributeBasic<ObjectPtrType, PropertyType>::getObject() const
205{
206 return object_;
207}
208
209// typedef AttributeBasic<> Attribute;
210
213AST_NAMESPACE_END
对象的特定属性
定义 Attribute.hpp:42
对象基类,继承自该类的对象可以使用运行时类型信息相关功能,实现强弱引用计数、运行时元信息(属性访问、序列化等)等基础功能
定义 Object.hpp:86
反射属性类
定义 Property.hpp:67
EValueType
定义 Property.hpp:38