Sha256: d9fa990bf07748565995e03134e131731ef138eb216f52d018ffa72e411ece34

Contents?: true

Size: 1.05 KB

Versions: 34

Compression:

Stored size: 1.05 KB

Contents

module Celluloid
  class RingBuffer
    def initialize(size)
      @size = size
      @start = 0
      @count = 0
      @buffer = Array.new(size)
      @mutex = Mutex.new
    end

    def full?
      @count == @size
    end

    def empty?
      @count == 0
    end

    def push(value)
      @mutex.synchronize do
        stop = (@start + @count) % @size
        @buffer[stop] = value
        if full?
          @start = (@start + 1) % @size
        else
          @count += 1
        end
        value
      end
    end
    alias :<< :push

    def shift
      @mutex.synchronize do
        remove_element
      end
    end

    def flush
      values = []
      @mutex.synchronize do
        while !empty?
          values << remove_element
        end
      end
      values
    end

    def clear
      @buffer = Array.new(@size)
      @start = 0
      @count = 0
    end

    private

    def remove_element
      return nil if empty?
      value, @buffer[@start] = @buffer[@start], nil
      @start = (@start + 1) % @size
      @count -= 1
      value
    end
  end
end

Version data entries

34 entries across 32 versions & 7 rubygems

Version Path
honeybadger-2.4.0 vendor/gems/ruby/2.1.0/gems/celluloid-0.16.0/lib/celluloid/logging/ring_buffer.rb
honeybadger-2.4.0 vendor/gems/ruby/1.9.1/gems/celluloid-0.16.0/lib/celluloid/logging/ring_buffer.rb
honeybadger-2.4.0 vendor/gems/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/ring_buffer.rb
scoot-0.0.4 .bundle/gems/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/ring_buffer.rb
vagrant-cloudstack-1.1.0 vendor/bundle/gems/celluloid-0.16.0/lib/celluloid/logging/ring_buffer.rb
celluloid-essentials-0.20.0.pre14 lib/celluloid/logging/ring_buffer.rb
celluloid-essentials-0.20.0.pre13 lib/celluloid/logging/ring_buffer.rb
celluloid-essentials-0.20.0.pre12 lib/celluloid/logging/ring_buffer.rb
celluloid-0.16.0 lib/celluloid/logging/ring_buffer.rb
celluloid-0.16.0.pre3 lib/celluloid/logging/ring_buffer.rb
vagrant-tiktalik-0.0.3 vendor/bundle/ruby/2.0.0/gems/celluloid-0.15.2/lib/celluloid/logging/ring_buffer.rb
celluloid-0.16.0.pre2 lib/celluloid/logging/ring_buffer.rb
celluloid-0.16.0.pre lib/celluloid/logging/ring_buffer.rb
celluloid-0.15.2 lib/celluloid/logging/ring_buffer.rb
celluloid-0.15.1 lib/celluloid/logging/ring_buffer.rb
celluloid-0.15.0 lib/celluloid/logging/ring_buffer.rb
celluloid-0.15.0.pre2 lib/celluloid/logging/ring_buffer.rb
celluloid-0.15.0.pre lib/celluloid/logging/ring_buffer.rb
celluloid-0.14.1 lib/celluloid/logging/ring_buffer.rb
celluloid-0.14.1.pre lib/celluloid/logging/ring_buffer.rb