Mercurial > hg > truffle
annotate graal/GraalGraph/src/com/oracle/graal/graph/Node.java @ 2549:c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
author | Thomas Wuerthinger <thomas@wuerthinger.net> |
---|---|
date | Wed, 27 Apr 2011 22:07:20 +0200 |
parents | 7a0e1bd2bb64 |
children | d9b2a8653054 |
rev | line source |
---|---|
2549
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
1 /* |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
2 * Copyright (c) 2011, 2011, Oracle and/or its affiliates. All rights reserved. |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
4 * |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
7 * published by the Free Software Foundation. |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
8 * |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
13 * accompanied this code). |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
14 * |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
18 * |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
21 * questions. |
c12715ca2cc7
Added Oracle header. Moved author declaration into package-info.java file.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2542
diff
changeset
|
22 */ |
2542
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.graph; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
24 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
25 import java.util.ArrayList; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
26 import java.util.Arrays; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
27 import java.util.Collection; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
28 import java.util.Collections; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
29 import java.util.Iterator; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
30 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
31 public abstract class Node { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
32 private final Graph graph; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
33 private final int id; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
34 private final NodeArray inputs; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
35 private final NodeArray successors; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
36 private final ArrayList<Node> usages; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
37 private final ArrayList<Node> predecessors; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
38 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
39 public Node(Node[] inputs, Node[] successors, Graph graph) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
40 this.graph = graph; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
41 if(graph != null) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
42 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
|
43 }else { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
44 this.id = -1; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
45 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
46 this.inputs = new NodeArray(inputs); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
47 this.successors = new NodeArray(successors); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
48 this.predecessors = new ArrayList<Node>(); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
49 this.usages = new ArrayList<Node>(); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
50 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
51 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
52 public Node(int inputs, int successors, Graph graph) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
53 this(nullNodes(inputs, graph), nullNodes(successors, graph), graph); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
54 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
55 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
56 public class NodeArray implements Iterable<Node>{ |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
57 private final Node[] nodes; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
58 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
59 public NodeArray(Node[] nodes) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
60 this.nodes = nodes; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
61 } |
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 @Override |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
64 public Iterator<Node> iterator() { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
65 return Arrays.asList(this.nodes).iterator(); |
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 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
68 public Node set(int index, Node node) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
69 if(node.graph != Node.this.graph) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
70 // fail ? |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
71 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
72 Node old = nodes[index]; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
73 nodes[index] = node; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
74 if(Node.this.inputs == this) { // :-/ |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
75 old.usages.remove(Node.this); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
76 node.usages.add(Node.this); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
77 }else /*if(Node.this.successors == this)*/{ |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
78 old.predecessors.remove(Node.this); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
79 node.predecessors.add(Node.this); |
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 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
82 return old; |
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 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
85 public boolean contains(Node n) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
86 for(int i = 0; i < nodes.length; i++) |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
87 if(nodes[i] == n) //equals? |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
88 return true; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
89 return false; |
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 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
92 public boolean replace(Node toReplace, Node replacement) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
93 for(int i = 0; i < nodes.length; i++) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
94 if(nodes[i] == toReplace) { // equals? |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
95 this.set(i, replacement); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
96 return true; //replace only one occurrence |
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 return false; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
100 } |
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 public Node[] asArray() { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
103 Node[] copy = new Node[nodes.length]; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
104 System.arraycopy(nodes, 0, copy, 0, nodes.length); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
105 return copy; |
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 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
108 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
109 public Collection<Node> getPredecessors() { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
110 return Collections.unmodifiableCollection(predecessors); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
111 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
112 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
113 public Collection<Node> getUsages() { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
114 return Collections.unmodifiableCollection(usages); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
115 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
116 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
117 public NodeArray getInputs() { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
118 return inputs; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
119 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
120 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
121 public NodeArray getSuccessors() { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
122 return successors; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
123 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
124 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
125 public int getId() { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
126 return id; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
127 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
128 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
129 public Graph getGraph() { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
130 return graph; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
131 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
132 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
133 public void replace(Node other) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
134 if(other.graph != this.graph) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
135 other = other.cloneNode(this.graph); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
136 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
137 Node[] myInputs = inputs.nodes; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
138 for(int i = 0; i < myInputs.length; i++) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
139 other.inputs.set(i, myInputs[i]); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
140 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
141 for(Node usage : usages) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
142 usage.inputs.replace(this, other); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
143 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
144 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
145 Node[] mySuccessors = successors.nodes; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
146 for(int i = 0; i < mySuccessors.length; i++) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
147 other.successors.set(i, mySuccessors[i]); |
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 for(Node predecessor : predecessors) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
150 predecessor.successors.replace(this, other); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
151 } |
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 public abstract Node cloneNode(Graph into); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
155 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
156 @Override |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
157 public boolean equals(Object obj) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
158 if(obj == this) |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
159 return true; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
160 if(obj.getClass() == this.getClass()) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
161 Node other = (Node)obj; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
162 if(other.id == this.id && other.graph == this.graph) |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
163 return true; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
164 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
165 return false; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
166 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
167 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
168 protected Node getInput(int index) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
169 return this.inputs.nodes[index]; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
170 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
171 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
172 protected Node getSuccessor(int index) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
173 return this.successors.nodes[index]; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
174 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
175 |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
176 private static Node[] nullNodes(int number, Graph graph) { |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
177 Node[] nodes = new Node[number]; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
178 for(int i = 0; i < number; i++) |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
179 nodes[i] = new NullNode(0, 0, graph); |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
180 return nodes; |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
181 } |
7a0e1bd2bb64
Draft for graph classes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff
changeset
|
182 } |