Class: Rstruct::Type

Inherits:
Object
  • Object
show all
Defined in:
lib/rstruct/base_types/type.rb

Direct Known Subclasses

ContainerType, PackedType

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, params = {}, &block) ⇒ Type

Returns a new instance of Type.



5
6
7
8
9
10
11
12
13
14
15
16
17
# 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

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/rstruct/base_types/type.rb', line 3

def name
  @name
end

#paramsObject (readonly)

Returns the value of attribute params.



3
4
5
# File 'lib/rstruct/base_types/type.rb', line 3

def params
  @params
end

Instance Method Details

#claim_value(vals, predecessors = nil) ⇒ Object



33
34
35
36
37
38
39
# 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?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/rstruct/base_types/type.rb', line 29

def container?
  @container or false
end

#groupable?Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/rstruct/base_types/type.rb', line 25

def groupable?
  @groupable or false
end

#register(names = nil, reg = nil) ⇒ Object



19
20
21
22
23
# 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

#sizeofObject

Raises:

  • (NotImplementedError)


41
42
43
# File 'lib/rstruct/base_types/type.rb', line 41

def sizeof
  raise(NotImplementedError, "sizeof not implemented in #{self.class}")
end