class EraXML::EraParseDetail::Listener

Attributes

metadata[R]

Public Class Methods

new() click to toggle source
# File lib/thinp_xml/era/parse.rb, line 17
def initialize
  @in_era_array = false
  @in_writeset = false
  @writesets = []
end

Public Instance Methods

tag_end(tag) click to toggle source
# File lib/thinp_xml/era/parse.rb, line 52
def tag_end(tag)
  case tag
  when 'writeset'
    @writesets << Writeset.new(@writeset_era,
                               @current_writeset.size,
                               @current_writeset)
    @in_writeset = false

  when 'era_array'
    @in_era_array = false

  when 'superblock'
    @metadata = Metadata.new(@superblock, @writesets, @era_array)
  end
end
tag_start(tag, args) click to toggle source
# File lib/thinp_xml/era/parse.rb, line 23
def tag_start(tag, args)
  attr = to_hash(args)

  case tag
  when 'superblock'
    @superblock = Superblock.new(*get_fields(attr, SUPERBLOCK_FIELDS))
    @era_array = Array.new(attr[:nr_blocks].to_i, 0)

  when 'writeset'
    @in_writeset = true
    @writeset_era = attr[:era].to_i
    @current_writeset = Array.new(attr[:nr_bits].to_i, false)

  when 'bit'
    raise "bit when not in a bitset" unless @in_writeset
    @current_writeset[attr[:block].to_i] = to_bool(attr[:value])

  when 'era_array'
    @in_era_array = true

  when 'era'
    raise "not in era array" unless @in_era_array
    @era_array[attr[:block].to_i] = attr[:era].to_i

  else
    raise "unhandled tag '#{tag} #{attr.map {|x| x.inspect}.join(' ')}'"
  end
end
to_bool(str) click to toggle source
# File lib/thinp_xml/era/parse.rb, line 68
def to_bool(str)
  case str
  when 'true'
    true

  when 'false'
    false

  else
    raise "bad bool value: #{str}"
  end
end