5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/laziest/group.rb', line 5
def initialize enumerator, &block
@hash = {}
@lazy_arrays = {}
@buffers = ::Hash.new{|h,k|h[k]=[]}
@enumerator = enumerator
@group_block = block
@enum_mutex = ::Mutex.new
super() do
@lazy_arrays.each do |arr|
arr.__force__
end
::Kernel.loop do
val = enumerator.next
key = yield val
(@hash[key] ||= []) << val
end
@hash.delete_if {|k,v| v.empty?}
@lazy_arrays = nil
@buffers = nil
@group_block = nil
@enum_mutex = nil
@hash
end
end
|