Salome HOME
This commit was generated by cvs2git to create branch 'IMPORT'.
[modules/med.git] / src / MEDMEM / MEDMEM_PointerOf.hxx
1 # if ! defined( __PointerOf_HXX__ )
2 # define __PointerOf_HXX__
3
4 #include <cstdlib>
5 #include "utilities.h"
6
7 /*!
8         The template class PointerOf embedding a standard pointer (_pointer) is in charge of
9         managing a the pointed memory.
10 */
11
12 template <typename T> class PointerOf
13 {
14 protected :
15         T* _pointer ;
16         bool _done ;
17 public :
18         PointerOf() ; // 
19         PointerOf( const int &size ) ;
20         PointerOf( const T *pointer ) ;
21         ~PointerOf() ;
22   operator T*() ;
23         operator const T*() const ;
24
25   //operator T*() const ;
26
27         void set( const int &size ) ;
28         void set( const T *pointer ) ;
29         PointerOf<T>& operator=( const PointerOf<T> &pointer ) ;
30 } ;
31
32 template <typename T> PointerOf<T>& PointerOf<T>::operator=( const PointerOf<T> &pointer )
33 {
34         BEGIN_OF("PointerOf<T>::operator=( const PointerOf<T> &pointer )") ;
35         if ( &pointer != this )
36         {
37                 this->set( pointer._pointer ) ;
38         }
39         END_OF("PointerOf<T>::operator=( const PointerOf<T> &pointer )") ;
40         return *this ;
41 }
42
43 template <typename T> PointerOf<T>::PointerOf() : _pointer(0), _done(false)
44 {
45 }
46
47 template <typename T> PointerOf<T>::PointerOf( const int &size ) : _pointer( new T[ size ]), _done(true)
48 {
49 }
50
51 template <typename T> PointerOf<T>::PointerOf( const T* pointer ) : _pointer( (T*)pointer ), _done(false)
52 {
53 }
54
55 template <typename T> PointerOf<T>::~PointerOf()
56 {
57         if ( _pointer )
58         {
59                 if( _done )
60                 {
61                         MESSAGE("PointerOf<T>::~PointerOf() --> deleting _pointer") ;
62                         delete [] _pointer ;
63                         _done = false ;
64                 }
65                 else
66                 {
67                         MESSAGE("_pointer is only nullified") ;
68                 }
69                 _pointer = 0 ;
70         }
71 }
72
73 template <typename T> PointerOf<T>::operator T*()
74 {
75         return _pointer ;
76 }
77
78 template <typename T> PointerOf<T>::operator const T*() const
79 {
80         return _pointer ;
81 }
82
83 //  template <typename T> PointerOf<T>::operator T*() const
84 //  {
85 //      return _pointer ;
86 //  }
87
88 template <typename T> void PointerOf<T>::set( const int &size )
89 {
90         ASSERT(size>0) ;
91         if ( _pointer && _done )
92         {
93                 delete [] _pointer ; 
94                 _pointer=0 ;
95         }
96         _pointer = new T[ size ] ;
97         _done = true ;
98         return ;
99 }
100 template <typename T> void PointerOf<T>::set( const T *pointer )
101 {
102         MESSAGE( "PointerOf<T>::set( const T *pointer )" ) ;
103         SCRUTE(pointer) ;
104         SCRUTE(_done) ;
105         if ( _pointer && _done )
106         {
107                 MESSAGE("PointerOf<T>::set --> deleting _pointer") ;
108                 delete [] _pointer ; 
109                 _pointer=0 ;
110                 _done=false ;
111         }
112         _pointer=(T*)pointer ;
113         _done=false ;
114         MESSAGE( "PointerOf<T>::set( const T *pointer )" ) ;
115         return ;
116 }
117
118 # endif         /* # if ! defined( __PointerOf_HXX__ ) */