Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "regIOobject.H"
00027 #include <OpenFOAM/Time.H>
00028 #include <OpenFOAM/polyMesh.H>
00029
00030
00031
00032 defineTypeNameAndDebug(Foam::regIOobject, 0);
00033
00034 int Foam::regIOobject::fileModificationSkew
00035 (
00036 Foam::debug::optimisationSwitch("fileModificationSkew", 30)
00037 );
00038
00039
00040
00041
00042
00043 Foam::regIOobject::regIOobject(const IOobject& io, const bool isTime)
00044 :
00045 IOobject(io),
00046 registered_(false),
00047 ownedByRegistry_(false),
00048 lastModified_(0),
00049 eventNo_
00050 (
00051 isTime
00052 ? 0
00053 : db().getEvent()
00054 ),
00055 isPtr_(NULL)
00056 {
00057
00058 if (registerObject())
00059 {
00060 checkIn();
00061 }
00062 }
00063
00064
00065
00066 Foam::regIOobject::regIOobject(const regIOobject& rio)
00067 :
00068 IOobject(rio),
00069 registered_(false),
00070 ownedByRegistry_(false),
00071 lastModified_(rio.lastModified_),
00072 eventNo_(db().getEvent()),
00073 isPtr_(NULL)
00074 {
00075
00076 }
00077
00078
00079
00080
00081 Foam::regIOobject::regIOobject(const regIOobject& rio, bool registerCopy)
00082 :
00083 IOobject(rio),
00084 registered_(false),
00085 ownedByRegistry_(false),
00086 lastModified_(rio.lastModified_),
00087 eventNo_(db().getEvent()),
00088 isPtr_(NULL)
00089 {
00090 if (registerCopy && rio.registered_)
00091 {
00092 const_cast<regIOobject&>(rio).checkOut();
00093 checkIn();
00094 }
00095 }
00096
00097
00098
00099
00100
00101 Foam::regIOobject::~regIOobject()
00102 {
00103 if (objectRegistry::debug)
00104 {
00105 Info<< "Destroying regIOobject called " << name()
00106 << " of type " << type()
00107 << " in directory " << path()
00108 << endl;
00109 }
00110
00111 if (isPtr_)
00112 {
00113 delete isPtr_;
00114 isPtr_ = NULL;
00115 }
00116
00117
00118
00119 if (!ownedByRegistry_)
00120 {
00121 checkOut();
00122 }
00123 }
00124
00125
00126
00127
00128 bool Foam::regIOobject::checkIn()
00129 {
00130 if (!registered_)
00131 {
00132
00133
00134 registered_ = db().checkIn(*this);
00135
00136
00137
00138 if (!registered_ && debug && name() != polyMesh::defaultRegion)
00139 {
00140 if (debug == 2)
00141 {
00142
00143
00144 FatalErrorIn("regIOobject::checkIn()")
00145 << "failed to register object " << objectPath()
00146 << " the name already exists in the objectRegistry"
00147 << abort(FatalError);
00148 }
00149 else
00150 {
00151 WarningIn("regIOobject::checkIn()")
00152 << "failed to register object " << objectPath()
00153 << " the name already exists in the objectRegistry"
00154 << endl;
00155 }
00156 }
00157 }
00158
00159 return registered_;
00160 }
00161
00162
00163 bool Foam::regIOobject::checkOut()
00164 {
00165 if (registered_)
00166 {
00167 registered_ = false;
00168 return db().checkOut(*this);
00169 }
00170
00171 return false;
00172 }
00173
00174
00175 bool Foam::regIOobject::upToDate(const word& a) const
00176 {
00177 if (db().lookupObject<regIOobject>(a).eventNo() >= eventNo_)
00178 {
00179 return false;
00180 }
00181 else
00182 {
00183 return true;
00184 }
00185 }
00186
00187
00188 bool Foam::regIOobject::upToDate(const word& a, const word& b) const
00189 {
00190 if
00191 (
00192 db().lookupObject<regIOobject>(a).eventNo() >= eventNo_
00193 || db().lookupObject<regIOobject>(b).eventNo() >= eventNo_
00194 )
00195 {
00196 return false;
00197 }
00198 else
00199 {
00200 return true;
00201 }
00202 }
00203
00204
00205 bool Foam::regIOobject::upToDate
00206 (
00207 const word& a,
00208 const word& b,
00209 const word& c
00210 ) const
00211 {
00212 if
00213 (
00214 db().lookupObject<regIOobject>(a).eventNo() >= eventNo_
00215 || db().lookupObject<regIOobject>(b).eventNo() >= eventNo_
00216 || db().lookupObject<regIOobject>(c).eventNo() >= eventNo_
00217 )
00218 {
00219 return false;
00220 }
00221 else
00222 {
00223 return true;
00224 }
00225 }
00226
00227
00228 bool Foam::regIOobject::upToDate
00229 (
00230 const word& a,
00231 const word& b,
00232 const word& c,
00233 const word& d
00234 ) const
00235 {
00236 if
00237 (
00238 db().lookupObject<regIOobject>(a).eventNo() >= eventNo_
00239 || db().lookupObject<regIOobject>(b).eventNo() >= eventNo_
00240 || db().lookupObject<regIOobject>(c).eventNo() >= eventNo_
00241 || db().lookupObject<regIOobject>(d).eventNo() >= eventNo_
00242 )
00243 {
00244 return false;
00245 }
00246 else
00247 {
00248 return true;
00249 }
00250 }
00251
00252
00253
00254 void Foam::regIOobject::setUpToDate()
00255 {
00256 eventNo_ = db().getEvent();
00257 }
00258
00259
00260
00261 void Foam::regIOobject::rename(const word& newName)
00262 {
00263
00264 checkOut();
00265
00266 IOobject::rename(newName);
00267
00268 if (registerObject())
00269 {
00270
00271 checkIn();
00272 }
00273 }
00274
00275
00276
00277 void Foam::regIOobject::operator=(const IOobject& io)
00278 {
00279 if (isPtr_)
00280 {
00281 delete isPtr_;
00282 isPtr_ = NULL;
00283 }
00284
00285
00286 checkOut();
00287
00288 IOobject::operator=(io);
00289
00290 if (registerObject())
00291 {
00292
00293 checkIn();
00294 }
00295 }
00296
00297
00298