// Build don't link: // Special g++ Options: -fno-for-scope // GROUPS passed inlining # 1 "NISTImages.cc" # 1 "Vision.h" 1 extern "C" { # 1 "/sym/gnu/lib/g++-include/stdio.h" 1 3 #pragma interface # 1 "/sym/gnu/lib/g++-include/_G_config.h" 1 3 # 33 "/sym/gnu/lib/g++-include/stdio.h" 2 3 extern "C" { # 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdio.h" 1 3 # 1 "/sym/gnu/lib/g++-include/stdarg.h" 1 3 extern "C" { # 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 1 3 # 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/va-sparc.h" 1 3 typedef char * __gnuc_va_list; # 79 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/va-sparc.h" 3 # 32 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 2 3 # 77 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 3 # 140 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 3 # 2 "/sym/gnu/lib/g++-include/stdarg.h" 2 3 } # 2 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdio.h" 2 3 extern struct _iobuf { int _cnt; unsigned char *_ptr; unsigned char *_base; int _bufsiz; short _flag; char _file; } _iob[]; extern struct _iobuf *__hide_fopen (); extern struct _iobuf *__hide_fdopen (); extern struct _iobuf *__hide_freopen (); extern struct _iobuf *__hide_popen (); extern struct _iobuf *tmpfile(); extern long __hide_ftell (); extern char *fgets(); extern char *gets(); extern char *__hide_sprintf (); extern char *ctermid(); extern char *cuserid(); extern char *__hide_tempnam (); extern char *tmpnam(); # 69 "/sym/gnu/lib/g++-include/stdio.h" 2 3 } extern "C" { 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 *); void perror(const char*); struct _iobuf * popen(const char*, const char*); int printf(const char* ...); int 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); int setlinebuf(struct _iobuf *); int setvbuf(struct _iobuf *, char*, int, int ); int sscanf(char*, const char* ...); struct _iobuf * tmpfile(); int ungetc(int, struct _iobuf *); int vfprintf (...) ; int vprintf (...) ; char* sprintf (...) ; char* vsprintf (...) ; extern int _filbuf (...) ; extern int _flsbuf (...) ; } # 11 "Vision.h" 2 # 1 "/usr/include/floatingpoint.h" 1 3 # 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 1 3 enum fp_direction_type { fp_nearest = 0, fp_tozero = 1, fp_positive = 2, fp_negative = 3 } ; # 34 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 # 43 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 # 53 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 enum fp_precision_type { fp_extended = 0, fp_single = 1, fp_double = 2, fp_precision_3 = 3 } ; # 73 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 enum fp_exception_type { fp_inexact = 0, fp_division = 1, fp_underflow = 2, fp_overflow = 3, fp_invalid = 4 } ; enum fp_class_type { fp_zero = 0, fp_subnormal = 1, fp_normal = 2, fp_infinity = 3, fp_quiet = 4, fp_signaling = 5 } ; # 18 "/usr/include/floatingpoint.h" 2 3 typedef float single; typedef unsigned long extended[3]; typedef long double quadruple; typedef unsigned fp_exception_field_type; typedef int sigfpe_code_type; typedef void (*sigfpe_handler_type) (); extern enum fp_direction_type fp_direction; extern enum fp_precision_type fp_precision; extern fp_exception_field_type fp_accrued_exceptions; typedef char decimal_string[512 ]; typedef struct { enum fp_class_type fpclass; int sign; int exponent; decimal_string ds; int more; int ndigits; } decimal_record; enum decimal_form { fixed_form, floating_form }; typedef struct { enum fp_direction_type rd; enum decimal_form df; int ndigits; } decimal_mode; enum decimal_string_form { invalid_form, whitespace_form, fixed_int_form, fixed_intdot_form, fixed_dotfrac_form, fixed_intdotfrac_form, floating_int_form, floating_intdot_form, floating_dotfrac_form, floating_intdotfrac_form, inf_form, infinity_form, nan_form, nanstring_form }; extern void double_to_decimal(); extern void quadruple_to_decimal(); extern char *econvert(); extern char *fconvert(); extern char *gconvert(); extern char *qeconvert(); extern char *qfconvert(); extern char *qgconvert(); extern sigfpe_handler_type ieee_handlers[5 ]; extern sigfpe_handler_type sigfpe(); extern void single_to_decimal(); extern void extended_to_decimal(); extern void decimal_to_single(); extern void decimal_to_double(); extern void decimal_to_extended(); extern void decimal_to_quadruple(); extern char *seconvert(); extern char *sfconvert(); extern char *sgconvert(); extern void string_to_decimal(); extern void file_to_decimal(); extern void func_to_decimal(); extern double atof(); extern int errno; extern double strtod(); # 12 "Vision.h" 2 # 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/malloc.h" 1 3 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; }; typedef void * malloc_t; extern malloc_t calloc( ); extern void free( ); extern malloc_t malloc( ); extern malloc_t realloc( ); extern int mallopt(); extern struct mallinfo mallinfo(); # 13 "Vision.h" 2 long time(long *); int ieee_handler(); } # 1 "/sym/gnu/lib/g++-include/std.h" 1 3 # 1 "/sym/gnu/lib/g++-include/stddef.h" 1 3 extern "C" { # 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stddef.h" 1 3 # 41 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stddef.h" 3 typedef int ptrdiff_t; typedef __wchar_t wchar_t; # 7 "/sym/gnu/lib/g++-include/stddef.h" 2 3 } # 24 "/sym/gnu/lib/g++-include/std.h" 2 3 # 1 "/sym/gnu/lib/g++-include/stdlib.h" 1 3 extern "C" { int abs(int); void abort(void); double atof(const char*); int atoi(const char*); long atol(const char*); int atexit(auto void (*p) (void)); int bsearch (const void *, const void *, int , int , auto int (*ptf)(const void*, const void*)); void* calloc(int , int ); void cfree(void*); void exit(int); char* fcvt(double, int, int*, int*); void free(void*); char* getenv(const char*); int getopt(int, char * const *, const char*); int getpw(int, char*); char* gcvt(double, int, char*); char* ecvt(double, int, int*, int*); extern char** environ; long labs(long); void* malloc(int ); int malloc_usable_size(void*); int putenv(const char*); extern char* optarg; extern int opterr; extern int optind; void qsort(void*, int , int , auto int (*ptf)(void*,void*)); int rand(void); void* realloc(void*, int ); int setkey(const char*); int srand(unsigned int); double strtod(const char*, char**); long strtol(const char*, char**, int); unsigned long stroul(const char**, int); int system(const char*); long random(void); void srandom(int); char* setstate(char*); char* initstate(unsigned, char*, int); double drand48(void); void lcong48(short*); long jrand48(short*); long lrand48(void); long mrand48(void); long nrand48(short*); short* seed48(short*); void srand48(long); char* ctermid(char*); char* cuserid(char*); char* tempnam(const char*, const char*); char* tmpnam(char*); } # 25 "/sym/gnu/lib/g++-include/std.h" 2 3 # 1 "/sym/gnu/lib/g++-include/string.h" 1 3 extern "C" { char* strcat(char*, const char*); char* strchr(const char*, int); int strcmp(const char*, const char*); int strcoll(const char*, const char*); char* strcpy(char*, const char*); int strcspn(const char*, const char*); char* strdup(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*); char* strstr(const char*, const char *); char* strtok(char*, const char*); int strxfrm(char*, const char*, int ); char* index(const char*, int); char* rindex(const char*, int); } # 1 "/sym/gnu/lib/g++-include/memory.h" 1 3 extern "C" { void* memalign (...) ; void* memccpy (...) ; void* memchr (...) ; int memcmp (...) ; void* memcpy (...) ; void* memmove (...) ; void* memset (...) ; int ffs (...) ; int getpagesize (...) ; void* valloc (...) ; void bcopy (...) ; int bcmp (...) ; void bzero (...) ; } # 43 "/sym/gnu/lib/g++-include/string.h" 2 3 # 26 "/sym/gnu/lib/g++-include/std.h" 2 3 # 1 "/sym/gnu/lib/g++-include/unistd.h" 1 3 extern "C" { # 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/unistd.h" 1 3 # 1 "/sym/gnu/lib/g++-include/sys/types.h" 1 3 extern "C" { # 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 1 3 # 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/stdtypes.h" 1 3 typedef int sigset_t; typedef unsigned int speed_t; typedef unsigned long tcflag_t; typedef unsigned char cc_t; typedef int pid_t; typedef unsigned short mode_t; typedef short nlink_t; typedef long clock_t; typedef long time_t; # 16 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 2 3 # 1 "/usr/include/sys/sysmacros.h" 1 3 # 19 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 2 3 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_t { int r[1]; } *physadr_t; typedef struct label_t { int val[2]; } label_t; typedef struct _quad_t { long val[2]; } quad_t; typedef long daddr_t; typedef char * caddr_t; typedef unsigned long ino_t; typedef short dev_t; typedef long off_t; typedef unsigned short uid_t; typedef unsigned short gid_t; typedef long key_t; typedef char * addr_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; # 113 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 3 # 15 "/sym/gnu/lib/g++-include/sys/types.h" 2 3 } # 73 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/unistd.h" 2 3 extern int access( ); extern unsigned alarm( ); extern int chdir( ); extern int __hide_chmod ( ); extern int __hide_chown ( ); extern int close( ); extern char *ctermid( ); extern char *cuserid( ); extern int dup( ); extern int dup2( ); extern int __hide_execl ( ); extern int __hide_execle ( ); extern int __hide_execlp ( ); extern int execv( ); extern int execve( ); extern int execvp( ); extern pid_t fork( ); extern long fpathconf( ); extern char *getcwd( ); extern gid_t getegid( ); extern uid_t geteuid( ); extern gid_t getgid( ); extern int getgroups( ); extern char *getlogin( ); extern pid_t getpgrp( ); extern pid_t getpid( ); extern pid_t getppid( ); extern uid_t getuid( ); extern int isatty( ); extern int link( ); extern off_t lseek( ); extern long pathconf( ); extern int pause( ); extern int pipe( ); extern int read( ); extern int rmdir( ); extern int __hide_setgid ( ); extern int setpgid( ); extern pid_t setsid( ); extern int __hide_setuid ( ); extern unsigned sleep( ); extern long sysconf( ); extern pid_t tcgetpgrp( ); extern int tcsetpgrp( ); extern char *ttyname( ); extern int unlink( ); extern int write( ); # 25 "/sym/gnu/lib/g++-include/unistd.h" 2 3 # 59 "/sym/gnu/lib/g++-include/unistd.h" 3 extern void _exit(int); extern unsigned alarm (...) ; extern int brk (...) ; extern int chdir (...) ; extern int chmod (...) ; extern int chown (const char*, unsigned short , unsigned short ); extern int close (...) ; extern char* crypt (...) ; extern int dup (...) ; extern int dup2 (...) ; extern void encrypt (...) ; extern int execl (const char*, const char *, ...); extern int execle (const char*, const char *, ...); extern int execlp (const char*, const char*, ...); extern int exect (...) ; extern int execv (...) ; extern int execve (...) ; extern int execvp (...) ; extern int fchown (int, unsigned short , unsigned short ); extern int fork (...) ; extern int fsync (...) ; extern int ftruncate (...) ; extern char* getcwd (...) ; extern int getdomainname (...) ; extern int getdtablesize (...) ; extern int getgroups (...) ; extern unsigned short geteuid (...) ; extern unsigned short getegid (...) ; extern unsigned short getgid (...) ; extern long gethostid (...) ; extern int gethostname (...) ; extern int getpgrp (...) ; extern int getpid (...) ; extern int getppid (...) ; extern char* getlogin (...) ; extern char* getpass (...) ; extern unsigned short getuid (...) ; extern int ioctl (int, int, ... ); extern int isatty (...) ; extern int link (...) ; extern int mkstemp (...) ; extern char* mktemp (...) ; extern int nice (...) ; extern int pause (...) ; extern int pipe (...) ; extern int readlink (...) ; extern int rename (...) ; extern int rmdir (...) ; extern void* sbrk (...) ; extern int syscall (...) ; extern int setgid (unsigned short ); extern int sethostname (...) ; extern int setpgrp (...) ; extern int setregid (...) ; extern int setreuid (...) ; extern int setuid (unsigned short ); extern unsigned sleep (...) ; extern void swab (...) ; extern int symlink (...) ; extern long sysconf (...) ; extern int truncate (...) ; extern char* ttyname (...) ; extern int ttyslot (...) ; extern int unlink (...) ; extern int vfork (...) ; extern int vadvise (...) ; extern int vhangup (...) ; extern long lseek (...) ; extern int read (...) ; extern int write (...) ; extern int access (...) ; extern int flock (...) ; } # 28 "/sym/gnu/lib/g++-include/std.h" 2 3 # 1 "/sym/gnu/lib/g++-include/stdio.h" 1 3 # 174 "/sym/gnu/lib/g++-include/stdio.h" 3 # 29 "/sym/gnu/lib/g++-include/std.h" 2 3 # 1 "/sym/gnu/lib/g++-include/errno.h" 1 3 extern "C" { # 1 "/usr/include/errno.h" 1 3 # 1 "/usr/include/sys/errno.h" 1 3 # 10 "/usr/include/errno.h" 2 3 extern int errno; # 9 "/sym/gnu/lib/g++-include/errno.h" 2 3 extern char* sys_errlist[]; extern int sys_nerr; extern int errno; void perror(const char*); char* strerr(int); } # 30 "/sym/gnu/lib/g++-include/std.h" 2 3 # 1 "/sym/gnu/lib/g++-include/fcntl.h" 1 3 extern "C" { # 1 "/usr/include/fcntl.h" 1 3 # 1 "/usr/include/sys/fcntlcom.h" 1 3 struct flock { short l_type; short l_whence; long l_start; long l_len; short l_pid; short l_xxx; }; struct eflock { short l_type; short l_whence; long l_start; long l_len; short l_pid; short l_xxx; long l_rpid; long l_rsys; }; # 1 "/sym/gnu/lib/g++-include/sys/stat.h" 1 3 extern "C" { # 1 "/usr/include/sys/stat.h" 1 3 struct stat { dev_t st_dev; ino_t st_ino; mode_t st_mode; short st_nlink; uid_t st_uid; gid_t st_gid; dev_t st_rdev; off_t st_size; time_t st_atime; int st_spare1; time_t st_mtime; int st_spare2; time_t st_ctime; int st_spare3; long st_blksize; long st_blocks; long st_spare4[2]; }; int __hide_chmod ( ); int fstat( ); int mkdir( ); int mkfifo( ); int stat( ); mode_t umask( ); # 14 "/sym/gnu/lib/g++-include/sys/stat.h" 2 3 extern int chmod (...) ; extern int stat (...) ; extern int lstat (...) ; extern int fstat (...) ; } # 149 "/usr/include/sys/fcntlcom.h" 2 3 int __hide_open ( ); int __hide_creat ( ); int __hide_fcntl ( ); # 6 "/usr/include/fcntl.h" 2 3 # 14 "/sym/gnu/lib/g++-include/fcntl.h" 2 3 int fcntl(int, int, ...); int creat (...) ; int open (...) ; } # 31 "/sym/gnu/lib/g++-include/std.h" 2 3 extern "C" { int strcasecmp (...) ; } # 18 "Vision.h" 2 # 1 "/sym/gnu/lib/g++-include/math.h" 1 3 #pragma interface # 64 "/sym/gnu/lib/g++-include/math.h" 3 extern "C" { double acos(double); double acosh(double); double asin(double); double asinh(double); double atan(double); double atan2(double, double); double atanh(double); double cbrt(double); double ceil(double); double copysign(double,double); double cos(double); double cosh(double); double drem(double,double); double erf(double); double erfc(double); double exp(double); double expm1(double); double fabs(double); double finite(double); double floor(double); double fmod(double, double); double frexp(double, int*); 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 ldexp(double, int); double lgamma(double); double log(double); double log10(double); double log1p(double); double logb(double); double modf(double, double*); double pow(double, double); double rint(double); double scalb(double, int); double sin(double); double sinh(double); double sqrt(double); double tan(double); double tanh(double); double y0(double); double y1(double); double yn(int, double); double aint(double); double anint(double); int irint(double); int nint(double); } struct libm_exception { int type; char* name; double arg1, arg2, retval; }; extern "C" int matherr(libm_exception*); # 1 "/sym/gnu/lib/g++-include/values.h" 1 3 # 57 "/sym/gnu/lib/g++-include/values.h" 3 # 166 "/sym/gnu/lib/g++-include/values.h" 3 # 150 "/sym/gnu/lib/g++-include/math.h" 2 3 # 19 "Vision.h" 2 # 1 "MiscUtilities.h" 1 # 1 "/sym/gnu/lib/g++-include/std.h" 1 3 # 37 "/sym/gnu/lib/g++-include/std.h" 3 # 6 "MiscUtilities.h" 2 inline int used_mem() { struct mallinfo mi = mallinfo(); return mi.usmblks+mi.uordblks; } inline void abort(void) { fprintf((&_iob[2]) ,"abort\n"); exit(1); } inline volatile void error(char *s) { fprintf((&_iob[2]) ,"FATAL ERROR: "); fprintf((&_iob[2]) ,"%s\n",s); exit(1); } template struct NameValuePair { char *name; Y y; }; template Y lookup(NameValuePair *data,char *name) { while(data->name) { if(!strcmp(data->name,name)) return data->y; data++; } abort(); return data->y; } template void swap(T &x,T &y) { T temp = x; x = y; y = temp; } # 21 "Vision.h" 2 # 1 "Counted.h" 1 # 1 "/sym/gnu/lib/g++-include/std.h" 1 3 # 37 "/sym/gnu/lib/g++-include/std.h" 3 # 6 "Counted.h" 2 template struct Counted { private: int *count; T *object; T *operator&() { return object; } void dec_count() { if(!count) return; (*count)--; if(*count<=0) { delete count; delete object; count=0; object=0; } } void inc_count() { if(!count) return; (*count)++; } public: Counted() { count=0; object=0; } Counted(T *object):object(object) { count = new int(1); } ~Counted() { dec_count(); } Counted(Counted &other) { count=other.count; object=other.object; inc_count(); } Counted &operator=(Counted &other) { other.inc_count(); dec_count(); count=other.count; object=other.object; return *this; } T &operator*() {if(!object) abort(); else return *object; return *object;} T *operator->() {if(!object) abort(); else return object; return object;} operator T&() {if(!object) abort(); else return *object; return *object;} }; # 22 "Vision.h" 2 # 1 "Art.h" 1 extern "C" { void abort(); } template inline void art_initialize(X *,int) {} # 39 "Art.h" template class Art { protected: int mark_temp; T *data; int dims[1]; void constructor(int d) { if(d<0) abort() ; mark_temp=0; dims[0]=d; if(d>0) { data=new T[d]; if(!data) abort() ; } else data=0; art_initialize(data,d); } void destructor() { if(!data) return; delete [] data; mark_temp=0; data=0; dims[0]=0; } void copy(Art &other) { int d0=dims[0]=unsigned(dims[0])) abort() ; return data[i]; } T &sub(int i) {return data[i];} void resize(int nd) { if(nd<0) abort() ; Art t(nd); int limit=nd class Stk { protected: Art stack; int fill; public: Stk() {stack.resize(4); fill=0;} Stk(Stk &other) { stack=other.stack; fill=other.fill; } int dim(int i) {return stack.dim(i);} void push(const T &element) { if(fill>=stack.dim(0)) stack.resize(2*fill); stack.sub(fill++)=element; } T &tos() { return stack(fill-1); } T &pop() { return stack(--fill); } T &operator()(int i) {return stack(i);} T &sub(int i) {return stack.sub(i);} void clear() { stack.resize(0); stack.resize(4); fill=0; } void compact() { stack.resize(fill+1); } Stk temp() { stack.temp(); return *this; } T *pointer() {return stack.pointer();} operator Art&() {return stack;} int length() {return fill;} T &operator[](int i) {return operator()(i);} }; template class Art2 { protected: int mark_temp; T **data; int dims[2]; int total_length; void constructor(int d0,int d1) { if(d0<0||d1<0) abort() ; mark_temp=0; dims[0]=d0; dims[1]=d1; total_length=dims[0]*dims[1]; if(d0>0) { data=new T*[d0]; if(!data) abort() ; } else data=0; if(d0>0&&d1>0) { T *p=new T[d0*d1]; if(!p) abort() ; for(int i=0;i=unsigned(dims[0])||unsigned(j)>=unsigned(dims[1])) abort() ; return data[i][j]; } T &sub(int i,int j) {return data[i][j];} void resize(int nd0,int nd1) { if(nd0<0||nd1<0) abort() ; Art2 t(nd0,nd1); int limit0=nd0=total_length) abort() ; return data[0][i]; } }; template inline void art_swap(T &x,T &y) { T temp = x; x = y; y = temp; } template inline void reverse(Art &a) { int i; for(i=a.length()/2;i>=0;i--) art_swap(a.sub(i),a.sub(a.length()-i-1)); } template inline void reverse(Stk &a) { reverse(a.stack); } template inline void bag_remove(Stk &a,T &element) { for(int i=0;i inline void ordered_remove(Stk &a,T &element) { int source=0,dest=0; while(source inline Art concatenate(Art &a,Art &b) { int i,k; k=a.length(); Art result(k+b.length()); for(i=0;i inline Stk concatenate(Stk &a,Stk &b) { int i; Stk result; for(i=0;i class vec { protected: T v[n]; public: int length() {return n;} int dim(int) {return n;} vec() {} vec(T v0) { v[0]=v0; } vec(T v0,T v1) { v[0]=v0; v[1]=v1; } vec(T v0,T v1,T v2) { v[0]=v0; v[1]=v1; v[2]=v2; } vec(T v0,T v1,T v2,T v3) { v[0]=v0; v[1]=v1; v[2]=v2; v[3]=v3; } vec(T v0,T v1,T v2,T v3,T v4) { v[0]=v0; v[1]=v1; v[2]=v2; v[3]=v3; v[4]=v4; } T &operator[](int i) {return v[i];} T &sub(int i) {return v[i];} T &operator()(int i) { if(unsigned(i)>=n) abort(); return v[i]; } T operator*(vec &other) { T result=0; for(int i=0;i?(vec &other) { vec result; for(int i=0;i?other.sub(i); return result; } int operator==(vec &other) { for(int i=0;i=other.sub(i)) return 0; return 1; } int operator>(vec &other) { for(int i=0;iother.sub(i)) return 0; return 1; } int operator>=(vec &other) { for(int i=0;i inline float euclidean_norm(T &v) { float total=0.0; for(int i=0;i inline float euclidean_distance(T &u,T &v) { float total=0.0; for(int i=0;i class mat:vec { protected: public: int dim(int) {return n;} T &operator[](int i) {return v[i];} T &sub(int i,int j) {return v[i*n+j];} T &operator()(int i,int j) { if(unsigned(i)>=n||unsigned(j)>=n) abort(); return sub(i,j); } mat operator*(mat &other) { mat result; for(int i=0;i operator*(vec &other) { vec result; for(int i=0;i vec2; typedef vec vec3; typedef vec vec4; typedef mat mat2; typedef mat mat3; typedef mat mat4; typedef vec ivec2; inline float norm_angle(float p) { while(p<0) p+=2* 3.14159265358979323846 ; while(p>=2* 3.14159265358979323846 ) p-=2* 3.14159265358979323846 ; return p; } inline float norm_angle0(float p) { while(p<- 3.14159265358979323846 ) p+=2* 3.14159265358979323846 ; while(p>= 3.14159265358979323846 ) p-=2* 3.14159265358979323846 ; return p; } inline float norm_orientation(float p) { while(p<0) p+= 3.14159265358979323846 ; while(p>= 3.14159265358979323846 ) p-= 3.14159265358979323846 ; return p; } inline float norm_orientation0(float p) { while(p<- 3.14159265358979323846 /2) p+= 3.14159265358979323846 ; while(p>= 3.14159265358979323846 /2) p-= 3.14159265358979323846 ; return p; } inline float orientation_difference(float p,float q) { fabs(norm_orientation0(p-q)); } inline vec2 cmul(vec2 &p,vec2 &q) { return vec2(p.sub(0)*q.sub(0)-p.sub(1)*q.sub(1), p.sub(0)*q.sub(1)+p.sub(1)*q.sub(0)); } inline vec2 cdiv(vec2 &p,vec2 &q) { float n=q*q; return vec2((p.sub(0)*q.sub(0)+p.sub(1)*q.sub(1))/n, (p.sub(1)*q.sub(0)-p.sub(0)*q.sub(1))/n); } inline vec2 csqrt(vec2 &x) { if (x.sub(0)==0.0&&x.sub(1)==0.0) return vec2(0.0,0.0); else { float a=sqrt((fabs(x.sub(0))+hypot(x.sub(0),x.sub(1)))*0.5); float b=0.5*(x.sub(1)/a); if(x.sub(0)>0.0) return vec2(a, b); else if(x.sub(1)>=0.0) return vec2(a,b); else return vec2(-a,-b); } } inline vec2 cpow(vec2& x, double p) { float h=hypot(x.sub(0),x.sub(1)); if (h<=0.0) abort(); float lr=pow(h,p); float a=atan2(x.sub(1),x.sub(0)); float li=p*a; return vec2(lr*cos(li),lr*sin(li)); } inline float cross(vec2 p,vec2 q) { return p.sub(0)*q.sub(1)-p.sub(1)*q.sub(0); } struct TRS2 { vec2 t; vec2 r; TRS2(vec2 t=vec2(0.0,0.0),vec2 r=vec2(1.0,0.0)):t(t),r(r) { } vec2 operator()(vec2 &arg) { return cmul(r,arg)+t; } float rotation() { return atan2(r(1),r(0)); } }; # 24 "Vision.h" 2 # 1 "VisionTypes.h" 1 typedef Art2 FImage; typedef Art2 IImage; typedef Art2 CImage; struct FImageOp {virtual FImage operator()(FImage &) = 0;}; struct FImageOp2 {virtual FImage operator()(FImage &,FImage &) = 0;}; struct CImageOp {virtual CImage operator()(CImage &) = 0;}; struct CImageOp2 {virtual CImage operator()(CImage &,CImage &) = 0;}; struct PFeature { ivec2 p; float a; short group; short type; PFeature() {} PFeature(ivec2 p,float a,int group,int type):p(p),a(a),group(group),type(type) {} }; typedef Stk PFeatureStk; struct FIExtractor {virtual PFeatureStk operator()(FImage &) = 0;}; struct CIExtractor {virtual PFeatureStk operator()(CImage &) = 0;}; # 28 "Vision.h" 2 # 1 "ImageDatabase.h" 1 # 1 "Art.h" 1 # 339 "Art.h" # 6 "ImageDatabase.h" 2 typedef Art2 CImage; struct ImageDatabase { virtual int length() = 0; virtual int nclassifications() = 0; virtual int nusers() = 0; virtual int classification(int offset) = 0; virtual int user(int offset) = 0; virtual CImage cimage(int offset) {abort();} virtual PFeatureStk features(int offset) {abort();} virtual int user_offset(int user) = 0; virtual int user_length(int user) = 0; }; ImageDatabase *make_NISTDigitImages(); struct ImageDatabaseIterator { virtual int done() = 0; virtual void next() = 0; virtual operator int() = 0; virtual void mark_upto_here() {} }; ImageDatabaseIterator *make_IDI_Sequential(ImageDatabase *digits,int current,int stride); ImageDatabaseIterator *make_IDI_OnePerUser(ImageDatabase *digits,int current); ImageDatabaseIterator *make_IDI_FromFile(char *name); # 29 "Vision.h" 2 # 1 "NISTImages.cc" 2 # 1 "/sym/gnu/lib/g++-include/std.h" 1 3 # 37 "/sym/gnu/lib/g++-include/std.h" 3 # 11 "NISTImages.cc" 2 # 1 "Art.h" 1 # 339 "Art.h" # 12 "NISTImages.cc" 2 extern "C" { # 1 "./nist/ihead.h" 1 typedef struct ihead{ char id[ 80 ]; char created[ 26 ]; char width[ 8 ]; char height[ 8 ]; char depth[ 8 ]; char density[ 8 ]; char compress[ 8 ]; char complen[ 8 ]; char align[ 8 ]; char unitsize[ 8 ]; char sigbit; char byte_order; char pix_offset[ 8 ]; char whitepix[ 8 ]; char issigned; char rm_cm; char tb_bt; char lr_rl; char parent[ 80 ]; char par_x[ 8 ]; char par_y[ 8 ]; }IHEAD; # 15 "NISTImages.cc" 2 int readihdrfile(); } typedef Art2 CImage; Stk mis_files; extern "C" { char *re_comp(char *); int re_exec(char *); } struct NISTCharFile { private: NISTCharFile(NISTCharFile &); void operator=(NISTCharFile &); public: IHEAD *bit_header; int bit_w,bit_h; char *bit_data; int field_w,field_h; Stk classes; static void maybe_read_mis_files() { if(mis_files.length()>0) return; struct _iobuf *stream = fopen("/com/nist/mis-files" ,"r"); if(!stream) abort() ; char buf[1024]; while(fgets(buf,sizeof buf,stream)) { buf[strlen(buf)-1]='\0'; mis_files.push(strdup(buf)); } fclose(stream); } static char *find_matching_mis_file_prefix(char *pattern) { if(re_comp(pattern)) abort() ; int i; for(i=0;ipar_x); field_h=atoi(bit_header->par_y); strcpy(file,prefix); strcat(file,".cls"); struct _iobuf *stream = fopen(file,"r"); if(!stream) abort() ; int total=atoi(fgets(buf,sizeof buf,stream)); if(total!=bit_h/field_h) abort() ; while(fgets(buf,sizeof buf,stream)) classes.push(strtol(buf,0,16)); fclose(stream); } ~NISTCharFile() { free(bit_header); free(bit_data); } int length() { return bit_h/field_h; } CImage image(int i0) { ; CImage result(field_w,field_h); int bit_w8=bit_w/8; int offset=i0*field_h; if(offset>=bit_h) abort() ; int i,j; for(i=0;i>3)]&(1<<(7-i&7)))) ; } return result.temp(); } int classification(int i) { return classes(i); } }; int *NISTDigitImages_table; struct NISTDigitImages:ImageDatabase { private: NISTDigitImages(NISTDigitImages&); void operator=(NISTDigitImages&); public: enum {table_size=2101}; int nclassifications() {return 10;} int nusers() {return 2200;} static void init_table() { struct _iobuf *stream=fopen("/com/nist/nist-digits" ,"r"); NISTDigitImages_table = new int[table_size]; if(!stream) abort() ; int i=1; while(fscanf(stream,"%d",&NISTDigitImages_table[i])==1) i++; if(i!=table_size) abort() ; fclose(stream); int total=0; for(i=1;i=NISTDigitImages_table[table_size-1]) abort() ; while(low+1=2100) abort() ; return NISTDigitImages_table[user]; } int user_length(int user) { if(unsigned(user)>=2100) abort() ; return NISTDigitImages_table[user+1]-NISTDigitImages_table[user]; } int current_user; NISTCharFile *current_file; private: void get_cache(int user) { if(user!=current_user) { delete current_file; current_file = new NISTCharFile(user,0); current_user = user; } } public: NISTDigitImages() { ; if(!NISTDigitImages_table) init_table(); current_user=0; current_file=new NISTCharFile(0,0); ; } ~NISTDigitImages() { delete current_file; } int length() {return NISTDigitImages_table[table_size-1];} int user(int i) { return locate(i); } CImage image(int i) { int user = locate(i); get_cache(user); int offset = i-NISTDigitImages_table[user]; return current_file->image(offset); } int classification(int i) { int user = locate(i); get_cache(user); int offset = i-NISTDigitImages_table[user]; return current_file->classification(offset); } }; ImageDatabase *make_NISTDigitImages() { return new NISTDigitImages(); }