Class: Zlib::GzipWriter

Inherits:
GzipFile show all
Defined in:
lib/pr/zlib.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.



1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
# File 'lib/pr/zlib.rb', line 1075

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



1071
1072
1073
# File 'lib/pr/zlib.rb', line 1071

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



1128
1129
1130
# File 'lib/pr/zlib.rb', line 1128

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

#comment=(str) ⇒ Object

Raises:



1054
1055
1056
1057
1058
1059
1060
1061
1062
# File 'lib/pr/zlib.rb', line 1054

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:



1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
# File 'lib/pr/zlib.rb', line 1099

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



1182
1183
1184
1185
1186
1187
1188
1189
1190
# File 'lib/pr/zlib.rb', line 1182

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



1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
# File 'lib/pr/zlib.rb', line 1171

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

Raises:



1033
1034
1035
1036
1037
1038
1039
1040
1041
# File 'lib/pr/zlib.rb', line 1033

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:



1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
# File 'lib/pr/zlib.rb', line 1043

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:



1064
1065
1066
1067
# File 'lib/pr/zlib.rb', line 1064

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


1136
1137
1138
# File 'lib/pr/zlib.rb', line 1136

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

#printf(*arg) ⇒ Object



1132
1133
1134
# File 'lib/pr/zlib.rb', line 1132

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

#putc(ch) ⇒ Object

Raises:



1122
1123
1124
1125
1126
# File 'lib/pr/zlib.rb', line 1122

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



1140
1141
1142
# File 'lib/pr/zlib.rb', line 1140

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

#write(str) ⇒ Object

Raises:



1115
1116
1117
1118
1119
1120
# File 'lib/pr/zlib.rb', line 1115

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