This is the mail archive of the
libstdc++@sourceware.cygnus.com
mailing list for the libstdc++ project.
Re: PATCH:stl/stl_alloc.h triggers compiler warnings
- To: Benjamin Kosnik <bkoz@cygnus.com>
- Subject: Re: PATCH:stl/stl_alloc.h triggers compiler warnings
- From: Nathan Sidwell <nathan@acm.org>
- Date: Thu, 29 Apr 1999 11:01:30 +0100
- CC: nathan@compsci.bristol.ac.uk, libstdc++@sourceware.cygnus.com
- Organization: University of Bristol
- References: <Pine.LNX.3.96.990428192058.11848A-100000@happy.cygnus.com>
- Reply-To: nathan@compsci.bristol.ac.uk
Benjamin Kosnik wrote:
>
> > attached is a patch to stl/stl_alloc.h, to stop it triggering egcs compiler
> > warnings when -Wcast-align has been given to the compiler. If you compile with
> > -Wcast-align, to catch potential problems in your own code, it is rather
> > disturbing that each instantiation of an allocator produces several!
>
> Unfortunately, this was not enough info for me to reproduce your problem.
> Can you please send a self-enclosed sample, and give compiler and host
> info
Sure. Attached is,
foo.cc: a source file
foo-egcs.ii: preprocessed source file using the egcs snapshot libstdc++ (v2)
foo-egcs.log: compilation log & system info
foo-libstdc++.ii: preprocessed source file using the libstdc++ cvs tree (v3)
foo-libstdc++.log: compilation log & system info
stl_alloc.patch: a patch against the libstdc++ cvs tree for the problem --
the one I provided previously was for the v2 version provided in the egcs
distribution. The patch is the same, you've just moved fies about between v2
and v3.
I hope this is sufficient for you to reproduce the problem.
> Ugh. This seems like a terrible kludge, a cast to a cast to a value. Do
> you think that code would be cleaner if there was a char* conversion
> function in _Obj?
I agree with Jason on this. The cast via void * tells me (the programmer) that
some kind of heap allocation is going on, a conversion operator just hides
that.
> Does the 3.2 SGI release still have this problem?
I don't know
nathan
--
Dr Nathan Sidwell :: Computer Science Department :: Bristol University
You can up the bandwidth, but you can't up the speed of light
nathan@acm.org http://www.cs.bris.ac.uk/~nathan/ nathan@cs.bris.ac.uk
#include <string>
basic_string <char> t;
# 1 "foo.cc"
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/string" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h" 1 3
#pragma interface
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/cstddef" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 1 3 4
# 61 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
typedef int ptrdiff_t;
typedef unsigned int size_t;
typedef unsigned int wint_t;
# 317 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 6 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/cstddef" 2 3
# 35 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h" 2 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/straits.h" 1 3
#pragma interface "std/straits.h"
extern "C++" {
template <class charT>
struct string_char_traits {
typedef charT char_type;
static void assign (char_type& c1, const char_type& c2)
{ c1 = c2; }
static bool eq (const char_type& c1, const char_type& c2)
{ return (c1 == c2); }
static bool ne (const char_type& c1, const char_type& c2)
{ return !(c1 == c2); }
static bool lt (const char_type& c1, const char_type& c2)
{ return (c1 < c2); }
static char_type eos () { return char_type(); }
static bool is_del(char_type a) { return 0; }
static int compare (const char_type* s1, const char_type* s2, size_t n)
{
size_t i;
for (i = 0; i < n; ++i)
if (ne (s1[i], s2[i]))
return lt (s1[i], s2[i]) ? -1 : 1;
return 0;
}
static size_t length (const char_type* s)
{
size_t l = 0;
while (ne (*s++, eos ()))
++l;
return l;
}
static char_type* copy (char_type* s1, const char_type* s2, size_t n)
{
for (; n--; )
assign (s1[n], s2[n]);
return s1;
}
static char_type* move (char_type* s1, const char_type* s2, size_t n)
{
char_type a[n];
size_t i;
for (i = 0; i < n; ++i)
assign (a[i], s2[i]);
for (i = 0; i < n; ++i)
assign (s1[i], a[i]);
return s1;
}
static char_type* set (char_type* s1, const char_type& c, size_t n)
{
for (; n--; )
assign (s1[n], c);
return s1;
}
};
class istream;
class ostream;
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/cctype" 1 3
# 1 "/usr/include/ctype.h" 1 3 4
#pragma ident "@(#)ctype.h 1.28 96/08/21 SMI"
# 1 "/usr/include/sys/feature_tests.h" 1 3 4
#pragma ident "@(#)feature_tests.h 1.13 97/06/26 SMI"
extern "C" {
}
# 13 "/usr/include/ctype.h" 2 3 4
extern "C" {
extern int isalnum(int);
extern int isalpha(int);
extern int iscntrl(int);
extern int isdigit(int);
extern int isgraph(int);
extern int islower(int);
extern int isprint(int);
extern int ispunct(int);
extern int isspace(int);
extern int isupper(int);
extern int isxdigit(int);
extern int tolower(int);
extern int toupper(int);
extern int isascii(int);
extern int toascii(int);
extern int _tolower(int);
extern int _toupper(int);
extern unsigned char __ctype[];
extern unsigned int *__ctype_mask;
extern long *__trans_upper;
extern long *__trans_lower;
# 96 "/usr/include/ctype.h" 3 4
# 155 "/usr/include/ctype.h" 3 4
}
# 6 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/cctype" 2 3
# 105 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/straits.h" 2 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/cstring" 1 3
# 1 "/usr/include/string.h" 1 3 4
#pragma ident "@(#)string.h 1.19 96/03/12 SMI"
extern "C" {
extern void *memcpy(void *, const void *, size_t);
extern void *memmove(void *, const void *, size_t);
extern char *strcpy(char *, const char *);
extern char *strncpy(char *, const char *, size_t);
extern char *strcat(char *, const char *);
extern char *strncat(char *, const char *, size_t);
extern int memcmp(const void *, const void *, size_t);
extern int strcmp(const char *, const char *);
extern int strcoll(const char *, const char *);
extern int strncmp(const char *, const char *, size_t);
extern size_t strxfrm(char *, const char *, size_t);
extern void *memchr(const void *, int, size_t);
extern char *strchr(const char *, int);
extern size_t strcspn(const char *, const char *);
extern char *strpbrk(const char *, const char *);
extern char *strrchr(const char *, int);
extern size_t strspn(const char *, const char *);
extern char *strstr(const char *, const char *);
extern char *strtok(char *, const char *);
extern void *memset(void *, int, size_t);
extern char *strerror(int);
extern size_t strlen(const char *);
extern void *memccpy(void *, const void *, int, size_t);
extern char *strsignal(int);
extern int ffs(int);
extern int strcasecmp(const char *, const char *);
extern int strncasecmp(const char *, const char *, size_t);
extern char *strdup(const char *);
# 136 "/usr/include/string.h" 3 4
}
# 7 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/cstring" 2 3
# 94 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/cstring" 3
# 106 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/straits.h" 2 3
struct string_char_traits <char> {
typedef char char_type;
static void assign (char_type& c1, const char_type& c2)
{ c1 = c2; }
static bool eq (const char_type & c1, const char_type& c2)
{ return (c1 == c2); }
static bool ne (const char_type& c1, const char_type& c2)
{ return (c1 != c2); }
static bool lt (const char_type& c1, const char_type& c2)
{ return (c1 < c2); }
static char_type eos () { return 0; }
static bool is_del(char_type a) { return ((__ctype + 1)[ a ] & 0x00000008 ) ; }
static int compare (const char_type* s1, const char_type* s2, size_t n)
{ return memcmp (s1, s2, n); }
static size_t length (const char_type* s)
{ return strlen (s); }
static char_type* copy (char_type* s1, const char_type* s2, size_t n)
{ return (char_type*) memcpy (s1, s2, n); }
static char_type* move (char_type* s1, const char_type* s2, size_t n)
{ return (char_type*) memmove (s1, s2, n); }
static char_type* set (char_type* s1, const char_type& c, size_t n)
{ return (char_type*) memset (s1, c, n); }
};
# 159 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/straits.h" 3
}
# 36 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h" 2 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/alloc.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_config.h" 1 3
# 148 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_config.h" 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/_G_config.h" 1 3 4
typedef int _G_int8_t __attribute__((__mode__(__QI__)));
typedef unsigned int _G_uint8_t __attribute__((__mode__(__QI__)));
typedef int _G_int16_t __attribute__((__mode__(__HI__)));
typedef unsigned int _G_uint16_t __attribute__((__mode__(__HI__)));
typedef int _G_int32_t __attribute__((__mode__(__SI__)));
typedef unsigned int _G_uint32_t __attribute__((__mode__(__SI__)));
typedef int _G_int64_t __attribute__((__mode__(__DI__)));
typedef unsigned int _G_uint64_t __attribute__((__mode__(__DI__)));
__extension__ typedef long long _G_llong;
__extension__ typedef unsigned long long _G_ullong;
typedef long _G_clock_t;
typedef unsigned long _G_dev_t;
typedef long _G_fpos_t;
typedef long _G_gid_t;
typedef unsigned long _G_ino_t;
typedef unsigned long _G_mode_t;
typedef unsigned long _G_nlink_t;
typedef long _G_off_t;
typedef long _G_pid_t;
typedef int _G_ptrdiff_t;
typedef int _G_sigset_t;
typedef unsigned int _G_size_t;
typedef long _G_time_t;
typedef long _G_uid_t;
typedef long int _G_wchar_t;
typedef int _G_ssize_t;
typedef unsigned int _G_wint_t;
typedef void * _G_va_list;
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 1 3 4
# 19 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 61 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 126 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 188 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 269 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 317 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 86 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/_G_config.h" 2 3 4
# 151 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_config.h" 2 3
# 228 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_config.h" 3
# 242 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_config.h" 3
# 310 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_config.h" 3
# 18 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/alloc.h" 2 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/iostream.h" 1 3
#pragma interface
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/streambuf.h" 1 3
#pragma interface
extern "C" {
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 1 3
# 55 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 3
# 104 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 3
struct _IO_jump_t; struct _IO_FILE;
# 174 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 3
typedef void _IO_lock_t;
struct _IO_marker {
struct _IO_marker *_next;
struct _IO_FILE *_sbuf;
int _pos;
# 207 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 3
};
struct _IO_FILE {
int _flags;
char* _IO_read_ptr;
char* _IO_read_end;
char* _IO_read_base;
char* _IO_write_base;
char* _IO_write_ptr;
char* _IO_write_end;
char* _IO_buf_base;
char* _IO_buf_end;
char *_IO_save_base;
char *_IO_backup_base;
char *_IO_save_end;
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno;
int _blksize;
_G_off_t _offset;
unsigned short _cur_column;
char _unused;
char _shortbuf[1];
};
struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_stdin_, _IO_stdout_, _IO_stderr_;
typedef struct
{
_G_ssize_t (*read) (struct _IO_FILE *, void *, _G_ssize_t ) ;
_G_ssize_t (*write) (struct _IO_FILE *, const void *, _G_ssize_t ) ;
_G_fpos_t (*seek) (struct _IO_FILE *, _G_off_t , int) ;
int (*close) (struct _IO_FILE *) ;
} _IO_cookie_io_functions_t;
struct _IO_cookie_file
{
struct _IO_FILE file;
const void *vtable;
void *cookie;
_IO_cookie_io_functions_t io_functions;
};
extern "C" {
extern int __underflow (_IO_FILE *) ;
extern int __uflow (_IO_FILE *) ;
extern int __overflow (_IO_FILE *, int) ;
extern int _IO_getc (_IO_FILE *__fp) ;
extern int _IO_putc (int __c, _IO_FILE *__fp) ;
extern int _IO_feof (_IO_FILE *__fp) ;
extern int _IO_ferror (_IO_FILE *__fp) ;
extern int _IO_peekc_locked (_IO_FILE *__fp) ;
extern void _IO_flockfile (_IO_FILE *) ;
extern void _IO_funlockfile (_IO_FILE *) ;
extern int _IO_ftrylockfile (_IO_FILE *) ;
extern int _IO_vfscanf (_IO_FILE *, const char *, _G_va_list , int *) ;
extern int _IO_vfprintf (_IO_FILE *, const char *, _G_va_list ) ;
extern _G_ssize_t _IO_padn (_IO_FILE *, int, _G_ssize_t ) ;
extern _G_size_t _IO_sgetn (_IO_FILE *, void *, _G_size_t ) ;
extern _G_fpos_t _IO_seekoff (_IO_FILE *, _G_off_t , int, int) ;
extern _G_fpos_t _IO_seekpos (_IO_FILE *, _G_fpos_t , int) ;
extern void _IO_free_backup_area (_IO_FILE *) ;
}
# 36 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/streambuf.h" 2 3
}
extern "C++" {
class istream;
class ostream; class streambuf;
typedef _G_off_t streamoff;
typedef _G_fpos_t streampos;
typedef _G_ssize_t streamsize;
typedef unsigned long __fmtflags;
typedef unsigned char __iostate;
struct _ios_fields
{
streambuf *_strbuf;
ostream* _tie;
int _width;
__fmtflags _flags;
short _fill;
__iostate _state;
__iostate _exceptions;
int _precision;
void *_arrays;
};
# 124 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/streambuf.h" 3
class ios : public _ios_fields {
ios& operator=(ios&);
ios (const ios&);
public:
typedef __fmtflags fmtflags;
typedef int iostate;
typedef int openmode;
typedef int streamsize;
enum io_state {
goodbit = 0 ,
eofbit = 1 ,
failbit = 2 ,
badbit = 4 };
enum open_mode {
in = 1 ,
out = 2 ,
ate = 4 ,
app = 8 ,
trunc = 16 ,
nocreate = 32 ,
noreplace = 64 ,
bin = 128 ,
binary = 128 };
enum seek_dir { beg, cur, end};
typedef enum seek_dir seekdir;
enum { skipws= 01 ,
left= 02 , right= 04 , internal= 010 ,
dec= 020 , oct= 040 , hex= 0100 ,
showbase= 0200 , showpoint= 0400 ,
uppercase= 01000 , showpos= 02000 ,
scientific= 04000 , fixed= 010000 ,
unitbuf= 020000 , stdio= 040000
};
enum {
basefield=dec+oct+hex,
floatfield = scientific+fixed,
adjustfield = left+right+internal
};
# 177 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/streambuf.h" 3
ostream* tie() const { return _tie; }
ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; }
short fill() const { return _fill; }
short fill(short newf)
{short oldf = _fill; _fill = newf; return oldf;}
fmtflags flags() const { return _flags; }
fmtflags flags(fmtflags new_val) {
fmtflags old_val = _flags; _flags = new_val; return old_val; }
int precision() const { return _precision; }
int precision(int newp) {
unsigned short oldp = _precision; _precision = (unsigned short)newp;
return oldp; }
fmtflags setf(fmtflags val) {
fmtflags oldbits = _flags;
_flags |= val; return oldbits; }
fmtflags setf(fmtflags val, fmtflags mask) {
fmtflags oldbits = _flags;
_flags = (_flags & ~mask) | (val & mask); return oldbits; }
fmtflags unsetf(fmtflags mask) {
fmtflags oldbits = _flags;
_flags &= ~mask; return oldbits; }
int width() const { return _width; }
int width(int val) { int save = _width; _width = val; return save; }
void _throw_failure() const { }
void clear(iostate state = 0) {
_state = _strbuf ? state : state|badbit;
if (_state & _exceptions) _throw_failure(); }
void set(iostate flag) { _state |= flag;
if (_state & _exceptions) _throw_failure(); }
void setstate(iostate flag) { _state |= flag;
if (_state & _exceptions) _throw_failure(); }
int good() const { return _state == 0; }
int eof() const { return _state & ios::eofbit; }
int fail() const { return _state & (ios::badbit|ios::failbit); }
int bad() const { return _state & ios::badbit; }
iostate rdstate() const { return _state; }
operator void*() const { return fail() ? (void*)0 : (void*)(-1); }
int operator!() const { return fail(); }
iostate exceptions() const { return _exceptions; }
void exceptions(iostate enable) {
_exceptions = enable;
if (_state & _exceptions) _throw_failure(); }
streambuf* rdbuf() const { return _strbuf; }
streambuf* rdbuf(streambuf *_s) {
streambuf *_old = _strbuf; _strbuf = _s; clear (); return _old; }
static int sync_with_stdio(int on);
static void sync_with_stdio() { sync_with_stdio(1); }
static fmtflags bitalloc();
static int xalloc();
void*& pword(int);
void* pword(int) const;
long& iword(int);
long iword(int) const;
class Init {
public:
Init () { }
};
protected:
inline ios(streambuf* sb = 0, ostream* tie_to = 0);
inline virtual ~ios();
inline void init(streambuf* sb, ostream* tie = 0);
};
typedef ios::seek_dir _seek_dir;
class streammarker : private _IO_marker {
friend class streambuf;
void set_offset(int offset) { _pos = offset; }
public:
streammarker(streambuf *sb);
~streammarker();
int saving() { return 1; }
int delta(streammarker&);
int delta();
};
struct streambuf : public _IO_FILE {
friend class ios;
friend class istream;
friend class ostream;
friend class streammarker;
const void *&_vtable() { return *(const void**)((_IO_FILE*)this + 1); }
protected:
static streambuf* _list_all;
_IO_FILE*& xchain() { return _chain; }
void _un_link();
void _link_in();
char* gptr() const
{ return _flags & 0x100 ? _IO_save_base : _IO_read_ptr; }
char* pptr() const { return _IO_write_ptr; }
char* egptr() const
{ return _flags & 0x100 ? _IO_save_end : _IO_read_end; }
char* epptr() const { return _IO_write_end; }
char* pbase() const { return _IO_write_base; }
char* eback() const
{ return _flags & 0x100 ? _IO_save_base : _IO_read_base;}
char* base() const { return _IO_buf_base; }
char* ebuf() const { return _IO_buf_end; }
int blen() const { return _IO_buf_end - _IO_buf_base; }
void xput_char(char c) { *_IO_write_ptr++ = c; }
int xflags() { return _flags ; }
int xflags(int f) {int fl = _flags ; _flags = f; return fl;}
void xsetflags(int f) { _flags |= f; }
void xsetflags(int f, int mask)
{ _flags = (_flags & ~mask) | (f & mask); }
void gbump(int n)
{ _flags & 0x100 ? (_IO_save_base+=n):(_IO_read_ptr+=n);}
void pbump(int n) { _IO_write_ptr += n; }
void setb(char* b, char* eb, int a=0);
void setp(char* p, char* ep)
{ _IO_write_base=_IO_write_ptr=p; _IO_write_end=ep; }
void setg(char* eb, char* g, char *eg) {
if (_flags & 0x100 ) _IO_free_backup_area(this);
_IO_read_base = eb; _IO_read_ptr = g; _IO_read_end = eg; }
char *shortbuf() { return _shortbuf; }
int in_backup() { return _flags & 0x100 ; }
char *Gbase() { return in_backup() ? _IO_save_base : _IO_read_base; }
char *eGptr() { return in_backup() ? _IO_save_end : _IO_read_end; }
char *Bbase() { return in_backup() ? _IO_read_base : _IO_save_base; }
char *Bptr() { return _IO_backup_base; }
char *eBptr() { return in_backup() ? _IO_read_end : _IO_save_end; }
char *Nbase() { return _IO_save_base; }
char *eNptr() { return _IO_save_end; }
int have_backup() { return _IO_save_base != __null ; }
int have_markers() { return _markers != __null ; }
void free_backup_area();
void unsave_markers();
int put_mode() { return _flags & 0x800 ; }
int switch_to_get_mode();
streambuf(int flags=0);
public:
static int flush_all();
static void flush_all_linebuffered();
virtual ~streambuf();
virtual int overflow(int c = (-1) );
virtual int underflow();
virtual int uflow();
virtual int pbackfail(int c);
virtual streamsize xsputn(const char* s, streamsize n);
virtual streamsize xsgetn(char* s, streamsize n);
virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
streampos pubseekoff(streamoff o, _seek_dir d, int mode=ios::in|ios::out)
{ return _IO_seekoff (this, o, d, mode); }
streampos pubseekpos(streampos pos, int mode = ios::in|ios::out)
{ return _IO_seekpos (this, pos, mode); }
streampos sseekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
streampos sseekpos(streampos pos, int mode = ios::in|ios::out);
virtual streambuf* setbuf(char* p, int len);
virtual int sync();
virtual int doallocate();
int seekmark(streammarker& mark, int delta = 0);
int sputbackc(char c);
int sungetc();
int unbuffered() { return _flags & 2 ? 1 : 0; }
int linebuffered() { return _flags & 0x200 ? 1 : 0; }
void unbuffered(int i)
{ if (i) _flags |= 2 ; else _flags &= ~2 ; }
void linebuffered(int i)
{ if (i) _flags |= 0x200 ; else _flags &= ~0x200 ; }
int allocate() {
if (base() || unbuffered()) return 0;
else return doallocate(); }
void allocbuf() { if (base() == __null ) doallocbuf(); }
void doallocbuf();
int in_avail() { return _IO_read_end - _IO_read_ptr; }
int out_waiting() { return _IO_write_ptr - _IO_write_base; }
streamsize sputn(const char* s, streamsize n) { return xsputn(s, n); }
streamsize padn(char pad, streamsize n) { return _IO_padn(this, pad, n); }
streamsize sgetn(char* s, streamsize n) { return _IO_sgetn(this, s, n); }
int ignore(int);
int get_column();
int set_column(int);
long sgetline(char* buf, _G_size_t n, char delim, int putback_delim);
int sputc(int c) { return _IO_putc(c, this); }
int sbumpc() { return _IO_getc(this); }
int sgetc() { return (( this )->_IO_read_ptr >= ( this )->_IO_read_end && __underflow ( this ) == (-1) ? (-1) : *(unsigned char *) ( this )->_IO_read_ptr) ; }
int snextc() {
if (_IO_read_ptr >= _IO_read_end && __underflow(this) == (-1) )
return (-1) ;
else return _IO_read_ptr++, sgetc(); }
void stossc() { if (_IO_read_ptr < _IO_read_end) _IO_read_ptr++; }
int vscan(char const *fmt0, _G_va_list ap, ios* stream = __null );
int scan(char const *fmt0 ...);
int vform(char const *fmt0, _G_va_list ap);
int form(char const *fmt0 ...);
virtual streamsize sys_read(char* buf, streamsize size);
virtual streamsize sys_write(const char*, streamsize);
virtual streampos sys_seek(streamoff, _seek_dir);
virtual int sys_close();
virtual int sys_stat(void*);
};
class filebuf : public streambuf {
protected:
void init();
public:
static const int openprot;
filebuf();
filebuf(int fd);
filebuf(int fd, char* p, int len);
~filebuf();
filebuf* attach(int fd);
filebuf* open(const char *filename, const char *mode);
filebuf* open(const char *filename, ios::openmode mode, int prot = 0664);
virtual int underflow();
virtual int overflow(int c = (-1) );
int is_open() const { return _fileno >= 0; }
int fd() const { return is_open() ? _fileno : (-1) ; }
filebuf* close();
virtual int doallocate();
virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
virtual streambuf* setbuf(char* p, int len);
streamsize xsputn(const char* s, streamsize n);
streamsize xsgetn(char* s, streamsize n);
virtual int sync();
protected:
int is_reading() { return eback() != egptr(); }
char* cur_ptr() { return is_reading() ? gptr() : pptr(); }
char* file_ptr() { return eGptr(); }
virtual streamsize sys_read(char* buf, streamsize size);
virtual streampos sys_seek(streamoff, _seek_dir);
virtual streamsize sys_write(const char*, streamsize);
virtual int sys_stat(void*);
virtual int sys_close();
};
inline void ios::init(streambuf* sb, ostream* tie_to) {
_state = sb ? ios::goodbit : ios::badbit; _exceptions=0;
_strbuf=sb; _tie = tie_to; _width=0; _fill=' ';
_flags=ios::skipws|ios::dec;
_precision=6; _arrays = 0; }
inline ios::ios(streambuf* sb, ostream* tie_to) { init(sb, tie_to); }
inline ios::~ios() {
if (_arrays) delete [] _arrays;
}
}
# 31 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/iostream.h" 2 3
extern "C++" {
class istream; class ostream;
typedef ios& (*__manip)(ios&);
typedef istream& (*__imanip)(istream&);
typedef ostream& (*__omanip)(ostream&);
extern istream& ws(istream& ins);
extern ostream& flush(ostream& outs);
extern ostream& endl(ostream& outs);
extern ostream& ends(ostream& outs);
class ostream : virtual public ios
{
void do_osfx();
public:
ostream() { }
ostream(streambuf* sb, ostream* tied= __null );
int opfx() {
if (!good()) return 0;
else { if (_tie) _tie->flush(); ; return 1;} }
void osfx() { ;
if (flags() & (ios::unitbuf|ios::stdio))
do_osfx(); }
ostream& flush();
ostream& put(char c) { _strbuf->sputc(c); return *this; }
ostream& write(const char *s, streamsize n);
ostream& write(const unsigned char *s, streamsize n)
{ return write((const char*)s, n);}
ostream& write(const signed char *s, streamsize n)
{ return write((const char*)s, n);}
ostream& write(const void *s, streamsize n)
{ return write((const char*)s, n);}
ostream& seekp(streampos);
ostream& seekp(streamoff, _seek_dir);
streampos tellp();
ostream& form(const char *format ...);
ostream& vform(const char *format, _G_va_list args);
ostream& operator<<(char c);
ostream& operator<<(unsigned char c) { return (*this) << (char)c; }
ostream& operator<<(signed char c) { return (*this) << (char)c; }
ostream& operator<<(const char *s);
ostream& operator<<(const unsigned char *s)
{ return (*this) << (const char*)s; }
ostream& operator<<(const signed char *s)
{ return (*this) << (const char*)s; }
ostream& operator<<(const void *p);
ostream& operator<<(int n);
ostream& operator<<(unsigned int n);
ostream& operator<<(long n);
ostream& operator<<(unsigned long n);
__extension__ ostream& operator<<(long long n);
__extension__ ostream& operator<<(unsigned long long n);
ostream& operator<<(short n) {return operator<<((int)n);}
ostream& operator<<(unsigned short n) {return operator<<((unsigned int)n);}
ostream& operator<<(bool b) { return operator<<((int)b); }
ostream& operator<<(double n);
ostream& operator<<(float n) { return operator<<((double)n); }
ostream& operator<<(long double n) { return operator<<((double)n); }
ostream& operator<<(__omanip func) { return (*func)(*this); }
ostream& operator<<(__manip func) {(*func)(*this); return *this;}
ostream& operator<<(streambuf*);
};
class istream : virtual public ios
{
protected:
_G_size_t _gcount;
int _skip_ws();
public:
istream(): _gcount (0) { }
istream(streambuf* sb, ostream*tied= __null );
istream& get(char* ptr, int len, char delim = '\n');
istream& get(unsigned char* ptr, int len, char delim = '\n')
{ return get((char*)ptr, len, delim); }
istream& get(char& c);
istream& get(unsigned char& c) { return get((char&)c); }
istream& getline(char* ptr, int len, char delim = '\n');
istream& getline(unsigned char* ptr, int len, char delim = '\n')
{ return getline((char*)ptr, len, delim); }
istream& get(signed char& c) { return get((char&)c); }
istream& get(signed char* ptr, int len, char delim = '\n')
{ return get((char*)ptr, len, delim); }
istream& getline(signed char* ptr, int len, char delim = '\n')
{ return getline((char*)ptr, len, delim); }
istream& read(char *ptr, streamsize n);
istream& read(unsigned char *ptr, streamsize n)
{ return read((char*)ptr, n); }
istream& read(signed char *ptr, streamsize n)
{ return read((char*)ptr, n); }
istream& read(void *ptr, streamsize n)
{ return read((char*)ptr, n); }
istream& get(streambuf& sb, char delim = '\n');
istream& gets(char **s, char delim = '\n');
int ipfx(int need = 0) {
if (!good()) { set(ios::failbit); return 0; }
else {
;
if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush();
if (!need && (flags() & ios::skipws)) return _skip_ws();
else return 1;
}
}
int ipfx0() {
if (!good()) { set(ios::failbit); return 0; }
else {
;
if (_tie) _tie->flush();
if (flags() & ios::skipws) return _skip_ws();
else return 1;
}
}
int ipfx1() {
if (!good()) { set(ios::failbit); return 0; }
else {
;
if (_tie && rdbuf()->in_avail() == 0) _tie->flush();
return 1;
}
}
void isfx() { ; }
int get() { if (!ipfx1()) return (-1) ;
else { int ch = _strbuf->sbumpc();
if (ch == (-1) ) set(ios::eofbit);
return ch;
} }
int peek();
_G_size_t gcount() { return _gcount; }
istream& ignore(int n=1, int delim = (-1) );
int sync ();
istream& seekg(streampos);
istream& seekg(streamoff, _seek_dir);
streampos tellg();
istream& putback(char ch) {
if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit);
return *this;}
istream& unget() {
if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit);
return *this;}
istream& scan(const char *format ...);
istream& vscan(const char *format, _G_va_list args);
istream& operator>>(char*);
istream& operator>>(unsigned char* p) { return operator>>((char*)p); }
istream& operator>>(signed char*p) { return operator>>((char*)p); }
istream& operator>>(char& c);
istream& operator>>(unsigned char& c) {return operator>>((char&)c);}
istream& operator>>(signed char& c) {return operator>>((char&)c);}
istream& operator>>(int&);
istream& operator>>(long&);
__extension__ istream& operator>>(long long&);
__extension__ istream& operator>>(unsigned long long&);
istream& operator>>(short&);
istream& operator>>(unsigned int&);
istream& operator>>(unsigned long&);
istream& operator>>(unsigned short&);
istream& operator>>(bool&);
istream& operator>>(float&);
istream& operator>>(double&);
istream& operator>>(long double&);
istream& operator>>( __manip func) {(*func)(*this); return *this;}
istream& operator>>(__imanip func) { return (*func)(*this); }
istream& operator>>(streambuf*);
};
class iostream : public istream, public ostream
{
public:
iostream() { }
iostream(streambuf* sb, ostream*tied= __null );
};
class _IO_istream_withassign : public istream {
public:
_IO_istream_withassign& operator=(istream&);
_IO_istream_withassign& operator=(_IO_istream_withassign& rhs)
{ return operator= (static_cast<istream&> (rhs)); }
};
class _IO_ostream_withassign : public ostream {
public:
_IO_ostream_withassign& operator=(ostream&);
_IO_ostream_withassign& operator=(_IO_ostream_withassign& rhs)
{ return operator= (static_cast<ostream&> (rhs)); }
};
extern _IO_istream_withassign cin;
extern _IO_ostream_withassign cout, cerr;
extern _IO_ostream_withassign clog
;
extern istream& lock(istream& ins);
extern istream& unlock(istream& ins);
extern ostream& lock(ostream& outs);
extern ostream& unlock(ostream& outs);
struct Iostream_init { } ;
inline ios& dec(ios& i)
{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; }
inline ios& hex(ios& i)
{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; }
inline ios& oct(ios& i)
{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; }
}
# 45 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 2 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 1 3 4
# 342 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 53 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 2 3
# 1 "/usr/include/stdlib.h" 1 3 4
#pragma ident "@(#)stdlib.h 1.40 97/06/30 SMI"
extern "C" {
typedef struct {
int quot;
int rem;
} div_t;
typedef struct {
long quot;
long rem;
} ldiv_t;
typedef struct {
long long quot;
long long rem;
} lldiv_t;
typedef long uid_t;
# 86 "/usr/include/stdlib.h" 3 4
extern unsigned char __ctype[];
extern double atof(const char *);
extern int atoi(const char *);
extern long int atol(const char *);
extern double strtod(const char *, char **);
extern long int strtol(const char *, char **, int);
extern unsigned long int strtoul(const char *, char **, int);
extern int rand(void);
extern void srand(unsigned int);
extern void *calloc(size_t, size_t);
extern void free(void *);
extern void *malloc(size_t);
extern void *realloc(void *, size_t);
extern void abort(void);
extern int atexit(void (*)(void));
extern void exit(int);
extern void _exithandle(void);
extern char *getenv(const char *);
extern int system(const char *);
extern void *bsearch(const void *, const void *, size_t, size_t,
int (*)(const void *, const void *));
extern void qsort(void *, size_t, size_t,
int (*)(const void *, const void *));
extern int abs(int);
extern div_t div(int, int);
extern long int labs(long);
extern ldiv_t ldiv(long, long);
extern int mbtowc(wchar_t *, const char *, size_t);
extern int mblen(const char *, size_t);
extern int wctomb(char *, wchar_t);
extern size_t mbstowcs(wchar_t *, const char *, size_t);
extern size_t wcstombs(char *, const wchar_t *, size_t);
extern double drand48(void);
extern double erand48(unsigned short *);
extern long jrand48(unsigned short *);
extern void lcong48(unsigned short *);
extern long lrand48(void);
extern long mrand48(void);
extern long nrand48(unsigned short *);
extern unsigned short *seed48(unsigned short *);
extern void srand48(long);
extern int putenv(const char *);
extern void setkey(const char *);
extern void swab(const char *, char *, int);
extern int mkstemp(char *);
extern int mkstemp64(char *);
extern long a64l(const char *);
extern char *ecvt(double, int, int *, int *);
extern char *fcvt(double, int, int *, int *);
extern char *gcvt(double, int, char *);
extern int getsubopt(char **, char *const *, char **);
extern int grantpt(int);
extern char *initstate(unsigned, char *, size_t);
extern char *l64a(long);
extern char *mktemp(char *);
extern char *ptsname(int);
extern long random(void);
extern char *realpath(const char *, char *);
extern char *setstate(const char *);
extern void srandom(unsigned);
extern int ttyslot(void);
extern int unlockpt(int);
extern void *valloc(size_t);
extern int dup2(int, int);
extern char *qecvt(long double, int, int *, int *);
extern char *qfcvt(long double, int, int *, int *);
extern char *qgcvt(long double, int, char *);
extern char *getcwd(char *, size_t);
extern const char *getexecname(void);
extern char *getlogin(void);
extern int getopt(int, char *const *, const char *);
extern char *optarg;
extern int optind, opterr, optopt;
extern char *getpass(const char *);
extern char *getpassphrase(const char *);
extern int getpw(uid_t, char *);
extern int isatty(int);
extern void *memalign(size_t, size_t);
extern char *ttyname(int);
extern long long atoll(const char *);
extern long long llabs(long long);
extern lldiv_t lldiv(long long, long long);
extern char *lltostr(long long, char *);
extern long long strtoll(const char *, char **, int);
extern unsigned long long strtoull(const char *, char **, int);
extern char *ulltostr(unsigned long long, char *);
# 349 "/usr/include/stdlib.h" 3 4
}
# 54 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 2 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/assert.h" 1 3 4
# 19 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/assert.h" 3 4
extern "C" {
extern void __eprintf (const char *, const char *, unsigned, const char *)
__attribute__ ((noreturn));
}
# 52 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/assert.h" 3 4
# 56 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 2 3
# 78 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 3
# 87 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 3
# 97 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 3
# 115 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 3
template <int __inst>
class __malloc_alloc_template {
private:
static void* _S_oom_malloc(size_t);
static void* _S_oom_realloc(void*, size_t);
static void (* __malloc_alloc_oom_handler)();
public:
static void* allocate(size_t __n)
{
void* __result = malloc(__n);
if (0 == __result) __result = _S_oom_malloc(__n);
return __result;
}
static void deallocate(void* __p, size_t )
{
free(__p);
}
static void* reallocate(void* __p, size_t , size_t __new_sz)
{
void* __result = realloc(__p, __new_sz);
if (0 == __result) __result = _S_oom_realloc(__p, __new_sz);
return __result;
}
static void (* __set_malloc_handler(void (*__f)()))()
{
void (* __old)() = __malloc_alloc_oom_handler;
__malloc_alloc_oom_handler = __f;
return(__old);
}
};
template <int __inst>
void (* __malloc_alloc_template<__inst>::__malloc_alloc_oom_handler)() = 0;
template <int __inst>
void*
__malloc_alloc_template<__inst>::_S_oom_malloc(size_t __n)
{
void (* __my_malloc_handler)();
void* __result;
for (;;) {
__my_malloc_handler = __malloc_alloc_oom_handler;
if (0 == __my_malloc_handler) { cerr << "out of memory" << endl; exit(1) ; }
(*__my_malloc_handler)();
__result = malloc(__n);
if (__result) return(__result);
}
}
template <int __inst>
void* __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __n)
{
void (* __my_malloc_handler)();
void* __result;
for (;;) {
__my_malloc_handler = __malloc_alloc_oom_handler;
if (0 == __my_malloc_handler) { cerr << "out of memory" << endl; exit(1) ; }
(*__my_malloc_handler)();
__result = realloc(__p, __n);
if (__result) return(__result);
}
}
typedef __malloc_alloc_template<0> malloc_alloc;
template<class _Tp, class _Alloc>
class simple_alloc {
public:
static _Tp* allocate(size_t __n)
{ return 0 == __n ? 0 : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp)); }
static _Tp* allocate(void)
{ return (_Tp*) _Alloc::allocate(sizeof (_Tp)); }
static void deallocate(_Tp* __p, size_t __n)
{ if (0 != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp)); }
static void deallocate(_Tp* __p)
{ _Alloc::deallocate(__p, sizeof (_Tp)); }
};
template <class _Alloc>
class debug_alloc {
private:
enum {_S_extra = 8};
public:
static void* allocate(size_t __n)
{
char* __result = (char*)_Alloc::allocate(__n + _S_extra);
*(size_t*)__result = __n;
return __result + _S_extra;
}
static void deallocate(void* __p, size_t __n)
{
char* __real_p = (char*)__p - _S_extra;
((void) (( *(size_t*)__real_p == __n ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" , 263 , "*(size_t*)__real_p == __n" ), 0) )) ;
_Alloc::deallocate(__real_p, __n + _S_extra);
}
static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz)
{
char* __real_p = (char*)__p - _S_extra;
((void) (( *(size_t*)__real_p == __old_sz ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" , 270 , "*(size_t*)__real_p == __old_sz" ), 0) )) ;
char* __result = (char*)
_Alloc::reallocate(__real_p, __old_sz + _S_extra, __new_sz + _S_extra);
*(size_t*)__result = __new_sz;
return __result + _S_extra;
}
};
template <bool threads, int inst>
class __default_alloc_template {
private:
enum {_ALIGN = 8};
enum {_MAX_BYTES = 128};
enum {_NFREELISTS = _MAX_BYTES/_ALIGN};
static size_t
_S_round_up(size_t __bytes)
{ return (((__bytes) + _ALIGN-1) & ~(_ALIGN - 1)); }
private :
union _Obj {
union _Obj* _M_free_list_link;
char _M_client_data[1];
};
private:
static _Obj* _S_free_list[_NFREELISTS];
static size_t _S_freelist_index(size_t __bytes) {
return (((__bytes) + _ALIGN-1)/_ALIGN - 1);
}
static void* _S_refill(size_t __n);
static char* _S_chunk_alloc(size_t __size, int& __nobjs);
static char* _S_start_free;
static char* _S_end_free;
static size_t _S_heap_size;
# 389 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 3
class _Lock {
public:
_Lock() { ; }
~_Lock() { ; }
};
friend class _Lock;
public:
static void* allocate(size_t __n)
{
_Obj* * __my_free_list;
_Obj* __result;
if (__n > (size_t) _MAX_BYTES) {
return(malloc_alloc::allocate(__n));
}
__my_free_list = _S_free_list + _S_freelist_index(__n);
__result = *__my_free_list;
if (__result == 0) {
void* __r = _S_refill(_S_round_up(__n));
return __r;
}
*__my_free_list = __result -> _M_free_list_link;
return (__result);
};
static void deallocate(void* __p, size_t __n)
{
_Obj* __q = (_Obj*)__p;
_Obj* * __my_free_list;
if (__n > (size_t) _MAX_BYTES) {
malloc_alloc::deallocate(__p, __n);
return;
}
__my_free_list = _S_free_list + _S_freelist_index(__n);
__q -> _M_free_list_link = *__my_free_list;
*__my_free_list = __q;
}
static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz);
} ;
typedef __default_alloc_template< false , 0> alloc;
typedef __default_alloc_template<false, 0> single_client_alloc;
template <bool __threads, int __inst>
char*
__default_alloc_template<__threads, __inst>::_S_chunk_alloc(size_t __size,
int& __nobjs)
{
char* __result;
size_t __total_bytes = __size * __nobjs;
size_t __bytes_left = _S_end_free - _S_start_free;
if (__bytes_left >= __total_bytes) {
__result = _S_start_free;
_S_start_free += __total_bytes;
return(__result);
} else if (__bytes_left >= __size) {
__nobjs = (int)(__bytes_left/__size);
__total_bytes = __size * __nobjs;
__result = _S_start_free;
_S_start_free += __total_bytes;
return(__result);
} else {
size_t __bytes_to_get =
2 * __total_bytes + _S_round_up(_S_heap_size >> 4);
if (__bytes_left > 0) {
_Obj* * __my_free_list =
_S_free_list + _S_freelist_index(__bytes_left);
((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list;
*__my_free_list = (_Obj*)_S_start_free;
}
_S_start_free = (char*)malloc(__bytes_to_get);
if (0 == _S_start_free) {
size_t __i;
_Obj* * __my_free_list;
_Obj* __p;
for (__i = __size; __i <= _MAX_BYTES; __i += _ALIGN) {
__my_free_list = _S_free_list + _S_freelist_index(__i);
__p = *__my_free_list;
if (0 != __p) {
*__my_free_list = __p -> _M_free_list_link;
_S_start_free = (char*)__p;
_S_end_free = _S_start_free + __i;
return(_S_chunk_alloc(__size, __nobjs));
}
}
_S_end_free = 0;
_S_start_free = (char*)malloc_alloc::allocate(__bytes_to_get);
}
_S_heap_size += __bytes_to_get;
_S_end_free = _S_start_free + __bytes_to_get;
return(_S_chunk_alloc(__size, __nobjs));
}
}
template <bool __threads, int __inst>
void*
__default_alloc_template<__threads, __inst>::_S_refill(size_t __n)
{
int __nobjs = 20;
char* __chunk = _S_chunk_alloc(__n, __nobjs);
_Obj* * __my_free_list;
_Obj* __result;
_Obj* __current_obj;
_Obj* __next_obj;
int __i;
if (1 == __nobjs) return(__chunk);
__my_free_list = _S_free_list + _S_freelist_index(__n);
__result = (_Obj*)__chunk;
*__my_free_list = __next_obj = (_Obj*)(__chunk + __n);
for (__i = 1; ; __i++) {
__current_obj = __next_obj;
__next_obj = (_Obj*)((char*)__next_obj + __n);
if (__nobjs - 1 == __i) {
__current_obj -> _M_free_list_link = 0;
break;
} else {
__current_obj -> _M_free_list_link = __next_obj;
}
}
return(__result);
}
template <bool threads, int inst>
void*
__default_alloc_template<threads, inst>::reallocate(void* __p,
size_t __old_sz,
size_t __new_sz)
{
void* __result;
size_t __copy_sz;
if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) {
return(realloc(__p, __new_sz));
}
if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
__result = allocate(__new_sz);
__copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
memcpy(__result, __p, __copy_sz);
deallocate(__p, __old_sz);
return(__result);
}
# 602 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 3
# 689 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h" 3
template <bool __threads, int __inst>
char* __default_alloc_template<__threads, __inst>::_S_start_free = 0;
template <bool __threads, int __inst>
char* __default_alloc_template<__threads, __inst>::_S_end_free = 0;
template <bool __threads, int __inst>
size_t __default_alloc_template<__threads, __inst>::_S_heap_size = 0;
template <bool __threads, int __inst>
__default_alloc_template<__threads, __inst>::_Obj*
__default_alloc_template<__threads, __inst> ::_S_free_list[
_NFREELISTS
] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
template <class _Tp>
class allocator {
typedef alloc _Alloc;
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
typedef _Tp& reference;
typedef const _Tp& const_reference;
typedef _Tp value_type;
template <class _Tp1> struct rebind {
typedef allocator<_Tp1> other;
};
allocator() throw() {}
allocator(const allocator&) throw() {}
template <class _Tp1> allocator(const allocator<_Tp1>&) throw() {}
~allocator() throw() {}
pointer address(reference __x) const { return &__x; }
const_pointer address(const_reference __x) const { return &__x; }
_Tp* allocate(size_type __n, const void* = 0) {
return __n != 0 ? static_cast<_Tp*>(_Alloc::allocate(__n * sizeof(_Tp)))
: 0;
}
void deallocate(pointer __p, size_type __n)
{ _Alloc::deallocate(__p, __n * sizeof(_Tp)); }
size_type max_size() const throw()
{ return size_t(-1) / sizeof(_Tp); }
void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
void destroy(pointer __p) { __p->~_Tp(); }
};
template<>
class allocator<void> {
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef void* pointer;
typedef const void* const_pointer;
typedef void value_type;
template <class _Tp1> struct rebind {
typedef allocator<_Tp1> other;
};
};
template <class _T1, class _T2>
inline bool operator==(const allocator<_T1>&, const allocator<_T2>&)
{
return true;
}
template <class _T1, class _T2>
inline bool operator!=(const allocator<_T1>&, const allocator<_T2>&)
{
return false;
}
template <class _Tp, class _Alloc>
struct __allocator {
_Alloc __underlying_alloc;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
typedef _Tp& reference;
typedef const _Tp& const_reference;
typedef _Tp value_type;
template <class _Tp1> struct rebind {
typedef __allocator<_Tp1, _Alloc> other;
};
__allocator() throw() {}
__allocator(const __allocator& __a) throw()
: __underlying_alloc(__a.__underlying_alloc) {}
template <class _Tp1>
__allocator(const __allocator<_Tp1, _Alloc>& __a) throw()
: __underlying_alloc(__a.__underlying_alloc) {}
~__allocator() throw() {}
pointer address(reference __x) const { return &__x; }
const_pointer address(const_reference __x) const { return &__x; }
_Tp* allocate(size_type __n, const void* = 0) {
return __n != 0
? static_cast<_Tp*>(__underlying_alloc.allocate(__n * sizeof(_Tp)))
: 0;
}
void deallocate(pointer __p, size_type __n)
{ __underlying_alloc.deallocate(__p, __n * sizeof(_Tp)); }
size_type max_size() const throw()
{ return size_t(-1) / sizeof(_Tp); }
void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
void destroy(pointer __p) { __p->~_Tp(); }
};
template <class _Alloc>
class __allocator<void, _Alloc> {
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef void* pointer;
typedef const void* const_pointer;
typedef void value_type;
template <class _Tp1> struct rebind {
typedef __allocator<_Tp1, _Alloc> other;
};
};
template <class _Tp, class _Alloc>
inline bool operator==(const __allocator<_Tp, _Alloc>& __a1,
const __allocator<_Tp, _Alloc>& __a2)
{
return __a1.__underlying_alloc == __a2.__underlying_alloc;
}
template <class _Tp, class _Alloc>
inline bool operator!=(const __allocator<_Tp, _Alloc>& __a1,
const __allocator<_Tp, _Alloc>& __a2)
{
return __a1.__underlying_alloc != __a2.__underlying_alloc;
}
template <int inst>
inline bool operator==(const __malloc_alloc_template<inst>&,
const __malloc_alloc_template<inst>&)
{
return true;
}
template <int __inst>
inline bool operator!=(const __malloc_alloc_template<__inst>&,
const __malloc_alloc_template<__inst>&)
{
return false;
}
template <bool __threads, int __inst>
inline bool operator==(const __default_alloc_template<__threads, __inst>&,
const __default_alloc_template<__threads, __inst>&)
{
return true;
}
template <bool __threads, int __inst>
inline bool operator!=(const __default_alloc_template<__threads, __inst>&,
const __default_alloc_template<__threads, __inst>&)
{
return false;
}
template <class _Alloc>
inline bool operator==(const debug_alloc<_Alloc>&,
const debug_alloc<_Alloc>&) {
return true;
}
template <class _Alloc>
inline bool operator!=(const debug_alloc<_Alloc>&,
const debug_alloc<_Alloc>&) {
return false;
}
template <class _Tp, class _Allocator>
struct _Alloc_traits
{
static const bool _S_instanceless = false;
typedef typename _Allocator:: rebind<_Tp>::other
allocator_type;
};
template <class _Tp, class _Allocator>
const bool _Alloc_traits<_Tp, _Allocator>::_S_instanceless;
template <class _Tp, class _Tp1>
struct _Alloc_traits<_Tp, allocator<_Tp1> >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, alloc> _Alloc_type;
typedef allocator<_Tp> allocator_type;
};
template <class _Tp, int __inst>
struct _Alloc_traits<_Tp, __malloc_alloc_template<__inst> >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};
template <class _Tp, bool __threads, int __inst>
struct _Alloc_traits<_Tp, __default_alloc_template<__threads, __inst> >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, __default_alloc_template<__threads, __inst> >
_Alloc_type;
typedef __allocator<_Tp, __default_alloc_template<__threads, __inst> >
allocator_type;
};
template <class _Tp, class _Alloc>
struct _Alloc_traits<_Tp, debug_alloc<_Alloc> >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
};
template <class _Tp, class _Tp1, int __inst>
struct _Alloc_traits<_Tp,
__allocator<_Tp1, __malloc_alloc_template<__inst> > >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};
template <class _Tp, class _Tp1, bool __thr, int __inst>
struct _Alloc_traits<_Tp,
__allocator<_Tp1,
__default_alloc_template<__thr, __inst> > >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, __default_alloc_template<__thr,__inst> >
_Alloc_type;
typedef __allocator<_Tp, __default_alloc_template<__thr,__inst> >
allocator_type;
};
template <class _Tp, class _Tp1, class _Alloc>
struct _Alloc_traits<_Tp, __allocator<_Tp1, debug_alloc<_Alloc> > >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
};
# 21 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/alloc.h" 2 3
# 40 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/alloc.h" 3
# 39 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h" 2 3
extern "C++" {
class istream; class ostream;
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/iterator" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_relops.h" 1 3
template <class _Tp>
inline bool operator!=(const _Tp& __x, const _Tp& __y) {
return !(__x == __y);
}
template <class _Tp>
inline bool operator>(const _Tp& __x, const _Tp& __y) {
return __y < __x;
}
template <class _Tp>
inline bool operator<=(const _Tp& __x, const _Tp& __y) {
return !(__y < __x);
}
template <class _Tp>
inline bool operator>=(const _Tp& __x, const _Tp& __y) {
return !(__x < __y);
}
# 31 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/iterator" 2 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 1 3 4
# 342 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 32 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/iterator" 2 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 1 3
struct input_iterator_tag {};
struct output_iterator_tag {};
struct forward_iterator_tag : public input_iterator_tag {};
struct bidirectional_iterator_tag : public forward_iterator_tag {};
struct random_access_iterator_tag : public bidirectional_iterator_tag {};
template <class _Tp, class _Distance> struct input_iterator {
typedef input_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
struct output_iterator {
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
};
template <class _Tp, class _Distance> struct forward_iterator {
typedef forward_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
template <class _Tp, class _Distance> struct bidirectional_iterator {
typedef bidirectional_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
template <class _Tp, class _Distance> struct random_access_iterator {
typedef random_access_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
# 98 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 3
template <class _Iterator>
struct iterator_traits {
typedef typename _Iterator::iterator_category iterator_category;
typedef typename _Iterator::value_type value_type;
typedef typename _Iterator::difference_type difference_type;
typedef typename _Iterator::pointer pointer;
typedef typename _Iterator::reference reference;
};
template <class _Tp>
struct iterator_traits<_Tp*> {
typedef random_access_iterator_tag iterator_category;
typedef _Tp value_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
template <class _Tp>
struct iterator_traits<const _Tp*> {
typedef random_access_iterator_tag iterator_category;
typedef _Tp value_type;
typedef ptrdiff_t difference_type;
typedef const _Tp* pointer;
typedef const _Tp& reference;
};
template <class _Iter>
inline typename iterator_traits<_Iter>::iterator_category
__iterator_category(const _Iter&)
{
typedef typename iterator_traits<_Iter>::iterator_category _Category;
return _Category();
}
template <class _Iter>
inline typename iterator_traits<_Iter>::difference_type*
__distance_type(const _Iter&)
{
return static_cast<typename iterator_traits<_Iter>::difference_type*>(0);
}
template <class _Iter>
inline typename iterator_traits<_Iter>::value_type*
__value_type(const _Iter&)
{
return static_cast<typename iterator_traits<_Iter>::value_type*>(0);
}
template <class _Iter>
inline typename iterator_traits<_Iter>::iterator_category
iterator_category(const _Iter& __i) { return __iterator_category(__i); }
template <class _Iter>
inline typename iterator_traits<_Iter>::difference_type*
distance_type(const _Iter& __i) { return __distance_type(__i); }
template <class _Iter>
inline typename iterator_traits<_Iter>::value_type*
value_type(const _Iter& __i) { return __value_type(__i); }
# 259 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 3
template <class _InputIterator, class _Distance>
inline void __distance(_InputIterator __first, _InputIterator __last,
_Distance& __n, input_iterator_tag)
{
while (__first != __last) { ++__first; ++__n; }
}
template <class _RandomAccessIterator, class _Distance>
inline void __distance(_RandomAccessIterator __first,
_RandomAccessIterator __last,
_Distance& __n, random_access_iterator_tag)
{
__n += __last - __first;
}
template <class _InputIterator, class _Distance>
inline void distance(_InputIterator __first,
_InputIterator __last, _Distance& __n)
{
__distance(__first, __last, __n, iterator_category(__first));
}
template <class _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
__distance(_InputIterator __first, _InputIterator __last, input_iterator_tag)
{
typename iterator_traits<_InputIterator>::difference_type __n = 0;
while (__first != __last) {
++__first; ++__n;
}
return __n;
}
template <class _RandomAccessIterator>
inline typename iterator_traits<_RandomAccessIterator>::difference_type
__distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
random_access_iterator_tag) {
return __last - __first;
}
template <class _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
distance(_InputIterator __first, _InputIterator __last) {
typedef typename iterator_traits<_InputIterator>::iterator_category
_Category;
return __distance(__first, __last, _Category());
}
template <class _InputIter, class _Distance>
inline void __advance(_InputIter& __i, _Distance __n, input_iterator_tag) {
while (__n--) ++__i;
}
template <class _BidirectionalIterator, class _Distance>
inline void __advance(_BidirectionalIterator& __i, _Distance __n,
bidirectional_iterator_tag) {
if (__n >= 0)
while (__n--) ++__i;
else
while (__n++) --__i;
}
template <class _RandomAccessIterator, class _Distance>
inline void __advance(_RandomAccessIterator& __i, _Distance __n,
random_access_iterator_tag) {
__i += __n;
}
template <class _InputIterator, class _Distance>
inline void advance(_InputIterator& __i, _Distance __n) {
__advance(__i, __n, iterator_category(__i));
}
template <class _Container>
class back_insert_iterator {
protected:
_Container* container;
public:
typedef _Container container_type;
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
explicit back_insert_iterator(_Container& __x) : container(&__x) {}
back_insert_iterator<_Container>&
operator=(const typename _Container::value_type& __value) {
container->push_back(__value);
return *this;
}
back_insert_iterator<_Container>& operator*() { return *this; }
back_insert_iterator<_Container>& operator++() { return *this; }
back_insert_iterator<_Container>& operator++(int) { return *this; }
};
# 378 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 3
template <class _Container>
inline back_insert_iterator<_Container> back_inserter(_Container& __x) {
return back_insert_iterator<_Container>(__x);
}
template <class _Container>
class front_insert_iterator {
protected:
_Container* container;
public:
typedef _Container container_type;
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
explicit front_insert_iterator(_Container& __x) : container(&__x) {}
front_insert_iterator<_Container>&
operator=(const typename _Container::value_type& __value) {
container->push_front(__value);
return *this;
}
front_insert_iterator<_Container>& operator*() { return *this; }
front_insert_iterator<_Container>& operator++() { return *this; }
front_insert_iterator<_Container>& operator++(int) { return *this; }
};
# 417 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 3
template <class _Container>
inline front_insert_iterator<_Container> front_inserter(_Container& __x) {
return front_insert_iterator<_Container>(__x);
}
template <class _Container>
class insert_iterator {
protected:
_Container* container;
typename _Container::iterator iter;
public:
typedef _Container container_type;
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
insert_iterator(_Container& __x, typename _Container::iterator __i)
: container(&__x), iter(__i) {}
insert_iterator<_Container>&
operator=(const typename _Container::value_type& __value) {
iter = container->insert(iter, __value);
++iter;
return *this;
}
insert_iterator<_Container>& operator*() { return *this; }
insert_iterator<_Container>& operator++() { return *this; }
insert_iterator<_Container>& operator++(int) { return *this; }
};
# 459 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 3
template <class _Container, class _Iterator>
inline
insert_iterator<_Container> inserter(_Container& __x, _Iterator __i)
{
typedef typename _Container::iterator __iter;
return insert_iterator<_Container>(__x, __iter(__i));
}
template <class _BidirectionalIterator, class _Tp, class _Reference = _Tp&,
class _Distance = ptrdiff_t>
class reverse_bidirectional_iterator {
typedef reverse_bidirectional_iterator<_BidirectionalIterator, _Tp,
_Reference, _Distance> _Self;
protected:
_BidirectionalIterator current;
public:
typedef bidirectional_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Reference reference;
reverse_bidirectional_iterator() {}
explicit reverse_bidirectional_iterator(_BidirectionalIterator __x)
: current(__x) {}
_BidirectionalIterator base() const { return current; }
_Reference operator*() const {
_BidirectionalIterator __tmp = current;
return *--__tmp;
}
pointer operator->() const { return &(operator*()); }
_Self& operator++() {
--current;
return *this;
}
_Self operator++(int) {
_Self __tmp = *this;
--current;
return __tmp;
}
_Self& operator--() {
++current;
return *this;
}
_Self operator--(int) {
_Self __tmp = *this;
++current;
return __tmp;
}
};
# 550 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 3
template <class _BiIter, class _Tp, class _Ref,
class _Distance>
inline bool operator==(
const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __x,
const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __y)
{
return __x.base() == __y.base();
}
template <class _Iterator>
class reverse_iterator
{
protected:
_Iterator current;
public:
typedef typename iterator_traits<_Iterator>::iterator_category
iterator_category;
typedef typename iterator_traits<_Iterator>::value_type
value_type;
typedef typename iterator_traits<_Iterator>::difference_type
difference_type;
typedef typename iterator_traits<_Iterator>::pointer
pointer;
typedef typename iterator_traits<_Iterator>::reference
reference;
typedef _Iterator iterator_type;
typedef reverse_iterator<_Iterator> _Self;
public:
reverse_iterator() {}
explicit reverse_iterator(iterator_type __x) : current(__x) {}
reverse_iterator(const _Self& __x) : current(__x.current) {}
template <class _Iter>
reverse_iterator(const reverse_iterator<_Iter>& __x)
: current(__x.base()) {}
iterator_type base() const { return current; }
reference operator*() const {
_Iterator __tmp = current;
return *--__tmp;
}
pointer operator->() const { return &(operator*()); }
_Self& operator++() {
--current;
return *this;
}
_Self operator++(int) {
_Self __tmp = *this;
--current;
return __tmp;
}
_Self& operator--() {
++current;
return *this;
}
_Self operator--(int) {
_Self __tmp = *this;
++current;
return __tmp;
}
_Self operator+(difference_type __n) const {
return _Self(current - __n);
}
_Self& operator+=(difference_type __n) {
current -= __n;
return *this;
}
_Self operator-(difference_type __n) const {
return _Self(current + __n);
}
_Self& operator-=(difference_type __n) {
current += __n;
return *this;
}
reference operator[](difference_type __n) const { return *(*this + __n); }
};
template <class _Iterator>
inline bool operator==(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return __x.base() == __y.base();
}
template <class _Iterator>
inline bool operator<(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return __y.base() < __x.base();
}
template <class _Iterator>
inline typename reverse_iterator<_Iterator>::difference_type
operator-(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return __y.base() - __x.base();
}
template <class _Iterator>
inline reverse_iterator<_Iterator>
operator+(typename reverse_iterator<_Iterator>::difference_type __n,
const reverse_iterator<_Iterator>& __x) {
return reverse_iterator<_Iterator>(__x.base() - __n);
}
# 805 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 3
template <class _Tp, class _Dist = ptrdiff_t>
class istream_iterator {
friend bool operator== <> (const istream_iterator&,
const istream_iterator&);
protected:
istream* _M_stream;
_Tp _M_value;
bool _M_end_marker;
void _M_read() {
_M_end_marker = (*_M_stream) ? true : false;
if (_M_end_marker) *_M_stream >> _M_value;
_M_end_marker = (*_M_stream) ? true : false;
}
public:
typedef input_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Dist difference_type;
typedef const _Tp* pointer;
typedef const _Tp& reference;
istream_iterator() : _M_stream(&cin), _M_end_marker(false) {}
istream_iterator(istream& __s) : _M_stream(&__s) { _M_read(); }
reference operator*() const { return _M_value; }
pointer operator->() const { return &(operator*()); }
istream_iterator<_Tp, _Dist>& operator++() {
_M_read();
return *this;
}
istream_iterator<_Tp, _Dist> operator++(int) {
istream_iterator<_Tp, _Dist> __tmp = *this;
_M_read();
return __tmp;
}
};
# 864 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 3
template <class _Tp, class _Distance>
inline bool operator==(const istream_iterator<_Tp, _Distance>& __x,
const istream_iterator<_Tp, _Distance>& __y) {
return (__x._M_stream == __y._M_stream &&
__x._M_end_marker == __y._M_end_marker) ||
__x._M_end_marker == false && __y._M_end_marker == false;
}
template <class _Tp>
class ostream_iterator {
protected:
ostream* _M_stream;
const char* _M_string;
public:
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
ostream_iterator(ostream& __s) : _M_stream(&__s), _M_string(0) {}
ostream_iterator(ostream& __s, const char* __c)
: _M_stream(&__s), _M_string(__c) {}
ostream_iterator<_Tp>& operator=(const _Tp& __value) {
*_M_stream << __value;
if (_M_string) *_M_stream << _M_string;
return *this;
}
ostream_iterator<_Tp>& operator*() { return *this; }
ostream_iterator<_Tp>& operator++() { return *this; }
ostream_iterator<_Tp>& operator++(int) { return *this; }
};
# 907 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_iterator.h" 3
# 38 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/iterator" 2 3
# 44 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h" 2 3
extern void __out_of_range (const char *);
extern void __length_error (const char *);
template <class charT, class traits = string_char_traits<charT>,
class Allocator = alloc >
class basic_string
{
private:
struct Rep {
size_t len, res, ref;
bool selfish;
charT* data () { return reinterpret_cast<charT *>(this + 1); }
charT& operator[] (size_t s) { return data () [s]; }
charT* grab () { if (selfish) return clone (); ++ref; return data (); }
void release () { if (--ref == 0) delete this; }
inline static void * operator new (size_t, size_t);
inline static void operator delete (void *);
inline static Rep* create (size_t);
charT* clone ();
inline void copy (size_t, const charT *, size_t);
inline void move (size_t, const charT *, size_t);
inline void set (size_t, const charT, size_t);
inline static bool excess_slop (size_t, size_t);
inline static size_t frob_size (size_t);
private:
Rep &operator= (const Rep &);
};
public:
typedef traits traits_type;
typedef typename traits::char_type value_type;
typedef Allocator allocator_type;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef charT& reference;
typedef const charT& const_reference;
typedef charT* pointer;
typedef const charT* const_pointer;
typedef pointer iterator;
typedef const_pointer const_iterator;
typedef ::reverse_iterator<iterator> reverse_iterator;
typedef ::reverse_iterator<const_iterator> const_reverse_iterator;
static const size_type npos = static_cast<size_type>(-1);
private:
Rep *rep () const { return reinterpret_cast<Rep *>(dat) - 1; }
void repup (Rep *p) { rep ()->release (); dat = p->data (); }
public:
const charT* data () const
{ return rep ()->data(); }
size_type length () const
{ return rep ()->len; }
size_type size () const
{ return rep ()->len; }
size_type capacity () const
{ return rep ()->res; }
size_type max_size () const
{ return (npos - 1)/sizeof (charT); }
bool empty () const
{ return size () == 0; }
basic_string& operator= (const basic_string& str)
{
if (&str != this) { rep ()->release (); dat = str.rep ()->grab (); }
return *this;
}
explicit basic_string (): dat (nilRep.grab ()) { }
basic_string (const basic_string& str): dat (str.rep ()->grab ()) { }
basic_string (const basic_string& str, size_type pos, size_type n = npos)
: dat (nilRep.grab ()) { assign (str, pos, n); }
basic_string (const charT* s, size_type n)
: dat (nilRep.grab ()) { assign (s, n); }
basic_string (const charT* s)
: dat (nilRep.grab ()) { assign (s); }
basic_string (size_type n, charT c)
: dat (nilRep.grab ()) { assign (n, c); }
template<class InputIterator>
basic_string(InputIterator begin, InputIterator end)
: dat (nilRep.grab ()) { assign (begin, end); }
~basic_string ()
{ rep ()->release (); }
void swap (basic_string &s) { charT *d = dat; dat = s.dat; s.dat = d; }
basic_string& append (const basic_string& str, size_type pos = 0,
size_type n = npos)
{ return replace (length (), 0, str, pos, n); }
basic_string& append (const charT* s, size_type n)
{ return replace (length (), 0, s, n); }
basic_string& append (const charT* s)
{ return append (s, traits::length (s)); }
basic_string& append (size_type n, charT c)
{ return replace (length (), 0, n, c); }
template<class InputIterator>
basic_string& append(InputIterator first, InputIterator last)
{ return replace (iend (), iend (), first, last); }
basic_string& assign (const basic_string& str, size_type pos = 0,
size_type n = npos)
{ return replace (0, npos, str, pos, n); }
basic_string& assign (const charT* s, size_type n)
{ return replace (0, npos, s, n); }
basic_string& assign (const charT* s)
{ return assign (s, traits::length (s)); }
basic_string& assign (size_type n, charT c)
{ return replace (0, npos, n, c); }
template<class InputIterator>
basic_string& assign(InputIterator first, InputIterator last)
{ return replace (ibegin (), iend (), first, last); }
basic_string& operator= (const charT* s)
{ return assign (s); }
basic_string& operator= (charT c)
{ return assign (1, c); }
basic_string& operator+= (const basic_string& rhs)
{ return append (rhs); }
basic_string& operator+= (const charT* s)
{ return append (s); }
basic_string& operator+= (charT c)
{ return append (1, c); }
basic_string& insert (size_type pos1, const basic_string& str,
size_type pos2 = 0, size_type n = npos)
{ return replace (pos1, 0, str, pos2, n); }
basic_string& insert (size_type pos, const charT* s, size_type n)
{ return replace (pos, 0, s, n); }
basic_string& insert (size_type pos, const charT* s)
{ return insert (pos, s, traits::length (s)); }
basic_string& insert (size_type pos, size_type n, charT c)
{ return replace (pos, 0, n, c); }
iterator insert(iterator p, charT c)
{ size_type __o = p - ibegin ();
insert (p - ibegin (), 1, c); selfish ();
return ibegin () + __o; }
iterator insert(iterator p, size_type n, charT c)
{ size_type __o = p - ibegin ();
insert (p - ibegin (), n, c); selfish ();
return ibegin () + __o; }
template<class InputIterator>
void insert(iterator p, InputIterator first, InputIterator last)
{ replace (p, p, first, last); }
basic_string& erase (size_type pos = 0, size_type n = npos)
{ return replace (pos, n, (size_type)0, (charT)0); }
iterator erase(iterator p)
{ size_type __o = p - begin();
replace (__o, 1, (size_type)0, (charT)0); selfish ();
return ibegin() + __o; }
iterator erase(iterator f, iterator l)
{ size_type __o = f - ibegin();
replace (__o, l-f, (size_type)0, (charT)0);selfish ();
return ibegin() + __o; }
basic_string& replace (size_type pos1, size_type n1, const basic_string& str,
size_type pos2 = 0, size_type n2 = npos);
basic_string& replace (size_type pos, size_type n1, const charT* s,
size_type n2);
basic_string& replace (size_type pos, size_type n1, const charT* s)
{ return replace (pos, n1, s, traits::length (s)); }
basic_string& replace (size_type pos, size_type n1, size_type n2, charT c);
basic_string& replace (size_type pos, size_type n, charT c)
{ return replace (pos, n, 1, c); }
basic_string& replace (iterator i1, iterator i2, const basic_string& str)
{ return replace (i1 - ibegin (), i2 - i1, str); }
basic_string& replace (iterator i1, iterator i2, const charT* s, size_type n)
{ return replace (i1 - ibegin (), i2 - i1, s, n); }
basic_string& replace (iterator i1, iterator i2, const charT* s)
{ return replace (i1 - ibegin (), i2 - i1, s); }
basic_string& replace (iterator i1, iterator i2, size_type n, charT c)
{ return replace (i1 - ibegin (), i2 - i1, n, c); }
template<class InputIterator>
basic_string& replace(iterator i1, iterator i2,
InputIterator j1, InputIterator j2);
private:
static charT eos () { return traits::eos (); }
void unique () { if (rep ()->ref > 1) alloc (length (), true); }
void selfish () { unique (); rep ()->selfish = true; }
public:
charT operator[] (size_type pos) const
{
if (pos == length ())
return eos ();
return data ()[pos];
}
reference operator[] (size_type pos)
{ selfish (); return (*rep ())[pos]; }
reference at (size_type pos)
{
do { if ( pos >= length () ) __out_of_range ("pos >= length ()"); } while (0) ;
return (*this)[pos];
}
const_reference at (size_type pos) const
{
do { if ( pos >= length () ) __out_of_range ("pos >= length ()"); } while (0) ;
return data ()[pos];
}
private:
void terminate () const
{ traits::assign ((*rep ())[length ()], eos ()); }
public:
const charT* c_str () const
{ if (length () == 0) return ""; terminate (); return data (); }
void resize (size_type n, charT c);
void resize (size_type n)
{ resize (n, eos ()); }
void reserve (size_type) { }
size_type copy (charT* s, size_type n, size_type pos = 0) const;
size_type find (const basic_string& str, size_type pos = 0) const
{ return find (str.data(), pos, str.length()); }
size_type find (const charT* s, size_type pos, size_type n) const;
size_type find (const charT* s, size_type pos = 0) const
{ return find (s, pos, traits::length (s)); }
size_type find (charT c, size_type pos = 0) const;
size_type rfind (const basic_string& str, size_type pos = npos) const
{ return rfind (str.data(), pos, str.length()); }
size_type rfind (const charT* s, size_type pos, size_type n) const;
size_type rfind (const charT* s, size_type pos = npos) const
{ return rfind (s, pos, traits::length (s)); }
size_type rfind (charT c, size_type pos = npos) const;
size_type find_first_of (const basic_string& str, size_type pos = 0) const
{ return find_first_of (str.data(), pos, str.length()); }
size_type find_first_of (const charT* s, size_type pos, size_type n) const;
size_type find_first_of (const charT* s, size_type pos = 0) const
{ return find_first_of (s, pos, traits::length (s)); }
size_type find_first_of (charT c, size_type pos = 0) const
{ return find (c, pos); }
size_type find_last_of (const basic_string& str, size_type pos = npos) const
{ return find_last_of (str.data(), pos, str.length()); }
size_type find_last_of (const charT* s, size_type pos, size_type n) const;
size_type find_last_of (const charT* s, size_type pos = npos) const
{ return find_last_of (s, pos, traits::length (s)); }
size_type find_last_of (charT c, size_type pos = npos) const
{ return rfind (c, pos); }
size_type find_first_not_of (const basic_string& str, size_type pos = 0) const
{ return find_first_not_of (str.data(), pos, str.length()); }
size_type find_first_not_of (const charT* s, size_type pos, size_type n) const;
size_type find_first_not_of (const charT* s, size_type pos = 0) const
{ return find_first_not_of (s, pos, traits::length (s)); }
size_type find_first_not_of (charT c, size_type pos = 0) const;
size_type find_last_not_of (const basic_string& str, size_type pos = npos) const
{ return find_last_not_of (str.data(), pos, str.length()); }
size_type find_last_not_of (const charT* s, size_type pos, size_type n) const;
size_type find_last_not_of (const charT* s, size_type pos = npos) const
{ return find_last_not_of (s, pos, traits::length (s)); }
size_type find_last_not_of (charT c, size_type pos = npos) const;
basic_string substr (size_type pos = 0, size_type n = npos) const
{ return basic_string (*this, pos, n); }
int compare (const basic_string& str, size_type pos = 0, size_type n = npos) const;
int compare (const charT* s, size_type pos, size_type n) const;
int compare (const charT* s, size_type pos = 0) const
{ return compare (s, pos, traits::length (s)); }
iterator begin () { selfish (); return &(*this)[0]; }
iterator end () { selfish (); return &(*this)[length ()]; }
private:
iterator ibegin () const { return &(*rep ())[0]; }
iterator iend () const { return &(*rep ())[length ()]; }
public:
const_iterator begin () const { return ibegin (); }
const_iterator end () const { return iend (); }
reverse_iterator rbegin() { return reverse_iterator (end ()); }
const_reverse_iterator rbegin() const
{ return const_reverse_iterator (end ()); }
reverse_iterator rend() { return reverse_iterator (begin ()); }
const_reverse_iterator rend() const
{ return const_reverse_iterator (begin ()); }
private:
void alloc (size_type size, bool save);
static size_type _find (const charT* ptr, charT c, size_type xpos, size_type len);
inline bool check_realloc (size_type s) const;
static Rep nilRep;
charT *dat;
};
template <class charT, class traits, class Allocator> template <class InputIterator>
basic_string <charT, traits, Allocator>& basic_string <charT, traits, Allocator>::
replace (iterator i1, iterator i2, InputIterator j1, InputIterator j2)
{
const size_type len = length ();
size_type pos = i1 - ibegin ();
size_type n1 = i2 - i1;
size_type n2 = j2 - j1;
do { if ( pos > len ) __out_of_range ("pos > len"); } while (0) ;
if (n1 > len - pos)
n1 = len - pos;
do { if ( len - n1 > max_size () - n2 ) __length_error ("len - n1 > max_size () - n2"); } while (0) ;
size_t newlen = len - n1 + n2;
if (check_realloc (newlen))
{
Rep *p = Rep::create (newlen);
p->copy (0, data (), pos);
p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
for (; j1 != j2; ++j1, ++pos)
traits::assign ((*p)[pos], *j1);
repup (p);
}
else
{
rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
for (; j1 != j2; ++j1, ++pos)
traits::assign ((*rep ())[pos], *j1);
}
rep ()->len = newlen;
return *this;
}
template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (const basic_string <charT, traits, Allocator>& lhs,
const basic_string <charT, traits, Allocator>& rhs)
{
basic_string <charT, traits, Allocator> str (lhs);
str.append (rhs);
return str;
}
template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
basic_string <charT, traits, Allocator> str (lhs);
str.append (rhs);
return str;
}
template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (charT lhs, const basic_string <charT, traits, Allocator>& rhs)
{
basic_string <charT, traits, Allocator> str (1, lhs);
str.append (rhs);
return str;
}
template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
basic_string <charT, traits, Allocator> str (lhs);
str.append (rhs);
return str;
}
template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (const basic_string <charT, traits, Allocator>& lhs, charT rhs)
{
basic_string <charT, traits, Allocator> str (lhs);
str.append (1, rhs);
return str;
}
template <class charT, class traits, class Allocator>
inline bool
operator== (const basic_string <charT, traits, Allocator>& lhs,
const basic_string <charT, traits, Allocator>& rhs)
{
return (lhs.compare (rhs) == 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator== (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
return (rhs.compare (lhs) == 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator== (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
return (lhs.compare (rhs) == 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator!= (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
return (rhs.compare (lhs) != 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator!= (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
return (lhs.compare (rhs) != 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator< (const basic_string <charT, traits, Allocator>& lhs,
const basic_string <charT, traits, Allocator>& rhs)
{
return (lhs.compare (rhs) < 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator< (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
return (rhs.compare (lhs) > 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator< (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
return (lhs.compare (rhs) < 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator> (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
return (rhs.compare (lhs) < 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator> (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
return (lhs.compare (rhs) > 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator<= (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
return (rhs.compare (lhs) >= 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator<= (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
return (lhs.compare (rhs) <= 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator>= (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
return (rhs.compare (lhs) <= 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator>= (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
return (lhs.compare (rhs) >= 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator!= (const basic_string <charT, traits, Allocator>& lhs,
const basic_string <charT, traits, Allocator>& rhs)
{
return (lhs.compare (rhs) != 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator> (const basic_string <charT, traits, Allocator>& lhs,
const basic_string <charT, traits, Allocator>& rhs)
{
return (lhs.compare (rhs) > 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator<= (const basic_string <charT, traits, Allocator>& lhs,
const basic_string <charT, traits, Allocator>& rhs)
{
return (lhs.compare (rhs) <= 0);
}
template <class charT, class traits, class Allocator>
inline bool
operator>= (const basic_string <charT, traits, Allocator>& lhs,
const basic_string <charT, traits, Allocator>& rhs)
{
return (lhs.compare (rhs) >= 0);
}
class istream; class ostream;
template <class charT, class traits, class Allocator> istream&
operator>> (istream&, basic_string <charT, traits, Allocator>&);
template <class charT, class traits, class Allocator> ostream&
operator<< (ostream&, const basic_string <charT, traits, Allocator>&);
template <class charT, class traits, class Allocator> istream&
getline (istream&, basic_string <charT, traits, Allocator>&, charT delim = '\n');
}
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.cc" 1 3
extern "C++" {
template <class charT, class traits, class Allocator>
inline void * basic_string <charT, traits, Allocator>::Rep::
operator new (size_t s, size_t extra)
{
return Allocator::allocate(s + extra * sizeof (charT));
}
template <class charT, class traits, class Allocator>
inline void basic_string <charT, traits, Allocator>::Rep::
operator delete (void * ptr)
{
Allocator::deallocate(ptr, sizeof(Rep) +
reinterpret_cast<Rep *>(ptr)->res *
sizeof (charT));
}
template <class charT, class traits, class Allocator>
inline size_t basic_string <charT, traits, Allocator>::Rep::
frob_size (size_t s)
{
size_t i = 16;
while (i < s) i *= 2;
return i;
}
template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>::Rep *
basic_string <charT, traits, Allocator>::Rep::
create (size_t extra)
{
extra = frob_size (extra + 1);
Rep *p = new (extra) Rep;
p->res = extra;
p->ref = 1;
p->selfish = false;
return p;
}
template <class charT, class traits, class Allocator>
charT * basic_string <charT, traits, Allocator>::Rep::
clone ()
{
Rep *p = Rep::create (len);
p->copy (0, data (), len);
p->len = len;
return p->data ();
}
template <class charT, class traits, class Allocator>
inline bool basic_string <charT, traits, Allocator>::Rep::
excess_slop (size_t s, size_t r)
{
return 2 * (s <= 16 ? 16 : s) < r;
}
template <class charT, class traits, class Allocator>
inline bool basic_string <charT, traits, Allocator>::
check_realloc (basic_string::size_type s) const
{
s += sizeof (charT);
rep ()->selfish = false;
return (rep ()->ref > 1
|| s > capacity ()
|| Rep::excess_slop (s, capacity ()));
}
template <class charT, class traits, class Allocator>
void basic_string <charT, traits, Allocator>::
alloc (basic_string::size_type size, bool save)
{
if (! check_realloc (size))
return;
Rep *p = Rep::create (size);
if (save)
{
p->copy (0, data (), length ());
p->len = length ();
}
else
p->len = 0;
repup (p);
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>&
basic_string <charT, traits, Allocator>::
replace (size_type pos1, size_type n1,
const basic_string& str, size_type pos2, size_type n2)
{
const size_t len2 = str.length ();
if (pos1 == 0 && n1 >= length () && pos2 == 0 && n2 >= len2)
return operator= (str);
do { if ( pos2 > len2 ) __out_of_range ("pos2 > len2"); } while (0) ;
if (n2 > len2 - pos2)
n2 = len2 - pos2;
return replace (pos1, n1, str.data () + pos2, n2);
}
template <class charT, class traits, class Allocator>
inline void basic_string <charT, traits, Allocator>::Rep::
copy (size_t pos, const charT *s, size_t n)
{
if (n)
traits::copy (data () + pos, s, n);
}
template <class charT, class traits, class Allocator>
inline void basic_string <charT, traits, Allocator>::Rep::
move (size_t pos, const charT *s, size_t n)
{
if (n)
traits::move (data () + pos, s, n);
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>&
basic_string <charT, traits, Allocator>::
replace (size_type pos, size_type n1, const charT* s, size_type n2)
{
const size_type len = length ();
do { if ( pos > len ) __out_of_range ("pos > len"); } while (0) ;
if (n1 > len - pos)
n1 = len - pos;
do { if ( len - n1 > max_size () - n2 ) __length_error ("len - n1 > max_size () - n2"); } while (0) ;
size_t newlen = len - n1 + n2;
if (check_realloc (newlen))
{
Rep *p = Rep::create (newlen);
p->copy (0, data (), pos);
p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
p->copy (pos, s, n2);
repup (p);
}
else
{
rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
rep ()->copy (pos, s, n2);
}
rep ()->len = newlen;
return *this;
}
template <class charT, class traits, class Allocator>
inline void basic_string <charT, traits, Allocator>::Rep::
set (size_t pos, const charT c, size_t n)
{
traits::set (data () + pos, c, n);
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>& basic_string <charT, traits, Allocator>::
replace (size_type pos, size_type n1, size_type n2, charT c)
{
const size_t len = length ();
do { if ( pos > len ) __out_of_range ("pos > len"); } while (0) ;
if (n1 > len - pos)
n1 = len - pos;
do { if ( len - n1 > max_size () - n2 ) __length_error ("len - n1 > max_size () - n2"); } while (0) ;
size_t newlen = len - n1 + n2;
if (check_realloc (newlen))
{
Rep *p = Rep::create (newlen);
p->copy (0, data (), pos);
p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
p->set (pos, c, n2);
repup (p);
}
else
{
rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
rep ()->set (pos, c, n2);
}
rep ()->len = newlen;
return *this;
}
template <class charT, class traits, class Allocator>
void basic_string <charT, traits, Allocator>::
resize (size_type n, charT c)
{
do { if ( n > max_size () ) __length_error ("n > max_size ()"); } while (0) ;
if (n > length ())
append (n - length (), c);
else
erase (n);
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
copy (charT* s, size_type n, size_type pos) const
{
do { if ( pos > length () ) __out_of_range ("pos > length ()"); } while (0) ;
if (n > length () - pos)
n = length () - pos;
traits::copy (s, data () + pos, n);
return n;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find (const charT* s, size_type pos, size_type n) const
{
size_t xpos = pos;
for (; xpos + n <= length (); ++xpos)
if (traits::eq (data () [xpos], *s)
&& traits::compare (data () + xpos, s, n) == 0)
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
_find (const charT* ptr, charT c, size_type xpos, size_type len)
{
for (; xpos < len; ++xpos)
if (traits::eq (ptr [xpos], c))
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find (charT c, size_type pos) const
{
return _find (data (), c, pos, length ());
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
rfind (const charT* s, size_type pos, size_type n) const
{
if (n > length ())
return npos;
size_t xpos = length () - n;
if (xpos > pos)
xpos = pos;
for (++xpos; xpos-- > 0; )
if (traits::eq (data () [xpos], *s)
&& traits::compare (data () + xpos, s, n) == 0)
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
rfind (charT c, size_type pos) const
{
if (1 > length ())
return npos;
size_t xpos = length () - 1;
if (xpos > pos)
xpos = pos;
for (++xpos; xpos-- > 0; )
if (traits::eq (data () [xpos], c))
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_first_of (const charT* s, size_type pos, size_type n) const
{
size_t xpos = pos;
for (; xpos < length (); ++xpos)
if (_find (s, data () [xpos], 0, n) != npos)
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_last_of (const charT* s, size_type pos, size_type n) const
{
if (length() == 0)
return npos;
size_t xpos = length () - 1;
if (xpos > pos)
xpos = pos;
for (++xpos; xpos-- > 0;)
if (_find (s, data () [xpos], 0, n) != npos)
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_first_not_of (const charT* s, size_type pos, size_type n) const
{
size_t xpos = pos;
for (; xpos < length (); ++xpos)
if (_find (s, data () [xpos], 0, n) == npos)
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_first_not_of (charT c, size_type pos) const
{
size_t xpos = pos;
for (; xpos < length (); ++xpos)
if (traits::ne (data () [xpos], c))
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_last_not_of (const charT* s, size_type pos, size_type n) const
{
if (length() == 0)
return npos;
size_t xpos = length () - 1;
if (xpos > pos)
xpos = pos;
for (++xpos; xpos-- > 0;)
if (_find (s, data () [xpos], 0, n) == npos)
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_last_not_of (charT c, size_type pos) const
{
if (length() == 0)
return npos;
size_t xpos = length () - 1;
if (xpos > pos)
xpos = pos;
for (++xpos; xpos-- > 0;)
if (traits::ne (data () [xpos], c))
return xpos;
return npos;
}
template <class charT, class traits, class Allocator>
int basic_string <charT, traits, Allocator>::
compare (const basic_string& str, size_type pos, size_type n) const
{
do { if ( pos > length () ) __out_of_range ("pos > length ()"); } while (0) ;
size_t rlen = length () - pos;
if (rlen > n)
rlen = n;
if (rlen > str.length ())
rlen = str.length ();
int r = traits::compare (data () + pos, str.data (), rlen);
if (r != 0)
return r;
if (rlen == n)
return 0;
return (length () - pos) - str.length ();
}
template <class charT, class traits, class Allocator>
int basic_string <charT, traits, Allocator>::
compare (const charT* s, size_type pos, size_type n) const
{
do { if ( pos > length () ) __out_of_range ("pos > length ()"); } while (0) ;
size_t rlen = length () - pos;
if (rlen > n)
rlen = n;
int r = traits::compare (data () + pos, s, rlen);
if (r != 0)
return r;
return (length () - pos) - n;
}
template <class charT, class traits, class Allocator>
istream &
operator>> (istream &is, basic_string <charT, traits, Allocator> &s)
{
int w = is.width (0);
if (is.ipfx0 ())
{
register streambuf *sb = is.rdbuf ();
s.resize (0);
while (1)
{
int ch = sb->sbumpc ();
if (ch == (-1) )
{
is.setstate (ios::eofbit);
break;
}
else if (traits::is_del (ch))
{
sb->sungetc ();
break;
}
s += static_cast<charT> (ch);
if (--w == 1)
break;
}
}
is.isfx ();
if (s.length () == 0)
is.setstate (ios::failbit);
return is;
}
template <class charT, class traits, class Allocator>
ostream &
operator<< (ostream &o, const basic_string <charT, traits, Allocator>& s)
{
return o.write (s.data (), s.length ());
}
template <class charT, class traits, class Allocator>
istream&
getline (istream &is, basic_string <charT, traits, Allocator>& s, charT delim)
{
if (is.ipfx1 ())
{
_G_size_t count = 0;
streambuf *sb = is.rdbuf ();
s.resize (0);
while (1)
{
int ch = sb->sbumpc ();
if (ch == (-1) )
{
is.setstate (count == 0
? (ios::failbit|ios::eofbit)
: ios::eofbit);
break;
}
++count;
if (ch == delim)
break;
s += static_cast<charT> (ch);
if (s.length () == s.npos - 1)
{
is.setstate (ios::failbit);
break;
}
}
}
is.isfx ();
return is;
}
template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::Rep
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;
}
# 618 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h" 2 3
# 6 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/string" 2 3
extern "C++" {
typedef basic_string <char> string;
}
# 1 "foo.cc" 2
basic_string <char> t;
nathan@manao:128>uname -a && ss-g++ -v
SunOS manao 5.6 Generic_105181-03 sun4u sparc
Reading specs from /home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/specs
gcc version egcs-2.93.20 19990427 (gcc2 ss-980929 experimental)
nathan@manao:129>ss-g++ -c foo.cc -Wcast-align
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h: In function `static char * __default_alloc_template<false,0>::_S_chunk_alloc(unsigned int, int &)':
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h:531: instantiated from `__default_alloc_template<false,0>::_S_refill(unsigned int)'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h:419: instantiated from `__default_alloc_template<false,0>::allocate(unsigned int)'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.cc:33: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::Rep::operator new(unsigned int, unsigned int)'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.cc:60: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::Rep::create(unsigned int)'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.cc:71: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::Rep::clone()'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h:75: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::Rep::grab()'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h:137: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::basic_string()'
foo.cc:3: instantiated from here
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h:488: warning: cast increases required alignment of target type
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h: In function `static void * __default_alloc_template<false,0>::_S_refill(unsigned int)':
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h:419: instantiated from `__default_alloc_template<false,0>::allocate(unsigned int)'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.cc:33: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::Rep::operator new(unsigned int, unsigned int)'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.cc:60: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::Rep::create(unsigned int)'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.cc:71: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::Rep::clone()'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h:75: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::Rep::grab()'
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/std/bastring.h:137: instantiated from `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::basic_string()'
foo.cc:3: instantiated from here
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h:542: warning: cast increases required alignment of target type
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h:543: warning: cast increases required alignment of target type
/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/stl_alloc.h:546: warning: cast increases required alignment of target type
# 1 "foo.cc"
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/string" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/c++config.h" 1 3
enum
{
_ISupper = (1 << 0 ) ,
_ISlower = (1 << 1 ) ,
_ISalpha = (1 << 2 ) ,
_ISdigit = (1 << 3 ) ,
_ISxdigit = (1 << 4 ) ,
_ISspace = (1 << 5 ) ,
_ISprint = (1 << 6 ) ,
_ISgraph = (1 << 7 ) ,
_ISblank = (1 << 8 ) ,
_IScntrl = (1 << 9 ) ,
_ISpunct = (1 << 10 ) ,
_ISalnum = (1 << 11 )
};
typedef struct {
int __fill[6];
} mbstate_t;
# 37 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_config.h" 1 3
# 185 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_config.h" 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/_G_config.h" 1 3 4
typedef int _G_int8_t __attribute__((__mode__(__QI__)));
typedef unsigned int _G_uint8_t __attribute__((__mode__(__QI__)));
typedef int _G_int16_t __attribute__((__mode__(__HI__)));
typedef unsigned int _G_uint16_t __attribute__((__mode__(__HI__)));
typedef int _G_int32_t __attribute__((__mode__(__SI__)));
typedef unsigned int _G_uint32_t __attribute__((__mode__(__SI__)));
typedef int _G_int64_t __attribute__((__mode__(__DI__)));
typedef unsigned int _G_uint64_t __attribute__((__mode__(__DI__)));
__extension__ typedef long long _G_llong;
__extension__ typedef unsigned long long _G_ullong;
typedef long _G_clock_t;
typedef unsigned long _G_dev_t;
typedef long _G_fpos_t;
typedef long _G_gid_t;
typedef unsigned long _G_ino_t;
typedef unsigned long _G_mode_t;
typedef unsigned long _G_nlink_t;
typedef long _G_off_t;
typedef long _G_pid_t;
typedef int _G_ptrdiff_t;
typedef int _G_sigset_t;
typedef unsigned int _G_size_t;
typedef long _G_time_t;
typedef long _G_uid_t;
typedef long int _G_wchar_t;
typedef int _G_ssize_t;
typedef unsigned int _G_wint_t;
typedef void * _G_va_list;
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 1 3 4
# 19 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 61 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 131 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 190 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 271 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 283 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 317 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 86 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/_G_config.h" 2 3 4
# 188 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_config.h" 2 3
# 223 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_config.h" 3
# 248 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_config.h" 3
# 292 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_config.h" 3
# 307 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_config.h" 3
# 401 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_config.h" 3
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 1 3 4
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/syslimits.h" 1 3 4
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 1 3 4
# 114 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 3 4
# 1 "/usr/include/limits.h" 1 3 4
#pragma ident "@(#)limits.h 1.35 97/02/25 SMI"
# 1 "/usr/include/sys/feature_tests.h" 1 3 4
#pragma ident "@(#)feature_tests.h 1.13 97/06/26 SMI"
extern "C" {
}
# 18 "/usr/include/limits.h" 2 3 4
# 1 "/usr/include/sys/isa_defs.h" 1 3 4
#pragma ident "@(#)isa_defs.h 1.11 97/03/21 SMI"
extern "C" {
# 243 "/usr/include/sys/isa_defs.h" 3 4
# 334 "/usr/include/sys/isa_defs.h" 3 4
}
# 19 "/usr/include/limits.h" 2 3 4
# 1 "/usr/include/sys/int_limits.h" 1 3 4
#pragma ident "@(#)int_limits.h 1.3 96/09/23 SMI"
extern "C" {
}
# 31 "/usr/include/limits.h" 2 3 4
extern "C" {
extern long _sysconf(int);
}
# 117 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 2 3 4
# 7 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/syslimits.h" 2 3 4
# 11 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 2 3 4
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 2 3
# 40 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/utility.h" 1 3
namespace std {
template<unsigned _Num, int _Shift = (sizeof(unsigned)* 8 )/2,
unsigned _Mask = (~0u>>_Shift)>
struct _Count_ones;
template<unsigned _Num, unsigned _Mask>
struct _Count_ones<_Num,0,_Mask> { static const unsigned _S_count = _Num; };
template<unsigned _Num, int _Shift, unsigned _Mask>
struct _Count_ones {
static const unsigned _S_halfcount =
_Count_ones<_Num, _Shift/2, (_Mask^((~_Mask)>>(_Shift/2))) >::_S_count;
static const unsigned _S_count
= (_S_halfcount&_Mask) + ((_S_halfcount>>_Shift)&_Mask);
};
extern void __out_of_range (const char *__str);
extern void __length_error (const char *__str);
}
# 41 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_string_fwd.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cstddef.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 1 3 4
# 61 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
typedef int ptrdiff_t;
typedef unsigned int size_t;
typedef unsigned int wint_t;
# 317 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cstddef.h" 2 3
# 17 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_string_fwd.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_new.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/new" 1 3 4
#pragma interface "new"
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 1 3 4
# 342 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 8 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/new" 2 3 4
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/exception" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_exception.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/exception" 1 3 4
#pragma interface "exception"
extern "C++" {
namespace std {
class exception {
public:
exception () { }
virtual ~exception () { }
virtual const char* what () const;
};
class bad_exception : public exception {
public:
bad_exception () { }
virtual ~bad_exception () { }
};
typedef void (*terminate_handler) ();
typedef void (*unexpected_handler) ();
terminate_handler set_terminate (terminate_handler);
void terminate () __attribute__ ((__noreturn__));
unexpected_handler set_unexpected (unexpected_handler);
void unexpected () __attribute__ ((__noreturn__));
bool uncaught_exception ();
}
}
# 33 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_exception.h" 2 3
# 74 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_exception.h" 3
# 2 "/home/staff/nathan/solaris/local/include/g++-v3/exception" 2 3
# 9 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/new" 2 3 4
extern "C++" {
namespace std {
class bad_alloc : public exception {
public:
virtual const char* what() const throw() { return "bad_alloc"; }
};
struct nothrow_t {};
extern const nothrow_t nothrow;
typedef void (*new_handler)();
new_handler set_new_handler (new_handler);
}
void *operator new (size_t) throw (std::bad_alloc);
void *operator new[] (size_t) throw (std::bad_alloc);
void operator delete (void *) throw();
void operator delete[] (void *) throw();
void *operator new (size_t, const std::nothrow_t&) throw();
void *operator new[] (size_t, const std::nothrow_t&) throw();
void operator delete (void *, const std::nothrow_t&) throw();
void operator delete[] (void *, const std::nothrow_t&) throw();
inline void *operator new(size_t, void *place) throw() { return place; }
inline void *operator new[](size_t, void *place) throw() { return place; }
}
# 36 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_new.h" 2 3
# 76 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_new.h" 3
# 47 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cstdlib.h" 1 3
# 1 "/usr/include/stdlib.h" 1 3 4
#pragma ident "@(#)stdlib.h 1.40 97/06/30 SMI"
extern "C" {
typedef struct {
int quot;
int rem;
} div_t;
typedef struct {
long quot;
long rem;
} ldiv_t;
typedef struct {
long long quot;
long long rem;
} lldiv_t;
typedef long uid_t;
# 86 "/usr/include/stdlib.h" 3 4
extern unsigned char __ctype[];
extern double atof(const char *);
extern int atoi(const char *);
extern long int atol(const char *);
extern double strtod(const char *, char **);
extern long int strtol(const char *, char **, int);
extern unsigned long int strtoul(const char *, char **, int);
extern int rand(void);
extern void srand(unsigned int);
extern void *calloc(size_t, size_t);
extern void free(void *);
extern void *malloc(size_t);
extern void *realloc(void *, size_t);
extern void abort(void);
extern int atexit(void (*)(void));
extern void exit(int);
extern void _exithandle(void);
extern char *getenv(const char *);
extern int system(const char *);
extern void *bsearch(const void *, const void *, size_t, size_t,
int (*)(const void *, const void *));
extern void qsort(void *, size_t, size_t,
int (*)(const void *, const void *));
extern int abs(int);
extern div_t div(int, int);
extern long int labs(long);
extern ldiv_t ldiv(long, long);
extern int mbtowc(wchar_t *, const char *, size_t);
extern int mblen(const char *, size_t);
extern int wctomb(char *, wchar_t);
extern size_t mbstowcs(wchar_t *, const char *, size_t);
extern size_t wcstombs(char *, const wchar_t *, size_t);
extern double drand48(void);
extern double erand48(unsigned short *);
extern long jrand48(unsigned short *);
extern void lcong48(unsigned short *);
extern long lrand48(void);
extern long mrand48(void);
extern long nrand48(unsigned short *);
extern unsigned short *seed48(unsigned short *);
extern void srand48(long);
extern int putenv(const char *);
extern void setkey(const char *);
extern void swab(const char *, char *, int);
extern int mkstemp(char *);
extern int mkstemp64(char *);
extern long a64l(const char *);
extern char *ecvt(double, int, int *, int *);
extern char *fcvt(double, int, int *, int *);
extern char *gcvt(double, int, char *);
extern int getsubopt(char **, char *const *, char **);
extern int grantpt(int);
extern char *initstate(unsigned, char *, size_t);
extern char *l64a(long);
extern char *mktemp(char *);
extern char *ptsname(int);
extern long random(void);
extern char *realpath(const char *, char *);
extern char *setstate(const char *);
extern void srandom(unsigned);
extern int ttyslot(void);
extern int unlockpt(int);
extern void *valloc(size_t);
extern int dup2(int, int);
extern char *qecvt(long double, int, int *, int *);
extern char *qfcvt(long double, int, int *, int *);
extern char *qgcvt(long double, int, char *);
extern char *getcwd(char *, size_t);
extern const char *getexecname(void);
extern char *getlogin(void);
extern int getopt(int, char *const *, const char *);
extern char *optarg;
extern int optind, opterr, optopt;
extern char *getpass(const char *);
extern char *getpassphrase(const char *);
extern int getpw(uid_t, char *);
extern int isatty(int);
extern void *memalign(size_t, size_t);
extern char *ttyname(int);
extern long long atoll(const char *);
extern long long llabs(long long);
extern lldiv_t lldiv(long long, long long);
extern char *lltostr(long long, char *);
extern long long strtoll(const char *, char **, int);
extern unsigned long long strtoull(const char *, char **, int);
extern char *ulltostr(unsigned long long, char *);
# 349 "/usr/include/stdlib.h" 3 4
}
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cstdlib.h" 2 3
# 57 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cstring.h" 1 3
# 1 "/usr/include/string.h" 1 3 4
#pragma ident "@(#)string.h 1.19 96/03/12 SMI"
extern "C" {
extern void *memcpy(void *, const void *, size_t);
extern void *memmove(void *, const void *, size_t);
extern char *strcpy(char *, const char *);
extern char *strncpy(char *, const char *, size_t);
extern char *strcat(char *, const char *);
extern char *strncat(char *, const char *, size_t);
extern int memcmp(const void *, const void *, size_t);
extern int strcmp(const char *, const char *);
extern int strcoll(const char *, const char *);
extern int strncmp(const char *, const char *, size_t);
extern size_t strxfrm(char *, const char *, size_t);
extern void *memchr(const void *, int, size_t);
extern char *strchr(const char *, int);
extern size_t strcspn(const char *, const char *);
extern char *strpbrk(const char *, const char *);
extern char *strrchr(const char *, int);
extern size_t strspn(const char *, const char *);
extern char *strstr(const char *, const char *);
extern char *strtok(char *, const char *);
extern void *memset(void *, int, size_t);
extern char *strerror(int);
extern size_t strlen(const char *);
extern void *memccpy(void *, const void *, int, size_t);
extern char *strsignal(int);
extern int ffs(int);
extern int strcasecmp(const char *, const char *);
extern int strncasecmp(const char *, const char *, size_t);
extern char *strdup(const char *);
# 136 "/usr/include/string.h" 3 4
}
# 42 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cstring.h" 2 3
# 58 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cassert.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/assert.h" 1 3 4
# 19 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/assert.h" 3 4
extern "C" {
extern void __eprintf (const char *, const char *, unsigned, const char *)
__attribute__ ((noreturn));
}
# 52 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../sparc-sun-solaris2.6/include/assert.h" 3 4
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cassert.h" 2 3
# 59 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h" 2 3
# 88 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h" 3
namespace std {
template <int __inst>
class __malloc_alloc_template {
private:
static void* _S_oom_malloc(size_t);
static void* _S_oom_realloc(void*, size_t);
static void (* __malloc_alloc_oom_handler)();
public:
static void* allocate(size_t __n)
{
void* __result = malloc(__n);
if (0 == __result) __result = _S_oom_malloc(__n);
return __result;
}
static void deallocate(void* __p, size_t )
{
free(__p);
}
static void* reallocate(void* __p, size_t , size_t __new_sz)
{
void* __result = realloc(__p, __new_sz);
if (0 == __result) __result = _S_oom_realloc(__p, __new_sz);
return __result;
}
static void (* __set_malloc_handler(void (*__f)()))()
{
void (* __old)() = __malloc_alloc_oom_handler;
__malloc_alloc_oom_handler = __f;
return(__old);
}
};
template <int __inst>
void (* __malloc_alloc_template<__inst>::__malloc_alloc_oom_handler)() = 0;
template <int __inst>
void*
__malloc_alloc_template<__inst>::_S_oom_malloc(size_t __n)
{
void (* __my_malloc_handler)();
void* __result;
for (;;) {
__my_malloc_handler = __malloc_alloc_oom_handler;
if (0 == __my_malloc_handler) { throw std::bad_alloc() ; }
(*__my_malloc_handler)();
__result = malloc(__n);
if (__result) return(__result);
}
}
template <int __inst>
void* __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __n)
{
void (* __my_malloc_handler)();
void* __result;
for (;;) {
__my_malloc_handler = __malloc_alloc_oom_handler;
if (0 == __my_malloc_handler) { throw std::bad_alloc() ; }
(*__my_malloc_handler)();
__result = realloc(__p, __n);
if (__result) return(__result);
}
}
typedef __malloc_alloc_template<0> malloc_alloc;
template<class _Tp, class _Alloc>
class simple_alloc {
public:
static _Tp* allocate(size_t __n)
{ return 0 == __n ? 0 : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp)); }
static _Tp* allocate(void)
{ return (_Tp*) _Alloc::allocate(sizeof (_Tp)); }
static void deallocate(_Tp* __p, size_t __n)
{ if (0 != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp)); }
static void deallocate(_Tp* __p)
{ _Alloc::deallocate(__p, sizeof (_Tp)); }
};
template <class _Alloc>
class debug_alloc {
private:
enum {_S_extra = 8};
public:
static void* allocate(size_t __n)
{
char* __result = (char*)_Alloc::allocate(__n + _S_extra);
*(size_t*)__result = __n;
return __result + _S_extra;
}
static void deallocate(void* __p, size_t __n)
{
char* __real_p = (char*)__p - _S_extra;
((void) (( *(size_t*)__real_p == __n ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h" , 234 , "*(size_t*)__real_p == __n" ), 0) )) ;
_Alloc::deallocate(__real_p, __n + _S_extra);
}
static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz)
{
char* __real_p = (char*)__p - _S_extra;
((void) (( *(size_t*)__real_p == __old_sz ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h" , 241 , "*(size_t*)__real_p == __old_sz" ), 0) )) ;
char* __result = (char*)
_Alloc::reallocate(__real_p, __old_sz + _S_extra, __new_sz + _S_extra);
*(size_t*)__result = __new_sz;
return __result + _S_extra;
}
};
template <bool threads, int inst>
class __default_alloc_template {
private:
enum {_ALIGN = 8};
enum {_MAX_BYTES = 128};
enum {_NFREELISTS = _MAX_BYTES/_ALIGN};
static size_t
_S_round_up(size_t __bytes)
{ return (((__bytes) + _ALIGN-1) & ~(_ALIGN - 1)); }
private :
union _Obj {
union _Obj* _M_free_list_link;
char _M_client_data[1];
};
private:
static _Obj* _S_free_list[_NFREELISTS];
static size_t _S_freelist_index(size_t __bytes) {
return (((__bytes) + _ALIGN-1)/_ALIGN - 1);
}
static void* _S_refill(size_t __n);
static char* _S_chunk_alloc(size_t __size, int& __nobjs);
static char* _S_start_free;
static char* _S_end_free;
static size_t _S_heap_size;
class _Lock;
friend class _Lock;
class _Lock {
public:
_Lock() { ; }
~_Lock() { ; }
};
public:
static void* allocate(size_t __n)
{
_Obj* * __my_free_list;
_Obj* __result;
if (__n > (size_t) _MAX_BYTES) {
return(malloc_alloc::allocate(__n));
}
__my_free_list = _S_free_list + _S_freelist_index(__n);
_Lock __lock_instance;
__result = *__my_free_list;
if (__result == 0) {
void* __r = _S_refill(_S_round_up(__n));
return __r;
}
*__my_free_list = __result -> _M_free_list_link;
return (__result);
};
static void deallocate(void* __p, size_t __n)
{
_Obj* __q = (_Obj*)__p;
_Obj* * __my_free_list;
if (__n > (size_t) _MAX_BYTES) {
malloc_alloc::deallocate(__p, __n);
return;
}
__my_free_list = _S_free_list + _S_freelist_index(__n);
_Lock __lock_instance;
__q -> _M_free_list_link = *__my_free_list;
*__my_free_list = __q;
}
static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz);
} ;
typedef __default_alloc_template< false , 0> alloc;
typedef __default_alloc_template<false, 0> single_client_alloc;
template <bool __threads, int __inst>
char*
__default_alloc_template<__threads, __inst>::_S_chunk_alloc(size_t __size,
int& __nobjs)
{
char* __result;
size_t __total_bytes = __size * __nobjs;
size_t __bytes_left = _S_end_free - _S_start_free;
if (__bytes_left >= __total_bytes) {
__result = _S_start_free;
_S_start_free += __total_bytes;
return(__result);
} else if (__bytes_left >= __size) {
__nobjs = (int)(__bytes_left/__size);
__total_bytes = __size * __nobjs;
__result = _S_start_free;
_S_start_free += __total_bytes;
return(__result);
} else {
size_t __bytes_to_get =
2 * __total_bytes + _S_round_up(_S_heap_size >> 4);
if (__bytes_left > 0) {
_Obj* * __my_free_list =
_S_free_list + _S_freelist_index(__bytes_left);
((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list;
*__my_free_list = (_Obj*)_S_start_free;
}
_S_start_free = (char*)malloc(__bytes_to_get);
if (0 == _S_start_free) {
size_t __i;
_Obj* * __my_free_list;
_Obj* __p;
for (__i = __size; __i <= _MAX_BYTES; __i += _ALIGN) {
__my_free_list = _S_free_list + _S_freelist_index(__i);
__p = *__my_free_list;
if (0 != __p) {
*__my_free_list = __p -> _M_free_list_link;
_S_start_free = (char*)__p;
_S_end_free = _S_start_free + __i;
return(_S_chunk_alloc(__size, __nobjs));
}
}
_S_end_free = 0;
_S_start_free = (char*)malloc_alloc::allocate(__bytes_to_get);
}
_S_heap_size += __bytes_to_get;
_S_end_free = _S_start_free + __bytes_to_get;
return(_S_chunk_alloc(__size, __nobjs));
}
}
template <bool __threads, int __inst>
void*
__default_alloc_template<__threads, __inst>::_S_refill(size_t __n)
{
int __nobjs = 20;
char* __chunk = _S_chunk_alloc(__n, __nobjs);
_Obj* * __my_free_list;
_Obj* __result;
_Obj* __current_obj;
_Obj* __next_obj;
int __i;
if (1 == __nobjs) return(__chunk);
__my_free_list = _S_free_list + _S_freelist_index(__n);
__result = (_Obj*)__chunk;
*__my_free_list = __next_obj = (_Obj*)(__chunk + __n);
for (__i = 1; ; __i++) {
__current_obj = __next_obj;
__next_obj = (_Obj*)((char*)__next_obj + __n);
if (__nobjs - 1 == __i) {
__current_obj -> _M_free_list_link = 0;
break;
} else {
__current_obj -> _M_free_list_link = __next_obj;
}
}
return(__result);
}
template <bool threads, int inst>
void*
__default_alloc_template<threads, inst>::reallocate(void* __p,
size_t __old_sz,
size_t __new_sz)
{
void* __result;
size_t __copy_sz;
if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) {
return(realloc(__p, __new_sz));
}
if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
__result = allocate(__new_sz);
__copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
memcpy(__result, __p, __copy_sz);
deallocate(__p, __old_sz);
return(__result);
}
template <bool __threads, int __inst>
char* __default_alloc_template<__threads, __inst>::_S_start_free = 0;
template <bool __threads, int __inst>
char* __default_alloc_template<__threads, __inst>::_S_end_free = 0;
template <bool __threads, int __inst>
size_t __default_alloc_template<__threads, __inst>::_S_heap_size = 0;
template <bool __threads, int __inst>
__default_alloc_template<__threads, __inst>::_Obj*
__default_alloc_template<__threads, __inst> ::_S_free_list[
__default_alloc_template<__threads, __inst>::_NFREELISTS
] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
template <class _Tp>
class allocator {
typedef alloc _Alloc;
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
typedef _Tp& reference;
typedef const _Tp& const_reference;
typedef _Tp value_type;
template <class _Tp1> struct rebind {
typedef allocator<_Tp1> other;
};
allocator() throw() {}
allocator(const allocator&) throw() {}
template <class _Tp1> allocator(const allocator<_Tp1>&) throw() {}
~allocator() throw() {}
pointer address(reference __x) const { return &__x; }
const_pointer address(const_reference __x) const { return &__x; }
_Tp* allocate(size_type __n, const void* = 0) {
return __n != 0 ? static_cast<_Tp*>(_Alloc::allocate(__n * sizeof(_Tp)))
: 0;
}
void deallocate(pointer __p, size_type __n)
{ _Alloc::deallocate(__p, __n * sizeof(_Tp)); }
size_type max_size() const throw()
{ return size_t(-1) / sizeof(_Tp); }
void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
void destroy(pointer __p) { __p->~_Tp(); }
};
template<>
class allocator<void> {
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef void* pointer;
typedef const void* const_pointer;
typedef void value_type;
template <class _Tp1> struct rebind {
typedef allocator<_Tp1> other;
};
};
template <class _T1, class _T2>
inline bool operator==(const allocator<_T1>&, const allocator<_T2>&)
{
return true;
}
template <class _T1, class _T2>
inline bool operator!=(const allocator<_T1>&, const allocator<_T2>&)
{
return false;
}
template <class _Tp, class _Alloc>
struct __allocator {
_Alloc __underlying_alloc;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
typedef _Tp& reference;
typedef const _Tp& const_reference;
typedef _Tp value_type;
template <class _Tp1> struct rebind {
typedef __allocator<_Tp1, _Alloc> other;
};
__allocator() throw() {}
__allocator(const __allocator& __a) throw()
: __underlying_alloc(__a.__underlying_alloc) {}
template <class _Tp1>
__allocator(const __allocator<_Tp1, _Alloc>& __a) throw()
: __underlying_alloc(__a.__underlying_alloc) {}
~__allocator() throw() {}
pointer address(reference __x) const { return &__x; }
const_pointer address(const_reference __x) const { return &__x; }
_Tp* allocate(size_type __n, const void* = 0) {
return __n != 0
? static_cast<_Tp*>(__underlying_alloc.allocate(__n * sizeof(_Tp)))
: 0;
}
void deallocate(pointer __p, size_type __n)
{ __underlying_alloc.deallocate(__p, __n * sizeof(_Tp)); }
size_type max_size() const throw()
{ return size_t(-1) / sizeof(_Tp); }
void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
void destroy(pointer __p) { __p->~_Tp(); }
};
template <class _Alloc>
class __allocator<void, _Alloc> {
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef void* pointer;
typedef const void* const_pointer;
typedef void value_type;
template <class _Tp1> struct rebind {
typedef __allocator<_Tp1, _Alloc> other;
};
};
template <class _Tp, class _Alloc>
inline bool operator==(const __allocator<_Tp, _Alloc>& __a1,
const __allocator<_Tp, _Alloc>& __a2)
{
return __a1.__underlying_alloc == __a2.__underlying_alloc;
}
template <class _Tp, class _Alloc>
inline bool operator!=(const __allocator<_Tp, _Alloc>& __a1,
const __allocator<_Tp, _Alloc>& __a2)
{
return __a1.__underlying_alloc != __a2.__underlying_alloc;
}
template <int inst>
inline bool operator==(const __malloc_alloc_template<inst>&,
const __malloc_alloc_template<inst>&)
{
return true;
}
template <int __inst>
inline bool operator!=(const __malloc_alloc_template<__inst>&,
const __malloc_alloc_template<__inst>&)
{
return false;
}
template <bool __threads, int __inst>
inline bool operator==(const __default_alloc_template<__threads, __inst>&,
const __default_alloc_template<__threads, __inst>&)
{
return true;
}
template <bool __threads, int __inst>
inline bool operator!=(const __default_alloc_template<__threads, __inst>&,
const __default_alloc_template<__threads, __inst>&)
{
return false;
}
template <class _Alloc>
inline bool operator==(const debug_alloc<_Alloc>&,
const debug_alloc<_Alloc>&) {
return true;
}
template <class _Alloc>
inline bool operator!=(const debug_alloc<_Alloc>&,
const debug_alloc<_Alloc>&) {
return false;
}
template <class _Tp, class _Allocator>
struct _Alloc_traits
{
static const bool _S_instanceless = false;
typedef typename _Allocator:: rebind<_Tp>::other
allocator_type;
};
template <class _Tp, class _Allocator>
const bool _Alloc_traits<_Tp, _Allocator>::_S_instanceless;
template <class _Tp, class _Tp1>
struct _Alloc_traits<_Tp, allocator<_Tp1> >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, alloc> _Alloc_type;
typedef allocator<_Tp> allocator_type;
};
template <class _Tp, int __inst>
struct _Alloc_traits<_Tp, __malloc_alloc_template<__inst> >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};
template <class _Tp, bool __threads, int __inst>
struct _Alloc_traits<_Tp, __default_alloc_template<__threads, __inst> >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, __default_alloc_template<__threads, __inst> >
_Alloc_type;
typedef __allocator<_Tp, __default_alloc_template<__threads, __inst> >
allocator_type;
};
template <class _Tp, class _Alloc>
struct _Alloc_traits<_Tp, debug_alloc<_Alloc> >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
};
template <class _Tp, class _Tp1, int __inst>
struct _Alloc_traits<_Tp,
__allocator<_Tp1, __malloc_alloc_template<__inst> > >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};
template <class _Tp, class _Tp1, bool __thr, int __inst>
struct _Alloc_traits<_Tp,
__allocator<_Tp1,
__default_alloc_template<__thr, __inst> > >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, __default_alloc_template<__thr,__inst> >
_Alloc_type;
typedef __allocator<_Tp, __default_alloc_template<__thr,__inst> >
allocator_type;
};
template <class _Tp, class _Tp1, class _Alloc>
struct _Alloc_traits<_Tp, __allocator<_Tp1, debug_alloc<_Alloc> > >
{
static const bool _S_instanceless = true;
typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
};
}
# 18 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_string_fwd.h" 2 3
namespace std {
template <class _CharT> struct char_traits;
template <class _CharT,
class _Traits = char_traits<_CharT>,
class _Alloc = allocator< _CharT > >
class basic_string;
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
static const char* __get_c_string(const string&);
}
# 42 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cwchar.h" 1 3
# 1 "/usr/include/wchar.h" 1 3 4
#pragma ident "@(#)wchar.h 1.5 96/09/11 SMI"
# 1 "/usr/include/stdio.h" 1 3 4
#pragma ident "@(#)stdio.h 1.49 97/05/09 SMI"
# 1 "/usr/include/sys/va_list.h" 1 3 4
#pragma ident "@(#)va_list.h 1.6 96/01/26 SMI"
extern "C" {
# 41 "/usr/include/sys/va_list.h" 3 4
typedef void *__va_list;
}
# 18 "/usr/include/stdio.h" 2 3 4
extern "C" {
typedef long long __longlong_t;
typedef long off_t;
typedef __longlong_t off64_t;
typedef long fpos_t;
typedef __longlong_t fpos64_t;
# 122 "/usr/include/stdio.h" 3 4
typedef struct
{
int _cnt;
unsigned char *_ptr;
unsigned char *_base;
unsigned char _flag;
unsigned char _file;
} FILE;
extern FILE __iob[20 ];
extern FILE *_lastbuf;
extern unsigned char *_bufendtab[];
extern unsigned char _sibuf[], _sobuf[];
# 222 "/usr/include/stdio.h" 3 4
extern int remove(const char *);
extern int rename(const char *, const char *);
extern FILE *tmpfile(void);
extern char *tmpnam(char *);
extern int fclose(FILE *);
extern int fflush(FILE *);
extern FILE *fopen(const char *, const char *);
extern FILE *freopen(const char *, const char *, FILE *);
extern void setbuf(FILE *, char *);
extern void setbuffer(FILE *, char *, size_t);
extern int setlinebuf(FILE *);
extern int setvbuf(FILE *, char *, int, size_t);
extern int fprintf(FILE *, const char *, ...);
extern int fscanf(FILE *, const char *, ...);
extern int printf(const char *, ...);
extern int scanf(const char *, ...);
extern int snprintf(char *, size_t, const char *, ...);
extern int sprintf(char *, const char *, ...);
extern int sscanf(const char *, const char *, ...);
extern int vfprintf(FILE *, const char *, __va_list);
extern int vprintf(const char *, __va_list);
extern int vsnprintf(char *, size_t, const char *, __va_list);
extern int vsprintf(char *, const char *, __va_list);
extern int fgetc(FILE *);
extern char *fgets(char *, int, FILE *);
extern int fputc(int, FILE *);
extern int fputs(const char *, FILE *);
extern int getc(FILE *);
extern int getchar(void);
extern char *gets(char *);
extern int putc(int, FILE *);
extern int putchar(int);
extern int puts(const char *);
extern int ungetc(int, FILE *);
extern size_t fread(void *, size_t, size_t, FILE *);
extern size_t fwrite(const void *, size_t, size_t, FILE *);
extern int fgetpos(FILE *, fpos_t *);
extern int fseek(FILE *, long, int);
extern int fsetpos(FILE *, const fpos_t *);
extern long ftell(FILE *);
extern void rewind(FILE *);
extern void clearerr(FILE *);
extern int feof(FILE *);
extern int ferror(FILE *);
extern void perror(const char *);
extern int __filbuf(FILE *);
extern int __flsbuf(int, FILE *);
extern FILE *fdopen(int, const char *);
extern char *ctermid(char *);
extern int fileno(FILE *);
# 319 "/usr/include/stdio.h" 3 4
extern FILE *popen(const char *, const char *);
extern char *cuserid(char *);
extern char *tempnam(const char *, const char *);
extern int getopt(int, char *const *, const char *);
extern int getsubopt(char **, char *const *, char **);
extern char *optarg;
extern int optind, opterr, optopt;
extern int getw(FILE *);
extern int putw(int, FILE *);
extern int pclose(FILE *);
extern int fseeko(FILE *, off_t, int);
extern off_t ftello(FILE *);
extern FILE *fopen64(const char *, const char *);
extern FILE *freopen64(const char *, const char *, FILE *);
extern FILE *tmpfile64(void);
extern int fgetpos64(FILE *, fpos64_t *);
extern int fsetpos64(FILE *, const fpos64_t *);
extern int fseeko64(FILE *, off64_t, int);
extern off64_t ftello64(FILE *);
# 467 "/usr/include/stdio.h" 3 4
# 515 "/usr/include/stdio.h" 3 4
}
# 10 "/usr/include/wchar.h" 2 3 4
# 1 "/usr/include/ctype.h" 1 3 4
#pragma ident "@(#)ctype.h 1.28 96/08/21 SMI"
extern "C" {
extern int isalnum(int);
extern int isalpha(int);
extern int iscntrl(int);
extern int isdigit(int);
extern int isgraph(int);
extern int islower(int);
extern int isprint(int);
extern int ispunct(int);
extern int isspace(int);
extern int isupper(int);
extern int isxdigit(int);
extern int tolower(int);
extern int toupper(int);
extern int isascii(int);
extern int toascii(int);
extern int _tolower(int);
extern int _toupper(int);
extern unsigned char __ctype[];
extern unsigned int *__ctype_mask;
extern long *__trans_upper;
extern long *__trans_lower;
# 96 "/usr/include/ctype.h" 3 4
# 155 "/usr/include/ctype.h" 3 4
}
# 11 "/usr/include/wchar.h" 2 3 4
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 1 3 4
# 342 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/stddef.h" 3 4
# 12 "/usr/include/wchar.h" 2 3 4
# 1 "/usr/include/time.h" 1 3 4
#pragma ident "@(#)time.h 1.25 96/03/12 SMI"
extern "C" {
typedef long clock_t;
typedef long time_t;
typedef int clockid_t;
typedef int timer_t;
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
extern clock_t clock(void);
extern double difftime(time_t, time_t);
extern time_t mktime(struct tm *);
extern time_t time(time_t *);
extern char *asctime(const struct tm *);
extern char *ctime(const time_t *);
extern struct tm *gmtime(const time_t *);
extern struct tm *localtime(const time_t *);
extern size_t strftime(char *, size_t, const char *, const struct tm *);
extern char *strptime(const char *, const char *, struct tm *);
# 1 "/usr/include/sys/time.h" 1 3 4
#pragma ident "@(#)time.h 2.52 96/11/15 SMI"
extern "C" {
struct timeval {
time_t tv_sec;
long tv_usec;
};
struct timezone {
int tz_minuteswest;
int tz_dsttime;
};
}
# 1 "/usr/include/sys/types.h" 1 3 4
#pragma ident "@(#)types.h 1.51 97/05/06 SMI"
# 1 "/usr/include/sys/machtypes.h" 1 3 4
#pragma ident "@(#)machtypes.h 1.11 96/04/29 SMI"
extern "C" {
typedef struct _physadr_t { int r[1]; } *physadr_t;
typedef struct _label_t { int val[2]; } label_t;
typedef unsigned char lock_t;
}
# 24 "/usr/include/sys/types.h" 2 3 4
# 1 "/usr/include/sys/int_types.h" 1 3 4
#pragma ident "@(#)int_types.h 1.4 96/09/25 SMI"
extern "C" {
typedef char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef long long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
typedef int64_t intmax_t;
typedef uint64_t uintmax_t;
typedef int intptr_t;
typedef unsigned int uintptr_t;
typedef char int_least8_t;
typedef short int_least16_t;
typedef int int_least32_t;
typedef long long int_least64_t;
typedef unsigned char uint_least8_t;
typedef unsigned short uint_least16_t;
typedef unsigned int uint_least32_t;
typedef unsigned long long uint_least64_t;
}
# 33 "/usr/include/sys/types.h" 2 3 4
extern "C" {
typedef long long longlong_t;
typedef unsigned long long u_longlong_t;
# 57 "/usr/include/sys/types.h" 3 4
typedef unsigned char uchar_t;
typedef unsigned short ushort_t;
typedef unsigned int uint_t;
typedef unsigned long ulong_t;
typedef char * caddr_t;
typedef long daddr_t;
typedef short cnt_t;
typedef ulong_t paddr_t;
typedef uchar_t use_t;
typedef short sysid_t;
typedef short index_t;
# 94 "/usr/include/sys/types.h" 3 4
typedef ulong_t ino_t;
typedef long blkcnt_t;
typedef ulong_t fsblkcnt_t;
typedef ulong_t fsfilcnt_t;
typedef u_longlong_t ino64_t;
typedef longlong_t blkcnt64_t;
typedef u_longlong_t fsblkcnt64_t;
typedef u_longlong_t fsfilcnt64_t;
typedef enum { B_FALSE, B_TRUE } boolean_t;
typedef int64_t pad64_t;
typedef uint64_t upad64_t;
# 139 "/usr/include/sys/types.h" 3 4
typedef longlong_t offset_t;
typedef u_longlong_t u_offset_t;
typedef u_longlong_t len_t;
typedef longlong_t diskaddr_t;
# 159 "/usr/include/sys/types.h" 3 4
typedef union {
offset_t _f;
struct {
long _u;
off_t _l;
} _p;
} lloff_t;
# 179 "/usr/include/sys/types.h" 3 4
typedef union {
diskaddr_t _f;
struct {
long _u;
daddr_t _l;
} _p;
} lldaddr_t;
typedef ulong_t k_fltset_t;
typedef long id_t;
typedef uint_t useconds_t;
typedef ulong_t major_t;
typedef ulong_t minor_t;
typedef short pri_t;
typedef ushort_t o_mode_t;
typedef short o_dev_t;
typedef ushort_t o_uid_t;
typedef o_uid_t o_gid_t;
typedef short o_nlink_t;
typedef short o_pid_t;
typedef ushort_t o_ino_t;
typedef int key_t;
typedef ulong_t mode_t;
typedef uid_t gid_t;
typedef ulong_t nlink_t;
typedef ulong_t dev_t;
typedef long pid_t;
typedef unsigned int pthread_t;
typedef unsigned int pthread_key_t;
typedef struct _pthread_mutex {
struct {
uint8_t __pthread_mutex_flag[4];
uint32_t __pthread_mutex_type;
} __pthread_mutex_flags;
union {
struct {
uint8_t __pthread_mutex_pad[8];
} __pthread_mutex_lock64;
upad64_t __pthread_mutex_owner64;
} __pthread_mutex_lock;
upad64_t __pthread_mutex_data;
} pthread_mutex_t;
typedef struct _pthread_cond {
struct {
uint8_t __pthread_cond_flag[4];
uint32_t __pthread_cond_type;
} __pthread_cond_flags;
upad64_t __pthread_cond_data;
} pthread_cond_t;
typedef struct _pthread_attr {
void *__pthread_attrp;
} pthread_attr_t;
typedef struct _pthread_mutexattr {
void *__pthread_mutexattrp;
} pthread_mutexattr_t;
typedef struct _pthread_condattr {
void *__pthread_condattrp;
} pthread_condattr_t;
typedef struct _once {
upad64_t __pthread_once_pad[4];
} pthread_once_t;
typedef int ssize_t;
typedef unsigned char unchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
# 379 "/usr/include/sys/types.h" 3 4
typedef long hostid_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef struct _quad { long val[2]; } quad;
# 1 "/usr/include/sys/select.h" 1 3 4
#pragma ident "@(#)select.h 1.11 96/06/20 SMI"
# 1 "/usr/include/sys/time.h" 1 3 4
# 414 "/usr/include/sys/time.h" 3 4
# 16 "/usr/include/sys/select.h" 2 3 4
extern "C" {
typedef long fd_mask;
typedef long fds_mask;
typedef struct fd_set {
long fds_bits[((( 1024 )+(( (sizeof (fds_mask) * 8 ) )-1))/( (sizeof (fds_mask) * 8 ) )) ];
} fd_set;
extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
}
# 418 "/usr/include/sys/types.h" 2 3 4
}
# 71 "/usr/include/sys/time.h" 2 3 4
extern "C" {
struct itimerval {
struct timeval it_interval;
struct timeval it_value;
};
typedef struct timespec {
time_t tv_sec;
long tv_nsec;
} timespec_t;
typedef struct timespec timestruc_t;
# 204 "/usr/include/sys/time.h" 3 4
typedef struct itimerspec {
struct timespec it_interval;
struct timespec it_value;
} itimerspec_t;
typedef longlong_t hrtime_t;
# 318 "/usr/include/sys/time.h" 3 4
int adjtime(struct timeval *, struct timeval *);
int getitimer(int, struct itimerval *);
int setitimer(int, struct itimerval *, struct itimerval *);
int settimeofday(struct timeval *, void *);
hrtime_t gethrtime(void);
hrtime_t gethrvtime(void);
int gettimeofday(struct timeval *, void *);
# 1 "/usr/include/time.h" 1 3 4
# 298 "/usr/include/time.h" 3 4
# 399 "/usr/include/sys/time.h" 2 3 4
}
# 93 "/usr/include/time.h" 2 3 4
# 1 "/usr/include/sys/siginfo.h" 1 3 4
#pragma ident "@(#)siginfo.h 1.39 96/06/28 SMI"
extern "C" {
union sigval {
int sival_int;
void *sival_ptr;
};
struct sigevent {
int sigev_notify;
union {
int _sigev_signo;
void (*_sigev_notify_function)(union sigval);
} _sigev_un;
union sigval sigev_value;
int _sigev_pad1;
void *_sigev_notify_attributes;
int _sigev_pad2;
};
# 1 "/usr/include/sys/machsig.h" 1 3 4
#pragma ident "@(#)machsig.h 1.12 96/04/29 SMI"
extern "C" {
}
# 88 "/usr/include/sys/siginfo.h" 2 3 4
# 181 "/usr/include/sys/siginfo.h" 3 4
typedef struct siginfo {
int si_signo;
int si_code;
int si_errno;
union {
int __pad[((128 / sizeof (int)) - 3) ];
struct {
pid_t __pid;
union {
struct {
uid_t __uid;
union sigval __value;
} __kill;
struct {
clock_t __utime;
int __status;
clock_t __stime;
} __cld;
} __pdata;
} __proc;
struct {
void *__addr;
int __trapno;
caddr_t __pc;
} __fault;
struct {
int __fd;
long __band;
} __file;
struct {
caddr_t __faddr;
timestruc_t __tstamp;
short __syscall;
char __nsysarg;
char __fault;
long __sysarg[8];
long __mstate[17];
} __prof;
} __data;
} siginfo_t;
typedef struct k_siginfo {
int si_signo;
int si_code;
int si_errno;
union {
struct {
pid_t __pid;
union {
struct {
uid_t __uid;
union sigval __value;
} __kill;
struct {
clock_t __utime;
int __status;
clock_t __stime;
} __cld;
} __pdata;
} __proc;
struct {
void *__addr;
int __trapno;
caddr_t __pc;
} __fault;
struct {
int __fd;
long __band;
} __file;
struct {
caddr_t __faddr;
timestruc_t __tstamp;
short __syscall;
char __nsysarg;
char __fault;
} __prof;
} __data;
} k_siginfo_t;
typedef struct sigqueue {
struct sigqueue *sq_next;
k_siginfo_t sq_info;
void (*sq_func)(struct sigqueue *);
void *sq_backptr;
} sigqueue_t;
}
# 94 "/usr/include/time.h" 2 3 4
extern int clock_getres(clockid_t, struct timespec *);
extern int clock_gettime(clockid_t, struct timespec *);
extern int clock_settime(clockid_t, const struct timespec *);
extern int timer_create(clockid_t, struct sigevent *, timer_t *);
extern int timer_delete(timer_t);
extern int timer_getoverrun(timer_t);
extern int timer_gettime(timer_t, struct itimerspec *);
extern int timer_settime(timer_t, int, const struct itimerspec *,
struct itimerspec *);
extern int nanosleep(const struct timespec *, struct timespec *);
extern void tzset(void);
extern char *tzname[2];
extern long timezone;
extern int daylight;
extern int cftime(char *, char *, const time_t *);
extern int ascftime(char *, const char *, const struct tm *);
extern long altzone;
extern struct tm *getdate(const char *);
extern int getdate_err;
# 183 "/usr/include/time.h" 3 4
# 292 "/usr/include/time.h" 3 4
}
# 13 "/usr/include/wchar.h" 2 3 4
extern "C" {
typedef int wctype_t;
extern int iswalpha(wint_t);
extern int iswupper(wint_t);
extern int iswlower(wint_t);
extern int iswdigit(wint_t);
extern int iswxdigit(wint_t);
extern int iswalnum(wint_t);
extern int iswspace(wint_t);
extern int iswpunct(wint_t);
extern int iswprint(wint_t);
extern int iswgraph(wint_t);
extern int iswcntrl(wint_t);
extern int iswctype(wint_t, wctype_t);
extern wint_t towlower(wint_t);
extern wint_t towupper(wint_t);
extern wint_t fgetwc(FILE *);
extern wchar_t *fgetws(wchar_t *, int, FILE *);
extern wint_t fputwc(wint_t, FILE *);
extern int fputws(const wchar_t *, FILE *);
extern wint_t ungetwc(wint_t, FILE *);
extern wint_t getwc(FILE *);
extern wint_t getwchar(void);
extern wint_t putwc(wint_t, FILE *);
extern wint_t putwchar(wint_t);
extern double wcstod(const wchar_t *, wchar_t **);
extern long wcstol(const wchar_t *, wchar_t **, int);
extern unsigned long wcstoul(const wchar_t *, wchar_t **, int);
extern wchar_t *wcscat(wchar_t *, const wchar_t *);
extern wchar_t *wcschr(const wchar_t *, wchar_t);
extern int wcscmp(const wchar_t *, const wchar_t *);
extern int wcscoll(const wchar_t *, const wchar_t *);
extern wchar_t *wcscpy(wchar_t *, const wchar_t *);
extern size_t wcscspn(const wchar_t *, const wchar_t *);
extern size_t wcslen(const wchar_t *);
extern wchar_t *wcsncat(wchar_t *, const wchar_t *, size_t);
extern int wcsncmp(const wchar_t *, const wchar_t *, size_t);
extern wchar_t *wcsncpy(wchar_t *, const wchar_t *, size_t);
extern wchar_t *wcspbrk(const wchar_t *, const wchar_t *);
extern wchar_t *wcsrchr(const wchar_t *, wchar_t);
extern size_t wcsspn(const wchar_t *, const wchar_t *);
extern wchar_t *wcstok(wchar_t *, const wchar_t *);
extern wchar_t *wcswcs(const wchar_t *, const wchar_t *);
extern int wcswidth(const wchar_t *, size_t);
extern size_t wcsxfrm(wchar_t *, const wchar_t *, size_t);
extern int wcwidth(const wchar_t);
extern size_t wcsftime(wchar_t *, size_t, const char *, const struct tm *);
extern wctype_t wctype(const char *);
# 137 "/usr/include/wchar.h" 3 4
}
# 39 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cwchar.h" 2 3
extern "C" {
int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n);
size_t wcslen (const wchar_t *__s);
wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, size_t __n);
wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n);
wchar_t *wmemcpy (wchar_t *__s1, const wchar_t *__s2, size_t __n);
wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n);
}
# 44 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_iosfwd.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 1 3 4
# 114 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 3 4
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 2 3
# 40 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_iosfwd.h" 2 3
namespace std {
template<typename _CharT> struct char_traits;
template<typename _Alloc> class allocator;
template<> class char_traits<char>;
template<> class char_traits<wchar_t>;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_ios;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_streambuf;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_istream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_ostream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_iostream;
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_stringbuf;
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_istringstream;
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_ostringstream;
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_stringstream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_filebuf;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_ifstream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_ofstream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_fstream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class istreambuf_iterator;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class ostreambuf_iterator;
class ios_base;
template<class _State> struct fpos;
typedef fpos<mbstate_t> streampos;
typedef basic_ios<char> ios;
typedef basic_streambuf<char> streambuf;
typedef basic_istream<char> istream;
typedef basic_ostream<char> ostream;
typedef basic_iostream<char> iostream;
typedef basic_stringbuf<char> stringbuf;
typedef basic_istringstream<char> istringstream;
typedef basic_ostringstream<char> ostringstream;
typedef basic_stringstream<char> stringstream;
typedef basic_filebuf<char> filebuf;
typedef basic_ifstream<char> ifstream;
typedef basic_ofstream<char> ofstream;
typedef basic_fstream<char> fstream;
typedef fpos<mbstate_t> wstreampos;
typedef basic_ios<wchar_t> wios;
typedef basic_streambuf<wchar_t> wstreambuf;
typedef basic_istream<wchar_t> wistream;
typedef basic_ostream<wchar_t> wostream;
typedef basic_iostream<wchar_t> wiostream;
typedef basic_stringbuf<wchar_t> wstringbuf;
typedef basic_istringstream<wchar_t> wistringstream;
typedef basic_ostringstream<wchar_t> wostringstream;
typedef basic_stringstream<wchar_t> wstringstream;
typedef basic_filebuf<wchar_t> wfilebuf;
typedef basic_ifstream<wchar_t> wifstream;
typedef basic_ofstream<wchar_t> wofstream;
typedef basic_fstream<wchar_t> wfstream;
}
# 45 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/fpos.h" 1 3
extern "C" {
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 1 3
# 55 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 3
# 104 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 3
struct _IO_jump_t; struct _IO_FILE;
# 174 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 3
typedef void _IO_lock_t;
struct _IO_marker {
struct _IO_marker *_next;
struct _IO_FILE *_sbuf;
int _pos;
# 207 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/../../../../../include/g++-2/libio.h" 3
};
struct _IO_FILE {
int _flags;
char* _IO_read_ptr;
char* _IO_read_end;
char* _IO_read_base;
char* _IO_write_base;
char* _IO_write_ptr;
char* _IO_write_end;
char* _IO_buf_base;
char* _IO_buf_end;
char *_IO_save_base;
char *_IO_backup_base;
char *_IO_save_end;
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno;
int _blksize;
_G_off_t _offset;
unsigned short _cur_column;
char _unused;
char _shortbuf[1];
};
struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_stdin_, _IO_stdout_, _IO_stderr_;
typedef struct
{
_G_ssize_t (*read) (struct _IO_FILE *, void *, _G_ssize_t ) ;
_G_ssize_t (*write) (struct _IO_FILE *, const void *, _G_ssize_t ) ;
_G_fpos_t (*seek) (struct _IO_FILE *, _G_off_t , int) ;
int (*close) (struct _IO_FILE *) ;
} _IO_cookie_io_functions_t;
struct _IO_cookie_file
{
struct _IO_FILE file;
const void *vtable;
void *cookie;
_IO_cookie_io_functions_t io_functions;
};
extern "C" {
extern int __underflow (_IO_FILE *) ;
extern int __uflow (_IO_FILE *) ;
extern int __overflow (_IO_FILE *, int) ;
extern int _IO_getc (_IO_FILE *__fp) ;
extern int _IO_putc (int __c, _IO_FILE *__fp) ;
extern int _IO_feof (_IO_FILE *__fp) ;
extern int _IO_ferror (_IO_FILE *__fp) ;
extern int _IO_peekc_locked (_IO_FILE *__fp) ;
extern void _IO_flockfile (_IO_FILE *) ;
extern void _IO_funlockfile (_IO_FILE *) ;
extern int _IO_ftrylockfile (_IO_FILE *) ;
extern int _IO_vfscanf (_IO_FILE *, const char *, _G_va_list , int *) ;
extern int _IO_vfprintf (_IO_FILE *, const char *, _G_va_list ) ;
extern _G_ssize_t _IO_padn (_IO_FILE *, int, _G_ssize_t ) ;
extern _G_size_t _IO_sgetn (_IO_FILE *, void *, _G_size_t ) ;
extern _G_fpos_t _IO_seekoff (_IO_FILE *, _G_off_t , int, int) ;
extern _G_fpos_t _IO_seekpos (_IO_FILE *, _G_fpos_t , int) ;
extern void _IO_free_backup_area (_IO_FILE *) ;
}
# 39 "/home/staff/nathan/solaris/local/include/g++-v3/bits/fpos.h" 2 3
}
namespace std {
typedef _G_off_t streamoff;
typedef _G_ssize_t streamsize;
typedef _G_off_t wstreamoff;
typedef _G_ssize_t wstreamsize;
template <class _StateT>
class fpos
{
public:
_StateT state () const { return _M_st; }
void state (_StateT __st) { _M_st = __st; }
fpos () { }
fpos (streamoff __pos, _StateT __st)
: _M_st(__st), _M_pos(__pos) {}
fpos (streamoff __pos)
: _M_st(), _M_pos(__pos) {}
operator streamoff&() { return _M_pos; }
fpos& operator+=(streamoff __off) { _M_pos += __off; return *this; }
fpos& operator-=(streamoff __off) { _M_pos -= __off; return *this; }
bool operator==(const fpos& __pos2) { return _M_pos == __pos2._M_pos; }
bool operator!=(const fpos& __pos2) { return _M_pos != __pos2._M_pos; }
streamoff _M_position () { return _M_pos; }
void _M_position (streamoff __pos) { _M_pos = __pos; }
private:
_StateT _M_st;
streamoff _M_pos;
};
template <class _State>
inline fpos<_State> operator+(fpos<_State> const& __pos, streamoff __off)
{ fpos<_State> t(__pos); return t += __off; }
template <class _State>
inline fpos<_State> operator-(fpos<_State> const& __pos, streamoff __off)
{ fpos<_State> t(__pos); return t -= __off; }
template <class _State>
inline streamoff operator-(fpos<_State> const& __pos1,
fpos<_State> const& __pos2)
{ return __pos1._M_position () - __pos2._M_position (); }
}
# 46 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/char_traits.h" 1 3
namespace std {
template<class _CharT>
struct char_traits
{
typedef _CharT char_type;
typedef _CharT int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2)
{ __c1 = __c2; }
static bool
eq(const char_type& __c1, const char_type& __c2)
{ return __c1 == __c2; }
static bool
lt(const char_type& __c1, const char_type& __c2)
{ return __c1 < __c2; }
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{
for (size_t __i = 01; __i < __n; ++__i)
if (!eq(__s1[__i],__s2[__i]))
return lt(__s1[__i],__s2[__i]) ? -1 : 1;
return 0;
}
static size_t
length(const char_type* __s)
{
const char_type* __p = __s;
while (*__p) ++__p;
return (__p - __s);
}
static const char_type*
find(const char_type* __s, int __n, const char_type& __a)
{
for (const char_type* __p = __s; __p < __s+__n; ++__p)
if (*__p == __a) return __p;
return 0;
}
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
{ return (char_type*) memmove (__s1, __s2, __n*sizeof (char_type)); }
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{ return (char_type*) memcpy (__s1, __s2, __n*sizeof (char_type)); }
static char_type*
assign(char_type* __s, size_t __n, char_type __a)
{
for (char_type* __p = __s; __p - __s < __n; ++__p)
assign(*__p,__a);
return __s;
}
static int_type
not_eof(const int_type& __c)
{ return eq_int_type (__c,eof ()) ? int_type(0) : __c; }
static char_type
to_char_type(const int_type& __c)
{ return char_type (__c); }
static int_type
to_int_type(const char_type& __c) { return int_type (__c); }
static bool
eq_int_type(const int_type& __c1, const int_type& __c2)
{ return __c1 == __c2; }
static state_type
get_state (pos_type __pos) { return __pos.state (); }
static int_type
eof() { return int_type (-1); }
static int_type
eos() { return int_type (); }
};
template<>
struct char_traits<char>
{
typedef char char_type;
typedef int int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2)
{ __c1 = __c2; }
static bool
eq(const char_type& __c1, const char_type& __c2)
{ return __c1 == __c2; }
static bool
lt(const char_type& __c1, const char_type& __c2)
{ return __c1 < __c2; }
static int
compare (const char_type* __s1, const char_type* __s2, size_t __n)
{ return memcmp (__s1, __s2, __n); }
static size_t
length(const char_type* __s)
{ return strlen (__s); }
static const char_type*
find(const char_type* __s, int __n, const char_type& __a)
{ return (char_traits<char>::char_type*) memchr (__s, __a, __n); }
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
{ return (char_traits<char>::char_type*) memmove (__s1, __s2, __n); }
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{ return (char_traits<char>::char_type*) memcpy (__s1, __s2, __n); }
static char_type*
assign(char_type* __s, size_t __n, char_type __a)
{ return (char_traits<char>::char_type*) memset (__s, __a, __n); }
static int_type
not_eof(const int_type& __c)
{ return (__c == (-1) ) ? 0 : __c; }
static char_type
to_char_type(const int_type& __c)
{ return char_traits<char>::char_type (__c); }
static int_type
to_int_type(const char_type& __c)
{ return char_traits<char>::int_type ((unsigned char)__c); }
static bool
eq_int_type(const int_type& __c1, const int_type& __c2)
{ return __c1 == __c2; }
static state_type
get_state(pos_type __pos) { return __pos.state (); }
static int_type
eof() { return (-1) ; }
static int_type
eos() { return '\0'; }
};
template<>
struct char_traits<wchar_t>
{
typedef wchar_t char_type;
typedef wint_t int_type;
typedef wstreamoff off_type;
typedef wstreampos pos_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2)
{ __c1 = __c2; }
static bool
eq(const char_type& __c1, const char_type& __c2)
{ return __c1 == __c2; }
static bool
lt(const char_type& __c1, const char_type& __c2)
{ return __c1 < __c2; }
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{
for (size_t __i = 01; __i < __n; ++__i)
if (!eq(__s1[__i],__s2[__i]))
return lt(__s1[__i],__s2[__i]) ? -1 : 1;
return 0;
}
static size_t
length(const char_type* __s)
{
const char_type* __p = __s;
while (*__p) ++__p;
return (__p - __s);
}
static const char_type*
find (const char_type* __s, int __n, const char_type& __a)
{
for (const char_type* __p = __s; __p < __s+__n; ++__p)
if (*__p == __a) return __p;
return 0;
}
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
{ return (char_type*) memmove (__s1, __s2, __n*sizeof (char_type)); }
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{ return (char_type*) memcpy (__s1, __s2, __n*sizeof (char_type)); }
static char_type*
assign(char_type* __s, size_t __n, char_type __a)
{
for (char_type* __p = __s; __p < __s+__n; ++__p)
assign(*__p,__a);
return __s;
}
static int_type
not_eof(const int_type& __c)
{ return eq_int_type (__c,eof ()) ? 0 : __c; }
static char_type
to_char_type(const int_type& __c) { return char_type (__c); }
static int_type
to_int_type(const char_type& __c) { return int_type (__c); }
static bool
eq_int_type(const int_type& __c1, const int_type& __c2)
{ return __c1 == __c2; }
static state_type
get_state(pos_type __pos) { return __pos.state (); }
static int_type
eof() { return int_type (-1); }
static int_type
eos() { return int_type (); }
};
template<typename _CharT, typename _Traits>
struct _Char_traits_match
{
_CharT _M_c;
_Char_traits_match(_CharT const& __c) : _M_c(__c) {}
bool
operator()(_CharT const& __a) { return _Traits::eq(_M_c,__a); }
};
}
# 47 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_memory.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algobase.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_relops.h" 1 3
namespace std { namespace rel_ops {
template <class _Tp>
inline bool operator!=(const _Tp& __x, const _Tp& __y) {
return !(__x == __y);
}
template <class _Tp>
inline bool operator>(const _Tp& __x, const _Tp& __y) {
return __y < __x;
}
template <class _Tp>
inline bool operator<=(const _Tp& __x, const _Tp& __y) {
return !(__y < __x);
}
template <class _Tp>
inline bool operator>=(const _Tp& __x, const _Tp& __y) {
return !(__x < __y);
}
} }
# 36 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_pair.h" 1 3
namespace std {
template <class _T1, class _T2>
struct pair {
typedef _T1 first_type;
typedef _T2 second_type;
_T1 first;
_T2 second;
pair() : first(_T1()), second(_T2()) {}
pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {}
template <class _U1, class _U2>
pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {}
};
template <class _T1, class _T2>
inline bool operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{
return __x.first == __y.first && __x.second == __y.second;
}
template <class _T1, class _T2>
inline bool operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{
return __x.first < __y.first ||
(!(__y.first < __x.first) && __x.second < __y.second);
}
template <class _T1, class _T2>
inline bool operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
return !(__x == __y);
}
template <class _T1, class _T2>
inline bool operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
return __y < __x;
}
template <class _T1, class _T2>
inline bool operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
return !(__y < __x);
}
template <class _T1, class _T2>
inline bool operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
return !(__x < __y);
}
template <class _T1, class _T2>
inline pair<_T1, _T2> make_pair(const _T1& __x, const _T2& __y)
{
return pair<_T1, _T2>(__x, __y);
}
}
# 37 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/type_traits.h" 1 3
template <bool _Truth> struct _Bool {};
typedef _Bool<true> __true_type;
typedef _Bool<false> __false_type;
template <class _Tp>
struct __type_traits {
typedef __true_type this_dummy_member_must_be_first;
typedef __false_type has_trivial_default_constructor;
typedef __false_type has_trivial_copy_constructor;
typedef __false_type has_trivial_assignment_operator;
typedef __false_type has_trivial_destructor;
typedef __false_type is_POD_type;
};
template<> struct __type_traits<bool> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<char> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<signed char> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<unsigned char> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<wchar_t> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<short> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<unsigned short> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<int> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<unsigned int> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<long> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<unsigned long> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
# 208 "/home/staff/nathan/solaris/local/include/g++-v3/bits/type_traits.h" 3
template<> struct __type_traits<float> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<double> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template<> struct __type_traits<long double> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
template <class _Tp>
struct __type_traits<_Tp*> {
typedef __true_type has_trivial_default_constructor;
typedef __true_type has_trivial_copy_constructor;
typedef __true_type has_trivial_assignment_operator;
typedef __true_type has_trivial_destructor;
typedef __true_type is_POD_type;
};
# 295 "/home/staff/nathan/solaris/local/include/g++-v3/bits/type_traits.h" 3
template <class _Tp> struct _Is_integer {
typedef __false_type _Integral;
};
template<> struct _Is_integer<bool> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<char> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<signed char> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<unsigned char> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<wchar_t> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<short> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<unsigned short> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<int> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<unsigned int> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<long> {
typedef __true_type _Integral;
};
template<> struct _Is_integer<unsigned long> {
typedef __true_type _Integral;
};
# 367 "/home/staff/nathan/solaris/local/include/g++-v3/bits/type_traits.h" 3
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 1 3 4
# 114 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 3 4
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 2 3
# 41 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_iostream.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ostream.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 1 3
# 46 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_iterator.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator_base.h" 1 3
namespace std {
struct input_iterator_tag {};
struct output_iterator_tag {};
struct forward_iterator_tag : public input_iterator_tag {};
struct bidirectional_iterator_tag : public forward_iterator_tag {};
struct random_access_iterator_tag : public bidirectional_iterator_tag {};
template <class _Tp, class _Distance> struct input_iterator {
typedef input_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
struct output_iterator {
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
};
template <class _Tp, class _Distance> struct forward_iterator {
typedef forward_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
template <class _Tp, class _Distance> struct bidirectional_iterator {
typedef bidirectional_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
template <class _Tp, class _Distance> struct random_access_iterator {
typedef random_access_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
template <class _Category, class _Tp, class _Distance = ptrdiff_t,
class _Pointer = _Tp*, class _Reference = _Tp&>
struct iterator {
typedef _Category iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Pointer pointer;
typedef _Reference reference;
};
template <class _Iterator>
struct iterator_traits {
typedef typename _Iterator::iterator_category iterator_category;
typedef typename _Iterator::value_type value_type;
typedef typename _Iterator::difference_type difference_type;
typedef typename _Iterator::pointer pointer;
typedef typename _Iterator::reference reference;
};
template <class _Tp>
struct iterator_traits<_Tp*> {
typedef random_access_iterator_tag iterator_category;
typedef _Tp value_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
template <class _Tp>
struct iterator_traits<const _Tp*> {
typedef random_access_iterator_tag iterator_category;
typedef _Tp value_type;
typedef ptrdiff_t difference_type;
typedef const _Tp* pointer;
typedef const _Tp& reference;
};
template <class _Iter>
inline typename iterator_traits<_Iter>::iterator_category
__iterator_category(const _Iter&)
{
typedef typename iterator_traits<_Iter>::iterator_category _Category;
return _Category();
}
template <class _Iter>
inline typename iterator_traits<_Iter>::difference_type*
__distance_type(const _Iter&)
{
return static_cast<typename iterator_traits<_Iter>::difference_type*>(0);
}
template <class _Iter>
inline typename iterator_traits<_Iter>::value_type*
__value_type(const _Iter&)
{
return static_cast<typename iterator_traits<_Iter>::value_type*>(0);
}
template <class _Iter>
inline typename iterator_traits<_Iter>::iterator_category
iterator_category(const _Iter& __i) { return __iterator_category(__i); }
template <class _Iter>
inline typename iterator_traits<_Iter>::difference_type*
distance_type(const _Iter& __i) { return __distance_type(__i); }
template <class _Iter>
inline typename iterator_traits<_Iter>::value_type*
value_type(const _Iter& __i) { return __value_type(__i); }
# 263 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator_base.h" 3
template <class _InputIterator, class _Distance>
inline void __distance(_InputIterator __first, _InputIterator __last,
_Distance& __n, input_iterator_tag)
{
while (__first != __last) { ++__first; ++__n; }
}
template <class _RandomAccessIterator, class _Distance>
inline void __distance(_RandomAccessIterator __first,
_RandomAccessIterator __last,
_Distance& __n, random_access_iterator_tag)
{
__n += __last - __first;
}
template <class _InputIterator, class _Distance>
inline void distance(_InputIterator __first,
_InputIterator __last, _Distance& __n)
{
__distance(__first, __last, __n, iterator_category(__first));
}
template <class _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
__distance(_InputIterator __first, _InputIterator __last, input_iterator_tag)
{
typename iterator_traits<_InputIterator>::difference_type __n = 0;
while (__first != __last) {
++__first; ++__n;
}
return __n;
}
template <class _RandomAccessIterator>
inline typename iterator_traits<_RandomAccessIterator>::difference_type
__distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
random_access_iterator_tag) {
return __last - __first;
}
template <class _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
distance(_InputIterator __first, _InputIterator __last) {
typedef typename iterator_traits<_InputIterator>::iterator_category
_Category;
return __distance(__first, __last, _Category());
}
template <class _InputIter, class _Distance>
inline void __advance(_InputIter& __i, _Distance __n, input_iterator_tag) {
while (__n--) ++__i;
}
template <class _BidirectionalIterator, class _Distance>
inline void __advance(_BidirectionalIterator& __i, _Distance __n,
bidirectional_iterator_tag) {
if (__n >= 0)
while (__n--) ++__i;
else
while (__n++) --__i;
}
template <class _RandomAccessIterator, class _Distance>
inline void __advance(_RandomAccessIterator& __i, _Distance __n,
random_access_iterator_tag) {
__i += __n;
}
template <class _InputIterator, class _Distance>
inline void advance(_InputIterator& __i, _Distance __n) {
__advance(__i, __n, iterator_category(__i));
}
}
# 34 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_iterator.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator.h" 1 3
namespace std {
template <class _Container>
class back_insert_iterator {
protected:
_Container* container;
public:
typedef _Container container_type;
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
explicit back_insert_iterator(_Container& __x) : container(&__x) {}
back_insert_iterator<_Container>&
operator=(const typename _Container::value_type& __value) {
container->push_back(__value);
return *this;
}
back_insert_iterator<_Container>& operator*() { return *this; }
back_insert_iterator<_Container>& operator++() { return *this; }
back_insert_iterator<_Container>& operator++(int) { return *this; }
};
# 69 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator.h" 3
template <class _Container>
inline back_insert_iterator<_Container> back_inserter(_Container& __x) {
return back_insert_iterator<_Container>(__x);
}
template <class _Container>
class front_insert_iterator {
protected:
_Container* container;
public:
typedef _Container container_type;
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
explicit front_insert_iterator(_Container& __x) : container(&__x) {}
front_insert_iterator<_Container>&
operator=(const typename _Container::value_type& __value) {
container->push_front(__value);
return *this;
}
front_insert_iterator<_Container>& operator*() { return *this; }
front_insert_iterator<_Container>& operator++() { return *this; }
front_insert_iterator<_Container>& operator++(int) { return *this; }
};
# 108 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator.h" 3
template <class _Container>
inline front_insert_iterator<_Container> front_inserter(_Container& __x) {
return front_insert_iterator<_Container>(__x);
}
template <class _Container>
class insert_iterator {
protected:
_Container* container;
typename _Container::iterator iter;
public:
typedef _Container container_type;
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
insert_iterator(_Container& __x, typename _Container::iterator __i)
: container(&__x), iter(__i) {}
insert_iterator<_Container>&
operator=(const typename _Container::value_type& __value) {
iter = container->insert(iter, __value);
++iter;
return *this;
}
insert_iterator<_Container>& operator*() { return *this; }
insert_iterator<_Container>& operator++() { return *this; }
insert_iterator<_Container>& operator++(int) { return *this; }
};
# 150 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator.h" 3
template <class _Container, class _Iterator>
inline
insert_iterator<_Container> inserter(_Container& __x, _Iterator __i)
{
typedef typename _Container::iterator __iter;
return insert_iterator<_Container>(__x, __iter(__i));
}
template <class _BidirectionalIterator, class _Tp, class _Reference = _Tp&,
class _Distance = ptrdiff_t>
class reverse_bidirectional_iterator {
typedef reverse_bidirectional_iterator<_BidirectionalIterator, _Tp,
_Reference, _Distance> _Self;
protected:
_BidirectionalIterator current;
public:
typedef bidirectional_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Tp* pointer;
typedef _Reference reference;
reverse_bidirectional_iterator() {}
explicit reverse_bidirectional_iterator(_BidirectionalIterator __x)
: current(__x) {}
_BidirectionalIterator base() const { return current; }
_Reference operator*() const {
_BidirectionalIterator __tmp = current;
return *--__tmp;
}
pointer operator->() const { return &(operator*()); }
_Self& operator++() {
--current;
return *this;
}
_Self operator++(int) {
_Self __tmp = *this;
--current;
return __tmp;
}
_Self& operator--() {
++current;
return *this;
}
_Self operator--(int) {
_Self __tmp = *this;
++current;
return __tmp;
}
};
# 241 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator.h" 3
template <class _BiIter, class _Tp, class _Ref, class _Distance>
inline bool operator==(
const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __x,
const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __y)
{
return __x.base() == __y.base();
}
template <class _BiIter, class _Tp, class _Ref, class _Distance>
inline bool operator!=(
const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __x,
const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __y)
{
return !(__x == __y);
}
template <class _Iterator>
class reverse_iterator
{
protected:
_Iterator current;
public:
typedef typename iterator_traits<_Iterator>::iterator_category
iterator_category;
typedef typename iterator_traits<_Iterator>::value_type
value_type;
typedef typename iterator_traits<_Iterator>::difference_type
difference_type;
typedef typename iterator_traits<_Iterator>::pointer
pointer;
typedef typename iterator_traits<_Iterator>::reference
reference;
typedef _Iterator iterator_type;
typedef reverse_iterator<_Iterator> _Self;
public:
reverse_iterator() {}
explicit reverse_iterator(iterator_type __x) : current(__x) {}
reverse_iterator(const _Self& __x) : current(__x.current) {}
template <class _Iter>
reverse_iterator(const reverse_iterator<_Iter>& __x)
: current(__x.base()) {}
iterator_type base() const { return current; }
reference operator*() const {
_Iterator __tmp = current;
return *--__tmp;
}
pointer operator->() const { return &(operator*()); }
_Self& operator++() {
--current;
return *this;
}
_Self operator++(int) {
_Self __tmp = *this;
--current;
return __tmp;
}
_Self& operator--() {
++current;
return *this;
}
_Self operator--(int) {
_Self __tmp = *this;
++current;
return __tmp;
}
_Self operator+(difference_type __n) const {
return _Self(current - __n);
}
_Self& operator+=(difference_type __n) {
current -= __n;
return *this;
}
_Self operator-(difference_type __n) const {
return _Self(current + __n);
}
_Self& operator-=(difference_type __n) {
current += __n;
return *this;
}
reference operator[](difference_type __n) const { return *(*this + __n); }
};
template <class _Iterator>
inline bool operator==(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return __x.base() == __y.base();
}
template <class _Iterator>
inline bool operator<(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return __y.base() < __x.base();
}
template <class _Iterator>
inline bool operator!=(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return !(__x == __y);
}
template <class _Iterator>
inline bool operator>(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return __y < __x;
}
template <class _Iterator>
inline bool operator<=(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return !(__y < __x);
}
template <class _Iterator>
inline bool operator>=(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return !(__x < __y);
}
template <class _Iterator>
inline typename reverse_iterator<_Iterator>::difference_type
operator-(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y) {
return __y.base() - __x.base();
}
template <class _Iterator>
inline reverse_iterator<_Iterator>
operator+(typename reverse_iterator<_Iterator>::difference_type __n,
const reverse_iterator<_Iterator>& __x) {
return reverse_iterator<_Iterator>(__x.base() - __n);
}
# 580 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator.h" 3
# 840 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator.h" 3
template <class _Tp, class _Dist = ptrdiff_t> class istream_iterator;
template <class _Tp, class _Dist>
inline bool operator==(const istream_iterator<_Tp, _Dist>&,
const istream_iterator<_Tp, _Dist>&);
template <class _Tp, class _Dist>
class istream_iterator {
friend bool operator== <> (const istream_iterator&,
const istream_iterator&);
protected:
istream* _M_stream;
_Tp _M_value;
bool _M_end_marker;
void _M_read() {
_M_end_marker = (*_M_stream) ? true : false;
if (_M_end_marker) *_M_stream >> _M_value;
_M_end_marker = (*_M_stream) ? true : false;
}
public:
typedef input_iterator_tag iterator_category;
typedef _Tp value_type;
typedef _Dist difference_type;
typedef const _Tp* pointer;
typedef const _Tp& reference;
istream_iterator() : _M_stream(&cin), _M_end_marker(false) {}
istream_iterator(istream& __s) : _M_stream(&__s) { _M_read(); }
reference operator*() const { return _M_value; }
pointer operator->() const { return &(operator*()); }
istream_iterator<_Tp, _Dist>& operator++() {
_M_read();
return *this;
}
istream_iterator<_Tp, _Dist> operator++(int) {
istream_iterator<_Tp, _Dist> __tmp = *this;
_M_read();
return __tmp;
}
};
# 902 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator.h" 3
template <class _Tp, class _Distance>
inline bool operator==(const istream_iterator<_Tp, _Distance>& __x,
const istream_iterator<_Tp, _Distance>& __y) {
return (__x._M_stream == __y._M_stream &&
__x._M_end_marker == __y._M_end_marker) ||
__x._M_end_marker == false && __y._M_end_marker == false;
}
template <class _Tp, class _Distance>
inline bool operator!=(const istream_iterator<_Tp, _Distance>& __x,
const istream_iterator<_Tp, _Distance>& __y) {
return !(__x == __y);
}
template <class _Tp>
class ostream_iterator {
protected:
ostream* _M_stream;
const char* _M_string;
public:
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
ostream_iterator(ostream& __s) : _M_stream(&__s), _M_string(0) {}
ostream_iterator(ostream& __s, const char* __c)
: _M_stream(&__s), _M_string(__c) {}
ostream_iterator<_Tp>& operator=(const _Tp& __value) {
*_M_stream << __value;
if (_M_string) *_M_stream << _M_string;
return *this;
}
ostream_iterator<_Tp>& operator*() { return *this; }
ostream_iterator<_Tp>& operator++() { return *this; }
ostream_iterator<_Tp>& operator++(int) { return *this; }
};
# 955 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_iterator.h" 3
template<typename _Iterator, typename _Container>
class __normal_iterator
: public iterator<iterator_traits<_Iterator>::iterator_category,
iterator_traits<_Iterator>::value_type,
iterator_traits<_Iterator>::difference_type,
iterator_traits<_Iterator>::pointer,
iterator_traits<_Iterator>::reference>
{
public:
typedef __normal_iterator<_Iterator, _Container> normal_iterator_type;
inline __normal_iterator() : _M_current() { }
inline explicit __normal_iterator(const _Iterator& __i)
: _M_current(__i) { }
template<typename _Iter>
inline __normal_iterator(const __normal_iterator<_Iter, _Container>& __i)
: _M_current(__i.base()) { }
inline reference
operator*() const
{ return *_M_current; }
inline pointer
operator->() const
{ return _M_current; }
inline normal_iterator_type&
operator++()
{ ++_M_current; return *this; }
inline normal_iterator_type
operator++(int)
{ return __normal_iterator(_M_current++); }
inline normal_iterator_type&
operator--()
{ --_M_current; return *this; }
inline normal_iterator_type
operator--(int)
{ return __normal_iterator(_M_current--); }
inline reference
operator[](const difference_type& __n) const
{ return _M_current[__n]; }
inline normal_iterator_type&
operator+=(const difference_type& __n)
{ _M_current += __n; return *this; }
inline normal_iterator_type
operator+(const difference_type& __n) const
{ return __normal_iterator(_M_current + __n); }
inline normal_iterator_type&
operator-=(const difference_type& __n)
{ _M_current -= __n; return *this; }
inline normal_iterator_type
operator-(const difference_type& __n) const
{ return __normal_iterator(_M_current - __n); }
inline difference_type
operator-(const normal_iterator_type& __i) const
{ return _M_current - __i._M_current; }
const _Iterator& base() const
{ return _M_current; }
protected:
_Iterator _M_current;
};
template<typename _IteratorL, typename _IteratorR, typename _Container>
bool operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
{ return __lhs.base() == __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
bool operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
{ return !(__lhs == __rhs); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
bool operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
{ return __lhs.base() < __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
bool operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
{ return __rhs < __lhs; }
template<typename _IteratorL, typename _IteratorR, typename _Container>
bool operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
{ return !(__rhs < __lhs); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
bool operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
{ return !(__lhs < __rhs); }
template<typename _Iterator, typename _Container>
inline __normal_iterator<_Iterator, _Container>
operator+(__normal_iterator<_Iterator, _Container>::difference_type __n,
const __normal_iterator<_Iterator, _Container>& __i)
{ return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
}
# 35 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_iterator.h" 2 3
# 53 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 1 3 4
# 114 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 3 4
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 2 3
# 54 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/basic_string.h" 1 3
namespace std {
template<class _CharT, class _Traits, class _Alloc>
class basic_string
{
public:
typedef _Traits traits_type;
typedef typename _Traits::char_type value_type;
typedef _Alloc allocator_type;
typedef typename _Alloc::size_type size_type;
typedef typename _Alloc::difference_type difference_type;
typedef typename _Alloc::reference reference;
typedef typename _Alloc::const_reference const_reference;
typedef typename _Alloc::pointer pointer;
typedef typename _Alloc::const_pointer const_pointer;
typedef basic_string<_CharT, _Traits, _Alloc> string_type;
typedef __normal_iterator<pointer, string_type> iterator;
typedef __normal_iterator<const_pointer, string_type> const_iterator;
typedef reverse_iterator<const_iterator> const_reverse_iterator;
typedef reverse_iterator<iterator> reverse_iterator;
static const size_type npos = ~(size_type)0;
private:
struct _Rep
{
size_type _M_length;
size_type _M_capacity;
int _M_state;
_CharT* _M_data () throw ()
{ return reinterpret_cast<_CharT*> (this + 1); }
_CharT& operator[] (size_t __s) throw ()
{ return _M_data () [__s]; }
_CharT* _M_grab (const _Alloc& __alloc1, const _Alloc& __alloc2)
{ return (_M_state >= 0 && __alloc1 == __alloc2) ?
_M_refcopy () : _M_clone (__alloc1); }
static const size_type _S_max_size = (npos / sizeof(_CharT)) - 2;
typedef typename _Alloc::rebind<char>::other _Raw_bytes_alloc;
static _Rep* _S_create (size_t, const _Alloc&);
void _M_dispose (const _Alloc& __a)
{ if (_M_state-- <= 0) _M_destroy (__a); }
void _M_destroy (const _Alloc&) throw ();
_CharT* _M_refcopy () throw ()
{ ++_M_state; return _M_data (); }
_CharT* _M_clone (const _Alloc&);
# 121 "/home/staff/nathan/solaris/local/include/g++-v3/bits/basic_string.h" 3
inline static bool _S_excess_slop (size_t, size_t);
inline static size_t _S_frob_size (size_t);
};
struct _Alloc_hider : _Alloc
{
_Alloc_hider(_CharT* __dat, const _Alloc& __a)
: _Alloc(__a), _M_p(__dat) {}
_CharT* _M_p;
};
mutable _Alloc_hider _M_dataplus;
_CharT* _M_data () const { return _M_dataplus._M_p; }
_CharT* _M_data (_CharT* __p) { return (_M_dataplus._M_p = __p); }
_Rep* _M_rep () const
{ return &((reinterpret_cast<_Rep*> (_M_data ()))[-1]); }
iterator _M_ibegin () const { return iterator (_M_data ()); }
iterator _M_iend () const { return iterator (_M_data () + this->size ()); }
void _M_leak ()
{ if (_M_rep ()->_M_state >= 0) _M_leak_hard(); }
iterator _M_check (size_type __pos) const
{ do { if ( __pos > this->size () ) __out_of_range ("__pos > this->size ()"); } while (0) ; return _M_ibegin () + __pos; }
iterator _M_fold (size_type __pos, size_type __off) const
{ return (__pos <= this->size () && this->npos - __off > __pos) ?
_M_ibegin () + __pos + __off : _M_ibegin () + this->size(); }
template <class _Iterator>
static void
_S_copy_chars(_CharT* __p, _Iterator __j1, _Iterator __j2)
{
for (; __j1 != __j2; ++__j1, ++__p)
_Traits::assign (*__p, *__j1);
}
static void
_S_copy_chars(_CharT* __p, const _CharT* __j1, const _CharT* __j2)
{ _Traits::copy (__p, __j1, __j2-__j1); }
void _M_mutate (size_type __nsize, size_type __keep, size_type __keep_end);
void _M_leak_hard ();
static size_type _S_empty_rep_storage[
(sizeof(_Rep)+sizeof(_CharT)+sizeof(size_type)-1)/sizeof(size_type)];
static _Rep& _S_empty_rep ()
{ return *reinterpret_cast<_Rep*> (&_S_empty_rep_storage); }
public:
inline basic_string ();
explicit basic_string (const _Alloc& __a);
basic_string (const basic_string& __str);
basic_string (const basic_string& __str, size_type __pos,
size_type __n = npos);
basic_string (const basic_string& __str, size_type __pos,
size_type __n, const _Alloc& __a);
basic_string (const _CharT* __s, size_type __n,
const _Alloc& __a = _Alloc ());
basic_string (const _CharT* __s, const _Alloc& __a = _Alloc ());
basic_string (size_type __n, _CharT __c, const _Alloc& __a = _Alloc ());
template<class _InputIterator>
basic_string (_InputIterator __begin, _InputIterator __end,
const _Alloc& __a = _Alloc ());
~basic_string () { _M_rep ()->_M_dispose (get_allocator ()); }
basic_string& operator= (const basic_string& __str)
{ return assign (__str); }
basic_string& operator= (const _CharT* __s)
{ return assign (__s); }
basic_string& operator= (_CharT __c)
{ return assign (1, __c); }
iterator begin () { _M_leak (); return iterator (&this->operator[](0)); }
const_iterator begin () const { return const_iterator (&(*_M_rep ())[0]); }
iterator end ()
{
_M_leak ();
return iterator (&(this->operator[](length ())));
}
const_iterator end () const
{ return const_iterator (&(*_M_rep ())[length ()]); }
reverse_iterator rbegin ()
{ return reverse_iterator (end ()); }
const_reverse_iterator rbegin () const
{ return const_reverse_iterator (end ()); }
reverse_iterator rend ()
{ return reverse_iterator (begin ()); }
const_reverse_iterator rend () const
{ return const_reverse_iterator (begin ()); }
public:
size_type size () const
{ return _M_rep ()->_M_length; }
size_type length () const
{ return _M_rep ()->_M_length; }
size_type max_size () const
{ return _Rep::_S_max_size; }
void resize (size_type __n, _CharT __c);
void resize (size_type __n)
{ this->resize (__n, _CharT()); }
size_type capacity () const
{ return _M_rep ()->_M_capacity; }
void reserve (size_type __res_arg = 0);
void clear ()
{ _M_mutate (0, 0, 0); }
bool empty () const
{ return this->size () == 0; }
const_reference operator[] (size_type __pos) const
{ return _M_data ()[__pos]; }
reference operator[] (size_type __pos)
{ _M_leak (); return _M_data ()[__pos]; }
const_reference at (size_type __n) const
{
do { if ( __n >= size () ) __out_of_range ("__n >= size ()"); } while (0) ;
return _M_data ()[__n];
}
reference at (size_type __n)
{
do { if ( __n >= size () ) __out_of_range ("__n >= size ()"); } while (0) ;
return this->operator[](__n);
}
basic_string& operator += (const basic_string& __str)
{ return append (__str); }
basic_string& operator += (const _CharT* __s)
{ return append (__s); }
basic_string& operator += (_CharT __c)
{ return append (size_type(1), __c); }
basic_string& append (const basic_string& __str)
{ return this->replace (_M_iend(), _M_iend(),
__str.begin (), __str.end ()); }
basic_string& append (const basic_string& __str, size_type __pos,
size_type __n)
{ return this->replace (_M_iend (), _M_iend (), __str._M_check (__pos),
__str._M_fold(__pos, __n)); }
basic_string& append (const _CharT* __s, size_type __n)
{ return this->replace (_M_iend (), _M_iend (), __s, __s+__n); }
basic_string& append (const _CharT* __s)
{ return this->append (__s, _Traits::length (__s)); }
basic_string& append (size_type __n, _CharT __c)
{ return this->replace (_M_iend (), _M_iend (), __n, __c); }
template<class _InputIterator>
basic_string& append (_InputIterator __first, _InputIterator __last)
{ return this->replace (_M_iend (), _M_iend (), __first, __last); }
void push_back(_CharT __c)
{ this->replace(_M_iend(), _M_iend(), 1, __c); }
basic_string& assign (const basic_string& __str);
basic_string& assign (const basic_string& __str,
size_type __pos, size_type __n)
{ return this->assign (__str._M_check (__pos),
__str._M_fold (__pos, __n)); }
basic_string& assign (const _CharT* __s, size_type __n)
{ return this->assign (__s, __s+__n); }
basic_string& assign (const _CharT* __s)
{ return this->assign (__s, __s+_Traits::length (__s)); }
basic_string& assign (size_type __n, _CharT __c)
{ return this->replace (_M_ibegin (), _M_iend (), __n, __c); }
template<class _InputIterator>
basic_string& assign (_InputIterator __first, _InputIterator __last)
{ return this->replace (_M_ibegin (), _M_iend (), __first, __last); }
basic_string& insert (size_type __pos1, const basic_string& __str)
{ this->insert (_M_check (__pos1), __str.begin (), __str.end ());
return *this; }
basic_string& insert (size_type __pos1, const basic_string& __str,
size_type __pos2, size_type __n)
{ this->insert (_M_check (__pos1), __str._M_check (__pos2),
__str._M_fold (__pos2, __n));
return *this; }
basic_string& insert (size_type __pos, const _CharT* __s, size_type __n)
{
this->insert (_M_check (__pos), __s, __s + __n);
return *this;
}
basic_string& insert (size_type __pos, const _CharT* __s)
{ return this->insert (__pos, __s, _Traits::length (__s)); }
basic_string& insert (size_type __pos, size_type __n, _CharT __c)
{
this->insert (_M_check (__pos), __n, __c);
return *this;
}
iterator insert (iterator __p, _CharT __c = _CharT ())
{
size_type __pos = __p - _M_ibegin ();
this->insert (__pos, size_type(1), __c);
return this->_M_ibegin () + __pos;
}
void insert (iterator __p, size_type __n, _CharT __c)
{ this->replace (__p, __p, __n, __c); }
template<class _InputIterator>
void insert (iterator __p, _InputIterator __first, _InputIterator __last)
{ this->replace (__p, __p, __first, __last); }
basic_string& erase (size_type __pos = 0, size_type __n = npos)
{ return this->replace (_M_check(__pos), _M_fold (__pos, __n),
_M_data (), _M_data ()); }
iterator erase (iterator __position)
{
size_type __i = __position - _M_ibegin ();
this->replace (__position, __position + 1, _M_data (), _M_data ());
return _M_ibegin () + __i;
}
iterator erase (iterator __first, iterator __last)
{
size_type __i = __first - _M_ibegin ();
this->replace (__first, __last, _M_data (), _M_data ());
return _M_ibegin () + __i;
}
basic_string& replace (size_type __pos, size_type __n,
const basic_string& __str)
{ return this->replace (_M_check (__pos), _M_fold (__pos, __n),
__str.begin (), __str.end ()); }
basic_string& replace (size_type __pos1, size_type __n1,
const basic_string& __str,
size_type __pos2, size_type __n2);
basic_string& replace (size_type __pos, size_type __n1, const _CharT* __s,
size_type __n2)
{ return this->replace(_M_check (__pos), _M_fold (__pos, __n1),
__s, __s+__n2); }
basic_string& replace (size_type __pos, size_type __n1, const _CharT* __s)
{ return this->replace (_M_check (__pos), _M_fold (__pos, __n1),
__s, __s+_Traits::length (__s)); }
basic_string& replace (size_type __pos, size_type __n1,
size_type __n2, _CharT __c)
{ return this->replace (_M_check (__pos), _M_fold (__pos, __n1),
__n2, __c); }
basic_string& replace (iterator __i1,
iterator __i2, const basic_string& __str)
{ return this->replace (__i1, __i2, __str.begin (), __str.end ()); }
basic_string& replace (iterator __i1, iterator __i2,
const _CharT* __s, size_type __n)
{ return this->replace (__i1, __i2, __s, __s + __n); }
basic_string& replace (iterator __i1, iterator __i2, const _CharT* __s)
{ return this->replace (__i1, __i2, __s, __s + _Traits::length(__s)); }
basic_string& replace (iterator __i1, iterator __i2,
size_type __n, _CharT __c);
template<class _InputIterator>
basic_string& replace (iterator __i1, iterator __i2,
_InputIterator __j1, _InputIterator __j2)
{ return _M_replace(__i1, __i2, __j1, __j2,
typename iterator_traits<_InputIterator>::iterator_category ()); }
private:
template<class _InputIterator>
basic_string& _M_replace (iterator __i1, iterator __i2,
_InputIterator __j1, _InputIterator __j2,
input_iterator_tag);
template<class _FwdIterator>
basic_string& _M_replace (iterator __i1, iterator __i2,
_FwdIterator __j1, _FwdIterator __j2,
forward_iterator_tag);
template <class _InIter>
static _CharT*
_S_construct (_InIter __first, _InIter __last, const _Alloc& __a)
{ typedef typename iterator_traits<_InIter>::iterator_category _Tag;
return _S_construct (__first, __last, __a, _Tag ()); }
template <class _InIter>
static _CharT*
_S_construct (_InIter __first, _InIter __last, const _Alloc& __a,
input_iterator_tag);
template <class _FwdIter>
static _CharT*
_S_construct (_FwdIter __first, _FwdIter __last, const _Alloc& __a,
forward_iterator_tag);
static _CharT* _S_construct (size_type __n, _CharT __c, const _Alloc& __a);
public:
size_type copy (_CharT* __s, size_type __n, size_type __pos = 0) const;
void swap (basic_string<_CharT,_Traits,_Alloc>& __s);
const _CharT* c_str () const
{
_Traits::assign (_M_data ()[this->length ()], _CharT());
return this->data ();
}
const _CharT* data () const
{ return _M_data(); }
allocator_type get_allocator () const
{ return _M_dataplus; }
size_type find (const basic_string& __str, size_type __pos = 0) const
{ return find (__str.data (), __pos, __str.length ()); }
size_type find (const _CharT* __s, size_type __pos, size_type __n) const;
size_type find (const _CharT* __s, size_type __pos = 0) const
{ return find (__s, __pos, _Traits::length (__s)); }
size_type find (_CharT __c, size_type __pos = 0) const;
size_type rfind (const basic_string& __str, size_type __pos = npos) const
{ return rfind (__str.data (), __pos, __str.length ()); }
size_type rfind (const _CharT* __s, size_type __pos, size_type __n) const;
size_type rfind (const _CharT* __s, size_type __pos = npos) const
{ return rfind (__s, __pos, _Traits::length (__s)); }
size_type rfind (_CharT __c, size_type __pos = npos) const;
size_type find_first_of (const basic_string& __str,
size_type __pos = 0) const
{ return find_first_of (__str.data (), __pos, __str.length ()); }
size_type find_first_of (const _CharT* __s, size_type __pos,
size_type __n) const;
size_type find_first_of (const _CharT* __s, size_type __pos = 0) const
{ return find_first_of (__s, __pos, _Traits::length (__s)); }
size_type find_first_of (_CharT __c, size_type __pos = 0) const
{ return find (__c, __pos); }
size_type find_last_of (const basic_string& __str,
size_type __pos = npos) const
{ return find_last_of (__str.data (), __pos, __str.length ()); }
size_type find_last_of (const _CharT* __s, size_type __pos,
size_type __n) const;
size_type find_last_of (const _CharT* __s, size_type __pos = npos) const
{ return find_last_of (__s, __pos, _Traits::length (__s)); }
size_type find_last_of (_CharT __c, size_type __pos = npos) const
{ return rfind (__c, __pos); }
size_type find_first_not_of (const basic_string& __str,
size_type __pos = 0) const
{ return find_first_not_of (__str.data (), __pos, __str.length ()); }
size_type find_first_not_of (const _CharT* __s, size_type __pos,
size_type __n) const;
size_type find_first_not_of (const _CharT* __s, size_type __pos = 0) const
{ return find_first_not_of (__s, __pos, _Traits::length (__s)); }
size_type find_first_not_of (_CharT __c, size_type __pos = 0) const;
size_type find_last_not_of (const basic_string& __str,
size_type __pos = npos) const
{ return find_last_not_of (__str.data (), __pos, __str.length ()); }
size_type find_last_not_of (const _CharT* __s, size_type __pos,
size_type __n) const;
size_type find_last_not_of (const _CharT* __s, size_type __pos = npos) const
{ return find_last_not_of (__s, __pos, _Traits::length (__s)); }
size_type find_last_not_of (_CharT __c, size_type __pos = npos) const;
basic_string substr (size_type __pos = 0, size_type __n = npos) const
{ return basic_string (*this, __pos, __n); }
int compare (const basic_string& __str) const;
int compare (size_type __pos1, size_type __n1,
const basic_string& __str) const;
int compare (size_type __pos1, size_type __n1, const basic_string& __str,
size_type __pos2, size_type __n2) const;
int compare (const _CharT* __s) const;
int compare (size_type __pos, size_type __n1,
const _CharT* __s, size_type __n2 = npos) const;
private:
static const _CharT* _S_find (const _CharT* __ptr1,
const _CharT* __ptr2, _CharT __c);
};
template<class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>::
basic_string ()
: _M_dataplus (_S_empty_rep ()._M_refcopy (), _Alloc()) {}
template<class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+ (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
basic_string <_CharT,_Traits,_Alloc> __str (__lhs);
__str.append (__rhs);
return __str;
}
template<class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+ (const _CharT* __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
basic_string <_CharT,_Traits,_Alloc> __str (__lhs);
__str.append (__rhs);
return __str;
}
template<class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+ (_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
basic_string <_CharT,_Traits,_Alloc> __str (1, __lhs);
__str.append (__rhs);
return __str;
}
template<class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+ (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const _CharT* __rhs)
{
basic_string <_CharT,_Traits,_Alloc> __str (__lhs);
__str.append (__rhs);
return __str;
}
template<class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+ (const basic_string<_CharT,_Traits,_Alloc>& __lhs, _CharT __rhs)
{
basic_string <_CharT,_Traits,_Alloc> __str (__lhs);
__str.append (basic_string<_CharT,_Traits,_Alloc>::size_type(1), __rhs);
return __str;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator== (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __lhs.compare (__rhs) == 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator== (const _CharT* __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __rhs.compare (__lhs) == 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator== (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const _CharT* __rhs)
{
return __lhs.compare (__rhs) == 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator!= (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __rhs.compare (__lhs) != 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator!= (const _CharT* __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __rhs.compare (__lhs) != 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator!= (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const _CharT* __rhs)
{
return __lhs.compare (__rhs) != 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator< (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __lhs.compare (__rhs) < 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator< (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const _CharT* __rhs)
{
return __lhs.compare (__rhs) < 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator< (const _CharT* __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __rhs.compare (__lhs) > 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator> (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __lhs.compare (__rhs) > 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator> (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const _CharT* __rhs)
{
return __lhs.compare (__rhs) > 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator> (const _CharT* __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __rhs.compare (__lhs) < 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator<= (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __lhs.compare (__rhs) <= 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator<= (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const _CharT* __rhs)
{
return __lhs.compare (__rhs) <= 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator<= (const _CharT* __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __rhs.compare (__lhs) >= 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator>= (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __lhs.compare (__rhs) >= 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator>= (const basic_string<_CharT,_Traits,_Alloc>& __lhs,
const _CharT* __rhs)
{
return __lhs.compare (__rhs) >= 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline bool
operator>= (const _CharT* __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
return __rhs.compare (__lhs) <= 0;
}
template<class _CharT, class _Traits, class _Alloc>
inline void
swap (basic_string<_CharT,_Traits,_Alloc>& __lhs,
basic_string<_CharT,_Traits,_Alloc>& __rhs)
{
__lhs.swap (__rhs);
}
template<class _CharT, class _Traits, class _Alloc>
basic_istream<_CharT, _Traits>&
operator>> (basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT,_Traits,_Alloc>& __str);
template<class _CharT, class _Traits, class _Alloc>
basic_ostream<_CharT, _Traits>&
operator<< (basic_ostream<_CharT, _Traits>& __os,
const basic_string<_CharT,_Traits,_Alloc>& __str);
template<class _CharT, class _Traits, class _Alloc>
basic_istream<_CharT,_Traits>&
getline (basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT,_Traits,_Alloc>& __str, _CharT __delim);
template<class _CharT, class _Traits, class _Alloc>
inline basic_istream<_CharT,_Traits>&
getline (basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT,_Traits,_Alloc>& __str)
{
return getline (__is, __str, __is.widen ('\n'));
}
static const char*
__get_c_string(const string& __s) { return __s.c_str(); }
}
# 60 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_stdexcept.h" 1 3
namespace std {
class __Named_exception : public exception {
public:
__Named_exception(const string& __str) {
strncpy(_M_name, __get_c_string(__str), _S_bufsize);
_M_name[_S_bufsize - 1] = '\0';
}
virtual const char* what() const throw() { return _M_name; }
private:
enum { _S_bufsize = 256 };
char _M_name[_S_bufsize];
};
class logic_error : public __Named_exception {
public:
logic_error(const string& __s) : __Named_exception(__s) {}
};
class runtime_error : public __Named_exception {
public:
runtime_error(const string& __s) : __Named_exception(__s) {}
};
class domain_error : public logic_error {
public:
domain_error(const string& __arg) : logic_error(__arg) {}
};
class invalid_argument : public logic_error {
public:
invalid_argument(const string& __arg) : logic_error(__arg) {}
};
class length_error : public logic_error {
public:
length_error(const string& __arg) : logic_error(__arg) {}
};
class out_of_range : public logic_error {
public:
out_of_range(const string& __arg) : logic_error(__arg) {}
};
class range_error : public runtime_error {
public:
range_error(const string& __arg) : runtime_error(__arg) {}
};
class overflow_error : public runtime_error {
public:
overflow_error(const string& __arg) : runtime_error(__arg) {}
};
class underflow_error : public runtime_error {
public:
underflow_error(const string& __arg) : runtime_error(__arg) {}
};
}
# 61 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cctype.h" 1 3
# 160 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cctype.h" 3
# 63 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_typeinfo.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/typeinfo" 1 3 4
#pragma interface "typeinfo"
extern "C++" {
namespace std {
class type_info {
private:
type_info& operator= (const type_info&);
type_info (const type_info&);
protected:
explicit type_info (const char *n): _name (n) { }
const char *_name;
public:
virtual ~type_info ();
bool before (const type_info& arg) const;
const char* name () const
{ return _name; }
bool operator== (const type_info& arg) const;
bool operator!= (const type_info& arg) const;
};
inline bool type_info::
operator!= (const type_info& arg) const
{
return !operator== (arg);
}
class bad_cast : public exception {
public:
bad_cast() { }
virtual ~bad_cast() { }
};
class bad_typeid : public exception {
public:
bad_typeid () { }
virtual ~bad_typeid () { }
};
}
}
# 37 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_typeinfo.h" 2 3
# 74 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_typeinfo.h" 3
# 64 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/loccore.h" 1 3
namespace std
{
template<typename _Tp> class allocator;
template<typename _Tp, typename _Alloc> class vector;
class locale;
template<typename _Facet>
inline const _Facet&
use_facet(const locale&);
template<typename _Facet>
inline bool
has_facet(const locale&) throw();
template<typename _CharT>
inline bool
isspace(_CharT, const locale&);
template<typename _CharT>
inline bool
isprint(_CharT, const locale&);
template<typename _CharT>
inline bool
iscntrl(_CharT, const locale&);
template<typename _CharT>
inline bool
isupper(_CharT, const locale&);
template<typename _CharT>
inline bool
islower(_CharT, const locale&);
template<typename _CharT>
inline bool
isalpha(_CharT, const locale&);
template<typename _CharT>
inline bool
isdigit(_CharT, const locale&);
template<typename _CharT>
inline bool
ispunct(_CharT, const locale&);
template<typename _CharT>
inline bool
isxdigit(_CharT, const locale&);
template<typename _CharT>
inline bool
isalnum(_CharT, const locale&);
template<typename _CharT>
inline bool
isgraph(_CharT, const locale&);
template<typename _CharT>
inline _CharT
toupper(_CharT, const locale&);
template<typename _CharT>
inline _CharT
tolower(_CharT, const locale&);
class ctype_base;
template<typename _CharT>
class ctype;
template<> class ctype<char>;
template<> class ctype<wchar_t>;
template<typename _CharT>
class ctype_byname;
class codecvt_base;
template<typename _InternT, typename _ExternT, typename _StateT>
class codecvt;
template<> class codecvt<char, char, mbstate_t>;
template<> class codecvt<wchar_t, char, mbstate_t>;
template<typename _InternT, typename _ExternT, typename _StateT>
class codecvt_byname;
template<> class codecvt_byname<char, char, mbstate_t>;
template<> class codecvt_byname<wchar_t, char, mbstate_t>;
template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
class num_get;
template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
class num_put;
template<typename _CharT> class numpunct;
template<typename _CharT> class numpunct_byname;
template<typename _CharT>
class collate;
template<> class collate<char>;
template<> class collate<wchar_t>;
template<typename _CharT> class
collate_byname;
class time_base;
template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
class time_get;
template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
class time_get_byname;
template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
class time_put;
template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
class time_put_byname;
class money_base;
template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
class money_get;
template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
class money_put;
template<typename _CharT, bool _Intl = false>
class moneypunct;
template<typename _CharT, bool _Intl = false>
class moneypunct_byname;
class messages_base;
template<typename _CharT>
class messages;
template<typename _CharT>
class messages_byname;
class locale
{
class facet;
class id;
class _Impl;
typedef int category;
friend class _Impl;
template<typename _Facet>
friend inline const _Facet&
use_facet(const locale&);
template<typename _Facet>
friend inline bool
has_facet(const locale&) throw();
public:
static const category none = 0;
static const category collate = 0x0100;
static const category ctype = 0x0200;
static const category monetary = 0x0400;
static const category numeric = 0x0800;
static const category time = 0x1000;
static const category messages = 0x2000;
static const category all = (collate | ctype | monetary |
numeric | time | messages);
inline
locale() throw();
inline
locale(const locale& __other) throw();
explicit
locale(const char* __std_name);
locale(const locale& __other, const char* __std_name, category __cats);
locale(const locale& __other, const locale& __one, category __cats);
template<typename _Facet>
locale(const locale& __other, _Facet* __f);
inline
~locale() throw();
const locale&
operator=(const locale& __other) throw();
template<typename _Facet>
locale
combine(const locale& __other);
string
name() const;
bool
operator==(const locale& __other) const throw ();
inline bool
operator!=(const locale& __other) const throw ()
{ return !(operator==(__other)); }
template<typename _Char, typename _Traits, typename _Alloc>
bool
operator()(const basic_string<_Char,_Traits,_Alloc>& __s1,
const basic_string<_Char,_Traits,_Alloc>& __s2) const;
static locale
global(const locale&);
static const locale&
classic();
private:
_Impl* _M_impl;
static _Impl* _S_classic;
static _Impl* _S_global;
explicit
locale(_Impl*) throw();
static inline void
_S_initialize()
{ if (!_S_classic) classic(); }
static int
_S_normalize_category(int);
static const int
_S_num_categories = _Count_ones<all>::_S_count;
};
class locale::_Impl
{
friend class locale;
friend class facet;
template<typename _Facet>
friend inline const _Facet&
use_facet(const locale&);
template<typename _Facet>
friend inline bool
has_facet(const locale&) throw();
size_t _M_num_references;
vector<facet*, allocator< facet* > >* _M_facets;
vector<string, allocator< string > >* _M_category_names;
bool _M_has_name;
bool _M_cached_name_ok;
string _M_cached_name;
inline void
_M_add_reference() throw()
{ ++_M_num_references; }
inline void
_M_remove_reference() throw()
{
if (_M_num_references-- == 0)
{
try {
delete this;
}
catch(...) {
}
}
}
_Impl(const _Impl&, size_t __refs);
_Impl(const _Impl&, const string&, category, size_t __refs);
_Impl(size_t __facets, size_t __refs);
~_Impl() throw();
void
_M_replace_categories(const _Impl*, category);
void
_M_replace_category(const _Impl*, const locale::id* const*);
void
_M_replace_facet(const _Impl*, const locale::id*);
void
_M_install_facet(const locale::id*, facet*);
template<typename _Facet>
inline void
_M_init_facet(_Facet* __facet)
{ _M_install_facet(&_Facet::id, __facet); }
void
_M_construct_collate(const char*);
void
_M_construct_ctype(const char*);
void
_M_construct_monetary(const char*);
void
_M_construct_numeric(const char*);
void
_M_construct_time(const char*);
void
_M_construct_messages(const char*);
category
_M_normalize_category_names(const string&, category __cats);
static const locale::id* const _S_id_collate[];
static const locale::id* const _S_id_ctype[];
static const locale::id* const _S_id_monetary[];
static const locale::id* const _S_id_numeric[];
static const locale::id* const _S_id_time[];
static const locale::id* const _S_id_messages[];
static const locale::id* const* const _S_facet_categories[];
};
locale::locale() throw()
{
_S_initialize();
(_M_impl = _S_global)->_M_add_reference();
}
locale::locale(const locale& __other) throw()
{ (_M_impl = __other._M_impl)->_M_add_reference(); }
template<typename _Facet>
locale::locale(const locale& __other, _Facet* __f)
{
_M_impl = new _Impl(*__other._M_impl, 0);
_M_impl->_M_install_facet(&_Facet::id, __f);
_M_impl->_M_has_name = false;
}
locale::~locale() throw()
{ _M_impl->_M_remove_reference(); }
class locale::facet
{
friend class locale;
friend class locale::_Impl;
protected:
explicit
facet(size_t __refs = 0) throw();
virtual
~facet() {};
private:
size_t _M_num_references;
void
_M_add_reference() throw();
void
_M_remove_reference() throw();
facet(const facet&);
void
operator=(const facet&);
};
class locale::id
{
friend class locale;
friend class locale::_Impl;
template<typename _Facet>
friend inline const _Facet&
use_facet(const locale&);
template<typename _Facet>
friend inline bool
has_facet(const locale&) throw ();
public:
id() {};
private:
mutable size_t _M_index;
static size_t _S_highwater;
void
operator=(const id&);
id(const id&);
};
struct _Bad_use_facet : public bad_cast
{
_Bad_use_facet() throw() {}
_Bad_use_facet(_Bad_use_facet const&) throw() {}
_Bad_use_facet&
operator=(_Bad_use_facet const& __b) throw()
{
static_cast<bad_cast*>(this)->operator=(__b);
return *this;
}
virtual char const*
what() const throw();
virtual
~_Bad_use_facet() throw();
};
template<typename _Facet>
const _Facet&
_Use_facet_failure_handler(const locale&)
{ throw _Bad_use_facet(); }
template<typename _Facet>
inline const _Facet&
use_facet(const locale& __loc);
template<typename _Facet>
inline bool
has_facet(const locale& __loc) throw();
}
# 65 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cstdio.h" 1 3
# 66 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/ios_base.h" 1 3
extern "C" {
}
namespace std {
enum _Ios_Fmtflags { _S_ios_fmtflags_end = 2147483647 };
inline _Ios_Fmtflags
operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
{ return _Ios_Fmtflags(int (__a) & int (__b)); }
inline _Ios_Fmtflags
operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
{ return _Ios_Fmtflags(int (__a) | int (__b)); }
inline _Ios_Fmtflags
operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
{ return _Ios_Fmtflags(int (__a) ^ int (__b)); }
inline _Ios_Fmtflags
operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
{ return __a = __a | __b; }
inline _Ios_Fmtflags
operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
{ return __a = __a & __b; }
inline _Ios_Fmtflags
operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
{ return __a = __a ^ __b; }
inline _Ios_Fmtflags
operator~(_Ios_Fmtflags __a)
{ return _Ios_Fmtflags (~int (__a)); }
enum _Ios_Openmode { _S_ios_openmode_end = 2147483647 };
inline _Ios_Openmode
operator&(_Ios_Openmode __a, _Ios_Openmode __b)
{ return _Ios_Openmode(int (__a) & int (__b)); }
inline _Ios_Openmode
operator|(_Ios_Openmode __a, _Ios_Openmode __b)
{ return _Ios_Openmode(int (__a) | int (__b)); }
inline _Ios_Openmode
operator^(_Ios_Openmode __a, _Ios_Openmode __b)
{ return _Ios_Openmode(int (__a) ^ int (__b)); }
inline _Ios_Openmode
operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
{ return __a = __a | __b; }
inline _Ios_Openmode
operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
{ return __a = __a & __b; }
inline _Ios_Openmode
operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
{ return __a = __a ^ __b; }
inline _Ios_Openmode
operator~(_Ios_Openmode __a)
{ return _Ios_Openmode (~int (__a)); }
enum _Ios_Iostate { _S_ios_iostate_end = 2147483647 };
inline _Ios_Iostate
operator&(_Ios_Iostate __a, _Ios_Iostate __b)
{ return _Ios_Iostate(int (__a) & int (__b)); }
inline _Ios_Iostate
operator|(_Ios_Iostate __a, _Ios_Iostate __b)
{ return _Ios_Iostate(int (__a) | int (__b)); }
inline _Ios_Iostate
operator^(_Ios_Iostate __a, _Ios_Iostate __b)
{ return _Ios_Iostate(int (__a) ^ int (__b)); }
inline _Ios_Iostate
operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
{ return __a = __a | __b; }
inline _Ios_Iostate
operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
{ return __a = __a & __b; }
inline _Ios_Iostate
operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
{ return __a = __a ^ __b; }
inline _Ios_Iostate
operator~(_Ios_Iostate __a)
{ return _Ios_Iostate(~int (__a)); }
enum _Ios_Seekdir { _S_ios_Seekdir_end = 2147483647 };
class ios_base
{
public:
class failure : public exception
{
const string _M_what;
public:
explicit failure(const string& __msg) : _M_what(__msg) { }
virtual const char* what() const { return _M_what.c_str(); }
};
typedef _Ios_Fmtflags fmtflags;
static const fmtflags boolalpha = fmtflags(0200000 );
static const fmtflags dec = fmtflags(020 );
static const fmtflags fixed = fmtflags(010000 );
static const fmtflags hex = fmtflags(0100 );
static const fmtflags internal = fmtflags(010 );
static const fmtflags left = fmtflags(02 );
static const fmtflags oct = fmtflags(040 );
static const fmtflags right = fmtflags(04 );
static const fmtflags scientific = fmtflags(04000 );
static const fmtflags showbase = fmtflags(0200 );
static const fmtflags showpoint = fmtflags(0400 );
static const fmtflags showpos = fmtflags(02000 );
static const fmtflags skipws = fmtflags(01 );
static const fmtflags unitbuf = fmtflags(020000 );
static const fmtflags uppercase = fmtflags(01000 );
static const fmtflags adjustfield = fmtflags(02 | 04 |
010 );
static const fmtflags basefield = fmtflags(020 | 040 | 0100 );
static const fmtflags floatfield = fmtflags(04000 | 010000 );
typedef _Ios_Iostate iostate;
static const iostate badbit = iostate(0x4000 );
static const iostate eofbit = iostate(0x10 );
static const iostate failbit = iostate(0x20 );
static const iostate goodbit = iostate(0);
typedef _Ios_Openmode openmode;
static const openmode app = openmode(8 );
static const openmode ate = openmode(4 );
static const openmode binary = openmode(128 );
static const openmode in = openmode(1 );
static const openmode out = openmode(2 );
static const openmode trunc = openmode(16 );
typedef _Ios_Seekdir seekdir;
static const seekdir beg = seekdir(0);
static const seekdir cur = seekdir(1 );
static const seekdir end = seekdir(2 );
private:
struct _Callback_list;
struct _Words
{
void* _M_pword;
long _M_iword;
};
iostate _M_state;
iostate _M_exceptions_data;
fmtflags _M_flags;
streamsize _M_precision;
streamsize _M_width;
locale _M_locale;
static const int _S_local_words = 8;
_Words _M_word_array[_S_local_words];
_Words _M_dummy;
_Words* _M_words;
int _M_word_limit;
_Callback_list* _M_callbacks;
_Words&
_M_grow_words(int __index);
protected:
void
_M_dispose_callbacks();
void
_M_init();
void
_M_copy_base(ios_base& __rhs);
iostate
_M_rdstate() const
{ return _M_state; }
void
_M_clear(iostate __state = goodbit)
{ _M_state = __state; }
iostate
_M_exceptions () const
{ return _M_exceptions_data; }
void
_M_exceptions(iostate __except)
{
_M_exceptions_data = __except;
this->_M_clear(_M_rdstate());
}
public:
class Init
{
public:
Init();
~Init();
private:
static int _M_ios_base_init;
filebuf* _M_cin;
filebuf* _M_cout;
filebuf* _M_cerr;
wfilebuf* _M_wcin;
wfilebuf* _M_wcout;
wfilebuf* _M_wcerr;
};
inline fmtflags
flags() const { return _M_flags; }
inline fmtflags
flags(fmtflags __fmtfl)
{
fmtflags __old = _M_flags;
_M_flags = __fmtfl;
return __old;
}
inline fmtflags
setf(fmtflags __fmtfl)
{
fmtflags __old = _M_flags;
_M_flags |= __fmtfl;
return __old;
}
inline fmtflags
setf(fmtflags __fmtfl, fmtflags __mask)
{
fmtflags __old = _M_flags;
_M_flags = (_M_flags & ~__mask) | (__fmtfl & __mask);
return __old;
}
inline void
unsetf(fmtflags __mask) { _M_flags &= ~__mask; }
inline streamsize
precision() const { return _M_precision; }
inline streamsize
precision(streamsize __prec)
{
streamsize __old = _M_precision;
_M_precision = __prec;
return __old;
}
inline streamsize
width() const { return _M_width; }
inline streamsize
width(streamsize __wide)
{
streamsize __old = _M_width;
_M_width = __wide;
return __old;
}
locale
imbue(const locale& __loc);
inline locale
getloc() const { return _M_locale; }
static int
xalloc() throw();
inline long&
iword(int __ix)
{
_Words& __word = (__ix < _M_word_limit)
? _M_words[__ix] : _M_grow_words(__ix);
return __word._M_iword;
}
inline void*&
pword(int __ix)
{
_Words& __word = (__ix < _M_word_limit)
? _M_words[__ix] : _M_grow_words(__ix);
return __word._M_pword;
}
~ios_base();
enum event
{
erase_event,
imbue_event,
copyfmt_event
};
typedef void (*event_callback) (event, ios_base&, int __index);
void
register_callback(event_callback __fn, int __index);
static bool
sync_with_stdio(bool __sync = true);
protected:
void
_M_call_callbacks(event __ev) throw();
ios_base();
};
inline ios_base&
boolalpha(ios_base& __str)
{
__str.setf(ios_base::boolalpha);
return __str;
}
inline ios_base&
noboolalpha(ios_base& __str)
{
__str.unsetf(ios_base::boolalpha);
return __str;
}
inline ios_base&
showbase(ios_base& __str)
{
__str.setf(ios_base::showbase);
return __str;
}
inline ios_base&
noshowbase(ios_base& __str)
{
__str.unsetf(ios_base::showbase);
return __str;
}
inline ios_base&
showpoint(ios_base& __str)
{
__str.setf(ios_base::showpoint);
return __str;
}
inline ios_base&
noshowpoint(ios_base& __str)
{
__str.unsetf(ios_base::showpoint);
return __str;
}
inline ios_base&
showpos(ios_base& __str)
{
__str.setf(ios_base::showpos);
return __str;
}
inline ios_base&
noshowpos(ios_base& __str)
{
__str.unsetf(ios_base::showpos);
return __str;
}
inline ios_base&
skipws(ios_base& __str)
{
__str.setf(ios_base::skipws);
return __str;
}
inline ios_base&
noskipws(ios_base& __str)
{
__str.unsetf(ios_base::skipws);
return __str;
}
inline ios_base&
uppercase(ios_base& __str)
{
__str.setf(ios_base::uppercase);
return __str;
}
inline ios_base&
nouppercase(ios_base& __str)
{
__str.unsetf(ios_base::uppercase);
return __str;
}
inline ios_base&
unitbuf(ios_base& __str)
{
__str.setf(ios_base::unitbuf);
return __str;
}
inline ios_base&
nounitbuf(ios_base& __str)
{
__str.unsetf(ios_base::unitbuf);
return __str;
}
inline ios_base&
internal(ios_base& __str)
{
__str.setf(ios_base::internal, ios_base::adjustfield);
return __str;
}
inline ios_base&
left(ios_base& __str)
{
__str.setf(ios_base::left, ios_base::adjustfield);
return __str;
}
inline ios_base&
right(ios_base& __str)
{
__str.setf(ios_base::right, ios_base::adjustfield);
return __str;
}
inline ios_base&
dec(ios_base& __str)
{
__str.setf(ios_base::dec, ios_base::basefield);
return __str;
}
inline ios_base&
hex(ios_base& __str)
{
__str.setf(ios_base::hex, ios_base::basefield);
return __str;
}
inline ios_base&
oct(ios_base& __str)
{
__str.setf(ios_base::oct, ios_base::basefield);
return __str;
}
inline ios_base&
fixed(ios_base& __str)
{
__str.setf(ios_base::fixed, ios_base::floatfield);
return __str;
}
inline ios_base&
scientific(ios_base& __str)
{
__str.setf(ios_base::scientific, ios_base::floatfield);
return __str;
}
}
# 67 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_streambuf.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 1 3
# 74 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 3
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_streambuf.h" 2 3
namespace std {
template<typename _CharT, typename _Traits>
class basic_streambuf
{
typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
typedef _Traits traits_type;
typedef ctype<_CharT> __ctype_type;
friend class basic_ios<char_type, traits_type>;
friend class basic_istream<char_type, traits_type>;
friend class basic_ostream<char_type, traits_type>;
friend class istreambuf_iterator<char_type, traits_type>;
friend class ostreambuf_iterator<char_type, traits_type>;
protected:
char_type* _M_in_cur;
char_type* _M_in_beg;
char_type* _M_in_end;
char_type* _M_out_cur;
char_type* _M_out_beg;
char_type* _M_out_end;
locale _M_locale;
ios_base::openmode _M_mode;
const __ctype_type* _M_fctype;
bool _M_initialized;
bool _M_buf_unified;
public:
virtual
~basic_streambuf()
{
_M_mode = ios_base::openmode(0);
_M_fctype = __null ;
_M_initialized = false;
_M_buf_unified = false;
}
locale
pubimbue(const locale &__loc)
{
locale __tmp(this->getloc());
this->imbue(__loc);
return __tmp;
}
locale
getloc() const
{
if (_M_initialized)
return _M_locale;
else
return locale();
}
basic_streambuf<char_type, traits_type>*
pubsetbuf(char_type* __s, streamsize __n)
{ return this->setbuf(__s, __n); }
pos_type
pubseekoff(off_type __off, ios_base::seekdir __way,
ios_base::openmode __mode = ios_base::in | ios_base::out)
{ return this->seekoff(__off, __way, __mode); }
pos_type
pubseekpos(pos_type __sp,
ios_base::openmode __mode = ios_base::in | ios_base::out)
{ return this->seekpos(__sp, __mode); }
int
pubsync() { return this->sync(); }
streamsize
in_avail()
{
streamsize __retval;
if (_M_in_cur && _M_in_cur < _M_in_end)
__retval = this->egptr() - this->gptr();
else
__retval = this->showmanyc();
return __retval;
}
int_type
snextc()
{
int_type __eof = traits_type::eof();
return (this->sbumpc() == __eof ? __eof : this->sgetc());
}
int_type
sbumpc();
int_type
sgetc()
{
int_type __retval;
if (_M_in_cur && _M_in_cur < _M_in_end)
__retval = traits_type::to_int_type(*gptr());
else
__retval = this->underflow();
return __retval;
}
streamsize
sgetn(char_type* __s, streamsize __n)
{ return this->xsgetn(__s, __n); }
int_type
sputbackc(char_type __c);
int_type
sungetc();
int_type
sputc(char_type __c);
streamsize
sputn(const char_type* __s, streamsize __n)
{ return this->xsputn(__s, __n); }
protected:
basic_streambuf()
: _M_in_cur(0), _M_in_beg(0), _M_in_end(0), _M_out_cur(0), _M_out_beg(0),
_M_out_end(0), _M_locale(locale()), _M_mode(ios_base::openmode(0)),
_M_initialized(false), _M_buf_unified(false)
{ _M_fctype = &use_facet<__ctype_type>(this->getloc()); }
char_type*
eback() const { return _M_in_beg; }
char_type*
gptr() const { return _M_in_cur; }
char_type*
egptr() const { return _M_in_end; }
void
gbump(int __n) { _M_in_cur += __n; }
void
setg(char_type* __gbeg, char_type* __gnext, char_type* __gend)
{
_M_in_beg = __gbeg;
_M_in_cur = __gnext;
_M_in_end = __gend;
}
char_type*
pbase() const { return _M_out_beg; }
char_type*
pptr() const { return _M_out_cur; }
char_type*
epptr() const { return _M_out_end; }
void
pbump(int __n) { _M_out_cur += __n; }
void
setp(char_type* __pbeg, char_type* __pend)
{
_M_out_beg = _M_out_cur = __pbeg;
_M_out_end = __pend;
}
virtual void
imbue(const locale& __loc)
{
_M_initialized = true;
if (_M_locale != __loc)
{
_M_locale = __loc;
_M_fctype = &use_facet<__ctype_type>(_M_locale);
}
}
virtual basic_streambuf<char_type,_Traits>*
setbuf(char_type* __s, streamsize __n)
{
if (this->gptr() && this->gptr() != this->egptr())
return this;
}
virtual pos_type
seekoff(off_type __off, ios_base::seekdir __way,
ios_base::openmode __mode = ios_base::in | ios_base::out)
{ return pos_type(off_type(-1)); }
virtual pos_type
seekpos(pos_type __sp,
ios_base::openmode __mode = ios_base::in | ios_base::out)
{ return pos_type(off_type(-1)); }
virtual int
sync() { return 0; }
virtual streamsize
showmanyc() { return 0; }
virtual streamsize
xsgetn(char_type* __s, streamsize __n);
virtual int_type
underflow()
{ return traits_type::eof(); }
virtual int_type
uflow()
{
int_type __retval = this->underflow();
bool __testeof = __retval == traits_type::eof();
if (!__testeof)
++_M_in_cur;
return __retval;
}
virtual int_type
pbackfail(int_type __c = traits_type::eof())
{ return __c; }
virtual streamsize
xsputn(const char_type* __s, streamsize __n);
virtual int_type
overflow(int_type __c = traits_type::eof()) { return __c; }
# 310 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_streambuf.h" 3
};
typedef basic_streambuf<char> streambuf;
typedef basic_streambuf<wchar_t> wstreambuf;
}
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/streambuf.tcc" 1 3
namespace std {
template<typename _CharT, typename _Traits>
basic_streambuf<_CharT, _Traits>::int_type
basic_streambuf<_CharT, _Traits>::sbumpc()
{
int_type __retval;
if (_M_in_cur && _M_in_cur < _M_in_end)
{
char_type __c = *gptr();
++_M_in_cur;
if (_M_buf_unified && _M_out_cur)
++_M_out_cur;
__retval = traits_type::to_int_type(__c);
}
else
__retval = this->uflow();
return __retval;
}
template<typename _CharT, typename _Traits>
basic_streambuf<_CharT, _Traits>::int_type
basic_streambuf<_CharT, _Traits>::sputbackc(char_type __c)
{
int_type __retval;
bool __testpos = _M_in_cur && _M_in_beg < _M_in_cur;
bool __testne = _M_in_cur && !traits_type::eq(__c, this->gptr()[-1]);
if (!__testpos || __testne)
__retval = pbackfail(traits_type::to_int_type(__c));
else
{
--_M_in_cur;
if (_M_buf_unified && _M_mode & ios_base::out)
--_M_out_cur;
__retval = traits_type::to_int_type(*this->gptr());
}
return __retval;
}
template<typename _CharT, typename _Traits>
basic_streambuf<_CharT, _Traits>::int_type
basic_streambuf<_CharT, _Traits>::sungetc()
{
bool __testpos = _M_in_cur && _M_in_beg < _M_in_cur;
int_type __retval;
if (__testpos)
{
--_M_in_cur;
if (_M_buf_unified && _M_out_cur)
--_M_out_cur;
__retval = traits_type::to_int_type(*_M_in_cur);
}
else
__retval = this->pbackfail();
return __retval;
}
template<typename _CharT, typename _Traits>
basic_streambuf<_CharT, _Traits>::int_type
basic_streambuf<_CharT, _Traits>::sputc(char_type __c)
{
int_type __retval;
if (_M_out_cur && _M_out_cur < _M_out_end)
{
*_M_out_cur = __c;
++_M_out_cur;
if (_M_buf_unified && _M_in_cur)
++_M_in_cur;
__retval = traits_type::to_int_type(__c);
}
else
__retval = this->overflow(traits_type::to_int_type(__c));
return __retval;
}
template<typename _CharT, typename _Traits>
streamsize
basic_streambuf<_CharT, _Traits>::xsgetn(char_type* __s, streamsize __n)
{
streamsize __num_converted(0);
while (__num_converted < __n && _M_in_cur && _M_in_cur < _M_in_end)
{
*__s = *_M_in_cur;
++__s;
if (_M_buf_unified && _M_out_cur)
{
++_M_in_cur;
++_M_out_cur;
}
else
++_M_in_cur;
++__num_converted;
}
return __num_converted;
}
template<typename _CharT, typename _Traits>
streamsize
basic_streambuf<_CharT, _Traits>::
xsputn(const char_type* __s, streamsize __n)
{
streamsize __retval = 0;
if (_M_out_cur + __n < _M_out_end)
__retval = __n;
else
__retval = _M_out_end - _M_out_cur;
if (_M_out_cur && _M_out_cur < _M_out_end)
{
for (int __i = 0; __i < __retval; ++__i)
{
*_M_out_cur = *__s;
++__s;
++_M_out_cur;
if (_M_buf_unified && _M_mode & ios_base::in)
++_M_in_cur;
}
}
if (__retval != __n)
{
char_type __c = __retval ? *_M_out_cur : *__s;
char_type __overfc = this->overflow(__c);
if (__c == __overfc)
++__retval;
}
return __retval;
}
}
# 320 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_streambuf.h" 2 3
# 68 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ctime.h" 1 3
# 69 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/locfacets.h" 1 3
namespace std
{
struct ctype_base
{
enum
{
space = _ISspace,
print = _ISprint,
cntrl = _IScntrl,
upper = _ISupper,
lower = _ISlower,
alpha = _ISalpha,
digit = _ISdigit,
punct = _ISpunct,
xdigit = _ISxdigit,
alnum = _ISalnum,
graph = _ISgraph
};
typedef unsigned short mask;
};
template<typename _CharT>
class _Ctype_nois : public locale::facet, public ctype_base
{
typedef _CharT char_type;
public:
char_type
toupper(char_type __c) const
{ return do_toupper(__c); }
const char_type*
toupper(char_type *__low, const char_type* __high) const
{ return do_toupper(__low, __high); }
char_type
tolower(char_type __c) const
{ return do_tolower(__c); }
const char_type*
tolower(char_type* __low, const char_type* __high) const
{ return do_tolower(__low, __high); }
char_type
widen(char __c) const
{ return do_widen(__c); }
const char*
widen(const char* __low, const char* __high, char_type* __to) const
{ return do_widen(__low, __high, __to); }
char
narrow(char_type __c, char __dfault) const
{ return do_narrow(__c, __dfault); }
const char_type*
narrow(const char_type* __low, const char_type* __high,
char __dfault, char *__to) const
{ return do_narrow(__low, __high, __dfault, __to); }
protected:
explicit
_Ctype_nois(size_t __refs = 0) : locale::facet(__refs) { }
virtual
~_Ctype_nois() { }
virtual char_type
do_toupper(char_type) const = 0;
virtual const char_type*
do_toupper(char_type* __low, const char_type* __high) const = 0;
virtual char_type
do_tolower(char_type) const = 0;
virtual const char_type*
do_tolower(char_type* __low, const char_type* __high) const = 0;
virtual char_type
do_widen(char) const = 0;
virtual const char*
do_widen(const char* __low, const char* __high,
char_type* __dest) const = 0;
virtual char
do_narrow(char_type, char __dfault) const = 0;
virtual const char_type*
do_narrow(const char_type* __low, const char_type* __high,
char __dfault, char* __dest) const = 0;
};
template<typename _CharT>
class _Ctype : public _Ctype_nois<_CharT>
{
typedef _CharT char_type;
public:
bool
is(mask __m, char_type __c) const
{ return do_is(__m, __c); }
const char_type*
is(const char_type *__lo, const char_type *__hi, mask *__vec) const
{ return do_is(__lo, __hi, __vec); }
const char_type*
scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
{ return do_scan_is(__m, __lo, __hi); }
const char_type*
scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
{ return do_scan_not(__m, __lo, __hi); }
protected:
explicit
_Ctype(size_t __refs = 0) : _Ctype_nois<_CharT>(__refs) { }
virtual ~_Ctype() { }
virtual bool
do_is(mask __m, char_type __c) const = 0;
virtual const char_type*
do_is(const char_type* __lo, const char_type* __hi,
mask* __vec) const = 0;
virtual const char_type*
do_scan_is(mask __m, const char_type* __lo,
const char_type* __hi) const = 0;
virtual const char_type*
do_scan_not(mask __m, const char_type* __lo,
const char_type* __hi) const = 0;
};
template<typename _CharT>
class ctype : public _Ctype<_CharT>
{
typedef _CharT char_type;
public:
explicit
ctype(size_t __refs = 0) : _Ctype<_CharT> (__refs) { }
static locale::id id;
protected:
virtual
~ctype() { }
};
template<>
class ctype<char> : public _Ctype_nois<char>
{
typedef char char_type;
private:
const mask* _M_table;
bool _M_del;
static const int* const& _S_toupper;
static const int* const& _S_tolower;
static const mask* const& _S_table;
public:
static locale::id id;
static const size_t table_size = 1u + ~(unsigned char)0;
explicit
ctype(const mask* __table = 0, bool __del = false,
size_t __refs = 0) throw()
: _Ctype_nois<char>(__refs), _M_table(__table == 0 ? _S_table: __table),
_M_del(__table != 0 && __del)
{ }
bool
is(mask __m, char __c) const throw()
{ return _M_table[(unsigned char)(__c)] & __m; }
const char*
is(const char* __low, const char* __high, mask* __vec) const throw()
{
while (__low < __high)
*__vec++ = _M_table[(unsigned char)(*__low++)];
return __high;
}
const char*
scan_is(mask __m, const char* __low, const char* __high) const throw()
{
while (__low < __high && !(_M_table[(unsigned char)(*__low)] & __m))
++__low;
return __low;
}
const char*
scan_not(mask __m, const char* __low, const char* __high) const throw()
{
while (__low < __high
&& (_M_table[(unsigned char)(*__low)] & __m) != 0)
++__low;
return __low;
}
char_type
toupper(char_type __c) const
{ return do_toupper(__c); }
const char_type*
toupper(char_type *__low, const char_type* __high) const
{ return do_toupper(__low, __high); }
char_type
tolower(char_type __c) const
{ return do_tolower(__c); }
const char_type*
tolower(char_type* __low, const char_type* __high) const
{ return do_tolower(__low, __high); }
char_type
widen(char __c) const
{ return do_widen(__c); }
const char*
widen(const char* __low, const char* __high, char_type* __to) const
{ return do_widen(__low, __high, __to); }
char
narrow(char_type __c, char __dfault) const
{ return do_narrow(__c, __dfault); }
const char_type*
narrow(const char_type* __low, const char_type* __high,
char __dfault, char *__to) const
{ return do_narrow(__low, __high, __dfault, __to); }
protected:
virtual
~ctype();
inline const mask*
table() const throw()
{ return _M_table; }
inline static const mask*
classic_table() throw()
{ return _S_table; }
virtual char
do_toupper(char) const;
virtual const char*
do_toupper(char* __low, const char* __high) const;
virtual char
do_tolower(char) const;
virtual const char*
do_tolower(char* __low, const char* __high) const;
virtual char
do_widen(char) const;
virtual const char*
do_widen(const char* __low, const char* __high, char* __dest) const;
virtual char
do_narrow(char, char __dfault) const;
virtual const char*
do_narrow(const char* __low, const char* __high,
char __dfault, char* __dest) const;
};
template<>
inline const ctype<char>&
use_facet< const ctype<char> > (const locale& __loc);
template<>
class ctype<wchar_t> : public _Ctype<wchar_t>
{
typedef wchar_t char_type;
public:
explicit ctype (size_t __refs = 0);
static locale::id id;
private:
static const int* const& _S_toupper;
static const int* const& _S_tolower;
static const mask* const& _S_table;
static const int _S_table_size = ctype<char>::table_size;
protected:
virtual ~ctype ();
virtual bool
do_is (mask __m, char_type __c) const;
virtual const char_type*
do_is (const char_type* __low,
const char_type* __high, mask* __vec) const;
virtual const char_type*
do_scan_is (mask __m, const char_type* __low,
const char_type* __high) const;
virtual const char_type*
do_scan_not (mask __m, const char_type* __low,
const char_type* __high) const;
virtual char_type
do_toupper (char_type) const;
virtual const char_type*
do_toupper (char_type* __low, const char_type* __high) const;
virtual char_type
do_tolower (char_type) const;
virtual const char_type*
do_tolower (char_type* __low, const char_type* __high) const;
virtual char_type
do_widen (char) const;
virtual const char*
do_widen (const char* __low, const char* __high,
char_type* __dest) const;
virtual char
do_narrow (char_type, char __dfault) const;
virtual const char_type*
do_narrow (const char_type* __low, const char_type* __high,
char __dfault, char* __dest) const;
};
template<>
inline const ctype<wchar_t>&
use_facet< const ctype<wchar_t> > (const locale& __loc);
template<typename _CharT>
class ctype_byname : public ctype<_CharT>
{
typedef _CharT char_type;
public:
explicit
ctype_byname(const char*, size_t __refs = 0)
: ctype<_CharT>(__refs) { }
protected:
virtual
~ctype_byname() { }
};
template<>
ctype_byname<char>::ctype_byname(const char*, size_t refs);
template<>
ctype_byname<wchar_t>::ctype_byname(const char*, size_t refs);
class codecvt_base
{
public:
enum result
{
ok,
partial,
error,
noconv
};
};
template<typename _InternT, typename _ExternT, typename _StateT>
class _Codecvt : public locale::facet, public codecvt_base
{
typedef _InternT intern_type;
typedef _ExternT extern_type;
typedef _StateT state_type;
protected:
explicit
_Codecvt (size_t __refs = 0) : locale::facet(__refs) { }
public:
result
out(state_type& __state, const intern_type* __from,
const intern_type* __from_end, const intern_type* &__from_next,
extern_type* __to, extern_type* __to_limit,
extern_type*& __to_next) const
{
return do_out(__state, __from, __from_end, __from_next, __to,
__to_limit, __to_next);
}
result
unshift(state_type& __state, extern_type* __to, extern_type* __to_limit,
extern_type*& __to_next) const
{ return do_unshift(__state, __to,__to_limit,__to_next); }
result
in(state_type& __state, const extern_type* __from,
const extern_type* __from_end, const extern_type*& __from_next,
intern_type* __to, intern_type* __to_limit,
intern_type*& __to_next) const
{
return do_in(__state, __from, __from_end, __from_next,
__to, __to_limit, __to_next);
}
int
encoding() const throw()
{ return do_encoding(); }
bool
always_noconv() const throw()
{ return do_always_noconv(); }
int
length(const state_type& __state, const extern_type* __from,
const extern_type* __end, size_t __max) const
{ return do_length(__state, __from, __end, __max); }
int
max_length() const throw()
{ return do_max_length(); }
protected:
virtual
~_Codecvt() { }
virtual result
do_out(state_type& __state,
const intern_type* __from, const intern_type* __from_end,
const intern_type*& __from_next,
extern_type* __to, extern_type* __to_limit,
extern_type*& __to_next) const = 0;
virtual result
do_unshift(state_type& __state,
extern_type* __to, extern_type* __to_limit,
extern_type*& __to_next) const = 0;
virtual result
do_in(state_type& __state,
const extern_type* __from, const extern_type* __from_end,
const extern_type*& __from_next,
intern_type* __to, intern_type* __to_limit,
intern_type*& __to_next) const = 0;
virtual int
do_encoding() const throw() = 0;
virtual bool
do_always_noconv() const throw() = 0;
virtual int
do_length(const state_type&, const extern_type* __from,
const extern_type* __end, size_t __max) const = 0;
virtual int
do_max_length() const throw() = 0;
};
template<typename _InternT, typename _ExternT, typename _StateT>
class codecvt : public _Codecvt<_InternT,_ExternT,_StateT>
{
typedef _InternT intern_type;
typedef _ExternT extern_type;
typedef _StateT state_type;
public:
static locale::id id;
explicit
codecvt(size_t __refs = 0)
: _Codecvt<_InternT,_ExternT,_StateT> (__refs) { }
protected:
virtual
~codecvt() { }
};
template<>
class codecvt<char,char,mbstate_t> : public _Codecvt<char,char,mbstate_t>
{
typedef char intern_type;
typedef char extern_type;
typedef mbstate_t state_type;
public:
explicit codecvt (size_t __refs = 0);
static locale::id id;
protected:
virtual ~codecvt();
virtual result
do_out(state_type& __state, const intern_type* __from,
const intern_type* __from_end, const intern_type*& __from_next,
extern_type* __to, extern_type* __to_limit,
extern_type*& __to_next) const;
virtual result
do_unshift(state_type& __state, extern_type* __to,
extern_type* __to_limit, extern_type*& __to_next) const;
virtual result
do_in(state_type& __state, const extern_type* __from,
const extern_type* __from_end, const extern_type*& __from_next,
intern_type* __to, intern_type* __to_limit,
intern_type*& __to_next) const;
virtual int do_encoding() const throw();
virtual bool do_always_noconv() const throw();
virtual int do_length(const state_type&, const extern_type* __from,
const extern_type* __end, size_t __max) const;
virtual int do_max_length() const throw();
};
template<>
class codecvt<wchar_t,char,mbstate_t>
: public _Codecvt<wchar_t,char,mbstate_t>
{
typedef wchar_t intern_type;
typedef char extern_type;
typedef mbstate_t state_type;
public:
explicit codecvt(size_t __refs = 0);
static locale::id id;
protected:
virtual ~codecvt();
virtual result
do_out(state_type& __state, const intern_type* __from,
const intern_type* __from_end, const intern_type*& __from_next,
extern_type* __to, extern_type* __to_limit,
extern_type*& __to_next) const;
virtual result
do_unshift(state_type& __state,
extern_type* __to, extern_type* __to_limit,
extern_type*& __to_next) const;
virtual result
do_in(state_type& __state,
const extern_type* __from, const extern_type* __from_end,
const extern_type*& __from_next,
intern_type* __to, intern_type* __to_limit,
intern_type*& __to_next) const;
virtual int do_encoding() const throw();
virtual bool do_always_noconv() const throw();
virtual int do_length(const state_type&, const extern_type* __from,
const extern_type* __end, size_t __max) const;
virtual int do_max_length() const throw();
};
template<typename _InternT, typename _ExternT, typename _StateT>
class codecvt_byname : public codecvt<_InternT,_ExternT,_StateT>
{
public:
explicit
codecvt_byname(const char*, size_t __refs = 0)
: codecvt<_InternT,_ExternT,_StateT> (__refs) { }
protected:
virtual
~codecvt_byname() { }
};
template<>
class codecvt_byname<char,char,mbstate_t>
: public codecvt<char,char,mbstate_t>
{
public:
explicit
codecvt_byname(const char*, size_t __refs = 0);
protected:
virtual
~codecvt_byname();
};
template<>
class codecvt_byname<wchar_t,char,mbstate_t>
: public codecvt<wchar_t,char,mbstate_t>
{
public:
explicit
codecvt_byname(const char*, size_t __refs = 0);
protected:
virtual
~codecvt_byname();
};
template<typename _CharT, typename _InIter>
class _Numeric_get;
template<typename _CharT>
class _Format_cache
{
typedef _CharT char_type;
typedef char_traits<_CharT> traits_type;
typedef basic_string<_CharT> string_type;
typedef string_type::size_type size_type;
friend class locale;
template<typename _Char, typename _InIter>
friend class _Numeric_get;
friend class num_get<_CharT>;
friend class num_put<_CharT>;
friend class time_get<_CharT>;
friend class money_get<_CharT>;
friend class time_put<_CharT>;
friend class money_put<_CharT>;
public:
static int _S_pword_ix;
bool _M_valid;
static const char _S_literals[];
enum
{
_S_minus,
_S_plus,
_S_ecks,
_S_Ecks,
_S_digits,
_S_digits_end = _S_digits + 16,
_S_udigits = _S_digits_end,
_S_udigits_end = _S_udigits + 16,
_S_ee = _S_digits + 14,
_S_Ee = _S_udigits + 14
};
char_type _M_decimal_point;
char_type _M_thousands_sep;
string_type _M_truename;
string_type _M_falsename;
bool _M_use_grouping;
string _M_grouping;
_Format_cache();
~_Format_cache() throw() { }
static _Format_cache<_CharT>*
_S_get(ios_base& __ios);
void
_M_populate(ios_base&);
static void
_S_callback(ios_base::event __event, ios_base& __ios, int __ix) throw();
};
template<> _Format_cache<char>::_Format_cache();
template<> _Format_cache<wchar_t>::_Format_cache();
template<typename _CharT, typename _InIter>
class _Numeric_get
{
typedef _CharT char_type;
typedef _InIter iter_type;
template<typename _Char, typename _InIterT>
friend class num_get;
template<typename _Char, typename _InIterT>
friend class time_get;
template<typename _Char, typename _InIterT>
friend class money_get;
template<typename _Char, typename _InIterT>
friend class num_put;
template<typename _Char, typename _InIterT>
friend class time_put;
template<typename _Char, typename _InIterT>
friend class money_put;
private:
explicit
_Numeric_get() { }
virtual
~_Numeric_get() { }
iter_type
_M_get_digits(iter_type __in, iter_type __end) const;
};
template<typename _CharT, typename _InIter>
class num_get : public locale::facet
{
typedef _CharT char_type;
typedef _InIter iter_type;
typedef char_traits<_CharT> __traits_type;
public:
explicit
num_get(size_t __refs = 0) : locale::facet(__refs) { }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, bool& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, short& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, int& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, long& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned short& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned int& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned long& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, float& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, double& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, long double& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, void*& __v) const
{ return do_get(__in, __end, __io, __err, __v); }
static locale::id id;
protected:
virtual ~num_get() { }
void
_M_extract(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, string& __xtrc) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, short&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, int&) const;
virtual iter_type
do_get (iter_type, iter_type, ios_base&, ios_base::iostate&, long&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
unsigned short&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&,
ios_base::iostate& __err, unsigned int&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&,
ios_base::iostate& __err, unsigned long&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
float&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
double&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&,
ios_base::iostate& __err, long double&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
void*&) const;
};
template<typename _CharT, typename _OutIter>
class _Numeric_put
{
typedef _CharT char_type;
typedef _OutIter iter_type;
protected:
explicit
_Numeric_put() { }
protected:
virtual
~_Numeric_put() { }
};
template<typename _CharT, typename _OutIter>
class num_put : public locale::facet
{
typedef _CharT char_type;
typedef _OutIter iter_type;
public:
explicit
num_put(size_t __refs = 0) : locale::facet(__refs) { }
iter_type
put(iter_type __s, ios_base& __f, char_type __fill, bool __v) const
{ return do_put(__s, __f, __fill, __v); }
iter_type
put (iter_type __s, ios_base& __f, char_type __fill, long __v) const
{ return do_put(__s, __f, __fill, __v); }
iter_type
put(iter_type __s, ios_base& __f, char_type __fill,
unsigned long __v) const
{ return do_put(__s, __f, __fill, __v); }
iter_type
put(iter_type __s, ios_base& __f, char_type __fill, double __v) const
{ return do_put(__s, __f, __fill, __v); }
iter_type
put(iter_type __s, ios_base& __f, char_type __fill,
long double __v) const
{ return do_put(__s, __f, __fill, __v); }
iter_type
put(iter_type __s, ios_base& __f, char_type __fill,
const void* __v) const
{ return do_put(__s, __f, __fill, __v); }
static locale::id id;
protected:
virtual
~num_put() { };
virtual iter_type
do_put(iter_type, ios_base&, char_type __fill, bool __v) const;
virtual iter_type
do_put(iter_type, ios_base&, char_type __fill, long __v) const;
virtual iter_type
do_put(iter_type, ios_base&, char_type __fill, unsigned long) const;
virtual iter_type
do_put(iter_type, ios_base&, char_type __fill, double __v) const;
virtual iter_type
do_put(iter_type, ios_base&, char_type __fill, long double __v) const;
virtual iter_type
do_put(iter_type, ios_base&, char_type __fill, const void* __v) const;
};
template<typename _CharT>
class _Punct : public locale::facet
{
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
public:
char_type
decimal_point() const
{ return do_decimal_point(); }
char_type
thousands_sep() const
{ return do_thousands_sep(); }
string
grouping() const
{ return do_grouping(); }
protected:
explicit
_Punct(size_t __refs = 0) : locale::facet(__refs) { }
virtual
~_Punct() { }
virtual char_type
do_decimal_point() const
{ return _M_decimal_point; }
virtual char_type
do_thousands_sep() const
{ return _M_thousands_sep; }
virtual string
do_grouping() const
{ return _M_grouping; }
private:
char_type _M_decimal_point;
char_type _M_thousands_sep;
string _M_grouping;
protected:
void
_M_init(char_type __d, char_type __t, const string& __g)
{
_M_decimal_point = __d;
_M_thousands_sep = __t;
_M_grouping = __g;
}
};
template<typename _CharT>
class _Numpunct : public _Punct<_CharT>
{
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
public:
string_type
truename() const
{ return do_truename(); }
string_type
falsename() const
{ return do_falsename(); }
protected:
explicit
_Numpunct(size_t __refs = 0) : _Punct<_CharT> (__refs) { }
virtual
~_Numpunct() { }
virtual string_type
do_truename() const
{ return _M_truename; }
virtual string_type
do_falsename() const
{ return _M_falsename; }
private:
string_type _M_truename;
string_type _M_falsename;
protected:
void
_M_init_boolnames(const string_type& __t, const string_type& __f)
{
_M_truename = __t;
_M_falsename = __f;
}
};
template<typename _CharT>
class numpunct : public _Numpunct<_CharT>
{
public:
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
static locale::id id;
explicit
numpunct(size_t __refs = 0) : _Numpunct<_CharT>(__refs) { }
protected:
virtual
~numpunct() { }
};
template<>
numpunct<char>::numpunct(size_t __refs)
{
_M_init('.', ',', "");
_M_init_boolnames("false", "true");
}
template<>
numpunct<wchar_t>::numpunct(size_t __refs)
{
_M_init(L'.', L',', "");
_M_init_boolnames(L"false", L"true");
}
template<typename _CharT>
class numpunct_byname : public numpunct<_CharT>
{
public:
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
explicit
numpunct_byname(const char*, size_t __refs = 0)
: numpunct<_CharT> (__refs) { }
protected:
virtual
~numpunct_byname() { }
};
template<>
numpunct_byname<char>::numpunct_byname(const char*, size_t __refs);
template<>
numpunct_byname<wchar_t>::numpunct_byname(const char*, size_t __refs);
template<typename _CharT>
class _Collate : public locale::facet
{
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
public:
int
compare(const _CharT* __lo1, const _CharT* __hi1,
const _CharT* __lo2, const _CharT* __hi2) const
{ return do_compare(__lo1, __hi1, __lo2, __hi2); }
string_type
transform(const _CharT* __lo, const _CharT* __hi) const
{ return do_transform(__lo, __hi); }
long
hash(const _CharT* __lo, const _CharT* __hi) const
{ return do_hash(__lo, __hi); }
protected:
explicit
_Collate(size_t __refs = 0) : locale::facet(__refs) { }
~_Collate() { }
virtual int
do_compare(const _CharT* __lo1, const _CharT* __hi1,
const _CharT* __lo2, const _CharT* __hi2) const = 0;
virtual string_type
do_transform(const _CharT* __lo, const _CharT* __hi) const = 0;
virtual long
do_hash(const _CharT* __lo, const _CharT* __hi) const = 0;
};
template<typename _CharT>
class collate : public _Collate<_CharT>
{
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
public:
explicit
collate(size_t __refs = 0) : _Collate<_CharT> (__refs) { }
static locale::id id;
protected:
virtual
~collate() { }
};
template<>
class collate<char> : public _Collate<char>
{
typedef char char_type;
typedef basic_string<char> string_type;
public:
explicit
collate(size_t __refs = 0);
static locale::id id;
protected:
virtual
~collate();
virtual int
do_compare(const char* __lo1, const char* __hi1,
const char* __lo2, const char* __hi2) const;
virtual string_type
do_transform(const char* __lo, const char* __hi) const;
virtual long
do_hash(const char* __lo, const char* __hi) const;
};
template<>
class collate<wchar_t> : public _Collate<wchar_t>
{
typedef wchar_t char_type;
typedef basic_string<wchar_t> string_type;
public:
explicit
collate(size_t __refs = 0);
static locale::id id;
protected:
virtual
~collate();
virtual int
do_compare(const wchar_t* __lo1, const wchar_t* __hi1,
const wchar_t* __lo2, const wchar_t* __hi2) const;
virtual string_type
do_transform(const wchar_t* __lo, const wchar_t* __hi) const;
virtual long
do_hash(const wchar_t* __lo, const wchar_t* __hi) const;
};
template<typename _CharT>
class collate_byname : public collate<_CharT>
{
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
public:
explicit
collate_byname(const char*, size_t __refs = 0);
protected:
virtual
~collate_byname() { }
};
template<>
collate_byname<char>::collate_byname(const char*, size_t __refs);
template<>
collate_byname<wchar_t>::collate_byname (const char*, size_t __refs);
class time_base
{
public:
enum dateorder { no_order, dmy, mdy, ymd, ydm };
};
template<typename _CharT, typename _InIter>
class time_get : public locale::facet, public time_base
{
typedef _CharT char_type;
typedef _InIter iter_type;
public:
explicit
time_get(size_t __refs = 0)
: locale::facet (__refs), _M_daynames(0), _M_monthnames(0) { }
dateorder
date_order() const
{ return do_date_order(); }
iter_type
get_time(iter_type __s, iter_type __end, ios_base& __f,
ios_base::iostate& __err, tm* __t) const
{ return do_get_time(__s, __end, __f, __err, __t); }
iter_type
get_date(iter_type __s, iter_type __end, ios_base& __f,
ios_base::iostate& __err, tm* __t) const
{ return do_get_date(__s, __end, __f, __err, __t); }
iter_type
get_weekday(iter_type __s, iter_type __end, ios_base& __f,
ios_base::iostate& __err, tm* __t) const
{ return do_get_weekday(__s,__end,__f,__err,__t); }
iter_type
get_monthname(iter_type __s, iter_type __end, ios_base& __f,
ios_base::iostate& __err, tm* __t) const
{ return do_get_monthname(__s,__end,__f,__err,__t); }
iter_type
get_year(iter_type __s, iter_type __end, ios_base& __f,
ios_base::iostate& __err, tm* __t) const
{ return do_get_year(__s,__end,__f,__err,__t); }
static locale::id id;
protected:
virtual
~time_get()
{
delete [] _M_monthnames;
delete [] _M_daynames;
}
virtual dateorder
do_date_order() const
{ return time_base::ymd; }
virtual iter_type
do_get_time(iter_type __s, iter_type __end, ios_base&,
ios_base::iostate& __err, tm* __t) const
{ return __s; }
virtual iter_type
do_get_date(iter_type __s, iter_type __end, ios_base&,
ios_base::iostate& __err, tm* __t) const
{ return __s; }
virtual iter_type
do_get_weekday(iter_type __s, iter_type __end, ios_base&,
ios_base::iostate& __err, tm* __t) const;
virtual iter_type
do_get_monthname(iter_type __s, iter_type __end, ios_base&,
ios_base::iostate& __err, tm* __t) const;
virtual iter_type
do_get_year(iter_type __s, iter_type __end, ios_base&,
ios_base::iostate& __err, tm* __t) const
{ return __s; }
mutable basic_string<_CharT>* _M_daynames;
mutable basic_string<_CharT>* _M_monthnames;
};
template<typename _CharT, typename _InIter>
class time_get_byname : public time_get<_CharT, _InIter>
{
public:
typedef _CharT char_type;
typedef _InIter iter_type;
explicit
time_get_byname(const char*, size_t __refs = 0)
: time_get<_CharT, _InIter>(__refs) { }
protected:
virtual
~time_get_byname() { }
};
template<typename _CharT, typename _OutIter>
class time_put : public locale::facet, public time_base
{
public:
typedef _CharT char_type;
typedef _OutIter iter_type;
explicit
time_put(size_t __refs = 0) : locale::facet (__refs) { }
iter_type
put(iter_type __s, ios_base& __f, char_type __fill, const tm* __tmb,
const _CharT* __pattern, const _CharT* __pat_end) const
{ return __s; }
iter_type
put(iter_type __s, ios_base& __f, char_type __fill,
const tm* __tmb, char __format, char __modifier = 0) const
{ return do_put(__s, __f, __fill, __tmb, __format, __modifier); }
static locale::id id;
protected:
virtual
~time_put() { }
virtual iter_type
do_put(iter_type __s, ios_base&, char_type, const tm* __t,
char __format, char __mod) const
{ return __s; }
};
template<typename _CharT, typename _OutIter>
class time_put_byname : time_put<_CharT, _OutIter>
{
typedef _CharT char_type;
typedef _OutIter iter_type;
public:
explicit
time_put_byname(const char*, size_t __refs = 0)
: time_put<_CharT, _OutIter> (__refs) { }
protected:
virtual
~time_put_byname() { }
};
template<typename _CharT, typename _InIter>
class money_get : public locale::facet
{
typedef _CharT char_type;
typedef _InIter iter_type;
typedef basic_string<_CharT> string_type;
public:
explicit
money_get(size_t __refs = 0) : locale::facet(__refs) { }
iter_type
get(iter_type __s, iter_type __end, bool __intl,
ios_base& __f, ios_base::iostate& __err, long double& __units) const
{ return do_get(__s, __end, __intl, __f, __err, __units); }
iter_type
get(iter_type __s, iter_type __end, bool __intl, ios_base& __f,
ios_base::iostate& __err, string_type& __digits) const
{ return do_get(__s, __end, __intl, __f, __err, __digits); }
static locale::id id;
protected:
virtual
~money_get() { }
virtual iter_type
do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
ios_base::iostate& __err, long double& __units) const
{ return __s; }
virtual iter_type
do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
ios_base::iostate& __err, string_type& __digits) const
{ return __s; }
};
template<typename _CharT, typename _OutIter>
class money_put : public locale::facet
{
typedef _CharT char_type;
typedef _OutIter iter_type;
typedef basic_string<_CharT> string_type;
public:
explicit
money_put(size_t __refs = 0) : locale::facet(__refs) { }
iter_type
put(iter_type __s, bool __intl, ios_base& __f,
char_type __fill, long double __units) const
{ return do_put(__s, __intl, __f, __fill, __units); }
iter_type
put(iter_type __s, bool __intl, ios_base& __f,
char_type __fill, const string_type& __digits) const
{ return do_put(__s, __intl, __f, __fill, __digits); }
static locale::id id;
protected:
virtual
~money_put() { }
virtual iter_type
do_put(iter_type __s, bool, ios_base& __io, char_type __fill,
long double __units) const
{ return __s; }
virtual iter_type
do_put(iter_type __s, bool, ios_base& __io, char_type __fill,
const string_type& __digits) const
{ return __s; }
};
struct money_base
{
enum part { none, space, symbol, sign, value };
struct pattern { char field[4]; };
};
template<typename _CharT>
class _Moneypunct : public _Punct<_CharT>, public money_base
{
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
public:
string_type
curr_symbol() const
{ return do_curr_symbol(); }
string_type
positive_sign() const
{ return do_positive_sign(); }
string_type
negative_sign() const
{ return do_negative_sign(); }
int
frac_digits() const
{ return do_frac_digits(); }
pattern
pos_format() const
{ return do_pos_format(); }
pattern
neg_format() const
{ return do_neg_format(); }
protected:
explicit
_Moneypunct(size_t __refs = 0) : _Punct<_CharT> (__refs) { }
virtual
~_Moneypunct() { }
virtual string_type
do_curr_symbol() const
{ return basic_string<_CharT>(); }
virtual string_type
do_positive_sign() const
{ return basic_string<_CharT>(); }
virtual string_type
do_negative_sign() const
{ return basic_string<_CharT>(); }
virtual int
do_frac_digits() const
{ return 0; }
virtual pattern
do_pos_format() const
{
static const money_base::pattern __pat = {{symbol, sign, none, value}};
return __pat;
}
virtual pattern
do_neg_format() const
{
static const money_base::pattern __pat = {{symbol, sign, none, value}};
return __pat;
}
};
template<typename _CharT, bool _Intl>
class moneypunct : public _Moneypunct<_CharT>
{
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
public:
static const bool intl = _Intl;
static locale::id id;
explicit
moneypunct(size_t __refs = 0) : _Moneypunct<_CharT> (__refs) { }
protected:
virtual
~moneypunct() { }
};
template<typename _CharT, bool _Intl>
class moneypunct_byname : public moneypunct<_CharT,_Intl>
{
public:
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
static const bool intl = _Intl;
explicit
moneypunct_byname(const char*, size_t __refs = 0)
: moneypunct<_CharT,_Intl> (__refs) { }
protected:
virtual
~moneypunct_byname() { }
};
template<>
moneypunct_byname<char, false>::
moneypunct_byname(const char*, size_t __refs);
template<>
moneypunct_byname<char, true>::
moneypunct_byname(const char*, size_t __refs);
template<>
moneypunct_byname<wchar_t,false>::
moneypunct_byname(const char*, size_t __refs);
template<>
moneypunct_byname<wchar_t,true>::
moneypunct_byname (const char*, size_t __refs);
struct messages_base
{
typedef int catalog;
};
template<typename _CharT>
class _Messages : public locale::facet, public messages_base
{
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
public:
catalog
open(const basic_string<char>& __s, const locale& __loc) const
{ return do_open(__s, __loc); }
string_type
get(catalog __c, int __set, int __msgid, const string_type& __s) const
{ return do_get(__c,__set,__msgid,__s); }
void
close(catalog __c) const
{ return do_close(__c); }
protected:
explicit
_Messages(size_t __refs = 0) : locale::facet(__refs) { }
virtual
~_Messages() { }
virtual catalog
do_open(const basic_string<char>&, const locale&) const
{ return 0; }
virtual string_type
do_get(catalog, int, int __msgid, const string_type& __dfault) const
{ return __dfault; }
virtual void
do_close (catalog) const { }
};
template<typename _CharT>
class messages : public _Messages<_CharT>
{
public:
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
static locale::id id;
explicit
messages(size_t __refs = 0) : _Messages<_CharT> (__refs) { }
protected:
virtual
~messages() { }
};
template<typename _CharT>
class messages_byname : public messages<_CharT>
{
public:
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
explicit
messages_byname(const char*, size_t __refs = 0)
: messages<_CharT>(__refs) { }
protected:
virtual
~messages_byname() { }
};
template<>
messages_byname<char>::messages_byname(const char*, size_t __refs);
template<>
messages_byname<wchar_t>::messages_byname(const char*, size_t __refs);
template<typename _CharT>
inline bool
isspace(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::space, __c); }
template<typename _CharT>
inline bool
isprint(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::print, __c); }
template<typename _CharT>
inline bool
iscntrl(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::cntrl, __c); }
template<typename _CharT>
inline bool
isupper(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::upper, __c); }
template<typename _CharT>
inline bool islower(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::lower, __c); }
template<typename _CharT>
inline bool
isalpha(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::alpha, __c); }
template<typename _CharT>
inline bool
isdigit(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::digit, __c); }
template<typename _CharT>
inline bool
ispunct(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::punct, __c); }
template<typename _CharT>
inline bool
isxdigit(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::xdigit, __c); }
template<typename _CharT>
inline bool
isalnum(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::alnum, __c); }
template<typename _CharT>
inline bool
isgraph(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).is(ctype_base::graph, __c); }
template<typename _CharT>
inline _CharT
toupper(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).toupper(__c); }
template<typename _CharT>
inline _CharT
tolower(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> > (__loc).tolower(__c); }
}
# 70 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/basic_ios.h" 1 3
namespace std {
template<typename _CharT, typename _Traits>
class basic_ios : public ios_base
{
typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
typedef _Traits traits_type;
private:
char_type _M_fill;
basic_ostream<_CharT, _Traits>* _M_tie;
protected:
basic_streambuf<_CharT, _Traits>* _M_streambuf;
public:
operator void*() const
{ return fail() ? 0 : const_cast<basic_ios*>(this); }
bool
operator!() const
{ return fail(); }
iostate
rdstate() const
{ return ios_base::_M_rdstate(); }
void
clear(iostate __state = goodbit)
{
if (this->rdbuf())
ios_base::_M_clear(__state);
else
ios_base::_M_clear(__state | badbit);
}
void
setstate(iostate __state)
{ this->clear(rdstate() | __state); }
bool
good() const
{ return rdstate() == 0; }
bool
eof() const
{ return (rdstate() & eofbit) != 0; }
bool
fail() const
{ return (rdstate() & (badbit | failbit)) != 0; }
bool
bad() const
{ return (rdstate() & badbit) != 0; }
iostate
exceptions() const
{ return ios_base::_M_exceptions(); }
void
exceptions(iostate __except)
{ ios_base::_M_exceptions(__except); }
explicit
basic_ios(basic_streambuf<_CharT,_Traits>* __sb) : ios_base()
{ this->init(__sb); }
virtual
~basic_ios() { }
basic_ostream<_CharT, _Traits>*
tie() const
{ return _M_tie; }
basic_ostream<_CharT, _Traits>*
tie(basic_ostream<_CharT,_Traits>* __tiestr);
basic_streambuf<_CharT, _Traits>*
rdbuf() const
{ return _M_streambuf; }
basic_streambuf<_CharT, _Traits>*
rdbuf(basic_streambuf<_CharT,_Traits>* __sb);
basic_ios&
copyfmt(const basic_ios& __rhs);
char_type
fill() const
{ return _M_fill; }
char_type
fill(char_type __ch);
locale
imbue(const locale& __loc);
char
narrow(char_type __c, char __dfault) const;
char_type
widen(char __c) const;
protected:
basic_ios() : ios_base() { }
void
init(basic_streambuf<_CharT,_Traits>* __sb);
};
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>*
basic_ios<_CharT, _Traits>::tie(basic_ostream<_CharT, _Traits>* __tiestr)
{
basic_ostream<_CharT, _Traits>* __old = _M_tie;
_M_tie = __tiestr;
return __old;
}
template<typename _CharT, typename _Traits>
basic_streambuf<_CharT, _Traits>*
basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
{
basic_streambuf<_CharT, _Traits>* __old = _M_streambuf;
_M_streambuf = __sb;
return __old;
}
template<typename _CharT, typename _Traits>
basic_ios<_CharT, _Traits>&
basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs)
{
_M_copy_base(const_cast<basic_ios&> (__rhs));
tie (__rhs.tie());
fill (__rhs.fill());
exceptions(__rhs.exceptions());
_M_call_callbacks(copyfmt_event);
return *this;
}
template<typename _CharT, typename _Traits>
_CharT
basic_ios<_CharT, _Traits>::fill(char_type __ch)
{
char_type __old = _M_fill;
_M_fill = __ch;
return __old;
}
template<typename _CharT, typename _Traits>
locale
basic_ios<_CharT, _Traits>::imbue(const locale& __loc)
{
locale __old (getloc());
ios_base::imbue(__loc);
if (rdbuf() != 0)
rdbuf()->pubimbue(__loc);
_M_call_callbacks(imbue_event);
return __old;
}
template<typename _CharT, typename _Traits>
char
basic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const
{ return _M_streambuf->_M_fctype->narrow(__c, __dfault); }
template<typename _CharT, typename _Traits>
_CharT
basic_ios<_CharT, _Traits>::widen(char __c) const
{
return _M_streambuf->_M_fctype->widen(__c);
}
template<typename _CharT, typename _Traits>
void
basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
{
ios_base::_M_init();
_M_streambuf = __sb;
_M_tie = 0;
_M_fill = widen(' ');
}
}
# 71 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ios.h" 2 3
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ostream.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/sbuf_iter.h" 1 3
namespace std
{
template<typename _CharT, typename _Traits>
class ostreambuf_iterator
: public output_iterator
{
typedef _CharT char_type;
typedef _Traits traits_type;
typedef basic_streambuf<_CharT, _Traits> streambuf_type;
typedef basic_ostream<_CharT, _Traits> ostream_type;
public:
inline
ostreambuf_iterator(ostream_type& __s) throw ()
: _M_sbuf(__s.rdbuf()), _M_failed(false) { }
ostreambuf_iterator(streambuf_type* __s) throw ()
: _M_sbuf(__s), _M_failed(false) { }
ostreambuf_iterator&
operator=(_CharT __c);
ostreambuf_iterator&
operator*() throw()
{ return *this; }
ostreambuf_iterator&
operator++(int) throw()
{ return *this; }
ostreambuf_iterator&
operator++() throw()
{ return *this; }
bool
failed() const throw()
{ return _M_failed; }
private:
streambuf_type* _M_sbuf;
bool _M_failed;
# 92 "/home/staff/nathan/solaris/local/include/g++-v3/bits/sbuf_iter.h" 3
};
template<typename _CharT, typename _Traits>
inline ostreambuf_iterator<_CharT, _Traits>&
ostreambuf_iterator<_CharT, _Traits>::operator=(_CharT __c)
{
if (!_M_failed &&
_Traits::eq_int_type(_M_sbuf->sputc(__c),_Traits::eof()))
_M_failed = true;
return *this;
}
# 131 "/home/staff/nathan/solaris/local/include/g++-v3/bits/sbuf_iter.h" 3
template<class _CharT, class _Traits>
class istreambuf_iterator
: public iterator<input_iterator_tag, _CharT, typename _Traits::off_type,
_CharT*, _CharT&>
{
typedef _CharT char_type;
typedef _Traits traits_type;
typedef typename _Traits::int_type int_type;
typedef basic_streambuf<_CharT, _Traits> streambuf_type;
typedef basic_istream<_CharT, _Traits> istream_type;
typedef istreambuf_iterator<_CharT, _Traits> __istreambufiter_type;
public:
istreambuf_iterator() throw()
: _M_streambuf(__null ), _M_c(-2) { }
istreambuf_iterator(istream_type& __s) throw()
: _M_streambuf(__s.rdbuf()), _M_c(-2) { }
istreambuf_iterator(streambuf_type* __s) throw()
: _M_streambuf(__s), _M_c(-2) { }
char_type
operator*() const
{
char_type __retval;
if (_M_streambuf && _M_c > -2)
__retval = _M_c;
else if (_M_streambuf)
__retval = traits_type::to_char_type(_M_streambuf->sgetc());
else
__retval = static_cast<char_type>(traits_type::eof());
return __retval;
}
__istreambufiter_type&
operator++()
{
if (_M_streambuf)
_M_streambuf->sbumpc();
_M_c = -2;
return *this;
}
const __istreambufiter_type
operator++(int)
{
if (_M_streambuf)
_M_c = _M_streambuf->sbumpc();
return *this;
}
bool
equal(const istreambuf_iterator& __b)
{
int_type __eof = traits_type::eof();
bool __thiseof = !_M_streambuf || _M_streambuf->sgetc() == __eof;
bool __beof = !__b._M_streambuf || __b._M_streambuf->sgetc() ==__eof;
return (__thiseof && __beof || (!__thiseof && !__beof));
}
bool
equal(const istreambuf_iterator& __b) const
{
int_type __eof = traits_type::eof();
bool __thiseof = !_M_streambuf || _M_streambuf->sgetc() == __eof;
bool __beof = !__b._M_streambuf || __b._M_streambuf->sgetc() ==__eof;
return (__thiseof && __beof || (!__thiseof && !__beof));
}
private:
streambuf_type* _M_streambuf;
int_type _M_c;
};
template<typename _CharT, typename _Traits>
inline bool
operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
const istreambuf_iterator<_CharT, _Traits>& __b)
{ return __a.equal(__b); }
template<typename _CharT, typename _Traits>
inline bool
operator!=(const istreambuf_iterator<_CharT, _Traits>& __a,
const istreambuf_iterator<_CharT, _Traits>& __b)
{ return !__a.equal(__b); }
}
# 39 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ostream.h" 2 3
namespace std {
template<typename _CharT, typename _Traits>
class basic_ostream : virtual public basic_ios<_CharT, _Traits>
{
typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
typedef _Traits traits_type;
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef basic_ios<_CharT, _Traits> __ios_type;
typedef basic_ostream<_CharT, _Traits> __ostream_type;
typedef ostreambuf_iterator<_CharT> __ostreambuf_iter;
typedef num_put<_CharT, __ostreambuf_iter> __numput_type;
protected:
const __numput_type* _M_fnumput;
public:
explicit
basic_ostream(__streambuf_type* __sb) : __ios_type(__sb)
{
_M_fnumput = &use_facet<__numput_type>(this->getloc());
}
explicit
basic_ostream()
{
_M_fnumput = &use_facet<__numput_type>(this->getloc());
}
virtual
~basic_ostream()
{ _M_fnumput = __null ; }
class sentry;
friend class sentry;
__ostream_type&
operator<<(__ostream_type& (*__pf)(__ostream_type&))
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
try {
__pf(*this);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__ostream_type&
operator<<(__ios_type& (*__pf)(__ios_type&))
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
try {
__pf(*this);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__ostream_type&
operator<<(ios_base& (*__pf) (ios_base&))
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
try {
__pf(*this);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__ostream_type&
operator<<(long __n);
__ostream_type&
operator<<(unsigned long __n);
__ostream_type&
operator<<(bool __n);
__ostream_type&
operator<<(short __n)
{ return operator<<(static_cast<long>(__n)); }
__ostream_type&
operator<<(unsigned short __n)
{ return operator<<(static_cast<unsigned long>(__n)); }
__ostream_type&
operator<<(int __n)
{ return operator<<(static_cast<long>(__n)); }
__ostream_type&
operator<<(unsigned int __n)
{ return operator<<(static_cast<unsigned long>(__n)); }
__ostream_type&
operator<<(double __f);
__ostream_type&
operator<<(float __f)
{ return operator<<(static_cast<double>(__f)); }
__ostream_type&
operator<<(long double __f);
__ostream_type&
operator<<(const void* __p);
__ostream_type&
operator<<(__streambuf_type* __sb);
__ostream_type&
put(char_type __c);
__ostream_type&
write(const char_type* __s, streamsize __n);
__ostream_type&
flush();
pos_type
tellp();
__ostream_type&
seekp(pos_type);
__ostream_type&
seekp(off_type, ios_base::seekdir);
};
template <typename _CharT, typename _Traits>
class basic_ostream<_CharT, _Traits>::sentry
{
bool _M_ok;
basic_ostream<_CharT,_Traits>& _M_ostr;
public:
explicit
sentry(basic_ostream<_CharT,_Traits>& __os)
: _M_ok(__os.good()), _M_ostr(__os)
{
if (_M_ok && __os.tie())
__os.tie()->flush();
}
~sentry()
{
if (_M_ostr.flags() & ios_base::unitbuf && ! uncaught_exception())
_M_ostr.flush();
}
operator bool()
{ return _M_ok; }
};
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
{
typedef basic_ostream<_CharT, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.put(widen(__c));
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __out;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
{
typedef basic_ostream<_CharT, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.put(__c);
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __out;
}
template <class _Traits>
basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, char __c)
{
typedef basic_ostream<char, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.put(__c);
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __out;
}
template<class _Traits>
basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
{
typedef basic_ostream<char, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.put(static_cast<char>(__c));
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __out;
}
template<class _Traits>
basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
{
typedef basic_ostream<char, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.put(static_cast<char>(__c));
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __out;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
{
typedef basic_ostream<_CharT, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.write(__s, _Traits::length(__s));
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __out;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits> &
operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s)
{
typedef basic_ostream<_CharT, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.write(__out.widen(__s), _Traits::length(__s));
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __out;
}
template<class _Traits>
basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
{
typedef basic_ostream<char, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.write(__s, _Traits::length(__s));
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __out;
}
template<class _Traits>
basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
{
typedef basic_ostream<char, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.write(static_cast<const char*>(__s), _Traits::length(__s));
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
}
template<class _Traits>
basic_ostream<char, _Traits> &
operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
{
typedef basic_ostream<char, _Traits> __ostream_type;
__ostream_type::sentry __cerb(__out);
if (__cerb)
{
try {
__out.write(static_cast<const char*>(__s), _Traits::length(__s));
}
catch(exception& __fail){
__out.setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
throw;
}
}
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
endl(basic_ostream<_CharT, _Traits>& __os)
{ return flush(__os.put(__os.widen('\n'))); }
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
ends(basic_ostream<_CharT, _Traits>& __os)
{ return __os.put(_Traits::eos()); }
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
flush(basic_ostream<_CharT, _Traits>& __os)
{ return __os.flush(); }
}
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/ostream.tcc" 1 3
namespace std {
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::operator<<(bool __n)
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
try {
if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::operator<<(long __n)
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
try {
if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::operator<<(unsigned long __n)
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
try {
if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
# 144 "/home/staff/nathan/solaris/local/include/g++-v3/bits/ostream.tcc" 3
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::operator<<(double __n)
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
try {
if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::operator<<(long double __n)
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
try {
if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::operator<<(const void* __n)
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
try {
if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sb)
{
__ostream_type::sentry __cerb(*this);
if (__sb && __cerb)
{
streamsize __num = __sb->in_avail();
if (__num > 0)
{
char_type __buf[__num];
try {
__sb->sgetn(__buf, __num);
}
catch(...) {
this->setstate(ios_base::failbit);
if ((this->exceptions() & ios_base::failbit) != 0)
throw;
}
if (_M_fnumput->put(*this, *this, this->fill(), __buf).failed())
this->setstate(ios_base::failbit);
}
else
this->setstate(ios_base::failbit);
}
else
this->setstate(ios_base::badbit);
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::put(char_type __c)
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
int_type __put = rdbuf()->sputc(__c);
if (__put != traits_type::to_int_type(__c))
this->setstate(ios_base::badbit);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::write(const _CharT* __s, streamsize __n)
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
streamsize __put = this->rdbuf()->sputn(__s, __n);
if ( __put != __n)
this->setstate(ios_base::badbit);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::flush()
{
__ostream_type::sentry __cerb(*this);
if (__cerb)
{
if (this->rdbuf() && this->rdbuf()->pubsync() == -1)
this->setstate(ios_base::badbit);
}
return *this;
}
template<typename _CharT, typename _Traits>
typename basic_ostream<_CharT, _Traits>::pos_type
basic_ostream<_CharT, _Traits>::tellp()
{
pos_type __retval = pos_type(-1);
bool __testok = this->fail() != true;
if (__testok)
__retval = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
return __retval;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::seekp(pos_type __pos)
{
bool __testok = this->fail() != true;
if (__testok)
this->rdbuf()->pubseekpos(__pos);
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::seekp(off_type __off,
ios_base::seekdir __dir)
{
bool __testok = this->fail() != true;
if (__testok)
rdbuf()->pubseekoff(__off, __dir);
return *this;
}
}
# 505 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_ostream.h" 2 3
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_iostream.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_istream.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_limits.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 1 3
# 1 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 1 3 4
# 114 "/home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/include/limits.h" 3 4
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_climits.h" 2 3
# 25 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_limits.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cfloat.h" 1 3
# 1 "/usr/include/float.h" 1 3 4
#pragma ident "@(#)float.h 1.13 94/07/29 SMI"
extern "C" {
extern int __flt_rounds(void);
# 35 "/usr/include/float.h" 3 4
# 71 "/usr/include/float.h" 3 4
}
# 38 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_cfloat.h" 2 3
# 26 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_limits.h" 2 3
namespace std {
enum float_round_style {
round_indeterminate = -1,
round_toward_zero = 0,
round_to_nearest = 1,
round_toward_infinity = 2,
round_toward_neg_infinity = 3
};
enum float_denorm_style {
denorm_indeterminate = -1,
denorm_absent = 0,
denorm_present = 1
};
template <class __number>
class _Numeric_limits_base {
public:
static const bool is_specialized = false;
static __number min() throw() { return __number(); }
static __number max() throw() { return __number(); }
static const int digits = 0;
static const int digits10 = 0;
static const bool is_signed = false;
static const bool is_integer = false;
static const bool is_exact = false;
static const int radix = 0;
static __number epsilon() throw() { return __number(); }
static __number round_error() throw() { return __number(); }
static const int min_exponent = 0;
static const int min_exponent10 = 0;
static const int max_exponent = 0;
static const int max_exponent10 = 0;
static const bool has_infinity = false;
static const bool has_quiet_NaN = false;
static const bool has_signaling_NaN = false;
static const float_denorm_style has_denorm = denorm_absent;
static const bool has_denorm_loss = false;
static __number infinity() throw() { return __number(); }
static __number quiet_NaN() throw() { return __number(); }
static __number signaling_NaN() throw() { return __number(); }
static __number denorm_min() throw() { return __number(); }
static const bool is_iec559 = false;
static const bool is_bounded = false;
static const bool is_modulo = false;
static const bool traps = false;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
template <class __number> const bool _Numeric_limits_base<__number>:: is_specialized ;
template <class __number> const int _Numeric_limits_base<__number>:: digits ;
template <class __number> const int _Numeric_limits_base<__number>:: digits10 ;
template <class __number> const bool _Numeric_limits_base<__number>:: is_signed ;
template <class __number> const bool _Numeric_limits_base<__number>:: is_integer ;
template <class __number> const bool _Numeric_limits_base<__number>:: is_exact ;
template <class __number> const int _Numeric_limits_base<__number>:: radix ;
template <class __number> const int _Numeric_limits_base<__number>:: min_exponent ;
template <class __number> const int _Numeric_limits_base<__number>:: max_exponent ;
template <class __number> const int _Numeric_limits_base<__number>:: min_exponent10 ;
template <class __number> const int _Numeric_limits_base<__number>:: max_exponent10 ;
template <class __number> const bool _Numeric_limits_base<__number>:: has_infinity ;
template <class __number> const bool _Numeric_limits_base<__number>:: has_quiet_NaN ;
template <class __number> const bool _Numeric_limits_base<__number>:: has_signaling_NaN ;
template <class __number> const float_denorm_style _Numeric_limits_base<__number>:: has_denorm ;
template <class __number> const bool _Numeric_limits_base<__number>:: has_denorm_loss ;
template <class __number> const bool _Numeric_limits_base<__number>:: is_iec559 ;
template <class __number> const bool _Numeric_limits_base<__number>:: is_bounded ;
template <class __number> const bool _Numeric_limits_base<__number>:: is_modulo ;
template <class __number> const bool _Numeric_limits_base<__number>:: traps ;
template <class __number> const bool _Numeric_limits_base<__number>:: tinyness_before ;
template <class __number> const float_round_style _Numeric_limits_base<__number>:: round_style ;
template <class _Int,
_Int __imin,
_Int __imax,
int __idigits = -1>
class _Integer_limits : public _Numeric_limits_base<_Int>
{
public:
static const bool is_specialized = true;
static _Int min() throw() { return __imin; }
static _Int max() throw() { return __imax; }
static const int digits =
(__idigits < 0) ? sizeof(_Int) * 8 - (__imin == 0 ? 0 : 1)
: __idigits;
static const int digits10 = (digits * 301) / 1000;
static const bool is_signed = __imin != 0;
static const bool is_integer = true;
static const bool is_exact = true;
static const int radix = 2;
static const bool is_bounded = true;
static const bool is_modulo = true;
};
template <class _Int, _Int __imin, _Int __imax, int __idigits> const bool _Integer_limits<_Int, __imin, __imax, __idigits>:: is_specialized ;
template <class _Int, _Int __imin, _Int __imax, int __idigits> const int _Integer_limits<_Int, __imin, __imax, __idigits>:: digits ;
template <class _Int, _Int __imin, _Int __imax, int __idigits> const int _Integer_limits<_Int, __imin, __imax, __idigits>:: digits10 ;
template <class _Int, _Int __imin, _Int __imax, int __idigits> const bool _Integer_limits<_Int, __imin, __imax, __idigits>:: is_signed ;
template <class _Int, _Int __imin, _Int __imax, int __idigits> const bool _Integer_limits<_Int, __imin, __imax, __idigits>:: is_integer ;
template <class _Int, _Int __imin, _Int __imax, int __idigits> const bool _Integer_limits<_Int, __imin, __imax, __idigits>:: is_exact ;
template <class _Int, _Int __imin, _Int __imax, int __idigits> const int _Integer_limits<_Int, __imin, __imax, __idigits>:: radix ;
template <class _Int, _Int __imin, _Int __imax, int __idigits> const bool _Integer_limits<_Int, __imin, __imax, __idigits>:: is_bounded ;
template <class _Int, _Int __imin, _Int __imax, int __idigits> const bool _Integer_limits<_Int, __imin, __imax, __idigits>:: is_modulo ;
template <class __number,
int __Digits, int __Digits10,
int __MinExp, int __MaxExp,
int __MinExp10, int __MaxExp10,
unsigned int __InfinityWord,
unsigned int __QNaNWord, unsigned int __SNaNWord,
bool __IsIEC559,
float_round_style __RoundStyle>
class _Floating_limits : public _Numeric_limits_base<__number>
{
public:
static const bool is_specialized = true;
static const int digits = __Digits;
static const int digits10 = __Digits10;
static const bool is_signed = true;
static const int radix = 2;
static const int min_exponent = __MinExp;
static const int max_exponent = __MaxExp;
static const int min_exponent10 = __MinExp10;
static const int max_exponent10 = __MaxExp10;
static const bool has_infinity = true;
static const bool has_quiet_NaN = true;
static const bool has_signaling_NaN = true;
static const float_denorm_style has_denorm = denorm_indeterminate;
static const bool has_denorm_loss = false;
static __number infinity() throw() {
static unsigned int _S_inf[sizeof(__number) / sizeof(int)] =
{ __InfinityWord };
return *reinterpret_cast<__number*>(&_S_inf);
}
static __number quiet_NaN() throw() {
static unsigned int _S_nan[sizeof(__number) / sizeof(int)] =
{ __QNaNWord };
return *reinterpret_cast<__number*>(&_S_nan);
}
static __number signaling_NaN() throw() {
static unsigned int _S_nan[sizeof(__number) / sizeof(int)] =
{ __SNaNWord };
return *reinterpret_cast<__number*>(&_S_nan);
}
static const bool is_iec559 = __IsIEC559;
static const bool is_bounded = true;
static const bool traps = true;
static const bool tinyness_before = false;
static const float_round_style round_style = __RoundStyle;
};
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: is_specialized ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const int _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: digits ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const int _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: digits10 ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: is_signed ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const int _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: radix ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const int _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: min_exponent ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const int _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: max_exponent ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const int _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: min_exponent10 ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const int _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: max_exponent10 ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: has_infinity ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: has_quiet_NaN ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: has_signaling_NaN ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const float_denorm_style _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: has_denorm ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: has_denorm_loss ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: is_iec559 ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: is_bounded ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: traps ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const bool _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: tinyness_before ;
template <class __Num, int __Dig, int __Dig10, int __MnX, int __MxX, int __MnX10, int __MxX10, unsigned int __Inf, unsigned int __QNaN, unsigned int __SNaN, bool __IsIEEE, float_round_style __Sty> const float_round_style _Floating_limits<__Num, __Dig, __Dig10, __MnX, __MxX, __MnX10, __MxX10, __Inf, __QNaN, __SNaN,__IsIEEE, __Sty>:: round_style ;
template<class T>
class numeric_limits : public _Numeric_limits_base<T> {};
template<>
class numeric_limits<bool>
: public _Integer_limits<bool, false, true, 0>
{};
template<>
class numeric_limits<char>
: public _Integer_limits<char, (-128) , 127 >
{};
template<>
class numeric_limits<signed char>
: public _Integer_limits<signed char, (-128) , 127 >
{};
template<>
class numeric_limits<unsigned char>
: public _Integer_limits<unsigned char, 0, 255 >
{};
template<>
class numeric_limits<wchar_t>
: public _Integer_limits<wchar_t, (- 2147483647 -1) , 2147483647 >
{};
template<>
class numeric_limits<short>
: public _Integer_limits<short, (-32767-1) , 32767 >
{};
template<>
class numeric_limits<unsigned short>
: public _Integer_limits<unsigned short, 0, 65535 >
{};
template<>
class numeric_limits<int>
: public _Integer_limits<int, (- 2147483647 -1) , 2147483647 >
{};
template<>
class numeric_limits<unsigned int>
: public _Integer_limits<unsigned int, 0, (2147483647 * 2U + 1) >
{};
template<>
class numeric_limits<long>
: public _Integer_limits<long, (- 2147483647L -1) , 2147483647L >
{};
template<>
class numeric_limits<unsigned long>
: public _Integer_limits<unsigned long, 0, (2147483647L * 2UL + 1) >
{};
# 342 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_limits.h" 3
template<> class numeric_limits<float>
: public _Floating_limits<float,
24 ,
6 ,
(-125) ,
(+128) ,
(-37) ,
(+38) ,
0x7f800000u,
0x7f810000u,
0x7fc10000u,
true,
round_to_nearest>
{
public:
static float min() throw() { return 1.175494351E-38F ; }
static float denorm_min() throw() { return 1.175494351E-38F ; }
static float max() throw() { return 3.402823466E+38F ; }
static float epsilon() throw() { return 1.192092896E-07F ; }
static float round_error() throw() { return 0.5f; }
};
template<> class numeric_limits<double>
: public _Floating_limits<double,
53 ,
15 ,
(-1021) ,
(+1024) ,
(-307) ,
(+308) ,
0x7ff00000u,
0x7ff10000u,
0x7ff90000u,
true,
round_to_nearest>
{
public:
static double min() throw() { return 2.2250738585072014E-308 ; }
static double denorm_min() throw() { return 2.2250738585072014E-308 ; }
static double max() throw() { return 1.7976931348623157E+308 ; }
static double epsilon() throw() { return 2.2204460492503131E-16 ; }
static double round_error() throw() { return 0.5; }
};
template<> class numeric_limits<long double>
: public _Floating_limits<long double,
113 ,
33 ,
(-16381) ,
(+16384) ,
(-4931) ,
(+4932) ,
0x7ff00000u,
0x7ff10000u,
0x7ff90000u,
false,
round_to_nearest>
{
public:
static long double min() throw() { return 3.362103143112093506262677817321752603E-4932L ; }
static long double denorm_min() throw() { return 3.362103143112093506262677817321752603E-4932L ; }
static long double max() throw() { return 1.189731495357231765085759326628007016E+4932L ; }
static long double epsilon() throw() { return 1.925929944387235853055977942584927319E-34L ; }
static long double round_error() throw() { return 4; }
};
}
# 40 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_istream.h" 2 3
namespace std {
template<typename _CharT, typename _Traits>
class basic_istream : virtual public basic_ios<_CharT, _Traits>
{
typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
typedef _Traits traits_type;
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef basic_ios<_CharT, _Traits> __ios_type;
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef istreambuf_iterator<_CharT> __istreambuf_iter;
typedef num_get<_CharT, __istreambuf_iter> __numget_type;
protected:
streamsize _M_gcount;
const __numget_type* _M_fnumget;
public:
explicit
basic_istream(__streambuf_type* __sb) : __ios_type(__sb)
{
_M_gcount = streamsize(0);
_M_fnumget = &use_facet<__numget_type>(this->getloc());
}
explicit
basic_istream()
{
_M_gcount = streamsize(0);
_M_fnumget = &use_facet<__numget_type>(this->getloc());
}
virtual
~basic_istream()
{
_M_gcount = streamsize(0);
_M_fnumget = __null ;
}
class sentry;
friend class sentry;
__istream_type&
operator>>(__istream_type& (*__pf)(__istream_type&))
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
__pf(*this);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__istream_type&
operator>>(__ios_type& (*__pf)(__ios_type&))
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
__pf(*this);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__istream_type&
operator>>(ios_base& (*__pf)(ios_base&))
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
__pf(*this);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__istream_type&
operator>>(bool& __n);
__istream_type&
operator>>(short& __n);
__istream_type&
operator>>(unsigned short& __n);
__istream_type&
operator>>(int& __n);
__istream_type&
operator>>(unsigned int& __n);
__istream_type&
operator>>(long& __n);
__istream_type&
operator>>(unsigned long& __n);
__istream_type&
operator>>(float& __f);
__istream_type&
operator>>(double& __f);
__istream_type&
operator>>(long double& __f);
__istream_type&
operator>>(void*& __p);
__istream_type&
operator>>(__streambuf_type* __sb);
streamsize
gcount() const
{ return _M_gcount; }
int_type
get()
{
sentry __cerb(*this);
int_type __eof = traits_type::eof();
int_type __retval;
_M_gcount = 0;
if (__cerb)
{
try {
__retval = this->rdbuf()->sbumpc();
if (__retval != __eof)
_M_gcount = 1;
else
this->setstate(ios_base::eofbit | ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
else
__retval = __eof;
return __retval;
}
__istream_type&
get(char_type& __c)
{
sentry __cerb(*this);
int_type __eof = traits_type::eof();
int_type __bufval;
_M_gcount = 0;
if (__cerb)
{
try {
__bufval = this->rdbuf()->sbumpc();
if (__bufval != __eof)
{
_M_gcount = 1;
__c = traits_type::to_char_type(__bufval);
}
else
this->setstate(ios_base::eofbit | ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__istream_type&
get(char_type* __s, streamsize __n, char_type __delim)
{
sentry __cerb(*this);
int_type __eof = traits_type::eof();
_M_gcount = 0;
if (__cerb)
{
try {
for (; _M_gcount < __n; ++_M_gcount)
{
int_type __bufval = this->rdbuf()->sbumpc();
if (__bufval == __eof)
{
this->setstate(ios_base::eofbit | ios_base::failbit);
break;
}
if (this->rdbuf()->_M_fctype->is(__delim, __bufval))
{
this->rdbuf()->sputbackc(__bufval);
break;
}
*__s = traits_type::to_char_type(__bufval);
++__s;
}
if (!_M_gcount)
this->setstate(ios_base::failbit);
*__s = char_type(__null );
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__istream_type&
get(char_type* __s, streamsize __n)
{ return get(__s, __n, widen('\n')); }
__istream_type&
get(__streambuf_type& __sb, char_type __delim)
{
sentry __cerb(*this);
_M_gcount = 0;
if (__cerb)
{
try {
int_type __eof = traits_type::eof();
__streambuf_type* __this_sb = this->rdbuf();
streamsize __n = __this_sb->in_avail();
for (; _M_gcount < __n; ++_M_gcount)
{
int_type __bufval = __this_sb->sbumpc();
if (__bufval == __eof)
{
this->setstate(ios_base::eofbit);
break;
}
__bufval = traits_type::to_char_type(__bufval);
if (__this_sb->_M_fctype->is(__delim, __bufval))
{
__this_sb->sputbackc(__bufval);
break;
}
int_type __g = __sb.sputc(__bufval);
if (__g == __eof)
{
__this_sb->sputbackc(__bufval);
break;
}
}
}
catch(exception& __fail){
}
if (!_M_gcount)
this->setstate(ios_base::failbit);
}
return *this;
}
__istream_type&
get(__streambuf_type& __sb)
{ return get(__sb, widen('\n')); }
__istream_type&
getline(char_type* __s, streamsize __n, char_type __delim)
{
sentry __cerb(*this);
int_type __eof = traits_type::eof();
_M_gcount = 0;
if (__cerb)
{
try {
for (; _M_gcount < __n; ++_M_gcount)
{
int_type __bufval = this->rdbuf()->sbumpc();
if (__bufval == __eof)
{
this->setstate(ios_base::eofbit);
break;
}
if (this->rdbuf()->_M_fctype->is(__delim, __bufval))
{
this->rdbuf()->sputbackc(__bufval);
break;
}
*__s = traits_type::to_char_type(__bufval);
++__s;
}
if (!_M_gcount || _M_gcount == __n - 1)
this->setstate(ios_base::failbit);
*__s = char_type(__null );
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__istream_type&
getline(char_type* __s, streamsize __n)
{ return getline(__s, __n, widen('\n')); }
__istream_type&
ignore(streamsize __n = 1, int_type __delim = traits_type::eof())
{
sentry __cerb(*this);
int_type __eof = traits_type::eof();
_M_gcount = 0;
if (__cerb && __n != numeric_limits<int>::max())
{
try {
for (; _M_gcount < __n; ++_M_gcount)
{
int_type __bufval = this->rdbuf()->sbumpc();
if (__bufval == __eof)
{
this->setstate(ios_base::eofbit);
break;
}
if (this->rdbuf()->_M_fctype->is(__delim, __bufval))
break;
}
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
int_type
peek()
{
sentry __cerb(*this);
int_type __retval = traits_type::eof();
_M_gcount = 0;
if (__cerb && this->good())
{
try {
__retval = this->rdbuf()->sgetc();
_M_gcount = 1;
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __retval;
}
__istream_type&
read(char_type* __s, streamsize __n)
{
sentry __cerb(*this);
int_type __eof = traits_type::eof();
_M_gcount = 0;
if (__cerb)
{
try {
if (this->good())
{
for (; _M_gcount <= __n; ++_M_gcount)
{
int_type __bufval = this->rdbuf()->sbumpc();
if (__bufval == __eof)
{
this->setstate(ios_base::eofbit | ios_base::failbit);
break;
}
*__s = traits_type::to_char_type(__bufval);
++__s;
}
}
else
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
streamsize
readsome(char_type* __s, streamsize __n)
{
sentry __cerb(*this);
int_type __eof = traits_type::eof();
_M_gcount = 0;
if (__cerb)
{
try {
if (this->good())
{
streamsize __num = this->rdbuf()->in_avail();
if (__num != __eof)
{
__num = min(__num, __n);
_M_gcount = this->rdbuf()->sgetn(__s, __num);
}
else
this->setstate(ios_base::eofbit);
}
else
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return _M_gcount;
}
__istream_type&
putback(char_type __c)
{
sentry __cerb(*this);
int_type __eof = traits_type::eof();
_M_gcount = 0;
if (__cerb)
{
try {
if (this->good())
{
__streambuf_type* __sb = this->rdbuf();
if (!__sb || __eof == __sb->sputbackc(__c))
this->setstate(ios_base::badbit);
}
else
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
__istream_type&
unget()
{
sentry __cerb(*this);
int_type __eof = traits_type::eof();
_M_gcount = 0;
if (__cerb)
{
try {
if (this->good())
{
__streambuf_type* __sb = this->rdbuf();
if (!__sb || __eof == __sb->sungetc())
this->setstate(ios_base::badbit);
}
else
this->setstate(ios_base::failbit);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
int
sync();
pos_type
tellg();
__istream_type&
seekg(pos_type);
__istream_type&
seekg(off_type, ios_base::seekdir);
};
template<typename _CharT, typename _Traits>
class basic_istream<_CharT, _Traits>::sentry
{
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef _Traits traits_type;
typedef typename _Traits::int_type __int_type;
bool _M_ok;
public:
explicit
sentry (basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
operator bool() { return _M_ok; }
};
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>::sentry::
sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws)
{
if (!__is.good())
{
_M_ok = false;
return;
}
if (__is.tie())
__is.tie()->flush();
if (!__noskipws && (__is.flags() & ios_base::skipws))
{
__streambuf_type* __streambuf = __is.rdbuf();
__int_type __c = __streambuf->sgetc();
__int_type __eof = traits_type::eof();
while (__c != __eof
&& ::isspace(__c))
__c = __is.rdbuf()->snextc();
}
_M_ok = true;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
{
typedef basic_istream<char, _Traits> __istream_type;
__istream_type::sentry __cerb(__in);
if (__cerb)
{
try {
__in.get(__c);
}
catch(exception& __fail){
__in.setstate(ios_base::badbit);
if ((__in.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __in;
}
template<class _Traits>
basic_istream<char, _Traits>&
operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
{
typedef basic_istream<char, _Traits> __istream_type;
typedef unsigned char char_type;
__istream_type::sentry __cerb(__in);
if (__cerb)
{
try {
char_type __tmp;
__in.get(__tmp);
__c = _Traits::narrow(__tmp, 0);
}
catch(exception& __fail){
__in.setstate(ios_base::badbit);
if ((__in.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __in;
}
template<class _Traits>
basic_istream<char, _Traits>&
operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
{
typedef basic_istream<char, _Traits> __istream_type;
typedef signed char char_type;
__istream_type::sentry __cerb(__in);
if (__cerb)
{
try {
char_type __tmp;
__in.get(__tmp);
__c = _Traits::narrow(__tmp,0);
}
catch(exception& __fail){
__in.setstate(ios_base::badbit);
if ((__in.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __in;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
{
typedef basic_istream<char, _Traits> __istream_type;
typedef typename _Traits::int_type int_type;
typedef _CharT char_type;
__istream_type::sentry __cerb(__out);
if (__cerb)
{
try {
streamsize __num = __in.width();
if (__num > 0)
__in.read(__c, __num);
else
{
bool __testeof;
bool __testspace;
bool __testnull;
char_type __tmp;
char_type __default;
int_type __eof = _Traits::eof();
do
{
__in.get(__tmp);
__testeof = __tmp == __eof;
__testspace = __in->_M_streambuf->_M_fctype->
is(ctype_base::space, __tmp);
__testnull = __tmp == __default;
if (!__testeof && !__testspace && !__testnull)
{
*__s = __tmp;
++__s;
}
}
while (!__testeof && !__testspace && !__testnull);
}
if (__num > 0)
__in.width(0);
else
__in.setstate(ios_base::failbit);
}
catch(exception& __fail){
__in.setstate(ios_base::badbit);
if ((__in.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __in;
}
template<class _Traits>
basic_istream<char,_Traits>&
operator>>(basic_istream<char,_Traits>& __in, unsigned char* __s)
{
typedef basic_istream<char, _Traits> __istream_type;
typedef typename _Traits::int_type int_type;
typedef unsigned char char_type;
__istream_type::sentry __cerb(__out);
if (__cerb)
{
try {
streamsize __num = __in.width();
if (__num > 0)
__in.read(__c, __num);
else
{
bool __testeof;
bool __testspace;
bool __testnull;
char_type __tmp;
char_type __default;
int_type __eof = _Traits::eof();
do
{
__in.get(__tmp);
__testeof = __tmp == __eof;
__testspace = __in->_M_streambuf->_M_fctype->is(space,
__tmp);
__testnull = __tmp == __default;
if (!__testeof && !__testspace && !__testnull)
{
*__s = __tmp;
++__s;
}
}
while (!__testeof && !__testspace && !__testnull);
}
if (__num > 0)
__in.width(0);
else
__in.setstate(ios_base::failbit);
}
catch(exception& __fail){
__in.setstate(ios_base::badbit);
if ((__in.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __in;
}
template<class _Traits>
basic_istream<char,_Traits>&
operator>>(basic_istream<char,_Traits>& __in, signed char* __s)
{
typedef basic_istream<char, _Traits> __istream_type;
typedef typename _Traits::int_type int_type;
typedef signed char char_type;
__istream_type::sentry __cerb(__out);
if (__cerb)
{
try {
streamsize __num = __in.width();
if (__num > 0)
__in.read(__c, __num);
else
{
bool __testeof;
bool __testspace;
bool __testnull;
char_type __tmp;
char_type __default;
int_type __eof = _Traits::eof();
do
{
__in.get(__tmp);
__testeof = __tmp == __eof;
__testspace = __in->_M_streambuf->_M_fctype->is(space,
__tmp);
__testnull = __tmp == __default;
if (!__testeof && !__testspace && !__testnull)
{
*__s = __tmp;
++__s;
}
}
while (!__testeof && !__testspace && !__testnull);
}
if (__num > 0)
__in.width(0);
else
__in.setstate(ios_base::failbit);
}
catch(exception& __fail){
__in.setstate(ios_base::badbit);
if ((__in.exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __in;
}
template<typename _CharT, typename _Traits>
class basic_iostream
: public basic_istream<_CharT, _Traits>,
public basic_ostream<_CharT, _Traits>
{
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef basic_ostream<_CharT, _Traits> __ostream_type;
public:
explicit
basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
: __istream_type(__sb), __ostream_type(__sb)
{ }
virtual
~basic_iostream() { }
};
}
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/istream.tcc" 1 3
namespace std {
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(bool& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(short& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(unsigned short& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(int& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(unsigned int& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(long& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(unsigned long& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
# 246 "/home/staff/nathan/solaris/local/include/g++-v3/bits/istream.tcc" 3
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(float& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(double& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(long double& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(void*& __n)
{
__istream_type::sentry __cerb(*this);
if (__cerb)
{
try {
iostate __err = iostate(0);
_M_fnumget->get(*this, 0, *this, __err, __n);
this->setstate(__err);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::operator>>(__streambuf_type* __sb)
{
__istream_type::sentry __cerb(*this);
if (__sb && __cerb)
{
streamsize __num = __sb->in_avail();
if (__num > 0)
{
char_type __buf[__num];
try {
__sb->sgetn(__buf, __num);
}
catch(...) {
this->setstate(ios_base::failbit);
if ((this->exceptions() & ios_base::failbit) != 0)
throw;
}
this->setstate(ios_base::failbit);
}
else
this->setstate(ios_base::failbit);
}
else
this->setstate(ios_base::badbit);
return *this;
}
template<typename _CharT, typename _Traits>
int
basic_istream<_CharT, _Traits>::sync()
{
sentry __cerb(*this);
int __retval = traits_type::eof();
_M_gcount = 0;
if (__cerb)
{
try {
__streambuf_type* __sb = this->rdbuf();
if (!__sb || __retval == __sb->pubsync())
this->setstate(ios_base::badbit);
else
__retval = 0;
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __retval;
}
template<typename _CharT, typename _Traits>
typename basic_istream<_CharT, _Traits>::pos_type
basic_istream<_CharT, _Traits>::tellg()
{
pos_type __retval = pos_type(-1);
bool __testok = this->fail() != true;
sentry __cerb(*this);
_M_gcount = 0;
if (__cerb)
{
try {
if (__testok)
__retval = this->rdbuf()->pubseekoff(0, ios_base::cur,
ios_base::in);
_M_gcount = __retval;
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return __retval;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::seekg(pos_type __pos)
{
bool __testok = this->fail() != true;
sentry __cerb(*this);
_M_gcount = 0;
if (__cerb)
{
try {
if (__testok)
_M_gcount = this->rdbuf()->pubseekpos(__pos);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::seekg(off_type __off,
ios_base::seekdir __dir)
{
bool __testok = this->fail() != true;
sentry __cerb(*this);
_M_gcount = 0;
if (__cerb)
{
try {
if (__testok)
_M_gcount = this->rdbuf()->pubseekoff(__off, __dir);
}
catch(exception& __fail){
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
throw;
}
}
return *this;
}
}
# 925 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_istream.h" 2 3
# 39 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_iostream.h" 2 3
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
}
# 49 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algobase.h" 2 3
namespace std {
template <class _ForwardIter1, class _ForwardIter2, class _Tp>
inline void __iter_swap(_ForwardIter1 __a, _ForwardIter2 __b, _Tp*) {
_Tp __tmp = *__a;
*__a = *__b;
*__b = __tmp;
}
template <class _ForwardIter1, class _ForwardIter2>
inline void iter_swap(_ForwardIter1 __a, _ForwardIter2 __b) {
__iter_swap(__a, __b, __value_type( __a ) );
}
template <class _Tp>
inline void swap(_Tp& __a, _Tp& __b) {
_Tp __tmp = __a;
__a = __b;
__b = __tmp;
}
template <class _Tp>
inline const _Tp& min(const _Tp& __a, const _Tp& __b) {
return __b < __a ? __b : __a;
}
template <class _Tp>
inline const _Tp& max(const _Tp& __a, const _Tp& __b) {
return __a < __b ? __b : __a;
}
template <class _Tp, class _Compare>
inline const _Tp& min(const _Tp& __a, const _Tp& __b, _Compare __comp) {
return __comp(__b, __a) ? __b : __a;
}
template <class _Tp, class _Compare>
inline const _Tp& max(const _Tp& __a, const _Tp& __b, _Compare __comp) {
return __comp(__a, __b) ? __b : __a;
}
template <class _InputIter, class _OutputIter, class _Distance>
inline _OutputIter __copy(_InputIter __first, _InputIter __last,
_OutputIter __result,
input_iterator_tag, _Distance*)
{
for ( ; __first != __last; ++__result, ++__first)
*__result = *__first;
return __result;
}
template <class _RandomAccessIter, class _OutputIter, class _Distance>
inline _OutputIter
__copy(_RandomAccessIter __first, _RandomAccessIter __last,
_OutputIter __result, random_access_iterator_tag, _Distance*)
{
for (_Distance __n = __last - __first; __n > 0; --__n) {
*__result = *__first;
++__first;
++__result;
}
return __result;
}
template <class _Tp>
inline _Tp*
__copy_trivial(const _Tp* __first, const _Tp* __last, _Tp* __result) {
memmove(__result, __first, sizeof(_Tp) * (__last - __first));
return __result + (__last - __first);
}
template <class _InputIter, class _OutputIter, class _BoolType>
struct __copy_dispatch {
static _OutputIter copy(_InputIter __first, _InputIter __last,
_OutputIter __result) {
typedef typename iterator_traits<_InputIter>::iterator_category _Category;
typedef typename iterator_traits<_InputIter>::difference_type _Distance;
return __copy(__first, __last, __result, _Category(), (_Distance*) 0);
}
};
template <class _Tp>
struct __copy_dispatch<_Tp*, _Tp*, __true_type>
{
static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
return __copy_trivial(__first, __last, __result);
}
};
template <class _Tp>
struct __copy_dispatch<const _Tp*, _Tp*, __true_type>
{
static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
return __copy_trivial(__first, __last, __result);
}
};
template <class _InputIter, class _OutputIter>
inline _OutputIter copy(_InputIter __first, _InputIter __last,
_OutputIter __result) {
typedef typename iterator_traits<_InputIter>::value_type _Tp;
typedef typename __type_traits<_Tp>::has_trivial_assignment_operator
_Trivial;
return __copy_dispatch<_InputIter, _OutputIter, _Trivial>
::copy(__first, __last, __result);
}
# 209 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algobase.h" 3
template <class _BidirectionalIter1, class _BidirectionalIter2,
class _Distance>
inline _BidirectionalIter2 __copy_backward(_BidirectionalIter1 __first,
_BidirectionalIter1 __last,
_BidirectionalIter2 __result,
bidirectional_iterator_tag,
_Distance*)
{
while (__first != __last)
*--__result = *--__last;
return __result;
}
template <class _RandomAccessIter, class _BidirectionalIter, class _Distance>
inline _BidirectionalIter __copy_backward(_RandomAccessIter __first,
_RandomAccessIter __last,
_BidirectionalIter __result,
random_access_iterator_tag,
_Distance*)
{
for (_Distance __n = __last - __first; __n > 0; --__n)
*--__result = *--__last;
return __result;
}
template <class _BidirectionalIter1, class _BidirectionalIter2,
class _BoolType>
struct __copy_backward_dispatch
{
typedef typename iterator_traits<_BidirectionalIter1>::iterator_category
_Cat;
typedef typename iterator_traits<_BidirectionalIter1>::difference_type
_Distance;
static _BidirectionalIter2 copy(_BidirectionalIter1 __first,
_BidirectionalIter1 __last,
_BidirectionalIter2 __result) {
return __copy_backward(__first, __last, __result, _Cat(), (_Distance*) 0);
}
};
template <class _Tp>
struct __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
{
static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
const ptrdiff_t _Num = __last - __first;
memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
return __result - _Num;
}
};
template <class _Tp>
struct __copy_backward_dispatch<const _Tp*, _Tp*, __true_type>
{
static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
return __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
::copy(__first, __last, __result);
}
};
template <class _BI1, class _BI2>
inline _BI2 copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) {
typedef typename __type_traits<typename iterator_traits<_BI2>::value_type>
::has_trivial_assignment_operator
_Trivial;
return __copy_backward_dispatch<_BI1, _BI2, _Trivial>
::copy(__first, __last, __result);
}
# 299 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algobase.h" 3
template <class _InputIter, class _Size, class _OutputIter>
pair<_InputIter, _OutputIter> __copy_n(_InputIter __first, _Size __count,
_OutputIter __result,
input_iterator_tag) {
for ( ; __count > 0; --__count) {
*__result = *__first;
++__first;
++__result;
}
return pair<_InputIter, _OutputIter>(__first, __result);
}
template <class _RAIter, class _Size, class _OutputIter>
inline pair<_RAIter, _OutputIter>
__copy_n(_RAIter __first, _Size __count,
_OutputIter __result,
random_access_iterator_tag) {
_RAIter __last = __first + __count;
return pair<_RAIter, _OutputIter>(__last, copy(__first, __last, __result));
}
template <class _InputIter, class _Size, class _OutputIter>
inline pair<_InputIter, _OutputIter>
__copy_n(_InputIter __first, _Size __count, _OutputIter __result) {
return __copy_n(__first, __count, __result,
__iterator_category( __first ) );
}
template <class _InputIter, class _Size, class _OutputIter>
inline pair<_InputIter, _OutputIter>
copy_n(_InputIter __first, _Size __count, _OutputIter __result) {
return __copy_n(__first, __count, __result);
}
template <class _ForwardIter, class _Tp>
void fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __value) {
for ( ; __first != __last; ++__first)
*__first = __value;
}
template <class _OutputIter, class _Size, class _Tp>
_OutputIter fill_n(_OutputIter __first, _Size __n, const _Tp& __value) {
for ( ; __n > 0; --__n, ++__first)
*__first = __value;
return __first;
}
template <class _InputIter1, class _InputIter2>
pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,
_InputIter1 __last1,
_InputIter2 __first2) {
while (__first1 != __last1 && *__first1 == *__first2) {
++__first1;
++__first2;
}
return pair<_InputIter1, _InputIter2>(__first1, __first2);
}
template <class _InputIter1, class _InputIter2, class _BinaryPredicate>
pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,
_InputIter1 __last1,
_InputIter2 __first2,
_BinaryPredicate __binary_pred) {
while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) {
++__first1;
++__first2;
}
return pair<_InputIter1, _InputIter2>(__first1, __first2);
}
template <class _InputIter1, class _InputIter2>
inline bool equal(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2) {
for ( ; __first1 != __last1; ++__first1, ++__first2)
if (*__first1 != *__first2)
return false;
return true;
}
template <class _InputIter1, class _InputIter2, class _BinaryPredicate>
inline bool equal(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _BinaryPredicate __binary_pred) {
for ( ; __first1 != __last1; ++__first1, ++__first2)
if (!__binary_pred(*__first1, *__first2))
return false;
return true;
}
template <class _InputIter1, class _InputIter2>
bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2) {
for ( ; __first1 != __last1 && __first2 != __last2
; ++__first1, ++__first2) {
if (*__first1 < *__first2)
return true;
if (*__first2 < *__first1)
return false;
}
return __first1 == __last1 && __first2 != __last2;
}
template <class _InputIter1, class _InputIter2, class _Compare>
bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_Compare __comp) {
for ( ; __first1 != __last1 && __first2 != __last2
; ++__first1, ++__first2) {
if (__comp(*__first1, *__first2))
return true;
if (__comp(*__first2, *__first1))
return false;
}
return __first1 == __last1 && __first2 != __last2;
}
inline bool
lexicographical_compare(const unsigned char* __first1,
const unsigned char* __last1,
const unsigned char* __first2,
const unsigned char* __last2)
{
const size_t __len1 = __last1 - __first1;
const size_t __len2 = __last2 - __first2;
const int __result = memcmp(__first1, __first2, min(__len1, __len2));
return __result != 0 ? __result < 0 : __len1 < __len2;
}
inline bool lexicographical_compare(const char* __first1, const char* __last1,
const char* __first2, const char* __last2)
{
return lexicographical_compare((const signed char*) __first1,
(const signed char*) __last1,
(const signed char*) __first2,
(const signed char*) __last2);
}
template <class _InputIter1, class _InputIter2>
int __lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2)
{
while (__first1 != __last1 && __first2 != __last2) {
if (*__first1 < *__first2)
return -1;
if (*__first2 < *__first1)
return 1;
++__first1;
++__first2;
}
if (__first2 == __last2) {
return !(__first1 == __last1);
}
else {
return -1;
}
}
inline int
__lexicographical_compare_3way(const unsigned char* __first1,
const unsigned char* __last1,
const unsigned char* __first2,
const unsigned char* __last2)
{
const ptrdiff_t __len1 = __last1 - __first1;
const ptrdiff_t __len2 = __last2 - __first2;
const int __result = memcmp(__first1, __first2, min(__len1, __len2));
return __result != 0 ? __result
: (__len1 == __len2 ? 0 : (__len1 < __len2 ? -1 : 1));
}
inline int
__lexicographical_compare_3way(const char* __first1, const char* __last1,
const char* __first2, const char* __last2)
{
return __lexicographical_compare_3way(
(const signed char*) __first1,
(const signed char*) __last1,
(const signed char*) __first2,
(const signed char*) __last2);
}
template <class _InputIter1, class _InputIter2>
int lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2)
{
return __lexicographical_compare_3way(__first1, __last1, __first2, __last2);
}
}
# 18 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_construct.h" 1 3
namespace std {
template <class _Tp>
inline void destroy(_Tp* __pointer) {
__pointer->_Tp::~_Tp();
}
template <class _Tp1, class _Tp2>
inline void construct(_Tp1* __p, const _Tp2& __value) {
new (__p) _Tp1(__value);
}
template <class _Tp1>
inline void construct(_Tp1* __p) {
new (__p) _Tp1();
}
template <class _ForwardIterator>
void
__destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
{
for ( ; __first != __last; ++__first)
destroy(&*__first);
}
template <class _ForwardIterator>
inline void __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type) {}
template <class _ForwardIterator, class _Tp>
inline void
__destroy(_ForwardIterator __first, _ForwardIterator __last, _Tp*)
{
typedef typename __type_traits<_Tp>::has_trivial_destructor
_Trivial_destructor;
__destroy_aux(__first, __last, _Trivial_destructor());
}
template <class _ForwardIterator>
inline void destroy(_ForwardIterator __first, _ForwardIterator __last) {
__destroy(__first, __last, __value_type( __first ) );
}
inline void destroy(char*, char*) {}
inline void destroy(wchar_t*, wchar_t*) {}
}
# 20 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_tempbuf.h" 1 3
namespace std {
template <class _Tp>
pair<_Tp*, ptrdiff_t>
__get_temporary_buffer(ptrdiff_t __len, _Tp*)
{
if (__len > ptrdiff_t(2147483647 / sizeof(_Tp)))
__len = 2147483647 / sizeof(_Tp);
while (__len > 0) {
_Tp* __tmp = (_Tp*) malloc((size_t)__len * sizeof(_Tp));
if (__tmp != 0)
return pair<_Tp*, ptrdiff_t>(__tmp, __len);
__len /= 2;
}
return pair<_Tp*, ptrdiff_t>((_Tp*)0, 0);
}
template <class _Tp>
inline pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __len) {
return __get_temporary_buffer(__len, (_Tp*) 0);
}
template <class _Tp>
inline pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __len, _Tp*) {
return __get_temporary_buffer(__len, (_Tp*) 0);
}
template <class _Tp>
void return_temporary_buffer(_Tp* __p) {
free(__p);
}
template <class _ForwardIterator, class _Tp>
class _Temporary_buffer {
private:
ptrdiff_t _M_original_len;
ptrdiff_t _M_len;
_Tp* _M_buffer;
void _M_allocate_buffer() {
_M_original_len = _M_len;
_M_buffer = 0;
if (_M_len > (ptrdiff_t)(2147483647 / sizeof(_Tp)))
_M_len = 2147483647 / sizeof(_Tp);
while (_M_len > 0) {
_M_buffer = (_Tp*) malloc(_M_len * sizeof(_Tp));
if (_M_buffer)
break;
_M_len /= 2;
}
}
void _M_initialize_buffer(const _Tp&, __true_type) {}
void _M_initialize_buffer(const _Tp& val, __false_type) {
uninitialized_fill_n(_M_buffer, _M_len, val);
}
public:
ptrdiff_t size() const { return _M_len; }
ptrdiff_t requested_size() const { return _M_original_len; }
_Tp* begin() { return _M_buffer; }
_Tp* end() { return _M_buffer + _M_len; }
_Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) {
typedef typename __type_traits<_Tp>::has_trivial_default_constructor
_Trivial;
try {
_M_len = 0;
distance(__first, __last, _M_len);
_M_allocate_buffer();
if (_M_len > 0)
_M_initialize_buffer(*__first, _Trivial());
}
catch(...) { free(_M_buffer); _M_buffer = 0; _M_len = 0 ; throw; } ;
}
~_Temporary_buffer() {
destroy(_M_buffer, _M_buffer + _M_len);
free(_M_buffer);
}
private:
_Temporary_buffer(const _Temporary_buffer&) {}
void operator=(const _Temporary_buffer&) {}
};
template <class _ForwardIterator,
class _Tp
= typename iterator_traits<_ForwardIterator>::value_type
>
struct temporary_buffer : public _Temporary_buffer<_ForwardIterator, _Tp>
{
temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
: _Temporary_buffer<_ForwardIterator, _Tp>(__first, __last) {}
~temporary_buffer() {}
};
}
# 22 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_uninitialized.h" 1 3
namespace std {
template <class _InputIter, class _ForwardIter>
inline _ForwardIter
__uninitialized_copy_aux(_InputIter __first, _InputIter __last,
_ForwardIter __result,
__true_type)
{
return copy(__first, __last, __result);
}
template <class _InputIter, class _ForwardIter>
_ForwardIter
__uninitialized_copy_aux(_InputIter __first, _InputIter __last,
_ForwardIter __result,
__false_type)
{
_ForwardIter __cur = __result;
try {
for ( ; __first != __last; ++__first, ++__cur)
construct(&*__cur, *__first);
return __cur;
}
catch(...) { destroy(__result, __cur) ; throw; } ;
}
template <class _InputIter, class _ForwardIter, class _Tp>
inline _ForwardIter
__uninitialized_copy(_InputIter __first, _InputIter __last,
_ForwardIter __result, _Tp*)
{
typedef typename __type_traits<_Tp>::is_POD_type _Is_POD;
return __uninitialized_copy_aux(__first, __last, __result, _Is_POD());
}
template <class _InputIter, class _ForwardIter>
inline _ForwardIter
uninitialized_copy(_InputIter __first, _InputIter __last,
_ForwardIter __result)
{
return __uninitialized_copy(__first, __last, __result,
__value_type( __result ) );
}
inline char* uninitialized_copy(const char* __first, const char* __last,
char* __result) {
memmove(__result, __first, __last - __first);
return __result + (__last - __first);
}
inline wchar_t*
uninitialized_copy(const wchar_t* __first, const wchar_t* __last,
wchar_t* __result)
{
memmove(__result, __first, sizeof(wchar_t) * (__last - __first));
return __result + (__last - __first);
}
template <class _InputIter, class _Size, class _ForwardIter>
pair<_InputIter, _ForwardIter>
__uninitialized_copy_n(_InputIter __first, _Size __count,
_ForwardIter __result,
input_iterator_tag)
{
_ForwardIter __cur = __result;
try {
for ( ; __count > 0 ; --__count, ++__first, ++__cur)
construct(&*__cur, *__first);
return pair<_InputIter, _ForwardIter>(__first, __cur);
}
catch(...) { destroy(__result, __cur) ; throw; } ;
}
template <class _RandomAccessIter, class _Size, class _ForwardIter>
inline pair<_RandomAccessIter, _ForwardIter>
__uninitialized_copy_n(_RandomAccessIter __first, _Size __count,
_ForwardIter __result,
random_access_iterator_tag) {
_RandomAccessIter __last = __first + __count;
return pair<_RandomAccessIter, _ForwardIter>(
__last,
uninitialized_copy(__first, __last, __result));
}
template <class _InputIter, class _Size, class _ForwardIter>
inline pair<_InputIter, _ForwardIter>
__uninitialized_copy_n(_InputIter __first, _Size __count,
_ForwardIter __result) {
return __uninitialized_copy_n(__first, __count, __result,
__iterator_category( __first ) );
}
template <class _InputIter, class _Size, class _ForwardIter>
inline pair<_InputIter, _ForwardIter>
uninitialized_copy_n(_InputIter __first, _Size __count,
_ForwardIter __result) {
return __uninitialized_copy_n(__first, __count, __result,
__iterator_category( __first ) );
}
template <class _ForwardIter, class _Tp>
inline void
__uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
const _Tp& __x, __true_type)
{
fill(__first, __last, __x);
}
template <class _ForwardIter, class _Tp>
void
__uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
const _Tp& __x, __false_type)
{
_ForwardIter __cur = __first;
try {
for ( ; __cur != __last; ++__cur)
construct(&*__cur, __x);
}
catch(...) { destroy(__first, __cur) ; throw; } ;
}
template <class _ForwardIter, class _Tp, class _Tp1>
inline void __uninitialized_fill(_ForwardIter __first,
_ForwardIter __last, const _Tp& __x, _Tp1*)
{
typedef typename __type_traits<_Tp1>::is_POD_type _Is_POD;
__uninitialized_fill_aux(__first, __last, __x, _Is_POD());
}
template <class _ForwardIter, class _Tp>
inline void uninitialized_fill(_ForwardIter __first,
_ForwardIter __last,
const _Tp& __x)
{
__uninitialized_fill(__first, __last, __x, __value_type( __first ) );
}
template <class _ForwardIter, class _Size, class _Tp>
inline _ForwardIter
__uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
const _Tp& __x, __true_type)
{
return fill_n(__first, __n, __x);
}
template <class _ForwardIter, class _Size, class _Tp>
_ForwardIter
__uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
const _Tp& __x, __false_type)
{
_ForwardIter __cur = __first;
try {
for ( ; __n > 0; --__n, ++__cur)
construct(&*__cur, __x);
return __cur;
}
catch(...) { destroy(__first, __cur) ; throw; } ;
}
template <class _ForwardIter, class _Size, class _Tp, class _Tp1>
inline _ForwardIter
__uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x, _Tp1*)
{
typedef typename __type_traits<_Tp1>::is_POD_type _Is_POD;
return __uninitialized_fill_n_aux(__first, __n, __x, _Is_POD());
}
template <class _ForwardIter, class _Size, class _Tp>
inline _ForwardIter
uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x)
{
return __uninitialized_fill_n(__first, __n, __x, __value_type( __first ) );
}
template <class _InputIter1, class _InputIter2, class _ForwardIter>
inline _ForwardIter
__uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_ForwardIter __result)
{
_ForwardIter __mid = uninitialized_copy(__first1, __last1, __result);
try {
return uninitialized_copy(__first2, __last2, __mid);
}
catch(...) { destroy(__result, __mid) ; throw; } ;
}
template <class _ForwardIter, class _Tp, class _InputIter>
inline _ForwardIter
__uninitialized_fill_copy(_ForwardIter __result, _ForwardIter __mid,
const _Tp& __x,
_InputIter __first, _InputIter __last)
{
uninitialized_fill(__result, __mid, __x);
try {
return uninitialized_copy(__first, __last, __mid);
}
catch(...) { destroy(__result, __mid) ; throw; } ;
}
template <class _InputIter, class _ForwardIter, class _Tp>
inline void
__uninitialized_copy_fill(_InputIter __first1, _InputIter __last1,
_ForwardIter __first2, _ForwardIter __last2,
const _Tp& __x)
{
_ForwardIter __mid2 = uninitialized_copy(__first1, __last1, __first2);
try {
uninitialized_fill(__mid2, __last2, __x);
}
catch(...) { destroy(__first2, __mid2) ; throw; } ;
}
}
# 23 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_raw_storage_iter.h" 1 3
namespace std {
template <class _ForwardIterator, class _Tp>
class raw_storage_iterator {
protected:
_ForwardIterator _M_iter;
public:
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
explicit raw_storage_iterator(_ForwardIterator __x) : _M_iter(__x) {}
raw_storage_iterator& operator*() { return *this; }
raw_storage_iterator& operator=(const _Tp& __element) {
construct(&*_M_iter, __element);
return *this;
}
raw_storage_iterator<_ForwardIterator, _Tp>& operator++() {
++_M_iter;
return *this;
}
raw_storage_iterator<_ForwardIterator, _Tp> operator++(int) {
raw_storage_iterator<_ForwardIterator, _Tp> __tmp = *this;
++_M_iter;
return __tmp;
}
};
# 73 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_raw_storage_iter.h" 3
}
# 24 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_memory.h" 2 3
namespace std {
template<class _Tp1> struct auto_ptr_ref {
_Tp1* _M_ptr;
auto_ptr_ref(_Tp1* __p) : _M_ptr(__p) {}
};
template <class _Tp> class auto_ptr {
private:
_Tp* _M_ptr;
public:
typedef _Tp element_type;
explicit auto_ptr(_Tp* __p = 0) throw() : _M_ptr(__p) {}
auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) {}
template <class _Tp1> auto_ptr(auto_ptr<_Tp1>& __a) throw()
: _M_ptr(__a.release()) {}
auto_ptr& operator=(auto_ptr& __a) throw() {
reset(__a.release());
return *this;
}
template <class _Tp1>
auto_ptr& operator=(auto_ptr<_Tp1>& __a) throw() {
reset(__a.release());
return *this;
}
~auto_ptr() throw() { delete _M_ptr; }
_Tp& operator*() const throw() {
return *_M_ptr;
}
_Tp* operator->() const throw() {
return _M_ptr;
}
_Tp* get() const throw() {
return _M_ptr;
}
_Tp* release() throw() {
_Tp* __tmp = _M_ptr;
_M_ptr = 0;
return __tmp;
}
void reset(_Tp* __p = 0) throw() {
if (__p != _M_ptr) {
delete _M_ptr;
_M_ptr = __p;
}
}
public:
auto_ptr(auto_ptr_ref<_Tp> __ref) throw()
: _M_ptr(__ref._M_ptr) {}
auto_ptr& operator=(auto_ptr_ref<_Tp> __ref) throw() {
if (__ref._M_ptr != this->get()) {
delete _M_ptr;
_M_ptr = __ref._M_ptr;
}
return *this;
}
template <class _Tp1> operator auto_ptr_ref<_Tp1>() throw()
{ return auto_ptr_ref<_Tp>(this->release()); }
template <class _Tp1> operator auto_ptr<_Tp1>() throw()
{ return auto_ptr<_Tp1>(this->release()); }
};
}
# 48 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_algorithm.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algo.h" 1 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_heap.h" 1 3
namespace std {
template <class _RandomAccessIterator, class _Distance, class _Tp>
void
__push_heap(_RandomAccessIterator __first,
_Distance __holeIndex, _Distance __topIndex, _Tp __value)
{
_Distance __parent = (__holeIndex - 1) / 2;
while (__holeIndex > __topIndex && *(__first + __parent) < __value) {
*(__first + __holeIndex) = *(__first + __parent);
__holeIndex = __parent;
__parent = (__holeIndex - 1) / 2;
}
*(__first + __holeIndex) = __value;
}
template <class _RandomAccessIterator, class _Distance, class _Tp>
inline void
__push_heap_aux(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Distance*, _Tp*)
{
__push_heap(__first, _Distance((__last - __first) - 1), _Distance(0),
_Tp(*(__last - 1)));
}
template <class _RandomAccessIterator>
inline void
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
__push_heap_aux(__first, __last,
__distance_type( __first ) , __value_type( __first ) );
}
template <class _RandomAccessIterator, class _Distance, class _Tp,
class _Compare>
void
__push_heap(_RandomAccessIterator __first, _Distance __holeIndex,
_Distance __topIndex, _Tp __value, _Compare __comp)
{
_Distance __parent = (__holeIndex - 1) / 2;
while (__holeIndex > __topIndex && __comp(*(__first + __parent), __value)) {
*(__first + __holeIndex) = *(__first + __parent);
__holeIndex = __parent;
__parent = (__holeIndex - 1) / 2;
}
*(__first + __holeIndex) = __value;
}
template <class _RandomAccessIterator, class _Compare,
class _Distance, class _Tp>
inline void
__push_heap_aux(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp,
_Distance*, _Tp*)
{
__push_heap(__first, _Distance((__last - __first) - 1), _Distance(0),
_Tp(*(__last - 1)), __comp);
}
template <class _RandomAccessIterator, class _Compare>
inline void
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
__push_heap_aux(__first, __last, __comp,
__distance_type( __first ) , __value_type( __first ) );
}
template <class _RandomAccessIterator, class _Distance, class _Tp>
void
__adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
_Distance __len, _Tp __value)
{
_Distance __topIndex = __holeIndex;
_Distance __secondChild = 2 * __holeIndex + 2;
while (__secondChild < __len) {
if (*(__first + __secondChild) < *(__first + (__secondChild - 1)))
__secondChild--;
*(__first + __holeIndex) = *(__first + __secondChild);
__holeIndex = __secondChild;
__secondChild = 2 * (__secondChild + 1);
}
if (__secondChild == __len) {
*(__first + __holeIndex) = *(__first + (__secondChild - 1));
__holeIndex = __secondChild - 1;
}
__push_heap(__first, __holeIndex, __topIndex, __value);
}
template <class _RandomAccessIterator, class _Tp, class _Distance>
inline void
__pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_RandomAccessIterator __result, _Tp __value, _Distance*)
{
*__result = *__first;
__adjust_heap(__first, _Distance(0), _Distance(__last - __first), __value);
}
template <class _RandomAccessIterator, class _Tp>
inline void
__pop_heap_aux(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Tp*)
{
__pop_heap(__first, __last - 1, __last - 1,
_Tp(*(__last - 1)), __distance_type( __first ) );
}
template <class _RandomAccessIterator>
inline void pop_heap(_RandomAccessIterator __first,
_RandomAccessIterator __last)
{
__pop_heap_aux(__first, __last, __value_type( __first ) );
}
template <class _RandomAccessIterator, class _Distance,
class _Tp, class _Compare>
void
__adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
_Distance __len, _Tp __value, _Compare __comp)
{
_Distance __topIndex = __holeIndex;
_Distance __secondChild = 2 * __holeIndex + 2;
while (__secondChild < __len) {
if (__comp(*(__first + __secondChild), *(__first + (__secondChild - 1))))
__secondChild--;
*(__first + __holeIndex) = *(__first + __secondChild);
__holeIndex = __secondChild;
__secondChild = 2 * (__secondChild + 1);
}
if (__secondChild == __len) {
*(__first + __holeIndex) = *(__first + (__secondChild - 1));
__holeIndex = __secondChild - 1;
}
__push_heap(__first, __holeIndex, __topIndex, __value, __comp);
}
template <class _RandomAccessIterator, class _Tp, class _Compare,
class _Distance>
inline void
__pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_RandomAccessIterator __result, _Tp __value, _Compare __comp,
_Distance*)
{
*__result = *__first;
__adjust_heap(__first, _Distance(0), _Distance(__last - __first),
__value, __comp);
}
template <class _RandomAccessIterator, class _Tp, class _Compare>
inline void
__pop_heap_aux(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Tp*, _Compare __comp)
{
__pop_heap(__first, __last - 1, __last - 1, _Tp(*(__last - 1)), __comp,
__distance_type( __first ) );
}
template <class _RandomAccessIterator, class _Compare>
inline void
pop_heap(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp)
{
__pop_heap_aux(__first, __last, __value_type( __first ) , __comp);
}
template <class _RandomAccessIterator, class _Tp, class _Distance>
void
__make_heap(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Tp*, _Distance*)
{
if (__last - __first < 2) return;
_Distance __len = __last - __first;
_Distance __parent = (__len - 2)/2;
while (true) {
__adjust_heap(__first, __parent, __len, _Tp(*(__first + __parent)));
if (__parent == 0) return;
__parent--;
}
}
template <class _RandomAccessIterator>
inline void
make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
__make_heap(__first, __last,
__value_type( __first ) , __distance_type( __first ) );
}
template <class _RandomAccessIterator, class _Compare,
class _Tp, class _Distance>
void
__make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp, _Tp*, _Distance*)
{
if (__last - __first < 2) return;
_Distance __len = __last - __first;
_Distance __parent = (__len - 2)/2;
while (true) {
__adjust_heap(__first, __parent, __len, _Tp(*(__first + __parent)),
__comp);
if (__parent == 0) return;
__parent--;
}
}
template <class _RandomAccessIterator, class _Compare>
inline void
make_heap(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp)
{
__make_heap(__first, __last, __comp,
__value_type( __first ) , __distance_type( __first ) );
}
template <class _RandomAccessIterator>
void sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
while (__last - __first > 1)
pop_heap(__first, __last--);
}
template <class _RandomAccessIterator, class _Compare>
void
sort_heap(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp)
{
while (__last - __first > 1)
pop_heap(__first, __last--, __comp);
}
}
# 34 "/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_algo.h" 2 3
namespace std {
template <class _Tp>
inline const _Tp& __median(const _Tp& __a, const _Tp& __b, const _Tp& __c) {
if (__a < __b)
if (__b < __c)
return __b;
else if (__a < __c)
return __c;
else
return __a;
else if (__a < __c)
return __a;
else if (__b < __c)
return __c;
else
return __b;
}
template <class _Tp, class _Compare>
inline const _Tp&
__median(const _Tp& __a, const _Tp& __b, const _Tp& __c, _Compare __comp) {
if (__comp(__a, __b))
if (__comp(__b, __c))
return __b;
else if (__comp(__a, __c))
return __c;
else
return __a;
else if (__comp(__a, __c))
return __a;
else if (__comp(__b, __c))
return __c;
else
return __b;
}
template <class _InputIter, class _Function>
_Function for_each(_InputIter __first, _InputIter __last, _Function __f) {
for ( ; __first != __last; ++__first)
__f(*__first);
return __f;
}
template <class _InputIter, class _Tp>
inline _InputIter find(_InputIter __first, _InputIter __last,
const _Tp& __val,
input_iterator_tag)
{
while (__first != __last && *__first != __val)
++__first;
return __first;
}
template <class _InputIter, class _Predicate>
inline _InputIter find_if(_InputIter __first, _InputIter __last,
_Predicate __pred,
input_iterator_tag)
{
while (__first != __last && !__pred(*__first))
++__first;
return __first;
}
template <class _RandomAccessIter, class _Tp>
_RandomAccessIter find(_RandomAccessIter __first, _RandomAccessIter __last,
const _Tp& __val,
random_access_iterator_tag)
{
typename iterator_traits<_RandomAccessIter>::difference_type __trip_count
= (__last - __first) >> 2;
for ( ; __trip_count > 0 ; --__trip_count) {
if (*__first == __val) return __first;
++__first;
if (*__first == __val) return __first;
++__first;
if (*__first == __val) return __first;
++__first;
if (*__first == __val) return __first;
++__first;
}
switch(__last - __first) {
case 3:
if (*__first == __val) return __first;
++__first;
case 2:
if (*__first == __val) return __first;
++__first;
case 1:
if (*__first == __val) return __first;
++__first;
case 0:
default:
return __last;
}
}
template <class _RandomAccessIter, class _Predicate>
_RandomAccessIter find_if(_RandomAccessIter __first, _RandomAccessIter __last,
_Predicate __pred,
random_access_iterator_tag)
{
typename iterator_traits<_RandomAccessIter>::difference_type __trip_count
= (__last - __first) >> 2;
for ( ; __trip_count > 0 ; --__trip_count) {
if (__pred(*__first)) return __first;
++__first;
if (__pred(*__first)) return __first;
++__first;
if (__pred(*__first)) return __first;
++__first;
if (__pred(*__first)) return __first;
++__first;
}
switch(__last - __first) {
case 3:
if (__pred(*__first)) return __first;
++__first;
case 2:
if (__pred(*__first)) return __first;
++__first;
case 1:
if (__pred(*__first)) return __first;
++__first;
case 0:
default:
return __last;
}
}
template <class _InputIter, class _Tp>
inline _InputIter find(_InputIter __first, _InputIter __last,
const _Tp& __val)
{
return find(__first, __last, __val, __iterator_category( __first ) );
}
template <class _InputIter, class _Predicate>
inline _InputIter find_if(_InputIter __first, _InputIter __last,
_Predicate __pred) {
return find_if(__first, __last, __pred, __iterator_category( __first ) );
}
template <class _ForwardIter>
_ForwardIter adjacent_find(_ForwardIter __first, _ForwardIter __last) {
if (__first == __last)
return __last;
_ForwardIter __next = __first;
while(++__next != __last) {
if (*__first == *__next)
return __first;
__first = __next;
}
return __last;
}
template <class _ForwardIter, class _BinaryPredicate>
_ForwardIter adjacent_find(_ForwardIter __first, _ForwardIter __last,
_BinaryPredicate __binary_pred) {
if (__first == __last)
return __last;
_ForwardIter __next = __first;
while(++__next != __last) {
if (__binary_pred(*__first, *__next))
return __first;
__first = __next;
}
return __last;
}
template <class _InputIter, class _Tp, class _Size>
void count(_InputIter __first, _InputIter __last, const _Tp& __value,
_Size& __n) {
for ( ; __first != __last; ++__first)
if (*__first == __value)
++__n;
}
template <class _InputIter, class _Predicate, class _Size>
void count_if(_InputIter __first, _InputIter __last, _Predicate __pred,
_Size& __n) {
for ( ; __first != __last; ++__first)
if (__pred(*__first))
++__n;
}
template <class _InputIter, class _Tp>
typename iterator_traits<_InputIter>::difference_type
count(_InputIter __first, _InputIter __last, const _Tp& __value) {
typename iterator_traits<_InputIter>::difference_type __n = 0;
for ( ; __first != __last; ++__first)
if (*__first == __value)
++__n;
return __n;
}
template <class _InputIter, class _Predicate>
typename iterator_traits<_InputIter>::difference_type
count_if(_InputIter __first, _InputIter __last, _Predicate __pred) {
typename iterator_traits<_InputIter>::difference_type __n = 0;
for ( ; __first != __last; ++__first)
if (__pred(*__first))
++__n;
return __n;
}
template <class _ForwardIter1, class _ForwardIter2>
_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1,
_ForwardIter2 __first2, _ForwardIter2 __last2)
{
if (__first1 == __last1 || __first2 == __last2)
return __first1;
_ForwardIter2 __tmp(__first2);
++__tmp;
if (__tmp == __last2)
return find(__first1, __last1, *__first2);
_ForwardIter2 __p1, __p;
__p1 = __first2; ++__p1;
_ForwardIter1 __current = __first1;
while (__first1 != __last1) {
__first1 = find(__first1, __last1, *__first2);
if (__first1 == __last1)
return __last1;
__p = __p1;
__current = __first1;
if (++__current == __last1)
return __last1;
while (*__current == *__p) {
if (++__p == __last2)
return __first1;
if (++__current == __last1)
return __last1;
}
++__first1;
}
return __first1;
}
template <class _ForwardIter1, class _ForwardIter2, class _BinaryPred>
_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1,
_ForwardIter2 __first2, _ForwardIter2 __last2,
_BinaryPred __predicate)
{
if (__first1 == __last1 || __first2 == __last2)
return __first1;
_ForwardIter2 __tmp(__first2);
++__tmp;
if (__tmp == __last2) {
while (__first1 != __last1 && !__predicate(*__first1, *__first2))
++__first1;
return __first1;
}
_ForwardIter2 __p1, __p;
__p1 = __first2; ++__p1;
_ForwardIter1 __current = __first1;
while (__first1 != __last1) {
while (__first1 != __last1) {
if (__predicate(*__first1, *__first2))
break;
++__first1;
}
while (__first1 != __last1 && !__predicate(*__first1, *__first2))
++__first1;
if (__first1 == __last1)
return __last1;
__p = __p1;
__current = __first1;
if (++__current == __last1) return __last1;
while (__predicate(*__current, *__p)) {
if (++__p == __last2)
return __first1;
if (++__current == __last1)
return __last1;
}
++__first1;
}
return __first1;
}
template <class _ForwardIter, class _Integer, class _Tp>
_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,
_Integer __count, const _Tp& __val) {
if (__count <= 0)
return __first;
else {
__first = find(__first, __last, __val);
while (__first != __last) {
_Integer __n = __count - 1;
_ForwardIter __i = __first;
++__i;
while (__i != __last && __n != 0 && *__i == __val) {
++__i;
--__n;
}
if (__n == 0)
return __first;
else
__first = find(__i, __last, __val);
}
return __last;
}
}
template <class _ForwardIter, class _Integer, class _Tp, class _BinaryPred>
_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,
_Integer __count, const _Tp& __val,
_BinaryPred __binary_pred) {
if (__count <= 0)
return __first;
else {
while (__first != __last) {
if (__binary_pred(*__first, __val))
break;
++__first;
}
while (__first != __last) {
_Integer __n = __count - 1;
_ForwardIter __i = __first;
++__i;
while (__i != __last && __n != 0 && __binary_pred(*__i, __val)) {
++__i;
--__n;
}
if (__n == 0)
return __first;
else {
while (__i != __last) {
if (__binary_pred(*__i, __val))
break;
++__i;
}
__first = __i;
}
}
return __last;
}
}
template <class _ForwardIter1, class _ForwardIter2>
_ForwardIter2 swap_ranges(_ForwardIter1 __first1, _ForwardIter1 __last1,
_ForwardIter2 __first2) {
for ( ; __first1 != __last1; ++__first1, ++__first2)
iter_swap(__first1, __first2);
return __first2;
}
template <class _InputIter, class _OutputIter, class _UnaryOperation>
_OutputIter transform(_InputIter __first, _InputIter __last,
_OutputIter __result, _UnaryOperation __opr) {
for ( ; __first != __last; ++__first, ++__result)
*__result = __opr(*__first);
return __result;
}
template <class _InputIter1, class _InputIter2, class _OutputIter,
class _BinaryOperation>
_OutputIter transform(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _OutputIter __result,
_BinaryOperation __binary_op) {
for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)
*__result = __binary_op(*__first1, *__first2);
return __result;
}
template <class _ForwardIter, class _Tp>
void replace(_ForwardIter __first, _ForwardIter __last,
const _Tp& __old_value, const _Tp& __new_value) {
for ( ; __first != __last; ++__first)
if (*__first == __old_value)
*__first = __new_value;
}
template <class _ForwardIter, class _Predicate, class _Tp>
void replace_if(_ForwardIter __first, _ForwardIter __last,
_Predicate __pred, const _Tp& __new_value) {
for ( ; __first != __last; ++__first)
if (__pred(*__first))
*__first = __new_value;
}
template <class _InputIter, class _OutputIter, class _Tp>
_OutputIter replace_copy(_InputIter __first, _InputIter __last,
_OutputIter __result,
const _Tp& __old_value, const _Tp& __new_value) {
for ( ; __first != __last; ++__first, ++__result)
*__result = *__first == __old_value ? __new_value : *__first;
return __result;
}
template <class Iterator, class _OutputIter, class _Predicate, class _Tp>
_OutputIter replace_copy_if(Iterator __first, Iterator __last,
_OutputIter __result,
_Predicate __pred, const _Tp& __new_value) {
for ( ; __first != __last; ++__first, ++__result)
*__result = __pred(*__first) ? __new_value : *__first;
return __result;
}
template <class _ForwardIter, class _Generator>
void generate(_ForwardIter __first, _ForwardIter __last, _Generator __gen) {
for ( ; __first != __last; ++__first)
*__first = __gen();
}
template <class _OutputIter, class _Size, class _Generator>
_OutputIter generate_n(_OutputIter __first, _Size __n, _Generator __gen) {
for ( ; __n > 0; --__n, ++__first)
*__first = __gen();
return __first;
}
template <class _InputIter, class _OutputIter, class _Tp>
_OutputIter remove_copy(_InputIter __first, _InputIter __last,
_OutputIter __result, const _Tp& __value) {
for ( ; __first != __last; ++__first)
if (*__first != __value) {
*__result = *__first;
++__result;
}
return __result;
}
template <class _InputIter, class _OutputIter, class _Predicate>
_OutputIter remove_copy_if(_InputIter __first, _InputIter __last,
_OutputIter __result, _Predicate __pred) {
for ( ; __first != __last; ++__first)
if (!__pred(*__first)) {
*__result = *__first;
++__result;
}
return __result;
}
template <class _ForwardIter, class _Tp>
_ForwardIter remove(_ForwardIter __first, _ForwardIter __last,
const _Tp& __value) {
__first = find(__first, __last, __value);
_ForwardIter __i = __first;
return __first == __last ? __first
: remove_copy(++__i, __last, __first, __value);
}
template <class _ForwardIter, class _Predicate>
_ForwardIter remove_if(_ForwardIter __first, _ForwardIter __last,
_Predicate __pred) {
__first = find_if(__first, __last, __pred);
_ForwardIter __i = __first;
return __first == __last ? __first
: remove_copy_if(++__i, __last, __first, __pred);
}
template <class _InputIter, class _OutputIter, class _Tp>
_OutputIter __unique_copy(_InputIter __first, _InputIter __last,
_OutputIter __result, _Tp*) {
_Tp __value = *__first;
*__result = __value;
while (++__first != __last)
if (__value != *__first) {
__value = *__first;
*++__result = __value;
}
return ++__result;
}
template <class _InputIter, class _OutputIter>
inline _OutputIter __unique_copy(_InputIter __first, _InputIter __last,
_OutputIter __result,
output_iterator_tag) {
return __unique_copy(__first, __last, __result, __value_type( __first ) );
}
template <class _InputIter, class _ForwardIter>
_ForwardIter __unique_copy(_InputIter __first, _InputIter __last,
_ForwardIter __result, forward_iterator_tag) {
*__result = *__first;
while (++__first != __last)
if (*__result != *__first) *++__result = *__first;
return ++__result;
}
template <class _InputIter, class _OutputIter>
inline _OutputIter unique_copy(_InputIter __first, _InputIter __last,
_OutputIter __result) {
if (__first == __last) return __result;
return __unique_copy(__first, __last, __result,
__iterator_category( __result ) );
}
template <class _InputIter, class _OutputIter, class _BinaryPredicate,
class _Tp>
_OutputIter __unique_copy(_InputIter __first, _InputIter __last,
_OutputIter __result,
_BinaryPredicate __binary_pred, _Tp*) {
_Tp __value = *__first;
*__result = __value;
while (++__first != __last)
if (!__binary_pred(__value, *__first)) {
__value = *__first;
*++__result = __value;
}
return ++__result;
}
template <class _InputIter, class _OutputIter, class _BinaryPredicate>
inline _OutputIter __unique_copy(_InputIter __first, _InputIter __last,
_OutputIter __result,
_BinaryPredicate __binary_pred,
output_iterator_tag) {
return __unique_copy(__first, __last, __result, __binary_pred,
__value_type( __first ) );
}
template <class _InputIter, class _ForwardIter, class _BinaryPredicate>
_ForwardIter __unique_copy(_InputIter __first, _InputIter __last,
_ForwardIter __result,
_BinaryPredicate __binary_pred,
forward_iterator_tag) {
*__result = *__first;
while (++__first != __last)
if (!__binary_pred(*__result, *__first)) *++__result = *__first;
return ++__result;
}
template <class _InputIter, class _OutputIter, class _BinaryPredicate>
inline _OutputIter unique_copy(_InputIter __first, _InputIter __last,
_OutputIter __result,
_BinaryPredicate __binary_pred) {
if (__first == __last) return __result;
return __unique_copy(__first, __last, __result, __binary_pred,
__iterator_category( __result ) );
}
template <class _ForwardIter>
_ForwardIter unique(_ForwardIter __first, _ForwardIter __last) {
__first = adjacent_find(__first, __last);
return unique_copy(__first, __last, __first);
}
template <class _ForwardIter, class _BinaryPredicate>
_ForwardIter unique(_ForwardIter __first, _ForwardIter __last,
_BinaryPredicate __binary_pred) {
__first = adjacent_find(__first, __last, __binary_pred);
return unique_copy(__first, __last, __first, __binary_pred);
}
template <class _BidirectionalIter>
void __reverse(_BidirectionalIter __first, _BidirectionalIter __last,
bidirectional_iterator_tag) {
while (true)
if (__first == __last || __first == --__last)
return;
else
iter_swap(__first++, __last);
}
template <class _RandomAccessIter>
void __reverse(_RandomAccessIter __first, _RandomAccessIter __last,
random_access_iterator_tag) {
while (__first < __last)
iter_swap(__first++, --__last);
}
template <class _BidirectionalIter>
inline void reverse(_BidirectionalIter __first, _BidirectionalIter __last) {
__reverse(__first, __last, __iterator_category( __first ) );
}
template <class _BidirectionalIter, class _OutputIter>
_OutputIter reverse_copy(_BidirectionalIter __first,
_BidirectionalIter __last,
_OutputIter __result) {
while (__first != __last) {
--__last;
*__result = *__last;
++__result;
}
return __result;
}
template <class _EuclideanRingElement>
_EuclideanRingElement __gcd(_EuclideanRingElement __m,
_EuclideanRingElement __n)
{
while (__n != 0) {
_EuclideanRingElement __t = __m % __n;
__m = __n;
__n = __t;
}
return __m;
}
template <class _ForwardIter, class _Distance>
_ForwardIter __rotate(_ForwardIter __first,
_ForwardIter __middle,
_ForwardIter __last,
_Distance*,
forward_iterator_tag) {
if (__first == __middle)
return __last;
if (__last == __middle)
return __first;
_ForwardIter __first2 = __middle;
do {
swap(*__first++, *__first2++);
if (__first == __middle)
__middle = __first2;
} while (__first2 != __last);
_ForwardIter __new_middle = __first;
__first2 = __middle;
while (__first2 != __last) {
swap (*__first++, *__first2++);
if (__first == __middle)
__middle = __first2;
else if (__first2 == __last)
__first2 = __middle;
}
return __new_middle;
}
template <class _BidirectionalIter, class _Distance>
_BidirectionalIter __rotate(_BidirectionalIter __first,
_BidirectionalIter __middle,
_BidirectionalIter __last,
_Distance*,
bidirectional_iterator_tag) {
if (__first == __middle)
return __last;
if (__last == __middle)
return __first;
__reverse(__first, __middle, bidirectional_iterator_tag());
__reverse(__middle, __last, bidirectional_iterator_tag());
while (__first != __middle && __middle != __last)
swap (*__first++, *--__last);
if (__first == __middle) {
__reverse(__middle, __last, bidirectional_iterator_tag());
return __last;
}
else {
__reverse(__first, __middle, bidirectional_iterator_tag());
return __first;
}
}
template <class _RandomAccessIter, class _Distance, class _Tp>
_RandomAccessIter __rotate(_RandomAccessIter __first,
_RandomAccessIter __middle,
_RandomAccessIter __last,
_Distance *, _Tp *) {
_Distance __n = __last - __first;
_Distance __k = __middle - __first;
_Distance __l = __n - __k;
_RandomAccessIter __result = __first + (__last - __middle);
if (__k == 0)
return __last;
else if (__k == __l) {
swap_ranges(__first, __middle, __middle);
return __result;
}
_Distance __d = __gcd(__n, __k);
for (_Distance __i = 0; __i < __d; __i++) {
_Tp __tmp = *__first;
_RandomAccessIter __p = __first;
if (__k < __l) {
for (_Distance __j = 0; __j < __l/__d; __j++) {
if (__p > __first + __l) {
*__p = *(__p - __l);
__p -= __l;
}
*__p = *(__p + __k);
__p += __k;
}
}
else {
for (_Distance __j = 0; __j < __k/__d - 1; __j ++) {
if (__p < __last - __k) {
*__p = *(__p + __k);
__p += __k;
}
*__p = * (__p - __l);
__p -= __l;
}
}
*__p = __tmp;
++__first;
}
return __result;
}
template <class _ForwardIter>
inline _ForwardIter rotate(_ForwardIter __first, _ForwardIter __middle,
_ForwardIter __last) {
return __rotate(__first, __middle, __last,
__distance_type( __first ) ,
__iterator_category( __first ) );
}
template <class _ForwardIter, class _OutputIter>
_OutputIter rotate_copy(_ForwardIter __first, _ForwardIter __middle,
_ForwardIter __last, _OutputIter __result) {
return copy(__first, __middle, copy(__middle, __last, __result));
}
template <class _Distance>
inline _Distance __random_number(_Distance __n) {
return lrand48() % __n;
}
template <class _RandomAccessIter>
inline void random_shuffle(_RandomAccessIter __first,
_RandomAccessIter __last) {
if (__first == __last) return;
for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
iter_swap(__i, __first + __random_number((__i - __first) + 1));
}
template <class _RandomAccessIter, class _RandomNumberGenerator>
void random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last,
_RandomNumberGenerator& __rand) {
if (__first == __last) return;
for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
iter_swap(__i, __first + __rand((__i - __first) + 1));
}
template <class _ForwardIter, class _OutputIter, class _Distance>
_OutputIter random_sample_n(_ForwardIter __first, _ForwardIter __last,
_OutputIter __out, const _Distance __n)
{
_Distance __remaining = 0;
distance(__first, __last, __remaining);
_Distance __m = min(__n, __remaining);
while (__m > 0) {
if (__random_number(__remaining) < __m) {
*__out = *__first;
++__out;
--__m;
}
--__remaining;
++__first;
}
return __out;
}
template <class _ForwardIter, class _OutputIter, class _Distance,
class _RandomNumberGenerator>
_OutputIter random_sample_n(_ForwardIter __first, _ForwardIter __last,
_OutputIter __out, const _Distance __n,
_RandomNumberGenerator& __rand)
{
_Distance __remaining = 0;
distance(__first, __last, __remaining);
_Distance __m = min(__n, __remaining);
while (__m > 0) {
if (__rand(__remaining) < __m) {
*__out = *__first;
++__out;
--__m;
}
--__remaining;
++__first;
}
return __out;
}
template <class _InputIter, class _RandomAccessIter, class _Distance>
_RandomAccessIter __random_sample(_InputIter __first, _InputIter __last,
_RandomAccessIter __out,
const _Distance __n)
{
_Distance __m = 0;
_Distance __t = __n;
for ( ; __first != __last && __m < __n; ++__m, ++__first)
__out[__m] = *__first;
while (__first != __last) {
++__t;
_Distance __M = __random_number(__t);
if (__M < __n)
__out[__M] = *__first;
++__first;
}
return __out + __m;
}
template <class _InputIter, class _RandomAccessIter,
class _RandomNumberGenerator, class _Distance>
_RandomAccessIter __random_sample(_InputIter __first, _InputIter __last,
_RandomAccessIter __out,
_RandomNumberGenerator& __rand,
const _Distance __n)
{
_Distance __m = 0;
_Distance __t = __n;
for ( ; __first != __last && __m < __n; ++__m, ++__first)
__out[__m] = *__first;
while (__first != __last) {
++__t;
_Distance __M = __rand(__t);
if (__M < __n)
__out[__M] = *__first;
++__first;
}
return __out + __m;
}
template <class _InputIter, class _RandomAccessIter>
inline _RandomAccessIter
random_sample(_InputIter __first, _InputIter __last,
_RandomAccessIter __out_first, _RandomAccessIter __out_last)
{
return __random_sample(__first, __last,
__out_first, __out_last - __out_first);
}
template <class _InputIter, class _RandomAccessIter,
class _RandomNumberGenerator>
inline _RandomAccessIter
random_sample(_InputIter __first, _InputIter __last,
_RandomAccessIter __out_first, _RandomAccessIter __out_last,
_RandomNumberGenerator& __rand)
{
return __random_sample(__first, __last,
__out_first, __rand,
__out_last - __out_first);
}
template <class _ForwardIter, class _Predicate>
_ForwardIter __partition(_ForwardIter __first,
_ForwardIter __last,
_Predicate __pred,
forward_iterator_tag) {
if (__first == __last) return __first;
while (__pred(*__first))
if (++__first == __last) return __first;
_ForwardIter __next = __first;
while (++__next != __last)
if (__pred(*__next)) {
swap(*__first, *__next);
++__first;
}
return __first;
}
template <class _BidirectionalIter, class _Predicate>
_BidirectionalIter __partition(_BidirectionalIter __first,
_BidirectionalIter __last,
_Predicate __pred,
bidirectional_iterator_tag) {
while (true) {
while (true)
if (__first == __last)
return __first;
else if (__pred(*__first))
++__first;
else
break;
--__last;
while (true)
if (__first == __last)
return __first;
else if (!__pred(*__last))
--__last;
else
break;
iter_swap(__first, __last);
++__first;
}
}
template <class _ForwardIter, class _Predicate>
inline _ForwardIter partition(_ForwardIter __first,
_ForwardIter __last,
_Predicate __pred) {
return __partition(__first, __last, __pred, __iterator_category( __first ) );
}
template <class _ForwardIter, class _Predicate, class _Distance>
_ForwardIter __inplace_stable_partition(_ForwardIter __first,
_ForwardIter __last,
_Predicate __pred, _Distance __len) {
if (__len == 1)
return __pred(*__first) ? __last : __first;
_ForwardIter __middle = __first;
advance(__middle, __len / 2);
return rotate(__inplace_stable_partition(__first, __middle, __pred,
__len / 2),
__middle,
__inplace_stable_partition(__middle, __last, __pred,
__len - __len / 2));
}
template <class _ForwardIter, class _Pointer, class _Predicate,
class _Distance>
_ForwardIter __stable_partition_adaptive(_ForwardIter __first,
_ForwardIter __last,
_Predicate __pred, _Distance __len,
_Pointer __buffer,
_Distance __buffer_size)
{
if (__len <= __buffer_size) {
_ForwardIter __result1 = __first;
_Pointer __result2 = __buffer;
for ( ; __first != __last ; ++__first)
if (__pred(*__first)) {
*__result1 = *__first;
++__result1;
}
else {
*__result2 = *__first;
++__result2;
}
copy(__buffer, __result2, __result1);
return __result1;
}
else {
_ForwardIter __middle = __first;
advance(__middle, __len / 2);
return rotate(__stable_partition_adaptive(
__first, __middle, __pred,
__len / 2, __buffer, __buffer_size),
__middle,
__stable_partition_adaptive(
__middle, __last, __pred,
__len - __len / 2, __buffer, __buffer_size));
}
}
template <class _ForwardIter, class _Predicate, class _Tp, class _Distance>
inline _ForwardIter
__stable_partition_aux(_ForwardIter __first, _ForwardIter __last,
_Predicate __pred, _Tp*, _Distance*)
{
_Temporary_buffer<_ForwardIter, _Tp> __buf(__first, __last);
if (__buf.size() > 0)
return __stable_partition_adaptive(__first, __last, __pred,
_Distance(__buf.requested_size()),
__buf.begin(), __buf.size());
else
return __inplace_stable_partition(__first, __last, __pred,
_Distance(__buf.requested_size()));
}
template <class _ForwardIter, class _Predicate>
inline _ForwardIter stable_partition(_ForwardIter __first,
_ForwardIter __last,
_Predicate __pred) {
if (__first == __last)
return __first;
else
return __stable_partition_aux(__first, __last, __pred,
__value_type( __first ) ,
__distance_type( __first ) );
}
template <class _RandomAccessIter, class _Tp>
_RandomAccessIter __unguarded_partition(_RandomAccessIter __first,
_RandomAccessIter __last,
_Tp __pivot)
{
while (true) {
while (*__first < __pivot)
++__first;
--__last;
while (__pivot < *__last)
--__last;
if (!(__first < __last))
return __first;
iter_swap(__first, __last);
++__first;
}
}
template <class _RandomAccessIter, class _Tp, class _Compare>
_RandomAccessIter __unguarded_partition(_RandomAccessIter __first,
_RandomAccessIter __last,
_Tp __pivot, _Compare __comp)
{
while (true) {
while (__comp(*__first, __pivot))
++__first;
--__last;
while (__comp(__pivot, *__last))
--__last;
if (!(__first < __last))
return __first;
iter_swap(__first, __last);
++__first;
}
}
const int __stl_threshold = 16;
template <class _RandomAccessIter, class _Tp>
void __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val) {
_RandomAccessIter __next = __last;
--__next;
while (__val < *__next) {
*__last = *__next;
__last = __next;
--__next;
}
*__last = __val;
}
template <class _RandomAccessIter, class _Tp, class _Compare>
void __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val,
_Compare __comp) {
_RandomAccessIter __next = __last;
--__next;
while (__comp(__val, *__next)) {
*__last = *__next;
__last = __next;
--__next;
}
*__last = __val;
}
template <class _RandomAccessIter, class _Tp>
inline void __linear_insert(_RandomAccessIter __first,
_RandomAccessIter __last, _Tp*) {
_Tp __val = *__last;
if (__val < *__first) {
copy_backward(__first, __last, __last + 1);
*__first = __val;
}
else
__unguarded_linear_insert(__last, __val);
}
template <class _RandomAccessIter, class _Tp, class _Compare>
inline void __linear_insert(_RandomAccessIter __first,
_RandomAccessIter __last, _Tp*, _Compare __comp) {
_Tp __val = *__last;
if (__comp(__val, *__first)) {
copy_backward(__first, __last, __last + 1);
*__first = __val;
}
else
__unguarded_linear_insert(__last, __val, __comp);
}
template <class _RandomAccessIter>
void __insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last) {
if (__first == __last) return;
for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
__linear_insert(__first, __i, __value_type( __first ) );
}
template <class _RandomAccessIter, class _Compare>
void __insertion_sort(_RandomAccessIter __first,
_RandomAccessIter __last, _Compare __comp) {
if (__first == __last) return;
for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
__linear_insert(__first, __i, __value_type( __first ) , __comp);
}
template <class _RandomAccessIter, class _Tp>
void __unguarded_insertion_sort_aux(_RandomAccessIter __first,
_RandomAccessIter __last, _Tp*) {
for (_RandomAccessIter __i = __first; __i != __last; ++__i)
__unguarded_linear_insert(__i, _Tp(*__i));
}
template <class _RandomAccessIter>
inline void __unguarded_insertion_sort(_RandomAccessIter __first,
_RandomAccessIter __last) {
__unguarded_insertion_sort_aux(__first, __last, __value_type( __first ) );
}
template <class _RandomAccessIter, class _Tp, class _Compare>
void __unguarded_insertion_sort_aux(_RandomAccessIter __first,
_RandomAccessIter __last,
_Tp*, _Compare __comp) {
for (_RandomAccessIter __i = __first; __i != __last; ++__i)
__unguarded_linear_insert(__i, _Tp(*__i), __comp);
}
template <class _RandomAccessIter, class _Compare>
inline void __unguarded_insertion_sort(_RandomAccessIter __first,
_RandomAccessIter __last,
_Compare __comp) {
__unguarded_insertion_sort_aux(__first, __last, __value_type( __first ) ,
__comp);
}
template <class _RandomAccessIter>
void __final_insertion_sort(_RandomAccessIter __first,
_RandomAccessIter __last) {
if (__last - __first > __stl_threshold) {
__insertion_sort(__first, __first + __stl_threshold);
__unguarded_insertion_sort(__first + __stl_threshold, __last);
}
else
__insertion_sort(__first, __last);
}
template <class _RandomAccessIter, class _Compare>
void __final_insertion_sort(_RandomAccessIter __first,
_RandomAccessIter __last, _Compare __comp) {
if (__last - __first > __stl_threshold) {
__insertion_sort(__first, __first + __stl_threshold, __comp);
__unguarded_insertion_sort(__first + __stl_threshold, __last, __comp);
}
else
__insertion_sort(__first, __last, __comp);
}
template <class _Size>
inline _Size __lg(_Size __n) {
_Size __k;
for (__k = 0; __n != 1; __n >>= 1) ++__k;
return __k;
}
template <class _RandomAccessIter, class _Tp, class _Size>
void __introsort_loop(_RandomAccessIter __first,
_RandomAccessIter __last, _Tp*,
_Size __depth_limit)
{
while (__last - __first > __stl_threshold) {
if (__depth_limit == 0) {
partial_sort(__first, __last, __last);
return;
}
--__depth_limit;
_RandomAccessIter __cut =
__unguarded_partition(__first, __last,
_Tp(__median(*__first,
*(__first + (__last - __first)/2),
*(__last - 1))));
__introsort_loop(__cut, __last, (_Tp*) 0, __depth_limit);
__last = __cut;
}
}
template <class _RandomAccessIter, class _Tp, class _Size, class _Compare>
void __introsort_loop(_RandomAccessIter __first,
_RandomAccessIter __last, _Tp*,
_Size __depth_limit, _Compare __comp)
{
while (__last - __first > __stl_threshold) {
if (__depth_limit == 0) {
partial_sort(__first, __last, __last, __comp);
return;
}
--__depth_limit;
_RandomAccessIter __cut =
__unguarded_partition(__first, __last,
_Tp(__median(*__first,
*(__first + (__last - __first)/2),
*(__last - 1), __comp)),
__comp);
__introsort_loop(__cut, __last, (_Tp*) 0, __depth_limit, __comp);
__last = __cut;
}
}
template <class _RandomAccessIter>
inline void sort(_RandomAccessIter __first, _RandomAccessIter __last) {
if (__first != __last) {
__introsort_loop(__first, __last,
__value_type( __first ) ,
__lg(__last - __first) * 2);
__final_insertion_sort(__first, __last);
}
}
template <class _RandomAccessIter, class _Compare>
inline void sort(_RandomAccessIter __first, _RandomAccessIter __last,
_Compare __comp) {
if (__first != __last) {
__introsort_loop(__first, __last,
__value_type( __first ) ,
__lg(__last - __first) * 2,
__comp);
__final_insertion_sort(__first, __last, __comp);
}
}
template <class _RandomAccessIter>
void __inplace_stable_sort(_RandomAccessIter __first,
_RandomAccessIter __last) {
if (__last - __first < 15) {
__insertion_sort(__first, __last);
return;
}
_RandomAccessIter __middle = __first + (__last - __first) / 2;
__inplace_stable_sort(__first, __middle);
__inplace_stable_sort(__middle, __last);
__merge_without_buffer(__first, __middle, __last,
__middle - __first,
__last - __middle);
}
template <class _RandomAccessIter, class _Compare>
void __inplace_stable_sort(_RandomAccessIter __first,
_RandomAccessIter __last, _Compare __comp) {
if (__last - __first < 15) {
__insertion_sort(__first, __last, __comp);
return;
}
_RandomAccessIter __middle = __first + (__last - __first) / 2;
__inplace_stable_sort(__first, __middle, __comp);
__inplace_stable_sort(__middle, __last, __comp);
__merge_without_buffer(__first, __middle, __last,
__middle - __first,
__last - __middle,
__comp);
}
template <class _RandomAccessIter1, class _RandomAccessIter2,
class _Distance>
void __merge_sort_loop(_RandomAccessIter1 __first,
_RandomAccessIter1 __last,
_RandomAccessIter2 __result, _Distance __step_size) {
_Distance __two_step = 2 * __step_size;
while (__last - __first >= __two_step) {
__result = merge(__first, __first + __step_size,
__first + __step_size, __first + __two_step,
__result);
__first += __two_step;
}
__step_size = min(_Distance(__last - __first), __step_size);
merge(__first, __first + __step_size, __first + __step_size, __last,
__result);
}
template <class _RandomAccessIter1, class _RandomAccessIter2,
class _Distance, class _Compare>
void __merge_sort_loop(_RandomAccessIter1 __first,
_RandomAccessIter1 __last,
_RandomAccessIter2 __result, _Distance __step_size,
_Compare __comp) {
_Distance __two_step = 2 * __step_size;
while (__last - __first >= __two_step) {
__result = merge(__first, __first + __step_size,
__first + __step_size, __first + __two_step,
__result,
__comp);
__first += __two_step;
}
__step_size = min(_Distance(__last - __first), __step_size);
merge(__first, __first + __step_size,
__first + __step_size, __last,
__result,
__comp);
}
const int __stl_chunk_size = 7;
template <class _RandomAccessIter, class _Distance>
void __chunk_insertion_sort(_RandomAccessIter __first,
_RandomAccessIter __last, _Distance __chunk_size)
{
while (__last - __first >= __chunk_size) {
__insertion_sort(__first, __first + __chunk_size);
__first += __chunk_size;
}
__insertion_sort(__first, __last);
}
template <class _RandomAccessIter, class _Distance, class _Compare>
void __chunk_insertion_sort(_RandomAccessIter __first,
_RandomAccessIter __last,
_Distance __chunk_size, _Compare __comp)
{
while (__last - __first >= __chunk_size) {
__insertion_sort(__first, __first + __chunk_size, __comp);
__first += __chunk_size;
}
__insertion_sort(__first, __last, __comp);
}
template <class _RandomAccessIter, class _Pointer, class _Distance>
void __merge_sort_with_buffer(_RandomAccessIter __first,
_RandomAccessIter __last,
_Pointer __buffer, _Distance*) {
_Distance __len = __last - __first;
_Pointer __buffer_last = __buffer + __len;
_Distance __step_size = __stl_chunk_size;
__chunk_insertion_sort(__first, __last, __step_size);
while (__step_size < __len) {
__merge_sort_loop(__first, __last, __buffer, __step_size);
__step_size *= 2;
__merge_sort_loop(__buffer, __buffer_last, __first, __step_size);
__step_size *= 2;
}
}
template <class _RandomAccessIter, class _Pointer, class _Distance,
class _Compare>
void __merge_sort_with_buffer(_RandomAccessIter __first,
_RandomAccessIter __last, _Pointer __buffer,
_Distance*, _Compare __comp) {
_Distance __len = __last - __first;
_Pointer __buffer_last = __buffer + __len;
_Distance __step_size = __stl_chunk_size;
__chunk_insertion_sort(__first, __last, __step_size, __comp);
while (__step_size < __len) {
__merge_sort_loop(__first, __last, __buffer, __step_size, __comp);
__step_size *= 2;
__merge_sort_loop(__buffer, __buffer_last, __first, __step_size, __comp);
__step_size *= 2;
}
}
template <class _RandomAccessIter, class _Pointer, class _Distance>
void __stable_sort_adaptive(_RandomAccessIter __first,
_RandomAccessIter __last, _Pointer __buffer,
_Distance __buffer_size) {
_Distance __len = (__last - __first + 1) / 2;
_RandomAccessIter __middle = __first + __len;
if (__len > __buffer_size) {
__stable_sort_adaptive(__first, __middle, __buffer, __buffer_size);
__stable_sort_adaptive(__middle, __last, __buffer, __buffer_size);
}
else {
__merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0);
__merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0);
}
__merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
_Distance(__last - __middle), __buffer, __buffer_size);
}
template <class _RandomAccessIter, class _Pointer, class _Distance,
class _Compare>
void __stable_sort_adaptive(_RandomAccessIter __first,
_RandomAccessIter __last, _Pointer __buffer,
_Distance __buffer_size, _Compare __comp) {
_Distance __len = (__last - __first + 1) / 2;
_RandomAccessIter __middle = __first + __len;
if (__len > __buffer_size) {
__stable_sort_adaptive(__first, __middle, __buffer, __buffer_size,
__comp);
__stable_sort_adaptive(__middle, __last, __buffer, __buffer_size,
__comp);
}
else {
__merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0,
__comp);
__merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0,
__comp);
}
__merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
_Distance(__last - __middle), __buffer, __buffer_size,
__comp);
}
template <class _RandomAccessIter, class _Tp, class _Distance>
inline void __stable_sort_aux(_RandomAccessIter __first,
_RandomAccessIter __last, _Tp*, _Distance*) {
_Temporary_buffer<_RandomAccessIter, _Tp> buf(__first, __last);
if (buf.begin() == 0)
__inplace_stable_sort(__first, __last);
else
__stable_sort_adaptive(__first, __last, buf.begin(),
_Distance(buf.size()));
}
template <class _RandomAccessIter, class _Tp, class _Distance, class _Compare>
inline void __stable_sort_aux(_RandomAccessIter __first,
_RandomAccessIter __last, _Tp*, _Distance*,
_Compare __comp) {
_Temporary_buffer<_RandomAccessIter, _Tp> buf(__first, __last);
if (buf.begin() == 0)
__inplace_stable_sort(__first, __last, __comp);
else
__stable_sort_adaptive(__first, __last, buf.begin(),
_Distance(buf.size()),
__comp);
}
template <class _RandomAccessIter>
inline void stable_sort(_RandomAccessIter __first,
_RandomAccessIter __last) {
__stable_sort_aux(__first, __last,
__value_type( __first ) ,
__distance_type( __first ) );
}
template <class _RandomAccessIter, class _Compare>
inline void stable_sort(_RandomAccessIter __first,
_RandomAccessIter __last, _Compare __comp) {
__stable_sort_aux(__first, __last,
__value_type( __first ) ,
__distance_type( __first ) ,
__comp);
}
template <class _RandomAccessIter, class _Tp>
void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
_RandomAccessIter __last, _Tp*) {
make_heap(__first, __middle);
for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
if (*__i < *__first)
__pop_heap(__first, __middle, __i, _Tp(*__i),
__distance_type( __first ) );
sort_heap(__first, __middle);
}
template <class _RandomAccessIter>
inline void partial_sort(_RandomAccessIter __first,
_RandomAccessIter __middle,
_RandomAccessIter __last) {
__partial_sort(__first, __middle, __last, __value_type( __first ) );
}
template <class _RandomAccessIter, class _Tp, class _Compare>
void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
_RandomAccessIter __last, _Tp*, _Compare __comp) {
make_heap(__first, __middle, __comp);
for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
if (__comp(*__i, *__first))
__pop_heap(__first, __middle, __i, _Tp(*__i), __comp,
__distance_type( __first ) );
sort_heap(__first, __middle, __comp);
}
template <class _RandomAccessIter, class _Compare>
inline void partial_sort(_RandomAccessIter __first,
_RandomAccessIter __middle,
_RandomAccessIter __last, _Compare __comp) {
__partial_sort(__first, __middle, __last, __value_type( __first ) , __comp);
}
template <class _InputIter, class _RandomAccessIter, class _Distance,
class _Tp>
_RandomAccessIter __partial_sort_copy(_InputIter __first,
_InputIter __last,
_RandomAccessIter __result_first,
_RandomAccessIter __result_last,
_Distance*, _Tp*) {
if (__result_first == __result_last) return __result_last;
_RandomAccessIter __result_real_last = __result_first;
while(__first != __last && __result_real_last != __result_last) {
*__result_real_last = *__first;
++__result_real_last;
++__first;
}
make_heap(__result_first, __result_real_last);
while (__first != __last) {
if (*__first < *__result_first)
__adjust_heap(__result_first, _Distance(0),
_Distance(__result_real_last - __result_first),
_Tp(*__first));
++__first;
}
sort_heap(__result_first, __result_real_last);
return __result_real_last;
}
template <class _InputIter, class _RandomAccessIter>
inline _RandomAccessIter
partial_sort_copy(_InputIter __first, _InputIter __last,
_RandomAccessIter __result_first,
_RandomAccessIter __result_last) {
return __partial_sort_copy(__first, __last, __result_first, __result_last,
__distance_type( __result_first ) ,
__value_type( __first ) );
}
template <class _InputIter, class _RandomAccessIter, class _Compare,
class _Distance, class _Tp>
_RandomAccessIter __partial_sort_copy(_InputIter __first,
_InputIter __last,
_RandomAccessIter __result_first,
_RandomAccessIter __result_last,
_Compare __comp, _Distance*, _Tp*) {
if (__result_first == __result_last) return __result_last;
_RandomAccessIter __result_real_last = __result_first;
while(__first != __last && __result_real_last != __result_last) {
*__result_real_last = *__first;
++__result_real_last;
++__first;
}
make_heap(__result_first, __result_real_last, __comp);
while (__first != __last) {
if (__comp(*__first, *__result_first))
__adjust_heap(__result_first, _Distance(0),
_Distance(__result_real_last - __result_first),
_Tp(*__first),
__comp);
++__first;
}
sort_heap(__result_first, __result_real_last, __comp);
return __result_real_last;
}
template <class _InputIter, class _RandomAccessIter, class _Compare>
inline _RandomAccessIter
partial_sort_copy(_InputIter __first, _InputIter __last,
_RandomAccessIter __result_first,
_RandomAccessIter __result_last, _Compare __comp) {
return __partial_sort_copy(__first, __last, __result_first, __result_last,
__comp,
__distance_type( __result_first ) ,
__value_type( __first ) );
}
template <class _RandomAccessIter, class _Tp>
void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
_RandomAccessIter __last, _Tp*) {
while (__last - __first > 3) {
_RandomAccessIter __cut =
__unguarded_partition(__first, __last,
_Tp(__median(*__first,
*(__first + (__last - __first)/2),
*(__last - 1))));
if (__cut <= __nth)
__first = __cut;
else
__last = __cut;
}
__insertion_sort(__first, __last);
}
template <class _RandomAccessIter>
inline void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
_RandomAccessIter __last) {
__nth_element(__first, __nth, __last, __value_type( __first ) );
}
template <class _RandomAccessIter, class _Tp, class _Compare>
void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
_RandomAccessIter __last, _Tp*, _Compare __comp) {
while (__last - __first > 3) {
_RandomAccessIter __cut =
__unguarded_partition(__first, __last,
_Tp(__median(*__first,
*(__first + (__last - __first)/2),
*(__last - 1),
__comp)),
__comp);
if (__cut <= __nth)
__first = __cut;
else
__last = __cut;
}
__insertion_sort(__first, __last, __comp);
}
template <class _RandomAccessIter, class _Compare>
inline void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
_RandomAccessIter __last, _Compare __comp) {
__nth_element(__first, __nth, __last, __value_type( __first ) , __comp);
}
template <class _ForwardIter, class _Tp, class _Distance>
_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val, _Distance*)
{
_Distance __len = 0;
distance(__first, __last, __len);
_Distance __half;
_ForwardIter __middle;
while (__len > 0) {
__half = __len >> 1;
__middle = __first;
advance(__middle, __half);
if (*__middle < __val) {
__first = __middle;
++__first;
__len = __len - __half - 1;
}
else
__len = __half;
}
return __first;
}
template <class _ForwardIter, class _Tp>
inline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val) {
return __lower_bound(__first, __last, __val,
__distance_type( __first ) );
}
template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val, _Compare __comp, _Distance*)
{
_Distance __len = 0;
distance(__first, __last, __len);
_Distance __half;
_ForwardIter __middle;
while (__len > 0) {
__half = __len >> 1;
__middle = __first;
advance(__middle, __half);
if (__comp(*__middle, __val)) {
__first = __middle;
++__first;
__len = __len - __half - 1;
}
else
__len = __half;
}
return __first;
}
template <class _ForwardIter, class _Tp, class _Compare>
inline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val, _Compare __comp) {
return __lower_bound(__first, __last, __val, __comp,
__distance_type( __first ) );
}
template <class _ForwardIter, class _Tp, class _Distance>
_ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val, _Distance*)
{
_Distance __len = 0;
distance(__first, __last, __len);
_Distance __half;
_ForwardIter __middle;
while (__len > 0) {
__half = __len >> 1;
__middle = __first;
advance(__middle, __half);
if (__val < *__middle)
__len = __half;
else {
__first = __middle;
++__first;
__len = __len - __half - 1;
}
}
return __first;
}
template <class _ForwardIter, class _Tp>
inline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val) {
return __upper_bound(__first, __last, __val,
__distance_type( __first ) );
}
template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
_ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val, _Compare __comp, _Distance*)
{
_Distance __len = 0;
distance(__first, __last, __len);
_Distance __half;
_ForwardIter __middle;
while (__len > 0) {
__half = __len >> 1;
__middle = __first;
advance(__middle, __half);
if (__comp(__val, *__middle))
__len = __half;
else {
__first = __middle;
++__first;
__len = __len - __half - 1;
}
}
return __first;
}
template <class _ForwardIter, class _Tp, class _Compare>
inline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val, _Compare __comp) {
return __upper_bound(__first, __last, __val, __comp,
__distance_type( __first ) );
}
template <class _ForwardIter, class _Tp, class _Distance>
pair<_ForwardIter, _ForwardIter>
__equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
_Distance*)
{
_Distance __len = 0;
distance(__first, __last, __len);
_Distance __half;
_ForwardIter __middle, __left, __right;
while (__len > 0) {
__half = __len >> 1;
__middle = __first;
advance(__middle, __half);
if (*__middle < __val) {
__first = __middle;
++__first;
__len = __len - __half - 1;
}
else if (__val < *__middle)
__len = __half;
else {
__left = lower_bound(__first, __middle, __val);
advance(__first, __len);
__right = upper_bound(++__middle, __first, __val);
return pair<_ForwardIter, _ForwardIter>(__left, __right);
}
}
return pair<_ForwardIter, _ForwardIter>(__first, __first);
}
template <class _ForwardIter, class _Tp>
inline pair<_ForwardIter, _ForwardIter>
equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) {
return __equal_range(__first, __last, __val,
__distance_type( __first ) );
}
template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
pair<_ForwardIter, _ForwardIter>
__equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
_Compare __comp, _Distance*)
{
_Distance __len = 0;
distance(__first, __last, __len);
_Distance __half;
_ForwardIter __middle, __left, __right;
while (__len > 0) {
__half = __len >> 1;
__middle = __first;
advance(__middle, __half);
if (__comp(*__middle, __val)) {
__first = __middle;
++__first;
__len = __len - __half - 1;
}
else if (__comp(__val, *__middle))
__len = __half;
else {
__left = lower_bound(__first, __middle, __val, __comp);
advance(__first, __len);
__right = upper_bound(++__middle, __first, __val, __comp);
return pair<_ForwardIter, _ForwardIter>(__left, __right);
}
}
return pair<_ForwardIter, _ForwardIter>(__first, __first);
}
template <class _ForwardIter, class _Tp, class _Compare>
inline pair<_ForwardIter, _ForwardIter>
equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
_Compare __comp) {
return __equal_range(__first, __last, __val, __comp,
__distance_type( __first ) );
}
template <class _ForwardIter, class _Tp>
bool binary_search(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val) {
_ForwardIter __i = lower_bound(__first, __last, __val);
return __i != __last && !(__val < *__i);
}
template <class _ForwardIter, class _Tp, class _Compare>
bool binary_search(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val,
_Compare __comp) {
_ForwardIter __i = lower_bound(__first, __last, __val, __comp);
return __i != __last && !__comp(__val, *__i);
}
template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result) {
while (__first1 != __last1 && __first2 != __last2) {
if (*__first2 < *__first1) {
*__result = *__first2;
++__first2;
}
else {
*__result = *__first1;
++__first1;
}
++__result;
}
return copy(__first2, __last2, copy(__first1, __last1, __result));
}
template <class _InputIter1, class _InputIter2, class _OutputIter,
class _Compare>
_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result, _Compare __comp) {
while (__first1 != __last1 && __first2 != __last2) {
if (__comp(*__first2, *__first1)) {
*__result = *__first2;
++__first2;
}
else {
*__result = *__first1;
++__first1;
}
++__result;
}
return copy(__first2, __last2, copy(__first1, __last1, __result));
}
template <class _BidirectionalIter, class _Distance>
void __merge_without_buffer(_BidirectionalIter __first,
_BidirectionalIter __middle,
_BidirectionalIter __last,
_Distance __len1, _Distance __len2) {
if (__len1 == 0 || __len2 == 0)
return;
if (__len1 + __len2 == 2) {
if (*__middle < *__first)
iter_swap(__first, __middle);
return;
}
_BidirectionalIter __first_cut = __first;
_BidirectionalIter __second_cut = __middle;
_Distance __len11 = 0;
_Distance __len22 = 0;
if (__len1 > __len2) {
__len11 = __len1 / 2;
advance(__first_cut, __len11);
__second_cut = lower_bound(__middle, __last, *__first_cut);
distance(__middle, __second_cut, __len22);
}
else {
__len22 = __len2 / 2;
advance(__second_cut, __len22);
__first_cut = upper_bound(__first, __middle, *__second_cut);
distance(__first, __first_cut, __len11);
}
_BidirectionalIter __new_middle
= rotate(__first_cut, __middle, __second_cut);
__merge_without_buffer(__first, __first_cut, __new_middle,
__len11, __len22);
__merge_without_buffer(__new_middle, __second_cut, __last, __len1 - __len11,
__len2 - __len22);
}
template <class _BidirectionalIter, class _Distance, class _Compare>
void __merge_without_buffer(_BidirectionalIter __first,
_BidirectionalIter __middle,
_BidirectionalIter __last,
_Distance __len1, _Distance __len2,
_Compare __comp) {
if (__len1 == 0 || __len2 == 0)
return;
if (__len1 + __len2 == 2) {
if (__comp(*__middle, *__first))
iter_swap(__first, __middle);
return;
}
_BidirectionalIter __first_cut = __first;
_BidirectionalIter __second_cut = __middle;
_Distance __len11 = 0;
_Distance __len22 = 0;
if (__len1 > __len2) {
__len11 = __len1 / 2;
advance(__first_cut, __len11);
__second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
distance(__middle, __second_cut, __len22);
}
else {
__len22 = __len2 / 2;
advance(__second_cut, __len22);
__first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
distance(__first, __first_cut, __len11);
}
_BidirectionalIter __new_middle
= rotate(__first_cut, __middle, __second_cut);
__merge_without_buffer(__first, __first_cut, __new_middle, __len11, __len22,
__comp);
__merge_without_buffer(__new_middle, __second_cut, __last, __len1 - __len11,
__len2 - __len22, __comp);
}
template <class _BidirectionalIter1, class _BidirectionalIter2,
class _Distance>
_BidirectionalIter1 __rotate_adaptive(_BidirectionalIter1 __first,
_BidirectionalIter1 __middle,
_BidirectionalIter1 __last,
_Distance __len1, _Distance __len2,
_BidirectionalIter2 __buffer,
_Distance __buffer_size) {
_BidirectionalIter2 __buffer_end;
if (__len1 > __len2 && __len2 <= __buffer_size) {
__buffer_end = copy(__middle, __last, __buffer);
copy_backward(__first, __middle, __last);
return copy(__buffer, __buffer_end, __first);
}
else if (__len1 <= __buffer_size) {
__buffer_end = copy(__first, __middle, __buffer);
copy(__middle, __last, __first);
return copy_backward(__buffer, __buffer_end, __last);
}
else
return rotate(__first, __middle, __last);
}
template <class _BidirectionalIter1, class _BidirectionalIter2,
class _BidirectionalIter3>
_BidirectionalIter3 __merge_backward(_BidirectionalIter1 __first1,
_BidirectionalIter1 __last1,
_BidirectionalIter2 __first2,
_BidirectionalIter2 __last2,
_BidirectionalIter3 __result) {
if (__first1 == __last1)
return copy_backward(__first2, __last2, __result);
if (__first2 == __last2)
return copy_backward(__first1, __last1, __result);
--__last1;
--__last2;
while (true) {
if (*__last2 < *__last1) {
*--__result = *__last1;
if (__first1 == __last1)
return copy_backward(__first2, ++__last2, __result);
--__last1;
}
else {
*--__result = *__last2;
if (__first2 == __last2)
return copy_backward(__first1, ++__last1, __result);
--__last2;
}
}
}
template <class _BidirectionalIter1, class _BidirectionalIter2,
class _BidirectionalIter3, class _Compare>
_BidirectionalIter3 __merge_backward(_BidirectionalIter1 __first1,
_BidirectionalIter1 __last1,
_BidirectionalIter2 __first2,
_BidirectionalIter2 __last2,
_BidirectionalIter3 __result,
_Compare __comp) {
if (__first1 == __last1)
return copy_backward(__first2, __last2, __result);
if (__first2 == __last2)
return copy_backward(__first1, __last1, __result);
--__last1;
--__last2;
while (true) {
if (__comp(*__last2, *__last1)) {
*--__result = *__last1;
if (__first1 == __last1)
return copy_backward(__first2, ++__last2, __result);
--__last1;
}
else {
*--__result = *__last2;
if (__first2 == __last2)
return copy_backward(__first1, ++__last1, __result);
--__last2;
}
}
}
template <class _BidirectionalIter, class _Distance, class _Pointer>
void __merge_adaptive(_BidirectionalIter __first,
_BidirectionalIter __middle,
_BidirectionalIter __last,
_Distance __len1, _Distance __len2,
_Pointer __buffer, _Distance __buffer_size) {
if (__len1 <= __len2 && __len1 <= __buffer_size) {
_Pointer __buffer_end = copy(__first, __middle, __buffer);
merge(__buffer, __buffer_end, __middle, __last, __first);
}
else if (__len2 <= __buffer_size) {
_Pointer __buffer_end = copy(__middle, __last, __buffer);
__merge_backward(__first, __middle, __buffer, __buffer_end, __last);
}
else {
_BidirectionalIter __first_cut = __first;
_BidirectionalIter __second_cut = __middle;
_Distance __len11 = 0;
_Distance __len22 = 0;
if (__len1 > __len2) {
__len11 = __len1 / 2;
advance(__first_cut, __len11);
__second_cut = lower_bound(__middle, __last, *__first_cut);
distance(__middle, __second_cut, __len22);
}
else {
__len22 = __len2 / 2;
advance(__second_cut, __len22);
__first_cut = upper_bound(__first, __middle, *__second_cut);
distance(__first, __first_cut, __len11);
}
_BidirectionalIter __new_middle =
__rotate_adaptive(__first_cut, __middle, __second_cut, __len1 - __len11,
__len22, __buffer, __buffer_size);
__merge_adaptive(__first, __first_cut, __new_middle, __len11,
__len22, __buffer, __buffer_size);
__merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
__len2 - __len22, __buffer, __buffer_size);
}
}
template <class _BidirectionalIter, class _Distance, class _Pointer,
class _Compare>
void __merge_adaptive(_BidirectionalIter __first,
_BidirectionalIter __middle,
_BidirectionalIter __last,
_Distance __len1, _Distance __len2,
_Pointer __buffer, _Distance __buffer_size,
_Compare __comp) {
if (__len1 <= __len2 && __len1 <= __buffer_size) {
_Pointer __buffer_end = copy(__first, __middle, __buffer);
merge(__buffer, __buffer_end, __middle, __last, __first, __comp);
}
else if (__len2 <= __buffer_size) {
_Pointer __buffer_end = copy(__middle, __last, __buffer);
__merge_backward(__first, __middle, __buffer, __buffer_end, __last,
__comp);
}
else {
_BidirectionalIter __first_cut = __first;
_BidirectionalIter __second_cut = __middle;
_Distance __len11 = 0;
_Distance __len22 = 0;
if (__len1 > __len2) {
__len11 = __len1 / 2;
advance(__first_cut, __len11);
__second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
distance(__middle, __second_cut, __len22);
}
else {
__len22 = __len2 / 2;
advance(__second_cut, __len22);
__first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
distance(__first, __first_cut, __len11);
}
_BidirectionalIter __new_middle =
__rotate_adaptive(__first_cut, __middle, __second_cut, __len1 - __len11,
__len22, __buffer, __buffer_size);
__merge_adaptive(__first, __first_cut, __new_middle, __len11,
__len22, __buffer, __buffer_size, __comp);
__merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
__len2 - __len22, __buffer, __buffer_size, __comp);
}
}
template <class _BidirectionalIter, class _Tp, class _Distance>
inline void __inplace_merge_aux(_BidirectionalIter __first,
_BidirectionalIter __middle,
_BidirectionalIter __last, _Tp*, _Distance*) {
_Distance __len1 = 0;
distance(__first, __middle, __len1);
_Distance __len2 = 0;
distance(__middle, __last, __len2);
_Temporary_buffer<_BidirectionalIter, _Tp> __buf(__first, __last);
if (__buf.begin() == 0)
__merge_without_buffer(__first, __middle, __last, __len1, __len2);
else
__merge_adaptive(__first, __middle, __last, __len1, __len2,
__buf.begin(), _Distance(__buf.size()));
}
template <class _BidirectionalIter, class _Tp,
class _Distance, class _Compare>
inline void __inplace_merge_aux(_BidirectionalIter __first,
_BidirectionalIter __middle,
_BidirectionalIter __last, _Tp*, _Distance*,
_Compare __comp) {
_Distance __len1 = 0;
distance(__first, __middle, __len1);
_Distance __len2 = 0;
distance(__middle, __last, __len2);
_Temporary_buffer<_BidirectionalIter, _Tp> __buf(__first, __last);
if (__buf.begin() == 0)
__merge_without_buffer(__first, __middle, __last, __len1, __len2, __comp);
else
__merge_adaptive(__first, __middle, __last, __len1, __len2,
__buf.begin(), _Distance(__buf.size()),
__comp);
}
template <class _BidirectionalIter>
inline void inplace_merge(_BidirectionalIter __first,
_BidirectionalIter __middle,
_BidirectionalIter __last) {
if (__first == __middle || __middle == __last)
return;
__inplace_merge_aux(__first, __middle, __last,
__value_type( __first ) , __distance_type( __first ) );
}
template <class _BidirectionalIter, class _Compare>
inline void inplace_merge(_BidirectionalIter __first,
_BidirectionalIter __middle,
_BidirectionalIter __last, _Compare __comp) {
if (__first == __middle || __middle == __last)
return;
__inplace_merge_aux(__first, __middle, __last,
__value_type( __first ) , __distance_type( __first ) ,
__comp);
}
template <class _InputIter1, class _InputIter2>
bool includes(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2) {
while (__first1 != __last1 && __first2 != __last2)
if (*__first2 < *__first1)
return false;
else if(*__first1 < *__first2)
++__first1;
else
++__first1, ++__first2;
return __first2 == __last2;
}
template <class _InputIter1, class _InputIter2, class _Compare>
bool includes(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2, _Compare __comp) {
while (__first1 != __last1 && __first2 != __last2)
if (__comp(*__first2, *__first1))
return false;
else if(__comp(*__first1, *__first2))
++__first1;
else
++__first1, ++__first2;
return __first2 == __last2;
}
template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter set_union(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result) {
while (__first1 != __last1 && __first2 != __last2) {
if (*__first1 < *__first2) {
*__result = *__first1;
++__first1;
}
else if (*__first2 < *__first1) {
*__result = *__first2;
++__first2;
}
else {
*__result = *__first1;
++__first1;
++__first2;
}
++__result;
}
return copy(__first2, __last2, copy(__first1, __last1, __result));
}
template <class _InputIter1, class _InputIter2, class _OutputIter,
class _Compare>
_OutputIter set_union(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result, _Compare __comp) {
while (__first1 != __last1 && __first2 != __last2) {
if (__comp(*__first1, *__first2)) {
*__result = *__first1;
++__first1;
}
else if (__comp(*__first2, *__first1)) {
*__result = *__first2;
++__first2;
}
else {
*__result = *__first1;
++__first1;
++__first2;
}
++__result;
}
return copy(__first2, __last2, copy(__first1, __last1, __result));
}
template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter set_intersection(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result) {
while (__first1 != __last1 && __first2 != __last2)
if (*__first1 < *__first2)
++__first1;
else if (*__first2 < *__first1)
++__first2;
else {
*__result = *__first1;
++__first1;
++__first2;
++__result;
}
return __result;
}
template <class _InputIter1, class _InputIter2, class _OutputIter,
class _Compare>
_OutputIter set_intersection(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result, _Compare __comp) {
while (__first1 != __last1 && __first2 != __last2)
if (__comp(*__first1, *__first2))
++__first1;
else if (__comp(*__first2, *__first1))
++__first2;
else {
*__result = *__first1;
++__first1;
++__first2;
++__result;
}
return __result;
}
template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter set_difference(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result) {
while (__first1 != __last1 && __first2 != __last2)
if (*__first1 < *__first2) {
*__result = *__first1;
++__first1;
++__result;
}
else if (*__first2 < *__first1)
++__first2;
else {
++__first1;
++__first2;
}
return copy(__first1, __last1, __result);
}
template <class _InputIter1, class _InputIter2, class _OutputIter,
class _Compare>
_OutputIter set_difference(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result, _Compare __comp) {
while (__first1 != __last1 && __first2 != __last2)
if (__comp(*__first1, *__first2)) {
*__result = *__first1;
++__first1;
++__result;
}
else if (__comp(*__first2, *__first1))
++__first2;
else {
++__first1;
++__first2;
}
return copy(__first1, __last1, __result);
}
template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter
set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result) {
while (__first1 != __last1 && __first2 != __last2)
if (*__first1 < *__first2) {
*__result = *__first1;
++__first1;
++__result;
}
else if (*__first2 < *__first1) {
*__result = *__first2;
++__first2;
++__result;
}
else {
++__first1;
++__first2;
}
return copy(__first2, __last2, copy(__first1, __last1, __result));
}
template <class _InputIter1, class _InputIter2, class _OutputIter,
class _Compare>
_OutputIter
set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __result,
_Compare __comp) {
while (__first1 != __last1 && __first2 != __last2)
if (__comp(*__first1, *__first2)) {
*__result = *__first1;
++__first1;
++__result;
}
else if (__comp(*__first2, *__first1)) {
*__result = *__first2;
++__first2;
++__result;
}
else {
++__first1;
++__first2;
}
return copy(__first2, __last2, copy(__first1, __last1, __result));
}
template <class _ForwardIter>
_ForwardIter max_element(_ForwardIter __first, _ForwardIter __last) {
if (__first == __last) return __first;
_ForwardIter __result = __first;
while (++__first != __last)
if (*__result < *__first)
__result = __first;
return __result;
}
template <class _ForwardIter, class _Compare>
_ForwardIter max_element(_ForwardIter __first, _ForwardIter __last,
_Compare __comp) {
if (__first == __last) return __first;
_ForwardIter __result = __first;
while (++__first != __last)
if (__comp(*__result, *__first)) __result = __first;
return __result;
}
template <class _ForwardIter>
_ForwardIter min_element(_ForwardIter __first, _ForwardIter __last) {
if (__first == __last) return __first;
_ForwardIter __result = __first;
while (++__first != __last)
if (*__first < *__result)
__result = __first;
return __result;
}
template <class _ForwardIter, class _Compare>
_ForwardIter min_element(_ForwardIter __first, _ForwardIter __last,
_Compare __comp) {
if (__first == __last) return __first;
_ForwardIter __result = __first;
while (++__first != __last)
if (__comp(*__first, *__result))
__result = __first;
return __result;
}
template <class _BidirectionalIter>
bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last) {
if (__first == __last)
return false;
_BidirectionalIter __i = __first;
++__i;
if (__i == __last)
return false;
__i = __last;
--__i;
for(;;) {
_BidirectionalIter __ii = __i;
--__i;
if (*__i < *__ii) {
_BidirectionalIter __j = __last;
while (!(*__i < *--__j))
{}
iter_swap(__i, __j);
reverse(__ii, __last);
return true;
}
if (__i == __first) {
reverse(__first, __last);
return false;
}
}
}
template <class _BidirectionalIter, class _Compare>
bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
_Compare __comp) {
if (__first == __last)
return false;
_BidirectionalIter __i = __first;
++__i;
if (__i == __last)
return false;
__i = __last;
--__i;
for(;;) {
_BidirectionalIter __ii = __i;
--__i;
if (__comp(*__i, *__ii)) {
_BidirectionalIter __j = __last;
while (!__comp(*__i, *--__j))
{}
iter_swap(__i, __j);
reverse(__ii, __last);
return true;
}
if (__i == __first) {
reverse(__first, __last);
return false;
}
}
}
template <class _BidirectionalIter>
bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last) {
if (__first == __last)
return false;
_BidirectionalIter __i = __first;
++__i;
if (__i == __last)
return false;
__i = __last;
--__i;
for(;;) {
_BidirectionalIter __ii = __i;
--__i;
if (*__ii < *__i) {
_BidirectionalIter __j = __last;
while (!(*--__j < *__i))
{}
iter_swap(__i, __j);
reverse(__ii, __last);
return true;
}
if (__i == __first) {
reverse(__first, __last);
return false;
}
}
}
template <class _BidirectionalIter, class _Compare>
bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
_Compare __comp) {
if (__first == __last)
return false;
_BidirectionalIter __i = __first;
++__i;
if (__i == __last)
return false;
__i = __last;
--__i;
for(;;) {
_BidirectionalIter __ii = __i;
--__i;
if (__comp(*__ii, *__i)) {
_BidirectionalIter __j = __last;
while (!__comp(*--__j, *__i))
{}
iter_swap(__i, __j);
reverse(__ii, __last);
return true;
}
if (__i == __first) {
reverse(__first, __last);
return false;
}
}
}
template <class _InputIter, class _ForwardIter>
_InputIter find_first_of(_InputIter __first1, _InputIter __last1,
_ForwardIter __first2, _ForwardIter __last2)
{
for ( ; __first1 != __last1; ++__first1)
for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
if (*__first1 == *__iter)
return __first1;
return __last1;
}
template <class _InputIter, class _ForwardIter, class _BinaryPredicate>
_InputIter find_first_of(_InputIter __first1, _InputIter __last1,
_ForwardIter __first2, _ForwardIter __last2,
_BinaryPredicate __comp)
{
for ( ; __first1 != __last1; ++__first1)
for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
if (__comp(*__first1, *__iter))
return __first1;
return __last1;
}
template <class _ForwardIter1, class _ForwardIter2>
_ForwardIter1 __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
_ForwardIter2 __first2, _ForwardIter2 __last2,
forward_iterator_tag, forward_iterator_tag)
{
if (__first2 == __last2)
return __last1;
else {
_ForwardIter1 __result = __last1;
while (1) {
_ForwardIter1 __new_result
= search(__first1, __last1, __first2, __last2);
if (__new_result == __last1)
return __result;
else {
__result = __new_result;
__first1 = __new_result;
++__first1;
}
}
}
}
template <class _ForwardIter1, class _ForwardIter2,
class _BinaryPredicate>
_ForwardIter1 __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
_ForwardIter2 __first2, _ForwardIter2 __last2,
forward_iterator_tag, forward_iterator_tag,
_BinaryPredicate __comp)
{
if (__first2 == __last2)
return __last1;
else {
_ForwardIter1 __result = __last1;
while (1) {
_ForwardIter1 __new_result
= search(__first1, __last1, __first2, __last2, __comp);
if (__new_result == __last1)
return __result;
else {
__result = __new_result;
__first1 = __new_result;
++__first1;
}
}
}
}
template <class _BidirectionalIter1, class _BidirectionalIter2>
_BidirectionalIter1
__find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
_BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
bidirectional_iterator_tag, bidirectional_iterator_tag)
{
typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
typedef reverse_iterator<_BidirectionalIter2> _RevIter2;
_RevIter1 __rlast1(__first1);
_RevIter2 __rlast2(__first2);
_RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
_RevIter2(__last2), __rlast2);
if (__rresult == __rlast1)
return __last1;
else {
_BidirectionalIter1 __result = __rresult.base();
advance(__result, -distance(__first2, __last2));
return __result;
}
}
template <class _BidirectionalIter1, class _BidirectionalIter2,
class _BinaryPredicate>
_BidirectionalIter1
__find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
_BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
bidirectional_iterator_tag, bidirectional_iterator_tag,
_BinaryPredicate __comp)
{
typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
typedef reverse_iterator<_BidirectionalIter2> _RevIter2;
_RevIter1 __rlast1(__first1);
_RevIter2 __rlast2(__first2);
_RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
_RevIter2(__last2), __rlast2,
__comp);
if (__rresult == __rlast1)
return __last1;
else {
_BidirectionalIter1 __result = __rresult.base();
advance(__result, -distance(__first2, __last2));
return __result;
}
}
template <class _ForwardIter1, class _ForwardIter2>
inline _ForwardIter1
find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
_ForwardIter2 __first2, _ForwardIter2 __last2)
{
return __find_end(__first1, __last1, __first2, __last2,
__iterator_category( __first1 ) ,
__iterator_category( __first2 ) );
}
template <class _ForwardIter1, class _ForwardIter2,
class _BinaryPredicate>
inline _ForwardIter1
find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
_ForwardIter2 __first2, _ForwardIter2 __last2,
_BinaryPredicate __comp)
{
return __find_end(__first1, __last1, __first2, __last2,
__iterator_category( __first1 ) ,
__iterator_category( __first2 ) ,
__comp);
}
template <class _RandomAccessIter, class _Distance>
bool __is_heap(_RandomAccessIter __first, _Distance __n)
{
_Distance __parent = 0;
for (_Distance __child = 1; __child < __n; ++__child) {
if (__first[__parent] < __first[__child])
return false;
if ((__child & 1) == 0)
++__parent;
}
return true;
}
template <class _RandomAccessIter, class _Distance, class _StrictWeakOrdering>
bool __is_heap(_RandomAccessIter __first, _StrictWeakOrdering __comp,
_Distance __n)
{
_Distance __parent = 0;
for (_Distance __child = 1; __child < __n; ++__child) {
if (__comp(__first[__parent], __first[__child]))
return false;
if ((__child & 1) == 0)
++__parent;
}
return true;
}
template <class _RandomAccessIter>
inline bool is_heap(_RandomAccessIter __first, _RandomAccessIter __last)
{
return __is_heap(__first, __last - __first);
}
template <class _RandomAccessIter, class _StrictWeakOrdering>
inline bool is_heap(_RandomAccessIter __first, _RandomAccessIter __last,
_StrictWeakOrdering __comp)
{
return __is_heap(__first, __comp, __last - __first);
}
template <class _ForwardIter>
bool is_sorted(_ForwardIter __first, _ForwardIter __last)
{
if (__first == __last)
return true;
_ForwardIter __next = __first;
for (++__next; __next != __last; __first = __next, ++__next) {
if (*__next < *__first)
return false;
}
return true;
}
template <class _ForwardIter, class _StrictWeakOrdering>
bool is_sorted(_ForwardIter __first, _ForwardIter __last,
_StrictWeakOrdering __comp)
{
if (__first == __last)
return true;
_ForwardIter __next = __first;
for (++__next; __next != __last; __first = __next, ++__next) {
if (__comp(*__next, *__first))
return false;
}
return true;
}
}
# 34 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_algorithm.h" 2 3
# 68 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 1 "/home/staff/nathan/solaris/local/include/g++-v3/bits/string.tcc" 1 3
namespace std
{
template<typename _CharT, typename _Traits, typename _Alloc>
template<typename _InIter>
_CharT*
basic_string<_CharT, _Traits, _Alloc>::
_S_construct(_InIter __first, _InIter __last, const _Alloc& __a,
input_iterator_tag)
{
if (__first == __last && __a == _Alloc())
return _S_empty_rep()._M_refcopy();
_CharT __buf[100];
size_type __i = 0;
while (__first != __last && __i < sizeof(__buf)/sizeof(_CharT))
{
__buf[__i++] = *__first;
++__first;
}
_Rep* __r = _Rep::_S_create(__i, __a);
_Traits::copy(__r->_M_data(), __buf, __i);
__r->_M_length = __i;
try {
for (;;)
{
_CharT* __p = __r->_M_data() + __r->_M_length;
_CharT* __end = __r->_M_data() + __r->_M_capacity;
for (;;)
{
if (__first == __last)
{
__r->_M_length = __p - __r->_M_data();
*__p = _CharT();
return __r->_M_data();
}
if (__p == __end)
break;
*__p++ = *__first; ++__first;
}
size_type __len = __p - __r->_M_data ();
_Rep* __another = _Rep::_S_create(__len+1, __a);
_Traits::copy (__another->_M_data(), __r->_M_data(), __len);
__r->_M_destroy(__a);
__r = __another;
__r->_M_length = __len;
}
}
catch (...) {
__r->_M_destroy(__a); throw;
}
return 0;
}
template<typename _CharT, typename _Traits, typename _Alloc>
template <class _InIter>
_CharT*
basic_string<_CharT,_Traits,_Alloc>::
_S_construct(_InIter __first, _InIter __last, const _Alloc& __a,
forward_iterator_tag)
{
if (__first == __last && __a == _Alloc())
return _S_empty_rep()._M_refcopy();
typename iterator_traits<_InIter>::difference_type
__n = distance(__first, __last);
do { if ( size_type(__n) >= npos ) __length_error ("size_type(__n) >= npos"); } while (0) ;
_Rep* __r = _Rep::_S_create(__n, __a);
try {
_S_copy_chars(__r->_M_data (), __first, __last);
}
catch (...) {
__r->_M_destroy(__a);
throw;
}
__r->_M_length = __n;
__r->_M_data()[__n] = _CharT();
return __r->_M_data();
}
template<typename _CharT, typename _Traits, typename _Alloc>
_CharT*
basic_string<_CharT,_Traits, _Alloc>::
_S_construct(size_type __n, _CharT __c, const _Alloc& __a)
{
do { if ( __n >= npos ) __length_error ("__n >= npos"); } while (0) ;
if (__n == 0 && __a == _Alloc())
return _S_empty_rep()._M_refcopy();
_Rep* __r = _Rep::_S_create(__n, __a);
try {
if (__n)
_Traits::assign(__r->_M_data(), __n, __c);
}
catch (...) {
__r->_M_destroy(__a);
throw;
}
__r->_M_length = __n;
__r->_M_data()[__n] = _CharT();
return __r->_M_data();
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::
basic_string (const basic_string& __str)
: _M_dataplus(__str._M_rep()->_M_grab(_Alloc(), __str.get_allocator()),
__str.get_allocator())
{ }
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::
basic_string (const _Alloc& __a)
: _M_dataplus (_S_construct (size_type(),_CharT(),__a), __a)
{ }
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::basic_string
(const basic_string& __str, size_type __pos, size_type __n)
: _M_dataplus (_S_construct (__str._M_check (__pos),
__str._M_fold (__pos, __n), _Alloc ()),
_Alloc ())
{ }
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::basic_string
(const basic_string& __str, size_type __pos,
size_type __n, const _Alloc& __a)
: _M_dataplus (_S_construct (__str._M_check (__pos),
__str._M_fold (__pos, __n), __a), __a)
{ }
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::basic_string
(const _CharT* __s, size_type __n, const _Alloc& __a)
: _M_dataplus (_S_construct (__s, __s+__n, __a), __a)
{ }
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::basic_string
(const _CharT* __s, const _Alloc& __a)
: _M_dataplus (_S_construct (__s, __s+_Traits::length(__s), __a), __a)
{ }
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::basic_string
(size_type __n, _CharT __c, const _Alloc& __a)
: _M_dataplus (_S_construct (__n, __c, __a), __a)
{ }
template<typename _CharT, typename _Traits, typename _Alloc>
template<class _InputIterator>
basic_string<_CharT, _Traits, _Alloc>::basic_string (
_InputIterator __begin, _InputIterator __end,
const _Alloc& __a)
: _M_dataplus (_S_construct(__begin, __end, __a), __a)
{ }
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::
assign (const basic_string& __str)
{
if (_M_rep () != __str._M_rep ())
{
_CharT* __tmp = __str._M_rep ()->
_M_grab (this->get_allocator (), __str.get_allocator ());
_M_rep ()->_M_dispose (this->get_allocator ());
_M_data (__tmp);
}
return *this;
}
# 242 "/home/staff/nathan/solaris/local/include/g++-v3/bits/string.tcc" 3
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::_Rep::
_M_destroy (const _Alloc& __a) throw ()
{
_Raw_bytes_alloc(__a).deallocate ((char*)this,
sizeof (_Rep) + (_M_capacity + 1) * sizeof (_CharT));
}
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::_M_leak_hard ()
{
if (_M_rep ()->_M_state > 0)
_M_mutate (this->size (), this->size (), 0);
_M_rep ()->_M_state = -1;
}
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::_M_mutate(size_type __nsize,
size_type __keep,
size_type __keep_end)
{
size_type __old_size = this->size ();
if (_M_rep ()->_M_state <= 0 && __nsize <= __old_size)
{
_M_rep ()->_M_state = 0;
if (__keep_end && __nsize < __old_size)
_Traits::move(_M_data () + __nsize - __keep_end,
_M_data () + __old_size - __keep_end, __keep_end);
}
else
{
_Rep* __r = _Rep::_S_create (__old_size, get_allocator ());
try
{
if (__keep)
_Traits::copy (__r->_M_data (), _M_data (), __keep);
if (__keep_end)
_Traits::copy (__r->_M_data () + __nsize - __keep_end,
_M_data () + __old_size - __keep_end,
__keep_end);
}
catch (...)
{ __r->_M_dispose (get_allocator ()); throw; }
_M_rep ()->_M_dispose (get_allocator ());
_M_data (__r->_M_data ());
}
_M_rep ()->_M_length = __nsize;
(_M_data ())[__nsize] = _CharT();
}
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::reserve (size_type __res_arg)
{
if (__res_arg > this->capacity ())
_M_mutate(__res_arg, this->size (), 0);
}
template<typename _CharT, typename _Traits, typename _Alloc>
void basic_string<_CharT, _Traits, _Alloc>::swap (basic_string& __s)
{
if (_M_rep ()->_M_state < 0) _M_rep ()->_M_state = 0;
if (__s._M_rep ()->_M_state < 0) __s._M_rep ()->_M_state = 0;
if (get_allocator () == __s.get_allocator ())
{
_CharT* __tmp = _M_data ();
_M_data(__s._M_data ());
__s._M_data(__tmp);
}
else
{
basic_string __tmp1 (_M_ibegin (), _M_iend (), __s.get_allocator ());
basic_string __tmp2 (__s._M_ibegin (), __s._M_iend (), get_allocator ());
*this = __tmp2;
__s = __tmp1;
}
}
# 338 "/home/staff/nathan/solaris/local/include/g++-v3/bits/string.tcc" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline size_t
basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_frob_size (size_t __s)
{
if (__s >= _S_max_size / 2)
return __s;
size_t __i = 16;
while (__i < __s) __i *= 2;
return __i;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::_Rep*
basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_create (size_t __capacity,
const _Alloc& __alloc)
{
__capacity = _S_frob_size (__capacity);
_Rep *__p = new ((void*)_Raw_bytes_alloc(__alloc).allocate (sizeof (_Rep) +
(__capacity+1) * sizeof (_CharT))) _Rep;
__p->_M_capacity = __capacity;
__p->_M_state = 0;
__p->_M_length = 0;
return __p;
}
template<typename _CharT, typename _Traits, typename _Alloc>
_CharT*
basic_string<_CharT, _Traits, _Alloc>::_Rep::_M_clone (const _Alloc& __alloc)
{
_Rep* __p = _Rep::_S_create (_M_length, __alloc);
if (_M_length)
{
try { _Traits::copy(__p->_M_data (), _M_data (), _M_length); }
catch (...) { __p->_M_destroy(__alloc); throw; }
}
__p->_M_length = _M_length;
return __p->_M_data ();
}
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_excess_slop (size_t __s,
size_t __r)
{
return 2 * (__s <= 16 ? 16 : __s) < __r;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename _Alloc::size_type
basic_string<_CharT, _Traits, _Alloc>::_S_empty_rep_storage[
(sizeof(_Rep)+sizeof(_CharT)+sizeof(size_type)-1)/sizeof(size_type)];
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::resize (size_type __n, _CharT __c)
{
do { if ( __n > max_size () ) __length_error ("__n > max_size ()"); } while (0) ;
size_type __size = this->size ();
if (__size < __n)
this->append(__n - __size, __c);
else if (__n < __size)
this->erase(__n);
}
template<typename _CharT, typename _Traits, typename _Alloc>
template<class _InputIterator>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::_M_replace (
iterator __i1, iterator __i2, _InputIterator __j1, _InputIterator __j2,
input_iterator_tag)
{
basic_string __s(__j1, __j2);
return this->replace(__i1, __i2, __s._M_ibegin (), __s._M_iend ());
}
template<typename _CharT, typename _Traits, typename _Alloc>
template<class _ForwardIterator>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::
_M_replace(iterator __i1, iterator __i2, _ForwardIterator __j1,
_ForwardIterator __j2, forward_iterator_tag)
{
size_type __dist_old = __i2 - __i1;
size_type __dist_new = static_cast<size_type>(distance(__j1, __j2));
size_type __dist_max = this->max_size();
do { if ( __dist_max <= size_type(__dist_new) ) __length_error ("__dist_max <= size_type(__dist_new)"); } while (0) ;
size_type __newlen = (this->size() - __dist_old) + __dist_new;
size_type __off = __i1 - _M_ibegin();
_M_mutate(__newlen, __off, _M_iend() - __i2);
if (__dist_new)
_S_copy_chars(_M_data() + __off, __j1, __j2);
return *this;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::replace (size_type __pos1, size_type __n1,
const basic_string& __str,
size_type __pos2, size_type __n2)
{
return this->replace(_M_check (__pos1), _M_fold (__pos1,__n1),
__str._M_check(__pos2), __str._M_fold (__pos2,__n2));
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::replace (iterator __i1, iterator __i2,
size_type __n2, _CharT __c)
{
size_type __n1 = __i2 - __i1;
size_type __off1 = __i1 - _M_ibegin ();
do { if ( max_size () - (this->size () - __n1) <= __n2 ) __length_error ("max_size () - (this->size () - __n1) <= __n2"); } while (0) ;
size_type __newlen = (this->size () - __n1) + __n2;
_M_mutate (__newlen, __off1, _M_iend () - __i2);
if (__n2)
_Traits::assign(_M_data () + __off1, __n2, __c);
return *this;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::copy (_CharT* __s, size_type __n,
size_type __pos) const
{
do { if ( __pos > length () ) __out_of_range ("__pos > length ()"); } while (0) ;
if (__n > length () - __pos)
__n = length () - __pos;
_Traits::copy (__s, data () + __pos, __n);
return __n;
}
template<typename _CharT, typename _Traits, typename _Alloc>
const _CharT*
basic_string<_CharT, _Traits, _Alloc>::_S_find (const _CharT* __ptr1,
const _CharT* __ptr2,
_CharT __c)
{
return find_if(__ptr1, __ptr2, _Char_traits_match<_CharT,_Traits>(__c));
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::find (const _CharT* __s, size_type __pos,
size_type __n) const
{
size_t __xpos = __pos;
for (; __xpos + __n <= length (); ++__xpos)
if (_Traits::eq (data () [__xpos], *__s)
&& _Traits::compare (data () + __xpos, __s, __n) == 0)
return __xpos;
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::find (_CharT __c, size_type __pos) const
{
if (__pos < this->size())
{
const _CharT* __p = _S_find(data () + __pos, _M_data (), __c);
if (__p != _M_data () + this->size())
return __p - data ();
}
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::rfind (const _CharT* __s, size_type __pos,
size_type __n) const
{
if (__n > length ())
return npos;
size_t __xpos = length () - __n;
if (__xpos > __pos)
__xpos = __pos;
for (++__xpos; __xpos-- > 0; )
if (_Traits::eq (data () [__xpos], *__s)
&& _Traits::compare (data () + __xpos, __s, __n) == 0)
return __xpos;
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::rfind (_CharT __c, size_type __pos) const
{
if (1 > length ())
return npos;
size_t __xpos = length () - 1;
if (__xpos > __pos)
__xpos = __pos;
for (++__xpos; __xpos-- > 0; )
if (_Traits::eq (data () [__xpos], __c))
return __xpos;
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::find_first_of (const _CharT* __s,
size_type __pos,
size_type __n) const
{
for (; __pos < length (); ++__pos)
if (_S_find(__s, __s+__n, data () [__pos]) != __s + __n)
return __pos;
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::find_last_of (const _CharT* __s,
size_type __pos,
size_type __n) const
{
size_type __xpos = this->size();
if (__xpos == 0) return this->npos;
if (--__xpos > __pos) __xpos = __pos;
do
{
if (_S_find(__s, __s+__n, data () [__xpos]) != __s + __n)
return __xpos;
} while (__xpos-- != 0);
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::find_first_not_of (const _CharT* __s,
size_type __pos,
size_type __n) const
{
size_t __xpos = __pos;
for (; __xpos < length (); ++__xpos)
if (_S_find(__s, __s+__n, data () [__xpos]) == __s + __n)
return __xpos;
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::find_first_not_of (_CharT __c,
size_type __pos) const
{
size_t __xpos = __pos;
for (; __xpos < length (); ++__xpos)
if (!_Traits::eq (data () [__xpos], __c))
return __xpos;
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::find_last_not_of (const _CharT* __s,
size_type __pos,
size_type __n) const
{
size_type __xpos = this->size();
if (__xpos == 0) return this->npos;
if (--__xpos > __pos) __xpos = __pos;
do
{
if (_S_find(__s, __s + __n, data () [__xpos]) == __s + __n)
return __xpos;
} while (__xpos--);
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::find_last_not_of (_CharT __c,
size_type __pos) const
{
size_type __xpos = this->size();
if (__xpos == 0) return this->npos;
if (--__xpos > __pos) __xpos = __pos;
do
{
if (!_Traits::eq (data () [__xpos], __c))
return __xpos;
} while (__xpos--);
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string<_CharT, _Traits, _Alloc>::compare (const basic_string& __str) const
{
size_type __rlen = min (length (), __str.length ());
int __r = _Traits::compare (data (), __str.data (), __rlen);
if (__r != 0)
return __r;
return length () - __str.length ();
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string<_CharT, _Traits, _Alloc>::compare (size_type __pos1, size_type __n1,
const basic_string& __str) const
{
do { if ( __pos1 > length () ) __out_of_range ("__pos1 > length ()"); } while (0) ;
size_type __rlen = length () - __pos1;
if (__rlen > __n1)
__rlen = __n1;
if (__rlen > __str.length ())
__rlen = __str.length ();
int __r = _Traits::compare (data () + __pos1, __str.data (), __rlen);
if (__r != 0)
return __r;
if (__rlen == __n1)
return 0;
return (length () - __pos1) - __str.length ();
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string<_CharT, _Traits, _Alloc>::compare (size_type __pos1, size_type __n1,
const basic_string& __str,
size_type __pos2,
size_type __n2) const
{
do { if ( __pos1 > length () ) __out_of_range ("__pos1 > length ()"); } while (0) ;
do { if ( __pos2 > __str.length () ) __out_of_range ("__pos2 > __str.length ()"); } while (0) ;
const size_type __elen1 = min (length () - __pos1, __n1);
const size_type __elen2 = min (__str.length () - __pos2, __n2);
const size_t __rlen = min (__elen1, __elen2);
int __r = _Traits::compare (data () + __pos1, __str.data () + __pos2, __rlen);
if (__r != 0)
return __r;
return __elen1 - __elen2;
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string<_CharT, _Traits, _Alloc>::compare (const _CharT* __s) const
{
int __r = _Traits::compare (data (), __s, length ());
if (__r != 0)
return __r;
else
return size() - _Traits::length (__s);
return 0;
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string <_CharT,_Traits,_Alloc>::compare (size_type __pos, size_type __n1,
const _CharT* __s,
size_type __n2) const
{
do { if ( __pos > this->length () ) __out_of_range ("__pos > this->length ()"); } while (0) ;
const size_type __elen1 = min (length () - __pos, __n1);
const size_type __elen2 = min (_Traits::length (__s), __n2);
const size_type __rlen = min (__elen1, __elen2);
int __r = _Traits::compare (data () + __pos, __s, __rlen);
if (__r != 0)
return __r;
return __elen1 - __elen2;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_istream<_CharT,_Traits>&
operator>> (basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT, _Traits, _Alloc>& __s)
{
typename basic_istream<_CharT,_Traits>::sentry __cerb (__is);
if (__cerb)
{
__s.resize (0);
basic_streambuf<_CharT,_Traits>* __sb = __is.rdbuf ();
streamsize __w = __is.width (0);
ios_base::iostate __error = ios_base::goodbit;
while (1)
{
typename _Traits::int_type __ch = __sb->sgetc ();
if (_Traits::eq_int_type(__ch,_Traits::eof()))
{ __error = ios_base::eofbit; break; }
else if (isspace (__ch))
{ break; }
__s += _Traits::to_char_type(__ch);
__sb->sbumpc ();
if (--__w == 0)
break;
}
if (__s.length () == 0) __error |= ios_base::failbit;
if (__error)
__is.setstate (__error);
}
return __is;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_ostream<_CharT,_Traits>&
operator<< (basic_ostream<_CharT,_Traits>& __o,
const basic_string<_CharT, _Traits, _Alloc>& __s)
{
return __o.write (__s.data (), __s.length ());
}
template <class _CharT, class _Traits, class _Alloc>
basic_istream<_CharT,_Traits>&
getline (basic_istream<_CharT,_Traits>& __is,
basic_string<_CharT, _Traits, _Alloc>& __s,
_CharT __delim)
{
typename basic_istream<_CharT,_Traits>::sentry __cerb(__is);
if (__cerb)
{
basic_streambuf<_CharT,_Traits>* __sb = __is.rdbuf ();
__s.resize (0);
streamsize __count = 0;
ios_base::iostate __error = ios_base::goodbit;
while (1)
{
typename _Traits::int_type __ch = __sb->sbumpc ();
if (_Traits::eq_int_type(__ch, _Traits::eof()))
{ __error = ios_base::eofbit; break; }
++__count;
if (_Traits::eq(_Traits::to_char_type(__ch), __delim))
break;
if (__s.length () == __s.npos - 1)
{ __error = ios_base::failbit; break; }
__s += _Traits::to_char_type(__ch);
}
__is._M_gcount = __count;
if (__count == 0) __error |= ios_base::failbit;
if (__error != ios_base::goodbit)
__is.setstate (__error);
}
return __is;
}
template <class _CharT, class _Traits, class _Alloc>
void
_S_string_copy(const basic_string<_CharT, _Traits, _Alloc>& __s,
_CharT* __buf, typename _Alloc::size_type __bufsiz)
{
typename _Alloc::size_type __bytes =
__s.size () > __bufsiz-1 ? __bufsiz-1 : __s.size ();
_Traits::copy(__buf, __s.data (), __bytes);
__buf[__bytes] = _CharT();
}
}
# 69 "/home/staff/nathan/solaris/local/include/g++-v3/bits/std_string.h" 2 3
# 2 "/home/staff/nathan/solaris/local/include/g++-v3/string" 2 3
# 1 "foo.cc" 2
basic_string <char> t;
nathan@manao:154>uname -a && ss-g++ -v
SunOS manao 5.6 Generic_105181-03 sun4u sparc
Reading specs from /home/staff/nathan/solaris/local/sparc-SunOS-5/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.20/specs
gcc version egcs-2.93.20 19990427 (gcc2 ss-980929 experimental)
nathan@manao:155>ss-g++ -c -I$HOME_LOCAL/include/g++-v3 foo.cc -Wcast-align
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h: In function `static char * __default_alloc_template<false,0>::_S_chunk_alloc(unsigned int, int &)':
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h:480: instantiated from `__default_alloc_template<false,0>::_S_refill(unsigned int)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h:368: instantiated from `__default_alloc_template<false,0>::allocate(unsigned int)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h:596: instantiated from `allocator<char>::allocate(unsigned int, const void *)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/string.tcc:365: instantiated from `basic_string<char,char_traits<char>,allocator<char> >::_Rep::_S_create(unsigned int, const allocator<char> &)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/string.tcc:378: instantiated from `basic_string<char,char_traits<char>,allocator<char> >::_Rep::_M_clone(const allocator<char> &)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/basic_string.h:92: instantiated from `basic_string<char,char_traits<char>,allocator<char> >::_Rep::_M_grab(const allocator<char> &, const allocator<char> &)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/string.tcc:161: instantiated from `basic_string<char,char_traits<char>,allocator<char> >::basic_string(const basic_string<char,char_traits<char>,allocator<char> > &)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/ios_base.h:153: instantiated from here
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h:437: warning: cast increases required alignment of target type
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h: In function `static void * __default_alloc_template<false,0>::_S_refill(unsigned int)':
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h:368: instantiated from `__default_alloc_template<false,0>::allocate(unsigned int)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h:596: instantiated from `allocator<char>::allocate(unsigned int, const void *)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/string.tcc:365: instantiated from `basic_string<char,char_traits<char>,allocator<char> >::_Rep::_S_create(unsigned int, const allocator<char> &)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/string.tcc:378: instantiated from `basic_string<char,char_traits<char>,allocator<char> >::_Rep::_M_clone(const allocator<char> &)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/basic_string.h:92: instantiated from `basic_string<char,char_traits<char>,allocator<char> >::_Rep::_M_grab(const allocator<char> &, const allocator<char> &)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/string.tcc:161: instantiated from `basic_string<char,char_traits<char>,allocator<char> >::basic_string(const basic_string<char,char_traits<char>,allocator<char> > &)'
/home/staff/nathan/solaris/local/include/g++-v3/bits/ios_base.h:153: instantiated from here
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h:491: warning: cast increases required alignment of target type
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h:492: warning: cast increases required alignment of target type
/home/staff/nathan/solaris/local/include/g++-v3/bits/stl_alloc.h:495: warning: cast increases required alignment of target type
libstdc++/ChangeLog:
Thu Apr 29 10:55:00 BST 1999 Nathan Sidwell <nathan@acm.org>
* stl/bits/stl_alloc.h (__default_alloc_template): Convert pointers
via void *, to avoid alignment warnings.
Index: libstdc++/stl/bits/stl_alloc.h
===================================================================
RCS file: /cvs/libstdc++/libstdc++/stl/bits/stl_alloc.h,v
retrieving revision 1.9
diff -c -3 -p -r1.9 stl_alloc.h
*** stl_alloc.h 1999/04/06 17:44:03 1.9
--- stl_alloc.h 1999/04/29 09:54:33
*************** __default_alloc_template<__threads, __in
*** 433,440 ****
_Obj* __STL_VOLATILE* __my_free_list =
_S_free_list + _S_freelist_index(__bytes_left);
! ((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list;
! *__my_free_list = (_Obj*)_S_start_free;
}
_S_start_free = (char*)malloc(__bytes_to_get);
if (0 == _S_start_free) {
--- 433,440 ----
_Obj* __STL_VOLATILE* __my_free_list =
_S_free_list + _S_freelist_index(__bytes_left);
! ((_Obj*)(void *)_S_start_free) -> _M_free_list_link = *__my_free_list;
! *__my_free_list = (_Obj*)(void *)_S_start_free;
}
_S_start_free = (char*)malloc(__bytes_to_get);
if (0 == _S_start_free) {
*************** __default_alloc_template<__threads, __in
*** 488,498 ****
__my_free_list = _S_free_list + _S_freelist_index(__n);
/* Build free list in chunk */
! __result = (_Obj*)__chunk;
! *__my_free_list = __next_obj = (_Obj*)(__chunk + __n);
for (__i = 1; ; __i++) {
__current_obj = __next_obj;
! __next_obj = (_Obj*)((char*)__next_obj + __n);
if (__nobjs - 1 == __i) {
__current_obj -> _M_free_list_link = 0;
break;
--- 488,498 ----
__my_free_list = _S_free_list + _S_freelist_index(__n);
/* Build free list in chunk */
! __result = (_Obj*)(void *)__chunk;
! *__my_free_list = __next_obj = (_Obj*)(void *)(__chunk + __n);
for (__i = 1; ; __i++) {
__current_obj = __next_obj;
! __next_obj = (_Obj*)(void *)((char*)__next_obj + __n);
if (__nobjs - 1 == __i) {
__current_obj -> _M_free_list_link = 0;
break;