annotate graal/GraalGraph/src/com/oracle/graal/graph/Node.java @ 2542:7a0e1bd2bb64

Draft for graph classes
author Gilles Duboscq <gilles.duboscq@oracle.com>
date Wed, 27 Apr 2011 21:25:15 +0200
parents
children c12715ca2cc7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2542
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
1 package com.oracle.graal.graph;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
2
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
3 import java.util.ArrayList;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
4 import java.util.Arrays;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
5 import java.util.Collection;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
6 import java.util.Collections;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
7 import java.util.Iterator;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
8
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
9 /**
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
10 * @author Gilles Duboscq
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
11 *
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
12 */
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
13 public abstract class Node {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
14 private final Graph graph;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
15 private final int id;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
16 private final NodeArray inputs;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
17 private final NodeArray successors;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
18 private final ArrayList<Node> usages;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
19 private final ArrayList<Node> predecessors;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
20
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
21 public Node(Node[] inputs, Node[] successors, Graph graph) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
22 this.graph = graph;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
23 if(graph != null) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
24 this.id = graph.nextId(this); //this pointer escaping in a constructor..
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
25 }else {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
26 this.id = -1;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
27 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
28 this.inputs = new NodeArray(inputs);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
29 this.successors = new NodeArray(successors);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
30 this.predecessors = new ArrayList<Node>();
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
31 this.usages = new ArrayList<Node>();
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
32 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
33
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
34 public Node(int inputs, int successors, Graph graph) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
35 this(nullNodes(inputs, graph), nullNodes(successors, graph), graph);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
36 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
37
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
38 public class NodeArray implements Iterable<Node>{
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
39 private final Node[] nodes;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
40
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
41 public NodeArray(Node[] nodes) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
42 this.nodes = nodes;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
43 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
44
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
45 @Override
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
46 public Iterator<Node> iterator() {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
47 return Arrays.asList(this.nodes).iterator();
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
48 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
49
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
50 public Node set(int index, Node node) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
51 if(node.graph != Node.this.graph) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
52 // fail ?
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
53 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
54 Node old = nodes[index];
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
55 nodes[index] = node;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
56 if(Node.this.inputs == this) { // :-/
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
57 old.usages.remove(Node.this);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
58 node.usages.add(Node.this);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
59 }else /*if(Node.this.successors == this)*/{
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
60 old.predecessors.remove(Node.this);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
61 node.predecessors.add(Node.this);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
62 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
63
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
64 return old;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
65 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
66
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
67 public boolean contains(Node n) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
68 for(int i = 0; i < nodes.length; i++)
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
69 if(nodes[i] == n) //equals?
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
70 return true;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
71 return false;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
72 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
73
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
74 public boolean replace(Node toReplace, Node replacement) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
75 for(int i = 0; i < nodes.length; i++) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
76 if(nodes[i] == toReplace) { // equals?
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
77 this.set(i, replacement);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
78 return true; //replace only one occurrence
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
79 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
80 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
81 return false;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
82 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
83
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
84 public Node[] asArray() {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
85 Node[] copy = new Node[nodes.length];
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
86 System.arraycopy(nodes, 0, copy, 0, nodes.length);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
87 return copy;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
88 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
89 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
90
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
91 public Collection<Node> getPredecessors() {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
92 return Collections.unmodifiableCollection(predecessors);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
93 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
94
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
95 public Collection<Node> getUsages() {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
96 return Collections.unmodifiableCollection(usages);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
97 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
98
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
99 public NodeArray getInputs() {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
100 return inputs;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
101 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
102
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
103 public NodeArray getSuccessors() {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
104 return successors;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
105 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
106
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
107 public int getId() {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
108 return id;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
109 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
110
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
111 public Graph getGraph() {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
112 return graph;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
113 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
114
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
115 public void replace(Node other) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
116 if(other.graph != this.graph) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
117 other = other.cloneNode(this.graph);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
118 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
119 Node[] myInputs = inputs.nodes;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
120 for(int i = 0; i < myInputs.length; i++) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
121 other.inputs.set(i, myInputs[i]);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
122 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
123 for(Node usage : usages) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
124 usage.inputs.replace(this, other);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
125 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
126
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
127 Node[] mySuccessors = successors.nodes;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
128 for(int i = 0; i < mySuccessors.length; i++) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
129 other.successors.set(i, mySuccessors[i]);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
130 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
131 for(Node predecessor : predecessors) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
132 predecessor.successors.replace(this, other);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
133 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
134 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
135
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
136 public abstract Node cloneNode(Graph into);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
137
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
138 @Override
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
139 public boolean equals(Object obj) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
140 if(obj == this)
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
141 return true;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
142 if(obj.getClass() == this.getClass()) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
143 Node other = (Node)obj;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
144 if(other.id == this.id && other.graph == this.graph)
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
145 return true;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
146 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
147 return false;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
148 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
149
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
150 protected Node getInput(int index) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
151 return this.inputs.nodes[index];
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
152 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
153
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
154 protected Node getSuccessor(int index) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
155 return this.successors.nodes[index];
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
156 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
157
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
158 private static Node[] nullNodes(int number, Graph graph) {
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
159 Node[] nodes = new Node[number];
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
160 for(int i = 0; i < number; i++)
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
161 nodes[i] = new NullNode(0, 0, graph);
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
162 return nodes;
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
163 }
7a0e1bd2bb64 Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
164 }