Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / OpenFOAM / db / IOstreams / Fstreams / IFstream.H
blob43b74009365171b91328d9a7791c75e3c8771e69
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
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::IFstream
27 Description
28     Input from file stream.
30 SourceFiles
31     IFstream.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef IFstream_H
36 #define IFstream_H
38 #include "ISstream.H"
39 #include "fileName.H"
40 #include "className.H"
42 #include <fstream>
43 using std::ifstream;
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 class IFstream;
52 /*---------------------------------------------------------------------------*\
53                       Class IFstreamAllocator Declaration
54 \*---------------------------------------------------------------------------*/
56 //- A std::istream with ability to handle compressed files
57 class IFstreamAllocator
59     friend class IFstream;
61     // Private data
63         istream* ifPtr_;
64         IOstream::compressionType compression_;
67     // Constructors
69         //- Construct from pathname
70         IFstreamAllocator(const fileName& pathname);
73     //- Destructor
74     ~IFstreamAllocator();
78 /*---------------------------------------------------------------------------*\
79                           Class IFstream Declaration
80 \*---------------------------------------------------------------------------*/
82 class IFstream
84     public IFstreamAllocator,
85     public ISstream
87     // Private data
89         fileName pathname_;
91 public:
93     // Declare name of the class and its debug switch
94     ClassName("IFstream");
97     // Constructors
99         //- Construct from pathname
100         IFstream
101         (
102             const fileName& pathname,
103             streamFormat format=ASCII,
104             versionNumber version=currentVersion
105         );
108     //- Destructor
109     ~IFstream();
112     // Member functions
114         // Access
116             //- Return the name of the stream
117             const fileName& name() const
118             {
119                 return pathname_;
120             }
122             //- Return non-const access to the name of the stream
123             fileName& name()
124             {
125                 return pathname_;
126             }
129         // STL stream
131             //- Access to underlying std::istream
132             virtual istream& stdStream();
134             //- Const access to underlying std::istream
135             virtual const istream& stdStream() const;
138         // Print
140             //- Print description of IOstream to Ostream
141             virtual void print(Ostream&) const;
144     // Member operators
146         //- Return a non-const reference to const IFstream
147         //  Needed for read-constructors where the stream argument is temporary:
148         //  e.g. thing thisThing(IFstream("thingFileName")());
149         IFstream& operator()() const;
153 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
155 } // End namespace Foam
157 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
159 #endif
161 // ************************************************************************* //