Class: Lazily::Prefetcher

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/lazily/prefetching.rb

Instance Method Summary collapse

Methods included from Enumerable

#[], #chunk, #collect, #compact, #concat, #drop, #drop_while, #flat_map, #flatten, #grep, #in_threads, #lazily, #lazy?, #prefetch, #reject, #select, #slice_before, #take, #take_while, #uniq, #zip

Methods included from Enumerable

#lazily

Constructor Details

#initialize(source, buffer_size) ⇒ Prefetcher

Returns a new instance of Prefetcher.



17
18
19
20
# File 'lib/lazily/prefetching.rb', line 17

def initialize(source, buffer_size)
  @source = source.to_enum
  @buffer_size = buffer_size
end

Instance Method Details

#each(&block) ⇒ Object



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

def each(&block)
  return @source.each(&block) if @buffer_size <= 0
  buffered_elements = []
  i = 0
  @source.each do |element|
    slot = i % @buffer_size
    if i >= @buffer_size
      yield buffered_elements[slot]
    end
    buffered_elements[slot] = element
    i += 1
  end
  buffered_elements.size.times do
    slot = i % buffered_elements.size
    yield buffered_elements[slot]
    i += 1
  end
end