Class: Rod::Cache
- Inherits:
-
Object
- Object
- Rod::Cache
- Defined in:
- lib/rod/cache.rb
Defined Under Namespace
Classes: InternalMap
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
- #clear ⇒ Object
- #delete(key) ⇒ Object
- #each ⇒ Object
-
#initialize ⇒ Cache
constructor
A new instance of Cache.
Constructor Details
#initialize ⇒ Cache
Returns a new instance of Cache.
26 27 28 29 |
# File 'lib/rod/cache.rb', line 26 def initialize @map = {} @direct_values_map = {} end |
Instance Method Details
#[](key) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/rod/cache.rb', line 31 def [](key) if @direct_values_map[key] return @map[key] else value_id = nil value_id = @map[key] return value_id if value_id.nil? begin return ObjectSpace._id2ref(value_id) rescue RangeError @map.delete(key) return nil end end end |
#[]=(key, value) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/rod/cache.rb', line 47 def []=(key,value) @direct_values_map.delete(key) case value when Fixnum, Symbol, FalseClass, TrueClass, NilClass @map[key] = value @direct_values_map[key] = true else @map[key] = value.object_id InternalMap.instance.register(value,key,@map) end end |
#clear ⇒ Object
59 60 61 62 |
# File 'lib/rod/cache.rb', line 59 def clear @map.clear @direct_values_map.clear end |
#delete(key) ⇒ Object
64 65 66 67 |
# File 'lib/rod/cache.rb', line 64 def delete(key) @map.delete(key) @direct_values_map.delete(key) end |
#each ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/rod/cache.rb', line 69 def each if block_given? @map.each do |key,value| begin yield self[key] end end else enum_for(:each) end end |