Chris@16: // (C) Copyright Gennadiy Rozental 2004-2008. Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org/libs/test for the library home page. Chris@16: // Chris@16: // File : $RCSfile$ Chris@16: // Chris@101: // Version : $Revision$ Chris@16: // Chris@16: // Description : class basic_cstring comparisons implementation Chris@16: // *************************************************************************** Chris@16: Chris@16: #ifndef BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER Chris@16: #define BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER Chris@16: Chris@16: // Boost.Test Chris@16: #include Chris@16: Chris@16: // STL Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: # if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570) Chris@16: namespace std { using ::toupper; } Chris@16: # endif Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: namespace unit_test { Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** case_ins_compare ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: namespace ut_detail { Chris@16: Chris@16: template Chris@16: struct case_ins Chris@16: { Chris@16: static bool eq( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) == (std::toupper)( c2 ); } Chris@16: static bool lt( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) < (std::toupper)( c2 ); } Chris@16: Chris@16: static int compare( CharT const* s1, CharT const* s2, std::size_t n ) Chris@16: { Chris@16: for( std::size_t i = 0; i < n; ++i ) { Chris@16: if( !eq( s1[i], s2[i] ) ) Chris@16: return lt( s1[i], s2[i] ) ? -1 : 1; Chris@16: } Chris@16: return 0; Chris@16: } Chris@16: }; Chris@16: Chris@16: } // namespace ut_detail Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** case_ins_eq ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: template Chris@16: inline bool Chris@16: case_ins_eq( basic_cstring x, basic_cstring y ) Chris@16: { Chris@16: return x.size() == y.size() && ut_detail::case_ins::compare( x.begin(), y.begin(), x.size() ) == 0; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** case_ins_less ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: template Chris@16: class case_ins_less : public std::binary_function,basic_cstring,bool> Chris@16: { Chris@16: public: Chris@16: bool operator()( basic_cstring x, basic_cstring y ) const Chris@16: { Chris@16: return x.size() != y.size() Chris@16: ? x.size() < y.size() Chris@16: : ut_detail::case_ins::compare( x.begin(), y.begin(), x.size() ) < 0; Chris@16: } Chris@16: }; Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** operator < ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: template Chris@16: inline bool Chris@16: operator <( boost::unit_test::basic_cstring const& x, Chris@16: boost::unit_test::basic_cstring const& y ) Chris@16: { Chris@16: typedef typename boost::unit_test::basic_cstring::traits_type traits_type; Chris@16: return x.size() != y.size() Chris@16: ? x.size() < y.size() Chris@16: : traits_type::compare( x.begin(), y.begin(), x.size() ) < 0; Chris@16: } Chris@16: Chris@16: } // namespace unit_test Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER