apt @VERSION@

sptr.h

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