class Wyrm::Hole::Mouth

This pretends to be just enough of an IO that we can use a queue to connect a dump to a restore.

Named for the mouth of a wormhole. Cos finding a good name for it is hard.

Constants

DEFAULT_QUEUE_SIZE

Public Class Methods

new( queue_size: DEFAULT_QUEUE_SIZE) click to toggle source
# File lib/wyrm/hole.rb, line 37
def initialize( queue_size: DEFAULT_QUEUE_SIZE)
  raise '>= ruby-2.3.0 needed because we use Queue#close' if RUBY_VERSION < '2.3.0'
  @queue_size = queue_size
end

Public Instance Methods

deq() click to toggle source
# File lib/wyrm/hole.rb, line 61
def deq
  queue.deq or raise StopIteration
rescue StopIteration
  raise "nil from deq, but queue not empty" unless queue.empty?
  raise
end
enq( value ) click to toggle source

interface for codec

# File lib/wyrm/hole.rb, line 59
def enq( value ); queue.enq value end
eof?() click to toggle source

eof after flush has been called and queue is empty.

# File lib/wyrm/hole.rb, line 72
def eof?; queue.closed? && queue.empty? end
flush() click to toggle source

this gets called by pump after dump is finished

# File lib/wyrm/hole.rb, line 75
def flush; queue.close end
queue() click to toggle source

queue could be empty while producer is generating something, use a SizedQueue so we don't run out of memory during a big transfer

# File lib/wyrm/hole.rb, line 53
def queue
  @queue ||= SizedQueue.new @queue_size
end
reset() click to toggle source

interface for Hole

# File lib/wyrm/hole.rb, line 44
def reset
  if @queue
    @queue.close.clear
    @queue = nil
  end
end