+ private Sequence owner;
+
+ public int ord() { return ord; }
+
+ final Forest[] holder;
+
+ Pos(int len, Sequence owner) {
+ this.owner = owner;
+ this.holder = new Forest[len];
+ }
+
+ public abstract int provides();
+ public abstract int[] needs();
+ public abstract int[] hates();
+ public abstract boolean owner_needed_or_hated();
+
+ public abstract boolean isFirst();
+ public abstract boolean isLast();
+ public abstract Pos last();
+ public abstract Pos prev();
+ public abstract Pos next();
+
+ /** the element which produces the sequence to which this Position belongs */
+ public Sequence owner() { return owner; }
+
+ abstract Element element();
+
+ public abstract int numPops();
+ public abstract <T> Forest<T> rewrite(Input.Region loc);
+ }