From d4bc4ea11e1462b69d8184e94a80a62091bc9af9 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Mon, 9 Feb 1998 17:01:58 -0700 Subject: [PATCH] bastring.h (unique): We only need length bytes. * std/bastring.h (unique): We only need length bytes. (c_str): Avoid writing over random memory. #include . Lose _G_ALLOC_CONTROL. * std/bastring.cc: Likewise. (nilRep): Add initializer for selfish. * sinst.cc: Just #include . From-SVN: r17821 --- libstdc++/ChangeLog | 12 +++- libstdc++/sinst.cc | 133 +------------------------------------- libstdc++/std/bastring.cc | 23 +------ libstdc++/std/bastring.h | 20 ++---- 4 files changed, 17 insertions(+), 171 deletions(-) diff --git a/libstdc++/ChangeLog b/libstdc++/ChangeLog index df5697ae8a10..dc5f601bba10 100644 --- a/libstdc++/ChangeLog +++ b/libstdc++/ChangeLog @@ -1,4 +1,14 @@ -Sun Feb 1 13:38:07 1998 H.J. Lu (hjl@gnu.org) +Tue Feb 10 01:03:19 1998 Jason Merrill + + * std/bastring.h (unique): We only need length bytes. + (c_str): Avoid writing over random memory. + #include . + Lose _G_ALLOC_CONTROL. + * std/bastring.cc: Likewise. + (nilRep): Add initializer for selfish. + * sinst.cc: Just #include . + +Mon Feb 9 13:38:07 1998 H.J. Lu (hjl@gnu.org) * config/linux.mt: Don't define _PTHREADS, but define _IO_MTSAFE_IO. diff --git a/libstdc++/sinst.cc b/libstdc++/sinst.cc index b8856fcd063b..d5a7322872f1 100644 --- a/libstdc++/sinst.cc +++ b/libstdc++/sinst.cc @@ -1,132 +1 @@ -// Instantiation file for the -*- C++ -*- string classes. -// Copyright (C) 1994 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 -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// 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, USA. - -// As a special exception, if you link this library with files -// compiled with a GNU compiler to produce an executable, this does not cause -// the resulting executable to be covered by the GNU General Public License. -// This exception does not however invalidate any other reasons why -// the executable file might be covered by the GNU General Public License. - -// Written by Jason Merrill based upon the specification by Takanori Adachi -// in ANSI X3J16/94-0013R2. - -#ifdef __GNUG__ -#ifdef TRAITS -#ifdef C -#pragma implementation "std/straits.h" -#endif -#endif -#endif - -#include - -#ifdef C -typedef char c; -#endif -#ifdef W -typedef wchar_t c; -#endif - -#ifdef TRAITS -template class string_char_traits ; -#endif - -typedef basic_string s; - -#ifdef MAIN -template class basic_string ; -#endif - -#ifdef ADDSS -template s operator+ (const s&, const s&); -#endif -#ifdef ADDPS -template s operator+ (const c*, const s&); -#endif -#ifdef ADDCS -template s operator+ (c, const s&); -#endif -#ifdef ADDSP -template s operator+ (const s&, const c*); -#endif -#ifdef ADDSC -template s operator+ (const s&, c); -#endif -#ifdef EQSS -template bool operator== (const s&, const s&); -#endif -#ifdef EQPS -template bool operator== (const c*, const s&); -#endif -#ifdef EQSP -template bool operator== (const s&, const c*); -#endif -#ifdef NESS -template bool operator!= (const s&, const s&); -#endif -#ifdef NEPS -template bool operator!= (const c*, const s&); -#endif -#ifdef NESP -template bool operator!= (const s&, const c*); -#endif -#ifdef LTSS -template bool operator< (const s&, const s&); -#endif -#ifdef LTPS -template bool operator< (const c*, const s&); -#endif -#ifdef LTSP -template bool operator< (const s&, const c*); -#endif -#ifdef GTSS -template bool operator> (const s&, const s&); -#endif -#ifdef GTPS -template bool operator> (const c*, const s&); -#endif -#ifdef GTSP -template bool operator> (const s&, const c*); -#endif -#ifdef LESS -template bool operator<= (const s&, const s&); -#endif -#ifdef LEPS -template bool operator<= (const c*, const s&); -#endif -#ifdef LESP -template bool operator<= (const s&, const c*); -#endif -#ifdef GESS -template bool operator>= (const s&, const s&); -#endif -#ifdef GEPS -template bool operator>= (const c*, const s&); -#endif -#ifdef GESP -template bool operator>= (const s&, const c*); -#endif -#ifdef EXTRACT -template istream& operator>> (istream&, s&); -#endif // EXTRACT -#ifdef INSERT -template ostream& operator<< (ostream&, const s&); -#endif // INSERT -#ifdef GETLINE -template istream& getline (istream&, s&, c); -#endif +#include diff --git a/libstdc++/std/bastring.cc b/libstdc++/std/bastring.cc index 7556ed9c6093..30a2382f90b3 100644 --- a/libstdc++/std/bastring.cc +++ b/libstdc++/std/bastring.cc @@ -25,9 +25,6 @@ // Written by Jason Merrill based upon the specification by Takanori Adachi // in ANSI X3J16/94-0013R2. -#include -#include - extern "C++" { template inline void * basic_string ::Rep:: @@ -47,11 +44,7 @@ operator delete (void * ptr) template inline size_t basic_string ::Rep:: -#if _G_ALLOC_CONTROL -default_frob (size_t s) -#else frob_size (size_t s) -#endif { size_t i = 16; while (i < s) i *= 2; @@ -83,11 +76,7 @@ clone () template inline bool basic_string ::Rep:: -#ifdef _G_ALLOC_CONTROL -default_excess (size_t s, size_t r) -#else excess_slop (size_t s, size_t r) -#endif { return 2 * (s <= 16 ? 16 : s) < r; } @@ -520,20 +509,10 @@ getline (istream &is, basic_string & s, charT delim) template basic_string ::Rep -basic_string::nilRep = { 0, 0, 1 }; +basic_string::nilRep = { 0, 0, 1, false }; template const basic_string ::size_type basic_string ::npos; -#ifdef _G_ALLOC_CONTROL -template -bool (*basic_string ::Rep::excess_slop) (size_t, size_t) - = basic_string ::Rep::default_excess; - -template -size_t (*basic_string ::Rep::frob_size) (size_t) - = basic_string ::Rep::default_frob; -#endif - } // extern "C++" diff --git a/libstdc++/std/bastring.h b/libstdc++/std/bastring.h index 5b1d651e00f0..cbc6e4384c82 100644 --- a/libstdc++/std/bastring.h +++ b/libstdc++/std/bastring.h @@ -84,22 +84,8 @@ private: inline void move (size_t, const charT *, size_t); inline void set (size_t, const charT, size_t); -#if _G_ALLOC_CONTROL - // These function pointers allow you to modify the allocation policy used - // by the string classes. By default they expand by powers of two, but - // this may be excessive for space-critical applications. - - // Returns true if ALLOCATED is too much larger than LENGTH - static bool (*excess_slop) (size_t length, size_t allocated); - inline static bool default_excess (size_t, size_t); - - // Returns a good amount of space to allocate for a string of length LENGTH - static size_t (*frob_size) (size_t length); - inline static size_t default_frob (size_t); -#else inline static bool excess_slop (size_t, size_t); inline static size_t frob_size (size_t); -#endif private: Rep &operator= (const Rep &); @@ -273,7 +259,7 @@ public: private: static charT eos () { return traits::eos (); } - void unique () { if (rep ()->ref > 1) alloc (capacity (), true); } + void unique () { if (rep ()->ref > 1) alloc (length (), true); } void selfish () { unique (); rep ()->selfish = true; } public: @@ -304,7 +290,7 @@ private: public: const charT* c_str () const - { terminate (); return data (); } + { if (length () == 0) return ""; terminate (); return data (); } void resize (size_type n, charT c); void resize (size_type n) { resize (n, eos ()); } @@ -621,4 +607,6 @@ getline (istream&, basic_string &, charT delim = '\n') } // extern "C++" +#include + #endif -- 2.47.2