![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2006 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: callbackList.h,v $ $Revision: 1.4 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #ifndef callbackList_h 00015 #define callbackList_h 00016 00017 #include "vrfutil/vrfutilDefines.h" 00018 #include <list> 00019 #include "vrfutil/vrfutilDefines.h" 00020 00030 template <typename T_CallbackArg> 00031 class DtCallbackList 00032 { 00033 public: 00035 typedef void (*DtCallbackFunctionType)(T_CallbackArg, void*); 00036 00037 DtCallbackList(); 00038 DtCallbackList(const DtCallbackList& orig); 00039 ~DtCallbackList(); 00040 DtCallbackList& operator=(const DtCallbackList& orig); 00041 00045 void addCallback(DtCallbackFunctionType fcn, void* usrData); 00048 void removeCallback(DtCallbackFunctionType fcn, void* usrData); 00049 00052 void invokeCallbacks(T_CallbackArg arg); 00053 00055 void removeAll(); 00056 00057 protected: 00058 typedef std::pair<DtCallbackFunctionType, void*> DtCallbackInfoType; 00059 typedef std::list<DtCallbackInfoType> DtCallbackListType; 00060 00063 bool contains(const DtCallbackListType& callbackList, 00064 DtCallbackFunctionType fcn, void* usrData) const; 00065 00066 protected: 00067 DtCallbackListType myCallbackList; 00070 bool myInvokingCallbacks; 00074 DtCallbackListType myCallbacksToRemove; 00075 }; 00076 00082 class DT_DLL_vrfutil DtNoArgumentCallbackList 00083 { 00084 public: 00086 typedef void (*DtCallbackFunctionType)(void*); 00087 00088 DtNoArgumentCallbackList(); 00089 DtNoArgumentCallbackList(const DtNoArgumentCallbackList& orig); 00090 ~DtNoArgumentCallbackList(); 00091 DtNoArgumentCallbackList& operator=(const DtNoArgumentCallbackList& orig); 00092 00096 void addCallback(DtCallbackFunctionType fcn, void* usrData); 00099 void removeCallback(DtCallbackFunctionType fcn, void* usrData); 00100 00103 void invokeCallbacks(); 00104 00106 void removeAll(); 00107 00108 protected: 00109 typedef std::pair<DtCallbackFunctionType, void*> DtCallbackInfoType; 00110 typedef std::list<DtCallbackInfoType> DtCallbackListType; 00111 00114 bool contains(const DtCallbackListType& callbackList, 00115 DtCallbackFunctionType fcn, void* usrData) const; 00116 00117 protected: 00118 DtCallbackListType myCallbackList; 00121 bool myInvokingCallbacks; 00125 DtCallbackListType myCallbacksToRemove; 00126 }; 00127 00128 #define callbackList_inl_ 00129 #include "vrfutil/callbackList.inl" 00130 #undef callbackList_inl_ 00131 00132 #endif 00133