GNU Octave  3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
oct-strstrm.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2013 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if !defined (octave_oct_strstrm_h)
24 #define octave_oct_strstrm_h 1
25 
26 #include <string>
27 #include <sstream>
28 
29 #include "oct-stream.h"
30 
31 class
33 {
34 public:
35 
36  octave_base_strstream (std::ios::openmode m = std::ios::out,
39  : octave_base_stream (m, ff) { }
40 
41  // Position a stream at OFFSET relative to ORIGIN.
42 
43  int seek (off_t, int);
44 
45  // Return current stream position.
46 
47  virtual off_t tell (void);
48 
49  // The name of the file.
50 
51  std::string name (void) const { return std::string (); }
52 
53  virtual std::streambuf *rdbuf (void) = 0;
54 
55  virtual bool bad (void) const = 0;
56 
57  virtual void clear (void) = 0;
58 
59 protected:
60 
62 
63 private:
64 
65  // No copying!
66 
68 
70 };
71 
72 class
74 {
75 public:
76 
77  octave_istrstream (const char *data,
78  std::ios::openmode arg_md = std::ios::out,
81  : octave_base_strstream (arg_md, ff), is (data) { }
82 
83  octave_istrstream (const std::string& data,
84  std::ios::openmode arg_md = std::ios::out,
87  : octave_base_strstream (arg_md, ff), is (data.c_str ()) { }
88 
89  static octave_stream
90  create (const char *data, std::ios::openmode arg_md = std::ios::out,
93 
94  static octave_stream
95  create (const std::string& data, std::ios::openmode arg_md = std::ios::out,
98 
99  // Return non-zero if EOF has been reached on this stream.
100 
101  bool eof (void) const { return is.eof (); }
102 
103  std::istream *input_stream (void) { return &is; }
104 
105  std::ostream *output_stream (void) { return 0; }
106 
107  off_t tell (void) { return is.tellg (); }
108 
109  std::streambuf *rdbuf (void) { return is ? is.rdbuf () : 0; }
110 
111  bool bad (void) const { return is.bad (); }
112 
113  void clear (void) { is.clear (); }
114 
115 protected:
116 
118 
119 private:
120 
121  std::istringstream is;
122 
123  // No copying!
124 
126 
128 };
129 
130 class
132 {
133 public:
134 
135  octave_ostrstream (std::ios::openmode arg_md = std::ios::out,
138  : octave_base_strstream (arg_md, ff), os () { }
139 
140  static octave_stream
141  create (std::ios::openmode arg_md = std::ios::out,
144 
145  // Return non-zero if EOF has been reached on this stream.
146 
147  bool eof (void) const { return os.eof (); }
148 
149  std::istream *input_stream (void) { return 0; }
150 
151  std::ostream *output_stream (void) { return &os; }
152 
153  std::string str (void) { return os.str (); }
154 
155  std::streambuf *rdbuf (void) { return os ? os.rdbuf () : 0; }
156 
157  bool bad (void) const { return os.bad (); }
158 
159  void clear (void) { os.clear (); }
160 
161 protected:
162 
164 
165 private:
166 
167  std::ostringstream os;
168 
169  // No copying!
170 
172 
174 };
175 
176 #endif