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