Oracle Coherence for C++ API
Release 3.7.0.0

E18684-01

coherence/util/filter/ExtractorFilter.hpp

00001 /*
00002 * ExtractorFilter.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_EXTRACTOR_FILTER_HPP
00017 #define COH_EXTRACTOR_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/Filter.hpp"
00025 #include "coherence/util/Map.hpp"
00026 #include "coherence/util/ValueExtractor.hpp"
00027 #include "coherence/util/filter/EntryFilter.hpp"
00028 
00029 COH_OPEN_NAMESPACE3(coherence,util,filter)
00030 
00031 using coherence::io::pof::PofReader;
00032 using coherence::io::pof::PofWriter;
00033 using coherence::io::pof::PortableObject;
00034 
00035 
00036 /**
00037 * Base Filter implementation for doing extractor-based processing.
00038 *
00039 * @author djl  2008.03.02
00040 */
00041 class COH_EXPORT ExtractorFilter
00042     : public abstract_spec<ExtractorFilter,
00043         extends<Object>,
00044         implements<EntryFilter, PortableObject> >
00045     {
00046     // ----- constructors ---------------------------------------------------
00047 
00048     protected:
00049         /**
00050         * Default constructor (necessary for the PortableObject interface).
00051         */
00052         ExtractorFilter();
00053 
00054         /**
00055         * Construct a ExtractorFilter for a given ValueExtractor.
00056         *
00057         * @param vExtractor the ValueExtractor to use by this filter
00058         */
00059         ExtractorFilter(ValueExtractor::View vExtractor);
00060 
00061 
00062     // ----- ExtractorFilter interface --------------------------------------
00063 
00064     protected:
00065         /**
00066         * Evaluate the specified extracted value.
00067         *
00068         * @param vExtracted  an extracted value to evaluate
00069         */
00070         virtual bool evaluateExtracted(Object::View vExtracted) const = 0;
00071 
00072         /**
00073         * Get the result of ValueExtractor invocation.
00074         *
00075         * @param v  the object on which to invoke the ValueExtractor;
00076         *           must not be NULL
00077         *
00078         * @return the result of the method invocation
00079         */
00080         virtual Object::View extract(Object::View v) const;
00081 
00082 
00083     // ----- EntryFilter interface ------------------------------------------
00084 
00085     public:
00086         /**
00087         * {@inheritDoc}
00088         */
00089         virtual bool evaluateEntry(Map::Entry::View vEntry) const;
00090 
00091 
00092     // ----- Filter interface -----------------------------------------------
00093 
00094     public:
00095         /**
00096         * {@inheritDoc}
00097         */
00098         virtual bool evaluate(Object::View v) const;
00099 
00100 
00101     // ----- PortableObject interface ---------------------------------------
00102 
00103      public:
00104         /**
00105         * {@inheritDoc}
00106         */
00107         virtual void readExternal(PofReader::Handle hIn);
00108 
00109         /**
00110         * {@inheritDoc}
00111         */
00112         virtual void writeExternal(PofWriter::Handle hOut) const;
00113 
00114 
00115     // ----- Object interface -----------------------------------------------
00116 
00117     public:
00118         /**
00119         * {@inheritDoc}
00120         */
00121         virtual void toStream(std::ostream& out) const;
00122 
00123 
00124     // ----- data member accessors ------------------------------------------
00125 
00126     public:
00127         /**
00128         * Obtain the ValueExtractor used by this filter.
00129         *
00130         * @return the ValueExtractor::View used by this filter
00131         */
00132         virtual ValueExtractor::View getValueExtractor() const;
00133 
00134 
00135     // ----- constants ------------------------------------------------------
00136 
00137     public:
00138         /**
00139         * The evaluation cost as a factor to the single index access operation.
00140         *
00141         * @see IndexAwareFilter#calculateEffectiveness(Map, Set)
00142         */
00143         static const size32_t eval_cost = 1000;
00144 
00145 
00146    // ----- data members ---------------------------------------------------
00147 
00148     protected:
00149         /**
00150         * The ValueExtractor used by this filter.
00151         */
00152         MemberView<ValueExtractor> m_vExtractor;
00153     };
00154 
00155 COH_CLOSE_NAMESPACE3
00156 
00157 #endif // COH_EXTRACTOR_FILTER_HPP
Copyright © 2000, 2011, Oracle and/or its affiliates. All rights reserved.