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

slot_v1.h

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