class Zlib::GzipWriter

Public Class Methods

new(io, level=nil, strategy=nil) click to toggle source
# File lib/pr/zlib.rb, line 1077
def initialize(io, level=nil, strategy=nil)
  level = Z_DEFAULT_COMPRESSION if level.nil?
  strategy = Z_DEFAULT_STRATEGY if strategy.nil?

  gzfile_new(DeflateFuncs, :gzfile_writer_end)
  @gz.level = level

  err = deflateInit2(
     @gz.z.stream,
     @gz.level,
     Z_DEFLATED,
     -MAX_WBITS,
     DEF_MEM_LEVEL,
     strategy
  )

  if err != Z_OK
    raise_zlib_error(err, @gz.stream.msg)
  end

  @gz.io = io
  @gz.z.ZSTREAM_READY()
end
open(filename, level=Z_DEFAULT_COMPRESSION, strategy=Z_DEFAULT_STRATEGY, &blk) click to toggle source
# File lib/pr/zlib.rb, line 1073
def self.open(filename, level=Z_DEFAULT_COMPRESSION, strategy=Z_DEFAULT_STRATEGY, &blk)
  GzipWriter.gzfile_s_open(filename, 'wb', level, strategy, &blk)
end

Public Instance Methods

<<(str) click to toggle source
# File lib/pr/zlib.rb, line 1130
def <<(str)
  @gz.io << str
end
comment=(str) click to toggle source
# File lib/pr/zlib.rb, line 1056
def comment=(str)
  raise GzipFile::Error, "closed gzip stream" unless @gz.z.ZSTREAM_IS_READY()

  if (@gz.z.flags & GZFILE_FLAG_HEADER_FINISHED).nonzero?
    raise GzipFile::Error,"header is already written"
  end

  @gz.comment = str.dup
end
flush(v_flush=Z_SYNC_FLUSH) click to toggle source
# File lib/pr/zlib.rb, line 1101
def flush(v_flush=Z_SYNC_FLUSH)
  raise GzipFile::Error, "closed gzip stream" unless @gz.z.ZSTREAM_IS_READY()

  if v_flush != Z_NO_FLUSH
    @gz.z.zstream_run("", 0, v_flush)
  end

  gzfile_write_raw()

  if defined?(@gz.io.flush)
    @gz.io.flush()
  end

  self
end
gzfile_writer_end() click to toggle source
# File lib/pr/zlib.rb, line 1184
def gzfile_writer_end
  return if @gz.z.ZSTREAM_IS_CLOSING()
  @gz.z.flags |= ZSTREAM_FLAG_CLOSING
  begin
    gzfile_writer_end_run()
  ensure
    @gz.z.zstream_end()
  end
end
gzfile_writer_end_run() click to toggle source
# File lib/pr/zlib.rb, line 1173
def gzfile_writer_end_run
  if (@gz.z.flags & GZFILE_FLAG_HEADER_FINISHED).zero?
    gzfile_make_header()
  end
  @gz.z.zstream_run("", 0, Z_FINISH)
  gzfile_make_footer()
  gzfile_write_raw()

  return nil
end
mtime=(mtime) click to toggle source
# File lib/pr/zlib.rb, line 1035
def mtime=(mtime)
  raise GzipFile::Error, "closed gzip stream" unless @gz.z.ZSTREAM_IS_READY()

  if (@gz.z.flags & GZFILE_FLAG_HEADER_FINISHED).nonzero?
    raise GzipFile::Error,"header is already written"
  end

  @gz.mtime = mtime.to_i
end
orig_name=(str) click to toggle source
# File lib/pr/zlib.rb, line 1045
def orig_name=(str)
  raise GzipFile::Error, "closed gzip stream" unless @gz.z.ZSTREAM_IS_READY()

  if (@gz.z.flags & GZFILE_FLAG_HEADER_FINISHED).nonzero?
    raise GzipFile::Error,"header is already written"
  end

  ap = str[0.chr]
  @gz.orig_name = ap ? str[0,ap] : str.dup
end
pos() click to toggle source
# File lib/pr/zlib.rb, line 1066
def pos
  raise GzipFile::Error, "closed gzip stream" unless @gz.z.ZSTREAM_IS_READY()
  @gz.z.stream.total_in
end
Also aliased as: tell
print(*arg) click to toggle source
printf(*arg) click to toggle source
# File lib/pr/zlib.rb, line 1134
def printf(*arg)
  @gz.io.printf(*arg)
end
putc(ch) click to toggle source
# File lib/pr/zlib.rb, line 1124
def putc(ch)
  raise GzipFile::Error, "closed gzip stream" unless @gz.z.ZSTREAM_IS_READY()
  gzfile_write(ch.chr, 1)
  ch
end
puts(str) click to toggle source
# File lib/pr/zlib.rb, line 1142
def puts(str)
  @gz.io.puts(str)
end
tell()
Alias for: pos
write(str) click to toggle source
# File lib/pr/zlib.rb, line 1117
def write(str)
  raise GzipFile::Error, "closed gzip stream" unless @gz.z.ZSTREAM_IS_READY()
  str = str.to_s
  gzfile_write(str, str.length)
  str.length
end

Private Instance Methods

gzfile_write(str,len) click to toggle source
# File lib/pr/zlib.rb, line 1158
def gzfile_write(str,len)
  if (@gz.z.flags & GZFILE_FLAG_HEADER_FINISHED).zero?
    gzfile_make_header()
  end

  if (len > 0 || (@gz.z.flags & GZFILE_FLAG_SYNC))
    @gz.crc = crc32(@gz.crc, str, len)
    @gz.z.zstream_run(str, len, (@gz.z.flags & GZFILE_FLAG_SYNC).nonzero? ?
        Z_SYNC_FLUSH : Z_NO_FLUSH)
  end
  gzfile_write_raw()
end
gzfile_write_raw() click to toggle source
# File lib/pr/zlib.rb, line 1146
def gzfile_write_raw
  if (@gz.z.buf.offset > 0)
    str = @gz.z.zstream_detach_buffer()
    @gz.io.write(str)
    if ((@gz.z.flags & GZFILE_FLAG_SYNC).nonzero? && defined?(@gz.io.flush))
      @gz.io.flush()
    end
  end
end