X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FSequence.java;h=430f29813c37952956b6cf0762f4a4c03219840f;hp=f63c30a918bd696c5f88e1a746cec23c9c5d7808;hb=260e46cff8995fb5a01e94c1a707d0ffff0a5382;hpb=61566402d83d5c06d57fb850e60ca0f82c27b9a2 diff --git a/src/edu/berkeley/sbp/Sequence.java b/src/edu/berkeley/sbp/Sequence.java index f63c30a..430f298 100644 --- a/src/edu/berkeley/sbp/Sequence.java +++ b/src/edu/berkeley/sbp/Sequence.java @@ -137,11 +137,16 @@ public abstract class Sequence implements Iterable, SequenceOrElement { static abstract class Pos implements IntegerMappable, Comparable, Serializable { public int ord = -1; + private transient Sequence owner; + public int ord() { return ord; } final Forest[] holder; - Pos(int len) { this.holder = new Forest[len]; } + Pos(int len, Sequence owner) { + this.owner = owner; + this.holder = new Forest[len]; + } public abstract int provides(); public abstract int[] needs(); @@ -154,7 +159,9 @@ public abstract class Sequence implements Iterable, SequenceOrElement { public abstract Pos prev(); public abstract Pos next(); - abstract Sequence owner(); + /** the element which produces the sequence to which this Position belongs */ + public Sequence owner() { return owner; } + abstract Element element(); public abstract int numPops(); @@ -180,7 +187,6 @@ public abstract class Sequence implements Iterable, SequenceOrElement { final int pos; private final Position next; private final Position prev; - private transient Sequence owner; public int provides() { return owner().sernum; } public int[] needs() { return owner().needs_int(); } @@ -188,8 +194,7 @@ public abstract class Sequence implements Iterable, SequenceOrElement { public boolean owner_needed_or_hated() { return owner().needed_or_hated; } private Position(Sequence owner, int pos, Position prev) { - super(owner.elements.length); - this.owner = owner; + super(owner.elements.length,owner); this.pos = pos; this.next = pos==owner.elements.length ? null : new Position(owner, pos+1, this); this.prev = prev; @@ -205,9 +210,6 @@ public abstract class Sequence implements Iterable, SequenceOrElement { /** the element immediately after this Position, or null if this is the last Position */ public Element element() { return pos>=owner().elements.length ? null : owner().elements[pos]; } - /** the element which produces the sequence to which this Position belongs */ - public Sequence owner() { return owner; } - /** the next Position (the Position after this.element()) */ public Position next() { return next; } @@ -219,7 +221,7 @@ public abstract class Sequence implements Iterable, SequenceOrElement { // Position ///////////////////////////////////////////////////////////////////////////////// public final Forest rewrite(Input.Region loc) { - if (isFirst()) owner().epsilonForm(loc); + if (isFirst()) return owner().epsilonForm(loc); for(int i=0; i