annotate libinterp/corefcn/gzfstream.h @ 30168:4412f57132c4

maint: use "m_" prefix for member variables in classes gzifstream, gzofstream. * gzfstream.cc, gzfstream.h: Use "m_" prefix for member variables in classes gzifstream, gzofstream.
author Rik <rik@octave.org>
date Sun, 12 Sep 2021 20:57:27 -0700
parents d809b99f1280
children a61e1a0f6024
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27928
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
2 //
29363
0a5b15007766 update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 27928
diff changeset
3 // Copyright (C) 2005-2021 The Octave Project Developers
27928
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
24 ////////////////////////////////////////////////////////////////////////
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
25
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
26 /*
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
27
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
28 This file is adapted from the zlib 1.2.2 contrib/iostream3 code,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
29 written by
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
30
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
31 Ludwig Schwardt <schwardt@sun.ac.za>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
32 original version by Kevin Ruland <kevin@rodin.wustl.edu>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
33
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
34 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
35
21213
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21139
diff changeset
36 #if ! defined (octave_zfsstream_h)
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21139
diff changeset
37 #define octave_zfsstream_h 1
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
38
21244
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
39 #include "octave-config.h"
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
40
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21662
diff changeset
41 #if defined (HAVE_ZLIB)
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
42
8950
d865363208d6 include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
43 #include <iosfwd>
d865363208d6 include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
44
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
45 #include "zlib.h"
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
46
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
47 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
48 * @brief Gzipped file stream buffer class.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
49 *
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
50 * This class implements basic_filebuf for gzipped files. It doesn't yet
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
51 * support seeking (allowed by zlib but slow/limited), putback and read/write
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
52 * access * (tricky). Otherwise, it attempts to be a drop-in replacement for
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
53 * the standard file streambuf.
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
54 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
55 class gzfilebuf : public std::streambuf
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
56 {
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
57 public:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
58 // Default constructor.
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
59 gzfilebuf ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
60
22869
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22865
diff changeset
61 // No copying!
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22865
diff changeset
62
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22865
diff changeset
63 gzfilebuf (const gzfilebuf&) = delete;
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22865
diff changeset
64
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22865
diff changeset
65 gzfilebuf& operator = (const gzfilebuf&) = delete;
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22865
diff changeset
66
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
67 // Destructor.
22869
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22865
diff changeset
68 virtual ~gzfilebuf ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
69
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
70 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
71 * @brief Set compression level and strategy on the fly.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
72 * @param comp_level Compression level (see zlib.h for allowed values)
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
73 * @param comp_strategy Compression strategy (see zlib.h for allowed values)
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
74 * @return Z_OK on success, Z_STREAM_ERROR otherwise.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
75 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
76 * Unfortunately, these parameters cannot be modified separately, as the
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
77 * previous zfstream version assumed. Since the strategy is seldom changed,
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
78 * it can default and setcompression(level) then becomes like the old
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
79 * setcompressionlevel(level).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
80 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
81 int
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
82 setcompression (int comp_level,
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
83 int comp_strategy = Z_DEFAULT_STRATEGY);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
84
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
85 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
86 * @brief Check if file is open.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
87 * @return True if file is open.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
88 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
89 bool
30122
a7813409b8c6 maint: use "m_" prefix for member variables in class gzfilebuf.
Rik <rik@octave.org>
parents: 29363
diff changeset
90 is_open () const { return (m_file != nullptr); }
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
91
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
92 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
93 * @brief Open gzipped file.
20713
2469d78a1d8b Consistently use 'filename' rather than 'file name' throughout code base.
Rik <rik@octave.org>
parents: 19861
diff changeset
94 * @param name Filename.
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
95 * @param mode Open mode flags.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
96 * @return @c this on success, NULL on failure.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
97 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
98 gzfilebuf*
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23447
diff changeset
99 open (const char *name,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
100 std::ios_base::openmode mode);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
101
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
102 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
103 * @brief Attach to already open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
104 * @param fd File descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
105 * @param mode Open mode flags.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
106 * @return @c this on success, NULL on failure.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
107 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
108 gzfilebuf*
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
109 attach (int fd,
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
110 std::ios_base::openmode mode);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
111
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
112 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
113 * @brief Close gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
114 * @return @c this on success, NULL on failure.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
115 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
116 gzfilebuf*
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
117 close ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
118
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
119 protected:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
120 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
121 * @brief Convert ios open mode int to mode string used by zlib.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
122 * @return True if valid mode flag combination.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
123 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
124 bool
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
125 open_mode (std::ios_base::openmode mode,
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23447
diff changeset
126 char *c_mode) const;
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
127
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
128 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
129 * @brief Number of characters available in stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
130 * @return Number of characters.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
131 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
132 * This indicates number of characters in get area of stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
133 * These characters can be read without accessing the gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
134 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
135 virtual std::streamsize
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
136 showmanyc ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
137
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
138 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
139 * @brief Fill get area from gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
140 * @return First character in get area on success, EOF on error.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
141 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
142 * This actually reads characters from gzipped file to stream
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
143 * buffer. Always buffered.
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
144 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
145 virtual int_type
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
146 underflow ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
147
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
148 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
149 * @brief Write put area to gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
150 * @param c Extra character to add to buffer contents.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
151 * @return Non-EOF on success, EOF on error.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
152 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
153 * This actually writes characters in stream buffer to
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
154 * gzipped file. With unbuffered output this is done one
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
155 * character at a time.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
156 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
157 virtual int_type
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
158 overflow (int_type c = traits_type::eof ());
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
159
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
160 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
161 * @brief Installs external stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
162 * @param p Pointer to char buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
163 * @param n Size of external buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
164 * @return @c this on success, NULL on failure.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
165 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
166 * Call setbuf(0,0) to enable unbuffered output.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
167 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
168 virtual std::streambuf*
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23447
diff changeset
169 setbuf (char_type *p,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
170 std::streamsize n);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
171
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
172 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
173 * @brief Flush stream buffer to file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
174 * @return 0 on success, -1 on error.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
175 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
176 * This calls underflow(EOF) to do the job.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
177 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
178 virtual int
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
179 sync ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
180
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
181 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
182 * @brief Alters the stream positions.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
183 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
184 * Each derived class provides its own appropriate behavior.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
185 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
186 virtual pos_type
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
187 seekoff (off_type off, std::ios_base::seekdir way,
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
188 std::ios_base::openmode mode =
21662
5b9868c2e212 maint: Octave coding convention cleanups.
Rik <rik@octave.org>
parents: 21244
diff changeset
189 std::ios_base::in | std::ios_base::out);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
190
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
191 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
192 * @brief Alters the stream positions.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
193 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
194 * Each derived class provides its own appropriate behavior.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
195 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
196 virtual pos_type
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
197 seekpos (pos_type sp, std::ios_base::openmode mode =
21662
5b9868c2e212 maint: Octave coding convention cleanups.
Rik <rik@octave.org>
parents: 21244
diff changeset
198 std::ios_base::in | std::ios_base::out);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
199
6777
4775fc1aa728 [project @ 2007-07-18 16:32:51 by dbateman]
dbateman
parents: 5307
diff changeset
200 virtual int_type
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
201 pbackfail (int_type c = traits_type::eof ());
6777
4775fc1aa728 [project @ 2007-07-18 16:32:51 by dbateman]
dbateman
parents: 5307
diff changeset
202
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
203 //
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
204 // Some future enhancements
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
205 //
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
206 // virtual int_type uflow();
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
207 // virtual int_type pbackfail(int_type c = traits_type::eof());
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
208
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
209 private:
12122
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
210
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
211 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
212 * @brief Allocate internal buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
213 *
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
214 * This function is safe to call multiple times. It will ensure
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
215 * that a proper internal buffer exists if it is required. If the
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
216 * buffer already exists or is external, the buffer pointers will be
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
217 * reset to their original state.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
218 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
219 void
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
220 enable_buffer ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
221
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
222 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
223 * @brief Destroy internal buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
224 *
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
225 * This function is safe to call multiple times. It will ensure
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
226 * that the internal buffer is deallocated if it exists. In any
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
227 * case, it will also reset the buffer pointers.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
228 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
229 void
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
230 disable_buffer ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
231
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
232 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
233 * Underlying file pointer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
234 */
30122
a7813409b8c6 maint: use "m_" prefix for member variables in class gzfilebuf.
Rik <rik@octave.org>
parents: 29363
diff changeset
235 gzFile m_file;
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
236
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
237 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
238 * Mode in which file was opened.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
239 */
30122
a7813409b8c6 maint: use "m_" prefix for member variables in class gzfilebuf.
Rik <rik@octave.org>
parents: 29363
diff changeset
240 std::ios_base::openmode m_io_mode;
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
241
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
242 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
243 * @brief True if this object owns file descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
244 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
245 * This makes the class responsible for closing the file
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
246 * upon destruction.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
247 */
30122
a7813409b8c6 maint: use "m_" prefix for member variables in class gzfilebuf.
Rik <rik@octave.org>
parents: 29363
diff changeset
248 bool m_own_fd;
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
249
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
250 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
251 * @brief Stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
252 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
253 * For simplicity this remains allocated on the free store for the
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
254 * entire life span of the gzfilebuf object, unless replaced by setbuf.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
255 */
30122
a7813409b8c6 maint: use "m_" prefix for member variables in class gzfilebuf.
Rik <rik@octave.org>
parents: 29363
diff changeset
256 char_type *m_buffer;
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
257
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
258 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
259 * @brief Stream buffer size.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
260 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
261 * Defaults to system default buffer size (typically 8192 bytes).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
262 * Modified by setbuf.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
263 */
30122
a7813409b8c6 maint: use "m_" prefix for member variables in class gzfilebuf.
Rik <rik@octave.org>
parents: 29363
diff changeset
264 std::streamsize m_buffer_size;
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
265
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
266 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
267 * @brief True if this object owns stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
268 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
269 * This makes the class responsible for deleting the buffer
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
270 * upon destruction.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
271 */
30122
a7813409b8c6 maint: use "m_" prefix for member variables in class gzfilebuf.
Rik <rik@octave.org>
parents: 29363
diff changeset
272 bool m_own_buffer;
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
273 };
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
274
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
275 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
276 * @brief Gzipped file input stream class.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
277 *
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
278 * This class implements ifstream for gzipped files. Seeking and putback
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
279 * is not supported yet.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
280 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
281 class gzifstream : public std::istream
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
282 {
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
283 public:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
284 // Default constructor
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
285 gzifstream ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
286
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
287 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
288 * @brief Construct stream on gzipped file to be opened.
20713
2469d78a1d8b Consistently use 'filename' rather than 'file name' throughout code base.
Rik <rik@octave.org>
parents: 19861
diff changeset
289 * @param name Filename.
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
290 * @param mode Open mode flags (forced to contain ios::in).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
291 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
292 explicit
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23447
diff changeset
293 gzifstream (const char *name,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
294 std::ios_base::openmode mode = std::ios_base::in);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
295
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
296 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
297 * @brief Construct stream on already open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
298 * @param fd File descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
299 * @param mode Open mode flags (forced to contain ios::in).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
300 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
301 explicit
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
302 gzifstream (int fd,
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
303 std::ios_base::openmode mode = std::ios_base::in);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
304
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
305 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
306 * Obtain underlying stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
307 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
308 gzfilebuf*
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
309 rdbuf () const
30168
4412f57132c4 maint: use "m_" prefix for member variables in classes gzifstream, gzofstream.
Rik <rik@octave.org>
parents: 30123
diff changeset
310 { return const_cast<gzfilebuf *>(&m_sb); }
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
311
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
312 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
313 * @brief Check if file is open.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
314 * @return True if file is open.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
315 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
316 bool
30168
4412f57132c4 maint: use "m_" prefix for member variables in classes gzifstream, gzofstream.
Rik <rik@octave.org>
parents: 30123
diff changeset
317 is_open () { return m_sb.is_open (); }
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
318
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
319 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
320 * @brief Open gzipped file.
20713
2469d78a1d8b Consistently use 'filename' rather than 'file name' throughout code base.
Rik <rik@octave.org>
parents: 19861
diff changeset
321 * @param name Filename.
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
322 * @param mode Open mode flags (forced to contain ios::in).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
323 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
324 * Stream will be in state good() if file opens successfully;
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
325 * otherwise in state fail(). This differs from the behavior of
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
326 * ifstream, which never sets the state to good() and therefore
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
327 * won't allow you to reuse the stream for a second file unless
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
328 * you manually clear() the state. The choice is a matter of
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
329 * convenience.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
330 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
331 void
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23447
diff changeset
332 open (const char *name,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
333 std::ios_base::openmode mode = std::ios_base::in);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
334
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
335 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
336 * @brief Attach to already open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
337 * @param fd File descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
338 * @param mode Open mode flags (forced to contain ios::in).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
339 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
340 * Stream will be in state good() if attach succeeded; otherwise
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
341 * in state fail().
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
342 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
343 void
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
344 attach (int fd,
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
345 std::ios_base::openmode mode = std::ios_base::in);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
346
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
347 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
348 * @brief Close gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
349 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
350 * Stream will be in state fail() if close failed.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
351 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
352 void
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
353 close ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
354
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
355 private:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
356 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
357 * Underlying stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
358 */
30168
4412f57132c4 maint: use "m_" prefix for member variables in classes gzifstream, gzofstream.
Rik <rik@octave.org>
parents: 30123
diff changeset
359 gzfilebuf m_sb;
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
360 };
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
361
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
362 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
363 * @brief Gzipped file output stream class.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
364 *
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
365 * This class implements ofstream for gzipped files. Seeking and putback
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
366 * is not supported yet.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
367 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
368 class gzofstream : public std::ostream
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
369 {
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
370 public:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
371 // Default constructor
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
372 gzofstream ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
373
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
374 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
375 * @brief Construct stream on gzipped file to be opened.
20713
2469d78a1d8b Consistently use 'filename' rather than 'file name' throughout code base.
Rik <rik@octave.org>
parents: 19861
diff changeset
376 * @param name Filename.
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
377 * @param mode Open mode flags (forced to contain ios::out).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
378 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
379 explicit
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23447
diff changeset
380 gzofstream (const char *name,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
381 std::ios_base::openmode mode = std::ios_base::out);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
382
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
383 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
384 * @brief Construct stream on already open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
385 * @param fd File descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
386 * @param mode Open mode flags (forced to contain ios::out).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
387 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
388 explicit
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
389 gzofstream (int fd,
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
390 std::ios_base::openmode mode = std::ios_base::out);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
391
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
392 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
393 * Obtain underlying stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
394 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
395 gzfilebuf*
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
396 rdbuf () const
30168
4412f57132c4 maint: use "m_" prefix for member variables in classes gzifstream, gzofstream.
Rik <rik@octave.org>
parents: 30123
diff changeset
397 { return const_cast<gzfilebuf *>(&m_sb); }
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
398
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
399 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
400 * @brief Check if file is open.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
401 * @return True if file is open.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
402 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
403 bool
30168
4412f57132c4 maint: use "m_" prefix for member variables in classes gzifstream, gzofstream.
Rik <rik@octave.org>
parents: 30123
diff changeset
404 is_open () { return m_sb.is_open (); }
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
405
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
406 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
407 * @brief Open gzipped file.
20713
2469d78a1d8b Consistently use 'filename' rather than 'file name' throughout code base.
Rik <rik@octave.org>
parents: 19861
diff changeset
408 * @param name Filename.
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
409 * @param mode Open mode flags (forced to contain ios::out).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
410 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
411 * Stream will be in state good() if file opens successfully;
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
412 * otherwise in state fail(). This differs from the behavior of
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
413 * ofstream, which never sets the state to good() and therefore
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
414 * won't allow you to reuse the stream for a second file unless
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
415 * you manually clear() the state. The choice is a matter of
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
416 * convenience.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
417 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
418 void
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23447
diff changeset
419 open (const char *name,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
420 std::ios_base::openmode mode = std::ios_base::out);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
421
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
422 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
423 * @brief Attach to already open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
424 * @param fd File descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
425 * @param mode Open mode flags (forced to contain ios::out).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
426 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
427 * Stream will be in state good() if attach succeeded; otherwise
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
428 * in state fail().
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
429 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
430 void
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
431 attach (int fd,
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
432 std::ios_base::openmode mode = std::ios_base::out);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
433
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
434 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
435 * @brief Close gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
436 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
437 * Stream will be in state fail() if close failed.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
438 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
439 void
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
440 close ();
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
441
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
442 private:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
443 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
444 * Underlying stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
445 */
30168
4412f57132c4 maint: use "m_" prefix for member variables in classes gzifstream, gzofstream.
Rik <rik@octave.org>
parents: 30123
diff changeset
446 gzfilebuf m_sb;
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
447 };
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
448
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
449 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
450 * @brief Gzipped file output stream manipulator class.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
451 *
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
452 * This class defines a two-argument manipulator for gzofstream. It is used
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
453 * as base for the setcompression(int,int) manipulator.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
454 */
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 20946
diff changeset
455 template <typename T1, typename T2>
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
456 class gzomanip2
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
457 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
458 public:
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
459 // Allows insertor to peek at internals
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
460 template <typename Ta, typename Tb>
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
461 friend gzofstream&
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
462 operator<<(gzofstream&,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
463 const gzomanip2<Ta,Tb>&);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
464
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
465 // Constructor
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
466 gzomanip2 (gzofstream& (*f)(gzofstream&, T1, T2),
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
467 T1 v1,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
468 T2 v2);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
469 private:
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
470 // Underlying manipulator function
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
471 gzofstream&
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
472 (*func)(gzofstream&, T1, T2);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
473
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
474 // Arguments for manipulator function
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
475 T1 val1;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
476 T2 val2;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
477 };
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
478
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
479 // Manipulator function thunks through to stream buffer
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
480 inline gzofstream&
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
481 setcompression (gzofstream& gzs, int l, int s = Z_DEFAULT_STRATEGY)
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
482 {
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
483 (gzs.rdbuf ())->setcompression (l, s);
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
484 return gzs;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
485 }
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
486
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
487 // Manipulator constructor stores arguments
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 20946
diff changeset
488 template <typename T1, typename T2>
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
489 inline
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
490 gzomanip2<T1,T2>::gzomanip2 (gzofstream &(*f)(gzofstream &, T1, T2),
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
491 T1 v1,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
492 T2 v2)
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
493 : func(f), val1(v1), val2(v2)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
494 { }
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
495
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
496 // Insertor applies underlying manipulator function to stream
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 20946
diff changeset
497 template <typename T1, typename T2>
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
498 inline gzofstream&
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
499 operator<<(gzofstream& s, const gzomanip2<T1,T2>& m)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
500 { return (*m.func)(s, m.val1, m.val2); }
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
501
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
502 // Insert this onto stream to simplify setting of compression level
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
503 inline gzomanip2<int,int>
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
504 setcompression (int l, int s = Z_DEFAULT_STRATEGY)
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
505 { return gzomanip2<int,int>(&setcompression, l, s); }
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
506
20945
9d9270e2f98f eliminate comments after preprocessor conditionals
John W. Eaton <jwe@octave.org>
parents: 20713
diff changeset
507 #endif
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
508
20945
9d9270e2f98f eliminate comments after preprocessor conditionals
John W. Eaton <jwe@octave.org>
parents: 20713
diff changeset
509 #endif