OFstream.H 4.11 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
6
7
8
    \\  /    A nd           | Copyright (C) 2017-2018 OpenCFD Ltd.
     \\/     M anipulation  |
-------------------------------------------------------------------------------
                            | Copyright (C) 2011-2017 OpenFOAM Foundation
9
10
11
12
-------------------------------------------------------------------------------
License
    This file is part of OpenFOAM.

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

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

Class
    Foam::OFstream

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

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
{

52
53
54
namespace Detail
{

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

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

    // Member Data

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


    // Constructors

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

80

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

84
85
86
87
88
89

    // Protected Member Functions

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

90
91
};

92
} // End namespace Detail
93

94
95

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

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


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


    // Member functions

129
    // Access
130

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


135
    // STL stream
136

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

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


144
    // Print
145

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


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

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

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

} // End namespace Foam

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

#endif

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