[+] Added move constructors

[*] Clean up
This commit is contained in:
Reece Wilson 2021-10-08 14:24:26 +01:00
parent 363b41325f
commit 2cc0e1d428

View File

@ -26,47 +26,67 @@
#define AUI_METHOD_IMPL(ret, name, params) virtual ret name(AUI_EXPAND_PARAMS params) = 0; #define AUI_METHOD_IMPL(ret, name, params) virtual ret name(AUI_EXPAND_PARAMS params) = 0;
#define AUI_METHOD_FUNCTIONAL_IMPL(ret, name, params) \ #define AUI_METHOD_FUNCTIONAL_IMPL(ret, name, params) \
AuFunction<ret(AUI_EXPAND_PARAMS_TYPES params)> name ## Functional; \ AuFunction<ret(AUI_EXPAND_PARAMS_TYPES params)> name ## Functional; \
virtual ret name (AUI_EXPAND_PARAMS params) override \ virtual ret name (AUI_EXPAND_PARAMS params) override \
{ \ { \
return name ## Functional(AUI_EXPAND_PARAMS_PARAMS params); \ return name ## Functional(AUI_EXPAND_PARAMS_PARAMS params); \
} }
#define AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL(ret, name, params) \ #define AUI_METHOD_FUNCTIONAL_TYPEDEF(ret, name, params) \
AuFunction<ret(AUI_EXPAND_PARAMS_TYPES params)> name ## Functional using name ## _t = AuFunction<ret(AUI_EXPAND_PARAMS_TYPES params)>;
#define AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_A(ret, name, params) AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL(ret, name, params) #define AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL(ret, name, params) \
#define AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_B(ret, name, params) , AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL(ret, name, params) name ## _t name ## Functional
#define AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL_CREF(ret, name, params) \
const name ## _t &name ## Functional
#define AUI_METHOD_PROTOTYPE_ASSIGN(ret, name, params) \ #define AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL_REF(ret, name, params) \
AuFunction<ret(AUI_EXPAND_PARAMS_TYPES params)> && name ## Functional
#define AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_A(ret, name, params) AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL_CREF(ret, name, params)
#define AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_B(ret, name, params) , AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL_CREF(ret, name, params)
#define AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_REF_A(ret, name, params) AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL_REF(ret, name, params)
#define AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_REF_B(ret, name, params) , AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL_REF(ret, name, params)
#define AUI_METHOD_PROTOTYPE_ASSIGN(ret, name, params) \
name ## Functional(name ## Functional) name ## Functional(name ## Functional)
#define AUI_METHOD_FUNCTIONAL_ASSIGN_A(ret, name, params) AUI_METHOD_PROTOTYPE_ASSIGN(ret, name, params) #define AUI_METHOD_FUNCTIONAL_ASSIGN_A(ret, name, params) AUI_METHOD_PROTOTYPE_ASSIGN(ret, name, params)
#define AUI_METHOD_FUNCTIONAL_ASSIGN_B(ret, name, params) , AUI_METHOD_PROTOTYPE_ASSIGN(ret, name, params) #define AUI_METHOD_FUNCTIONAL_ASSIGN_B(ret, name, params) , AUI_METHOD_PROTOTYPE_ASSIGN(ret, name, params)
#define AUI_METHOD_FUNCTIONAL_FWD(ret, name, params) \ #define AUI_METHOD_FUNCTIONAL_FWD(ret, name, params) \
AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL(ret, name, params); \ AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL(ret, name, params); \
virtual ret name (AUI_EXPAND_PARAMS params) override; virtual ret name (AUI_EXPAND_PARAMS params) override;
#define AUI_DEFINE_INTERFACE_START_STRUCT(name, ...) struct name { AU_FOR_EACH_3(AUI_METHOD_IMPL, __VA_ARGS__) }; #define AUI_DEFINE_INTERFACE_START_STRUCT(name, ...) struct name \
#define AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(tmpl, name, ...) struct name ## Functional : name \
{ \ { \
AU_FOR_EACH_3(AUI_METHOD_IMPL, __VA_ARGS__) \
};
#define AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(tmpl, name, ...) struct name ## Functional : name \
{ \
AU_FOR_EACH_3(AUI_METHOD_FUNCTIONAL_TYPEDEF, __VA_ARGS__) \
inline name ## Functional () {} \ inline name ## Functional () {} \
inline ~name ## Functional () {} \ inline ~name ## Functional () {} \
inline name ## Functional (AU_FOR_EACH_FIRST_3(AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_A, AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_B, __VA_ARGS__)) : \ inline name ## Functional (AU_FOR_EACH_FIRST_3(AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_A, AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_B, __VA_ARGS__)) : \
AU_FOR_EACH_FIRST_3(AUI_METHOD_FUNCTIONAL_ASSIGN_A, AUI_METHOD_FUNCTIONAL_ASSIGN_B, __VA_ARGS__) \ AU_FOR_EACH_FIRST_3(AUI_METHOD_FUNCTIONAL_ASSIGN_A, AUI_METHOD_FUNCTIONAL_ASSIGN_B, __VA_ARGS__) \
{} \ {} \
AU_FOR_EACH_3(tmpl, __VA_ARGS__) \ inline name ## Functional (AU_FOR_EACH_FIRST_3(AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_REF_A, AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_REF_B, __VA_ARGS__)) : \
AU_FOR_EACH_FIRST_3(AUI_METHOD_FUNCTIONAL_ASSIGN_A, AUI_METHOD_FUNCTIONAL_ASSIGN_B, __VA_ARGS__) \
{} \
AU_FOR_EACH_3(tmpl, __VA_ARGS__) \
}; };
#define AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_FWD(name, ...) AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(AUI_METHOD_FUNCTIONAL_FWD, name, __VA_ARGS__) #define AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_FWD(name, ...) AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(AUI_METHOD_FUNCTIONAL_FWD, name, __VA_ARGS__)
#define AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_IMPL(name, ...) AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(AUI_METHOD_FUNCTIONAL_IMPL, name, __VA_ARGS__) #define AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_IMPL(name, ...) AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(AUI_METHOD_FUNCTIONAL_IMPL, name, __VA_ARGS__)
#define AUI_PARAMS(...) AUI_BRACKET_SCOPE(__VA_ARGS__) #define AUI_METHOD(...) AUI_BRACKET_SCOPE(__VA_ARGS__)
#define AUI_METHODS(...) AUI_BRACKET_SCOPE(__VA_ARGS__) #define AUI_PARAMS(...) (__VA_ARGS__)
#define AUI_METHOD(...) AUI_BRACKET_SCOPE(__VA_ARGS__)
/// @deprecated
#define AUI_METHODS(...) AUI_BRACKET_SCOPE(__VA_ARGS__)
#define AUI_INTERFACE_FWD(name, ...) AUI_DEFINE_INTERFACE_START_STRUCT(name, __VA_ARGS__) AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_FWD(name, __VA_ARGS__) #define AUI_INTERFACE_FWD(name, ...) AUI_DEFINE_INTERFACE_START_STRUCT(name, __VA_ARGS__) AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_FWD(name, __VA_ARGS__)
#define AUI_INTERFACE_IMPL(name, ...) AUI_DEFINE_INTERFACE_START_STRUCT(name, __VA_ARGS__) AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_IMPL(name, __VA_ARGS__) #define AUI_INTERFACE_IMPL(name, ...) AUI_DEFINE_INTERFACE_START_STRUCT(name, __VA_ARGS__) AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_IMPL(name, __VA_ARGS__)