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.
389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 |
# File 'lib/vivarium.rb', line 389 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
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 |
# File 'lib/vivarium.rb', line 434 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
423 424 425 |
# File 'lib/vivarium.rb', line 423 def register_pid(pid) @config_root_targets[pid] = 1 end |
#unregister_pid(pid) ⇒ Object
427 428 429 430 431 432 |
# File 'lib/vivarium.rb', line 427 def unregister_pid(pid) @config_root_targets.delete(pid) @config_spawned_targets.clear rescue KeyError nil end |