Merge marina project in subdirectory marina/
[fleet.git] / src / edu / berkeley / fleet / dataflow / DataFlowGraph.java
1 package edu.berkeley.fleet.dataflow;
2 import java.util.*;
3 import edu.berkeley.fleet.loops.*;
4 import edu.berkeley.fleet.api.*;
5 import java.util.*;
6 import java.net.*;
7
8 /**
9  *  A dataflow graph.
10  */
11 public class DataFlowGraph implements Iterable<Node> {
12
13     public final Fleet    fleet;
14     public final ShipPool pool;
15
16     /**
17      *  Use LinkedHashSet to get a predictable/repeatable iteration
18      *  order, which leads to predictable/repeatable code
19      */
20     private LinkedHashSet<Node> nodes = new LinkedHashSet<Node>();
21
22     public DataFlowGraph(Fleet fleet, ShipPool pool) {
23         this.fleet = fleet;
24         this.pool  = pool;
25     }
26
27     public Iterator<Node> iterator() { return nodes.iterator(); }
28     public void addNode(Node node) { this.nodes.add(node); }
29
30     public CodeBag build(CodeBag cb) {
31         boolean oldAutoflush = cb.getAutoflush();
32         cb.setAutoflush(true);
33         for(Node mod : nodes) mod.build(cb);
34         // this breaks stuff, but it shouldn't!
35         //cb.setAutoflush(oldAutoflush);
36         return cb;
37     }
38 }
39
40