class TestProf::Utils::SizedOrderedSet

Ordered set with capacity

def <<(item)

def <<(item)
  return if data.size == max_size &&
    comparator.call(data.last, item)
  # Find an index of a smaller element
  index = data.bsearch_index { |x| !comparator.call(x, item) }
  if index.nil?
    data << item
  else
    data.insert(index, item)
  end
  data.pop if data.size > max_size
  data.size
end

def each(&block)

def each(&block)
  if block
    data.each(&block)
  else
    data.each
  end
end

def empty?

def empty?
  size.zero?
end

def initialize(max_size, sort_by: nil, &block)

def initialize(max_size, sort_by: nil, &block)
  @max_size = max_size
  @comparator =
    if block
      block
    elsif !sort_by.nil?
      ->(x, y) { x[sort_by] >= y[sort_by] }
    else
      ->(x, y) { x >= y }
    end
  @data = []
end

def size

def size
  data.size
end

def to_a

def to_a
  data.dup
end