diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2000-08-11 18:41:38 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2000-08-11 18:41:38 -0400 |
commit | dc329d293894ba51b1630a2d41c8e23e1478893b (patch) | |
tree | a60805c840ee94f03189163f278c237b8628e4cf | |
parent | dcf6e6746d750dd8bf123341fff16fa33a7ca203 (diff) | |
download | gcc-dc329d293894ba51b1630a2d41c8e23e1478893b.zip gcc-dc329d293894ba51b1630a2d41c8e23e1478893b.tar.gz gcc-dc329d293894ba51b1630a2d41c8e23e1478893b.tar.bz2 |
straits.h (is_del): Boolify with !!.
* 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
-rw-r--r-- | libstdc++/ChangeLog | 9 | ||||
-rw-r--r-- | libstdc++/std/bastring.cc | 4 | ||||
-rw-r--r-- | libstdc++/std/bastring.h | 11 | ||||
-rw-r--r-- | libstdc++/std/straits.h | 6 |
4 files changed, 24 insertions, 6 deletions
diff --git a/libstdc++/ChangeLog b/libstdc++/ChangeLog index 010a805..ba4a273 100644 --- a/libstdc++/ChangeLog +++ b/libstdc++/ChangeLog @@ -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 diff --git a/libstdc++/std/bastring.cc b/libstdc++/std/bastring.cc index f86f6d3..b8fec4f 100644 --- a/libstdc++/std/bastring.cc +++ b/libstdc++/std/bastring.cc @@ -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; } diff --git a/libstdc++/std/bastring.h b/libstdc++/std/bastring.h index c45607a..5551ec1 100644 --- a/libstdc++/std/bastring.h +++ b/libstdc++/std/bastring.h @@ -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 diff --git a/libstdc++/std/straits.h b/libstdc++/std/straits.h index c80e7ab..eada4fc 100644 --- a/libstdc++/std/straits.h +++ b/libstdc++/std/straits.h @@ -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); } |