package lrs.visitor; import lrs.*; /** * @author Dung X. Nguyen - Copyright 2005 - All rights reserved. */ public class RunningSum implements IAlgo { public final static RunningSum Singleton = new RunningSum(); private RunningSum() { } /** */ public Object emptyCase(LRStruct host, Object... nu) { return null; } /** */ public Object nonEmptyCase(LRStruct host, Object... nu) { return host.getRest().execute(new IAlgo() { public Object emptyCase(LRStruct child, Object... nu){ return null; // host is a single element list. } public Object nonEmptyCase(LRStruct child, Object... acc){ Integer sum = (Integer)acc[0] + (Integer)child.getFirst(); child.setFirst(sum); return child.getRest().execute(this, sum); } }, host.getFirst()); } }