Class: Lignite::Variables

Inherits:
Object
  • Object
show all
Defined in:
lib/lignite/variables.rb

Overview

Allocate local or global variables FIXME: the user can make bad alignment, resulting in VMError at runtime bad: data8 :speed; data32 :tacho; output_read(…) good data32 :tacho; data8 :speed; output_read(…)

Instance Method Summary collapse

Constructor Details

#initializeVariables

Returns a new instance of Variables.



7
8
9
10
11
12
# File 'lib/lignite/variables.rb', line 7

def initialize
  @offset = 0
  # for proper decoding of direct replies according to declared types
  @unpacker = ""
  @vars = {}
end

Instance Method Details

#add(id, size, unpacker) ⇒ Object

declare



15
16
17
18
19
20
# File 'lib/lignite/variables.rb', line 15

def add(id, size, unpacker)
  raise "Duplicate variable #{id}" if @vars.key?(id)
  @vars[id] = {offset: @offset, size: size}
  @offset += size
  @unpacker += unpacker
end

#bytesizeObject

compile



33
34
35
# File 'lib/lignite/variables.rb', line 33

def bytesize
  @offset
end

#key?(sym) ⇒ Boolean

use

Returns:

  • (Boolean)


23
24
25
# File 'lib/lignite/variables.rb', line 23

def key?(sym)
  @vars.key?(sym)
end

#offset(sym) ⇒ Object

use



28
29
30
# File 'lib/lignite/variables.rb', line 28

def offset(sym)
  @vars[sym][:offset]
end

#unpack(buf) ⇒ Object

decode reply



38
39
40
41
# File 'lib/lignite/variables.rb', line 38

def unpack(buf)
  values = buf.unpack(@unpacker)
  values.size == 1 ? values.first : values
end