apt @VERSION@
|
00001 // -*- mode: cpp; mode: fold -*- 00002 // Description /*{{{*/ 00003 // $Id: sptr.h,v 1.3 2001/03/11 07:22:19 jgg Exp $ 00004 /* ###################################################################### 00005 00006 Trivial non-ref counted 'smart pointer' 00007 00008 This is really only good to eliminate 00009 { 00010 delete Foo; 00011 return; 00012 } 00013 00014 Blocks from functions. 00015 00016 I think G++ has become good enough that doing this won't have much 00017 code size implications. 00018 00019 ##################################################################### */ 00020 /*}}}*/ 00021 #ifndef SMART_POINTER_H 00022 #define SMART_POINTER_H 00023 00024 template <class T> 00025 class SPtr 00026 { 00027 public: 00028 T *Ptr; 00029 00030 inline T *operator ->() {return Ptr;}; 00031 inline T &operator *() {return *Ptr;}; 00032 inline operator T *() {return Ptr;}; 00033 inline operator void *() {return Ptr;}; 00034 inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;}; 00035 inline void operator =(T *N) {Ptr = N;}; 00036 inline bool operator ==(T *lhs) const {return Ptr == lhs;}; 00037 inline bool operator !=(T *lhs) const {return Ptr != lhs;}; 00038 inline T*Get() {return Ptr;}; 00039 00040 inline SPtr(T *Ptr) : Ptr(Ptr) {}; 00041 inline SPtr() : Ptr(0) {}; 00042 inline ~SPtr() {delete Ptr;}; 00043 }; 00044 00045 template <class T> 00046 class SPtrArray 00047 { 00048 public: 00049 T *Ptr; 00050 00051 //inline T &operator *() {return *Ptr;}; 00052 inline operator T *() {return Ptr;}; 00053 inline operator void *() {return Ptr;}; 00054 inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;}; 00055 //inline T &operator [](signed long I) {return Ptr[I];}; 00056 inline void operator =(T *N) {Ptr = N;}; 00057 inline bool operator ==(T *lhs) const {return Ptr == lhs;}; 00058 inline bool operator !=(T *lhs) const {return Ptr != lhs;}; 00059 inline T *Get() {return Ptr;}; 00060 00061 inline SPtrArray(T *Ptr) : Ptr(Ptr) {}; 00062 inline SPtrArray() : Ptr(0) {}; 00063 inline ~SPtrArray() {delete [] Ptr;}; 00064 }; 00065 00066 #endif