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 <std/bastring.cc>.
	Lose _G_ALLOC_CONTROL.
	* std/bastring.cc: Likewise.
 	(nilRep): Add initializer for selfish.
	* sinst.cc: Just #include <string>.
Fix a couple of bugs, linux undefined symbol problem.

From-SVN: r17478
This commit is contained in:
Jason Merrill 1998-01-25 16:45:02 +00:00 committed by Jason Merrill
parent be34355626
commit 5f79cea1ef
4 changed files with 16 additions and 39 deletions

View File

@ -1,3 +1,13 @@
Sun Jan 25 14:01:50 1998 Jason Merrill <jason@yorick.cygnus.com>
* std/bastring.h (unique): We only need length bytes.
(c_str): Avoid writing over random memory.
#include <std/bastring.cc>.
Lose _G_ALLOC_CONTROL.
* std/bastring.cc: Likewise.
(nilRep): Add initializer for selfish.
* sinst.cc: Just #include <string>.
Tue Jan 13 21:23:05 1998 H.J. Lu (hjl@gnu.org)
* configure.in (configdirs): Include testsuite only if

View File

@ -33,7 +33,7 @@
#endif
#endif
#include <std/bastring.cc>
#include <string>
#ifdef C
typedef char c;

View File

@ -25,9 +25,6 @@
// Written by Jason Merrill based upon the specification by Takanori Adachi
// in ANSI X3J16/94-0013R2.
#include <cstddef>
#include <std/bastring.h>
extern "C++" {
template <class charT, class traits, class Allocator>
inline void * basic_string <charT, traits, Allocator>::Rep::
@ -47,11 +44,7 @@ operator delete (void * ptr)
template <class charT, class traits, class Allocator>
inline size_t basic_string <charT, traits, Allocator>::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 <class charT, class traits, class Allocator>
inline bool basic_string <charT, traits, Allocator>::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 <charT, traits, Allocator>& s, charT delim)
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::Rep
basic_string<charT, traits, Allocator>::nilRep = { 0, 0, 1 };
basic_string<charT, traits, Allocator>::nilRep = { 0, 0, 1, false };
template <class charT, class traits, class Allocator>
const basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::npos;
#ifdef _G_ALLOC_CONTROL
template <class charT, class traits, class Allocator>
bool (*basic_string <charT, traits, Allocator>::Rep::excess_slop) (size_t, size_t)
= basic_string <charT, traits, Allocator>::Rep::default_excess;
template <class charT, class traits, class Allocator>
size_t (*basic_string <charT, traits, Allocator>::Rep::frob_size) (size_t)
= basic_string <charT, traits, Allocator>::Rep::default_frob;
#endif
} // extern "C++"

View File

@ -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, traits, Allocator>&, charT delim = '\n')
} // extern "C++"
#include <std/bastring.cc>
#endif