Class: Zfp::Stream
- Inherits:
-
Object
- Object
- Zfp::Stream
- Defined in:
- lib/zfp/stream.rb
Instance Method Summary collapse
- #compress(field) ⇒ Object
- #decompress(field, compressed_bytes) ⇒ Object
-
#initialize(mode, params) ⇒ Stream
constructor
A new instance of Stream.
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 |