class Rstruct::Type

Attributes

name[R]
params[R]

Public Class Methods

new(name, params={}, &block) click to toggle source
# File lib/rstruct/base_types/type.rb, line 5
def initialize(name, params={}, &block)
  @params = params.dup
  @name = name.to_sym

  reg = @params.delete(:register)
  aliases = @params.delete(:alias)
  regnames = ((aliases)? ([aliases] << @name).flatten : [@name]).uniq.compact

  reg=nil if reg==true
  register(regnames, reg) unless reg == false

  instance_eval &block if block
end

Public Instance Methods

claim_value(vals, predecessors=nil) click to toggle source
# File lib/rstruct/base_types/type.rb, line 33
def claim_value(vals, predecessors=nil)
  if @claim_cb
    @claim_cb.call(vals, predecessors)
  else
    vals.shift
  end
end
container?() click to toggle source
# File lib/rstruct/base_types/type.rb, line 29
def container?
  @container or false
end
groupable?() click to toggle source
# File lib/rstruct/base_types/type.rb, line 25
def groupable?
  @groupable or false
end
register(names=nil, reg=nil) click to toggle source
# File lib/rstruct/base_types/type.rb, line 19
def register(names=nil, reg=nil)
  names ||= to_sym
  reg ||= Registry::DEFAULT_REGISTRY
  reg.register(self, *names)
end
sizeof() click to toggle source
# File lib/rstruct/base_types/type.rb, line 41
def sizeof
  raise(NotImplementedError, "sizeof not implemented in #{self.class}")
end

Private Instance Methods

claim(&block) click to toggle source

sets up a call back for claiming values out of an unpacked value array

# File lib/rstruct/base_types/type.rb, line 48
def claim(&block)
  @claim_cb = block
end