Mercurial > octave-nkf
annotate src/oct-stdstrm.h @ 11079:dc4f8dfe5325
oct-stdstrm.h: avoid problems if fileno is a macro
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 05 Oct 2010 14:43:15 -0400 |
parents | 594adb99a25e |
children | fd0a3ac60b0e |
rev | line source |
---|---|
2081 | 1 /* |
2 | |
7017 | 3 Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, |
4 2006, 2007 John W. Eaton | |
2081 | 5 |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
2081 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
2081 | 21 |
22 */ | |
23 | |
24 #if !defined (octave_octave_stdiostream_h) | |
25 #define octave_octave_stdiostream_h 1 | |
26 | |
27 #include "oct-stream.h" | |
3630 | 28 #include "c-file-ptr-stream.h" |
2081 | 29 |
5325 | 30 template <typename BUF_T, typename STREAM_T, typename FILE_T> |
2081 | 31 class |
5325 | 32 octave_tstdiostream : public octave_base_stream |
2081 | 33 { |
34 public: | |
35 | |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
36 octave_tstdiostream (const std::string& n, FILE_T f = 0, int fid = 0, |
10313 | 37 std::ios::openmode m = std::ios::in|std::ios::out, |
38 oct_mach_info::float_format ff | |
39 = oct_mach_info::native_float_format (), | |
40 typename BUF_T::close_fcn cf = BUF_T::file_close) | |
5325 | 41 : 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
|
42 s (f ? new STREAM_T (f, cf) : 0), fnum (fid) |
5325 | 43 { } |
4327 | 44 |
2081 | 45 // Position a stream at OFFSET relative to ORIGIN. |
46 | |
5325 | 47 int seek (long offset, int origin) |
48 { return s ? s->seek (offset, origin) : -1; } | |
2081 | 49 |
50 // Return current stream position. | |
51 | |
5325 | 52 long tell (void) { return s ? s->tell () : -1; } |
2081 | 53 |
4327 | 54 // Return non-zero if EOF has been reached on this stream. |
55 | |
56 bool eof (void) const { return s ? s->eof () : true; } | |
57 | |
2081 | 58 // The name of the file. |
59 | |
3523 | 60 std::string name (void) const { return nm; } |
2081 | 61 |
4327 | 62 std::istream *input_stream (void) { return (md & std::ios::in) ? s : 0; } |
2081 | 63 |
4361 | 64 std::ostream *output_stream (void) { return (md & std::ios::out) ? s : 0; } |
4326 | 65 |
5775 | 66 // FIXME -- should not have to cast away const here. |
5325 | 67 BUF_T *rdbuf (void) const |
68 { return s ? (const_cast<STREAM_T *> (s))->rdbuf () : 0; } | |
4326 | 69 |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
70 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
|
71 |
4326 | 72 bool bad (void) const { return s ? s->bad () : true; } |
73 | |
4327 | 74 void clear (void) { if (s) s->clear (); } |
4326 | 75 |
10288
5e972e2deffe
avoid some possible gnulib #defines
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
76 void do_close (void) { if (s) s->stream_close (); } |
4326 | 77 |
78 protected: | |
79 | |
4327 | 80 std::string nm; |
81 | |
82 std::ios::openmode md; | |
83 | |
5325 | 84 STREAM_T *s; |
4326 | 85 |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
86 // 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
|
87 int fnum; |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
88 |
5325 | 89 ~octave_tstdiostream (void) { delete s; } |
4326 | 90 |
91 private: | |
92 | |
93 // No copying! | |
94 | |
5325 | 95 octave_tstdiostream (const octave_tstdiostream&); |
96 | |
97 octave_tstdiostream& operator = (const octave_tstdiostream&); | |
98 }; | |
4326 | 99 |
11004
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
100 class |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
101 octave_stdiostream |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
102 : 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
|
103 { |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
104 public: |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
105 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
106 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
|
107 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
|
108 oct_mach_info::float_format ff |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
109 = oct_mach_info::native_float_format (), |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
110 c_file_ptr_buf::close_fcn cf = c_file_ptr_buf::file_close) |
11079
dc4f8dfe5325
oct-stdstrm.h: avoid problems if fileno is a macro
John W. Eaton <jwe@octave.org>
parents:
11004
diff
changeset
|
111 : octave_tstdiostream<c_file_ptr_buf, io_c_file_ptr_stream, FILE *> (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 (), |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
148 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
|
149 : octave_tstdiostream<c_zfile_ptr_buf, io_c_zfile_ptr_stream, gzFile> (n, f, fid, m, ff, cf) { } |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
150 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
151 static octave_stream |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
152 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
|
153 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
|
154 oct_mach_info::float_format ff |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
155 = oct_mach_info::native_float_format (), |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
156 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
|
157 { |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
158 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
|
159 } |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
160 |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
161 protected: |
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 ~octave_zstdiostream (void) { } |
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 private: |
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 // No copying! |
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 octave_zstdiostream (const octave_zstdiostream&); |
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& operator = (const octave_zstdiostream&); |
594adb99a25e
cache file id in octave_tstdiostream class
John W. Eaton <jwe@octave.org>
parents:
10313
diff
changeset
|
172 }; |
5325 | 173 |
174 #endif | |
4326 | 175 |
2081 | 176 #endif |