]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
locale_facets.h (struct __numpunct_cache): Add members _M_truename_len and _M_falsena...
authorPaolo Carlini <pcarlini@suse.de>
Mon, 12 Jan 2004 17:02:08 +0000 (17:02 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 12 Jan 2004 17:02:08 +0000 (17:02 +0000)
2004-01-12  Paolo Carlini  <pcarlini@suse.de>

* include/bits/locale_facets.h (struct __numpunct_cache):
Add members _M_truename_len and _M_falsename_len, caching
the lengths of _M_truename and _M_falsename.
(__numpunct_cache<>::_M_cache): Assign the latter.
* include/bits/locale_facets.tcc (num_get::do_get(bool&),
num_put::do_put(bool)): Use the new members, thus avoiding
computing string lengths again and again.
* config/locale/generic/numeric_members.cc
(numpunct<>::_M_initialize_numpunct): Assign the new members.
* config/locale/gnu/numeric_members.cc
(numpunct<>::_M_initialize_numpunct): Likewise.

From-SVN: r75735

libstdc++-v3/ChangeLog
libstdc++-v3/config/locale/generic/numeric_members.cc
libstdc++-v3/config/locale/gnu/numeric_members.cc
libstdc++-v3/include/bits/locale_facets.h
libstdc++-v3/include/bits/locale_facets.tcc

index e59eb5afd01112f14c2acd7268d6a905988463f8..0929ea8e4fc931d0a6bbfe429414018f9e6b893b 100644 (file)
@@ -1,3 +1,17 @@
+2004-01-12  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/bits/locale_facets.h (struct __numpunct_cache):
+       Add members _M_truename_len and _M_falsename_len, caching
+       the lengths of _M_truename and _M_falsename.
+       (__numpunct_cache<>::_M_cache): Assign the latter.
+       * include/bits/locale_facets.tcc (num_get::do_get(bool&),
+       num_put::do_put(bool)): Use the new members, thus avoiding
+       computing string lengths again and again.
+       * config/locale/generic/numeric_members.cc
+       (numpunct<>::_M_initialize_numpunct): Assign the new members.
+       * config/locale/gnu/numeric_members.cc
+       (numpunct<>::_M_initialize_numpunct): Likewise.
+
 2004-01-12  Mark Mitchell  <mark@codesourcery.com>
 
        * testsuite/testsuite_hooks.h (__gnu_test::try_mkfifo): Declare it.
index 8af127b8644fa56f18ccafecda858c304fa9c5e9..72760aee0d0192198c6c85aadd07bada1197d93e 100644 (file)
@@ -58,7 +58,9 @@ namespace std
        _M_data->_M_atoms_in[__i] = __num_base::_S_atoms_in[__i];
 
       _M_data->_M_truename = "true";
-      _M_data->_M_falsename = "false";      
+      _M_data->_M_truename_len = strlen(_M_data->_M_truename);
+      _M_data->_M_falsename = "false";
+      _M_data->_M_falsename_len = strlen(_M_data->_M_falsename);
     }
 
   template<> 
@@ -95,7 +97,9 @@ namespace std
        }
       
       _M_data->_M_truename = L"true";
+      _M_data->_M_truename_len = wcslen(_M_data->_M_truename);
       _M_data->_M_falsename = L"false";
+      _M_data->_M_falsename_len = wcslen(_M_data->_M_falsename);
     }
 
   template<> 
index bc7711a7e55bdcddde1c29cfe0ab1b9ddecdb63a..b830456af2ed177909a21912cd3b9516e91b43f8 100644 (file)
@@ -75,8 +75,10 @@ namespace std
       // NB: There is no way to extact this info from posix locales.
       // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
       _M_data->_M_truename = "true";
+      _M_data->_M_truename_len = strlen(_M_data->_M_truename);
       // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
       _M_data->_M_falsename = "false";
+      _M_data->_M_falsename_len = strlen(_M_data->_M_falsename);
     }
  
   template<> 
@@ -138,8 +140,10 @@ namespace std
       // NB: There is no way to extact this info from posix locales.
       // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
       _M_data->_M_truename = L"true";
+      _M_data->_M_truename_len = wcslen(_M_data->_M_truename);
       // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
       _M_data->_M_falsename = L"false";
+      _M_data->_M_falsename_len = wcslen(_M_data->_M_falsename);
     }
 
   template<> 
