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

E26041-01

coherence/util/aggregator/CompositeAggregator.hpp

00001 /*
00002 * CompositeAggregator.hpp
00003 *
00004 * Copyright (c) 2000, 2013, 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_COMPOSITE_AGGREGATOR_HPP
00017 #define COH_COMPOSITE_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 
00026 COH_OPEN_NAMESPACE3(coherence,util,aggregator)
00027 
00028 using coherence::io::pof::PofReader;
00029 using coherence::io::pof::PofWriter;
00030 using coherence::io::pof::PortableObject;
00031 
00032 
00033 /**
00034 * CompositeAggregator provides an ability to execute a collection of
00035 * aggregators against the same subset of the entries in an InvocableMap,
00036 * resulting in a list of corresponding aggregation results. The size of the
00037 * returned list will always be equal to the length of the aggregators' array.
00038 *
00039 * @author djl  2008.05.16
00040 */
00041 class COH_EXPORT CompositeAggregator
00042     : public class_spec<CompositeAggregator,
00043         extends<Object>,
00044         implements<PortableObject, InvocableMap::EntryAggregator> >
00045     {
00046     friend class factory<CompositeAggregator>;
00047 
00048     // ----- factory methods ------------------------------------------------
00049 
00050     public:
00051          /**
00052          * Default constructor (necessary for the PortableObject interface).
00053          */
00054          static CompositeAggregator::Handle create();
00055 
00056          /**
00057          * Create an instance of CompositeAggregator based on a specified
00058          * array of coherence::util::InvocableMap::EntryAggregator.
00059          * If all the aggregators in the specified array are instances of
00060          * coherence::util::InvocableMap::ParallelAwareAggregator
00061          * then a parallel-aware instance of the CompositeAggregator will be
00062          * created.
00063          * <br>
00064          * If at least one of the specified aggregator is not parallel-aware,
00065          * then the resulting CompositeAggregator will not be parallel-aware
00066          * and could be ill-suited for aggregations run against large
00067          * partitioned caches.
00068          *
00069          * @param vaAggregator  an array of EntryAggregator objects; must
00070          *                      contain not less than two aggregators
00071          */
00072          static CompositeAggregator::Handle create(
00073                  ObjectArray::View vaAggregator);
00074 
00075 
00076     // ----- constructors ---------------------------------------------------
00077 
00078     protected:
00079         /**
00080         * @internal
00081         */
00082         CompositeAggregator();
00083 
00084         /**
00085         * @internal
00086         */
00087         CompositeAggregator(ObjectArray::View vaAggregator);
00088 
00089     private:
00090         /**
00091         * Blocked copy constructor.
00092         */
00093         CompositeAggregator(const CompositeAggregator&);
00094 
00095 
00096     // ----- InvocableMap::EntryAggregator interface ------------------------
00097 
00098     public:
00099         /**
00100         * {@inheritDoc}
00101         */
00102         virtual Object::Holder aggregate(Set::View vSetEntries);
00103 
00104 
00105     // ----- PortableObject interface ---------------------------------------
00106 
00107     public:
00108         /**
00109         * {@inheritDoc}
00110         */
00111         virtual void readExternal(PofReader::Handle hIn);
00112 
00113         /**
00114         * {@inheritDoc}
00115         */
00116         virtual void writeExternal(PofWriter::Handle hOut) const;
00117 
00118 
00119     // ----- Object interface -----------------------------------------------
00120 
00121     public:
00122         /**
00123         * {@inheritDoc}
00124         */
00125         virtual bool equals(Object::View v) const;
00126 
00127         /**
00128         * {@inheritDoc}
00129         */
00130         virtual size32_t hashCode() const;
00131 
00132         /**
00133         * {@inheritDoc}
00134         */
00135         virtual void toStream(std::ostream& out) const;
00136 
00137 
00138     // ----- data member accessors ------------------------------------------
00139 
00140     public:
00141         /**
00142         * Determine the ValueExtractor whose values this aggregator is
00143         * aggregating.
00144         *
00145         * @return the ValueExtractor used by this aggregator
00146         */
00147         virtual ObjectArray::View getAggregators() const;
00148 
00149 
00150     // ----- data members ---------------------------------------------------
00151 
00152     protected:
00153         /**
00154         * The underlying EntryAggregator array.
00155         */
00156         FinalView<ObjectArray> f_vaAggregator;
00157     };
00158 
00159 COH_CLOSE_NAMESPACE3
00160 
00161 #endif // COH_COMPOSITE_AGGREGATOR_HPP
Copyright © 2000, 2013, Oracle and/or its affiliates. All rights reserved.