Class: Farce::WeakKeyMap

Inherits:
Abstract::WeakKeyMap show all
Includes:
Shareable::Delegated, Internal::MapValueModes
Defined in:
lib/farce/weak_key_map.rb

Overview

A concurrent map with weak shareable keys and strongly retained values. Transfer modes apply only to values. Keys are stored directly. Entries disappear after their keys are collected. A value that references its key, including through an envelope, can keep that key alive.

Examples:

Associating mutable metadata with a shareable object

owner      = Object.new.freeze
map        = Farce::WeakKeyMap.new
map[owner] = { visits: 1 }
map.update(owner) { || { visits: [:visits] + 1 } }
map[owner] # => { visits: 2 }

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

Method Summary

Methods included from Shareable

#initialize, #ractor_shareable?

Methods inherited from Abstract::WeakKeyMap

#weak_keys?

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, #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?