Method: CHD::Metadata.parse

Defined in:
lib/chd/metadata.rb

.parse(data, flags, type) ⇒ Hash{Symbol => Object}

Parse metadata returned by CHD#get_metadata

Examples:

chd = CHD.new('file.chd')
puts CHD::Metadata.parse(*chd.(0)).inspect

Parameters:

  • data (String)
  • flags (Integer)
  • type (Symbol)

Returns:

  • (Hash{Symbol => Object})


114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/chd/metadata.rb', line 114

def self.parse(data, flags, type)
    # Flags
    unless (flags & ~(METADATA_FLAG_CHECKSUM)).zero?
        raise ParsingError,
              "unsupported flag (0x#{flags.to_s(16)}) (fill bug report)"
    end
    set_flags = Set.new
    set_flags << :checksum unless (flags & METADATA_FLAG_CHECKSUM).zero?

    # Data
    case type
    when CDROM_TRACK        then parse_cdrom_track(data, CDROM_TRACK_REGEX)
    when CDROM_TRACK_PREGAP then parse_cdrom_track(data, CDROM_TRACK_PREGAP_REGEX)
    when GDROM_TRACK        then parse_cdrom_track(data, GDROM_TRACK_REGEX)
    when HARD_DISK          then parse_hard_disk(data, HARD_DISK_REGEX)
    else                    raise "not implemented yet"
    end
end