Class: Farce::Local::TreeMap
- Inherits:
-
Abstract::TreeMap
- Object
- Abstract::Map
- Abstract::TreeMap
- Farce::Local::TreeMap
- Includes:
- Shareable::Tracked
- Defined in:
- lib/farce/local/tree_map.rb
Overview
A shareable tree map with independent mutable storage in each scope.
Instance Attribute Summary
Attributes included from Scoped
Instance Method Summary collapse
-
#initialize(entries = nil, scope: :ractor) ⇒ TreeMap
constructor
Valid scopes are: *
:ractor- The value is shared by all threads within the same Ractor.
Methods included from Shareable
Methods inherited from Abstract::TreeMap
#[], #[]=, #clear, #compare_keys_by_identity?, #compare_values_by_identity?, #delete, #each, #each_key, #each_value, #empty?, #fetch, #first_key, #getkey, #key?, #keys, #last_key, #length, #pop, #shareable_keys?, #shift, #size, #store_if_absent, #values
Methods included from Abstract::DuplicableMap
#compact, #compact_blank, #deep_dup, #duplicable?, #except, #flatten, #invert, #merge, #reject, #reverse_merge, #select, #slice, #stringify_keys, #symbolize_keys, #to_proc, #transform_keys, #transform_values, #with_indifferent_access
Methods inherited from Abstract::Map
#[], #[]=, #as_extended_json, #as_json, #assert_valid_keys, #assoc, #bson_type, #clear, #compare_by_identity?, #compare_keys_by_identity?, #compare_values_by_identity?, #deconstruct_keys, #delete, #dig, #each, #each_key, #each_pair, #each_value, #empty?, #fetch, #fetch_values, #getkey, #has_key?, #key, #key?, #keys, #length, #rassoc, #shareable_keys?, #shareable_values?, #size, #store, #store_if_absent, #to_a, #to_bson, #to_bson_normalized_value, #to_cbor, #to_h, #to_hash, #to_json, #to_msgpack, #to_query, #to_s, #value?, #values_at, #weak_keys?, #weak_values?
Constructor Details
#initialize(entries = nil, scope: :ractor) ⇒ TreeMap
Valid scopes are:
:ractor- The value is shared by all threads within the same Ractor.:thread_group- The value is shared by all threads within the same thread group.:thread- The value is shared by all fibers within the same thread.:fiber_storage- The value is shared by all fibers using the same storage. Unless explicitly specified, storage is inherited from the parent fiber for blocking fibers, but not for non-blocking fibers (such as those created by Scheduler#schedule).:fiber- Each fiber has its own independent value.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/farce/local/tree_map.rb', line 14 class TreeMap < Abstract::TreeMap include Shareable::Tracked include Scoped::Tracked State = Data.define(:map, :key_locks) private_constant :State protected def internal_map = scoped_value.map def transaction_key_locks = scoped_value.key_locks private def freeze_scoped_value(state) = state.map.freeze def new_copied_scoped_value(map) State.new(map, Internal::OrderedKeyLockMap.new) end def with_key_lock(key, &) = scoped_value.key_locks.synchronize(key, &) def new_scoped_value(entries = nil, **) unless Internal::KeyNormalizer.canonical_entries?(entries) return State.new(Internal::TreeMap.new(entries, **), Internal::OrderedKeyLockMap.new) end map = Internal::TreeMap.new(nil, **) entries.each { map[_1] = _2 } State.new(map, Internal::OrderedKeyLockMap.new) end end |