34 #include "../System/exception.h"
38 template <
typename RetVal,
typename Param1,
typename Param2,
typename Param3,
typename Param4,
typename Param5>
class CL_Super_5;
42 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class Param5>
46 virtual RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &super_func) = 0;
51 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class Param5>
55 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5)
57 std::vector< CL_SharedPtr<CL_SlotCallback> >::reverse_iterator it =
it_super;
65 if (it->get()->valid && it->get()->enabled)
67 return ((
CL_VirtualCallback_5<RetVal, Param1, Param2, Param3, Param4, Param5> *) it->get())->
invoke(param1, param2, param3, param4, param5, parent);
72 throw CL_Exception(
"Called non-invokable super function");
77 std::vector< CL_SharedPtr<CL_SlotCallback> >::reverse_iterator it =
it_super;
80 if (it->get()->valid && it->get()->enabled)
92 std::vector< CL_SharedPtr<CL_SlotCallback> >::reverse_iterator
it_super;
94 std::vector< CL_SharedPtr<CL_SlotCallback> >::reverse_iterator
it_end;
99 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class Param5>
103 CL_VirtualCallback_5_static(RetVal (*
static_func)(Param1, Param2, Param3, Param4, Param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &))
105 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &super_func) {
return static_func(param1, param2, param3, param4, param5, super_func); }
106 RetVal (*
static_func)(Param1, Param2, Param3, Param4, Param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &);
111 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class Param5,
class UserData>
115 CL_VirtualCallback_5_static_user(RetVal (*
static_func)(Param1, Param2, Param3, Param4, Param5, UserData,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &),
const UserData &
user_data)
117 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &super_func) {
return static_func(param1, param2, param3, param4, param5,
user_data, super_func); }
118 RetVal (*
static_func)(Param1, Param2, Param3, Param4, Param5, UserData,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &);
124 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class Param5,
class InstanceClass>
128 CL_VirtualCallback_5_member(InstanceClass *
instance, RetVal (InstanceClass::*
member_func)(Param1, Param2, Param3, Param4, Param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &))
129 : instance(instance), member_func(member_func) {
return; }
130 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &super_func) {
return (instance->*member_func)(param1, param2, param3, param4, param5, super_func); }
132 RetVal (InstanceClass::*member_func)(Param1, Param2, Param3, Param4, Param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &);
137 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class Param5,
class InstanceClass,
class UserData>
141 CL_VirtualCallback_5_member_user(InstanceClass *instance, RetVal (InstanceClass::*
member_func)(Param1, Param2, Param3, Param4, Param5, UserData,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &),
const UserData &
user_data)
142 : instance(instance), member_func(member_func), user_data(user_data) {
return; }
143 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &super_func) {
return (instance->*member_func)(param1, param2, param3, param4, param5,
user_data, super_func); }
145 RetVal (InstanceClass::*member_func)(Param1, Param2, Param3, Param4, Param5, UserData,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &);
151 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class Param5,
class Functor>
156 : functor(functor) {
return; }
157 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &super_func) {
return functor(param1, param2, param3, param4, param5, super_func); }
164 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class Param5>
175 : impl(copy.impl) {
return; }
183 CL_Slot connect(RetVal (*
function)(Param1, Param2, Param3, Param4, Param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &))
186 CL_SharedPtr<CL_SlotCallback> callback(
188 impl->connected_slots.push_back(callback);
192 template<
class UserData>
193 CL_Slot connect(RetVal (*
function)(Param1, Param2, Param3, Param4, Param5, UserData,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &),
const UserData &user_data)
196 CL_SharedPtr<CL_SlotCallback> callback(
198 impl->connected_slots.push_back(callback);
202 template<
class InstanceClass>
203 CL_Slot connect(InstanceClass *instance, RetVal (InstanceClass::*
function)(Param1, Param2, Param3, Param4, Param5,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &))
206 CL_SharedPtr<CL_SlotCallback> callback(
208 impl->connected_slots.push_back(callback);
212 template<
class InstanceClass,
class UserData>
213 CL_Slot connect(InstanceClass *instance, RetVal (InstanceClass::*
function)(Param1, Param2, Param3, Param4, Param5, UserData,
CL_Super_5<RetVal, Param1, Param2, Param3, Param4, Param5> &),
const UserData &user_data)
216 CL_SharedPtr<CL_SlotCallback> callback(
218 impl->connected_slots.push_back(callback);
222 template<
class Functor>
226 CL_SharedPtr<CL_SlotCallback> callback(
228 impl->connected_slots.push_back(callback);
232 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5)
const
234 std::vector< CL_SharedPtr<CL_SlotCallback> > callbacks = impl->connected_slots;
237 s.
it_end = callbacks.rend();
238 return s.
invoke(param1, param2, param3, param4, param5);
249 std::vector< CL_SharedPtr<CL_SlotCallback> >::size_type i, size;
250 size = impl->connected_slots.size();
251 for (i = 0; i < size; i++)
253 if (!impl->connected_slots[i]->valid)
255 impl->connected_slots.erase(impl->connected_slots.begin()+i);
262 CL_SharedPtr<CL_Signal_Impl> impl;