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
} // End namespace Detail
91

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

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