- initial import of revision 374 from cnc
[apt.git] / apt-pkg / contrib / sptr.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description                                                          /*{{{*/
3 // $Id: sptr.h,v 1.1 2002/07/23 17:54:51 niemeyer Exp $
4 /* ######################################################################
5    
6    Trivial non-ref counted 'smart pointer'
7    
8    This is really only good to eliminate 
9      { 
10        delete Foo;
11        return;
12      }
13    
14    Blocks from functions.
15    
16    I think G++ has become good enough that doing this won't have much
17    code size implications.
18    
19    ##################################################################### */
20                                                                         /*}}}*/
21 #ifndef SMART_POINTER_H
22 #define SMART_POINTER_H
23
24 template <class T>
25 class SPtr
26 {
27    public:
28    T *Ptr;
29    
30    inline T *operator ->() {return Ptr;};
31    inline T &operator *() {return *Ptr;};
32    inline operator T *() {return Ptr;};
33    inline operator void *() {return Ptr;};
34    inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;};
35    inline void operator =(T *N) {Ptr = N;};      
36    inline bool operator ==(T *lhs) const {return Ptr == lhs;};
37    inline bool operator !=(T *lhs) const {return Ptr != lhs;};
38    inline T*Get() {return Ptr;};
39       
40    inline SPtr(T *Ptr) : Ptr(Ptr) {};
41    inline SPtr() : Ptr(0) {};
42    inline ~SPtr() {delete Ptr;};
43 };
44
45 template <class T>
46 class SPtrArray
47 {
48    public:
49    T *Ptr;
50    
51    //inline T &operator *() {return *Ptr;};
52    inline operator T *() {return Ptr;};
53    inline operator void *() {return Ptr;};
54    inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;};
55    //inline T &operator [](signed long I) {return Ptr[I];};
56    inline void operator =(T *N) {Ptr = N;};
57    inline bool operator ==(T *lhs) const {return Ptr == lhs;};
58    inline bool operator !=(T *lhs) const {return Ptr != lhs;};
59    inline T *Get() {return Ptr;};
60    
61    inline SPtrArray(T *Ptr) : Ptr(Ptr) {};
62    inline SPtrArray() : Ptr(0) {};
63    inline ~SPtrArray() {delete [] Ptr;};
64 };
65
66 #endif