class Rbgo::Channel::BufferChan

BufferChan

Public Class Methods

new(max) click to toggle source
Calls superclass method Rbgo::Channel::Chan::new
# File lib/rbgo/select_chan.rb, line 263
def initialize(max)
  super(max)
  @mutex              = Mutex.new
  @cond               = ConditionVariable.new
  self.ios            = Set.new
  self.register_mutex = Mutex.new
end

Public Instance Methods

<<(obj, nonblock = false)
Alias for: push
clear() click to toggle source
Calls superclass method
# File lib/rbgo/select_chan.rb, line 317
def clear
  super
  notify
  self
end
close() click to toggle source
Calls superclass method
# File lib/rbgo/select_chan.rb, line 323
def close
  @mutex.synchronize do
    super
    notify
    @cond.broadcast
    self
  end
end
deq(nonblock = false)
Alias for: pop
enq(obj, nonblock = false)
Alias for: push
pop(nonblock = false) click to toggle source
Calls superclass method
# File lib/rbgo/select_chan.rb, line 292
def pop(nonblock = false)
  @mutex.synchronize do
    res = nil
    ok  = true
    ok  = false if empty? && closed?
    begin
      if nonblock
        res = super(true)
      else
        while empty? && !closed?
          @cond.wait(@mutex)
        end
        ok  = false if closed?
        res = super(false)
      end
      notify
      @cond.broadcast
    rescue ThreadError
      raise unless closed?
      ok = false
    end
    [res, ok]
  end
end
Also aliased as: deq, shift
push(obj, nonblock = false) click to toggle source
Calls superclass method
# File lib/rbgo/select_chan.rb, line 271
def push(obj, nonblock = false)
  @mutex.synchronize do
    begin
      if nonblock
        super(obj, true)
      else
        while length == queue_max && !closed?
          @cond.wait(@mutex)
        end
        super(obj, false)
      end
      notify
      @cond.broadcast
      self
    rescue ThreadError
      raise ClosedQueueError.new if closed?
      raise
    end
  end
end
Also aliased as: <<, enq
shift(nonblock = false)
Alias for: pop