]> git.wh0rd.org Git - ICEs.git/blob - 209253/ice.ii.0
initial import
[ICEs.git] / 209253 / ice.ii.0
1 // /usr/libexec/gcc/i486-pc-linux-gnu/4.1.2/cc1plus -quiet -I/home/schultz/c/schultz/ -Isrc/ -D_GNU_SOURCE -D ALGO=3 -D INFINITY=1E10 -D EPSILON=1E-4 -D VOXEL_DENSITY=8 -D ENABLE_INFO -D ENABLE_JOKES -D TIMER_PERIOD=0.0166666 -D CIRCLE_DATA="circle.data" -D VIDEO_CONF="video.conf" -D RENDER_STYLE=0 -D RENDER_SIDES=8 -D WALLS src/circle.c++ -quiet -dumpbase circle.c++ -march=pentium-m -auxbase-strip bin/circle.o -g -O2 -W -fomit-frame-pointer -fno-default-inline -finline-functions -o - -frandom-seed=0
2 # 1 "src/circle.c++"
3 # 1 "/home/schultz/c/khaos//"
4 # 1 "<built-in>"
5 # 1 "<command line>"
6 # 1 "src/circle.c++"
7 # 1 "src/circle" 1
8 # 11 "src/circle"
9 # 1 "/home/schultz/c/schultz/schultz" 1
10 # 10 "/home/schultz/c/schultz/schultz"
11 # 1 "/usr/include/stdio.h" 1 3 4
12 # 28 "/usr/include/stdio.h" 3 4
13 # 1 "/usr/include/features.h" 1 3 4
14 # 322 "/usr/include/features.h" 3 4
15 # 1 "/usr/include/sys/cdefs.h" 1 3 4
16 # 324 "/usr/include/sys/cdefs.h" 3 4
17 # 1 "/usr/include/bits/wordsize.h" 1 3 4
18 # 325 "/usr/include/sys/cdefs.h" 2 3 4
19 # 323 "/usr/include/features.h" 2 3 4
20 # 345 "/usr/include/features.h" 3 4
21 # 1 "/usr/include/gnu/stubs.h" 1 3 4
22
23
24
25 # 1 "/usr/include/bits/wordsize.h" 1 3 4
26 # 5 "/usr/include/gnu/stubs.h" 2 3 4
27
28
29 # 1 "/usr/include/gnu/stubs-32.h" 1 3 4
30 # 8 "/usr/include/gnu/stubs.h" 2 3 4
31 # 346 "/usr/include/features.h" 2 3 4
32 # 29 "/usr/include/stdio.h" 2 3 4
33
34 extern "C" {
35
36
37
38 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
39 # 214 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 3 4
40 typedef unsigned int size_t;
41 # 35 "/usr/include/stdio.h" 2 3 4
42
43 # 1 "/usr/include/bits/types.h" 1 3 4
44 # 28 "/usr/include/bits/types.h" 3 4
45 # 1 "/usr/include/bits/wordsize.h" 1 3 4
46 # 29 "/usr/include/bits/types.h" 2 3 4
47
48
49 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
50 # 32 "/usr/include/bits/types.h" 2 3 4
51
52
53 typedef unsigned char __u_char;
54 typedef unsigned short int __u_short;
55 typedef unsigned int __u_int;
56 typedef unsigned long int __u_long;
57
58
59 typedef signed char __int8_t;
60 typedef unsigned char __uint8_t;
61 typedef signed short int __int16_t;
62 typedef unsigned short int __uint16_t;
63 typedef signed int __int32_t;
64 typedef unsigned int __uint32_t;
65
66
67
68
69 __extension__ typedef signed long long int __int64_t;
70 __extension__ typedef unsigned long long int __uint64_t;
71
72
73
74
75
76
77
78 __extension__ typedef long long int __quad_t;
79 __extension__ typedef unsigned long long int __u_quad_t;
80 # 134 "/usr/include/bits/types.h" 3 4
81 # 1 "/usr/include/bits/typesizes.h" 1 3 4
82 # 135 "/usr/include/bits/types.h" 2 3 4
83
84
85 __extension__ typedef __u_quad_t __dev_t;
86 __extension__ typedef unsigned int __uid_t;
87 __extension__ typedef unsigned int __gid_t;
88 __extension__ typedef unsigned long int __ino_t;
89 __extension__ typedef __u_quad_t __ino64_t;
90 __extension__ typedef unsigned int __mode_t;
91 __extension__ typedef unsigned int __nlink_t;
92 __extension__ typedef long int __off_t;
93 __extension__ typedef __quad_t __off64_t;
94 __extension__ typedef int __pid_t;
95 __extension__ typedef struct { int __val[2]; } __fsid_t;
96 __extension__ typedef long int __clock_t;
97 __extension__ typedef unsigned long int __rlim_t;
98 __extension__ typedef __u_quad_t __rlim64_t;
99 __extension__ typedef unsigned int __id_t;
100 __extension__ typedef long int __time_t;
101 __extension__ typedef unsigned int __useconds_t;
102 __extension__ typedef long int __suseconds_t;
103
104 __extension__ typedef int __daddr_t;
105 __extension__ typedef long int __swblk_t;
106 __extension__ typedef int __key_t;
107
108
109 __extension__ typedef int __clockid_t;
110
111
112 __extension__ typedef void * __timer_t;
113
114
115 __extension__ typedef long int __blksize_t;
116
117
118
119
120 __extension__ typedef long int __blkcnt_t;
121 __extension__ typedef __quad_t __blkcnt64_t;
122
123
124 __extension__ typedef unsigned long int __fsblkcnt_t;
125 __extension__ typedef __u_quad_t __fsblkcnt64_t;
126
127
128 __extension__ typedef unsigned long int __fsfilcnt_t;
129 __extension__ typedef __u_quad_t __fsfilcnt64_t;
130
131 __extension__ typedef int __ssize_t;
132
133
134
135 typedef __off64_t __loff_t;
136 typedef __quad_t *__qaddr_t;
137 typedef char *__caddr_t;
138
139
140 __extension__ typedef int __intptr_t;
141
142
143 __extension__ typedef unsigned int __socklen_t;
144 # 37 "/usr/include/stdio.h" 2 3 4
145 # 45 "/usr/include/stdio.h" 3 4
146 struct _IO_FILE;
147
148
149
150 typedef struct _IO_FILE FILE;
151
152
153
154
155
156 # 65 "/usr/include/stdio.h" 3 4
157 typedef struct _IO_FILE __FILE;
158 # 75 "/usr/include/stdio.h" 3 4
159 # 1 "/usr/include/libio.h" 1 3 4
160 # 32 "/usr/include/libio.h" 3 4
161 # 1 "/usr/include/_G_config.h" 1 3 4
162 # 14 "/usr/include/_G_config.h" 3 4
163 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
164 # 355 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 3 4
165 typedef unsigned int wint_t;
166 # 15 "/usr/include/_G_config.h" 2 3 4
167 # 24 "/usr/include/_G_config.h" 3 4
168 # 1 "/usr/include/wchar.h" 1 3 4
169 # 48 "/usr/include/wchar.h" 3 4
170 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
171 # 49 "/usr/include/wchar.h" 2 3 4
172
173 # 1 "/usr/include/bits/wchar.h" 1 3 4
174 # 51 "/usr/include/wchar.h" 2 3 4
175 # 76 "/usr/include/wchar.h" 3 4
176 typedef struct
177 {
178   int __count;
179   union
180   {
181     wint_t __wch;
182     char __wchb[4];
183   } __value;
184 } __mbstate_t;
185 # 25 "/usr/include/_G_config.h" 2 3 4
186
187 typedef struct
188 {
189   __off_t __pos;
190   __mbstate_t __state;
191 } _G_fpos_t;
192 typedef struct
193 {
194   __off64_t __pos;
195   __mbstate_t __state;
196 } _G_fpos64_t;
197 # 44 "/usr/include/_G_config.h" 3 4
198 # 1 "/usr/include/gconv.h" 1 3 4
199 # 28 "/usr/include/gconv.h" 3 4
200 # 1 "/usr/include/wchar.h" 1 3 4
201 # 48 "/usr/include/wchar.h" 3 4
202 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
203 # 49 "/usr/include/wchar.h" 2 3 4
204 # 29 "/usr/include/gconv.h" 2 3 4
205
206
207 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
208 # 32 "/usr/include/gconv.h" 2 3 4
209
210
211
212
213
214 enum
215 {
216   __GCONV_OK = 0,
217   __GCONV_NOCONV,
218   __GCONV_NODB,
219   __GCONV_NOMEM,
220
221   __GCONV_EMPTY_INPUT,
222   __GCONV_FULL_OUTPUT,
223   __GCONV_ILLEGAL_INPUT,
224   __GCONV_INCOMPLETE_INPUT,
225
226   __GCONV_ILLEGAL_DESCRIPTOR,
227   __GCONV_INTERNAL_ERROR
228 };
229
230
231
232 enum
233 {
234   __GCONV_IS_LAST = 0x0001,
235   __GCONV_IGNORE_ERRORS = 0x0002
236 };
237
238
239
240 struct __gconv_step;
241 struct __gconv_step_data;
242 struct __gconv_loaded_object;
243 struct __gconv_trans_data;
244
245
246
247 typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
248        __const unsigned char **, __const unsigned char *,
249        unsigned char **, size_t *, int, int);
250
251
252 typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
253
254
255 typedef int (*__gconv_init_fct) (struct __gconv_step *);
256 typedef void (*__gconv_end_fct) (struct __gconv_step *);
257
258
259
260 typedef int (*__gconv_trans_fct) (struct __gconv_step *,
261       struct __gconv_step_data *, void *,
262       __const unsigned char *,
263       __const unsigned char **,
264       __const unsigned char *, unsigned char **,
265       size_t *);
266
267
268 typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
269        __const unsigned char *,
270        unsigned char *, unsigned char *);
271
272
273 typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
274      size_t *);
275
276
277 typedef int (*__gconv_trans_init_fct) (void **, const char *);
278 typedef void (*__gconv_trans_end_fct) (void *);
279
280 struct __gconv_trans_data
281 {
282
283   __gconv_trans_fct __trans_fct;
284   __gconv_trans_context_fct __trans_context_fct;
285   __gconv_trans_end_fct __trans_end_fct;
286   void *__data;
287   struct __gconv_trans_data *__next;
288 };
289
290
291
292 struct __gconv_step
293 {
294   struct __gconv_loaded_object *__shlib_handle;
295   __const char *__modname;
296
297   int __counter;
298
299   char *__from_name;
300   char *__to_name;
301
302   __gconv_fct __fct;
303   __gconv_btowc_fct __btowc_fct;
304   __gconv_init_fct __init_fct;
305   __gconv_end_fct __end_fct;
306
307
308
309   int __min_needed_from;
310   int __max_needed_from;
311   int __min_needed_to;
312   int __max_needed_to;
313
314
315   int __stateful;
316
317   void *__data;
318 };
319
320
321
322 struct __gconv_step_data
323 {
324   unsigned char *__outbuf;
325   unsigned char *__outbufend;
326
327
328
329   int __flags;
330
331
332
333   int __invocation_counter;
334
335
336
337   int __internal_use;
338
339   __mbstate_t *__statep;
340   __mbstate_t __state;
341
342
343
344   struct __gconv_trans_data *__trans;
345 };
346
347
348
349 typedef struct __gconv_info
350 {
351   size_t __nsteps;
352   struct __gconv_step *__steps;
353   __extension__ struct __gconv_step_data __data [];
354 } *__gconv_t;
355 # 45 "/usr/include/_G_config.h" 2 3 4
356 typedef union
357 {
358   struct __gconv_info __cd;
359   struct
360   {
361     struct __gconv_info __cd;
362     struct __gconv_step_data __data;
363   } __combined;
364 } _G_iconv_t;
365
366 typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
367 typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
368 typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
369 typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
370 # 33 "/usr/include/libio.h" 2 3 4
371 # 53 "/usr/include/libio.h" 3 4
372 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stdarg.h" 1 3 4
373 # 43 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stdarg.h" 3 4
374 typedef __builtin_va_list __gnuc_va_list;
375 # 54 "/usr/include/libio.h" 2 3 4
376 # 167 "/usr/include/libio.h" 3 4
377 struct _IO_jump_t; struct _IO_FILE;
378 # 177 "/usr/include/libio.h" 3 4
379 typedef void _IO_lock_t;
380
381
382
383
384
385 struct _IO_marker {
386   struct _IO_marker *_next;
387   struct _IO_FILE *_sbuf;
388
389
390
391   int _pos;
392 # 200 "/usr/include/libio.h" 3 4
393 };
394
395
396 enum __codecvt_result
397 {
398   __codecvt_ok,
399   __codecvt_partial,
400   __codecvt_error,
401   __codecvt_noconv
402 };
403 # 268 "/usr/include/libio.h" 3 4
404 struct _IO_FILE {
405   int _flags;
406
407
408
409
410   char* _IO_read_ptr;
411   char* _IO_read_end;
412   char* _IO_read_base;
413   char* _IO_write_base;
414   char* _IO_write_ptr;
415   char* _IO_write_end;
416   char* _IO_buf_base;
417   char* _IO_buf_end;
418
419   char *_IO_save_base;
420   char *_IO_backup_base;
421   char *_IO_save_end;
422
423   struct _IO_marker *_markers;
424
425   struct _IO_FILE *_chain;
426
427   int _fileno;
428
429
430
431   int _flags2;
432
433   __off_t _old_offset;
434
435
436
437   unsigned short _cur_column;
438   signed char _vtable_offset;
439   char _shortbuf[1];
440
441
442
443   _IO_lock_t *_lock;
444 # 316 "/usr/include/libio.h" 3 4
445   __off64_t _offset;
446 # 325 "/usr/include/libio.h" 3 4
447   void *__pad1;
448   void *__pad2;
449   void *__pad3;
450   void *__pad4;
451   size_t __pad5;
452
453   int _mode;
454
455   char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
456
457 };
458
459
460
461
462
463 struct _IO_FILE_plus;
464
465 extern struct _IO_FILE_plus _IO_2_1_stdin_;
466 extern struct _IO_FILE_plus _IO_2_1_stdout_;
467 extern struct _IO_FILE_plus _IO_2_1_stderr_;
468 # 361 "/usr/include/libio.h" 3 4
469 typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
470
471
472
473
474
475
476
477 typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
478      size_t __n);
479
480
481
482
483
484
485
486 typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
487
488
489 typedef int __io_close_fn (void *__cookie);
490
491
492
493
494 typedef __io_read_fn cookie_read_function_t;
495 typedef __io_write_fn cookie_write_function_t;
496 typedef __io_seek_fn cookie_seek_function_t;
497 typedef __io_close_fn cookie_close_function_t;
498
499
500 typedef struct
501 {
502   __io_read_fn *read;
503   __io_write_fn *write;
504   __io_seek_fn *seek;
505   __io_close_fn *close;
506 } _IO_cookie_io_functions_t;
507 typedef _IO_cookie_io_functions_t cookie_io_functions_t;
508
509 struct _IO_cookie_file;
510
511
512 extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
513         void *__cookie, _IO_cookie_io_functions_t __fns);
514
515
516
517
518 extern "C" {
519
520
521 extern int __underflow (_IO_FILE *);
522 extern int __uflow (_IO_FILE *);
523 extern int __overflow (_IO_FILE *, int);
524 extern wint_t __wunderflow (_IO_FILE *);
525 extern wint_t __wuflow (_IO_FILE *);
526 extern wint_t __woverflow (_IO_FILE *, wint_t);
527 # 451 "/usr/include/libio.h" 3 4
528 extern int _IO_getc (_IO_FILE *__fp);
529 extern int _IO_putc (int __c, _IO_FILE *__fp);
530 extern int _IO_feof (_IO_FILE *__fp) throw ();
531 extern int _IO_ferror (_IO_FILE *__fp) throw ();
532
533 extern int _IO_peekc_locked (_IO_FILE *__fp);
534
535
536
537
538
539 extern void _IO_flockfile (_IO_FILE *) throw ();
540 extern void _IO_funlockfile (_IO_FILE *) throw ();
541 extern int _IO_ftrylockfile (_IO_FILE *) throw ();
542 # 481 "/usr/include/libio.h" 3 4
543 extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
544    __gnuc_va_list, int *__restrict);
545 extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
546     __gnuc_va_list);
547 extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
548 extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
549
550 extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
551 extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
552
553 extern void _IO_free_backup_area (_IO_FILE *) throw ();
554 # 543 "/usr/include/libio.h" 3 4
555 }
556 # 76 "/usr/include/stdio.h" 2 3 4
557
558
559
560
561 typedef __gnuc_va_list va_list;
562 # 89 "/usr/include/stdio.h" 3 4
563
564
565 typedef _G_fpos_t fpos_t;
566
567
568
569
570
571 typedef _G_fpos64_t fpos64_t;
572 # 141 "/usr/include/stdio.h" 3 4
573 # 1 "/usr/include/bits/stdio_lim.h" 1 3 4
574 # 142 "/usr/include/stdio.h" 2 3 4
575
576
577
578 extern struct _IO_FILE *stdin;
579 extern struct _IO_FILE *stdout;
580 extern struct _IO_FILE *stderr;
581
582
583
584
585
586
587
588 extern int remove (__const char *__filename) throw ();
589
590 extern int rename (__const char *__old, __const char *__new) throw ();
591
592
593
594
595 extern int renameat (int __oldfd, __const char *__old, int __newfd,
596        __const char *__new) throw ();
597
598
599
600
601
602
603
604
605 extern FILE *tmpfile (void) ;
606 # 182 "/usr/include/stdio.h" 3 4
607 extern FILE *tmpfile64 (void) ;
608
609
610
611 extern char *tmpnam (char *__s) throw () ;
612
613
614
615
616
617 extern char *tmpnam_r (char *__s) throw () ;
618 # 204 "/usr/include/stdio.h" 3 4
619 extern char *tempnam (__const char *__dir, __const char *__pfx)
620      throw () __attribute__ ((__malloc__)) ;
621
622
623
624
625
626
627
628
629 extern int fclose (FILE *__stream);
630
631
632
633
634 extern int fflush (FILE *__stream);
635
636 # 229 "/usr/include/stdio.h" 3 4
637 extern int fflush_unlocked (FILE *__stream);
638 # 239 "/usr/include/stdio.h" 3 4
639 extern int fcloseall (void);
640
641
642
643
644
645
646
647
648
649 extern FILE *fopen (__const char *__restrict __filename,
650       __const char *__restrict __modes) ;
651
652
653
654
655 extern FILE *freopen (__const char *__restrict __filename,
656         __const char *__restrict __modes,
657         FILE *__restrict __stream) ;
658 # 272 "/usr/include/stdio.h" 3 4
659
660
661 extern FILE *fopen64 (__const char *__restrict __filename,
662         __const char *__restrict __modes) ;
663 extern FILE *freopen64 (__const char *__restrict __filename,
664    __const char *__restrict __modes,
665    FILE *__restrict __stream) ;
666
667
668
669
670 extern FILE *fdopen (int __fd, __const char *__modes) throw () ;
671
672
673
674
675
676 extern FILE *fopencookie (void *__restrict __magic_cookie,
677      __const char *__restrict __modes,
678      _IO_cookie_io_functions_t __io_funcs) throw () ;
679
680
681 extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
682   throw () ;
683
684
685
686
687 extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () ;
688
689
690
691
692
693
694 extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
695
696
697
698 extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
699       int __modes, size_t __n) throw ();
700
701
702
703
704
705 extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
706          size_t __size) throw ();
707
708
709 extern void setlinebuf (FILE *__stream) throw ();
710
711
712
713
714
715
716
717
718 extern int fprintf (FILE *__restrict __stream,
719       __const char *__restrict __format, ...);
720
721
722
723
724 extern int printf (__const char *__restrict __format, ...);
725
726 extern int sprintf (char *__restrict __s,
727       __const char *__restrict __format, ...) throw ();
728
729
730
731
732
733 extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
734        __gnuc_va_list __arg);
735
736
737
738
739 extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);
740
741 extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
742        __gnuc_va_list __arg) throw ();
743
744
745
746
747
748 extern int snprintf (char *__restrict __s, size_t __maxlen,
749        __const char *__restrict __format, ...)
750      throw () __attribute__ ((__format__ (__printf__, 3, 4)));
751
752 extern int vsnprintf (char *__restrict __s, size_t __maxlen,
753         __const char *__restrict __format, __gnuc_va_list __arg)
754      throw () __attribute__ ((__format__ (__printf__, 3, 0)));
755
756
757
758
759
760
761 extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
762         __gnuc_va_list __arg)
763      throw () __attribute__ ((__format__ (__printf__, 2, 0))) ;
764 extern int __asprintf (char **__restrict __ptr,
765          __const char *__restrict __fmt, ...)
766      throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
767 extern int asprintf (char **__restrict __ptr,
768        __const char *__restrict __fmt, ...)
769      throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
770
771
772
773
774
775
776
777 extern int vdprintf (int __fd, __const char *__restrict __fmt,
778        __gnuc_va_list __arg)
779      __attribute__ ((__format__ (__printf__, 2, 0)));
780 extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
781      __attribute__ ((__format__ (__printf__, 2, 3)));
782
783
784
785
786
787
788
789
790 extern int fscanf (FILE *__restrict __stream,
791      __const char *__restrict __format, ...) ;
792
793
794
795
796 extern int scanf (__const char *__restrict __format, ...) ;
797
798 extern int sscanf (__const char *__restrict __s,
799      __const char *__restrict __format, ...) throw ();
800
801
802
803
804
805
806
807
808 extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
809       __gnuc_va_list __arg)
810      __attribute__ ((__format__ (__scanf__, 2, 0))) ;
811
812
813
814
815
816 extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
817      __attribute__ ((__format__ (__scanf__, 1, 0))) ;
818
819
820 extern int vsscanf (__const char *__restrict __s,
821       __const char *__restrict __format, __gnuc_va_list __arg)
822      throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
823
824
825
826
827
828
829
830
831
832 extern int fgetc (FILE *__stream);
833 extern int getc (FILE *__stream);
834
835
836
837
838
839 extern int getchar (void);
840
841 # 464 "/usr/include/stdio.h" 3 4
842 extern int getc_unlocked (FILE *__stream);
843 extern int getchar_unlocked (void);
844 # 475 "/usr/include/stdio.h" 3 4
845 extern int fgetc_unlocked (FILE *__stream);
846
847
848
849
850
851
852
853
854
855
856
857 extern int fputc (int __c, FILE *__stream);
858 extern int putc (int __c, FILE *__stream);
859
860
861
862
863
864 extern int putchar (int __c);
865
866 # 508 "/usr/include/stdio.h" 3 4
867 extern int fputc_unlocked (int __c, FILE *__stream);
868
869
870
871
872
873
874
875 extern int putc_unlocked (int __c, FILE *__stream);
876 extern int putchar_unlocked (int __c);
877
878
879
880
881
882
883 extern int getw (FILE *__stream);
884
885
886 extern int putw (int __w, FILE *__stream);
887
888
889
890
891
892
893
894
895 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
896      ;
897
898
899
900
901
902
903 extern char *gets (char *__s) ;
904
905 # 554 "/usr/include/stdio.h" 3 4
906 extern char *fgets_unlocked (char *__restrict __s, int __n,
907         FILE *__restrict __stream) ;
908 # 570 "/usr/include/stdio.h" 3 4
909 extern __ssize_t __getdelim (char **__restrict __lineptr,
910           size_t *__restrict __n, int __delimiter,
911           FILE *__restrict __stream) ;
912 extern __ssize_t getdelim (char **__restrict __lineptr,
913         size_t *__restrict __n, int __delimiter,
914         FILE *__restrict __stream) ;
915
916
917
918
919
920
921
922 extern __ssize_t getline (char **__restrict __lineptr,
923        size_t *__restrict __n,
924        FILE *__restrict __stream) ;
925
926
927
928
929
930
931
932
933 extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
934
935
936
937
938
939 extern int puts (__const char *__s);
940
941
942
943
944
945
946 extern int ungetc (int __c, FILE *__stream);
947
948
949
950
951
952
953 extern size_t fread (void *__restrict __ptr, size_t __size,
954        size_t __n, FILE *__restrict __stream) ;
955
956
957
958
959 extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
960         size_t __n, FILE *__restrict __s) ;
961
962 # 631 "/usr/include/stdio.h" 3 4
963 extern int fputs_unlocked (__const char *__restrict __s,
964       FILE *__restrict __stream);
965 # 642 "/usr/include/stdio.h" 3 4
966 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
967          size_t __n, FILE *__restrict __stream) ;
968 extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
969           size_t __n, FILE *__restrict __stream) ;
970
971
972
973
974
975
976
977
978 extern int fseek (FILE *__stream, long int __off, int __whence);
979
980
981
982
983 extern long int ftell (FILE *__stream) ;
984
985
986
987
988 extern void rewind (FILE *__stream);
989
990 # 678 "/usr/include/stdio.h" 3 4
991 extern int fseeko (FILE *__stream, __off_t __off, int __whence);
992
993
994
995
996 extern __off_t ftello (FILE *__stream) ;
997 # 697 "/usr/include/stdio.h" 3 4
998
999
1000
1001
1002
1003
1004 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
1005
1006
1007
1008
1009 extern int fsetpos (FILE *__stream, __const fpos_t *__pos);
1010 # 720 "/usr/include/stdio.h" 3 4
1011
1012
1013
1014 extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
1015 extern __off64_t ftello64 (FILE *__stream) ;
1016 extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
1017 extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);
1018
1019
1020
1021
1022 extern void clearerr (FILE *__stream) throw ();
1023
1024 extern int feof (FILE *__stream) throw () ;
1025
1026 extern int ferror (FILE *__stream) throw () ;
1027
1028
1029
1030
1031 extern void clearerr_unlocked (FILE *__stream) throw ();
1032 extern int feof_unlocked (FILE *__stream) throw () ;
1033 extern int ferror_unlocked (FILE *__stream) throw () ;
1034
1035
1036
1037
1038
1039
1040
1041
1042 extern void perror (__const char *__s);
1043
1044
1045
1046
1047
1048
1049 # 1 "/usr/include/bits/sys_errlist.h" 1 3 4
1050 # 27 "/usr/include/bits/sys_errlist.h" 3 4
1051 extern int sys_nerr;
1052 extern __const char *__const sys_errlist[];
1053
1054
1055 extern int _sys_nerr;
1056 extern __const char *__const _sys_errlist[];
1057 # 759 "/usr/include/stdio.h" 2 3 4
1058
1059
1060
1061
1062 extern int fileno (FILE *__stream) throw () ;
1063
1064
1065
1066
1067 extern int fileno_unlocked (FILE *__stream) throw () ;
1068 # 778 "/usr/include/stdio.h" 3 4
1069 extern FILE *popen (__const char *__command, __const char *__modes) ;
1070
1071
1072
1073
1074
1075 extern int pclose (FILE *__stream);
1076
1077
1078
1079
1080
1081 extern char *ctermid (char *__s) throw ();
1082
1083
1084
1085
1086
1087 extern char *cuserid (char *__s);
1088
1089
1090
1091
1092 struct obstack;
1093
1094
1095 extern int obstack_printf (struct obstack *__restrict __obstack,
1096       __const char *__restrict __format, ...)
1097      throw () __attribute__ ((__format__ (__printf__, 2, 3)));
1098 extern int obstack_vprintf (struct obstack *__restrict __obstack,
1099        __const char *__restrict __format,
1100        __gnuc_va_list __args)
1101      throw () __attribute__ ((__format__ (__printf__, 2, 0)));
1102
1103
1104
1105
1106
1107
1108
1109 extern void flockfile (FILE *__stream) throw ();
1110
1111
1112
1113 extern int ftrylockfile (FILE *__stream) throw () ;
1114
1115
1116 extern void funlockfile (FILE *__stream) throw ();
1117 # 839 "/usr/include/stdio.h" 3 4
1118 # 1 "/usr/include/bits/stdio.h" 1 3 4
1119 # 33 "/usr/include/bits/stdio.h" 3 4
1120 inline int
1121 vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
1122 {
1123   return vfprintf (stdout, __fmt, __arg);
1124 }
1125
1126
1127 inline int
1128 getchar (void)
1129 {
1130   return _IO_getc (stdin);
1131 }
1132
1133
1134
1135
1136 inline int
1137 fgetc_unlocked (FILE *__fp)
1138 {
1139   return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
1140 }
1141
1142
1143
1144
1145
1146 inline int
1147 getc_unlocked (FILE *__fp)
1148 {
1149   return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
1150 }
1151
1152
1153 inline int
1154 getchar_unlocked (void)
1155 {
1156   return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
1157 }
1158
1159
1160
1161
1162 inline int
1163 putchar (int __c)
1164 {
1165   return _IO_putc (__c, stdout);
1166 }
1167
1168
1169
1170
1171 inline int
1172 fputc_unlocked (int __c, FILE *__stream)
1173 {
1174   return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
1175 }
1176
1177
1178
1179
1180
1181 inline int
1182 putc_unlocked (int __c, FILE *__stream)
1183 {
1184   return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
1185 }
1186
1187
1188 inline int
1189 putchar_unlocked (int __c)
1190 {
1191   return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
1192 }
1193
1194
1195
1196
1197
1198 inline __ssize_t
1199 getline (char **__lineptr, size_t *__n, FILE *__stream)
1200 {
1201   return __getdelim (__lineptr, __n, '\n', __stream);
1202 }
1203
1204
1205
1206
1207
1208 inline int
1209 feof_unlocked (FILE *__stream) throw ()
1210 {
1211   return (((__stream)->_flags & 0x10) != 0);
1212 }
1213
1214
1215 inline int
1216 ferror_unlocked (FILE *__stream) throw ()
1217 {
1218   return (((__stream)->_flags & 0x20) != 0);
1219 }
1220 # 840 "/usr/include/stdio.h" 2 3 4
1221 # 848 "/usr/include/stdio.h" 3 4
1222 }
1223 # 11 "/home/schultz/c/schultz/schultz" 2
1224 # 1 "/usr/include/memory.h" 1 3 4
1225 # 30 "/usr/include/memory.h" 3 4
1226 # 1 "/usr/include/string.h" 1 3 4
1227 # 28 "/usr/include/string.h" 3 4
1228 extern "C" {
1229
1230
1231
1232
1233 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
1234 # 34 "/usr/include/string.h" 2 3 4
1235
1236
1237
1238
1239 extern void *memcpy (void *__restrict __dest,
1240        __const void *__restrict __src, size_t __n)
1241      throw () __attribute__ ((__nonnull__ (1, 2)));
1242
1243
1244 extern void *memmove (void *__dest, __const void *__src, size_t __n)
1245      throw () __attribute__ ((__nonnull__ (1, 2)));
1246
1247
1248
1249
1250
1251
1252 extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
1253         int __c, size_t __n)
1254      throw () __attribute__ ((__nonnull__ (1, 2)));
1255
1256
1257
1258
1259
1260 extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
1261
1262
1263 extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
1264      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1265
1266
1267 extern void *memchr (__const void *__s, int __c, size_t __n)
1268       throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1269
1270
1271
1272
1273
1274 extern void *rawmemchr (__const void *__s, int __c)
1275      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1276
1277
1278 extern void *memrchr (__const void *__s, int __c, size_t __n)
1279       throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1280
1281
1282
1283
1284
1285 extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
1286      throw () __attribute__ ((__nonnull__ (1, 2)));
1287
1288 extern char *strncpy (char *__restrict __dest,
1289         __const char *__restrict __src, size_t __n)
1290      throw () __attribute__ ((__nonnull__ (1, 2)));
1291
1292
1293 extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
1294      throw () __attribute__ ((__nonnull__ (1, 2)));
1295
1296 extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
1297         size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
1298
1299
1300 extern int strcmp (__const char *__s1, __const char *__s2)
1301      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1302
1303 extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
1304      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1305
1306
1307 extern int strcoll (__const char *__s1, __const char *__s2)
1308      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1309
1310 extern size_t strxfrm (char *__restrict __dest,
1311          __const char *__restrict __src, size_t __n)
1312      throw () __attribute__ ((__nonnull__ (2)));
1313
1314
1315
1316
1317
1318
1319 # 1 "/usr/include/xlocale.h" 1 3 4
1320 # 28 "/usr/include/xlocale.h" 3 4
1321 typedef struct __locale_struct
1322 {
1323
1324   struct locale_data *__locales[13];
1325
1326
1327   const unsigned short int *__ctype_b;
1328   const int *__ctype_tolower;
1329   const int *__ctype_toupper;
1330
1331
1332   const char *__names[13];
1333 } *__locale_t;
1334 # 119 "/usr/include/string.h" 2 3 4
1335
1336
1337 extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
1338      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
1339
1340 extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
1341     __locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4)));
1342
1343
1344
1345
1346 extern char *strdup (__const char *__s)
1347      throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
1348
1349
1350
1351
1352
1353
1354 extern char *strndup (__const char *__string, size_t __n)
1355      throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
1356 # 165 "/usr/include/string.h" 3 4
1357
1358
1359 extern char *strchr (__const char *__s, int __c)
1360      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1361
1362 extern char *strrchr (__const char *__s, int __c)
1363      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1364
1365
1366
1367
1368
1369 extern char *strchrnul (__const char *__s, int __c)
1370      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1371
1372
1373
1374
1375
1376 extern size_t strcspn (__const char *__s, __const char *__reject)
1377      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1378
1379
1380 extern size_t strspn (__const char *__s, __const char *__accept)
1381      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1382
1383 extern char *strpbrk (__const char *__s, __const char *__accept)
1384      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1385
1386 extern char *strstr (__const char *__haystack, __const char *__needle)
1387      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1388
1389
1390
1391 extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
1392      throw () __attribute__ ((__nonnull__ (2)));
1393
1394
1395
1396
1397 extern char *__strtok_r (char *__restrict __s,
1398     __const char *__restrict __delim,
1399     char **__restrict __save_ptr)
1400      throw () __attribute__ ((__nonnull__ (2, 3)));
1401
1402 extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
1403          char **__restrict __save_ptr)
1404      throw () __attribute__ ((__nonnull__ (2, 3)));
1405
1406
1407
1408
1409 extern char *strcasestr (__const char *__haystack, __const char *__needle)
1410      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1411
1412
1413
1414
1415
1416
1417 extern void *memmem (__const void *__haystack, size_t __haystacklen,
1418        __const void *__needle, size_t __needlelen)
1419      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
1420
1421
1422
1423 extern void *__mempcpy (void *__restrict __dest,
1424    __const void *__restrict __src, size_t __n)
1425      throw () __attribute__ ((__nonnull__ (1, 2)));
1426 extern void *mempcpy (void *__restrict __dest,
1427         __const void *__restrict __src, size_t __n)
1428      throw () __attribute__ ((__nonnull__ (1, 2)));
1429
1430
1431
1432
1433
1434 extern size_t strlen (__const char *__s)
1435      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1436
1437
1438
1439
1440
1441 extern size_t strnlen (__const char *__string, size_t __maxlen)
1442      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1443
1444
1445
1446
1447
1448 extern char *strerror (int __errnum) throw ();
1449
1450 # 281 "/usr/include/string.h" 3 4
1451 extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
1452      throw () __attribute__ ((__nonnull__ (2)));
1453
1454
1455
1456
1457
1458 extern char *strerror_l (int __errnum, __locale_t __l) throw ();
1459
1460
1461
1462
1463
1464 extern void __bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
1465
1466
1467
1468 extern void bcopy (__const void *__src, void *__dest, size_t __n)
1469      throw () __attribute__ ((__nonnull__ (1, 2)));
1470
1471
1472 extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
1473
1474
1475 extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
1476      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1477
1478
1479 extern char *index (__const char *__s, int __c)
1480      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1481
1482
1483 extern char *rindex (__const char *__s, int __c)
1484      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1485
1486
1487
1488 extern int ffs (int __i) throw () __attribute__ ((__const__));
1489
1490
1491
1492
1493 extern int ffsl (long int __l) throw () __attribute__ ((__const__));
1494
1495 __extension__ extern int ffsll (long long int __ll)
1496      throw () __attribute__ ((__const__));
1497
1498
1499
1500
1501 extern int strcasecmp (__const char *__s1, __const char *__s2)
1502      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1503
1504
1505 extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
1506      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1507
1508
1509
1510
1511
1512 extern int strcasecmp_l (__const char *__s1, __const char *__s2,
1513     __locale_t __loc)
1514      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
1515
1516 extern int strncasecmp_l (__const char *__s1, __const char *__s2,
1517      size_t __n, __locale_t __loc)
1518      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
1519
1520
1521
1522
1523
1524 extern char *strsep (char **__restrict __stringp,
1525        __const char *__restrict __delim)
1526      throw () __attribute__ ((__nonnull__ (1, 2)));
1527
1528
1529
1530
1531 extern int strverscmp (__const char *__s1, __const char *__s2)
1532      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1533
1534
1535 extern char *strsignal (int __sig) throw ();
1536
1537
1538 extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
1539      throw () __attribute__ ((__nonnull__ (1, 2)));
1540 extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
1541      throw () __attribute__ ((__nonnull__ (1, 2)));
1542
1543
1544
1545 extern char *__stpncpy (char *__restrict __dest,
1546    __const char *__restrict __src, size_t __n)
1547      throw () __attribute__ ((__nonnull__ (1, 2)));
1548 extern char *stpncpy (char *__restrict __dest,
1549         __const char *__restrict __src, size_t __n)
1550      throw () __attribute__ ((__nonnull__ (1, 2)));
1551
1552
1553 extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1)));
1554
1555
1556 extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
1557
1558
1559
1560
1561
1562
1563 extern char *basename (__const char *__filename) throw () __attribute__ ((__nonnull__ (1)));
1564 # 432 "/usr/include/string.h" 3 4
1565 }
1566 # 31 "/usr/include/memory.h" 2 3 4
1567 # 12 "/home/schultz/c/schultz/schultz" 2
1568 # 1 "/usr/include/stdlib.h" 1 3 4
1569 # 33 "/usr/include/stdlib.h" 3 4
1570 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
1571 # 34 "/usr/include/stdlib.h" 2 3 4
1572
1573 extern "C" {
1574
1575
1576
1577
1578
1579
1580 # 1 "/usr/include/bits/waitflags.h" 1 3 4
1581 # 43 "/usr/include/stdlib.h" 2 3 4
1582 # 1 "/usr/include/bits/waitstatus.h" 1 3 4
1583 # 65 "/usr/include/bits/waitstatus.h" 3 4
1584 # 1 "/usr/include/endian.h" 1 3 4
1585 # 37 "/usr/include/endian.h" 3 4
1586 # 1 "/usr/include/bits/endian.h" 1 3 4
1587 # 38 "/usr/include/endian.h" 2 3 4
1588 # 66 "/usr/include/bits/waitstatus.h" 2 3 4
1589
1590 union wait
1591   {
1592     int w_status;
1593     struct
1594       {
1595
1596  unsigned int __w_termsig:7;
1597  unsigned int __w_coredump:1;
1598  unsigned int __w_retcode:8;
1599  unsigned int:16;
1600
1601
1602
1603
1604
1605
1606
1607       } __wait_terminated;
1608     struct
1609       {
1610
1611  unsigned int __w_stopval:8;
1612  unsigned int __w_stopsig:8;
1613  unsigned int:16;
1614
1615
1616
1617
1618
1619
1620       } __wait_stopped;
1621   };
1622 # 44 "/usr/include/stdlib.h" 2 3 4
1623 # 96 "/usr/include/stdlib.h" 3 4
1624
1625
1626 typedef struct
1627   {
1628     int quot;
1629     int rem;
1630   } div_t;
1631
1632
1633
1634 typedef struct
1635   {
1636     long int quot;
1637     long int rem;
1638   } ldiv_t;
1639
1640
1641
1642
1643
1644
1645
1646 __extension__ typedef struct
1647   {
1648     long long int quot;
1649     long long int rem;
1650   } lldiv_t;
1651
1652
1653 # 140 "/usr/include/stdlib.h" 3 4
1654 extern size_t __ctype_get_mb_cur_max (void) throw () ;
1655
1656
1657
1658
1659 extern double atof (__const char *__nptr)
1660      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
1661
1662 extern int atoi (__const char *__nptr)
1663      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
1664
1665 extern long int atol (__const char *__nptr)
1666      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
1667
1668
1669
1670
1671
1672 __extension__ extern long long int atoll (__const char *__nptr)
1673      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
1674
1675
1676
1677
1678
1679 extern double strtod (__const char *__restrict __nptr,
1680         char **__restrict __endptr)
1681      throw () __attribute__ ((__nonnull__ (1))) ;
1682
1683
1684
1685
1686
1687 extern float strtof (__const char *__restrict __nptr,
1688        char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1))) ;
1689
1690 extern long double strtold (__const char *__restrict __nptr,
1691        char **__restrict __endptr)
1692      throw () __attribute__ ((__nonnull__ (1))) ;
1693
1694
1695
1696
1697
1698 extern long int strtol (__const char *__restrict __nptr,
1699    char **__restrict __endptr, int __base)
1700      throw () __attribute__ ((__nonnull__ (1))) ;
1701
1702 extern unsigned long int strtoul (__const char *__restrict __nptr,
1703       char **__restrict __endptr, int __base)
1704      throw () __attribute__ ((__nonnull__ (1))) ;
1705
1706
1707
1708
1709 __extension__
1710 extern long long int strtoq (__const char *__restrict __nptr,
1711         char **__restrict __endptr, int __base)
1712      throw () __attribute__ ((__nonnull__ (1))) ;
1713
1714 __extension__
1715 extern unsigned long long int strtouq (__const char *__restrict __nptr,
1716            char **__restrict __endptr, int __base)
1717      throw () __attribute__ ((__nonnull__ (1))) ;
1718
1719
1720
1721
1722
1723 __extension__
1724 extern long long int strtoll (__const char *__restrict __nptr,
1725          char **__restrict __endptr, int __base)
1726      throw () __attribute__ ((__nonnull__ (1))) ;
1727
1728 __extension__
1729 extern unsigned long long int strtoull (__const char *__restrict __nptr,
1730      char **__restrict __endptr, int __base)
1731      throw () __attribute__ ((__nonnull__ (1))) ;
1732
1733 # 240 "/usr/include/stdlib.h" 3 4
1734 extern long int strtol_l (__const char *__restrict __nptr,
1735      char **__restrict __endptr, int __base,
1736      __locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4))) ;
1737
1738 extern unsigned long int strtoul_l (__const char *__restrict __nptr,
1739         char **__restrict __endptr,
1740         int __base, __locale_t __loc)
1741      throw () __attribute__ ((__nonnull__ (1, 4))) ;
1742
1743 __extension__
1744 extern long long int strtoll_l (__const char *__restrict __nptr,
1745     char **__restrict __endptr, int __base,
1746     __locale_t __loc)
1747      throw () __attribute__ ((__nonnull__ (1, 4))) ;
1748
1749 __extension__
1750 extern unsigned long long int strtoull_l (__const char *__restrict __nptr,
1751        char **__restrict __endptr,
1752        int __base, __locale_t __loc)
1753      throw () __attribute__ ((__nonnull__ (1, 4))) ;
1754
1755 extern double strtod_l (__const char *__restrict __nptr,
1756    char **__restrict __endptr, __locale_t __loc)
1757      throw () __attribute__ ((__nonnull__ (1, 3))) ;
1758
1759 extern float strtof_l (__const char *__restrict __nptr,
1760          char **__restrict __endptr, __locale_t __loc)
1761      throw () __attribute__ ((__nonnull__ (1, 3))) ;
1762
1763 extern long double strtold_l (__const char *__restrict __nptr,
1764          char **__restrict __endptr,
1765          __locale_t __loc)
1766      throw () __attribute__ ((__nonnull__ (1, 3))) ;
1767
1768
1769
1770
1771
1772
1773 extern double __strtod_internal (__const char *__restrict __nptr,
1774      char **__restrict __endptr, int __group)
1775      throw () __attribute__ ((__nonnull__ (1))) ;
1776 extern float __strtof_internal (__const char *__restrict __nptr,
1777     char **__restrict __endptr, int __group)
1778      throw () __attribute__ ((__nonnull__ (1))) ;
1779 extern long double __strtold_internal (__const char *__restrict __nptr,
1780            char **__restrict __endptr,
1781            int __group)
1782      throw () __attribute__ ((__nonnull__ (1))) ;
1783
1784 extern long int __strtol_internal (__const char *__restrict __nptr,
1785        char **__restrict __endptr,
1786        int __base, int __group)
1787      throw () __attribute__ ((__nonnull__ (1))) ;
1788
1789
1790
1791 extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
1792           char **__restrict __endptr,
1793           int __base, int __group)
1794      throw () __attribute__ ((__nonnull__ (1))) ;
1795
1796
1797
1798
1799 __extension__
1800 extern long long int __strtoll_internal (__const char *__restrict __nptr,
1801       char **__restrict __endptr,
1802       int __base, int __group)
1803      throw () __attribute__ ((__nonnull__ (1))) ;
1804
1805
1806
1807 __extension__
1808 extern unsigned long long int __strtoull_internal (__const char *
1809          __restrict __nptr,
1810          char **__restrict __endptr,
1811          int __base, int __group)
1812      throw () __attribute__ ((__nonnull__ (1))) ;
1813
1814
1815
1816
1817
1818
1819
1820
1821 extern __inline double
1822 strtod (__const char *__restrict __nptr, char **__restrict __endptr) throw ()
1823 {
1824   return __strtod_internal (__nptr, __endptr, 0);
1825 }
1826 extern __inline long int
1827 strtol (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ()
1828
1829 {
1830   return __strtol_internal (__nptr, __endptr, __base, 0);
1831 }
1832 extern __inline unsigned long int
1833 strtoul (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ()
1834
1835 {
1836   return __strtoul_internal (__nptr, __endptr, __base, 0);
1837 }
1838
1839
1840
1841
1842 extern __inline float
1843 strtof (__const char *__restrict __nptr, char **__restrict __endptr) throw ()
1844 {
1845   return __strtof_internal (__nptr, __endptr, 0);
1846 }
1847
1848 extern __inline long double
1849 strtold (__const char *__restrict __nptr, char **__restrict __endptr) throw ()
1850 {
1851   return __strtold_internal (__nptr, __endptr, 0);
1852 }
1853
1854
1855
1856
1857
1858 __extension__ extern __inline long long int
1859 strtoq (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ()
1860
1861 {
1862   return __strtoll_internal (__nptr, __endptr, __base, 0);
1863 }
1864 __extension__ extern __inline unsigned long long int
1865 strtouq (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ()
1866
1867 {
1868   return __strtoull_internal (__nptr, __endptr, __base, 0);
1869 }
1870
1871
1872
1873
1874 __extension__ extern __inline long long int
1875 strtoll (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ()
1876
1877 {
1878   return __strtoll_internal (__nptr, __endptr, __base, 0);
1879 }
1880 __extension__ extern __inline unsigned long long int
1881 strtoull (__const char * __restrict __nptr, char **__restrict __endptr, int __base) throw ()
1882
1883 {
1884   return __strtoull_internal (__nptr, __endptr, __base, 0);
1885 }
1886
1887
1888
1889
1890 extern __inline double
1891 atof (__const char *__nptr) throw ()
1892 {
1893   return strtod (__nptr, (char **) __null);
1894 }
1895 extern __inline int
1896 atoi (__const char *__nptr) throw ()
1897 {
1898   return (int) strtol (__nptr, (char **) __null, 10);
1899 }
1900 extern __inline long int
1901 atol (__const char *__nptr) throw ()
1902 {
1903   return strtol (__nptr, (char **) __null, 10);
1904 }
1905
1906
1907
1908
1909 __extension__ extern __inline long long int
1910 atoll (__const char *__nptr) throw ()
1911 {
1912   return strtoll (__nptr, (char **) __null, 10);
1913 }
1914
1915 # 429 "/usr/include/stdlib.h" 3 4
1916 extern char *l64a (long int __n) throw () ;
1917
1918
1919 extern long int a64l (__const char *__s)
1920      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
1921
1922
1923
1924
1925 # 1 "/usr/include/sys/types.h" 1 3 4
1926 # 29 "/usr/include/sys/types.h" 3 4
1927 extern "C" {
1928
1929
1930
1931
1932
1933 typedef __u_char u_char;
1934 typedef __u_short u_short;
1935 typedef __u_int u_int;
1936 typedef __u_long u_long;
1937 typedef __quad_t quad_t;
1938 typedef __u_quad_t u_quad_t;
1939 typedef __fsid_t fsid_t;
1940
1941
1942
1943
1944 typedef __loff_t loff_t;
1945
1946
1947
1948 typedef __ino_t ino_t;
1949
1950
1951
1952
1953
1954
1955 typedef __ino64_t ino64_t;
1956
1957
1958
1959
1960 typedef __dev_t dev_t;
1961
1962
1963
1964
1965 typedef __gid_t gid_t;
1966
1967
1968
1969
1970 typedef __mode_t mode_t;
1971
1972
1973
1974
1975 typedef __nlink_t nlink_t;
1976
1977
1978
1979
1980 typedef __uid_t uid_t;
1981
1982
1983
1984
1985
1986 typedef __off_t off_t;
1987
1988
1989
1990
1991
1992
1993 typedef __off64_t off64_t;
1994
1995
1996
1997
1998 typedef __pid_t pid_t;
1999
2000
2001
2002
2003 typedef __id_t id_t;
2004
2005
2006
2007
2008 typedef __ssize_t ssize_t;
2009
2010
2011
2012
2013
2014 typedef __daddr_t daddr_t;
2015 typedef __caddr_t caddr_t;
2016
2017
2018
2019
2020
2021 typedef __key_t key_t;
2022 # 133 "/usr/include/sys/types.h" 3 4
2023 # 1 "/usr/include/time.h" 1 3 4
2024 # 59 "/usr/include/time.h" 3 4
2025
2026
2027 typedef __clock_t clock_t;
2028
2029
2030
2031 # 75 "/usr/include/time.h" 3 4
2032
2033
2034 typedef __time_t time_t;
2035
2036
2037
2038 # 93 "/usr/include/time.h" 3 4
2039 typedef __clockid_t clockid_t;
2040 # 105 "/usr/include/time.h" 3 4
2041 typedef __timer_t timer_t;
2042 # 134 "/usr/include/sys/types.h" 2 3 4
2043
2044
2045
2046 typedef __useconds_t useconds_t;
2047
2048
2049
2050 typedef __suseconds_t suseconds_t;
2051
2052
2053
2054
2055
2056 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
2057 # 148 "/usr/include/sys/types.h" 2 3 4
2058
2059
2060
2061 typedef unsigned long int ulong;
2062 typedef unsigned short int ushort;
2063 typedef unsigned int uint;
2064 # 195 "/usr/include/sys/types.h" 3 4
2065 typedef int int8_t __attribute__ ((__mode__ (__QI__)));
2066 typedef int int16_t __attribute__ ((__mode__ (__HI__)));
2067 typedef int int32_t __attribute__ ((__mode__ (__SI__)));
2068 typedef int int64_t __attribute__ ((__mode__ (__DI__)));
2069
2070
2071 typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
2072 typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
2073 typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
2074 typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
2075
2076 typedef int register_t __attribute__ ((__mode__ (__word__)));
2077 # 220 "/usr/include/sys/types.h" 3 4
2078 # 1 "/usr/include/sys/select.h" 1 3 4
2079 # 31 "/usr/include/sys/select.h" 3 4
2080 # 1 "/usr/include/bits/select.h" 1 3 4
2081 # 32 "/usr/include/sys/select.h" 2 3 4
2082
2083
2084 # 1 "/usr/include/bits/sigset.h" 1 3 4
2085 # 24 "/usr/include/bits/sigset.h" 3 4
2086 typedef int __sig_atomic_t;
2087
2088
2089
2090
2091 typedef struct
2092   {
2093     unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
2094   } __sigset_t;
2095 # 35 "/usr/include/sys/select.h" 2 3 4
2096
2097
2098
2099 typedef __sigset_t sigset_t;
2100
2101
2102
2103
2104
2105 # 1 "/usr/include/time.h" 1 3 4
2106 # 121 "/usr/include/time.h" 3 4
2107 struct timespec
2108   {
2109     __time_t tv_sec;
2110     long int tv_nsec;
2111   };
2112 # 45 "/usr/include/sys/select.h" 2 3 4
2113
2114 # 1 "/usr/include/bits/time.h" 1 3 4
2115 # 69 "/usr/include/bits/time.h" 3 4
2116 struct timeval
2117   {
2118     __time_t tv_sec;
2119     __suseconds_t tv_usec;
2120   };
2121 # 47 "/usr/include/sys/select.h" 2 3 4
2122 # 55 "/usr/include/sys/select.h" 3 4
2123 typedef long int __fd_mask;
2124 # 67 "/usr/include/sys/select.h" 3 4
2125 typedef struct
2126   {
2127
2128
2129
2130     __fd_mask fds_bits[1024 / (8 * sizeof (__fd_mask))];
2131
2132
2133
2134
2135
2136   } fd_set;
2137
2138
2139
2140
2141
2142
2143 typedef __fd_mask fd_mask;
2144 # 99 "/usr/include/sys/select.h" 3 4
2145 extern "C" {
2146 # 109 "/usr/include/sys/select.h" 3 4
2147 extern int select (int __nfds, fd_set *__restrict __readfds,
2148      fd_set *__restrict __writefds,
2149      fd_set *__restrict __exceptfds,
2150      struct timeval *__restrict __timeout);
2151 # 121 "/usr/include/sys/select.h" 3 4
2152 extern int pselect (int __nfds, fd_set *__restrict __readfds,
2153       fd_set *__restrict __writefds,
2154       fd_set *__restrict __exceptfds,
2155       const struct timespec *__restrict __timeout,
2156       const __sigset_t *__restrict __sigmask);
2157
2158
2159 }
2160 # 221 "/usr/include/sys/types.h" 2 3 4
2161
2162
2163 # 1 "/usr/include/sys/sysmacros.h" 1 3 4
2164 # 30 "/usr/include/sys/sysmacros.h" 3 4
2165 __extension__
2166 extern __inline unsigned int gnu_dev_major (unsigned long long int __dev)
2167      throw ();
2168 __extension__
2169 extern __inline unsigned int gnu_dev_minor (unsigned long long int __dev)
2170      throw ();
2171 __extension__
2172 extern __inline unsigned long long int gnu_dev_makedev (unsigned int __major,
2173        unsigned int __minor)
2174      throw ();
2175
2176
2177 __extension__ extern __inline unsigned int
2178 gnu_dev_major (unsigned long long int __dev) throw ()
2179 {
2180   return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
2181 }
2182
2183 __extension__ extern __inline unsigned int
2184 gnu_dev_minor (unsigned long long int __dev) throw ()
2185 {
2186   return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
2187 }
2188
2189 __extension__ extern __inline unsigned long long int
2190 gnu_dev_makedev (unsigned int __major, unsigned int __minor) throw ()
2191 {
2192   return ((__minor & 0xff) | ((__major & 0xfff) << 8)
2193    | (((unsigned long long int) (__minor & ~0xff)) << 12)
2194    | (((unsigned long long int) (__major & ~0xfff)) << 32));
2195 }
2196 # 224 "/usr/include/sys/types.h" 2 3 4
2197
2198
2199
2200
2201 typedef __blksize_t blksize_t;
2202
2203
2204
2205
2206
2207
2208 typedef __blkcnt_t blkcnt_t;
2209
2210
2211
2212 typedef __fsblkcnt_t fsblkcnt_t;
2213
2214
2215
2216 typedef __fsfilcnt_t fsfilcnt_t;
2217 # 262 "/usr/include/sys/types.h" 3 4
2218 typedef __blkcnt64_t blkcnt64_t;
2219 typedef __fsblkcnt64_t fsblkcnt64_t;
2220 typedef __fsfilcnt64_t fsfilcnt64_t;
2221
2222
2223
2224
2225
2226 # 1 "/usr/include/bits/pthreadtypes.h" 1 3 4
2227 # 36 "/usr/include/bits/pthreadtypes.h" 3 4
2228 typedef unsigned long int pthread_t;
2229
2230
2231 typedef union
2232 {
2233   char __size[36];
2234   long int __align;
2235 } pthread_attr_t;
2236
2237
2238 typedef struct __pthread_internal_slist
2239 {
2240   struct __pthread_internal_slist *__next;
2241 } __pthread_slist_t;
2242
2243
2244
2245
2246 typedef union
2247 {
2248   struct __pthread_mutex_s
2249   {
2250     int __lock;
2251     unsigned int __count;
2252     int __owner;
2253
2254
2255     int __kind;
2256     unsigned int __nusers;
2257     __extension__ union
2258     {
2259       int __spins;
2260       __pthread_slist_t __list;
2261     };
2262   } __data;
2263   char __size[24];
2264   long int __align;
2265 } pthread_mutex_t;
2266
2267 typedef union
2268 {
2269   char __size[4];
2270   long int __align;
2271 } pthread_mutexattr_t;
2272
2273
2274
2275
2276 typedef union
2277 {
2278   struct
2279   {
2280     int __lock;
2281     unsigned int __futex;
2282     __extension__ unsigned long long int __total_seq;
2283     __extension__ unsigned long long int __wakeup_seq;
2284     __extension__ unsigned long long int __woken_seq;
2285     void *__mutex;
2286     unsigned int __nwaiters;
2287     unsigned int __broadcast_seq;
2288   } __data;
2289   char __size[48];
2290   __extension__ long long int __align;
2291 } pthread_cond_t;
2292
2293 typedef union
2294 {
2295   char __size[4];
2296   long int __align;
2297 } pthread_condattr_t;
2298
2299
2300
2301 typedef unsigned int pthread_key_t;
2302
2303
2304
2305 typedef int pthread_once_t;
2306
2307
2308
2309
2310
2311 typedef union
2312 {
2313   struct
2314   {
2315     int __lock;
2316     unsigned int __nr_readers;
2317     unsigned int __readers_wakeup;
2318     unsigned int __writer_wakeup;
2319     unsigned int __nr_readers_queued;
2320     unsigned int __nr_writers_queued;
2321
2322
2323     unsigned int __flags;
2324     int __writer;
2325   } __data;
2326   char __size[32];
2327   long int __align;
2328 } pthread_rwlock_t;
2329
2330 typedef union
2331 {
2332   char __size[8];
2333   long int __align;
2334 } pthread_rwlockattr_t;
2335
2336
2337
2338
2339
2340 typedef volatile int pthread_spinlock_t;
2341
2342
2343
2344
2345 typedef union
2346 {
2347   char __size[20];
2348   long int __align;
2349 } pthread_barrier_t;
2350
2351 typedef union
2352 {
2353   char __size[4];
2354   int __align;
2355 } pthread_barrierattr_t;
2356 # 271 "/usr/include/sys/types.h" 2 3 4
2357
2358
2359 }
2360 # 439 "/usr/include/stdlib.h" 2 3 4
2361
2362
2363
2364
2365
2366
2367 extern long int random (void) throw ();
2368
2369
2370 extern void srandom (unsigned int __seed) throw ();
2371
2372
2373
2374
2375
2376 extern char *initstate (unsigned int __seed, char *__statebuf,
2377    size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
2378
2379
2380
2381 extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
2382
2383
2384
2385
2386
2387
2388
2389 struct random_data
2390   {
2391     int32_t *fptr;
2392     int32_t *rptr;
2393     int32_t *state;
2394     int rand_type;
2395     int rand_deg;
2396     int rand_sep;
2397     int32_t *end_ptr;
2398   };
2399
2400 extern int random_r (struct random_data *__restrict __buf,
2401        int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
2402
2403 extern int srandom_r (unsigned int __seed, struct random_data *__buf)
2404      throw () __attribute__ ((__nonnull__ (2)));
2405
2406 extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
2407    size_t __statelen,
2408    struct random_data *__restrict __buf)
2409      throw () __attribute__ ((__nonnull__ (2, 4)));
2410
2411 extern int setstate_r (char *__restrict __statebuf,
2412          struct random_data *__restrict __buf)
2413      throw () __attribute__ ((__nonnull__ (1, 2)));
2414
2415
2416
2417
2418
2419
2420 extern int rand (void) throw ();
2421
2422 extern void srand (unsigned int __seed) throw ();
2423
2424
2425
2426
2427 extern int rand_r (unsigned int *__seed) throw ();
2428
2429
2430
2431
2432
2433
2434
2435 extern double drand48 (void) throw ();
2436 extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
2437
2438
2439 extern long int lrand48 (void) throw ();
2440 extern long int nrand48 (unsigned short int __xsubi[3])
2441      throw () __attribute__ ((__nonnull__ (1)));
2442
2443
2444 extern long int mrand48 (void) throw ();
2445 extern long int jrand48 (unsigned short int __xsubi[3])
2446      throw () __attribute__ ((__nonnull__ (1)));
2447
2448
2449 extern void srand48 (long int __seedval) throw ();
2450 extern unsigned short int *seed48 (unsigned short int __seed16v[3])
2451      throw () __attribute__ ((__nonnull__ (1)));
2452 extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
2453
2454
2455
2456
2457
2458 struct drand48_data
2459   {
2460     unsigned short int __x[3];
2461     unsigned short int __old_x[3];
2462     unsigned short int __c;
2463     unsigned short int __init;
2464     unsigned long long int __a;
2465   };
2466
2467
2468 extern int drand48_r (struct drand48_data *__restrict __buffer,
2469         double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
2470 extern int erand48_r (unsigned short int __xsubi[3],
2471         struct drand48_data *__restrict __buffer,
2472         double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
2473
2474
2475 extern int lrand48_r (struct drand48_data *__restrict __buffer,
2476         long int *__restrict __result)
2477      throw () __attribute__ ((__nonnull__ (1, 2)));
2478 extern int nrand48_r (unsigned short int __xsubi[3],
2479         struct drand48_data *__restrict __buffer,
2480         long int *__restrict __result)
2481      throw () __attribute__ ((__nonnull__ (1, 2)));
2482
2483
2484 extern int mrand48_r (struct drand48_data *__restrict __buffer,
2485         long int *__restrict __result)
2486      throw () __attribute__ ((__nonnull__ (1, 2)));
2487 extern int jrand48_r (unsigned short int __xsubi[3],
2488         struct drand48_data *__restrict __buffer,
2489         long int *__restrict __result)
2490      throw () __attribute__ ((__nonnull__ (1, 2)));
2491
2492
2493 extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
2494      throw () __attribute__ ((__nonnull__ (2)));
2495
2496 extern int seed48_r (unsigned short int __seed16v[3],
2497        struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
2498
2499 extern int lcong48_r (unsigned short int __param[7],
2500         struct drand48_data *__buffer)
2501      throw () __attribute__ ((__nonnull__ (1, 2)));
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511 extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
2512
2513 extern void *calloc (size_t __nmemb, size_t __size)
2514      throw () __attribute__ ((__malloc__)) ;
2515
2516
2517
2518
2519
2520
2521
2522 extern void *realloc (void *__ptr, size_t __size)
2523      throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
2524
2525 extern void free (void *__ptr) throw ();
2526
2527
2528
2529
2530 extern void cfree (void *__ptr) throw ();
2531
2532
2533
2534 # 1 "/usr/include/alloca.h" 1 3 4
2535 # 25 "/usr/include/alloca.h" 3 4
2536 # 1 "/usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/stddef.h" 1 3 4
2537 # 26 "/usr/include/alloca.h" 2 3 4
2538
2539 extern "C" {
2540
2541
2542
2543
2544
2545 extern void *alloca (size_t __size) throw ();
2546
2547
2548
2549
2550
2551 }
2552 # 613 "/usr/include/stdlib.h" 2 3 4
2553
2554
2555
2556
2557 extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
2558
2559
2560
2561
2562 extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
2563      throw () __attribute__ ((__nonnull__ (1))) ;
2564
2565
2566
2567
2568 extern void abort (void) throw () __attribute__ ((__noreturn__));
2569
2570
2571
2572 extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
2573
2574
2575
2576
2577
2578 extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
2579      throw () __attribute__ ((__nonnull__ (1)));
2580
2581
2582
2583
2584
2585
2586 extern void exit (int __status) throw () __attribute__ ((__noreturn__));
2587
2588
2589
2590
2591
2592
2593 extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
2594
2595
2596
2597
2598
2599
2600 extern char *getenv (__const char *__name) throw () __attribute__ ((__nonnull__ (1))) ;
2601
2602
2603
2604
2605 extern char *__secure_getenv (__const char *__name)
2606      throw () __attribute__ ((__nonnull__ (1))) ;
2607
2608
2609
2610
2611
2612 extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
2613
2614
2615
2616
2617
2618 extern int setenv (__const char *__name, __const char *__value, int __replace)
2619      throw () __attribute__ ((__nonnull__ (2)));
2620
2621
2622 extern int unsetenv (__const char *__name) throw ();
2623
2624
2625
2626
2627
2628
2629 extern int clearenv (void) throw ();
2630 # 698 "/usr/include/stdlib.h" 3 4
2631 extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ;
2632 # 709 "/usr/include/stdlib.h" 3 4
2633 extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ;
2634 # 719 "/usr/include/stdlib.h" 3 4
2635 extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
2636 # 729 "/usr/include/stdlib.h" 3 4
2637 extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ;
2638
2639
2640
2641
2642
2643
2644
2645
2646 extern int system (__const char *__command) ;
2647
2648
2649
2650
2651
2652
2653 extern char *canonicalize_file_name (__const char *__name)
2654      throw () __attribute__ ((__nonnull__ (1))) ;
2655 # 755 "/usr/include/stdlib.h" 3 4
2656 extern char *realpath (__const char *__restrict __name,
2657          char *__restrict __resolved) throw () ;
2658
2659
2660
2661
2662
2663
2664 typedef int (*__compar_fn_t) (__const void *, __const void *);
2665
2666
2667 typedef __compar_fn_t comparison_fn_t;
2668
2669
2670
2671
2672
2673
2674 extern void *bsearch (__const void *__key, __const void *__base,
2675         size_t __nmemb, size_t __size, __compar_fn_t __compar)
2676      __attribute__ ((__nonnull__ (1, 2, 5))) ;
2677
2678
2679
2680 extern void qsort (void *__base, size_t __nmemb, size_t __size,
2681      __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
2682
2683
2684
2685 extern int abs (int __x) throw () __attribute__ ((__const__)) ;
2686 extern long int labs (long int __x) throw () __attribute__ ((__const__)) ;
2687
2688
2689
2690 __extension__ extern long long int llabs (long long int __x)
2691      throw () __attribute__ ((__const__)) ;
2692
2693
2694
2695
2696
2697
2698
2699 extern div_t div (int __numer, int __denom)
2700      throw () __attribute__ ((__const__)) ;
2701 extern ldiv_t ldiv (long int __numer, long int __denom)
2702      throw () __attribute__ ((__const__)) ;
2703
2704
2705
2706
2707 __extension__ extern lldiv_t lldiv (long long int __numer,
2708         long long int __denom)
2709      throw () __attribute__ ((__const__)) ;
2710
2711 # 820 "/usr/include/stdlib.h" 3 4
2712 extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
2713      int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
2714
2715
2716
2717
2718 extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
2719      int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
2720
2721
2722
2723
2724 extern char *gcvt (double __value, int __ndigit, char *__buf)
2725      throw () __attribute__ ((__nonnull__ (3))) ;
2726
2727
2728
2729
2730 extern char *qecvt (long double __value, int __ndigit,
2731       int *__restrict __decpt, int *__restrict __sign)
2732      throw () __attribute__ ((__nonnull__ (3, 4))) ;
2733 extern char *qfcvt (long double __value, int __ndigit,
2734       int *__restrict __decpt, int *__restrict __sign)
2735      throw () __attribute__ ((__nonnull__ (3, 4))) ;
2736 extern char *qgcvt (long double __value, int __ndigit, char *__buf)
2737      throw () __attribute__ ((__nonnull__ (3))) ;
2738
2739
2740
2741
2742 extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
2743      int *__restrict __sign, char *__restrict __buf,
2744      size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
2745 extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
2746      int *__restrict __sign, char *__restrict __buf,
2747      size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
2748
2749 extern int qecvt_r (long double __value, int __ndigit,
2750       int *__restrict __decpt, int *__restrict __sign,
2751       char *__restrict __buf, size_t __len)
2752      throw () __attribute__ ((__nonnull__ (3, 4, 5)));
2753 extern int qfcvt_r (long double __value, int __ndigit,
2754       int *__restrict __decpt, int *__restrict __sign,
2755       char *__restrict __buf, size_t __len)
2756      throw () __attribute__ ((__nonnull__ (3, 4, 5)));
2757
2758
2759
2760
2761
2762
2763
2764 extern int mblen (__const char *__s, size_t __n) throw () ;
2765
2766
2767 extern int mbtowc (wchar_t *__restrict __pwc,
2768      __const char *__restrict __s, size_t __n) throw () ;
2769
2770
2771 extern int wctomb (char *__s, wchar_t __wchar) throw () ;
2772
2773
2774
2775 extern size_t mbstowcs (wchar_t *__restrict __pwcs,
2776    __const char *__restrict __s, size_t __n) throw ();
2777
2778 extern size_t wcstombs (char *__restrict __s,
2779    __const wchar_t *__restrict __pwcs, size_t __n)
2780      throw ();
2781
2782
2783
2784
2785
2786
2787
2788
2789 extern int rpmatch (__const char *__response) throw () __attribute__ ((__nonnull__ (1))) ;
2790 # 908 "/usr/include/stdlib.h" 3 4
2791 extern int getsubopt (char **__restrict __optionp,
2792         char *__const *__restrict __tokens,
2793         char **__restrict __valuep)
2794      throw () __attribute__ ((__nonnull__ (1, 2, 3))) ;
2795
2796
2797
2798
2799
2800 extern void setkey (__const char *__key) throw () __attribute__ ((__nonnull__ (1)));
2801
2802
2803
2804
2805
2806
2807
2808 extern int posix_openpt (int __oflag) ;
2809
2810
2811
2812
2813
2814
2815
2816 extern int grantpt (int __fd) throw ();
2817
2818
2819
2820 extern int unlockpt (int __fd) throw ();
2821
2822
2823
2824
2825 extern char *ptsname (int __fd) throw () ;
2826
2827
2828
2829
2830
2831
2832 extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
2833      throw () __attribute__ ((__nonnull__ (2)));
2834
2835
2836 extern int getpt (void);
2837
2838
2839
2840
2841
2842
2843 extern int getloadavg (double __loadavg[], int __nelem)
2844      throw () __attribute__ ((__nonnull__ (1)));
2845 # 976 "/usr/include/stdlib.h" 3 4
2846 }
2847 # 13 "/home/schultz/c/schultz/schultz" 2
2848
2849 namespace schultz {
2850
2851 # 1 "/home/schultz/c/schultz/language/keywords" 1
2852 # 17 "/home/schultz/c/schultz/schultz" 2
2853
2854
2855
2856 # 1 "/home/schultz/c/schultz/language/types" 1
2857 # 14 "/home/schultz/c/schultz/language/types"
2858 typedef unsigned int nat;
2859 # 28 "/home/schultz/c/schultz/language/types"
2860 typedef float flop;
2861 # 21 "/home/schultz/c/schultz/schultz" 2
2862 # 1 "/home/schultz/c/schultz/language/assert" 1
2863
2864
2865
2866
2867
2868
2869
2870 namespace __schultz {
2871 # 18 "/home/schultz/c/schultz/language/assert"
2872  inline void assertion_failure(char* file, nat line) {
2873   fprintf(stderr, "[ERROR] assertion failure at file \"%s\", line %u\n", file, line);
2874   exit(1);
2875  }
2876
2877
2878
2879
2880
2881
2882
2883  inline void requirement_failure(char* file, nat line) {
2884   fprintf(stderr, "[ERROR] requirement not met at file \"%s\", line %u\n", file, line);
2885   exit(1);
2886  }
2887 }
2888 # 22 "/home/schultz/c/schultz/schultz" 2
2889 # 1 "/home/schultz/c/schultz/language/meta" 1
2890 # 19 "/home/schultz/c/schultz/language/meta"
2891 template<bool> struct bool_type {};
2892
2893 typedef bool_type<false> false_type;
2894 typedef bool_type<true> true_type;
2895 # 31 "/home/schultz/c/schultz/language/meta"
2896 template<nat> struct nat_type {};
2897 # 41 "/home/schultz/c/schultz/language/meta"
2898 template<typename T, typename U> struct type_equality {
2899  enum {value = false};
2900 };
2901 template<typename T> struct type_equality<T, T> {
2902  enum {value = true};
2903 };
2904
2905 namespace __schultz {
2906 # 58 "/home/schultz/c/schultz/language/meta"
2907  template<typename T> const T& fetch_constness(const T& x) {return x;}
2908  template<typename T> T& fetch_constness(T& x) {return x;}
2909 };
2910 # 115 "/home/schultz/c/schultz/language/meta"
2911 template<typename T> struct default_type_traits {
2912  enum {
2913   trivial = false,
2914   trivial_constructor = false,
2915   trivial_copy = false,
2916   trivial_destructor = false,
2917
2918   fast_increment = false,
2919   fast_decrement = false,
2920   fast_random_increment = false,
2921
2922   iterator = false,
2923
2924   structure = true,
2925
2926   special_swap = false
2927  };
2928 };
2929 # 142 "/home/schultz/c/schultz/language/meta"
2930 template<typename T> struct type_traits {
2931  enum {
2932   trivial = T::type_traits::trivial || (
2933    T::type_traits::trivial_constructor &&
2934    T::type_traits::trivial_copy &&
2935    T::type_traits::trivial_destructor
2936   ),
2937   trivial_constructor = T::type_traits::trivial || T::type_traits::trivial_constructor,
2938   trivial_copy = T::type_traits::trivial || T::type_traits::trivial_copy,
2939   trivial_destructor = T::type_traits::trivial || T::type_traits::trivial_destructor,
2940
2941   fast_increment = T::type_traits::fast_increment || T::type_traits::fast_random_increment,
2942   fast_decrement = T::type_traits::fast_decrement || T::type_traits::fast_random_increment,
2943   fast_random_increment = T::type_traits::fast_random_increment,
2944
2945   iterator = T::type_traits::iterator,
2946
2947   structure = T::type_traits::structure,
2948
2949   special_swap = T::type_traits::special_swap
2950  };
2951 };
2952 # 178 "/home/schultz/c/schultz/language/meta"
2953 template<typename T> struct builtin_type_traits : public default_type_traits<T> {
2954  enum {
2955   trivial = true,
2956   trivial_constructor = true,
2957   trivial_copy = true,
2958   trivial_destructor = true,
2959
2960   fast_increment = true,
2961   fast_decrement = true,
2962   fast_random_increment = true,
2963
2964   iterator = false,
2965
2966   structure = false,
2967
2968   special_swap = false
2969  };
2970 };
2971
2972 template<> struct type_traits<bool> : public builtin_type_traits<bool> {};
2973 template<> struct type_traits<nat> : public builtin_type_traits<nat> {};
2974 template<> struct type_traits<int> : public builtin_type_traits<int> {};
2975 template<> struct type_traits<unsigned char> : public builtin_type_traits<unsigned char> {};
2976 template<> struct type_traits<char> : public builtin_type_traits<char> {};
2977 template<> struct type_traits<unsigned short> : public builtin_type_traits<unsigned short> {};
2978 template<> struct type_traits<short> : public builtin_type_traits<short> {};
2979 template<> struct type_traits<unsigned long long int> : public builtin_type_traits<unsigned long long int> {};
2980 template<> struct type_traits<long long int> : public builtin_type_traits<long long int> {};
2981 template<> struct type_traits<float> : public builtin_type_traits<float> {};
2982 template<> struct type_traits<double> : public builtin_type_traits<double> {};
2983 template<typename T> struct type_traits<T*> : public builtin_type_traits<T*> {
2984  enum {iterator = true};
2985 };
2986 template<typename T> struct type_traits<const T*> : public builtin_type_traits<const T*> {
2987  enum {iterator = true};
2988 };
2989 # 245 "/home/schultz/c/schultz/language/meta"
2990 template<typename I> struct default_iterator_traits {
2991  enum {
2992   constant = true,
2993   persistent = false,
2994   bidirectional = false,
2995   random_access = false
2996  };
2997
2998  typedef void value_type;
2999 };
3000 # 267 "/home/schultz/c/schultz/language/meta"
3001 template<typename I> struct iterator_traits {
3002  enum {
3003   constant = I::iterator_traits::constant,
3004   persistent = I::iterator_traits::persistent,
3005   bidirectional = I::iterator_traits::bidirectional || I::iterator_traits::random_access,
3006   random_access = I::iterator_traits::random_access
3007  };
3008
3009  typedef typename I::iterator_traits::value_type value_type;
3010 };
3011
3012
3013 template<typename T> struct iterator_traits<T*> : public default_iterator_traits<T*> {
3014  enum {
3015   constant = false,
3016   persistent = true,
3017   bidirectional = true,
3018   random_access = true
3019  };
3020
3021  typedef T value_type;
3022 };
3023 template<typename T> struct iterator_traits<const T*> : public default_iterator_traits<const T*> {
3024  enum {
3025   constant = true,
3026   persistent = true,
3027   bidirectional = true,
3028   random_access = true
3029  };
3030
3031  typedef T value_type;
3032 };
3033 # 309 "/home/schultz/c/schultz/language/meta"
3034 template<typename I> struct iterator_type_traits : public default_type_traits<I> {
3035  enum {
3036   trivial = true,
3037
3038   fast_increment = true,
3039   fast_decrement = iterator_traits<I>::bidirectional,
3040   fast_random_increment = iterator_traits<I>::random_access,
3041
3042   iterator = true
3043  };
3044 };
3045 # 23 "/home/schultz/c/schultz/schultz" 2
3046 # 1 "/home/schultz/c/schultz/language/function" 1
3047 # 14 "/home/schultz/c/schultz/language/function"
3048 template<typename F, typename X> struct unary_function {
3049  typedef F return_type;
3050  typedef X argument_type;
3051 };
3052
3053
3054
3055
3056
3057
3058
3059 template<typename F, typename X, typename Y = X> struct binary_function {
3060  typedef F return_type;
3061  typedef X argument_type;
3062  typedef X first_argument_type;
3063  typedef Y second_argument_type;
3064 };
3065 # 43 "/home/schultz/c/schultz/language/function"
3066 template<typename F> struct opposite_function : public binary_function<typename F::return_type, typename F::second_argument_type, typename F::first_argument_type> {
3067
3068  const F& f;
3069
3070
3071  explicit inline opposite_function(const F& g) : f(g) {}
3072
3073
3074  inline typename F::return_type operator ()(typename F::second_argument_type y, typename F::first_argument_type x) const {return f(x, y);}
3075 };
3076
3077
3078 template<typename F> inline opposite_function<F> make_opposite_function(const F& f) {
3079  return opposite_function<F>(f);
3080 }
3081
3082
3083
3084
3085
3086
3087
3088 template<typename T> struct addressf : public unary_function<T*, T&> {
3089  inline T* operator ()(T& a) const {return &a;}
3090 };
3091 # 84 "/home/schultz/c/schultz/language/function"
3092 template<typename T> struct equalf : public binary_function<bool, const T&> {
3093  inline bool operator ()(const T& x, const T& y) const {
3094   return x == y;
3095  }
3096 };
3097 template<typename I> struct indirect_equalf : public binary_function<bool, I> {
3098  inline bool operator ()(I x, I y) const {
3099   return *x == *y;
3100  }
3101 };
3102
3103
3104 template<typename T> struct lessf : public binary_function<bool, const T&> {
3105  inline bool operator ()(const T& x, const T& y) const {
3106   return x < y;
3107  }
3108 };
3109 template<typename I> struct indirect_lessf : public binary_function<bool, I> {
3110  inline bool operator ()(I x, I y) const {
3111   return *x < *y;
3112  }
3113 };
3114
3115
3116 template<typename T> struct greaterf : public binary_function<bool, const T&> {
3117  inline bool operator ()(const T& x, const T& y) const {
3118   return x > y;
3119  }
3120 };
3121 template<typename I> struct indirect_greaterf : public binary_function<bool, I> {
3122  inline bool operator ()(I x, I y) const {
3123   return *x > *y;
3124  }
3125 };
3126 # 131 "/home/schultz/c/schultz/language/function"
3127 template<typename T> struct sumf : public binary_function<typeof(((T)(*((T*)(0)))) + ((T)(*((T*)(0))))), const T&, const T&> {
3128  inline typeof(((T)(*((T*)(0)))) + ((T)(*((T*)(0))))) operator ()(const T& x, const T& y) const {
3129   return x+y;
3130  }
3131 };
3132
3133
3134 template<typename T> struct addf : public binary_function<T&, T&, const T&> {
3135  inline T& operator ()(T& a, const T& b) const {return a+= b;}
3136 };
3137
3138
3139 template<typename T> struct sizef : public unary_function<typeof(((T)(*((T*)(0)))).size()), const T&> {
3140  inline typeof(((T)(*((T*)(0)))).size()) operator ()(const T& A) const {return A.size();}
3141 };
3142 # 24 "/home/schultz/c/schultz/schultz" 2
3143 # 1 "/home/schultz/c/schultz/language/base" 1
3144 # 14 "/home/schultz/c/schultz/language/base"
3145 template<typename T> inline typeof(((T)(*((T*)(0)))) * ((T)(*((T*)(0))))) square(const T& x) {
3146  return x*x;
3147 }
3148
3149
3150
3151
3152
3153
3154
3155 template<typename T> inline T abs(const T& x) {
3156  return x < 0 ? -x : x;
3157 }
3158 # 47 "/home/schultz/c/schultz/language/base"
3159 namespace __schultz {
3160
3161  template<bool> struct swap_meta {
3162   template<typename T> static inline void swap(T& a, T& b) {
3163    T c = a;
3164    a = b;
3165    b = c;
3166   }
3167  };
3168
3169
3170  template<> struct swap_meta<true> {
3171   template<typename T> static inline void swap(T& a, T& b) {
3172    T::swap(a, b);
3173   }
3174  };
3175 }
3176
3177
3178 template<typename T> inline void swap(T& a, T& b) {
3179  __schultz::swap_meta<type_traits<T>::special_swap>::swap(a, b);
3180 }
3181
3182
3183 template<typename I, typename J> J swap(I a, I b, J c) {
3184  for (; a != b; ++a, ++c) swap(*a, *c);
3185  return c;
3186 }
3187 # 91 "/home/schultz/c/schultz/language/base"
3188 namespace __schultz {
3189
3190  template<bool> struct advance_meta {
3191   template<typename I> static I& advance(I& i, nat n) {
3192    for (nat __repeat = n; __repeat != 0; --__repeat) ++i;
3193    return i;
3194   }
3195  };
3196
3197
3198  template<> struct advance_meta<true> {
3199   template<typename I> static inline I& advance(I& i, nat n) {
3200    return i+= n;
3201   }
3202  };
3203 }
3204
3205
3206 template<typename I> inline I& advance(I& i, nat n) {
3207  return __schultz::advance_meta<iterator_traits<I>::random_access>::advance(i, n);
3208 }
3209 # 127 "/home/schultz/c/schultz/language/base"
3210 namespace __schultz {
3211
3212  template<bool> struct step_back_meta {
3213   template<typename I> static I& step_back(I& i, nat n) {
3214    for (nat __repeat = n; __repeat != 0; --__repeat) --i;
3215    return i;
3216   }
3217  };
3218
3219
3220  template<> struct step_back_meta<true> {
3221   template<typename I> static inline I& step_back(I& i, nat n) {
3222    return i-= n;
3223   }
3224  };
3225 }
3226
3227
3228 template<typename I> inline I& step_back(I& i, nat n) {
3229  return __schultz::step_back_meta<iterator_traits<I>::random_access>::step_back(i, n);
3230 }
3231 # 164 "/home/schultz/c/schultz/language/base"
3232 namespace __schultz {
3233
3234  template<bool> struct distance_meta {
3235   template<typename I> static nat distance(I a, I b) {
3236    nat n = 0;
3237    for (; a != b; ++a, ++n);
3238    return n;
3239   }
3240  };
3241
3242
3243  template<> struct distance_meta<true> {
3244   template<typename I> static inline nat distance(I a, I b) {
3245    ;
3246    return b-a;
3247   }
3248  };
3249 }
3250
3251
3252 template<typename I> inline nat distance(I a, I b) {
3253  return __schultz::distance_meta<iterator_traits<I>::random_access>::distance(a, b);
3254 }
3255 # 200 "/home/schultz/c/schultz/language/base"
3256 namespace __schultz {
3257
3258  template<bool> struct reverse_meta {
3259   template<typename I> static void reverse(I a, I b) {
3260    while (a != b) {
3261     --b;
3262     if (a == b) break;
3263     swap(*a, *b);
3264     ++a;
3265    }
3266   }
3267  };
3268
3269
3270  template<> struct reverse_meta<true> {
3271   template<typename I> static void reverse(I a, I b) {
3272    ;
3273    if (a != b) for (--b; a < b; ++a, --b) swap(*a, *b);
3274   }
3275  };
3276 }
3277
3278
3279 template<typename I> inline void reverse(I a, I b) {
3280  __schultz::reverse_meta<iterator_traits<I>::random_access>::reverse(a, b);
3281 }
3282 # 243 "/home/schultz/c/schultz/language/base"
3283 template<typename T, typename O> inline const T& min(const T& x, const T& y, O o) {
3284  return o(x, y) ? x : y;
3285 }
3286 template<typename T> inline const T& min(const T& x, const T& y) {
3287  return min(x, y, lessf<T>());
3288 }
3289 template<typename T, typename O> inline T& min(T& x, T& y, O o) {
3290  return o(x, y) ? x : y;
3291 }
3292 template<typename T> inline T& min(T& x, T& y) {
3293  return min(x, y, lessf<T>());
3294 }
3295
3296
3297 template<typename T, typename O> inline const T& max(const T& x, const T& y, O o) {
3298  return o(y, x) ? x : y;
3299 }
3300 template<typename T> inline const T& max(const T& x, const T& y) {
3301  return max(x, y, lessf<T>());
3302 }
3303 template<typename T, typename O> inline T& max(T& x, T& y, O o) {
3304  return o(y, x) ? x : y;
3305 }
3306 template<typename T> inline T& max(T& x, T& y) {
3307  return max(x, y, lessf<T>());
3308 }
3309 # 282 "/home/schultz/c/schultz/language/base"
3310 template<typename I, typename T, typename E> I find(I a, I b, const T& x, E e) {
3311  for (; a != b; ++a) if (e(*a, x)) return a;
3312  return a;
3313 }
3314 template<typename I, typename T> inline I find(I a, I b, const T& x) {
3315  return find(a, b, x, equalf<typename iterator_traits< I >::value_type>());
3316 }
3317 # 311 "/home/schultz/c/schultz/language/base"
3318 template<typename I, typename J, typename E> inline bool equal(I a, I b, J c, E e) {
3319  for (; a != b; ++a, ++c) if (!e(*a, *c)) return false;
3320  return true;
3321 }
3322 template<typename I, typename J> inline bool equal(I a, I b, J c) {
3323  return equal(a, b, c, equalf<typename iterator_traits< I >::value_type>());
3324 }
3325
3326
3327 template<typename I, typename J, typename E> inline bool equal(I a, I b, J c, J d, E e) {
3328  return (b-a == d-c) && equal(a, b, c, e);
3329 }
3330 template<typename I, typename J> inline bool equal(I a, I b, J c, J d) {
3331  return equal(a, b, c, d, equalf<typename iterator_traits< I >::value_type>());
3332 }
3333 # 350 "/home/schultz/c/schultz/language/base"
3334 template<typename I, typename J, typename O> bool lex_less(I a, I b, J c, O o) {
3335  typedef typename iterator_traits< I >::value_type T;
3336  for (; a != b; ++a, ++c) {
3337   const T& x = *a;
3338   const T& y = *c;
3339   if (o(x, y)) return true;
3340   else if (o(y, x)) return false;
3341  }
3342  return false;
3343 }
3344 template<typename I, typename J> inline bool lex_less(I a, I b, J c) {
3345  return lex_less(a, b, c, lessf<typename iterator_traits< I >::value_type>());
3346 }
3347
3348
3349 template<> inline bool lex_less(const unsigned char* a, const unsigned char* b, const unsigned char* c, lessf<unsigned char>) {
3350  ;
3351  return memcmp(a, c, b-a) < 0;
3352 }
3353 template<> inline bool lex_less(const char* a, const char* b, const char* c, lessf<char>) {
3354  ;
3355  return memcmp(a, c, b-a) < 0;
3356 }
3357 template<> inline bool lex_less(const unsigned char* a, const unsigned char* b, const unsigned char* c, greaterf<unsigned char>) {
3358  ;
3359  return memcmp(a, c, b-a) > 0;
3360 }
3361 template<> inline bool lex_less(const char* a, const char* b, const char* c, greaterf<char>) {
3362  ;
3363  return memcmp(a, c, b-a) > 0;
3364 }
3365
3366
3367 template<typename I, typename J, typename O> bool lex_less(I a, I b, J c, J d, O o) {
3368  typedef typename iterator_traits< I >::value_type T;
3369  for (; a != b && c != d; ++a, ++c) {
3370   const T& x = *a;
3371   const T& y = *c;
3372   if (o(x, y)) return true;
3373   else if (o(y, x)) return false;
3374  }
3375  return c != d;
3376 }
3377 template<typename I, typename J> inline bool lex_less(I a, I b, J c, J d) {
3378  return lex_less(a, b, c, d, lessf<typename iterator_traits< I >::value_type>());
3379 }
3380
3381
3382 template<> inline bool lex_less(const unsigned char* a, const unsigned char* b, const unsigned char* c, const unsigned char* d, lessf<unsigned char>) {
3383  ;
3384  nat m = b-a, n = d-c;
3385  int r = memcmp(a, c, min(m, n));
3386  return r < 0 || (r == 0 && m < n);
3387 }
3388 template<> inline bool lex_less(const char* a, const char* b, const char* c, const char* d, lessf<char>) {
3389  ;
3390  nat m = b-a, n = d-c;
3391  int r = memcmp(a, c, min(m, n));
3392  return r < 0 || (r == 0 && m < n);
3393 }
3394 template<> inline bool lex_less(const unsigned char* a, const unsigned char* b, const unsigned char* c, const unsigned char* d, greaterf<unsigned char>) {
3395  ;
3396  nat m = b-a, n = d-c;
3397  int r = memcmp(a, c, min(m, n));
3398  return r > 0 || (r == 0 && m < n);
3399 }
3400 template<> inline bool lex_less(const char* a, const char* b, const char* c, const char* d, greaterf<char>) {
3401  ;
3402  nat m = b-a, n = d-c;
3403  int r = memcmp(a, c, min(m, n));
3404  return r > 0 || (r == 0 && m < n);
3405 }
3406 # 437 "/home/schultz/c/schultz/language/base"
3407 template<typename I, typename O> I minimum(I a, I b, O o) {
3408  ;
3409  I m = a;
3410  while (++a != b) if (o(*a, *m)) m = a;
3411  return m;
3412 }
3413 template<typename I> inline I minimum(I a, I b) {
3414  return minimum(a, b, lessf<typename iterator_traits< I >::value_type>());
3415 }
3416
3417
3418 template<typename I, typename O> I maximum(I a, I b, O o) {
3419  ;
3420  I m = a;
3421  while (++a != b) if (o(*m, *a)) m = a;
3422  return m;
3423 }
3424 template<typename I> inline I maximum(I a, I b) {
3425  return maximum(a, b, lessf<typename iterator_traits< I >::value_type>());
3426 }
3427 # 467 "/home/schultz/c/schultz/language/base"
3428 template<typename I, typename O> bool is_sorted(I a, I b, O o) {
3429  if (a == b) return true;
3430  else for (;;) {
3431   I i = a;
3432   ++a;
3433   if (a == b) return true;
3434   else if (o(*a, *i)) return false;
3435  }
3436  ;
3437 }
3438 template<typename I> inline bool is_sorted(I a, I b) {
3439  return is_sorted(a, b, lessf<typename iterator_traits< I >::value_type>());
3440 }
3441 # 492 "/home/schultz/c/schultz/language/base"
3442 template<typename I, typename F> typename iterator_traits< I >::value_type foldl(I a, I b, F f, const typename iterator_traits< I >::value_type& e) {
3443  typename iterator_traits< I >::value_type r = e;
3444  for (; a != b; ++a) f(r, *a);
3445  return r;
3446 }
3447 # 507 "/home/schultz/c/schultz/language/base"
3448 namespace __schultz {
3449
3450  template<bool> struct sum_meta {
3451   template<typename T> struct return_type {
3452    typedef typeof(((T)(*((T*)(0)))) + ((T)(*((T*)(0))))) value;
3453   };
3454   template<typename T> static inline typeof(((T)(*((T*)(0)))) + ((T)(*((T*)(0))))) sum(const T& a, const T& b) {
3455    return a+b;
3456   }
3457  };
3458
3459
3460  template<> struct sum_meta<true> {
3461   template<typename I> struct return_type {
3462    typedef typename iterator_traits< I >::value_type value;
3463   };
3464   template<typename I> static inline typename iterator_traits< I >::value_type sum(I a, I b) {
3465    typename iterator_traits< I >::value_type s = 0;
3466    for (; a != b; ++a) s+= *a;
3467    return s;
3468   }
3469  };
3470 }
3471
3472 template<typename T> inline typename __schultz::sum_meta<type_traits<T>::iterator>::template return_type<T>::value sum(const T& a, const T& b) {
3473  return __schultz::sum_meta<type_traits<T>::iterator>::sum(a, b);
3474 }
3475 # 548 "/home/schultz/c/schultz/language/base"
3476 template<typename I, typename F> void map(I a, I b, F f) {
3477  for (; a != b; ++a) f(*a);
3478 }
3479
3480
3481 template<typename I, typename J, typename F> J map(I a, I b, J c, F f) {
3482  for (; a != b; ++a, ++c) *c = f(*a);
3483  return c;
3484 }
3485 # 25 "/home/schultz/c/schultz/schultz" 2
3486 # 1 "/home/schultz/c/schultz/language/pair" 1
3487
3488
3489
3490
3491
3492
3493
3494 namespace __schultz {
3495
3496
3497
3498
3499
3500
3501  template<typename T, typename U> struct pair_base {
3502
3503
3504
3505
3506
3507
3508
3509   T first;
3510   U second;
3511 # 33 "/home/schultz/c/schultz/language/pair"
3512   static inline void swap(pair_base<T, U>& p, pair_base<T, U>& q) {
3513    schultz::swap(p.first, q.first);
3514    schultz::swap(p.second, q.second);
3515   }
3516 # 45 "/home/schultz/c/schultz/language/pair"
3517   inline bool operator ==(const pair_base<T, U>& p) const {
3518    return first == p.first && second == p.second;
3519   }
3520   inline bool operator !=(const pair_base<T, U>& p) const {
3521    return !((*this) == p);
3522   }
3523 # 62 "/home/schultz/c/schultz/language/pair"
3524   inline bool operator <(const pair_base<T, U>& p) const {
3525    return first < p.first || (first == p.first && second < p.second);
3526   }
3527   inline bool operator >(const pair_base<T, U>& p) const {
3528    return p < (*this);
3529   }
3530   inline bool operator <=(const pair_base<T, U>& p) const {
3531    return !(p < (*this));
3532   }
3533   inline bool operator >=(const pair_base<T, U>& p) const {
3534    return !((*this) < p);
3535   }
3536 # 87 "/home/schultz/c/schultz/language/pair"
3537   inline pair_base() {}
3538   inline pair_base(const T& f, const U& s) : first(f), second(s) {}
3539 # 104 "/home/schultz/c/schultz/language/pair"
3540   struct type_traits : public default_type_traits< pair_base<T, U> > {
3541    enum {
3542     trivial = schultz::type_traits<T>::trivial && schultz::type_traits<U>::trivial,
3543     trivial_constructor = schultz::type_traits<T>::trivial_constructor && schultz::type_traits<U>::trivial_constructor,
3544     trivial_copy = schultz::type_traits<T>::trivial_copy && schultz::type_traits<U>::trivial_copy,
3545     trivial_destructor = schultz::type_traits<T>::trivial_destructor && schultz::type_traits<U>::trivial_destructor,
3546
3547     special_swap = schultz::type_traits<T>::special_swap || schultz::type_traits<U>::special_swap
3548    };
3549   };
3550  };
3551 }
3552 # 132 "/home/schultz/c/schultz/language/pair"
3553 template<typename T, typename U = T> struct pair : public __schultz::pair_base<T, U> {
3554
3555  inline pair() {}
3556  inline pair(const T& f, const U& s) : __schultz::pair_base<T, U>::pair_base(f, s) {}
3557 };
3558
3559
3560 template<typename T> struct pair<T, T> : public __schultz::pair_base<T, T> {
3561
3562  using __schultz::pair_base<T, T>::first;
3563  using __schultz::pair_base<T, T>::second;
3564 # 156 "/home/schultz/c/schultz/language/pair"
3565  inline const T& operator [](nat i) const {
3566   ;
3567   return i == 0 ? first : second;
3568  }
3569  inline T& operator [](nat i) {
3570   ;
3571   return i == 0 ? first : second;
3572  }
3573
3574
3575  inline pair() {}
3576  inline pair(const T& f, const T& s) : __schultz::pair_base<T, T>::pair_base(f, s) {}
3577 };
3578
3579
3580
3581
3582
3583
3584
3585 template<typename T, typename U> inline pair<T, U> make_pair(const T& f, const U& s) {
3586  return pair<T, U>(f, s);
3587 }
3588 # 26 "/home/schultz/c/schultz/schultz" 2
3589 # 1 "/home/schultz/c/schultz/language/range" 1
3590 # 14 "/home/schultz/c/schultz/language/range"
3591 template<typename I> struct range {
3592  private:
3593
3594
3595
3596
3597
3598
3599
3600   I _a, _b;
3601
3602  public:
3603 # 34 "/home/schultz/c/schultz/language/range"
3604   inline nat size() const {return _b-_a;}
3605 # 43 "/home/schultz/c/schultz/language/range"
3606   static inline void swap(range<I>& r, range<I>& s) {
3607    schultz::swap(r._a, s._a);
3608    schultz::swap(r._b, s._b);
3609   }
3610 # 59 "/home/schultz/c/schultz/language/range"
3611   inline bool operator ==(const range<I>& r) const {
3612    return _a == r._a && _b == r._b;
3613   }
3614   inline bool operator !=(const range<I>& r) const {
3615    return !((*this) == r);
3616   }
3617 # 83 "/home/schultz/c/schultz/language/range"
3618   typedef I const_iterator;
3619   typedef I iterator;
3620   inline I begin() const {return _a;}
3621   inline I end() const {return _b;}
3622 # 95 "/home/schultz/c/schultz/language/range"
3623   inline range() {}
3624   inline range(I a, I b) : _a(a), _b(b) {}
3625 # 108 "/home/schultz/c/schultz/language/range"
3626   struct type_traits : public default_type_traits< range<I> > {
3627    enum {
3628     trivial = true,
3629
3630     special_swap = schultz::type_traits<I>::special_swap
3631    };
3632   };
3633 };
3634
3635
3636
3637
3638
3639
3640
3641 template<typename I> inline range<I> make_range(I a, I b) {
3642  return range<I>(a, b);
3643 }
3644 # 27 "/home/schultz/c/schultz/schultz" 2
3645 # 1 "/home/schultz/c/schultz/language/mrange" 1
3646 # 25 "/home/schultz/c/schultz/language/mrange"
3647 template<typename I, typename F> struct mrange {
3648  private:
3649
3650
3651
3652
3653
3654
3655
3656   I _a, _b;
3657
3658  public:
3659
3660
3661
3662
3663
3664
3665
3666   inline nat size() const {return _b-_a;}
3667
3668
3669
3670
3671
3672
3673
3674   static inline void swap(mrange<I, F>& M, mrange<I, F>& N) {
3675    schultz::swap(M._a, N._a);
3676    schultz::swap(M._b, N._b);
3677   }
3678 # 69 "/home/schultz/c/schultz/language/mrange"
3679   inline bool operator ==(const mrange<I, F>& M) const {
3680    return _a == M._a && _b == M._b;
3681   }
3682   inline bool operator !=(const mrange<I, F>& M) const {
3683    return !((*this) == M);
3684   }
3685 # 106 "/home/schultz/c/schultz/language/mrange"
3686   struct const_iterator {
3687
3688    I i;
3689
3690
3691    typename F::return_type operator *() const {
3692     return F()(*i);
3693    }
3694    typename F::return_type operator [](nat idx) const {
3695     return F()(*(i+idx));
3696    }
3697
3698
3699    static inline void swap(const_iterator& i, const_iterator& j) {
3700     schultz::swap(i.i, j.i);
3701    }
3702
3703
3704    inline bool operator ==(const_iterator it) const {return i == it.i;}
3705    inline bool operator !=(const_iterator it) const {return i != it.i;}
3706
3707
3708    inline bool operator <(const_iterator it) const {return i < it.i;}
3709    inline bool operator >(const_iterator it) const {return i > it.i;}
3710    inline bool operator <=(const_iterator it) const {return i <= it.i;}
3711    inline bool operator >=(const_iterator it) const {return i >= it.i;}
3712
3713
3714    inline const_iterator& operator ++() {
3715     ++i;
3716     return (*this);
3717    }
3718    inline const_iterator operator ++(int) {
3719     const_iterator r = i;
3720     ++(*this);
3721     return r;
3722    }
3723    inline const_iterator& operator --() {
3724     --i;
3725     return (*this);
3726    }
3727    inline const_iterator operator --(int) {
3728     const_iterator r = i;
3729     --(*this);
3730     return r;
3731    }
3732    inline const_iterator& operator +=(nat n) {
3733     i+= n;
3734     return (*this);
3735    }
3736    inline const_iterator operator +(nat n) const {return const_iterator(i+n);}
3737    inline const_iterator& operator -=(nat n) {
3738     i-= n;
3739     return (*this);
3740    }
3741    inline const_iterator operator -(nat n) const {return const_iterator(i-n);}
3742    inline nat operator -(const_iterator it) {return i-it.i;}
3743
3744
3745    inline const_iterator() {}
3746    explicit inline const_iterator(I it) : i(it) {}
3747
3748
3749    struct iterator_traits : public default_iterator_traits<const_iterator> {
3750     enum {
3751      constant = true,
3752      persistent = false,
3753      bidirectional = schultz::iterator_traits<I>::bidirectional,
3754      random_access = schultz::iterator_traits<I>::random_access
3755     };
3756
3757     typedef typename F::return_type value_type;
3758    };
3759
3760
3761    struct type_traits : public iterator_type_traits<const_iterator> {
3762     enum {
3763      special_swap = schultz::type_traits<I>::special_swap
3764     };
3765    };
3766   };
3767
3768
3769   typedef const_iterator iterator;
3770 # 198 "/home/schultz/c/schultz/language/mrange"
3771   inline const_iterator begin() const {return const_iterator(_a);}
3772   inline const_iterator end() const {return const_iterator(_b);}
3773 # 208 "/home/schultz/c/schultz/language/mrange"
3774   inline mrange() {}
3775   inline mrange(I a, I b) : _a(a), _b(b) {}
3776 # 218 "/home/schultz/c/schultz/language/mrange"
3777   struct type_traits : public default_type_traits< mrange<I, F> > {
3778    enum {
3779     trivial = true,
3780
3781     special_swap = schultz::type_traits<I>::special_swap
3782    };
3783   };
3784 };
3785 # 28 "/home/schultz/c/schultz/schultz" 2
3786 # 1 "/home/schultz/c/schultz/language/interval" 1
3787
3788
3789
3790
3791
3792
3793
3794 namespace __schultz {
3795
3796
3797
3798
3799
3800
3801  template<typename T> struct interval_base {
3802 # 24 "/home/schultz/c/schultz/language/interval"
3803   T left, right;
3804 # 33 "/home/schultz/c/schultz/language/interval"
3805   inline typeof(((T)(*((T*)(0)))) - ((T)(*((T*)(0))))) size() const {
3806    return right-left;
3807   }
3808
3809
3810
3811
3812
3813
3814
3815   static inline void swap(interval_base<T>& I, interval_base<T>& J) {
3816    schultz::swap(I.left, J.left);
3817    schultz::swap(I.right, J.right);
3818   }
3819 # 57 "/home/schultz/c/schultz/language/interval"
3820   inline bool operator ==(const interval_base<T>& I) const {
3821    return left == I.left && right == I.right;
3822   }
3823   inline bool operator !=(const interval_base<T>& I) const {
3824    return !((*this) == I);
3825   }
3826 # 78 "/home/schultz/c/schultz/language/interval"
3827   inline bool contains(const T& x) const {
3828    return left <= x && x < right;
3829   }
3830   inline bool contains(const interval_base<T>& I) const {
3831    return left <= I.left && I.right <= right;
3832   }
3833 # 93 "/home/schultz/c/schultz/language/interval"
3834   inline interval_base() {}
3835   inline interval_base(const T& l, const T& r) : left(l), right(r) {}
3836 # 107 "/home/schultz/c/schultz/language/interval"
3837   struct type_traits : public default_type_traits< interval_base<T> > {
3838    enum {
3839     trivial = schultz::type_traits<T>::trivial,
3840     trivial_constructor = schultz::type_traits<T>::trivial_constructor,
3841     trivial_copy = schultz::type_traits<T>::trivial_copy,
3842     trivial_destructor = schultz::type_traits<T>::trivial_destructor,
3843
3844     special_swap = schultz::type_traits<T>::special_swap
3845    };
3846   };
3847  };
3848 }
3849 # 181 "/home/schultz/c/schultz/language/interval"
3850 template<typename T, bool B = type_traits<T>::trivial> struct interval : public __schultz::interval_base<T> {
3851
3852  using __schultz::interval_base<T>::left;
3853  using __schultz::interval_base<T>::right;
3854
3855
3856  using __schultz::interval_base<T>::size;
3857 # 202 "/home/schultz/c/schultz/language/interval"
3858  struct const_iterator {
3859
3860   const interval<T, B>* I;
3861
3862
3863   nat i;
3864
3865
3866   inline T operator *() const {
3867    ;
3868    return I->left + i;
3869   }
3870   inline T operator [](nat k) const {
3871    ;
3872    return I->left + i + k;
3873   }
3874
3875
3876   inline bool operator ==(const_iterator it) const {return i == it.i;}
3877   inline bool operator !=(const_iterator it) const {return i != it.i;}
3878
3879
3880   inline bool operator <(const_iterator it) const {return i < it.i;}
3881   inline bool operator >(const_iterator it) const {return i > it.i;}
3882   inline bool operator <=(const_iterator it) const {return i <= it.i;}
3883   inline bool operator >=(const_iterator it) const {return i >= it.i;}
3884
3885
3886   inline const_iterator& operator ++() {++i; return (*this);}
3887   inline const_iterator operator ++(int) {
3888    const_iterator r = (*this);
3889    ++i;
3890    return r;
3891   }
3892   inline const_iterator& operator --() {
3893    ;
3894    --i;
3895    return (*this);
3896   }
3897   inline const_iterator operator --(int) {
3898    ;
3899    const_iterator r = (*this);
3900    --i;
3901    return r;
3902   }
3903   inline const_iterator& operator +=(nat x) {i+= x; return (*this);}
3904   inline const_iterator operator +(nat x) const {
3905    return const_iterator(I, i+x);
3906   }
3907   inline const_iterator& operator -=(nat x) {
3908    ;
3909    i-= x;
3910    return (*this);
3911   }
3912   inline const_iterator operator -(nat x) const {
3913    ;
3914    return const_iterator(I, i-x);
3915   }
3916   inline nat operator -(const_iterator it) const {
3917    ;
3918    return i - it.i;
3919   }
3920
3921
3922   inline const_iterator() {}
3923   inline const_iterator(const interval<T, B>* p, nat idx) : I(p), i(idx) {}
3924
3925
3926   struct iterator_traits : public default_iterator_traits<const_iterator> {
3927    enum {
3928     constant = true,
3929     persistent = false,
3930     bidirectional = true,
3931     random_access = true
3932    };
3933
3934    typedef T value_type;
3935   };
3936
3937
3938   struct type_traits : public iterator_type_traits<const_iterator> {};
3939  };
3940
3941
3942  typedef const_iterator iterator;
3943 # 295 "/home/schultz/c/schultz/language/interval"
3944  inline const_iterator begin() const {return const_iterator(this, 0);}
3945  inline const_iterator end() const {return const_iterator(this, size());}
3946
3947
3948  inline interval() {}
3949  inline interval(const T& l, const T& r) : __schultz::interval_base<T>::interval_base(l, r) {}
3950 };
3951
3952
3953 template<typename T> struct interval<T, true> : public __schultz::interval_base<T> {
3954
3955  using __schultz::interval_base<T>::left;
3956  using __schultz::interval_base<T>::right;
3957 # 322 "/home/schultz/c/schultz/language/interval"
3958  struct const_iterator {
3959
3960   T e;
3961
3962
3963   inline const T& operator *() const {return e;}
3964   inline const T* operator ->() const {return &e;}
3965   inline T operator [](nat i) const {return e+i;}
3966
3967
3968   inline bool operator ==(const_iterator i) const {return e == i.e;}
3969   inline bool operator !=(const_iterator i) const {return e != i.e;}
3970
3971
3972   inline bool operator <(const_iterator i) const {return e < i.e;}
3973   inline bool operator >(const_iterator i) const {return e > i.e;}
3974   inline bool operator <=(const_iterator i) const {return e <= i.e;}
3975   inline bool operator >=(const_iterator i) const {return e >= i.e;}
3976
3977
3978   inline const_iterator& operator ++() {++e; return (*this);}
3979   inline const_iterator operator ++(int) {
3980    const_iterator r = (*this);
3981    ++e;
3982    return r;
3983   }
3984   inline const_iterator& operator --() {--e; return (*this);}
3985   inline const_iterator operator --(int) {
3986    const_iterator r = (*this);
3987    --e;
3988    return r;
3989   }
3990   inline const_iterator& operator +=(nat i) {e+= i; return (*this);}
3991   inline const_iterator operator +(nat i) const {return const_iterator(e+i);}
3992   inline const_iterator& operator -=(nat i) {e-= i; return (*this);}
3993   inline const_iterator operator -(nat i) const {return const_iterator(e-i);}
3994   inline nat operator -(const_iterator i) const {
3995    ;
3996    return e - i.e;
3997   }
3998
3999
4000   inline const_iterator() {}
4001   explicit inline const_iterator(T x) : e(x) {}
4002
4003
4004   struct iterator_traits : public default_iterator_traits<const_iterator> {
4005    enum {
4006     constant = true,
4007     persistent = false,
4008     bidirectional = schultz::type_traits<T>::fast_decrement,
4009     random_access = schultz::type_traits<T>::fast_random_increment
4010    };
4011
4012    typedef T value_type;
4013   };
4014
4015
4016   struct type_traits : public iterator_type_traits<const_iterator> {};
4017  };
4018
4019
4020  typedef const_iterator iterator;
4021 # 393 "/home/schultz/c/schultz/language/interval"
4022  inline const_iterator begin() const {return const_iterator(left);}
4023  inline const_iterator end() const {return const_iterator(right);}
4024
4025
4026  inline interval() {}
4027  inline interval(const T& l, const T& r) : __schultz::interval_base<T>::interval_base(l, r) {}
4028 };
4029 # 409 "/home/schultz/c/schultz/language/interval"
4030 typedef interval<nat> _;
4031 # 423 "/home/schultz/c/schultz/language/interval"
4032 template<typename T, bool B> inline interval<T, B> make_interval(const T& l, const T& r, bool_type<B>) {
4033  return interval<T, B>(l, r);
4034 }
4035 template<typename T> inline interval<T> make_interval(const T& l, const T& r) {
4036  return interval<T>(l, r);
4037 }
4038 # 29 "/home/schultz/c/schultz/schultz" 2
4039 # 1 "/home/schultz/c/schultz/language/memory" 1
4040 # 25 "/home/schultz/c/schultz/language/memory"
4041 }
4042 template<typename T> inline void* operator new(size_t, T* p) {return p;}
4043 namespace schultz {
4044 # 51 "/home/schultz/c/schultz/language/memory"
4045 namespace __schultz {
4046
4047  template<bool, bool> struct copy_meta {
4048   template<typename I, typename J> static J copy(I a, I b, J c) {
4049    for (; a != b; ++a, ++c) *c = *a;
4050    return c;
4051   }
4052  };
4053
4054
4055  template<> struct copy_meta<true, false> {
4056   template<typename I, typename J> static J copy(I a, I b, J c) {
4057    for (nat n = b-a; n != 0; --n, ++a, ++c) *c = *a;
4058    return c;
4059   }
4060  };
4061
4062
4063  template<> struct copy_meta<true, true> {
4064   template<typename T> static inline T* copy(const T* a, const T* b, T* c) {
4065    ;
4066    nat n = b-a;
4067    memcpy(c, a, n*sizeof(T));
4068    return c+n;
4069   }
4070  };
4071 }
4072
4073
4074 template<typename I, typename J> inline J copy(I a, I b, J c) {
4075  typedef typename iterator_traits< I >::value_type T;
4076  enum {fast = ((type_equality< I, T* >::value) || (type_equality< I, const T* >::value)) && (type_equality< J, T* >::value)};
4077  return __schultz::copy_meta<iterator_traits<I>::random_access, fast && type_traits<T>::trivial_copy>::copy(a, b, c);
4078 }
4079 # 115 "/home/schultz/c/schultz/language/memory"
4080 namespace __schultz {
4081
4082  template<bool, bool> struct shift_left_meta {
4083   template<typename I> static I shift_left(I a, I b, nat n) {
4084    I c = a;
4085    step_back(c, n);
4086    for (; a != b; ++a, ++c) swap(*c, *a);
4087    return c;
4088   }
4089  };
4090
4091
4092  template<> struct shift_left_meta<true, false> {
4093   template<typename I> static I shift_left(I a, I b, nat n) {
4094    I c = a;
4095    step_back(c, n);
4096    for (; a != b; ++a, ++c) *c = *a;
4097    return c;
4098   }
4099  };
4100
4101
4102  template<> struct shift_left_meta<true, true> {
4103   template<typename T> static inline T* shift_left(T* a, T* b, nat n) {
4104    ;
4105    memcpy(a-n, a, (b-a)*sizeof(T));
4106    return b-n;
4107   }
4108  };
4109 }
4110
4111
4112 template<typename I> inline I shift_left(I a, I b, nat n) {
4113  typedef typename iterator_traits< I >::value_type T;
4114  return __schultz::shift_left_meta<!type_traits<T>::special_swap, (type_equality< I, T* >::value) && type_traits<T>::trivial_copy>::shift_left(a, b, n);
4115 }
4116 # 179 "/home/schultz/c/schultz/language/memory"
4117 namespace __schultz {
4118
4119  template<bool, bool> struct shift_right_meta {
4120   template<typename I> static I shift_right(I a, I b, nat n) {
4121    I c = b;
4122    advance(c, n);
4123    while (b != a) {
4124     --b;
4125     --c;
4126     swap(*b, *c);
4127    }
4128    return c;
4129   }
4130  };
4131
4132
4133  template<> struct shift_right_meta<true, false> {
4134   template<typename I> static I shift_right(I a, I b, nat n) {
4135    I c = b;
4136    advance(c, n);
4137    while (b != a) {
4138     --b;
4139     --c;
4140     *c = *b;
4141    }
4142    return c;
4143   }
4144  };
4145
4146
4147  template<> struct shift_right_meta<true, true> {
4148   template<typename T> static inline T* shift_right(T* a, T* b, nat n) {
4149    ;
4150    memmove(a+n, a, (b-a)*sizeof(T));
4151    return a+n;
4152   }
4153  };
4154 }
4155
4156
4157 template<typename I> inline I shift_right(I a, I b, nat n) {
4158  typedef typename iterator_traits< I >::value_type T;
4159  return __schultz::shift_right_meta<!type_traits<T>::special_swap, (type_equality< I, T* >::value) && type_traits<T>::trivial_copy>::shift_right(a, b, n);
4160 }
4161 # 234 "/home/schultz/c/schultz/language/memory"
4162 namespace __schultz {
4163
4164  template<bool> struct fill_meta {
4165   template<typename I, typename T> static void fill(I a, I b, const T& x) {
4166    for (; a != b; ++a) *a = x;
4167   }
4168  };
4169
4170
4171  template<> struct fill_meta<true> {
4172   template<typename T> static inline void fill(T* a, T* b, const T& x) {
4173    ;
4174    memset(a, *(const unsigned char*)(&x), b-a);
4175   }
4176  };
4177 }
4178
4179
4180 template<typename I, typename T> inline void fill(I a, I b, const T& x) {
4181  enum {fast = (type_equality< I, T* >::value) && sizeof(T) == 1};
4182  __schultz::fill_meta<fast && type_traits<T>::trivial_copy>::fill(a, b, x);
4183 }
4184 # 300 "/home/schultz/c/schultz/language/memory"
4185 struct system_allocation {
4186
4187  static void* allocate(nat n) {
4188   if (n == 0) return 0;
4189   else {
4190    void* p = malloc(n);
4191    if (!(p)) {schultz::__schultz::requirement_failure("/home/schultz/c/schultz/language/memory", 306);};
4192    return p;
4193   }
4194  }
4195
4196
4197  static inline void deallocate(void* p, void* q) {
4198   ;
4199   if (p != q) free(p);
4200  }
4201
4202
4203  enum {reallocation = true};
4204  static void* reallocate(void* p, void* q, nat n) {
4205   ;
4206   if (p == q) return allocate(n);
4207   else if (n == 0) {
4208    deallocate(p, q);
4209    return 0;
4210   }
4211   else {
4212    void* a = realloc(p, n);
4213    if (!(a)) {schultz::__schultz::requirement_failure("/home/schultz/c/schultz/language/memory", 328);};
4214    return a;
4215   }
4216  }
4217 };
4218
4219
4220 typedef system_allocation default_allocation;
4221 # 367 "/home/schultz/c/schultz/language/memory"
4222 namespace __schultz {
4223  template<bool> struct construct_meta {
4224   template<typename T> static inline void construct(T& x) {
4225    new(&x) T;
4226   }
4227  };
4228
4229  template<> struct construct_meta<true> {
4230   template<typename T> static inline void construct(T& x) {}
4231  };
4232 }
4233 template<typename T> inline void construct(T& x) {
4234  __schultz::construct_meta<type_traits<T>::trivial_constructor>::construct(x);
4235 }
4236
4237
4238 namespace __schultz {
4239  template<bool> struct construct_meta1 {
4240   template<typename I> static void construct(I a, I b) {
4241    typedef typename iterator_traits< I >::value_type T;
4242    for (; a != b; ++a) new(&*a) T;
4243   }
4244  };
4245
4246  template<> struct construct_meta1<true> {
4247   template<typename I> static inline void construct(I a, I b) {}
4248  };
4249 }
4250 template<typename I> inline void construct(I a, I b) {
4251  typedef typename iterator_traits< I >::value_type T;
4252  __schultz::construct_meta1<type_traits<T>::trivial_constructor>::construct(a, b);
4253 }
4254
4255
4256 namespace __schultz {
4257  template<bool> struct construct_meta2 {
4258   template<typename I, typename J> static J construct(I a, I b, J c) {
4259    typedef typename iterator_traits< I >::value_type T;
4260    for (; a != b; ++a, ++c) new(&*c) T(*a);
4261    return c;
4262   }
4263  };
4264
4265  template<> struct construct_meta2<true> {
4266   template<typename I, typename J> static inline J construct(I a, I b, J c) {
4267    return copy(a, b, c);
4268   }
4269  };
4270 }
4271 template<typename I, typename J> inline J construct(I a, I b, J c) {
4272  typedef typename iterator_traits< I >::value_type T;
4273  return __schultz::construct_meta2<type_traits<T>::trivial_copy>::construct(a, b, c);
4274 }
4275 # 438 "/home/schultz/c/schultz/language/memory"
4276 namespace __schultz {
4277  template<bool> struct copy_construct_meta {
4278   template<typename T> static inline void copy_construct(T& x, const T& y) {
4279    new(&x) T(y);
4280   }
4281  };
4282
4283  template<> struct copy_construct_meta<true> {
4284   template<typename T> static inline void copy_construct(T& x, const T& y) {
4285    x = y;
4286   }
4287  };
4288 }
4289 template<typename T> inline void copy_construct(T& x, const T& y) {
4290  __schultz::copy_construct_meta<type_traits<T>::trivial_copy>::copy_construct(x, y);
4291 }
4292
4293
4294 namespace __schultz {
4295  template<bool> struct copy_construct_meta1 {
4296   template<typename I, typename T> static void copy_construct(I a, I b, const T& x) {
4297    for (; a != b; ++a) new(&*a) T(x);
4298   }
4299  };
4300
4301  template<> struct copy_construct_meta1<true> {
4302   template<typename I, typename T> static inline void copy_construct(I a, I b, const T& x) {
4303    fill(a, b, x);
4304   }
4305  };
4306 }
4307 template<typename I, typename T> inline void copy_construct(I a, I b, const T& x) {
4308  __schultz::copy_construct_meta1<type_traits<T>::trivial_copy>::copy_construct(a, b, x);
4309 }
4310 # 491 "/home/schultz/c/schultz/language/memory"
4311 namespace __schultz {
4312  template<bool> struct destruct_meta {
4313   template<typename T> static inline void destruct(T& x) {
4314    x.~T();
4315   }
4316  };
4317
4318  template<> struct destruct_meta<true> {
4319   template<typename T> static inline void destruct(T& x) {}
4320  };
4321 }
4322 template<typename T> inline void destruct(T& x) {
4323  __schultz::destruct_meta<type_traits<T>::trivial_destructor>::destruct(x);
4324 }
4325
4326
4327 namespace __schultz {
4328  template<bool> struct destruct_meta1 {
4329   template<typename I> static void destruct(I a, I b) {
4330    typedef typename iterator_traits< I >::value_type T;
4331    for (; a != b; ++a) a->~T();
4332   }
4333  };
4334
4335  template<> struct destruct_meta1<true> {
4336   template<typename I> static inline void destruct(I a, I b) {}
4337  };
4338 }
4339 template<typename I> inline void destruct(I a, I b) {
4340  typedef typename iterator_traits< I >::value_type T;
4341  __schultz::destruct_meta1<type_traits<T>::trivial_destructor>::destruct(a, b);
4342 }
4343
4344 namespace __schultz {
4345 # 549 "/home/schultz/c/schultz/language/memory"
4346  template<typename T, typename A> inline T* allocate(nat n) {
4347   T* p = (T*)A::allocate(n*sizeof(T));
4348   construct(p, p+n);
4349   return p;
4350  }
4351  template<typename T, typename A> inline T* allocate(nat n, const T& x) {
4352   T* p = (T*)A::allocate(n*sizeof(T));
4353   copy_construct(p, p+n, x);
4354   return p;
4355  }
4356  template<typename T, typename A> inline T* allocate_1() {
4357   T* p = (T*)A::allocate(sizeof(T));
4358   construct(*p);
4359   return p;
4360  }
4361  template<typename T, typename A> inline T* allocate_1(const T& x) {
4362   T* p = (T*)A::allocate(sizeof(T));
4363   copy_construct(*p, x);
4364   return p;
4365  }
4366  template<typename T, typename A, typename I> inline T* allocate_copy(I a, I b) {
4367   T* p = (T*)A::allocate((b-a)*sizeof(T));
4368   construct(a, b, p);
4369   return p;
4370  }
4371  template<typename T, typename A, typename I> inline T* allocate_copy(I a, I b, nat n) {
4372   ;
4373   T* p = (T*)A::allocate(n*sizeof(T));
4374   construct(a, b, p);
4375   return p;
4376  }
4377 # 591 "/home/schultz/c/schultz/language/memory"
4378  template<typename T, typename A> inline void deallocate(T* p, T* q) {
4379   ;
4380   destruct(p, q);
4381   A::deallocate(p, q);
4382  }
4383  template<typename T, typename A> inline void deallocate_1(T* p) {
4384   ;
4385   destruct(*p);
4386   A::deallocate(p, p+1);
4387  }
4388 # 615 "/home/schultz/c/schultz/language/memory"
4389  template<bool> struct reallocate_meta {
4390
4391   template<typename T, typename A> static T* reallocate(T* p, T* q, nat n, A) {
4392    ;
4393    T* a = (T*)A::allocate(n*sizeof(T));
4394    nat m = q-p;
4395    if (m < n) {
4396     construct(a+m, a+n);
4397     memcpy(a, p, m*sizeof(T));
4398    }
4399    else {
4400     destruct(p+n, q);
4401     memcpy(a, p, n*sizeof(T));
4402    }
4403    A::deallocate(p, q);
4404    return a;
4405   }
4406  };
4407  template<> struct reallocate_meta<true> {
4408   template<typename T, typename A> static T* reallocate(T* p, T* q, nat n, A) {
4409    ;
4410    nat m = q-p;
4411    if (m < n) {
4412     p = (T*)A::reallocate(p, q, n*sizeof(T));
4413     construct(p+m, p+n);
4414     return p;
4415    }
4416    else {
4417     destruct(p+n, p+m);
4418     return (T*)A::reallocate(p, q, n*sizeof(T));
4419    }
4420   }
4421  };
4422  template<typename T, typename A> inline T* reallocate(T* p, T* q, nat n) {
4423   return reallocate_meta<A::reallocation>::reallocate(p, q, n, A());
4424  }
4425 }
4426 # 682 "/home/schultz/c/schultz/language/memory"
4427 template<typename T, typename A = default_allocation> struct allocation {
4428
4429  static inline T* allocate(nat n) {return __schultz::allocate<T, A>(n);}
4430  static inline T* allocate(nat n, const T& x) {return __schultz::allocate<T, A>(n, x);}
4431  static inline T* allocate_1() {return __schultz::allocate_1<T, A>();}
4432  static inline T* allocate_1(const T& x) {return __schultz::allocate_1<T, A>(x);}
4433  template<typename I> static inline T* allocate_copy(I a, I b) {
4434   return __schultz::allocate_copy<T, A>(a, b);
4435  }
4436  template<typename I> static inline T* allocate_copy(I a, I b, nat n) {
4437   return __schultz::allocate_copy<T, A>(a, b, n);
4438  }
4439
4440
4441  static inline void deallocate(T* p, T* q) {__schultz::deallocate<T, A>(p, q);}
4442  static inline void deallocate_1(T* p) {__schultz::deallocate_1<T, A>(p);}
4443
4444
4445  static inline T* reallocate(T* p, T* q, nat n) {return __schultz::reallocate<T, A>(p, q, n);}
4446 };
4447 # 30 "/home/schultz/c/schultz/schultz" 2
4448 }
4449 # 12 "src/circle" 2
4450 # 1 "/home/schultz/c/schultz/structure/vector2" 1
4451 # 11 "/home/schultz/c/schultz/structure/vector2"
4452 namespace schultz {
4453  template<typename T> struct vector2 {
4454
4455
4456
4457
4458
4459
4460
4461   T x, y;
4462 # 30 "/home/schultz/c/schultz/structure/vector2"
4463   inline const T& operator [](nat i) const {
4464    ;
4465    return i == 0 ? x : y;
4466   }
4467   inline T& operator [](nat i) {
4468    ;
4469    return i == 0 ? x : y;
4470   }
4471 # 46 "/home/schultz/c/schultz/structure/vector2"
4472   static inline void swap(vector2<T>& v, vector2<T>& u) {
4473    schultz::swap(v.x, u.x);
4474    schultz::swap(v.y, u.y);
4475   }
4476 # 58 "/home/schultz/c/schultz/structure/vector2"
4477   inline bool operator ==(const vector2<T>& v) const {
4478    return x == v.x && y == v.y;
4479   }
4480   inline bool operator !=(const vector2<T>& v) const {
4481    return !((*this) == v);
4482   }
4483 # 80 "/home/schultz/c/schultz/structure/vector2"
4484   inline vector2<T>& operator +=(const vector2<T>& v) {
4485    x+= v.x;
4486    y+= v.y;
4487    return (*this);
4488   }
4489   inline vector2<T> operator +(const vector2<T>& v) const {
4490    return vector2<T>(x+v.x, y+v.y);
4491   }
4492
4493
4494   inline vector2<T> operator -() const {
4495    return vector2<T>(-x, -y);
4496   }
4497
4498
4499   inline vector2<T>& operator -=(const vector2<T>& v) {
4500    x-= v.x;
4501    y-= v.y;
4502    return (*this);
4503   }
4504   inline vector2<T> operator -(const vector2<T>& v) const {
4505    return vector2<T>(x-v.x, y-v.y);
4506   }
4507
4508
4509   inline vector2<T>& operator *=(const T& a) {
4510    x*= a;
4511    y*= a;
4512    return (*this);
4513   }
4514   inline vector2<T> operator *(const T& a) const {
4515    return vector2<T>(x*a, y*a);
4516   }
4517   inline vector2<T>& operator /=(const T& a) {
4518    x/= a;
4519    y/= a;
4520    return (*this);
4521   }
4522   inline vector2<T> operator /(const T& a) const {
4523    return vector2<T>(x/a, y/a);
4524   }
4525
4526
4527   inline typeof(((typeof(((T)(*((T*)(0)))) * ((T)(*((T*)(0))))))(*((typeof(((T)(*((T*)(0)))) * ((T)(*((T*)(0)))))*)(0)))) + ((typeof(((T)(*((T*)(0)))) * ((T)(*((T*)(0))))))(*((typeof(((T)(*((T*)(0)))) * ((T)(*((T*)(0)))))*)(0))))) operator *(const vector2<T>& v) const {
4528    return x*v.x + y*v.y;
4529   }
4530
4531
4532
4533
4534
4535
4536
4537   inline vector2() {}
4538   inline vector2(const T& a, const T& b) : x(a), y(b) {}
4539
4540
4541
4542
4543
4544
4545
4546   struct type_traits : public default_type_traits< vector2<T> > {
4547    enum {
4548     trivial = schultz::type_traits<T>::trivial,
4549     trivial_constructor = schultz::type_traits<T>::trivial_constructor,
4550     trivial_copy = schultz::type_traits<T>::trivial_copy,
4551     trivial_destructor = schultz::type_traits<T>::trivial_destructor,
4552
4553     special_swap = schultz::type_traits<T>::special_swap
4554    };
4555   };
4556  };
4557
4558
4559
4560
4561
4562
4563
4564  template<typename T> inline vector2<T> operator *(const T& a, const vector2<T>& v) {
4565   return vector2<T>(a*v.x, a*v.y);
4566  }
4567
4568
4569
4570
4571
4572
4573
4574  template<typename T> inline vector2<T> make_vector2(const T& x, const T& y) {
4575   return vector2<T>(x, y);
4576  }
4577 }
4578 # 13 "src/circle" 2
4579
4580 # 1 "/home/schultz/c/schultz/structure/avl_tree" 1
4581 # 11 "/home/schultz/c/schultz/structure/avl_tree"
4582 namespace schultz {
4583 # 27 "/home/schultz/c/schultz/structure/avl_tree"
4584  template<typename T, typename O = lessf<T>, typename ALLOC = default_allocation> struct avl_tree {
4585   private:
4586 # 44 "/home/schultz/c/schultz/structure/avl_tree"
4587    struct node {
4588
4589     T elem;
4590
4591
4592     node *left, *right, *father;
4593
4594
4595     int balance;
4596
4597
4598     static void swap(node& m, node& n) {
4599      schultz::swap(m.elem, n.elem);
4600      schultz::swap(m.left, n.left);
4601      schultz::swap(m.right, n.right);
4602      schultz::swap(m.father, n.father);
4603      schultz::swap(m.balance, n.balance);
4604     }
4605
4606
4607     struct type_traits : public default_type_traits<node> {
4608      enum {
4609       trivial = schultz::type_traits<T>::trivial,
4610       trivial_constructor = schultz::type_traits<T>::trivial_constructor,
4611       trivial_copy = schultz::type_traits<T>::trivial_copy,
4612       trivial_destructor = schultz::type_traits<T>::trivial_destructor,
4613
4614       special_swap = schultz::type_traits<T>::special_swap
4615      };
4616     };
4617    };
4618
4619
4620
4621
4622
4623
4624
4625    typedef allocation<node, ALLOC> _alloc;
4626 # 91 "/home/schultz/c/schultz/structure/avl_tree"
4627    node* _root;
4628 # 101 "/home/schultz/c/schultz/structure/avl_tree"
4629    template<typename I> static pair<node*, nat> _assemble_aux(I a, I b) {
4630     if (a != b) {
4631      I m = a+(b-a)/2;
4632      node* n = (node*)ALLOC::allocate(sizeof(node));
4633      copy_construct(n->elem, *m);
4634      const pair<node*, nat> &p = _assemble_aux(a, m);
4635      const pair<node*, nat> &q = _assemble_aux(++m, b);
4636      n->left = p.first;
4637      n->right = q.first;
4638      if (n->left) n->left->father = n;
4639      if (n->right) n->right->father = n;
4640      n->balance = q.second - p.second;
4641      return make_pair(n, max(p.second, q.second)+1);
4642     }
4643     else return pair<node*, nat>(0, 0);
4644    }
4645    template<typename I> inline void _assemble(I a, I b) {
4646     ;
4647     _root = _assemble_aux(a, b).first;
4648     if (_root) _root->father = 0;
4649    }
4650 # 134 "/home/schultz/c/schultz/structure/avl_tree"
4651    static void _clear_aux(node* n) {
4652     ;
4653     if (n->left) _clear_aux(n->left);
4654     if (n->right) _clear_aux(n->right);
4655     _alloc::deallocate_1(n);
4656    }
4657
4658
4659    static node* _copy_aux(node* n) {
4660     if (n) {
4661      node* m = (node*)ALLOC::allocate(sizeof(node));
4662      copy_construct(m->elem, n->elem);
4663      m->left = _copy_aux(n->left);
4664      m->right = _copy_aux(n->right);
4665      if (m->left) m->left->father = m;
4666      if (m->right) m->right->father = m;
4667      m->balance = n->balance;
4668      return m;
4669     }
4670     else return 0;
4671    }
4672 # 167 "/home/schultz/c/schultz/structure/avl_tree"
4673    static const node* _leftmost(const node* n) {
4674     ;
4675     while (n->left) n = n->left;
4676     return n;
4677    }
4678    static node* _leftmost(node* n) {
4679     ;
4680     while (n->left) n = n->left;
4681     return n;
4682    }
4683
4684
4685    static const node* _rightmost(const node* n) {
4686     ;
4687     while (n->right) n = n->right;
4688     return n;
4689    }
4690    static node* _rightmost(node* n) {
4691     ;
4692     while (n->right) n = n->right;
4693     return n;
4694    }
4695 # 209 "/home/schultz/c/schultz/structure/avl_tree"
4696    void _rotate_LL(node* b) {
4697     ;
4698     node* a = b->left;
4699     if (b->father) (b->father->left == b ? b->father->left : b->father->right) = a;
4700     else _root = a;
4701     a->father = b->father;
4702     b->left = a->right;
4703     if (a->right) a->right->father = b;
4704     b->father = a;
4705     a->right = b;
4706     if (a->balance == -1) {
4707      a->balance = 0;
4708      b->balance = 0;
4709     }
4710     else {
4711      ;
4712      a->balance = 1;
4713      b->balance = -1;
4714     }
4715    }
4716
4717
4718    void _rotate_LR(node* c) {
4719     ;
4720     node* a = c->left;
4721     node* b = a->right;
4722     if (c->father) (c->father->left == c ? c->father->left : c->father->right) = b;
4723     else _root = b;
4724     b->father = c->father;
4725     a->father = b;
4726     a->right = b->left;
4727     if (b->left) b->left->father = a;
4728     b->left = a;
4729     c->left = b->right;
4730     if (b->right) b->right->father = c;
4731     b->right = c;
4732     c->father = b;
4733     a->balance = b->balance == 1 ? -1 : 0;
4734     c->balance = b->balance == -1 ? 1 : 0;
4735     b->balance = 0;
4736    }
4737
4738
4739    void _rotate_RR(node* a) {
4740     ;
4741     node* b = a->right;
4742     if (a->father) (a->father->left == a ? a->father->left : a->father->right) = b;
4743     else _root = b;
4744     b->father = a->father;
4745     a->right = b->left;
4746     if (b->left) b->left->father = a;
4747     a->father = b;
4748     b->left = a;
4749     if (b->balance == 1) {
4750      b->balance = 0;
4751      a->balance = 0;
4752     }
4753     else {
4754      ;
4755      b->balance = -1;
4756      a->balance = 1;
4757     }
4758    }
4759
4760
4761    void _rotate_RL(node* a) {
4762     ;
4763     node* c = a->right;
4764     node* b = c->left;
4765     if (a->father) (a->father->left == a ? a->father->left : a->father->right) = b;
4766     else _root = b;
4767     b->father = a->father;
4768     c->father = b;
4769     c->left = b->right;
4770     if (b->right) b->right->father = c;
4771     b->right = c;
4772     a->right = b->left;
4773     if (b->left) b->left->father = a;
4774     b->left = a;
4775     a->father = b;
4776     a->balance = b->balance == 1 ? -1 : 0;
4777     c->balance = b->balance == -1 ? 1 : 0;
4778     b->balance = 0;
4779    }
4780 # 303 "/home/schultz/c/schultz/structure/avl_tree"
4781    void _grow_retrace(node* p) {
4782     ;
4783     while (p->father) {
4784      if (p->father->left == p) --p->father->balance;
4785      else ++p->father->balance;
4786      p = p->father;
4787
4788      if (p->balance == 0) break;
4789      else if (p->balance == -2) {
4790       ;
4791       if (p->left->balance != 1) _rotate_LL(p);
4792       else _rotate_LR(p);
4793       break;
4794      }
4795      else if (p->balance == 2) {
4796       ;
4797       if (p->right->balance != -1) _rotate_RR(p);
4798       else _rotate_RL(p);
4799       break;
4800      }
4801      ;
4802     }
4803    }
4804
4805
4806    void _shrink_retrace(node* p) {
4807     ;
4808     while (p->balance != -1 && p->balance != 1) {
4809      if (p->balance == -2) {
4810       int b = p->left->balance;
4811       if (b == 1) {
4812        _rotate_LR(p);
4813        p = p->father;
4814        ;
4815       }
4816       else {
4817        _rotate_LL(p);
4818        if (b == 0) break;
4819        p = p->father;
4820        ;
4821       }
4822      }
4823      else if (p->balance == 2) {
4824       int b = p->right->balance;
4825       if (b == -1) {
4826        _rotate_RL(p);
4827        p = p->father;
4828        ;
4829       }
4830       else {
4831        _rotate_RR(p);
4832        if (b == 0) break;
4833        p = p->father;
4834        ;
4835       }
4836      }
4837
4838      if (p->father) {
4839       if (p->father->left == p) ++p->father->balance;
4840       else --p->father->balance;
4841       p = p->father;
4842      }
4843      else break;
4844     }
4845    }
4846   public:
4847
4848
4849
4850
4851
4852
4853    inline bool empty() const {return _root == 0;}
4854
4855
4856
4857
4858
4859
4860
4861    inline void clear() {
4862     if (_root) {
4863      _clear_aux(_root);
4864      _root = 0;
4865     }
4866    }
4867 # 397 "/home/schultz/c/schultz/structure/avl_tree"
4868    template<typename I> inline void copy(I a, I b) {
4869     clear();
4870     _assemble(a, b);
4871    }
4872
4873
4874
4875
4876
4877
4878
4879    inline avl_tree<T, ALLOC>& operator =(const avl_tree<T, ALLOC>& A) {
4880     if (this != &A) {
4881      clear();
4882      _root = _copy_aux(A._root);
4883      if (_root) _root->father = 0;
4884     }
4885     return (*this);
4886    }
4887
4888
4889
4890
4891
4892
4893
4894    static inline void swap(avl_tree<T, ALLOC>& A, avl_tree<T, ALLOC>& B) {
4895     schultz::swap(A._root, B._root);
4896    }
4897 # 439 "/home/schultz/c/schultz/structure/avl_tree"
4898    struct const_iterator {
4899
4900     const node* n;
4901
4902
4903     inline const T& operator *() const {
4904      ;
4905      return n->elem;
4906     }
4907     inline const T* operator ->() const {
4908      ;
4909      return &n->elem;
4910     }
4911     inline const T& operator [](nat i) const {
4912      return *((*this)+i);
4913     }
4914
4915
4916     inline bool operator ==(const_iterator i) const {
4917      return n == i.n;
4918     }
4919     inline bool operator !=(const_iterator i) const {
4920      return !((*this) == i);
4921     }
4922
4923
4924     const_iterator& operator ++() {
4925      ;
4926      if (n->right) {
4927       n = n->right;
4928       while (n->left) n = n->left;
4929      }
4930      else {
4931       while (n->father && n->father->right == n) n = n->father;
4932       n = n->father;
4933      }
4934      return (*this);
4935     }
4936     inline const_iterator operator ++(int) {
4937      const_iterator i = (*this);
4938      ++(*this);
4939      return i;
4940     }
4941     const_iterator& operator --() {
4942      ;
4943      if (n->left) {
4944       n = n->left;
4945       while (n->right) n = n->right;
4946      }
4947      else {
4948       while (n->father && n->father->left == n) n = n->father;
4949       n = n->father;
4950      }
4951      return (*this);
4952     }
4953     inline const_iterator operator --(int) {
4954      const_iterator i = (*this);
4955      --(*this);
4956      return i;
4957     }
4958     inline const_iterator& operator +=(nat n) {
4959      return advance((*this), n);
4960     }
4961     inline const_iterator operator +(nat n) {
4962      const_iterator i = (*this);
4963      return i+= n;
4964     }
4965     inline const_iterator& operator -=(nat n) {
4966      return step_back((*this), n);
4967     }
4968     inline const_iterator operator -(nat n) {
4969      const_iterator i = (*this);
4970      return i-= n;
4971     }
4972     inline nat operator -(const_iterator i) {
4973      return distance(i, (*this));
4974     }
4975
4976
4977     inline const_iterator() {}
4978     explicit inline const_iterator(const node* p) : n(p) {}
4979
4980
4981     struct iterator_traits : public default_iterator_traits<const_iterator> {
4982      enum {
4983       constant = true,
4984       persistent = true,
4985       bidirectional = true,
4986       random_access = false
4987      };
4988
4989      typedef T value_type;
4990     };
4991
4992
4993     struct type_traits : public iterator_type_traits<const_iterator> {};
4994    };
4995
4996
4997    struct iterator {
4998
4999     node* n;
5000
5001
5002     inline T& operator *() const {
5003      ;
5004      return n->elem;
5005     }
5006     inline T* operator ->() const {
5007      ;
5008      return &n->elem;
5009     }
5010     inline T& operator [](nat i) const {
5011      return *((*this)+i);
5012     }
5013
5014
5015     inline bool operator ==(iterator i) const {
5016      return n == i.n;
5017     }
5018     inline bool operator !=(iterator i) const {
5019      return !((*this) == i);
5020     }
5021
5022
5023     iterator& operator ++() {
5024      ;
5025      if (n->right) {
5026       n = n->right;
5027       while (n->left) n = n->left;
5028      }
5029      else {
5030       while (n->father && n->father->right == n) n = n->father;
5031       n = n->father;
5032      }
5033      return (*this);
5034     }
5035     inline iterator operator ++(int) {
5036      iterator i = (*this);
5037      ++(*this);
5038      return i;
5039     }
5040     iterator& operator --() {
5041      ;
5042      if (n->left) {
5043       n = n->left;
5044       while (n->right) n = n->right;
5045      }
5046      else {
5047       while (n->father && n->father->left == n) n = n->father;
5048       n = n->father;
5049      }
5050      return (*this);
5051     }
5052     inline iterator operator --(int) {
5053      iterator i = (*this);
5054      --(*this);
5055      return i;
5056     }
5057     inline iterator& operator +=(nat n) {
5058      return advance((*this), n);
5059     }
5060     inline iterator operator +(nat n) {
5061      iterator i = (*this);
5062      return i+= n;
5063     }
5064     inline iterator& operator -=(nat n) {
5065      return step_back((*this), n);
5066     }
5067     inline iterator operator -(nat n) {
5068      iterator i = (*this);
5069      return i-= n;
5070     }
5071     inline nat operator -(iterator i) {
5072      return distance(i, (*this));
5073     }
5074
5075
5076     inline iterator() {}
5077     explicit inline iterator(node* p) : n(p) {}
5078
5079
5080     struct iterator_traits : public default_iterator_traits<iterator> {
5081      enum {
5082       constant = false,
5083       persistent = true,
5084       bidirectional = true,
5085       random_access = false
5086      };
5087
5088      typedef T value_type;
5089     };
5090
5091
5092     struct type_traits : public iterator_type_traits<iterator> {};
5093    };
5094 # 643 "/home/schultz/c/schultz/structure/avl_tree"
5095    inline const_iterator begin() const {return const_iterator(_root ? _leftmost(_root) : 0);}
5096    inline const_iterator end() const {return const_iterator(0);}
5097    inline iterator begin() {return iterator(_root ? _leftmost(_root) : 0);}
5098    inline iterator end() {return iterator(0);}
5099 # 661 "/home/schultz/c/schultz/structure/avl_tree"
5100    const_iterator find(const T& x) const {
5101     node* p = _root;
5102     while (p) {
5103      if (O()(x, p->elem)) p = p->left;
5104      else if (O()(p->elem, x)) p = p->right;
5105      else return const_iterator(p);
5106     }
5107     return end();
5108    }
5109    iterator find(const T& x) {
5110     node* p = _root;
5111     while (p) {
5112      if (O()(x, p->elem)) p = p->left;
5113      else if (O()(p->elem, x)) p = p->right;
5114      else return iterator(p);
5115     }
5116     return end();
5117    }
5118
5119
5120    inline bool contains(const T& x) const {
5121     return find(x) != end();
5122    }
5123 # 692 "/home/schultz/c/schultz/structure/avl_tree"
5124    iterator insert(const T& x) {
5125     node* q = 0;
5126     node* p = _root;
5127     while (p) {
5128      q = p;
5129      if (O()(x, p->elem)) p = p->left;
5130      else p = p->right;
5131     }
5132     p = (node*)ALLOC::allocate(sizeof(node));
5133     copy_construct(p->elem, x);
5134     p->father = q;
5135     p->left = p->right = 0;
5136     p->balance = 0;
5137     if (q) {
5138      if (O()(x, q->elem)) q->left = p;
5139      else q->right = p;
5140     }
5141     else _root = p;
5142     _grow_retrace(p);
5143     return iterator(p);
5144    }
5145
5146
5147
5148
5149
5150
5151
5152    void remove(iterator iter) {
5153     node* a = iter.n;
5154     ;
5155     node* f = a->father;
5156     if (a->left == 0 || a->right == 0) {
5157      node* b = a->left == 0 ? a->right : a->left;
5158      if (f) {
5159       if (f->left == a) {
5160        ++f->balance;
5161        f->left = b;
5162       }
5163       else {
5164        --f->balance;
5165        f->right = b;
5166       }
5167      }
5168      else _root = b;
5169      if (b) b->father = f;
5170      _alloc::deallocate_1(a);
5171      if (f) _shrink_retrace(f);
5172     }
5173     else {
5174      ;
5175      node* p = _rightmost(a->left);
5176      node* pf = p->father;
5177      ;
5178      if (pf->left == p) {
5179       ++pf->balance;
5180       pf->left = p->left;
5181      }
5182      else {
5183       --pf->balance;
5184       pf->right = p->left;
5185      }
5186      if (p->left) p->left->father = pf;
5187
5188      if (f) (f->left == a ? f->left : f->right) = p;
5189      else _root = p;
5190      p->father = f;
5191      p->right = a->right;
5192      p->left = a->left;
5193      if (p->left) p->left->father = p;
5194      if (p->right) p->right->father = p;
5195      p->balance = a->balance;
5196      _alloc::deallocate_1(a);
5197
5198      _shrink_retrace(pf == a ? p : pf);
5199     }
5200    }
5201 # 782 "/home/schultz/c/schultz/structure/avl_tree"
5202    inline avl_tree() : _root(0) {}
5203    inline avl_tree(const avl_tree<T, ALLOC>& A) {
5204     _root = _copy_aux(A._root);
5205     if (_root) _root->father = 0;
5206    }
5207    template<typename I> inline avl_tree(I a, I b) : _root(0) {
5208     _assemble(a, b);
5209    }
5210
5211
5212
5213
5214
5215
5216
5217    inline ~avl_tree() {clear();}
5218 # 806 "/home/schultz/c/schultz/structure/avl_tree"
5219    struct type_traits : public default_type_traits< avl_tree<T> > {
5220     enum {
5221      trivial = false,
5222      special_swap = true
5223     };
5224    };
5225  };
5226 };
5227 # 15 "src/circle" 2
5228
5229 using namespace schultz;
5230
5231 namespace khaos {
5232 # 52 "src/circle"
5233  struct circle {
5234
5235   vector2<flop> centre;
5236
5237
5238   flop radius;
5239
5240
5241   vector2<flop> velocity;
5242
5243
5244   flop mass;
5245
5246
5247
5248   void* next;
5249
5250
5251   flop proj;
5252
5253
5254   nat kind;
5255
5256
5257   bool exists;
5258
5259
5260
5261
5262   flop time;
5263
5264
5265
5266
5267   struct {
5268    nat left, right, bottom, top;
5269   } voxels;
5270
5271
5272   struct projcmpf : public binary_function<bool, const circle*, const circle*> {
5273    inline bool operator ()(const circle* C, const circle* D) const {
5274     return C->proj < D->proj;
5275    }
5276   };
5277
5278
5279   avl_tree<circle*, projcmpf>::iterator iter;
5280
5281
5282
5283   inline void copy_projbase(circle& C) {
5284    centre = C.centre;
5285    radius = C.radius;
5286    velocity = C.velocity;
5287
5288    time = C.time;
5289
5290   }
5291
5292
5293   struct type_traits : public default_type_traits<circle> {
5294    enum {trivial = true};
5295   };
5296  };
5297
5298
5299
5300
5301
5302
5303
5304  inline void move(circle& C, flop dt) {
5305   ;
5306   C.centre+= dt*C.velocity;
5307  }
5308 # 137 "src/circle"
5309  extern flop proj(const circle&, const circle&);
5310
5311
5312  extern flop proj(const circle&, vector2<flop>);
5313
5314
5315
5316
5317
5318
5319
5320  extern void coll(circle&, circle&);
5321 }
5322
5323 # 1 "/home/schultz/c/schultz/language/undef_keywords" 1
5324 # 152 "src/circle" 2
5325 # 2 "src/circle.c++" 2
5326
5327 # 1 "/usr/include/math.h" 1 3 4
5328 # 30 "/usr/include/math.h" 3 4
5329 extern "C" {
5330
5331
5332
5333 # 1 "/usr/include/bits/huge_val.h" 1 3 4
5334 # 35 "/usr/include/math.h" 2 3 4
5335
5336 # 1 "/usr/include/bits/huge_valf.h" 1 3 4
5337 # 37 "/usr/include/math.h" 2 3 4
5338 # 1 "/usr/include/bits/huge_vall.h" 1 3 4
5339 # 38 "/usr/include/math.h" 2 3 4
5340
5341
5342 # 1 "/usr/include/bits/inf.h" 1 3 4
5343 # 41 "/usr/include/math.h" 2 3 4
5344
5345
5346 # 1 "/usr/include/bits/nan.h" 1 3 4
5347 # 44 "/usr/include/math.h" 2 3 4
5348
5349
5350
5351 # 1 "/usr/include/bits/mathdef.h" 1 3 4
5352 # 36 "/usr/include/bits/mathdef.h" 3 4
5353 typedef long double float_t;
5354
5355 typedef long double double_t;
5356 # 48 "/usr/include/math.h" 2 3 4
5357 # 71 "/usr/include/math.h" 3 4
5358 # 1 "/usr/include/bits/mathcalls.h" 1 3 4
5359 # 53 "/usr/include/bits/mathcalls.h" 3 4
5360
5361
5362 extern double acos (double __x) throw (); extern double __acos (double __x) throw ();
5363
5364 extern double asin (double __x) throw (); extern double __asin (double __x) throw ();
5365
5366 extern double atan (double __x) throw (); extern double __atan (double __x) throw ();
5367
5368 extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw ();
5369
5370
5371 extern double cos (double __x) throw (); extern double __cos (double __x) throw ();
5372
5373 extern double sin (double __x) throw (); extern double __sin (double __x) throw ();
5374
5375 extern double tan (double __x) throw (); extern double __tan (double __x) throw ();
5376
5377
5378
5379
5380 extern double cosh (double __x) throw (); extern double __cosh (double __x) throw ();
5381
5382 extern double sinh (double __x) throw (); extern double __sinh (double __x) throw ();
5383
5384 extern double tanh (double __x) throw (); extern double __tanh (double __x) throw ();
5385
5386
5387
5388
5389 extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw ();
5390
5391
5392
5393
5394
5395
5396 extern double acosh (double __x) throw (); extern double __acosh (double __x) throw ();
5397
5398 extern double asinh (double __x) throw (); extern double __asinh (double __x) throw ();
5399
5400 extern double atanh (double __x) throw (); extern double __atanh (double __x) throw ();
5401
5402
5403
5404
5405
5406
5407
5408 extern double exp (double __x) throw (); extern double __exp (double __x) throw ();
5409
5410
5411 extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw ();
5412
5413
5414 extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw ();
5415
5416
5417 extern double log (double __x) throw (); extern double __log (double __x) throw ();
5418
5419
5420 extern double log10 (double __x) throw (); extern double __log10 (double __x) throw ();
5421
5422
5423 extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw ();
5424
5425
5426
5427
5428 extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw ();
5429
5430 extern double pow10 (double __x) throw (); extern double __pow10 (double __x) throw ();
5431
5432
5433
5434
5435
5436 extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw ();
5437
5438
5439 extern double log1p (double __x) throw (); extern double __log1p (double __x) throw ();
5440
5441
5442 extern double logb (double __x) throw (); extern double __logb (double __x) throw ();
5443
5444
5445
5446
5447
5448
5449 extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw ();
5450
5451
5452 extern double log2 (double __x) throw (); extern double __log2 (double __x) throw ();
5453
5454
5455
5456
5457
5458
5459
5460
5461 extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw ();
5462
5463
5464 extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw ();
5465
5466
5467
5468
5469
5470 extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw ();
5471
5472
5473
5474
5475
5476
5477 extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw ();
5478
5479
5480
5481
5482
5483
5484
5485
5486 extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__));
5487
5488
5489 extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__));
5490
5491
5492 extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__));
5493
5494
5495 extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw ();
5496
5497
5498
5499
5500 extern int __isinf (double __value) throw () __attribute__ ((__const__));
5501
5502
5503 extern int __finite (double __value) throw () __attribute__ ((__const__));
5504
5505
5506
5507
5508
5509 extern int isinf (double __value) throw () __attribute__ ((__const__));
5510
5511
5512 extern int finite (double __value) throw () __attribute__ ((__const__));
5513
5514
5515 extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw ();
5516
5517
5518
5519 extern double significand (double __x) throw (); extern double __significand (double __x) throw ();
5520
5521
5522
5523
5524
5525 extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__));
5526
5527
5528
5529
5530
5531
5532 extern double nan (__const char *__tagb) throw () __attribute__ ((__const__)); extern double __nan (__const char *__tagb) throw () __attribute__ ((__const__));
5533
5534
5535
5536
5537
5538 extern int __isnan (double __value) throw () __attribute__ ((__const__));
5539
5540
5541
5542 extern int isnan (double __value) throw () __attribute__ ((__const__));
5543
5544
5545 extern double j0 (double) throw (); extern double __j0 (double) throw ();
5546 extern double j1 (double) throw (); extern double __j1 (double) throw ();
5547 extern double jn (int, double) throw (); extern double __jn (int, double) throw ();
5548 extern double y0 (double) throw (); extern double __y0 (double) throw ();
5549 extern double y1 (double) throw (); extern double __y1 (double) throw ();
5550 extern double yn (int, double) throw (); extern double __yn (int, double) throw ();
5551
5552
5553
5554
5555
5556
5557 extern double erf (double) throw (); extern double __erf (double) throw ();
5558 extern double erfc (double) throw (); extern double __erfc (double) throw ();
5559 extern double lgamma (double) throw (); extern double __lgamma (double) throw ();
5560
5561
5562
5563
5564
5565
5566 extern double tgamma (double) throw (); extern double __tgamma (double) throw ();
5567
5568
5569
5570
5571
5572 extern double gamma (double) throw (); extern double __gamma (double) throw ();
5573
5574
5575
5576
5577
5578
5579 extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw ();
5580
5581
5582
5583
5584
5585
5586
5587 extern double rint (double __x) throw (); extern double __rint (double __x) throw ();
5588
5589
5590 extern double nextafter (double __x, double __y) throw () __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) throw () __attribute__ ((__const__));
5591
5592 extern double nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); extern double __nexttoward (double __x, long double __y) throw () __attribute__ ((__const__));
5593
5594
5595
5596 extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw ();
5597
5598
5599
5600 extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw ();
5601
5602
5603
5604 extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw ();
5605
5606
5607
5608
5609 extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw ();
5610
5611
5612
5613 extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw ();
5614
5615
5616
5617 extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__));
5618
5619
5620
5621 extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__));
5622
5623
5624
5625
5626 extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw ();
5627
5628
5629
5630
5631
5632
5633 extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw ();
5634 extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw ();
5635
5636
5637
5638 extern long int lround (double __x) throw (); extern long int __lround (double __x) throw ();
5639 extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw ();
5640
5641
5642
5643 extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw ();
5644
5645
5646 extern double fmax (double __x, double __y) throw (); extern double __fmax (double __x, double __y) throw ();
5647
5648
5649 extern double fmin (double __x, double __y) throw (); extern double __fmin (double __x, double __y) throw ();
5650
5651
5652
5653 extern int __fpclassify (double __value) throw ()
5654      __attribute__ ((__const__));
5655
5656
5657 extern int __signbit (double __value) throw ()
5658      __attribute__ ((__const__));
5659
5660
5661
5662 extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw ();
5663
5664
5665
5666
5667
5668
5669
5670
5671 extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw ();
5672 # 72 "/usr/include/math.h" 2 3 4
5673 # 94 "/usr/include/math.h" 3 4
5674 # 1 "/usr/include/bits/mathcalls.h" 1 3 4
5675 # 53 "/usr/include/bits/mathcalls.h" 3 4
5676
5677
5678 extern float acosf (float __x) throw (); extern float __acosf (float __x) throw ();
5679
5680 extern float asinf (float __x) throw (); extern float __asinf (float __x) throw ();
5681
5682 extern float atanf (float __x) throw (); extern float __atanf (float __x) throw ();
5683
5684 extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw ();
5685
5686
5687 extern float cosf (float __x) throw (); extern float __cosf (float __x) throw ();
5688
5689 extern float sinf (float __x) throw (); extern float __sinf (float __x) throw ();
5690
5691 extern float tanf (float __x) throw (); extern float __tanf (float __x) throw ();
5692
5693
5694
5695
5696 extern float coshf (float __x) throw (); extern float __coshf (float __x) throw ();
5697
5698 extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw ();
5699
5700 extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw ();
5701
5702
5703
5704
5705 extern void sincosf (float __x, float *__sinx, float *__cosx) throw (); extern void __sincosf (float __x, float *__sinx, float *__cosx) throw ();
5706
5707
5708
5709
5710
5711
5712 extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw ();
5713
5714 extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw ();
5715
5716 extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw ();
5717
5718
5719
5720
5721
5722
5723
5724 extern float expf (float __x) throw (); extern float __expf (float __x) throw ();
5725
5726
5727 extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw ();
5728
5729
5730 extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw ();
5731
5732
5733 extern float logf (float __x) throw (); extern float __logf (float __x) throw ();
5734
5735
5736 extern float log10f (float __x) throw (); extern float __log10f (float __x) throw ();
5737
5738
5739 extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw ();
5740
5741
5742
5743
5744 extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw ();
5745
5746 extern float pow10f (float __x) throw (); extern float __pow10f (float __x) throw ();
5747
5748
5749
5750
5751
5752 extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw ();
5753
5754
5755 extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw ();
5756
5757
5758 extern float logbf (float __x) throw (); extern float __logbf (float __x) throw ();
5759
5760
5761
5762
5763
5764
5765 extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw ();
5766
5767
5768 extern float log2f (float __x) throw (); extern float __log2f (float __x) throw ();
5769
5770
5771
5772
5773
5774
5775
5776
5777 extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw ();
5778
5779
5780 extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw ();
5781
5782
5783
5784
5785
5786 extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw ();
5787
5788
5789
5790
5791
5792
5793 extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw ();
5794
5795
5796
5797
5798
5799
5800
5801
5802 extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__));
5803
5804
5805 extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__));
5806
5807
5808 extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__));
5809
5810
5811 extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw ();
5812
5813
5814
5815
5816 extern int __isinff (float __value) throw () __attribute__ ((__const__));
5817
5818
5819 extern int __finitef (float __value) throw () __attribute__ ((__const__));
5820
5821
5822
5823
5824
5825 extern int isinff (float __value) throw () __attribute__ ((__const__));
5826
5827
5828 extern int finitef (float __value) throw () __attribute__ ((__const__));
5829
5830
5831 extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw ();
5832
5833
5834
5835 extern float significandf (float __x) throw (); extern float __significandf (float __x) throw ();
5836
5837
5838
5839
5840
5841 extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__));
5842
5843
5844
5845
5846
5847
5848 extern float nanf (__const char *__tagb) throw () __attribute__ ((__const__)); extern float __nanf (__const char *__tagb) throw () __attribute__ ((__const__));
5849
5850
5851
5852
5853
5854 extern int __isnanf (float __value) throw () __attribute__ ((__const__));
5855
5856
5857
5858 extern int isnanf (float __value) throw () __attribute__ ((__const__));
5859
5860
5861 extern float j0f (float) throw (); extern float __j0f (float) throw ();
5862 extern float j1f (float) throw (); extern float __j1f (float) throw ();
5863 extern float jnf (int, float) throw (); extern float __jnf (int, float) throw ();
5864 extern float y0f (float) throw (); extern float __y0f (float) throw ();
5865 extern float y1f (float) throw (); extern float __y1f (float) throw ();
5866 extern float ynf (int, float) throw (); extern float __ynf (int, float) throw ();
5867
5868
5869
5870
5871
5872
5873 extern float erff (float) throw (); extern float __erff (float) throw ();
5874 extern float erfcf (float) throw (); extern float __erfcf (float) throw ();
5875 extern float lgammaf (float) throw (); extern float __lgammaf (float) throw ();
5876
5877
5878
5879
5880
5881
5882 extern float tgammaf (float) throw (); extern float __tgammaf (float) throw ();
5883
5884
5885
5886
5887
5888 extern float gammaf (float) throw (); extern float __gammaf (float) throw ();
5889
5890
5891
5892
5893
5894
5895 extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw ();
5896
5897
5898
5899
5900
5901
5902
5903 extern float rintf (float __x) throw (); extern float __rintf (float __x) throw ();
5904
5905
5906 extern float nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) throw () __attribute__ ((__const__));
5907
5908 extern float nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); extern float __nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__));
5909
5910
5911
5912 extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw ();
5913
5914
5915
5916 extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw ();
5917
5918
5919
5920 extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw ();
5921
5922
5923
5924
5925 extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw ();
5926
5927
5928
5929 extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw ();
5930
5931
5932
5933 extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__));
5934
5935
5936
5937 extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__));
5938
5939
5940
5941
5942 extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw ();
5943
5944
5945
5946
5947
5948
5949 extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw ();
5950 extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw ();
5951
5952
5953
5954 extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw ();
5955 extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw ();
5956
5957
5958
5959 extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw ();
5960
5961
5962 extern float fmaxf (float __x, float __y) throw (); extern float __fmaxf (float __x, float __y) throw ();
5963
5964
5965 extern float fminf (float __x, float __y) throw (); extern float __fminf (float __x, float __y) throw ();
5966
5967
5968
5969 extern int __fpclassifyf (float __value) throw ()
5970      __attribute__ ((__const__));
5971
5972
5973 extern int __signbitf (float __value) throw ()
5974      __attribute__ ((__const__));
5975
5976
5977
5978 extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw ();
5979
5980
5981
5982
5983
5984
5985
5986
5987 extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw ();
5988 # 95 "/usr/include/math.h" 2 3 4
5989 # 141 "/usr/include/math.h" 3 4
5990 # 1 "/usr/include/bits/mathcalls.h" 1 3 4
5991 # 53 "/usr/include/bits/mathcalls.h" 3 4
5992
5993
5994 extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw ();
5995
5996 extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw ();
5997
5998 extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw ();
5999
6000 extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw ();
6001
6002
6003 extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw ();
6004
6005 extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw ();
6006
6007 extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw ();
6008
6009
6010
6011
6012 extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw ();
6013
6014 extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw ();
6015
6016 extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw ();
6017
6018
6019
6020
6021 extern void sincosl (long double __x, long double *__sinx, long double *__cosx) throw (); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) throw ();
6022
6023
6024
6025
6026
6027
6028 extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw ();
6029
6030 extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw ();
6031
6032 extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw ();
6033
6034
6035
6036
6037
6038
6039
6040 extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw ();
6041
6042
6043 extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw ();
6044
6045
6046 extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw ();
6047
6048
6049 extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw ();
6050
6051
6052 extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw ();
6053
6054
6055 extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw ();
6056
6057
6058
6059
6060 extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw ();
6061
6062 extern long double pow10l (long double __x) throw (); extern long double __pow10l (long double __x) throw ();
6063
6064
6065
6066
6067
6068 extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw ();
6069
6070
6071 extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw ();
6072
6073
6074 extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw ();
6075
6076
6077
6078
6079
6080
6081 extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw ();
6082
6083
6084 extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw ();
6085
6086
6087
6088
6089
6090
6091
6092
6093 extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw ();
6094
6095
6096 extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw ();
6097
6098
6099
6100
6101
6102 extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw ();
6103
6104
6105
6106
6107
6108
6109 extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw ();
6110
6111
6112
6113
6114
6115
6116
6117
6118 extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__));
6119
6120
6121 extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__));
6122
6123
6124 extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__));
6125
6126
6127 extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw ();
6128
6129
6130
6131
6132 extern int __isinfl (long double __value) throw () __attribute__ ((__const__));
6133
6134
6135 extern int __finitel (long double __value) throw () __attribute__ ((__const__));
6136
6137
6138
6139
6140
6141 extern int isinfl (long double __value) throw () __attribute__ ((__const__));
6142
6143
6144 extern int finitel (long double __value) throw () __attribute__ ((__const__));
6145
6146
6147 extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw ();
6148
6149
6150
6151 extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw ();
6152
6153
6154
6155
6156
6157 extern long double copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) throw () __attribute__ ((__const__));
6158
6159
6160
6161
6162
6163
6164 extern long double nanl (__const char *__tagb) throw () __attribute__ ((__const__)); extern long double __nanl (__const char *__tagb) throw () __attribute__ ((__const__));
6165
6166
6167
6168
6169
6170 extern int __isnanl (long double __value) throw () __attribute__ ((__const__));
6171
6172
6173
6174 extern int isnanl (long double __value) throw () __attribute__ ((__const__));
6175
6176
6177 extern long double j0l (long double) throw (); extern long double __j0l (long double) throw ();
6178 extern long double j1l (long double) throw (); extern long double __j1l (long double) throw ();
6179 extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw ();
6180 extern long double y0l (long double) throw (); extern long double __y0l (long double) throw ();
6181 extern long double y1l (long double) throw (); extern long double __y1l (long double) throw ();
6182 extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw ();
6183
6184
6185
6186
6187
6188
6189 extern long double erfl (long double) throw (); extern long double __erfl (long double) throw ();
6190 extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw ();
6191 extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw ();
6192
6193
6194
6195
6196
6197
6198 extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw ();
6199
6200
6201
6202
6203
6204 extern long double gammal (long double) throw (); extern long double __gammal (long double) throw ();
6205
6206
6207
6208
6209
6210
6211 extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw ();
6212
6213
6214
6215
6216
6217
6218
6219 extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw ();
6220
6221
6222 extern long double nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__));
6223
6224 extern long double nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__));
6225
6226
6227
6228 extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw ();
6229
6230
6231
6232 extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw ();
6233
6234
6235
6236 extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw ();
6237
6238
6239
6240
6241 extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw ();
6242
6243
6244
6245 extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw ();
6246
6247
6248
6249 extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__));
6250
6251
6252
6253 extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__));
6254
6255
6256
6257
6258 extern long double remquol (long double __x, long double __y, int *__quo) throw (); extern long double __remquol (long double __x, long double __y, int *__quo) throw ();
6259
6260
6261
6262
6263
6264
6265 extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw ();
6266 extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw ();
6267
6268
6269
6270 extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw ();
6271 extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw ();
6272
6273
6274
6275 extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw ();
6276
6277
6278 extern long double fmaxl (long double __x, long double __y) throw (); extern long double __fmaxl (long double __x, long double __y) throw ();
6279
6280
6281 extern long double fminl (long double __x, long double __y) throw (); extern long double __fminl (long double __x, long double __y) throw ();
6282
6283
6284
6285 extern int __fpclassifyl (long double __value) throw ()
6286      __attribute__ ((__const__));
6287
6288
6289 extern int __signbitl (long double __value) throw ()
6290      __attribute__ ((__const__));
6291
6292
6293
6294 extern long double fmal (long double __x, long double __y, long double __z) throw (); extern long double __fmal (long double __x, long double __y, long double __z) throw ();
6295
6296
6297
6298
6299
6300
6301
6302
6303 extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw ();
6304 # 142 "/usr/include/math.h" 2 3 4
6305 # 157 "/usr/include/math.h" 3 4
6306 extern int signgam;
6307 # 198 "/usr/include/math.h" 3 4
6308 enum
6309   {
6310     FP_NAN,
6311
6312     FP_INFINITE,
6313
6314     FP_ZERO,
6315
6316     FP_SUBNORMAL,
6317
6318     FP_NORMAL
6319
6320   };
6321 # 284 "/usr/include/math.h" 3 4
6322 typedef enum
6323 {
6324   _IEEE_ = -1,
6325   _SVID_,
6326   _XOPEN_,
6327   _POSIX_,
6328   _ISOC_
6329 } _LIB_VERSION_TYPE;
6330
6331
6332
6333
6334 extern _LIB_VERSION_TYPE _LIB_VERSION;
6335 # 307 "/usr/include/math.h" 3 4
6336 struct __exception
6337
6338
6339
6340   {
6341     int type;
6342     char *name;
6343     double arg1;
6344     double arg2;
6345     double retval;
6346   };
6347
6348
6349 extern int matherr (struct __exception *__exc) throw ();
6350 # 409 "/usr/include/math.h" 3 4
6351 # 1 "/usr/include/bits/mathinline.h" 1 3 4
6352 # 127 "/usr/include/bits/mathinline.h" 3 4
6353 __inline int
6354 __signbitf (float __x) throw ()
6355 {
6356   __extension__ union { float __f; int __i; } __u = { __f: __x };
6357   return __u.__i < 0;
6358 }
6359 __inline int
6360 __signbit (double __x) throw ()
6361 {
6362   __extension__ union { double __d; int __i[2]; } __u = { __d: __x };
6363   return __u.__i[1] < 0;
6364 }
6365 __inline int
6366 __signbitl (long double __x) throw ()
6367 {
6368   __extension__ union { long double __l; int __i[3]; } __u = { __l: __x };
6369   return (__u.__i[2] & 0x8000) != 0;
6370 }
6371 # 291 "/usr/include/bits/mathinline.h" 3 4
6372 __inline double __sgn (double) throw (); __inline double __sgn (double __x) throw () { return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0); } __inline float __sgnf (float) throw (); __inline float __sgnf (float __x) throw () { return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0); } __inline long double __sgnl (long double) throw (); __inline long double __sgnl (long double __x) throw () { return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0); }
6373 # 433 "/usr/include/bits/mathinline.h" 3 4
6374 __inline long double __atan2l (long double __y, long double __x) throw () { return __builtin_atan2l (__y, __x); }
6375 # 473 "/usr/include/bits/mathinline.h" 3 4
6376 __inline double fabs (double __x) throw () { return __builtin_fabs (__x); }
6377
6378 __inline float fabsf (float __x) throw () { return __builtin_fabsf (__x); }
6379 __inline long double fabsl (long double __x) throw () { return __builtin_fabsl (__x); }
6380
6381 __inline long double __fabsl (long double __x) throw () { return __builtin_fabsl (__x); }
6382 # 506 "/usr/include/bits/mathinline.h" 3 4
6383 __inline long double __sgn1l (long double) throw (); __inline long double __sgn1l (long double __x) throw () { __extension__ union { long double __xld; unsigned int __xi[3]; } __n = { __xld: __x }; __n.__xi[2] = (__n.__xi[2] & 0x8000) | 0x3fff; __n.__xi[1] = 0x80000000; __n.__xi[0] = 0; return __n.__xld; }
6384 # 530 "/usr/include/bits/mathinline.h" 3 4
6385 __inline double floor (double __x) throw () { register long double __value; register int __ignore; unsigned short int __cw; unsigned short int __cwtmp; __asm __volatile ("fnstcw %3\n\t" "movzwl %3, %1\n\t" "andl $0xf3ff, %1\n\t" "orl $0x0400, %1\n\t" "movw %w1, %2\n\t" "fldcw %2\n\t" "frndint\n\t" "fldcw %3" : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), "=m" (__cw) : "0" (__x)); return __value; } __inline float floorf (float __x) throw () { register long double __value; register int __ignore; unsigned short int __cw; unsigned short int __cwtmp; __asm __volatile ("fnstcw %3\n\t" "movzwl %3, %1\n\t" "andl $0xf3ff, %1\n\t" "orl $0x0400, %1\n\t" "movw %w1, %2\n\t" "fldcw %2\n\t" "frndint\n\t" "fldcw %3" : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), "=m" (__cw) : "0" (__x)); return __value; } __inline long double floorl (long double __x) throw () { register long double __value; register int __ignore; unsigned short int __cw; unsigned short int __cwtmp; __asm __volatile ("fnstcw %3\n\t" "movzwl %3, %1\n\t" "andl $0xf3ff, %1\n\t" "orl $0x0400, %1\n\t" "movw %w1, %2\n\t" "fldcw %2\n\t" "frndint\n\t" "fldcw %3" : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), "=m" (__cw) : "0" (__x)); return __value; }
6386 # 548 "/usr/include/bits/mathinline.h" 3 4
6387 __inline double ceil (double __x) throw () { register long double __value; register int __ignore; unsigned short int __cw; unsigned short int __cwtmp; __asm __volatile ("fnstcw %3\n\t" "movzwl %3, %1\n\t" "andl $0xf3ff, %1\n\t" "orl $0x0800, %1\n\t" "movw %w1, %2\n\t" "fldcw %2\n\t" "frndint\n\t" "fldcw %3" : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), "=m" (__cw) : "0" (__x)); return __value; } __inline float ceilf (float __x) throw () { register long double __value; register int __ignore; unsigned short int __cw; unsigned short int __cwtmp; __asm __volatile ("fnstcw %3\n\t" "movzwl %3, %1\n\t" "andl $0xf3ff, %1\n\t" "orl $0x0800, %1\n\t" "movw %w1, %2\n\t" "fldcw %2\n\t" "frndint\n\t" "fldcw %3" : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), "=m" (__cw) : "0" (__x)); return __value; } __inline long double ceill (long double __x) throw () { register long double __value; register int __ignore; unsigned short int __cw; unsigned short int __cwtmp; __asm __volatile ("fnstcw %3\n\t" "movzwl %3, %1\n\t" "andl $0xf3ff, %1\n\t" "orl $0x0800, %1\n\t" "movw %w1, %2\n\t" "fldcw %2\n\t" "frndint\n\t" "fldcw %3" : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), "=m" (__cw) : "0" (__x)); return __value; }
6388 # 667 "/usr/include/bits/mathinline.h" 3 4
6389 __inline long int
6390 lrintf (float __x) throw ()
6391 {
6392   long int __lrintres; __asm__ __volatile__ ("fistpl %0" : "=m" (__lrintres) : "t" (__x) : "st"); return __lrintres;
6393 }
6394 __inline long int
6395 lrint (double __x) throw ()
6396 {
6397   long int __lrintres; __asm__ __volatile__ ("fistpl %0" : "=m" (__lrintres) : "t" (__x) : "st"); return __lrintres;
6398 }
6399 __inline long int
6400 lrintl (long double __x) throw ()
6401 {
6402   long int __lrintres; __asm__ __volatile__ ("fistpl %0" : "=m" (__lrintres) : "t" (__x) : "st"); return __lrintres;
6403 }
6404 # 690 "/usr/include/bits/mathinline.h" 3 4
6405 __inline long long int
6406 llrintf (float __x) throw ()
6407 {
6408   long long int __llrintres; __asm__ __volatile__ ("fistpll %0" : "=m" (__llrintres) : "t" (__x) : "st"); return __llrintres;
6409 }
6410 __inline long long int
6411 llrint (double __x) throw ()
6412 {
6413   long long int __llrintres; __asm__ __volatile__ ("fistpll %0" : "=m" (__llrintres) : "t" (__x) : "st"); return __llrintres;
6414 }
6415 __inline long long int
6416 llrintl (long double __x) throw ()
6417 {
6418   long long int __llrintres; __asm__ __volatile__ ("fistpll %0" : "=m" (__llrintres) : "t" (__x) : "st"); return __llrintres;
6419 }
6420 # 727 "/usr/include/bits/mathinline.h" 3 4
6421 __inline int
6422 __finite (double __x) throw ()
6423 {
6424   return (__extension__
6425    (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1]
6426       | 0x800fffffu) + 1) >> 31));
6427 }
6428 # 410 "/usr/include/math.h" 2 3 4
6429 # 465 "/usr/include/math.h" 3 4
6430 }
6431 # 4 "src/circle.c++" 2
6432
6433 # 1 "/home/schultz/c/schultz/language/keywords" 1
6434 # 6 "src/circle.c++" 2
6435
6436 namespace khaos {
6437
6438
6439
6440
6441
6442  flop proj(const circle& C, const circle& D) {
6443   vector2<flop> dc = D.centre - C.centre;
6444   vector2<flop> dv = D.velocity - C.velocity;
6445   flop c = square(dv);
6446   if (c != 0) {
6447    flop a = square(dc) - square(C.radius + D.radius);
6448    flop b = flop(2)*dc*dv;
6449    flop d = square(b) - 4*a*c;
6450    if (d > 0) {
6451     d = sqrt(d);
6452     flop t0 = (-b-d)/(2*c), t1 = (-b+d)/(2*c);
6453     if ((t0 >= 0 && t1 >= 0) && (t0 > 0 || t1 > 0)) {
6454      flop t = min(t0, t1);
6455      ;
6456      return t;
6457     }
6458    }
6459   }
6460   return (__builtin_inff());
6461  }
6462
6463
6464  flop proj(const circle& C, vector2<flop> P) {
6465   vector2<flop> dc = P - C.centre;
6466   flop c = square(C.velocity);
6467   if (c != 0) {
6468    flop a = square(dc) - square(C.radius);
6469    flop b = -flop(2)*dc*C.velocity;
6470    flop d = square(b)-4*a*c;
6471    if (d > 0) {
6472     d = sqrt(d);
6473     flop t0 = (-b-d)/(2*c), t1 = (-b+d)/(2*c);
6474     if ((t0 >= 0 && t1 >= 0) && (t0 > 0 || t1 > 0)) {
6475      flop t = min(t0, t1);
6476      ;
6477      return t;
6478     }
6479    }
6480   }
6481   return (__builtin_inff());
6482  }
6483
6484
6485
6486
6487
6488  void coll(circle& C, circle& D) {
6489   vector2<flop> dc = D.centre - C.centre;
6490   vector2<flop> dv = D.velocity - C.velocity;
6491   flop w = flop(2)*dc*dv/(square(dc)*(C.mass + D.mass));
6492
6493   C.velocity+= dc * D.mass * w;
6494   D.velocity-= dc * C.mass * w;
6495  }
6496 }