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