Sha256: 7ea0565b8a6d8510ce7ccc562bcc09224e6183441d47eecbb011e6102b4f54f4

Contents?: true

Size: 1.24 KB

Versions: 15

Compression:

Stored size: 1.24 KB

Contents

module Bluepill
  module Util
   class RotationalArray < Array
     def initialize(size)
       super(size)
       
       @capacity = size
       @counter = 0
     end
     
     def push(value)
       idx = rotational_idx(@counter)
       self[idx] = value
       
       @counter += 1
       self
     end
     
     alias_method :<<, :push
     
     def pop
       raise "Cannot call pop on a rotational array"
     end

     def shift
       raise "Cannot call shift on a rotational array"
     end

     def unshift
       raise "Cannot call unshift on a rotational array"
     end
     
     def last
       return if @counter.zero?
       
       self[rotational_idx(@counter - 1)]
     end
     
     def first
       return if @counter.zero?
       return self[0] if @counter <= @capacity
       
      self[rotational_idx(@counter)]
     end
     
     def clear
      @counter = 0
      super
     end
     
     def each(&block)
       times = @counter >= @capacity ? @capacity : @counter
       start = @counter >= @capacity ? rotational_idx(@counter) : 0
       times.times do |i|
         block.call(self[rotational_idx(start + i)])
       end
     end
     
     private
     
     def rotational_idx(idx)
       idx % @capacity
     end
   end
 end
end

Version data entries

15 entries across 15 versions & 3 rubygems

Version Path
bluepill-0.0.42 lib/bluepill/util/rotational_array.rb
bluepill-0.0.40 lib/bluepill/util/rotational_array.rb
dylanvaughn-bluepill-0.0.40 lib/bluepill/util/rotational_array.rb
dylanvaughn-bluepill-0.0.39 lib/bluepill/util/rotational_array.rb
bluepill-0.0.39 lib/bluepill/util/rotational_array.rb
bluepill-0.0.38 lib/bluepill/util/rotational_array.rb
bluepill-0.0.37 lib/bluepill/util/rotational_array.rb
bluepill-0.0.36 lib/bluepill/util/rotational_array.rb
bluepill-0.0.35 lib/bluepill/util/rotational_array.rb
bluepill-0.0.34 lib/bluepill/util/rotational_array.rb
bluepill-0.0.33 lib/bluepill/util/rotational_array.rb
wijet-bluepill-0.0.33 lib/bluepill/util/rotational_array.rb
bluepill-0.0.32 lib/bluepill/util/rotational_array.rb
bluepill-0.0.31 lib/bluepill/util/rotational_array.rb
bluepill-0.0.30 lib/bluepill/util/rotational_array.rb