Forward compatibility: flex
[foam-extend-3.2.git] / src / foam / db / IOstreams / StringStreams / OStringStream.H
blob611ea0bb5171587a4ba465940600c73799a0d8a7
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::OStringStream
27 Description
28     Output to memory buffer stream.
30 SourceFiles
31     StringStreamsPrint.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef OStringStream_H
36 #define OStringStream_H
38 #include "OSstream.H"
39 #include <sstream>
41 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 namespace Foam
46 /*---------------------------------------------------------------------------*\
47                         Class OStringStream Declaration
48 \*---------------------------------------------------------------------------*/
50 class OStringStream
52     public OSstream
55 public:
57     // Constructors
59         //- Construct and set stream status
60         OStringStream
61         (
62             streamFormat format = ASCII,
63             versionNumber version = currentVersion
64         )
65         :
66             OSstream
67             (
68                *(new std::ostringstream()),
69                 "OStringStream.sinkFile",
70                 format,
71                 version
72             )
73         {}
75         //- Construct as copy
76         OStringStream(const OStringStream& oss)
77         :
78             OSstream
79             (
80                *(
81                     new std::ostringstream
82                     (
83                         dynamic_cast<const std::ostringstream&>
84                         (
85                             oss.stream()
86                         ).str()
87                     )
88                 ),
89                 oss.name(),
90                 oss.format(),
91                 oss.version()
92             )
93         {}
96     // Destructor
98         ~OStringStream()
99         {
100             delete &dynamic_cast<std::ostringstream&>(stream());
101         }
104     // Member functions
106         // Access
108             //- Return the string
109             string str() const
110             {
111                 return dynamic_cast<const std::ostringstream&>(stream()).str();
112             }
115         // Edit
117             //- Clear the OStringStream
118             void rewind()
119             {
120 #               if __GNUC__ < 4 && __GNUC_MINOR__ < 4
121                 stream().rdbuf()->pubsetbuf(" ", 1);
122 #               else
123                 stream().rdbuf()->pubseekpos(0);
124 #               endif
125             }
128         // Print
130             //- Print description to Ostream
131             void print(Ostream&) const;
135 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
137 } // End namespace Foam
139 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
141 #endif
143 // ************************************************************************* //