Class: BackgroundQueue::ServerLib::PriorityQueue
- Inherits:
-
Object
- Object
- BackgroundQueue::ServerLib::PriorityQueue
show all
- Defined in:
- lib/background_queue/server_lib/priority_queue.rb
Overview
internally implemented using a list of queues this does not do any locking, subclasses should look after any locking
Instance Method Summary
collapse
Constructor Details
Returns a new instance of PriorityQueue.
6
7
8
9
10
11
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 6
def initialize
@queues = []
@items = {}
@stalled_items = {}
@stalled = false
end
|
Instance Method Details
#each_item(&block) ⇒ Object
72
73
74
75
76
77
78
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 72
def each_item(&block)
for queue in @queues
for item in queue
block.call(item)
end
end
end
|
#empty? ⇒ Boolean
52
53
54
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 52
def empty?
@queues.empty?
end
|
#number_if_items_at_priority(priority) ⇒ Object
60
61
62
63
64
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 60
def number_if_items_at_priority(priority)
q = get_queue_for_priority(priority, false)
return 0 if q.nil?
q.length
end
|
#number_of_priorities ⇒ Object
56
57
58
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 56
def number_of_priorities
@queues.length
end
|
#peek ⇒ Object
66
67
68
69
70
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 66
def peek
q = get_next_queue
return nil if q.nil?
q.first
end
|
#pop ⇒ Object
13
14
15
16
17
18
19
20
21
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 13
def pop
q = get_next_queue
return nil if q.nil?
item = q.shift
if q.empty?
remove_queue(q)
end
item
end
|
#priority ⇒ Object
the highest priority queue
39
40
41
42
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 39
def priority
return nil if @queues.empty?
get_next_queue.priority
end
|
#push(item) ⇒ Object
23
24
25
26
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 23
def push(item)
q = get_queue_for_priority(item.priority, true)
q.push(item)
end
|
#remove(item, override_priority = nil) ⇒ Object
28
29
30
31
32
33
34
35
36
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 28
def remove(item, override_priority=nil)
override_priority = item.priority if override_priority.nil?
q = get_queue_for_priority(override_priority, false)
raise "unable to get queue at priority #{override_priority} when removing" if q.nil?
q.delete_if { |q_item| q_item.id == item.id }
if q.empty?
remove_queue(q)
end
end
|
#stalled=(stall) ⇒ Object
48
49
50
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 48
def stalled=(stall)
@stalled = stall
end
|
#stalled? ⇒ Boolean
44
45
46
|
# File 'lib/background_queue/server_lib/priority_queue.rb', line 44
def stalled?
@stalled
end
|