00001 /* 00002 * CompositeAggregator.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_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