Report patch name instead of index in debug
[foam-extend-3.2.git] / src / foam / db / regIOobject / regIOobject.C
bloba0e7cb295a91d5c6d75ed9ff70fef3f69c09d6ba
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 "regIOobject.H"
27 #include "objectRegistry.H"
28 #include "polyMesh.H"
30 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
32 defineTypeNameAndDebug(Foam::regIOobject, 0);
34 const Foam::debug::optimisationSwitch
35 Foam::regIOobject::fileModificationSkew
37     "fileModificationSkew",
38     30
42 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
44 // Construct from IOobject
45 Foam::regIOobject::regIOobject(const IOobject& io, const bool isTime)
47     IOobject(io),
48     registered_(false),
49     ownedByRegistry_(false),
50     lastModified_(0),
51     eventNo_                // Do not get event for top level Time database
52     (
53         isTime
54       ? 0
55       : db().getEvent()
56     ),
57     isPtr_(NULL)
59     // Register with objectRegistry if requested
60     if (registerObject())
61     {
62         checkIn();
63     }
67 // Construct as copy
68 Foam::regIOobject::regIOobject(const regIOobject& rio)
70     IOobject(rio),
71     registered_(false),
72     ownedByRegistry_(false),
73     lastModified_(rio.lastModified_),
74     eventNo_(db().getEvent()),
75     isPtr_(NULL)
77     // Do not register copy with objectRegistry
81 // Construct as copy, and transfering objectRegistry registration to copy
82 // if registerCopy is true
83 Foam::regIOobject::regIOobject(const regIOobject& rio, bool registerCopy)
85     IOobject(rio),
86     registered_(false),
87     ownedByRegistry_(false),
88     lastModified_(rio.lastModified_),
89     eventNo_(db().getEvent()),
90     isPtr_(NULL)
92     if (registerCopy && rio.registered_)
93     {
94         const_cast<regIOobject&>(rio).checkOut();
95         checkIn();
96     }
100 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
102 // Delete read stream, checkout from objectRegistry and destroy
103 Foam::regIOobject::~regIOobject()
105     if (objectRegistry::debug)
106     {
107         Info<< "Destroying regIOobject called " << name()
108             << " of type " << type()
109             << " in directory " << path()
110             << endl;
111     }
113     if (isPtr_)
114     {
115         delete isPtr_;
116         isPtr_ = NULL;
117     }
119     // Check out of objectRegistry if not owned by the registry
121     if (!ownedByRegistry_)
122     {
123         checkOut();
124     }
128 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
130 bool Foam::regIOobject::checkIn()
132     if (!registered_)
133     {
134         // multiple checkin of same object is disallowed - this would mess up
135         // any mapping
136         registered_ = db().checkIn(*this);
138         // check-in on defaultRegion is allowed to fail, since subsetted meshes
139         // are created with the same name as their originating mesh
140         if (!registered_ && debug && name() != polyMesh::defaultRegion)
141         {
142             if (debug == 2)
143             {
144                 // for ease of finding where attempted duplicate check-in
145                 // originated
146                 FatalErrorIn("regIOobject::checkIn()")
147                     << "failed to register object " << objectPath()
148                     << " the name already exists in the objectRegistry"
149                     << abort(FatalError);
150             }
151             else
152             {
153                 WarningIn("regIOobject::checkIn()")
154                     << "failed to register object " << objectPath()
155                     << " the name already exists in the objectRegistry"
156                     << endl;
157             }
158         }
159     }
161     return registered_;
165 bool Foam::regIOobject::checkOut()
167     if (registered_)
168     {
169         registered_ = false;
170         return db().checkOut(*this);
171     }
173     return false;
177 bool Foam::regIOobject::upToDate(const word& a) const
179     if (db().lookupObject<regIOobject>(a).eventNo() >= eventNo_)
180     {
181         return false;
182     }
183     else
184     {
185         return true;
186     }
190 bool Foam::regIOobject::upToDate(const word& a, const word& b) const
192     if
193     (
194         db().lookupObject<regIOobject>(a).eventNo() >= eventNo_
195      || db().lookupObject<regIOobject>(b).eventNo() >= eventNo_
196     )
197     {
198         return false;
199     }
200     else
201     {
202         return true;
203     }
207 bool Foam::regIOobject::upToDate
209     const word& a,
210     const word& b,
211     const word& c
212 ) const
214     if
215     (
216         db().lookupObject<regIOobject>(a).eventNo() >= eventNo_
217      || db().lookupObject<regIOobject>(b).eventNo() >= eventNo_
218      || db().lookupObject<regIOobject>(c).eventNo() >= eventNo_
219     )
220     {
221         return false;
222     }
223     else
224     {
225         return true;
226     }
230 bool Foam::regIOobject::upToDate
232     const word& a,
233     const word& b,
234     const word& c,
235     const word& d
236 ) const
238     if
239     (
240         db().lookupObject<regIOobject>(a).eventNo() >= eventNo_
241      || db().lookupObject<regIOobject>(b).eventNo() >= eventNo_
242      || db().lookupObject<regIOobject>(c).eventNo() >= eventNo_
243      || db().lookupObject<regIOobject>(d).eventNo() >= eventNo_
244     )
245     {
246         return false;
247     }
248     else
249     {
250         return true;
251     }
255 //- Flag me as up to date
256 void Foam::regIOobject::setUpToDate()
258     eventNo_ = db().getEvent();
262 // Rename object and re-register with objectRegistry under new name
263 void Foam::regIOobject::rename(const word& newName)
265     // Check out of objectRegistry
266     checkOut();
268     IOobject::rename(newName);
270     if (registerObject())
271     {
272         // Re-register object with objectRegistry
273         checkIn();
274     }
278 // Assign to IOobject
279 void Foam::regIOobject::operator=(const IOobject& io)
281     if (isPtr_)
282     {
283         delete isPtr_;
284         isPtr_ = NULL;
285     }
287     // Check out of objectRegistry
288     checkOut();
290     IOobject::operator=(io);
292     if (registerObject())
293     {
294         // Re-register object with objectRegistry
295         checkIn();
296     }
300 // ************************************************************************* //