# SizedQueue (Class)

In: | thread.rb
Parent: | Queue

This class represents queues of specified size capacity. The `push` operation may be blocked if the capacity is full.

## Methods

<< deq enq max max= new num_waiting pop push shift

## Public Class methods

new(max)

Creates a fixed-length queue with a maximum size of `max`.

[Source]

    # File thread.rb, line 331
      def initialize(max)
        raise ArgumentError, "queue size must be positive" unless max > 0
        @max = max
        @queue_wait = []
        @queue_wait.taint           # enable tainted comunication

        super()
      end

## Public Instance methods

max()

Returns the maximum size of the queue.

[Source]

    # File thread.rb, line 342
      def max
        @max
      end

max=(max)

Sets the maximum size of the queue.

[Source]

    # File thread.rb, line 349
      def max=(max)
        Thread.critical = true
        if max <= @max
          @max = max
          Thread.critical = false
        else
          diff = max - @max
          @max = max
          Thread.critical = false
          diff.times do
            begin
              t = @queue_wait.shift
              t.run if t
            rescue ThreadError
              retry
            end
          end
        end
        max
      end

push(obj)

[Source]

    # File thread.rb, line 370
      def push(obj)
        Thread.critical = true
        while @que.length >= @max
          @queue_wait.push Thread.current
          Thread.stop
          Thread.critical = true
        end
        super
      end

<<(obj)

Alias for push

enq(obj)

Alias for push

pop(*args)

[Source]

    # File thread.rb, line 382
      def pop(*args)
        retval = super
        Thread.critical = true
        if @que.length < @max
          begin
            t = @queue_wait.shift
            t.wakeup if t
          rescue ThreadError
            retry
          ensure
            Thread.critical = false
          end
          begin
            t.run if t
          rescue ThreadError
          end
        end
        retval
      end

shift(*args)

Alias for pop

deq(*args)

Alias for pop

num_waiting()

[Source]

    # File thread.rb, line 404
      def num_waiting
        @waiting.size + @queue_wait.size
      end

[Validate]