OSDN Git Service

2004-04-29 Paolo Carlini <pcarlini@suse.de>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Apr 2004 22:07:13 +0000 (22:07 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Apr 2004 22:07:13 +0000 (22:07 +0000)
* src/locale.cc (locale::operator==): Always avoid constructing
locale::name(), directly compare pairs of _M_names.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@81309 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/src/locale.cc

index 410070a..f61c644 100644 (file)
@@ -1,3 +1,8 @@
+2004-04-29  Paolo Carlini  <pcarlini@suse.de>
+
+       * src/locale.cc (locale::operator==): Always avoid constructing
+       locale::name(), directly compare pairs of _M_names.
+
 2004-04-26  Paolo Carlini  <pcarlini@suse.de>
 
        * include/bits/istream.tcc: Fix comment.
index 0ed2dbb..af4f34d 100644 (file)
@@ -70,15 +70,15 @@ namespace std
   bool
   locale::operator==(const locale& __rhs) const throw()
   {
-    bool __ret = false;
+    bool __ret = true;
     if (_M_impl == __rhs._M_impl)
-      __ret = true;
+      ;
+    else if (!std::strcmp(_M_impl->_M_names[0], "*"))
+      __ret = false;
     else
-      {
-       const string __name = this->name();
-       if (__name != "*" && __name == __rhs.name())
-         __ret = true;
-      }
+      for (size_t __i = 0; __ret && __i < _S_categories_size; ++__i)
+       __ret = !std::strcmp(_M_impl->_M_names[__i],
+                            __rhs._M_impl->_M_names[__i]);
     return __ret;
   }