OROCHI
 
Loading...
Searching...
No Matches
GxFunction.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CORE_NAMESPACE_BEGIN()
13
14//===========================================================================
16//===========================================================================
17class GxFunction : public GxClassBase
18{
19 //-----------------------------------------------------------
21 //-----------------------------------------------------------
23public:
24 GX_RTTI_CLASS(GxFunction, GxClassBase)
25
26
27 enum class TYPE
28 {
29 _VOID,
30 OBJECT,
31 B32,
32 U32,
33 U64,
34 S32,
35 S64,
36 F32,
37 F64,
38 STRING,
39 MAX,
40 };
41#if GX_DEVELOP
43 GX_ENUM_TABLE_MAX(TYPE)
44#endif //GX_DEVELOP
45
47 class GxType : public GxClassBase
48 {
49 //-----------------------------------------------------------
51 //-----------------------------------------------------------
53 public:
54 GX_RTTI_CLASS(GxType, GxClassBase)
55
56
57 //-----------------------------------------------------------
59 //-----------------------------------------------------------
61 public:
63 GxType(void) : _type(TYPE::_VOID), _pRtti(nullptr) {}
65 GxType(TYPE type, const GxRtti* pRtti = nullptr) : _type(type), _pRtti(pRtti) {}
66
68 //-----------------------------------------------------------
70 //-----------------------------------------------------------
72 public:
74 const GxRtti* _pRtti;
75
77 };
78
80 struct GxValue : public GxStructBase
81 {
82 //-----------------------------------------------------------
84 //-----------------------------------------------------------
86
87 GX_RTTI_STRUCT(GxValue)
88
89
90 //-----------------------------------------------------------
92 //-----------------------------------------------------------
94
96 GxValue(void) : _pObject(nullptr){}
98 GxValue(const GxValue& value) : _pObject(value._pObject), _string(value._string) {}
100 GxValue(bool value) : _pObject(nullptr) { _b32 = value; }
102 GxValue(u64 value) : _u64(value) {}
104 GxValue(s64 value) : _s64(value) {}
106 GxValue(f64 value) : _f64(value) {}
108 ~GxValue(void) {}
109
111 //-----------------------------------------------------------
113 //-----------------------------------------------------------
115
117 template<class T> constexpr T getValue(void) { return (T)_s32; }
119 template<> constexpr void* getValue(void) { return _pObject; }
121 template<> GX_FORCE_INLINE b32 getValue<b32>(void) { return _b32; }
123 template<> constexpr u32 getValue<u32>(void) { return _u32; }
125 template<> constexpr u64 getValue<u64>(void) { return _u64; }
127 template<> constexpr s32 getValue<s32>(void) { return _s32; }
129 template<> constexpr s64 getValue<s64>(void) { return _s64; }
131 template<> constexpr f32 getValue<f32>(void) { return _f32; }
133 template<> constexpr f64 getValue<f64>(void) { return _f64; }
135 template<> GX_FORCE_INLINE GxString getValue<GxString>(void) { return _string; }
136
138 template<class T> constexpr void setValue(T value) { _s32 = (s32)value; }
140 template<> constexpr void setValue(void* pValue) { _pObject = pValue; }
142 template<> GX_FORCE_INLINE void setValue<b32>(b32 value) { _b32 = value; }
144 template<> constexpr void setValue<u32>(u32 value) { _u32 = value; }
146 template<> constexpr void setValue<u64>(u64 value) { _u64 = value; }
148 template<> constexpr void setValue<s32>(s32 value) { _s32 = value; }
150 template<> constexpr void setValue<s64>(s64 value) { _s64 = value; }
152 template<> constexpr void setValue<f32>(f32 value) { _f32 = value; }
154 template<> constexpr void setValue<f64>(f64 value) { _f64 = value; }
156 template<> GX_FORCE_INLINE void setValue<GxString>(GxString value) { _string = value; }
157
159 //-----------------------------------------------------------
161 //-----------------------------------------------------------
163
164 union
165 {
166 void* _pObject;
168 u32 _u32;
169 u64 _u64;
170 s32 _s32;
171 s64 _s64;
172 f32 _f32;
173 f64 _f64;
174 };
176
178 };
179
181 struct GxArgument : public GxStructBase
182 {
183 //-----------------------------------------------------------
185 //-----------------------------------------------------------
187
188 GX_RTTI_STRUCT(GxArgument)
189
190
191 //-----------------------------------------------------------
193 //-----------------------------------------------------------
195
197 GxArgument(void);
199 GxArgument(GxType type, GX_CSTR name, GxValue defaultValue
200#if GX_DEVELOP
201 , GX_CSTR help, const GX_ENUM* pEnum = nullptr, u32 enumCount = 0
202#endif //GX_DEVELOP
203 );
204
206 //-----------------------------------------------------------
208 //-----------------------------------------------------------
210
211#if GX_DEVELOP
213 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index);
214#endif // GX_DEVELOP
215
217 //-----------------------------------------------------------
219 //-----------------------------------------------------------
221
222 GX_CSTR _name;
225#if GX_DEVELOP
226 GX_CSTR _help;
227 const GX_ENUM* _pEnum;
228 u32 _enumCount;
229#endif //GX_DEVELOP
230
232 };
234 static const u32 ARGUMENT_MAX = 4;
235
237 typedef void(*FUNCTION)(GxValue* pReturnValue, GxTypedObject* pObject, GxValue* pArguments);
238
240 //-----------------------------------------------------------
242 //-----------------------------------------------------------
244public:
246 GxFunction(GxRtti* pRtti, u32 id, FUNCTION pFunction, GX_CSTR name, GxType returnType = GxType(), GxValue defaultValue = GxValue()
247#if GX_DEVELOP
248 , GX_CSTR virtualName = "", GX_CSTR help = ""
249#endif //GX_DEVELOP
250 );
251
253 template<typename... Arguments>
254 GxFunction(GxRtti* pRtti, u32 id, FUNCTION pFunction, GX_CSTR name, GxType returnType, GxValue defaultValue
255#if GX_DEVELOP
256 , GX_CSTR virtualName, GX_CSTR virtualNameArguments, GX_CSTR help
257#endif //GX_DEVELOP
258 , Arguments... va_args)
259 : _pRtti(pRtti), _pFunction(pFunction), _name(name), _id(id), _returnType(returnType), _defaultValue(defaultValue)
260#if GX_DEVELOP
261 , _virtualName(virtualName), _virtualNameArguments(virtualNameArguments), _help(help)
262#endif //GX_DEVELOP
263 {
264 const auto length = sizeof...(va_args);
265 GxArgument arguments[] = { va_args... };
266 for (u32 i = 0; i < length; i++)
267 {
268 _arguments[i]._name = arguments[i]._name;
269 _arguments[i]._type = arguments[i]._type;
270 _arguments[i]._defaultValue = arguments[i]._defaultValue;
271#if GX_DEVELOP
272 _arguments[i]._help = arguments[i]._help;
273 _arguments[i]._pEnum = arguments[i]._pEnum;
274 _arguments[i]._enumCount = arguments[i]._enumCount;
275#endif //GX_DEVELOP
276 }
277 }
278private:
280 GxFunction(void) : _pRtti(nullptr), _pFunction(nullptr), _name(nullptr), _id(0)
281#if GX_DEVELOP
282 , _virtualName(nullptr), _virtualNameArguments(nullptr), _help(nullptr)
283#endif //GX_DEVELOP
284 {}
285
287 //-----------------------------------------------------------
289 //-----------------------------------------------------------
291public:
293 GX_FORCE_INLINE void invoke(GxFunction::GxValue* pReturn, GxTypedObject* pObject, GxFunction::GxValue* pArgument) const { (*_pFunction)(pReturn, pObject, pArgument); }
294#if GX_DEVELOP
296 static void invoke(GX_CSTR command, u32 category = GX_TRACE_CATEGORY_NONE);
298 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index);
299#endif // GX_DEVELOP
300
302 //-----------------------------------------------------------
304 //-----------------------------------------------------------
306public:
308 constexpr u32 getId(void) const { return _id; }
310 constexpr GxRtti* getMemberRtti(void) const { return _pRtti; }
312 GX_FORCE_INLINE const GxArgument& getArgument(u32 index) const { GX_ASSERT(index < ARGUMENT_MAX, "index overflow"); return _arguments[index]; }
314 u32 getArgumentCount(void) const;
316 constexpr GX_CSTR getName(void) const { return _name; }
318 constexpr void setName(GX_CSTR name) { _name = name; }
319#if GX_DEVELOP
321 constexpr GX_CSTR getVirtualName(void) const { return _virtualName; }
323 constexpr void setVirtualName(GX_CSTR name) { _virtualName = name; }
325 constexpr GX_CSTR getVirtualNameArguments(void) const { return _virtualNameArguments ? _virtualNameArguments : _virtualName; }
327 constexpr void setHelp(GX_CSTR help) { _help = help; }
329 GX_FORCE_INLINE void setReturnType(GxType type) { _returnType = type; }
331 constexpr void setArgumentName(u32 index, GX_CSTR name) { GX_ASSERT(index < ARGUMENT_MAX, "index overflow"); _arguments[index]._name = name; }
333 constexpr void setArgumentHelp(u32 index, GX_CSTR help) { GX_ASSERT(index < ARGUMENT_MAX, "index overflow"); _arguments[index]._help = help; }
335 GX_FORCE_INLINE void setArgumentType(u32 index, GxType type) { GX_ASSERT(index < ARGUMENT_MAX, "index overflow"); _arguments[index]._type = type; }
337 void getText(GxString& text) const;
339 void getHelp(GxString& help) const;
340#endif //GX_DEVELOP
342 GX_FORCE_INLINE GxType getReturnType(void) const { return _returnType; }
346 static GxProperty::TYPE getPropertyType(TYPE type);
348 static b32 isCastable(GxType type1, GxType type2);
350 GX_FORCE_INLINE GxValue getDefaultValue(void) const { return _defaultValue; }
352 GX_FORCE_INLINE void setDefaultValue(GxValue value) { _defaultValue = value; }
353
355 //-----------------------------------------------------------
357 //-----------------------------------------------------------
359private:
360 GxArgument _arguments[ARGUMENT_MAX];
361 GxRtti* _pRtti;
362 FUNCTION _pFunction;
363 GX_CSTR _name;
364 u32 _id;
365 GxType _returnType;
366 GxValue _defaultValue;
367#if GX_DEVELOP
368 GX_CSTR _virtualName;
369 GX_CSTR _virtualNameArguments;
370 GX_CSTR _help;
371#endif //GX_DEVELOP
372
374};
375
377template<class T> GX_FORCE_INLINE GxFunction::GxType getFunctionType(void) { return GxFunction::GxType(GxFunction::TYPE::OBJECT, &T::GX_RTTI); }
398
399// invoke関数定義マクロ
400#define GX_FUNCTION_NAME_NORETURN(__CLASS__, __IMPL_NAME__, __NAME__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject* pObject, GxFunction::GxValue*) { ((__CLASS__*)pObject)->__NAME__(); }
401#define GX_FUNCTION_NAME_NORETURN_ARGUMENT_1(__CLASS__, __IMPL_NAME__, __NAME__, __TYPE_0__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject* pObject, GxFunction::GxValue* pArgument) { ((__CLASS__*)pObject)->__NAME__(pArgument[0].getValue<__TYPE_0__>()); }
402#define GX_FUNCTION_NAME_NORETURN_ARGUMENT_2(__CLASS__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject* pObject, GxFunction::GxValue* pArgument) { ((__CLASS__*)pObject)->__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>()); }
403#define GX_FUNCTION_NAME_NORETURN_ARGUMENT_3(__CLASS__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject* pObject, GxFunction::GxValue* pArgument) { ((__CLASS__*)pObject)->__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>(), pArgument[2].getValue<__TYPE_2__>()); }
404#define GX_FUNCTION_NAME_NORETURN_ARGUMENT_4(__CLASS__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject* pObject, GxFunction::GxValue* pArgument) { ((__CLASS__*)pObject)->__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>(), pArgument[2].getValue<__TYPE_2__>(), pArgument[3].getValue<__TYPE_3__>()); }
405#define GX_FUNCTION_NAME(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject* pObject, GxFunction::GxValue*) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(((__CLASS__*)pObject)->__NAME__())); }
406#define GX_FUNCTION_NAME_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__, __TYPE_0__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject* pObject, GxFunction::GxValue* pArgument) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(((__CLASS__*)pObject)->__NAME__(pArgument[0].getValue<__TYPE_0__>()))); }
407#define GX_FUNCTION_NAME_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject* pObject, GxFunction::GxValue* pArgument) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(((__CLASS__*)pObject)->__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>()))); }
408#define GX_FUNCTION_NAME_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject* pObject, GxFunction::GxValue* pArgument) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(((__CLASS__*)pObject)->__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>(), pArgument[2].getValue<__TYPE_2__>()))); }
409#define GX_FUNCTION_NAME_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject* pObject, GxFunction::GxValue* pArgument) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(((__CLASS__*)pObject)->__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>(), pArgument[2].getValue<__TYPE_2__>(), pArgument[3].getValue<__TYPE_3__>()))); }
410#define GX_FUNCTION_STATIC_NAME_NORETURN(__CLASS__, __IMPL_NAME__, __NAME__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject*, GxFunction::GxValue*) { __CLASS__::__NAME__(); }
411#define GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_1(__CLASS__, __IMPL_NAME__, __NAME__, __TYPE_0__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject*, GxFunction::GxValue* pArgument) { __CLASS__::__NAME__(pArgument[0].getValue<__TYPE_0__>()); }
412#define GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_2(__CLASS__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject*, GxFunction::GxValue* pArgument) { __CLASS__::__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>()); }
413#define GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_3(__CLASS__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject*, GxFunction::GxValue* pArgument) { __CLASS__::__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>(), pArgument[2].getValue<__TYPE_2__>()); }
414#define GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_4(__CLASS__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue*, GxTypedObject*, GxFunction::GxValue* pArgument) { __CLASS__::__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>(), pArgument[2].getValue<__TYPE_2__>(), pArgument[3].getValue<__TYPE_3__>()); }
415#define GX_FUNCTION_STATIC_NAME(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject*, GxFunction::GxValue*) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(__CLASS__::__NAME__())); }
416#define GX_FUNCTION_STATIC_NAME_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__, __TYPE_0__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject*, GxFunction::GxValue* pArgument) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(__CLASS__::__NAME__(pArgument[0].getValue<__TYPE_0__>()))); }
417#define GX_FUNCTION_STATIC_NAME_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject*, GxFunction::GxValue* pArgument) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(__CLASS__::__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>()))); }
418#define GX_FUNCTION_STATIC_NAME_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject*, GxFunction::GxValue* pArgument) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(__CLASS__::__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>(), pArgument[2].getValue<__TYPE_2__>()))); }
419#define GX_FUNCTION_STATIC_NAME_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __IMPL_NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) void __CLASS__##__IMPL_NAME__##Impl(GxFunction::GxValue* pReturn, GxTypedObject*, GxFunction::GxValue* pArgument) { pReturn->setValue<__RETURN_TYPE__>(static_cast<__RETURN_TYPE__>(__CLASS__::__NAME__(pArgument[0].getValue<__TYPE_0__>(), pArgument[1].getValue<__TYPE_1__>(), pArgument[2].getValue<__TYPE_2__>(), pArgument[3].getValue<__TYPE_3__>()))); }
420
421#define GX_FUNCTION_DUMMY(__CLASS__, __NAME__) void __CLASS__##__NAME__##Impl(GxFunction::GxValue*, GxTypedObject*, GxFunction::GxValue*) { }
422#define GX_FUNCTION_DUMMY_ARGUMENT_1(__CLASS__, __NAME__, __TYPE_0__) GX_FUNCTION_DUMMY(__CLASS__, __NAME__##__TYPE_0__)
423#define GX_FUNCTION_DUMMY_ARGUMENT_2(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_DUMMY(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__)
424#define GX_FUNCTION_DUMMY_ARGUMENT_3(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_DUMMY(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__)
425#define GX_FUNCTION_DUMMY_ARGUMENT_4(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_DUMMY(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__##__TYPE_3__)
426#define GX_FUNCTION_NORETURN(__CLASS__, __NAME__) GX_FUNCTION_NAME_NORETURN(__CLASS__, __NAME__, __NAME__)
427#define GX_FUNCTION_NORETURN_ARGUMENT_1(__CLASS__, __NAME__, __TYPE_0__) GX_FUNCTION_NAME_NORETURN_ARGUMENT_1(__CLASS__, __NAME__, __NAME__, __TYPE_0__)
428#define GX_FUNCTION_NORETURN_ARGUMENT_2(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_NAME_NORETURN_ARGUMENT_2(__CLASS__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__)
429#define GX_FUNCTION_NORETURN_ARGUMENT_3(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_NAME_NORETURN_ARGUMENT_3(__CLASS__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__)
430#define GX_FUNCTION_NORETURN_ARGUMENT_4(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_NAME_NORETURN_ARGUMENT_4(__CLASS__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)
431#define GX_FUNCTION(__CLASS__, __RETURN_TYPE__, __NAME__) GX_FUNCTION_NAME(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__)
432#define GX_FUNCTION_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__) GX_FUNCTION_NAME_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__, __TYPE_0__)
433#define GX_FUNCTION_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_NAME_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__)
434#define GX_FUNCTION_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_NAME_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__)
435#define GX_FUNCTION_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_NAME_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)
436
437#define GX_FUNCTION_STATIC_NORETURN(__CLASS__, __NAME__) GX_FUNCTION_STATIC_NAME_NORETURN(__CLASS__, __NAME__, __NAME__)
438#define GX_FUNCTION_STATIC_NORETURN_ARGUMENT_1(__CLASS__, __NAME__, __TYPE_0__) GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_1(__CLASS__, __NAME__, __NAME__, __TYPE_0__)
439#define GX_FUNCTION_STATIC_NORETURN_ARGUMENT_2(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_2(__CLASS__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__)
440#define GX_FUNCTION_STATIC_NORETURN_ARGUMENT_3(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_3(__CLASS__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__)
441#define GX_FUNCTION_STATIC_NORETURN_ARGUMENT_4(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_4(__CLASS__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)
442#define GX_FUNCTION_STATIC(__CLASS__, __RETURN_TYPE__, __NAME__) GX_FUNCTION_STATIC_NAME(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__)
443#define GX_FUNCTION_STATIC_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__) GX_FUNCTION_STATIC_NAME_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__, __TYPE_0__)
444#define GX_FUNCTION_STATIC_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_STATIC_NAME_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__)
445#define GX_FUNCTION_STATIC_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_STATIC_NAME_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__)
446#define GX_FUNCTION_STATIC_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_STATIC_NAME_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __NAME__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)
447
448#define GX_FUNCTION_OVERLOAD_DUMMY_ARGUMENT_1(__CLASS__, __NAME__, __TYPE_0__) GX_FUNCTION_DUMMY_ARGUMENT_4(__CLASS__, __NAME__##__TYPE_0__, __TYPE_0__)
449#define GX_FUNCTION_OVERLOAD_DUMMY_ARGUMENT_2(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_DUMMY_ARGUMENT_4(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__, __TYPE_0__, __TYPE_1__)
450#define GX_FUNCTION_OVERLOAD_DUMMY_ARGUMENT_3(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_DUMMY_ARGUMENT_4(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__, __TYPE_0__, __TYPE_1__, __TYPE_2__)
451#define GX_FUNCTION_OVERLOAD_DUMMY_ARGUMENT_4(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_DUMMY_ARGUMENT_4(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__##__TYPE_3__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)
452#define GX_FUNCTION_OVERLOAD_NORETURN_ARGUMENT_1(__CLASS__, __NAME__, __TYPE_0__) GX_FUNCTION_NAME_NORETURN_ARGUMENT_1(__CLASS__, __NAME__##__TYPE_0__, __NAME__, __TYPE_0__)
453#define GX_FUNCTION_OVERLOAD_NORETURN_ARGUMENT_2(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_NAME_NORETURN_ARGUMENT_2(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__, __NAME__, __TYPE_0__, __TYPE_1__)
454#define GX_FUNCTION_OVERLOAD_NORETURN_ARGUMENT_3(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_NAME_NORETURN_ARGUMENT_3(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__)
455#define GX_FUNCTION_OVERLOAD_NORETURN_ARGUMENT_4(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_NAME_NORETURN_ARGUMENT_4(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__##__TYPE_3__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)
456#define GX_FUNCTION_OVERLOAD_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__) GX_FUNCTION_NAME_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __NAME__##__TYPE_0__, __NAME__, __TYPE_0__)
457#define GX_FUNCTION_OVERLOAD_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_NAME_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__, __NAME__, __TYPE_0__, __TYPE_1__)
458#define GX_FUNCTION_OVERLOAD_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_NAME_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__)
459#define GX_FUNCTION_OVERLOAD_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_NAME_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__##__TYPE_3__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)
460
461#define GX_FUNCTION_OVERLOAD_STATIC_NORETURN_ARGUMENT_1(__CLASS__, __NAME__, __TYPE_0__) GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_1(__CLASS__, __NAME__##__TYPE_0__, __NAME__, __TYPE_0__)
462#define GX_FUNCTION_OVERLOAD_STATIC_NORETURN_ARGUMENT_2(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_2(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__, __NAME__, __TYPE_0__, __TYPE_1__)
463#define GX_FUNCTION_OVERLOAD_STATIC_NORETURN_ARGUMENT_3(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_3(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__)
464#define GX_FUNCTION_OVERLOAD_STATIC_NORETURN_ARGUMENT_4(__CLASS__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_STATIC_NAME_NORETURN_ARGUMENT_4(__CLASS__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__##__TYPE_3__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)
465#define GX_FUNCTION_OVERLOAD_STATIC_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__) GX_FUNCTION_STATIC_NAME_ARGUMENT_1(__CLASS__, __RETURN_TYPE__, __NAME__##__TYPE_0__, __NAME__, __TYPE_0__)
466#define GX_FUNCTION_OVERLOAD_STATIC_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__) GX_FUNCTION_STATIC_NAME_ARGUMENT_2(__CLASS__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__, __NAME__, __TYPE_0__, __TYPE_1__)
467#define GX_FUNCTION_OVERLOAD_STATIC_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__) GX_FUNCTION_STATIC_NAME_ARGUMENT_3(__CLASS__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__)
468#define GX_FUNCTION_OVERLOAD_STATIC_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__) GX_FUNCTION_STATIC_NAME_ARGUMENT_4(__CLASS__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__##__TYPE_3__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)
469
470// 関数登録マクロ
471#define GX_TO_TEXT(x) #x
472#if GX_DEVELOP
473#define _ARGUMENT(__HELP__, __TYPE__, __NAME__) _ARGUMENT_DEFAULT(__HELP__, __TYPE__, __NAME__, GxFunction::GxValue())
474#define _ARGUMENT_DEFAULT(__HELP__, __TYPE__, __NAME__, __DEFAULT__) GxFunction::GxArgument(getFunctionType<__TYPE__>(), #__NAME__, __DEFAULT__, __HELP__, nullptr, 0)
475#define _ARGUMENT_ENUM(__HELP__, __TYPE__, __NAME__, __ENUM__) _ARGUMENT_ENUM_DEFAULT(__HELP__, __TYPE__, __NAME__, __ENUM__, GxFunction::GxValue())
476#define _ARGUMENT_ENUM_DEFAULT(__HELP__, __TYPE__, __NAME__, __ENUM__, __DEFAULT__) GxFunction::GxArgument(getFunctionType<__TYPE__>(), #__NAME__, __DEFAULT__, __HELP__, __ENUM__##_TABLE, sizeof(__ENUM__##_TABLE) / sizeof(GX_ENUM))
477
478#define _FUNCTION_NAME_DEFAULT(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __DEFAULT__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__, __VNAME__, __HELP__)
479#define _FUNCTION_NAME_DEFAULT_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __VNAME_ARGUMENTS__, __DEFAULT__, __ARGUMENT_0__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__, __VNAME__, __VNAME_ARGUMENTS__, __HELP__, __ARGUMENT_0__)
480#define _FUNCTION_NAME_DEFAULT_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __VNAME_ARGUMENTS__, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__, __VNAME__, __VNAME_ARGUMENTS__, __HELP__, __ARGUMENT_0__, __ARGUMENT_1__)
481#define _FUNCTION_NAME_DEFAULT_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __VNAME_ARGUMENTS__, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__, __VNAME__, __VNAME_ARGUMENTS__, __HELP__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__)
482#define _FUNCTION_NAME_DEFAULT_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __VNAME_ARGUMENTS__, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__, __VNAME__, __VNAME_ARGUMENTS__, __HELP__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__)
483#else //GX_DEVELOP
484#define _ARGUMENT(__HELP__, __TYPE__, __NAME__) GxFunction::GxArgument(getFunctionType<__TYPE__>(), #__NAME__, GxFunction::GxValue())
485#define _ARGUMENT_DEFAULT(__HELP__, __TYPE__, __NAME__, __DEFAULT__) GxFunction::GxArgument(getFunctionType<__TYPE__>(), #__NAME__, __DEFAULT__)
486#define _ARGUMENT_ENUM(__HELP__, __TYPE__, __NAME__, __ENUM__) _ARGUMENT_ENUM_DEFAULT(__HELP__, __TYPE__, __NAME__, __ENUM__, GxFunction::GxValue())
487#define _ARGUMENT_ENUM_DEFAULT(__HELP__, __TYPE__, __NAME__, __ENUM__, __DEFAULT__) GxFunction::GxArgument(getFunctionType<__TYPE__>(), #__NAME__, __DEFAULT__)
488
489#define _FUNCTION_NAME_DEFAULT(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __DEFAULT__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__)
490#define _FUNCTION_NAME_DEFAULT_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __VNAME_ARGUMENTS__, __DEFAULT__, __ARGUMENT_0__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__, __ARGUMENT_0__)
491#define _FUNCTION_NAME_DEFAULT_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __VNAME_ARGUMENTS__, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__)
492#define _FUNCTION_NAME_DEFAULT_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __VNAME_ARGUMENTS__, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__)
493#define _FUNCTION_NAME_DEFAULT_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __IMPL_NAME__, __VNAME__, __VNAME_ARGUMENTS__, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__) GxFunction(&MyClass::GX_RTTI, GxMath::getHash32(#__IMPL_NAME__, MyClass::GX_RTTI.getId()), &__CLASS__##__IMPL_NAME__##Impl, #__IMPL_NAME__, getFunctionType<__RETURN_TYPE__>(), __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__)
494#endif // !GX_DEVELOP
495
496#define _FUNCTION(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__) _FUNCTION_DEFAULT(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue())
497#define _FUNCTION_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __ARGUMENT_0__) _FUNCTION_DEFAULT_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __ARGUMENT_0__)
498#define _FUNCTION_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __ARGUMENT_0__, __ARGUMENT_1__) _FUNCTION_DEFAULT_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __ARGUMENT_0__, __ARGUMENT_1__)
499#define _FUNCTION_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__) _FUNCTION_DEFAULT_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__)
500#define _FUNCTION_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__) _FUNCTION_DEFAULT_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__)
501#define _FUNCTION_DEFAULT(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__) _FUNCTION_NAME_DEFAULT(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, #__NAME__, __DEFAULT__)
502#define _FUNCTION_DEFAULT_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __ARGUMENT_0__) _FUNCTION_NAME_DEFAULT_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, #__NAME__, nullptr, __DEFAULT__, __ARGUMENT_0__)
503#define _FUNCTION_DEFAULT_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__) _FUNCTION_NAME_DEFAULT_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, #__NAME__, nullptr, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__)
504#define _FUNCTION_DEFAULT_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__) _FUNCTION_NAME_DEFAULT_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, #__NAME__, nullptr, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__)
505#define _FUNCTION_DEFAULT_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__) _FUNCTION_NAME_DEFAULT_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, #__NAME__, nullptr, __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__)
506
507#define _FUNCTION_OVERLOAD_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __ARGUMENT_0__) _FUNCTION_OVERLOAD_DEFAULT_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __TYPE_0__, __ARGUMENT_0__)
508#define _FUNCTION_OVERLOAD_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __ARGUMENT_0__, __ARGUMENT_1__) _FUNCTION_OVERLOAD_DEFAULT_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __TYPE_0__, __TYPE_1__, __ARGUMENT_0__, __ARGUMENT_1__)
509#define _FUNCTION_OVERLOAD_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__) _FUNCTION_OVERLOAD_DEFAULT_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __TYPE_0__, __TYPE_1__, __TYPE_2__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__)
510#define _FUNCTION_OVERLOAD_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__) _FUNCTION_OVERLOAD_DEFAULT_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__)
511#define _FUNCTION_OVERLOAD_NAME_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __VNAME__, __TYPE_0__, __ARGUMENT_0__) _FUNCTION_OVERLOAD_DEFAULT_NAME_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __VNAME__, __TYPE_0__, __ARGUMENT_0__)
512#define _FUNCTION_OVERLOAD_NAME_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __VNAME__, __TYPE_0__, __TYPE_1__, __ARGUMENT_0__, __ARGUMENT_1__) _FUNCTION_OVERLOAD_DEFAULT_NAME_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __VNAME__, __TYPE_0__, __TYPE_1__, __ARGUMENT_0__, __ARGUMENT_1__)
513#define _FUNCTION_OVERLOAD_NAME_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __VNAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__) _FUNCTION_OVERLOAD_DEFAULT_NAME_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __VNAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__)
514#define _FUNCTION_OVERLOAD_NAME_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __VNAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__) _FUNCTION_OVERLOAD_DEFAULT_NAME_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, GxFunction::GxValue(), __VNAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__)
515#define _FUNCTION_OVERLOAD_DEFAULT_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __TYPE_0__, __ARGUMENT_0__) _FUNCTION_NAME_DEFAULT_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__##__TYPE_0__, #__NAME__, GX_TO_TEXT(__NAME__(__TYPE_0__)), __DEFAULT__, __ARGUMENT_0__)
516#define _FUNCTION_OVERLOAD_DEFAULT_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __TYPE_0__, __TYPE_1__, __ARGUMENT_0__, __ARGUMENT_1__) _FUNCTION_NAME_DEFAULT_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__, #__NAME__, GX_TO_TEXT(__NAME__(__TYPE_0__, __TYPE_1__)), __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__)
517#define _FUNCTION_OVERLOAD_DEFAULT_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__) _FUNCTION_NAME_DEFAULT_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__, #__NAME__, GX_TO_TEXT(__NAME__(__TYPE_0__, __TYPE_1__, __TYPE_2__)), __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__)
518#define _FUNCTION_OVERLOAD_DEFAULT_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__) _FUNCTION_NAME_DEFAULT_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__##__TYPE_3__, #__NAME__, GX_TO_TEXT(__NAME__(__TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)), __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__)
519#define _FUNCTION_OVERLOAD_DEFAULT_NAME_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __VNAME__, __TYPE_0__, __ARGUMENT_0__) _FUNCTION_NAME_DEFAULT_ARGUMENT_1(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__##__TYPE_0__, __VNAME__, GX_TO_TEXT(__NAME__(__TYPE_0__)), __DEFAULT__, __ARGUMENT_0__)
520#define _FUNCTION_OVERLOAD_DEFAULT_NAME_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __VNAME__, __TYPE_0__, __TYPE_1__, __ARGUMENT_0__, __ARGUMENT_1__) _FUNCTION_NAME_DEFAULT_ARGUMENT_2(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__, __VNAME__, GX_TO_TEXT(__NAME__(__TYPE_0__, __TYPE_1__)), __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__)
521#define _FUNCTION_OVERLOAD_DEFAULT_NAME_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __VNAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__) _FUNCTION_NAME_DEFAULT_ARGUMENT_3(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__, __VNAME__, GX_TO_TEXT(__NAME__(__TYPE_0__, __TYPE_1__, __TYPE_2__)), __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__)
522#define _FUNCTION_OVERLOAD_DEFAULT_NAME_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__, __DEFAULT__, __VNAME__, __TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__) _FUNCTION_NAME_DEFAULT_ARGUMENT_4(__CLASS__, __HELP__, __RETURN_TYPE__, __NAME__##__TYPE_0__##__TYPE_1__##__TYPE_2__##__TYPE_3__, __VNAME__, GX_TO_TEXT(__NAME__(__TYPE_0__, __TYPE_1__, __TYPE_2__, __TYPE_3__)), __DEFAULT__, __ARGUMENT_0__, __ARGUMENT_1__, __ARGUMENT_2__, __ARGUMENT_3__)
523
524GX_CORE_NAMESPACE_END()
@ MAX
定義数
void GxTypedObject
その他
Definition GxDefine.h:213
GX_FORCE_INLINE GxFunction::GxType getFunctionType< u32 >(void)
型情報の変換関数(u32)
Definition GxFunction.h:385
GX_FORCE_INLINE GxFunction::GxType getFunctionType< b32 >(void)
型情報の変換関数(b32)
Definition GxFunction.h:383
GX_FORCE_INLINE GxFunction::GxType getFunctionType< void * >(void)
型情報の変換関数(void*)
Definition GxFunction.h:379
GX_FORCE_INLINE GxFunction::GxType getFunctionType< f32 >(void)
型情報の変換関数(f32)
Definition GxFunction.h:393
GX_FORCE_INLINE GxFunction::GxType getFunctionType< u64 >(void)
型情報の変換関数(u64)
Definition GxFunction.h:387
GX_FORCE_INLINE GxFunction::GxType getFunctionType< f64 >(void)
型情報の変換関数(f64)
Definition GxFunction.h:395
GX_FORCE_INLINE GxFunction::GxType getFunctionType< GxString >(void)
型情報の変換関数(GxString)
Definition GxFunction.h:397
GX_FORCE_INLINE GxFunction::GxType getFunctionType< s32 >(void)
型情報の変換関数(s32)
Definition GxFunction.h:389
GX_FORCE_INLINE GxFunction::GxType getFunctionType< s64 >(void)
型情報の変換関数(s64)
Definition GxFunction.h:391
GX_FORCE_INLINE GxFunction::GxType getFunctionType(void)
型情報の変換関数(Object)
Definition GxFunction.h:377
GX_FORCE_INLINE GxFunction::GxType getFunctionType< void >(void)
型情報の変換関数(void)
Definition GxFunction.h:381
オブジェクト基底クラス
Definition GxBase.h:88
型情報
Definition GxFunction.h:48
GxType(void)
デフォルトコンストラクタ
Definition GxFunction.h:63
TYPE _type
基本型
Definition GxFunction.h:73
const GxRtti * _pRtti
RTTI.
Definition GxFunction.h:74
GxType(TYPE type, const GxRtti *pRtti=nullptr)
コンストラクタ
Definition GxFunction.h:65
関数型情報
Definition GxFunction.h:18
GxFunction(GxRtti *pRtti, u32 id, FUNCTION pFunction, GX_CSTR name, GxType returnType=GxType(), GxValue defaultValue=GxValue())
コンストラクタ
GX_FORCE_INLINE void invoke(GxFunction::GxValue *pReturn, GxTypedObject *pObject, GxFunction::GxValue *pArgument) const
関数を実行
Definition GxFunction.h:293
GX_FORCE_INLINE void setDefaultValue(GxValue value)
デフォルト戻り値を設定
Definition GxFunction.h:352
GX_FORCE_INLINE const GxArgument & getArgument(u32 index) const
引数情報を取得
Definition GxFunction.h:312
TYPE
型定義
Definition GxFunction.h:28
@ S64
64bit符号付き整数
@ F64
64bit浮動小数
@ U64
64bit符号無し整数
@ F32
32bit浮動小数
@ STRING
文字列
@ B32
真偽値
@ OBJECT
オブジェクト
@ S32
32bit符号付き整数
@ U32
32bit符号無し整数
constexpr GX_CSTR getName(void) const
関数名を取得
Definition GxFunction.h:316
GxFunction(GxRtti *pRtti, u32 id, FUNCTION pFunction, GX_CSTR name, GxType returnType, GxValue defaultValue, Arguments... va_args)
コンストラクタ
Definition GxFunction.h:254
constexpr u32 getId(void) const
IDを取得
Definition GxFunction.h:308
GX_FORCE_INLINE GxValue getDefaultValue(void) const
デフォルト戻り値を取得
Definition GxFunction.h:350
constexpr GxRtti * getMemberRtti(void) const
RTTIを取得
Definition GxFunction.h:310
constexpr void setName(GX_CSTR name)
関数名を設定
Definition GxFunction.h:318
プロパティクラス
Definition GxProperty.h:48
TYPE
タイプ定義
Definition GxProperty.h:56
実行時型情報クラス
Definition GxRtti.h:154
GUI用
Definition GxDefine.h:194
引数情報の構造体
Definition GxFunction.h:182
GxValue _defaultValue
デフォルト値
Definition GxFunction.h:224
GX_CSTR _name
引数名
Definition GxFunction.h:222
GxArgument(GxType type, GX_CSTR name, GxValue defaultValue)
コンストラクタ
GxType _type
引数の型
Definition GxFunction.h:223
値の共用体
Definition GxFunction.h:81
GxValue(s64 value)
コンストラクタ
Definition GxFunction.h:104
GxValue(const GxValue &value)
コピーコンストラクタ
Definition GxFunction.h:98
b32 _b32
真偽値
Definition GxFunction.h:167
u32 _u32
32bit符号無し整数
Definition GxFunction.h:168
constexpr void setValue(T value)
値を設定
Definition GxFunction.h:138
u64 _u64
64bit符号無し整数
Definition GxFunction.h:169
constexpr T getValue(void)
値を取得
Definition GxFunction.h:117
constexpr void setValue(void *pValue)
値を設定
Definition GxFunction.h:140
f64 _f64
64bit浮動小数
Definition GxFunction.h:173
~GxValue(void)
デストラクタ
Definition GxFunction.h:108
void * _pObject
オブジェクト
Definition GxFunction.h:166
constexpr void * getValue(void)
値を取得
Definition GxFunction.h:119
f32 _f32
32bit浮動小数
Definition GxFunction.h:172
s64 _s64
64bit符号付き整数
Definition GxFunction.h:171
GxValue(u64 value)
コンストラクタ
Definition GxFunction.h:102
GxValue(bool value)
コンストラクタ
Definition GxFunction.h:100
GxValue(f64 value)
コンストラクタ
Definition GxFunction.h:106
GxString _string
文字列
Definition GxFunction.h:175
s32 _s32
32bit符号付き整数
Definition GxFunction.h:170
文字列型クラス
Definition GxString.h:18
Definition GxBase.h:24
32bitブーリアン
Definition GxDefine.h:173