#
#
# In rubyx everything truely is an object. (most smalltalk/ruby systems use a union
# for integers/pointers that are called objects, but are really very different)
#
# Objects have type as their first member. No exception.
#
# So where is the data? In DataObjects. DataObjects are opague carriers of data.
# Opague to rubyx that is. There is no way to get at it or pass the data around.
#
# To use Data, Risc instructions have to be used. Luckily there is not soo much one
# actually wants to do with data, moving it between DataObject , comparing and
# logical and math operation that are bundled into the OperatorInstruction.
#
# For safe access the access code needs to know the length of the data, which is
# encoded in the class/type name. Ie An Integer derives from Data4, which is 4 long
# ( one for the type, one for the next, one word for the integer and currently still a marker)
#
# DataObjects still have a type, and so can have objects before the data starts
#
# A marker class
module Parfait
  class DataObject < Object

    def self.type_length
      raise "called " + self.to_s
    end
    def padded_length
      self.class.memory_size * 4
    end
    def data_length
      self.class.memory_size
    end
  end

  class Data4 < DataObject
    def self.memory_size
      4
    end
  end
  class Data8 < DataObject
    def self.memory_size
      8
    end
  end
  class Data16 < DataObject
    def self.memory_size
      16
    end
  end
  class Data32 < DataObject
    def self.memory_size
      32
    end
  end
end