OFstream.H 4.1 KB
Newer Older
1
2
3
4
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
OpenFOAM bot's avatar
OpenFOAM bot committed
5
    \\  /    A nd           | www.openfoam.com
OpenFOAM bot's avatar
OpenFOAM bot committed
6
7
     \\/     M anipulation  |
-------------------------------------------------------------------------------
OpenFOAM bot's avatar
OpenFOAM bot committed
8
9
    Copyright (C) 2011-2017 OpenFOAM Foundation
    Copyright (C) 2017-2018 OpenCFD Ltd.
10
11
12
13
-------------------------------------------------------------------------------
License
    This file is part of OpenFOAM.

14
15
16
17
    OpenFOAM is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
18
19
20
21
22
23
24

    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    for more details.

    You should have received a copy of the GNU General Public License
25
    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
26
27
28
29
30

Class
    Foam::OFstream

Description
31
    Output to file stream, using an OSstream
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

SourceFiles
    OFstream.C

\*---------------------------------------------------------------------------*/

#ifndef OFstream_H
#define OFstream_H

#include "OSstream.H"
#include "fileName.H"
#include "className.H"

#include <fstream>
using std::ofstream;

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

namespace Foam
{

53
54
55
namespace Detail
{

56
/*---------------------------------------------------------------------------*\
57
                  Class Detail::OFstreamAllocator Declaration
58
59
\*---------------------------------------------------------------------------*/

60
//- A std::ostream with the ability to handle compressed files
61
62
class OFstreamAllocator
{
63
64
65
66
67
68
protected:

    // Member Data

        //- The allocated stream pointer (ofstream or ogzstream).
        std::ostream* allocatedPtr_;
69
70
71
72
73
74
75
76


    // Constructors

        //- Construct from pathname
        OFstreamAllocator
        (
            const fileName& pathname,
77
78
            IOstream::compressionType compression=IOstream::UNCOMPRESSED,
            const bool append = false
79
80
        );

81

82
83
    //- Destructor
    ~OFstreamAllocator();
84

85
86
87
88
89
90

    // Protected Member Functions

        //- Delete the stream pointer
        void deallocate();

91
92
};

93
} // End namespace Detail
94

95
96

/*---------------------------------------------------------------------------*\
97
                          Class OFstream Declaration
98
99
100
101
\*---------------------------------------------------------------------------*/

class OFstream
:
102
    public Detail::OFstreamAllocator,
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
    public OSstream
{
public:

    // Declare name of the class and its debug switch
    ClassName("OFstream");


    // Constructors

        //- Construct from pathname
        OFstream
        (
            const fileName& pathname,
            streamFormat format=ASCII,
            versionNumber version=currentVersion,
119
120
            compressionType compression=UNCOMPRESSED,
            const bool append = false
121
122
123
        );


124
    //- Destructor
125
    ~OFstream() = default;
126
127
128
129


    // Member functions

130
    // Access
131

132
133
        //- Read/write access to the name of the stream
        using OSstream::name;
134
135


136
    // STL stream
137

138
139
        //- Access to underlying std::ostream
        virtual std::ostream& stdStream();
140

141
142
        //- Const access to underlying std::ostream
        virtual const std::ostream& stdStream() const;
143
144


145
    // Print
146

147
148
        //- Print description of IOstream to Ostream
        void print(Ostream& os) const;
149
150
151
152
153
};


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

154
//- Global predefined null output stream "/dev/null"
155
156
157
158
159
160
161
162
163
164
165
extern OFstream Snull;

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

} // End namespace Foam

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

#endif

// ************************************************************************* //