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

E80355-01

coherence/util/filter/InKeySetFilter.hpp

00001 /*
00002 * InKeySetFilter.hpp
00003 *
00004 * Copyright (c) 2000, 2017, 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 TypedHandle<const String> toString() 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         * Obtain the underying key set.
00138         *
00139         * @return the underlying key set
00140         *
00141         * @since 12.2.1
00142         */
00143         virtual Set::View getKeys() const;
00144 
00145     // ----- Helpers --------------------------------------------------------
00146 
00147     public:
00148         /**
00149         * Ensure that the underlying keys are converted using the specified
00150         * converter.
00151         *
00152         * This method must be called prior to index application or evaluation
00153         * when the keys being evaluated exist in an internal form.
00154         * 
00155         * Note: for convenience, this method will be automatically called by
00156         *       the partitioned cache service when this filter appears as the
00157         *       outermost filter in a query.
00158         *
00159         * @param vConverter  the converter that should be used for
00160         *                    key conversions
00161         */
00162         virtual void ensureConverted(Converter::View vConverter) const;
00163 
00164 
00165     // ----- data members ---------------------------------------------------
00166 
00167     private:
00168         /**
00169         * The underlying Filter.
00170         */
00171         FinalView<Filter> f_vFilter;
00172 
00173         /**
00174         * The underlying set of keys.
00175         */
00176         mutable MemberView<Set> m_vSetKeys;
00177 
00178         /**
00179         * A flag that indicates that the key set has been converted to internal
00180         * form.
00181         */
00182         mutable bool m_fConverted;
00183     };
00184 
00185 COH_CLOSE_NAMESPACE3
00186 
00187 #endif // COH_IN_KEY_SET_FILTER_HPP
Copyright © 2000, 2017, Oracle and/or its affiliates. All rights reserved.