module Origami::HintTable
Attributes
entries[RW]
header_items[RW]
Public Class Methods
included(receiver)
click to toggle source
# File lib/origami/linearization.rb, line 167 def self.included(receiver) receiver.instance_variable_set(:@header_items_size, {}) receiver.instance_variable_set(:@entry_items_size, {}) receiver.extend(ClassMethods) end
new()
click to toggle source
# File lib/origami/linearization.rb, line 176 def initialize @header_items = {} @entries = [] end
Public Instance Methods
to_s()
click to toggle source
# File lib/origami/linearization.rb, line 181 def to_s data = "" nitems = self.class.nb_header_items for no in (1..nitems) unless @header_items.include?(no) raise InvalidHintTableError, "Missing item #{no} in header section of #{self.class}" end value = @header_items[no] item_size = self.class.get_header_item_size(no) item_size = ((item_size + 7) >> 3) << 3 item_data = value.to_s(2) item_data = "0" * (item_size - item_data.size) + item_data data << [ item_data ].pack("B*") end nitems = self.class.nb_entry_items @entries.each_with_index do |entry, i| for no in (1..nitems) unless entry.include?(no) raise InvalidHintTableError, "Missing item #{no} in entry #{i} of #{self.class}" end value = entry[no] item_size = self.class.get_entry_item_size(no) item_size = ((item_size + 7) >> 3) << 3 item_data = value.to_s(2) item_data = "0" * (item_size - item_data.size) + item_data data << [ item_data ].pack("B*") end end data end