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