Class: Vivarium::MapStore
- Inherits:
-
Object
- Object
- Vivarium::MapStore
- Defined in:
- lib/vivarium.rb
Instance Method Summary collapse
- #drain_events ⇒ Object
-
#initialize(pin_dir: Vivarium.bpf_pin_dir) ⇒ MapStore
constructor
A new instance of MapStore.
- #register_pid(pid) ⇒ Object
- #unregister_pid(pid) ⇒ Object
Constructor Details
#initialize(pin_dir: Vivarium.bpf_pin_dir) ⇒ MapStore
Returns a new instance of MapStore.
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/vivarium.rb', line 62 def initialize(pin_dir: Vivarium.bpf_pin_dir) @pin_dir = pin_dir @config_root_targets = RbBCC::HashTable.from_pin( File.join(@pin_dir, "config_root_targets"), "unsigned int", "unsigned char", keysize: 4, leafsize: 1 ) @config_spawned_targets = RbBCC::HashTable.from_pin( File.join(@pin_dir, "config_spawned_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
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/vivarium.rb', line 107 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
96 97 98 |
# File 'lib/vivarium.rb', line 96 def register_pid(pid) @config_root_targets[pid] = 1 end |
#unregister_pid(pid) ⇒ Object
100 101 102 103 104 105 |
# File 'lib/vivarium.rb', line 100 def unregister_pid(pid) @config_root_targets.delete(pid) @config_spawned_targets.clear rescue KeyError nil end |