class Zlib::GzipReader
Public Class Methods
new(io,level=Z_DEFAULT_COMPRESSION,strategy=Z_DEFAULT_STRATEGY)
click to toggle source
# File lib/pr/zlib.rb, line 1227 def initialize(io,level=Z_DEFAULT_COMPRESSION,strategy=Z_DEFAULT_STRATEGY) gzfile_new(InflateFuncs, :gzfile_reader_end) @gz.level = level err = inflateInit2(@gz.z.stream, -MAX_WBITS) if (err != Z_OK) raise_zlib_error(err, @gz.stream.msg) end @gz.io = io @gz.z.ZSTREAM_READY() gzfile_read_header() self end
open(filename,level=Z_DEFAULT_COMPRESSION,strategy=Z_DEFAULT_STRATEGY,&blk)
click to toggle source
# File lib/pr/zlib.rb, line 1223 def self.open(filename,level=Z_DEFAULT_COMPRESSION,strategy=Z_DEFAULT_STRATEGY,&blk) GzipReader.gzfile_s_open(filename,"rb",level=Z_DEFAULT_COMPRESSION,strategy=Z_DEFAULT_STRATEGY,&blk) end
Public Instance Methods
each(rs=$/) { |str| ... }
click to toggle source
# File lib/pr/zlib.rb, line 1296 def each(rs=$/) while (str = gzreader_gets(rs)) yield(str) end self end
Also aliased as: each_line
each_byte() { |c| ... }
click to toggle source
# File lib/pr/zlib.rb, line 1274 def each_byte() while (c = getc) yield(c) end nil end
eof()
click to toggle source
# File lib/pr/zlib.rb, line 1208 def eof raise GzipFile::Error,"closed gzip stream" unless @gz.z.ZSTREAM_IS_READY() GZFILE_IS_FINISHED(@gz) end
Also aliased as: eof?
getc()
click to toggle source
# File lib/pr/zlib.rb, line 1261 def getc() dst = gzfile_read(1) dst ? dst[0] : dst end
gets(rs=$/)
click to toggle source
# File lib/pr/zlib.rb, line 1286 def gets(rs=$/) dst = gzreader_gets(rs) $_ = dst if dst dst end
lineno()
click to toggle source
# File lib/pr/zlib.rb, line 1198 def lineno raise GzipFile::Error, "closed gzip stream" unless @gz.z.ZSTREAM_IS_READY() @gz.lineno end
lineno=(lineno)
click to toggle source
# File lib/pr/zlib.rb, line 1203 def lineno=(lineno) raise GzipFile::Error, "closed gzip stream" unless @gz.z.ZSTREAM_IS_READY() @gz.lineno = lineno end
pos()
click to toggle source
# File lib/pr/zlib.rb, line 1214 def pos if @gz.z.buf.nil? @gz.z.stream.total_out else @gz.z.stream.total_out - @gz.z.buf.offset end end
Also aliased as: tell
read(len=nil)
click to toggle source
# File lib/pr/zlib.rb, line 1249 def read(len=nil) if len.nil? return gzfile_read_all() end if len < 0 raise ArgumentError, "negative length #{len} given" end return gzfile_read(len) end
readchar()
click to toggle source
# File lib/pr/zlib.rb, line 1266 def readchar() dst = getc() if dst.nil? raise EOFError, "end of file reached" end dst end
readline(rs=$/)
click to toggle source
# File lib/pr/zlib.rb, line 1292 def readline(rs=$/) gets(rs) end
readlines(rs=$/)
click to toggle source
# File lib/pr/zlib.rb, line 1304 def readlines(rs=$/) dst = [] while str = gzreader_gets(rs) dst.push(str) end dst end
rewind()
click to toggle source
# File lib/pr/zlib.rb, line 1240 def rewind() gzfile_reader_rewind() return 0 end
ungetc(ch)
click to toggle source
# File lib/pr/zlib.rb, line 1281 def ungetc(ch) gzfile_ungetc(ch) nil end
unused()
click to toggle source
# File lib/pr/zlib.rb, line 1245 def unused() gzfile_reader_get_unused() end
Private Instance Methods
gzfile_read(len)
click to toggle source
# File lib/pr/zlib.rb, line 1420 def gzfile_read(len) if len < 0 raise ArgumentError, "negative length #{len} given" end if len.zero? return "" end while (!@gz.z.ZSTREAM_IS_FINISHED() && @gz.z.buf.offset < len) gzfile_read_more() end if (GZFILE_IS_FINISHED(@gz)) if (@gz.z.flags & GZFILE_FLAG_FOOTER_FINISHED).zero? gzfile_check_footer() end return nil end dst = @gz.z.zstream_shift_buffer(len) gzfile_calc_crc(dst) dst end
gzfile_read_all()
click to toggle source
# File lib/pr/zlib.rb, line 1445 def gzfile_read_all() while (!@gz.z.ZSTREAM_IS_FINISHED()) gzfile_read_more() end if (GZFILE_IS_FINISHED(@gz)) if (@gz.z.flags & GZFILE_FLAG_FOOTER_FINISHED).zero? gzfile_check_footer() end return '' end dst = @gz.z.zstream_detach_buffer() gzfile_calc_crc(dst) dst end
gzfile_read_more()
click to toggle source
# File lib/pr/zlib.rb, line 1495 def gzfile_read_more while (!@gz.z.ZSTREAM_IS_FINISHED()) str = gzfile_read_raw() if str.nil? if (!@gz.z.ZSTREAM_IS_FINISHED()) raise Error, "unexpected end of file" end break end if (str.length > 0) @gz.z.zstream_run(str, str.length,Z_SYNC_FLUSH) end break if (@gz.z.buf.offset > 0) end @gz.z.buf.offset end
gzfile_read_raw()
click to toggle source
# File lib/pr/zlib.rb, line 1461 def gzfile_read_raw() str = @gz.io.read(GZFILE_READ_SIZE) if str && str.class != String raise TypeError,"wrong argument type #{rs.class} (expected String)" end str end
gzfile_read_raw_ensure(size)
click to toggle source
# File lib/pr/zlib.rb, line 1469 def gzfile_read_raw_ensure(size) while @gz.z.input.nil? || @gz.z.input.length < size str = gzfile_read_raw() return false if str.nil? @gz.z.zstream_append_input(str,str.length) end true end
gzfile_read_raw_until_zero(offset)
click to toggle source
# File lib/pr/zlib.rb, line 1478 def gzfile_read_raw_until_zero(offset) ap = nil loop do ap = @gz.z.input[offset, @gz.z.input.length-offset].index(0.chr) break if ap str = gzfile_read_raw() raise Error, "unexpected end of file" if str.nil? offset = @gz.z.input.length @gz.z.zstream_append_input(str,str.length) end ap end
gzfile_reader_end()
click to toggle source
# File lib/pr/zlib.rb, line 1322 def gzfile_reader_end() return if @gz.z.ZSTREAM_IS_CLOSING() @gz.z.flags |= ZSTREAM_FLAG_CLOSING begin gzfile_reader_end_run() ensure @gz.z.zstream_end() end end
gzfile_reader_end_run()
click to toggle source
# File lib/pr/zlib.rb, line 1314 def gzfile_reader_end_run() if (GZFILE_IS_FINISHED(@gz) && (@gz.z.flags & GZFILE_FLAG_FOOTER_FINISHED).zero?) gzfile_check_footer() end nil end
gzfile_reader_get_unused()
click to toggle source
# File lib/pr/zlib.rb, line 1346 def gzfile_reader_get_unused() return nil if (!@gz.z.ZSTREAM_IS_READY()) return nil if (!GZFILE_IS_FINISHED(@gz)) if (@gz.z.flags & GZFILE_FLAG_FOOTER_FINISHED).zero? gzfile_check_footer() end return nil if @gz.z.input.nil? @gz.z.input.dup end
gzfile_reader_rewind()
click to toggle source
# File lib/pr/zlib.rb, line 1337 def gzfile_reader_rewind n = @gz.z.stream.total_in if @gz.z.input n += @gz.z.input.length end @gz.io.seek(-n,1) gzfile_reset() end
gzfile_ungetc(c)
click to toggle source
# File lib/pr/zlib.rb, line 1332 def gzfile_ungetc(c) @gz.z.zstream_buffer_ungetc(c) @gz.ungetc+=1 end
gzreader_gets(rs=$/)
click to toggle source
# File lib/pr/zlib.rb, line 1360 def gzreader_gets(rs=$/) if rs && rs.class != String raise TypeError,"wrong argument type #{rs.class} (expected String)" end if rs.nil? dst = gzfile_read_all() @gz.lineno += 1 if dst.length.nonzero? return dst end if rs.length.zero? rsptr = "\n\n" rslen = 2 rspara = true else rsptr = rs rslen = rs.length rspara = false end if rspara gzreader_skip_linebreaks end while (@gz.z.buf.offset < rslen) if (@gz.z.ZSTREAM_IS_FINISHED()) @gz.lineno+=1 if (@gz.z.buf.offset > 0) return gzfile_read(rslen) end gzfile_read_more() end ap = 0 n = rslen loop do if (n > @gz.z.buf.offset) break if (@gz.z.ZSTREAM_IS_FINISHED()) gzfile_read_more() ap = n - rslen end rscheck(rsptr, rslen, rs) if (!rspara) res = @gz.z.buf.buffer[ap,@gz.z.buf.offset - n + 1].index(rsptr[0]) if res.nil? n = @gz.z.buf.offset + 1 else n += (res - ap) ap = res break if (rslen == 1 || @gz.z.buf.buffer[ap,rslen]==rsptr) ap+=1 n+=1 end end @gz.lineno+=1 dst = gzfile_read(n) if (rspara) gzreader_skip_linebreaks() end dst end
rscheck(rsptr,rslen,rs)
click to toggle source
# File lib/pr/zlib.rb, line 1356 def rscheck(rsptr,rslen,rs) raise RuntimeError, "rs modified" if rs != rsptr end