C++ Client API Reference for Oracle Coherence
14c (14.1.2.0.0)

F79659-03

coherence/util/filter/InKeySetFilter.hpp

00001 /*
00002  * Copyright (c) 2000, 2020, Oracle and/or its affiliates.
00003  *
00004  * Licensed under the Universal Permissive License v 1.0 as shown at
00005  * http://oss.oracle.com/licenses/upl.
00006  */
00007 #ifndef COH_IN_KEY_SET_FILTER_HPP
00008 #define COH_IN_KEY_SET_FILTER_HPP
00009 
00010 #include "coherence/lang.ns"
00011 
00012 #include "coherence/io/pof/PofReader.hpp"
00013 #include "coherence/io/pof/PofWriter.hpp"
00014 #include "coherence/io/pof/PortableObject.hpp"
00015 #include "coherence/util/Converter.hpp"
00016 #include "coherence/util/Filter.hpp"
00017 #include "coherence/util/Map.hpp"
00018 #include "coherence/util/Set.hpp"
00019 #include "coherence/util/filter/EntryFilter.hpp"
00020 #include "coherence/util/filter/IndexAwareFilter.hpp"
00021 
00022 COH_OPEN_NAMESPACE3(coherence,util,filter)
00023 
00024 using coherence::io::pof::PofReader;
00025 using coherence::io::pof::PofWriter;
00026 using coherence::io::pof::PortableObject;
00027 using coherence::util::Converter;
00028 
00029 
00030 /**
00031 * Filter that limits the underlying filter evaluation only to the specified
00032 * set of keys.
00033 *
00034 * @author djl  2008.04.14
00035 */
00036 class COH_EXPORT InKeySetFilter
00037     : public class_spec<InKeySetFilter,
00038         extends<Object>,
00039         implements<IndexAwareFilter, PortableObject> >
00040     {
00041     friend class factory<InKeySetFilter>;
00042 
00043     // ----- constructors ---------------------------------------------------
00044 
00045     protected:
00046         /**
00047         * Default constructor (necessary for the PortableObject interface).
00048         */
00049         InKeySetFilter();
00050 
00051         /**
00052         * Construct an InSetFilter for testing "In" condition.
00053         *
00054         * @param vFilter   the underlying filter
00055         * @param vSetKeys  the set of keys to limit the filter evaluation to
00056         */
00057         InKeySetFilter(Filter::View vFilter, Set::View vSetKeys);
00058 
00059 
00060     // ----- EntryFilter interface ------------------------------------------
00061 
00062     public:
00063         /**
00064         * {@inheritDoc}
00065         */
00066         virtual bool evaluateEntry(Map::Entry::View vEntry) const;
00067 
00068 
00069    // ----- Filter interface -----------------------------------------------
00070 
00071     public:
00072         /**
00073         * {@inheritDoc}
00074         */
00075         virtual bool evaluate(Object::View v) const;
00076 
00077 
00078     // ----- IndexAwareFilter interface -------------------------------------
00079 
00080     public:
00081         /**
00082         * {@inheritDoc}
00083         */
00084         virtual size32_t calculateEffectiveness(Map::View vMapIndexes,
00085                 Set::View vSetKeys) const;
00086 
00087         /**
00088         * {@inheritDoc}
00089         */
00090         virtual Filter::View applyIndex(Map::View vMapIndexes,
00091                 Set::Handle hSetKeys) const;
00092 
00093 
00094     // ----- PortableObject interface ---------------------------------------
00095 
00096      public:
00097         /**
00098         * {@inheritDoc}
00099         */
00100         virtual void readExternal(PofReader::Handle hIn);
00101 
00102         /**
00103         * {@inheritDoc}
00104         */
00105         virtual void writeExternal(PofWriter::Handle hOut) const;
00106 
00107 
00108     // ----- Object interface -----------------------------------------------
00109 
00110     public:
00111         /**
00112         * {@inheritDoc}
00113         */
00114         virtual TypedHandle<const String> toString() const;
00115 
00116 
00117     // ----- data member accessors ------------------------------------------
00118 
00119     public:
00120         /**
00121         * Obtain the Filter.
00122         *
00123         * @return the Filter
00124         */
00125         virtual Filter::View getFilter() const;
00126 
00127         /**
00128         * Obtain the underying key set.
00129         *
00130         * @return the underlying key set
00131         *
00132         * @since 12.2.1
00133         */
00134         virtual Set::View getKeys() const;
00135 
00136     // ----- Helpers --------------------------------------------------------
00137 
00138     public:
00139         /**
00140         * Ensure that the underlying keys are converted using the specified
00141         * converter.
00142         *
00143         * This method must be called prior to index application or evaluation
00144         * when the keys being evaluated exist in an internal form.
00145         * 
00146         * Note: for convenience, this method will be automatically called by
00147         *       the partitioned cache service when this filter appears as the
00148         *       outermost filter in a query.
00149         *
00150         * @param vConverter  the converter that should be used for
00151         *                    key conversions
00152         */
00153         virtual void ensureConverted(Converter::View vConverter) const;
00154 
00155 
00156     // ----- data members ---------------------------------------------------
00157 
00158     private:
00159         /**
00160         * The underlying Filter.
00161         */
00162         FinalView<Filter> f_vFilter;
00163 
00164         /**
00165         * The underlying set of keys.
00166         */
00167         mutable MemberView<Set> m_vSetKeys;
00168 
00169         /**
00170         * A flag that indicates that the key set has been converted to internal
00171         * form.
00172         */
00173         mutable bool m_fConverted;
00174     };
00175 
00176 COH_CLOSE_NAMESPACE3
00177 
00178 #endif // COH_IN_KEY_SET_FILTER_HPP
Copyright © 2000, 2025, Oracle and/or its affiliates. Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.