Class: Pwrake::NBIO::FiberReaderQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/pwrake/nbio.rb

Overview


Instance Method Summary collapse

Constructor Details

#initialize(reader) ⇒ FiberReaderQueue

Returns a new instance of FiberReaderQueue.



382
383
384
385
386
387
# File 'lib/pwrake/nbio.rb', line 382

def initialize(reader)
  @reader = reader
  @q = []
  @waiter = []
  @halting = false
end

Instance Method Details

#deqObject Also known as: get_line



395
396
397
398
399
400
401
402
# File 'lib/pwrake/nbio.rb', line 395

def deq
  while @q.empty?
    return nil if @halting
    @waiter.push(Fiber.current)
    @reader.select_io
  end
  @q.shift
end

#enq(x) ⇒ Object



389
390
391
392
393
# File 'lib/pwrake/nbio.rb', line 389

def enq(x)
  @q.push(x)
  f = @waiter.shift
  f.resume if f
end

#haltObject



406
407
408
409
410
411
412
413
# File 'lib/pwrake/nbio.rb', line 406

def halt
  @halting = true
  while f = @waiter.shift
    f.resume
  end
ensure
  @halting = false
end