OSDN Git Service

2005-08-17 Kelley Cook <kcook@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / src / string-inst.cc
index 28467ec..cccf390 100644 (file)
@@ -1,6 +1,7 @@
 // Components for manipulating sequences of characters -*- C++ -*-
 
-// Copyright (C) 2000, 1999, 1998, 1997 Free Software Foundation, Inc.
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// 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
@@ -15,7 +16,7 @@
 
 // You should have received a copy of the GNU General Public License along
 // with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 // USA.
 
 // As a special exception, you may use this file as part of a free software
 // Written by Jason Merrill based upon the specification by Takanori Adachi
 // in ANSI X3J16/94-0013R2.  Rewritten by Nathan Myers.
 
-#include <bits/std_string.h>
-#include <bits/std_algorithm.h>
-#include <bits/std_istream.h>
-#include <bits/std_ostream.h>
-
-// NB: Unnecessary if the .h headers include these
-#ifndef  _GLIBCPP_FULLY_COMPLIANT_HEADERS
-#include <bits/istream.tcc>
-#include <bits/ostream.tcc>
-#endif
+#include <string>
 
 // Instantiation configuration.
 #ifndef C
 # define C char
-# define _GLIBCPP_INSTANTIATING_CHAR 1
 #endif
 
-namespace std 
+namespace std
 {
   typedef basic_string<C> S;
 
-#ifdef MAIN
-  template C S::_Rep::_S_terminal;
-  // XXX Fix me: 2000-04-18 g++ ICE.
-//  template S::size_type S::_S_max_size;
-//  template S::allocator_type::size_type S::S_empty_rep_storage[];
-  template S::basic_string(S const&);
-  template S::_Rep* S::_Rep::_S_create(size_t, S::allocator_type const&);
-  template void S::_Rep::_M_destroy(S::allocator_type const&) throw();
-#endif
-
-#ifdef CTORNC
-  template 
-    S::basic_string(S::size_type, C, S::allocator_type const&);
-#endif
-
-#ifdef CTORAL
-  template 
-    S::basic_string(S::allocator_type const&);
-#endif
-
-#ifdef CTORCPR
-  template 
-    S::basic_string(S const&, S::size_type, S::size_type);
-#endif
-
-#ifdef CTORCPRAL
-  template 
-    S::basic_string(
-      S const&, S::size_type, S::size_type, S::allocator_type const&);
-#endif
-
-#ifdef CTORPRAL
-  template 
-    S::basic_string(
-      C const*, S::size_type, S::allocator_type const&);
-#endif
-
-#ifdef CTORPAL
-  template 
-    S::basic_string(
-      C const*, S::allocator_type const&);
-#endif
-
-#ifdef CTORDUPAL
-  template 
-    S::basic_string(
-      S::size_type, C, S::allocator_type const&);
-#endif
-
-#ifdef CTORPP
-  template 
-    S::basic_string
-    (C*, C*, const allocator<C>&);
-#endif
-
-#ifdef CTORII
-  template 
-    S::basic_string
-    (S::iterator, S::iterator, const allocator<C>&);
-#endif
-
-#ifdef MUTATE
-  template
-    void S::_M_leak_hard();
-  template
-    void S::_M_mutate(S::size_type, S::size_type, S::size_type);
-  template
-    C* S::_Rep::_M_clone(S::allocator_type const&, S::size_type);
-#endif
-
-#ifdef RESERVE
-  template
-    void S::reserve(S::size_type);
-#endif
-
-#ifdef SWAP
-  template
-    void S::swap(S&);
-#endif
-
-#ifdef SLOP
-# ifdef _GLIBCPP_ALLOC_CONTROL
-    template
-      bool (* S::_Rep::_S_excess_slop)(size_t, size_t); 
-    template
-      bool S::_Rep::_S_default_excess(size_t, size_t); 
-# endif
-#endif
-
-#ifdef RESIZE
-  template
-    void S::resize(S::size_type, C);
-#endif
-
-#ifdef APPCOPY
-  template
-    S& S::append(S const&);
-#endif
-
-#ifdef APPCPR
-  template
-    S& S::append(S const&, S::size_type, S::size_type);
-#endif
-
-#ifdef APPPR
-  template
-    S& S::append(C const*, S::size_type);
-#endif
-
-#ifdef APPDUP
-  template
-    S& S::append(S::size_type, C);
-#endif
-
-#ifdef APPII
-  template 
-    S& 
-    S::append<S::iterator>
-    (S::iterator, S::iterator);
-#endif
-
-#ifdef ASSCP
-  template
-    S& 
-    S::assign(S const&);
-#endif
-
-#ifdef ASSII
-  template 
-    S& 
-    S::assign<S::iterator>
-    (S::iterator, S::iterator);
-#endif
-
-#ifdef INSII
-  template 
-    void
-    S::insert<S::iterator> //c*
-    (S::iterator, S::iterator, S::iterator); //it, c+, c+ and temptype = char*
-#endif
+  template class basic_string<C>;
+  template S operator+(const C*, const S&);
+  template S operator+(C, const S&);
+  template S operator+(const S&, const S&);
 
-#ifdef REPRR
+  // Only one template keyword allowed here. 
+  // See core issue #46 (NAD)
+  // http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_closed.html#46
   template
-    S& S::replace(
-      S::size_type, S::size_type, S const&, S::size_type, S::size_type);
-#endif
-
-#ifdef REPIIDUP
-  template 
-    S& S::replace(S::iterator, S::iterator, S::size_type, C);
-#endif
-
-#ifdef REPII
-  template 
-    S&
-    S::replace<S::iterator> // c*
-    (S::iterator, S::iterator, S::iterator, S::iterator); //it, it, c+, c+ 
-#endif
+    S::basic_string(C*, C*, const allocator<C>&);
 
-#ifdef REPIII
-  template 
-    S& 
-    S::_M_replace<S::iterator>
-    (S::iterator, S::iterator, S::iterator, S::iterator, forward_iterator_tag);
-#endif
-
-#ifdef REP4I
-  template 
-  template 
-    S& 
-    S::_M_replace<S::const_iterator>
-    (S::iterator, S::iterator, 
-     S::const_iterator, S::const_iterator, forward_iterator_tag);
-#endif
-
-#ifdef REPIIPP
-  template 
-    S& 
-    S::_M_replace<C*>
-    (S::iterator, S::iterator, C*, C*, forward_iterator_tag);
-#endif
-  
-#ifdef REPIIPP2
-  template 
-    S& 
-    S::_M_replace<const C*>
-    (S::iterator, S::iterator, const C*, const C*, forward_iterator_tag);
-#endif
-
-#ifdef COPY
   template
-    S::size_type  S::copy(C*, S::size_type, S::size_type) const;
-#endif
-
-#ifdef CONII
-  template 
-    C* 
-    S::_S_construct<S::iterator>
-    (S::iterator, S::iterator, const allocator<C>&);
-#endif
-  
-#ifdef CONIIF
-  template 
-    C* 
-    S::_S_construct<S::iterator>
-    (S::iterator, S::iterator, const allocator<C>&, forward_iterator_tag);
-#endif
+    S::basic_string(const C*, const C*, const allocator<C>&);
 
-#ifdef CONPPF
   template 
-    C* 
-    S::_S_construct<C*>
-    (C*, C*, const allocator<C>&, forward_iterator_tag);
-#endif
-
-#ifdef CONPPF2
-  template 
-    C* 
-    S::_S_construct<const C*>
-    (const C*, const C*, const allocator<C>&, forward_iterator_tag);
-#endif
+    S::basic_string(S::iterator, S::iterator, const allocator<C>&);
 
-#ifdef CONSC
   template 
     C* 
-    S::_S_construct(S::size_type, C, S::allocator_type const&);
-#endif
-
-#ifdef FIND
-  // These members are explicitly specialized, and can only be in one
-  // translation unit or else we get multiple copies. . . 
-#if _GLIBCPP_INSTANTIATING_CHAR
-  template<>
-    const char* 
-    string::_S_find(const char* __beg, const char* __end, char __c)
-    { 
-      char* __retval = strchr(__beg, __c); 
-      return (__retval ? __retval : __end);
-    }
-#else
-  template<>
-    const wchar_t* 
-    wstring::_S_find(const wchar_t* __beg, const wchar_t* __end, wchar_t __c)
-    {
-      return find_if(__beg, __end, 
-                    _Char_traits_match<wchar_t, traits_type>(__c));
-    }
-#endif
-#endif 
-
-#ifdef FINDC
-  template
-    S::size_type S::find(C, S::size_type) const;
-#endif
-
-#ifdef RFIND
-  template
-    S::size_type S::rfind(C const*, S::size_type, S::size_type) const;
-#endif
+    S::_S_construct(S::iterator, S::iterator, 
+                   const allocator<C>&, forward_iterator_tag);
 
-#ifdef RFINDC
   template
-    S::size_type S::rfind(C, S::size_type) const;
-#endif
+    C*
+    S::_S_construct(C*, C*, const allocator<C>&, forward_iterator_tag);
 
-#ifdef FFO
   template
-    S::size_type S::find_first_of(C const*, S::size_type, S::size_type) const;
-#endif
+    C*
+    S::_S_construct(const C*, const C*, const allocator<C>&,
+                   forward_iterator_tag);
 
-#ifdef FLO
+  // Used in str::find.
   template
-    S::size_type S::find_last_of(C const*, S::size_type, S::size_type) const;
-#endif
+    const C*
+    search(const C*, const C*, const C*, const C*, bool(*)(const C&, const C&));
+} // namespace std
 
