Class: Orbacle::Worklist

Inherits:
Object
  • 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

#initializeWorklist

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_sendsObject (readonly)

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_sendsObject (readonly)

Returns the value of attribute message_sends.



20
21
22
# File 'lib/orbacle/worklist.rb', line 20

def message_sends
  @message_sends
end

#nodesObject

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

Returns:

  • (Boolean)


44
45
46
47
# File 'lib/orbacle/worklist.rb', line 44

def limit_exceeded?(node)
  # @nodes_counter.fetch(node, 0) > 100
  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

Returns:

  • (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

Returns:

  • (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_nodeObject



34
35
36
37
38
# File 'lib/orbacle/worklist.rb', line 34

def pop_node
  e = @nodes.pop
  @nodes_mapping[e] = false
  e
end