coherence/util/comparator/InverseComparator.hpp

00001 /*
00002 * InverseComparator.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_INVERSE_COMPARATOR_HPP
00017 #define COH_INVERSE_COMPARATOR_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/Comparator.hpp"
00025 #include "coherence/util/comparator/SafeComparator.hpp"
00026 #include "coherence/util/QueryMap.hpp"
00027 #include "coherence/util/comparator/QueryMapComparator.hpp"
00028 
00029 COH_OPEN_NAMESPACE3(coherence,util,comparator)
00030 
00031 using coherence::io::pof::PofReader;
00032 using coherence::io::pof::PofWriter;
00033 using coherence::io::pof::PortableObject;
00034 using coherence::util::comparator::SafeComparator;
00035 
00036 /**
00037 * Comparator that reverses the result of another comparator.
00038 *
00039 * @author gm  2008.08.05
00040 */
00041 class COH_EXPORT InverseComparator
00042     : public class_spec<InverseComparator,
00043         extends<SafeComparator>,
00044         implements<QueryMapComparator> >
00045     {
00046     friend class factory<InverseComparator>;
00047 
00048     // ----- constructors/destructor ----------------------------------------
00049 
00050     protected:
00051         /**
00052         * Default constructor (necessary for the PortableObject interface).
00053         */
00054         InverseComparator();
00055 
00056         /**
00057         * Construct a InverseComparator.
00058         *
00059         * @param vComparator  the comparator whose results are inverted by
00060         *                    this Comparator
00061         */
00062         InverseComparator(Comparator::View vComparator);
00063 
00064 
00065     // ----- Comparator interface -------------------------------------------
00066 
00067     public:
00068         /**
00069         * Use the wrapped Comparator to compare the two arguments for order and
00070         * negate the result.
00071         *
00072         * @param vO1  the first object to be compared
00073         * @param vO2  the second object to be compared
00074         *
00075         * @return a positive integer, zero, or a negative integer as the first
00076         *          argument is less than, equal to, or greater than the second
00077         *
00078         * @throws ClassCastException if the arguments' types prevent them from
00079         *          being compared by this Comparator.
00080         */
00081         virtual int32_t compare(Object::View vO1, Object::View vO2) const;
00082 
00083     // ----- QueryMap interface ---------------------------------------------
00084 
00085     public:
00086         /**
00087         * Compare two entries using the underlying comparator and negate the
00088         * result.
00089         */
00090         virtual int32_t compareEntries(QueryMap::Entry::View vEntry1,
00091                     QueryMap::Entry::View vEntry2) const;
00092 
00093 
00094     // ----- Object interface -----------------------------------------------
00095 
00096     public:
00097         /**
00098         * {@inheritDoc}
00099         */
00100         virtual bool equals(Object::View v) const;
00101 
00102 
00103     // ----- constants ------------------------------------------------------
00104 
00105     public:
00106         /**
00107         * An instance of the InverseComparator.
00108         */
00109         static InverseComparator::Handle getInstance();
00110     };
00111 
00112 COH_CLOSE_NAMESPACE3
00113 
00114 #endif // COH_INVERSE_COMPARATOR_HPP
Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.