Report patch name instead of index in debug
[foam-extend-3.2.git] / src / foam / db / IOobjects / IOReferencer / IOReferencer.H
blob832163e2d4c950549b700dd8194f8809d95178f1
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::IOReferencer
27 Description
28     A wrapper class that allows you to retrieve non-IOobjects through the
29     object registry.  Performs no input or output.  Internally stores pointer
30     to object it manages and takes care of its scoping.
32     Syntax:
33     @verbatim
34         // Your non-IOobject, e.g. Type = scalar
35         Type myObject;
37         // Register it to the object registry
38         IOReferencer<scalar> myIOobject
39         (
40             IOobject
41             (
42                 "lookupName",
43                 instance,           // can be anything
44                 [local,]            // (optional) can be anything
45                 registry,           // can be anything
46                 IOobject::NO_READ,  // *must* be NO_READ
47                 IOobject::NO_WRITE  // *must* be NO_WRITE
48             ),
49             myObject
50         );
52         // In another part of your solver, e.g. in a custom boundary condition:
53         const Type& myConstObject = registry.lookupObject<IOReferencer<Type> >
54         (
55             "lookupName"
56         )();
58         // Now you have a local const reference to your non-IOobject
59     @endverbatim
61 SourceFiles
62     IOReferencer.C
64 Author
65     David L. F. Gaden
67 \*---------------------------------------------------------------------------*/
69 #ifndef IOReferencer_H
70 #define IOReferencer_H
72 #include "regIOobject.H"
74 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
76 namespace Foam
80 /*---------------------------------------------------------------------------*\
81                            Class IOReferencer Declaration
82 \*---------------------------------------------------------------------------*/
84 template<class Type>
85 class IOReferencer
87     public regIOobject
89     // Private data
91         //- Pointer to object
92         Type* typePtr_;
95 public:
97     // Constructors
99         //- Construct from IOobject - pointer set to null
100         IOReferencer
101         (
102             const IOobject& io
103         );
105         //- Construct from IOobject - pointer initialized
106         IOReferencer
107         (
108             const IOobject& io,
109             Type* ptr
110         );
113     // Destructor
115         virtual ~IOReferencer();
118     // Member functions
120         //- A "do nothing" writeData function, required by regIOobject
121         virtual bool writeData(Ostream&) const;
123         //- Return const reference to object
124         const Type& operator()() const;
126         //- Return access to object
127         Type& operator()();
129         //- Set the pointer
130         void set(Type* ptr);
134 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
136 } // End namespace Foam
138 #ifdef NoRepository
139 #   include "IOReferencer.C"
140 #endif
142 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
144 #endif
146 // ************************************************************************* //