basic_string.tcc (find(const _CharT*, size_type, size_type)): Reimplement in terms...
authorPaolo Carlini <pcarlini@suse.de>
Tue, 5 Sep 2006 15:43:47 +0000 (15:43 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 5 Sep 2006 15:43:47 +0000 (15:43 +0000)
2006-09-05  Paolo Carlini  <pcarlini@suse.de>

* include/bits/basic_string.tcc (find(const _CharT*, size_type,
size_type)): Reimplement in terms of traits::eq and traits::compare.
* include/ext/vstring.tcc (find(const _CharT*, size_type,
size_type)): Likewise.
* src/string-inst.cc: Remove unneded std::search instantiation.

From-SVN: r116698

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/basic_string.tcc
libstdc++-v3/include/ext/vstring.tcc
libstdc++-v3/src/string-inst.cc

index 563621e..6397850 100644 (file)
@@ -1,3 +1,11 @@
+2006-09-05  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/bits/basic_string.tcc (find(const _CharT*, size_type,
+       size_type)): Reimplement in terms of traits::eq and traits::compare.
+       * include/ext/vstring.tcc (find(const _CharT*, size_type,
+       size_type)): Likewise.
+       * src/string-inst.cc: Remove unneded std::search instantiation.
+
 2006-09-04  Benjamin Kosnik  <bkoz@redhat.com>
 
        PR c++/28871
index 6b21d83..048d0ce 100644 (file)
@@ -1,6 +1,6 @@
 // Components for manipulating sequences of characters -*- C++ -*-
 
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -710,17 +710,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     find(const _CharT* __s, size_type __pos, size_type __n) const
     {
       __glibcxx_requires_string_len(__s, __n);
-      size_type __ret = npos;
       const size_type __size = this->size();
-      if (__pos + __n <= __size)
-       {
-         const _CharT* __data = _M_data();
-         const _CharT* __p = std::search(__data + __pos, __data + __size,
-                                         __s, __s + __n, traits_type::eq);
-         if (__p != __data + __size || __n == 0)
-           __ret = __p - __data;
-       }
-      return __ret;
+      const _CharT* __data = _M_data();
+
+      if (__n == 0)
+       return __pos <= __size ? __pos : npos;
+
+      for (; __pos + __n <= __size; ++__pos)
+       if (traits_type::eq(__data[__pos], __s[0])
+           && traits_type::compare(__data + __pos + 1, __s + 1, __n - 1) == 0)
+         return __pos;
+      return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
index 3ce552a..5196d10 100644 (file)
@@ -1,6 +1,6 @@
 // Versatile string -*- C++ -*-
 
-// Copyright (C) 2005 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -271,17 +271,17 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
     find(const _CharT* __s, size_type __pos, size_type __n) const
     {
       __glibcxx_requires_string_len(__s, __n);
-      size_type __ret = npos;
       const size_type __size = this->size();
-      if (__pos + __n <= __size)
-       {
-         const _CharT* __data = this->_M_data();
-         const _CharT* __p = std::search(__data + __pos, __data + __size,
-                                         __s, __s + __n, traits_type::eq);
-         if (__p != __data + __size || __n == 0)
-           __ret = __p - __data;
-       }
-      return __ret;
+      const _CharT* __data = this->_M_data();
+
+      if (__n == 0)
+       return __pos <= __size ? __pos : npos;
+
+      for (; __pos + __n <= __size; ++__pos)
+       if (traits_type::eq(__data[__pos], __s[0])
+           && traits_type::compare(__data + __pos + 1, __s + 1, __n - 1) == 0)
+         return __pos;
+      return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc,
index 4c447e4..c17862b 100644 (file)
@@ -1,6 +1,6 @@
 // Components for manipulating sequences of characters -*- C++ -*-
 
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -77,10 +77,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     S::_S_construct(const C*, const C*, const allocator<C>&,
                    forward_iterator_tag);
 
-  // Used in str::find.
-  template
-    const C*
-    search(const C*, const C*, const C*, const C*, bool(*)(const C&, const C&));
 _GLIBCXX_END_NAMESPACE
 
 _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)