Forward compatibility: flex
[foam-extend-3.2.git] / src / foam / meshes / MeshObject / MeshObject.C
blobd791e3a5478480f01e516fcdb64bb33a18caa319
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 \*---------------------------------------------------------------------------*/
26 #include "MeshObject.H"
27 #include "objectRegistry.H"
29 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
31 template<class Mesh, class Type>
32 Foam::MeshObject<Mesh, Type>::MeshObject(const Mesh& mesh)
34     regIOobject
35     (
36         IOobject
37         (
38             Type::typeName,
39             mesh.thisDb().instance(),
40             mesh.thisDb()
41         )
42     ),
43     mesh_(mesh)
45     if (Mesh::debug)
46     {
47         InfoIn("MeshObject<Mesh, Type>::MeshObject(const Mesh& mesh)")
48             << "Creating meshObject for type " << Type::typeName << endl;
49     }
53 // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
55 template<class Mesh, class Type>
56 const Type& Foam::MeshObject<Mesh, Type>::New
58     const Mesh& mesh
61     if (!mesh.thisDb().objectRegistry::template foundObject<Type>(Type::typeName))
62     {
63         return store(new Type(mesh));
64     }
65     else
66     {
67         return mesh.thisDb().objectRegistry::template lookupObject<Type>
68         (
69             Type::typeName
70         );
71     }
75 template<class Mesh, class Type>
76 template<class Data1>
77 const Type& Foam::MeshObject<Mesh, Type>::New
79     const Mesh& mesh,
80     const Data1& d
83     if (!mesh.thisDb().objectRegistry::template foundObject<Type>(Type::typeName))
84     {
85         return store(new Type(mesh, d));
86     }
87     else
88     {
89         return mesh.thisDb().objectRegistry::template lookupObject<Type>
90         (
91             Type::typeName
92         );
93     }
97 template<class Mesh, class Type>
98 template<class Data1, class Data2>
99 const Type& Foam::MeshObject<Mesh, Type>::New
101     const Mesh& mesh,
102     const Data1& d1,
103     const Data2& d2
106     if (!mesh.thisDb().objectRegistry::template foundObject<Type>(Type::typeName))
107     {
108         return store(new Type(mesh, d1, d2));
109     }
110     else
111     {
112         return mesh.thisDb().objectRegistry::template lookupObject<Type>
113         (
114             Type::typeName
115         );
116     }
120 template<class Mesh, class Type>
121 template<class Data1, class Data2, class Data3>
122 const Type& Foam::MeshObject<Mesh, Type>::New
124     const Mesh& mesh,
125     const Data1& d1,
126     const Data2& d2,
127     const Data3& d3
130     if (!mesh.thisDb().objectRegistry::template foundObject<Type>(Type::typeName))
131     {
132         return store(new Type(mesh, d1, d2, d3));
133     }
134     else
135     {
136         return mesh.thisDb().objectRegistry::template lookupObject<Type>
137         (
138             Type::typeName
139         );
140     }
144 template<class Mesh, class Type>
145 template<class Data1, class Data2, class Data3, class Data4>
146 const Type& Foam::MeshObject<Mesh, Type>::New
148     const Mesh& mesh,
149     const Data1& d1,
150     const Data2& d2,
151     const Data3& d3,
152     const Data4& d4
155     if (!mesh.thisDb().objectRegistry::template foundObject<Type>(Type::typeName))
156     {
157         return store(new Type(mesh, d1, d2, d3, d4));
158     }
159     else
160     {
161         return mesh.thisDb().objectRegistry::template lookupObject<Type>
162         (
163             Type::typeName
164         );
165     }
169 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * //
171 template<class Mesh, class Type>
172 bool Foam::MeshObject<Mesh, Type>::Delete(const Mesh& mesh)
174     if (mesh.thisDb().objectRegistry::template foundObject<Type>(Type::typeName))
175     {
176         return mesh.thisDb().checkOut
177         (
178             const_cast<Type&>
179             (
180                 mesh.thisDb().objectRegistry::template lookupObject<Type>
181                 (
182                     Type::typeName
183                 )
184             )
185         );
186     }
187     else
188     {
189         return false;
190     }
194 template<class Mesh, class Type>
195 Foam::MeshObject<Mesh, Type>::~MeshObject()
197     release();
201 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
203 template<class Mesh, class Type>
204 bool Foam::MeshObject<Mesh, Type>::deleteObject() const
206     return mesh().thisDb().checkOut
207     (
208         const_cast<MeshObject<Mesh, Type>&>(*this)
209     );
214 // ************************************************************************* //