Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r57739 - in trunk: boost/regex boost/regex/v4 libs/regex/example/snippets libs/regex/test/concepts libs/regex/test/regress
From: john_at_[hidden]
Date: 2009-11-18 04:59:43


Author: johnmaddock
Date: 2009-11-18 04:59:42 EST (Wed, 18 Nov 2009)
New Revision: 57739
URL: http://svn.boost.org/trac/boost/changeset/57739

Log:
Suppress external templates with Mingw32 - it seems to cause issues with dll's.
Fix match_results.swap.
Add missing namespace qualifiers to ICU code: fixes #3631.
Text files modified:
   trunk/boost/regex/config.hpp | 6 ++++++
   trunk/boost/regex/icu.hpp | 26 +++++++++++++-------------
   trunk/boost/regex/v4/match_results.hpp | 2 ++
   trunk/boost/regex/v4/u32regex_iterator.hpp | 2 +-
   trunk/boost/regex/v4/u32regex_token_iterator.hpp | 6 +++---
   trunk/libs/regex/example/snippets/icu_example.cpp | 18 +++++++++---------
   trunk/libs/regex/test/concepts/icu_concept_check.cpp | 9 ++++++++-
   trunk/libs/regex/test/regress/test_icu.cpp | 2 +-
   8 files changed, 43 insertions(+), 28 deletions(-)

Modified: trunk/boost/regex/config.hpp
==============================================================================
--- trunk/boost/regex/config.hpp (original)
+++ trunk/boost/regex/config.hpp 2009-11-18 04:59:42 EST (Wed, 18 Nov 2009)
@@ -92,6 +92,12 @@
 #if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS)
 # define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
 #endif
