X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=libs%2Fsignal%2Fisignal.h;h=a8dcdfc9711bf5bf60b0a63c94a185f7cdd683c3;hb=18d60f90d7603cb420150739251cf98519c57406;hp=4fe27471a930ec5ae0c0c3c34f90e77ad4abd07e;hpb=231225d6f97d0b926b2e896e5783cccfbc7c5619;p=xonotic%2Fnetradiant.git diff --git a/libs/signal/isignal.h b/libs/signal/isignal.h index 4fe27471..a8dcdfc9 100644 --- a/libs/signal/isignal.h +++ b/libs/signal/isignal.h @@ -1,5 +1,5 @@ -#if !defined(INCLUDED_ISIGNAL_H) +#if !defined( INCLUDED_ISIGNAL_H ) #define INCLUDED_ISIGNAL_H #include "generic/callback.h" @@ -7,218 +7,160 @@ class SignalHandlerResult { - bool value; +bool value; public: - explicit SignalHandlerResult(bool value) : value(value) - { - } - bool operator==(SignalHandlerResult other) const - { - return value == other.value; - } - bool operator!=(SignalHandlerResult other) const - { - return !operator==(other); - } +explicit SignalHandlerResult( bool value ) : value( value ){ +} +bool operator==( SignalHandlerResult other ) const { + return value == other.value; +} +bool operator!=( SignalHandlerResult other ) const { + return !operator==( other ); +} }; -const SignalHandlerResult SIGNAL_CONTINUE_EMISSION = SignalHandlerResult(false); -const SignalHandlerResult SIGNAL_STOP_EMISSION = SignalHandlerResult(true); +const SignalHandlerResult SIGNAL_CONTINUE_EMISSION = SignalHandlerResult( false ); +const SignalHandlerResult SIGNAL_STOP_EMISSION = SignalHandlerResult( true ); -template -class SignalHandlerCaller1 -{ +template +class SignalHandlerCallerN; + +template +class SignalHandlerCallerN { public: - typedef typename Caller::first_argument_type first_argument_type; - typedef SignalHandlerResult result_type; - static result_type call(first_argument_type a1) - { - Caller::call(a1); - return SIGNAL_CONTINUE_EMISSION; - } + using func = SignalHandlerResult(Ts...); + + static SignalHandlerResult call(Ts... args) { + Caller::call(args...); + return SIGNAL_CONTINUE_EMISSION; + } }; -template -class SignalHandlerCaller2 -{ +template +using SignalHandlerCaller = SignalHandlerCallerN>; + +template +using SignalHandlerCaller1 = SignalHandlerCaller; + +template +using SignalHandlerCaller2 = SignalHandlerCaller; + +template +using SignalHandlerCaller3 = SignalHandlerCaller; + +template +using SignalHandlerCaller4 = SignalHandlerCaller; + +template +class TypeEqual { public: - typedef typename Caller::first_argument_type first_argument_type; - typedef typename Caller::second_argument_type second_argument_type; - typedef SignalHandlerResult result_type; - static result_type call(first_argument_type a1, second_argument_type a2) - { - Caller::call(a1, a2); - return SIGNAL_CONTINUE_EMISSION; - } + using type = False; }; -template -class SignalHandlerCaller3 -{ +template +class TypeEqual { public: - typedef typename Caller::first_argument_type first_argument_type; - typedef typename Caller::second_argument_type second_argument_type; - typedef typename Caller::third_argument_type third_argument_type; - typedef SignalHandlerResult result_type; - static result_type call(first_argument_type a1, second_argument_type a2, third_argument_type a3) - { - Caller::call(a1, a2, a3); - return SIGNAL_CONTINUE_EMISSION; - } + using type = True; }; -template -class SignalHandlerCaller4 -{ +template class Wrapper> +class SignalHandlerN : public CB { public: - typedef typename Caller::first_argument_type first_argument_type; - typedef typename Caller::second_argument_type second_argument_type; - typedef typename Caller::third_argument_type third_argument_type; - typedef typename Caller::fourth_argument_type fourth_argument_type; - typedef SignalHandlerResult result_type; - static result_type call(first_argument_type a1, second_argument_type a2, third_argument_type a3, fourth_argument_type a4) - { - Caller::call(a1, a2, a3, a4); - return SIGNAL_CONTINUE_EMISSION; - } + template + SignalHandlerN(const BindFirstOpaque &caller) + : CB(BindFirstOpaque, + get_result_type + >::type>(caller.getBound())) { + } }; -class SignalHandler : public Callback0 -{ -public: - template - SignalHandler(const BindFirstOpaque& caller) - : Callback0(BindFirstOpaque, - typename Caller::result_type - >::type>(caller.getBound())) - { - } +class SignalHandler : public SignalHandlerN, SignalHandlerCaller1> { + using SignalHandlerN, SignalHandlerCaller1>::SignalHandlerN; }; template -inline SignalHandler makeSignalHandler(const BindFirstOpaque& caller) -{ - return SignalHandler(caller); +inline SignalHandler makeSignalHandler( const BindFirstOpaque& caller ){ + return SignalHandler( caller ); } template -inline SignalHandler makeSignalHandler(const Caller& caller, typename Caller::first_argument_type callee) -{ - return SignalHandler(BindFirstOpaque(callee)); +inline SignalHandler makeSignalHandler(const Caller &caller, get_argument callee) { + return SignalHandler( BindFirstOpaque( callee ) ); } - template -class SignalHandler1 : public Callback1 -{ -public: - template - SignalHandler1(const BindFirstOpaque1& caller) - : Callback1(BindFirstOpaque1, - typename Caller::result_type - >::type>(caller.getBound())) - { - } +class SignalHandler1 : public SignalHandlerN, SignalHandlerCaller2> { + using SignalHandlerN, SignalHandlerCaller2>::SignalHandlerN; }; template -inline SignalHandler1 makeSignalHandler1(const BindFirstOpaque1& caller) -{ - return SignalHandler1(caller); +inline SignalHandler1> makeSignalHandler1(const BindFirstOpaque &caller) { + return SignalHandler1>(caller); } template -inline SignalHandler1 makeSignalHandler1(const Caller& caller, typename Caller::first_argument_type callee) -{ - return SignalHandler1(BindFirstOpaque1(callee)); +inline SignalHandler1> +makeSignalHandler1(const Caller &caller, get_argument callee) { + return SignalHandler1>(BindFirstOpaque(callee)); } - template -class SignalHandler2 : public Callback2 -{ -public: - template - SignalHandler2(const BindFirstOpaque2& caller) - : Callback2(BindFirstOpaque2, - typename Caller::result_type - >::type>(caller.getBound())) - { - } +class SignalHandler2 + : public SignalHandlerN, SignalHandlerCaller3> { + using SignalHandlerN, SignalHandlerCaller3>::SignalHandlerN; }; template inline SignalHandler2< - typename Caller::second_argument_type, - typename Caller::third_argument_type -> makeSignalHandler2(const BindFirstOpaque2& caller) -{ - return SignalHandler2< - typename Caller::second_argument_type, - typename Caller::third_argument_type - >(caller); + get_argument, + get_argument +> makeSignalHandler2(const BindFirstOpaque &caller) { + return SignalHandler2< + get_argument, + get_argument + >( caller ); } template inline SignalHandler2< - typename Caller::second_argument_type, - typename Caller::third_argument_type -> makeSignalHandler2(const Caller& caller, typename Caller::first_argument_type callee) -{ - return SignalHandler2< - typename Caller::second_argument_type, - typename Caller::third_argument_type - >(BindFirstOpaque2(callee)); + get_argument, + get_argument +> makeSignalHandler2(const Caller &caller, get_argument callee) { + return SignalHandler2< + get_argument, + get_argument + >(BindFirstOpaque(callee)); } - template -class SignalHandler3 : public Callback3 -{ -public: - template - SignalHandler3(const BindFirstOpaque3& caller) - : Callback3(BindFirstOpaque3, - typename Caller::result_type - >::type>(caller.getBound())) - { - } +class SignalHandler3 + : public SignalHandlerN, SignalHandlerCaller4> { + using SignalHandlerN, SignalHandlerCaller4>::SignalHandlerN; }; template inline SignalHandler3< - typename Caller::second_argument_type, - typename Caller::third_argument_type, - typename Caller::fourth_argument_type -> makeSignalHandler3(const BindFirstOpaque3& caller) -{ - return SignalHandler3< - typename Caller::second_argument_type, - typename Caller::third_argument_type, - typename Caller::fourth_argument_type - >(caller); + get_argument, + get_argument, + get_argument +> makeSignalHandler3(const BindFirstOpaque &caller) { + return SignalHandler3< + get_argument, + get_argument, + get_argument + >( caller ); } template inline SignalHandler3< - typename Caller::second_argument_type, - typename Caller::third_argument_type, - typename Caller::fourth_argument_type -> makeSignalHandler3(const Caller& caller, typename Caller::first_argument_type callee) -{ - return SignalHandler3< - typename Caller::second_argument_type, - typename Caller::third_argument_type, - typename Caller::fourth_argument_type - >(BindFirstOpaque3(callee)); + get_argument, + get_argument, + get_argument +> makeSignalHandler3(const Caller &caller, get_argument callee) { + return SignalHandler3< + get_argument, + get_argument, + get_argument + >(BindFirstOpaque(callee)); } #endif