Class: CPEE::ProcessTransformation::Graph

Inherits:
Object
  • Object
show all
Defined in:
lib/cpee/processtransformation/structures.rb

Overview

}}}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGraph

Returns a new instance of Graph.



164
165
166
167
# File 'lib/cpee/processtransformation/structures.rb', line 164

def initialize
  @nodes = {}
  @links = []
end

Instance Attribute Details

#flowObject (readonly)

{{{



162
163
164
# File 'lib/cpee/processtransformation/structures.rb', line 162

def flow
  @flow
end

#nodesObject (readonly)

{{{



162
163
164
# File 'lib/cpee/processtransformation/structures.rb', line 162

def nodes
  @nodes
end

Instance Method Details



206
207
208
# File 'lib/cpee/processtransformation/structures.rb', line 206

def add_link(l)
  @links << l
end

#add_node(n) ⇒ Object



198
199
200
# File 'lib/cpee/processtransformation/structures.rb', line 198

def add_node(n)
  @nodes[n.id] = n
end

#clean_up(&bl) ⇒ Object



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/cpee/processtransformation/structures.rb', line 169

def clean_up(&bl)
  selnodes = []
  @nodes.each do |k,n|
    ret = bl.call(n)
    selnodes << n if ret
  end
  selnodes.each do |n|
    if n.incoming > 1 || n.outgoing > 1
      raise "#{n.inspect} - not a simple node to remove"
    end  
    to,from = nil
    @links.each do |f|
      to = f if f.to == n.id
      from = f if f.from == n.id
    end
    if to && from
      to.to = from.to
      @links.delete(from)
      @nodes.delete(n.id)
    else
      raise "#{n.inspect} - could not remove flow"
    end  
  end
end

#find_script_id(s) ⇒ Object



194
195
196
# File 'lib/cpee/processtransformation/structures.rb', line 194

def find_script_id(s)
  @nodes.find_all{|k,n| n.script_id == s}
end


202
203
204
# File 'lib/cpee/processtransformation/structures.rb', line 202

def link(f,t)
  @links.find{ |x| x.from == f && x.to == t }
end

#next_node(from) ⇒ Object



215
216
217
218
219
220
221
# File 'lib/cpee/processtransformation/structures.rb', line 215

def next_node(from)
  if (nodes = next_nodes(from)).length == 1
    nodes.first
  else
    raise "#{from.inspect} - multiple outgoing connections"
  end  
end

#next_nodes(from) ⇒ Object



210
211
212
213
# File 'lib/cpee/processtransformation/structures.rb', line 210

def next_nodes(from)
  links = @links.find_all { |x| x.from == from.id }
  links.map{|x| @nodes[x.to] }
end