This is the mail archive of the libstdc++@sourceware.cygnus.com mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: PATCH:stl/stl_alloc.h triggers compiler warnings


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;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]