Mercurial > octave-nkf
annotate libinterp/corefcn/oct-stdstrm.h @ 20614:10ec79b47808
use new string_value method to handle value extraction errors
* __voronoi__.cc, chol.cc, colamd.cc, fftw.cc:
Use new string_value method.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 08 Oct 2015 18:15:56 -0400 |
parents | 4197fc428c7d |
children |
rev | line source |
---|---|
2081 | 1 /* |
2 | |
19731
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
18851
diff
changeset
|
3 Copyright (C) 1996-2015 John W. Eaton |
2081 | 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 | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
2081 | 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 | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
2081 | 20 |
21 */ | |
22 | |
17822
ebb3ef964372
maint: Use common #define syntax "octave_filename_h" in h_files.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
23 #if !defined (octave_oct_stdstrm_h) |
ebb3ef964372
maint: Use common #define syntax "octave_filename_h" in h_files.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
24 #define octave_oct_stdstrm_h 1 |
2081 | 25 |
26 #include "oct-stream.h" | |
3630 | 27 #include "c-file-ptr-stream.h" |
2081 | 28 |
5325 | 29 template <typename BUF_T, typename STREAM_T, typename FILE_T> |
2081 | 30 class |
5325 | 31 octave_tstdiostream : public octave_base_stream |
2081 | 32 { |
33 public: | |
34 | |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
35 octave_tstdiostream (const std::string& n, FILE_T f = 0, int fid = 0, |
10313 | 36 std::ios::openmode m = std::ios::in|std::ios::out, |
37 oct_mach_info::float_format ff | |
38 = oct_mach_info::native_float_format (), | |
39 typename BUF_T::close_fcn cf = BUF_T::file_close) | |
5325 | 40 : octave_base_stream (m, ff), nm (n), md (m), |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
41 s (f ? new STREAM_T (f, cf) : 0), fnum (fid) |
5325 | 42 { } |
4327 | 43 |
2081 | 44 // Position a stream at OFFSET relative to ORIGIN. |
45 | |
16011
8122286c69a9
initial large file support for 32-bit systems
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
46 int seek (off_t offset, int origin) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
47 { return s ? s->seek (offset, origin) : -1; } |
2081 | 48 |
49 // Return current stream position. | |
50 | |
16011
8122286c69a9
initial large file support for 32-bit systems
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
51 off_t tell (void) { return s ? s->tell () : -1; } |
2081 | 52 |
18851
9ac2357f19bc
doc: Replace "non-zero" with "nonzero" to match existing usage.
Rik <rik@octave.org>
parents:
17822
diff
changeset
|
53 // Return nonzero if EOF has been reached on this stream. |
4327 | 54 |
55 bool eof (void) const { return s ? s->eof () : true; } | |
56 | |
2081 | 57 // The name of the file. |
58 | |
3523 | 59 std::string name (void) const { return nm; } |
2081 | 60 |
4327 | 61 std::istream *input_stream (void) { return (md & std::ios::in) ? s : 0; } |
2081 | 62 |
4361 | 63 std::ostream *output_stream (void) { return (md & std::ios::out) ? s : 0; } |
4326 | 64 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
65 // FIXME: should not have to cast away const here. |
5325 | 66 BUF_T *rdbuf (void) const |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
67 { return s ? (const_cast<STREAM_T *> (s))->rdbuf () : 0; } |
4326 | 68 |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
69 int file_number (void) const { return fnum; } |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
70 |
4326 | 71 bool bad (void) const { return s ? s->bad () : true; } |
72 | |
4327 | 73 void clear (void) { if (s) s->clear (); } |
4326 | 74 |
10288
5e972e2deffe
avoid some possible gnulib #defines
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
75 void do_close (void) { if (s) s->stream_close (); } |
4326 | 76 |
77 protected: | |
78 | |
4327 | 79 std::string nm; |
80 | |
81 std::ios::openmode md; | |
82 | |
5325 | 83 STREAM_T *s; |
4326 | 84 |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
85 // The file number associated with this file. |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
86 int fnum; |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
87 |
5325 | 88 ~octave_tstdiostream (void) { delete s; } |
4326 | 89 |
90 private: | |
91 | |
92 // No copying! | |
93 | |
5325 | 94 octave_tstdiostream (const octave_tstdiostream&); |
95 | |
96 octave_tstdiostream& operator = (const octave_tstdiostream&); | |
97 }; | |
4326 | 98 |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
99 class |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
100 octave_stdiostream |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
101 : public octave_tstdiostream<c_file_ptr_buf, io_c_file_ptr_stream, FILE *> |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
102 { |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
103 public: |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
104 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
105 octave_stdiostream (const std::string& n, FILE *f = 0, |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
106 std::ios::openmode m = std::ios::in|std::ios::out, |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
107 oct_mach_info::float_format ff |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
108 = oct_mach_info::native_float_format (), |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
109 c_file_ptr_buf::close_fcn cf = c_file_ptr_buf::file_close) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
110 : octave_tstdiostream<c_file_ptr_buf, io_c_file_ptr_stream, FILE *> |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
111 (n, f, f ? fileno (f) : -1, m, ff, cf) { } |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
112 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
113 static octave_stream |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
114 create (const std::string& n, FILE *f = 0, |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
115 std::ios::openmode m = std::ios::in|std::ios::out, |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
116 oct_mach_info::float_format ff |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
117 = oct_mach_info::native_float_format (), |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
118 c_file_ptr_buf::close_fcn cf = c_file_ptr_buf::file_close) |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
119 { |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
120 return octave_stream (new octave_stdiostream (n, f, m, ff, cf)); |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
121 } |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
122 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
123 protected: |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
124 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
125 ~octave_stdiostream (void) { } |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
126 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
127 private: |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
128 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
129 // No copying! |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
130 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
131 octave_stdiostream (const octave_stdiostream&); |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
132 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
133 octave_stdiostream& operator = (const octave_stdiostream&); |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
134 }; |
5325 | 135 |
136 #ifdef HAVE_ZLIB | |
137 | |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
138 class |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
139 octave_zstdiostream |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
140 : public octave_tstdiostream<c_zfile_ptr_buf, io_c_zfile_ptr_stream, gzFile> |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
141 { |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
142 public: |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
143 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
144 octave_zstdiostream (const std::string& n, gzFile f = 0, int fid = 0, |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
145 std::ios::openmode m = std::ios::in|std::ios::out, |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
146 oct_mach_info::float_format ff |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
147 = oct_mach_info::native_float_format (), |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
148 c_zfile_ptr_buf::close_fcn cf |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
149 = c_zfile_ptr_buf::file_close) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
150 : octave_tstdiostream<c_zfile_ptr_buf, io_c_zfile_ptr_stream, gzFile> |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
151 (n, f, fid, m, ff, cf) { } |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
152 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
153 static octave_stream |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
154 create (const std::string& n, gzFile f = 0, int fid = 0, |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
155 std::ios::openmode m = std::ios::in|std::ios::out, |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
156 oct_mach_info::float_format ff |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
157 = oct_mach_info::native_float_format (), |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
158 c_zfile_ptr_buf::close_fcn cf = c_zfile_ptr_buf::file_close) |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
159 { |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
160 return octave_stream (new octave_zstdiostream (n, f, fid, m, ff, cf)); |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
161 } |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
162 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
163 protected: |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
164 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
165 ~octave_zstdiostream (void) { } |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
166 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
167 private: |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
168 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
169 // No copying! |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
170 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
171 octave_zstdiostream (const octave_zstdiostream&); |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
172 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
173 octave_zstdiostream& operator = (const octave_zstdiostream&); |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
174 }; |
5325 | 175 |
176 #endif | |
4326 | 177 |
2081 | 178 #endif |