Class: Rod::Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/rod/cache.rb

Defined Under Namespace

Classes: InternalMap

Instance Method Summary collapse

Constructor Details

#initializeCache

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

#clearObject



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

#eachObject



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