VR-Link API Documentation for HLA 1.3
declSmartPtr.h
Go to the documentation of this file.
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 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)