Class: Orbacle::Worklist
- Inherits:
-
Object
show all
- Defined in:
- lib/orbacle/worklist.rb
Defined Under Namespace
Classes: BlockLambda, BlockNode, MessageSend, SuperSend
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of Worklist.
12
13
14
15
16
17
18
|
# File 'lib/orbacle/worklist.rb', line 12
def initialize
@message_sends = Set.new
@nodes = FastContainers::PriorityQueue.new(:max)
@handled_message_sends = Hash.new {|h,k| h[k] = [] }
@nodes_counter = {}
@nodes_mapping = {}
end
|
Instance Attribute Details
#handled_message_sends ⇒ Object
Returns the value of attribute handled_message_sends.
20
21
22
|
# File 'lib/orbacle/worklist.rb', line 20
def handled_message_sends
@handled_message_sends
end
|
#message_sends ⇒ Object
Returns the value of attribute message_sends.
20
21
22
|
# File 'lib/orbacle/worklist.rb', line 20
def message_sends
@message_sends
end
|
#nodes ⇒ Object
Returns the value of attribute nodes.
20
21
22
|
# File 'lib/orbacle/worklist.rb', line 20
def nodes
@nodes
end
|
Instance Method Details
#add_message_send(message_send) ⇒ Object
23
24
25
|
# File 'lib/orbacle/worklist.rb', line 23
def add_message_send(message_send)
@message_sends << message_send
end
|
#count_node(node) ⇒ Object
40
41
42
|
# File 'lib/orbacle/worklist.rb', line 40
def count_node(node)
@nodes_counter[node] = @nodes_counter.fetch(node, 0) + 1
end
|
#enqueue_node(v) ⇒ Object
27
28
29
30
31
32
|
# File 'lib/orbacle/worklist.rb', line 27
def enqueue_node(v)
if !@nodes_mapping[v]
@nodes.push(v, 1)
@nodes_mapping[v] = true
end
end
|
#limit_exceeded?(node) ⇒ Boolean
44
45
46
47
|
# File 'lib/orbacle/worklist.rb', line 44
def limit_exceeded?(node)
false
end
|
#mark_message_send_as_handled(message_send, handled_type) ⇒ Object
53
54
55
|
# File 'lib/orbacle/worklist.rb', line 53
def mark_message_send_as_handled(message_send, handled_type)
handled_message_sends[message_send] << handled_type
end
|
#message_send_handled?(message_send) ⇒ Boolean
49
50
51
|
# File 'lib/orbacle/worklist.rb', line 49
def message_send_handled?(message_send)
!handled_message_sends[message_send].empty?
end
|
#message_send_handled_by_type?(message_send, handled_type) ⇒ Boolean
57
58
59
|
# File 'lib/orbacle/worklist.rb', line 57
def message_send_handled_by_type?(message_send, handled_type)
handled_message_sends[message_send].include?(handled_type)
end
|
#pop_node ⇒ Object
34
35
36
37
38
|
# File 'lib/orbacle/worklist.rb', line 34
def pop_node
e = @nodes.pop
@nodes_mapping[e] = false
e
end
|