Sha256: 17277b0ec76d8c48b6a8d111c6e56fed38e97f5cd7ae1f581062ea4807e17c42

Contents?: true

Size: 736 Bytes

Versions: 2

Compression:

Stored size: 736 Bytes

Contents

module Huff
  class Decoder
    def initialize(encoding_tree)
      @encoding_tree = encoding_tree
    end

    def decode_string(text)
      text_array = text.each_char.to_a
      result = ''
      until text_array.empty?
        letter, text_array = decode(@encoding_tree, text_array)
        result << letter
      end
      result
    end

    def decode_36(text)
      decode_string(text.to_i(36).to_s(2))
    end

    private

    def decode(tree, text)
      return [tree, text] if tree.is_a? String
      it, *rest = text
      case it
        when '0'
          decode(tree.first, rest)
        when '1'
          decode(tree.last, rest)
        else
          throw "Expecting 0 or 1, got '#{it}'."
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
huff-0.0.2 lib/huff/decoder.rb
huff-0.0.1 lib/huff/decoder.rb