straits.h (is_del): Boolify with !!.
authorJason Merrill <jason@gcc.gnu.org>
Fri, 11 Aug 2000 22:41:38 +0000 (18:41 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 11 Aug 2000 22:41:38 +0000 (18:41 -0400)
        * std/straits.h (is_del): Boolify with !!.

        * std/bastring.cc (compare to charT*): Add rlen==n check.
        * std/bastring.h (Rep::grab): Add x86 atomic version.

From-SVN: r35647

libstdc++/ChangeLog
libstdc++/std/bastring.cc
libstdc++/std/bastring.h
libstdc++/std/straits.h

index 010a805f24c941035174710e32d8fd3b774ca537..ba4a27385e5a4e00626d8018f1d21ad0ce18e292 100644 (file)
@@ -1,3 +1,12 @@
+2000-08-11  Jason Merrill  <jason@redhat.com>
+
+       * std/straits.h (is_del): Boolify with !!.
+
+2000-08-11  "Axel Habermann" <Axel.Habermann@xtradyne.de>
+
+       * std/bastring.cc (compare to charT*): Add rlen==n check.
+       * std/bastring.h (Rep::grab): Add x86 atomic version.
+
 2000-8-4  David E O'Brien  <obrien@FreeBSD.org>
 
        * std/mask_array.h (mask_array): Rename template type
index f86f6d30157c602fb5c30ced6fa93cba1acafc09..b8fec4fa7dba9c98d6b02f30288ebbbebfbb3c17 100644 (file)
@@ -1,5 +1,5 @@
 // Member templates for the -*- C++ -*- string classes.
-// Copyright (C) 1994, 1999 Free Software Foundation
+// Copyright (C) 1994, 1999, 2000 Free Software Foundation
 
 // This file is part of the GNU ANSI C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -423,6 +423,8 @@ compare (const charT* s, size_type pos, size_type n) const
   int r = traits::compare (data () + pos, s, rlen);
   if (r != 0)
     return r;
+  if (rlen == n)   
+    return 0;
   return (length () - pos) - n;
 }
 
index c45607a04106b6732e5e74f8df23ecd99a1cf65a..5551ec1fe478ca5d6daac9ddd2b6f23ff286fed4 100644 (file)
@@ -72,9 +72,14 @@ private:
 
     charT* data () { return reinterpret_cast<charT *>(this + 1); }
     charT& operator[] (size_t s) { return data () [s]; }
-    charT* grab () { if (selfish) return clone (); ++ref; return data (); }
 #if defined __i486__ || defined __i586__ || defined __i686__
-    void release ()
+    charT* grab () { if (selfish) return clone (); 
+      asm ("lock; addl %0, (%1)"
+           : : "a" (1), "d" (&ref)
+           : "memory");
+      return data (); }
+
+    void release () 
       {
        size_t __val;
        // This opcode exists as a .byte instead of as a mnemonic for the
@@ -90,6 +95,7 @@ private:
          delete this;
       }
 #elif defined __sparc_v9__
+    charT* grab () { if (selfish) return clone (); ++ref; return data (); }
     void release ()
       {
        size_t __newval, __oldval = ref;
@@ -111,6 +117,7 @@ private:
          delete this;
       }
 #else
+    charT* grab () { if (selfish) return clone (); ++ref; return data (); }
     void release () { if (--ref == 0) delete this; }
 #endif
 
index c80e7ab7a6816a47f37f06fd050c1b2d6ab6dcb7..eada4fc4d859c463f5026cdc0bf02c755810e07b 100644 (file)
@@ -1,5 +1,5 @@
 // Character traits template for the -*- C++ -*- string classes.
-// Copyright (C) 1994 Free Software Foundation
+// Copyright (C) 1994, 2000 Free Software Foundation
 
 // This file is part of the GNU ANSI C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -117,7 +117,7 @@ struct string_char_traits <char> {
   static bool lt (const char_type& c1, const char_type& c2)
     { return (c1 < c2); }
   static char_type eos () { return 0; }
-  static bool is_del(char_type a) { return isspace(a); }
+  static bool is_del(char_type a) { return !!isspace(a); }
 
   static int compare (const char_type* s1, const char_type* s2, size_t n)
     { return memcmp (s1, s2, n); }
@@ -145,7 +145,7 @@ struct string_char_traits <wchar_t> {
   static bool lt (const char_type& c1, const char_type& c2)
     { return (c1 < c2); }
   static char_type eos () { return 0; }
-  static bool is_del(char_type a) { return iswspace(a); }
+  static bool is_del(char_type a) { return !!iswspace(a); }
 
   static int compare (const char_type* s1, const char_type* s2, size_t n)
     { return wmemcmp (s1, s2, n); }