]> git.wh0rd.org - ICEs.git/blame - 209253/ice.ii.0
initial import
[ICEs.git] / 209253 / ice.ii.0
CommitLineData
45516216 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
34extern "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
40typedef 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
53typedef unsigned char __u_char;
54typedef unsigned short int __u_short;
55typedef unsigned int __u_int;
56typedef unsigned long int __u_long;
57
58
59typedef signed char __int8_t;
60typedef unsigned char __uint8_t;
61typedef signed short int __int16_t;
62typedef unsigned short int __uint16_t;
63typedef signed int __int32_t;
64typedef 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
135typedef __off64_t __loff_t;
136typedef __quad_t *__qaddr_t;
137typedef 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
146struct _IO_FILE;
147
148
149
150typedef struct _IO_FILE FILE;
151
152
153
154
155
156# 65 "/usr/include/stdio.h" 3 4
157typedef 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
165typedef 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
176typedef 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
187typedef struct
188{
189 __off_t __pos;
190 __mbstate_t __state;
191} _G_fpos_t;
192typedef 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
214enum
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
232enum
233{
234 __GCONV_IS_LAST = 0x0001,
235 __GCONV_IGNORE_ERRORS = 0x0002
236};
237
238
239
240struct __gconv_step;
241struct __gconv_step_data;
242struct __gconv_loaded_object;
243struct __gconv_trans_data;
244
245
246
247typedef 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
252typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
253
254
255typedef int (*__gconv_init_fct) (struct __gconv_step *);
256typedef void (*__gconv_end_fct) (struct __gconv_step *);
257
258
259
260typedef 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
268typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
269 __const unsigned char *,
270 unsigned char *, unsigned char *);
271
272
273typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
274 size_t *);
275
276
277typedef int (*__gconv_trans_init_fct) (void **, const char *);
278typedef void (*__gconv_trans_end_fct) (void *);
279
280struct __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
292struct __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
322struct __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
349typedef 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
356typedef 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
366typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
367typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
368typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
369typedef 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
374typedef __builtin_va_list __gnuc_va_list;
375# 54 "/usr/include/libio.h" 2 3 4
376# 167 "/usr/include/libio.h" 3 4
377struct _IO_jump_t; struct _IO_FILE;
378# 177 "/usr/include/libio.h" 3 4
379typedef void _IO_lock_t;
380
381
382
383
384
385struct _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
396enum __codecvt_result
397{
398 __codecvt_ok,
399 __codecvt_partial,
400 __codecvt_error,
401 __codecvt_noconv
402};
403# 268 "/usr/include/libio.h" 3 4
404struct _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
463struct _IO_FILE_plus;
464
465extern struct _IO_FILE_plus _IO_2_1_stdin_;
466extern struct _IO_FILE_plus _IO_2_1_stdout_;
467extern struct _IO_FILE_plus _IO_2_1_stderr_;
468# 361 "/usr/include/libio.h" 3 4
469typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
470
471
472
473
474
475
476
477typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
478 size_t __n);
479
480
481
482
483
484
485
486typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
487
488
489typedef int __io_close_fn (void *__cookie);
490
491
492
493
494typedef __io_read_fn cookie_read_function_t;
495typedef __io_write_fn cookie_write_function_t;
496typedef __io_seek_fn cookie_seek_function_t;
497typedef __io_close_fn cookie_close_function_t;
498
499
500typedef 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;
507typedef _IO_cookie_io_functions_t cookie_io_functions_t;
508
509struct _IO_cookie_file;
510
511
512extern 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
518extern "C" {
519
520
521extern int __underflow (_IO_FILE *);
522extern int __uflow (_IO_FILE *);
523extern int __overflow (_IO_FILE *, int);
524extern wint_t __wunderflow (_IO_FILE *);
525extern wint_t __wuflow (_IO_FILE *);
526extern wint_t __woverflow (_IO_FILE *, wint_t);
527# 451 "/usr/include/libio.h" 3 4
528extern int _IO_getc (_IO_FILE *__fp);
529extern int _IO_putc (int __c, _IO_FILE *__fp);
530extern int _IO_feof (_IO_FILE *__fp) throw ();
531extern int _IO_ferror (_IO_FILE *__fp) throw ();
532
533extern int _IO_peekc_locked (_IO_FILE *__fp);
534
535
536
537
538
539extern void _IO_flockfile (_IO_FILE *) throw ();
540extern void _IO_funlockfile (_IO_FILE *) throw ();
541extern int _IO_ftrylockfile (_IO_FILE *) throw ();
542# 481 "/usr/include/libio.h" 3 4
543extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
544 __gnuc_va_list, int *__restrict);
545extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
546 __gnuc_va_list);
547extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
548extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
549
550extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
551extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
552
553extern 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
561typedef __gnuc_va_list va_list;
562# 89 "/usr/include/stdio.h" 3 4
563
564
565typedef _G_fpos_t fpos_t;
566
567
568
569
570
571typedef _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
578extern struct _IO_FILE *stdin;
579extern struct _IO_FILE *stdout;
580extern struct _IO_FILE *stderr;
581
582
583
584
585
586
587
588extern int remove (__const char *__filename) throw ();
589
590extern int rename (__const char *__old, __const char *__new) throw ();
591
592
593
594
595extern int renameat (int __oldfd, __const char *__old, int __newfd,
596 __const char *__new) throw ();
597
598
599
600
601
602
603
604
605extern FILE *tmpfile (void) ;
606# 182 "/usr/include/stdio.h" 3 4
607extern FILE *tmpfile64 (void) ;
608
609
610
611extern char *tmpnam (char *__s) throw () ;
612
613
614
615
616
617extern char *tmpnam_r (char *__s) throw () ;
618# 204 "/usr/include/stdio.h" 3 4
619extern char *tempnam (__const char *__dir, __const char *__pfx)
620 throw () __attribute__ ((__malloc__)) ;
621
622
623
624
625
626
627
628
629extern int fclose (FILE *__stream);
630
631
632
633
634extern int fflush (FILE *__stream);
635
636# 229 "/usr/include/stdio.h" 3 4
637extern int fflush_unlocked (FILE *__stream);
638# 239 "/usr/include/stdio.h" 3 4
639extern int fcloseall (void);
640
641
642
643
644
645
646
647
648
649extern FILE *fopen (__const char *__restrict __filename,
650 __const char *__restrict __modes) ;
651
652
653
654
655extern 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
661extern FILE *fopen64 (__const char *__restrict __filename,
662 __const char *__restrict __modes) ;
663extern FILE *freopen64 (__const char *__restrict __filename,
664 __const char *__restrict __modes,
665 FILE *__restrict __stream) ;
666
667
668
669
670extern FILE *fdopen (int __fd, __const char *__modes) throw () ;
671
672
673
674
675
676extern FILE *fopencookie (void *__restrict __magic_cookie,
677 __const char *__restrict __modes,
678 _IO_cookie_io_functions_t __io_funcs) throw () ;
679
680
681extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
682 throw () ;
683
684
685
686
687extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () ;
688
689
690
691
692
693
694extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
695
696
697
698extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
699 int __modes, size_t __n) throw ();
700
701
702
703
704
705extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
706 size_t __size) throw ();
707
708
709extern void setlinebuf (FILE *__stream) throw ();
710
711
712
713
714
715
716
717
718extern int fprintf (FILE *__restrict __stream,
719 __const char *__restrict __format, ...);
720
721
722
723
724extern int printf (__const char *__restrict __format, ...);
725
726extern int sprintf (char *__restrict __s,
727 __const char *__restrict __format, ...) throw ();
728
729
730
731
732
733extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
734 __gnuc_va_list __arg);
735
736
737
738
739extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);
740
741extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
742 __gnuc_va_list __arg) throw ();
743
744
745
746
747
748extern int snprintf (char *__restrict __s, size_t __maxlen,
749 __const char *__restrict __format, ...)
750 throw () __attribute__ ((__format__ (__printf__, 3, 4)));
751
752extern 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
761extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
762 __gnuc_va_list __arg)
763 throw () __attribute__ ((__format__ (__printf__, 2, 0))) ;
764extern int __asprintf (char **__restrict __ptr,
765 __const char *__restrict __fmt, ...)
766 throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
767extern int asprintf (char **__restrict __ptr,
768 __const char *__restrict __fmt, ...)
769 throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
770
771
772
773
774
775
776
777extern int vdprintf (int __fd, __const char *__restrict __fmt,
778 __gnuc_va_list __arg)
779 __attribute__ ((__format__ (__printf__, 2, 0)));
780extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
781 __attribute__ ((__format__ (__printf__, 2, 3)));
782
783
784
785
786
787
788
789
790extern int fscanf (FILE *__restrict __stream,
791 __const char *__restrict __format, ...) ;
792
793
794
795
796extern int scanf (__const char *__restrict __format, ...) ;
797
798extern int sscanf (__const char *__restrict __s,
799 __const char *__restrict __format, ...) throw ();
800
801
802
803
804
805
806
807
808extern 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
816extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
817 __attribute__ ((__format__ (__scanf__, 1, 0))) ;
818
819
820extern 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
832extern int fgetc (FILE *__stream);
833extern int getc (FILE *__stream);
834
835
836
837
838
839extern int getchar (void);
840
841# 464 "/usr/include/stdio.h" 3 4
842extern int getc_unlocked (FILE *__stream);
843extern int getchar_unlocked (void);
844# 475 "/usr/include/stdio.h" 3 4
845extern int fgetc_unlocked (FILE *__stream);
846
847
848
849
850
851
852
853
854
855
856
857extern int fputc (int __c, FILE *__stream);
858extern int putc (int __c, FILE *__stream);
859
860
861
862
863
864extern int putchar (int __c);
865
866# 508 "/usr/include/stdio.h" 3 4
867extern int fputc_unlocked (int __c, FILE *__stream);
868
869
870
871
872
873
874
875extern int putc_unlocked (int __c, FILE *__stream);
876extern int putchar_unlocked (int __c);
877
878
879
880
881
882
883extern int getw (FILE *__stream);
884
885
886extern int putw (int __w, FILE *__stream);
887
888
889
890
891
892
893
894
895extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
896 ;
897
898
899
900
901
902
903extern char *gets (char *__s) ;
904
905# 554 "/usr/include/stdio.h" 3 4
906extern char *fgets_unlocked (char *__restrict __s, int __n,
907 FILE *__restrict __stream) ;
908# 570 "/usr/include/stdio.h" 3 4
909extern __ssize_t __getdelim (char **__restrict __lineptr,
910 size_t *__restrict __n, int __delimiter,
911 FILE *__restrict __stream) ;
912extern __ssize_t getdelim (char **__restrict __lineptr,
913 size_t *__restrict __n, int __delimiter,
914 FILE *__restrict __stream) ;
915
916
917
918
919
920
921
922extern __ssize_t getline (char **__restrict __lineptr,
923 size_t *__restrict __n,
924 FILE *__restrict __stream) ;
925
926
927
928
929
930
931
932
933extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
934
935
936
937
938
939extern int puts (__const char *__s);
940
941
942
943
944
945
946extern int ungetc (int __c, FILE *__stream);
947
948
949
950
951
952
953extern size_t fread (void *__restrict __ptr, size_t __size,
954 size_t __n, FILE *__restrict __stream) ;
955
956
957
958
959extern 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
963extern int fputs_unlocked (__const char *__restrict __s,
964 FILE *__restrict __stream);
965# 642 "/usr/include/stdio.h" 3 4
966extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
967 size_t __n, FILE *__restrict __stream) ;
968extern 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
978extern int fseek (FILE *__stream, long int __off, int __whence);
979
980
981
982
983extern long int ftell (FILE *__stream) ;
984
985
986
987
988extern void rewind (FILE *__stream);
989
990# 678 "/usr/include/stdio.h" 3 4
991extern int fseeko (FILE *__stream, __off_t __off, int __whence);
992
993
994
995
996extern __off_t ftello (FILE *__stream) ;
997# 697 "/usr/include/stdio.h" 3 4
998
999
1000
1001
1002
1003
1004extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
1005
1006
1007
1008
1009extern int fsetpos (FILE *__stream, __const fpos_t *__pos);
1010# 720 "/usr/include/stdio.h" 3 4
1011
1012
1013
1014extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
1015extern __off64_t ftello64 (FILE *__stream) ;
1016extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
1017extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);
1018
1019
1020
1021
1022extern void clearerr (FILE *__stream) throw ();
1023
1024extern int feof (FILE *__stream) throw () ;
1025
1026extern int ferror (FILE *__stream) throw () ;
1027
1028
1029
1030
1031extern void clearerr_unlocked (FILE *__stream) throw ();
1032extern int feof_unlocked (FILE *__stream) throw () ;
1033extern int ferror_unlocked (FILE *__stream) throw () ;
1034
1035
1036
1037
1038
1039
1040
1041
1042extern 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
1051extern int sys_nerr;
1052extern __const char *__const sys_errlist[];
1053
1054
1055extern int _sys_nerr;
1056extern __const char *__const _sys_errlist[];
1057# 759 "/usr/include/stdio.h" 2 3 4
1058
1059
1060
1061
1062extern int fileno (FILE *__stream) throw () ;
1063
1064
1065
1066
1067extern int fileno_unlocked (FILE *__stream) throw () ;
1068# 778 "/usr/include/stdio.h" 3 4
1069extern FILE *popen (__const char *__command, __const char *__modes) ;
1070
1071
1072
1073
1074
1075extern int pclose (FILE *__stream);
1076
1077
1078
1079
1080
1081extern char *ctermid (char *__s) throw ();
1082
1083
1084
1085
1086
1087extern char *cuserid (char *__s);
1088
1089
1090
1091
1092struct obstack;
1093
1094
1095extern int obstack_printf (struct obstack *__restrict __obstack,
1096 __const char *__restrict __format, ...)
1097 throw () __attribute__ ((__format__ (__printf__, 2, 3)));
1098extern 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
1109extern void flockfile (FILE *__stream) throw ();
1110
1111
1112
1113extern int ftrylockfile (FILE *__stream) throw () ;
1114
1115
1116extern 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
1120inline int
1121vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
1122{
1123 return vfprintf (stdout, __fmt, __arg);
1124}
1125
1126
1127inline int
1128getchar (void)
1129{
1130 return _IO_getc (stdin);
1131}
1132
1133
1134
1135
1136inline int
1137fgetc_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
1146inline int
1147getc_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
1153inline int
1154getchar_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
1162inline int
1163putchar (int __c)
1164{
1165 return _IO_putc (__c, stdout);
1166}
1167
1168
1169
1170
1171inline int
1172fputc_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
1181inline int
1182putc_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
1188inline int
1189putchar_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
1198inline __ssize_t
1199getline (char **__lineptr, size_t *__n, FILE *__stream)
1200{
1201 return __getdelim (__lineptr, __n, '\n', __stream);
1202}
1203
1204
1205
1206
1207
1208inline int
1209feof_unlocked (FILE *__stream) throw ()
1210{
1211 return (((__stream)->_flags & 0x10) != 0);
1212}
1213
1214
1215inline int
1216ferror_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
1228extern "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
1239extern void *memcpy (void *__restrict __dest,
1240 __const void *__restrict __src, size_t __n)
1241 throw () __attribute__ ((__nonnull__ (1, 2)));
1242
1243
1244extern void *memmove (void *__dest, __const void *__src, size_t __n)
1245 throw () __attribute__ ((__nonnull__ (1, 2)));
1246
1247
1248
1249
1250
1251
1252extern 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
1260extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
1261
1262
1263extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
1264 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1265
1266
1267extern void *memchr (__const void *__s, int __c, size_t __n)
1268 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1269
1270
1271
1272
1273
1274extern void *rawmemchr (__const void *__s, int __c)
1275 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1276
1277
1278extern void *memrchr (__const void *__s, int __c, size_t __n)
1279 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1280
1281
1282
1283
1284
1285extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
1286 throw () __attribute__ ((__nonnull__ (1, 2)));
1287
1288extern char *strncpy (char *__restrict __dest,
1289 __const char *__restrict __src, size_t __n)
1290 throw () __attribute__ ((__nonnull__ (1, 2)));
1291
1292
1293extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
1294 throw () __attribute__ ((__nonnull__ (1, 2)));
1295
1296extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
1297 size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
1298
1299
1300extern int strcmp (__const char *__s1, __const char *__s2)
1301 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1302
1303extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
1304 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1305
1306
1307extern int strcoll (__const char *__s1, __const char *__s2)
1308 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1309
1310extern 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
1321typedef 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
1337extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
1338 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
1339
1340extern 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
1346extern char *strdup (__const char *__s)
1347 throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
1348
1349
1350
1351
1352
1353
1354extern 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
1359extern char *strchr (__const char *__s, int __c)
1360 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1361
1362extern char *strrchr (__const char *__s, int __c)
1363 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1364
1365
1366
1367
1368
1369extern char *strchrnul (__const char *__s, int __c)
1370 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1371
1372
1373
1374
1375
1376extern size_t strcspn (__const char *__s, __const char *__reject)
1377 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1378
1379
1380extern size_t strspn (__const char *__s, __const char *__accept)
1381 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1382
1383extern char *strpbrk (__const char *__s, __const char *__accept)
1384 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1385
1386extern char *strstr (__const char *__haystack, __const char *__needle)
1387 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1388
1389
1390
1391extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
1392 throw () __attribute__ ((__nonnull__ (2)));
1393
1394
1395
1396
1397extern char *__strtok_r (char *__restrict __s,
1398 __const char *__restrict __delim,
1399 char **__restrict __save_ptr)
1400 throw () __attribute__ ((__nonnull__ (2, 3)));
1401
1402extern 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
1409extern char *strcasestr (__const char *__haystack, __const char *__needle)
1410 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1411
1412
1413
1414
1415
1416
1417extern 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
1423extern void *__mempcpy (void *__restrict __dest,
1424 __const void *__restrict __src, size_t __n)
1425 throw () __attribute__ ((__nonnull__ (1, 2)));
1426extern void *mempcpy (void *__restrict __dest,
1427 __const void *__restrict __src, size_t __n)
1428 throw () __attribute__ ((__nonnull__ (1, 2)));
1429
1430
1431
1432
1433
1434extern size_t strlen (__const char *__s)
1435 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1436
1437
1438
1439
1440
1441extern size_t strnlen (__const char *__string, size_t __maxlen)
1442 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1443
1444
1445
1446
1447
1448extern char *strerror (int __errnum) throw ();
1449
1450# 281 "/usr/include/string.h" 3 4
1451extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
1452 throw () __attribute__ ((__nonnull__ (2)));
1453
1454
1455
1456
1457
1458extern char *strerror_l (int __errnum, __locale_t __l) throw ();
1459
1460
1461
1462
1463
1464extern void __bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
1465
1466
1467
1468extern void bcopy (__const void *__src, void *__dest, size_t __n)
1469 throw () __attribute__ ((__nonnull__ (1, 2)));
1470
1471
1472extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
1473
1474
1475extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
1476 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1477
1478
1479extern char *index (__const char *__s, int __c)
1480 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1481
1482
1483extern char *rindex (__const char *__s, int __c)
1484 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1485
1486
1487
1488extern int ffs (int __i) throw () __attribute__ ((__const__));
1489
1490
1491
1492
1493extern 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
1501extern int strcasecmp (__const char *__s1, __const char *__s2)
1502 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1503
1504
1505extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
1506 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1507
1508
1509
1510
1511
1512extern int strcasecmp_l (__const char *__s1, __const char *__s2,
1513 __locale_t __loc)
1514 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
1515
1516extern 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
1524extern char *strsep (char **__restrict __stringp,
1525 __const char *__restrict __delim)
1526 throw () __attribute__ ((__nonnull__ (1, 2)));
1527
1528
1529
1530
1531extern int strverscmp (__const char *__s1, __const char *__s2)
1532 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1533
1534
1535extern char *strsignal (int __sig) throw ();
1536
1537
1538extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
1539 throw () __attribute__ ((__nonnull__ (1, 2)));
1540extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
1541 throw () __attribute__ ((__nonnull__ (1, 2)));
1542
1543
1544
1545extern char *__stpncpy (char *__restrict __dest,
1546 __const char *__restrict __src, size_t __n)
1547 throw () __attribute__ ((__nonnull__ (1, 2)));
1548extern char *stpncpy (char *__restrict __dest,
1549 __const char *__restrict __src, size_t __n)
1550 throw () __attribute__ ((__nonnull__ (1, 2)));
1551
1552
1553extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1)));
1554
1555
1556extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
1557
1558
1559
1560
1561
1562
1563extern 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
1573extern "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
1590union 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
1626typedef struct
1627 {
1628 int quot;
1629 int rem;
1630 } div_t;
1631
1632
1633
1634typedef 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
1654extern size_t __ctype_get_mb_cur_max (void) throw () ;
1655
1656
1657
1658
1659extern double atof (__const char *__nptr)
1660 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
1661
1662extern int atoi (__const char *__nptr)
1663 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
1664
1665extern 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
1679extern double strtod (__const char *__restrict __nptr,
1680 char **__restrict __endptr)
1681 throw () __attribute__ ((__nonnull__ (1))) ;
1682
1683
1684
1685
1686
1687extern float strtof (__const char *__restrict __nptr,
1688 char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1))) ;
1689
1690extern long double strtold (__const char *__restrict __nptr,
1691 char **__restrict __endptr)
1692 throw () __attribute__ ((__nonnull__ (1))) ;
1693
1694
1695
1696
1697
1698extern long int strtol (__const char *__restrict __nptr,
1699 char **__restrict __endptr, int __base)
1700 throw () __attribute__ ((__nonnull__ (1))) ;
1701
1702extern 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__
1710extern long long int strtoq (__const char *__restrict __nptr,
1711 char **__restrict __endptr, int __base)
1712 throw () __attribute__ ((__nonnull__ (1))) ;
1713
1714__extension__
1715extern 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__
1724extern long long int strtoll (__const char *__restrict __nptr,
1725 char **__restrict __endptr, int __base)
1726 throw () __attribute__ ((__nonnull__ (1))) ;
1727
1728__extension__
1729extern 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
1734extern long int strtol_l (__const char *__restrict __nptr,
1735 char **__restrict __endptr, int __base,
1736 __locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4))) ;
1737
1738extern 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__
1744extern 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__
1750extern 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
1755extern double strtod_l (__const char *__restrict __nptr,
1756 char **__restrict __endptr, __locale_t __loc)
1757 throw () __attribute__ ((__nonnull__ (1, 3))) ;
1758
1759extern float strtof_l (__const char *__restrict __nptr,
1760 char **__restrict __endptr, __locale_t __loc)
1761 throw () __attribute__ ((__nonnull__ (1, 3))) ;
1762
1763extern 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
1773extern double __strtod_internal (__const char *__restrict __nptr,
1774 char **__restrict __endptr, int __group)
1775 throw () __attribute__ ((__nonnull__ (1))) ;
1776extern float __strtof_internal (__const char *__restrict __nptr,
1777 char **__restrict __endptr, int __group)
1778 throw () __attribute__ ((__nonnull__ (1))) ;
1779extern long double __strtold_internal (__const char *__restrict __nptr,
1780 char **__restrict __endptr,
1781 int __group)
1782 throw () __attribute__ ((__nonnull__ (1))) ;
1783
1784extern 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
1791extern 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__
1800extern 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__
1808extern 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
1821extern __inline double
1822strtod (__const char *__restrict __nptr, char **__restrict __endptr) throw ()
1823{
1824 return __strtod_internal (__nptr, __endptr, 0);
1825}
1826extern __inline long int
1827strtol (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ()
1828
1829{
1830 return __strtol_internal (__nptr, __endptr, __base, 0);
1831}
1832extern __inline unsigned long int
1833strtoul (__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
1842extern __inline float
1843strtof (__const char *__restrict __nptr, char **__restrict __endptr) throw ()
1844{
1845 return __strtof_internal (__nptr, __endptr, 0);
1846}
1847
1848extern __inline long double
1849strtold (__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
1859strtoq (__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
1865strtouq (__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
1875strtoll (__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
1881strtoull (__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
1890extern __inline double
1891atof (__const char *__nptr) throw ()
1892{
1893 return strtod (__nptr, (char **) __null);
1894}
1895extern __inline int
1896atoi (__const char *__nptr) throw ()
1897{
1898 return (int) strtol (__nptr, (char **) __null, 10);
1899}
1900extern __inline long int
1901atol (__const char *__nptr) throw ()
1902{
1903 return strtol (__nptr, (char **) __null, 10);
1904}
1905
1906
1907
1908
1909__extension__ extern __inline long long int
1910atoll (__const char *__nptr) throw ()
1911{
1912 return strtoll (__nptr, (char **) __null, 10);
1913}
1914
1915# 429 "/usr/include/stdlib.h" 3 4
1916extern char *l64a (long int __n) throw () ;
1917
1918
1919extern 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
1927extern "C" {
1928
1929
1930
1931
1932
1933typedef __u_char u_char;
1934typedef __u_short u_short;
1935typedef __u_int u_int;
1936typedef __u_long u_long;
1937typedef __quad_t quad_t;
1938typedef __u_quad_t u_quad_t;
1939typedef __fsid_t fsid_t;
1940
1941
1942
1943
1944typedef __loff_t loff_t;
1945
1946
1947
1948typedef __ino_t ino_t;
1949
1950
1951
1952
1953
1954
1955typedef __ino64_t ino64_t;
1956
1957
1958
1959
1960typedef __dev_t dev_t;
1961
1962
1963
1964
1965typedef __gid_t gid_t;
1966
1967
1968
1969
1970typedef __mode_t mode_t;
1971
1972
1973
1974
1975typedef __nlink_t nlink_t;
1976
1977
1978
1979
1980typedef __uid_t uid_t;
1981
1982
1983
1984
1985
1986typedef __off_t off_t;
1987
1988
1989
1990
1991
1992
1993typedef __off64_t off64_t;
1994
1995
1996
1997
1998typedef __pid_t pid_t;
1999
2000
2001
2002
2003typedef __id_t id_t;
2004
2005
2006
2007
2008typedef __ssize_t ssize_t;
2009
2010
2011
2012
2013
2014typedef __daddr_t daddr_t;
2015typedef __caddr_t caddr_t;
2016
2017
2018
2019
2020
2021typedef __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
2027typedef __clock_t clock_t;
2028
2029
2030
2031# 75 "/usr/include/time.h" 3 4
2032
2033
2034typedef __time_t time_t;
2035
2036
2037
2038# 93 "/usr/include/time.h" 3 4
2039typedef __clockid_t clockid_t;
2040# 105 "/usr/include/time.h" 3 4
2041typedef __timer_t timer_t;
2042# 134 "/usr/include/sys/types.h" 2 3 4
2043
2044
2045
2046typedef __useconds_t useconds_t;
2047
2048
2049
2050typedef __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
2061typedef unsigned long int ulong;
2062typedef unsigned short int ushort;
2063typedef unsigned int uint;
2064# 195 "/usr/include/sys/types.h" 3 4
2065typedef int int8_t __attribute__ ((__mode__ (__QI__)));
2066typedef int int16_t __attribute__ ((__mode__ (__HI__)));
2067typedef int int32_t __attribute__ ((__mode__ (__SI__)));
2068typedef int int64_t __attribute__ ((__mode__ (__DI__)));
2069
2070
2071typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
2072typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
2073typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
2074typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
2075
2076typedef 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
2086typedef int __sig_atomic_t;
2087
2088
2089
2090
2091typedef 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
2099typedef __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
2107struct 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
2116struct 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
2123typedef long int __fd_mask;
2124# 67 "/usr/include/sys/select.h" 3 4
2125typedef 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
2143typedef __fd_mask fd_mask;
2144# 99 "/usr/include/sys/select.h" 3 4
2145extern "C" {
2146# 109 "/usr/include/sys/select.h" 3 4
2147extern 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
2152extern 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__
2166extern __inline unsigned int gnu_dev_major (unsigned long long int __dev)
2167 throw ();
2168__extension__
2169extern __inline unsigned int gnu_dev_minor (unsigned long long int __dev)
2170 throw ();
2171__extension__
2172extern __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
2178gnu_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
2184gnu_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
2190gnu_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
2201typedef __blksize_t blksize_t;
2202
2203
2204
2205
2206
2207
2208typedef __blkcnt_t blkcnt_t;
2209
2210
2211
2212typedef __fsblkcnt_t fsblkcnt_t;
2213
2214
2215
2216typedef __fsfilcnt_t fsfilcnt_t;
2217# 262 "/usr/include/sys/types.h" 3 4
2218typedef __blkcnt64_t blkcnt64_t;
2219typedef __fsblkcnt64_t fsblkcnt64_t;
2220typedef __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
2228typedef unsigned long int pthread_t;
2229
2230
2231typedef union
2232{
2233 char __size[36];
2234 long int __align;
2235} pthread_attr_t;
2236
2237
2238typedef struct __pthread_internal_slist
2239{
2240 struct __pthread_internal_slist *__next;
2241} __pthread_slist_t;
2242
2243
2244
2245
2246typedef 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
2267typedef union
2268{
2269 char __size[4];
2270 long int __align;
2271} pthread_mutexattr_t;
2272
2273
2274
2275
2276typedef 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
2293typedef union
2294{
2295 char __size[4];
2296 long int __align;
2297} pthread_condattr_t;
2298
2299
2300
2301typedef unsigned int pthread_key_t;
2302
2303
2304
2305typedef int pthread_once_t;
2306
2307
2308
2309
2310
2311typedef 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
2330typedef union
2331{
2332 char __size[8];
2333 long int __align;
2334} pthread_rwlockattr_t;
2335
2336
2337
2338
2339
2340typedef volatile int pthread_spinlock_t;
2341
2342
2343
2344
2345typedef union
2346{
2347 char __size[20];
2348 long int __align;
2349} pthread_barrier_t;
2350
2351typedef 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
2367extern long int random (void) throw ();
2368
2369
2370extern void srandom (unsigned int __seed) throw ();
2371
2372
2373
2374
2375
2376extern char *initstate (unsigned int __seed, char *__statebuf,
2377 size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
2378
2379
2380
2381extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
2382
2383
2384
2385
2386
2387
2388
2389struct 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
2400extern int random_r (struct random_data *__restrict __buf,
2401 int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
2402
2403extern int srandom_r (unsigned int __seed, struct random_data *__buf)
2404 throw () __attribute__ ((__nonnull__ (2)));
2405
2406extern 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
2411extern int setstate_r (char *__restrict __statebuf,
2412 struct random_data *__restrict __buf)
2413 throw () __attribute__ ((__nonnull__ (1, 2)));
2414
2415
2416
2417
2418
2419
2420extern int rand (void) throw ();
2421
2422extern void srand (unsigned int __seed) throw ();
2423
2424
2425
2426
2427extern int rand_r (unsigned int *__seed) throw ();
2428
2429
2430
2431
2432
2433
2434
2435extern double drand48 (void) throw ();
2436extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
2437
2438
2439extern long int lrand48 (void) throw ();
2440extern long int nrand48 (unsigned short int __xsubi[3])
2441 throw () __attribute__ ((__nonnull__ (1)));
2442
2443
2444extern long int mrand48 (void) throw ();
2445extern long int jrand48 (unsigned short int __xsubi[3])
2446 throw () __attribute__ ((__nonnull__ (1)));
2447
2448
2449extern void srand48 (long int __seedval) throw ();
2450extern unsigned short int *seed48 (unsigned short int __seed16v[3])
2451 throw () __attribute__ ((__nonnull__ (1)));
2452extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
2453
2454
2455
2456
2457
2458struct 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
2468extern int drand48_r (struct drand48_data *__restrict __buffer,
2469 double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
2470extern 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
2475extern int lrand48_r (struct drand48_data *__restrict __buffer,
2476 long int *__restrict __result)
2477 throw () __attribute__ ((__nonnull__ (1, 2)));
2478extern 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
2484extern int mrand48_r (struct drand48_data *__restrict __buffer,
2485 long int *__restrict __result)
2486 throw () __attribute__ ((__nonnull__ (1, 2)));
2487extern 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
2493extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
2494 throw () __attribute__ ((__nonnull__ (2)));
2495
2496extern int seed48_r (unsigned short int __seed16v[3],
2497 struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
2498
2499extern 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
2511extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
2512
2513extern void *calloc (size_t __nmemb, size_t __size)
2514 throw () __attribute__ ((__malloc__)) ;
2515
2516
2517
2518
2519
2520
2521
2522extern void *realloc (void *__ptr, size_t __size)
2523 throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
2524
2525extern void free (void *__ptr) throw ();
2526
2527
2528
2529
2530extern 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
2539extern "C" {
2540
2541
2542
2543
2544
2545extern 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
2557extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
2558
2559
2560
2561
2562extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
2563 throw () __attribute__ ((__nonnull__ (1))) ;
2564
2565
2566
2567
2568extern void abort (void) throw () __attribute__ ((__noreturn__));
2569
2570
2571
2572extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
2573
2574
2575
2576
2577
2578extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
2579 throw () __attribute__ ((__nonnull__ (1)));
2580
2581
2582
2583
2584
2585
2586extern void exit (int __status) throw () __attribute__ ((__noreturn__));
2587
2588
2589
2590
2591
2592
2593extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
2594
2595
2596
2597
2598
2599
2600extern char *getenv (__const char *__name) throw () __attribute__ ((__nonnull__ (1))) ;
2601
2602
2603
2604
2605extern char *__secure_getenv (__const char *__name)
2606 throw () __attribute__ ((__nonnull__ (1))) ;
2607
2608
2609
2610
2611
2612extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
2613
2614
2615
2616
2617
2618extern int setenv (__const char *__name, __const char *__value, int __replace)
2619 throw () __attribute__ ((__nonnull__ (2)));
2620
2621
2622extern int unsetenv (__const char *__name) throw ();
2623
2624
2625
2626
2627
2628
2629extern int clearenv (void) throw ();
2630# 698 "/usr/include/stdlib.h" 3 4
2631extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ;
2632# 709 "/usr/include/stdlib.h" 3 4
2633extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ;
2634# 719 "/usr/include/stdlib.h" 3 4
2635extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
2636# 729 "/usr/include/stdlib.h" 3 4
2637extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ;
2638
2639
2640
2641
2642
2643
2644
2645
2646extern int system (__const char *__command) ;
2647
2648
2649
2650
2651
2652
2653extern char *canonicalize_file_name (__const char *__name)
2654 throw () __attribute__ ((__nonnull__ (1))) ;
2655# 755 "/usr/include/stdlib.h" 3 4
2656extern char *realpath (__const char *__restrict __name,
2657 char *__restrict __resolved) throw () ;
2658
2659
2660
2661
2662
2663
2664typedef int (*__compar_fn_t) (__const void *, __const void *);
2665
2666
2667typedef __compar_fn_t comparison_fn_t;
2668
2669
2670
2671
2672
2673
2674extern 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
2680extern void qsort (void *__base, size_t __nmemb, size_t __size,
2681 __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
2682
2683
2684
2685extern int abs (int __x) throw () __attribute__ ((__const__)) ;
2686extern 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
2699extern div_t div (int __numer, int __denom)
2700 throw () __attribute__ ((__const__)) ;
2701extern 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
2712extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
2713 int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
2714
2715
2716
2717
2718extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
2719 int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
2720
2721
2722
2723
2724extern char *gcvt (double __value, int __ndigit, char *__buf)
2725 throw () __attribute__ ((__nonnull__ (3))) ;
2726
2727
2728
2729
2730extern char *qecvt (long double __value, int __ndigit,
2731 int *__restrict __decpt, int *__restrict __sign)
2732 throw () __attribute__ ((__nonnull__ (3, 4))) ;
2733extern char *qfcvt (long double __value, int __ndigit,
2734 int *__restrict __decpt, int *__restrict __sign)
2735 throw () __attribute__ ((__nonnull__ (3, 4))) ;
2736extern char *qgcvt (long double __value, int __ndigit, char *__buf)
2737 throw () __attribute__ ((__nonnull__ (3))) ;
2738
2739
2740
2741
2742extern 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)));
2745extern 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
2749extern 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)));
2753extern 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
2764extern int mblen (__const char *__s, size_t __n) throw () ;
2765
2766
2767extern int mbtowc (wchar_t *__restrict __pwc,
2768 __const char *__restrict __s, size_t __n) throw () ;
2769
2770
2771extern int wctomb (char *__s, wchar_t __wchar) throw () ;
2772
2773
2774
2775extern size_t mbstowcs (wchar_t *__restrict __pwcs,
2776 __const char *__restrict __s, size_t __n) throw ();
2777
2778extern 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
2789extern int rpmatch (__const char *__response) throw () __attribute__ ((__nonnull__ (1))) ;
2790# 908 "/usr/include/stdlib.h" 3 4
2791extern 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
2800extern void setkey (__const char *__key) throw () __attribute__ ((__nonnull__ (1)));
2801
2802
2803
2804
2805
2806
2807
2808extern int posix_openpt (int __oflag) ;
2809
2810
2811
2812
2813
2814
2815
2816extern int grantpt (int __fd) throw ();
2817
2818
2819
2820extern int unlockpt (int __fd) throw ();
2821
2822
2823
2824
2825extern char *ptsname (int __fd) throw () ;
2826
2827
2828
2829
2830
2831
2832extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
2833 throw () __attribute__ ((__nonnull__ (2)));
2834
2835
2836extern int getpt (void);
2837
2838
2839
2840
2841
2842
2843extern 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
2849namespace 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"
2858typedef unsigned int nat;
2859# 28 "/home/schultz/c/schultz/language/types"
2860typedef 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
2870namespace __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"
2891template<bool> struct bool_type {};
2892
2893typedef bool_type<false> false_type;
2894typedef bool_type<true> true_type;
2895# 31 "/home/schultz/c/schultz/language/meta"
2896template<nat> struct nat_type {};
2897# 41 "/home/schultz/c/schultz/language/meta"
2898template<typename T, typename U> struct type_equality {
2899 enum {value = false};
2900};
2901template<typename T> struct type_equality<T, T> {
2902 enum {value = true};
2903};
2904
2905namespace __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"
2911template<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"
2930template<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"
2953template<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
2972template<> struct type_traits<bool> : public builtin_type_traits<bool> {};
2973template<> struct type_traits<nat> : public builtin_type_traits<nat> {};
2974template<> struct type_traits<int> : public builtin_type_traits<int> {};
2975template<> struct type_traits<unsigned char> : public builtin_type_traits<unsigned char> {};
2976template<> struct type_traits<char> : public builtin_type_traits<char> {};
2977template<> struct type_traits<unsigned short> : public builtin_type_traits<unsigned short> {};
2978template<> struct type_traits<short> : public builtin_type_traits<short> {};
2979template<> struct type_traits<unsigned long long int> : public builtin_type_traits<unsigned long long int> {};
2980template<> struct type_traits<long long int> : public builtin_type_traits<long long int> {};
2981template<> struct type_traits<float> : public builtin_type_traits<float> {};
2982template<> struct type_traits<double> : public builtin_type_traits<double> {};
2983template<typename T> struct type_traits<T*> : public builtin_type_traits<T*> {
2984 enum {iterator = true};
2985};
2986template<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"
2990template<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"
3001template<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
3013template<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};
3023template<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"
3034template<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"
3048template<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
3059template<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"
3066template<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
3078template<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
3088template<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"
3092template<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};
3097template<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
3104template<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};
3109template<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
3116template<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};
3121template<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"
3127template<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
3134template<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
3139template<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"
3145template<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
3155template<typename T> inline T abs(const T& x) {
3156 return x < 0 ? -x : x;
3157}
3158# 47 "/home/schultz/c/schultz/language/base"
3159namespace __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
3178template<typename T> inline void swap(T& a, T& b) {
3179 __schultz::swap_meta<type_traits<T>::special_swap>::swap(a, b);
3180}
3181
3182
3183template<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"
3188namespace __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
3206template<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"
3210namespace __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
3228template<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"
3232namespace __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
3252template<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"
3256namespace __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
3279template<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"
3283template<typename T, typename O> inline const T& min(const T& x, const T& y, O o) {
3284 return o(x, y) ? x : y;
3285}
3286template<typename T> inline const T& min(const T& x, const T& y) {
3287 return min(x, y, lessf<T>());
3288}
3289template<typename T, typename O> inline T& min(T& x, T& y, O o) {
3290 return o(x, y) ? x : y;
3291}
3292template<typename T> inline T& min(T& x, T& y) {
3293 return min(x, y, lessf<T>());
3294}
3295
3296
3297template<typename T, typename O> inline const T& max(const T& x, const T& y, O o) {
3298 return o(y, x) ? x : y;
3299}
3300template<typename T> inline const T& max(const T& x, const T& y) {
3301 return max(x, y, lessf<T>());
3302}
3303template<typename T, typename O> inline T& max(T& x, T& y, O o) {
3304 return o(y, x) ? x : y;
3305}
3306template<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"
3310template<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}
3314template<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"
3318template<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}
3322template<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
3327template<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}
3330template<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"
3334template<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}
3344template<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
3349template<> 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}
3353template<> 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}
3357template<> 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}
3361template<> 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
3367template<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}
3377template<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
3382template<> 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}
3388template<> 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}
3394template<> 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}
3400template<> 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"
3407template<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}
3413template<typename I> inline I minimum(I a, I b) {
3414 return minimum(a, b, lessf<typename iterator_traits< I >::value_type>());
3415}
3416
3417
3418template<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}
3424template<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"
3428template<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}
3438template<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"
3442template<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"
3448namespace __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
3472template<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"
3476template<typename I, typename F> void map(I a, I b, F f) {
3477 for (; a != b; ++a) f(*a);
3478}
3479
3480
3481template<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
3494namespace __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"
3553template<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
3560template<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
3585template<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"
3591template<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
3641template<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"
3647template<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
3794namespace __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"
3850template<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
3953template<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"
4030typedef interval<nat> _;
4031# 423 "/home/schultz/c/schultz/language/interval"
4032template<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}
4035template<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}
4042template<typename T> inline void* operator new(size_t, T* p) {return p;}
4043namespace schultz {
4044# 51 "/home/schultz/c/schultz/language/memory"
4045namespace __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
4074template<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"
4080namespace __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
4112template<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"
4117namespace __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
4157template<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"
4162namespace __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
4180template<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"
4185struct 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
4220typedef system_allocation default_allocation;
4221# 367 "/home/schultz/c/schultz/language/memory"
4222namespace __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}
4233template<typename T> inline void construct(T& x) {
4234 __schultz::construct_meta<type_traits<T>::trivial_constructor>::construct(x);
4235}
4236
4237
4238namespace __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}
4250template<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
4256namespace __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}
4271template<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"
4276namespace __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}
4289template<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
4294namespace __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}
4307template<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"
4311namespace __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}
4322template<typename T> inline void destruct(T& x) {
4323 __schultz::destruct_meta<type_traits<T>::trivial_destructor>::destruct(x);
4324}
4325
4326
4327namespace __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}
4339template<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
4344namespace __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"
4427template<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"
4452namespace 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"
4582namespace 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
5229using namespace schultz;
5230
5231namespace 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
5329extern "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
5353typedef long double float_t;
5354
5355typedef 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
5362extern double acos (double __x) throw (); extern double __acos (double __x) throw ();
5363
5364extern double asin (double __x) throw (); extern double __asin (double __x) throw ();
5365
5366extern double atan (double __x) throw (); extern double __atan (double __x) throw ();
5367
5368extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw ();
5369
5370
5371extern double cos (double __x) throw (); extern double __cos (double __x) throw ();
5372
5373extern double sin (double __x) throw (); extern double __sin (double __x) throw ();
5374
5375extern double tan (double __x) throw (); extern double __tan (double __x) throw ();
5376
5377
5378
5379
5380extern double cosh (double __x) throw (); extern double __cosh (double __x) throw ();
5381
5382extern double sinh (double __x) throw (); extern double __sinh (double __x) throw ();
5383
5384extern double tanh (double __x) throw (); extern double __tanh (double __x) throw ();
5385
5386
5387
5388
5389extern 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
5396extern double acosh (double __x) throw (); extern double __acosh (double __x) throw ();
5397
5398extern double asinh (double __x) throw (); extern double __asinh (double __x) throw ();
5399
5400extern double atanh (double __x) throw (); extern double __atanh (double __x) throw ();
5401
5402
5403
5404
5405
5406
5407
5408extern double exp (double __x) throw (); extern double __exp (double __x) throw ();
5409
5410
5411extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw ();
5412
5413
5414extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw ();
5415
5416
5417extern double log (double __x) throw (); extern double __log (double __x) throw ();
5418
5419
5420extern double log10 (double __x) throw (); extern double __log10 (double __x) throw ();
5421
5422
5423extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw ();
5424
5425
5426
5427
5428extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw ();
5429
5430extern double pow10 (double __x) throw (); extern double __pow10 (double __x) throw ();
5431
5432
5433
5434
5435
5436extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw ();
5437
5438
5439extern double log1p (double __x) throw (); extern double __log1p (double __x) throw ();
5440
5441
5442extern double logb (double __x) throw (); extern double __logb (double __x) throw ();
5443
5444
5445
5446
5447
5448
5449extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw ();
5450
5451
5452extern double log2 (double __x) throw (); extern double __log2 (double __x) throw ();
5453
5454
5455
5456
5457
5458
5459
5460
5461extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw ();
5462
5463
5464extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw ();
5465
5466
5467
5468
5469
5470extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw ();
5471
5472
5473
5474
5475
5476
5477extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw ();
5478
5479
5480
5481
5482
5483
5484
5485
5486extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__));
5487
5488
5489extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__));
5490
5491
5492extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__));
5493
5494
5495extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw ();
5496
5497
5498
5499
5500extern int __isinf (double __value) throw () __attribute__ ((__const__));
5501
5502
5503extern int __finite (double __value) throw () __attribute__ ((__const__));
5504
5505
5506
5507
5508
5509extern int isinf (double __value) throw () __attribute__ ((__const__));
5510
5511
5512extern int finite (double __value) throw () __attribute__ ((__const__));
5513
5514
5515extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw ();
5516
5517
5518
5519extern double significand (double __x) throw (); extern double __significand (double __x) throw ();
5520
5521
5522
5523
5524
5525extern 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
5532extern double nan (__const char *__tagb) throw () __attribute__ ((__const__)); extern double __nan (__const char *__tagb) throw () __attribute__ ((__const__));
5533
5534
5535
5536
5537
5538extern int __isnan (double __value) throw () __attribute__ ((__const__));
5539
5540
5541
5542extern int isnan (double __value) throw () __attribute__ ((__const__));
5543
5544
5545extern double j0 (double) throw (); extern double __j0 (double) throw ();
5546extern double j1 (double) throw (); extern double __j1 (double) throw ();
5547extern double jn (int, double) throw (); extern double __jn (int, double) throw ();
5548extern double y0 (double) throw (); extern double __y0 (double) throw ();
5549extern double y1 (double) throw (); extern double __y1 (double) throw ();
5550extern double yn (int, double) throw (); extern double __yn (int, double) throw ();
5551
5552
5553
5554
5555
5556
5557extern double erf (double) throw (); extern double __erf (double) throw ();
5558extern double erfc (double) throw (); extern double __erfc (double) throw ();
5559extern double lgamma (double) throw (); extern double __lgamma (double) throw ();
5560
5561
5562
5563
5564
5565
5566extern double tgamma (double) throw (); extern double __tgamma (double) throw ();
5567
5568
5569
5570
5571
5572extern double gamma (double) throw (); extern double __gamma (double) throw ();
5573
5574
5575
5576
5577
5578
5579extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw ();
5580
5581
5582
5583
5584
5585
5586
5587extern double rint (double __x) throw (); extern double __rint (double __x) throw ();
5588
5589
5590extern double nextafter (double __x, double __y) throw () __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) throw () __attribute__ ((__const__));
5591
5592extern double nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); extern double __nexttoward (double __x, long double __y) throw () __attribute__ ((__const__));
5593
5594
5595
5596extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw ();
5597
5598
5599
5600extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw ();
5601
5602
5603
5604extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw ();
5605
5606
5607
5608
5609extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw ();
5610
5611
5612
5613extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw ();
5614
5615
5616
5617extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__));
5618
5619
5620
5621extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__));
5622
5623
5624
5625
5626extern 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
5633extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw ();
5634extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw ();
5635
5636
5637
5638extern long int lround (double __x) throw (); extern long int __lround (double __x) throw ();
5639extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw ();
5640
5641
5642
5643extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw ();
5644
5645
5646extern double fmax (double __x, double __y) throw (); extern double __fmax (double __x, double __y) throw ();
5647
5648
5649extern double fmin (double __x, double __y) throw (); extern double __fmin (double __x, double __y) throw ();
5650
5651
5652
5653extern int __fpclassify (double __value) throw ()
5654 __attribute__ ((__const__));
5655
5656
5657extern int __signbit (double __value) throw ()
5658 __attribute__ ((__const__));
5659
5660
5661
5662extern 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
5671extern 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
5678extern float acosf (float __x) throw (); extern float __acosf (float __x) throw ();
5679
5680extern float asinf (float __x) throw (); extern float __asinf (float __x) throw ();
5681
5682extern float atanf (float __x) throw (); extern float __atanf (float __x) throw ();
5683
5684extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw ();
5685
5686
5687extern float cosf (float __x) throw (); extern float __cosf (float __x) throw ();
5688
5689extern float sinf (float __x) throw (); extern float __sinf (float __x) throw ();
5690
5691extern float tanf (float __x) throw (); extern float __tanf (float __x) throw ();
5692
5693
5694
5695
5696extern float coshf (float __x) throw (); extern float __coshf (float __x) throw ();
5697
5698extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw ();
5699
5700extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw ();
5701
5702
5703
5704
5705extern 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
5712extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw ();
5713
5714extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw ();
5715
5716extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw ();
5717
5718
5719
5720
5721
5722
5723
5724extern float expf (float __x) throw (); extern float __expf (float __x) throw ();
5725
5726
5727extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw ();
5728
5729
5730extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw ();
5731
5732
5733extern float logf (float __x) throw (); extern float __logf (float __x) throw ();
5734
5735
5736extern float log10f (float __x) throw (); extern float __log10f (float __x) throw ();
5737
5738
5739extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw ();
5740
5741
5742
5743
5744extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw ();
5745
5746extern float pow10f (float __x) throw (); extern float __pow10f (float __x) throw ();
5747
5748
5749
5750
5751
5752extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw ();
5753
5754
5755extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw ();
5756
5757
5758extern float logbf (float __x) throw (); extern float __logbf (float __x) throw ();
5759
5760
5761
5762
5763
5764
5765extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw ();
5766
5767
5768extern float log2f (float __x) throw (); extern float __log2f (float __x) throw ();
5769
5770
5771
5772
5773
5774
5775
5776
5777extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw ();
5778
5779
5780extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw ();
5781
5782
5783
5784
5785
5786extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw ();
5787
5788
5789
5790
5791
5792
5793extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw ();
5794
5795
5796
5797
5798
5799
5800
5801
5802extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__));
5803
5804
5805extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__));
5806
5807
5808extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__));
5809
5810
5811extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw ();
5812
5813
5814
5815
5816extern int __isinff (float __value) throw () __attribute__ ((__const__));
5817
5818
5819extern int __finitef (float __value) throw () __attribute__ ((__const__));
5820
5821
5822
5823
5824
5825extern int isinff (float __value) throw () __attribute__ ((__const__));
5826
5827
5828extern int finitef (float __value) throw () __attribute__ ((__const__));
5829
5830
5831extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw ();
5832
5833
5834
5835extern float significandf (float __x) throw (); extern float __significandf (float __x) throw ();
5836
5837
5838
5839
5840
5841extern 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
5848extern float nanf (__const char *__tagb) throw () __attribute__ ((__const__)); extern float __nanf (__const char *__tagb) throw () __attribute__ ((__const__));
5849
5850
5851
5852
5853
5854extern int __isnanf (float __value) throw () __attribute__ ((__const__));
5855
5856
5857
5858extern int isnanf (float __value) throw () __attribute__ ((__const__));
5859
5860
5861extern float j0f (float) throw (); extern float __j0f (float) throw ();
5862extern float j1f (float) throw (); extern float __j1f (float) throw ();
5863extern float jnf (int, float) throw (); extern float __jnf (int, float) throw ();
5864extern float y0f (float) throw (); extern float __y0f (float) throw ();
5865extern float y1f (float) throw (); extern float __y1f (float) throw ();
5866extern float ynf (int, float) throw (); extern float __ynf (int, float) throw ();
5867
5868
5869
5870
5871
5872
5873extern float erff (float) throw (); extern float __erff (float) throw ();
5874extern float erfcf (float) throw (); extern float __erfcf (float) throw ();
5875extern float lgammaf (float) throw (); extern float __lgammaf (float) throw ();
5876
5877
5878
5879
5880
5881
5882extern float tgammaf (float) throw (); extern float __tgammaf (float) throw ();
5883
5884
5885
5886
5887
5888extern float gammaf (float) throw (); extern float __gammaf (float) throw ();
5889
5890
5891
5892
5893
5894
5895extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw ();
5896
5897
5898
5899
5900
5901
5902
5903extern float rintf (float __x) throw (); extern float __rintf (float __x) throw ();
5904
5905
5906extern float nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) throw () __attribute__ ((__const__));
5907
5908extern float nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); extern float __nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__));
5909
5910
5911
5912extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw ();
5913
5914
5915
5916extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw ();
5917
5918
5919
5920extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw ();
5921
5922
5923
5924
5925extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw ();
5926
5927
5928
5929extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw ();
5930
5931
5932
5933extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__));
5934
5935
5936
5937extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__));
5938
5939
5940
5941
5942extern 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
5949extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw ();
5950extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw ();
5951
5952
5953
5954extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw ();
5955extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw ();
5956
5957
5958
5959extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw ();
5960
5961
5962extern float fmaxf (float __x, float __y) throw (); extern float __fmaxf (float __x, float __y) throw ();
5963
5964
5965extern float fminf (float __x, float __y) throw (); extern float __fminf (float __x, float __y) throw ();
5966
5967
5968
5969extern int __fpclassifyf (float __value) throw ()
5970 __attribute__ ((__const__));
5971
5972
5973extern int __signbitf (float __value) throw ()
5974 __attribute__ ((__const__));
5975
5976
5977
5978extern 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
5987extern 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
5994extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw ();
5995
5996extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw ();
5997
5998extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw ();
5999
6000extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw ();
6001
6002
6003extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw ();
6004
6005extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw ();
6006
6007extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw ();
6008
6009
6010
6011
6012extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw ();
6013
6014extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw ();
6015
6016extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw ();
6017
6018
6019
6020
6021extern 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
6028extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw ();
6029
6030extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw ();
6031
6032extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw ();
6033
6034
6035
6036
6037
6038
6039
6040extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw ();
6041
6042
6043extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw ();
6044
6045
6046extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw ();
6047
6048
6049extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw ();
6050
6051
6052extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw ();
6053
6054
6055extern 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
6060extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw ();
6061
6062extern long double pow10l (long double __x) throw (); extern long double __pow10l (long double __x) throw ();
6063
6064
6065
6066
6067
6068extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw ();
6069
6070
6071extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw ();
6072
6073
6074extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw ();
6075
6076
6077
6078
6079
6080
6081extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw ();
6082
6083
6084extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw ();
6085
6086
6087
6088
6089
6090
6091
6092
6093extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw ();
6094
6095
6096extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw ();
6097
6098
6099
6100
6101
6102extern 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
6109extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw ();
6110
6111
6112
6113
6114
6115
6116
6117
6118extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__));
6119
6120
6121extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__));
6122
6123
6124extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__));
6125
6126
6127extern 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
6132extern int __isinfl (long double __value) throw () __attribute__ ((__const__));
6133
6134
6135extern int __finitel (long double __value) throw () __attribute__ ((__const__));
6136
6137
6138
6139
6140
6141extern int isinfl (long double __value) throw () __attribute__ ((__const__));
6142
6143
6144extern int finitel (long double __value) throw () __attribute__ ((__const__));
6145
6146
6147extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw ();
6148
6149
6150
6151extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw ();
6152
6153
6154
6155
6156
6157extern 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
6164extern long double nanl (__const char *__tagb) throw () __attribute__ ((__const__)); extern long double __nanl (__const char *__tagb) throw () __attribute__ ((__const__));
6165
6166
6167
6168
6169
6170extern int __isnanl (long double __value) throw () __attribute__ ((__const__));
6171
6172
6173
6174extern int isnanl (long double __value) throw () __attribute__ ((__const__));
6175
6176
6177extern long double j0l (long double) throw (); extern long double __j0l (long double) throw ();
6178extern long double j1l (long double) throw (); extern long double __j1l (long double) throw ();
6179extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw ();
6180extern long double y0l (long double) throw (); extern long double __y0l (long double) throw ();
6181extern long double y1l (long double) throw (); extern long double __y1l (long double) throw ();
6182extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw ();
6183
6184
6185
6186
6187
6188
6189extern long double erfl (long double) throw (); extern long double __erfl (long double) throw ();
6190extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw ();
6191extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw ();
6192
6193
6194
6195
6196
6197
6198extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw ();
6199
6200
6201
6202
6203
6204extern long double gammal (long double) throw (); extern long double __gammal (long double) throw ();
6205
6206
6207
6208
6209
6210
6211extern 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
6219extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw ();
6220
6221
6222extern 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
6224extern 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
6228extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw ();
6229
6230
6231
6232extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw ();
6233
6234
6235
6236extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw ();
6237
6238
6239
6240
6241extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw ();
6242
6243
6244
6245extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw ();
6246
6247
6248
6249extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__));
6250
6251
6252
6253extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__));
6254
6255
6256
6257
6258extern 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
6265extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw ();
6266extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw ();
6267
6268
6269
6270extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw ();
6271extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw ();
6272
6273
6274
6275extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw ();
6276
6277
6278extern long double fmaxl (long double __x, long double __y) throw (); extern long double __fmaxl (long double __x, long double __y) throw ();
6279
6280
6281extern long double fminl (long double __x, long double __y) throw (); extern long double __fminl (long double __x, long double __y) throw ();
6282
6283
6284
6285extern int __fpclassifyl (long double __value) throw ()
6286 __attribute__ ((__const__));
6287
6288
6289extern int __signbitl (long double __value) throw ()
6290 __attribute__ ((__const__));
6291
6292
6293
6294extern 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
6303extern 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
6306extern int signgam;
6307# 198 "/usr/include/math.h" 3 4
6308enum
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
6322typedef enum
6323{
6324 _IEEE_ = -1,
6325 _SVID_,
6326 _XOPEN_,
6327 _POSIX_,
6328 _ISOC_
6329} _LIB_VERSION_TYPE;
6330
6331
6332
6333
6334extern _LIB_VERSION_TYPE _LIB_VERSION;
6335# 307 "/usr/include/math.h" 3 4
6336struct __exception
6337
6338
6339
6340 {
6341 int type;
6342 char *name;
6343 double arg1;
6344 double arg2;
6345 double retval;
6346 };
6347
6348
6349extern 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
6390lrintf (float __x) throw ()
6391{
6392 long int __lrintres; __asm__ __volatile__ ("fistpl %0" : "=m" (__lrintres) : "t" (__x) : "st"); return __lrintres;
6393}
6394__inline long int
6395lrint (double __x) throw ()
6396{
6397 long int __lrintres; __asm__ __volatile__ ("fistpl %0" : "=m" (__lrintres) : "t" (__x) : "st"); return __lrintres;
6398}
6399__inline long int
6400lrintl (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
6406llrintf (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
6411llrint (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
6416llrintl (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
6436namespace 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}