| // (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 <ndnboost/test/utils/basic_cstring/basic_cstring.hpp> |
| |
| // STL |
| #include <functional> |
| #include <cctype> |
| |
| #include <ndnboost/test/detail/suppress_warnings.hpp> |
| |
| //____________________________________________________________________________// |
| |
| # if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570) |
| namespace std { using ::toupper; } |
| # endif |
| |
| namespace ndnboost { |
| |
| 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 bool |
| case_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 bool |
| operator <( ndnboost::unit_test::basic_cstring<CharT> const& x, |
| ndnboost::unit_test::basic_cstring<CharT> const& y ) |
| { |
| typedef typename ndnboost::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 ndnboost |
| |
| //____________________________________________________________________________// |
| |
| #include <ndnboost/test/detail/enable_warnings.hpp> |
| |
| #endif // BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER |