123456789_123456789_123456789_123456789_123456789_

Class: Concurrent::Channel::Buffer::Ticker

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: Concurrent::Channel::Buffer::Timer
Defined in: lib/concurrent-ruby-edge/concurrent/channel/buffer/ticker.rb

Class Method Summary

Base - Inherited

Instance Attribute Summary

Timer - Inherited

Base - Inherited

#blocking?

Predicate indicating if this buffer will block Concurrent::Channel#put operations once it reaches its maximum capacity.

#capacity

The maximum number of values which can be Concurrent::Channel#put onto the buffer it becomes full.

#closed?

Predicate indicating is this buffer closed.

#empty?

Predicate indicating if the buffer is empty.

#full?

Predicate indicating if the buffer is full.

#size

The number of items currently in the buffer.

#buffer, #buffer=, #capacity=, #closed=,
#ns_closed?

Predicate indicating is this buffer closed.

#ns_empty?

Predicate indicating if the buffer is empty.

#ns_full?

Predicate indicating if the buffer is full.

#size=

Instance Method Summary

Timer - Inherited

Base - Inherited

#close

Close the buffer, preventing new items from being added.

#next

Take the next “item” from the buffer and also return a boolean indicating if “more” items can be taken.

#offer

Put an item onto the buffer if possible.

#poll

Take the next item from the buffer if one is available else return immediately.

#put

Put an item onto the buffer if possible.

#take

Take an item from the buffer if one is available.

#ns_initialize,
#ns_size

The number of items currently in the buffer.

Synchronization::LockableObject - Inherited

Constructor Details

This class inherits a constructor from Concurrent::Channel::Buffer::Base

Instance Method Details

#do_poll (private)

[ GitHub ]

  
# File 'lib/concurrent-ruby-edge/concurrent/channel/buffer/ticker.rb', line 20

def do_poll
  synchronize do
    if ns_closed?
      return Concurrent::NULL, false
    elsif (now = Concurrent.monotonic_time) >= @next_tick
      tick = Concurrent::Channel::Tick.new(@next_tick)
      @next_tick = now + @interval
      return tick, true
    else
      return nil, true
    end
  end
end

#ns_initialize(interval) (private)

[ GitHub ]

  
# File 'lib/concurrent-ruby-edge/concurrent/channel/buffer/ticker.rb', line 14

def ns_initialize(interval)
  @interval = interval.to_f
  @next_tick = Concurrent.monotonic_time + interval
  self.capacity = 1
end