compare.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 116 行
HPP
116 行
// (C) Copyright Gennadiy Rozental 2004-2008.// 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/libs/test for the library home page.//// File : $RCSfile$//// Version : $Revision: 49312 $//// Description : class basic_cstring comparisons implementation// ***************************************************************************#ifndef BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER#define BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER// Boost.Test#include <boost/test/utils/basic_cstring/basic_cstring.hpp>// STL#include <functional>#include <cctype>#include <boost/test/detail/suppress_warnings.hpp>//____________________________________________________________________________//# if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570)namespace std { using ::toupper; }# endifnamespace boost {namespace unit_test {// ************************************************************************** //// ************** case_ins_compare ************** //// ************************************************************************** //namespace ut_detail {template<class CharT>struct case_ins{ static bool eq( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) == (std::toupper)( c2 ); } static bool lt( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) < (std::toupper)( c2 ); } static int compare( CharT const* s1, CharT const* s2, std::size_t n ) { for( std::size_t i = 0; i < n; ++i ) { if( !eq( s1[i], s2[i] ) ) return lt( s1[i], s2[i] ) ? -1 : 1; } return 0; }};} // namespace ut_detail// ************************************************************************** //// ************** case_ins_eq ************** //// ************************************************************************** //template<class CharT>inline boolcase_ins_eq( basic_cstring<CharT> x, basic_cstring<CharT> y ){ return x.size() == y.size() && ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) == 0;}//____________________________________________________________________________//// ************************************************************************** //// ************** case_ins_less ************** //// ************************************************************************** //template<class CharT>class case_ins_less : public std::binary_function<basic_cstring<CharT>,basic_cstring<CharT>,bool>{public: bool operator()( basic_cstring<CharT> x, basic_cstring<CharT> y ) const { return x.size() != y.size() ? x.size() < y.size() : ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) < 0; }};//____________________________________________________________________________//// ************************************************************************** //// ************** operator < ************** //// ************************************************************************** //template<class CharT>inline booloperator <( boost::unit_test::basic_cstring<CharT> const& x, boost::unit_test::basic_cstring<CharT> const& y ){ typedef typename boost::unit_test::basic_cstring<CharT>::traits_type traits_type; return x.size() != y.size() ? x.size() < y.size() : traits_type::compare( x.begin(), y.begin(), x.size() ) < 0;}} // namespace unit_test} // namespace boost//____________________________________________________________________________//#include <boost/test/detail/enable_warnings.hpp>#endif // BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?