Class: Farce::Strict::WeakValueMap

Inherits:
Abstract::WeakValueMap show all
Includes:
Farce::Shareable::Delegated
Defined in:
lib/farce/strict/weak_value_map.rb

Overview

A Ractor-shareable concurrent map with strong shareable keys and weak shareable values.

Examples:

Caching a value without keeping it alive

value = Object.new.freeze
map   = Farce::Strict::WeakValueMap.new({ result: value })
map[:result].equal?(value) # => true

# The entry can disappear once its value is collected.
value = nil

Instance Method Summary collapse

Methods included from Farce::Shareable

#ractor_shareable?

Methods inherited from Abstract::WeakValueMap

#weak_values?

Methods inherited from Abstract::ConcurrentMap

#[], #[]=, #clear, #compact!, #compact_blank!, #compare_and_set, #compare_keys_by_identity?, #compare_values_by_identity?, #delete, #delete_if, #each, #each_key, #each_value, #fetch, #get, #getkey, #keep_if, #key?, #keys, #merge!, #reject!, #reverse_merge!, #select!, #size, #store, #store_if_absent, #swap, #transform_values!, #update, #upsert, #values, #wait_until, #wait_until_changed, #wait_until_match, #wait_until_non_nil, #wait_until_value, #wait_while, #wait_while_match, #wait_while_value

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, #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(initial_mapping = nil, normalize_keys: nil, compare_by_identity: false, compare_keys_by_identity: compare_by_identity, compare_values_by_identity: compare_by_identity) ⇒ WeakValueMap

Returns a new instance of WeakValueMap.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/farce/strict/weak_value_map.rb', line 19

def initialize(
  initial_mapping = nil,
  normalize_keys: nil,
  compare_by_identity: false,
  compare_keys_by_identity: compare_by_identity,
  compare_values_by_identity: compare_by_identity
)
  initial_mapping = convert_entries(initial_mapping)
  restoring  = Internal::KeyNormalizer.restoration?(normalize_keys)
  normalizer = Internal::KeyNormalizer.build(normalize_keys, shareable: true)
  populate   = initial_mapping && ((normalizer && !restoring) || !initial_mapping.is_a?(Hash))
  @map       = Internal::StrictWeakValueMap.new(
    populate ? nil : initial_mapping,
    compare_by_identity:,
    compare_keys_by_identity:,
    compare_values_by_identity:,
  )
  Internal::KeyNormalizer.install_concurrent(self, normalizer) unless restoring
  initial_mapping.each { |key, value| self[key] = value } if populate
  Internal::KeyNormalizer.install_concurrent(self, normalizer) if restoring
  super()
end

Instance Method Details

#shareable_keys? ⇒ Boolean

Returns:

  • (Boolean)


42
# File 'lib/farce/strict/weak_value_map.rb', line 42

def shareable_keys? = true

#shareable_values? ⇒ Boolean

Returns:

  • (Boolean)


43
# File 'lib/farce/strict/weak_value_map.rb', line 43

def shareable_values? = true