OFstream.H 4.08 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
    Copyright (C) 2011-2017 OpenFOAM Foundation
Mark Olesen's avatar
Mark Olesen committed
9
    Copyright (C) 2017-2020 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

SourceFiles
    OFstream.C

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

#ifndef OFstream_H
#define OFstream_H

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

#include <fstream>

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

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

    // Protected Member Functions

        //- Delete the stream pointer
        void deallocate();
89 90
};

91
} // End namespace Detail
92

93 94

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

class OFstream
:
100
    public Detail::OFstreamAllocator,
101 102 103 104
    public OSstream
{
public:

Mark Olesen's avatar
Mark Olesen committed
105
    //- Declare type-name (with debug switch)
106 107 108 109 110 111
    ClassName("OFstream");


    // Constructors

        //- Construct from pathname
Mark Olesen's avatar
Mark Olesen committed
112
        explicit OFstream
113 114 115 116
        (
            const fileName& pathname,
            streamFormat format=ASCII,
            versionNumber version=currentVersion,
117 118
            compressionType compression=UNCOMPRESSED,
            const bool append = false
119 120 121
        );


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


Mark Olesen's avatar
Mark Olesen committed
126
    // Member Functions
127

128
    // Access
129

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


134
    // STL stream
135

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

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


143
    // Print
144

Mark Olesen's avatar
Mark Olesen committed
145
        //- Print stream description to Ostream
146
        void print(Ostream& os) const;
147 148 149 150 151
};


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

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

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

} // End namespace Foam

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

#endif

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