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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }