![]() |
VR-Link API Documentation for HLA 1.3
|
00001 /********************************************************************* 00002 ** Copyright (c) 1997 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: declSmartPtr.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 *********************************************************************/ 00008 00011 00020 // 00025 00026 #include "vlObserver.h" 00027 00028 #define DtDECLARE_DEFINE_SMART_PTR(ClassName) \ 00029 class DT_DLL_VLUTIL ClassName##Ptr : public DtObserver \ 00030 { \ 00031 public: \ 00032 \ 00033 ClassName##Ptr(ClassName* pointedAt); \ 00034 \ 00035 virtual ~ClassName##Ptr(); \ 00036 \ 00037 ClassName##Ptr(const ClassName##Ptr& orig); \ 00038 \ 00039 ClassName##Ptr& operator=(const ClassName##Ptr& orig); \ 00040 \ 00041 bool stillGood() const; \ 00042 \ 00043 bool operator!() const; \ 00044 \ 00045 ClassName* operator->() const; \ 00046 \ 00047 operator ClassName*() const; \ 00048 \ 00049 protected: \ 00050 \ 00051 virtual bool startObserving(DtObservee* toObserve); \ 00052 \ 00053 virtual bool stopObserving(DtObservee* observed); \ 00054 \ 00055 }; \ 00056 \ 00057 ClassName##Ptr::ClassName##Ptr(ClassName* pointedAt) : \ 00058 DtObserver() \ 00059 { \ 00060 internalStartObserving(pointedAt); \ 00061 } \ 00062 \ 00063 ClassName##Ptr::~ClassName##Ptr() \ 00064 { \ 00065 } \ 00066 \ 00067 ClassName##Ptr::ClassName##Ptr(const ClassName##Ptr& orig) : \ 00068 DtObserver(orig) \ 00069 { \ 00070 } \ 00071 \ 00072 ClassName##Ptr& ClassName##Ptr::operator=(const ClassName##Ptr& orig) \ 00073 { \ 00074 if (this == &orig) \ 00075 { \ 00076 return *this; \ 00077 } \ 00078 \ 00079 DtObserver::operator=(orig); \ 00080 \ 00081 return *this; \ 00082 } \ 00083 \ 00084 bool ClassName##Ptr::startObserving(DtObservee* toObserve) \ 00085 { \ 00086 return DtObserver::startObserving(toObserve); \ 00087 } \ 00088 \ 00089 bool ClassName##Ptr::stopObserving(DtObservee* toObserve) \ 00090 { \ 00091 return DtObserver::stopObserving(toObserve); \ 00092 } \ 00093 \ 00094 bool ClassName##Ptr::stillGood() const \ 00095 { \ 00096 return operator->() ? true : false; \ 00097 } \ 00098 \ 00099 bool ClassName##Ptr::operator!() const \ 00100 { \ 00101 return !operator->() ? true : false; \ 00102 } \ 00103 \ 00104 ClassName* ClassName##Ptr::operator->() const \ 00105 { \ 00106 DtListItem* item = myObjectsAmObserving.first(); \ 00107 if (!item) \ 00108 { \ 00109 return NULL; \ 00110 } \ 00111 return (ClassName*)item->data(); \ 00112 } \ 00113 \ 00114 ClassName##Ptr::operator ClassName*() const \ 00115 { \ 00116 return operator->(); \ 00117 } \ 00118