Class: Concurrent::LazyRegister
- Inherits:
-
Synchronization::Object
- Object
- Synchronization::Object
- Concurrent::LazyRegister
- Defined in:
- lib/concurrent/lazy_register.rb
Overview
**Edge Feature:** Edge features are under active development and may change frequently. They are expected not to keep backward compatibility (there may also lack tests and documentation). Semantic versions will be obeyed though. Features developed in ‘concurrent-ruby-edge` are expected to move to `concurrent-ruby` when final.
Hash-like collection that store lazys evaluated values.
Instance Method Summary collapse
-
#[](key) ⇒ Object
Element reference.
-
#initialize ⇒ LazyRegister
constructor
A new instance of LazyRegister.
-
#register(key) { ... } ⇒ LazyRegister
(also: #add, #store)
Element assignment.
-
#registered?(key) ⇒ true, false
(also: #key?, #has_key?)
Returns true if the given key is present.
-
#unregister(key) ⇒ LazyRegister
(also: #remove, #delete)
Un-registers the object under key, realized or not.
Methods inherited from Synchronization::Object
attr_atomic, attr_volatile, ensure_safe_initialization_when_final_fields_are_present, new, safe_initialization!, safe_initialization?, volatile_cas_fields
Constructor Details
#initialize ⇒ LazyRegister
Returns a new instance of LazyRegister.
23 24 25 26 |
# File 'lib/concurrent/lazy_register.rb', line 23 def initialize super self.data = {} end |
Instance Method Details
#[](key) ⇒ Object
Element reference. Retrieves the value object corresponding to the key object. Returns nil if the key is not found. Raises an exception if the stored item raised an exception when the block was evaluated.
36 37 38 39 |
# File 'lib/concurrent/lazy_register.rb', line 36 def [](key) delay = data[key] delay ? delay.value! : nil end |
#register(key) { ... } ⇒ LazyRegister Also known as: add, store
Element assignment. Associates the value given by value with the key given by key.
59 60 61 62 63 |
# File 'lib/concurrent/lazy_register.rb', line 59 def register(key, &block) delay = Delay.new(executor: :immediate, &block) update_data { |h| h.merge(key => delay) } self end |
#registered?(key) ⇒ true, false Also known as: key?, has_key?
Returns true if the given key is present.
45 46 47 |
# File 'lib/concurrent/lazy_register.rb', line 45 def registered?(key) data.key?(key) end |
#unregister(key) ⇒ LazyRegister Also known as: remove, delete
Un-registers the object under key, realized or not.
73 74 75 76 |
# File 'lib/concurrent/lazy_register.rb', line 73 def unregister(key) update_data { |h| h.dup.tap { |j| j.delete(key) } } self end |