00001 /* 00002 * CompositeAggregator.hpp 00003 * 00004 * Copyright (c) 2000, 2010, 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 00090 // ----- InvocableMap::EntryAggregator interface ------------------------ 00091 00092 public: 00093 /** 00094 * {@inheritDoc} 00095 */ 00096 virtual Object::Holder aggregate(Set::View vSetEntries); 00097 00098 00099 // ----- PortableObject interface --------------------------------------- 00100 00101 public: 00102 /** 00103 * {@inheritDoc} 00104 */ 00105 virtual void readExternal(PofReader::Handle hIn); 00106 00107 /** 00108 * {@inheritDoc} 00109 */ 00110 virtual void writeExternal(PofWriter::Handle hOut) const; 00111 00112 00113 // ----- Object interface ----------------------------------------------- 00114 00115 public: 00116 /** 00117 * {@inheritDoc} 00118 */ 00119 virtual bool equals(Object::View v) const; 00120 00121 /** 00122 * {@inheritDoc} 00123 */ 00124 virtual size32_t hashCode() const; 00125 00126 /** 00127 * {@inheritDoc} 00128 */ 00129 virtual void toStream(std::ostream& out) const; 00130 00131 00132 // ----- data member accessors ------------------------------------------ 00133 00134 public: 00135 /** 00136 * Determine the ValueExtractor whose values this aggregator is 00137 * aggregating. 00138 * 00139 * @return the ValueExtractor used by this aggregator 00140 */ 00141 virtual ObjectArray::View getAggregators() const; 00142 00143 00144 // ----- data members --------------------------------------------------- 00145 00146 protected: 00147 /** 00148 * The underlying EntryAggregator array. 00149 */ 00150 MemberView<ObjectArray> m_vaAggregator; 00151 }; 00152 00153 COH_CLOSE_NAMESPACE3 00154 00155 #endif // COH_COMPOSITE_AGGREGATOR_HPP