Class: Zlib::GzipWriter

Inherits:
GzipFile show all
Defined in:
lib/pr/zlib/gzipwriter.rb

Constant Summary

Constants inherited from GzipFile

Zlib::GzipFile::GZFILE_FLAG_FOOTER_FINISHED, Zlib::GzipFile::GZFILE_FLAG_HEADER_FINISHED, Zlib::GzipFile::GZFILE_FLAG_SYNC, Zlib::GzipFile::GZFILE_READ_SIZE, Zlib::GzipFile::GZ_EXTRAFLAG_FAST, Zlib::GzipFile::GZ_EXTRAFLAG_SLOW, Zlib::GzipFile::GZ_FLAG_COMMENT, Zlib::GzipFile::GZ_FLAG_ENCRYPT, Zlib::GzipFile::GZ_FLAG_EXTRA, Zlib::GzipFile::GZ_FLAG_MULTIPART, Zlib::GzipFile::GZ_FLAG_ORIG_NAME, Zlib::GzipFile::GZ_FLAG_UNKNOWN_MASK, Zlib::GzipFile::GZ_MAGIC1, Zlib::GzipFile::GZ_MAGIC2, Zlib::GzipFile::GZ_METHOD_DEFLATE, Zlib::GzipFile::OS_CODE

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from GzipFile

#GZFILE_IS_FINISHED, #close, #closed?, #comment, #crc, #finish, #gzfile_close, #gzfile_ensure_close, gzfile_s_open, #level, #mtime, #orig_name, #os_code, #sync, #sync=, #to_io, wrap

Constructor Details

#initialize(io, level = nil, strategy = nil) ⇒ GzipWriter

Returns a new instance of GzipWriter.



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/pr/zlib/gzipwriter.rb', line 50

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

Class Method Details

.open(filename, level = Z_DEFAULT_COMPRESSION, strategy = Z_DEFAULT_STRATEGY, &blk) ⇒ Object



46
47
48
# File 'lib/pr/zlib/gzipwriter.rb', line 46

def self.open(filename, level = Z_DEFAULT_COMPRESSION, strategy = Z_DEFAULT_STRATEGY, &blk)
  GzipWriter.gzfile_s_open(filename, 'wb', level, strategy, &blk)
end

Instance Method Details

#<<(str) ⇒ Object



103
104
105
# File 'lib/pr/zlib/gzipwriter.rb', line 103

def <<(str)
  @gz.io << str
end

#comment=(str) ⇒ Object

Raises:



29
30
31
32
33
34
35
36
37
# File 'lib/pr/zlib/gzipwriter.rb', line 29

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) ⇒ Object

Raises:



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/pr/zlib/gzipwriter.rb', line 74

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_endObject



157
158
159
160
161
162
163
164
165
# File 'lib/pr/zlib/gzipwriter.rb', line 157

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_runObject



146
147
148
149
150
151
152
153
154
155
# File 'lib/pr/zlib/gzipwriter.rb', line 146

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()

  nil
end

#mtime=(mtime) ⇒ Object

Raises:



8
9
10
11
12
13
14
15
16
# File 'lib/pr/zlib/gzipwriter.rb', line 8

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) ⇒ Object

Raises:



18
19
20
21
22
23
24
25
26
27
# File 'lib/pr/zlib/gzipwriter.rb', line 18

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

#posObject Also known as: tell

Raises:



39
40
41
42
# File 'lib/pr/zlib/gzipwriter.rb', line 39

def pos
  raise GzipFile::Error, 'closed gzip stream' unless @gz.z.ZSTREAM_IS_READY()
  @gz.z.stream.total_in
end


111
112
113
# File 'lib/pr/zlib/gzipwriter.rb', line 111

def print(*arg)
  @gz.io.print(*arg)
end

#printf(*arg) ⇒ Object



107
108
109
# File 'lib/pr/zlib/gzipwriter.rb', line 107

def printf(*arg)
  @gz.io.printf(*arg)
end

#putc(ch) ⇒ Object

Raises:



97
98
99
100
101
# File 'lib/pr/zlib/gzipwriter.rb', line 97

def putc(ch)
  raise GzipFile::Error, 'closed gzip stream' unless @gz.z.ZSTREAM_IS_READY()
  gzfile_write(ch.chr, 1)
  ch
end

#puts(str) ⇒ Object



115
116
117
# File 'lib/pr/zlib/gzipwriter.rb', line 115

def puts(str)
  @gz.io.puts(str)
end

#write(str) ⇒ Object

Raises:



90
91
92
93
94
95
# File 'lib/pr/zlib/gzipwriter.rb', line 90

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