1 33 package net.sf.jga.fn.adaptor; 34 35 import net.sf.jga.fn.BinaryFunctor; 36 import net.sf.jga.fn.UnaryFunctor; 37 38 48 49 public class ChainBinary<T1,T2,F,R> extends BinaryFunctor<T1,T2,R> { 50 51 static final long serialVersionUID = -8161448545088932320L; 52 53 private UnaryFunctor<F,R> _f; 54 55 private BinaryFunctor<T1,T2,F> _g; 56 57 62 public ChainBinary(UnaryFunctor<F,R> f, BinaryFunctor<T1,T2,F> g) { 63 if (f == null || g == null ) { 64 String msg = "Two functors are required"; 65 throw new IllegalArgumentException (msg); 66 } 67 68 _f = f; _g =g;; 69 } 70 71 75 public UnaryFunctor<F,R> getOuterFunctor() { return _f; } 76 77 81 public BinaryFunctor<T1,T2,F> getInnerFunctor() { return _g; } 82 83 85 91 public R fn(T1 x, T2 y) { 92 return _f.fn(_g.fn(x,y)); 93 } 94 95 99 public void accept(net.sf.jga.fn.Visitor v) { 100 if (v instanceof ChainBinary.Visitor) 101 ((ChainBinary.Visitor)v).visit(this); 102 else 103 v.visit(this); 104 } 105 106 108 public String toString() { 109 return _f+".compose("+_g+")"; 110 } 111 112 114 117 public interface Visitor extends net.sf.jga.fn.Visitor { 118 public void visit(ChainBinary host); 119 } 120 } 121 | Popular Tags |