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.



176
177
178
179
# File 'lib/cpee/processtransformation/structures.rb', line 176

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

Instance Attribute Details

#flowObject (readonly)

{{{



170
171
172
# File 'lib/cpee/processtransformation/structures.rb', line 170

def flow
  @flow
end

#nodesObject (readonly)

{{{



170
171
172
# File 'lib/cpee/processtransformation/structures.rb', line 170

def nodes
  @nodes
end

Instance Method Details



218
219
220
# File 'lib/cpee/processtransformation/structures.rb', line 218

def add_link(l)
  @links << l
end

#add_node(n) ⇒ Object



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

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

#clean_up(&bl) ⇒ Object



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/cpee/processtransformation/structures.rb', line 181

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_node(niceid) ⇒ Object



172
173
174
# File 'lib/cpee/processtransformation/structures.rb', line 172

def find_node(niceid)
  @nodes.find{|k,v| v.niceid == niceid }
end

#find_script_id(s) ⇒ Object



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

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


214
215
216
# File 'lib/cpee/processtransformation/structures.rb', line 214

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

#next_node(from) ⇒ Object



227
228
229
230
231
232
233
# File 'lib/cpee/processtransformation/structures.rb', line 227

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



222
223
224
225
# File 'lib/cpee/processtransformation/structures.rb', line 222

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