dle@CISCO.COM (David Edwards) (12/01/89)
The following will produce a SegV core dump on a Sun-3x running SunOS 4.0.3. The file is part of the nih class library (formerly oops). dirt:lib:26 > /src/gnu/g++-new/g++ -B/src/gnu/g++-new -E -v -ansi -fdefault-inline ArrayOb.c g++ version 1.36.2- (based on GCC 1.36) /usr/local/lib/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ ArrayOb.c GNU CPP version 1.36 # 1 "ArrayOb.c" # 1 "/usr/local/lib/g++-include/libc.h" 1 #pragma once # 1 "/usr/local/lib/g++-include/builtin.h" 1 #pragma once typedef void (*one_arg_error_handler_t)(const char*); typedef void (*two_arg_error_handler_t)(const char*, const char*); # 1 "/usr/local/lib/g++-include/stddef.h" 1 #pragma once typedef unsigned long size_t; typedef long int ptrdiff_t; typedef unsigned char wchar_t; # 40 "/usr/local/lib/g++-include/builtin.h" 2 # 1 "/usr/local/lib/g++-include/std.h" 1 #pragma once # 1 "/usr/local/lib/g++-include/stdio.h" 1 #pragma once # 79 "/usr/local/lib/g++-include/stdio.h" # 108 "/usr/local/lib/g++-include/stdio.h" extern struct _iobuf { int _cnt; char* _ptr; char* _base; int _bufsiz; short _flag; char _file; } _iob[]; # 171 "/usr/local/lib/g++-include/stdio.h" extern "C" { int _doprnt(const char*, void*, struct _iobuf *); int _doscan( struct _iobuf *, const char*, ...); int _filbuf( struct _iobuf *); int _flsbuf(unsigned, struct _iobuf *); int fclose( struct _iobuf *); struct _iobuf * fdopen(int, const char*); int fflush( struct _iobuf *); int fgetc( struct _iobuf *); char* fgets(char*, int, struct _iobuf *); struct _iobuf * fopen(const char*, const char*); int fprintf( struct _iobuf *, const char* ...); int fputc(int, struct _iobuf *); int fputs(const char*, struct _iobuf *); int fread(void*, int, int, struct _iobuf *); struct _iobuf * freopen(const char*, const char*, struct _iobuf *); int fscanf( struct _iobuf *, const char* ...); int fseek( struct _iobuf *, long, int); long ftell( struct _iobuf *); int fwrite(const void*, int, int, struct _iobuf *); char* gets(char*); int getw( struct _iobuf *); int pclose( struct _iobuf *); struct _iobuf * popen(const char*, const char*); int printf(const char* ...); void puts(const char*); int putw(int, struct _iobuf *); int rewind( struct _iobuf *); int scanf(const char* ...); void setbuf( struct _iobuf *, char*); void setbuffer( struct _iobuf *, char*, int); void setlinebuf( struct _iobuf *); void setvbuf( struct _iobuf *, char*, int, int); int sscanf(char*, const char* ...); struct _iobuf * tmpfile(); int ungetc(int, struct _iobuf *); int vfprintf( struct _iobuf *, const char*, ...); int vprintf(const char*, ... ); char* sprintf(char*, const char* ...); char* vsprintf(char*, const char*, ...); } # 29 "/usr/local/lib/g++-include/std.h" 2 extern "C" { void volatile _exit(int); void volatile abort(void); int access(const char*, int); int acct(const char*); unsigned alarm(unsigned); double atof(const char*); int atoi(const char*); long atol(const char*); int bind(int, void*, int); int brk(void*); int bsearch (const void *, const void *, unsigned long, unsigned long, auto int (*ptf)(const void*, const void*)); void* calloc(unsigned, unsigned); void cfree(void*); int chdir(const char*); int chmod(const char*, int); int chown(const char*, int, int); long clock(void); int close(int); int creat(const char*, unsigned long int); char* crypt(const char*, const char*); char* ctermid(char*); char* cuserid(char*); double drand48(void); int dup(int); int dup2(int, int); int dysize(int); char* ecvt(double, int, int*, int*); char* encrypt(char*, int); double erand(short*); int execl(const char*, const char *, ...); int execle(const char*, const char *, ...); int execlp(const char*, const char*, ...); int exect(const char*, const char**, char**); int execv(const char*, const char**); int execve(const char*, const char**, char**); int execvp(const char*, const char**); void volatile exit(int); int fchmod(int, int); int fchown(int, int, int); int fcntl(int, int, ...); char* fcvt(double, int, int*, int*); int ffs(int); int flock(int, int); int fork(void); void free(void*); int fsync(int); long ftok(const char*, int); int ftruncate(int, unsigned long); char* gcvt(double, int, char*); char* getcwd(char*, int); int getdomainname(char*, int); int getdtablesize(void); int getegid(void); char* getenv(const char*); int geteuid(void); int getgid(void); int getgroups(int, int*); long gethostid(void); int gethostname(char*, int); char* getlogin(void); int getopt(int, char**, char*); int getpagesize(void); char* getpass(const char*); int getpgrp(void); int getpid(void); int getppid(void); int getpriority(int, int); int getpw(int, char*); unsigned getuid(void); char* getwd(char*); char* initstate(unsigned, char*, int); int ioctl(int, int, char*); int isatty(int); long jrand48(short*); int kill(int, int); int killpg(int, int); void lcong48(short*); int link(const char*, const char*); int listen(int, int); int lock(int, int, long); long lrand48(void); long lseek(int, long, int); void* malloc(unsigned); void* memalign(unsigned, unsigned); void* memccpy(void*, const void*, int, int); void* memchr(const void*, int, int); int memcmp(const void*, const void*, int); void* memcpy(void*, const void*, int); void* memset(void*, int, int); int mkdir(const char*, int); int mknod(const char*, int, int); int mkstemp(char*); char* mktemp(char*); long mrand48(void); int nice(int); long nrand48(short*); int open(const char*, int, ...); void pause(void); void perror(const char*); int pipe(int*); void profil(char*, int, int, int); int psignal(unsigned, char*); int ptrace(int, int, int, int); int putenv(const char*); int qsort(void*, int, unsigned, auto (*ptf)(void*,void*)); int rand(void); long random(void); int read(int, void*, unsigned); int readlink(const char*, char*, int); void* realloc(void*, unsigned); int rename(const char*, const char*); int rmdir(const char*); void* sbrk(int); short* seed48(short*); int send(int, char*, int, int); int setgid(int); int sethostname(char*, int); int setkey(const char*); int setpgrp(int, int); int setpriority(int, int, int); int setregid(int, int); int setreuid(int, int); char* setstate(char*); int setuid(int); int sigblock(int); int siginterrupt(int, int); int sigpause(int); int sigsetmask(int); unsigned sleep(unsigned); int socket(int, int, int); int srand(int); void srand48(long); void srandom(int); int stime(long*); char* strcat(char*, const char*); char* strchr(const char*, int); int strcmp(const char*, const char*); char* strcpy(char*, const char*); int strcspn(const char*, const char*); char* strdup(const char*); int strlen(const char*); char* strncat(char*, const char*, int); int strncmp(const char*, const char*, int); char* strncpy(char*, const char*, int); char* strpbrk(const char*, const char*); char* strrchr(const char*, int); int strspn(const char*, const char*); double strtod(const char*, char**); char* strtok(char*, const char*); long strtol(const char*, char**, int); void swab(void*, void*, int); int symlink(const char*, const char*); int syscall(int, ...); int system(const char*); char* tempnam(char*, char*); int tgetent(char*, char*); int tgetnum(char*); int tgetflag(char*); char* tgetstr(char *, char **); char* tgoto(char*, int, int); long time(long*); char* tmpnam(char*); int tputs(char *, int, auto int (*)()); int truncate(const char*, unsigned long); char* ttyname(int); int ttyslot(void); unsigned ualarm(unsigned, unsigned); long ulimit(int, long); int umask(int); int unlink(const char*); unsigned usleep(unsigned); int vadvise(int); void* valloc(unsigned); int vfork(void); int vhangup(void); int wait(int*); int write(int, const void*, unsigned); } extern "C" { int bcmp(const void*, const void*, int); void bcopy(const void*, void*, int); void bzero(void*, int); char* index(const char*, int); char* rindex(const char*, int); } extern char** environ; extern volatile int errno; extern char* sys_errlist[]; extern int sys_nerr; extern char* optarg; extern int opterr; extern int optind; extern "C" void* alloca(unsigned long); # 41 "/usr/local/lib/g++-include/builtin.h" 2 # 1 "/usr/local/lib/g++-include/math.h" 1 #pragma once # 1 "/usr/local/lib/g++-include/math-68881.h" 1 # 1 "/usr/local/lib/g++-include/errno.h" 1 #pragma once extern "C" { # 1 "//usr/include/errno.h" 1 # 1 "/usr/include/sys/errno.h" 1 # 7 "//usr/include/errno.h" 2 extern int errno; # 5 "/usr/local/lib/g++-include/errno.h" 2 } # 22 "/usr/local/lib/g++-include/math-68881.h" 2 # 34 "/usr/local/lib/g++-include/math-68881.h" __inline static const double sin (double x) { double value; __asm ("fsin%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double cos (double x) { double value; __asm ("fcos%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double tan (double x) { double value; __asm ("ftan%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double asin (double x) { double value; __asm ("fasin%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double acos (double x) { double value; __asm ("facos%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double atan (double x) { double value; __asm ("fatan%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double atan2 (double y, double x) { double pi, pi_over_2; __asm ("fmovecr%.x %#0,%0" : "=f" (pi) : ); __asm ("fscale%.b %#-1,%0" : "=f" (pi_over_2) : "0" (pi)); if (x > 0) { if (y > 0) { if (x > y) return atan (y / x); else return pi_over_2 - atan (x / y); } else { if (x > -y) return atan (y / x); else return - pi_over_2 - atan (x / y); } } else { if (y > 0) { if (-x > y) return pi + atan (y / x); else return pi_over_2 - atan (x / y); } else { if (-x > -y) return - pi + atan (y / x); else if (y < 0) return - pi_over_2 - atan (x / y); else { double value; errno = 33 ; __asm ("fmove%.d %#0rnan,%0" : "=f" (value) : ); return value; } } } } __inline static const double sinh (double x) { double value; __asm ("fsinh%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double cosh (double x) { double value; __asm ("fcosh%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double tanh (double x) { double value; __asm ("ftanh%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double atanh (double x) { double value; __asm ("fatanh%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double exp (double x) { double value; __asm ("fetox%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double expm1 (double x) { double value; __asm ("fetoxm1%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double log (double x) { double value; __asm ("flogn%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double log1p (double x) { double value; __asm ("flognp1%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double log10 (double x) { double value; __asm ("flog10%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double sqrt (double x) { double value; __asm ("fsqrt%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double pow (const double x, const double y) { if (x > 0) return exp (y * log (x)); else if (x == 0) { if (y > 0) return 0.0; else { double value; errno = 33 ; __asm ("fmove%.d %#0rnan,%0" : "=f" (value) : ); return value; } } else { double temp; __asm ("fintrz%.x %1,%0" : "=f" (temp) : "f" (y)); if (y == temp) { int i = (int) y; if (i & 1 == 0) return exp (y * log (x)); else return - exp (y * log (x)); } else { double value; errno = 33 ; __asm ("fmove%.d %#0rnan,%0" : "=f" (value) : ); return value; } } } __inline static const double fabs (double x) { double value; __asm ("fabs%.x %1,%0" : "=f" (value) : "f" (x)); return value; } __inline static const double ceil (double x) { int rounding_mode, round_up; double value; __asm volatile ("fmove%.l fpcr,%0" : "=dm" (rounding_mode) : ); round_up = rounding_mode | 0x30; __asm volatile ("fmove%.l %0,fpcr" : : "dmi" (round_up)); __asm volatile ("fint%.x %1,%0" : "=f" (value) : "f" (x)); __asm volatile ("fmove%.l %0,fpcr" : : "dmi" (rounding_mode)); return value; } __inline static const double floor (double x) { int rounding_mode, round_down; double value; __asm volatile ("fmove%.l fpcr,%0" : "=dm" (rounding_mode) : ); round_down = (rounding_mode & ~0x10) | 0x20; __asm volatile ("fmove%.l %0,fpcr" : : "dmi" (round_down)); __asm volatile ("fint%.x %1,%0" : "=f" (value) : "f" (x)); __asm volatile ("fmove%.l %0,fpcr" : : "dmi" (rounding_mode)); return value; } __inline static const double rint (double x) { int rounding_mode, round_nearest; double value; __asm volatile ("fmove%.l fpcr,%0" : "=dm" (rounding_mode) : ); round_nearest = rounding_mode & ~0x30; __asm volatile ("fmove%.l %0,fpcr" : : "dmi" (round_nearest)); __asm volatile ("fint%.x %1,%0" : "=f" (value) : "f" (x)); __asm volatile ("fmove%.l %0,fpcr" : : "dmi" (rounding_mode)); return value; } __inline static const double fmod (double x, double y) { double value; __asm ("fmod%.x %2,%0" : "=f" (value) : "0" (x), "f" (y)); return value; } __inline static const double drem (double x, double y) { double value; __asm ("frem%.x %2,%0" : "=f" (value) : "0" (x), "f" (y)); return value; } __inline static const double scalb (double x, int n) { double value; __asm ("fscale%.l %2,%0" : "=f" (value) : "0" (x), "dmi" (n)); return value; } __inline static double logb (double x) { double exponent; __asm ("fgetexp%.x %1,%0" : "=f" (exponent) : "f" (x)); return exponent; } __inline static const double ldexp (double x, int n) { double value; __asm ("fscale%.l %2,%0" : "=f" (value) : "0" (x), "dmi" (n)); return value; } __inline static double frexp (double x, int *exp) { double float_exponent; int int_exponent; double mantissa; __asm ("fgetexp%.x %1,%0" : "=f" (float_exponent) : "f" (x)); int_exponent = (int) float_exponent; __asm ("fgetman%.x %1,%0" : "=f" (mantissa) : "f" (x)); if (mantissa != 0) { __asm ("fscale%.b %#-1,%0" : "=f" (mantissa) : "0" (mantissa)); int_exponent += 1; } *exp = int_exponent; return mantissa; } __inline static double modf (double x, double *ip) { double temp; __asm ("fintrz%.x %1,%0" : "=f" (temp) : "f" (x)); *ip = temp; return x - temp; } # 32 "/usr/local/lib/g++-include/math.h" 2 extern "C" { double acosh(double); double asinh(double); double cbrt(double); double copysign(double,double); double erf(double); double erfc(double); double finite(double); double gamma(double); double hypot(double,double); double infnan(int); int isinf(double); int isnan(double); double j0(double); double j1(double); double jn(int, double); double lgamma(double); double y0(double); double y1(double); double yn(int, double); } # 109 "/usr/local/lib/g++-include/math.h" struct libm_exception { int type; char* name; double arg1, arg2, retval; }; extern "C" int matherr(libm_exception*); # 1 "/usr/local/lib/g++-include/values.h" 1 #pragma once # 153 "/usr/local/lib/g++-include/values.h" # 134 "/usr/local/lib/g++-include/math.h" 2 # 42 "/usr/local/lib/g++-include/builtin.h" 2 long abs(long); double abs(double); void clearbit(long&, long); void setbit(long&, long); int testbit(long, long); int even(long); long gcd(long, long); long lg(long); long lcm(long, long); int odd(long); double pow(double, long); long pow(long, long); int sign(long); int sign(double); long sqr(long); double sqr(double); long sqrt(long); double start_timer(); double return_elapsed_time(double); char* itoa(long x, int base = 10, int width = 0); char* itoa(unsigned long x, int base = 10, int width = 0); char* itoa(long long x, int base = 10, int width = 0); char* itoa(unsigned long long x, int base = 10, int width = 0); char* dtoa(double x, char cvt = 'g', int width = 0, int prec = 6); char* hex(long x, int width = 0); char* hex(unsigned long x, int width = 0); char* oct(long x, int width = 0); char* oct(unsigned long x, int width = 0); char* dec(long x, int width = 0); char* dec(unsigned long x, int width = 0); char* form(const char* fmt ...); char* chr(char ch); char* str(const char* s, int width = 0); unsigned int hashpjw(const char*); unsigned int multiplicativehash(int); unsigned int foldhash(double); extern void default_one_arg_error_handler(const char*); extern void default_two_arg_error_handler(const char*, const char*); extern two_arg_error_handler_t lib_error_handler; extern two_arg_error_handler_t set_lib_error_handler(two_arg_error_handler_t f); inline double abs(double _arg) { return (_arg < 0.0)? -_arg : _arg; } inline long abs(long _arg) { return (_arg < 0)? -_arg : _arg; } inline int sign(long _arg) { return (_arg == 0) ? 0 : ( (_arg > 0) ? 1 : -1 ); } inline int sign(double _arg) { return (_arg == 0.0) ? 0 : ( (_arg > 0.0) ? 1 : -1 ); } inline long sqr(long _arg) { return _arg * _arg; } inline double sqr(double _arg) { return _arg * _arg; } inline int even(long _arg) { return !(_arg & 1); } inline int odd(long _arg) { return (_arg & 1); } inline long lcm(long _x, long _y) { return _x / gcd(_x, _y) * _y; } inline void setbit(long& _x, long _b) { _x |= (1 << _b); } inline void clearbit(long& _x, long _b) { _x &= ~(1 << _b); } inline int testbit(long _x, long _b) { return ((_x & (1 << _b)) != 0); } # 3 "/usr/local/lib/g++-include/libc.h" 2 # 83 "ArrayOb.c" 2 # 1 "/usr/include/malloc.h" 1 struct mallinfo { int arena; int ordblks; int smblks; int hblks; int hblkhd; int usmblks; int fsmblks; int uordblks; int fordblks; int keepcost; int mxfast; int nlblks; int grain; int uordbytes; int allocated; int treeoverhead; }; extern char *malloc(); extern char *realloc(); extern int mallopt(); extern struct mallinfo mallinfo(); # 84 "ArrayOb.c" 2 # 1 "ArrayOb.h" 1 # 1 "Collection.h" 1 # 1 "Object.h" 1 # 1 "/usr/local/lib/g++-include/stream.h" 1 #pragma once # 1 "/usr/local/lib/g++-include/File.h" 1 #pragma once enum io_mode { io_readonly = 0, io_writeonly = 1, io_readwrite = 2, io_appendonly = 3, io_append = 4, }; enum access_mode { a_createonly = 0, a_create = 1, a_useonly = 2, a_use = 3, }; enum state_value { _good = 0, _eof = 1, _fail = 2, _bad = 4 }; class Filebuf; class File { friend class Filebuf; protected: struct _iobuf * fp; char* nm; char rw; state_value state; long stat; void initialize(); void reinitialize(const char*); char *readline (int chunk_number, char terminator); public: File(); File(const char* filename, io_mode m, access_mode a); File(const char* filename, const char* m); File(int filedesc, io_mode m); File( struct _iobuf * fileptr); File(int sz, char* buf, io_mode m); ~File(); File& open(const char* filename, io_mode m, access_mode a); File& open(const char* filename, const char* m); File& open(int filedesc, io_mode m); File& open( struct _iobuf * fileptr); File& close(); File& remove(); int filedesc(); const char* name(); void setname(const char* newname); int iocount(); operator struct _iobuf *(); int rdstate(); int eof(); int fail(); int bad(); int good(); int readable(); int writable(); int is_open(); operator void*(); void error(); void clear(state_value f = _good); void set(state_value f); void unset(state_value f); File& failif(int cond); void check_state(); File& get(char& c); File& put(char c); File& unget(char c); File& putback(char c); File& put(const char* s); File& get (char* s, int n, char terminator = '\n'); File& getline(char* s, int n, char terminator = '\n'); File& gets (char **s, char terminator = '\n'); File& read(void* x, int sz, int n); File& write(void* x, int sz, int n); File& form(const char* ...); File& scan(const char* ...); File& flush(); File& flush(char ch); int fill(); File& seek(long pos, int seek_mode=0); long tell(); File& setbuf(int buffer_kind); File& setbuf(int size, char* buf); File& raw(); }; extern void verbose_File_error_handler(char*); extern void quiet_File_error_handler(char*); extern void fatal_File_error_handler(char*); extern one_arg_error_handler_t File_error_handler; extern one_arg_error_handler_t set_File_error_handler(one_arg_error_handler_t); inline int File::filedesc() { return ((fp)->_file) ; } inline const char* File::name() { return nm; } inline int File::iocount() { return stat; } inline File::operator struct _iobuf *() { return fp; } inline void File::clear(state_value flag = _good) { state = flag; } inline void File::set(state_value flag) { state = state_value(int(state) | int(flag)); } inline void File::unset(state_value flag) { state = state_value(int(state) & ~int(flag)); } inline int File::readable() { if (fp != 0) { if ( (((fp)->_flag& 00020 )!=0) ) set(_eof); if ( (((fp)->_flag& 00040 )!=0) ) set(_bad);} return (state == _good && (rw & 01)); } inline int File::writable() { if (fp != 0 && (((fp)->_flag& 00040 )!=0) ) set(_bad); return ((int(state) & (int(_fail)|int(_bad))) == 0 && (rw & 02)); } inline int File::is_open() { return (fp != 0); } inline File& File::raw() { return this->File::setbuf( 00004 ); } inline void File::check_state() { if (fp != 0) { if ( (((fp)->_flag& 00020 )!=0) ) set(_eof); else unset(_eof); if ( (((fp)->_flag& 00040 )!=0) ) set(_bad); } } inline File& File::failif(int cond) { if (cond) set(_fail); return *this; } inline File& File::get(char& c) { if (readable()) { int ch = (--(fp)->_cnt>=0?(int)(*(unsigned char*)(fp)->_ptr++):_filbuf(fp)) ; c = ch; failif (ch == (-1) ); } return *this; } inline File& File::put(char c) { return failif (!writable() || (--( fp)->_cnt>=0? ((int)((unsigned char)((*( fp)->_ptr++=(unsigned)(c))))):_flsbuf((unsigned)(c), fp)) == (-1) ); } inline File& File::unget(char c) { return failif(!is_open() || !(rw & 01) || ungetc(c, fp) == (-1) ); } inline File& File::putback(char c) { return failif (!is_open() || !(rw & 01) || ungetc(c, fp) == (-1) ); } inline File& File::read(void* x, int sz, int n) { return failif (!readable() || (stat = fread(x, sz, n, fp)) != n); } inline File& File::write(void* x, int sz, int n) { return failif (!writable() || (stat = fwrite(x, sz, n, fp)) != n); } inline File& File::flush() { return failif(!is_open() || fflush(fp) == (-1) ); } inline File& File::flush(char ch) { return failif(!is_open() || _flsbuf(ch, fp) == (-1) ); } inline int File::fill() { failif(!is_open() || (stat = _filbuf(fp)) == (-1) ); return stat; } inline File& File::seek(long pos, int seek_mode = 0) { return failif (!is_open() || fseek(fp, pos, seek_mode) < 0); } inline long File::tell() { failif (!is_open() || ((stat = ftell(fp)) < 0)); return stat; } inline int File::rdstate() { check_state(); return state; } inline File::operator void*() { check_state(); return (int(state) & (int(_bad)|int(_fail)))? 0 : this ; } inline int File::eof() { check_state(); return state & _eof; } inline int File::fail() { check_state(); return state & _fail; } inline int File::bad() { check_state(); return state & _bad; } inline int File::good() { check_state(); return rdstate() == _good; } # 34 "/usr/local/lib/g++-include/stream.h" 2 # 1 "/usr/local/lib/g++-include/streambuf.h" 1 #pragma once enum open_mode { input=0, output=1, append=2 }; class streambuf { public: char* base; char* pptr; char* gptr; char* eptr; char alloc; streambuf(); streambuf(char* buf, int buflen); virtual ~streambuf(); int doallocate(); int allocate(); virtual int overflow(int c = (-1) ); virtual int underflow(); int sgetc(); int snextc(); void stossc(); int sputback(char); int sputc(int c = (-1) ); virtual streambuf* setbuf(char* buf, int buflen, int preloaded_count = 0); int sputs(const char* s); int sputsn(const char* s, int len); virtual const char* name(); virtual streambuf* open(const char* name, open_mode m); virtual streambuf* open(const char* filename, io_mode m, access_mode a); virtual streambuf* open(const char* filename, const char* m); virtual streambuf* open(int filedesc, io_mode m); virtual streambuf* open( struct _iobuf * fileptr); virtual int is_open(); virtual int close(); virtual void error(); }; class filebuf: public streambuf { public: int fd; char opened; int overflow(int c = (-1) ); int underflow(); filebuf(); filebuf(int newfd); filebuf(int newfd, char* buf, int buflen); ~filebuf(); streambuf* open(const char* name, open_mode m); int is_open(); int close(); }; class Filebuf: public streambuf { public: File* Fp; void init_streambuf_ptrs(); int overflow(int c = (-1) ); int underflow(); Filebuf(); Filebuf(const char* filename, io_mode m, access_mode a); Filebuf(const char* filename, const char* m); Filebuf(int filedesc, io_mode m); Filebuf( struct _iobuf * fileptr); ~Filebuf(); const char* name(); streambuf* setbuf(char* buf, int buflen, int preloaded_count = 0); streambuf* open(const char* filename, io_mode m, access_mode a); streambuf* open(const char* filename, const char* m); streambuf* open(int filedesc, io_mode m); streambuf* open( struct _iobuf * fileptr); int is_open(); int close(); void error(); }; inline int streambuf::allocate() { return (base == 0)? doallocate() : 0; } inline int streambuf::sgetc() { return (gptr >= pptr)? underflow() : int(*gptr); } inline int streambuf::snextc() { ++gptr; return (gptr >= pptr)? underflow() : int(*gptr); } inline void streambuf::stossc() { if (gptr >= pptr) underflow(); else gptr++; } inline int streambuf::sputback(char ch) { return (gptr > base)? (*--gptr = ch) : (-1) ; } inline int streambuf::sputc(int ch = (-1) ) { return (pptr < eptr)? (*pptr++ = (char)(ch)) : overflow(ch); } # 35 "/usr/local/lib/g++-include/stream.h" 2 class whitespace { char filler; }; class istream; class ostream { friend class istream; protected: streambuf* bp; state_value state; char ownbuf; public: ostream(const char* filename, io_mode m, access_mode a); ostream(const char* filename, const char* m); ostream(int filedesc, io_mode m); ostream( struct _iobuf * fileptr); ostream(int sz, char* buf); ostream(int filedesc, char* buf, int buflen); ostream(int filedesc); ostream(streambuf* s); ~ostream(); ostream& open(const char* filename, io_mode m, access_mode a); ostream& open(const char* filename, const char* m); ostream& open(int filedesc, io_mode m); ostream& open( struct _iobuf * fileptr); ostream& open(const char* filenam, open_mode m); ostream& close(); ostream& flush(); int rdstate(); int eof(); int fail(); int bad(); int good(); int readable(); int writable(); int is_open(); operator void*(); int operator !(); const char* name(); char* bufptr(); void error(); void clear(state_value f = 0); void set(state_value f); void unset(state_value); ostream& failif(int cond); ostream& put(char c); ostream& put(const char* s); ostream& put(const char* s, int slen); ostream& form(const char* fmt, ...); ostream& operator << (short n); ostream& operator << (unsigned short n); ostream& operator << (int n); ostream& operator << (unsigned int n); ostream& operator << (long n); ostream& operator << (unsigned long n); ostream& operator << (long long n); ostream& operator << (unsigned long long n); ostream& operator << (float n); ostream& operator << (double n); ostream& operator << (const char* s); ostream& operator << (char c); }; class istream { friend void eatwhite(istream& s); protected: streambuf* bp; state_value state; ostream* tied_to; char skipws; char ownbuf; void _flush(); char* readline (int chunk_number, char terminator); public: istream(const char* filename, io_mode m, access_mode a, int sk=1, ostream* t = 0); istream(const char* filename, const char* m, int sk=1, ostream* t = 0); istream(int filedesc, io_mode m, int sk=1, ostream* t = 0); istream( struct _iobuf * fileptr, int sk=1, ostream* t = 0); istream(int sz, char* buf, int sk=1, ostream* t = 0); istream(int filedesc, int sk=1, ostream* t = 0); istream(int filedesc, char* buf, int buflen, int sk=1, ostream* t = 0); istream(streambuf* s, int sk=1, ostream* t = 0); ~istream(); istream& open(const char* filename, io_mode m, access_mode a); istream& open(const char* filename, const char* m); istream& open(int filedesc, io_mode m); istream& open( struct _iobuf * fileptr); istream& open(const char* filenam, open_mode m); istream& close(); ostream* tie(ostream* s); int skip(int); int rdstate(); int eof(); int fail(); int bad(); int good(); int readable(); int writable(); int is_open(); operator void*(); int operator !(); const char* name(); char* bufptr(); void error(); void clear(state_value f = 0); void set(state_value f); void unset(state_value f); istream& failif(int cond); istream& get(char& c); istream& unget(char c); istream& putback(char c); istream& get (char* s, int n, char terminator = '\n'); istream& getline(char* s, int n, char terminator = '\n'); istream& gets (char **s, char terminator = '\n'); istream& operator >> (char& c); istream& operator >> (short& n); istream& operator >> (unsigned short& n); istream& operator >> (int& n); istream& operator >> (unsigned int& n); istream& operator >> (long& n); istream& operator >> (unsigned long& n); istream& operator >> (long long& n); istream& operator >> (unsigned long long& n); istream& operator >> (float& n); istream& operator >> (double& n); istream& operator >> (char* s); istream& operator >> (whitespace& w); }; extern istream cin; extern ostream cout; extern ostream cerr; extern whitespace WS; inline void ostream::clear(state_value flag = _good) { state = flag; } inline void ostream::set(state_value flag) { state = state_value(int(state) | int(flag)); } inline void ostream::unset(state_value flag) { state = state_value(int(state) & ~int(flag)); } inline int ostream::rdstate() { return int(state); } inline int ostream::good() { return state == _good; } inline int ostream::eof() { return int(state) & int(_eof); } inline int ostream::fail() { return int(state) & int(_fail); } inline int ostream::bad() { return int(state) & int(_bad); } inline ostream::operator void*() { return (state == _good)? this : 0; } inline int ostream::operator !() { return (state != _good); } inline ostream& ostream::failif(int cond) { if (cond) set(_fail); return *this; } inline int ostream::is_open() { return bp->is_open(); } inline int ostream::readable() { return 0; } inline int ostream::writable() { return (bp != 0) && (state == _good); } inline char* ostream::bufptr() { return bp->base; } inline ostream& ostream::flush() { bp->overflow(); return *this; } inline ostream& ostream::close() { bp->overflow(); bp->close(); return *this; } inline ostream& ostream::put(char ch) { return failif((state != _good) || bp->sputc(ch) == (-1) ); } inline ostream& ostream::operator << (char ch) { return failif((state != _good) || bp->sputc(ch) == (-1) ); } inline ostream& ostream::put(const char* s) { return failif((state != _good) || bp->sputs(s) == (-1) ); } inline ostream& ostream::put(const char* s, int len) { return failif((state != _good) || bp->sputsn(s, len) == (-1) ); } inline ostream& ostream::operator << (const char* s) { return failif((state != _good) || bp->sputs(s) == (-1) ); } inline void istream::clear(state_value flag = _good) { state = flag; } inline void istream::set(state_value flag) { state = state_value(int(state) | int(flag)); } inline void istream::unset(state_value flag) { state = state_value(int(state) & ~int(flag)); } inline int istream::rdstate() { return int(state); } inline int istream::good() { return state == _good; } inline int istream::eof() { return int(state) & int(_eof); } inline int istream::fail() { return int(state) & int(_fail); } inline int istream::bad() { return int(state) & int(_bad); } inline istream::operator void*() { return (state == _good)? this : 0; } inline int istream::operator !() { return (state != _good); } inline istream& istream::failif(int cond) { if (cond) set(_fail); return *this; } inline int istream::is_open() { return bp->is_open(); } inline int istream::readable() { return (bp != 0) && (bp->is_open()) && (state == _good); } inline int istream::writable() { return 0; } inline void istream::_flush() { if(tied_to != 0) tied_to->flush(); } inline char* istream::bufptr() { return bp->base; } inline istream& istream::close() { bp->close(); return *this; } inline int istream::skip(int sk) { int was = skipws; skipws = sk; return was; } inline ostream* istream::tie(ostream* s) { ostream* was = tied_to; tied_to = s; return was; } inline istream& istream::unget(char c) { if (bp->sputback(c) == (-1) ) set(_fail); return *this; } inline istream& istream::putback(char c) { if (bp->sputback(c) == (-1) ) set(_fail); return *this; } inline void eatwhite(istream& s) { s >> WS; } # 130 "Object.h" 2 # 1 "/usr/local/lib/g++-include/errors.h" 1 const int MAX_MSG_ARG = 8; const int MAX_FACILITIES = 32; const int SYS_LAST_ERROR = 34; enum severity_level { SUCCESS = 0, INFORMATION = -1, INFO = -1, WARNING = -2, ERROR = -3, FATAL = -4, DEFAULT = 1 }; const int FAC_SHIFT = 12; const int OFFSET_MASK = 0xfff; const int FAC_MASK = 0xfff000; inline int FACILITY_CODE(int ER) { return ((ER&FAC_MASK)>>FAC_SHIFT); } inline int OFFSET_INDEX(int ER) { return (ER&OFFSET_MASK); } class ErrSpecs { public: int severity; char* args; char* text; }; class ErrFac { public: char* longname; ErrSpecs* errlist; int last; }; # 131 "Object.h" 2 class Class; class Dictionary; class OIOifd; class OIOofd; class OIOin; class OIOout; class Object; class OrderedCltn; class ReadFromTbl; class StoreOnTbl; class IdentSet; typedef int bool; const int YES = 1; const int NO = 0; inline char ABS(char x) { return x >= 0 ? x : -x; } inline short ABS(short x) { return x >= 0 ? x : -x; } inline int ABS(int x) { return x >= 0 ? x : -x; } inline long ABS(long x) { return x >= 0 ? x : -x; } inline float ABS(float x) { return x >= 0 ? x : -x; } inline double ABS(double x) { return x >= 0 ? x : -x; } inline char MAX(char a,char b) { return a >= b ? a : b; } inline short MAX(short a,short b) { return a >= b ? a : b; } inline int MAX(int a,int b) { return a >= b ? a : b; } inline long MAX(long a,long b) { return a >= b ? a : b; } inline float MAX(float a,float b) { return a >= b ? a : b; } inline double MAX(double a,double b) { return a >= b ? a : b; } inline void* MAX(void* a,void* b) { return a >= b ? a : b; } inline unsigned char MAX(unsigned char a, unsigned char b) { return a >= b ? a : b; } inline unsigned short MAX(unsigned short a, unsigned short b) { return a >= b ? a : b; } inline unsigned int MAX(unsigned int a, unsigned int b) { return a >= b ? a : b; } inline unsigned long MAX(unsigned long a, unsigned long b) { return a >= b ? a : b; } inline char MIN(char a,char b) { return a <= b ? a : b; } inline short MIN(short a,short b) { return a <= b ? a : b; } inline int MIN(int a,int b) { return a <= b ? a : b; } inline long MIN(long a,long b) { return a <= b ? a : b; } inline float MIN(float a,float b) { return a <= b ? a : b; } inline double MIN(double a,double b) { return a <= b ? a : b; } inline void* MIN(void* a,void* b) { return a <= b ? a : b; } inline unsigned char MIN(unsigned char a, unsigned char b) { return a <= b ? a : b; } inline unsigned short MIN(unsigned short a, unsigned short b) { return a <= b ? a : b; } inline unsigned int MIN(unsigned int a, unsigned int b) { return a <= b ? a : b; } inline unsigned long MIN(unsigned long a, unsigned long b) { return a <= b ? a : b; } static class NIHCL { private: static int initCount; static bool init; static unsigned char char_bit_mask[sizeof(char)*8]; static unsigned short short_bit_mask[sizeof(short)*8]; static unsigned int int_bit_mask[sizeof(int)*8]; static unsigned char bit_count[256]; static unsigned char bit_reverse[256]; private: static void initTables(); public: NIHCL(); ~NIHCL(); static unsigned char charBitMask(int i) { return char_bit_mask[i]; } static unsigned short shortBitMask(int i) { return short_bit_mask[i]; } static unsigned int intBitMask(int i) { return int_bit_mask[i]; } static unsigned char bitCount(int i) { return bit_count[i]; } static unsigned char bitReverse(int i) { return bit_reverse[i]; } static void initialize(); static bool initialized() { return init; } static void setError(int error, int sev ...); } NIHCL_init; class ClassList : public NIHCL { Class** clp; friend Class; public: ClassList(const char*, ...); ~ClassList() {} }; # 231 "Object.h" # 262 "Object.h" # 290 "Object.h" # 326 "Object.h" class Object : public NIHCL { public: static Object& castdown(Object& p) { return p; } static const Object& castdown(const Object& p) { return p; } static Object* castdown(Object* p) { return p; } static const Object* castdown(const Object* p) { return p; } static const Class* desc(); virtual const Class* isA() const = 0; virtual Object* shallowCopy() const = 0; private: static Object* reader(OIOin& strm); static Object* reader(OIOifd& fd); public: static Object* const nil; public: static Object* readFrom(OIOifd& fd); static Object* readFrom(OIOin& strm); protected: Object(OIOifd&); Object(OIOin&); protected: virtual void storer(OIOofd&) const; virtual void storer(OIOout&) const; friend OIOout; friend OIOofd; protected: Object() {} void ambigCheck(void*&, void*&, const Class&) const; public: void assertArgClass(const Class& expect, const char* fname) const; void assertArgClass(const Object& ob, const Class& expect, const char* fname) const; void assertArgSpecies(const Class& expect, const char* fname) const; void assertArgSpecies(const Object& ob, const Class& expect, const char* fname) const; void assertClass(const Class& expect) const; void assertSpecies(const Class& expect) const; const char* className() const; Object* deepCopy() const; void derivedClassResponsibility(const char*) const; void invalidArgClass(const Class& expect, const char* fname) const; void invalidArgClass(const Object& ob, const Class& expect, const char* fname) const; void invalidArgSpecies(const Class& expect, const char* fname) const; void invalidArgSpecies(const Object& ob, const Class& expect, const char* fname) const; void invalidClass(const Class& expect) const; void invalidSpecies(const Class& expect) const; bool isKindOf(const Class&) const; bool isMemberOf(const Class& clid) const { return isA()==&clid; } bool isSame(const Object& ob) const { return this==&ob; } bool isSpecies(const Class& clid) const { return species()==&clid; } void shouldNotImplement(const char*) const; void storeMemberOn(OIOofd&) const; void storeMemberOn(OIOout&) const; void storeOn(OIOofd&) const; void storeOn(OIOout&) const; void* _safe_castdown(const Class&) const; virtual Object* addDependent(Object&); virtual unsigned capacity() const; virtual void changed(); virtual void changed(const Object&); virtual int compare(const Object&) const = 0; virtual Object* copy() const; virtual void deepenShallowCopy() = 0; virtual OrderedCltn& dependents() const; virtual void destroyer(); virtual void dumpOn(ostream& strm =cerr) const; virtual unsigned hash() const = 0; virtual bool isEqual(const Object&) const = 0; virtual void scanFrom(istream& strm); virtual void printOn(ostream& strm =cout) const = 0; virtual void release(); virtual Object* removeDependent(const Object&); virtual unsigned size() const; virtual const Class* species() const; virtual void update(const Object&, const Object&); virtual void* _castdown(const Class&) const; }; class Class : public Object { private: static unsigned long readFrom_level; static unsigned long storeOn_level; static unsigned long addObjectFlag; friend Object::Object(OIOin&); friend Object::Object(OIOifd&); static IdentSet* storeVBaseTbl; friend void Object::storeOn(OIOout&) const; friend void Object::storeOn(OIOofd&) const; public: static Dictionary& dictionary; static ReadFromTbl* readFromTbl; static StoreOnTbl* storeOnTbl; public: typedef void (*initorTy)(const Class&); static const Class* desc(); virtual const Class* isA() const; virtual Object* shallowCopy() const; private: static Object* reader(OIOin& strm); static Object* reader(OIOifd& fd); public: static Class& castdown(Object& p) { return (Class&)p; } static const Class& castdown(const Object& p) { return (const Class&)p; } static Class* castdown(Object* p) { return (Class*)p; } static const Class* castdown(const Object* p) { return (const Class*)p; } static void initialize(); static const Class* lookup(const char* name); static unsigned long readFromLevel() { return readFrom_level; } static unsigned long storeOnLevel() { return storeOn_level; } static bool _deepenVBase(void*); static bool _storeVBase(void*); private: const char* class_name; const char* class_ident; const Class* *const class_bases; const Class* *const class_members; const Class* *const class_vbases; const unsigned class_version; const unsigned inst_size; Object* (*const inst_reader)(OIOin&); Object* (*const inst_binreader)(OIOifd&); const initorTy class_initor2; Class* nextClass; unsigned long class_signature; unsigned class_number; private: unsigned number(unsigned n) { return class_number = n; } friend StoreOnTbl; Object* readObject(OIOin&) const; friend OIOin; Object* readObject(OIOifd&) const; friend OIOifd; void addSignature(unsigned long); void computeSignature(); public: Class(const char* name, const ClassList& bases, const ClassList& members, const ClassList& vbases, unsigned version, const char* ident, unsigned size, Object* (*reader)(OIOin&), Object* (*binreader)(OIOifd&), initorTy initor1 =0, initorTy initor2 =0); Class(const Class&); Class(OIOifd&); Class(OIOin&); const char* name() const { return class_name; } const Class** baseClasses() const { return class_bases; } const Class** memberClasses() const { return class_members; } const Class** virtualBaseClasses() const { return class_vbases; } const char* ident() const { return class_ident; } unsigned number() const { return class_number; } unsigned long signature() const { if (class_signature == 0) ((Class*)this)->computeSignature(); return class_signature; } unsigned version() const { return class_version; } Object* readFrom(OIOifd& fd) const; Object* readFrom(OIOin&) const; bool _isKindOf(const Class&) const; virtual int compare(const Object&) const; virtual void dumpOn(ostream& strm =cerr) const; virtual unsigned hash() const; virtual bool isEqual(const Object& ob) const; virtual void printOn(ostream& strm =cout) const; virtual unsigned size() const; virtual void* _castdown(const Class&) const; private: virtual void deepenShallowCopy(); virtual void storer(OIOout&) const; virtual void storer(OIOofd&) const; }; inline const char* Object::className() const { return isA()->name(); } inline Object* Object::readFrom(OIOifd& fd) { return desc()->readFrom(fd); } inline Object* Object::readFrom(OIOin& strm) { return desc()->readFrom(strm); } inline void Object::assertArgClass(const Class& expect, const char* fname) const { if (!isKindOf(expect)) invalidArgClass(expect,fname); } inline void Object::assertArgClass(const Object& ob, const Class& expect, const char* fname) const { if (!(ob.isKindOf(expect))) invalidArgClass(ob,expect,fname); } inline void Object::assertArgSpecies(const Class& expect, const char* fname) const { if (!isSpecies(expect)) invalidArgSpecies(expect,fname); } inline void Object::assertArgSpecies(const Object& ob, const Class& expect, const char* fname) const { if (!(ob.isSpecies(expect))) this->invalidArgSpecies(ob,expect,fname); } inline void Object::assertClass(const Class& expect) const { if (!isKindOf(expect)) invalidClass(expect); } inline void Object::assertSpecies(const Class& expect) const { if (!isSpecies(expect)) invalidSpecies(expect); } inline istream& operator>>(istream& strm, Object& ob) { ob.scanFrom(strm); return strm; } inline ostream& operator<<(ostream& strm, const Object& ob) { ob.printOn(strm); return strm; } # 74 "Collection.h" 2 class ArrayOb; class Bag; class Heap; class Iterator; class OrderedCltn; class Set; class SortedCltn; class Collection: public Object { private: static Class classDesc; public: static Collection& castdown(Object& p) { return (Collection&)p; } static const Collection& castdown(const Object& p) { return (const Collection&)p; } static Collection* castdown(Object* p) { return (Collection*)p; } static const Collection* castdown(const Object* p) { return (const Collection*)p; } static const Class* desc() { return &classDesc; } static Collection* readFrom(OIOin& strm) { return castdown(desc()->readFrom(strm)); } static Collection* readFrom (OIOifd& fd) { return castdown(desc()->readFrom(fd)); } Collection(OIOin&); Collection(OIOifd&); virtual const Class* isA() const; virtual Object* shallowCopy() const; virtual void* _castdown(const Class&) const; protected: void deepenVBase(); void storeVBaseOn(OIOofd&) const; void storeVBaseOn(OIOout&) const; private: static Object* reader(OIOin& strm); static Object* reader(OIOifd& fd) ; public: static const unsigned DEFAULT_CAPACITY; static const unsigned EXPANSION_INCREMENT; static const unsigned EXPANSION_FACTOR; protected: Collection(); protected: void _storer(OIOofd&) const; void _storer(OIOout&) const; public: ArrayOb asArrayOb() const; Bag asBag() const; Heap asHeap() const; OrderedCltn asOrderedCltn() const; Set asSet() const; SortedCltn asSortedCltn() const; virtual ~Collection() {} virtual Object* add(Object&) = 0; virtual const Collection& addAll(const Collection&); virtual Collection& addContentsTo(Collection&) const; virtual Object*& at(int) = 0; virtual const Object *const& at(int) const = 0; virtual int compare(const Object&) const = 0; virtual void deepenShallowCopy(); virtual void doFinish(Iterator& pos) const; virtual Object* doNext(Iterator&) const = 0; virtual void doReset(Iterator& pos) const; virtual void dumpOn(ostream& strm =cerr) const; virtual unsigned hash() const = 0; virtual bool includes(const Object&) const; virtual bool isEmpty() const; virtual bool isEqual(const Object&) const = 0; virtual unsigned occurrencesOf(const Object&) const = 0; virtual void printOn(ostream& strm =cout) const; virtual Object* remove(const Object&) = 0; virtual void removeAll() = 0; virtual const Collection& removeAll(const Collection&); virtual unsigned size() const = 0; }; # 1 "Iterator.h" 1 # 1 "Object.h" 1 # 564 "Object.h" # 71 "Iterator.h" 2 class Collection; class Iterator: public Object { private: static Class classDesc; public: static Iterator& castdown(Object& p) { return (Iterator&)p; } static const Iterator& castdown(const Object& p) { return (const Iterator&)p; } static Iterator* castdown(Object* p) { return (Iterator*)p; } static const Iterator* castdown(const Object* p) { return (const Iterator*)p; } static const Class* desc() { return &classDesc; } static Iterator* readFrom(OIOin& strm) { return castdown(desc()->readFrom(strm)); } static Iterator* readFrom(OIOifd& fd) { retur n castdown(desc()->readFrom(fd)); } Iterator(OIOin&); Iterator(OIOifd&); virtual const Class* isA() const; virtual Object* shallowCopy() const; virtual void* _castdown(const Class&) const; protected: void deepenVBase(); void storeVBaseOn(OIOofd&) const; void storeVBaseOn(OIOout&) const; private: static Object* reader(OIOin& strm); static Object* reader(OIOifd& fd) ; const Collection* cltn; public: int index; Object* ptr; unsigned num; Object* state; protected: virtual void storer(OIOofd&) const; virtual void storer(OIOout&) const; public: Iterator(const Collection&); ~Iterator(); void reset(); Object* operator()() const { return ptr; } Object* operator++(); const Collection* collection() const { return cltn; } bool operator==(const Iterator&) const; bool operator!=(const Iterator& a) const { return !(*this==a); } virtual void deepenShallowCopy(); virtual void dumpOn(ostream& strm =cerr) const; virtual unsigned hash() const; virtual bool isEqual(const Object&) const; virtual void printOn(ostream& strm =cout) const; virtual const Class* species() const; private: virtual int compare(const Object&) const; }; # 126 "Collection.h" 2 # 71 "ArrayOb.h" 2 class ArrayOb: public Collection { private: static Class classDesc; public: static ArrayOb& castdown(Object& p) { return (ArrayOb&)p; } static const ArrayOb& castdown(const Object& p) { return (const ArrayOb&)p; } static ArrayOb* castdown(Object* p) { return (ArrayOb*)p; } static const ArrayOb* castdown(const Object* p) { return (const ArrayOb*)p; } static const Class* desc() { return &classDesc; } static ArrayOb* readFrom(OIOin& strm) { return castdown(desc()->readFrom(strm)); } static ArrayOb* readFrom(OIOifd& fd) { return castdown (desc()->readFrom(fd)); } ArrayOb(OIOin&); ArrayOb(OIOifd&); virtual const Class* isA() const; virtual Object* shallowCopy() const; virtual void* _castdown(const Class&) const; protected: void deepenVBase(); void storeVBaseOn(OIOofd&) const; void storeVBaseOn(OIOout&) const; private: static Object* reader(OIOin& strm); static Object* reader(OIOifd& fd) ; Object** v; unsigned sz; void allocSizeErr() const; void indexRangeErr() const; protected: virtual void storer(OIOofd&) const; virtual void storer(OIOout&) const; public: ArrayOb(unsigned size =DEFAULT_CAPACITY); ArrayOb(const ArrayOb&); ~ArrayOb(); Object*& elem(int i) { return v[i]; } const Object *const& elem(int i) const { return v[i]; } bool operator!=(const ArrayOb& a) const { return !(*this==a); } void operator=(const ArrayOb&); bool operator==(const ArrayOb&) const; Object*& operator[](int i) { if ((unsigned)i >= sz) indexRangeErr(); return v[i]; } const Object *const& operator[](int i) const { if ((unsigned)i >= sz) indexRangeErr(); return v[i]; } virtual Collection& addContentsTo(Collection&) const; virtual Object*& at(int i); virtual const Object *const& at(int i) const; virtual unsigned capacity() const; virtual int compare(const Object&) const; virtual void deepenShallowCopy(); virtual Object* doNext(Iterator&) const; virtual unsigned hash() const; virtual bool isEqual(const Object&) const; virtual void reSize(unsigned); virtual void removeAll(); virtual unsigned size() const; virtual void sort(); virtual const Class* species() const; private: virtual Object* add(Object&); virtual unsigned occurrencesOf(const Object&) const; virtual Object* remove(const Object&); }; # 85 "ArrayOb.c" 2 # 1 "nihclIO.h" 1 # 1 "OIO.h" 1 # 1 "Object.h" 1 # 564 "Object.h" # 50 "OIO.h" 2 class OIOin : public NIHCL { protected: Object* _readObject(const Class& cl) { return cl.readObject(*this); } virtual Object* readObject(const Class&) = 0; friend Object* Class::readFrom(OIOin&) const; public: OIOin() {} virtual OIOin& operator>>(char*) = 0; virtual OIOin& operator>>(char&) = 0; virtual OIOin& operator>>(unsigned char&) = 0; virtual OIOin& operator>>(short&) = 0; virtual OIOin& operator>>(unsigned short&) = 0; virtual OIOin& operator>>(int&) = 0; virtual OIOin& operator>>(unsigned int&) = 0; virtual OIOin& operator>>(long&) = 0; virtual OIOin& operator>>(unsigned long&) = 0; virtual OIOin& operator>>(float&) = 0; virtual OIOin& operator>>(double&) = 0; virtual OIOin& operator>>(streambuf*) = 0; virtual int get() = 0; virtual OIOin& get(char&) = 0; virtual OIOin& get(unsigned char&) = 0; virtual OIOin& get(char*, unsigned size) = 0; virtual OIOin& get(unsigned char*, unsigned size) = 0; virtual OIOin& get(short*, unsigned size) = 0; virtual OIOin& get(unsigned short*, unsigned size) = 0; virtual OIOin& get(int*, unsigned size) = 0; virtual OIOin& get(unsigned int*, unsigned size) = 0; virtual OIOin& get(long*, unsigned size) = 0; virtual OIOin& get(unsigned long*, unsigned size) = 0; virtual OIOin& get(float*, unsigned size) = 0; virtual OIOin& get(double*, unsigned size) = 0; virtual OIOin& get(streambuf&, char delim ='\n') = 0; virtual OIOin& getCString(char*, unsigned maxlen) = 0; virtual int precision() = 0; virtual int precision(int) = 0; virtual int width() = 0; virtual int width(int) = 0; }; class OIOout : public NIHCL { protected: void _storer(const Object& ob) { ob.storer(*this); } virtual void storeObject(const Object&) = 0; friend void Object::storeOn(OIOout&) const; public: OIOout() {}; virtual OIOout& operator<<(const char*) = 0; virtual OIOout& operator<<(char) = 0; virtual OIOout& operator<<(unsigned char) = 0; virtual OIOout& operator<<(short) = 0; virtual OIOout& operator<<(unsigned short) = 0; virtual OIOout& operator<<(int) = 0; virtual OIOout& operator<<(unsigned) = 0; virtual OIOout& operator<<(long) = 0; virtual OIOout& operator<<(unsigned long) = 0; virtual OIOout& operator<<(float) = 0; virtual OIOout& operator<<(double) = 0; virtual OIOout& put(char) = 0; virtual OIOout& put(const char* val, unsigned size) = 0; virtual OIOout& put(const unsigned char* val, unsigned size) = 0; virtual OIOout& put(const short* val, unsigned size) = 0; virtual OIOout& put(const unsigned short* val, unsigned size) = 0; virtual OIOout& put(const int* val, unsigned size) = 0; virtual OIOout& put(const unsigned int* val, unsigned size) = 0; virtual OIOout& put(const long* val, unsigned size) = 0; virtual OIOout& put(const unsigned long* val, unsigned size) = 0; virtual OIOout& put(const float* val, unsigned size) = 0; virtual OIOout& put(const double* val, unsigned size) = 0; virtual OIOout& putCString(const char*) = 0; virtual int precision() = 0; virtual int precision(int) = 0; virtual int width() = 0; virtual int width(int) = 0; }; # 4 "nihclIO.h" 2 # 1 "OIOfd.h" 1 # 1 "Object.h" 1 # 564 "Object.h" # 57 "OIOfd.h" 2 # 1 "/usr/local/lib/g++-include/string.h" 1 # 58 "OIOfd.h" 2 # 1 "/usr/local/lib/g++-include/osfcn.h" 1 #pragma once # 1 "/usr/local/lib/g++-include/time.h" 1 # 1 "/usr/local/lib/g++-include/sys/types.h" 1 #pragma once extern "C" { # 1 "//usr/include/sys/types.h" 1 # 1 "/usr/include/sys/sysmacros.h" 1 # 16 "//usr/include/sys/types.h" 2 typedef unsigned char u_char; typedef unsigned short u_short; typedef unsigned int u_int; typedef unsigned long u_long; typedef unsigned short ushort; typedef unsigned int uint; typedef struct _physadr { short r[1]; } *physadr; typedef struct label_t { int val[13]; } label_t; typedef struct _quad { long val[2]; } quad; typedef long daddr_t; typedef char * caddr_t; typedef u_long ino_t; typedef long swblk_t; typedef int ____size_t ; typedef long time_t; typedef short dev_t; typedef long off_t; typedef u_short uid_t; typedef u_short gid_t; typedef long key_t; typedef long fd_mask; typedef struct fd_set { fd_mask fds_bits[(((256 )+(( (sizeof(fd_mask) * 8 ) )-1))/( (sizeof(fd_mask) * 8 ) )) ]; } fd_set; typedef char * addr_t; # 107 "//usr/include/sys/types.h" # 7 "/usr/local/lib/g++-include/sys/types.h" 2 } # 9 "/usr/local/lib/g++-include/time.h" 2 extern "C" { # 1 "//usr/include/sys/time.h" 1 struct timeval { long tv_sec; long tv_usec; }; struct c_proto_timezone { int tz_minuteswest; int tz_dsttime; }; struct itimerval { struct timeval it_interval; struct timeval it_value; }; # 27 "/usr/local/lib/g++-include/time.h" 2 # 1 "//usr/include/sys/times.h" 1 struct tms { time_t tms_utime; time_t tms_stime; time_t tms_cutime; time_t tms_cstime; }; # 28 "/usr/local/lib/g++-include/time.h" 2 # 1 "//usr/include/time.h" 1 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; char *tm_zone; long tm_gmtoff; }; extern struct tm *c_proto_gmtime (), *c_proto_localtime (); extern char *c_proto_asctime (), *c_proto_ctime (); extern void c_proto_tzset (), c_proto_tzsetwall (); # 29 "/usr/local/lib/g++-include/time.h" 2 extern struct tm* localtime(long*); extern struct tm* gmtime(long*); extern char* ctime(long*); extern char* asctime(struct tm*); extern void tzset(); extern void tzsetwall(); extern long times(struct tms*); extern char* timezone(int, int); typedef struct c_proto_timezone timezone; extern int getitimer(int, struct itimerval*); extern int setitimer(int, struct itimerval*, struct itimerval*); extern int gettimeofday(struct timeval*, struct timezone*); extern int settimeofday(struct timeval*, struct timezone*); } # 3 "/usr/local/lib/g++-include/osfcn.h" 2 # 1 "/usr/local/lib/g++-include/sys/socket.h" 1 #pragma once # 1 "/usr/local/lib/g++-include/time.h" 1 # 69 "/usr/local/lib/g++-include/time.h" # 5 "/usr/local/lib/g++-include/sys/socket.h" 2 extern "C" { # 1 "//usr/include/sys/socket.h" 1 struct linger { int l_onoff; int l_linger; }; struct sockaddr { u_short sa_family; char sa_data[14]; }; struct sockproto { u_short sp_family; u_short sp_protocol; }; struct msghdr { caddr_t msg_name; int msg_namelen; struct iovec *msg_iov; int msg_iovlen; caddr_t msg_accrights; int msg_accrightslen; }; # 10 "/usr/local/lib/g++-include/sys/socket.h" 2 int select(int, void*, void*, void*, struct timeval*); int connect(int, struct sockaddr*, int); int accept(int, struct sockaddr*, int*); int getsockname(int, struct sockaddr*, int*); } # 4 "/usr/local/lib/g++-include/osfcn.h" 2 # 1 "/usr/local/lib/g++-include/sys/resource.h" 1 #pragma once # 1 "/usr/local/lib/g++-include/time.h" 1 # 69 "/usr/local/lib/g++-include/time.h" # 4 "/usr/local/lib/g++-include/sys/resource.h" 2 extern "C" { # 1 "//usr/include/sys/resource.h" 1 struct rusage { struct timeval ru_utime; struct timeval ru_stime; long ru_maxrss; long ru_ixrss; long ru_idrss; long ru_isrss; long ru_minflt; long ru_majflt; long ru_nswap; long ru_inblock; long ru_oublock; long ru_msgsnd; long ru_msgrcv; long ru_nsignals; long ru_nvcsw; long ru_nivcsw; }; struct rlimit { int rlim_cur; int rlim_max; }; # 10 "/usr/local/lib/g++-include/sys/resource.h" 2 int getrusage(int, struct rusage*); } # 5 "/usr/local/lib/g++-include/osfcn.h" 2 # 59 "OIOfd.h" 2 class OIOifd : public NIHCL { int fd; protected: virtual Object* readObject(const Class&); friend Object* Class::readFrom(OIOifd&) const; public: OIOifd(int filedesc) { fd = filedesc; } operator int() { return fd; } OIOifd& operator>>(char& val) { get((char*)&val,sizeof(val)); return *this; } OIOifd& operator>>(unsigned char& val) { get((char*)&val,sizeof(val)); return *this; } OIOifd& operator>>(short& val) { get((char*)&val,sizeof(val)); return *this; } OIOifd& operator>>(unsigned short& val) { get((char*)&val,sizeof(val)); return *this; } OIOifd& operator>>(int& val) { get((char*)&val,sizeof(val)); return *this; } OIOifd& operator>>(unsigned int& val) { get((char*)&val,sizeof(val)); return *this; } OIOifd& operator>>(long& val) { get((char*)&val,sizeof(val)); return *this; } OIOifd& operator>>(unsigned long& val) { get((char*)&val,sizeof(val)); return *this; } OIOifd& operator>>(float& val) { get((char*)&val,sizeof(val)); return *this; } OIOifd& operator>>(double& val) { get((char*)&val,sizeof(val)); return *this; } int get() { char c; get(c); return c; } OIOifd& get(char& c) { get((unsigned char*) &c,1); return *this; } OIOifd& get(unsigned char& c) { get(&c,1); return *this; } OIOifd& get(char*, unsigned size); OIOifd& get(unsigned char* val, unsigned size) { get((char*)val,size*sizeof(*val)); return *this; } OIOifd& get(short* val, unsigned size) { get((char*)val,size*sizeof(*val)); return *this; } OIOifd& get(unsigned short* val, unsigned size) { get((char*)val,size*sizeof(*val)); return *this; } OIOifd& get(int* val, unsigned size) { get((char*)val,size*sizeof(*val)); return *this; } OIOifd& get(unsigned int* val, unsigned size) { get((char*)val,size*sizeof(*val)); return *this; } OIOifd& get(long* val,unsigned size) { get((char*)val,size*sizeof(*val)); return *this; } OIOifd& get(unsigned long* val,unsigned size) { get((char*)val,size*sizeof(*val)); return *this; } OIOifd& get(float* val,unsigned size) { get((char*)val,size*sizeof(*val)); return *this; } OIOifd& get(double* val,unsigned size) { get((char*)val,size*sizeof(*val)); return *this; } OIOifd& getCString(char*, unsigned maxlen); }; class OIOofd : public NIHCL { int fd; void writeErr(); protected: virtual void storeObject(const Object&); friend void Object::storeOn(OIOofd&) const; public: OIOofd(int filedesc) { fd = filedesc; } operator int() { return fd; } OIOofd& operator<<(const char* val) { *this << (unsigned)strlen(val); put((unsigned char *)val,strlen(val)); return *this; } OIOofd& operator<<(char val) { put((unsigned char*)&val,sizeof(val)); return *this; } OIOofd& operator<<(unsigned char val) { put((unsigned char*)&val,sizeof(val)); return *this; } OIOofd& operator<<(short val) { put((unsigned char*)&val,sizeof(val)); return *this; } OIOofd& operator<<(unsigned short val) { put((unsigned char*)&val,sizeof(val)); return *this; } OIOofd& operator<<(int val) { put((unsigned char*)&val,sizeof(val)); return *this; } OIOofd& operator<<(unsigned int val) { put((unsigned char*)&val,sizeof(val)); return *this; } OIOofd& operator<<(long val) { put((unsigned char*)&val,sizeof(val)); return *this; } OIOofd& operator<<(unsigned long val) { put((unsigned char*)&val,sizeof(val)); return *this; } OIOofd& operator<<(float val) { put((unsigned char*)&val,sizeof(float)); return *this; } OIOofd& operator<<(double val) { put((unsigned char*)&val,sizeof(double)); return *this; } OIOofd& put(const char* val,unsigned size) { write((const char*)val,size*sizeof(*val)); return *this; } OIOofd& put(const unsigned char* val,unsigned size) { return put((const char*)val, size); } OIOofd& put(const short* val,unsigned size) { write((const char*)val,size*sizeof(*val)); return *this; } OIOofd& put(const unsigned short* val,unsigned size) { write((const char*)val,size*sizeof(*val)); return *this; } OIOofd& put(const int* val,unsigned size) { write((const char*)val,size*sizeof(*val)); return *this; } OIOofd& put(const unsigned int* val,unsigned size) { write((const char*)val,size*sizeof(*val)); return *this; } OIOofd& put(const long* val,unsigned size) { write((const char*)val,size*sizeof(*val)); return *this; } OIOofd& put(const unsigned long* val,unsigned size) { write((const char*)val,size*sizeof(*val)); return *this; } OIOofd& put(const float* val,unsigned size) { write((const char*)val,size*sizeof(*val)); return *this; } OIOofd& put(const double* val,unsigned size) { write((const char*)val,size*sizeof(*val)); return *this; } OIOofd& putCString(const char*); OIOofd& write(const char* buf,unsigned nbyte) { if (::write(fd,buf,nbyte) < 0) writeErr(); return *this; } public: enum oioRecordTy { storeOnClassRef, storeOnClass, storeOnObjectRef }; }; # 5 "nihclIO.h" 2 # 86 "ArrayOb.c" 2 Object* ArrayOb::reader(OIOin& strm) { return new ArrayOb(strm); } Object* ArrayOb::reader(OIOifd& fd) { return new ArrayOb(fd); } Object* ArrayOb::shallowCopy() const { return new ArrayOb(*this); } Class ArrayOb::classDesc("ArrayOb" , ClassList(0,Collection ::desc() ,0), ClassList(0, -0,0), ClassList(0, -0,0), 1, "$Header: ArrayOb.c,v 2.204 89/10/07 23:18:26 keith Stab $", sizeof(ArrayOb), ArrayOb::reader, ArrayOb::reader, 0 , 0 ); const Class* ArrayOb::isA() const { return &classDesc; } void ArrayOb::d eepenVBase() { if (Class::_deepenVBase((const void*)this)) ArrayOb::deepenShallowCopy(); } void ArrayOb::storeVBaseOn(OIOofd& fd) const { if (Class::_storeVBase((const void*)this)) ArrayOb::storer(fd); } void ArrayOb::storeVBaseOn(OIOout& strm) const { if (Class::_storeVBase((const void*)this)) ArrayOb::storer(strm); } void* ArrayOb::_castdown(const Class& target) const { if (&target == desc()) return (void*)this; return Collection ::_castdown(target); } ; extern const int NIHCL_ALLOCSIZE,NIHCL_INDEXRANGE; inline void DELETE(Object** ptr) { free((char*)ptr); } inline Object** REALLOC(Object** ptr, unsigned size) { return (Object**)realloc((char*)ptr,sizeof(Object*)*size); } ArrayOb::ArrayOb(unsigned size) { sz = size; if (sz==0) allocSizeErr(); v = ((Object**)malloc(sizeof(Object*)*(sz))) ; register i = sz; register Object** vp = v; while (i--) *vp++ = nil; } ArrayOb::ArrayOb(const ArrayOb& a) { register i = a.sz; sz = i; v = ((Object**)malloc(sizeof(Object*)*(i))) ; register Object** vp = v; register Object** av = a.v; while (i--) *vp++ = *av++; } ArrayOb::~ArrayOb() { DELETE(v); } void ArrayOb::operator=(const ArrayOb& a) { if (v != a.v) { DELETE(v); v = ((Object**)malloc(sizeof(Object*)*(sz=a.sz))) ; register i = a.sz; register Object** vp = v; register Object** av = a.v; while (i--) *vp++ = *av++; } } bool ArrayOb::operator==(const ArrayOb& a) const { if (sz != a.sz) return NO; register unsigned i = sz; register Object** vp = v; register Object** av = a.v; while (i--) { if (!((*vp++)->isEqual(**av++))) return NO; } return YES; } Object*& ArrayOb::at(int i) { return (*this)[i]; } const Object *const& ArrayOb::at(int i) const { return (*this)[i]; } unsigned ArrayOb::capacity() const { return sz; } bool ArrayOb::isEqual(const Object& a) const { return a.isSpecies(classDesc) && *this==castdown(a); } const Class* ArrayOb::species() const { return &classDesc; } void ArrayOb::reSize(unsigned newsize) { if (newsize == 0) allocSizeErr(); v = REALLOC(v,newsize); if (newsize > sz) { Object** vp = &v[sz]; while (newsize > sz) { *vp++ = nil; sz++; } } else sz = newsize; } void ArrayOb::removeAll() { register Object** vp = v; register unsigned i = sz; while (i--) *vp++ = nil; } Collection& ArrayOb::addContentsTo(Collection& cltn) const { register Object** vp = v; register unsigned i = sz; while (i--) cltn.add(**vp++); return cltn; } Object* ArrayOb::doNext(Iterator& pos) const { if (pos.index < size()) return v[pos.index++]; return 0; } void ArrayOb::deepenShallowCopy() { Collection ::deepenShallowCopy(); register i = sz; register Object** vp = v; while (i--) { *vp = (*vp)->deepCopy(); vp++; } } unsigned ArrayOb::hash() const { register unsigned h = sz; register unsigned i = sz; register Object** vp = v; while (i--) h^=(*vp++)->hash(); return h; } ArrayOb::ArrayOb(OIOin& strm) : Collection (strm) { strm >> sz; v = ((Object**)malloc(sizeof(Object*)*(sz))) ; for (register unsigned i=0; i<sz; i++) v[i] = Object::readFrom(strm); } void ArrayOb::storer(OIOout& strm) const { Collection ::storer(strm); strm << sz; for (register unsigned i=0; i<sz; i++) v[i]->storeOn(strm); } unsigned ArrayOb::size() const { return sz; } static int compare_ob(const void* a, const void* b) { return (*(const Object**)a)->compare(**(const Object**)b); } void ArrayOb::sort() { qsort(v,sz,sizeof(Object*),compare_ob); } void ArrayOb::allocSizeErr() const { setError(NIHCL_ALLOCSIZE,DEFAULT,this,className()); } void ArrayOb::indexRangeErr() const { setError(NIHCL_INDEXRANGE,DEFAULT,this,className()); } ArrayOb::ArrayOb(OIOifd& fd) : Collection (fd) { fd >> sz; v = ((Object**)malloc(sizeof(Object*)*(sz))) ; for (register unsigned i=0; i<sz; i++ ) v[i] = Object::readFrom(fd); } void ArrayOb::storer(OIOofd& fd) const { Collection ::storer(fd); fd << sz; for (register unsigned i=0; i<sz; i++) v[i]->storeOn(fd); } int ArrayOb::compare(const Object& arg) const { assertArgSpecies(arg,classDesc,"compare"); const ArrayOb& a = castdown(arg); for (int i=0; i<sz; i++) { if (i == a.sz) return 1; int val; if ((val = v[i]->compare(*a.v[i])) != 0) return val; } if (sz == a.sz) return 0; return -1; } Object* ArrayOb::add(Object& ob) { shouldNotImplement("add"); return &ob; } unsigned ArrayOb::occurrencesOf(const Object&) const { shouldNotImplement("occurrencesOf"); return 0; } Object* ArrayOb::remove(const Object&) { shouldNotImplement("remove"); return 0; } dirt:lib:28 > /src/gnu/g++-new/g++ -B/src/gnu/g++-new/ -c -v -ansi -fdefault-inline ArrayOb.c -o ArrayOb.o g++ version 1.36.2- (based on GCC 1.36) /usr/local/lib/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ ArrayOb.c /usr/tmp/cca21886.cpp GNU CPP version 1.36 /src/gnu/g++-new/cc1plus /usr/tmp/cca21886.cpp -quiet -dumpbase ArrayOb.c -fdefault-inline -version -o /usr/tmp/cca21886.s GNU C++ version 1.36.2- (based on GCC 1.36) (68k, MIT syntax) compiled by GNU C version 1.36. default target switches: -m68020 -mc68020 -m68881 -mbitfield /usr/local/lib/g++-include/streambuf.h: In method int streambuf::allocate (): In file included from /usr/local/lib/g++-include/stream.h:35, from Object.h:131, from Collection.h:75, from ArrayOb.h:72, from ArrayOb.c:85: /usr/local/lib/g++-include/streambuf.h:163: Segmentation violation /src/gnu/g++-new/g++: Program cc1plus got fatal signal 11. dirt:lib:29 >