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

11
12
13
14
    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.
15
16
17
18
19
20
21

    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
22
    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
23
24
25
26
27

Class
    Foam::OFstream

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

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
{

50
51
52
namespace Detail
{

53
/*---------------------------------------------------------------------------*\
54
                  Class Detail::OFstreamAllocator Declaration
55
56
\*---------------------------------------------------------------------------*/

57
//- A std::ostream with the ability to handle compressed files
58
59
class OFstreamAllocator
{
60
61
62
63
64
65
protected:

    // Member Data

        //- The allocated stream pointer (ofstream or ogzstream).
        std::ostream* allocatedPtr_;
66
67
68
69
70
71
72
73


    // Constructors

        //- Construct from pathname
        OFstreamAllocator
        (
            const fileName& pathname,
74
75
            IOstream::compressionType compression=IOstream::UNCOMPRESSED,
            const bool append = false
76
77
        );

78

79
80
    //- Destructor
    ~OFstreamAllocator();
81

82
83
84
85
86
87

    // Protected Member Functions

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

88
89
};

90
91
} // end namespace Detail

92
93

/*---------------------------------------------------------------------------*\
94
                          Class OFstream Declaration
95
96
97
98
\*---------------------------------------------------------------------------*/

class OFstream
:
99
    public Detail::OFstreamAllocator,
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
    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,
116
117
            compressionType compression=UNCOMPRESSED,
            const bool append = false
118
119
120
        );


121
    //- Destructor
122
    ~OFstream() = default;
123
124
125
126


    // Member functions

127
    // Access
128

129
130
        //- Read/write access to the name of the stream
        using OSstream::name;
131
132


133
    // STL stream
134

135
136
        //- Access to underlying std::ostream
        virtual std::ostream& stdStream();
137

138
139
        //- Const access to underlying std::ostream
        virtual const std::ostream& stdStream() const;
140
141


142
    // Print
143

144
145
        //- Print description of IOstream to Ostream
        void print(Ostream& os) const;
146
147
148
149
150
};


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

151
//- Global predefined null output stream "/dev/null"
152
153
154
155
156
157
158
159
160
161
162
extern OFstream Snull;

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

} // End namespace Foam

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

#endif

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