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