🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
ReflectAPI.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/ReflectAPI.hpp"
25
26AST_NAMESPACE_BEGIN
27
38AST_CORE_CAPI Property* _aNewPropertyTimePoint(FPropertyGet getter, FPropertySet setter);
39
40
41#ifndef SWIG
42
48template<>
49A_ALWAYS_INLINE Property* _aNewProperty<TimePoint>(FPropertyGet getter, FPropertySet setter)
50{
51 return _aNewPropertyTimePoint(getter, setter);
52}
53
54
55
56
57template<typename T, TimePoint T::* Member>
58A_ALWAYS_INLINE Property* aNewPropertyTimePointMem()
59{
60 return _aNewPropertyTimePoint(
61 [](const void* obj, void* value) -> errc_t
62 {
63 *((TimePoint*)value) = ((T*)obj)->*Member;
64 return 0;
65 },
66 [](void* obj, const void* value) -> errc_t
67 {
68 ((T*)obj)->*Member = *((TimePoint*)value);
69 return 0;
70 }
71 );
72}
73
74
75template<typename T, TimePoint T::* Member>
77{
78 return aNewPropertyTimePointMem<T, Member>();
79}
80
81
82
88template<typename T, TimePoint(T::*Getter)() const>
89A_ALWAYS_INLINE Property* aNewPropertyTimePoint()
90{
91 return _aNewPropertyTimePoint(
92 [](const void* obj, void* value) -> errc_t
93 {
94 *((TimePoint*)value) = (((T*)obj)->*Getter)();
95 return 0;
96 },
97 nullptr
98 );
99}
100
101
108template<typename T, TimePoint(T::*Getter)() const, void (T::*Setter)(TimePoint)>
110{
111 A_STATIC_ASSERT_CXX14(Getter!=nullptr, "invalid getter");
112 A_STATIC_ASSERT_CXX14(Setter!=nullptr, "invalid setter");
113
115 [](const void* obj, void* value) -> errc_t
116 {
117 *((TimePoint*)value) = (((T*)obj)->*Getter)();
118 return 0;
119 },
120 [](void* obj, const void* value) -> errc_t
121 {
122 (((T*)obj)->*Setter)(*((TimePoint*)value));
123 return 0;
124 }
125 );
126}
127
128
135template<typename T, TimePoint(T::*Getter)() const, errc_t (T::*Setter)(TimePoint)>
136A_ALWAYS_INLINE Property* aNewPropertyTimePoint()
137{
138 A_STATIC_ASSERT_CXX14(Getter!=nullptr, "invalid getter");
139 A_STATIC_ASSERT_CXX14(Setter!=nullptr, "invalid setter");
140
141 return _aNewPropertyTimePoint(
142 [](const void* obj, void* value) -> errc_t
143 {
144 *((TimePoint*)value) = (((T*)obj)->*Getter)();
145 return 0;
146 },
147 [](void* obj, const void* value) -> errc_t
148 {
149 return (((T*)obj)->*Setter)(*((TimePoint*)value));
150 }
151 );
152}
153
154
161template<typename T, errc_t (T::*Getter)(TimePoint&) const, void (T::*Setter)(const TimePoint&)>
162A_ALWAYS_INLINE Property* aNewPropertyTimePoint()
163{
164 A_STATIC_ASSERT_CXX14(Getter!=nullptr, "invalid getter");
165 A_STATIC_ASSERT_CXX14(Setter!=nullptr, "invalid setter");
166
168 [](const void* obj, void* value) -> errc_t
169 {
170 TimePoint time;
171 errc_t result = (static_cast<const T*>(obj)->*Getter)(time);
172 if (result == 0) {
173 *static_cast<TimePoint*>(value) = time;
174 }
175 return result;
176 },
177 [](void* obj, const void* value) -> errc_t
178 {
179 (static_cast<T*>(obj)->*Setter)(*static_cast<const TimePoint*>(value));
180 return 0;
181 }
182 );
183}
184
185
186template<typename T, const TimePoint& (T::* Getter) () const, void (T::* Setter)(const TimePoint&)>
187A_ALWAYS_INLINE Property* aNewPropertyTimePoint()
188{
189 A_STATIC_ASSERT_CXX14(Getter!=nullptr, "invalid getter");
190 A_STATIC_ASSERT_CXX14(Setter!=nullptr, "invalid setter");
191
193 [](const void* obj, void* value) -> errc_t
194 {
195 *((TimePoint*)value) = (((T*)obj)->*Getter)();
196 return 0;
197 },
198 [](void* obj, const void* value) -> errc_t
199 {
200 (((T*)obj)->*Setter)(*((TimePoint*)value));
201 return 0;
202 }
203 );
204}
205
206
207template<typename T, const TimePoint& (T::* Getter) () const, errc_t (T::* Setter)(const TimePoint& value)>
208A_ALWAYS_INLINE Property* aNewPropertyTimePoint()
209{
210 A_STATIC_ASSERT_CXX14(Getter!=nullptr, "invalid getter");
211 A_STATIC_ASSERT_CXX14(Setter!=nullptr, "invalid setter");
212
214 [](const void* obj, void* value) -> errc_t
215 {
216 *((TimePoint*)value) = (((T*)obj)->*Getter)();
217 return 0;
218 },
219 [](void* obj, const void* value) -> errc_t
220 {
221 return (((T*)obj)->*Setter)(*((TimePoint*)value));
222 }
223 );
224}
225
226#endif
227
230AST_NAMESPACE_END
反射属性类
定义 Property.hpp:67
绝对时间点
定义 TimePoint.hpp:106
errc_t(*)(void *obj, const void *value) FPropertySet
设置属性值
定义 ReflectAPI.hpp:37
errc_t(*)(const void *obj, void *value) FPropertyGet
获取属性值
定义 ReflectAPI.hpp:36
Property * _aNewPropertyTimePoint(FPropertyGet getter, FPropertySet setter)
创建一个时间点属性
定义 ReflectAPI.cpp:26
A_ALWAYS_INLINE Property * aNewPropertyTimePoint()
创建一个时间点属性
定义 ReflectAPI.hpp:76