index 119e50702321eebb6061a79fc06ae46ac962e96c..493d3a4e0fc4d82140c7bb8c82d4fd71f921be84 100644 (file)
@@ -1605,6 +1605,8 @@ namespace std
       bool                             _M_use_grouping;
       const _CharT*                    _M_truename;
       const _CharT*                    _M_falsename;
+      size_t                            _M_truename_len;
+      size_t                            _M_falsename_len;     
       _CharT                           _M_decimal_point;
       _CharT                           _M_thousands_sep;
       
@@ -1624,8 +1626,9 @@ namespace std
 
       __numpunct_cache(size_t __refs = 0) : facet(__refs), 
       _M_grouping(NULL), _M_use_grouping(false), _M_truename(NULL), 
-      _M_falsename(NULL), _M_decimal_point(_CharT()), 
-      _M_thousands_sep(_CharT()), _M_allocated(false)
+      _M_falsename(NULL),  _M_truename_len(0), _M_falsename_len(0),
+      _M_decimal_point(_CharT()), _M_thousands_sep(_CharT()),
+      _M_allocated(false)
       { } 
 
       ~__numpunct_cache();
@@ -1649,17 +1652,14 @@ namespace std
       _M_grouping = __grouping;
       _M_use_grouping = __len && __np.grouping()[0] != 0;
 
-      typedef basic_string<_CharT> __string_type;
-      typename __string_type::size_type __lentf = __np.truename().size();
-      _CharT* __truename = new _CharT[__lentf + 1];
-      __np.truename().copy(__truename, __lentf);
-      __truename[__lentf] = _CharT();
+      _M_truename_len = __np.truename().size();
+      _CharT* __truename = new _CharT[_M_truename_len];
+      __np.truename().copy(__truename, _M_truename_len);
       _M_truename = __truename;
-      
-      __lentf = __np.falsename().size();
-      _CharT* __falsename = new _CharT[__lentf + 1];
-      __np.falsename().copy(__falsename, __lentf);
-      __falsename[__lentf] = _CharT();
+
+      _M_falsename_len = __np.falsename().size();
+      _CharT* __falsename = new _CharT[_M_falsename_len];
+      __np.falsename().copy(__falsename, _M_falsename_len);
       _M_falsename = __falsename;
           
       _M_decimal_point = __np.decimal_point();
index 4a6d532b01d1d92f9f24791e3b26e18b877717a0..879b9e3a8eb5adbe6d013e524f9f3a970de28382 100644 (file)
@@ -529,8 +529,6 @@ namespace std
          __use_cache<__cache_type> __uc;
          const locale& __loc = __io._M_getloc();
          const __cache_type* __lc = __uc(__loc);
-         const size_t __tn = __traits_type::length(__lc->_M_truename);
-         const size_t __fn = __traits_type::length(__lc->_M_falsename);
 
          bool __testf = true;
          bool __testt = true;
@@ -538,13 +536,13 @@ namespace std
           for (__n = 0; __beg != __end; ++__n, ++__beg)
             {
              if (__testf)
-               if (__n < __fn)
+               if (__n < __lc->_M_falsename_len)
                  __testf = __traits_type::eq(*__beg, __lc->_M_falsename[__n]);
                else
                  break;
 
              if (__testt)
-               if (__n < __tn)
+               if (__n < __lc->_M_truename_len)
                  __testt = __traits_type::eq(*__beg, __lc->_M_truename[__n]);
                else
                  break;
@@ -552,9 +550,9 @@ namespace std
              if (!__testf && !__testt)
                break;      
             }
-         if (__testf && __n == __fn)
+         if (__testf && __n == __lc->_M_falsename_len)
            __v = 0;
-         else if (__testt && __n == __tn)
+         else if (__testt && __n == __lc->_M_truename_len)
            __v = 1;
          else
            __err |= ios_base::failbit;
@@ -1048,7 +1046,8 @@ namespace std
 
          const _CharT* __name = __v ? __lc->_M_truename 
                                     : __lc->_M_falsename;
-         int __len = char_traits<_CharT>::length(__name);
+         int __len = __v ? __lc->_M_truename_len
+                         : __lc->_M_falsename_len;
 
          const streamsize __w = __io.width();
          if (__w > static_cast<streamsize>(__len))