00001
00002 #ifndef header_slot_v0
00003 #define header_slot_v0
00004
00005 #include "slot_generic.h"
00006
00008
00009
00010 class CL_Slot_v0 : public CL_Slot_Generic
00011 {
00012 public:
00013 virtual void call()=0;
00014 };
00015
00017
00018
00019 class CL_FunctionSlot_v0 : public CL_Slot_v0
00020 {
00021 public:
00022 typedef void (*Callback)();
00023
00024 CL_FunctionSlot_v0(Callback callback) : callback(callback) { return; }
00025
00026 virtual void call() { callback(); }
00027
00028 private:
00029 Callback callback;
00030 };
00031
00032
00033
00034
00035
00036
00038
00039
00040 template <class CallbackClass>
00041 class CL_MethodSlot_v0 : public CL_Slot_v0
00042 {
00043 public:
00044 typedef void (CallbackClass::*Callback)();
00045
00046 CL_MethodSlot_v0(CallbackClass *cb_class, Callback callback)
00047 : cb_class(cb_class), callback(callback) { return; }
00048
00049 virtual void call() { (cb_class->*callback)(); }
00050
00051 private:
00052 CallbackClass *cb_class;
00053 Callback callback;
00054 };
00055
00056 template <class CallbackClass>
00057 CL_Slot_v0 *CL_CreateSlot(CallbackClass *cb_class, void (CallbackClass::*callback)())
00058 {
00059 return new CL_MethodSlot_v0<CallbackClass>(cb_class, callback);
00060 }
00061
00063
00064
00065 template <class CallbackClass, class UserData>
00066 class CL_UserDataMethodSlot_v0 : public CL_Slot_v0
00067 {
00068 public:
00069 typedef void (CallbackClass::*Callback)(UserData);
00070
00071 CL_UserDataMethodSlot_v0(CallbackClass *cb_class, Callback callback, UserData user_data)
00072 : cb_class(cb_class), callback(callback), user_data(user_data) { return; }
00073
00074 virtual void call() { (cb_class->*callback)(user_data); }
00075
00076 private:
00077 CallbackClass *cb_class;
00078 Callback callback;
00079 UserData user_data;
00080 };
00081
00082 template <class CallbackClass, class UserData>
00083 CL_Slot_v0 *CL_CreateSlot(
00084 CallbackClass *cb_class,
00085 void (CallbackClass::*callback)(UserData),
00086 UserData user_data)
00087 {
00088 return new CL_UserDataMethodSlot_v0<CallbackClass, UserData>(cb_class, callback, user_data);
00089 }
00090
00091 #endif