Class: Vivarium::MapStore
- Inherits:
-
Object
- Object
- Vivarium::MapStore
- Defined in:
- lib/vivarium.rb
Instance Method Summary collapse
- #drain_events ⇒ Object
-
#initialize(pin_dir: PIN_DIR) ⇒ MapStore
constructor
A new instance of MapStore.
- #register_pid(pid) ⇒ Object
- #unregister_pid(pid) ⇒ Object
Constructor Details
#initialize(pin_dir: PIN_DIR) ⇒ MapStore
Returns a new instance of MapStore.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/vivarium.rb', line 41 def initialize(pin_dir: PIN_DIR) @pin_dir = pin_dir @config_targets = RbBCC::HashTable.from_pin( File.join(@pin_dir, "config_targets"), "unsigned int", "unsigned char", keysize: 4, leafsize: 1 ) @event_invoked = RbBCC::ArrayTable.from_pin( File.join(@pin_dir, "event_invoked"), "unsigned int", "char[#{EVENT_STRUCT_SIZE}]", keysize: 4, leafsize: EVENT_STRUCT_SIZE ) @event_write_pos = RbBCC::ArrayTable.from_pin( File.join(@pin_dir, "event_write_pos"), "unsigned int", "unsigned int", keysize: 4, leafsize: 4 ) rescue StandardError => e raise Error, "failed to open pinned maps under #{@pin_dir}: #{e.class}: #{e.}" end |
Instance Method Details
#drain_events ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/vivarium.rb', line 78 def drain_events events = [] EVENT_CAPACITY.times do |idx| ptr = @event_invoked[idx] next unless ptr event = Event.from_binary(ptr[0, EVENT_STRUCT_SIZE]) next if event.empty? events << event @event_invoked[idx] = zeroed_event_ptr end @event_write_pos[0] = 0 events end |
#register_pid(pid) ⇒ Object
68 69 70 |
# File 'lib/vivarium.rb', line 68 def register_pid(pid) @config_targets[pid] = 1 end |
#unregister_pid(pid) ⇒ Object
72 73 74 75 76 |
# File 'lib/vivarium.rb', line 72 def unregister_pid(pid) @config_targets.delete(pid) rescue KeyError nil end |