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 }