class NmaxCore

frozen_string_literal = true

Attributes

max[R]
min[R]
size[R]

Public Class Methods

new(count_limit) click to toggle source
# File lib/nmax_core.rb, line 6
def initialize(count_limit)
  @buffer = []
  @min = nil
  @max = 0
  @size = 0
  @count_limit = count_limit
end

Public Instance Methods

items() click to toggle source
# File lib/nmax_core.rb, line 24
def items
  @buffer
end
propose(number_value) click to toggle source
# File lib/nmax_core.rb, line 14
def propose(number_value)
  sorted_insert(number_value)
  @min = number_value if @min.nil?

  return if @size <= @count_limit

  @buffer.shift
  @size -= 1
end

Private Instance Methods

insert(number_value) click to toggle source
# File lib/nmax_core.rb, line 40
def insert(number_value)
  index = @buffer.bsearch_index { |x| x >= number_value }
  return unless index && @buffer[index] != number_value

  @buffer.insert(index, number_value)
  @size += 1
end
push_to_begin(number_value) click to toggle source
# File lib/nmax_core.rb, line 54
def push_to_begin(number_value)
  @buffer.unshift number_value
  @min = number_value
  @size += 1
end
push_to_end(number_value) click to toggle source
# File lib/nmax_core.rb, line 48
def push_to_end(number_value)
  @buffer << number_value
  @max = number_value
  @size += 1
end
sorted_insert(number_value) click to toggle source
# File lib/nmax_core.rb, line 30
def sorted_insert(number_value)
  if number_value > @max
    push_to_end(number_value)
  elsif number_value < @min
    push_to_begin(number_value)
  else
    insert(number_value)
  end
end