annotate DEPENDENCIES/generic/include/boost/test/utils/basic_cstring/compare.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // (C) Copyright Gennadiy Rozental 2004-2008.
Chris@16 2 // Distributed under the Boost Software License, Version 1.0.
Chris@16 3 // (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 4 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 5
Chris@16 6 // See http://www.boost.org/libs/test for the library home page.
Chris@16 7 //
Chris@16 8 // File : $RCSfile$
Chris@16 9 //
Chris@101 10 // Version : $Revision$
Chris@16 11 //
Chris@16 12 // Description : class basic_cstring comparisons implementation
Chris@16 13 // ***************************************************************************
Chris@16 14
Chris@16 15 #ifndef BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER
Chris@16 16 #define BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER
Chris@16 17
Chris@16 18 // Boost.Test
Chris@16 19 #include <boost/test/utils/basic_cstring/basic_cstring.hpp>
Chris@16 20
Chris@16 21 // STL
Chris@16 22 #include <functional>
Chris@16 23 #include <cctype>
Chris@16 24
Chris@16 25 #include <boost/test/detail/suppress_warnings.hpp>
Chris@16 26
Chris@16 27 //____________________________________________________________________________//
Chris@16 28
Chris@16 29 # if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570)
Chris@16 30 namespace std { using ::toupper; }
Chris@16 31 # endif
Chris@16 32
Chris@16 33 namespace boost {
Chris@16 34
Chris@16 35 namespace unit_test {
Chris@16 36
Chris@16 37 // ************************************************************************** //
Chris@16 38 // ************** case_ins_compare ************** //
Chris@16 39 // ************************************************************************** //
Chris@16 40
Chris@16 41 namespace ut_detail {
Chris@16 42
Chris@16 43 template<class CharT>
Chris@16 44 struct case_ins
Chris@16 45 {
Chris@16 46 static bool eq( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) == (std::toupper)( c2 ); }
Chris@16 47 static bool lt( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) < (std::toupper)( c2 ); }
Chris@16 48
Chris@16 49 static int compare( CharT const* s1, CharT const* s2, std::size_t n )
Chris@16 50 {
Chris@16 51 for( std::size_t i = 0; i < n; ++i ) {
Chris@16 52 if( !eq( s1[i], s2[i] ) )
Chris@16 53 return lt( s1[i], s2[i] ) ? -1 : 1;
Chris@16 54 }
Chris@16 55 return 0;
Chris@16 56 }
Chris@16 57 };
Chris@16 58
Chris@16 59 } // namespace ut_detail
Chris@16 60
Chris@16 61 // ************************************************************************** //
Chris@16 62 // ************** case_ins_eq ************** //
Chris@16 63 // ************************************************************************** //
Chris@16 64
Chris@16 65 template<class CharT>
Chris@16 66 inline bool
Chris@16 67 case_ins_eq( basic_cstring<CharT> x, basic_cstring<CharT> y )
Chris@16 68 {
Chris@16 69 return x.size() == y.size() && ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) == 0;
Chris@16 70 }
Chris@16 71
Chris@16 72 //____________________________________________________________________________//
Chris@16 73
Chris@16 74 // ************************************************************************** //
Chris@16 75 // ************** case_ins_less ************** //
Chris@16 76 // ************************************************************************** //
Chris@16 77
Chris@16 78 template<class CharT>
Chris@16 79 class case_ins_less : public std::binary_function<basic_cstring<CharT>,basic_cstring<CharT>,bool>
Chris@16 80 {
Chris@16 81 public:
Chris@16 82 bool operator()( basic_cstring<CharT> x, basic_cstring<CharT> y ) const
Chris@16 83 {
Chris@16 84 return x.size() != y.size()
Chris@16 85 ? x.size() < y.size()
Chris@16 86 : ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) < 0;
Chris@16 87 }
Chris@16 88 };
Chris@16 89
Chris@16 90 //____________________________________________________________________________//
Chris@16 91
Chris@16 92 // ************************************************************************** //
Chris@16 93 // ************** operator < ************** //
Chris@16 94 // ************************************************************************** //
Chris@16 95
Chris@16 96 template<class CharT>
Chris@16 97 inline bool
Chris@16 98 operator <( boost::unit_test::basic_cstring<CharT> const& x,
Chris@16 99 boost::unit_test::basic_cstring<CharT> const& y )
Chris@16 100 {
Chris@16 101 typedef typename boost::unit_test::basic_cstring<CharT>::traits_type traits_type;
Chris@16 102 return x.size() != y.size()
Chris@16 103 ? x.size() < y.size()
Chris@16 104 : traits_type::compare( x.begin(), y.begin(), x.size() ) < 0;
Chris@16 105 }
Chris@16 106
Chris@16 107 } // namespace unit_test
Chris@16 108
Chris@16 109 } // namespace boost
Chris@16 110
Chris@16 111 //____________________________________________________________________________//
Chris@16 112
Chris@16 113 #include <boost/test/detail/enable_warnings.hpp>
Chris@16 114
Chris@16 115 #endif // BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER