ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / OpenFOAM / db / regIOobject / regIOobject.H
blob18fbbd35f4fa1614f6885f11f8f9a83092b26924
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::regIOobject
27 Description
28     regIOobject is an abstract class derived from IOobject to handle
29     automatic object registration with the objectRegistry.
31 SourceFiles
32     regIOobject.C
33     regIOobjectRead.C
34     regIOobjectWrite.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef regIOobject_H
39 #define regIOobject_H
41 #include "IOobject.H"
42 #include "typeInfo.H"
43 #include "OSspecific.H"
44 #include "NamedEnum.H"
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 namespace Foam
52 /*---------------------------------------------------------------------------*\
53                          Class regIOobject Declaration
54 \*---------------------------------------------------------------------------*/
56 class regIOobject
58     public IOobject
61 public:
63     //- Types of communications
64     enum fileCheckTypes
65     {
66         timeStamp,
67         timeStampMaster,
68         inotify,
69         inotifyMaster
70     };
72     static const NamedEnum<fileCheckTypes, 4> fileCheckTypesNames;
75 private:
77     // Private data
79         //- Is this object registered with the registry
80         bool registered_;
82         //- Is this object owned by the registry
83         bool ownedByRegistry_;
85         //- Modification watch index
86         mutable label watchIndex_;
88         //- eventNo of last update
89         label eventNo_;
91         //- Istream for reading
92         Istream* isPtr_;
95     // Private Member Functions
97         //- Return Istream
98         Istream& readStream();
100         //- Dissallow assignment
101         void operator=(const regIOobject&);
104 public:
106     // Static data
108         //- Runtime type information
109         TypeName("regIOobject");
111         static int fileModificationSkew;
113         static fileCheckTypes fileModificationChecking;
116     // Constructors
118         //- Construct from IOobject. Optional flag for if IOobject is the
119         //  top level regIOobject.
120         regIOobject(const IOobject&, const bool isTime = false);
122         //- Construct as copy
123         regIOobject(const regIOobject&);
125         //- Construct as copy, and transferring registry registration to copy
126         //  if registerCopy is true
127         regIOobject(const regIOobject&, bool registerCopy);
130     //- Destructor
131     virtual ~regIOobject();
134     // Member functions
136         // Registration
138             //- Add object to registry
139             bool checkIn();
141             //- Remove object from registry
142             bool checkOut();
144             //- Is this object owned by the registry?
145             inline bool ownedByRegistry() const;
147             //- Transfer ownership of this object to its registry
148             inline void store();
150             //- Transfer ownership of the given object pointer to its registry
151             //  and return reference to object.
152             template<class Type>
153             inline static Type& store(Type*);
155             //- Transfer ownership of the given object pointer to its registry
156             //  and return reference to object.
157             template<class Type>
158             inline static Type& store(autoPtr<Type>&);
160             //- Release ownership of this object from its registry
161             inline void release();
164         // Dependency checking
166             //- Event number at last update.
167             inline label eventNo() const;
169             //- Event number at last update.
170             inline label& eventNo();
172             //- Return true if up-to-date with respect to given object
173             //  otherwise false
174             bool upToDate(const regIOobject&) const;
176             //- Return true if up-to-date with respect to given objects
177             //  otherwise false
178             bool upToDate
179             (
180                 const regIOobject&,
181                 const regIOobject&
182             ) const;
184             //- Return true if up-to-date with respect to given objects
185             //  otherwise false
186             bool upToDate
187             (
188                 const regIOobject&,
189                 const regIOobject&,
190                 const regIOobject&
191             ) const;
193             //- Return true if up-to-date with respect to given objects
194             //  otherwise false
195             bool upToDate
196             (
197                 const regIOobject&,
198                 const regIOobject&,
199                 const regIOobject&,
200                 const regIOobject&
201             ) const;
203             //- Set up to date (obviously)
204             void setUpToDate();
207         // Edit
209             //- Rename
210             virtual void rename(const word& newName);
213         // Reading
215             //- Return Istream and check object type against that given
216             Istream& readStream(const word&);
218             //- Close Istream
219             void close();
221             //- Virtual readData function.
222             //  Must be defined in derived types for which
223             //  re-reading is required
224             virtual bool readData(Istream&);
226             //- Read object
227             virtual bool read();
229             //- Return file-monitoring handle
230             inline label watchIndex() const;
232             //- Return file-monitoring handle
233             inline label& watchIndex();
235             //- Return true if the object's file (or files for objectRegistry)
236             //  have been modified. (modified state is cached by Time)
237             virtual bool modified() const;
239             //- Read object if modified (as set by call to modified)
240             virtual bool readIfModified();
243         // Writing
245             //- Pure virtual writaData function.
246             //  Must be defined in derived types
247             virtual bool writeData(Ostream&) const = 0;
249             //- Write using given format, version and compression
250             virtual bool writeObject
251             (
252                 IOstream::streamFormat,
253                 IOstream::versionNumber,
254                 IOstream::compressionType
255             ) const;
257             //- Write using setting from DB
258             virtual bool write() const;
261     // Member operators
263         void operator=(const IOobject&);
267 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
269 } // End namespace Foam
271 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
273 #include "regIOobjectI.H"
275 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
277 #endif
279 // ************************************************************************* //