Class: Rivulet::WindowBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/rivulet/window_builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(stream:, mode:, size: nil, rule: nil, step: 1) ⇒ WindowBuilder

Returns a new instance of WindowBuilder.



5
6
7
8
9
10
11
# File 'lib/rivulet/window_builder.rb', line 5

def initialize(stream:, mode:, size: nil, rule: nil, step: 1)
  @stream = stream
  @mode = mode
  @size = size
  @rule = rule
  @step = step
end

Instance Method Details

#countObject



81
82
83
84
85
# File 'lib/rivulet/window_builder.rb', line 81

def count
  n = 0
  iterate { |_| n += 1 }
  n
end

#each_window(&block) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/rivulet/window_builder.rb', line 13

def each_window(&block)
  results = []
  iterate do |window|
    value = block.call(window)
    results << value if value
  end
  results
end

#first(k = nil, &block) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/rivulet/window_builder.rb', line 60

def first(k = nil, &block)
  if k
    results = []
    iterate do |window|
      value = block ? block.call(window) : window
      results << value if value
      break if results.size == k
    end
    results
  else
    result = nil
    iterate do |window|
      result = block ? block.call(window) : window
      break if result
    end
    result
  end
end

#max_by(k = nil, &block) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/rivulet/window_builder.rb', line 22

def max_by(k = nil, &block)
  if k
    top = []
    iterate do |window|
      score = block.call(window)
      top << score
      top.sort!.shift if top.size > k
    end
    top.sort.reverse
  else
    best = nil
    iterate do |window|
      score = block.call(window)
      best = score if best.nil? || score > best
    end
    best
  end
end

#min_by(k = nil, &block) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/rivulet/window_builder.rb', line 41

def min_by(k = nil, &block)
  if k
    top = []
    iterate do |window|
      score = block.call(window)
      top << score
      top.sort!.pop if top.size > k
    end
    top.sort
  else
    best = nil
    iterate do |window|
      score = block.call(window)
      best = score if best.nil? || score < best
    end
    best
  end
end

#take(k, &block) ⇒ Object



79
# File 'lib/rivulet/window_builder.rb', line 79

def take(k, &block) = first(k, &block)