Sha256: 34323be1d84a8fae391b70f235de9b803c86640aafa0a97932e3a363b7cb1331
Contents?: true
Size: 1007 Bytes
Versions: 2
Compression:
Stored size: 1007 Bytes
Contents
module Alf class Buffer # # Keeps tuples ordered on a specific key # # Example: # # sorted = Buffer::Sorted.new Ordering.new(...) # sorted.add_all(...) # sorted.each do |tuple| # # tuples are ordered here # end # class Sorted < Buffer # # Creates a buffer instance with an ordering key # def initialize(ordering) @ordering = ordering @buffer = [] end # # Adds all elements of an iterator to the buffer # def add_all(enum) sorter = @ordering.sorter @buffer = merge_sort(@buffer, enum.to_a.sort(&sorter), sorter) end # # (see Buffer#each) # def each @buffer.each(&Proc.new) end private # Implements a merge sort between two iterators s1 and s2 def merge_sort(s1, s2, sorter) (s1 + s2).sort(&sorter) end end # class Sorted end # class Buffer end # module Alf
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
alf-0.10.1 | lib/alf/buffer/sorted.rb |
alf-0.10.0 | lib/alf/buffer/sorted.rb |