module TSparser::Parsing

Public Class Methods

included(klass) click to toggle source
# File lib/parsing.rb, line 46
def self.included(klass)
  klass.extend ClassExtension
end
new(binary, parsing_proc=nil, delay=true) click to toggle source
# File lib/parsing.rb, line 4
def initialize(binary, parsing_proc=nil, delay=true)
  @binary = binary
  @parsed_variable = Hash.new
  if delay
    @parsing_proc = parsing_proc
  else
    self.instance_eval(&parsing_proc) if parsing_proc
  end
end

Public Instance Methods

method_missing(name, *args) click to toggle source
Calls superclass method
# File lib/parsing.rb, line 31
def method_missing(name, *args)
  if @parsing_proc
    parsing_proc = @parsing_proc
    @parsing_proc = nil
    self.instance_eval(&parsing_proc)
  end
  if @parsed_variable[name]
    if @parsed_variable[name].instance_of?(Proc)
      @parsed_variable[name] = @parsed_variable[name].call
    end
    return @parsed_variable[name]
  end
  super
end
read(name, type, bit) click to toggle source
# File lib/parsing.rb, line 14
def read(name, type, bit)
  if type == Integer
    val = @binary.read_bit_as_integer(bit)
    @parsed_variable[name] = val
  else
    val = @binary.read_bit_as_binary(bit)
    @parsed_variable[name] = Proc.new{ type.new(val) }
  end
rescue => error
  STDERR.puts "Parsing error occurred at class: #{self.class}, attr: #{name}(type:#{type}, bitlen:#{bit})"
  raise error
end
rest_all() click to toggle source
# File lib/parsing.rb, line 27
def rest_all
  return @binary.rest_readable_bit_length
end