Fennel: /home/pub/open/dev/fennel/lucidera/bitmap/LbmSortedAggExecStream.cpp Source File (original) (raw)

00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 #include "fennel/common/CommonPreamble.h" 00023 #include "fennel/lucidera/bitmap/LbmSortedAggExecStream.h" 00024 #include "fennel/exec/ExecStreamBufAccessor.h" 00025 #include "fennel/lucidera/bitmap/LbmByteSegment.h" 00026 #include "fennel/tuple/StandardTypeDescriptor.h" 00027 00028 FENNEL_BEGIN_CPPFILE("$Id: //open/dev/fennel/lucidera/bitmap/LbmSortedAggExecStream.cpp#6 $"); 00029 00037 class LbmRepeatingAggComputer : public AggComputer 00038 { 00039 AggComputer *pComputer; 00040 00041 public: 00042 explicit LbmRepeatingAggComputer(AggComputer *pComputer); 00043 00044
00045 virtual void setInputAttrIndex(uint iInputAttrIndex); 00046 00047 virtual void clearAccumulator( 00048 TupleDatum &accumulatorDatum); 00049 00050 virtual void updateAccumulator( 00051 TupleDatum &accumulatorDatum, 00052 TupleData const &inputTuple); 00053 00054 virtual void computeOutput( 00055 TupleDatum &outputDatum, 00056 TupleDatum const &accumulatorDatum); 00057 00058
00059 virtual void initAccumulator( 00060 TupleDatum &accumulatorDatumDest, 00061 TupleData const &inputTuple); 00062 00063 virtual void initAccumulator( 00064 TupleDatum &accumulatorDatumSrc, 00065 TupleDatum &accumulatorDatumDest); 00066 00067 virtual void updateAccumulator( 00068 TupleDatum &accumulatorDatumSrc, 00069 TupleDatum &accumulatorDatumDest, 00070 TupleData const &inputTuple); 00071 }; 00072 00073 LbmRepeatingAggComputer::LbmRepeatingAggComputer( 00074 AggComputer *pComputer) 00075 { 00076 this->pComputer = pComputer; 00077 } 00078 00079 void LbmRepeatingAggComputer::setInputAttrIndex(uint iInputAttrIndex) 00080 { 00081 AggComputer::setInputAttrIndex(iInputAttrIndex); 00082 pComputer->setInputAttrIndex(iInputAttrIndex); 00083 } 00084 00085 void LbmRepeatingAggComputer::clearAccumulator( 00086 TupleDatum &accumulatorDatum) 00087 { 00088 pComputer->clearAccumulator(accumulatorDatum); 00089 } 00090 00091 void LbmRepeatingAggComputer::updateAccumulator( 00092 TupleDatum &accumulatorDatum, 00093 TupleData const &inputTuple) 00094 { 00095
00096 TupleDatum segmentDatum = inputTuple[inputTuple.size() - 1]; 00097 uint loops = LbmByteSegment::countBits(segmentDatum); 00098 00099 for (uint i = 0; i < loops; i++) { 00100 pComputer->updateAccumulator(accumulatorDatum, inputTuple); 00101 } 00102 } 00103 00104 void LbmRepeatingAggComputer::computeOutput( 00105 TupleDatum &outputDatum, 00106 TupleDatum const &accumulatorDatum) 00107 { 00108 pComputer->computeOutput(outputDatum, accumulatorDatum); 00109 } 00110 00111 void LbmRepeatingAggComputer::initAccumulator( 00112 TupleDatum &accumulatorDatumDest, 00113 TupleData const &inputTuple) 00114 { 00115
00116 assert(false); 00117 } 00118 00119 void LbmRepeatingAggComputer::initAccumulator( 00120 TupleDatum &accumulatorDatumSrc, 00121 TupleDatum &accumulatorDatumDest) 00122 { 00123
00124 assert(false); 00125 } 00126 00127 void LbmRepeatingAggComputer::updateAccumulator( 00128 TupleDatum &accumulatorDatumSrc, 00129 TupleDatum &accumulatorDatumDest, 00130 TupleData const &inputTuple) 00131 { 00132
00133 assert(false); 00134 } 00135 00136 void LbmSortedAggExecStream::prepare( 00137 LbmSortedAggExecStreamParams const &params) 00138 { 00139 SortedAggExecStream::prepare(params); 00140 } 00141 00142 AggComputer *LbmSortedAggExecStream::newAggComputer( 00143 AggFunction aggFunction, 00144 TupleAttributeDescriptor const *pAttrDesc) 00145 { 00146 AggComputer *pComputer = 00147 SortedAggExecStream::newAggComputer(aggFunction, pAttrDesc); 00148 00149 switch (aggFunction) { 00150 case AGG_FUNC_COUNT: 00151 case AGG_FUNC_SUM: 00152 pComputer = new LbmRepeatingAggComputer(pComputer); 00153 default: 00154 ; 00155 } 00156 return pComputer; 00157 } 00158 00159 FENNEL_END_CPPFILE("$Id: //open/dev/fennel/lucidera/bitmap/LbmSortedAggExecStream.cpp#6 $"); 00160 00161