00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef Fennel_AggComputer_Included
00024 #define Fennel_AggComputer_Included
00025
00026 #include <boost/ptr_container/ptr_vector.hpp>
00027 #include "fennel/common/FemEnums.h"
00028
00029 FENNEL_BEGIN_NAMESPACE
00030
00031 class StoredTypeDescriptor;
00032 class TupleAttributeDescriptor;
00033 class TupleData;
00034 class TupleDatum;
00035
00047 class FENNEL_EXEC_EXPORT AggComputer
00048 {
00049 protected:
00050 int iInputAttr;
00051
00052 public:
00053 explicit AggComputer();
00054
00055 virtual ~AggComputer();
00056
00065 static AggComputer *newAggComputer(
00066 AggFunction aggFunction,
00067 TupleAttributeDescriptor const *pAttrDesc);
00068
00075 virtual void setInputAttrIndex(uint iInputAttrIndex);
00076
00082 virtual void clearAccumulator(
00083 TupleDatum &accumulatorDatum) = 0;
00084
00093 virtual void updateAccumulator(
00094 TupleDatum &accumulatorDatum,
00095 TupleData const &inputTuple) = 0;
00096
00105 virtual void computeOutput(
00106 TupleDatum &outputDatum,
00107 TupleDatum const &accumulatorDatum) = 0;
00108
00118 virtual void initAccumulator(
00119 TupleDatum &accumulatorDatumDest,
00120 TupleData const &inputTuple) = 0;
00121
00129 virtual void initAccumulator(
00130 TupleDatum &accumulatorDatumSrc,
00131 TupleDatum &accumulatorDatumDest) = 0;
00132
00143 virtual void updateAccumulator(
00144 TupleDatum &accumulatorDatumSrc,
00145 TupleDatum &accumulatorDatumDest,
00146 TupleData const &inputTuple) = 0;
00147 };
00148
00149 typedef boost::ptr_vector<AggComputer> AggComputerList;
00150 typedef boost::ptr_vector<AggComputer>::iterator AggComputerIter;
00151 typedef boost::ptr_vector<AggComputer>::const_iterator AggComputerConstIter;
00152
00153 FENNEL_END_NAMESPACE
00154
00155 #endif
00156
00157