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