Class: Zfp::Stream

Inherits:
Object
  • Object
show all
Defined in:
lib/zfp/stream.rb

Instance Method Summary collapse

Constructor Details

#initialize(mode, params) ⇒ Stream

Returns a new instance of Stream.



5
6
7
8
# File 'lib/zfp/stream.rb', line 5

def initialize(mode, params)
  @mode   = mode
  @params = params
end

Instance Method Details

#compress(field) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/zfp/stream.rb', line 10

def compress(field)
  zfp_ptr = bitstream = output_buf = nil
  zfp_ptr = Zfp::FFI.zfp_stream_open(nil)
  apply_mode(zfp_ptr, field)
  bufsize    = Zfp::FFI.zfp_stream_maximum_size(zfp_ptr, field.pointer)
  output_buf = ::FFI::MemoryPointer.new(:uint8, bufsize)
  bitstream  = Zfp::FFI.stream_open(output_buf, bufsize)
  Zfp::FFI.zfp_stream_set_bit_stream(zfp_ptr, bitstream)
  Zfp::FFI.zfp_stream_rewind(zfp_ptr)
  written = Zfp::FFI.zfp_compress(zfp_ptr, field.pointer)
  raise Zfp::CompressionFailed, "zfp_compress returned 0" if written == 0
  output_buf.read_bytes(written)
ensure
  Zfp::FFI.stream_close(bitstream) if bitstream && !bitstream.null?
  Zfp::FFI.zfp_stream_close(zfp_ptr) if zfp_ptr && !zfp_ptr.null?
end

#decompress(field, compressed_bytes) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/zfp/stream.rb', line 27

def decompress(field, compressed_bytes)
  zfp_ptr = bitstream = input_buf = nil
  input_buf = ::FFI::MemoryPointer.new(:uint8, compressed_bytes.bytesize)
  input_buf.put_bytes(0, compressed_bytes)
  zfp_ptr  = Zfp::FFI.zfp_stream_open(nil)
  apply_mode(zfp_ptr, field)
  bitstream = Zfp::FFI.stream_open(input_buf, compressed_bytes.bytesize)
  Zfp::FFI.zfp_stream_set_bit_stream(zfp_ptr, bitstream)
  Zfp::FFI.zfp_stream_rewind(zfp_ptr)
  read = Zfp::FFI.zfp_decompress(zfp_ptr, field.pointer)
  raise Zfp::DecompressionFailed, "zfp_decompress returned 0" if read == 0
ensure
  Zfp::FFI.stream_close(bitstream) if bitstream && !bitstream.null?
  Zfp::FFI.zfp_stream_close(zfp_ptr) if zfp_ptr && !zfp_ptr.null?
end