/*
* Subclass for representing alternative versions at this point.
* Two ways to do this
* - Root nodes with many observations.
* - Function nodes
*
* Copyright 2000 Andy Gill
*
* $Revision: 1.1 $
* $Date: 2000/09/15 16:14:17 $
*/
import java.util.*;
/**
*
* @author Andy Gill
* @version 0.1
*/
public class CDSMany extends CDS {
Vector many;
public CDSMany(int nodeId) {
this.nodeId = nodeId;
many = new Vector();
}
public void addChild(CDS child,int portNo) {
if (portNo != 0) {
Message.abort("connecting to non-existent port");
}
many.addElement(child);
}
/* trying to update *this* with a newChild
*/
protected CDS adding(CDS newChild) {
many.addElement(newChild);
return this;
}
/* Adding the tag saying when you were entered.
*/
protected void addEnterId(int enterId) { }
public void visitNodes(HoodVector nodes) {
Enumeration manys = many.elements();
while(manys.hasMoreElements()) {
CDS node = (CDS) manys.nextElement();
node.visitNodes(nodes);
}
}
public Pretty render(PrettyStep parent,int prec,boolean par) {
HoodColl ht = HoodColl.collection(false);
getFn(parent,ht,false);
Enumeration manys = ht.elements();
boolean first = true;
boolean isFn = false;
PrettyMany pm = Pretty.nil();
pm._text(parent,"{ ",Pretty.SUGAR);
while(manys.hasMoreElements()) {
if (!first) {
pm._newline();
if (isFn) {
pm._text(parent," ",Pretty.SUGAR);
} else {
pm._text(parent,", ",Pretty.SUGAR);
}
}
PrettyMany pelem = Pretty.nil();
ArgResList arl = (ArgResList) manys.nextElement();
Enumeration arls = arl.elements();
int shift = 2;
int elemCount = 0;
while(arls.hasMoreElements()) {
Pretty p = (Pretty) arls.nextElement();
elemCount++;
if (arls.hasMoreElements()) {
isFn = true;
if (elemCount == 1) {
if (first) {
pelem._text(parent,"let fn ",Pretty.SUGAR);
} else {
pelem._text(parent," fn ",Pretty.SUGAR);
}
shift = 7;
} else {
pelem._sep(parent);
}
pelem.add(p);
} else {
if (elemCount == 1) {
pelem.add(p);
} else {
pelem._sep(parent);
pelem._text(parent,"= ",Pretty.SUGAR);
pelem.add(p);
}
}
}
pm._group(parent,Pretty.nest(parent,shift,pelem));
if (first) {
first = false;
}
}
pm._newline();
pm._text(parent,"}",Pretty.SUGAR);
return Pretty.nest(parent,0,pm);
}
protected void getFn(PrettyStep parent,HoodColl target,boolean isStatic) {
Enumeration manys = many.elements();
while(manys.hasMoreElements()) {
CDS node = (CDS) manys.nextElement();
node.getFn(parent,target,isStatic);
}
}
public String toString() {
Enumeration manys = many.elements();
boolean first = true;
String txt = "{";
while(manys.hasMoreElements()) {
if (first) {
first = false;
} else {
txt += ",";
}
CDS node = (CDS) manys.nextElement();
txt += node.toString();
}
txt += "}";
return txt;
}
}
|