1 cananian 1.2.2.4 // WGNode.java, created Mon Nov 16 23:33:21 1998 by mfoltz 2 cananian 1.2.2.4 // Copyright (C) 1998 Mark A. Foltz <mfoltz@ai.mit.edu> 3 cananian 1.2.2.4 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.2.2.4 5 mfoltz 1.1 // -*-Mode: Java-*- 6 mfoltz 1.1 // WGNode.java -- 7 mfoltz 1.1 // Author: Mark Foltz <mfoltz@ai.mit.edu> 8 mfoltz 1.1 // Maintainer: Mark Foltz <mfoltz@ai.mit.edu> 9 mfoltz 1.1 // Version: 10 mfoltz 1.1 // Created: <Thu Oct 22 23:42:00 1998> 11 mfoltz 1.3 // Time-stamp: <1998-11-26 11:45:04 mfoltz> 12 mfoltz 1.1 // Keywords: 13 mfoltz 1.1 14 mfoltz 1.2 package harpoon.Analysis.Partition; 15 mfoltz 1.1 16 mfoltz 1.1 import java.util.Vector; 17 mfoltz 1.1 import java.util.Enumeration; 18 mfoltz 1.1 19 mfoltz 1.1 /** 20 mfoltz 1.1 * 21 mfoltz 1.1 * @author Mark A. Foltz <mfoltz@ai.mit.edu> 22 cananian 1.4 * @version $Id: WGNode.java,v 1.4 2002/02/25 20:58:28 cananian Exp $ 23 mfoltz 1.1 */ 24 mfoltz 1.1 25 mfoltz 1.1 public class WGNode { 26 mfoltz 1.1 27 mfoltz 1.1 public String _name; 28 mfoltz 1.1 public Object _value; 29 mfoltz 1.1 public Vector _edges = new Vector(); 30 mfoltz 1.1 public Vector _weights = new Vector(); 31 mfoltz 1.1 public boolean _dummy = false; 32 mfoltz 1.1 public long _d; 33 mfoltz 1.3 public int _binding; 34 mfoltz 1.1 35 mfoltz 1.1 public WGNode(String name, Object value) { 36 mfoltz 1.1 _name = name; 37 mfoltz 1.1 _value = value; 38 mfoltz 1.3 _binding = -1; 39 mfoltz 1.1 } 40 mfoltz 1.1 41 mfoltz 1.1 public WGNode(WGNode node) { 42 mfoltz 1.1 _name = node._name; 43 mfoltz 1.1 _value = node._value; 44 mfoltz 1.3 _binding = node._binding; 45 mfoltz 1.1 _edges = (Vector) node._edges.clone(); 46 mfoltz 1.1 _weights = (Vector) node._weights.clone(); 47 mfoltz 1.1 _dummy = node._dummy; 48 mfoltz 1.1 _d = node._d; 49 mfoltz 1.1 } 50 mfoltz 1.1 51 mfoltz 1.1 public Enumeration getAdjacent() { 52 mfoltz 1.1 return _edges.elements(); 53 mfoltz 1.1 } 54 mfoltz 1.1 55 mfoltz 1.1 public boolean adjacentTo(WGNode node) { 56 mfoltz 1.1 return (_edges.indexOf(node) > -1); 57 mfoltz 1.1 } 58 mfoltz 1.1 59 mfoltz 1.1 public Enumeration getWeights() { 60 mfoltz 1.1 return _weights.elements(); 61 mfoltz 1.1 } 62 mfoltz 1.1 63 mfoltz 1.1 public long getWeight(WGNode node) { 64 mfoltz 1.1 int i = _edges.indexOf(node); 65 mfoltz 1.1 if (i < 0) return 0; 66 mfoltz 1.1 else return ((Long) _weights.elementAt(i)).longValue(); 67 mfoltz 1.1 } 68 mfoltz 1.1 69 mfoltz 1.1 public boolean isConnected() { 70 mfoltz 1.1 return !_edges.isEmpty(); 71 mfoltz 1.1 } 72 mfoltz 1.1 73 mfoltz 1.1 public int degree() { 74 mfoltz 1.1 return _edges.size(); 75 mfoltz 1.1 } 76 mfoltz 1.1 77 mfoltz 1.1 public void addToEdge(WGNode to, long weight) { 78 mfoltz 1.1 int i = _edges.indexOf(to); 79 mfoltz 1.1 if (i < 0) { 80 mfoltz 1.1 _edges.addElement(to); 81 mfoltz 1.1 _weights.addElement(new Long(weight)); 82 mfoltz 1.1 } else { 83 mfoltz 1.1 _weights.setElementAt(new Long(((Long) _weights.elementAt(i)).longValue()+weight),i); 84 mfoltz 1.1 } 85 mfoltz 1.1 } 86 mfoltz 1.1 87 mfoltz 1.1 public void setEdge(WGNode to, long weight) { 88 mfoltz 1.1 int i = _edges.indexOf(to); 89 mfoltz 1.1 if (i < 0) { 90 mfoltz 1.1 _edges.addElement(to); 91 mfoltz 1.1 _weights.addElement(new Long(weight)); 92 mfoltz 1.1 } else { 93 mfoltz 1.1 _weights.setElementAt(new Long(weight),i); 94 mfoltz 1.1 } 95 mfoltz 1.1 } 96 mfoltz 1.1 97 mfoltz 1.1 public void removeOutgoingEdge(WGNode to) { 98 mfoltz 1.1 int i = _edges.indexOf(to); 99 mfoltz 1.1 // System.err.println("Removing edge "+this._name+" <--> "+to._name+" at "+i+"\n"); 100 mfoltz 1.1 if (i > -1) { 101 mfoltz 1.1 _edges.removeElementAt(i); 102 mfoltz 1.1 _weights.removeElementAt(i); 103 mfoltz 1.1 } 104 mfoltz 1.1 } 105 mfoltz 1.1 106 mfoltz 1.1 public void removeIncomingEdge(WGNode from) { 107 mfoltz 1.1 from.removeOutgoingEdge(this); 108 mfoltz 1.1 } 109 mfoltz 1.1 110 mfoltz 1.1 public void removeEdge(WGNode to) { 111 mfoltz 1.1 to.removeOutgoingEdge(this); 112 mfoltz 1.1 removeOutgoingEdge(to); 113 mfoltz 1.1 } 114 mfoltz 1.1 115 mfoltz 1.1 public void removeIncomingEdges() { 116 mfoltz 1.1 Enumeration adjacents = getAdjacent(); 117 mfoltz 1.1 WGNode node; 118 mfoltz 1.1 while (adjacents.hasMoreElements()) { 119 mfoltz 1.1 node = (WGNode) adjacents.nextElement(); 120 mfoltz 1.1 node.removeOutgoingEdge(this); 121 mfoltz 1.1 } 122 mfoltz 1.1 } 123 mfoltz 1.1 124 mfoltz 1.1 public void removeOutgoingEdges() { 125 mfoltz 1.1 _edges.removeAllElements(); 126 mfoltz 1.1 _weights.removeAllElements(); 127 mfoltz 1.1 } 128 mfoltz 1.1 129 mfoltz 1.1 public void removeEdges() { 130 mfoltz 1.1 WGNode node; 131 mfoltz 1.1 while (!_edges.isEmpty()) { 132 mfoltz 1.1 node = ((WGNode) _edges.lastElement()); 133 mfoltz 1.1 node.removeOutgoingEdge(this); 134 mfoltz 1.1 _edges.removeElementAt(_edges.size()-1); 135 mfoltz 1.1 } 136 mfoltz 1.1 } 137 mfoltz 1.1 138 mfoltz 1.1 public String toString() { 139 mfoltz 1.1 StringBuffer sb = new StringBuffer(); 140 mfoltz 1.1 sb.append(_d+" "+_name+" <--->\n"); 141 mfoltz 1.1 Enumeration adj = getAdjacent(); 142 mfoltz 1.1 Enumeration w = getWeights(); 143 mfoltz 1.1 WGNode n; 144 mfoltz 1.1 Long l; 145 mfoltz 1.1 while (adj.hasMoreElements()) { 146 mfoltz 1.1 n = (WGNode) adj.nextElement(); 147 mfoltz 1.1 l = (Long) w.nextElement(); 148 mfoltz 1.1 sb.append("\t"+l+" "+n._name+"\n"); 149 mfoltz 1.1 } 150 mfoltz 1.1 return sb.toString(); 151 mfoltz 1.1 } 152 mfoltz 1.1 153 mfoltz 1.1 } 154 mfoltz 1.1 155 mfoltz 1.1 156 mfoltz 1.1