1 4 package gnu.kawa.xml; 5 import gnu.mapping.*; 6 import gnu.lists.*; 7 8 11 12 public class IntersectNodes extends Procedure2 13 { 14 15 boolean isExcept; 16 17 public static final IntersectNodes intersectNodes 18 = new IntersectNodes(false); 19 public static final IntersectNodes exceptNodes 20 = new IntersectNodes(true); 21 22 public IntersectNodes (boolean isExcept) { this.isExcept = isExcept; } 23 24 public Object apply2 (Object vals1, Object vals2) 25 { 26 SortedNodes nodes1 = new SortedNodes(); 27 SortedNodes nodes2 = new SortedNodes(); 28 SortedNodes result = new SortedNodes(); 29 Values.writeValues(vals1, nodes1); 31 Values.writeValues(vals2, nodes2); 32 int i2 = 0; 33 34 AbstractSequence seq2 = null; 35 int ipos2 = 0; 36 37 int cmp = 0; 40 41 for (int i1 = 0; ; i1++) 42 { 43 AbstractSequence seq1 = nodes1.getSeq(i1); 44 if (seq1 == null) 45 break; 46 int ipos1 = nodes1.getPos(i1); 47 48 53 if (cmp == -1) 54 cmp = AbstractSequence.compare(seq1, ipos1, seq2, ipos2); 55 else if (cmp == 0) 56 cmp = 1; 57 58 while (cmp > 0) 59 { 60 seq2 = nodes2.getSeq(i2); 61 if (seq2 == null) 62 { 63 cmp = -2; 64 break; 65 } 66 else 67 { 68 ipos2 = nodes2.getPos(i2++); 69 cmp = AbstractSequence.compare(seq1, ipos1, seq2, ipos2); 70 } 71 } 72 73 if ((cmp == 0) != isExcept) 74 result.writePosition(seq1, ipos1); 75 } 76 77 return result; 78 } 79 } 80 | Popular Tags |