Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / foam / db / IOstreams / StringStreams / IStringStream.H
blob85ea011818ead11eaafc03b038969e36aa81a759
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::IStringStream
27 Description
28     Input from memory buffer stream.
30 SourceFiles
31     StringStreamsPrint.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef IStringStream_H
36 #define IStringStream_H
38 #include "ISstream.H"
39 #include <sstream>
41 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 namespace Foam
46 /*---------------------------------------------------------------------------*\
47                            Class IStringStream Declaration
48 \*---------------------------------------------------------------------------*/
50 class IStringStream
52     public ISstream
55 public:
57     // Constructors
59         //- Construct from string
60         IStringStream
61         (
62             const string& buffer,
63             streamFormat format = ASCII,
64             versionNumber version = currentVersion
65         )
66         :
67             ISstream
68             (
69                 *(new std::istringstream(buffer)),
70                 "IStringStream.sourceFile",
71                 format,
72                 version
73             )
74         {}
77         //- Construct from char*
78         IStringStream
79         (
80             const char* buffer,
81             streamFormat format = ASCII,
82             versionNumber version = currentVersion
83         )
84         :
85             ISstream
86             (
87                 *(new std::istringstream(buffer)),
88                 "IStringStream.sourceFile",
89                 format,
90                 version
91             )
92         {}
95     // Destructor
97         ~IStringStream()
98         {
99             delete &dynamic_cast<std::istringstream&>(stream());
100         }
103     // Member functions
105         // Access
107             //- Return the string
108             string str() const
109             {
110                 return dynamic_cast<const std::istringstream&>(stream()).str();
111             }
114         // Print
116             //- Print description to Ostream
117             void print(Ostream&) const;
120     // Member operators
122         //- Return a non-const reference to const Istream
123         //  Needed for read-constructors where the stream argument is temporary:
124         //  e.g. thing thisThing(IFstream("thingFileName")());
125         Istream& operator()() const
126         {
127             return const_cast<IStringStream&>(*this);
128         }
132 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
134 } // End namespace Foam
136 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
138 #endif
140 // ************************************************************************* //