34 #include "../System/exception.h"
38 template <
typename Param1,
typename Param2,
typename Param3,
typename Param4>
class CL_Super_v4;
42 template <
class Param1,
class Param2,
class Param3,
class Param4>
51 template <
class Param1,
class Param2,
class Param3,
class Param4>
55 void 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)
73 throw CL_Exception(
"Called non-invokable super function");
78 std::vector< CL_SharedPtr<CL_SlotCallback> >::reverse_iterator it =
it_super;
81 if (it->get()->valid && it->get()->enabled)
93 std::vector< CL_SharedPtr<CL_SlotCallback> >::reverse_iterator
it_super;
95 std::vector< CL_SharedPtr<CL_SlotCallback> >::reverse_iterator
it_end;
100 template <
class Param1,
class Param2,
class Param3,
class Param4>
106 void invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4,
CL_Super_v4<Param1, Param2, Param3, Param4> &super_func) {
static_func(param1, param2, param3, param4, super_func); }
112 template <
class Param1,
class Param2,
class Param3,
class Param4,
class UserData>
118 void invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4,
CL_Super_v4<Param1, Param2, Param3, Param4> &super_func) {
static_func(param1, param2, param3, param4,
user_data, super_func); }
125 template <
class Param1,
class Param2,
class Param3,
class Param4,
class InstanceClass>
130 : instance(instance), member_func(member_func) {
return; }
131 void invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4,
CL_Super_v4<Param1, Param2, Param3, Param4> &super_func) { (instance->*
member_func)(param1, param2, param3, param4, super_func); }
138 template <
class Param1,
class Param2,
class Param3,
class Param4,
class InstanceClass,
class UserData>
142 CL_VirtualCallback_v4_member_user(InstanceClass *instance,
void (InstanceClass::*
member_func)(Param1, Param2, Param3, Param4, UserData,
CL_Super_v4<Param1, Param2, Param3, Param4> &),
const UserData &
user_data)
143 : instance(instance), member_func(member_func), user_data(user_data) {
return; }
144 void invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4,
CL_Super_v4<Param1, Param2, Param3, Param4> &super_func) { (instance->*
member_func)(param1, param2, param3, param4,
user_data, super_func); }
152 template <
class Param1,
class Param2,
class Param3,
class Param4,
class Functor>
157 : functor(functor) {
return; }
158 void invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4,
CL_Super_v4<Param1, Param2, Param3, Param4> &super_func) {
functor(param1, param2, param3, param4, super_func); }
165 template <
class Param1,
class Param2,
class Param3,
class Param4>
176 : impl(copy.impl) {
return; }
187 CL_SharedPtr<CL_SlotCallback> callback(
189 impl->connected_slots.push_back(callback);
193 template<
class UserData>
197 CL_SharedPtr<CL_SlotCallback> callback(
199 impl->connected_slots.push_back(callback);
203 template<
class InstanceClass>
207 CL_SharedPtr<CL_SlotCallback> callback(
209 impl->connected_slots.push_back(callback);
213 template<
class InstanceClass,
class UserData>
214 CL_Slot connect(InstanceClass *instance,
void (InstanceClass::*
function)(Param1, Param2, Param3, Param4, UserData,
CL_Super_v4<Param1, Param2, Param3, Param4> &),
const UserData &user_data)
217 CL_SharedPtr<CL_SlotCallback> callback(
219 impl->connected_slots.push_back(callback);
223 template<
class Functor>
227 CL_SharedPtr<CL_SlotCallback> callback(
229 impl->connected_slots.push_back(callback);
233 void invoke(Param1 param1, Param2 param2, Param3 param3, Param4 param4)
const
235 std::vector< CL_SharedPtr<CL_SlotCallback> > callbacks = impl->connected_slots;
238 s.
it_end = callbacks.rend();
239 s.
invoke(param1, param2, param3, param4);
250 std::vector< CL_SharedPtr<CL_SlotCallback> >::size_type i, size;
251 size = impl->connected_slots.size();
252 for (i = 0; i < size; i++)
254 if (!impl->connected_slots[i]->valid)
256 impl->connected_slots.erase(impl->connected_slots.begin()+i);
263 CL_SharedPtr<CL_Signal_Impl> impl;