+/*
+ * Shared regex lib will crash without this, frankly it looks a lot like a gcc bug:
+ */
+#if defined(__MINGW32__)
+# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+#endif
 
 /*
  * If there isn't good enough wide character support then there will

Modified: trunk/boost/regex/icu.hpp
==============================================================================
--- trunk/boost/regex/icu.hpp (original)
+++ trunk/boost/regex/icu.hpp 2009-11-18 04:59:42 EST (Wed, 18 Nov 2009)
@@ -376,7 +376,7 @@
 //
 // Construction from ICU string type:
 //
-inline u32regex make_u32regex(const UnicodeString& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
+inline u32regex make_u32regex(const U_NAMESPACE_QUALIFIER UnicodeString& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
 {
    return re_detail::do_make_u32regex(s.getBuffer(), s.getBuffer() + s.length(), opt, static_cast<boost::mpl::int_<2> const*>(0));
 }
@@ -498,7 +498,7 @@
    return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
-inline bool u32regex_match(const UnicodeString& s,
+inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                         match_results<const UChar*>& m,
                         const u32regex& e,
                         match_flag_type flags = match_default)
@@ -562,7 +562,7 @@
    return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
-inline bool u32regex_match(const UnicodeString& s,
+inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                         const u32regex& e,
                         match_flag_type flags = match_default)
 {
@@ -683,7 +683,7 @@
    return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
-inline bool u32regex_search(const UnicodeString& s,
+inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                         match_results<const UChar*>& m,
                         const u32regex& e,
                         match_flag_type flags = match_default)
@@ -744,7 +744,7 @@
    return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
-inline bool u32regex_search(const UnicodeString& s,
+inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                         const u32regex& e,
                         match_flag_type flags = match_default)
 {
@@ -921,7 +921,7 @@
                          Iterator first,
                          Iterator last,
                          const u32regex& e,
- const UnicodeString& fmt,
+ const U_NAMESPACE_QUALIFIER UnicodeString& fmt,
                          match_flag_type flags = match_default)
 {
    return re_detail::extract_output_base
@@ -966,9 +966,9 @@
 
 class unicode_string_out_iterator
 {
- UnicodeString* out;
+ U_NAMESPACE_QUALIFIER UnicodeString* out;
 public:
- unicode_string_out_iterator(UnicodeString& s) : out(&s) {}
+ unicode_string_out_iterator(U_NAMESPACE_QUALIFIER UnicodeString& s) : out(&s) {}
    unicode_string_out_iterator& operator++() { return *this; }
    unicode_string_out_iterator& operator++(int) { return *this; }
    unicode_string_out_iterator& operator*() { return *this; }
@@ -986,23 +986,23 @@
 
 }
 
-inline UnicodeString u32regex_replace(const UnicodeString& s,
+inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                          const u32regex& e,
                          const UChar* fmt,
                          match_flag_type flags = match_default)
 {
- UnicodeString result;
+ U_NAMESPACE_QUALIFIER UnicodeString result;
    re_detail::unicode_string_out_iterator i(result);
    u32regex_replace(i, s.getBuffer(), s.getBuffer()+s.length(), e, fmt, flags);
    return result;
 }
 
-inline UnicodeString u32regex_replace(const UnicodeString& s,
+inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                          const u32regex& e,
- const UnicodeString& fmt,
+ const U_NAMESPACE_QUALIFIER UnicodeString& fmt,
                          match_flag_type flags = match_default)
 {
- UnicodeString result;
+ U_NAMESPACE_QUALIFIER UnicodeString result;
    re_detail::unicode_string_out_iterator i(result);
    re_detail::do_regex_replace(
          re_detail::make_utf32_out(i, static_cast<mpl::int_<2> const*>(0)),

Modified: trunk/boost/regex/v4/match_results.hpp
==============================================================================
--- trunk/boost/regex/v4/match_results.hpp (original)
+++ trunk/boost/regex/v4/match_results.hpp 2009-11-18 04:59:42 EST (Wed, 18 Nov 2009)
@@ -348,6 +348,8 @@
    {
       std::swap(m_subs, that.m_subs);
       std::swap(m_base, that.m_base);
+ std::swap(m_named_subs, that.m_named_subs);
+ std::swap(m_last_closed_paren, that.m_last_closed_paren);
    }
    bool operator==(const match_results& that)const
    {

Modified: trunk/boost/regex/v4/u32regex_iterator.hpp
==============================================================================
--- trunk/boost/regex/v4/u32regex_iterator.hpp (original)
+++ trunk/boost/regex/v4/u32regex_iterator.hpp 2009-11-18 04:59:42 EST (Wed, 18 Nov 2009)
@@ -178,7 +178,7 @@
    typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
    return u32regex_iterator<iter_type>(p.begin(), p.end(), e, m);
 }
-inline u32regex_iterator<const UChar*> make_u32regex_iterator(const UnicodeString& s, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
+inline u32regex_iterator<const UChar*> make_u32regex_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
 {
    return u32regex_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, m);
 }

Modified: trunk/boost/regex/v4/u32regex_token_iterator.hpp
==============================================================================
--- trunk/boost/regex/v4/u32regex_token_iterator.hpp (original)
+++ trunk/boost/regex/v4/u32regex_token_iterator.hpp 2009-11-18 04:59:42 EST (Wed, 18 Nov 2009)
@@ -294,7 +294,7 @@
    typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
    return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);
 }
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
+inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
 {
    return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
 }
@@ -327,7 +327,7 @@
    return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);
 }
 template <std::size_t N>
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UnicodeString& s, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
+inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
 {
    return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
 }
@@ -356,7 +356,7 @@
    typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
    return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);
 }
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UnicodeString& s, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
+inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
 {
    return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
 }

Modified: trunk/libs/regex/example/snippets/icu_example.cpp
==============================================================================
--- trunk/libs/regex/example/snippets/icu_example.cpp (original)
+++ trunk/libs/regex/example/snippets/icu_example.cpp 2009-11-18 04:59:42 EST (Wed, 18 Nov 2009)
@@ -28,7 +28,7 @@
 // Find out if *password* meets our password requirements,
 // as defined by the regular expression *requirements*.
 //
-bool is_valid_password(const UnicodeString& password, const UnicodeString& requirements)
+bool is_valid_password(const U_NAMESPACE_QUALIFIER UnicodeString& password, const U_NAMESPACE_QUALIFIER UnicodeString& requirements)
 {
    return boost::u32regex_match(password, boost::make_u32regex(requirements));
 }
@@ -52,7 +52,7 @@
    }
 }
 
-UnicodeString extract_greek(const UnicodeString& text)
+U_NAMESPACE_QUALIFIER UnicodeString extract_greek(const U_NAMESPACE_QUALIFIER UnicodeString& text)
 {
    // searches through some UTF-16 encoded text for a block encoded in Greek,
    // this expression is imperfect, but the best we can do for now - searching
@@ -62,7 +62,7 @@
    if(boost::u32regex_search(text, what, r))
    {
       // extract $0 as a UnicodeString:
- return UnicodeString(what[0].first, what.length(0));
+ return U_NAMESPACE_QUALIFIER UnicodeString(what[0].first, what.length(0));
    }
    else
    {
@@ -127,7 +127,7 @@
 const boost::u32regex e = boost::make_u32regex("\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z");
 const char* human_format = "$1-$2-$3-$4";
 
-UnicodeString human_readable_card_number(const UnicodeString& s)
+U_NAMESPACE_QUALIFIER UnicodeString human_readable_card_number(const U_NAMESPACE_QUALIFIER UnicodeString& s)
 {
    return boost::u32regex_replace(s, e, human_format);
 }
@@ -136,8 +136,8 @@
 int main()
 {
    // password checks using u32regex_match:
- UnicodeString pwd = "abcDEF---";
- UnicodeString pwd_check = "(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}";
+ U_NAMESPACE_QUALIFIER UnicodeString pwd = "abcDEF---";
+ U_NAMESPACE_QUALIFIER UnicodeString pwd_check = "(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}";
    bool b = is_valid_password(pwd, pwd_check);
    assert(b);
    pwd = "abcD-";
@@ -152,8 +152,8 @@
    assert(file == "d.h");
 
    // Greek text extraction with u32regex_search:
- UnicodeString text = L"Some where in \x0391\x039D\x0395\x0398\x0391 2004";
- UnicodeString greek = extract_greek(text);
+ U_NAMESPACE_QUALIFIER UnicodeString text = L"Some where in \x0391\x039D\x0395\x0398\x0391 2004";
+ U_NAMESPACE_QUALIFIER UnicodeString greek = extract_greek(text);
    assert(greek == L"\x0391\x039D\x0395\x0398\x0391 2004");
 
    // extract currency symbols with associated value, use iterator interface:
@@ -161,7 +161,7 @@
    enumerate_currencies(text2);
    enumerate_currencies2(text2);
 
- UnicodeString credit_card_number = "1234567887654321";
+ U_NAMESPACE_QUALIFIER UnicodeString credit_card_number = "1234567887654321";
    credit_card_number = human_readable_card_number(credit_card_number);
    assert(credit_card_number == "1234-5678-8765-4321");
    return 0;

Modified: trunk/libs/regex/test/concepts/icu_concept_check.cpp
==============================================================================
--- trunk/libs/regex/test/concepts/icu_concept_check.cpp (original)
+++ trunk/libs/regex/test/concepts/icu_concept_check.cpp 2009-11-18 04:59:42 EST (Wed, 18 Nov 2009)
@@ -8,6 +8,13 @@
  * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  *
  */
