class Resilience::Page
Attributes
attributes[RW]
contents[RW]
entries[RW]
id[RW]
object_id[RW]
sequence[RW]
virtual_page_number[RW]
Public Class Methods
extract_all()
click to toggle source
# File lib/resilience/page.rb, line 26 def self.extract_all page_id = PAGES[:first] pages = Pages.new image.seek(page_id * PAGE_SIZE) while contents = image.read(PAGE_SIZE) # only pull out metadata pages currently extracted_id = id_from_contents(contents) is_metadata = extracted_id == page_id pages[page_id] = Page.parse(page_id, contents) if is_metadata page_id += 1 end pages end
id_from_contents(contents)
click to toggle source
# File lib/resilience/page.rb, line 42 def self.id_from_contents(contents) contents.unpack('S').first end
new()
click to toggle source
# File lib/resilience/page.rb, line 22 def initialize @attributes ||= [] end
parse(id, contents)
click to toggle source
# File lib/resilience/page.rb, line 62 def self.parse(id, contents) store_pos page = new page.id = id page.contents = contents image.seek(page.offset + ADDRESSES[:page_sequence]) page.sequence = image.read(4).unpack('L').first image.seek(page.offset + ADDRESSES[:virtual_page_number]) page.virtual_page_number = image.read(4).unpack('L').first unless page.root? || page.object_table? # TODO: #page.parse_attributes #page.parse_metadata end restore_pos page end
Public Instance Methods
attr_start()
click to toggle source
# File lib/resilience/page.rb, line 50 def attr_start offset + ADDRESSES[:first_attr] end
has_attributes?()
click to toggle source
# File lib/resilience/page.rb, line 86 def has_attributes? !@attributes.nil? && !@attributes.empty? end
object_table?()
click to toggle source
# File lib/resilience/page.rb, line 58 def object_table? virtual_page_number == PAGES[:object_table] end
offset()
click to toggle source
# File lib/resilience/page.rb, line 46 def offset id * PAGE_SIZE end
parse_attributes()
click to toggle source
# File lib/resilience/page.rb, line 90 def parse_attributes image.seek(attr_start) while true attr = Attribute.read break if attr.empty? @attributes << attr end end
parse_metadata()
click to toggle source
# File lib/resilience/page.rb, line 99 def parse_metadata @object_id = @attributes.first.unpack("C*")[ADDRESSES[:object_id]] @entries = @attributes.first.unpack("C*")[ADDRESSES[:num_objects]] end
root?()
click to toggle source
# File lib/resilience/page.rb, line 54 def root? virtual_page_number == PAGES[:root] end