74class DispatcherR3:
public TDispatcherAllocatorBase
79 virtual ~DispatcherR3() {}
81 R call(
typename util::CallTraits<P1>::TParam iP1,
typename util::CallTraits<P2>::TParam iP2,
typename util::CallTraits<P3>::TParam iP3)
const
83 return doCall(iP1, iP2, iP3);
85 bool isEquivalent(
const DispatcherR3<R, P1, P2, P3>* iOther)
const
87 return doIsEquivalent(iOther);
92 virtual R doCall(
typename util::CallTraits<P1>::TParam iP1,
typename util::CallTraits<P2>::TParam iP2,
typename util::CallTraits<P3>::TParam iP3)
const = 0;
93 virtual bool doIsEquivalent(
const DispatcherR3<R, P1, P2, P3>* iOther)
const = 0;
95 DispatcherR3(
const DispatcherR3<R, P1, P2, P3>& iOther);
96 DispatcherR3& operator=(
const DispatcherR3<R, P1, P2, P3>& iOther);
112class DispatcherR3Function:
public DispatcherR3<R, P1, P2, P3>
116 typedef FunctionType TFunction;
117 typedef DispatcherR3Function<R, P1, P2, P3, FunctionType, Enable> TSelf;
119 DispatcherR3Function(
typename CallTraits<TFunction>::TParam iFunction):
124 const TFunction& function()
const
131 R doCall(
typename util::CallTraits<P1>::TParam iP1,
typename util::CallTraits<P2>::TParam iP2,
typename util::CallTraits<P3>::TParam iP3)
const override
135 LASS_THROW_EX(EmptyCallback,
"You've tried to call an empty CallbackR0. Can't return a value.");
137 return function_(iP1, iP2, iP3);
140 bool doIsEquivalent(
const DispatcherR3<R, P1, P2, P3>* other)
const override
142 if constexpr (impl::IsEqualityComparable<TFunction>::value)
144 return other &&
typeid( *other ) ==
typeid( TSelf )
145 &&
static_cast<const TSelf*
>(other)->function_ == function_;
168class DispatcherR3Method:
public DispatcherR3<R, P1, P2, P3>
172 typedef DispatcherR3Method<R, P1, P2, P3, ObjectPtr, Method> TSelf;
174 DispatcherR3Method(
typename CallTraits<ObjectPtr>::TParam iObject,
175 typename CallTraits<Method>::TParam iMethod):
183 R doCall(
typename util::CallTraits<P1>::TParam iP1,
typename util::CallTraits<P2>::TParam iP2,
typename util::CallTraits<P3>::TParam iP3)
const override
185 if (!object_ || !method_)
187 LASS_THROW_EX(EmptyCallback,
"You've tried to call an empty CallbackR0. Can't return a value.");
189 return ((*object_).*method_)(iP1, iP2, iP3);
192 bool doIsEquivalent(
const DispatcherR3<R, P1, P2, P3>* iOther)
const override
194 const TSelf* other =
dynamic_cast<const TSelf*
>(iOther);
195 return other && object_ == other->object_ && method_ == other->method_;