1 4 package gnu.xquery.util; 5 import gnu.lists.*; 6 import gnu.kawa.xml.*; 7 8 15 16 public class RelativeStepFilter extends FilterConsumer 17 implements PositionConsumer 18 { 19 char seen; 21 22 SortedNodes snodes; 23 24 public RelativeStepFilter (Consumer base) 25 { 26 super(base); 27 } 28 29 public void consume(SeqPosition position) 31 { 32 writePosition(position.sequence, position.ipos); 33 } 34 35 public void writeObject(Object v) 36 { 37 if (v instanceof SeqPosition) 38 { 39 SeqPosition n = (SeqPosition) v; 40 writePosition(n.sequence, n.ipos); 41 } 42 else 43 super.writeObject(v); 44 } 45 46 protected void beforeContent () 47 { 48 if (seen == 'N') 49 throw new Error ("path returns mix of atoms and nodes"); 50 seen = 'A'; 51 } 52 53 public void writePosition(AbstractSequence seq, int ipos) 54 { 55 if (seen == 'A') 56 throw new Error ("path returns mix of atoms and nodes"); 57 seen = 'N'; 58 if (snodes == null) 59 snodes = new SortedNodes(); 60 snodes.writePosition(seq, ipos); 61 } 62 63 public void finish () 64 { 65 if (snodes != null) 66 snodes.consume(base); 67 snodes = null; 68 } 69 } 70 | Popular Tags |