def each_region
unless block_given?
return enum_for(:each_region)
end
super do |region|
yield region
end
yield({
:offset => pos_index_header,
:length => size_index_header,
:name => :index_header,
:info => "Index Header",
})
yield({
:offset => pos_fseg_header,
:length => size_fseg_header,
:name => :fseg_header,
:info => "File Segment Header",
})
yield({
:offset => pos_infimum - 5,
:length => size_mum_record + 5,
:name => :infimum,
:info => "Infimum",
})
yield({
:offset => pos_supremum - 5,
:length => size_mum_record + 5,
:name => :supremum,
:info => "Supremum",
})
directory_slots.times do |n|
yield({
:offset => pos_directory - (n * 2),
:length => 2,
:name => :directory,
:info => "Page Directory",
})
end
each_garbage_record do |record|
yield({
:offset => record.offset - record.header[:length],
:length => record.length + record.header[:length],
:name => :garbage,
:info => "Garbage",
})
end
each_record do |record|
yield({
:offset => record.offset - record.header[:length],
:length => record.header[:length],
:name => :record_header,
:info => "Record Header",
})
yield({
:offset => record.offset,
:length => record.length || 1,
:name => :record_data,
:info => "Record Data",
})
end
nil
end