Class: ThreadSafe::NonConcurrentCacheBackend
- Defined in:
- lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb
Direct Known Subclasses
Instance Method Summary collapse
- #[](key) ⇒ Object (also: #_get)
- #[]=(key, value) ⇒ Object (also: #_set)
- #clear ⇒ Object
- #compute(key) ⇒ Object
- #compute_if_absent(key) ⇒ Object
- #compute_if_present(key) ⇒ Object
- #delete(key) ⇒ Object
- #delete_pair(key, value) ⇒ Object
- #each_pair ⇒ Object
- #get_and_set(key, value) ⇒ Object
- #get_or_default(key, default_value) ⇒ Object
-
#initialize(options = nil) ⇒ NonConcurrentCacheBackend
constructor
WARNING: all public methods of the class must operate on the @backend directly without calling each other.
- #key?(key) ⇒ Boolean
- #merge_pair(key, value) ⇒ Object
- #replace_if_exists(key, new_value) ⇒ Object
- #replace_pair(key, old_value, new_value) ⇒ Object
- #size ⇒ Object
- #value?(value) ⇒ Boolean
Constructor Details
#initialize(options = nil) ⇒ NonConcurrentCacheBackend
WARNING: all public methods of the class must operate on the @backend directly without calling each other. This is important because of the SynchronizedCacheBackend which uses a non-reentrant mutex for perfomance reasons.
5 6 7 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 5 def initialize( = nil) @backend = {} end |
Instance Method Details
#[](key) ⇒ Object Also known as: _get
9 10 11 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 9 def [](key) @backend[key] end |
#[]=(key, value) ⇒ Object Also known as: _set
13 14 15 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 13 def []=(key, value) @backend[key] = value end |
#clear ⇒ Object
86 87 88 89 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 86 def clear @backend.clear self end |
#compute(key) ⇒ Object
47 48 49 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 47 def compute(key) store_computed_value(key, yield(@backend[key])) end |
#compute_if_absent(key) ⇒ Object
17 18 19 20 21 22 23 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 17 def compute_if_absent(key) if NULL != (stored_value = @backend.fetch(key, NULL)) stored_value else @backend[key] = yield end end |
#compute_if_present(key) ⇒ Object
41 42 43 44 45 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 41 def compute_if_present(key) if NULL != (stored_value = @backend.fetch(key, NULL)) store_computed_value(key, yield(stored_value)) end end |
#delete(key) ⇒ Object
73 74 75 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 73 def delete(key) @backend.delete(key) end |
#delete_pair(key, value) ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 77 def delete_pair(key, value) if pair?(key, value) @backend.delete(key) true else false end end |
#each_pair ⇒ Object
91 92 93 94 95 96 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 91 def each_pair dupped_backend.each_pair do |k, v| yield k, v end self end |
#get_and_set(key, value) ⇒ Object
59 60 61 62 63 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 59 def get_and_set(key, value) stored_value = @backend[key] @backend[key] = value stored_value end |
#get_or_default(key, default_value) ⇒ Object
102 103 104 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 102 def get_or_default(key, default_value) @backend.fetch(key, default_value) end |
#key?(key) ⇒ Boolean
65 66 67 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 65 def key?(key) @backend.key?(key) end |
#merge_pair(key, value) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 51 def merge_pair(key, value) if NULL == (stored_value = @backend.fetch(key, NULL)) @backend[key] = value else store_computed_value(key, yield(stored_value)) end end |
#replace_if_exists(key, new_value) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 34 def replace_if_exists(key, new_value) if NULL != (stored_value = @backend.fetch(key, NULL)) @backend[key] = new_value stored_value end end |
#replace_pair(key, old_value, new_value) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 25 def replace_pair(key, old_value, new_value) if pair?(key, old_value) @backend[key] = new_value true else false end end |
#size ⇒ Object
98 99 100 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 98 def size @backend.size end |
#value?(value) ⇒ Boolean
69 70 71 |
# File 'lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb', line 69 def value?(value) @backend.value?(value) end |