Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

slot_v2.h

Go to the documentation of this file.
00001 
00002 #ifndef header_slot_v2
00003 #define header_slot_v2
00004 
00005 #include "slot_generic.h"
00006 
00008 // Generic Slot
00009 
00010 template <class PARAM1, class PARAM2>
00011 class CL_Slot_v2 : public CL_Slot_Generic
00012 {
00013 public:
00014         virtual void call(PARAM1 param1, PARAM2 param2)=0;
00015 };
00016 
00018 // Function Slot
00019 
00020 template <class PARAM1, class PARAM2>
00021 class CL_FunctionSlot_v2 : public CL_Slot_v2<PARAM1, PARAM2>
00022 {
00023 public:
00024         typedef void (*Callback)(PARAM1, PARAM2);
00025 
00026         CL_FunctionSlot_v2(Callback callback) : callback(callback) { return; }
00027 
00028         virtual void call(PARAM1 param1, PARAM2 param2) { callback(param1, param2); }
00029 
00030 private:
00031         Callback callback;
00032 };
00033 
00034 template <class PARAM1, class PARAM2>
00035 CL_Slot_v2<PARAM1, PARAM2> *CL_CreateSlot(void (*callback)(PARAM1, PARAM2))
00036 {
00037         return new CL_FunctionSlot_v2<PARAM1, PARAM2>(callback);
00038 }
00039 
00041 // Method / Member function Slot
00042 
00043 template <class CallbackClass, class PARAM1, class PARAM2>
00044 class CL_MethodSlot_v2 : public CL_Slot_v2<PARAM1, PARAM2>
00045 {
00046 public:
00047         typedef void (CallbackClass::*Callback)(PARAM1, PARAM2);
00048 
00049         CL_MethodSlot_v2(CallbackClass *cb_class, Callback callback)
00050         : cb_class(cb_class), callback(callback) { return; }
00051 
00052         virtual void call(PARAM1 param1, PARAM2 param2) { (cb_class->*callback)(param1, param2); }
00053 
00054 private:
00055         CallbackClass *cb_class;
00056         Callback callback;
00057 };
00058 
00059 template <class CallbackClass, class PARAM1, class PARAM2>
00060 CL_Slot_v2<PARAM1, PARAM2> *CL_CreateSlot(
00061         CallbackClass *cb_class,
00062         void (CallbackClass::*callback)(PARAM1, PARAM2))
00063 {
00064         return new CL_MethodSlot_v2<CallbackClass, PARAM1, PARAM2>(cb_class, callback);
00065 }
00066 
00068 // Method / Member function Slot, with user data
00069 
00070 template <class CallbackClass, class UserData, class PARAM1, class PARAM2>
00071 class CL_UserDataMethodSlot_v2 : public CL_Slot_v2<PARAM1, PARAM2>
00072 {
00073 public:
00074         typedef void (CallbackClass::*Callback)(UserData, PARAM1, PARAM2);
00075 
00076         CL_UserDataMethodSlot_v2(CallbackClass *cb_class, Callback callback, UserData user_data)
00077         : cb_class(cb_class), callback(callback), user_data(user_data) { return; }
00078 
00079         virtual void call(PARAM1 param1, PARAM2 param2) { (cb_class->*callback)(user_data, param1, param2); }
00080 
00081 private:
00082         CallbackClass *cb_class;
00083         Callback callback;
00084         UserData user_data;
00085 };
00086 
00087 template <class CallbackClass, class UserData, class PARAM1, class PARAM2>
00088 CL_Slot_v2<PARAM1, PARAM2> *CL_CreateSlot(
00089         CallbackClass *cb_class,
00090         void (CallbackClass::*callback)(UserData, PARAM1, PARAM2),
00091         UserData user_data)
00092 {
00093         return new CL_UserDataMethodSlot_v2<CallbackClass, UserData, PARAM1, PARAM2>(cb_class, callback, user_data);
00094 }
00095 
00096 #endif

Generated at Wed Apr 4 19:54:03 2001 for ClanLib by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001