package org.reldb.rel.v0.values; /** Functor object for performing a fold. */ public abstract class TupleFold extends TupleIteration { private Value accumulator = null; private int attributeIndex; public TupleFold(TupleIterator iterator, int attributeIndex) { super(iterator); this.attributeIndex = attributeIndex; } public void process(ValueTuple tuple) { accumulator = fold(accumulator, tuple.getValues()[attributeIndex]); } public void initialise() { accumulator = getIdentity(); } public int getAttributeIndex() { return attributeIndex; } public Value getResult() { return accumulator; } public abstract Value fold(Value left, Value right); public abstract Value getIdentity(); }