12GX_CORE_NAMESPACE_BEGIN()
43 GX_ENUM_TABLE_MAX(TYPE)
98 GxValue(
const GxValue& value) : _pObject(value._pObject), _string(value._string) {}
100 GxValue(
bool value) : _pObject(nullptr) { _b32 = value; }
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; }
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; }
201 , GX_CSTR help,
const GX_ENUM* pEnum =
nullptr, u32 enumCount = 0
234 static const u32 ARGUMENT_MAX = 4;
248 , GX_CSTR virtualName =
"", GX_CSTR help =
""
253 template<
typename... Arguments>
256 , GX_CSTR virtualName, GX_CSTR virtualNameArguments, GX_CSTR help
258 , Arguments... va_args)
259 : _pRtti(pRtti), _pFunction(pFunction), _name(name), _id(id), _returnType(returnType), _defaultValue(defaultValue)
261 , _virtualName(virtualName), _virtualNameArguments(virtualNameArguments), _help(help)
264 const auto length =
sizeof...(va_args);
266 for (u32 i = 0; i < length; i++)
268 _arguments[i]._name = arguments[i].
_name;
269 _arguments[i]._type = arguments[i].
_type;
272 _arguments[i]._help = arguments[i]._help;
273 _arguments[i]._pEnum = arguments[i]._pEnum;
274 _arguments[i]._enumCount = arguments[i]._enumCount;
280 GxFunction(
void) : _pRtti(nullptr), _pFunction(nullptr), _name(nullptr), _id(0)
282 , _virtualName(nullptr), _virtualNameArguments(nullptr), _help(nullptr)
296 static void invoke(GX_CSTR command, u32 category = GX_TRACE_CATEGORY_NONE);
308 constexpr u32
getId(
void)
const {
return _id; }
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; }
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; }
342 GX_FORCE_INLINE GxType getReturnType(void) const { return _returnType; }
360 GxArgument _arguments[ARGUMENT_MAX];
366 GxValue _defaultValue;
368 GX_CSTR _virtualName;
369 GX_CSTR _virtualNameArguments;
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__>()))); }
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__)
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__)
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__)
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__)
471#define GX_TO_TEXT(x) #x
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))
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__)
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__)
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__)
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__)
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__)
524GX_CORE_NAMESPACE_END()
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
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
32bitブーリアン
Definition GxDefine.h:173