Forward compatibility: flex
[foam-extend-3.2.git] / src / foam / memory / autoPtr / autoPtr.H
blob0e83da97caa6a0aed8231711f58525bc0b63a1f7
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::autoPtr
27 Description
28     An auto-pointer similar to the STL auto_ptr but with automatic casting
29     to a reference to the type and with pointer allocation checking on access.
31 SourceFiles
32     autoPtrI.H
34 \*---------------------------------------------------------------------------*/
36 #ifndef autoPtr_H
37 #define autoPtr_H
39 #include <cstddef>
41 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 namespace Foam
46 /*---------------------------------------------------------------------------*\
47                            Class autoPtr Declaration
48 \*---------------------------------------------------------------------------*/
50 template<class T>
51 class autoPtr
53     // Public data
55         //- Pointer to object
56         mutable T* ptr_;
59 public:
61     // Constructors
63         //- Store object pointer
64         inline explicit autoPtr(T* = 0);
66         //- Construct as copy by transfering pointer to this autoPtr and
67         //  setting the arguments pointer to NULL
68         inline autoPtr(const autoPtr<T>&);
71     // Destructor
73         //- Delete object if pointer is not NULL
74         inline ~autoPtr();
77     // Member Functions
79         // Check
81             //- Return true if the autoPtr is empty (ie, no pointer set).
82             inline bool empty() const;
84             //- Return true if the autoPtr valid (ie, the pointer is set).
85             inline bool valid() const;
88         // Edit
90             //- Return object pointer for reuse
91             inline T* ptr();
93             //- Set pointer to that given.
94             //  If object pointer already set issue a FatalError.
95             inline void set(T*);
97             //- If object pointer already set, delete object and set to
98             //  given pointer
99             inline void reset(T* = 0);
101             //- If object pointer points to valid object:
102             //  delete object and set pointer to NULL
103             inline void clear();
106     // Member operators
108         //- Return reference to the object data
109         inline T& operator()();
111         //- Return const reference to the object data
112         inline const T& operator()() const;
114         // inline T& operator*();
115         // inline const T& operator*() const;
117         inline operator const T&() const;
119         //- Return object pointer
120         inline T* operator->();
122         //- Return const object pointer
123         inline const T* operator->() const;
125         //- Take over object pointer from parameter
126         inline void operator=(const autoPtr<T>&);
130 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
132 } // End namespace Foam
134 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
136 #include "autoPtrI.H"
138 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
140 #endif
142 // ************************************************************************* //