Class: Fairy::PGroupBy::DepqMergeSortBuffer2::StSt

Inherits:
Fairy::PGroupBy::DepqMergeSortBuffer::StSt show all
Defined in:
lib/fairy/node/p-group-by.rb

Instance Method Summary collapse

Methods inherited from Fairy::PGroupBy::DepqMergeSortBuffer::StSt

#initialize

Methods inherited from MergeSortBuffer::StSt

#initialize, #read_line

Constructor Details

This class inherits a constructor from Fairy::PGroupBy::DepqMergeSortBuffer::StSt

Instance Method Details

#each(&block) ⇒ Object



668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
# File 'lib/fairy/node/p-group-by.rb', line 668

def each(&block)
  key = @buffers.find_min.first.first
  values = KeyValueStream.new(key, self)
  @fiber = Fiber.new{yield values}
  while buf_min = @buffers.find_min
    kv, buf = buf_min
    if key == kv[0]
      values.concat kv[1]
      @fiber.resume
    else
      values.push_eos
      @fiber.resume
      key = kv[0]
      values = KeyValueStream.new(key, self)
      @fiber = Fiber.new{yield values}
      values.concat kv[1]
      @fiber.resume
    end
    
    unless line = read_line(buf.io)
      buf.close!
      @buffers.delete_min
      next
    end
#	    @buffers.replace_min [line, buf], line[0]
    buf_min[0] = line
    loc = @buffers.find_min_locator
    loc.update_priority line[0]
  end
  values.push_eos
  @fiber.resume
end