Mercurial > hg > truffle
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 |
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 } |