aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.law/inline2.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.law/inline2.C')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/inline2.C3601
1 files changed, 3601 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.law/inline2.C b/gcc/testsuite/g++.old-deja/g++.law/inline2.C
new file mode 100644
index 00000000000..2eb5b38f7e7
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.law/inline2.C
@@ -0,0 +1,3601 @@
+// excess errors test - XFAIL - *-*-*
+// Build don't link:
+// Special g++ Options: -O2
+// 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 int int ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+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 volatile 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 volatile 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*);
+
+
+
+
+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*);
+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 void _exit( );
+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 volatile _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 volatile void abort() {
+ 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 <class Y>
+struct NameValuePair {
+ char *name;
+ Y y;
+};
+
+template <class Y>
+Y lookup(NameValuePair<Y> *data,char *name) {
+ while(data->name) {
+ if(!strcmp(data->name,name)) return data->y;
+ data++;
+ }
+ abort();
+ return data->y;
+}
+
+template <class T>
+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 <class T>
+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 <class X>
+inline void art_initialize(X *,int) {}
+
+# 39 "Art.h"
+
+
+
+
+
+
+template <class T>
+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]<?other.dims[0];
+ for(int i=0;i<d0;i++) data[i]=other.data[i];
+ }
+public:
+ void copyclear(Art &other) {
+ dims[0]=other.dims[0];
+ data=other.data;
+ other.dims[0]=0;
+ other.data=0;
+ }
+private:
+ void copyconstructor(Art &other) {
+ mark_temp=0;
+ if(other.mark_temp) {
+ copyclear(other);
+ } else {
+ constructor(other.dims[0]);
+ copy(other);
+ }
+ }
+ public:
+ Art() {constructor(0);}
+ Art(int d) {constructor(d);}
+ Art(Art &other) {copyconstructor(other);}
+ ~Art() {destructor();}
+
+ Art &operator=(Art &other) {
+ destructor();
+ copyconstructor(other);
+ return *this;
+ }
+ int dim(int i) {return dims[i];}
+ T &operator()(int i) {
+ if(unsigned(i)>=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<?dims[0];
+ for(int i=0;i<limit;i++) t.data[i]=data[i];
+ t.mark_temp=1;
+ *this=t;
+ }
+ Art &temp() { mark_temp=1; return *this; }
+ T *pointer() {return data;}
+ void fill(T value) {for(int i=0;i<dims[0];i++) data[i]=value;}
+
+ int length() {return dims[0];}
+ T &operator[](int i) {return operator()(i);}
+};
+
+
+
+
+
+
+
+
+template <class T>
+class Stk {
+protected:
+ Art<T> 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(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<T>&() {return stack;}
+
+ int length() {return fill;}
+ T &operator[](int i) {return operator()(i);}
+};
+
+
+
+
+
+template <class T>
+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<d0;i++) data[i]=p+i*d1;
+ art_initialize(data[0],d0*d1);
+ }
+ }
+ void destructor() {
+ if(dims[0]<1) return;
+ if(!data) return;
+ delete [] data[0];
+ delete [] data;
+ mark_temp=0;
+ data=0;
+ dims[0]=0;
+ dims[1]=0;
+ }
+ void copy(Art2 &other) {
+ int d0=dims[0]<?other.dims[0];
+ int d1=dims[1]<?other.dims[1];
+ for(int i=0;i<d0;i++) for(int j=0;j<d1;j++)
+ data[i][j]=other.data[i][j];
+ }
+public:
+ void copyclear(Art2 &other) {
+ dims[0]=other.dims[0];
+ dims[1]=other.dims[1];
+ total_length=dims[0]*dims[1];
+ data=other.data;
+ other.dims[0]=0;
+ other.dims[1]=0;
+ other.total_length=0;
+ other.data=0;
+ }
+private:
+ void copyconstructor(Art2 &other) {
+ mark_temp=0;
+ if(other.mark_temp) {
+ copyclear(other);
+ } else {
+ constructor(other.dims[0],other.dims[1]);
+ copy(other);
+ }
+ }
+ public:
+ Art2() {constructor(0,0);}
+ Art2(int d0,int d1) {constructor(d0,d1);}
+ Art2(Art2 &other) {copyconstructor(other);}
+ ~Art2() {destructor();}
+
+ Art2 &operator=(Art2 &other) {
+ destructor();
+ copyconstructor(other);
+ return *this;
+ }
+ int dim(int i) {return dims[i];}
+ T &operator()(int i,int j) {
+ if(unsigned(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<?dims[0];
+ int limit1=nd1<?dims[1];
+ for(int i=0;i<limit0;i++) for(int j=0;j<limit1;j++) t.data[i][j]=data[i][j];
+ t.mark_temp=1;
+ *this=t;
+ }
+ Art2 &temp() { mark_temp=1; return *this; }
+ T **pointer() {return data;}
+ void fill(T value) {
+ for(int i=0;i<dims[0];i++) for(int j=0;j<dims[1];j++)
+ data[i][j]=value;
+ }
+
+
+
+ int length() {return total_length;}
+ T &sub(int i) {return data[0][i];}
+ T &operator()(int i) {
+ if(unsigned(i)>=total_length) abort() ;
+ return data[0][i];
+ }
+};
+
+template <class T>
+inline void art_swap(T &x,T &y) {
+ T temp = x;
+ x = y;
+ y = temp;
+}
+
+template <class T>
+inline void reverse(Art<T> &a) {
+ int i;
+ for(i=a.length()/2;i>=0;i--) art_swap(a.sub(i),a.sub(a.length()-i-1));
+}
+
+template <class T>
+inline void reverse(Stk<T> &a) {
+ reverse(a.stack);
+}
+
+template <class T>
+inline void bag_remove(Stk<T> &a,T &element) {
+ for(int i=0;i<a.length()-1;i++) {
+ if(a(i)==element) {
+ a.sub(i)=a.tos();
+ a.pop();
+ }
+ }
+ if(i<a.length()&&a.sub(i)==element) a.pop();
+}
+
+template <class T>
+inline void ordered_remove(Stk<T> &a,T &element) {
+ int source=0,dest=0;
+ while(source<a.length()) {
+ if(a(source)!=element) {
+ a(dest)=a(source);
+ dest++;
+ }
+ source++;
+ }
+ a.stack.resize(dest);
+}
+
+template <class T>
+inline Art<T> concatenate(Art<T> &a,Art<T> &b) {
+ int i,k;
+ k=a.length();
+ Art<T> result(k+b.length());
+ for(i=0;i<a.length();i++) result.sub(i)=a.sub(i);
+ for(i=0;i<b.length();i++) result.sub(i+k)=b.sub(i);
+ return result.temp();
+}
+
+template <class T>
+inline Stk<T> concatenate(Stk<T> &a,Stk<T> &b) {
+ int i;
+ Stk<T> result;
+ for(i=0;i<a.length();i++) result.push(a.sub(i));
+ for(i=0;i<b.length();i++) result.push(b.sub(i));
+ return result.temp();
+}
+
+
+# 23 "Vision.h" 2
+
+# 1 "Geo.h" 1
+
+
+
+
+
+# 1 "/sym/gnu/lib/g++-include/math.h" 1 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# 215 "/sym/gnu/lib/g++-include/math.h" 3
+
+# 6 "Geo.h" 2
+
+
+extern "C" {
+void abort();
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <class T,int n>
+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<n;i++) result=result+sub(i)*other.sub(i);
+ return result;
+ }
+
+
+ vec operator-() {
+ vec result;
+ for(int i=0;i<n;i++) result.sub(i)= -sub(i);
+ return result;
+ }
+ vec operator*(T other) {
+ vec result;
+ for(int i=0;i<n;i++) result.sub(i)=sub(i)*other;
+ return result;
+ }
+ vec operator/(T other) {
+ vec result;
+ for(int i=0;i<n;i++) result.sub(i)=sub(i)/other;
+ return result;
+ }
+ vec operator+(vec &other) {
+ vec result;
+ for(int i=0;i<n;i++) result.sub(i)=sub(i)+other.sub(i);
+ return result;
+ }
+ vec operator-(vec &other) {
+ vec result;
+ for(int i=0;i<n;i++) result.sub(i)=sub(i)-other.sub(i);
+ return result;
+ }
+ vec operator<?(vec &other) {
+ vec result;
+ for(int i=0;i<n;i++) result.sub(i)=sub(i)<?other.sub(i);
+ return result;
+ }
+ vec operator>?(vec &other) {
+ vec result;
+ for(int i=0;i<n;i++) result.sub(i)=sub(i)>?other.sub(i);
+ return result;
+ }
+
+
+ int operator==(vec &other) {
+ for(int i=0;i<n;i++) if(sub(i)!=other.sub(i)) return 0;
+ return 1;
+ }
+ int operator!=(vec &other) {
+ for(int i=0;i<n;i++) if(sub(i)!=other.sub(i)) return 1;
+ return 0;
+ }
+ int operator<(vec &other) {
+ for(int i=0;i<n;i++) if(sub(i)>=other.sub(i)) return 0;
+ return 1;
+ }
+ int operator>(vec &other) {
+ for(int i=0;i<n;i++) if(sub(i)<=other.sub(i)) return 0;
+ return 1;
+ }
+ int operator<=(vec &other) {
+ for(int i=0;i<n;i++) if(sub(i)>other.sub(i)) return 0;
+ return 1;
+ }
+ int operator>=(vec &other) {
+ for(int i=0;i<n;i++) if(sub(i)<other.sub(i)) return 0;
+ return 1;
+ }
+};
+
+template <class T>
+inline float euclidean_norm(T &v) {
+ float total=0.0;
+ for(int i=0;i<v.dim(0);i++) total+=v(i)*v(i);
+ return sqrt(total);
+}
+
+template <class T>
+inline float euclidean_distance(T &u,T &v) {
+ float total=0.0;
+ for(int i=0;i<u.dim(0);i++) {
+ float d=u(i)-v(i);
+ total+=d*d;
+ }
+ return sqrt(total);
+}
+
+
+
+
+
+template <class T,int n>
+class mat:vec<T,n*n> {
+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<n;i++) for(int j=0;j<n;j++) {
+ T total=0;
+ for(int k=0;k<n;k++) total=total+sub(i,k)*other.sub(k,j);
+ result.sub(i,j)=total;
+ }
+ return result;
+ }
+ vec<T,n> operator*(vec<T,n> &other) {
+ vec<T,n> result;
+ for(int i=0;i<n;i++) {
+ T total=0;
+ for(int k=0;k<n;k++) total=total+sub(i,k)*other.sub(k);
+ result.sub(i)=total;
+ }
+ return result;
+ }
+};
+
+
+
+
+
+typedef vec<float,2> vec2;
+typedef vec<float,3> vec3;
+typedef vec<float,4> vec4;
+
+typedef mat<float,2> mat2;
+typedef mat<float,3> mat3;
+typedef mat<float,4> mat4;
+
+typedef vec<int,2> 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<float> FImage;
+typedef Art2<int> IImage;
+typedef Art2<unsigned char> 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<PFeature> 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<unsigned char> 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<unsigned char> CImage;
+
+Stk<char*> 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<int> 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() ;
+ for(int i=0;i<mis_files.length();i++) {
+ if(re_exec(mis_files(i))) break;
+ }
+ if(i<mis_files.length()) return mis_files(i);
+ else return 0;
+ }
+
+ static int part_of_user(int user) {
+ int part;
+ if(user<500) part=0;
+ else if(user<1000) part=1;
+ else if(user<1500) part=2;
+ else part=3;
+ return part;
+ }
+
+ static char type_of_itype(int itype) {
+ char type;
+ switch(itype) {
+ case 0: type='d'; break;
+ case 1: type='u'; break;
+ case 2: type='l'; break;
+ default: abort() ;
+ };
+ return type;
+ }
+
+ NISTCharFile(int user,char itype) {
+ maybe_read_mis_files();
+ int type = type_of_itype(itype);
+ int part = part_of_user(user);
+
+ char buf[512];
+ sprintf(buf,"/com/nist3/data/" "hsf_%d/f%04d_.*/%c%04d_.*",part,user,type,user);
+ char *prefix = find_matching_mis_file_prefix(buf);
+ ;
+
+ if(!prefix) {
+ bit_w = 0;
+ bit_h = 0;
+ field_w = 0;
+ field_h = 0;
+ return;
+ }
+
+ char file[512];
+
+ strcpy(file,prefix); strcat(file,".mis");
+ if(!readihdrfile(file,&bit_header,&bit_data,&bit_w,&bit_h))
+ abort() ;
+ field_w=atoi(bit_header->par_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 i) {
+ ;
+ CImage result(field_w,field_h);
+ int bit_w8=bit_w/8;
+ int offset=i*field_h;
+ if(offset>=bit_h) abort() ;
+ int i,j;
+
+
+ for(i=0;i<field_w;i++) for(j=0;j<field_h;j++) {
+ int jj=j+offset;
+ result(i,field_h-j-1)=(!!(bit_data[bit_w8*jj+(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<table_size;i++) NISTDigitImages_table[i]+=NISTDigitImages_table[i-1];
+ }
+
+ static int locate(int v) {
+ int low=0;
+ int high=table_size;
+ if(v>=NISTDigitImages_table[table_size-1]) abort() ;
+ while(low+1<high) {
+ int mid=(low+high)/2;
+ if(NISTDigitImages_table[mid]<=v) low=mid;
+ else high=mid;
+ }
+ while(low<table_size-1&&NISTDigitImages_table[low+1]<=v) low++;
+ return low;
+ }
+
+ int user_offset(int user) {
+ if(unsigned(user)>=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();
+}
+