| 1 package net.sf.jga.fn.algorithm; 33 34 import net.sf.jga.fn.BinaryFunctor; 35 import net.sf.jga.fn.UnaryFunctor; 36 import net.sf.jga.fn.comparison.EqualTo; 37 import net.sf.jga.fn.comparison.Equality; 38 import net.sf.jga.util.LookAheadIterator; 39 import java.util.Iterator ; 40 41 42 50 51 public class FindAdjacent<T> extends LookAheadFunctor<T> { 52 53 static final long serialVersionUID = 6357244961374202731L; 54 55 private BinaryFunctor<T,T,Boolean > _eq; 57 58 62 public FindAdjacent () { 63 this(new EqualTo<T>()); 64 } 65 66 71 public FindAdjacent (BinaryFunctor<T,T,Boolean > eq) { 72 _eq = eq; 73 } 74 75 78 public BinaryFunctor<T,T,Boolean > getComparisonFn() { 79 return _eq; 80 } 81 82 89 public LookAheadIterator<T> fn (Iterator<? extends T> iterator) { 90 if (!iterator.hasNext()) { 92 return new LookAheadIterator<T>(iterator, 1); 93 } 94 95 LookAheadIterator<T> lai = wrap(iterator, 2); 96 while (lai.hasNextPlus(2)) { 97 T arg1 = lai.peek(1); 98 T arg2 = lai.peek(2); 99 if (_eq.fn(arg1, arg2)) { 100 return lai; 101 } 102 103 lai.next(); 104 } 105 106 lai.next(); 109 return lai; 110 } 111 112 113 117 public void accept(net.sf.jga.fn.Visitor v) { 118 if (v instanceof FindAdjacent.Visitor) 119 ((FindAdjacent.Visitor)v).visit(this); 120 else 121 v.visit(this); 122 } 123 124 126 public String toString() { 127 return "FindAdjacent["+_eq+"]"; 128 } 129 130 132 135 public interface Visitor extends net.sf.jga.fn.Visitor { 136 public void visit(FindAdjacent host); 137 } 138 } 139 | Popular Tags |