diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2000-06-05 22:23:47 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2000-06-05 22:23:47 +0000 |
commit | 4b8bb462dc50037b8a2d3748769841c6fb66c7bc (patch) | |
tree | 96312b17e2fd9995bb136adef1f065f367341c7b /gnu/egcs/libstdc++ | |
parent | bc01f7371c47d797fb0aaff6be8286e934d81e0a (diff) |
Synch with 2.95.3 (pre-rel)
Diffstat (limited to 'gnu/egcs/libstdc++')
-rw-r--r-- | gnu/egcs/libstdc++/ChangeLog | 36 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/Makefile.in | 3 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/sstream | 225 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/std/bastring.cc | 10 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/std/bastring.h | 11 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/std/complext.cc | 2 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/std/valarray_array.h | 2 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/stl/ChangeLog | 5 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/stl/bitset | 3 |
9 files changed, 285 insertions, 12 deletions
diff --git a/gnu/egcs/libstdc++/ChangeLog b/gnu/egcs/libstdc++/ChangeLog index 462049b1324..f0e953012b6 100644 --- a/gnu/egcs/libstdc++/ChangeLog +++ b/gnu/egcs/libstdc++/ChangeLog @@ -1,3 +1,39 @@ +2000-04-24 Magnus Fromreide <magfr@lysator.liu.se> + + * sstream: New file. + * Makefile.in (HEADERS): Add it. + +2000-03-12 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + + * std/bastring.h (basic_string<>::push_back): Define. + +Tue Mar 7 21:37:56 2000 Jeffrey A Law (law@cygnus.com) + + 1999-11-19 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/valarray_meta.h (_DEFINE_EXPR_UNARY_FUNCTION): Don't forget + to define tanh. + + 1999-11-05 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/valarray_meta.h (_DEFINE_EXPR_UNARY_FUNCTION): When + building meta-expressions don't forget to take the contained + closures. + + 1999-10-19 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/valarray_meta.h: (_BinClos::_BinClos): Fix typo. + + 1999-09-17 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/complext.cc (pow): Don't expect floating point promotion + in presence of template argument deduction. There is no such + thing. + +2000-02-06 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/valarray_array.h (__valarray_copy): Fix typo. + +1999-12-14 Martin v. Löwis <loewis@informatik.hu-berlin.de> + * std/bastring.h (basic_string::basic_string): Rename parameters + to avoid shadow warnings. + * std/bastring.cc (alloc): Likewise. + Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95.2 Released. diff --git a/gnu/egcs/libstdc++/Makefile.in b/gnu/egcs/libstdc++/Makefile.in index eb9ec77412c..f13eddcf294 100644 --- a/gnu/egcs/libstdc++/Makefile.in +++ b/gnu/egcs/libstdc++/Makefile.in @@ -28,7 +28,8 @@ HEADERS= cassert cctype cerrno cfloat ciso646 climits clocale cmath complex \ cwchar cwctype string stdexcept \ algorithm deque functional hash_map hash_set iterator list map \ memory numeric pthread_alloc queue rope set slist stack utility \ - vector fstream iomanip iostream strstream iosfwd bitset valarray + vector fstream iomanip iostream strstream iosfwd bitset valarray \ + sstream ARLIB = libstdc++.a.$(VERSION) ARLINK = libstdc++.a diff --git a/gnu/egcs/libstdc++/sstream b/gnu/egcs/libstdc++/sstream new file mode 100644 index 00000000000..714be717e50 --- /dev/null +++ b/gnu/egcs/libstdc++/sstream @@ -0,0 +1,225 @@ +/* This is part of libio/iostream, providing -*- C++ -*- input/output.
+Copyright (C) 2000 Free Software Foundation
+
+This file is part of the GNU IO 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 Magnus Fromreide (magfr@lysator.liu.se). */
+
+#ifndef __SSTREAM__
+#define __SSTREAM__
+
+#include <string>
+#include <iostream.h>
+#include <streambuf.h>
+
+namespace std
+{
+ class stringbuf : public streambuf
+ {
+ public:
+ typedef char char_type;
+ typedef int int_type;
+ typedef streampos pos_type;
+ typedef streamoff off_type;
+
+ explicit stringbuf(int which=ios::in|ios::out) :
+ streambuf(which), buf(), mode(static_cast<ios::open_mode>(which)),
+ rpos(0), bufsize(1)
+ { }
+
+ explicit stringbuf(const std::string &s, int which=ios::in|ios::out) :
+ streambuf(which), buf(s), mode(static_cast<ios::open_mode>(which)),
+ bufsize(1)
+ {
+ if(mode & ios::in)
+ {
+ setg(&defbuf, &defbuf + bufsize, &defbuf + bufsize);
+ }
+ if(mode & ios::out)
+ {
+ setp(&defbuf, &defbuf + bufsize);
+ }
+ rpos = (mode & ios::ate ? s.size() : 0);
+ }
+
+ std::string str() const
+ {
+ const_cast<stringbuf*>(this)->sync(); // Sigh, really ugly hack
+ return buf;
+ };
+
+ void str(const std::string& s)
+ {
+ buf = s;
+ if(mode & ios::in)
+ {
+ gbump(egptr() - gptr());
+ }
+ if(mode & ios::out)
+ {
+ pbump(pbase() - pptr());
+ }
+ rpos = (mode & ios::ate ? s.size() : 0);
+ }
+
+ protected:
+ inline virtual int sync();
+ inline virtual int overflow(int = EOF);
+ inline virtual int underflow();
+ private:
+ std::string buf;
+ ios::open_mode mode;
+ std::string::size_type rpos;
+ streamsize bufsize;
+ char defbuf;
+ };
+
+ class stringstreambase : virtual public ios {
+ protected:
+ stringbuf __my_sb;
+ public:
+ std::string str() const
+ {
+ return dynamic_cast<stringbuf*>(_strbuf)->str();
+ }
+ void str(const std::string& s)
+ {
+ clear();
+ dynamic_cast<stringbuf*>(_strbuf)->str(s);
+ }
+
+ stringbuf* rdbuf()
+ {
+ return &__my_sb;
+ }
+ protected:
+ stringstreambase(int which) :
+ __my_sb(which)
+ {
+ init (&__my_sb);
+ }
+
+ stringstreambase(const std::string& s, int which) :
+ __my_sb(s, which)
+ {
+ init (&__my_sb);
+ }
+ };
+
+ class istringstream : public stringstreambase, public istream {
+ public:
+ istringstream(int which=ios::in) :
+ stringstreambase(which)
+ { }
+
+ istringstream(const std::string& s, int which=ios::in) :
+ stringstreambase(s, which)
+ { }
+ };
+
+ class ostringstream : public stringstreambase, public ostream {
+ public:
+ ostringstream(int which=ios::out) :
+ stringstreambase(which)
+ { }
+
+ ostringstream(const std::string& s, int which=ios::out) :
+ stringstreambase(s, which)
+ { }
+ };
+
+ class stringstream : public stringstreambase, public iostream {
+ public:
+ stringstream(int which=ios::in|ios::out) :
+ stringstreambase(which)
+ { }
+
+ stringstream(const std::string &s, int which=ios::in|ios::out) :
+ stringstreambase(s, which)
+ { }
+ };
+}
+
+inline int std::stringbuf::sync()
+{
+ if((mode & ios::out) == 0)
+ return EOF;
+
+ streamsize n = pptr() - pbase();
+ if(n)
+ {
+ buf.replace(rpos, std::string::npos, pbase(), n);
+ if(buf.size() - rpos != n)
+ return EOF;
+ rpos += n;
+ pbump(-n);
+ gbump(egptr() - gptr());
+ }
+ return 0;
+}
+
+inline int std::stringbuf::overflow(int ch)
+{
+ if((mode & ios::out) == 0)
+ return EOF;
+
+ streamsize n = pptr() - pbase();
+
+ if(n && sync())
+ return EOF;
+
+ if(ch != EOF)
+ {
+ std::string::size_type oldSize = buf.size();
+
+ buf.replace(rpos, std::string::npos, ch);
+ if(buf.size() - oldSize != 1)
+ return EOF;
+ ++rpos;
+ }
+ return 0;
+}
+
+inline int std::stringbuf::underflow()
+{
+ sync();
+ if((mode & ios::in) == 0)
+ {
+ return EOF;
+ }
+ if(rpos >= buf.size())
+ {
+ return EOF;
+ }
+
+ std::string::size_type n = egptr() - eback();
+ std::string::size_type s;
+
+ s = buf.copy(eback(), n, rpos);
+ pbump(pbase() - pptr());
+ gbump(eback() - gptr());
+ int res = (0377 & buf[rpos]);
+ rpos += s;
+ return res;
+}
+
+#endif /* not __STRSTREAM__ */
diff --git a/gnu/egcs/libstdc++/std/bastring.cc b/gnu/egcs/libstdc++/std/bastring.cc index 3093b9e129d..f86f6d30157 100644 --- a/gnu/egcs/libstdc++/std/bastring.cc +++ b/gnu/egcs/libstdc++/std/bastring.cc @@ -1,5 +1,5 @@ // Member templates for the -*- C++ -*- string classes. -// Copyright (C) 1994 Free Software Foundation +// Copyright (C) 1994, 1999 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 @@ -94,14 +94,14 @@ check_realloc (basic_string::size_type s) const template <class charT, class traits, class Allocator> void basic_string <charT, traits, Allocator>:: -alloc (basic_string::size_type size, bool save) +alloc (basic_string::size_type __size, bool __save) { - if (! check_realloc (size)) + if (! check_realloc (__size)) return; - Rep *p = Rep::create (size); + Rep *p = Rep::create (__size); - if (save) + if (__save) { p->copy (0, data (), length ()); p->len = length (); diff --git a/gnu/egcs/libstdc++/std/bastring.h b/gnu/egcs/libstdc++/std/bastring.h index 70891262e96..bbe873085ea 100644 --- a/gnu/egcs/libstdc++/std/bastring.h +++ b/gnu/egcs/libstdc++/std/bastring.h @@ -1,5 +1,5 @@ // Main templates for the -*- C++ -*- string classes. -// Copyright (C) 1994, 1995 Free Software Foundation +// Copyright (C) 1994, 1995, 1999 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 @@ -180,11 +180,11 @@ public: : dat (nilRep.grab ()) { assign (n, c); } #ifdef __STL_MEMBER_TEMPLATES template<class InputIterator> - basic_string(InputIterator begin, InputIterator end) + basic_string(InputIterator __begin, InputIterator __end) #else - basic_string(const_iterator begin, const_iterator end) + basic_string(const_iterator __begin, const_iterator __end) #endif - : dat (nilRep.grab ()) { assign (begin, end); } + : dat (nilRep.grab ()) { assign (__begin, __end); } ~basic_string () { rep ()->release (); } @@ -208,6 +208,9 @@ public: #endif { return replace (iend (), iend (), first, last); } + void push_back(charT __c) + { append(1, __c); } + basic_string& assign (const basic_string& str, size_type pos = 0, size_type n = npos) { return replace (0, npos, str, pos, n); } diff --git a/gnu/egcs/libstdc++/std/complext.cc b/gnu/egcs/libstdc++/std/complext.cc index d50bf0871f6..60227f21329 100644 --- a/gnu/egcs/libstdc++/std/complext.cc +++ b/gnu/egcs/libstdc++/std/complext.cc @@ -236,7 +236,7 @@ pow (const complex<FLOAT>& xin, int y) if (y < 0) { y = -y; - x = 1/x; + x = FLOAT(1)/x; } for (;;) { diff --git a/gnu/egcs/libstdc++/std/valarray_array.h b/gnu/egcs/libstdc++/std/valarray_array.h index f711e52a165..a0b5818fd8b 100644 --- a/gnu/egcs/libstdc++/std/valarray_array.h +++ b/gnu/egcs/libstdc++/std/valarray_array.h @@ -73,7 +73,7 @@ template<typename _Tp> inline void __valarray_copy (const _Tp* __restrict__ __a, size_t __n, size_t __s, _Tp* __restrict__ __b) -{ for (size_t __i=0; __i<__n; ++__i, ++__b, __a += __s) *__b += *__a; } +{ for (size_t __i=0; __i<__n; ++__i, ++__b, __a += __s) *__b = *__a; } // copy plain __a[<__n>] in strided __b[<__n : __s>] template<typename _Tp> diff --git a/gnu/egcs/libstdc++/stl/ChangeLog b/gnu/egcs/libstdc++/stl/ChangeLog index aa4aa155d7e..785fb587e82 100644 --- a/gnu/egcs/libstdc++/stl/ChangeLog +++ b/gnu/egcs/libstdc++/stl/ChangeLog @@ -1,3 +1,8 @@ +1999-11-06 Martin v. Löwis <loewis@informatik.hu-berlin.de> + + * bitset (class bitset): Declare reference as our friend. + * bitset: Include limits.h. + Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95.2 Released. diff --git a/gnu/egcs/libstdc++/stl/bitset b/gnu/egcs/libstdc++/stl/bitset index e26845ed045..8b4f8b1a0f8 100644 --- a/gnu/egcs/libstdc++/stl/bitset +++ b/gnu/egcs/libstdc++/stl/bitset @@ -36,6 +36,7 @@ #include <stddef.h> // for size_t +#include <limits.h> // for CHAR_BIT #include <string> #include <stdexcept> // for invalid_argument, out_of_range, overflow_error #include <iostream.h> // for istream, ostream @@ -568,6 +569,8 @@ private: public: // bit reference: + class reference; + friend class reference; class reference { friend class bitset; |