annotate src/zfstream.h @ 6869:f9c893831e68

[project @ 2007-09-06 16:38:44 by dbateman]
author dbateman
date Thu, 06 Sep 2007 16:38:44 +0000
parents 4775fc1aa728
children 93c65f2a5668
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
1 /*
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
2
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
3 Copyright (C) 2005 Ludwig Schwardt, Kevin Ruland
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
4
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
5 This file is part of Octave.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
6
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
10 later version.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
11
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
15 for more details.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
16
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
5307
4c8a2e4e0717 [project @ 2005-04-26 19:24:27 by jwe]
jwe
parents: 5269
diff changeset
19 Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
4c8a2e4e0717 [project @ 2005-04-26 19:24:27 by jwe]
jwe
parents: 5269
diff changeset
20 02110-1301, USA.
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
21
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
22 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
23
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
24 /*
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 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
27 written by
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
28
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
29 Ludwig Schwardt <schwardt@sun.ac.za>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
30 original version by Kevin Ruland <kevin@rodin.wustl.edu>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
31
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
32 */
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 #ifndef ZFSTREAM_H
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
35 #define ZFSTREAM_H
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
36
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
37 #ifdef HAVE_CONFIG_H
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
38 #include <config.h>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
39 #endif
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
40
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
41 #ifdef HAVE_ZLIB
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
42
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
43 #include <istream> // not iostream, since we don't need cin/cout
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
44 #include <ostream>
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
49 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
50 * @brief Gzipped file stream buffer class.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
51 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
52 * This class implements basic_filebuf for gzipped files. It doesn't yet support
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
53 * seeking (allowed by zlib but slow/limited), putback and read/write access
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
54 * (tricky). Otherwise, it attempts to be a drop-in replacement for the standard
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
55 * file 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 class gzfilebuf : public std::streambuf
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
58 {
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
59 public:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
60 // Default constructor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
61 gzfilebuf();
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
62
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
63 // Destructor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
64 virtual
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
65 ~gzfilebuf();
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
66
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
67 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
68 * @brief Set compression level and strategy on the fly.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
69 * @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
70 * @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
71 * @return Z_OK on success, Z_STREAM_ERROR otherwise.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
72 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
73 * Unfortunately, these parameters cannot be modified separately, as the
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
74 * previous zfstream version assumed. Since the strategy is seldom changed,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
75 * 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
76 * setcompressionlevel(level).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
77 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
78 int
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
79 setcompression(int comp_level,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
80 int comp_strategy = Z_DEFAULT_STRATEGY);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
81
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
82 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
83 * @brief Check if file is open.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
84 * @return True if file is open.
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 bool
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
87 is_open() const { return (file != NULL); }
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 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
90 * @brief Open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
91 * @param name File name.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
92 * @param mode Open mode flags.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
93 * @return @c this on success, NULL on failure.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
94 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
95 gzfilebuf*
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
96 open(const char* name,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
97 std::ios_base::openmode mode);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
98
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
99 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
100 * @brief Attach to already open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
101 * @param fd File descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
102 * @param mode Open mode flags.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
103 * @return @c this on success, NULL on failure.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
104 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
105 gzfilebuf*
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
106 attach(int fd,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
107 std::ios_base::openmode mode);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
108
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
109 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
110 * @brief Close gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
111 * @return @c this on success, NULL on failure.
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 gzfilebuf*
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
114 close();
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 protected:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
117 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
118 * @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
119 * @return True if valid mode flag combination.
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 bool
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
122 open_mode(std::ios_base::openmode mode,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
123 char* c_mode) const;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
124
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
125 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
126 * @brief Number of characters available in stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
127 * @return Number of characters.
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 * 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
130 * These characters can be read without accessing the gzipped file.
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 virtual std::streamsize
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
133 showmanyc();
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 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
136 * @brief Fill get area from gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
137 * @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
138 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
139 * This actually reads characters from gzipped file to stream
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
140 * buffer. Always buffered.
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 virtual int_type
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
143 underflow();
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 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
146 * @brief Write put area to gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
147 * @param c Extra character to add to buffer contents.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
148 * @return Non-EOF on success, EOF on error.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
149 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
150 * This actually writes characters in stream buffer to
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
151 * gzipped file. With unbuffered output this is done one
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
152 * character at a time.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
153 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
154 virtual int_type
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
155 overflow(int_type c = traits_type::eof());
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 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
158 * @brief Installs external stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
159 * @param p Pointer to char buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
160 * @param n Size of external buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
161 * @return @c this on success, NULL on failure.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
162 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
163 * Call setbuf(0,0) to enable unbuffered output.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
164 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
165 virtual std::streambuf*
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
166 setbuf(char_type* p,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
167 std::streamsize n);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
168
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
169 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
170 * @brief Flush stream buffer to file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
171 * @return 0 on success, -1 on error.
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 * This calls underflow(EOF) to do the job.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
174 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
175 virtual int
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
176 sync();
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 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
179 * @brief Alters the stream positions.
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 * Each derived class provides its own appropriate behavior.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
182 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
183 virtual pos_type
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
184 seekoff(off_type off, std::ios_base::seekdir way,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
185 std::ios_base::openmode mode =
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
186 std::ios_base::in|std::ios_base::out);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
187
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
188 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
189 * @brief Alters the stream positions.
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 * Each derived class provides its own appropriate behavior.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
192 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
193 virtual pos_type
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
194 seekpos(pos_type sp, std::ios_base::openmode mode =
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
195 std::ios_base::in|std::ios_base::out);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
196
6777
4775fc1aa728 [project @ 2007-07-18 16:32:51 by dbateman]
dbateman
parents: 5307
diff changeset
197 virtual int_type
4775fc1aa728 [project @ 2007-07-18 16:32:51 by dbateman]
dbateman
parents: 5307
diff changeset
198 pbackfail (int_type c = traits_type::eof());
4775fc1aa728 [project @ 2007-07-18 16:32:51 by dbateman]
dbateman
parents: 5307
diff changeset
199
5269
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
200 //
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
201 // Some future enhancements
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
202 //
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
203 // virtual int_type uflow();
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
204 // virtual int_type pbackfail(int_type c = traits_type::eof());
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 private:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
207 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
208 * @brief Allocate internal buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
209 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
210 * This function is safe to call multiple times. It will ensure
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
211 * that a proper internal buffer exists if it is required. If the
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
212 * 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
213 * reset to their original state.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
214 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
215 void
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
216 enable_buffer();
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
217
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 * @brief Destroy internal buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
220 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
221 * This function is safe to call multiple times. It will ensure
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
222 * that the internal buffer is deallocated if it exists. In any
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
223 * case, it will also reset the buffer pointers.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
224 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
225 void
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
226 disable_buffer();
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
227
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 * Underlying file pointer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
230 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
231 gzFile file;
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 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
234 * Mode in which file was opened.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
235 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
236 std::ios_base::openmode io_mode;
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 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
239 * @brief True if this object owns file descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
240 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
241 * This makes the class responsible for closing the file
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
242 * upon destruction.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
243 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
244 bool own_fd;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
245
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
246 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
247 * @brief Stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
248 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
249 * 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
250 * 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
251 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
252 char_type* buffer;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
253
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
254 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
255 * @brief Stream buffer size.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
256 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
257 * Defaults to system default buffer size (typically 8192 bytes).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
258 * Modified by setbuf.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
259 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
260 std::streamsize buffer_size;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
261
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
262 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
263 * @brief True if this object owns stream buffer.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
264 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
265 * This makes the class responsible for deleting the buffer
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
266 * upon destruction.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
267 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
268 bool own_buffer;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
269 };
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
270
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
271 /*****************************************************************************/
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
272
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 * @brief Gzipped file input stream class.
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 * This class implements ifstream for gzipped files. Seeking and putback
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
277 * is not supported yet.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
278 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
279 class gzifstream : public std::istream
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 public:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
282 // Default constructor
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
283 gzifstream();
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
284
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
285 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
286 * @brief Construct stream on gzipped file to be opened.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
287 * @param name File name.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
288 * @param mode Open mode flags (forced to contain ios::in).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
289 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
290 explicit
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
291 gzifstream(const char* name,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
292 std::ios_base::openmode mode = std::ios_base::in);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
293
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
294 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
295 * @brief Construct stream on already open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
296 * @param fd File descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
297 * @param mode Open mode flags (forced to contain ios::in).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
298 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
299 explicit
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
300 gzifstream(int fd,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
301 std::ios_base::openmode mode = std::ios_base::in);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
302
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
303 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
304 * Obtain underlying stream buffer.
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 gzfilebuf*
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
307 rdbuf() const
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
308 { return const_cast<gzfilebuf*>(&sb); }
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
309
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
310 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
311 * @brief Check if file is open.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
312 * @return True if file is open.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
313 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
314 bool
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
315 is_open() { return sb.is_open(); }
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
316
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
317 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
318 * @brief Open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
319 * @param name File name.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
320 * @param mode Open mode flags (forced to contain ios::in).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
321 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
322 * Stream will be in state good() if file opens successfully;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
323 * otherwise in state fail(). This differs from the behavior of
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
324 * ifstream, which never sets the state to good() and therefore
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
325 * won't allow you to reuse the stream for a second file unless
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
326 * you manually clear() the state. The choice is a matter of
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
327 * convenience.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
328 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
329 void
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
330 open(const char* name,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
331 std::ios_base::openmode mode = std::ios_base::in);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
332
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
333 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
334 * @brief Attach to already open gzipped file.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
335 * @param fd File descriptor.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
336 * @param mode Open mode flags (forced to contain ios::in).
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
337 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
338 * Stream will be in state good() if attach succeeded; otherwise
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
339 * in state fail().
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
340 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
341 void
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
342 attach(int fd,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
343 std::ios_base::openmode mode = std::ios_base::in);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
344
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
345 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
346 * @brief Close gzipped file.
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 * Stream will be in state fail() if close failed.
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 void
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
351 close();
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
352
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
353 private:
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 * Underlying stream buffer.
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 gzfilebuf sb;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
358 };
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
359
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 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
365 * This class implements ofstream for gzipped files. Seeking and putback
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
372 gzofstream();
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.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
376 * @param name File name.
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
380 gzofstream(const char* name,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
381 std::ios_base::openmode mode = std::ios_base::out);
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
389 gzofstream(int fd,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
390 std::ios_base::openmode mode = std::ios_base::out);
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*
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
396 rdbuf() const
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
397 { return const_cast<gzfilebuf*>(&sb); }
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
404 is_open() { return sb.is_open(); }
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.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
408 * @param name File name.
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;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
412 * otherwise in state fail(). This differs from the behavior of
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
415 * you manually clear() the state. The choice is a matter of
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
419 open(const char* name,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
420 std::ios_base::openmode mode = std::ios_base::out);
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
431 attach(int fd,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
432 std::ios_base::openmode mode = std::ios_base::out);
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
440 close();
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 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
446 gzfilebuf sb;
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
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
451 /**
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
452 * @brief Gzipped file output stream manipulator class.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
453 *
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
454 * This class defines a two-argument manipulator for gzofstream. It is used
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
455 * as base for the setcompression(int,int) manipulator.
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
456 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
457 template<typename T1, typename T2>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
458 class gzomanip2
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
459 {
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
460 public:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
461 // Allows insertor to peek at internals
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
462 template <typename Ta, typename Tb>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
463 friend gzofstream&
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
464 operator<<(gzofstream&,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
465 const gzomanip2<Ta,Tb>&);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
466
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
467 // Constructor
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
468 gzomanip2(gzofstream& (*f)(gzofstream&, T1, T2),
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
469 T1 v1,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
470 T2 v2);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
471 private:
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
472 // Underlying manipulator function
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
473 gzofstream&
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
474 (*func)(gzofstream&, T1, T2);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
475
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
476 // Arguments for manipulator function
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
477 T1 val1;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
478 T2 val2;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
479 };
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
480
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
481 /*****************************************************************************/
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
482
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
483 // Manipulator function thunks through to stream buffer
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
484 inline gzofstream&
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
485 setcompression(gzofstream &gzs, int l, int s = Z_DEFAULT_STRATEGY)
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 (gzs.rdbuf())->setcompression(l, s);
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
488 return gzs;
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
489 }
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
490
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
491 // Manipulator constructor stores arguments
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
492 template<typename T1, typename T2>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
493 inline
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
494 gzomanip2<T1,T2>::gzomanip2(gzofstream &(*f)(gzofstream &, T1, T2),
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
495 T1 v1,
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
496 T2 v2)
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
497 : func(f), val1(v1), val2(v2)
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
498 { }
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
499
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
500 // Insertor applies underlying manipulator function to stream
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
501 template<typename T1, typename T2>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
502 inline gzofstream&
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
503 operator<<(gzofstream& s, const gzomanip2<T1,T2>& m)
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
504 { return (*m.func)(s, m.val1, m.val2); }
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
505
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
506 // Insert this onto stream to simplify setting of compression level
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
507 inline gzomanip2<int,int>
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
508 setcompression(int l, int s = Z_DEFAULT_STRATEGY)
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
509 { return gzomanip2<int,int>(&setcompression, l, s); }
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
510
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
511 #endif // HAVE_ZLIB
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
512
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
513 #endif // ZFSTREAM_H
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
514
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
515 /*
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
516 ;;; Local Variables: ***
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
517 ;;; mode: C++ ***
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
518 ;;; End: ***
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
519 */
a90ce2dc8b1e [project @ 2005-04-06 19:20:09 by dbateman]
dbateman
parents:
diff changeset
520