Class DRb::TimerIdConv::TimerHolder2
In: lib/drb/timeridconv.rb
Parent: Object

Methods

add   alternate   fetch   include?   keeper   new   peek  

Included Modules

MonitorMixin

Classes and Modules

Class DRb::TimerIdConv::TimerHolder2::InvalidIndexError

Public Class methods

[Source]

    # File lib/drb/timeridconv.rb, line 11
11:       def initialize(timeout=600)
12:         super()
13:         @sentinel = Object.new
14:         @gc = {}
15:         @curr = {}
16:         @renew = {}
17:         @timeout = timeout
18:         @keeper = keeper
19:       end

Public Instance methods

[Source]

    # File lib/drb/timeridconv.rb, line 21
21:       def add(obj)
22:         synchronize do 
23:           key = obj.__id__
24:           @curr[key] = obj
25:           return key
26:         end
27:       end

[Source]

    # File lib/drb/timeridconv.rb, line 29
29:       def fetch(key, dv=@sentinel)
30:         synchronize do 
31:           obj = peek(key)
32:           if obj == @sentinel
33:             return dv unless dv == @sentinel
34:             raise InvalidIndexError
35:           end
36:           @renew[key] = obj # KeepIt
37:           return obj
38:         end
39:       end

[Source]

    # File lib/drb/timeridconv.rb, line 41
41:       def include?(key)
42:         synchronize do 
43:           obj = peek(key)
44:           return false if obj == @sentinel
45:           true
46:         end
47:       end

[Source]

    # File lib/drb/timeridconv.rb, line 49
49:       def peek(key)
50:         synchronize do 
51:           return @curr.fetch(key, @renew.fetch(key, @gc.fetch(key, @sentinel)))
52:         end
53:       end

Private Instance methods

[Source]

    # File lib/drb/timeridconv.rb, line 56
56:       def alternate
57:         synchronize do
58:           @gc = @curr       # GCed
59:           @curr = @renew
60:           @renew = {}
61:         end
62:       end

[Source]

    # File lib/drb/timeridconv.rb, line 64
64:       def keeper
65:         Thread.new do
66:           loop do
67:             size = alternate
68:             sleep(@timeout)
69:           end
70:         end
71:       end

[Validate]