Sha256: 19b71518dbeaf331524aa85c1721cb76687a0f8d6cf80384c081461036005e65
Contents?: true
Size: 1017 Bytes
Versions: 28
Compression:
Stored size: 1017 Bytes
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 private def rotational_idx(idx) idx % @capacity end end end end
Version data entries
28 entries across 28 versions & 2 rubygems