Sha256: bd84d322cbcdc32fde06d230d86e5f9fb7b983c6745d804574a7898d68661495
Contents?: true
Size: 1.38 KB
Versions: 2
Compression:
Stored size: 1.38 KB
Contents
module Lignite # 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(...) class Variables def initialize @offset = 0 # for proper decoding of direct replies according to declared types @unpacker = "" @vars = {} end # declare def add(id, size, unpacker) raise "Duplicate variable #{id}" if @vars.key?(id) @vars[id] = { offset: @offset, size: size } @offset += size @unpacker += unpacker end # use def key?(sym) @vars.key?(sym) end # use def offset(sym) @vars[sym][:offset] end # compile def bytesize @offset end # decode reply def unpack(buf) values = buf.unpack(@unpacker) values.size == 1 ? values.first : values end end # `variables` are {Variables} module VariableDeclarer def data8(id) variables.add(id, 1, "C") end def data16(id) variables.add(id, 2, "S<") end def data32(id) variables.add(id, 4, "L<") end def dataf(id) variables.add(id, 4, "e") end def datas(id, size) variables.add(id, size, "a#{size}") end def array8(id, count) variables.add(id, count * 1, "C#{count}") end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
lignite-0.4.0 | lib/lignite/variables.rb |
lignite-0.3.0 | lib/lignite/variables.rb |