Class: DRb::TimerIdConv::TimerHolder2

Inherits:
Object
  • Object
show all
Includes:
MonitorMixin
Defined in:
lib/drb/timeridconv.rb

Defined Under Namespace

Classes: InvalidIndexError

Instance Method Summary (collapse)

Methods included from MonitorMixin

extend_object, #mon_enter, #mon_exit, #mon_synchronize, #mon_try_enter, #new_cond

Constructor Details

- (TimerHolder2) initialize(timeout = 600)

A new instance of TimerHolder2



11
12
13
14
15
16
17
18
19
# File 'lib/drb/timeridconv.rb', line 11

def initialize(timeout=600)
	super()
	@sentinel = Object.new
	@gc = {}
	@curr = {}
	@renew = {}
	@timeout = timeout
	@keeper = keeper
end

Instance Method Details

- (Object) add(obj)



21
22
23
24
25
26
27
# File 'lib/drb/timeridconv.rb', line 21

def add(obj)
	synchronize do
	  key = obj.__id__
	  @curr[key] = obj
	  return key
	end
end

- (Object) fetch(key, dv = @sentinel)



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/drb/timeridconv.rb', line 29

def fetch(key, dv=@sentinel)
	synchronize do
	  obj = peek(key)
	  if obj == @sentinel
	    return dv unless dv == @sentinel
	    raise InvalidIndexError
	  end
	  @renew[key] = obj # KeepIt
	  return obj
	end
end

- (Boolean) include?(key)

Returns:

  • (Boolean)


41
42
43
44
45
46
47
# File 'lib/drb/timeridconv.rb', line 41

def include?(key)
	synchronize do
	  obj = peek(key)
	  return false if obj == @sentinel
	  true
	end
end

- (Object) peek(key)



49
50
51
52
53
# File 'lib/drb/timeridconv.rb', line 49

def peek(key)
	synchronize do
	  return @curr.fetch(key, @renew.fetch(key, @gc.fetch(key, @sentinel)))
	end
end