Sha256: dad5917ffde61490f324cc00dc8b80109a393ad4820642a0c411a2b22ffd8f3b

Contents?: true

Size: 1.34 KB

Versions: 13

Compression:

Stored size: 1.34 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

     unless method_defined?(:nitems)
       def nitems
         compact.length
       end
     end
     
     private
     
     def rotational_idx(idx)
       idx % @capacity
     end
   end
 end
end

Version data entries

13 entries across 13 versions & 5 rubygems

Version Path
bluepill-0.0.46 lib/bluepill/util/rotational_array.rb
bluepill-0.0.45 lib/bluepill/util/rotational_array.rb
mwotton-bluepill-0.0.44 lib/bluepill/util/rotational_array.rb
ra-bluepill-0.0.48 lib/bluepill/util/rotational_array.rb
ra-bluepill-0.0.47 lib/bluepill/util/rotational_array.rb
ra-bluepill-0.0.46 lib/bluepill/util/rotational_array.rb
ra-bluepill-0.0.45 lib/bluepill/util/rotational_array.rb
ra-bluepill-0.0.44 lib/bluepill/util/rotational_array.rb
evented_bluepill-0.0.46 lib/bluepill/util/rotational_array.rb
bluepill-0.0.44 lib/bluepill/util/rotational_array.rb
sumskyi-bluepill-0.0.42.1 lib/bluepill/util/rotational_array.rb
sumskyi-bluepill-0.0.42.0 lib/bluepill/util/rotational_array.rb
bluepill-0.0.43 lib/bluepill/util/rotational_array.rb