Oracle® Fusion Middleware C++ API Reference for Oracle Coherence
12c (12.1.3.0.0)

E47891-01

coherence/util/aggregator/TopNAggregator.hpp

00001 /*
00002 * TopNAggregator.hpp
00003 *
00004 * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
00005 *
00006 * Oracle is a registered trademarks of Oracle Corporation and/or its
00007 * affiliates.
00008 *
00009 * This software is the confidential and proprietary information of Oracle
00010 * Corporation. You shall not disclose such confidential and proprietary
00011 * information and shall use it only in accordance with the terms of the
00012 * license agreement you entered into with Oracle.
00013 *
00014 * This notice may not be removed or altered.
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 * TopNAggregator is a ParallelAwareAggregator that aggregates the top <i>N</i>
00038 * extracted values into an array.  The extracted values must not be null, but
00039 * do not need to be unique.
00040 *
00041 * @author rhl 2013.04.24
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     // ----- constructors ---------------------------------------------------
00052 
00053     protected:
00054         /**
00055         * @internal
00056         */
00057         TopNAggregator();
00058 
00059         /**
00060         * Construct a TopNAggregator that will aggregate the top extracted values,
00061         * as determined by the specified comparator.
00062         *
00063         * @param vExtractor   the extractor
00064         * @param vComparator  the comparator for extracted values
00065         * @param cResults     the maximum number of results to return
00066         */
00067         TopNAggregator(ValueExtractor::View vExtractor, Comparator::View vComparator, int32_t cResults);
00068 
00069     private:
00070         /**
00071         * Blocked copy constructor.
00072         */
00073         TopNAggregator(const TopNAggregator&);
00074 
00075 
00076     // ----- inner class: PartialResult -------------------------------------
00077 
00078     public:
00079         /**
00080         * The sorted partial result.
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         // ----- constructors -----------------------------------------------
00090 
00091         protected:
00092             /**
00093             * @internal
00094             */
00095            PartialResult();
00096 
00097             /**
00098             * @internal
00099             */
00100             PartialResult(Comparator::View vComparator);
00101 
00102         private:
00103             /**
00104             * Blocked copy constructor.
00105             */
00106             PartialResult(const PartialResult& that);
00107 
00108 
00109         // ----- PortableObject methods -------------------------------------
00110 
00111         public:
00112             /**
00113             * {@inheritDoc}
00114             */
00115             virtual void readExternal(PofReader::Handle hIn);
00116 
00117             /**
00118             * {@inheritDoc}
00119             */
00120             virtual void writeExternal(PofWriter::Handle hOut) const;
00121         };
00122 
00123 
00124     // ----- ParallelAwareAggregator Interface  -----------------------------
00125 
00126     public:
00127         /**
00128         * {@inheritDoc}
00129         */
00130         InvocableMap::EntryAggregator::Handle getParallelAggregator();
00131 
00132         /**
00133         * {@inheritDoc}
00134         */
00135         Object::Holder aggregateResults(Collection::View vColResults);
00136 
00137         /**
00138         * {@inheritDoc}
00139         */
00140         Object::Holder aggregate(Set::View vSetEntries);
00141 
00142 
00143 
00144     // ----- PartialResultAggregator methods --------------------------------
00145 
00146     public:
00147         /**
00148         * {@inheritDoc}
00149         */
00150         Object::Holder aggregatePartialResults(Collection::View vColPartialResults);
00151 
00152 
00153 
00154     // ----- internal methods -----------------------------------------------
00155 
00156     protected:
00157         /**
00158         * Add the specified values to the result if they are within the top-N.
00159         *
00160         * @param vIterValues  the iterator of values to add
00161         * @param hResult      the result
00162         */
00163         void addToResult(Iterator::Handle hIterValues, PartialResult::Handle hResult);
00164 
00165         /**
00166         * Finalize the partial aggregation result.
00167         *
00168         * @param result  the partial result
00169         *
00170         * @return the final aggregation result
00171         */
00172         ObjectArray::Handle finalizeResult(PartialResult::View vResult);
00173 
00174 
00175     // ----- PortableObject methods -----------------------------------------
00176 
00177     public:
00178         /**
00179         * {@inheritDoc}
00180         */
00181         virtual void readExternal(PofReader::Handle hIn);
00182 
00183         /**
00184         * {@inheritDoc}
00185         */
00186         virtual void writeExternal(PofWriter::Handle hOut) const;
00187 
00188 
00189     // ----- data members ---------------------------------------------------
00190 
00191     public:
00192         /**
00193         * True iff this aggregator is to be used in parallel.
00194         */
00195         bool m_fParallel;
00196 
00197         /**
00198         * The ValueExtractor used by this aggregator.
00199         */
00200         FinalView<ValueExtractor> f_vExtractor;
00201 
00202         /**
00203         * The Comparator used to order the extracted values.
00204         */
00205         FinalView<Comparator> f_vComparator;
00206 
00207         /**
00208         * The maximum number of results to include in the aggregation result.
00209         */
00210         int32_t m_cResults;
00211     };
00212 
00213 COH_CLOSE_NAMESPACE3
00214 
00215 #endif // COH_TOP_N_AGGREGATOR_HPP
Copyright © 2000, 2014, Oracle and/or its affiliates. All rights reserved.