001    package listFW.visitor;
002    
003    import listFW.*;
004    
005    /**
006     * Sums a IList<Integer> using a forward accumulation algorithm. 
007     * Demonstrates that passing a non-parameterized value through a varargs is no problem.
008     * @author Mathias Ricken - Copyright 2008 - All rights reserved.
009     */
010    public class SumIntList_Fwd implements IListAlgo<Integer,Integer, Object> {
011        
012        public Integer emptyCase(IMTList<? extends Integer> host, Object ... inp) {
013            return 0;
014        }
015        public Integer nonEmptyCase(INEList<? extends Integer> host, Object ... inp) {
016            return  host.getRest().execute(helper, host.getFirst());
017        }
018        
019        private IListAlgo<Integer,Integer, Integer> helper = new IListAlgo<Integer,Integer, Integer> (){    
020            public Integer emptyCase(IMTList<? extends Integer> host, Integer ... acc) {
021                return acc[0];
022            }
023            public Integer nonEmptyCase(INEList<? extends Integer> host, Integer ... acc) {
024                return host.getRest().execute(this, host.getFirst() + acc[0]);
025            }
026        };
027    }