Class: Async::LimitedQueue
Instance Attribute Summary collapse
Attributes inherited from Queue
#items
Instance Method Summary
collapse
Methods inherited from Queue
#async, #each, #empty?, #size
#signal
Methods inherited from Condition
#empty?, #signal, #wait
Constructor Details
#initialize(limit = 1, **options) ⇒ LimitedQueue
Returns a new instance of LimitedQueue.
81
82
83
84
85
86
87
|
# File 'lib/async/queue.rb', line 81
def initialize(limit = 1, **options)
super(**options)
@limit = limit
@full = Notification.new
end
|
Instance Attribute Details
#limit ⇒ Object
Returns the value of attribute limit.
89
90
91
|
# File 'lib/async/queue.rb', line 89
def limit
@limit
end
|
Instance Method Details
#<<(item) ⇒ Object
96
97
98
99
100
101
102
|
# File 'lib/async/queue.rb', line 96
def <<(item)
while limited?
@full.wait
end
super
end
|
#dequeue ⇒ Object
117
118
119
120
121
122
123
|
# File 'lib/async/queue.rb', line 117
def dequeue
item = super
@full.signal
return item
end
|
#enqueue(*items) ⇒ Object
104
105
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/async/queue.rb', line 104
def enqueue *items
while !items.empty?
while limited?
@full.wait
end
available = @limit - @items.size
@items.concat(items.shift(available))
self.signal unless self.empty?
end
end
|
#limited? ⇒ Boolean
92
93
94
|
# File 'lib/async/queue.rb', line 92
def limited?
@items.size >= @limit
end
|