+
+//
+// This define keep ICU in it's own namespace: helps us to track bugs that would
+// otherwise go unnoticed:
+//
+#define U_USING_ICU_NAMESPACE 0
+
 #include <boost/regex/config.hpp>
 
 #if defined(BOOST_MSVC)
@@ -66,7 +73,7 @@
    boost::regex_constants::match_flag_type flgs = boost::regex_constants::match_default;
    std::string s1;
    std::wstring s2;
- UnicodeString us;
+ U_NAMESPACE_QUALIFIER UnicodeString us;
    b = boost::u32regex_match(utf8_arch1(), utf8_arch1(), m1, e1, flgs);
    b = boost::u32regex_match(utf8_arch1(), utf8_arch1(), m1, e1);
    b = boost::u32regex_match(utf8_arch2(), utf8_arch2(), m2, e1, flgs);

Modified: trunk/libs/regex/test/regress/test_icu.cpp
==============================================================================
--- trunk/libs/regex/test/regress/test_icu.cpp (original)
+++ trunk/libs/regex/test/regress/test_icu.cpp 2009-11-18 04:59:42 EST (Wed, 18 Nov 2009)
@@ -564,7 +564,7 @@
          //
          // Now with UnicodeString:
          //
- UnicodeString expression16u, text16u, format16u, result16u, found16u;
+ U_NAMESPACE_QUALIFIER UnicodeString expression16u, text16u, format16u, result16u, found16u;
          if(expression16.size())
             expression16u.setTo(&*expression16.begin(), expression16.size());
          if(text16.size())


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk