coherence/util/filter/InKeySetFilter.hpp

00001 /*
00002 * InKeySetFilter.hpp
00003 *
00004 * Copyright (c) 2000, 2009, 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 is intended to be used exclusively by the partitioned
00145         * cache service in a scenario when cache keys to evaluate by this
00146         * filter exist in internal form.
00147         *
00148         * @param vConverter  the converter that should be used for
00149         *                    key conversions
00150         */
00151         virtual void ensureConverted(Converter::View vConverter);
00152 
00153 
00154     // ----- data members ---------------------------------------------------
00155 
00156     private:
00157         /**
00158         * The underlying Filter.
00159         */
00160         MemberView<Filter> m_vFilter;
00161 
00162         /**
00163         * The underlying set of keys. This set is not exposed via any
00164         * accessors quite intentionally to ensure that this class is free to
00165         * manipulate the key set (by the "convert" method) without
00166         * interfering with any client logic.
00167         */
00168         MemberView<Set> m_vSetKeys;
00169 
00170         /**
00171         * A flag that indicates that the key set has been converted to internal
00172         * form.
00173         */
00174         bool m_fConverted;
00175     };
00176 
00177 COH_CLOSE_NAMESPACE3
00178 
00179 #endif // COH_IN_KEY_SET_FILTER_HPP
Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.