class Orbacle::Graph
Constants
- Lambda
- Metod
- MetodGraph
- Yield
- ZSuper
Attributes
class_ivariables[R]
constants[R]
cvariables[R]
global_variables[R]
instance_ivariables[R]
lambdas[R]
main_ivariables[R]
metods[R]
Public Class Methods
new()
click to toggle source
# File lib/orbacle/graph.rb, line 13 def initialize @original = RGL::DirectedAdjacencyGraph.new @reversed = RGL::DirectedAdjacencyGraph.new @global_variables = {} @constants = {} @main_ivariables = {} @instance_ivariables = {} @class_ivariables = {} @cvariables = {} @metods = {} @lambdas = {} end
Public Instance Methods
add_edge(x, y)
click to toggle source
# File lib/orbacle/graph.rb, line 44 def add_edge(x, y) raise if x.nil? || y.nil? @original.add_edge(x, y) @reversed.add_edge(y, x) end
add_edges(nodes_source, nodes_target)
click to toggle source
# File lib/orbacle/graph.rb, line 36 def add_edges(nodes_source, nodes_target) Array(nodes_source).each do |source| Array(nodes_target).each do |target| add_edge(source, target) end end end
add_vertex(node)
click to toggle source
# File lib/orbacle/graph.rb, line 29 def add_vertex(node) raise if node.nil? @original.add_vertex(node) @reversed.add_vertex(node) node end
adjacent_vertices(v)
click to toggle source
# File lib/orbacle/graph.rb, line 58 def adjacent_vertices(v) @original.adjacent_vertices(v) end
edges()
click to toggle source
# File lib/orbacle/graph.rb, line 50 def edges @original.edges end
get_class_level_ivar_definition_node(scope, ivar_name)
click to toggle source
# File lib/orbacle/graph.rb, line 91 def get_class_level_ivar_definition_node(scope, ivar_name) class_ivariables[scope.absolute_str] ||= {} class_ivariables[scope.absolute_str][ivar_name] ||= add_vertex(Node.new(:clivar_definition, {})) return class_ivariables[scope.absolute_str][ivar_name] end
get_constant_definition_node(const_name)
click to toggle source
# File lib/orbacle/graph.rb, line 80 def get_constant_definition_node(const_name) constants[const_name] ||= add_vertex(Node.new(:const_definition, {})) return constants[const_name] end
get_cvar_definition_node(scope, ivar_name)
click to toggle source
# File lib/orbacle/graph.rb, line 97 def get_cvar_definition_node(scope, ivar_name) cvariables[scope.absolute_str] ||= {} cvariables[scope.absolute_str][ivar_name] ||= add_vertex(Node.new(:cvar_definition, {})) return cvariables[scope.absolute_str][ivar_name] end
get_gvar_definition_node(gvar_name)
click to toggle source
# File lib/orbacle/graph.rb, line 70 def get_gvar_definition_node(gvar_name) global_variables[gvar_name] ||= add_vertex(Node.new(:gvar_definition, {})) return global_variables[gvar_name] end
get_ivar_definition_node(scope, ivar_name)
click to toggle source
# File lib/orbacle/graph.rb, line 85 def get_ivar_definition_node(scope, ivar_name) instance_ivariables[scope.absolute_str] ||= {} instance_ivariables[scope.absolute_str][ivar_name] ||= add_vertex(Node.new(:ivar_definition, {})) return instance_ivariables[scope.absolute_str][ivar_name] end
get_lambda_nodes(lambda_id)
click to toggle source
# File lib/orbacle/graph.rb, line 132 def get_lambda_nodes(lambda_id) return lambdas[lambda_id] end
get_main_ivar_definition_node(ivar_name)
click to toggle source
# File lib/orbacle/graph.rb, line 75 def get_main_ivar_definition_node(ivar_name) main_ivariables[ivar_name] ||= add_vertex(Node.new(:ivar_definition, {})) return main_ivariables[ivar_name] end
get_metod_nodes(method_id)
click to toggle source
# File lib/orbacle/graph.rb, line 103 def get_metod_nodes(method_id) metod = metods[method_id] if metod.instance_of?(Metod) metod else new_nodes = metod.all_nodes.map(&:clone) mapping = metod.all_nodes.zip(new_nodes).to_h new_nodes.each(&method(:add_vertex)) metod.all_edges.each do |v1, v2| add_edge(mapping.fetch(v1), mapping.fetch(v2)) end new_arguments_nodes = metod.args.each_with_object({}) do |(k, v), h| h[k] = mapping.fetch(v) end new_yields = metod.yields.map {|y| Yield.new(y.send_args.map {|a| mapping.fetch(a) }, mapping.fetch(y.send_result)) } Metod.new(new_arguments_nodes, mapping.fetch(metod.result), new_yields, [], mapping.fetch(metod.caller_node)) end end
has_edge?(x, y)
click to toggle source
# File lib/orbacle/graph.rb, line 66 def has_edge?(x, y) @original.has_edge?(x, y) end
parent_vertices(v)
click to toggle source
# File lib/orbacle/graph.rb, line 62 def parent_vertices(v) @reversed.adjacent_vertices(v) end
store_lambda_nodes(lambda_id, arguments_nodes, result_node)
click to toggle source
# File lib/orbacle/graph.rb, line 136 def store_lambda_nodes(lambda_id, arguments_nodes, result_node) lambdas[lambda_id] ||= Lambda.new(arguments_nodes, result_node) end
store_metod_nodes(metod_id, arguments_nodes)
click to toggle source
# File lib/orbacle/graph.rb, line 122 def store_metod_nodes(metod_id, arguments_nodes) raise if !arguments_nodes.is_a?(Hash) metods[metod_id] ||= Metod.new(arguments_nodes, add_vertex(Node.new(:method_result, {})), [], [], nil) end
store_metod_subgraph(metod_id, arguments_nodes, caller_node, result_node, yields, all_nodes, all_edges)
click to toggle source
# File lib/orbacle/graph.rb, line 127 def store_metod_subgraph(metod_id, arguments_nodes, caller_node, result_node, yields, all_nodes, all_edges) raise if !arguments_nodes.is_a?(Hash) metods[metod_id] ||= MetodGraph.new(arguments_nodes, result_node, yields, caller_node, all_nodes, all_edges) end
vertices()
click to toggle source
# File lib/orbacle/graph.rb, line 54 def vertices @original.vertices end