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
79
80
81
82
83
84
85
|
# File 'lib/async/queue.rb', line 79
def initialize(limit = 1, **options)
super(**options)
@limit = limit
@full = Notification.new
end
|
Instance Attribute Details
#limit ⇒ Object
Returns the value of attribute limit.
87
88
89
|
# File 'lib/async/queue.rb', line 87
def limit
@limit
end
|
Instance Method Details
#<<(item) ⇒ Object
94
95
96
97
98
99
100
|
# File 'lib/async/queue.rb', line 94
def <<(item)
while limited?
@full.wait
end
super
end
|
#dequeue ⇒ Object
115
116
117
118
119
120
121
|
# File 'lib/async/queue.rb', line 115
def dequeue
item = super
@full.signal
return item
end
|
#enqueue(*items) ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/async/queue.rb', line 102
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
90
91
92
|
# File 'lib/async/queue.rb', line 90
def limited?
@items.size >= @limit
end
|