00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 #ifndef COH_TOP_N_AGGREGATOR_HPP
00017 #define COH_TOP_N_AGGREGATOR_HPP
00018 
00019 #include "coherence/lang.ns"
00020 
00021 #include "coherence/io/pof/PofReader.hpp"
00022 #include "coherence/io/pof/PofWriter.hpp"
00023 #include "coherence/io/pof/PortableObject.hpp"
00024 #include "coherence/util/InvocableMap.hpp"
00025 #include "coherence/util/SortedBag.hpp"
00026 #include "coherence/util/ValueExtractor.hpp"
00027 
00028 
00029 COH_OPEN_NAMESPACE3(coherence,util,aggregator)
00030 
00031 using coherence::io::pof::PofReader;
00032 using coherence::io::pof::PofWriter;
00033 using coherence::io::pof::PortableObject;
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 class COH_EXPORT TopNAggregator
00044     : public class_spec<TopNAggregator,
00045         extends<Object>,
00046         implements<PortableObject, InvocableMap::ParallelAwareAggregator,
00047                    InvocableMap::ParallelAwareAggregator::PartialResultAggregator> >
00048     {
00049     friend class factory<TopNAggregator>;
00050 
00051     
00052 
00053     protected:
00054 
00055 
00056 
00057         TopNAggregator();
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067         TopNAggregator(ValueExtractor::View vExtractor, Comparator::View vComparator, int32_t cResults);
00068 
00069     private:
00070 
00071 
00072 
00073         TopNAggregator(const TopNAggregator&);
00074 
00075 
00076     
00077 
00078     public:
00079 
00080 
00081 
00082         class COH_EXPORT PartialResult
00083             : public class_spec<PartialResult,
00084                 extends<SortedBag>,
00085                 implements<PortableObject> >
00086         {
00087         friend class factory<PartialResult>;
00088 
00089         
00090 
00091         protected:
00092 
00093 
00094 
00095            PartialResult();
00096 
00097 
00098 
00099 
00100             PartialResult(Comparator::View vComparator);
00101 
00102         private:
00103 
00104 
00105 
00106             PartialResult(const PartialResult& that);
00107 
00108 
00109         
00110 
00111         public:
00112 
00113 
00114 
00115             virtual void readExternal(PofReader::Handle hIn);
00116 
00117 
00118 
00119 
00120             virtual void writeExternal(PofWriter::Handle hOut) const;
00121         };
00122 
00123 
00124     
00125 
00126     public:
00127 
00128 
00129 
00130         InvocableMap::EntryAggregator::Handle getParallelAggregator();
00131 
00132 
00133 
00134 
00135         Object::Holder aggregateResults(Collection::View vColResults);
00136 
00137 
00138 
00139 
00140         Object::Holder aggregate(Set::View vSetEntries);
00141 
00142 
00143 
00144     
00145 
00146     public:
00147 
00148 
00149 
00150         Object::Holder aggregatePartialResults(Collection::View vColPartialResults);
00151 
00152 
00153 
00154     
00155 
00156     protected:
00157 
00158 
00159 
00160 
00161 
00162 
00163         void addToResult(Iterator::Handle hIterValues, PartialResult::Handle hResult);
00164 
00165 
00166 
00167 
00168 
00169 
00170 
00171 
00172         ObjectArray::Handle finalizeResult(PartialResult::View vResult);
00173 
00174 
00175     
00176 
00177     public:
00178 
00179 
00180 
00181         virtual void readExternal(PofReader::Handle hIn);
00182 
00183 
00184 
00185 
00186         virtual void writeExternal(PofWriter::Handle hOut) const;
00187 
00188 
00189     
00190 
00191     public:
00192 
00193 
00194 
00195         bool m_fParallel;
00196 
00197 
00198 
00199 
00200         FinalView<ValueExtractor> f_vExtractor;
00201 
00202 
00203 
00204 
00205         FinalView<Comparator> f_vComparator;
00206 
00207 
00208 
00209 
00210         int32_t m_cResults;
00211     };
00212 
00213 COH_CLOSE_NAMESPACE3
00214 
00215 #endif // COH_TOP_N_AGGREGATOR_HPP