Sha256: 4296f32e801a495538c6382fa7b40008788359839d0acab9ff64eb4025a4f6d7

Contents?: true

Size: 1.53 KB

Versions: 16

Compression:

Stored size: 1.53 KB

Contents

require 'concurrent/channel/buffer/base'

module Concurrent
  class Channel
    module Buffer

      # A non-blocking, buffered buffer of fixed maximum capacity. When the
      # maximum capacity is reached subsequent {#put} and {#offer} operations
      # will complete and the item will be `put`, but the oldest elements in
      # the buffer will be discarded (not transferred).
      class Sliding < Buffered

        # @!method put(item)
        #   @!macro channel_buffer_put
        #
        #   When the buffer is full, this method will return `true`
        #   immediately and the item will be inserted, but the oldest
        #   elements in the buffer will be discarded (not transferred).

        # @!method offer(item)
        #   @!macro channel_buffer_offer
        #
        #   When the buffer is full, this method will return `true`
        #   immediately and the item will be inserted, but the oldest
        #   elements in the buffer will be discarded (not transferred).

        # @!method full?
        #   @!macro channel_buffer_full_question
        #
        #   Always returns `false`.

        # @!macro channel_buffer_blocking_question
        #
        # Always returns `false`.
        def blocking?
          false
        end

        private

        # @!macro channel_buffer_full_question
        def ns_full?
          false
        end

        # @!macro channel_buffer_put
        def ns_put_onto_buffer(item)
          buffer.shift if buffer.size == capacity
          buffer.push(item)
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
concurrent-ruby-edge-0.6.0 lib/concurrent-ruby-edge/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.6.0.pre1 lib/concurrent-ruby-edge/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.5.0 lib-edge/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.4.1 lib-edge/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.4.0.pre2 lib-edge/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.4.0.pre1 lib-edge/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.2.4 lib/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.3.1 lib/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.3.0 lib/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.2.3 lib/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.2.3.pre3 lib/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.2.2 lib/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.2.1 lib/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.2.0 lib/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.2.0.pre5 lib/concurrent/channel/buffer/sliding.rb
concurrent-ruby-edge-0.2.0.pre4 lib/concurrent/channel/buffer/sliding.rb