class Concurrent::Channel::Buffer::Timer
Public Instance Methods
next()
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 31 def next loop do tick, more = do_poll return tick, more if tick Thread.pass end end
offer(item)
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 16 def offer(item) false end
poll()
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 39 def poll tick, _ = do_poll tick = Concurrent::NULL unless tick tick end
put(item)
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 12 def put(item) false end
take()
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 20 def take loop do tick, _ = do_poll if tick return tick else Thread.pass end end end
Private Instance Methods
do_poll()
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 64 def do_poll synchronize do if ns_closed? return Concurrent::NULL, false elsif Concurrent.monotonic_time >= @tick # only one listener gets notified self.closed = true return Concurrent::Channel::Tick.new(@tick), false else return nil, true end end end
ns_empty?()
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 56 def ns_empty? false end
ns_full?()
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 60 def ns_full? true end
ns_initialize(delay)
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 47 def ns_initialize(delay) @tick = Concurrent.monotonic_time + delay.to_f self.capacity = 1 end
ns_size()
click to toggle source
# File lib/concurrent/channel/buffer/timer.rb, line 52 def ns_size 0 end