Module: Ascii85Native
- Extended by:
- FFI::Library
- Defined in:
- lib/ascii85_native.rb
Class Method Summary collapse
Class Method Details
.decode(input) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/ascii85_native.rb', line 52 def self.decode(input) return "" if input.nil? if input[0] == '<' && input[1] == '~' && input[-2] == '~' && input[-1] == '>' input = input[2..-3] end FFI::MemoryPointer.new(:char, input.size) do |in_char| in_char.write_string(input) out_size = self.size_for_bin(input.size) FFI::MemoryPointer.new(:uint8, out_size) do |output| self.from_a85(in_char, input.size, output) return output.read_string() end end end |
.encode(input, include_delimiter = false) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/ascii85_native.rb', line 23 def self.encode(input, include_delimiter=false) if input.nil? return '<~~>' if include_delimiter return '' end if input.class == String input_data = [] input.each_byte { |byte| input_data << byte } else input_data = input end FFI::MemoryPointer.new(:uint8, input_data.size) do |in_uint8| in_uint8.write_array_of_type(FFI::TYPE_UINT8, :put_uint8, input_data) out_size = self.size_for_a85(input_data.size, true) FFI::MemoryPointer.new(:uint8, out_size) do |output| self.to_a85(in_uint8, input_data.size, output, true) if include_delimiter return '<~' + (output.read_string() || '') + '~>' else return output.read_string() end end end end |