34 #include "../System/exception.h"
38 template <
typename RetVal,
typename Param1,
typename Param2,
typename Param3,
typename Param4>
class CL_Super_4;
42 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4>
51 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4>
55 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4)
57 std::vector< CL_SharedPtr<CL_SlotCallback> >::reverse_iterator it =
it_super;
65 if (it->get()->valid && it->get()->enabled)
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>
105 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4,
CL_Super_4<RetVal, Param1, Param2, Param3, Param4> &super_func) {
return static_func(param1, param2, param3, param4, super_func); }
111 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class UserData>
115 CL_VirtualCallback_4_static_user(RetVal (*
static_func)(Param1, Param2, Param3, Param4, UserData,
CL_Super_4<RetVal, Param1, Param2, Param3, Param4> &),
const UserData &
user_data)
117 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4,
CL_Super_4<RetVal, Param1, Param2, Param3, Param4> &super_func) {
return static_func(param1, param2, param3, param4,
user_data, super_func); }
124 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class InstanceClass>
129 : instance(instance), member_func(member_func) {
return; }
130 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4,
CL_Super_4<RetVal, Param1, Param2, Param3, Param4> &super_func) {
return (instance->*member_func)(param1, param2, param3, param4, super_func); }
137 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class InstanceClass,
class UserData>
141 CL_VirtualCallback_4_member_user(InstanceClass *instance, RetVal (InstanceClass::*
member_func)(Param1, Param2, Param3, Param4, UserData,
CL_Super_4<RetVal, Param1, Param2, Param3, Param4> &),
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,
CL_Super_4<RetVal, Param1, Param2, Param3, Param4> &super_func) {
return (instance->*member_func)(param1, param2, param3, param4,
user_data, super_func); }
151 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4,
class Functor>
156 : functor(functor) {
return; }
157 RetVal
invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4,
CL_Super_4<RetVal, Param1, Param2, Param3, Param4> &super_func) {
return functor(param1, param2, param3, param4, super_func); }
164 template <
typename RetVal,
class Param1,
class Param2,
class Param3,
class Param4>
175 : impl(copy.impl) {
return; }
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, UserData,
CL_Super_4<RetVal, Param1, Param2, Param3, Param4> &),
const UserData &user_data)
196 CL_SharedPtr<CL_SlotCallback> callback(
198 impl->connected_slots.push_back(callback);
202 template<
class InstanceClass>
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, UserData,
CL_Super_4<RetVal, Param1, Param2, Param3, Param4> &),
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)
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);
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;