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 = Z_DEFAULT_COMPRESSION, strategy = Z_DEFAULT_STRATEGY) ⇒ 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
# File 'lib/pr/zlib.rb', line 1075

def initialize(io, level=Z_DEFAULT_COMPRESSION, strategy=Z_DEFAULT_STRATEGY)
  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



1125
1126
1127
# File 'lib/pr/zlib.rb', line 1125

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:



1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
# File 'lib/pr/zlib.rb', line 1096

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



1179
1180
1181
1182
1183
1184
1185
1186
1187
# File 'lib/pr/zlib.rb', line 1179

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



1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
# File 'lib/pr/zlib.rb', line 1168

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


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

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

#printf(*arg) ⇒ Object



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

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

#putc(ch) ⇒ Object

Raises:



1119
1120
1121
1122
1123
# File 'lib/pr/zlib.rb', line 1119

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



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

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

#write(str) ⇒ Object

Raises:



1112
1113
1114
1115
1116
1117
# File 'lib/pr/zlib.rb', line 1112

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