-#ifdef FFNO
-  template
-    S::size_type S::find_first_not_of(
-      C const*, S::size_type, S::size_type) const;
-#endif
-
-#ifdef FLNO
-  template
-    S::size_type S::find_last_not_of(
-      C const*, S::size_type, S::size_type) const;
-#endif
-
-#ifdef FLNOC
-  template
-    S::size_type S::find_last_not_of(C, S::size_type) const;
-#endif
-
-#ifdef COMPARE
-  template
-    int S::compare(S::size_type, S::size_type, S const&) const;
-#endif
-
-#ifdef COMPARE2
-  template
-    int S::compare(S::size_type, S::size_type, S const&, S::size_type, 
-                  S::size_type) const;
-#endif
-
-#ifdef COMPAREP
-  template
-    int S::compare(C const*) const;
-#endif
-
-#ifdef COMPAREP2
-  template
-    int S::compare(
-      S::size_type, S::size_type, C const*, S::size_type) const;
-#endif
-
-#ifdef ADDPS
-  template S operator+(const C*, const S&);
-#endif
-
-#ifdef ADDCS
-  template S operator+(C, const S&);
-#endif
-
-#ifdef EQ
+namespace __gnu_cxx
+{
+  using std::S;
   template bool operator==(const S::iterator&, const S::iterator&);
   template bool operator==(const S::const_iterator&, const S::const_iterator&);
-#endif
-
-#ifdef EXTRACT
-  template basic_istream<C>& operator>>(basic_istream<C>&, S&);
-#endif
-
-#ifdef INSERT
-  template basic_ostream<C>& operator<<(basic_ostream<C>&, const S&);
-#endif
-
-#ifdef GETLINE
-  template basic_istream<C>& getline(basic_istream<C>&, S&, C);
-  template basic_istream<C>& getline(basic_istream<C>&, S&);
-#endif
-
-#ifdef SCOPY
-  template void _S_string_copy(const S&, C*, allocator<C>::size_type);
-#endif
-
-} // std
-
-
-
+} // namespace __gnu_cxx