Commit da8c445d by Jason Merrill Committed by Jason Merrill

stdexcepti.cc (__out_of_range): New fn.

	* stdexcepti.cc (__out_of_range): New fn.
	(__length_error): New fn.

	* std/bastring.h (OUTOFRANGE): Fix logic.  Use throwing functions.
	(LENGTHERROR): Likewise.
	Revert Oct 2 changes.
	* string: Revert Oct 2 changes.

	* std/{f,d,ld}complex.h: Replace guiding fns if not -ansi.

From-SVN: r15885
parent 5b76d03b
Thu Oct 9 23:24:36 1997 Jason Merrill <jason@yorick.cygnus.com>
* stdexcepti.cc (__out_of_range): New fn.
(__length_error): New fn.
* std/bastring.h (OUTOFRANGE): Fix logic. Use throwing functions.
(LENGTHERROR): Likewise.
Revert Oct 2 changes.
* string: Revert Oct 2 changes.
Tue Oct 7 00:51:51 1997 Jason Merrill <jason@yorick.cygnus.com>
* std/{f,d,ld}complex.h: Replace guiding fns if not -ansi.
Thu Oct 2 00:08:18 1997 Jason Merrill <jason@yorick.cygnus.com> Thu Oct 2 00:08:18 1997 Jason Merrill <jason@yorick.cygnus.com>
* std/bastring.h: Move exception stuff after definition of string. * std/bastring.h: Move exception stuff after definition of string.
......
...@@ -40,6 +40,24 @@ class istream; class ostream; ...@@ -40,6 +40,24 @@ class istream; class ostream;
#include <iterator> #include <iterator>
#ifdef __STL_USE_EXCEPTIONS
extern void __out_of_range (const char *);
extern void __length_error (const char *);
#define OUTOFRANGE(cond) \
do { if (cond) __out_of_range (#cond); } while (0)
#define LENGTHERROR(cond) \
do { if (cond) __length_error (#cond); } while (0)
#else
#include <cassert>
#define OUTOFRANGE(cond) assert (!(cond))
#define LENGTHERROR(cond) assert (!(cond))
#endif
template <class charT, class traits = string_char_traits<charT> > template <class charT, class traits = string_char_traits<charT> >
class basic_string class basic_string
{ {
...@@ -262,8 +280,16 @@ public: ...@@ -262,8 +280,16 @@ public:
reference operator[] (size_type pos) reference operator[] (size_type pos)
{ unique (); return (*rep ())[pos]; } { unique (); return (*rep ())[pos]; }
inline reference at (size_type pos); reference at (size_type pos)
inline const_reference at (size_type pos) const; {
OUTOFRANGE (pos >= length ());
return (*this)[pos];
}
const_reference at (size_type pos) const
{
OUTOFRANGE (pos >= length ());
return data ()[pos];
}
private: private:
void terminate () const void terminate () const
...@@ -359,41 +385,6 @@ private: ...@@ -359,41 +385,6 @@ private:
charT *dat; charT *dat;
}; };
typedef basic_string <char> string;
// typedef basic_string <wchar_t> wstring;
#ifdef __STL_USE_EXCEPTIONS
#include <stdexcept>
#define OUTOFRANGE(cond) \
do { if (!(cond)) throw out_of_range (#cond); } while (0)
#define LENGTHERROR(cond) \
do { if (!(cond)) throw length_error (#cond); } while (0)
#else
#include <cassert>
#define OUTOFRANGE(cond) assert (!(cond))
#define LENGTHERROR(cond) assert (!(cond))
#endif
template <class charT, class traits>
inline basic_string <charT, traits>::reference
basic_string <charT, traits>::at (size_type pos)
{
OUTOFRANGE (pos >= length ());
return (*this)[pos];
}
template <class charT, class traits>
inline basic_string <charT, traits>::const_reference
basic_string <charT, traits>::at (size_type pos) const
{
OUTOFRANGE (pos >= length ());
return data ()[pos];
}
#ifdef __STL_MEMBER_TEMPLATES #ifdef __STL_MEMBER_TEMPLATES
template <class charT, class traits> template <class InputIterator> template <class charT, class traits> template <class InputIterator>
basic_string <charT, traits>& basic_string <charT, traits>:: basic_string <charT, traits>& basic_string <charT, traits>::
......
...@@ -236,7 +236,7 @@ pow (const complex<FLOAT>& xin, int y) ...@@ -236,7 +236,7 @@ pow (const complex<FLOAT>& xin, int y)
if (y < 0) if (y < 0)
{ {
y = -y; y = -y;
x = FLOAT(1)/x; x = 1/x;
} }
for (;;) for (;;)
{ {
......
...@@ -54,6 +54,33 @@ private: ...@@ -54,6 +54,33 @@ private:
friend complex& __doami<> (complex *, const complex&); friend complex& __doami<> (complex *, const complex&);
friend complex& __doaml<> (complex *, const complex&); friend complex& __doaml<> (complex *, const complex&);
friend complex& __doadv<> (complex *, const complex&); friend complex& __doadv<> (complex *, const complex&);
#ifndef __STRICT_ANSI__
friend inline complex operator + (const complex& x, double y)
{ return operator+<> (x, y); }
friend inline complex operator + (double x, const complex& y)
{ return operator+<> (x, y); }
friend inline complex operator - (const complex& x, double y)
{ return operator-<> (x, y); }
friend inline complex operator - (double x, const complex& y)
{ return operator-<> (x, y); }
friend inline complex operator * (const complex& x, double y)
{ return operator*<> (x, y); }
friend inline complex operator * (double x, const complex& y)
{ return operator*<> (x, y); }
friend inline complex operator / (const complex& x, double y)
{ return operator/<> (x, y); }
friend inline complex operator / (double x, const complex& y)
{ return operator/<> (x, y); }
friend inline bool operator == (const complex& x, double y)
{ return operator==<> (x, y); }
friend inline bool operator == (double x, const complex& y)
{ return operator==<> (x, y); }
friend inline bool operator != (const complex& x, double y)
{ return operator!=<> (x, y); }
friend inline bool operator != (double x, const complex& y)
{ return operator!=<> (x, y); }
#endif /* __STRICT_ANSI__ */
}; };
inline complex<float>::complex (const complex<double>& r) inline complex<float>::complex (const complex<double>& r)
......
...@@ -54,6 +54,33 @@ private: ...@@ -54,6 +54,33 @@ private:
friend complex& __doami<> (complex *, const complex&); friend complex& __doami<> (complex *, const complex&);
friend complex& __doaml<> (complex *, const complex&); friend complex& __doaml<> (complex *, const complex&);
friend complex& __doadv<> (complex *, const complex&); friend complex& __doadv<> (complex *, const complex&);
#ifndef __STRICT_ANSI__
friend inline complex operator + (const complex& x, float y)
{ return operator+<> (x, y); }
friend inline complex operator + (float x, const complex& y)
{ return operator+<> (x, y); }
friend inline complex operator - (const complex& x, float y)
{ return operator-<> (x, y); }
friend inline complex operator - (float x, const complex& y)
{ return operator-<> (x, y); }
friend inline complex operator * (const complex& x, float y)
{ return operator*<> (x, y); }
friend inline complex operator * (float x, const complex& y)
{ return operator*<> (x, y); }
friend inline complex operator / (const complex& x, float y)
{ return operator/<> (x, y); }
friend inline complex operator / (float x, const complex& y)
{ return operator/<> (x, y); }
friend inline bool operator == (const complex& x, float y)
{ return operator==<> (x, y); }
friend inline bool operator == (float x, const complex& y)
{ return operator==<> (x, y); }
friend inline bool operator != (const complex& x, float y)
{ return operator!=<> (x, y); }
friend inline bool operator != (float x, const complex& y)
{ return operator!=<> (x, y); }
#endif /* __STRICT_ANSI__ */
}; };
} // extern "C++" } // extern "C++"
......
...@@ -54,6 +54,33 @@ private: ...@@ -54,6 +54,33 @@ private:
friend complex& __doami<> (complex *, const complex&); friend complex& __doami<> (complex *, const complex&);
friend complex& __doaml<> (complex *, const complex&); friend complex& __doaml<> (complex *, const complex&);
friend complex& __doadv<> (complex *, const complex&); friend complex& __doadv<> (complex *, const complex&);
#ifndef __STRICT_ANSI__
friend inline complex operator + (const complex& x, long double y)
{ return operator+<> (x, y); }
friend inline complex operator + (long double x, const complex& y)
{ return operator+<> (x, y); }
friend inline complex operator - (const complex& x, long double y)
{ return operator-<> (x, y); }
friend inline complex operator - (long double x, const complex& y)
{ return operator-<> (x, y); }
friend inline complex operator * (const complex& x, long double y)
{ return operator*<> (x, y); }
friend inline complex operator * (long double x, const complex& y)
{ return operator*<> (x, y); }
friend inline complex operator / (const complex& x, long double y)
{ return operator/<> (x, y); }
friend inline complex operator / (long double x, const complex& y)
{ return operator/<> (x, y); }
friend inline bool operator == (const complex& x, long double y)
{ return operator==<> (x, y); }
friend inline bool operator == (long double x, const complex& y)
{ return operator==<> (x, y); }
friend inline bool operator != (const complex& x, long double y)
{ return operator!=<> (x, y); }
friend inline bool operator != (long double x, const complex& y)
{ return operator!=<> (x, y); }
#endif /* __STRICT_ANSI__ */
}; };
inline complex<float>::complex (const complex<long double>& r) inline complex<float>::complex (const complex<long double>& r)
......
...@@ -6,3 +6,16 @@ ...@@ -6,3 +6,16 @@
#endif #endif
#include <stdexcept> #include <stdexcept>
// Entry points for string.
void
__out_of_range (const char *s)
{
throw out_of_range (s);
}
void __length_error (const char *s)
{
throw length_error (s);
}
...@@ -5,4 +5,9 @@ ...@@ -5,4 +5,9 @@
#include <std/bastring.h> #include <std/bastring.h>
extern "C++" {
typedef basic_string <char> string;
// typedef basic_string <wchar_t> wstring;
} // extern "C++"
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment