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