Internal compiler error in gcc-2.95.2
Christian Heinlein
heinlein@informatik.uni-ulm.de
Fri Jun 9 04:16:00 GMT 2000
Command line
============
gcc -v --save-temps -c @1.cxx
Output
======
Reading specs from /home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/specs
gcc version 2.95.2 19991024 (release)
/home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4) -D__EXCEPTIONS -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) @1.cxx @1.ii
GNU CPP version 2.95.2 19991024 (release) (sparc)
#include "..." search starts here:
#include <...> search starts here:
/home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/../../../../include/g++-3
/home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/../../../../sparc-sun-solaris2.6/include
/home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include
/usr/include
End of search list.
The following default directories have been omitted from the search path:
/usr/local/include
End of omitted list.
/home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/cc1plus @1.ii -quiet -dumpbase @1.cc -version -o @1.s
GNU C++ version 2.95.2 19991024 (release) (sparc-sun-solaris2.6) compiled by GNU C version 2.95.2 19991024 (release).
str: In function `void fmt_sr(Str_sr, Str_sr)':
str:45: Internal compiler error.
str:45: Please submit a full bug report.
str:45: See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.
Contents of @1.ii
=================
# 1 "@1.cxx"
# 1 "str"
# 1 "ctrl"
typedef void (*Proc)();
typedef struct BeginEndRec* BeginEnd;
BeginEnd head, tail;
struct BeginEndRec {
Proc beg, end;
BeginEnd prev, next;
BeginEndRec(Proc b, Proc e) : beg(b), end(e), prev(tail), next(0) {
if (!tail) head = tail = this;
else tail = tail->next = this;
}
};
struct Exit { };
int argc;
char ** argv;
int main(int ac, char ** av) {
argc = ac;
argv = av;
int n = 0;
BeginEnd p = head;
for (; p; p = p->next) {
try { if (p->beg) (p->beg)(); }
catch(Exit) { n++; break; }
}
for (; p; p = p->prev) {
try { if (p->end) (p->end)(); }
catch(Exit) { n++; continue; }
}
return n;
}
# 1 "/usr/include/stdlib.h" 1 3 4
#pragma ident "@(#)stdlib.h 1.40 97/06/30 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/stdlib.h" 2 3 4
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 unsigned int size_t;
typedef long uid_t;
typedef long wchar_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
}
# 52 "ctrl" 2
# 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
}
# 53 "ctrl" 2
void unexpected() {
fprintf((&__iob[2]) , "Unexpected exception!\n");
abort();
}
void terminate() {
fprintf((&__iob[2]) , "Uncaught exception!\n");
abort();
}
# 1 "str"
# 1 "type"
typedef signed char mini;
typedef unsigned char umini;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
# 33 "type"
typedef char byte, * addr;
typedef char * string;
typedef void * ptr;
# 2 "str"
# 1 "stdlib"
# 3 "str"
# 1 "stdio"
# 4 "str"
# 1 "str"
# 1 "decl"
# 2 "str"
# 3 "str"
# 5 "str"
# 1 "op"
# 6 "str"
# 7 "str"
# 1 "cmp"
# 1 "prep"
# 2 "cmp"
# 3 "cmp"
# 1 "ctrl"
# 4 "cmp"
# 6 "cmp"
struct Cmp_cp {
int d_cp;
Cmp_cp(int dd_cp) : d_cp(dd_cp) { }
};
inline void cmp_cp( mini x_cp, mini y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } inline void cmp_cp( umini x_cp, umini y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }
inline void cmp_cp( short x_cp, short y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } inline void cmp_cp( ushort x_cp, ushort y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }
inline void cmp_cp( int x_cp, int y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } inline void cmp_cp( uint x_cp, uint y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }
inline void cmp_cp( long x_cp, long y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } inline void cmp_cp( ulong x_cp, ulong y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }
inline void cmp_cp( float x_cp, float y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }
inline void cmp_cp( double x_cp, double y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }
inline void cmp_cp( char x_cp, char y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }
inline void cmp_cp( bool x_cp, bool y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }
inline void cmp_cp(ptr x_cp, ptr y_cp) { cmp_cp(ulong(x_cp), ulong(y_cp)); }
template <class Any_cp>
inline int delta_cp(Any_cp x_cp, Any_cp y_cp) {
try { cmp_cp(x_cp, y_cp); } catch(Cmp_cp c_cp) { return c_cp.d_cp; }
return 0;
}
template <class Any_cp> inline bool operator == (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp) == 0; }
template <class Any_cp> inline bool operator != (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp) != 0; }
template <class Any_cp> inline bool operator <= (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp) <= 0; }
template <class Any_cp> inline bool operator >= (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp) >= 0; }
template <class Any_cp> inline bool operator < (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp) < 0; }
template <class Any_cp> inline bool operator > (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp) > 0; }
# 8 "str"
# 1 "seq"
# 6 "seq"
# 8 "seq"
# 9 "seq"
# 10 "seq"
# 11 "seq"
# 1 "error"
# 2 "error"
# 3 "error"
# 4 "error"
# 5 "error"
void error_er(string s1_er, string s2_er = 0, string s3_er = 0, string s4_er = 0) {
fprintf((&__iob[2]) , "Error: %s", s1_er);
if (s2_er) fprintf((&__iob[2]) , "%s", s2_er);
if (s3_er) fprintf((&__iob[2]) , "%s", s3_er);
if (s4_er) fprintf((&__iob[2]) , "%s", s4_er);
fprintf((&__iob[2]) , "\n");
throw Exit() ;
}
# 12 "seq"
# 14 "seq"
# 1 "string"
# 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 "string" 2
# 15 "seq"
# 17 "seq"
enum nil_sq { nil_sq };
enum empty_sq { empty_sq };
const int Reverse_sq = 1;
const int Compl_sq = 2;
const int Flags_sq = 1|2;
template <class Elem_sq> struct SeqRep__sq {
int len_sq;
Elem_sq* elems_sq;
SeqRep__sq() : len_sq(0), elems_sq(0) { }
};
template <class Elem_sq> struct Seq0__sq {
SeqRep__sq< Elem_sq > * ptr_sq;
Seq0__sq(SeqRep__sq< Elem_sq > * p_sq) : ptr_sq(p_sq) { }
};
struct Cursor0_sq {
mutable int idx_sq;
mutable int last_sq;
int* ext_sq;
Cursor0_sq(int n_sq) : idx_sq(0), last_sq(n_sq), ext_sq(0) { }
virtual bool operator*() const = 0;
virtual bool operator++() const = 0;
};
template <class Elem_sq> struct Cursor__sq : Cursor0_sq {
Elem_sq* var_sq;
Seq0__sq< Elem_sq > seq_sq;
Cursor__sq(Elem_sq* v_sq, Seq0__sq< Elem_sq > s_sq, int n_sq)
: Cursor0_sq(n_sq), var_sq(v_sq), seq_sq(s_sq) { }
Cursor__sq< Elem_sq > operator=(int&);
virtual bool operator*() const;
virtual bool operator++() const;
};
template <class Elem_sq> struct Ref__sq {
Seq0__sq< Elem_sq > seq_sq;
int from_sq, to_sq;
const Cursor0_sq* cr_sq;
Ref__sq(Seq0__sq< Elem_sq > s_sq, int i_sq) : seq_sq(s_sq), from_sq(i_sq), to_sq(i_sq), cr_sq(0) { }
Ref__sq(Seq0__sq< Elem_sq > s_sq, int i_sq, int j_sq) : seq_sq(s_sq), from_sq(i_sq), to_sq(j_sq), cr_sq(0) { }
Ref__sq(Seq0__sq< Elem_sq > s_sq, const Cursor0_sq& c_sq) :
seq_sq(s_sq), from_sq(c_sq.idx_sq), to_sq(c_sq.idx_sq), cr_sq(&c_sq) { }
void operator=(Elem_sq);
void operator=(Seq0__sq< Elem_sq > );
};
template <class Elem_sq> struct Seq__sq {
union {
SeqRep__sq< Elem_sq > * ptr_sq;
ulong val_sq;
};
Seq__sq(enum nil_sq = nil_sq) : val_sq(0) { }
Seq__sq(enum empty_sq) { ptr_sq = new SeqRep__sq< Elem_sq > ; }
Seq__sq(Seq0__sq< Elem_sq > s_sq) : ptr_sq(s_sq.ptr_sq) { }
operator Seq0__sq< Elem_sq > () { return Seq0__sq< Elem_sq > (ptr_sq); }
SeqRep__sq< Elem_sq > * operator->() {
return (SeqRep__sq< Elem_sq > *) (val_sq & ~Flags_sq);
}
operator bool () {
return val_sq & ~Reverse_sq;
}
Elem_sq operator[](int);
Ref__sq< Elem_sq > operator()(int i_sq) { return Ref__sq< Elem_sq > ((*this) , i_sq); }
Ref__sq< Elem_sq > operator()(int i_sq, int j_sq) { return Ref__sq< Elem_sq > ((*this) , i_sq, j_sq); }
Ref__sq< Elem_sq > operator()(const Cursor0_sq& c_sq) { return Ref__sq< Elem_sq > ((*this) , c_sq); }
};
template <class Elem_sq> inline Seq__sq< Elem_sq > operator++(Seq0__sq< Elem_sq > s_sq, int postfix_sq) {
return s_sq;
}
template <class Elem_sq> inline ulong id_sq(Seq__sq< Elem_sq > s_sq) { return s_sq.val_sq; }
template <class Elem_sq> inline bool operator&(Seq__sq< Elem_sq > s_sq, int f_sq) { return s_sq.val_sq & f_sq; }
template <class Elem_sq> inline Seq__sq< Elem_sq > operator^=(Seq__sq< Elem_sq > s_sq, int f_sq) {
s_sq.val_sq ^= f_sq;
return s_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > operator-(Seq__sq< Elem_sq > s_sq) {
return s_sq ^= Reverse_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > operator~(Seq__sq< Elem_sq > s_sq) {
return s_sq ^= Compl_sq;
}
template <class Elem_sq> inline int operator*(Seq__sq< Elem_sq > s_sq) {
if (!s_sq) return 0;
if (s_sq&Compl_sq) return - s_sq->len_sq - 1;
else return s_sq->len_sq;
}
template <class Elem_sq> inline Elem_sq Seq__sq< Elem_sq > ::operator[](int i_sq) {
Seq__sq< Elem_sq > s_sq = (*this) ;
if (1 <= i_sq && i_sq <= *s_sq) {
return s_sq->elems_sq[s_sq&Reverse_sq ? *s_sq - i_sq : i_sq - 1];
}
else {
static Elem_sq null_sq;
return null_sq;
}
}
template <class Elem_sq> inline Elem_sq operator/(Seq__sq< Elem_sq > s_sq, int i_sq) { return s_sq[i_sq]; }
template <class Elem_sq> inline Elem_sq elem_sq(Seq__sq< Elem_sq > s_sq, int i_sq) {
return s_sq.ptr_sq->elems_sq[i_sq-1];
}
template <class Elem_sq> void replace_sq(Seq__sq< Elem_sq > s_sq, int i_sq, int n_sq,
Elem_sq* v_sq = 0, int m_sq = 0, bool rev_sq = false) {
if (!s_sq) error_er("Update operation on nil sequence!");
int c_sq = s_sq->len_sq;
s_sq->len_sq += m_sq - n_sq;
if (m_sq > n_sq) {
s_sq->elems_sq = (Elem_sq*) realloc(s_sq->elems_sq, s_sq->len_sq * sizeof(Elem_sq) );
if (!s_sq->elems_sq) error_er("Realloc failed!");
}
i_sq--;
if (s_sq&Reverse_sq) i_sq = c_sq - i_sq - n_sq;
memmove(s_sq->elems_sq + i_sq + m_sq, s_sq->elems_sq + i_sq + n_sq, (c_sq - i_sq - n_sq) * sizeof(Elem_sq) );
if (m_sq < n_sq) {
s_sq->elems_sq = (Elem_sq*) realloc(s_sq->elems_sq, s_sq->len_sq * sizeof(Elem_sq) );
}
if ((s_sq&Reverse_sq) == rev_sq) {
memcpy(s_sq->elems_sq + i_sq, v_sq, m_sq * sizeof(Elem_sq) );
}
else {
for (int k_sq = 0; k_sq < m_sq; k_sq++) {
s_sq->elems_sq[i_sq + m_sq - k_sq - 1] = v_sq[k_sq];
}
}
}
template <class Elem_sq> inline Seq__sq< Elem_sq > operator+=(Seq__sq< Elem_sq > s_sq, Elem_sq e_sq) {
replace_sq(s_sq, *s_sq + 1, 0, &e_sq, 1);
return s_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > operator,(Seq__sq< Elem_sq > s_sq, Elem_sq e_sq) {
return s_sq += e_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > operator+=(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
if (*t_sq) replace_sq(s_sq, *s_sq + 1, 0, t_sq->elems_sq, t_sq->len_sq, t_sq&Reverse_sq);
return s_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > operator,(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
return s_sq += t_sq;
}
inline enum empty_sq seq_sq() { return empty_sq; }
template <class Elem_sq> inline Seq__sq< Elem_sq > seq_sq(Elem_sq e1_sq) {
return Seq__sq< Elem_sq > (empty_sq) += e1_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > seq_sq(Elem_sq e1_sq, Elem_sq e2_sq) {
return Seq__sq< Elem_sq > (empty_sq) += e1_sq, e2_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq) {
return Seq__sq< Elem_sq > (empty_sq) += e1_sq, e2_sq, e3_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq) {
return Seq__sq< Elem_sq > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq) {
return Seq__sq< Elem_sq > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq, e5_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
Elem_sq e6_sq) {
return Seq__sq< Elem_sq > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
Elem_sq e6_sq, Elem_sq e7_sq) {
return Seq__sq< Elem_sq > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq, e7_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
Elem_sq e6_sq, Elem_sq e7_sq, Elem_sq e8_sq) {
return Seq__sq< Elem_sq > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq, e7_sq, e8_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > operator+(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
return Seq__sq< Elem_sq > (empty_sq) += s_sq, t_sq;
}
template <class Elem_sq> Seq__sq< Elem_sq > operator+(Seq__sq< Elem_sq > s_sq) {
return Seq__sq< Elem_sq > (empty_sq) += s_sq;
}
template <class Elem_sq> inline Cursor__sq< Elem_sq > operator<<(Elem_sq* v_sq, Seq__sq< Elem_sq > s_sq) {
return Cursor__sq< Elem_sq > (v_sq, s_sq, *s_sq);
}
template <class Elem_sq> inline Cursor__sq< Elem_sq > operator>=(Cursor__sq< Elem_sq > c_sq, int i_sq) {
c_sq.idx_sq = i_sq - 1;
return c_sq;
}
template <class Elem_sq> inline Cursor__sq< Elem_sq > operator>(Cursor__sq< Elem_sq > c_sq, int i_sq) {
c_sq.idx_sq = i_sq;
return c_sq;
}
template <class Elem_sq> inline Cursor__sq< Elem_sq > Cursor__sq< Elem_sq > ::operator=(int& j_sq) {
ext_sq = &j_sq;
j_sq = idx_sq;
return (*this) ;
}
template <class Elem_sq> inline bool Cursor__sq< Elem_sq > ::operator*() const {
return idx_sq <= last_sq;
}
template <class Elem_sq> inline bool Cursor__sq< Elem_sq > ::operator++() const {
*var_sq = seq_sq++ [++idx_sq];
if (ext_sq) *ext_sq = idx_sq;
return idx_sq <= last_sq;
}
template <class Elem_sq> inline int length_sq(Ref__sq< Elem_sq > & r_sq) {
if (r_sq.from_sq < 1) r_sq.from_sq = 1;
if (r_sq.to_sq > *r_sq. seq_sq++ ) r_sq.to_sq = *r_sq. seq_sq++ ;
int n_sq = r_sq.to_sq - r_sq.from_sq + 1;
return n_sq > 0 ? n_sq : 0;
}
void inline operator+=(const Cursor0_sq& c_sq, int d_sq) {
c_sq.idx_sq += d_sq;
c_sq.last_sq += d_sq;
}
template <class Elem_sq> void operator~(Ref__sq< Elem_sq > r_sq) {
if (int n_sq = length_sq(r_sq)) replace_sq(r_sq. seq_sq++ , r_sq.from_sq, n_sq);
if (r_sq.cr_sq) *r_sq.cr_sq += -1;
}
template <class Elem_sq> void Ref__sq< Elem_sq > ::operator=(Elem_sq e_sq) {
if (int n_sq = length_sq((*this) )) replace_sq((*this) . seq_sq++ , (*this) .from_sq, n_sq, &e_sq, 1);
}
template <class Elem_sq> void Ref__sq< Elem_sq > ::operator=(Seq0__sq< Elem_sq > t__sq) {
Seq__sq< Elem_sq > t_sq = t__sq;
if (int m_sq = *t_sq) {
if (int n_sq = length_sq(r_sq)) {
replace_sq((*this) . seq_sq++ , (*this) .from_sq, n_sq, t_sq->elems_sq, m_sq, t_sq&Reverse_sq);
}
if ((*this) .cr_sq) * (*this) .cr_sq += m_sq - 1;
}
else {
~r_sq;
}
}
template <class Elem_sq> void operator<(Elem_sq e_sq, Ref__sq< Elem_sq > r_sq) {
if (1 <= r_sq.from_sq && r_sq.from_sq <= *r_sq. seq_sq++ + 1) {
replace_sq(r_sq. seq_sq++ , r_sq.from_sq, 0, &e_sq, 1);
}
if (r_sq.cr_sq) *r_sq.cr_sq += 1;
}
template <class Elem_sq> void operator<(Seq__sq< Elem_sq > t_sq, Ref__sq< Elem_sq > r_sq) {
if (int m_sq = *t_sq) {
if (1 <= r_sq.from_sq && r_sq.from_sq <= *r_sq. seq_sq++ + 1) {
replace_sq(r_sq. seq_sq++ , r_sq.from_sq, 0, t_sq->elems_sq, m_sq, t_sq&Reverse_sq);
}
if (r_sq.cr_sq) *r_sq.cr_sq += m_sq;
}
}
template <class Elem_sq> void operator<(Ref__sq< Elem_sq > r_sq, Elem_sq e_sq) {
r_sq.from_sq = r_sq.to_sq + 1;
e_sq < r_sq;
}
template <class Elem_sq> void operator<(Ref__sq< Elem_sq > r_sq, Seq__sq< Elem_sq > t_sq) {
r_sq.from_sq = r_sq.to_sq + 1;
t_sq < r_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > operator<<=(Seq__sq< Elem_sq > s_sq, int n_sq) {
~s_sq(1, n_sq);
return s_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > operator>>=(Seq__sq< Elem_sq > s_sq, int n_sq) {
~(-s_sq)(1, n_sq);
return s_sq;
}
const bool unique_sq = true;
template <class Elem_sq> int diff_sq(Elem_sq* x_sq, Elem_sq* y_sq) { return delta_cp(*x_sq, *y_sq); }
template <class Elem_sq> int diffrev_sq(Elem_sq* x_sq, Elem_sq* y_sq) { return delta_cp(*y_sq, *x_sq); }
template <class Elem_sq> void sort_sq(Seq__sq< Elem_sq > s_sq, bool uniq_sq = false) {
if (!*s_sq) return;
typedef int (*DiffElemP_sq)(Elem_sq*, Elem_sq*);
typedef int (*DiffVoidP_sq)(const void*, const void*);
DiffElemP_sq d_sq;
if (s_sq&Reverse_sq) d_sq = diffrev_sq;
else d_sq = diff_sq;
qsort(s_sq->elems_sq, s_sq->len_sq, sizeof(Elem_sq), DiffVoidP_sq(d_sq));
if (uniq_sq) {
Elem_sq e_sq, prev_sq;
int i_sq;
for (const Cursor0_sq& current_sq = & e_sq << s_sq = i_sq ; ; ) if (!*current_sq) break; else if (++current_sq) {
if (i_sq > 1 && e_sq == prev_sq) ~s_sq(current_sq);
else prev_sq = e_sq;
}
}
}
template <class Elem1_sq, class Elem2_sq>
void sort2_sq(Seq__sq< Elem1_sq > s1_sq, Seq__sq< Elem2_sq > s2_sq) {
error_er("sort2() not yet implemented.");
}
template <class Elem_sq> Seq__sq< Elem_sq > merge_sq(Seq__sq< Elem_sq > s1_sq, Seq__sq< Elem_sq > s2_sq) {
int c1_sq = *s1_sq, c2_sq = *s2_sq;
if (!c1_sq) return s2_sq;
if (!c2_sq) return s1_sq;
Seq__sq< Elem_sq > s_sq = seq_sq();
int i1_sq = 1, i2_sq = 1;
while (i1_sq <= c1_sq || i2_sq <= c2_sq) {
int d_sq = i1_sq <= c1_sq ? i2_sq <= c2_sq ? delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]) : -1 : +1;
if (d_sq < 0) {
s_sq += s1_sq[i1_sq++];
}
else if (d_sq > 0) {
s_sq += s2_sq[i2_sq++];
}
else {
s_sq += s1_sq[i1_sq++]; i2_sq++;
}
}
return s_sq;
}
template <class Elem_sq> Seq__sq< Elem_sq > intersect_sq(Seq__sq< Elem_sq > s1_sq, Seq__sq< Elem_sq > s2_sq) {
int c1_sq = *s1_sq, c2_sq = *s2_sq;
if (!c1_sq || !c2_sq) return nil_sq;
Seq__sq< Elem_sq > s_sq = seq_sq();
int i1_sq = 1, i2_sq = 1;
while (i1_sq <= c1_sq && i2_sq <= c2_sq) {
int d_sq = delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]);
if (d_sq < 0) {
i1_sq++;
}
else if (d_sq > 0) {
i2_sq++;
}
else {
s_sq += s1_sq[i1_sq++]; i2_sq++;
}
}
if (*s_sq) return s_sq;
else return nil_sq;
}
template <class Elem_sq> Seq__sq< Elem_sq > subtract_sq(Seq__sq< Elem_sq > s1_sq, Seq__sq< Elem_sq > s2_sq) {
int c1_sq = *s1_sq, c2_sq = *s2_sq;
if (!c1_sq) return nil_sq;
if (!c2_sq) return s1_sq;
Seq__sq< Elem_sq > s_sq = seq_sq();
int i1_sq = 1, i2_sq = 1;
while (i1_sq <= c1_sq) {
int d_sq = i2_sq <= c2_sq ? delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]) : -1;
if (d_sq < 0) {
s_sq += s1_sq[i1_sq++];
}
else if (d_sq > 0) {
i2_sq++;
}
else {
i1_sq++; i2_sq++;
}
}
if (*s_sq) return s_sq;
else return nil_sq;
}
template <class Elem_sq> bool disjoint_sq(Seq__sq< Elem_sq > s1_sq, Seq__sq< Elem_sq > s2_sq) {
int c1_sq = *s1_sq, c2_sq = *s2_sq;
int i1_sq = 1, i2_sq = 1;
while (i1_sq <= c1_sq && i2_sq <= c2_sq) {
int d_sq = delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]);
if (d_sq < 0) i1_sq++;
else if (d_sq > 0) i2_sq++;
else return false;
}
return true;
}
template <class Elem_sq> bool subset_sq(Seq__sq< Elem_sq > s1_sq, Seq__sq< Elem_sq > s2_sq) {
int c1_sq = *s1_sq, c2_sq = *s2_sq;
if (c1_sq > c2_sq) return false;
int i1_sq = 1, i2_sq = 1;
while (i1_sq <= c1_sq) {
int d_sq = i2_sq <= c2_sq ? delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]) : -1;
if (d_sq < 0) return false;
else if (d_sq > 0) i2_sq++;
else { i1_sq++; i2_sq++; }
}
return true;
}
template <class Elem_sq> int element_sq(Elem_sq e_sq, Seq__sq< Elem_sq > s_sq, int* p_sq = 0) {
int i_sq, j_sq;
Elem_sq f_sq;
for (const Cursor0_sq& current_sq = & f_sq << s_sq = i_sq ; ; ) if (!*current_sq) break; else if (++current_sq) if (!( f_sq < e_sq )) break; else ;
for (const Cursor0_sq& current_sq = & f_sq << s_sq >= i_sq = j_sq ; ; ) if (!*current_sq) break; else if (++current_sq) if (f_sq == e_sq) return j_sq;
if (p_sq) *p_sq = i_sq;
return 0;
}
template <class Elem_sq> Seq__sq< Elem_sq > operator|(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
if (s_sq&Compl_sq) {
if (t_sq&Compl_sq) {
return ~intersect_sq(~s_sq, ~t_sq);
}
else {
return ~subtract_sq(~s_sq, t_sq);
}
}
else {
if (t_sq&Compl_sq) {
return ~subtract_sq(~t_sq, s_sq);
}
else {
return merge_sq(s_sq, t_sq);
}
}
}
template <class Elem_sq> Seq__sq< Elem_sq > operator&(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
if (s_sq&Compl_sq) {
if (t_sq&Compl_sq) {
return ~merge_sq(~s_sq, ~t_sq);
}
else {
return subtract_sq(t_sq, ~s_sq);
}
}
else {
if (t_sq&Compl_sq) {
return subtract_sq(s_sq, ~t_sq);
}
else {
return intersect_sq(s_sq, t_sq);
}
}
}
template <class Elem_sq> Seq__sq< Elem_sq > operator-(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
if (s_sq&Compl_sq) {
if (t_sq&Compl_sq) {
return subtract_sq(~t_sq, ~s_sq);
}
else {
return ~merge_sq(~s_sq, ~t_sq);
}
}
else {
if (t_sq&Compl_sq) {
return intersect_sq(s_sq, ~t_sq);
}
else {
return subtract_sq(s_sq, t_sq);
}
}
}
template <class Elem_sq> bool operator%(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
if (s_sq&Compl_sq) {
if (t_sq&Compl_sq) {
return false;
}
else {
return subset_sq(t_sq, ~s_sq);
}
}
else {
if (t_sq&Compl_sq) {
return !subset_sq(s_sq, ~t_sq);
}
else {
return disjoint_sq(s_sq, t_sq);
}
}
}
template <class Elem_sq> inline bool operator*(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
return !(s_sq % t_sq);
}
template <class Elem_sq> bool operator<<(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
if (s_sq&Compl_sq) {
if (t_sq&Compl_sq) {
return subset_sq(~t_sq, ~s_sq);
}
else {
return false;
}
}
else {
if (t_sq&Compl_sq) {
return disjoint_sq(s_sq, ~t_sq);
}
else {
return subset_sq(s_sq, t_sq);
}
}
}
template <class Elem_sq> inline bool operator>>(Seq__sq< Elem_sq > s_sq, Seq__sq< Elem_sq > t_sq) {
return t_sq << s_sq;
}
template <class Elem_sq> int operator<<(Elem_sq e_sq, Seq__sq< Elem_sq > s_sq) {
if (s_sq&Compl_sq) return -!element_sq(e_sq, ~s_sq);
else return element_sq(e_sq, s_sq);
}
template <class Elem_sq> inline int operator>>(Seq__sq< Elem_sq > s_sq, Elem_sq e_sq) {
return e_sq << s_sq;
}
const int N_sq = 1<<15;
inline int norm_sq(int c_sq) { return (c_sq + N_sq) % N_sq; }
template <class Elem_sq> void cmp_cp(Seq__sq< Elem_sq > s1_sq, Seq__sq< Elem_sq > s2_sq) {
int c1_sq = *s1_sq, c2_sq = *s2_sq;
cmp_cp(norm_sq(c1_sq), norm_sq(c2_sq));
if (c1_sq < 0) { s1_sq = ~s1_sq; s2_sq = ~s2_sq; }
Elem_sq e1_sq, e2_sq;
for (const Cursor0_sq ¤t1_sq = & e1_sq << s1_sq , ¤t2_sq = & e2_sq << s2_sq ; ; ) if (!*current1_sq || !*current2_sq) break; else if (++current1_sq & ++current2_sq) cmp_cp(e1_sq, e2_sq);
}
template <class Elem_sq> Seq__sq< Elem_sq > operator|=(Seq__sq< Elem_sq > s_sq, Elem_sq e_sq) {
int i_sq;
if (s_sq&Compl_sq) {
if (i_sq = element_sq(e_sq, s_sq)) ~s_sq(i_sq);
}
else {
if (!element_sq(e_sq, s_sq, &i_sq)) e_sq < s_sq(i_sq);
}
return s_sq;
}
template <class Elem_sq> Seq__sq< Elem_sq > operator-=(Seq__sq< Elem_sq > s_sq, Elem_sq e_sq) {
int i_sq;
if (s_sq&Compl_sq) {
if (!element_sq(e_sq, s_sq, &i_sq)) e_sq < s_sq(i_sq);
}
else {
if (i_sq = element_sq(e_sq, s_sq)) ~s_sq(i_sq);
}
return s_sq;
}
inline enum empty_sq set_sq() { return empty_sq; }
template <class Elem_sq> inline Seq__sq< Elem_sq > set_sq(Elem_sq e1_sq) {
return seq_sq(e1_sq);
}
template <class Elem_sq> inline Seq__sq< Elem_sq > set_sq(Elem_sq e1_sq, Elem_sq e2_sq) {
return set_sq(e1_sq) |= e2_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq) {
return set_sq(e1_sq, e2_sq) |= e3_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq) {
return set_sq(e1_sq, e2_sq, e3_sq) |= e4_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq) {
return set_sq(e1_sq, e2_sq, e3_sq, e4_sq) |= e5_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
Elem_sq e6_sq) {
return set_sq(e1_sq, e2_sq, e3_sq, e4_sq, e5_sq) |= e6_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
Elem_sq e6_sq, Elem_sq e7_sq) {
return set_sq(e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq) |= e7_sq;
}
template <class Elem_sq> inline Seq__sq< Elem_sq > set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
Elem_sq e6_sq, Elem_sq e7_sq, Elem_sq e8_sq) {
return set_sq(e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq, e7_sq) |= e8_sq;
}
template <class Elem_sq> struct MsetRep__sq {
Seq__sq< Elem_sq > elems_sq;
Seq__sq< int > cards_sq;
MsetRep__sq() : elems_sq(nil_sq), cards_sq(nil_sq) { }
};
template <class Elem_sq> struct Mset__sq {
union {
MsetRep__sq< Elem_sq > * ptr_sq;
ulong val_sq;
};
Mset__sq(enum nil_sq = nil_sq) : val_sq(0) { }
Mset__sq(enum empty_sq) { ptr_sq = new MsetRep__sq< Elem_sq > ; }
MsetRep__sq< Elem_sq > * operator->() { return ptr_sq; }
operator bool () { return val_sq; }
Seq__sq< Elem_sq > operator~() {
if (ptr_sq) return ptr_sq->elems_sq;
else return nil_sq;
}
Elem_sq operator[](int i_sq) { return (~(*this) )[i_sq]; }
Seq__sq< int > operator*() {
if (ptr_sq) return ptr_sq->cards_sq;
else return nil_sq;
}
};
const int oo_sq = -1;
template <class Elem_sq> void cmp_cp(Mset__sq< Elem_sq > m1_sq, Mset__sq< Elem_sq > m2_sq) {
cmp_cp(*m1_sq, *m2_sq);
cmp_cp(~m1_sq, ~m2_sq);
}
template <class Elem_sq> Mset__sq< Elem_sq > add_sq(Mset__sq< Elem_sq > m_sq, Elem_sq e_sq, int c_sq = 1) {
if (!m_sq) error_er("Update operation on nil multiset");
if (!m_sq->elems_sq) {
m_sq->elems_sq = seq_sq();
m_sq->cards_sq = seq_sq();
}
int i_sq, j_sq;
if (i_sq = element_sq(e_sq, m_sq->elems_sq, &j_sq)) {
if ((m_sq->cards_sq)[i_sq] == oo_sq) ;
else if (c_sq == oo_sq) (m_sq->cards_sq)(i_sq) = oo_sq;
else (m_sq->cards_sq)(i_sq) = (m_sq->cards_sq)[i_sq] + c_sq;
}
else {
e_sq < (m_sq->elems_sq)(j_sq);
c_sq < (m_sq->cards_sq)(j_sq);
}
return m_sq;
}
template <class Elem_sq> inline Mset__sq< Elem_sq > operator+=(Mset__sq< Elem_sq > m_sq, Elem_sq e_sq) {
return add_sq(m_sq, e_sq, 1);
}
template <class Elem_sq> Mset__sq< Elem_sq > operator-=(Mset__sq< Elem_sq > m_sq, Elem_sq e_sq) {
if (int i_sq = e_sq << ~m_sq) {
int c_sq = (m_sq->cards_sq)[i_sq];
if (c_sq == oo_sq) ;
else if (c_sq > 1) (m_sq->cards_sq)(i_sq) = c_sq - 1;
else {
~(m_sq->elems_sq)(i_sq);
~(m_sq->cards_sq)(i_sq);
}
}
return m_sq;
}
inline enum empty_sq mset_sq() { return empty_sq; }
template <class Elem_sq> Mset__sq< Elem_sq > mset_sq(Elem_sq e1_sq, int c1_sq) {
return add_sq(Mset__sq< Elem_sq > (empty_sq), e1_sq, c1_sq);
}
template <class Elem_sq> Mset__sq< Elem_sq > mset_sq(Elem_sq e1_sq, int c1_sq, Elem_sq e2_sq, int c2_sq) {
return add_sq(mset_sq(e1_sq, c1_sq), e2_sq, c2_sq);
}
template <class Elem_sq> Mset__sq< Elem_sq > mset_sq(Elem_sq e1_sq, int c1_sq, Elem_sq e2_sq, int c2_sq, Elem_sq e3_sq, int c3_sq) {
return add_sq(mset_sq(e1_sq, c1_sq, e2_sq, c2_sq), e3_sq, c3_sq);
}
template <class Elem_sq> Mset__sq< Elem_sq > mset_sq(Elem_sq e1_sq, int c1_sq, Elem_sq e2_sq, int c2_sq, Elem_sq e3_sq, int c3_sq,
Elem_sq e4_sq, int c4_sq) {
return add_sq(mset_sq(e1_sq, c1_sq, e2_sq, c2_sq, e3_sq, c3_sq), e4_sq, c4_sq);
}
template <class Elem_sq> inline Cursor__sq< Elem_sq > operator<<(Elem_sq* v_sq, Mset__sq< Elem_sq > m_sq) {
return Cursor__sq< Elem_sq > (v_sq, ~m_sq, *~m_sq);
}
template <class Elem_sq> Mset__sq< Elem_sq > operator+(Mset__sq< Elem_sq > m_sq) {
Mset__sq< Elem_sq > m__sq = mset_sq();
m__sq->elems_sq = +(~m_sq);
m__sq->cards_sq = +(*m_sq);
return m__sq;
}
# 9 "str"
struct StreamRep_sr {
int len_sr;
FILE* file_sr;
};
struct Str_sr : Seq__sq< char > {
Str_sr() : Seq__sq< char > () { }
Str_sr(Seq__sq< char > s_sr) : Seq__sq< char > (s_sr) { }
friend Str_sr operator+=(Str_sr, char*);
Str_sr(char* p_sr) : Seq__sq< char > (seq_sq()) { (*this) += p_sr; }
Str_sr(FILE* f_sr) : Seq__sq< char > (seq_sq()) {
StreamRep_sr* stream_sr = * (StreamRep_sr**) this;
stream_sr->len_sr = -1;
stream_sr->file_sr = f_sr;
}
};
Str_sr operator+=(Str_sr s_sr, char c_sr) {
if (*s_sr >= 0) {
Seq__sq< char > (s_sr) += c_sr;
}
else {
StreamRep_sr* stream_sr = * (StreamRep_sr**) &s_sr;
(--( stream_sr->file_sr )->_cnt < 0 ? __flsbuf(( c_sr ), ( stream_sr->file_sr )) : (int)(*( stream_sr->file_sr )->_ptr++ = (unsigned char) ( c_sr ))) ;
}
return s_sr;
}
void fmt_sr(Str_sr s_sr, Str_sr t_sr) {
char c_sr;
for (const Cursor0_sq& current_sq = & c_sr << t_sr ; ; ) if (!*current_sq) break; else if (++current_sq) s_sr += c_sr;
}
template <class Any_sr>
inline Str_sr operator+=(Str_sr s_sr, Any_sr x_sr) {
fmt_sr(s_sr, x_sr);
return s_sr;
}
template <class Any_sr>
inline Str_sr operator,(Str_sr s_sr, Any_sr x_sr) {
return s_sr += x_sr;
}
template <class Any_sr>
Str_sr str_sr(Any_sr x_sr) {
Str_sr s_sr = "";
fmt_sr(s_sr, x_sr);
return s_sr;
}
Str_sr operator+(Str_sr s1_sr, Str_sr s2_sr) {
Str_sr s_sr = "";
return s_sr += s1_sr, s2_sr;
}
void fmt_sr(Str_sr s_sr, char* p_sr) {
while (char c_sr = * p_sr++) s_sr += c_sr;
}
char buf_sr[40];
void fmt_sr(Str_sr s_sr, long x_sr) {
sprintf(buf_sr, "%ld", x_sr);
s_sr += buf_sr;
}
inline void fmt_sr(Str_sr s_sr, int x_sr) { s_sr += long(x_sr); }
inline void fmt_sr(Str_sr s_sr, short x_sr) { s_sr += long(x_sr); }
void fmt_sr(Str_sr s_sr, ulong x_sr) {
sprintf(buf_sr, "%lu", x_sr);
s_sr += buf_sr;
}
inline void fmt_sr(Str_sr s_sr, uint x_sr) { s_sr += ulong(x_sr); }
inline void fmt_sr(Str_sr s_sr, ushort x_sr) { s_sr += ulong(x_sr); }
void fmt_sr(Str_sr s_sr, double x_sr) {
sprintf(buf_sr, "%g", x_sr);
s_sr += buf_sr;
}
void fmt_sr(Str_sr s_sr, bool x_sr) {
s_sr += x_sr ? "true" : "false";
}
void fmt_sr(Str_sr s_sr, ptr x_sr) {
sprintf(buf_sr, "%p", x_sr);
s_sr += buf_sr;
}
void cmp_cp(Str_sr s1_sr, Str_sr s2_sr) {
char c1_sr, c2_sr;
for (const Cursor0_sq ¤t1_sq = & c1_sr << s1_sr , ¤t2_sq = & c2_sr << s2_sr ; ; ) if (!*current1_sq || !*current2_sq) break; else if (++current1_sq & ++current2_sq) cmp_cp(c1_sr, c2_sr);
cmp_cp(*s1_sr, *s2_sr);
}
bool operator==(Str_sr, Str_sr);
bool operator!=(Str_sr, Str_sr);
bool operator<=(Str_sr, Str_sr);
bool operator>=(Str_sr, Str_sr);
bool operator<(Str_sr, Str_sr);
bool operator>(Str_sr, Str_sr);
int operator<<(char c_sr, Str_sr s_sr) {
char c__sr;
int i_sr;
for (const Cursor0_sq& current_sq = & c__sr << s_sr = i_sr ; ; ) if (!*current_sq) break; else if (++current_sq) if (c__sr == c_sr) return i_sr;
return 0;
}
void dummy_sr() {
Seq__sq< char > s_sr;
char c_sr;
for (const Cursor0_sq& current_sq = & c_sr << s_sr ; ; ) if (!*current_sq) break; else if (++current_sq) ;
-s_sr;
s_sr <<= 1;
Str_sr s1_sr, s2_sr;
s1_sr == s2_sr; s1_sr != s2_sr; s1_sr <= s2_sr; s1_sr >= s2_sr; s1_sr < s2_sr; s1_sr > s2_sr;
}
# 5 "str"
void beg1 (); BeginEndRec begend1 (beg1 , 0); void beg1 () {
Str_sr s__44589 = "abc";
Str_sr t__44589 = "x" + s__44589 + "yz";
Str_sr out__44589 = (&__iob[1]) ;
out__44589 += "hallo", ' ', 4711, '\n';
out__44589 += 12.34, ' ', &s__44589, '\n';
out__44589 += s__44589, ' ', t__44589, ' ', s__44589 > t__44589, ' ', s__44589 == t__44589, '\n';
~t__44589(1); ~(-t__44589)(1, 2);
out__44589 += s__44589, ' ', t__44589, ' ', s__44589 > t__44589, ' ', s__44589 == t__44589, '\n';
if (argc == 2) {
out__44589 += "start\n";
int n__44589 = atoi(argv[1]);
s__44589 = ""; t__44589 = "";
for (int i__44589 = 1; i__44589 <= n__44589; i__44589++) { s__44589 += 'x'; t__44589 += 'y'; }
out__44589 += "stop\n";
}
}
More information about the Gcc-bugs
mailing list