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

slot_v0.h

Go to the documentation of this file.
00001 
00002 #ifndef header_slot_v0
00003 #define header_slot_v0
00004 
00005 #include "slot_generic.h"
00006 
00008 // Generic Slot
00009 
00010 class CL_Slot_v0 : public CL_Slot_Generic
00011 {
00012 public:
00013         virtual void call()=0;
00014 };
00015 
00017 // Function Slot
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 /*CL_Slot_v0 *CL_CreateSlot(void (*callback)())
00033 {
00034         return new CL_FunctionSlot_v0(callback);
00035 }*/
00036 
00038 // Method / Member function Slot
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 // Method / Member function Slot, with user data
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

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