Oracle Coherence for C++ API
Release 3.7.1.0
E22845-01
00001 /* 00002 * InKeySetFilter.hpp 00003 * 00004 * Copyright (c) 2000, 2011, 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_IN_KEY_SET_FILTER_HPP 00017 #define COH_IN_KEY_SET_FILTER_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/Converter.hpp" 00025 #include "coherence/util/Filter.hpp" 00026 #include "coherence/util/Map.hpp" 00027 #include "coherence/util/Set.hpp" 00028 #include "coherence/util/filter/EntryFilter.hpp" 00029 #include "coherence/util/filter/IndexAwareFilter.hpp" 00030 00031 COH_OPEN_NAMESPACE3(coherence,util,filter) 00032 00033 using coherence::io::pof::PofReader; 00034 using coherence::io::pof::PofWriter; 00035 using coherence::io::pof::PortableObject; 00036 using coherence::util::Converter; 00037 00038 00039 /** 00040 * Filter that limits the underlying filter evaluation only to the specified 00041 * set of keys. 00042 * 00043 * @author djl 2008.04.14 00044 */ 00045 class COH_EXPORT InKeySetFilter 00046 : public class_spec<InKeySetFilter, 00047 extends<Object>, 00048 implements<IndexAwareFilter, PortableObject> > 00049 { 00050 friend class factory<InKeySetFilter>; 00051 00052 // ----- constructors --------------------------------------------------- 00053 00054 protected: 00055 /** 00056 * Default constructor (necessary for the PortableObject interface). 00057 */ 00058 InKeySetFilter(); 00059 00060 /** 00061 * Construct an InSetFilter for testing "In" condition. 00062 * 00063 * @param vFilter the underlying filter 00064 * @param vSetKeys the set of keys to limit the filter evaluation to 00065 */ 00066 InKeySetFilter(Filter::View vFilter, Set::View vSetKeys); 00067 00068 00069 // ----- EntryFilter interface ------------------------------------------ 00070 00071 public: 00072 /** 00073 * {@inheritDoc} 00074 */ 00075 virtual bool evaluateEntry(Map::Entry::View vEntry) const; 00076 00077 00078 // ----- Filter interface ----------------------------------------------- 00079 00080 public: 00081 /** 00082 * {@inheritDoc} 00083 */ 00084 virtual bool evaluate(Object::View v) const; 00085 00086 00087 // ----- IndexAwareFilter interface ------------------------------------- 00088 00089 public: 00090 /** 00091 * {@inheritDoc} 00092 */ 00093 virtual size32_t calculateEffectiveness(Map::View vMapIndexes, 00094 Set::View vSetKeys) const; 00095 00096 /** 00097 * {@inheritDoc} 00098 */ 00099 virtual Filter::View applyIndex(Map::View vMapIndexes, 00100 Set::Handle hSetKeys) const; 00101 00102 00103 // ----- PortableObject interface --------------------------------------- 00104 00105 public: 00106 /** 00107 * {@inheritDoc} 00108 */ 00109 virtual void readExternal(PofReader::Handle hIn); 00110 00111 /** 00112 * {@inheritDoc} 00113 */ 00114 virtual void writeExternal(PofWriter::Handle hOut) const; 00115 00116 00117 // ----- Object interface ----------------------------------------------- 00118 00119 public: 00120 /** 00121 * {@inheritDoc} 00122 */ 00123 virtual void toStream(std::ostream& out) const; 00124 00125 00126 // ----- data member accessors ------------------------------------------ 00127 00128 public: 00129 /** 00130 * Obtain the Filter. 00131 * 00132 * @return the Filter 00133 */ 00134 virtual Filter::View getFilter() const; 00135 00136 00137 // ----- Helpers -------------------------------------------------------- 00138 00139 public: 00140 /** 00141 * Ensure that the underlying keys are converted using the specified 00142 * converter. 00143 * 00144 * This method must be called prior to index application or evaluation 00145 * when the keys being evaluated exist in an internal form. 00146 * 00147 * Note: for convenience, this method will be automatically called by 00148 * the partitioned cache service when this filter appears as the 00149 * outermost filter in a query. 00150 * 00151 * @param vConverter the converter that should be used for 00152 * key conversions 00153 */ 00154 virtual void ensureConverted(Converter::View vConverter); 00155 00156 00157 // ----- data members --------------------------------------------------- 00158 00159 private: 00160 /** 00161 * The underlying Filter. 00162 */ 00163 MemberView<Filter> m_vFilter; 00164 00165 /** 00166 * The underlying set of keys. This set is not exposed via any 00167 * accessors quite intentionally to ensure that this class is free to 00168 * manipulate the key set (by the "convert" method) without 00169 * interfering with any client logic. 00170 */ 00171 MemberView<Set> m_vSetKeys; 00172 00173 /** 00174 * A flag that indicates that the key set has been converted to internal 00175 * form. 00176 */ 00177 bool m_fConverted; 00178 }; 00179 00180 COH_CLOSE_NAMESPACE3 00181 00182 #endif // COH_IN_KEY_SET_FILTER_HPP