Class: OsCtl::Lib::Queue

Inherits:
Object
  • Object
show all
Defined in:
lib/libosctl/queue.rb

Overview

Replacement for stock Queue

Instance Method Summary collapse

Constructor Details

#initializeQueue

Returns a new instance of Queue.



4
5
6
7
8
# File 'lib/libosctl/queue.rb', line 4

def initialize
  @mutex = ::Mutex.new
  @cond = ConditionVariable.new
  @queue = []
end

Instance Method Details

#any?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/libosctl/queue.rb', line 67

def any?
  !empty?
end

#clearObject

Clear the queue



57
58
59
# File 'lib/libosctl/queue.rb', line 57

def clear
  sync { @queue.clear }
end

#empty?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/libosctl/queue.rb', line 62

def empty?
  sync { @queue.empty? }
end

#insert(v) ⇒ Object

Insert value to the beginning of the queue

Parameters:

  • v (any)


22
23
24
25
26
27
# File 'lib/libosctl/queue.rb', line 22

def insert(v)
  sync do
    @queue.insert(0, v)
    @cond.signal
  end
end

#lengthObject



71
72
73
# File 'lib/libosctl/queue.rb', line 71

def length
  sync { @queue.length }
end

#push(v) ⇒ Object Also known as: <<

Add value into queue



11
12
13
14
15
16
# File 'lib/libosctl/queue.rb', line 11

def push(v)
  sync do
    @queue << v
    @cond.signal
  end
end

#shift(block: true, timeout: nil) ⇒ Object Also known as: pop

Remove the first element from the queue and return it

If ‘block` is `true`, this method will block until there is something to return. If `block` is `false` and the queue is empty, `nil` is returned. If `timeout` is set and passes, `nil` is returned.

Parameters:

  • block (Boolean) (defaults to: true)

    block if the queue is empty

  • timeout (Integer, nil) (defaults to: nil)

    how many seconds to wait



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/libosctl/queue.rb', line 37

def shift(block: true, timeout: nil)
  sync do
    if @queue.any?
      @queue.shift

    elsif block # Wait for something to be pushed
      loop do
        @cond.wait(@mutex, timeout)
        break if @queue.any? || timeout
      end

      @queue.shift

    end
  end
end

#syncObject (protected)



83
84
85
# File 'lib/libosctl/queue.rb', line 83

def sync(&)
  @mutex.synchronize(&)
end

#to_aArray

Return the queued values as an array

Returns:

  • (Array)


77
78
79
# File 'lib/libosctl/queue.rb', line 77

def to_a
  sync { @queue.clone }
end