From 8545aeb1f32b266fca026562b3eea1c21fe5bce3 Mon Sep 17 00:00:00 2001 From: John Maddock Date: Wed, 19 Jan 2005 11:13:53 +0000 Subject: [PATCH] Fixed primary equivalence classes, so that delimiter based sort keys with a delim in position 0 still work. [SVN r26738] --- include/boost/regex/v4/cpp_regex_traits.hpp | 4 +++- src/c_regex_traits.cpp | 2 ++ src/wc_regex_traits.cpp | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/boost/regex/v4/cpp_regex_traits.hpp b/include/boost/regex/v4/cpp_regex_traits.hpp index cbd699da..6896e60f 100644 --- a/include/boost/regex/v4/cpp_regex_traits.hpp +++ b/include/boost/regex/v4/cpp_regex_traits.hpp @@ -509,8 +509,10 @@ typename cpp_regex_traits_implementation::string_type case sort_delim: // get a regular sort key, and then truncate everything after the delim: result.assign(this->m_pcollate->transform(p1, p2)); + if(result.size() && (result[0] == m_collate_delim)) + break; std::size_t i; - for(i = 0; i < result.size(); ++i) + for(i = 1; i < result.size(); ++i) { if(result[i] == m_collate_delim) break; diff --git a/src/c_regex_traits.cpp b/src/c_regex_traits.cpp index 5cac4a44..a33f7b17 100644 --- a/src/c_regex_traits.cpp +++ b/src/c_regex_traits.cpp @@ -91,6 +91,8 @@ c_regex_traits::string_type BOOST_REGEX_CALL c_regex_traits::transfo case ::boost::re_detail::sort_delim: // get a regular sort key, and then truncate everything after the delim: result = transform(p1, p2); + if(result.size() && (result[0] == s_delim)) + break; std::size_t i; for(i = 0; i < result.size(); ++i) { diff --git a/src/wc_regex_traits.cpp b/src/wc_regex_traits.cpp index f86c5122..2b3764e3 100644 --- a/src/wc_regex_traits.cpp +++ b/src/wc_regex_traits.cpp @@ -83,6 +83,8 @@ c_regex_traits::string_type BOOST_REGEX_CALL c_regex_traits::t case ::boost::re_detail::sort_delim: // get a regular sort key, and then truncate everything after the delim: result = c_regex_traits::transform(&*result.begin(), &*result.begin() + result.size()); + if(result.size() && (result[0] == s_delim)) + break; std::size_t i; for(i = 0; i < result.size(); ++i) {