compare.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 200 行

HPP
200
字号
//  Boost string_algo library compare.hpp header file  -------------------------////  Copyright Pavol Droba 2002-2006.//// Distributed under the Boost Software License, Version 1.0.//    (See accompanying file LICENSE_1_0.txt or copy at//          http://www.boost.org/LICENSE_1_0.txt)//  See http://www.boost.org/ for updates, documentation, and revision history.#ifndef BOOST_STRING_COMPARE_HPP#define BOOST_STRING_COMPARE_HPP#include <boost/algorithm/string/config.hpp>#include <locale>/*! \file    Defines element comparison predicates. Many algorithms in this library can    take an additional argument with a predicate used to compare elements.    This makes it possible, for instance, to have case insensitive versions    of the algorithms.*/namespace boost {    namespace algorithm {        //  is_equal functor  -----------------------------------------------//        //! is_equal functor        /*!            Standard STL equal_to only handle comparison between arguments            of the same type. This is a less restrictive version which wraps operator ==.        */        struct is_equal        {            //! Function operator            /*!                Compare two operands for equality            */            template< typename T1, typename T2 >                bool operator()( const T1& Arg1, const T2& Arg2 ) const            {                return Arg1==Arg2;            }        };        //! case insensitive version of is_equal        /*!            Case insensitive comparison predicate. Comparison is done using            specified locales.        */        struct is_iequal        {            //! Constructor            /*!                \param Loc locales used for comparison            */            is_iequal( const std::locale& Loc=std::locale() ) :                m_Loc( Loc ) {}            //! Function operator            /*!                Compare two operands. Case is ignored.            */            template< typename T1, typename T2 >                bool operator()( const T1& Arg1, const T2& Arg2 ) const            {                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)                    return std::toupper(Arg1)==std::toupper(Arg2);                #else                    return std::toupper<T1>(Arg1,m_Loc)==std::toupper<T2>(Arg2,m_Loc);                #endif            }        private:            std::locale m_Loc;        };        //  is_less functor  -----------------------------------------------//        //! is_less functor        /*!            Convenient version of standard std::less. Operation is templated, therefore it is             not required to specify the exact types upon the construction         */        struct is_less        {            //! Functor operation            /*!                Compare two operands using > operator             */            template< typename T1, typename T2 >                bool operator()( const T1& Arg1, const T2& Arg2 ) const            {                return Arg1<Arg2;            }        };        //! case insensitive version of is_less        /*!            Case insensitive comparison predicate. Comparison is done using            specified locales.        */        struct is_iless        {            //! Constructor            /*!                \param Loc locales used for comparison            */            is_iless( const std::locale& Loc=std::locale() ) :                m_Loc( Loc ) {}            //! Function operator            /*!                Compare two operands. Case is ignored.            */            template< typename T1, typename T2 >                bool operator()( const T1& Arg1, const T2& Arg2 ) const            {                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)                    return std::toupper(Arg1)<std::toupper(Arg2);                #else                    return std::toupper<T1>(Arg1,m_Loc)<std::toupper<T2>(Arg2,m_Loc);                #endif            }        private:            std::locale m_Loc;        };        //  is_not_greater functor  -----------------------------------------------//        //! is_not_greater functor        /*!            Convenient version of standard std::not_greater_to. Operation is templated, therefore it is             not required to specify the exact types upon the construction         */        struct is_not_greater        {            //! Functor operation            /*!                Compare two operands using > operator             */            template< typename T1, typename T2 >                bool operator()( const T1& Arg1, const T2& Arg2 ) const            {                return Arg1<=Arg2;            }        };        //! case insensitive version of is_not_greater        /*!            Case insensitive comparison predicate. Comparison is done using            specified locales.        */        struct is_not_igreater        {            //! Constructor            /*!                \param Loc locales used for comparison            */            is_not_igreater( const std::locale& Loc=std::locale() ) :                m_Loc( Loc ) {}            //! Function operator            /*!                Compare two operands. Case is ignored.            */            template< typename T1, typename T2 >                bool operator()( const T1& Arg1, const T2& Arg2 ) const            {                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)                    return std::toupper(Arg1)<=std::toupper(Arg2);                #else                    return std::toupper<T1>(Arg1,m_Loc)<=std::toupper<T2>(Arg2,m_Loc);                #endif            }        private:            std::locale m_Loc;        };    } // namespace algorithm    // pull names to the boost namespace    using algorithm::is_equal;    using algorithm::is_iequal;    using algorithm::is_less;    using algorithm::is_iless;    using algorithm::is_not_greater;    using algorithm::is_not_igreater;} // namespace boost#endif  // BOOST_STRING_COMPARE_HPP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?