Sha256: 6188f5783d935f355de5cfd0ea429a7b4d26e6057562f81525516bf2047a491a

Contents?: true

Size: 670 Bytes

Versions: 1

Compression:

Stored size: 670 Bytes

Contents

# frozen_string_literal: true

module SlowEnumeratorTools
  module Bufferer
    def self.buffer(enum, size)
      queue = SizedQueue.new(size)
      thread = SlowEnumeratorTools::Util.gen_collector_thread(enum, queue)
      gen_enumerator(queue, thread)
    end

    def self.gen_enumerator(queue, collector_thread)
      Enumerator.new do |y|
        loop do
          elem = queue.pop

          if SlowEnumeratorTools::Util::STOP_OK.equal?(elem)
            break
          elsif SlowEnumeratorTools::Util::STOP_ERR.equal?(elem)
            raise queue.pop
          end

          y << elem
        end
        collector_thread.join
      end.lazy
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
slow_enumerator_tools-1.1.0 lib/slow_enumerator_tools/bufferer.rb