From a082537c949aacc318df10e441485b532dfd5a4a Mon Sep 17 00:00:00 2001 From: chatlanin Date: Sun, 22 Feb 2026 10:42:29 +0300 Subject: [PATCH] remove signal generator --- .../@usr@include@alloca.h | 40 + .../@usr@include@alloca.h.blob | Bin 0 -> 12021 bytes .../@usr@include@asm-generic@bitsperlong.h | 31 + ...usr@include@asm-generic@bitsperlong.h.blob | Bin 0 -> 11531 bytes .../@usr@include@asm-generic@errno-base.h | 40 + ...@usr@include@asm-generic@errno-base.h.blob | Bin 0 -> 13321 bytes .../@usr@include@asm-generic@errno.h | 123 + .../@usr@include@asm-generic@errno.h.blob | Bin 0 -> 17463 bytes .../@usr@include@asm-generic@int-ll64.h | 40 + .../@usr@include@asm-generic@int-ll64.h.blob | Bin 0 -> 12070 bytes .../@usr@include@asm-generic@posix_types.h | 100 + ...usr@include@asm-generic@posix_types.h.blob | Bin 0 -> 13884 bytes .../@usr@include@asm-generic@types.h | 9 + .../@usr@include@asm-generic@types.h.blob | Bin 0 -> 11473 bytes .../@usr@include@asm@bitsperlong.h | 14 + .../@usr@include@asm@bitsperlong.h.blob | Bin 0 -> 11561 bytes .../@usr@include@asm@errno.h | 1 + .../@usr@include@asm@errno.h.blob | Bin 0 -> 11398 bytes .../@usr@include@asm@posix_types.h | 8 + .../@usr@include@asm@posix_types.h.blob | Bin 0 -> 11397 bytes .../@usr@include@asm@posix_types_64.h | 20 + .../@usr@include@asm@posix_types_64.h.blob | Bin 0 -> 12068 bytes .../@usr@include@asm@types.h | 1 + .../@usr@include@asm@types.h.blob | Bin 0 -> 11398 bytes .../@usr@include@bits@atomic_wide_counter.h | 35 + ...sr@include@bits@atomic_wide_counter.h.blob | Bin 0 -> 12386 bytes .../@usr@include@bits@byteswap.h | 79 + .../@usr@include@bits@byteswap.h.blob | Bin 0 -> 13188 bytes .../@usr@include@bits@cpu-set.h | 124 + .../@usr@include@bits@cpu-set.h.blob | Bin 0 -> 15457 bytes .../@usr@include@bits@endian.h | 49 + .../@usr@include@bits@endian.h.blob | Bin 0 -> 11891 bytes .../@usr@include@bits@endianness.h | 11 + .../@usr@include@bits@endianness.h.blob | Bin 0 -> 11548 bytes .../@usr@include@bits@errno.h | 53 + .../@usr@include@bits@errno.h.blob | Bin 0 -> 11577 bytes .../@usr@include@bits@floatn-common.h | 329 ++ .../@usr@include@bits@floatn-common.h.blob | Bin 0 -> 15669 bytes .../@usr@include@bits@floatn.h | 133 + .../@usr@include@bits@floatn.h.blob | Bin 0 -> 12456 bytes .../@usr@include@bits@libc-header-start.h | 110 + ...@usr@include@bits@libc-header-start.h.blob | Bin 0 -> 12190 bytes .../@usr@include@bits@locale.h | 40 + .../@usr@include@bits@locale.h.blob | Bin 0 -> 12320 bytes .../@usr@include@bits@long-double.h | 21 + .../@usr@include@bits@long-double.h.blob | Bin 0 -> 11469 bytes ...r@include@bits@pthread_stack_min-dynamic.h | 31 + ...lude@bits@pthread_stack_min-dynamic.h.blob | Bin 0 -> 11838 bytes .../@usr@include@bits@pthreadtypes-arch.h | 55 + ...@usr@include@bits@pthreadtypes-arch.h.blob | Bin 0 -> 12510 bytes .../@usr@include@bits@pthreadtypes.h | 121 + .../@usr@include@bits@pthreadtypes.h.blob | Bin 0 -> 16514 bytes .../@usr@include@bits@sched.h | 161 + .../@usr@include@bits@sched.h.blob | Bin 0 -> 17594 bytes .../@usr@include@bits@select.h | 37 + .../@usr@include@bits@select.h.blob | Bin 0 -> 12031 bytes .../@usr@include@bits@setjmp.h | 40 + .../@usr@include@bits@setjmp.h.blob | Bin 0 -> 11561 bytes .../@usr@include@bits@stdint-intn.h | 29 + .../@usr@include@bits@stdint-intn.h.blob | Bin 0 -> 11968 bytes .../@usr@include@bits@stdint-least.h | 36 + .../@usr@include@bits@stdint-least.h.blob | Bin 0 -> 12953 bytes .../@usr@include@bits@stdint-uintn.h | 29 + .../@usr@include@bits@stdint-uintn.h.blob | Bin 0 -> 12010 bytes .../@usr@include@bits@stdio_lim.h | 28 + .../@usr@include@bits@stdio_lim.h.blob | Bin 0 -> 11508 bytes .../@usr@include@bits@stdlib-float.h | 29 + .../@usr@include@bits@stdlib-float.h.blob | Bin 0 -> 11364 bytes .../@usr@include@bits@struct_mutex.h | 62 + .../@usr@include@bits@struct_mutex.h.blob | Bin 0 -> 12817 bytes .../@usr@include@bits@struct_rwlock.h | 58 + .../@usr@include@bits@struct_rwlock.h.blob | Bin 0 -> 12922 bytes .../@usr@include@bits@thread-shared-types.h | 116 + ...sr@include@bits@thread-shared-types.h.blob | Bin 0 -> 13968 bytes .../@usr@include@bits@time.h | 93 + .../@usr@include@bits@time.h.blob | Bin 0 -> 13060 bytes .../@usr@include@bits@time64.h | 36 + .../@usr@include@bits@time64.h.blob | Bin 0 -> 11553 bytes .../@usr@include@bits@timesize.h | 27 + .../@usr@include@bits@timesize.h.blob | Bin 0 -> 11493 bytes .../@usr@include@bits@timex.h | 141 + .../@usr@include@bits@timex.h.blob | Bin 0 -> 17117 bytes .../@usr@include@bits@types.h | 228 + .../@usr@include@bits@types.h.blob | Bin 0 -> 18835 bytes .../@usr@include@bits@types@FILE.h | 9 + .../@usr@include@bits@types@FILE.h.blob | Bin 0 -> 11784 bytes .../@usr@include@bits@types@__FILE.h | 7 + .../@usr@include@bits@types@__FILE.h.blob | Bin 0 -> 11721 bytes .../@usr@include@bits@types@__fpos64_t.h | 16 + .../@usr@include@bits@types@__fpos64_t.h.blob | Bin 0 -> 12358 bytes .../@usr@include@bits@types@__fpos_t.h | 16 + .../@usr@include@bits@types@__fpos_t.h.blob | Bin 0 -> 12304 bytes .../@usr@include@bits@types@__locale_t.h | 43 + .../@usr@include@bits@types@__locale_t.h.blob | Bin 0 -> 12484 bytes .../@usr@include@bits@types@__mbstate_t.h | 23 + ...@usr@include@bits@types@__mbstate_t.h.blob | Bin 0 -> 12150 bytes .../@usr@include@bits@types@__sigset_t.h | 10 + .../@usr@include@bits@types@__sigset_t.h.blob | Bin 0 -> 11770 bytes .../@usr@include@bits@types@clock_t.h | 9 + .../@usr@include@bits@types@clock_t.h.blob | Bin 0 -> 11603 bytes .../@usr@include@bits@types@clockid_t.h | 9 + .../@usr@include@bits@types@clockid_t.h.blob | Bin 0 -> 11633 bytes ...include@bits@types@cookie_io_functions_t.h | 63 + ...de@bits@types@cookie_io_functions_t.h.blob | Bin 0 -> 13995 bytes .../@usr@include@bits@types@error_t.h | 24 + .../@usr@include@bits@types@error_t.h.blob | Bin 0 -> 11487 bytes .../@usr@include@bits@types@locale_t.h | 26 + .../@usr@include@bits@types@locale_t.h.blob | Bin 0 -> 11660 bytes .../@usr@include@bits@types@mbstate_t.h | 8 + .../@usr@include@bits@types@mbstate_t.h.blob | Bin 0 -> 11652 bytes .../@usr@include@bits@types@sigset_t.h | 9 + .../@usr@include@bits@types@sigset_t.h.blob | Bin 0 -> 11703 bytes .../@usr@include@bits@types@struct_FILE.h | 131 + ...@usr@include@bits@types@struct_FILE.h.blob | Bin 0 -> 16462 bytes ...@include@bits@types@struct___jmp_buf_tag.h | 37 + ...ude@bits@types@struct___jmp_buf_tag.h.blob | Bin 0 -> 12137 bytes ...usr@include@bits@types@struct_itimerspec.h | 14 + ...nclude@bits@types@struct_itimerspec.h.blob | Bin 0 -> 11866 bytes ...sr@include@bits@types@struct_sched_param.h | 28 + ...clude@bits@types@struct_sched_param.h.blob | Bin 0 -> 11664 bytes .../@usr@include@bits@types@struct_timespec.h | 33 + ...@include@bits@types@struct_timespec.h.blob | Bin 0 -> 12099 bytes .../@usr@include@bits@types@struct_timeval.h | 18 + ...r@include@bits@types@struct_timeval.h.blob | Bin 0 -> 11915 bytes .../@usr@include@bits@types@struct_tm.h | 28 + .../@usr@include@bits@types@struct_tm.h.blob | Bin 0 -> 12609 bytes .../@usr@include@bits@types@time_t.h | 13 + .../@usr@include@bits@types@time_t.h.blob | Bin 0 -> 11583 bytes .../@usr@include@bits@types@timer_t.h | 9 + .../@usr@include@bits@types@timer_t.h.blob | Bin 0 -> 11620 bytes .../@usr@include@bits@types@wint_t.h | 23 + .../@usr@include@bits@types@wint_t.h.blob | Bin 0 -> 11582 bytes .../@usr@include@bits@typesizes.h | 106 + .../@usr@include@bits@typesizes.h.blob | Bin 0 -> 15371 bytes .../@usr@include@bits@uintn-identity.h | 50 + .../@usr@include@bits@uintn-identity.h.blob | Bin 0 -> 12392 bytes .../@usr@include@bits@waitflags.h | 39 + .../@usr@include@bits@waitflags.h.blob | Bin 0 -> 11929 bytes .../@usr@include@bits@waitstatus.h | 59 + .../@usr@include@bits@waitstatus.h.blob | Bin 0 -> 12489 bytes .../@usr@include@bits@wchar.h | 49 + .../@usr@include@bits@wchar.h.blob | Bin 0 -> 11596 bytes .../@usr@include@bits@wctype-wchar.h | 173 + .../@usr@include@bits@wctype-wchar.h.blob | Bin 0 -> 20992 bytes .../@usr@include@bits@wordsize.h | 16 + .../@usr@include@bits@wordsize.h.blob | Bin 0 -> 11601 bytes ...@usr@include@c++@15.2.1@backward@binders.h | 184 + ...include@c++@15.2.1@backward@binders.h.blob | Bin 0 -> 18656 bytes .../@usr@include@c++@15.2.1@bit | 500 ++ .../@usr@include@c++@15.2.1@bit.blob | Bin 0 -> 22341 bytes ...usr@include@c++@15.2.1@bits@alloc_traits.h | 1053 ++++ ...nclude@c++@15.2.1@bits@alloc_traits.h.blob | Bin 0 -> 50474 bytes ...sr@include@c++@15.2.1@bits@allocated_ptr.h | 144 + ...clude@c++@15.2.1@bits@allocated_ptr.h.blob | Bin 0 -> 21170 bytes .../@usr@include@c++@15.2.1@bits@allocator.h | 303 + ...r@include@c++@15.2.1@bits@allocator.h.blob | Bin 0 -> 19184 bytes .../@usr@include@c++@15.2.1@bits@basic_ios.h | 533 ++ ...r@include@c++@15.2.1@bits@basic_ios.h.blob | Bin 0 -> 40602 bytes ...@usr@include@c++@15.2.1@bits@basic_ios.tcc | 190 + ...include@c++@15.2.1@bits@basic_ios.tcc.blob | Bin 0 -> 31259 bytes ...usr@include@c++@15.2.1@bits@basic_string.h | 5041 +++++++++++++++++ ...nclude@c++@15.2.1@bits@basic_string.h.blob | Bin 0 -> 290329 bytes ...r@include@c++@15.2.1@bits@basic_string.tcc | 1066 ++++ ...lude@c++@15.2.1@bits@basic_string.tcc.blob | Bin 0 -> 108917 bytes ...@usr@include@c++@15.2.1@bits@char_traits.h | 1016 ++++ ...include@c++@15.2.1@bits@char_traits.h.blob | Bin 0 -> 52841 bytes .../@usr@include@c++@15.2.1@bits@charconv.h | 118 + ...sr@include@c++@15.2.1@bits@charconv.h.blob | Bin 0 -> 23256 bytes .../@usr@include@c++@15.2.1@bits@chrono.h | 1523 +++++ ...@usr@include@c++@15.2.1@bits@chrono.h.blob | Bin 0 -> 94967 bytes .../@usr@include@c++@15.2.1@bits@codecvt.h | 849 +++ ...usr@include@c++@15.2.1@bits@codecvt.h.blob | Bin 0 -> 55295 bytes ...sr@include@c++@15.2.1@bits@concept_check.h | 87 + ...clude@c++@15.2.1@bits@concept_check.h.blob | Bin 0 -> 11991 bytes ...@include@c++@15.2.1@bits@cpp_type_traits.h | 714 +++ ...ude@c++@15.2.1@bits@cpp_type_traits.h.blob | Bin 0 -> 39544 bytes ...sr@include@c++@15.2.1@bits@cxxabi_forced.h | 62 + ...clude@c++@15.2.1@bits@cxxabi_forced.h.blob | Bin 0 -> 11966 bytes ...de@c++@15.2.1@bits@cxxabi_init_exception.h | 83 + ...+@15.2.1@bits@cxxabi_init_exception.h.blob | Bin 0 -> 13715 bytes .../@usr@include@c++@15.2.1@bits@exception.h | 85 + ...r@include@c++@15.2.1@bits@exception.h.blob | Bin 0 -> 13763 bytes ...nclude@c++@15.2.1@bits@exception_defines.h | 45 + ...e@c++@15.2.1@bits@exception_defines.h.blob | Bin 0 -> 11671 bytes ...sr@include@c++@15.2.1@bits@exception_ptr.h | 294 + ...clude@c++@15.2.1@bits@exception_ptr.h.blob | Bin 0 -> 20006 bytes .../@usr@include@c++@15.2.1@bits@fs_dir.h | 656 +++ ...@usr@include@c++@15.2.1@bits@fs_dir.h.blob | Bin 0 -> 51860 bytes .../@usr@include@c++@15.2.1@bits@fs_fwd.h | 382 ++ ...@usr@include@c++@15.2.1@bits@fs_fwd.h.blob | Bin 0 -> 34958 bytes .../@usr@include@c++@15.2.1@bits@fs_ops.h | 392 ++ ...@usr@include@c++@15.2.1@bits@fs_ops.h.blob | Bin 0 -> 44915 bytes .../@usr@include@c++@15.2.1@bits@fs_path.h | 1459 +++++ ...usr@include@c++@15.2.1@bits@fs_path.h.blob | Bin 0 -> 106878 bytes ...@usr@include@c++@15.2.1@bits@functexcept.h | 143 + ...include@c++@15.2.1@bits@functexcept.h.blob | Bin 0 -> 14661 bytes ...@include@c++@15.2.1@bits@functional_hash.h | 308 + ...ude@c++@15.2.1@bits@functional_hash.h.blob | Bin 0 -> 27530 bytes .../@usr@include@c++@15.2.1@bits@hash_bytes.h | 61 + ...@include@c++@15.2.1@bits@hash_bytes.h.blob | Bin 0 -> 13711 bytes .../@usr@include@c++@15.2.1@bits@invoke.h | 162 + ...@usr@include@c++@15.2.1@bits@invoke.h.blob | Bin 0 -> 19729 bytes .../@usr@include@c++@15.2.1@bits@ios_base.h | 1157 ++++ ...sr@include@c++@15.2.1@bits@ios_base.h.blob | Bin 0 -> 63455 bytes .../@usr@include@c++@15.2.1@bits@istream.tcc | 1185 ++++ ...r@include@c++@15.2.1@bits@istream.tcc.blob | Bin 0 -> 71883 bytes ...r@include@c++@15.2.1@bits@locale_classes.h | 898 +++ ...lude@c++@15.2.1@bits@locale_classes.h.blob | Bin 0 -> 47026 bytes ...include@c++@15.2.1@bits@locale_classes.tcc | 429 ++ ...de@c++@15.2.1@bits@locale_classes.tcc.blob | Bin 0 -> 47232 bytes ...@usr@include@c++@15.2.1@bits@locale_conv.h | 635 +++ ...include@c++@15.2.1@bits@locale_conv.h.blob | Bin 0 -> 74439 bytes ...sr@include@c++@15.2.1@bits@locale_facets.h | 2703 +++++++++ ...clude@c++@15.2.1@bits@locale_facets.h.blob | Bin 0 -> 165568 bytes ...@include@c++@15.2.1@bits@locale_facets.tcc | 1447 +++++ ...ude@c++@15.2.1@bits@locale_facets.tcc.blob | Bin 0 -> 138397 bytes ...lude@c++@15.2.1@bits@locale_facets_nonio.h | 2073 +++++++ ...c++@15.2.1@bits@locale_facets_nonio.h.blob | Bin 0 -> 109186 bytes ...de@c++@15.2.1@bits@locale_facets_nonio.tcc | 1910 +++++++ ...+@15.2.1@bits@locale_facets_nonio.tcc.blob | Bin 0 -> 155522 bytes .../@usr@include@c++@15.2.1@bits@localefwd.h | 216 + ...r@include@c++@15.2.1@bits@localefwd.h.blob | Bin 0 -> 19997 bytes ...@include@c++@15.2.1@bits@memory_resource.h | 525 ++ ...ude@c++@15.2.1@bits@memory_resource.h.blob | Bin 0 -> 42866 bytes .../@usr@include@c++@15.2.1@bits@memoryfwd.h | 86 + ...r@include@c++@15.2.1@bits@memoryfwd.h.blob | Bin 0 -> 12958 bytes .../@usr@include@c++@15.2.1@bits@move.h | 262 + .../@usr@include@c++@15.2.1@bits@move.h.blob | Bin 0 -> 19562 bytes ...include@c++@15.2.1@bits@nested_exception.h | 243 + ...de@c++@15.2.1@bits@nested_exception.h.blob | Bin 0 -> 19085 bytes ...sr@include@c++@15.2.1@bits@new_allocator.h | 243 + ...clude@c++@15.2.1@bits@new_allocator.h.blob | Bin 0 -> 20905 bytes .../@usr@include@c++@15.2.1@bits@ostream.h | 846 +++ ...usr@include@c++@15.2.1@bits@ostream.h.blob | Bin 0 -> 49477 bytes .../@usr@include@c++@15.2.1@bits@ostream.tcc | 404 ++ ...r@include@c++@15.2.1@bits@ostream.tcc.blob | Bin 0 -> 38341 bytes ...r@include@c++@15.2.1@bits@ostream_insert.h | 140 + ...lude@c++@15.2.1@bits@ostream_insert.h.blob | Bin 0 -> 18087 bytes ...sr@include@c++@15.2.1@bits@parse_numbers.h | 297 + ...clude@c++@15.2.1@bits@parse_numbers.h.blob | Bin 0 -> 28159 bytes .../@usr@include@c++@15.2.1@bits@postypes.h | 228 + ...sr@include@c++@15.2.1@bits@postypes.h.blob | Bin 0 -> 19367 bytes ...r@include@c++@15.2.1@bits@predefined_ops.h | 407 ++ ...lude@c++@15.2.1@bits@predefined_ops.h.blob | Bin 0 -> 32142 bytes .../@usr@include@c++@15.2.1@bits@ptr_traits.h | 273 + ...@include@c++@15.2.1@bits@ptr_traits.h.blob | Bin 0 -> 21148 bytes ...sr@include@c++@15.2.1@bits@quoted_string.h | 188 + ...clude@c++@15.2.1@bits@quoted_string.h.blob | Bin 0 -> 29185 bytes ...usr@include@c++@15.2.1@bits@range_access.h | 381 ++ ...nclude@c++@15.2.1@bits@range_access.h.blob | Bin 0 -> 28668 bytes .../@usr@include@c++@15.2.1@bits@refwrap.h | 465 ++ ...usr@include@c++@15.2.1@bits@refwrap.h.blob | Bin 0 -> 32568 bytes ...@include@c++@15.2.1@bits@requires_hosted.h | 37 + ...ude@c++@15.2.1@bits@requires_hosted.h.blob | Bin 0 -> 11526 bytes .../@usr@include@c++@15.2.1@bits@shared_ptr.h | 1195 ++++ ...@include@c++@15.2.1@bits@shared_ptr.h.blob | Bin 0 -> 72030 bytes ...@include@c++@15.2.1@bits@shared_ptr_base.h | 2268 ++++++++ ...ude@c++@15.2.1@bits@shared_ptr_base.h.blob | Bin 0 -> 143959 bytes .../@usr@include@c++@15.2.1@bits@sstream.tcc | 312 + ...r@include@c++@15.2.1@bits@sstream.tcc.blob | Bin 0 -> 50477 bytes .../@usr@include@c++@15.2.1@bits@std_abs.h | 162 + ...usr@include@c++@15.2.1@bits@std_abs.h.blob | Bin 0 -> 14156 bytes ...usr@include@c++@15.2.1@bits@stl_algobase.h | 2304 ++++++++ ...nclude@c++@15.2.1@bits@stl_algobase.h.blob | Bin 0 -> 139927 bytes ...@usr@include@c++@15.2.1@bits@stl_bvector.h | 1841 ++++++ ...include@c++@15.2.1@bits@stl_bvector.h.blob | Bin 0 -> 100206 bytes ...sr@include@c++@15.2.1@bits@stl_construct.h | 287 + ...clude@c++@15.2.1@bits@stl_construct.h.blob | Bin 0 -> 19471 bytes ...usr@include@c++@15.2.1@bits@stl_function.h | 1483 +++++ ...nclude@c++@15.2.1@bits@stl_function.h.blob | Bin 0 -> 92550 bytes ...usr@include@c++@15.2.1@bits@stl_iterator.h | 3120 ++++++++++ ...nclude@c++@15.2.1@bits@stl_iterator.h.blob | Bin 0 -> 88030 bytes ...@c++@15.2.1@bits@stl_iterator_base_funcs.h | 261 + ...15.2.1@bits@stl_iterator_base_funcs.h.blob | Bin 0 -> 21822 bytes ...@c++@15.2.1@bits@stl_iterator_base_types.h | 289 + ...15.2.1@bits@stl_iterator_base_types.h.blob | Bin 0 -> 19416 bytes .../@usr@include@c++@15.2.1@bits@stl_pair.h | 1368 +++++ ...sr@include@c++@15.2.1@bits@stl_pair.h.blob | Bin 0 -> 48200 bytes ...nclude@c++@15.2.1@bits@stl_uninitialized.h | 1372 +++++ ...e@c++@15.2.1@bits@stl_uninitialized.h.blob | Bin 0 -> 85922 bytes .../@usr@include@c++@15.2.1@bits@stl_vector.h | 2438 ++++++++ ...@include@c++@15.2.1@bits@stl_vector.h.blob | Bin 0 -> 110246 bytes ...@usr@include@c++@15.2.1@bits@streambuf.tcc | 175 + ...include@c++@15.2.1@bits@streambuf.tcc.blob | Bin 0 -> 19942 bytes ...clude@c++@15.2.1@bits@streambuf_iterator.h | 522 ++ ...@c++@15.2.1@bits@streambuf_iterator.h.blob | Bin 0 -> 42680 bytes ...sr@include@c++@15.2.1@bits@string_view.tcc | 243 + ...clude@c++@15.2.1@bits@string_view.tcc.blob | Bin 0 -> 23460 bytes .../@usr@include@c++@15.2.1@bits@stringfwd.h | 102 + ...r@include@c++@15.2.1@bits@stringfwd.h.blob | Bin 0 -> 14074 bytes .../@usr@include@c++@15.2.1@bits@unique_ptr.h | 1191 ++++ ...@include@c++@15.2.1@bits@unique_ptr.h.blob | Bin 0 -> 66140 bytes ...r@include@c++@15.2.1@bits@uses_allocator.h | 207 + ...lude@c++@15.2.1@bits@uses_allocator.h.blob | Bin 0 -> 22087 bytes ...lude@c++@15.2.1@bits@uses_allocator_args.h | 250 + ...c++@15.2.1@bits@uses_allocator_args.h.blob | Bin 0 -> 11468 bytes .../@usr@include@c++@15.2.1@bits@utility.h | 323 ++ ...usr@include@c++@15.2.1@bits@utility.h.blob | Bin 0 -> 20185 bytes .../@usr@include@c++@15.2.1@bits@vector.tcc | 1380 +++++ ...sr@include@c++@15.2.1@bits@vector.tcc.blob | Bin 0 -> 97214 bytes .../@usr@include@c++@15.2.1@bits@version.h | 2188 +++++++ ...usr@include@c++@15.2.1@bits@version.h.blob | Bin 0 -> 24204 bytes .../@usr@include@c++@15.2.1@cctype | 96 + .../@usr@include@c++@15.2.1@cctype.blob | Bin 0 -> 13479 bytes .../@usr@include@c++@15.2.1@cerrno | 54 + .../@usr@include@c++@15.2.1@cerrno.blob | Bin 0 -> 11522 bytes .../@usr@include@c++@15.2.1@clocale | 60 + .../@usr@include@c++@15.2.1@clocale.blob | Bin 0 -> 12701 bytes .../@usr@include@c++@15.2.1@codecvt | 179 + .../@usr@include@c++@15.2.1@codecvt.blob | Bin 0 -> 65811 bytes .../@usr@include@c++@15.2.1@concepts | 407 ++ .../@usr@include@c++@15.2.1@concepts.blob | Bin 0 -> 11568 bytes .../@usr@include@c++@15.2.1@cstddef | 199 + .../@usr@include@c++@15.2.1@cstddef.blob | Bin 0 -> 21568 bytes .../@usr@include@c++@15.2.1@cstdint | 148 + .../@usr@include@c++@15.2.1@cstdint.blob | Bin 0 -> 14994 bytes .../@usr@include@c++@15.2.1@cstdio | 196 + .../@usr@include@c++@15.2.1@cstdio.blob | Bin 0 -> 17246 bytes .../@usr@include@c++@15.2.1@cstdlib | 288 + .../@usr@include@c++@15.2.1@cstdlib.blob | Bin 0 -> 17987 bytes .../@usr@include@c++@15.2.1@ctime | 86 + .../@usr@include@c++@15.2.1@ctime.blob | Bin 0 -> 13743 bytes .../@usr@include@c++@15.2.1@cwchar | 308 + .../@usr@include@c++@15.2.1@cwchar.blob | Bin 0 -> 21838 bytes .../@usr@include@c++@15.2.1@cwctype | 112 + .../@usr@include@c++@15.2.1@cwctype.blob | Bin 0 -> 14323 bytes ...@usr@include@c++@15.2.1@debug@assertions.h | 70 + ...include@c++@15.2.1@debug@assertions.h.blob | Bin 0 -> 14502 bytes .../@usr@include@c++@15.2.1@debug@debug.h | 145 + ...@usr@include@c++@15.2.1@debug@debug.h.blob | Bin 0 -> 15361 bytes .../@usr@include@c++@15.2.1@exception | 172 + .../@usr@include@c++@15.2.1@exception.blob | Bin 0 -> 16700 bytes ...sr@include@c++@15.2.1@ext@aligned_buffer.h | 130 + ...clude@c++@15.2.1@ext@aligned_buffer.h.blob | Bin 0 -> 14550 bytes ...@usr@include@c++@15.2.1@ext@alloc_traits.h | 187 + ...include@c++@15.2.1@ext@alloc_traits.h.blob | Bin 0 -> 18275 bytes .../@usr@include@c++@15.2.1@ext@atomicity.h | 129 + ...sr@include@c++@15.2.1@ext@atomicity.h.blob | Bin 0 -> 14208 bytes .../@usr@include@c++@15.2.1@ext@concurrence.h | 322 ++ ...@include@c++@15.2.1@ext@concurrence.h.blob | Bin 0 -> 20787 bytes ...sr@include@c++@15.2.1@ext@numeric_traits.h | 243 + ...clude@c++@15.2.1@ext@numeric_traits.h.blob | Bin 0 -> 18353 bytes ...nclude@c++@15.2.1@ext@string_conversions.h | 127 + ...e@c++@15.2.1@ext@string_conversions.h.blob | Bin 0 -> 17853 bytes .../@usr@include@c++@15.2.1@ext@type_traits.h | 280 + ...@include@c++@15.2.1@ext@type_traits.h.blob | Bin 0 -> 18829 bytes .../@usr@include@c++@15.2.1@filesystem | 60 + .../@usr@include@c++@15.2.1@filesystem.blob | Bin 0 -> 11773 bytes .../@usr@include@c++@15.2.1@initializer_list | 107 + ...r@include@c++@15.2.1@initializer_list.blob | Bin 0 -> 15872 bytes .../@usr@include@c++@15.2.1@iomanip | 552 ++ .../@usr@include@c++@15.2.1@iomanip.blob | Bin 0 -> 44877 bytes .../@usr@include@c++@15.2.1@ios | 53 + .../@usr@include@c++@15.2.1@ios.blob | Bin 0 -> 11886 bytes .../@usr@include@c++@15.2.1@iosfwd | 260 + .../@usr@include@c++@15.2.1@iosfwd.blob | Bin 0 -> 20125 bytes .../@usr@include@c++@15.2.1@istream | 1113 ++++ .../@usr@include@c++@15.2.1@istream.blob | Bin 0 -> 51468 bytes .../@usr@include@c++@15.2.1@limits | 2240 ++++++++ .../@usr@include@c++@15.2.1@limits.blob | Bin 0 -> 161246 bytes .../@usr@include@c++@15.2.1@locale | 50 + .../@usr@include@c++@15.2.1@locale.blob | Bin 0 -> 11741 bytes .../@usr@include@c++@15.2.1@new | 269 + .../@usr@include@c++@15.2.1@new.blob | Bin 0 -> 20203 bytes .../@usr@include@c++@15.2.1@ostream | 296 + .../@usr@include@c++@15.2.1@ostream.blob | Bin 0 -> 14932 bytes ...@usr@include@c++@15.2.1@pstl@pstl_config.h | 198 + ...include@c++@15.2.1@pstl@pstl_config.h.blob | Bin 0 -> 15726 bytes .../@usr@include@c++@15.2.1@ratio | 653 +++ .../@usr@include@c++@15.2.1@ratio.blob | Bin 0 -> 61258 bytes .../@usr@include@c++@15.2.1@sstream | 1257 ++++ .../@usr@include@c++@15.2.1@sstream.blob | Bin 0 -> 75773 bytes .../@usr@include@c++@15.2.1@stdexcept | 309 + .../@usr@include@c++@15.2.1@stdexcept.blob | Bin 0 -> 26079 bytes .../@usr@include@c++@15.2.1@streambuf | 864 +++ .../@usr@include@c++@15.2.1@streambuf.blob | Bin 0 -> 52611 bytes .../@usr@include@c++@15.2.1@string | 130 + .../@usr@include@c++@15.2.1@string.blob | Bin 0 -> 15267 bytes .../@usr@include@c++@15.2.1@string_view | 915 +++ .../@usr@include@c++@15.2.1@string_view.blob | Bin 0 -> 66594 bytes .../@usr@include@c++@15.2.1@system_error | 643 +++ .../@usr@include@c++@15.2.1@system_error.blob | Bin 0 -> 39383 bytes .../@usr@include@c++@15.2.1@tuple | 3034 ++++++++++ .../@usr@include@c++@15.2.1@tuple.blob | Bin 0 -> 139017 bytes .../@usr@include@c++@15.2.1@type_traits | 4190 ++++++++++++++ .../@usr@include@c++@15.2.1@type_traits.blob | Bin 0 -> 138780 bytes .../@usr@include@c++@15.2.1@typeinfo | 259 + .../@usr@include@c++@15.2.1@typeinfo.blob | Bin 0 -> 18774 bytes .../@usr@include@c++@15.2.1@vector | 193 + .../@usr@include@c++@15.2.1@vector.blob | Bin 0 -> 14382 bytes ...2.1@x86_64-pc-linux-gnu@bits@atomic_word.h | 40 + ...86_64-pc-linux-gnu@bits@atomic_word.h.blob | Bin 0 -> 11737 bytes ....1@x86_64-pc-linux-gnu@bits@c++allocator.h | 64 + ...6_64-pc-linux-gnu@bits@c++allocator.h.blob | Bin 0 -> 12913 bytes ...5.2.1@x86_64-pc-linux-gnu@bits@c++config.h | 1909 +++++++ ...@x86_64-pc-linux-gnu@bits@c++config.h.blob | Bin 0 -> 51216 bytes ...5.2.1@x86_64-pc-linux-gnu@bits@c++locale.h | 124 + ...@x86_64-pc-linux-gnu@bits@c++locale.h.blob | Bin 0 -> 14458 bytes ...2.1@x86_64-pc-linux-gnu@bits@cpu_defines.h | 33 + ...86_64-pc-linux-gnu@bits@cpu_defines.h.blob | Bin 0 -> 11408 bytes ....2.1@x86_64-pc-linux-gnu@bits@ctype_base.h | 66 + ...x86_64-pc-linux-gnu@bits@ctype_base.h.blob | Bin 0 -> 15486 bytes ....1@x86_64-pc-linux-gnu@bits@ctype_inline.h | 76 + ...6_64-pc-linux-gnu@bits@ctype_inline.h.blob | Bin 0 -> 15264 bytes ...x86_64-pc-linux-gnu@bits@error_constants.h | 180 + ...4-pc-linux-gnu@bits@error_constants.h.blob | Bin 0 -> 21925 bytes ....1@x86_64-pc-linux-gnu@bits@gthr-default.h | 986 ++++ ...6_64-pc-linux-gnu@bits@gthr-default.h.blob | Bin 0 -> 26325 bytes ...c++@15.2.1@x86_64-pc-linux-gnu@bits@gthr.h | 163 + ...5.2.1@x86_64-pc-linux-gnu@bits@gthr.h.blob | Bin 0 -> 11518 bytes ...86_64-pc-linux-gnu@bits@messages_members.h | 151 + ...-pc-linux-gnu@bits@messages_members.h.blob | Bin 0 -> 20235 bytes ....2.1@x86_64-pc-linux-gnu@bits@os_defines.h | 90 + ...x86_64-pc-linux-gnu@bits@os_defines.h.blob | Bin 0 -> 12104 bytes ....1@x86_64-pc-linux-gnu@bits@time_members.h | 89 + ...6_64-pc-linux-gnu@bits@time_members.h.blob | Bin 0 -> 15556 bytes .../@usr@include@ctype.h | 329 ++ .../@usr@include@ctype.h.blob | Bin 0 -> 20207 bytes .../@usr@include@endian.h | 72 + .../@usr@include@endian.h.blob | Bin 0 -> 12813 bytes .../@usr@include@errno.h | 55 + .../@usr@include@errno.h.blob | Bin 0 -> 12125 bytes .../@usr@include@features-time64.h | 42 + .../@usr@include@features-time64.h.blob | Bin 0 -> 11541 bytes .../@usr@include@features.h | 567 ++ .../@usr@include@features.h.blob | Bin 0 -> 16604 bytes .../@usr@include@gnu@stubs-64.h | 17 + .../@usr@include@gnu@stubs-64.h.blob | Bin 0 -> 11921 bytes .../@usr@include@gnu@stubs.h | 14 + .../@usr@include@gnu@stubs.h.blob | Bin 0 -> 11401 bytes .../@usr@include@libintl.h | 123 + .../@usr@include@libintl.h.blob | Bin 0 -> 16140 bytes .../@usr@include@linux@errno.h | 1 + .../@usr@include@linux@errno.h.blob | Bin 0 -> 11388 bytes .../@usr@include@linux@posix_types.h | 38 + .../@usr@include@linux@posix_types.h.blob | Bin 0 -> 12071 bytes .../@usr@include@linux@sched@types.h | 121 + .../@usr@include@linux@sched@types.h.blob | Bin 0 -> 16563 bytes .../@usr@include@linux@stddef.h | 74 + .../@usr@include@linux@stddef.h.blob | Bin 0 -> 12128 bytes .../@usr@include@linux@types.h | 58 + .../@usr@include@linux@types.h.blob | Bin 0 -> 13015 bytes .../@usr@include@locale.h | 197 + .../@usr@include@locale.h.blob | Bin 0 -> 20270 bytes .../@usr@include@pthread.h | 1353 +++++ .../@usr@include@pthread.h.blob | Bin 0 -> 76006 bytes .../@usr@include@sched.h | 140 + .../@usr@include@sched.h.blob | Bin 0 -> 18074 bytes .../@usr@include@sndfile.h | 885 +++ .../@usr@include@sndfile.h.blob | Bin 0 -> 69335 bytes .../@usr@include@stdc-predef.h | 64 + .../@usr@include@stdc-predef.h.blob | Bin 0 -> 11883 bytes .../@usr@include@stdint.h | 314 + .../@usr@include@stdint.h.blob | Bin 0 -> 20915 bytes .../@usr@include@stdio.h | 979 ++++ .../@usr@include@stdio.h.blob | Bin 0 -> 56443 bytes .../@usr@include@stdlib.h | 1216 ++++ .../@usr@include@stdlib.h.blob | Bin 0 -> 75749 bytes .../@usr@include@sys@cdefs.h | 898 +++ .../@usr@include@sys@cdefs.h.blob | Bin 0 -> 21184 bytes .../@usr@include@sys@select.h | 155 + .../@usr@include@sys@select.h.blob | Bin 0 -> 14876 bytes .../@usr@include@sys@single_threaded.h | 33 + .../@usr@include@sys@single_threaded.h.blob | Bin 0 -> 11764 bytes .../@usr@include@sys@types.h | 232 + .../@usr@include@sys@types.h.blob | Bin 0 -> 18153 bytes .../@usr@include@time.h | 463 ++ .../@usr@include@time.h.blob | Bin 0 -> 28096 bytes .../@usr@include@wchar.h | 1100 ++++ .../@usr@include@wchar.h.blob | Bin 0 -> 64916 bytes .../@usr@include@wctype.h | 148 + .../@usr@include@wctype.h.blob | Bin 0 -> 19733 bytes ...clang@21@include@__stdarg___gnuc_va_list.h | 13 + ...@21@include@__stdarg___gnuc_va_list.h.blob | Bin 0 -> 11517 bytes ...b@clang@21@include@__stddef_header_macro.h | 12 + ...ng@21@include@__stddef_header_macro.h.blob | Bin 0 -> 11399 bytes ...ib@clang@21@include@__stddef_max_align_t.h | 27 + ...ang@21@include@__stddef_max_align_t.h.blob | Bin 0 -> 11933 bytes .../@usr@lib@clang@21@include@__stddef_null.h | 29 + ...@lib@clang@21@include@__stddef_null.h.blob | Bin 0 -> 11438 bytes ...@lib@clang@21@include@__stddef_nullptr_t.h | 29 + ...clang@21@include@__stddef_nullptr_t.h.blob | Bin 0 -> 11466 bytes ...r@lib@clang@21@include@__stddef_offsetof.h | 17 + ...@clang@21@include@__stddef_offsetof.h.blob | Bin 0 -> 11486 bytes ...@lib@clang@21@include@__stddef_ptrdiff_t.h | 20 + ...clang@21@include@__stddef_ptrdiff_t.h.blob | Bin 0 -> 11545 bytes ...usr@lib@clang@21@include@__stddef_size_t.h | 20 + ...ib@clang@21@include@__stddef_size_t.h.blob | Bin 0 -> 11548 bytes ...sr@lib@clang@21@include@__stddef_wchar_t.h | 28 + ...b@clang@21@include@__stddef_wchar_t.h.blob | Bin 0 -> 11348 bytes .../@usr@lib@clang@21@include@stdarg.h | 75 + .../@usr@lib@clang@21@include@stdarg.h.blob | Bin 0 -> 11487 bytes .../@usr@lib@clang@21@include@stddef.h | 139 + .../@usr@lib@clang@21@include@stddef.h.blob | Bin 0 -> 11566 bytes .../@usr@lib@clang@21@include@stdint.h | 844 +++ .../@usr@lib@clang@21@include@stdint.h.blob | Bin 0 -> 11937 bytes .../bin@main.cpp | 23 + .../bin@main.cpp.blob | Bin 0 -> 778 bytes .../src@adapter@adapter.hpp | 75 + .../src@adapter@adapter.hpp.blob | Bin 0 -> 13401 bytes .../src@harmonica.hpp | 108 + .../src@harmonica.hpp.blob | Bin 0 -> 17429 bytes .../src@plugins@magnitude@magnitude.hpp | 21 + .../src@plugins@magnitude@magnitude.hpp.blob | Bin 0 -> 12668 bytes ...gins@signal_generator@signal_generator.hpp | 41 + ...signal_generator@signal_generator.hpp.blob | Bin 0 -> 13819 bytes .../src@utils@using.hpp | 14 + .../src@utils@using.hpp.blob | Bin 0 -> 11561 bytes .../src@utils@var.hpp | 4 + .../src@utils@var.hpp.blob | Bin 0 -> 11380 bytes .../src@utils@workers@result.hpp | 39 + .../src@utils@workers@result.hpp.blob | Bin 0 -> 12242 bytes .../src@utils@workers@setup.hpp | 28 + .../src@utils@workers@setup.hpp.blob | Bin 0 -> 13040 bytes bin/main.signal_generator.cpp | 16 - bin/meson.build | 2 +- src/harmonica.hpp | 8 +- src/meson.build | 2 - src/plugins/magnitude/magnitude.cpp | 5 +- src/plugins/magnitude/magnitude.hpp | 2 +- .../signal_generator/signal_generator.cpp | 227 - .../signal_generator/signal_generator.hpp | 52 - src/utils/workers/setup.hpp | 2 - src/utils/workers/signal_type.hpp | 69 - 524 files changed, 101136 insertions(+), 375 deletions(-) create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@alloca.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@alloca.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@bitsperlong.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@bitsperlong.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@errno-base.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@errno-base.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@errno.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@errno.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@int-ll64.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@int-ll64.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@posix_types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@posix_types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@bitsperlong.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@bitsperlong.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@errno.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@errno.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types_64.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types_64.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@atomic_wide_counter.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@atomic_wide_counter.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@byteswap.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@byteswap.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@cpu-set.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@cpu-set.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@endian.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@endian.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@endianness.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@endianness.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@errno.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@errno.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn-common.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn-common.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@libc-header-start.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@libc-header-start.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@locale.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@locale.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@long-double.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@long-double.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthread_stack_min-dynamic.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthread_stack_min-dynamic.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes-arch.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes-arch.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@sched.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@sched.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@select.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@select.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@setjmp.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@setjmp.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-intn.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-intn.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-least.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-least.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-uintn.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-uintn.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdio_lim.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdio_lim.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdlib-float.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdlib-float.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_mutex.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_mutex.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_rwlock.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_rwlock.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@thread-shared-types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@thread-shared-types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time64.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time64.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@timesize.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@timesize.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@timex.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@timex.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@FILE.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@FILE.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__FILE.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__FILE.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos64_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos64_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__locale_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__locale_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__mbstate_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__mbstate_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__sigset_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__sigset_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clock_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clock_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clockid_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clockid_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@cookie_io_functions_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@cookie_io_functions_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@error_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@error_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@locale_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@locale_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@mbstate_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@mbstate_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@sigset_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@sigset_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_FILE.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_FILE.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct___jmp_buf_tag.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct___jmp_buf_tag.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_itimerspec.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_itimerspec.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_sched_param.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_sched_param.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timespec.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timespec.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timeval.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timeval.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_tm.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_tm.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@time_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@time_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@timer_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@timer_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@wint_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@wint_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@typesizes.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@typesizes.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@uintn-identity.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@uintn-identity.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitflags.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitflags.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitstatus.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitstatus.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wchar.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wchar.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wctype-wchar.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wctype-wchar.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wordsize.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wordsize.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@backward@binders.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@backward@binders.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bit create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bit.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@alloc_traits.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@alloc_traits.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocated_ptr.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocated_ptr.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocator.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocator.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_ios.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_ios.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_ios.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_ios.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@char_traits.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@char_traits.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@charconv.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@charconv.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@chrono.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@chrono.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@codecvt.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@codecvt.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@concept_check.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@concept_check.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cpp_type_traits.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cpp_type_traits.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_forced.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_forced.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_init_exception.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_init_exception.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_defines.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_defines.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_ptr.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_ptr.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_dir.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_dir.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_fwd.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_fwd.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_ops.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_ops.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_path.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_path.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functexcept.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functexcept.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functional_hash.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functional_hash.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@hash_bytes.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@hash_bytes.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@invoke.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@invoke.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ios_base.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ios_base.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@istream.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@istream.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_conv.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_conv.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets_nonio.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets_nonio.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets_nonio.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets_nonio.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@localefwd.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@localefwd.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memory_resource.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memory_resource.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memoryfwd.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memoryfwd.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@move.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@move.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@nested_exception.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@nested_exception.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@new_allocator.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@new_allocator.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream_insert.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream_insert.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@parse_numbers.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@parse_numbers.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@postypes.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@postypes.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@predefined_ops.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@predefined_ops.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ptr_traits.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ptr_traits.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@quoted_string.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@quoted_string.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@range_access.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@range_access.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@refwrap.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@refwrap.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@requires_hosted.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@requires_hosted.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@shared_ptr.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@shared_ptr.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@shared_ptr_base.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@shared_ptr_base.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@sstream.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@sstream.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@std_abs.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@std_abs.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_algobase.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_algobase.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_bvector.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_bvector.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_construct.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_construct.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_function.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_function.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_funcs.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_funcs.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_pair.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_pair.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_uninitialized.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_uninitialized.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_vector.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_vector.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf_iterator.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf_iterator.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@string_view.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@string_view.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stringfwd.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stringfwd.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@unique_ptr.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@unique_ptr.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator_args.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator_args.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@utility.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@utility.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@vector.tcc create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@vector.tcc.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@version.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@version.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cctype create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cctype.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cerrno create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cerrno.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@clocale create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@clocale.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@codecvt create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@codecvt.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@concepts create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@concepts.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstddef create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstddef.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdint create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdint.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdio create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdio.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdlib create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdlib.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ctime create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ctime.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwchar create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwchar.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwctype create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwctype.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@assertions.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@assertions.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@debug.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@debug.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@exception create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@exception.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@aligned_buffer.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@aligned_buffer.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@alloc_traits.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@alloc_traits.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@atomicity.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@atomicity.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@concurrence.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@concurrence.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@numeric_traits.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@numeric_traits.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@string_conversions.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@string_conversions.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@type_traits.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@type_traits.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@filesystem create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@filesystem.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@initializer_list create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@initializer_list.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iomanip create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iomanip.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ios create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ios.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iosfwd create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iosfwd.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@istream create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@istream.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@limits create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@limits.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@locale create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@locale.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@new create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@new.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ostream create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ostream.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@pstl@pstl_config.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@pstl@pstl_config.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ratio create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ratio.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@sstream create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@sstream.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@stdexcept create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@stdexcept.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@streambuf create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@streambuf.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string_view create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string_view.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@system_error create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@system_error.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@tuple create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@tuple.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@type_traits create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@type_traits.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@typeinfo create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@typeinfo.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@vector create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@vector.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@atomic_word.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@atomic_word.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++allocator.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++allocator.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++config.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++config.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++locale.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++locale.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@cpu_defines.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@cpu_defines.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_base.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_base.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_inline.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_inline.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@error_constants.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@error_constants.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@gthr-default.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@gthr-default.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@gthr.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@gthr.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@messages_members.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@messages_members.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@os_defines.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@os_defines.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@time_members.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@time_members.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@ctype.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@ctype.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@endian.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@endian.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@errno.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@errno.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features-time64.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features-time64.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs-64.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs-64.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@libintl.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@libintl.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@errno.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@errno.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@posix_types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@posix_types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@sched@types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@sched@types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@stddef.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@stddef.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@locale.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@locale.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@pthread.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@pthread.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sched.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sched.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sndfile.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sndfile.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdc-predef.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdc-predef.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdint.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdint.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdio.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdio.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdlib.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdlib.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@cdefs.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@cdefs.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@select.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@select.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@single_threaded.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@single_threaded.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@types.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@types.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@time.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@time.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wchar.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wchar.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wctype.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wctype.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stdarg___gnuc_va_list.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stdarg___gnuc_va_list.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_header_macro.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_header_macro.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_max_align_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_max_align_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_null.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_null.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_nullptr_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_nullptr_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_offsetof.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_offsetof.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_ptrdiff_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_ptrdiff_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_size_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_size_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_wchar_t.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_wchar_t.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdarg.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdarg.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stddef.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stddef.h.blob create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdint.h create mode 100644 .ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdint.h.blob create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/bin@main.cpp create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/bin@main.cpp.blob create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@adapter@adapter.hpp create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@adapter@adapter.hpp.blob create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@harmonica.hpp create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@harmonica.hpp.blob create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@magnitude@magnitude.hpp create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@magnitude@magnitude.hpp.blob create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@signal_generator@signal_generator.hpp create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@signal_generator@signal_generator.hpp.blob create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@using.hpp create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@using.hpp.blob create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@var.hpp create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@var.hpp.blob create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@result.hpp create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@result.hpp.blob create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@setup.hpp create mode 100644 .ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@setup.hpp.blob delete mode 100644 bin/main.signal_generator.cpp delete mode 100644 src/utils/signal_generator/signal_generator.cpp delete mode 100644 src/utils/signal_generator/signal_generator.hpp delete mode 100644 src/utils/workers/signal_type.hpp diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@alloca.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@alloca.h new file mode 100644 index 0000000..5700dd7 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@alloca.h @@ -0,0 +1,40 @@ +/* Copyright (C) 1992-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ALLOCA_H +#define _ALLOCA_H 1 + +#include + +#define __need_size_t +#include + +__BEGIN_DECLS + +/* Remove any previous definition. */ +#undef alloca + +/* Allocate a block that will be freed when the calling function exits. */ +extern void *alloca (size_t __size) __THROW; + +#ifdef __GNUC__ +# define alloca(size) __builtin_alloca (size) +#endif /* GCC. */ + +__END_DECLS + +#endif /* alloca.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@alloca.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@alloca.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8b8d93eb0b5c397bd5fd75629f3579a5d5024fee GIT binary patch literal 12021 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@bitsperlong.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@bitsperlong.h new file mode 100644 index 0000000..1fb4f0c --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@bitsperlong.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_BITS_PER_LONG +#define __ASM_GENERIC_BITS_PER_LONG + +#ifndef __BITS_PER_LONG +/* + * In order to keep safe and avoid regression, only unify uapi + * bitsperlong.h for some archs which are using newer toolchains + * that have the definitions of __CHAR_BIT__ and __SIZEOF_LONG__. + * See the following link for more info: + * https://lore.kernel.org/linux-arch/b9624545-2c80-49a1-ac3c-39264a591f7b@app.fastmail.com/ + */ +#if defined(__CHAR_BIT__) && defined(__SIZEOF_LONG__) +#define __BITS_PER_LONG (__CHAR_BIT__ * __SIZEOF_LONG__) +#else +/* + * There seems to be no way of detecting this automatically from user + * space, so 64 bit architectures should override this in their + * bitsperlong.h. In particular, an architecture that supports + * both 32 and 64 bit user space must not rely on CONFIG_64BIT + * to decide it, but rather check a compiler provided macro. + */ +#define __BITS_PER_LONG 32 +#endif +#endif + +#ifndef __BITS_PER_LONG_LONG +#define __BITS_PER_LONG_LONG 64 +#endif + +#endif /* __ASM_GENERIC_BITS_PER_LONG */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@bitsperlong.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@bitsperlong.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..9de9fdf5ba01db571ac19f00e64a1d1e70c1ae90 GIT binary patch literal 11531 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 + +#define EDEADLK 35 /* Resource deadlock would occur */ +#define ENAMETOOLONG 36 /* File name too long */ +#define ENOLCK 37 /* No record locks available */ + +/* + * This error code is special: arch syscall entry code will return + * -ENOSYS if users try to call a syscall that doesn't exist. To keep + * failures of syscalls that really do exist distinguishable from + * failures due to attempts to use a nonexistent syscall, syscall + * implementations should refrain from returning -ENOSYS. + */ +#define ENOSYS 38 /* Invalid system call number */ + +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ +#define ECHRNG 44 /* Channel number out of range */ +#define EL2NSYNC 45 /* Level 2 not synchronized */ +#define EL3HLT 46 /* Level 3 halted */ +#define EL3RST 47 /* Level 3 reset */ +#define ELNRNG 48 /* Link number out of range */ +#define EUNATCH 49 /* Protocol driver not attached */ +#define ENOCSI 50 /* No CSI structure available */ +#define EL2HLT 51 /* Level 2 halted */ +#define EBADE 52 /* Invalid exchange */ +#define EBADR 53 /* Invalid request descriptor */ +#define EXFULL 54 /* Exchange full */ +#define ENOANO 55 /* No anode */ +#define EBADRQC 56 /* Invalid request code */ +#define EBADSLT 57 /* Invalid slot */ + +#define EDEADLOCK EDEADLK + +#define EBFONT 59 /* Bad font file format */ +#define ENOSTR 60 /* Device not a stream */ +#define ENODATA 61 /* No data available */ +#define ETIME 62 /* Timer expired */ +#define ENOSR 63 /* Out of streams resources */ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* Object is remote */ +#define ENOLINK 67 /* Link has been severed */ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 72 /* Multihop attempted */ +#define EDOTDOT 73 /* RFS specific error */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ +#define ENOTUNIQ 76 /* Name not unique on network */ +#define EBADFD 77 /* File descriptor in bad state */ +#define EREMCHG 78 /* Remote address changed */ +#define ELIBACC 79 /* Can not access a needed shared library */ +#define ELIBBAD 80 /* Accessing a corrupted shared library */ +#define ELIBSCN 81 /* .lib section in a.out corrupted */ +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#define ELIBEXEC 83 /* Cannot exec a shared library directly */ +#define EILSEQ 84 /* Illegal byte sequence */ +#define ERESTART 85 /* Interrupted system call should be restarted */ +#define ESTRPIPE 86 /* Streams pipe error */ +#define EUSERS 87 /* Too many users */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ +#define ECONNREFUSED 111 /* Connection refused */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale file handle */ +#define EUCLEAN 117 /* Structure needs cleaning */ +#define ENOTNAM 118 /* Not a XENIX named type file */ +#define ENAVAIL 119 /* No XENIX semaphores available */ +#define EISNAM 120 /* Is a named type file */ +#define EREMOTEIO 121 /* Remote I/O error */ +#define EDQUOT 122 /* Quota exceeded */ + +#define ENOMEDIUM 123 /* No medium found */ +#define EMEDIUMTYPE 124 /* Wrong medium type */ +#define ECANCELED 125 /* Operation Canceled */ +#define ENOKEY 126 /* Required key not available */ +#define EKEYEXPIRED 127 /* Key has expired */ +#define EKEYREVOKED 128 /* Key has been revoked */ +#define EKEYREJECTED 129 /* Key was rejected by service */ + +/* for robust mutexes */ +#define EOWNERDEAD 130 /* Owner died */ +#define ENOTRECOVERABLE 131 /* State not recoverable */ + +#define ERFKILL 132 /* Operation not possible due to RF-kill */ + +#define EHWPOISON 133 /* Memory page has hardware error */ + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@errno.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a5cf2cea695d60cee4b661889a892ea25152e0a4 GIT binary patch literal 17463 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 + +#ifndef __ASSEMBLY__ +/* + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the + * header files exported to user space + */ + +typedef __signed__ char __s8; +typedef unsigned char __u8; + +typedef __signed__ short __s16; +typedef unsigned short __u16; + +typedef __signed__ int __s32; +typedef unsigned int __u32; + +#ifdef __GNUC__ +__extension__ typedef __signed__ long long __s64; +__extension__ typedef unsigned long long __u64; +#else +typedef __signed__ long long __s64; +typedef unsigned long long __u64; +#endif + +#endif /* __ASSEMBLY__ */ + + +#endif /* _ASM_GENERIC_INT_LL64_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@int-ll64.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@int-ll64.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7a3a2477da2705ac6866c32fd21c7ecfcf82bcb0 GIT binary patch literal 12070 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@posix_types.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@posix_types.h new file mode 100644 index 0000000..5df751f --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@posix_types.h @@ -0,0 +1,100 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_POSIX_TYPES_H +#define __ASM_GENERIC_POSIX_TYPES_H + +#include +/* + * This file is generally used by user-level software, so you need to + * be a little careful about namespace pollution etc. + * + * First the types that are often defined in different ways across + * architectures, so that you can override them. + */ + +#ifndef __kernel_long_t +typedef long __kernel_long_t; +typedef unsigned long __kernel_ulong_t; +#endif + +#ifndef __kernel_ino_t +typedef __kernel_ulong_t __kernel_ino_t; +#endif + +#ifndef __kernel_mode_t +typedef unsigned int __kernel_mode_t; +#endif + +#ifndef __kernel_pid_t +typedef int __kernel_pid_t; +#endif + +#ifndef __kernel_ipc_pid_t +typedef int __kernel_ipc_pid_t; +#endif + +#ifndef __kernel_uid_t +typedef unsigned int __kernel_uid_t; +typedef unsigned int __kernel_gid_t; +#endif + +#ifndef __kernel_suseconds_t +typedef __kernel_long_t __kernel_suseconds_t; +#endif + +#ifndef __kernel_daddr_t +typedef int __kernel_daddr_t; +#endif + +#ifndef __kernel_uid32_t +typedef unsigned int __kernel_uid32_t; +typedef unsigned int __kernel_gid32_t; +#endif + +#ifndef __kernel_old_uid_t +typedef __kernel_uid_t __kernel_old_uid_t; +typedef __kernel_gid_t __kernel_old_gid_t; +#endif + +#ifndef __kernel_old_dev_t +typedef unsigned int __kernel_old_dev_t; +#endif + +/* + * Most 32 bit architectures use "unsigned int" size_t, + * and all 64 bit architectures use "unsigned long" size_t. + */ +#ifndef __kernel_size_t +#if __BITS_PER_LONG != 64 +typedef unsigned int __kernel_size_t; +typedef int __kernel_ssize_t; +typedef int __kernel_ptrdiff_t; +#else +typedef __kernel_ulong_t __kernel_size_t; +typedef __kernel_long_t __kernel_ssize_t; +typedef __kernel_long_t __kernel_ptrdiff_t; +#endif +#endif + +#ifndef __kernel_fsid_t +typedef struct { + int val[2]; +} __kernel_fsid_t; +#endif + +/* + * anything below here should be completely generic + */ +typedef __kernel_long_t __kernel_off_t; +typedef long long __kernel_loff_t; +typedef unsigned long long __kernel_uoff_t; +typedef __kernel_long_t __kernel_old_time_t; +typedef __kernel_long_t __kernel_time_t; +typedef long long __kernel_time64_t; +typedef __kernel_long_t __kernel_clock_t; +typedef int __kernel_timer_t; +typedef int __kernel_clockid_t; +typedef char * __kernel_caddr_t; +typedef unsigned short __kernel_uid16_t; +typedef unsigned short __kernel_gid16_t; + +#endif /* __ASM_GENERIC_POSIX_TYPES_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@posix_types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@posix_types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..aa21d3a2c52d4a0c0b44bf0ecf453e352c68e4e8 GIT binary patch literal 13884 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@types.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@types.h new file mode 100644 index 0000000..dfaa50d --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@types.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_TYPES_H +#define _ASM_GENERIC_TYPES_H +/* + * int-ll64 is used everywhere now. + */ +#include + +#endif /* _ASM_GENERIC_TYPES_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm-generic@types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ca8a4c6d69cf2a7b89056b6a0e628e90eaa99c48 GIT binary patch literal 11473 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 S8JPr_ESSI~!+%Bw1_l5ypmI$B literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@bitsperlong.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@bitsperlong.h new file mode 100644 index 0000000..5d72c84 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@bitsperlong.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_X86_BITSPERLONG_H +#define __ASM_X86_BITSPERLONG_H + +#if defined(__x86_64__) && !defined(__ILP32__) +# define __BITS_PER_LONG 64 +#else +# define __BITS_PER_LONG 32 +#endif + +#include + +#endif /* __ASM_X86_BITSPERLONG_H */ + diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@bitsperlong.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@bitsperlong.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..585ec67fa95af284375cbc2883af84b960150375 GIT binary patch literal 11561 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 UpocIJhZ0660VX>pFbOdg0OXa500000 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@errno.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@errno.h new file mode 100644 index 0000000..4c82b50 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@errno.h @@ -0,0 +1 @@ +#include diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@errno.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e45a3919ae791aa2518d27aae3024a3f03567215 GIT binary patch literal 11398 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 H0|)>BE$&}w literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types.h new file mode 100644 index 0000000..fe9e6aa --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +# ifdef __i386__ +# include +# elif defined(__ILP32__) +# include +# else +# include +# endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f08d55d0863dd9903828cebb83eb1dd560ad1398 GIT binary patch literal 11397 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types_64.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types_64.h new file mode 100644 index 0000000..515afb8 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types_64.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_X86_POSIX_TYPES_64_H +#define _ASM_X86_POSIX_TYPES_64_H + +/* + * This file is generally used by user-level software, so you need to + * be a little careful about namespace pollution etc. Also, we cannot + * assume GCC is being used. + */ + +typedef unsigned short __kernel_old_uid_t; +typedef unsigned short __kernel_old_gid_t; +#define __kernel_old_uid_t __kernel_old_uid_t + +typedef unsigned long __kernel_old_dev_t; +#define __kernel_old_dev_t __kernel_old_dev_t + +#include + +#endif /* _ASM_X86_POSIX_TYPES_64_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types_64.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@posix_types_64.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1348097dffc651e29956419e5db3089ea554714e GIT binary patch literal 12068 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 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@asm@types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2eb6c164f69091b39f56de918f79f4f6b81caf52 GIT binary patch literal 11398 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 Q#fZ8l7h4s?z`(!&08fcuX#fBK literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@atomic_wide_counter.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@atomic_wide_counter.h new file mode 100644 index 0000000..a01dec6 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@atomic_wide_counter.h @@ -0,0 +1,35 @@ +/* Monotonically increasing wide counters (at least 62 bits). + Copyright (C) 2016-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_ATOMIC_WIDE_COUNTER_H +#define _BITS_ATOMIC_WIDE_COUNTER_H + +/* Counter that is monotonically increasing (by less than 2**31 per + increment), with a single writer, and an arbitrary number of + readers. */ +typedef union +{ + __extension__ unsigned long long int __value64; + struct + { + unsigned int __low; + unsigned int __high; + } __value32; +} __atomic_wide_counter; + +#endif /* _BITS_ATOMIC_WIDE_COUNTER_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@atomic_wide_counter.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@atomic_wide_counter.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ea89389e7537aac4d4728ac4bf1b196b97564c5c GIT binary patch literal 12386 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. */ + +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H +# error "Never use directly; include instead." +#endif + +#ifndef _BITS_BYTESWAP_H +#define _BITS_BYTESWAP_H 1 + +#include +#include + +/* Swap bytes in 16-bit value. */ +#define __bswap_constant_16(x) \ + ((__uint16_t) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))) + +static __inline __uint16_t +__bswap_16 (__uint16_t __bsx) +{ +#if __GNUC_PREREQ (4, 8) + return __builtin_bswap16 (__bsx); +#else + return __bswap_constant_16 (__bsx); +#endif +} + +/* Swap bytes in 32-bit value. */ +#define __bswap_constant_32(x) \ + ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) \ + | (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24)) + +static __inline __uint32_t +__bswap_32 (__uint32_t __bsx) +{ +#if __GNUC_PREREQ (4, 3) + return __builtin_bswap32 (__bsx); +#else + return __bswap_constant_32 (__bsx); +#endif +} + +/* Swap bytes in 64-bit value. */ +#define __bswap_constant_64(x) \ + ((((x) & 0xff00000000000000ull) >> 56) \ + | (((x) & 0x00ff000000000000ull) >> 40) \ + | (((x) & 0x0000ff0000000000ull) >> 24) \ + | (((x) & 0x000000ff00000000ull) >> 8) \ + | (((x) & 0x00000000ff000000ull) << 8) \ + | (((x) & 0x0000000000ff0000ull) << 24) \ + | (((x) & 0x000000000000ff00ull) << 40) \ + | (((x) & 0x00000000000000ffull) << 56)) + +__extension__ static __inline __uint64_t +__bswap_64 (__uint64_t __bsx) +{ +#if __GNUC_PREREQ (4, 3) + return __builtin_bswap64 (__bsx); +#else + return __bswap_constant_64 (__bsx); +#endif +} + +#endif /* _BITS_BYTESWAP_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@byteswap.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@byteswap.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e3f5de9b3cde2bde5503907dd69ed2bd82f9f493 GIT binary patch literal 13188 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@cpu-set.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@cpu-set.h new file mode 100644 index 0000000..ddb79ce --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@cpu-set.h @@ -0,0 +1,124 @@ +/* Definition of the cpu_set_t structure used by the POSIX 1003.1b-1993 + scheduling interface. + Copyright (C) 1996-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_CPU_SET_H +#define _BITS_CPU_SET_H 1 + +#ifndef _SCHED_H +# error "Never include directly; use instead." +#endif + +/* Size definition for CPU sets. */ +#define __CPU_SETSIZE 1024 +#define __NCPUBITS (8 * sizeof (__cpu_mask)) + +/* Type for array elements in 'cpu_set_t'. */ +typedef __CPU_MASK_TYPE __cpu_mask; + +/* Basic access functions. */ +#define __CPUELT(cpu) ((cpu) / __NCPUBITS) +#define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS)) + +/* Data structure to describe CPU mask. */ +typedef struct +{ + __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS]; +} cpu_set_t; + +/* Access functions for CPU masks. */ +#if __GNUC_PREREQ (2, 91) +# define __CPU_ZERO_S(setsize, cpusetp) \ + do __builtin_memset (cpusetp, '\0', setsize); while (0) +#else +# define __CPU_ZERO_S(setsize, cpusetp) \ + do { \ + size_t __i; \ + size_t __imax = (setsize) / sizeof (__cpu_mask); \ + __cpu_mask *__bits = (cpusetp)->__bits; \ + for (__i = 0; __i < __imax; ++__i) \ + __bits[__i] = 0; \ + } while (0) +#endif +#define __CPU_SET_S(cpu, setsize, cpusetp) \ + (__extension__ \ + ({ size_t __cpu = (cpu); \ + __cpu / 8 < (setsize) \ + ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ + |= __CPUMASK (__cpu)) \ + : 0; })) +#define __CPU_CLR_S(cpu, setsize, cpusetp) \ + (__extension__ \ + ({ size_t __cpu = (cpu); \ + __cpu / 8 < (setsize) \ + ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ + &= ~__CPUMASK (__cpu)) \ + : 0; })) +#define __CPU_ISSET_S(cpu, setsize, cpusetp) \ + (__extension__ \ + ({ size_t __cpu = (cpu); \ + __cpu / 8 < (setsize) \ + ? ((((const __cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ + & __CPUMASK (__cpu))) != 0 \ + : 0; })) + +#define __CPU_COUNT_S(setsize, cpusetp) \ + __sched_cpucount (setsize, cpusetp) + +#if __GNUC_PREREQ (2, 91) +# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ + (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0) +#else +# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ + (__extension__ \ + ({ const __cpu_mask *__arr1 = (cpusetp1)->__bits; \ + const __cpu_mask *__arr2 = (cpusetp2)->__bits; \ + size_t __imax = (setsize) / sizeof (__cpu_mask); \ + size_t __i; \ + for (__i = 0; __i < __imax; ++__i) \ + if (__arr1[__i] != __arr2[__i]) \ + break; \ + __i == __imax; })) +#endif + +#define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \ + (__extension__ \ + ({ cpu_set_t *__dest = (destset); \ + const __cpu_mask *__arr1 = (srcset1)->__bits; \ + const __cpu_mask *__arr2 = (srcset2)->__bits; \ + size_t __imax = (setsize) / sizeof (__cpu_mask); \ + size_t __i; \ + for (__i = 0; __i < __imax; ++__i) \ + ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i]; \ + __dest; })) + +#define __CPU_ALLOC_SIZE(count) \ + ((((count) + __NCPUBITS - 1) / __NCPUBITS) * sizeof (__cpu_mask)) +#define __CPU_ALLOC(count) __sched_cpualloc (count) +#define __CPU_FREE(cpuset) __sched_cpufree (cpuset) + +__BEGIN_DECLS + +extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) + __THROW; +extern cpu_set_t *__sched_cpualloc (size_t __count) __THROW __wur; +extern void __sched_cpufree (cpu_set_t *__set) __THROW; + +__END_DECLS + +#endif /* bits/cpu-set.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@cpu-set.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@cpu-set.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..efec87dace003e9e5af13370bf74763316ec0fbf GIT binary patch literal 15457 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. */ + +#ifndef _BITS_ENDIAN_H +#define _BITS_ENDIAN_H 1 + +/* Definitions for byte order, according to significance of bytes, + from low addresses to high addresses. The value is what you get by + putting '4' in the most significant byte, '3' in the second most + significant byte, '2' in the second least significant byte, and '1' + in the least significant byte, and then writing down one digit for + each byte, starting with the byte at the lowest address at the left, + and proceeding to the byte with the highest address at the right. */ + +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 +#define __PDP_ENDIAN 3412 + +/* This file defines `__BYTE_ORDER' for the particular machine. */ +#include + +/* Some machines may need to use a different endianness for floating point + values. */ +#ifndef __FLOAT_WORD_ORDER +# define __FLOAT_WORD_ORDER __BYTE_ORDER +#endif + +#if __BYTE_ORDER == __LITTLE_ENDIAN +# define __LONG_LONG_PAIR(HI, LO) LO, HI +#elif __BYTE_ORDER == __BIG_ENDIAN +# define __LONG_LONG_PAIR(HI, LO) HI, LO +#endif + +#endif /* bits/endian.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@endian.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@endian.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..d89b8cfb0e0cdc8876b714c1eb69f32b2235830b GIT binary patch literal 11891 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 jh6F directly; include instead." +#endif + +/* i386/x86_64 are little-endian. */ +#define __BYTE_ORDER __LITTLE_ENDIAN + +#endif /* bits/endianness.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@endianness.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@endianness.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..31d02d77d10ead8de6e43e571ac85fae227e125c GIT binary patch literal 11548 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. */ + +#ifndef _BITS_ERRNO_H +#define _BITS_ERRNO_H 1 + +#if !defined _ERRNO_H +# error "Never include directly; use instead." +#endif + +# include + +/* Older Linux headers do not define these constants. */ +# ifndef ENOTSUP +# define ENOTSUP EOPNOTSUPP +# endif + +# ifndef ECANCELED +# define ECANCELED 125 +# endif + +# ifndef EOWNERDEAD +# define EOWNERDEAD 130 +# endif + +#ifndef ENOTRECOVERABLE +# define ENOTRECOVERABLE 131 +# endif + +# ifndef ERFKILL +# define ERFKILL 132 +# endif + +# ifndef EHWPOISON +# define EHWPOISON 133 +# endif + +#endif /* bits/errno.h. */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@errno.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..358ee255105cdab91ea34850743f50a3a8b8b01d GIT binary patch literal 11577 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. */ + +#ifndef _BITS_FLOATN_COMMON_H +#define _BITS_FLOATN_COMMON_H + +#include +#include + +/* This header should be included at the bottom of each bits/floatn.h. + It defines the following macros for each _FloatN and _FloatNx type, + where the same definitions, or definitions based only on the macros + in bits/floatn.h, are appropriate for all glibc configurations. */ + +/* Defined to 1 if the current compiler invocation provides a + floating-point type with the right format for this type, and this + glibc includes corresponding *fN or *fNx interfaces for it. */ +#define __HAVE_FLOAT16 0 +#define __HAVE_FLOAT32 1 +#define __HAVE_FLOAT64 1 +#define __HAVE_FLOAT32X 1 +#define __HAVE_FLOAT128X 0 + +/* Defined to 1 if the corresponding __HAVE_ macro is 1 and the + type is the first with its format in the sequence of (the default + choices for) float, double, long double, _Float16, _Float32, + _Float64, _Float128, _Float32x, _Float64x, _Float128x for this + glibc; that is, if functions present once per floating-point format + rather than once per type are present for this type. + + All configurations supported by glibc have _Float32 the same format + as float, _Float64 and _Float32x the same format as double, the + _Float64x the same format as either long double or _Float128. No + configurations support _Float128x or, as of GCC 7, have compiler + support for a type meeting the requirements for _Float128x. */ +#define __HAVE_DISTINCT_FLOAT16 __HAVE_FLOAT16 +#define __HAVE_DISTINCT_FLOAT32 0 +#define __HAVE_DISTINCT_FLOAT64 0 +#define __HAVE_DISTINCT_FLOAT32X 0 +#define __HAVE_DISTINCT_FLOAT64X 0 +#define __HAVE_DISTINCT_FLOAT128X __HAVE_FLOAT128X + +/* Defined to 1 if the corresponding _FloatN type is not binary compatible + with the corresponding ISO C type in the current compilation unit as + opposed to __HAVE_DISTINCT_FLOATN, which indicates the default types built + in glibc. */ +#define __HAVE_FLOAT128_UNLIKE_LDBL (__HAVE_DISTINCT_FLOAT128 \ + && __LDBL_MANT_DIG__ != 113) + +/* Defined to 1 if any _FloatN or _FloatNx types that are not + ABI-distinct are however distinct types at the C language level (so + for the purposes of __builtin_types_compatible_p and _Generic). */ +#if __GNUC_PREREQ (7, 0) && !defined __cplusplus +# define __HAVE_FLOATN_NOT_TYPEDEF 1 +#else +# define __HAVE_FLOATN_NOT_TYPEDEF 0 +#endif + +#ifndef __ASSEMBLER__ + +/* Defined to concatenate the literal suffix to be used with _FloatN + or _FloatNx types, if __HAVE_ is 1. The corresponding + literal suffixes exist since GCC 7, for C only. */ +# if __HAVE_FLOAT16 +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +/* No corresponding suffix available for this type. */ +# define __f16(x) ((_Float16) x##f) +# else +# define __f16(x) x##f16 +# endif +# endif + +# if __HAVE_FLOAT32 +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# define __f32(x) x##f +# else +# define __f32(x) x##f32 +# endif +# endif + +# if __HAVE_FLOAT64 +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# ifdef __NO_LONG_DOUBLE_MATH +# define __f64(x) x##l +# else +# define __f64(x) x +# endif +# else +# define __f64(x) x##f64 +# endif +# endif + +# if __HAVE_FLOAT32X +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# define __f32x(x) x +# else +# define __f32x(x) x##f32x +# endif +# endif + +# if __HAVE_FLOAT64X +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# if __HAVE_FLOAT64X_LONG_DOUBLE +# define __f64x(x) x##l +# else +# define __f64x(x) __f128 (x) +# endif +# else +# define __f64x(x) x##f64x +# endif +# endif + +# if __HAVE_FLOAT128X +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# error "_Float128X supported but no constant suffix" +# else +# define __f128x(x) x##f128x +# endif +# endif + +/* Defined to a complex type if __HAVE_ is 1. */ +# if __HAVE_FLOAT16 +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__))); +# define __CFLOAT16 __cfloat16 +# else +# define __CFLOAT16 _Complex _Float16 +# endif +# endif + +# if __HAVE_FLOAT32 +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# define __CFLOAT32 _Complex float +# else +# define __CFLOAT32 _Complex _Float32 +# endif +# endif + +# if __HAVE_FLOAT64 +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# ifdef __NO_LONG_DOUBLE_MATH +# define __CFLOAT64 _Complex long double +# else +# define __CFLOAT64 _Complex double +# endif +# else +# define __CFLOAT64 _Complex _Float64 +# endif +# endif + +# if __HAVE_FLOAT32X +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# define __CFLOAT32X _Complex double +# else +# define __CFLOAT32X _Complex _Float32x +# endif +# endif + +# if __HAVE_FLOAT64X +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# if __HAVE_FLOAT64X_LONG_DOUBLE +# define __CFLOAT64X _Complex long double +# else +# define __CFLOAT64X __CFLOAT128 +# endif +# else +# define __CFLOAT64X _Complex _Float64x +# endif +# endif + +# if __HAVE_FLOAT128X +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# error "_Float128X supported but no complex type" +# else +# define __CFLOAT128X _Complex _Float128x +# endif +# endif + +/* The remaining of this file provides support for older compilers. */ +# if __HAVE_FLOAT16 + +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +typedef float _Float16 __attribute__ ((__mode__ (__HF__))); +# endif + +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf16() ((_Float16) __builtin_huge_val ()) +# define __builtin_inff16() ((_Float16) __builtin_inf ()) +# define __builtin_nanf16(x) ((_Float16) __builtin_nan (x)) +# define __builtin_nansf16(x) ((_Float16) __builtin_nans (x)) +# endif + +# endif + +# if __HAVE_FLOAT32 + +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +typedef float _Float32; +# endif + +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf32() (__builtin_huge_valf ()) +# define __builtin_inff32() (__builtin_inff ()) +# define __builtin_nanf32(x) (__builtin_nanf (x)) +# define __builtin_nansf32(x) (__builtin_nansf (x)) +# endif + +# endif + +# if __HAVE_FLOAT64 + +/* If double, long double and _Float64 all have the same set of + values, TS 18661-3 requires the usual arithmetic conversions on + long double and _Float64 to produce _Float64. For this to be the + case when building with a compiler without a distinct _Float64 + type, _Float64 must be a typedef for long double, not for + double. */ + +# ifdef __NO_LONG_DOUBLE_MATH + +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +typedef long double _Float64; +# endif + +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf64() (__builtin_huge_vall ()) +# define __builtin_inff64() (__builtin_infl ()) +# define __builtin_nanf64(x) (__builtin_nanl (x)) +# define __builtin_nansf64(x) (__builtin_nansl (x)) +# endif + +# else + +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +typedef double _Float64; +# endif + +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf64() (__builtin_huge_val ()) +# define __builtin_inff64() (__builtin_inf ()) +# define __builtin_nanf64(x) (__builtin_nan (x)) +# define __builtin_nansf64(x) (__builtin_nans (x)) +# endif + +# endif + +# endif + +# if __HAVE_FLOAT32X + +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +typedef double _Float32x; +# endif + +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf32x() (__builtin_huge_val ()) +# define __builtin_inff32x() (__builtin_inf ()) +# define __builtin_nanf32x(x) (__builtin_nan (x)) +# define __builtin_nansf32x(x) (__builtin_nans (x)) +# endif + +# endif + +# if __HAVE_FLOAT64X + +# if __HAVE_FLOAT64X_LONG_DOUBLE + +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +typedef long double _Float64x; +# endif + +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf64x() (__builtin_huge_vall ()) +# define __builtin_inff64x() (__builtin_infl ()) +# define __builtin_nanf64x(x) (__builtin_nanl (x)) +# define __builtin_nansf64x(x) (__builtin_nansl (x)) +# endif + +# else + +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +typedef _Float128 _Float64x; +# endif + +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf64x() (__builtin_huge_valf128 ()) +# define __builtin_inff64x() (__builtin_inff128 ()) +# define __builtin_nanf64x(x) (__builtin_nanf128 (x)) +# define __builtin_nansf64x(x) (__builtin_nansf128 (x)) +# endif + +# endif + +# endif + +# if __HAVE_FLOAT128X + +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +# error "_Float128x supported but no type" +# endif + +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf128x() ((_Float128x) __builtin_huge_val ()) +# define __builtin_inff128x() ((_Float128x) __builtin_inf ()) +# define __builtin_nanf128x(x) ((_Float128x) __builtin_nan (x)) +# define __builtin_nansf128x(x) ((_Float128x) __builtin_nans (x)) +# endif + +# endif + +#endif /* !__ASSEMBLER__. */ + +#endif /* _BITS_FLOATN_COMMON_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn-common.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn-common.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..42be20dcef0bf43ac9ea2e81bdc2f77452a3fda2 GIT binary patch literal 15669 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn.h new file mode 100644 index 0000000..387a4ae --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn.h @@ -0,0 +1,133 @@ +/* Macros to control TS 18661-3 glibc features on x86. + Copyright (C) 2017-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_FLOATN_H +#define _BITS_FLOATN_H + +#include + +/* Defined to 1 if the current compiler invocation provides a + floating-point type with the IEEE 754 binary128 format, and this + glibc includes corresponding *f128 interfaces for it. The required + libgcc support was added some time after the basic compiler + support, for x86_64 and x86. Intel SYCL compiler doesn't support + _Float128: https://github.com/intel/llvm/issues/16903 + */ +#if (defined __x86_64__ \ + ? __GNUC_PREREQ (4, 3) \ + : (defined __GNU__ ? __GNUC_PREREQ (4, 5) : __GNUC_PREREQ (4, 4))) \ + || (__glibc_clang_prereq (3, 9) \ + && (!defined __INTEL_LLVM_COMPILER \ + || !defined SYCL_LANGUAGE_VERSION)) +# define __HAVE_FLOAT128 1 +#else +# define __HAVE_FLOAT128 0 +#endif + +/* Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct + from the default float, double and long double types in this glibc. */ +#if __HAVE_FLOAT128 +# define __HAVE_DISTINCT_FLOAT128 1 +#else +# define __HAVE_DISTINCT_FLOAT128 0 +#endif + +/* Defined to 1 if the current compiler invocation provides a + floating-point type with the right format for _Float64x, and this + glibc includes corresponding *f64x interfaces for it. */ +#define __HAVE_FLOAT64X 1 + +/* Defined to 1 if __HAVE_FLOAT64X is 1 and _Float64x has the format + of long double. Otherwise, if __HAVE_FLOAT64X is 1, _Float64x has + the format of _Float128, which must be different from that of long + double. */ +#define __HAVE_FLOAT64X_LONG_DOUBLE 1 + +#ifndef __ASSEMBLER__ + +/* Defined to concatenate the literal suffix to be used with _Float128 + types, if __HAVE_FLOAT128 is 1. */ +# if __HAVE_FLOAT128 +# if !__GNUC_PREREQ (7, 0) \ + || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) \ + || defined __clang__ +/* The literal suffix f128 exists only since GCC 7.0. */ +# define __f128(x) x##q +# else +# define __f128(x) x##f128 +# endif +# endif + +/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */ +# if __HAVE_FLOAT128 +# if !__GNUC_PREREQ (7, 0) \ + || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) \ + || defined __clang__ +/* Add a typedef for older GCC compilers which don't natively support + _Complex _Float128. */ +typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__))); +# define __CFLOAT128 __cfloat128 +# else +# define __CFLOAT128 _Complex _Float128 +# endif +# endif + +/* The remaining of this file provides support for older compilers. */ +# if __HAVE_FLOAT128 + +/* The type _Float128 exists only since GCC 7.0. */ +# if !__GNUC_PREREQ (7, 0) \ + || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) \ + || __glibc_clang_prereq (3, 9) +typedef __float128 _Float128; +# endif + +/* __builtin_huge_valf128 doesn't exist before GCC 7.0 nor Clang 7.0. */ +# if !__GNUC_PREREQ (7, 0) && !__glibc_clang_prereq (7, 0) +# define __builtin_huge_valf128() ((_Float128) __builtin_huge_val ()) +# endif + +/* Older GCC has only a subset of built-in functions for _Float128 on + x86, and __builtin_infq is not usable in static initializers. + Converting a narrower sNaN to _Float128 produces a quiet NaN, so + attempts to use _Float128 sNaNs will not work properly with older + compilers. */ +# if !__GNUC_PREREQ (7, 0) && !defined __clang__ +# define __builtin_copysignf128 __builtin_copysignq +# define __builtin_fabsf128 __builtin_fabsq +# define __builtin_inff128() ((_Float128) __builtin_inf ()) +# define __builtin_nanf128(x) ((_Float128) __builtin_nan (x)) +# define __builtin_nansf128(x) ((_Float128) __builtin_nans (x)) +# endif + +/* In math/math.h, __MATH_TG will expand signbit to __builtin_signbit*, + e.g.: __builtin_signbitf128, before GCC 6. However, there has never + been a __builtin_signbitf128 in GCC and the type-generic builtin is + only available since GCC 6. signbit is expanded to __builtin_signbit + after Clang 3.3. */ +# if !__GNUC_PREREQ (6, 0) +# define __builtin_signbitf128 __signbitf128 +# endif + +# endif + +#endif /* !__ASSEMBLER__. */ + +#include + +#endif /* _BITS_FLOATN_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@floatn.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1c6844bca7f72d44462ff7fb0d7bb31d94582283 GIT binary patch literal 12456 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@libc-header-start.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@libc-header-start.h new file mode 100644 index 0000000..45897cd --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@libc-header-start.h @@ -0,0 +1,110 @@ +/* Handle feature test macros at the start of a header. + Copyright (C) 2016-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* This header is internal to glibc and should not be included outside + of glibc headers. Headers including it must define + __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION first. This header + cannot have multiple include guards because ISO C feature test + macros depend on the definition of the macro when an affected + header is included, not when the first system header is + included. */ + +#ifndef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +# error "Never include directly." +#endif + +#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION + +#include + +/* ISO/IEC TR 24731-2:2010 defines the __STDC_WANT_LIB_EXT2__ + macro. */ +#undef __GLIBC_USE_LIB_EXT2 +#if (defined __USE_GNU \ + || (defined __STDC_WANT_LIB_EXT2__ && __STDC_WANT_LIB_EXT2__ > 0)) +# define __GLIBC_USE_LIB_EXT2 1 +#else +# define __GLIBC_USE_LIB_EXT2 0 +#endif + +/* ISO/IEC TS 18661-1:2014 defines the __STDC_WANT_IEC_60559_BFP_EXT__ + macro. Most but not all symbols enabled by that macro in TS + 18661-1 are enabled unconditionally in C23. In C23, the symbols in + Annex F still require a new feature test macro + __STDC_WANT_IEC_60559_EXT__ instead (C23 does not define + __STDC_WANT_IEC_60559_BFP_EXT__), while a few features from TS + 18661-1 are not included in C23 (and thus should depend on + __STDC_WANT_IEC_60559_BFP_EXT__ even when C23 features are + enabled). + + __GLIBC_USE (IEC_60559_BFP_EXT) controls those features from TS + 18661-1 not included in C23. + + __GLIBC_USE (IEC_60559_BFP_EXT_C23) controls those features from TS + 18661-1 that are also included in C23 (with no feature test macro + required in C23). + + __GLIBC_USE (IEC_60559_EXT) controls those features from TS 18661-1 + that are included in C23 but conditional on + __STDC_WANT_IEC_60559_EXT__. (There are currently no features + conditional on __STDC_WANT_IEC_60559_EXT__ that are not in TS + 18661-1.) */ +#undef __GLIBC_USE_IEC_60559_BFP_EXT +#if defined __USE_GNU || defined __STDC_WANT_IEC_60559_BFP_EXT__ +# define __GLIBC_USE_IEC_60559_BFP_EXT 1 +#else +# define __GLIBC_USE_IEC_60559_BFP_EXT 0 +#endif +#undef __GLIBC_USE_IEC_60559_BFP_EXT_C23 +#if __GLIBC_USE (IEC_60559_BFP_EXT) || __GLIBC_USE (ISOC23) +# define __GLIBC_USE_IEC_60559_BFP_EXT_C23 1 +#else +# define __GLIBC_USE_IEC_60559_BFP_EXT_C23 0 +#endif +#undef __GLIBC_USE_IEC_60559_EXT +#if __GLIBC_USE (IEC_60559_BFP_EXT) || defined __STDC_WANT_IEC_60559_EXT__ +# define __GLIBC_USE_IEC_60559_EXT 1 +#else +# define __GLIBC_USE_IEC_60559_EXT 0 +#endif + +/* ISO/IEC TS 18661-4:2015 defines the + __STDC_WANT_IEC_60559_FUNCS_EXT__ macro. Other than the reduction + functions, the symbols from this TS are enabled unconditionally in + C23. */ +#undef __GLIBC_USE_IEC_60559_FUNCS_EXT +#if defined __USE_GNU || defined __STDC_WANT_IEC_60559_FUNCS_EXT__ +# define __GLIBC_USE_IEC_60559_FUNCS_EXT 1 +#else +# define __GLIBC_USE_IEC_60559_FUNCS_EXT 0 +#endif +#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C23 +#if __GLIBC_USE (IEC_60559_FUNCS_EXT) || __GLIBC_USE (ISOC23) +# define __GLIBC_USE_IEC_60559_FUNCS_EXT_C23 1 +#else +# define __GLIBC_USE_IEC_60559_FUNCS_EXT_C23 0 +#endif + +/* ISO/IEC TS 18661-3:2015 defines the + __STDC_WANT_IEC_60559_TYPES_EXT__ macro. */ +#undef __GLIBC_USE_IEC_60559_TYPES_EXT +#if defined __USE_GNU || defined __STDC_WANT_IEC_60559_TYPES_EXT__ +# define __GLIBC_USE_IEC_60559_TYPES_EXT 1 +#else +# define __GLIBC_USE_IEC_60559_TYPES_EXT 0 +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@libc-header-start.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@libc-header-start.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..edcf086db72185dfe70ce86a2b90e93d3b4c3950 GIT binary patch literal 12190 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@locale.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@locale.h new file mode 100644 index 0000000..b75b71a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@locale.h @@ -0,0 +1,40 @@ +/* Definition of locale category symbol values. + Copyright (C) 2001-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#if !defined _LOCALE_H && !defined _LANGINFO_H +# error "Never use directly; include instead." +#endif + +#ifndef _BITS_LOCALE_H +#define _BITS_LOCALE_H 1 + +#define __LC_CTYPE 0 +#define __LC_NUMERIC 1 +#define __LC_TIME 2 +#define __LC_COLLATE 3 +#define __LC_MONETARY 4 +#define __LC_MESSAGES 5 +#define __LC_ALL 6 +#define __LC_PAPER 7 +#define __LC_NAME 8 +#define __LC_ADDRESS 9 +#define __LC_TELEPHONE 10 +#define __LC_MEASUREMENT 11 +#define __LC_IDENTIFICATION 12 + +#endif /* bits/locale.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@locale.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@locale.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b0ac43ee750b91cf659037dccf4824bd2013dc69 GIT binary patch literal 12320 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@long-double.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@long-double.h new file mode 100644 index 0000000..5833ecc --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@long-double.h @@ -0,0 +1,21 @@ +/* Properties of long double type. ldbl-96 version. + Copyright (C) 2016-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* long double is distinct from double, so there is nothing to + define here. */ +#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@long-double.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@long-double.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..df5e88eea5880b79e28c5b874c63a90ece9443ce GIT binary patch literal 11469 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthread_stack_min-dynamic.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthread_stack_min-dynamic.h new file mode 100644 index 0000000..af35640 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthread_stack_min-dynamic.h @@ -0,0 +1,31 @@ +/* Definition of PTHREAD_STACK_MIN, possibly dynamic. + Copyright (C) 2021-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef PTHREAD_STACK_MIN +# if defined __USE_DYNAMIC_STACK_SIZE && __USE_DYNAMIC_STACK_SIZE +# ifndef __ASSEMBLER__ +# define __SC_THREAD_STACK_MIN_VALUE 75 +__BEGIN_DECLS +extern long int __sysconf (int __name) __THROW; +__END_DECLS +# define PTHREAD_STACK_MIN __sysconf (__SC_THREAD_STACK_MIN_VALUE) +# endif +# else +# include +# endif +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthread_stack_min-dynamic.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthread_stack_min-dynamic.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..17b7e393155ce5c340e49702512abd14caa70b7a GIT binary patch literal 11838 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes-arch.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes-arch.h new file mode 100644 index 0000000..403ad38 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes-arch.h @@ -0,0 +1,55 @@ +/* Copyright (C) 2002-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_PTHREADTYPES_ARCH_H +#define _BITS_PTHREADTYPES_ARCH_H 1 + +#include + +#ifdef __x86_64__ +# if __WORDSIZE == 64 +# define __SIZEOF_PTHREAD_MUTEX_T 40 +# define __SIZEOF_PTHREAD_ATTR_T 56 +# define __SIZEOF_PTHREAD_RWLOCK_T 56 +# define __SIZEOF_PTHREAD_BARRIER_T 32 +# else +# define __SIZEOF_PTHREAD_MUTEX_T 32 +# define __SIZEOF_PTHREAD_ATTR_T 32 +# define __SIZEOF_PTHREAD_RWLOCK_T 44 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +# endif +#else +# define __SIZEOF_PTHREAD_MUTEX_T 24 +# define __SIZEOF_PTHREAD_ATTR_T 36 +# define __SIZEOF_PTHREAD_RWLOCK_T 32 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +#endif +#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 +#define __SIZEOF_PTHREAD_COND_T 48 +#define __SIZEOF_PTHREAD_CONDATTR_T 4 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 +#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 + +#define __LOCK_ALIGNMENT +#define __ONCE_ALIGNMENT + +#ifndef __x86_64__ +/* Extra attributes for the cleanup functions. */ +# define __cleanup_fct_attribute __attribute__ ((__regparm__ (1))) +#endif + +#endif /* bits/pthreadtypes.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes-arch.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes-arch.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e698a7670349b0b16f419805c52ccfc94eb85cac GIT binary patch literal 12510 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 E05TGjm;e9( literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes.h new file mode 100644 index 0000000..6f4c5c4 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes.h @@ -0,0 +1,121 @@ +/* Declaration of common pthread types for all architectures. + Copyright (C) 2017-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_PTHREADTYPES_COMMON_H +# define _BITS_PTHREADTYPES_COMMON_H 1 + +/* For internal mutex and condition variable definitions. */ +#include + +/* Thread identifiers. The structure of the attribute type is not + exposed on purpose. */ +typedef unsigned long int pthread_t; + + +/* Data structures for mutex handling. The structure of the attribute + type is not exposed on purpose. */ +typedef union +{ + char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; + int __align; +} pthread_mutexattr_t; + + +/* Data structure for condition variable handling. The structure of + the attribute type is not exposed on purpose. */ +typedef union +{ + char __size[__SIZEOF_PTHREAD_CONDATTR_T]; + int __align; +} pthread_condattr_t; + + +/* Keys for thread-specific data */ +typedef unsigned int pthread_key_t; + + +/* Once-only execution */ +typedef int __ONCE_ALIGNMENT pthread_once_t; + + +union pthread_attr_t +{ + char __size[__SIZEOF_PTHREAD_ATTR_T]; + long int __align; +}; +#ifndef __have_pthread_attr_t +typedef union pthread_attr_t pthread_attr_t; +# define __have_pthread_attr_t 1 +#endif + + +typedef union +{ + struct __pthread_mutex_s __data; + char __size[__SIZEOF_PTHREAD_MUTEX_T]; + long int __align; +} pthread_mutex_t; + + +typedef union +{ + struct __pthread_cond_s __data; + char __size[__SIZEOF_PTHREAD_COND_T]; + __extension__ long long int __align; +} pthread_cond_t; + + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +/* Data structure for reader-writer lock variable handling. The + structure of the attribute type is deliberately not exposed. */ +typedef union +{ + struct __pthread_rwlock_arch_t __data; + char __size[__SIZEOF_PTHREAD_RWLOCK_T]; + long int __align; +} pthread_rwlock_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; + long int __align; +} pthread_rwlockattr_t; +#endif + + +#ifdef __USE_XOPEN2K +/* POSIX spinlock data type. */ +typedef volatile int pthread_spinlock_t; + + +/* POSIX barriers data type. The structure of the type is + deliberately not exposed. */ +typedef union +{ + char __size[__SIZEOF_PTHREAD_BARRIER_T]; + long int __align; +} pthread_barrier_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; + int __align; +} pthread_barrierattr_t; +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@pthreadtypes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..31ca90087458104bc2f063570d8df2fef99c5d2c GIT binary patch literal 16514 zcmdO5_!rYHe3^-nK|eRIM87C8Gey6kC_gJTxujS>rMN&pBe5tqKQA*m5s6h?l#Jl% zWfT-JFem3E=A~0+hHiO&QFdltx^7BlQEGBYeo>_@32tKe`;S4tw75t=GcP%(G$mC( zxuminRWAeLKU5iQZGA&iJtI9s{iMv2V*SLNoc!eYlA^@Sl46hsnX|%|Q8a*6fs8BG zkB`qyDlSPZNsTW7DFuZciqd3+*~KL(sTIko1tkpsFigzJOv=nF$-!zwT54iRX;CWJ zDfrBZA)`|(O7uZ7g)chMeU_Y2l%JOmG8w~Lm`W3ilJoP*2q`YEEG|jS zjZZBq$}d9lT~20_J~*f78yUhAYH>+QW*#^-WtlTxCLzg#vSDdSW=^qwSz-}58~$_J zqm7z$kvx!@Uz}E+g5(-lPARS|)=y4JO~anzz%c;|(qjGMlA_Y&l6W^yA6HNS;EUpd z;*uPF5D}l8pO==I4pNU1x=2PR=jUfro4h~X+Hs$0e zC+4KaC+8#<7Zc93MTsSu`B`h2S#mA==ocs%L1`Eyff2k&K@}fgoS9yniXL28OOyEc;*yk< z)U^2WdK9QFPU5#W)jPVsWl+ zdTL&3QD(A!W?qSIP7cJSm(0)_5a?zmS5zb>WyYuF7bWA!D8+dxX_-0T_RFf7uP&mr zF(84Pmy(&72l4@qaH}jx1vOWoWed1|!B7cqIOrGT7iU()!{Y(N^CJ0nek4Owtcml~- zuz!*gi!+nsA*O>gV3-J2Rh(Lqm5aSS18Qy+my{+I>p~(O!y}2sx%#O^MUa*SLH9sf zLrJA+I06jp9C#dIScc?1c(x-Yi((A|NT9+k#qa}i`Um?|Hz~0goMthUBDoLjlibwY z{Gv+a)+A}&kAj@i^vt|s{o>5@yu_S%a4t+N$uGhXfV7Kd)al`D7lGXa%_eDy$*DLx z0Z2Yb2A8cw1TQq7XXa&=#KWTnYfvMZo|2kWnywFO3KW6cL0Hv;9i0j;1M*Ufv6r8q z1c*EGkZeqbtO>1 z8Tfq#YBc1P=7Jh!_yz&MJ_3bN1t=NejUI6C42z{;Bf#|@+z8StF-YefH0+gHRIFc= zT3nh_0;#Xq`qXgNS2#lzJlX*2Zx@#&<`J&NAkGJmP=VU$kRBFsQBjasRGb>0SBg9G zAe{twxFDBHV0(*Gb5fI0a~;;sNpVR^Vi9=s0Ny9Tst(@mf#mx5+{EM}aQhOj4Og)U zDZ4WBi*Yo(kkWH9uAUFrOXZ1~C22W{kUl>~f&wc6mkF?8l=%3p+=BR|(zN)JM6eGr z^dMOc)($E5;vtQc_`LkQOt2R*a!zqcO0q7b(+rORN>XNVYDsAUBw=o-C(w|Bw`1co zOHzwKO)`)ZFr0|wHJs@=xuBHTflN^2BquWoOD08bqY`Q`5aX!yl8hqVl+?6Da9+h? zA*7;%7Yq2RIB=wbO4WkIOu}PQiOJdJiA5>;Ntt;mxXMg${R#?jd}#@HfP>N}?#2O9 z@PJ)jl$usv1R3px$1ncOnVVPT%Y3NF6L@;hv-Ill-z+6DIztk?kCla`a8SdyokoS&NuX#wD~3Q@kOb{`K3k4*xN2(g%G2mr6y`+gA%O}b@41-YakwJ0Y)4_wHD%LCF16$2cR^9k&=*<<19cxg(FtY5XWWaf+GuG1ZP6(4LgrRXjwgA4_NLIz(t1se~lUlViE^KtfhkqielBQo=_ zxfEI{fo#MGAJ~MgE-1g@7z{+R1ZVC6w=Ux|^Kvrt!1)BjYheFCf(w-3vNKbNEHTrH zyoIWM&wF)s!RLkzDWg%8Ms(83ix=soZa99%S73nRvcfDSOOknz!#`cZ{@@%LCZ}7y=bs{)cH)1bMRSFjI-zl z8wLp?kRcdhjvkt6#qlXP8pL3uh$@o7Dj}AF`osjM?DJB~p~;Q3auzlcotv1RmstW@ zc>-raYU+LMXk8|-%b-aNG<$_LOhAbRq!7L7fSgj$!!0+z412+Wt`J%xgDl2~QIMsm z?T8ZWIR)KN==e;0W?peBWW)`_Y$PpE)zBcv;VW=s3%m#fI=6>mBE+@e0XJPp14b8| z-9cW%NM{hm;8p>2DFdj)CZ>UunV*}Omsx<{wUB{(FbT3A!>vfZ2fG9@@_;QfLXs}X zAR_%ymIyAgF;pWrM&V(DQR;wQ1eVUMf~-M+8-%~A$WKcvPA$n#1GyBVx7{Lx!0cw8hrsS62`$*9WBu zBJ0)Uf&%coDYUvmu^xY@fhyR767>0bm}|f-Gt3b(m^702K{+HjKQFnos3Vni^7=h%@WN;W^@jWh5R&y zl8jWaoI++XS4wJ5W)jHtsX3JjdHE#@sTBqJ#i=QJ42=0K`D#pz*$nw=VD~vka626O zx#$wqxhH&-SoWu_x(~7h6ewl+If*5iIjIVnc?dTa7i8u^M$Q=WD#2CYn zpaU}dfA0_dZ~5_p@=!atkH2nho0sw(5=08|@vw+Z&d*DUFIK3oW#Hpe0O#R#JBUByOBfg!%otoi(GBqcD2~(eixfa} zys1UHC3T25!nTbg`sR|j1c_}%dffsP%;6iAGCJs=LW+s)Ez>|pro@5d# z5GuvQ7%C9O#K6G7{NFahu!^Pgx;MlBh`kq0e=OOr!0_MXoma%twz=OJ7+4``9p+6e z{(^=M1A`F*1EZIKmlPADmw-RSY*?@}{O9~B<>R6lewg9^%cu;sDz^GqxYql=J>2@4}UjbL#gB;Y|o1P**V1_s6$ zffy+!#u$MFkTaS7FJa)3nqq!!GsFK<)+t}_^?k8|J5J>HhuIq}T&l4r6tD{+Cd0Ei zk{E-Gj2c>07b}3`8mtB_Rxz_Y$Y5}+a)E4D$Sg+A?+Tz2t+WV~_w^VUm06Uvm>A_5 zl(j%X^xvSmY4Ya8e@>88`S%Do54hw$)j#LX=(cZJ2@5Dn)Weo{_oHycR+pN zG$V%pmpQD$f)w)4gRBJ=6{xuw z2i#d$A_*KKP@@5x>2R$gS zK>`V$+z>(xGBPS?;Ra4@AQhRQm0!5Z6O@$41*&X7c7RhJtlGhy@^n~qG?*AQ7<4p1 zUjDy}`<+cCBjXNejKjECVjScwkUii`X+?jBYY1paF)?Zg=s+Uhd`-YfC%cC`7~mNK z9{I3(AB!iT^*7uf4h#&8g#v|AOpJvBr4WM)Se(<87pwebKx8mjsrva#|A7}`ncyxT zB%gtnAEu_DRLR+?mGLDET3S*J-l>(4;se(5DM(GuOv_9L*UJoy23iI#OpFE$1}>nO zfYr#E(@+0y-(ltgOHjzQJ!m;xdNK3P1+t}>7_$ZPA#UB3c+qv{-0x2q{(rf< zuXDXmo-Wj_4FBKVeV}DyrGV7tgT@$WJOG|2OBi%?gcw4=qeu#nrQ~Uupec56^^KC< zz->EF^1;Y%T+oIcYC$h$BIU-!D8(SjujLT_ z`@cuJ&40>qr5;!^L5*B+>5Nq7L-`CcGI9(IjP5M%N=%GS4DR4M`u|(qLscP+?lYi8 zz=0s)++)F4ny{M;Ek6;BEtmjCVlb?Qh}&JJW-xa}@I`

z5HJNK2E&YsGKwJ%jPTlkkfkL&C16WSSV|C~N7mHT`rJQ({c$L3Lp-~KL3*!z+3s@Y*@x_5%7RM470S!q$1sAm)0zXha zY$9P|;lKz_`WS5}NQNoKNa&zGF@upGD3QCExj2EG>cZmU^dHt?fTl@k@kY?QZeng= z@4B(LA-tQLcka@Bg|lZt0SLp4zB0a`*n^e+1WnEp%LAL7$C8II8CK7Mb;G)-pprhm z1eA**d5ud86cJWpR$%>BELI5puyzCPh=6C7V!mQ|WM?oXvz}&?reWreS2J;h$ zW{i`G3v*!nzgX$rx=$w?3_xNq%%~-!739G9|4z`a&%zTu&&NA?h6Kk4gm?tGI=X~J z2Dk>tJNx_k`uoLufI6_skky?Ec$9G(GB7X-3kiELfk+>Q|DZYw-qHn!3Yfs2LPZQf z0pn-m=LL#(KLtOpzsH~{6xNgg2MlJwf|eXbgNq?8P|C67vjm5YC5xpGG;ClcFW3Nd z>%rPh3}9*8mCqHd-Ic}F52{^#)uV)-dn^dCZJ}f>C|6yYzkgNggbmQ?T zJTv?9`GP&_%i;?QCthFke{JlCp2N}zh-S={$qjH|gpV3vI2c-gLpwz1p$pE^c2OXA ohdYJ)f!rO=67KgO*1v+d8#eraCw)Llut>2;aK?#biG*hy0PE`Am;e9( literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@sched.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@sched.h new file mode 100644 index 0000000..efbb464 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@sched.h @@ -0,0 +1,161 @@ +/* Definitions of constants and data structure for POSIX 1003.1b-1993 + scheduling interface. + Copyright (C) 1996-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_SCHED_H +#define _BITS_SCHED_H 1 + +#ifndef _SCHED_H +# error "Never include directly; use instead." +#endif + +/* Scheduling algorithms. */ +#define SCHED_OTHER 0 +#define SCHED_FIFO 1 +#define SCHED_RR 2 +#ifdef __USE_GNU +# define SCHED_NORMAL 0 +# define SCHED_BATCH 3 +# define SCHED_ISO 4 +# define SCHED_IDLE 5 +# define SCHED_DEADLINE 6 +# define SCHED_EXT 7 + +/* Flags that can be used in policy values. */ +# define SCHED_RESET_ON_FORK 0x40000000 + +/* Flags for the sched_flags field in struct sched_attr. */ +#define SCHED_FLAG_RESET_ON_FORK 0x01 +#define SCHED_FLAG_RECLAIM 0x02 +#define SCHED_FLAG_DL_OVERRUN 0x04 +#define SCHED_FLAG_KEEP_POLICY 0x08 +#define SCHED_FLAG_KEEP_PARAMS 0x10 +#define SCHED_FLAG_UTIL_CLAMP_MIN 0x20 +#define SCHED_FLAG_UTIL_CLAMP_MAX 0x40 + +/* Combinations of sched_flags fields. */ +#define SCHED_FLAG_KEEP_ALL \ + (SCHED_FLAG_KEEP_POLICY | SCHED_FLAG_KEEP_PARAMS) +#define SCHED_FLAG_UTIL_CLAMP \ + (SCHED_FLAG_UTIL_CLAMP_MIN | SCHED_FLAG_UTIL_CLAMP_MAX) + +/* Use "" to work around incorrect macro expansion of the + __has_include argument (GCC PR 80005). */ +# ifdef __has_include +# if __has_include ("linux/sched/types.h") +/* Some older Linux versions defined sched_param in . */ +# define sched_param __glibc_mask_sched_param +# include +# undef sched_param +# endif +# endif +# ifndef SCHED_ATTR_SIZE_VER0 +# include +# define SCHED_ATTR_SIZE_VER0 48 +# define SCHED_ATTR_SIZE_VER1 56 +struct sched_attr +{ + __u32 size; + __u32 sched_policy; + __u64 sched_flags; + __s32 sched_nice; + __u32 sched_priority; + __u64 sched_runtime; + __u64 sched_deadline; + __u64 sched_period; + __u32 sched_util_min; + __u32 sched_util_max; + /* Additional fields may be added at the end. */ +}; +# endif /* !SCHED_ATTR_SIZE_VER0 */ + +/* Cloning flags. */ +# define CSIGNAL 0x000000ff /* Signal mask to be sent at exit. */ +# define CLONE_VM 0x00000100 /* Set if VM shared between processes. */ +# define CLONE_FS 0x00000200 /* Set if fs info shared between processes. */ +# define CLONE_FILES 0x00000400 /* Set if open files shared between processes. */ +# define CLONE_SIGHAND 0x00000800 /* Set if signal handlers shared. */ +# define CLONE_PIDFD 0x00001000 /* Set if a pidfd should be placed + in parent. */ +# define CLONE_PTRACE 0x00002000 /* Set if tracing continues on the child. */ +# define CLONE_VFORK 0x00004000 /* Set if the parent wants the child to + wake it up on mm_release. */ +# define CLONE_PARENT 0x00008000 /* Set if we want to have the same + parent as the cloner. */ +# define CLONE_THREAD 0x00010000 /* Set to add to same thread group. */ +# define CLONE_NEWNS 0x00020000 /* Set to create new namespace. */ +# define CLONE_SYSVSEM 0x00040000 /* Set to shared SVID SEM_UNDO semantics. */ +# define CLONE_SETTLS 0x00080000 /* Set TLS info. */ +# define CLONE_PARENT_SETTID 0x00100000 /* Store TID in userlevel buffer + before MM copy. */ +# define CLONE_CHILD_CLEARTID 0x00200000 /* Register exit futex and memory + location to clear. */ +# define CLONE_DETACHED 0x00400000 /* Create clone detached. */ +# define CLONE_UNTRACED 0x00800000 /* Set if the tracing process can't + force CLONE_PTRACE on this clone. */ +# define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in + the child. */ +# define CLONE_NEWCGROUP 0x02000000 /* New cgroup namespace. */ +# define CLONE_NEWUTS 0x04000000 /* New utsname group. */ +# define CLONE_NEWIPC 0x08000000 /* New ipcs. */ +# define CLONE_NEWUSER 0x10000000 /* New user namespace. */ +# define CLONE_NEWPID 0x20000000 /* New pid namespace. */ +# define CLONE_NEWNET 0x40000000 /* New network namespace. */ +# define CLONE_IO 0x80000000 /* Clone I/O context. */ + +/* cloning flags intersect with CSIGNAL so can be used only with unshare and + clone3 syscalls. */ +#define CLONE_NEWTIME 0x00000080 /* New time namespace */ +#endif + +#include + +__BEGIN_DECLS + +#ifdef __USE_GNU +/* Clone current process. */ +extern int clone (int (*__fn) (void *__arg), void *__child_stack, + int __flags, void *__arg, ...) __THROW; + +/* Unshare the specified resources. */ +extern int unshare (int __flags) __THROW; + +/* Get index of currently used CPU. */ +extern int sched_getcpu (void) __THROW; + +/* Get currently used CPU and NUMA node. */ +extern int getcpu (unsigned int *, unsigned int *) __THROW; + +/* Switch process to namespace of type NSTYPE indicated by FD. */ +extern int setns (int __fd, int __nstype) __THROW; + +/* Apply the scheduling attributes from *ATTR to the process or thread TID. */ +int sched_setattr (pid_t tid, struct sched_attr *attr, unsigned int flags) + __THROW __nonnull ((2)); + +/* Obtain the scheduling attributes of the process or thread TID and + store it in *ATTR. */ +int sched_getattr (pid_t tid, struct sched_attr *attr, unsigned int size, + unsigned int flags) + __THROW __nonnull ((2)); + +#endif + +__END_DECLS + +#endif /* bits/sched.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@sched.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@sched.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6f3cac1eebd2bda740c48269c1c724a7e33f6161 GIT binary patch literal 17594 zcmdO5_!rYHe3^-nK|eRIM87C8Gey6kC_gJTxujS>rMN&pBe5tqKQA*m5s6h?l#Jl% zWfT-JFem3E=A~0+hHiO&QFdltx^7BlQEGBYeo>_@32tKe`;S4tw75t=GcP%(G$mC( zxuminRWAeLKU5iQZGA&iJtI9s{iMv2V*SLNoc!eYlA^@Sl46hsnX|%|Q8a*6fs8BG zkB`qyDlSPZNsTW7DFuZciqd3+*~KL(sTIko1tkpsFigzJOv=nF$-!zwT54iRX;CWJ zDfrBZA)`|(O7uZ7g)chMeU_Y2l%JOmG8w~Lm`W3ilJoP*2q`YEEG|jS zjZZBq$}d9lT~20_J~*f78yUhAYH>+QW*#^-WtlTxCLzg#vSDdSW=^qwSz-}58~$_J zqm7z$kvx!@Uz}E+g5(-lPARS|)=y4JO~anzz%c;|(qjGMlA_Y&l6W^yA6HNS;EUpd z;*uPF5D}l8pO==I4pNU1x=2PR=jUfro4h~X+Hs$0e zC+4KaC+8#<7Zc93MTsSu`B`h2S#mA==9#8uvv>92t}!drI|&k z#qk;W#U-hDN(+#g#rox$c_ldJ0229nfZA*^AxCP0mn0*5Xj6;H8a62Uz(X$ zlBb)QlA2eNSyG8r9lE>VSrDX}VD3vR#+jTFi*t3;Q}a@bGL!W)^GbAcav(0fWQNv4 zKzBiMMMYv#W_((HQ8JD!P@I>NmYD-?psbqt>LN-b0us1+DVd3RARpjQIncrbT!CPy z1h)+I3-XIIE8^ktfZ=+uedYN@DWC*`)kbvxK?=qAvdq+S92GdIRs+|m7;Zu`3shS} zjRMuGsYS)0f*<4pj97#C1d{YY3NSo@WGvV}Nr}ao$?*`=K^ibj1gk1eEy>Eo-e3W> zr;1BTlZtgAk&fY!#Nu52)S@Ct(}AFSAkCem(li_a26hfSjxa1k@*X_fk&;ER1_2~c z;g(|f0XhAHeX5(3SPV|H7)p`c2lh#BYHof}C316-wEjgwPHB2(Ua@|0W_n&?PCPgl zCYIzEVF*APJ~Qg{a5j9v?tx~Lw8Z389IbpLA0&gzRw9BIn$I)yGE3s&(SkLokxWlX zO)5>-2i5gO;D!!X^i(t?~+EEXa;D=D)C zzXF_HuVig)Jnda1D>C!3c^XLpQg9+?B2XodrOpPcF3w0Sg0yerVc8T%p$BQl7nSGa zCuf6FAHjGY80r$YbNfuu*fiDmt=?LUB>^{iJOiI?xNKH&hEz&J6 zNi4!%`+-9xxu8_HI2F4B^za5X<-pCq%zSXoi{0{ql8mC%#1wGC(@iW&1~)751z}ER zZe|HF@m-Xdm!2A*n4ApF@fh|aIXD^Au*9EC!T!(8E6dLYm)ZDC11kl2zcde2m}MsB zWLDv5xgfa#XB6h978fU`rxwTOrsgK47J<_OLF-{70vY&y1!^?pmF9vPW%zpeU>||P zr~;IX@J0`~`-R0)uo2*T4{ii$l^CRV4jR`=Eh^S8N-ZwUDS^~iY<+4t>noh03LZ`X zb*PI=67vYxVi4zphoC@hbV%QcxTq*dEGkZo&nv|pd5}&5JY0~=C9u84sX3|1sJRYn z=cKqKC9w!RJOJ;LU{we2_CRudd~RZL5x9K`*M_TDgp^&G`NcRIUP$RV8CTB-?4|O= z%#yU6L`bI|BSC?cfXf8fI7xhbR&GIjQfXRzNg~*X7! z>_{c3agvjnge8+Aw^0c-7>IFHdPzo+Zc1ueA~>&Nu@F+x!HWfaRU9}{L8WRzVkY51 zr^Mv!^2DMP{iMvi6kKH{xPAo%IKH%mJHSEd6L;ePDR{sxFG@`-FMMPOwWU~!!YtD*jQ-&8DCtIn4BG-o0+GZQkj>So0*K&U&vZO&IcD@WceO8oSa{T zXH*K5$w34BrP%EOyCy9sKd~fFH#t8y7t&6^=Nv?JS`?p?S&Xe^iJXKABehmqQy35wC8;(}D{`3pU& z5WNUc8o`JxB;`1Z8Bh_5RWrnKnYrM|!WY4rkXnX_lm#7m#oi}@*jHJQS_~Sf$%l@X z;Ip07we#a?(-_qzPJDoC!*I z1qBTMW^|&Z7|<9kNIEAq9@4RawEMw!Avf!g{0R=%yj0NmKJmjI$@wX%$z|BeKd^CN z|AR(%Fvr1RxfI<6Wsm_wP{`m*r(okjwQyoidOpscF_Ph+#ztlyHkU%HE|85F;RBnu z)dl4@97Bdkmf*}i;5KM{W?oKa9yp(1cn$0yNN|A?Ty|y(ktJqYaXk810{-eeuQUfd zM~%H6hl~s9=A}96S`*|Pd{z|WEV{vlL4pWm2u7Hr zhh|!FdabXP;P+|coL~lAErxf&X%grytUT~l*gqFx4i!ovpWGQMpq6B+RK{pgS ziW8riSDXqNm%}g{NefgpG{|xI3f$NNuLXh50AiR3aV>aQP8ZUE(FJFBkk>HM8ALI- zRRCSl04lMGX&`0h=O*T57T|X+WOyG;f~?1IE0XWQEV9ShdNsMA06e=2 zt*%h4#~*5-3bvpG+AhTiHgL-fa~uukSS0U*atLTLrL?FhH4m*Xgx>`PB}FNjX=xCj zVz>Yt9-uNRKRzduxcpySk`kYoguNSzU4Th5- zJ_H#?Rv3YkIw>RdrFof!rKvbqeL#Z++|bG`ElDLf0uR;zSDZ*i2_7XdTL2xNlB4L0jNWyP?DLVqX01kDi4xW&;pS<3Z;3Vg$1c83SjM-RjFt~ z;BkIUg}i*otiDD`QE93s0|$o`1A~83Nn&Q6LP7tOBm%>$Cl3$dnkXfRTnWv!T7!nes$H2hye=6fV9mehD zCjUDwI0rdy^X&NVa>=KU*;GgHzx`DUmCyZ$b~ErWFfh*Gn4!eTID=u98Uw?BBOS#o z|L9^rus1++ukpp?h5{ZhI~Ek=RDwMP4rvS@rxoSrLVTi7k`Gpg)$@7`49x#0@yv1B z)%7F#f6~l~9iK#GH~kmotUi-}eSRC*cau3LD={)oW|#u<-TQxQCRW~cVo$9oNiE8Q z#8qlZUa*^?1;5~s$N*P`%)FG$WY8i}g``RaHy1qy2B!aJjjdjVOd{L=PydiVWzwvV%wT6u z5SyUD$T)#vLJ|YRf0L~(IiDHQ(~z8*o?4PzP^y8F%(T$bm=+fI@-Q&CrtLp%TGzwV_;wayQ5dESBa6am!Y?Wf#LtoyvgTvyzh1* zxdR+u@le-bu}=bGA85v*0u&mU7Q?OT66?}qWb9(-@?l{3AM|d|ji}NYKas2|%>%c* zVQ~YRD8phQ9|J=uL?JkxfLh&|X_=`h3b1k9Vm$^1#{V2Oyliu3GOh=EvR$lQg^{tH zp*?_s;r}HKg`MRm*D)j6oSc)NmkPF5Ln}T$El*RUEI%_vK}%Cd0m6unPtM59NrB8b zz|ssjy(3g47NzSb=;`TUaWfYKgEPnqShT>>5;)stCM0)E%Ftc#-#O-3=|Ar!q5rS3 zPyf`t*(dIQuV)*lZ%QN!*b~iS%?gZ+%?vFe3=FJ)_b`HD5E(PW^8uE8|Np|9bG+xL zvl?I)Xw|h0e0(A>lf)T7X%?QfU_}YjWUt9_EQ~X}X2h{D{$I9qmxAcK9!Z!c1pPnn z!d}M=lcc?%GB_nQO(8xWQksHE1_cE!s9Lxge?S6Elhr00urSV0n_KVqjpLsWMaVFB1#nOs<)FfA=u{ij4Y7W88$Pr-~kLV0OkU)w?S120}l@yNQ==73$PZo85Vz!Ky8DS zUpU=3xnuGqkgmyjlPAI57%seXbEw4R2ap^J9*JULU=UM=Ow&WE7D&CP5FeioTJRE| zn^>HUTp=M()GIEMd>3=E9+BKBGijQ_o!F@6u4pI88j92jP_=CM|DVEiBJ zD)am2mv>>#KK_2L@y;HeJ}&XjKCX^IA)YP_3=A4D7hscDFsLvvFfsrE1_s7Vp-d|# z5E%froZ-LS4J-C$-lGf3u^Ffc|5MQJdBNGGUKuuKFk z=|QCl0|y5m0|R4=K#LqGG+Q`Y`z=i>!OkA8F7a+Yj_&cHA)Y?*&OVO5 z0r9?$5ey6rMlhe@RK#geVFGfEfq;P%6QhBEfe+L*Y3^Ev&YFgEU||WO8Rs#~6LVnv zf1<@JDy-D+6%JE9{fMyI(~r}j!U$xwzJR_H6QjO>KFsRE49V@&Y_9r20}m9S0x*xj z#1y~)6gLLo=wV=Bj1-DgVgiw{0KKZIT7E=cc>cC9Ju7Z=( zpu!O3LOlUJ8zx3Q0X+|B;J`{7{JCv%(qwRMn`|=~J+~FUKX6Do<(D_aI{}VCu6`j5 z3=9%52O*2Y(v5`yINc-)C2BD-CJH6OyeW6^r>4Ky^8{o)@xiVkki@Nq%}A&;I6)eM zk~YYf=|briOpNJ5>3&dOUO5#nEBZwI5X9hMPj?STKTv*=LNyX90XEFQz`z3R%4nfz z9VW(Tp=g*ZVWl8u>TWk^w*#f_c8zvBc7)( zOwypSw6U2@Jn7T*Y4J{;A;IwwjUEgP4DeV&kx(#XU|u^; z3eoK!;^7*ET#6wHb8>=`inM^V8WW?mfV2+OfN$SoBNzPY?}Dfdat(G3iTC%5ck>VO z#taA)X>b7qPJ$qV)rHh8m>AWC)M055*46+e8?>el0}l_VPHQ%323JtcD$QXGkh<*t zzULn2ggsfIQS9mB21>T@iUvs-UMPcd0RsbLj8KdQ6NrSxFs$v4UM)^Gnhdsevf5-s zwYd9*o5^X%lU5K5LOg<89YGeO88{qVeB%AXT!Vr_LG=u_a6l*k7Xu~?42(JgI#x^| z(hX{EDPLEtYP0`3h`E0LLB5WlJPVI2WN}EMmlu-PVq%mRk~e@F@t{leZTA01po$h$ zJAyG|Jwv^e1LOb5jgzK6+NG}pF~-R;#2J();Ykoln3L0(fq_v$NI`=MM8dM8dI5a+nKI=c9H`hm(#8C26? zGMt=d3=E9QLdtqfAkqYC%<&=?{@cGfKR5?_y8D3xoDZfSDg>_Ap_#+Lz#uJ+fq^kx zC|rRFM8Yx$Y?uJ0{Rvva!yqLEDidaO%$NYGQfB1Mm;i5n22Y$~d@lM)0K^MWZ=)7e z1~A9qQp0IbVE{_uS^`=QOpICrT3%3(Mf6o(Dc`AY4$1m{uHk;JpcsQECuDKdBCk}a zREvqRRHzgd)OE_N^R%WM`2^Pz;^_+tX?TH-A^~y{xcIaH6(dywRa#7pRRUEo!)jb2 zcerg1`UcnI2Wt4h(;<>DtSAK4bs(csgiF?}w3A@S!K3@WD3a*b!OKPM-sNKh0~RAFLN6jFrc8d!H0 zOAnfXhewKmfw4KQxdD`}nxmQQR3FO-Xp#lRY#sZ-NSi}p&XKfF3>4)Y=PZu9h zB1fxJK%$(SrVI>>Nky?~mETFl?WzD7CyQ7NlLR=pPZ6Bf)M_^%CaRllu zgCZ?nC|-k!FIxXG%(7*!2v4zC+JKt0cFt%DiciLy@}MGjM$sUcwM2^ zf{GWkfDH2mC0J+%H83y)hh~IOgc1{Dgir*`&TQ5-2koXhXG6?!aSd?@4N)r;H! literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@select.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@select.h new file mode 100644 index 0000000..5edc32d --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@select.h @@ -0,0 +1,37 @@ +/* Copyright (C) 1997-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SELECT_H +# error "Never use directly; include instead." +#endif + + +/* We don't use `memset' because this would require a prototype and + the array isn't too big. */ +#define __FD_ZERO(s) \ + do { \ + unsigned int __i; \ + fd_set *__arr = (s); \ + for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) \ + __FDS_BITS (__arr)[__i] = 0; \ + } while (0) +#define __FD_SET(d, s) \ + ((void) (__FDS_BITS (s)[__FD_ELT(d)] |= __FD_MASK(d))) +#define __FD_CLR(d, s) \ + ((void) (__FDS_BITS (s)[__FD_ELT(d)] &= ~__FD_MASK(d))) +#define __FD_ISSET(d, s) \ + ((__FDS_BITS (s)[__FD_ELT (d)] & __FD_MASK (d)) != 0) diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@select.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@select.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f838ca680bbe1bf78e03cf3c3319f82b1f5a2d69 GIT binary patch literal 12031 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 h2fGoWyjGz+BQqyeK?9sPBm^Xsm>4Al. */ + +/* Define the machine-dependent type `jmp_buf'. x86-64 version. */ +#ifndef _BITS_SETJMP_H +#define _BITS_SETJMP_H 1 + +#if !defined _SETJMP_H && !defined _PTHREAD_H +# error "Never include directly; use instead." +#endif + +#include + +#ifndef _ASM + +# if __WORDSIZE == 64 +typedef long int __jmp_buf[8]; +# elif defined __x86_64__ +__extension__ typedef long long int __jmp_buf[8]; +# else +typedef int __jmp_buf[6]; +# endif + +#endif + +#endif /* bits/setjmp.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@setjmp.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@setjmp.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c0b42801880f749b576aab95478f7ad572b58b20 GIT binary patch literal 11561 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-intn.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-intn.h new file mode 100644 index 0000000..cbe07df --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-intn.h @@ -0,0 +1,29 @@ +/* Define intN_t types. + Copyright (C) 2017-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_STDINT_INTN_H +#define _BITS_STDINT_INTN_H 1 + +#include + +typedef __int8_t int8_t; +typedef __int16_t int16_t; +typedef __int32_t int32_t; +typedef __int64_t int64_t; + +#endif /* bits/stdint-intn.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-intn.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-intn.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..278806704673d328a83fd79f34a9c75d9546461a GIT binary patch literal 11968 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-least.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-least.h new file mode 100644 index 0000000..a2b0737 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-least.h @@ -0,0 +1,36 @@ +/* Define int_leastN_t and uint_leastN types. + Copyright (C) 2024-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_STDINT_LEAST_H +#define _BITS_STDINT_LEAST_H 1 + +#include + +/* Signed. */ +typedef __int_least8_t int_least8_t; +typedef __int_least16_t int_least16_t; +typedef __int_least32_t int_least32_t; +typedef __int_least64_t int_least64_t; + +/* Unsigned. */ +typedef __uint_least8_t uint_least8_t; +typedef __uint_least16_t uint_least16_t; +typedef __uint_least32_t uint_least32_t; +typedef __uint_least64_t uint_least64_t; + +#endif /* bits/stdint-least.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-least.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-least.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..fe38d00608b489ee07ae414e608a05a077f099c8 GIT binary patch literal 12953 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-uintn.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-uintn.h new file mode 100644 index 0000000..7ffc363 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-uintn.h @@ -0,0 +1,29 @@ +/* Define uintN_t types. + Copyright (C) 2017-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_STDINT_UINTN_H +#define _BITS_STDINT_UINTN_H 1 + +#include + +typedef __uint8_t uint8_t; +typedef __uint16_t uint16_t; +typedef __uint32_t uint32_t; +typedef __uint64_t uint64_t; + +#endif /* bits/stdint-uintn.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-uintn.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdint-uintn.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..66cba5581a3754a67ec5f17b1515b49b8f9fe42e GIT binary patch literal 12010 zcmdO5_!rYHe3^lfK|eRIM87C8Gey6kC_gJTxujS>rMN&pBe5tqKQA*m5s6h?l#Jl% zWfT-JFem3E=A~0+hHiO&QFdltx^7BlQEGBYeo>_@32tKe`;S4tw75t=GcP%(G$mC( zxuminRWAeLKU5iQZGA&iJtI9s{iMv2V*SLNoc!eYlA^@Sl46hsnX|%|Q8a*6fs8BG zkB`qyDlSPZNsTW7DFuZciqd3+*~KL(sTIko1tkpsFigzJOv=nF$-!zwT54iRX;CWJ zDfrBZA)`|(O7uZ7g)chMeU_Y2l%JOmG8w~Lm`W3ilJoP*2q`YEEG|jS zjZZBq$}d9lT~20_J~*f78yUhAYH>+QW*#^-WtlTxCLzg#vSDdSW=^qwSz-}58~$_J zqm7z$kvx!@Uz}E+g5(-lPARS|)=y4JO~anzz%c;|(qjGMlA_Y&l6W^yA6HNS;EUpd z;*uPF5D}l8pO==I4pNU1x=2PR=jUfro4h~X+Hs$0e zC+4KaC+8#<7Zc93MTsSu`B`h2S#mA==ocs%L1`Eyff2k&K@}fgoS9yniXL28OOyEc;*yk< z)U^2WdK9QFPU5#W)jPVsWl+ zdTL&3QD(A!W?qSIP7cJSm(0)_5a?zmS5zb>WyYuF7bWA!D8+dxX_-0T_RFf7uP&mr zF(84Pmy(&72l4@qaH}jx1vOWoWed1|!B7cqIOrGT7iU()!{Y(N^CJ0nek4Owtcml~- zuz!*gi!+nsA*O>gV3-J2Rh(Lqm5aSS18Qy+my{+I>p~(O!y}2sx%#O^MUa*SLH9sf zLrJA+I06jp9C#dIScc?1c(x-Yi((A|NT9+k#qa}i`Um?|Hz~0goMthUBDoLjlibwY z{Gv+a)+A}&kAj@i^vt|s{o>5@yu_S%a4t+N$uGhXfV7Kd)al`D7lGXa%_eDy$*DLx z0Z2Yb2A8cw1TQq7XXa&=#KWTnYfvMZo|2kWnywFO3KW6cL0Hv;9i0j;1M*Ufv6r8q z1c*EGkZeqbtO>1 z8Tfq#YBc1P=7Jh!_yz&MJ_3bN1t=NejUI6C42z{;Bf#|@+z8StF-YefH0+gHRIFc= zT3nh_0;#Xq`qXgNS2#lzJlX*2Zx@#&<`J&NAkGJmP=VU$kRBFsQBjasRGb>0SBg9G zAe{twxFDBHV0(*Gb5fI0a~;;sNpVR^Vi9=s0Ny9Tst(@mf#mx5+{EM}aQhOj4Og)U zDZ4WBi*Yo(kkWH9uAUFrOXZ1~C22W{kUl>~f&wc6mkF?8l=%3p+=BR|(zN)JM6eGr z^dMOc)($E5;vtQc_`LkQOt2R*a!zqcO0q7b(+rORN>XNVYDsAUBw=o-C(w|Bw`1co zOHzwKO)`)ZFr0|wHJs@=xuBHTflN^2BquWoOD08bqY`Q`5aX!yl8hqVl+?6Da9+h? zA*7;%7Yq2RIB=wbO4WkIOu}PQiOJdJiA5>;Ntt;mxXMg${R#?jd}#@HfP>N}?#2O9 z@PJ)jl$usv1R3px$1ncOnVVPV)pwuo{|dki{WvH-Em-P{bW#!6q0uEg()}|AU(|ZqSWI2(xPPSEgY~yh|$op6}3u2 ziF$~-c%p{CL5&dbFcZEe2y(oFTvCu)l#`zat_r}V25CihVoG8`NotWkl!g@7U6at- z5g>aY?Qd8$lnIK_qT+&7?D-2lst~;hP#VFAEF|SPiy2T6id8ejahbW`$if%FnUGqB zh?E5#dBxr*f!GHgD1)?}u*W`cbjp zkWm1T6gbF8OEr)tXlZdKDBTqlF#Ma*iI!qOW3(XYoYZ(o#|F~w2it|*tV8lAI9&5m zL9+nF4|^o%r=%vAVJrW@#)1708r{Jh2Z!ZSbQhFC1`I(VgD;(ejR)1ji8<-{ID5uO zhJzX#nR(b;3az?8He!SiY+6?rl;3a+86sJNGxvZ?>G;gNoXk9MKEd!B*gufq0wuWY z%oHL^%(UWo^sxl|)p=fN4tNS1dp!;r7t+m1O)MsuufT53OD#vto`J#;!)r+41M(oW zaK(}xkraZBh87q&n)qNPAOk@e4?M*QZb!uzBo-y+f*gVonds(2YY*5A9`@n}ZOkej zk_f;>J#t2Z4=fX9b6RnHL1GDbi~(P8fxQSy?!O%=Aj!(hSAO;&nRACEN39%H^Cnh*$pO;z=O-Q7bpsoS2|2F)Fy*(FieEF7Chjl3u&6@f-^G6YZ&Pa zq8MD?Lzgmu%3@-gKAHKsiFug?_+1MbxCfIU>oMGl~#VQ?jYT0P?%!G7Lswe+ezBm z;2sz;Lr`EhfoexshZ$rmMnXce6|NyUKMzur5TygO$Rr-TN{%SypomQ^D2Y$bNQF$q zU^oflLy%!)g%LQZlQIThnwMEvnu>Eh2Q*l~O{m<`l2n3Y>tGF#g(|pH1A4eaN=DRS zQ0y%(_-F~f(1A3F@Rv!TYz7{ zOpKBYk`QyA@PCXwc#&HhYEDVGuXU*ck1Nca(mc?@g47g+;*9*F5~%YG&EiWK^z=kP zHiPgV5Wy%RAfdv-2zMBU380z>Y5>T83_3b!21p4=feg5H_7~6HDbi1220(%YWGC1w zAO_Sc5^54=OpFo?5)iMz+z#~$%x5rj;9kkhgLwoTELvJ*fR8iq$U|qSvwYV|f$ulH4J~+h1(=Q}G)YC7-FW!TJfk8tV bGGC>DO`g+`fq_w2K-hu_MA|U?2PGB&;{X+$ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdio_lim.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdio_lim.h new file mode 100644 index 0000000..b2a8268 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdio_lim.h @@ -0,0 +1,28 @@ +/* System specific stdio.h definitions. Linux version. + Copyright (C) 2023-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_STDIO_LIM_H +#define _BITS_STDIO_LIM_H 1 + +#ifndef _STDIO_H +# error "Never include directly; use instead." +#endif + +#define FILENAME_MAX 4096 + +#endif /* bits/stdio_lim.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdio_lim.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdio_lim.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..551191d37c84a3d24ff9f50212dbe4cc532b07d1 GIT binary patch literal 11508 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdlib-float.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdlib-float.h new file mode 100644 index 0000000..d752214 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdlib-float.h @@ -0,0 +1,29 @@ +/* Floating-point inline functions for stdlib.h. + Copyright (C) 2012-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _STDLIB_H +# error "Never use directly; include instead." +#endif + +#ifdef __USE_EXTERN_INLINES +__extern_inline double +__NTH (atof (const char *__nptr)) +{ + return strtod (__nptr, (char **) NULL); +} +#endif /* Optimizing and Inlining. */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdlib-float.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@stdlib-float.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8dc4f7ebb7bb3591e8a3b02b128aa8c60713e5fd GIT binary patch literal 11364 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 Y22vs-FAHQ~5@HbH5o3_?VPIeY08wvI2><{9 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_mutex.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_mutex.h new file mode 100644 index 0000000..9c19dff --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_mutex.h @@ -0,0 +1,62 @@ +/* x86 internal mutex struct definitions. + Copyright (C) 2019-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _THREAD_MUTEX_INTERNAL_H +#define _THREAD_MUTEX_INTERNAL_H 1 + +struct __pthread_mutex_s +{ + int __lock; + unsigned int __count; + int __owner; +#ifdef __x86_64__ + unsigned int __nusers; +#endif + /* KIND must stay at this position in the structure to maintain + binary compatibility with static initializers. */ + int __kind; +#ifdef __x86_64__ + short __spins; + short __unused; + __pthread_list_t __list; +# define __PTHREAD_MUTEX_HAVE_PREV 1 +#else + unsigned int __nusers; + __extension__ union + { + struct + { + short __data_spins; + short __data_unused; +# define __spins __data.__data_spins + } __data; + __pthread_slist_t __list; + }; +# define __PTHREAD_MUTEX_HAVE_PREV 0 +#endif +}; + +#ifdef __x86_64__ +# define __PTHREAD_MUTEX_INITIALIZER(__kind) \ + 0, 0, 0, 0, __kind, 0, 0, { NULL, NULL } +#else +# define __PTHREAD_MUTEX_INITIALIZER(__kind) \ + 0, 0, 0, __kind, 0, { { 0, 0 } } +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_mutex.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_mutex.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..9fecda1efc950762bd8cf53f636d455a01b19443 GIT binary patch literal 12817 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. */ + +#ifndef _RWLOCK_INTERNAL_H +#define _RWLOCK_INTERNAL_H + +struct __pthread_rwlock_arch_t +{ + unsigned int __readers; + unsigned int __writers; + unsigned int __wrphase_futex; + unsigned int __writers_futex; + unsigned int __pad3; + unsigned int __pad4; +#ifdef __x86_64__ + int __cur_writer; + int __shared; + unsigned long int __pad1; + unsigned long int __pad2; + /* FLAGS must stay at this position in the structure to maintain + binary compatibility. */ + unsigned int __flags; +#else /* __x86_64__ */ + /* FLAGS must stay at this position in the structure to maintain + binary compatibility. */ + unsigned char __flags; + unsigned char __shared; + unsigned char __pad1; + unsigned char __pad2; + int __cur_writer; +#endif +}; + +#ifdef __x86_64__ +# define __PTHREAD_RWLOCK_INITIALIZER(__flags) \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, __flags +#else +# define __PTHREAD_RWLOCK_INITIALIZER(__flags) \ + 0, 0, 0, 0, 0, 0, __flags, 0, 0, 0, 0 +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_rwlock.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@struct_rwlock.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..d20a5815e26039c9d40c2f7b85026c1c164ffe2e GIT binary patch literal 12922 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@thread-shared-types.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@thread-shared-types.h new file mode 100644 index 0000000..624d616 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@thread-shared-types.h @@ -0,0 +1,116 @@ +/* Common threading primitives definitions for both POSIX and C11. + Copyright (C) 2017-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _THREAD_SHARED_TYPES_H +#define _THREAD_SHARED_TYPES_H 1 + +/* Arch-specific definitions. Each architecture must define the following + macros to define the expected sizes of pthread data types: + + __SIZEOF_PTHREAD_ATTR_T - size of pthread_attr_t. + __SIZEOF_PTHREAD_MUTEX_T - size of pthread_mutex_t. + __SIZEOF_PTHREAD_MUTEXATTR_T - size of pthread_mutexattr_t. + __SIZEOF_PTHREAD_COND_T - size of pthread_cond_t. + __SIZEOF_PTHREAD_CONDATTR_T - size of pthread_condattr_t. + __SIZEOF_PTHREAD_RWLOCK_T - size of pthread_rwlock_t. + __SIZEOF_PTHREAD_RWLOCKATTR_T - size of pthread_rwlockattr_t. + __SIZEOF_PTHREAD_BARRIER_T - size of pthread_barrier_t. + __SIZEOF_PTHREAD_BARRIERATTR_T - size of pthread_barrierattr_t. + + The additional macro defines any constraint for the lock alignment + inside the thread structures: + + __LOCK_ALIGNMENT - for internal lock/futex usage. + + Same idea but for the once locking primitive: + + __ONCE_ALIGNMENT - for pthread_once_t/once_flag definition. */ + +#include + +#include + + +/* Common definition of pthread_mutex_t. */ + +typedef struct __pthread_internal_list +{ + struct __pthread_internal_list *__prev; + struct __pthread_internal_list *__next; +} __pthread_list_t; + +typedef struct __pthread_internal_slist +{ + struct __pthread_internal_slist *__next; +} __pthread_slist_t; + +/* Arch-specific mutex definitions. A generic implementation is provided + by sysdeps/nptl/bits/struct_mutex.h. If required, an architecture + can override it by defining: + + 1. struct __pthread_mutex_s (used on both pthread_mutex_t and mtx_t + definition). It should contains at least the internal members + defined in the generic version. + + 2. __LOCK_ALIGNMENT for any extra attribute for internal lock used with + atomic operations. + + 3. The macro __PTHREAD_MUTEX_INITIALIZER used for static initialization. + It should initialize the mutex internal flag. */ + +#include + +/* Arch-specific read-write lock definitions. A generic implementation is + provided by struct_rwlock.h. If required, an architecture can override it + by defining: + + 1. struct __pthread_rwlock_arch_t (used on pthread_rwlock_t definition). + It should contain at least the internal members defined in the + generic version. + + 2. The macro __PTHREAD_RWLOCK_INITIALIZER used for static initialization. + It should initialize the rwlock internal type. */ + +#include + + +/* Common definition of pthread_cond_t. */ + +struct __pthread_cond_s +{ + __atomic_wide_counter __wseq; + __atomic_wide_counter __g1_start; + unsigned int __g_size[2] __LOCK_ALIGNMENT; + unsigned int __g1_orig_size; + unsigned int __wrefs; + unsigned int __g_signals[2]; + unsigned int __unused_initialized_1; + unsigned int __unused_initialized_2; +}; + +typedef unsigned int __tss_t; +typedef unsigned long int __thrd_t; + +typedef struct +{ + int __data __ONCE_ALIGNMENT; +} __once_flag; + +#define __ONCE_FLAG_INIT { 0 } + +#endif /* _THREAD_SHARED_TYPES_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@thread-shared-types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@thread-shared-types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3e82c1bf9da879ba71575d916e7813df8ef7fae6 GIT binary patch literal 13968 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 Ll+2Q>12YK#P)yW? literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time.h new file mode 100644 index 0000000..e95066a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time.h @@ -0,0 +1,93 @@ +/* System-dependent timing definitions. Linux version. + Copyright (C) 1996-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * Never include this file directly; use instead. + */ + +#ifndef _BITS_TIME_H +#define _BITS_TIME_H 1 + +#include + +/* ISO/IEC 9899:1999 7.23.1: Components of time + The macro `CLOCKS_PER_SEC' is an expression with type `clock_t' that is + the number per second of the value returned by the `clock' function. */ +/* CAE XSH, Issue 4, Version 2: + The value of CLOCKS_PER_SEC is required to be 1 million on all + XSI-conformant systems. */ +#define CLOCKS_PER_SEC ((__clock_t) 1000000) + +#if (!defined __STRICT_ANSI__ || defined __USE_POSIX) \ + && !defined __USE_XOPEN2K +/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK + presents the real value for clock ticks per second for the system. */ +extern long int __sysconf (int); +# define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */ +#endif + +#ifdef __USE_POSIX199309 +/* Identifier for system-wide realtime clock. */ +# define CLOCK_REALTIME 0 +/* Monotonic system-wide clock. */ +# define CLOCK_MONOTONIC 1 +/* High-resolution timer from the CPU. */ +# define CLOCK_PROCESS_CPUTIME_ID 2 +/* Thread-specific CPU-time clock. */ +# define CLOCK_THREAD_CPUTIME_ID 3 +/* Monotonic system-wide clock, not adjusted for frequency scaling. */ +# define CLOCK_MONOTONIC_RAW 4 +/* Identifier for system-wide realtime clock, updated only on ticks. */ +# define CLOCK_REALTIME_COARSE 5 +/* Monotonic system-wide clock, updated only on ticks. */ +# define CLOCK_MONOTONIC_COARSE 6 +/* Monotonic system-wide clock that includes time spent in suspension. */ +# define CLOCK_BOOTTIME 7 +/* Like CLOCK_REALTIME but also wakes suspended system. */ +# define CLOCK_REALTIME_ALARM 8 +/* Like CLOCK_BOOTTIME but also wakes suspended system. */ +# define CLOCK_BOOTTIME_ALARM 9 +/* Like CLOCK_REALTIME but in International Atomic Time. */ +# define CLOCK_TAI 11 + +/* Flag to indicate time is absolute. */ +# define TIMER_ABSTIME 1 +#endif + +#ifdef __USE_GNU +# include + +__BEGIN_DECLS + +/* Tune a POSIX clock. */ +extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW __nonnull((2)); + +#ifdef __USE_TIME64_REDIRECTS +# if defined(__REDIRECT_NTH) +extern int __REDIRECT_NTH (clock_adjtime, (__clockid_t __clock_id, + struct timex *__utx), + __clock_adjtime64) __nonnull((2)); +# else +# define clock_adjtime __clock_adjtime64 +# endif +#endif + +__END_DECLS +#endif /* use GNU */ + +#endif /* bits/time.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..747587644caccdc4f97eeb4dc402fccb70d5d449 GIT binary patch literal 13060 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time64.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time64.h new file mode 100644 index 0000000..3fd9941 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time64.h @@ -0,0 +1,36 @@ +/* bits/time64.h -- underlying types for __time64_t. Generic version. + Copyright (C) 2018-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_TYPES_H +# error "Never include directly; use instead." +#endif + +#ifndef _BITS_TIME64_H +#define _BITS_TIME64_H 1 + +/* Define __TIME64_T_TYPE so that it is always a 64-bit type. */ + +#if __TIMESIZE == 64 +/* If we already have 64-bit time type then use it. */ +# define __TIME64_T_TYPE __TIME_T_TYPE +#else +/* Define a 64-bit time type alongsize the 32-bit one. */ +# define __TIME64_T_TYPE __SQUAD_TYPE +#endif + +#endif /* bits/time64.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time64.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@time64.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..aa73768bc9f17c79a7201fe21cf135c1853d767f GIT binary patch literal 11553 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. */ + +#include + +#if defined __x86_64__ && defined __ILP32__ +/* For x32, time is 64-bit even though word size is 32-bit. */ +# define __TIMESIZE 64 +#else +/* For others, time size is word size. */ +# define __TIMESIZE __WORDSIZE +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@timesize.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@timesize.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a5e858d68f0afc985cd29226b0b3a1baf4ad7360 GIT binary patch literal 11493 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. */ + +#ifndef _BITS_TIMEX_H +#define _BITS_TIMEX_H 1 + +#include +#include + +/* These definitions from linux/timex.h as of 3.18. */ + +struct timex +{ +# if defined __USE_TIME64_REDIRECTS || (__TIMESIZE == 64 && __WORDSIZE == 32) + unsigned int modes; /* mode selector */ + int :32; /* pad */ + long long offset; /* time offset (usec) */ + long long freq; /* frequency offset (scaled ppm) */ + long long maxerror; /* maximum error (usec) */ + long long esterror; /* estimated error (usec) */ + int status; /* clock command/status */ + int :32; /* pad */ + long long constant; /* pll time constant */ + long long precision; /* clock precision (usec) (read only) */ + long long tolerance; /* clock frequency tolerance (ppm) (ro) */ + struct timeval time; /* (read only, except for ADJ_SETOFFSET) */ + long long tick; /* (modified) usecs between clock ticks */ + long long ppsfreq; /* pps frequency (scaled ppm) (ro) */ + long long jitter; /* pps jitter (us) (ro) */ + int shift; /* interval duration (s) (shift) (ro) */ + int :32; /* pad */ + long long stabil; /* pps stability (scaled ppm) (ro) */ + long long jitcnt; /* jitter limit exceeded (ro) */ + long long calcnt; /* calibration intervals (ro) */ + long long errcnt; /* calibration errors (ro) */ + long long stbcnt; /* stability limit exceeded (ro) */ + + int tai; /* TAI offset (ro) */ + + int :32; int :32; int :32; int :32; + int :32; int :32; int :32; int :32; + int :32; int :32; int :32; +# else + unsigned int modes; /* mode selector */ + __syscall_slong_t offset; /* time offset (usec) */ + __syscall_slong_t freq; /* frequency offset (scaled ppm) */ + __syscall_slong_t maxerror; /* maximum error (usec) */ + __syscall_slong_t esterror; /* estimated error (usec) */ + int status; /* clock command/status */ + __syscall_slong_t constant; /* pll time constant */ + __syscall_slong_t precision; /* clock precision (usec) (ro) */ + __syscall_slong_t tolerance; /* clock frequency tolerance (ppm) (ro) */ + struct timeval time; /* (read only, except for ADJ_SETOFFSET) */ + __syscall_slong_t tick; /* (modified) usecs between clock ticks */ + __syscall_slong_t ppsfreq; /* pps frequency (scaled ppm) (ro) */ + __syscall_slong_t jitter; /* pps jitter (us) (ro) */ + int shift; /* interval duration (s) (shift) (ro) */ + __syscall_slong_t stabil; /* pps stability (scaled ppm) (ro) */ + __syscall_slong_t jitcnt; /* jitter limit exceeded (ro) */ + __syscall_slong_t calcnt; /* calibration intervals (ro) */ + __syscall_slong_t errcnt; /* calibration errors (ro) */ + __syscall_slong_t stbcnt; /* stability limit exceeded (ro) */ + + int tai; /* TAI offset (ro) */ + + /* ??? */ + int :32; int :32; int :32; int :32; + int :32; int :32; int :32; int :32; + int :32; int :32; int :32; +# endif +}; + +/* Mode codes (timex.mode) */ +#define ADJ_OFFSET 0x0001 /* time offset */ +#define ADJ_FREQUENCY 0x0002 /* frequency offset */ +#define ADJ_MAXERROR 0x0004 /* maximum time error */ +#define ADJ_ESTERROR 0x0008 /* estimated time error */ +#define ADJ_STATUS 0x0010 /* clock status */ +#define ADJ_TIMECONST 0x0020 /* pll time constant */ +#define ADJ_TAI 0x0080 /* set TAI offset */ +#define ADJ_SETOFFSET 0x0100 /* add 'time' to current time */ +#define ADJ_MICRO 0x1000 /* select microsecond resolution */ +#define ADJ_NANO 0x2000 /* select nanosecond resolution */ +#define ADJ_TICK 0x4000 /* tick value */ +#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ +#define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */ + +/* xntp 3.4 compatibility names */ +#define MOD_OFFSET ADJ_OFFSET +#define MOD_FREQUENCY ADJ_FREQUENCY +#define MOD_MAXERROR ADJ_MAXERROR +#define MOD_ESTERROR ADJ_ESTERROR +#define MOD_STATUS ADJ_STATUS +#define MOD_TIMECONST ADJ_TIMECONST +#define MOD_CLKB ADJ_TICK +#define MOD_CLKA ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */ +#define MOD_TAI ADJ_TAI +#define MOD_MICRO ADJ_MICRO +#define MOD_NANO ADJ_NANO + + +/* Status codes (timex.status) */ +#define STA_PLL 0x0001 /* enable PLL updates (rw) */ +#define STA_PPSFREQ 0x0002 /* enable PPS freq discipline (rw) */ +#define STA_PPSTIME 0x0004 /* enable PPS time discipline (rw) */ +#define STA_FLL 0x0008 /* select frequency-lock mode (rw) */ + +#define STA_INS 0x0010 /* insert leap (rw) */ +#define STA_DEL 0x0020 /* delete leap (rw) */ +#define STA_UNSYNC 0x0040 /* clock unsynchronized (rw) */ +#define STA_FREQHOLD 0x0080 /* hold frequency (rw) */ + +#define STA_PPSSIGNAL 0x0100 /* PPS signal present (ro) */ +#define STA_PPSJITTER 0x0200 /* PPS signal jitter exceeded (ro) */ +#define STA_PPSWANDER 0x0400 /* PPS signal wander exceeded (ro) */ +#define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */ + +#define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */ +#define STA_NANO 0x2000 /* resolution (0 = us, 1 = ns) (ro) */ +#define STA_MODE 0x4000 /* mode (0 = PLL, 1 = FLL) (ro) */ +#define STA_CLK 0x8000 /* clock source (0 = A, 1 = B) (ro) */ + +/* Read-only bits */ +#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER \ + | STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK) + +#endif /* bits/timex.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@timex.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@timex.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e8febc5c7768aa73b381f455551070a562e7f36a GIT binary patch literal 17117 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. */ + +/* + * Never include this file directly; use instead. + */ + +#ifndef _BITS_TYPES_H +#define _BITS_TYPES_H 1 + +#include +#include +#include + +/* Convenience types. */ +typedef unsigned char __u_char; +typedef unsigned short int __u_short; +typedef unsigned int __u_int; +typedef unsigned long int __u_long; + +/* Fixed-size types, underlying types depend on word size and compiler. */ +typedef signed char __int8_t; +typedef unsigned char __uint8_t; +typedef signed short int __int16_t; +typedef unsigned short int __uint16_t; +typedef signed int __int32_t; +typedef unsigned int __uint32_t; +#if __WORDSIZE == 64 +typedef signed long int __int64_t; +typedef unsigned long int __uint64_t; +#else +__extension__ typedef signed long long int __int64_t; +__extension__ typedef unsigned long long int __uint64_t; +#endif + +/* Smallest types with at least a given width. */ +typedef __int8_t __int_least8_t; +typedef __uint8_t __uint_least8_t; +typedef __int16_t __int_least16_t; +typedef __uint16_t __uint_least16_t; +typedef __int32_t __int_least32_t; +typedef __uint32_t __uint_least32_t; +typedef __int64_t __int_least64_t; +typedef __uint64_t __uint_least64_t; + +/* quad_t is also 64 bits. */ +#if __WORDSIZE == 64 +typedef long int __quad_t; +typedef unsigned long int __u_quad_t; +#else +__extension__ typedef long long int __quad_t; +__extension__ typedef unsigned long long int __u_quad_t; +#endif + +/* Largest integral types. */ +#if __WORDSIZE == 64 +typedef long int __intmax_t; +typedef unsigned long int __uintmax_t; +#else +__extension__ typedef long long int __intmax_t; +__extension__ typedef unsigned long long int __uintmax_t; +#endif + + +/* The machine-dependent file defines __*_T_TYPE + macros for each of the OS types we define below. The definitions + of those macros must use the following macros for underlying types. + We define __S_TYPE and __U_TYPE for the signed and unsigned + variants of each of the following integer types on this machine. + + 16 -- "natural" 16-bit type (always short) + 32 -- "natural" 32-bit type (always int) + 64 -- "natural" 64-bit type (long or long long) + LONG32 -- 32-bit type, traditionally long + QUAD -- 64-bit type, traditionally long long + WORD -- natural type of __WORDSIZE bits (int or long) + LONGWORD -- type of __WORDSIZE bits, traditionally long + + We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the + conventional uses of `long' or `long long' type modifiers match the + types we define, even when a less-adorned type would be the same size. + This matters for (somewhat) portably writing printf/scanf formats for + these types, where using the appropriate l or ll format modifiers can + make the typedefs and the formats match up across all GNU platforms. If + we used `long' when it's 64 bits where `long long' is expected, then the + compiler would warn about the formats not matching the argument types, + and the programmer changing them to shut up the compiler would break the + program's portability. + + Here we assume what is presently the case in all the GCC configurations + we support: long long is always 64 bits, long is always word/address size, + and int is always 32 bits. */ + +#define __S16_TYPE short int +#define __U16_TYPE unsigned short int +#define __S32_TYPE int +#define __U32_TYPE unsigned int +#define __SLONGWORD_TYPE long int +#define __ULONGWORD_TYPE unsigned long int +#if __WORDSIZE == 32 +# define __SQUAD_TYPE __int64_t +# define __UQUAD_TYPE __uint64_t +# define __SWORD_TYPE int +# define __UWORD_TYPE unsigned int +# define __SLONG32_TYPE long int +# define __ULONG32_TYPE unsigned long int +# define __S64_TYPE __int64_t +# define __U64_TYPE __uint64_t +/* We want __extension__ before typedef's that use nonstandard base types + such as `long long' in C89 mode. */ +# define __STD_TYPE __extension__ typedef +#elif __WORDSIZE == 64 +# define __SQUAD_TYPE long int +# define __UQUAD_TYPE unsigned long int +# define __SWORD_TYPE long int +# define __UWORD_TYPE unsigned long int +# define __SLONG32_TYPE int +# define __ULONG32_TYPE unsigned int +# define __S64_TYPE long int +# define __U64_TYPE unsigned long int +/* No need to mark the typedef with __extension__. */ +# define __STD_TYPE typedef +#else +# error +#endif +#include /* Defines __*_T_TYPE macros. */ +#include /* Defines __TIME*_T_TYPE macros. */ + + +__STD_TYPE __DEV_T_TYPE __dev_t; /* Type of device numbers. */ +__STD_TYPE __UID_T_TYPE __uid_t; /* Type of user identifications. */ +__STD_TYPE __GID_T_TYPE __gid_t; /* Type of group identifications. */ +__STD_TYPE __INO_T_TYPE __ino_t; /* Type of file serial numbers. */ +__STD_TYPE __INO64_T_TYPE __ino64_t; /* Type of file serial numbers (LFS).*/ +__STD_TYPE __MODE_T_TYPE __mode_t; /* Type of file attribute bitmasks. */ +__STD_TYPE __NLINK_T_TYPE __nlink_t; /* Type of file link counts. */ +__STD_TYPE __OFF_T_TYPE __off_t; /* Type of file sizes and offsets. */ +__STD_TYPE __OFF64_T_TYPE __off64_t; /* Type of file sizes and offsets (LFS). */ +__STD_TYPE __PID_T_TYPE __pid_t; /* Type of process identifications. */ +__STD_TYPE __FSID_T_TYPE __fsid_t; /* Type of file system IDs. */ +__STD_TYPE __CLOCK_T_TYPE __clock_t; /* Type of CPU usage counts. */ +__STD_TYPE __RLIM_T_TYPE __rlim_t; /* Type for resource measurement. */ +__STD_TYPE __RLIM64_T_TYPE __rlim64_t; /* Type for resource measurement (LFS). */ +__STD_TYPE __ID_T_TYPE __id_t; /* General type for IDs. */ +__STD_TYPE __TIME_T_TYPE __time_t; /* Seconds since the Epoch. */ +__STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds. */ +__STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds. */ +__STD_TYPE __SUSECONDS64_T_TYPE __suseconds64_t; + +__STD_TYPE __DADDR_T_TYPE __daddr_t; /* The type of a disk address. */ +__STD_TYPE __KEY_T_TYPE __key_t; /* Type of an IPC key. */ + +/* Clock ID used in clock and timer functions. */ +__STD_TYPE __CLOCKID_T_TYPE __clockid_t; + +/* Timer ID returned by `timer_create'. */ +__STD_TYPE __TIMER_T_TYPE __timer_t; + +/* Type to represent block size. */ +__STD_TYPE __BLKSIZE_T_TYPE __blksize_t; + +/* Types from the Large File Support interface. */ + +/* Type to count number of disk blocks. */ +__STD_TYPE __BLKCNT_T_TYPE __blkcnt_t; +__STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t; + +/* Type to count file system blocks. */ +__STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t; +__STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t; + +/* Type to count file system nodes. */ +__STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t; +__STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t; + +/* Type of miscellaneous file system fields. */ +__STD_TYPE __FSWORD_T_TYPE __fsword_t; + +__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error. */ + +/* Signed long type used in system calls. */ +__STD_TYPE __SYSCALL_SLONG_TYPE __syscall_slong_t; +/* Unsigned long type used in system calls. */ +__STD_TYPE __SYSCALL_ULONG_TYPE __syscall_ulong_t; + +/* These few don't really vary by system, they always correspond + to one of the other defined types. */ +typedef __off64_t __loff_t; /* Type of file sizes and offsets (LFS). */ +typedef char *__caddr_t; + +/* Duplicates info from stdint.h but this is used in unistd.h. */ +__STD_TYPE __SWORD_TYPE __intptr_t; + +/* Duplicate info from sys/socket.h. */ +__STD_TYPE __U32_TYPE __socklen_t; + +/* C99: An integer type that can be accessed as an atomic entity, + even in the presence of asynchronous interrupts. + It is not currently necessary for this to be machine-specific. */ +typedef int __sig_atomic_t; + +/* Seconds since the Epoch, visible to user code when time_t is too + narrow only for consistency with the old way of widening too-narrow + types. User code should never use __time64_t. */ +#if __TIMESIZE == 64 && defined __LIBC +# define __time64_t __time_t +#elif __TIMESIZE != 64 +__STD_TYPE __TIME64_T_TYPE __time64_t; +#endif + +#undef __STD_TYPE + +#endif /* bits/types.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..14ec554983dcea3379b4ad534dbaacc43f88ac79 GIT binary patch literal 18835 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@FILE.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@FILE.h new file mode 100644 index 0000000..f268263 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@FILE.h @@ -0,0 +1,9 @@ +#ifndef __FILE_defined +#define __FILE_defined 1 + +struct _IO_FILE; + +/* The opaque type of streams. This is the definition used elsewhere. */ +typedef struct _IO_FILE FILE; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@FILE.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@FILE.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..51b239ed5db13e8c485554d65785f91019635646 GIT binary patch literal 11784 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__FILE.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__FILE.h new file mode 100644 index 0000000..06dd79b --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__FILE.h @@ -0,0 +1,7 @@ +#ifndef ____FILE_defined +#define ____FILE_defined 1 + +struct _IO_FILE; +typedef struct _IO_FILE __FILE; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__FILE.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__FILE.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..90b17ff9f39e67da1fd855fcf2b161079611be48 GIT binary patch literal 11721 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 +#include + +/* The tag name of this struct is _G_fpos64_t to preserve historic + C++ mangled names for functions taking fpos_t and/or fpos64_t + arguments. That name should not be used in new code. */ +typedef struct _G_fpos64_t +{ + __off64_t __pos; + __mbstate_t __state; +} __fpos64_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos64_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos64_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1c8c52cce49a2edb8a783f7833efd1be704bd707 GIT binary patch literal 12358 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 W1qy}?42+Bdj8;q_(vIOj$bSI2X^+hS literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos_t.h new file mode 100644 index 0000000..bb04576 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos_t.h @@ -0,0 +1,16 @@ +#ifndef _____fpos_t_defined +#define _____fpos_t_defined 1 + +#include +#include + +/* The tag name of this struct is _G_fpos_t to preserve historic + C++ mangled names for functions taking fpos_t arguments. + That name should not be used in new code. */ +typedef struct _G_fpos_t +{ + __off_t __pos; + __mbstate_t __state; +} __fpos_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__fpos_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b71d74981eb6ffd37df0142f608948bc3c15d77e GIT binary patch literal 12304 zcmdO5_!rYHe3^-nK|eRIM87C8Gey6kC_gJTxujS>rMN&pBe5tqKQA*m5s6h?l#Jl% zWfT-JFem3E=A~0+hHiO&QFdltx^7BlQEGBYeo>_@32tKe`;S4tw75t=GcP%(G$mC( zxuminRWAeLKU5iQZGA&iJtI9s{iMv2V*SLNoc!eYlA^@Sl46hsnX|%|Q8a*6fs8BG zkB`qyDlSPZNsTW7DFuZciqd3+*~KL(sTIko1tkpsFigzJOv=nF$-!zwT54iRX;CWJ zDfrBZA)`|(O7uZ7g)chMeU_Y2l%JOmG8w~Lm`W3ilJoP*2q`YEEG|jS zjZZBq$}d9lT~20_J~*f78yUhAYH>+QW*#^-WtlTxCLzg#vSDdSW=^qwSz-}58~$_J zqm7z$kvx!@Uz}E+g5(-lPARS|)=y4JO~anzz%c;|(qjGMlA_Y&l6W^yA6HNS;EUpd z;*uPF5D}l8pO==I4pNU1x=2PR=jUfro4h~X+Hs$0e zC+4KaC+8#<7Zc93MTsSu`B`h2S;V+}W3X797Qo&gnUo3)E7Nr)JW)`Iu$7kdh zmq7Gj_z0{JVt09FUI~$LQc#o%DX3E7^9u+D70CF^yfkcHM~?_t8cNKG&qyrJAS&{} zdLRWhQR<6Ja^lOt^%Pd+ptK2+zzANXpo)(#&P*>(MGr2lr9^yuaY;%_YFd1Gaz-LF z(SyqiP@RWgM{#Bqw7P<8fMtE8fJ-h1*O*um7Lp>c;~{~RnV*L0hl$orb znOCBllLK+-B{Q^!0lJyV6%~m|nel1)MaeiaN^xFFT4oNoU9xKCtBWXY2T0)NrDP`N zfqZ}?+$sxFLCp|onE|dhFjRsY1o{Q}#hDfH@OZ#*J=nhT{Gt?40>Nq{y8j?$VSHI; zYB`R28&sKrt5OU%A(;iLq@hNED$~@WVo-SxasfuHL3{#9`XB`uo;>_fD zi0L2=7$$;M6{nVD{=q)gO-d{Vr&$c8NbUpsBsVoTzo-(ql}K8* zq9CUM_#$xo2CI6oqf^0UKwfGw_VN>y0C7hil8wob ze1qRZAVpZ)6QHaNX_w+lm0$;>hBEdRJ+iy<^FaNgVk`~=`HiS@3mgFY@$qQ|`Nd`? zgc}?sr3E>uSS&FDlQ;PtFFVK7#RzQkY_oR!CU_ZcTzaUf?8)ub99Wh>&yyavF9Y zt>`Trlc0>7MCOzVXytbp^{uss#~0jT>*M{gPL;S=3iz$xaP%fc|l1=QEFle zIN|9g7A1q5mH2`%Co?y*gqZj)O3X`7jZaKYhURz-`;i=+3~E^7Po`l1XXcgVXM@XZ ze5Qewg1ldv2P(`m6LT`FaI{>I+<-F*b5o0p6Vp?R<8xDUlTwSoX@Q{iuz`RK{JsJ; z8uChWL5(teoqMp4Kw(q?N=A622i)tzVky`NaJ>gNg0xBu(kTZGXQdVu>ldXKm*$i} z>MOQBHJtSo&QJx9B7pkQ#U+V(gljQ~^T8uepf)CjlNV z$mJ5)-s04p)MV6LhqZH3T#}Ml1RfQD_erp-gLiu%xjsHOF}VobzJzPTRV+fvuFU*m z91Sm|^qh>V=L7aqd17WsT23OQFOQL+z)HYn0&I9BK0YhAAU>%yExsfX>_ZGaNLGWj zLyEn4NFyaaFF!96>_v>6Q(TggtPANh!()Jwlv$iwQd$5>m>cQ|G^F6|*!awn)FM!m z4CDk1Cn9+bXL?R9C?$4)64W@!$xOnMNs-&Agc=OQI4Zp)qewR;H7yaGSFuL4;w|!F9MHu!My}4IKVc6GC62mzZAPYU^Qtu`H3ZYy2<&uxsY}OKIb5+ z)1vsC%wlXUOXMU>TDpQ|L2#UcM@+%a#^E(^>81P_fwK%`DC>eVT2dofcG_-6*t&&ip9-=Ou zs9|kTBLqCmgs%yL9Iqgk6r>jAeG4WtQLTAT?=cLfCu|7LWer5Ml{El4^iH6GHjfwcRXJ0J~J;TGY_0kFuVr#4! ztvDWiECGLYo>!U!o|?v9k3+_VbaPS@iwWi{u$%Kz%Mr6;pfJSn8dCUxJP0jZv1CUi zgwH%t3NwY zpmis37Nn-$*N)b)0=o>F#6WXgSi=OASU?KVn-0h+1wGty^UJUo9Ow$6B{Iljj2H!3 zirS7S!Jbpl4TX;4#AoIer$WZ%Fw92M0#ywSavZ(_H@3h_K%g^#7$!no3m%r!g*0Gv z!Py<;HH>ryQ4DSsKo>HAN^D{pNSXP$iFug?_+1Mb-UpK)>oMGl~#Xm?I4|PP?%!G z7LsweTT|NF;C>o0165!*ff|aiZZ*hOjD&<_D_lczejcPKAxZ~mDM~zejT}+RK@po; zP!gYgL&S&-Z9d>RJXqJ|TvXj8uh^#B_zc#N1Sc{4|A^| z;^FE`@)Zh-Qj1fI%2E|FGK)*{i!zhBoVB$Tauf5?b5c{lCKM~A)N%z- zLs5@`kyDP-fQgY)fR~AZfq@ChYp~F3U=Rlf!GC=xvs$$^KjdJ+hv8?)e0_WggOQQI z5b!xK3$F+hBPRo|2qZWeC2zegD%dUq!Tr*3>b vPdpw3Akhq+TuEVIU{F(rO#dl>WT6QUCaqw|z`)2Tz-Yz. */ + +#ifndef _BITS_TYPES___LOCALE_T_H +#define _BITS_TYPES___LOCALE_T_H 1 + +/* POSIX.1-2008: the locale_t type, representing a locale context + (implementation-namespace version). This type should be treated + as opaque by applications; some details are exposed for the sake of + efficiency in e.g. ctype functions. */ + +struct __locale_struct +{ + /* Note: LC_ALL is not a valid index into this array. */ + struct __locale_data *__locales[13]; /* 13 = __LC_LAST. */ + + /* To increase the speed of this solution we add some special members. */ + const unsigned short int *__ctype_b; + const int *__ctype_tolower; + const int *__ctype_toupper; + + /* Note: LC_ALL is not a valid index into this array. */ + const char *__names[13]; +}; + +typedef struct __locale_struct *__locale_t; + +#endif /* bits/types/__locale_t.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__locale_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__locale_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..97c0047b8afb5b3d29aed772a046518326ac8d81 GIT binary patch literal 12484 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__mbstate_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__mbstate_t.h new file mode 100644 index 0000000..1d8a4e2 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__mbstate_t.h @@ -0,0 +1,23 @@ +#ifndef ____mbstate_t_defined +#define ____mbstate_t_defined 1 + +/* Integral type unchanged by default argument promotions that can + hold any value corresponding to members of the extended character + set, as well as at least one value that does not correspond to any + member of the extended character set. */ +#ifndef __WINT_TYPE__ +# define __WINT_TYPE__ unsigned int +#endif + +/* Conversion state information. */ +typedef struct +{ + int __count; + union + { + __WINT_TYPE__ __wch; + char __wchb[4]; + } __value; /* Value so far. */ +} __mbstate_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__mbstate_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@__mbstate_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..81d845f471be293402f8931255f484a16caf539f GIT binary patch literal 12150 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clock_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clock_t.h new file mode 100644 index 0000000..ce97248 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clock_t.h @@ -0,0 +1,9 @@ +#ifndef __clock_t_defined +#define __clock_t_defined 1 + +#include + +/* Returned by `clock'. */ +typedef __clock_t clock_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clock_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clock_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..210b638944ae65cdce53151ebd2356d2b12478c7 GIT binary patch literal 11603 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 + +/* Clock ID used in clock and timer functions. */ +typedef __clockid_t clockid_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clockid_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@clockid_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..efab26864ebdb8760919318d7e2fae282efe67ea GIT binary patch literal 11633 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 b5H_+0VA2YP3=E8n0*q!%AkvEAKgdJ?K?|%k literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@cookie_io_functions_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@cookie_io_functions_t.h new file mode 100644 index 0000000..c04319a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@cookie_io_functions_t.h @@ -0,0 +1,63 @@ +/* Copyright (C) 1991-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef __cookie_io_functions_t_defined +#define __cookie_io_functions_t_defined 1 + +#include + +/* Functions to do I/O and file management for a stream. */ + +/* Read NBYTES bytes from COOKIE into a buffer pointed to by BUF. + Return number of bytes read. */ +typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf, + size_t __nbytes); + +/* Write NBYTES bytes pointed to by BUF to COOKIE. Write all NBYTES bytes + unless there is an error. Return number of bytes written. If + there is an error, return 0 and do not write anything. If the file + has been opened for append (__mode.__append set), then set the file + pointer to the end of the file and then do the write; if not, just + write at the current file pointer. */ +typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf, + size_t __nbytes); + +/* Move COOKIE's file position to *POS bytes from the + beginning of the file (if W is SEEK_SET), + the current position (if W is SEEK_CUR), + or the end of the file (if W is SEEK_END). + Set *POS to the new file position. + Returns zero if successful, nonzero if not. */ +typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w); + +/* Close COOKIE. */ +typedef int cookie_close_function_t (void *__cookie); + +/* The structure with the cookie function pointers. + The tag name of this struct is _IO_cookie_io_functions_t to + preserve historic C++ mangled names for functions taking + cookie_io_functions_t arguments. That name should not be used in + new code. */ +typedef struct _IO_cookie_io_functions_t +{ + cookie_read_function_t *read; /* Read bytes. */ + cookie_write_function_t *write; /* Write bytes. */ + cookie_seek_function_t *seek; /* Seek/tell file position. */ + cookie_close_function_t *close; /* Close file. */ +} cookie_io_functions_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@cookie_io_functions_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@cookie_io_functions_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..66407572c36e58f5e7a8c55335b65d2b71223e2b GIT binary patch literal 13995 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 QBp~F+1R{eN{)6gZ08V4!$^ZZW literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@error_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@error_t.h new file mode 100644 index 0000000..ed745fa --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@error_t.h @@ -0,0 +1,24 @@ +/* Define error_t. + Copyright (C) 1991-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef __error_t_defined +# define __error_t_defined 1 + +typedef int error_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@error_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@error_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1acb43821126fc154102cfaebfe52e8cf9da4fb4 GIT binary patch literal 11487 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 J3x@w7(*PY}c1r*N literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@locale_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@locale_t.h new file mode 100644 index 0000000..a825f11 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@locale_t.h @@ -0,0 +1,26 @@ +/* Definition of locale_t. + Copyright (C) 2017-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_TYPES_LOCALE_T_H +#define _BITS_TYPES_LOCALE_T_H 1 + +#include + +typedef __locale_t locale_t; + +#endif /* bits/types/locale_t.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@locale_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@locale_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..68744f2999efa35dce6e51ca485e475e265cfe2d GIT binary patch literal 11660 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@mbstate_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@mbstate_t.h new file mode 100644 index 0000000..8d1baa5 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@mbstate_t.h @@ -0,0 +1,8 @@ +#ifndef __mbstate_t_defined +#define __mbstate_t_defined 1 + +#include + +typedef __mbstate_t mbstate_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@mbstate_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@mbstate_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3aae9b76a2891bc34195fe840027feada7af96c5 GIT binary patch literal 11652 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 S42+BdjAl$A(u(0f$V33fg{#B> literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@sigset_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@sigset_t.h new file mode 100644 index 0000000..8b27e91 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@sigset_t.h @@ -0,0 +1,9 @@ +#ifndef __sigset_t_defined +#define __sigset_t_defined 1 + +#include + +/* A set of signals to be blocked, unblocked, or waited for. */ +typedef __sigset_t sigset_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@sigset_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@sigset_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..97d60dd03ad7ebdfc0ba373939156c7684a54189 GIT binary patch literal 11703 zcmdO5_!rYHe3^lfK|eRIM87C8Gey6kC_gJTxujS>rMN&pBe5tqKQA*m5s6h?l#Jl% zWfT-JFem3E=A~0+hHiO&QFdltx^7BlQEGBYeo>_@32tKe`;S4tw75t=GcP%(G$mC( zxuminRWAeLKU5iQZGA&iJtI9s{iMv2V*SLNoc!eYlA^@Sl46hsnX|%|Q8a*6fs8BG zkB`qyDlSPZNsTW7DFuZciqd3+*~KL(sTIko1tkpsFigzJOv=nF$-!zwT54iRX;CWJ zDfrBZA)`|(O7uZ7g)chMeU_Y2l%JOmG8w~Lm`W3ilJoP*2q`YEEG|jS zjZZBq$}d9lT~20_J~*f78yUhAYH>+QW*#^-WtlTxCLzg#vSDdSW=^qwSz-}58~$_J zqm7z$kvx!@Uz}E+g5(-lPARS|)=y4JO~anzz%c;|(qjGMlA_Y&l6W^yA6HNS;EUpd z;*uPF5D}l8pO==I4pNU1x=2PR=jUfro4h~X+Hs$0e zC+4KaC+8#<7Zc93MTsSu`B`h2S#mA==ocs%L1`Eyff2k&K@}fgoS9yniXL28OOyEc;*yk< z)U^2WdK9QFPU5#W)jPVsWl+ zdTL&3QD(A!W?qSIP7cJSm(0)_5a?zmS5zb>WyYuF7bWA!D8+dxX_-0T_RFf7uP&mr zF(84Pmy(&72l4@qaH}jx1vOWoWed1|!B7cqIOrGT7iU()!{Y(N^CJ0nek4Owtcml~- zuz!*gi!+nsA*O>gV3-J2Rh(Lqm5aSS18Qy+my{+I>p~(O!y}2sx%#O^MUa*SLH9sf zLrJA+I06jp9C#dIScc?1c(x-Yi((A|NT9+k#qa}i`Um?|Hz~0goMthUBDoLjlibwY z{Gv+a)+A}&kAj@i^vt|s{o>5@yu_S%a4t+N$uGhXfV7Kd)al`D7lGXa%_eDy$*DLx z0Z2Yb2A8cw1TQq7XXa&=#KWTnYfvMZo|2kWnywFO3KW6cL0Hv;9i0j;1M*Ufv6r8q z1c*EGkZeqbtO>1 z8Tfq#YBc1P=7Jh!_yz&MJ_3bN1t=NejUI6C42z{;Bf#|@+z8StF-YefH0+gHRIFc= zT3nh_0;#Xq`qXgNS2#lzJlX*2Zx@#&<`J&NAkGJmP=VU$kRBFsQBjasRGb>0SBg9G zAe{twxFDBHV0(*Gb5fI0a~;;sNpVR^Vi9=s0Ny9Tst(@mf#mx5+{EM}aQhOj4Og)U zDZ4WBi*Yo(kkWH9uAUFrOXZ1~C22W{kUl>~f&wc6mkF?8l=%3p+=BR|(zN)JM6eGr z^dMOc)($E5;vtQc_`LkQOt2R*a!zqcO0q7b(+rORN>XNVYDsAUBw=o-C(w|Bw`1co zOHzwKO)`)ZFr0|wHJs@=xuBHTflN^2BquWoOD08bqY`Q`5aX!yl8hqVl+?6Da9+h? zA*7;%7Yq2RIB=wbO4WkIOu}PQiOJdJiA5>;Ntt;mxXMg${R#?jd}#@HfP>N}?#2O9 z@PJ)jl$usv1R3px$1ncOnVVPV)pwuo{|dki{WvH-Em-P{bW#!6q0uEg()}|AU(|ZqSWI2(xPPSEgY~yh|$op6}3u2 ziF$~-c%p{CL5&dbFcZEe2y(oFTvCu)l#`zat_r}V25CihVoG8`NotWkl!g@7U6at- z5g>aY?Qd8$lnIK_qT+&7?D-2lst~;hP#VFAEF|SPiy2T6id8ejahbW`$if%FnUGqB zh?E5#dBxr*f!GHgD1)?}u*W`cbjp zkWm1T6gbF8OEr)tXlZdKDBTqlF#Ma*iI!qOW3(XYoYZ(o#|F~w2it|*tV8lAI9&5m zL9+nF4|^o%r=%vAVJrX8O)i5B1cH2wFa3dC0jgaSbJFv1_IQyD2Q?xx^RT%9S|x#O z#PBz4x>gsIk8lhHB3XhnSAa|3_{_YV%sg=V$M721Kj35lDF-uCh%5=yisRA82=G_a zd8IkvscG!>Gi1C+Hzzf*m|%VZyE!kl95E{f3PTL9A%zdfgU~_~OEyDN2sRp85a4LK zgOz{`1Z61j)Frrm6km{7l$Z;02u5UrbwE7`o>{=E3f&dZx&t1*8zYNr0SE(8Db^zYKf9fvyl*(t<3;h*6NGsO^Ii>^TM9 zQ0VAPd}dy8DrCG3!)zoiP}R^N$Kfk*BMQ6(1Uj>aVIst};Ndo1NW(-IoZUfQ!$@Zk z#o*c=x{v`>ViVKw$;{79%*!mm?^?*PJ(vVpkKtA%--BI(7dgFNa2pBa28>__s{l2tbyM<7lOQvyaKB+`--FTwk@aeFK>>Ky6k1)O zSdTx{Kox933Ht0j%r)Q^7v}gFOd84ipd6B%pO;)(RFs;B*2lr`f`XEwl+3g=h)*#h z4jgEpGAchlCzH7RUtE$BpO}Qbdx_*?u*qPr6IgBs=|qFV6eG5fjKkfU($)s|zla%t z0=o&+P=s}tLAGKfBqUqm8j|z#AVmpLIzUTI;=ya=h*A!U*wliO_~eXK$TSRwlOR3> z8AetZfs;BZBk-kpnT4gPI9GE(g9Y5s$}KHPB{;GU)&N&ah-r|Cf zmEa2B|Rz-9)r81DQ(j36%K x|Lwb#+&4$uKa8*$I=G#}z`&rQ44HmG@)Ar|!H|K0kx_urgb74iF#HFZ2LP+h!0`Y8 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_FILE.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_FILE.h new file mode 100644 index 0000000..2a0cafd --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_FILE.h @@ -0,0 +1,131 @@ +/* Copyright (C) 1991-2026 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef __struct_FILE_defined +#define __struct_FILE_defined 1 + +/* Caution: The contents of this file are not part of the official + stdio.h API. However, much of it is part of the official *binary* + interface, and therefore cannot be changed. */ + +#if defined _IO_USE_OLD_IO_FILE && !defined _LIBC +# error "_IO_USE_OLD_IO_FILE should only be defined when building libc itself" +#endif + +#if defined _IO_lock_t_defined && !defined _LIBC +# error "_IO_lock_t_defined should only be defined when building libc itself" +#endif + +#include +#include + +struct _IO_FILE; +struct _IO_marker; +struct _IO_codecvt; +struct _IO_wide_data; + +/* During the build of glibc itself, _IO_lock_t will already have been + defined by internal headers. */ +#ifndef _IO_lock_t_defined +typedef void _IO_lock_t; +#endif + +/* The tag name of this struct is _IO_FILE to preserve historic + C++ mangled names for functions taking FILE* arguments. + That name should not be used in new code. */ +struct _IO_FILE +{ + int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ + + /* The following pointers correspond to the C++ streambuf protocol. */ + char *_IO_read_ptr; /* Current read pointer */ + char *_IO_read_end; /* End of get area. */ + char *_IO_read_base; /* Start of putback+get area. */ + char *_IO_write_base; /* Start of put area. */ + char *_IO_write_ptr; /* Current put pointer. */ + char *_IO_write_end; /* End of put area. */ + char *_IO_buf_base; /* Start of reserve area. */ + char *_IO_buf_end; /* End of reserve area. */ + + /* The following fields are used to support backing up and undo. */ + char *_IO_save_base; /* Pointer to start of non-current get area. */ + char *_IO_backup_base; /* Pointer to first valid character of backup area */ + char *_IO_save_end; /* Pointer to end of non-current get area. */ + + struct _IO_marker *_markers; + + struct _IO_FILE *_chain; + + int _fileno; + int _flags2:24; + /* Fallback buffer to use when malloc fails to allocate one. */ + char _short_backupbuf[1]; + __off_t _old_offset; /* This used to be _offset but it's too small. */ + + /* 1+column number of pbase(); 0 is unknown. */ + unsigned short _cur_column; + signed char _vtable_offset; + char _shortbuf[1]; + + _IO_lock_t *_lock; +#ifdef _IO_USE_OLD_IO_FILE +}; + +struct _IO_FILE_complete +{ + struct _IO_FILE _file; +#endif + __off64_t _offset; + /* Wide character stream stuff. */ + struct _IO_codecvt *_codecvt; + struct _IO_wide_data *_wide_data; + struct _IO_FILE *_freeres_list; + void *_freeres_buf; + struct _IO_FILE **_prevchain; + int _mode; +#if __WORDSIZE == 64 + int _unused3; +#endif + __uint64_t _total_written; +#if __WORDSIZE == 32 + int _unused3; +#endif + /* Make sure we don't get into trouble again. */ + char _unused2[12 * sizeof (int) - 5 * sizeof (void *)]; +}; + +/* These macros are used by bits/stdio.h and internal headers. */ +#define __getc_unlocked_body(_fp) \ + (__glibc_unlikely ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end) \ + ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++) + +#define __putc_unlocked_body(_ch, _fp) \ + (__glibc_unlikely ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end) \ + ? __overflow (_fp, (unsigned char) (_ch)) \ + : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch))) + +#define _IO_EOF_SEEN 0x0010 +#define __feof_unlocked_body(_fp) (((_fp)->_flags & _IO_EOF_SEEN) != 0) + +#define _IO_ERR_SEEN 0x0020 +#define __ferror_unlocked_body(_fp) (((_fp)->_flags & _IO_ERR_SEEN) != 0) + +#define _IO_USER_LOCK 0x8000 +/* Many more flag bits are defined internally. */ + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_FILE.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_FILE.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..193b257d6ebd832d3ece80ccffa524bf0a1ed063 GIT binary patch literal 16462 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. */ + +#ifndef __jmp_buf_tag_defined +#define __jmp_buf_tag_defined 1 + +#include /* Get `__jmp_buf'. */ +#include + +/* Calling environment, plus possibly a saved signal mask. */ +struct __jmp_buf_tag + { + /* NOTE: The machine-dependent definitions of `__sigsetjmp' + assume that a `jmp_buf' begins with a `__jmp_buf' and that + `__mask_was_saved' follows it. Do not move these members + or add others before it. */ + __jmp_buf __jmpbuf; /* Calling environment. */ + int __mask_was_saved; /* Saved the signal mask? */ + __sigset_t __saved_mask; /* Saved signal mask. */ + }; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct___jmp_buf_tag.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct___jmp_buf_tag.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..981185670c619099c3fa8b835ab59106fda126ff GIT binary patch literal 12137 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 +#include + +/* POSIX.1b structure for timer start values and intervals. */ +struct itimerspec + { + struct timespec it_interval; + struct timespec it_value; + }; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_itimerspec.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_itimerspec.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..99a811159adf0a7e8f403e71e4aa3caf7301bd01 GIT binary patch literal 11866 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_sched_param.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_sched_param.h new file mode 100644 index 0000000..dce2e57 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_sched_param.h @@ -0,0 +1,28 @@ +/* Sched parameter structure. Generic version. + Copyright (C) 1996-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_TYPES_STRUCT_SCHED_PARAM +#define _BITS_TYPES_STRUCT_SCHED_PARAM 1 + +/* Data structure to describe a process' schedulability. */ +struct sched_param +{ + int sched_priority; +}; + +#endif /* bits/types/struct_sched_param.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_sched_param.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_sched_param.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..34910356bba5120c11d4c89cf08d22eec789d80c GIT binary patch literal 11664 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timespec.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timespec.h new file mode 100644 index 0000000..1141015 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timespec.h @@ -0,0 +1,33 @@ +/* NB: Include guard matches what uses. */ +#ifndef _STRUCT_TIMESPEC +#define _STRUCT_TIMESPEC 1 + +#include +#include +#include + +/* POSIX.1b structure for a time value. This is like a `struct timeval' but + has nanoseconds instead of microseconds. */ +struct timespec +{ +#ifdef __USE_TIME64_REDIRECTS + __time64_t tv_sec; /* Seconds. */ +#else + __time_t tv_sec; /* Seconds. */ +#endif +#if __WORDSIZE == 64 \ + || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) \ + || (__TIMESIZE == 32 && !defined __USE_TIME64_REDIRECTS) + __syscall_slong_t tv_nsec; /* Nanoseconds. */ +#else +# if __BYTE_ORDER == __BIG_ENDIAN + int: 32; /* Padding. */ + long int tv_nsec; /* Nanoseconds. */ +# else + long int tv_nsec; /* Nanoseconds. */ + int: 32; /* Padding. */ +# endif +#endif +}; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timespec.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timespec.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..25d12cd66aad74664e85f35b7fab138bf35aa50c GIT binary patch literal 12099 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timeval.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timeval.h new file mode 100644 index 0000000..0c8e88c --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timeval.h @@ -0,0 +1,18 @@ +#ifndef __timeval_defined +#define __timeval_defined 1 + +#include + +/* A time value that is accurate to the nearest + microsecond but also has a range of years. */ +struct timeval +{ +#ifdef __USE_TIME64_REDIRECTS + __time64_t tv_sec; /* Seconds. */ + __suseconds64_t tv_usec; /* Microseconds. */ +#else + __time_t tv_sec; /* Seconds. */ + __suseconds_t tv_usec; /* Microseconds. */ +#endif +}; +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timeval.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_timeval.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..af3abab41519160df285c57b7be1bd44a1acd4e5 GIT binary patch literal 11915 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_tm.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_tm.h new file mode 100644 index 0000000..b13b631 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_tm.h @@ -0,0 +1,28 @@ +#ifndef __struct_tm_defined +#define __struct_tm_defined 1 + +#include + +/* ISO C `broken-down time' structure. */ +struct tm +{ + int tm_sec; /* Seconds. [0-60] (1 leap second) */ + int tm_min; /* Minutes. [0-59] */ + int tm_hour; /* Hours. [0-23] */ + int tm_mday; /* Day. [1-31] */ + int tm_mon; /* Month. [0-11] */ + int tm_year; /* Year - 1900. */ + int tm_wday; /* Day of week. [0-6] */ + int tm_yday; /* Days in year.[0-365] */ + int tm_isdst; /* DST. [-1/0/1]*/ + +# ifdef __USE_MISC + long int tm_gmtoff; /* Seconds east of UTC. */ + const char *tm_zone; /* Timezone abbreviation. */ +# else + long int __tm_gmtoff; /* Seconds east of UTC. */ + const char *__tm_zone; /* Timezone abbreviation. */ +# endif +}; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_tm.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@struct_tm.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a483d228970f45ee38f8d52ace5d24afa086b5a3 GIT binary patch literal 12609 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 + +/* Returned by `time'. */ +#ifdef __USE_TIME64_REDIRECTS +typedef __time64_t time_t; +#else +typedef __time_t time_t; +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@time_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@time_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..611bac6ea7479241c03956278a4fb5b6f34781fa GIT binary patch literal 11583 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 AWdHyG literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@timer_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@timer_t.h new file mode 100644 index 0000000..d71a413 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@timer_t.h @@ -0,0 +1,9 @@ +#ifndef __timer_t_defined +#define __timer_t_defined 1 + +#include + +/* Timer ID returned by `timer_create'. */ +typedef __timer_t timer_t; + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@timer_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@timer_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b736d65a1748eeb307d463eb3c1b75a3ec02f713 GIT binary patch literal 11620 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@wint_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@wint_t.h new file mode 100644 index 0000000..fbd63db --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@wint_t.h @@ -0,0 +1,23 @@ +#ifndef __wint_t_defined +#define __wint_t_defined 1 + +/* Some versions of stddef.h provide wint_t, even though neither the + C nor C++ standards, nor POSIX, specifies this. We assume that + stddef.h will define the macro _WINT_T if and only if it provides + wint_t, and conversely, that it will avoid providing wint_t if + _WINT_T is already defined. */ +#ifndef _WINT_T +#define _WINT_T 1 + +/* Integral type unchanged by default argument promotions that can + hold any value corresponding to members of the extended character + set, as well as at least one value that does not correspond to any + member of the extended character set. */ +#ifndef __WINT_TYPE__ +# define __WINT_TYPE__ unsigned int +#endif + +typedef __WINT_TYPE__ wint_t; + +#endif /* _WINT_T */ +#endif /* bits/types/wint_t.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@wint_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@types@wint_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..55f0fc9cb829d156c39e9f1628bae274caf0fd63 GIT binary patch literal 11582 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@typesizes.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@typesizes.h new file mode 100644 index 0000000..18336f8 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@typesizes.h @@ -0,0 +1,106 @@ +/* bits/typesizes.h -- underlying types for *_t. Linux/x86-64 version. + Copyright (C) 2012-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_TYPES_H +# error "Never include directly; use instead." +#endif + +#ifndef _BITS_TYPESIZES_H +#define _BITS_TYPESIZES_H 1 + +/* See for the meaning of these macros. This file exists so + that need not vary across different GNU platforms. */ + +/* X32 kernel interface is 64-bit. */ +#if defined __x86_64__ && defined __ILP32__ +# define __SYSCALL_SLONG_TYPE __SQUAD_TYPE +# define __SYSCALL_ULONG_TYPE __UQUAD_TYPE +#else +# define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE +# define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE +#endif + +#define __DEV_T_TYPE __UQUAD_TYPE +#define __UID_T_TYPE __U32_TYPE +#define __GID_T_TYPE __U32_TYPE +#define __INO_T_TYPE __SYSCALL_ULONG_TYPE +#define __INO64_T_TYPE __UQUAD_TYPE +#define __MODE_T_TYPE __U32_TYPE +#ifdef __x86_64__ +# define __NLINK_T_TYPE __SYSCALL_ULONG_TYPE +# define __FSWORD_T_TYPE __SYSCALL_SLONG_TYPE +#else +# define __NLINK_T_TYPE __UWORD_TYPE +# define __FSWORD_T_TYPE __SWORD_TYPE +#endif +#define __OFF_T_TYPE __SYSCALL_SLONG_TYPE +#define __OFF64_T_TYPE __SQUAD_TYPE +#define __PID_T_TYPE __S32_TYPE +#define __RLIM_T_TYPE __SYSCALL_ULONG_TYPE +#define __RLIM64_T_TYPE __UQUAD_TYPE +#define __BLKCNT_T_TYPE __SYSCALL_SLONG_TYPE +#define __BLKCNT64_T_TYPE __SQUAD_TYPE +#define __FSBLKCNT_T_TYPE __SYSCALL_ULONG_TYPE +#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE +#define __FSFILCNT_T_TYPE __SYSCALL_ULONG_TYPE +#define __FSFILCNT64_T_TYPE __UQUAD_TYPE +#define __ID_T_TYPE __U32_TYPE +#define __CLOCK_T_TYPE __SYSCALL_SLONG_TYPE +#define __TIME_T_TYPE __SYSCALL_SLONG_TYPE +#define __USECONDS_T_TYPE __U32_TYPE +#define __SUSECONDS_T_TYPE __SYSCALL_SLONG_TYPE +#define __SUSECONDS64_T_TYPE __SQUAD_TYPE +#define __DADDR_T_TYPE __S32_TYPE +#define __KEY_T_TYPE __S32_TYPE +#define __CLOCKID_T_TYPE __S32_TYPE +#define __TIMER_T_TYPE void * +#define __BLKSIZE_T_TYPE __SYSCALL_SLONG_TYPE +#define __FSID_T_TYPE struct { int __val[2]; } +#define __SSIZE_T_TYPE __SWORD_TYPE +#define __CPU_MASK_TYPE __SYSCALL_ULONG_TYPE + +#ifdef __x86_64__ +/* Tell the libc code that off_t and off64_t are actually the same type + for all ABI purposes, even if possibly expressed as different base types + for C type-checking purposes. */ +# define __OFF_T_MATCHES_OFF64_T 1 + +/* Same for ino_t and ino64_t. */ +# define __INO_T_MATCHES_INO64_T 1 + +/* And for __rlim_t and __rlim64_t. */ +# define __RLIM_T_MATCHES_RLIM64_T 1 + +/* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ +# define __STATFS_MATCHES_STATFS64 1 + +/* And for getitimer, setitimer and rusage */ +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 +#else +# define __RLIM_T_MATCHES_RLIM64_T 0 + +# define __STATFS_MATCHES_STATFS64 0 + +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 0 +#endif + +/* Number of descriptors that can fit in an `fd_set'. */ +#define __FD_SETSIZE 1024 + + +#endif /* bits/typesizes.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@typesizes.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@typesizes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..987491d98b66f4182139bb3bb8d401bf7dbd8eb0 GIT binary patch literal 15371 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 LMkfKMAc$`O9Ym(x literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@uintn-identity.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@uintn-identity.h new file mode 100644 index 0000000..d78bda6 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@uintn-identity.h @@ -0,0 +1,50 @@ +/* Inline functions to return unsigned integer values unchanged. + Copyright (C) 2017-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#if !defined _NETINET_IN_H && !defined _ENDIAN_H +# error "Never use directly; include or instead." +#endif + +#ifndef _BITS_UINTN_IDENTITY_H +#define _BITS_UINTN_IDENTITY_H 1 + +#include + +/* These inline functions are to ensure the appropriate type + conversions and associated diagnostics from macros that convert to + a given endianness. */ + +static __inline __uint16_t +__uint16_identity (__uint16_t __x) +{ + return __x; +} + +static __inline __uint32_t +__uint32_identity (__uint32_t __x) +{ + return __x; +} + +static __inline __uint64_t +__uint64_identity (__uint64_t __x) +{ + return __x; +} + +#endif /* _BITS_UINTN_IDENTITY_H. */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@uintn-identity.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@uintn-identity.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..cb459199e1002ecfd970dbef5413f3debe298ee7 GIT binary patch literal 12392 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitflags.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitflags.h new file mode 100644 index 0000000..3b85542 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitflags.h @@ -0,0 +1,39 @@ +/* Definitions of flag bits for `waitpid' et al. + Copyright (C) 1992-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#if !defined _SYS_WAIT_H && !defined _STDLIB_H +# error "Never include directly; use instead." +#endif + + +/* Bits in the third argument to `waitpid'. */ +#define WNOHANG 1 /* Don't block waiting. */ +#define WUNTRACED 2 /* Report status of stopped children. */ + +/* Bits in the fourth argument to `waitid'. */ +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +# define WSTOPPED 2 /* Report stopped child (same as WUNTRACED). */ +# define WEXITED 4 /* Report dead child. */ +# define WCONTINUED 8 /* Report continued child. */ +# define WNOWAIT 0x01000000 /* Don't reap, just poll status. */ +#endif + +#define __WNOTHREAD 0x20000000 /* Don't wait on children of other threads + in this group */ +#define __WALL 0x40000000 /* Wait for any child. */ +#define __WCLONE 0x80000000 /* Wait for cloned process. */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitflags.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitflags.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e536c03efa1a6541b49aae4193ea27ecf034c12d GIT binary patch literal 11929 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 ToScRX42%*25^_u+66#z4_v7JP literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitstatus.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitstatus.h new file mode 100644 index 0000000..8a8dd04 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitstatus.h @@ -0,0 +1,59 @@ +/* Definitions of status bits for `wait' et al. + Copyright (C) 1992-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#if !defined _SYS_WAIT_H && !defined _STDLIB_H +# error "Never include directly; use instead." +#endif + + +/* Everything extant so far uses these same bits. */ + + +/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */ +#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8) + +/* If WIFSIGNALED(STATUS), the terminating signal. */ +#define __WTERMSIG(status) ((status) & 0x7f) + +/* If WIFSTOPPED(STATUS), the signal that stopped the child. */ +#define __WSTOPSIG(status) __WEXITSTATUS(status) + +/* Nonzero if STATUS indicates normal termination. */ +#define __WIFEXITED(status) (__WTERMSIG(status) == 0) + +/* Nonzero if STATUS indicates termination by a signal. */ +#define __WIFSIGNALED(status) \ + (((signed char) (((status) & 0x7f) + 1) >> 1) > 0) + +/* Nonzero if STATUS indicates the child is stopped. */ +#define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f) + +/* Nonzero if STATUS indicates the child continued after a stop. We only + define this if provides the WCONTINUED flag bit. */ +#ifdef WCONTINUED +# define __WIFCONTINUED(status) ((status) == __W_CONTINUED) +#endif + +/* Nonzero if STATUS indicates the child dumped core. */ +#define __WCOREDUMP(status) ((status) & __WCOREFLAG) + +/* Macros for constructing status values. */ +#define __W_EXITCODE(ret, sig) ((ret) << 8 | (sig)) +#define __W_STOPCODE(sig) ((sig) << 8 | 0x7f) +#define __W_CONTINUED 0xffff +#define __WCOREFLAG 0x80 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitstatus.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@waitstatus.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f1ab3f9f31ab2c2f60f07c3c87ae5d42782c5e1c GIT binary patch literal 12489 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. */ + +#ifndef _BITS_WCHAR_H +#define _BITS_WCHAR_H 1 + +/* The fallback definitions, for when __WCHAR_MAX__ or __WCHAR_MIN__ + are not defined, give the right value and type as long as both int + and wchar_t are 32-bit types. Adding L'\0' to a constant value + ensures that the type is correct; it is necessary to use (L'\0' + + 0) rather than just L'\0' so that the type in C++ is the promoted + version of wchar_t rather than the distinct wchar_t type itself. + Because wchar_t in preprocessor #if expressions is treated as + intmax_t or uintmax_t, the expression (L'\0' - 1) would have the + wrong value for WCHAR_MAX in such expressions and so cannot be used + to define __WCHAR_MAX in the unsigned case. */ + +#ifdef __WCHAR_MAX__ +# define __WCHAR_MAX __WCHAR_MAX__ +#elif L'\0' - 1 > 0 +# define __WCHAR_MAX (0xffffffffu + L'\0') +#else +# define __WCHAR_MAX (0x7fffffff + L'\0') +#endif + +#ifdef __WCHAR_MIN__ +# define __WCHAR_MIN __WCHAR_MIN__ +#elif L'\0' - 1 > 0 +# define __WCHAR_MIN (L'\0' + 0) +#else +# define __WCHAR_MIN (-__WCHAR_MAX - 1) +#endif + +#endif /* bits/wchar.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wchar.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wchar.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..34045e01b70bd75dd209adbd4edcc72840685759 GIT binary patch literal 11596 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 JAW{!v1^|2CkOTk# literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wctype-wchar.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wctype-wchar.h new file mode 100644 index 0000000..31ad171 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wctype-wchar.h @@ -0,0 +1,173 @@ +/* Copyright (C) 1996-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.25 + * Wide character classification and mapping utilities + */ + +#ifndef _BITS_WCTYPE_WCHAR_H +#define _BITS_WCTYPE_WCHAR_H 1 + +#if !defined _WCTYPE_H && !defined _WCHAR_H +#error "Never include directly; include or instead." +#endif + +#include +#include + +/* The definitions in this header are specified to appear in + in ISO C99, but in in Unix98. _GNU_SOURCE follows C99. */ + +/* Scalar type that can hold values which represent locale-specific + character classifications. */ +typedef unsigned long int wctype_t; + +# ifndef _ISwbit +/* The characteristics are stored always in network byte order (big + endian). We define the bit value interpretations here dependent on the + machine's byte order. */ + +# include +# if __BYTE_ORDER == __BIG_ENDIAN +# define _ISwbit(bit) (1 << (bit)) +# else /* __BYTE_ORDER == __LITTLE_ENDIAN */ +# define _ISwbit(bit) \ + ((bit) < 8 ? (int) ((1UL << (bit)) << 24) \ + : ((bit) < 16 ? (int) ((1UL << (bit)) << 8) \ + : ((bit) < 24 ? (int) ((1UL << (bit)) >> 8) \ + : (int) ((1UL << (bit)) >> 24)))) +# endif + +enum +{ + __ISwupper = 0, /* UPPERCASE. */ + __ISwlower = 1, /* lowercase. */ + __ISwalpha = 2, /* Alphabetic. */ + __ISwdigit = 3, /* Numeric. */ + __ISwxdigit = 4, /* Hexadecimal numeric. */ + __ISwspace = 5, /* Whitespace. */ + __ISwprint = 6, /* Printing. */ + __ISwgraph = 7, /* Graphical. */ + __ISwblank = 8, /* Blank (usually SPC and TAB). */ + __ISwcntrl = 9, /* Control character. */ + __ISwpunct = 10, /* Punctuation. */ + __ISwalnum = 11, /* Alphanumeric. */ + + _ISwupper = _ISwbit (__ISwupper), /* UPPERCASE. */ + _ISwlower = _ISwbit (__ISwlower), /* lowercase. */ + _ISwalpha = _ISwbit (__ISwalpha), /* Alphabetic. */ + _ISwdigit = _ISwbit (__ISwdigit), /* Numeric. */ + _ISwxdigit = _ISwbit (__ISwxdigit), /* Hexadecimal numeric. */ + _ISwspace = _ISwbit (__ISwspace), /* Whitespace. */ + _ISwprint = _ISwbit (__ISwprint), /* Printing. */ + _ISwgraph = _ISwbit (__ISwgraph), /* Graphical. */ + _ISwblank = _ISwbit (__ISwblank), /* Blank (usually SPC and TAB). */ + _ISwcntrl = _ISwbit (__ISwcntrl), /* Control character. */ + _ISwpunct = _ISwbit (__ISwpunct), /* Punctuation. */ + _ISwalnum = _ISwbit (__ISwalnum) /* Alphanumeric. */ +}; +# endif /* Not _ISwbit */ + + +__BEGIN_DECLS + +/* + * Wide-character classification functions: 7.15.2.1. + */ + +/* Test for any wide character for which `iswalpha' or `iswdigit' is + true. */ +extern int iswalnum (wint_t __wc) __THROW; + +/* Test for any wide character for which `iswupper' or 'iswlower' is + true, or any wide character that is one of a locale-specific set of + wide-characters for which none of `iswcntrl', `iswdigit', + `iswpunct', or `iswspace' is true. */ +extern int iswalpha (wint_t __wc) __THROW; + +/* Test for any control wide character. */ +extern int iswcntrl (wint_t __wc) __THROW; + +/* Test for any wide character that corresponds to a decimal-digit + character. */ +extern int iswdigit (wint_t __wc) __THROW; + +/* Test for any wide character for which `iswprint' is true and + `iswspace' is false. */ +extern int iswgraph (wint_t __wc) __THROW; + +/* Test for any wide character that corresponds to a lowercase letter + or is one of a locale-specific set of wide characters for which + none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true. */ +extern int iswlower (wint_t __wc) __THROW; + +/* Test for any printing wide character. */ +extern int iswprint (wint_t __wc) __THROW; + +/* Test for any printing wide character that is one of a + locale-specific et of wide characters for which neither `iswspace' + nor `iswalnum' is true. */ +extern int iswpunct (wint_t __wc) __THROW; + +/* Test for any wide character that corresponds to a locale-specific + set of wide characters for which none of `iswalnum', `iswgraph', or + `iswpunct' is true. */ +extern int iswspace (wint_t __wc) __THROW; + +/* Test for any wide character that corresponds to an uppercase letter + or is one of a locale-specific set of wide character for which none + of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true. */ +extern int iswupper (wint_t __wc) __THROW; + +/* Test for any wide character that corresponds to a hexadecimal-digit + character equivalent to that performed be the functions described + in the previous subclause. */ +extern int iswxdigit (wint_t __wc) __THROW; + +/* Test for any wide character that corresponds to a standard blank + wide character or a locale-specific set of wide characters for + which `iswalnum' is false. */ +# ifdef __USE_ISOC99 +extern int iswblank (wint_t __wc) __THROW; +# endif + +/* + * Extensible wide-character classification functions: 7.15.2.2. + */ + +/* Construct value that describes a class of wide characters identified + by the string argument PROPERTY. */ +extern wctype_t wctype (const char *__property) __THROW; + +/* Determine whether the wide-character WC has the property described by + DESC. */ +extern int iswctype (wint_t __wc, wctype_t __desc) __THROW; + +/* + * Wide-character case-mapping functions: 7.15.3.1. + */ + +/* Converts an uppercase letter to the corresponding lowercase letter. */ +extern wint_t towlower (wint_t __wc) __THROW; + +/* Converts an lowercase letter to the corresponding uppercase letter. */ +extern wint_t towupper (wint_t __wc) __THROW; + +__END_DECLS + +#endif /* bits/wctype-wchar.h. */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wctype-wchar.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wctype-wchar.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7ee25a1a53d5c5a3c84916e578b090784d11b9b6 GIT binary patch literal 20992 zcmdO5_!rYHe3^lfkwL$-xJW-UFFB_)B~?Euv!qzRJh`N@AXT?KIU})1FM~lpH?Ks$ zC^0idzn~~TD>b>KSU;t>KtCg~C^tVZGdU57Ra}&e;OS))6fiI+=OpH(Q)Y&4d45rL zW?s5(N@h`Na!Gzsr7a0=V)*+H)sJA`>19Ad0LAyo+S>Ytrg}zthLC_r%*n}5jxQ-n z%q%GeX^=T9d>KUpIJiK8RjeN$pPN)%l30=&UjkAJ3SAVXNM;w8q@-3Prxuhj{KGIY zCo?HCuOtVn5oxK3C8b5FV5i_Szrw;S-poX|AXzsjGq1ElH$ATu;-CED_>|PN%shw@ z7orYixZKQf&E`xQk0pOo>ra$ax{jaU?oYFC8@>bi3K1P_*@QFoL^i5 zvRtnuIT?%XU?qtq`MH_N@#UE*sqxAArFkW(po9ue(zpUWwW35H6jS)36WwRY8AbVd z`5;GQcnec$Vo`E_UKt_9#g)Y+sk!l~MMe2VNWRO-OwtGE6n!H@cxEgvNy*Fur=~1( z#>*rmc~CYiEy>I&)-MC);DQ2%e@=U}QIjr`2Qu@E)5=qjTmvf&iYtrtlT%XDu%|e1 zOn`#4SiiWWs5H4G-p$j;6%+vYqPU>ABu5`a#3$$HrDdjr)MJD$lF`Ze`PrGN@tOJY zX{C9|C7Jno#W->plBSZ(+|(i*%8)z`)&b7si6yBi@dYK|RD|IgbRC7I`5@(xbdS~j z=sHS^Q;XxF7UdVkCl;lHgOs36Ir+(nIjQlx6r>s>iK44cE5@1V5{q+n(^KgfIv4hxuPO5DKkDT zzbF|;Mk&rqNz2Sh1-Wq5%vTptsyj&F=A~pN=7HpKgj;1nDyX>vEnC3#3x-N?!$H3w zzc{lZ9v%-Et_Ry!o?ny#N+4KmME4)0%#1I~OfAPzzk@10aFvVUCM2^!l{wTXP^Ft% zR1B&YKrX2920mDSFs^Zj=tX%Bv8BlYpxTG|x zSQirM7#>M1&ecyXDuT2u2)YN-8cHfn!x3O$=fL9#!!jiA!LuDHSrls!KmrwRDTW`A z(?8g!x=D$};53V&6v=&HpX8?I<`-2WwlbIH=OyOEgL7eGNq!NA z0JwYdZ$_OS&UO*lJ{WC zHlF4%k`ZGg1>%Qj2tpOA?E)*M4B9 zCl{3J7N=rYfF9nUrX0BWmzfW)d9hnwP?AxUnwSDkc)E#2$>3%sz97uW%*`wzCccXj z^U_n}6O)snIUd7)BnKyh8kYEzDcJv+d1d+8;4&MZX<(%w@0aF*3bV|_oXjd5Ef*v= z;EclD)Z*gA^wi?`+|=Bp)FNxsDeiuK>h9FlEgg1 zwHU!M;@e;01p@BatUm2acWL#GHR~F+BqpMNl7dM zj~>ALBv{qKyFHLxAD^3;Tm)`k!nNTl79nLCkr3H|LxuKpwLkixGjn6DeEdn*kKu*ALB9hl|rsw2>Qep=(L5-7~ z%p@#PgWN_X)LNn&z#d~Rl*Zc1fdVs2(KR(~OD0XZLBfRW{U*l2Tp5qP`{?j=~k z0k#R0$wA})rP%EOt4YhrPb|sPP0r8Fg|rj!IR{al7RBde7GrB!A}3+e(iJQVg5wlC zvI=%KcCUddLt=XPpm7Pv_%@c*kDf*f@{8fIg2P(yKt(dBtqDmL_(BUDzL36Sd{Js~ zerZuM_O=UHA=qYpXsL->*`P!!L|r^l1KXhH1$Y1nU*iHf#y~D9NG;0A&jT0o;PQa9 z!Z^a-0PS zsBpxp8REFiTySLJi{MO1{Xs;^f{v+T?`=Tr1E(xVs|b7SBl!t35`@KGa9q;XkVoC!*Ipt+$LooFcrH2MmX z&Pk1jbXg!Rdazx{4K}1u0*7l}DrkJ4_yLXN{FKz>GHfLq*f_BNLE|=HyE&fEiT zUB+kTloM!9`-^BZOkejl2pJI0&;eP4=fX9b6RnHL1GDbi~(Pu zLcNs}p9C#83G|}D>QU!2LC(QvMKR8z8*CUPh(Ly5ggJU>rWMDh;AjwojUuW@2CIZv z3hEORoU+eLEr%vI(#l!bNOW#udR}G;Xmt&o1*xg`wWD>Jz%GL(G0^N4)-VAj7LY>p zrUPN#K;4-%m_)kAcKhXM_D4c$i`5O+!%$24MwR0b`e-QvkI~X z0d5ffsvqy3eRcGcGgWFOdH(&%i zSOuv0t(%fxngp3sh5HTG!T>7*dtV=vCWx$8lM4#K^QO@13dMT-p$4j83re7iS1^JN z+%m%)A%i&<$@`!jlANEHTv}9=nupdG!ta8DlA@H%v^0oMFdXE zNr_KP!rs9|axvIsu-6GJxPx?~L1Bs!TS&&?ZcS-xgZpX33_*e21ZpV4I?NzjF%lAz zt#A#=`FW6{geV=LMJDm!RdPfr2SsdZK}mdaMk-_?2E$1ZAA$@cD~!NNos=>7(!9*V z(o~%5IiSG;ZfNC}mZTCKTL)_ZEkMPVgRmrbuzERUs#}q$IUS zp(J0SBqLQJIlrhVwYVTZFC{ZCT>)$`k}5q02FCx9UJb8nQqDy(@Gvkiu8>)w!^pUT zVMPQ3!+)nqE?+bS4FfP72)2zh2clbz-GN|((H;2rROw_DZK-Oo1DDDy)nQ~@%CHpV zKwth7k;+UDG3=A%*C8-qi(V@x)|MxQ06`WF!`Y!?vI(zaX`!q*4K7WKm{PYKlTqC6|k9 zu(KWm1Ji%m&cdJ5gHyl$=dZ4`=lt~k2H5@c#OA3nGR|X|SHi&XUxC$f^@E1=R8;pT z=H!*;BD)_W`oYc(Ni8l>NXsu$NX)AQyHWw+N|11QMrLw`LPBP7d16jMMxwexei4|L zl9`@aqOOox%mqqI;3RNG=JQO>_xJt5E{qe4Q)6U|V~7i4VEBJ$PVC9YnY|t8E-c7M zq^1kOsRQgn^~~aOa4LYiPzU62EPgD>NCZWL3ekZ;k0{gj9tWk}Tv5}z>*lqqM#KY56i$9`Ab282VA^Dnnns`i8-aI3gAG8W%Xi(L}J_?IA*iw zfPFJdVU`Xf<1B_*c?=ByukCGkczbzuGSoNF@(r9lNDNF=Cqn#!B>|yUB3$`Jpje0I z5{v`}&0uH|gp|Oz2xKsDW+R-zWG^X1gTtpptVE5Gv4o)n6x-*cSS}c>a48Y5#lLpjL)R)Mox51(16pxO`4 zJ|xLPiwfhvXTl2;8)fgG` z8S+7H)!ER!Iof^qVN|z*L!U&qf}MjIRtn$@l35Hdkh#zcWN>+mJGm(2rDlSwU67w4 zp5w}cR$7qa36vV)GnZ%$vvI1-f0apq!FpwOJ3K^*ti8x%U0NQj?mY4&o z6u?dP#1e&q)S|TfqFhjO5>)G?D!|t46(d@jT$y>`ilv|^wJbBgv{<3IG$}bJu@qVi zc%|x`dRDbS3GDZ7v2G1U#%_l05C#U;zk3-O&;TQ%h5C07hAjVoSnKdVtfliGR{#Eo zh4Ft_x$_@ZSpSEWn*U+>^gpc8@E?|Z{==O4AC}<|jpo15Mn9r^@;|itjKK1>kEK8z zv6R#_h0;9G>gm)J1yC-8^p+U3w0K~?`vYPK#%aZwu`s4+rI@iWrfa2}u`p(9Wt*`u z=4<7fu`rfsm6)+GmTQ%pu`t$X)tIp`HflARu`sr2wVAOncI$LourN;4nrOztI8SSy z84Kf5zNJzuj7trc+OROL;9DWZ!nndlyh+T<&r?XvE6rtKU=U(p zU^Hhi=U`$qX9!{fxrTuY9K8Qein-377OyIY;SAH1`|pra$e5S*NtlUSqxQVA(w zlN0k4GV*g$Agz*O1xQo2D7By{wHTC&&AmsXX5zAFMoID<7d8 zmP0U=mspg5m6vFhAe6(h7^d=Ui)^s+Y^`jBa#&`?R32v$2UZ@Z6^Bp`>zhK_$M6m^ zgOCttG+a{e&fpLY`iUT=V5?xxz`!8F;125fWF{x(=rJ%lusBG7 zJnz8bpa9R`VvGz7Oul-)PArTd(t+Xs+2>X<2RxYHfK3B8jTCGZ%)q7vfEuEp^$QG) z_AK^b!|Yk?(G2s^^KoKf1d$F5|LuC6T6~ogL?DKNx}FNQ3Wf#{(?Hx(aNgBpV0312 z1{>(i;;e+~x&XZZCl*E!>A>(`*EaLb^-Z_y!3IKVI0ah;69xtbF$NDrwWI)DajeI{ zXv<4kbseirh*lQMnf~gIxVniG%_Ke(auf* zq7jd??CcbbOf)q$HNh1~ct&PPD%eYU42<3^-eRDb@n-SXLWy#Q|B{PDCw$&`@E<5Z zz|A^DfPlI90tBJ}Ge98X3N{Kj0|cT1tP|odNC-oO6>Jo61_(rjrUJeIK~jShAkNT1 z0i>oLqd$v3I9&W${L#ZjYnny-=S$1(fWigbg+PQ0n2Rr5APT^~LrEwQaeUzdQ32M8 z94-)HeBlC7fj?Z3)F6e6BWQ>Zk%MEN$P$PiB<5c$1y}6ikp$-!aFbWTR>2sY z6a66D4)hopZCGr;`Ot>N1}z_Y>Ulb`FoH-2hX0a#3#M$@blL%I7I>6V!B)WtY!=u- zNvS27$$AWo)-2Xw>x>$$it@50#%=a0S2+{Xdq^w!o+AGW)j5kpOJxq$4$mf%Yo5d#$C&S(L=^V z%Yo5T##76I(M!%t$AQsX##_sQ(MQHd%Yo5X##hUM(ND%t%Yo5f#$U^UF+e6j%YiXa zCQ!?P@&AJ^(YM+EA4Py`V<^EG#tgc*SF#b2LbxpZc zd+shccEMd-1zQD3T@)G+;2PxY80@OYz-Y;0365M#7E83qb<=ZmVqpZ44h;X-tqcBe z8#ScAaUbz)%P&f7B zKX4>K2}WHWT@?pLc)tj;s;2Iz9 z?BN&`@4>*ppaIWTSmYH985kJF1;j0wK%@;gF*5v@T652O!Q$r^LD2^*HK0{4n2Rs^ zAPT^dfKrk|#PLNRLIFKnFoH-2hX1yCJem6)7=^$lg6lp7 zTLnw7f!OLiCl)8LsZK0TXqnDm&)ymu zKvaNrB8LY=7+-imRNxN}BsECkfzo>MVDSJ4hzE-YdVs(N!Z6cQxg&sr&{?J2GgA{tm<3PSFzTn{V zW${H1zF+n$#DC7Yt_M!7;BLBtt%4~ywW9Rg?O5!v=n|FoH-2hX3qY zLG$na^WO&wUhpIgqPhWd@dYnL0XUFQf)^r=FL)s;z&eqG7b1)=cp)nA2QQKuq~Hxe S8OjP^2>=Ih080Q`00RIMRuK^Z literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wordsize.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wordsize.h new file mode 100644 index 0000000..3f40aa7 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wordsize.h @@ -0,0 +1,16 @@ +/* Determine the wordsize from the preprocessor defines. */ + +#if defined __x86_64__ && !defined __ILP32__ +# define __WORDSIZE 64 +#else +# define __WORDSIZE 32 +#define __WORDSIZE32_SIZE_ULONG 0 +#define __WORDSIZE32_PTRDIFF_LONG 0 +#endif + +#define __WORDSIZE_TIME64_COMPAT32 1 + +#ifdef __x86_64__ +/* Both x86-64 and x32 use the 64-bit system call interface. */ +# define __SYSCALL_WORDSIZE 64 +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wordsize.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@bits@wordsize.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..13bbfe6349d46864963925248279a4b3f3dc68c8 GIT binary patch literal 11601 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 QEX1tF#K. + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996-1998 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file backward/binders.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{functional} + */ + +#ifndef _BACKWARD_BINDERS_H +#define _BACKWARD_BINDERS_H 1 + +// Suppress deprecated warning for this file. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // 20.3.6 binders + /** @defgroup binders Binder Classes + * @ingroup functors + * + * Binders turn functions/functors with two arguments into functors + * with a single argument, storing an argument to be applied later. + * For example, a variable @c B of type @c binder1st is constructed + * from a functor @c f and an argument @c x. Later, B's @c + * operator() is called with a single argument @c y. The return + * value is the value of @c f(x,y). @c B can be @a called with + * various arguments (y1, y2, ...) and will in turn call @c + * f(x,y1), @c f(x,y2), ... + * + * The function @c bind1st is provided to save some typing. It takes the + * function and an argument as parameters, and returns an instance of + * @c binder1st. + * + * The type @c binder2nd and its creator function @c bind2nd do the same + * thing, but the stored argument is passed as the second parameter instead + * of the first, e.g., @c bind2nd(std::minus(),1.3) will create a + * functor whose @c operator() accepts a floating-point number, subtracts + * 1.3 from it, and returns the result. (If @c bind1st had been used, + * the functor would perform 1.3 - x instead. + * + * Creator-wrapper functions like @c bind1st are intended to be used in + * calling algorithms. Their return values will be temporary objects. + * (The goal is to not require you to type names like + * @c std::binder1st> for declaring a variable to hold the + * return value from @c bind1st(std::plus(),5). + * + * These become more useful when combined with the composition functions. + * + * These functions are deprecated in C++11 and can be replaced by + * @c std::bind (or @c std::tr1::bind) which is more powerful and flexible, + * supporting functions with any number of arguments. Uses of @c bind1st + * can be replaced by @c std::bind(f, x, std::placeholders::_1) and + * @c bind2nd by @c std::bind(f, std::placeholders::_1, x). + * @{ + */ + /// One of the @link binders binder functors@endlink. + template + class binder1st + : public unary_function + { + protected: + _Operation op; + typename _Operation::first_argument_type value; + + public: + binder1st(const _Operation& __x, + const typename _Operation::first_argument_type& __y) + : op(__x), value(__y) { } + + typename _Operation::result_type + operator()(const typename _Operation::second_argument_type& __x) const + { return op(value, __x); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 109. Missing binders for non-const sequence elements + typename _Operation::result_type + operator()(typename _Operation::second_argument_type& __x) const + { return op(value, __x); } + } _GLIBCXX11_DEPRECATED_SUGGEST("std::bind"); + + /// One of the @link binders binder functors@endlink. + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::bind") + inline binder1st<_Operation> + bind1st(const _Operation& __fn, const _Tp& __x) + { + typedef typename _Operation::first_argument_type _Arg1_type; + return binder1st<_Operation>(__fn, _Arg1_type(__x)); + } + + /// One of the @link binders binder functors@endlink. + template + class binder2nd + : public unary_function + { + protected: + _Operation op; + typename _Operation::second_argument_type value; + + public: + binder2nd(const _Operation& __x, + const typename _Operation::second_argument_type& __y) + : op(__x), value(__y) { } + + typename _Operation::result_type + operator()(const typename _Operation::first_argument_type& __x) const + { return op(__x, value); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 109. Missing binders for non-const sequence elements + typename _Operation::result_type + operator()(typename _Operation::first_argument_type& __x) const + { return op(__x, value); } + } _GLIBCXX11_DEPRECATED_SUGGEST("std::bind"); + + /// One of the @link binders binder functors@endlink. + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::bind") + inline binder2nd<_Operation> + bind2nd(const _Operation& __fn, const _Tp& __x) + { + typedef typename _Operation::second_argument_type _Arg2_type; + return binder2nd<_Operation>(__fn, _Arg2_type(__x)); + } + /** @} */ + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#pragma GCC diagnostic pop + +#endif /* _BACKWARD_BINDERS_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@backward@binders.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@backward@binders.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f2e92884b5458032df8456417bc56d3b3e0f8374 GIT binary patch literal 18656 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bit b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bit new file mode 100644 index 0000000..a481781 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bit @@ -0,0 +1,500 @@ +// -*- C++ -*- + +// Copyright (C) 2018-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bit + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_BIT +#define _GLIBCXX_BIT 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus >= 201402L + +#include // for std::integral +#include + +#if _GLIBCXX_HOSTED || __has_include() +# include +#else +# include +/// @cond undocumented +namespace __gnu_cxx +{ + template + struct __int_traits + { + static constexpr int __digits = std::numeric_limits<_Tp>::digits; + static constexpr _Tp __max = std::numeric_limits<_Tp>::max(); + }; +} +/// @endcond +#endif + +#define __glibcxx_want_bit_cast +#define __glibcxx_want_byteswap +#define __glibcxx_want_bitops +#define __glibcxx_want_int_pow2 +#define __glibcxx_want_endian +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup bit_manip Bit manipulation + * @ingroup numerics + * + * Utilities for examining and manipulating individual bits. + * + * @{ + */ + +#ifdef __cpp_lib_bit_cast // C++ >= 20 + + /// Create a value of type `To` from the bits of `from`. + /** + * @tparam _To A trivially-copyable type. + * @param __from A trivially-copyable object of the same size as `_To`. + * @return An object of type `_To`. + * @since C++20 + */ + template + [[nodiscard]] + constexpr _To + bit_cast(const _From& __from) noexcept +#ifdef __cpp_concepts + requires (sizeof(_To) == sizeof(_From)) + && is_trivially_copyable_v<_To> && is_trivially_copyable_v<_From> +#endif + { + return __builtin_bit_cast(_To, __from); + } +#endif // __cpp_lib_bit_cast + +#ifdef __cpp_lib_byteswap // C++ >= 23 + + /// Reverse order of bytes in the object representation of `value`. + /** + * @tparam _Tp An integral type. + * @param __value An object of integer type. + * @return An object of the same type, with the bytes reversed. + * @since C++23 + */ + template + [[nodiscard]] + constexpr _Tp + byteswap(_Tp __value) noexcept + { + if constexpr (sizeof(_Tp) == 1) + return __value; +#if __cpp_if_consteval >= 202106L && __CHAR_BIT__ == 8 + if !consteval + { + if constexpr (sizeof(_Tp) == 2) + return __builtin_bswap16(__value); + if constexpr (sizeof(_Tp) == 4) + return __builtin_bswap32(__value); + if constexpr (sizeof(_Tp) == 8) + return __builtin_bswap64(__value); + if constexpr (sizeof(_Tp) == 16) +#if __has_builtin(__builtin_bswap128) + return __builtin_bswap128(__value); +#else + return (__builtin_bswap64(__value >> 64) + | (static_cast<_Tp>(__builtin_bswap64(__value)) << 64)); +#endif + } +#endif + + // Fallback implementation that handles even __int24 etc. + using _Up = typename __make_unsigned<__remove_cv_t<_Tp>>::__type; + size_t __diff = __CHAR_BIT__ * (sizeof(_Tp) - 1); + _Up __mask1 = static_cast(~0); + _Up __mask2 = __mask1 << __diff; + _Up __val = __value; + for (size_t __i = 0; __i < sizeof(_Tp) / 2; ++__i) + { + _Up __byte1 = __val & __mask1; + _Up __byte2 = __val & __mask2; + __val = (__val ^ __byte1 ^ __byte2 + ^ (__byte1 << __diff) ^ (__byte2 >> __diff)); + __mask1 <<= __CHAR_BIT__; + __mask2 >>= __CHAR_BIT__; + __diff -= 2 * __CHAR_BIT__; + } + return __val; + } +#endif // __cpp_lib_byteswap + + /// @cond undocumented + + template + constexpr _Tp + __rotl(_Tp __x, int __s) noexcept + { + constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; + if _GLIBCXX17_CONSTEXPR ((_Nd & (_Nd - 1)) == 0) + { + // Variant for power of two _Nd which the compiler can + // easily pattern match. + constexpr unsigned __uNd = _Nd; + const unsigned __r = __s; + return (__x << (__r % __uNd)) | (__x >> ((-__r) % __uNd)); + } + const int __r = __s % _Nd; + if (__r == 0) + return __x; + else if (__r > 0) + return (__x << __r) | (__x >> ((_Nd - __r) % _Nd)); + else + return (__x >> -__r) | (__x << ((_Nd + __r) % _Nd)); // rotr(x, -r) + } + + template + constexpr _Tp + __rotr(_Tp __x, int __s) noexcept + { + constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; + if _GLIBCXX17_CONSTEXPR ((_Nd & (_Nd - 1)) == 0) + { + // Variant for power of two _Nd which the compiler can + // easily pattern match. + constexpr unsigned __uNd = _Nd; + const unsigned __r = __s; + return (__x >> (__r % __uNd)) | (__x << ((-__r) % __uNd)); + } + const int __r = __s % _Nd; + if (__r == 0) + return __x; + else if (__r > 0) + return (__x >> __r) | (__x << ((_Nd - __r) % _Nd)); + else + return (__x << -__r) | (__x >> ((_Nd + __r) % _Nd)); // rotl(x, -r) + } + + template + constexpr int + __countl_zero(_Tp __x) noexcept + { + using __gnu_cxx::__int_traits; + constexpr auto _Nd = __int_traits<_Tp>::__digits; + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__builtin_clzg) + return __builtin_clzg(__x, _Nd); +#else + if (__x == 0) + return _Nd; + + constexpr auto _Nd_ull = __int_traits::__digits; + constexpr auto _Nd_ul = __int_traits::__digits; + constexpr auto _Nd_u = __int_traits::__digits; + + if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_u) + { + constexpr int __diff = _Nd_u - _Nd; + return __builtin_clz(__x) - __diff; + } + else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ul) + { + constexpr int __diff = _Nd_ul - _Nd; + return __builtin_clzl(__x) - __diff; + } + else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ull) + { + constexpr int __diff = _Nd_ull - _Nd; + return __builtin_clzll(__x) - __diff; + } + else // (_Nd > _Nd_ull) + { + static_assert(_Nd <= (2 * _Nd_ull), + "Maximum supported integer size is 128-bit"); + + unsigned long long __high = __x >> _Nd_ull; + if (__high != 0) + { + constexpr int __diff = (2 * _Nd_ull) - _Nd; + return __builtin_clzll(__high) - __diff; + } + constexpr auto __max_ull = __int_traits::__max; + unsigned long long __low = __x & __max_ull; + return (_Nd - _Nd_ull) + __builtin_clzll(__low); + } +#endif + } + + template + constexpr int + __countl_one(_Tp __x) noexcept + { + return std::__countl_zero<_Tp>((_Tp)~__x); + } + + template + constexpr int + __countr_zero(_Tp __x) noexcept + { + using __gnu_cxx::__int_traits; + constexpr auto _Nd = __int_traits<_Tp>::__digits; + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__builtin_ctzg) + return __builtin_ctzg(__x, _Nd); +#else + if (__x == 0) + return _Nd; + + constexpr auto _Nd_ull = __int_traits::__digits; + constexpr auto _Nd_ul = __int_traits::__digits; + constexpr auto _Nd_u = __int_traits::__digits; + + if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_u) + return __builtin_ctz(__x); + else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ul) + return __builtin_ctzl(__x); + else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ull) + return __builtin_ctzll(__x); + else // (_Nd > _Nd_ull) + { + static_assert(_Nd <= (2 * _Nd_ull), + "Maximum supported integer size is 128-bit"); + + constexpr auto __max_ull = __int_traits::__max; + unsigned long long __low = __x & __max_ull; + if (__low != 0) + return __builtin_ctzll(__low); + unsigned long long __high = __x >> _Nd_ull; + return __builtin_ctzll(__high) + _Nd_ull; + } +#endif + } + + template + constexpr int + __countr_one(_Tp __x) noexcept + { + return std::__countr_zero((_Tp)~__x); + } + + template + constexpr int + __popcount(_Tp __x) noexcept + { +#if _GLIBCXX_USE_BUILTIN_TRAIT(__builtin_popcountg) + return __builtin_popcountg(__x); +#else + using __gnu_cxx::__int_traits; + constexpr auto _Nd = __int_traits<_Tp>::__digits; + + constexpr auto _Nd_ull = __int_traits::__digits; + constexpr auto _Nd_ul = __int_traits::__digits; + constexpr auto _Nd_u = __int_traits::__digits; + + if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_u) + return __builtin_popcount(__x); + else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ul) + return __builtin_popcountl(__x); + else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ull) + return __builtin_popcountll(__x); + else // (_Nd > _Nd_ull) + { + static_assert(_Nd <= (2 * _Nd_ull), + "Maximum supported integer size is 128-bit"); + + constexpr auto __max_ull = __int_traits::__max; + unsigned long long __low = __x & __max_ull; + unsigned long long __high = __x >> _Nd_ull; + return __builtin_popcountll(__low) + __builtin_popcountll(__high); + } +#endif + } + + template + constexpr bool + __has_single_bit(_Tp __x) noexcept + { return std::__popcount(__x) == 1; } + + template + constexpr _Tp + __bit_ceil(_Tp __x) noexcept + { + using __gnu_cxx::__int_traits; + constexpr auto _Nd = __int_traits<_Tp>::__digits; + if (__x == 0 || __x == 1) + return 1; + auto __shift_exponent = _Nd - std::__countl_zero((_Tp)(__x - 1u)); + // If the shift exponent equals _Nd then the correct result is not + // representable as a value of _Tp, and so the result is undefined. + // Want that undefined behaviour to be detected in constant expressions, + // by UBSan, and by debug assertions. + if (!std::__is_constant_evaluated()) + { + __glibcxx_assert( __shift_exponent != __int_traits<_Tp>::__digits ); + } + + using __promoted_type = decltype(__x << 1); + if _GLIBCXX17_CONSTEXPR (!is_same<__promoted_type, _Tp>::value) + { + // If __x undergoes integral promotion then shifting by _Nd is + // not undefined. In order to make the shift undefined, so that + // it is diagnosed in constant expressions and by UBsan, we also + // need to "promote" the shift exponent to be too large for the + // promoted type. + const int __extra_exp = sizeof(__promoted_type) / sizeof(_Tp) / 2; + __shift_exponent |= (__shift_exponent & _Nd) << __extra_exp; + } + return (_Tp)1u << __shift_exponent; + } + + template + constexpr _Tp + __bit_floor(_Tp __x) noexcept + { + constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; + if (__x == 0) + return 0; + return (_Tp)1u << (_Nd - std::__countl_zero((_Tp)(__x >> 1))); + } + + template + constexpr int + __bit_width(_Tp __x) noexcept + { + constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; + return _Nd - std::__countl_zero(__x); + } + + /// @endcond + +#ifdef __cpp_lib_bitops // C++ >= 20 + + /// @cond undocumented + template + concept __unsigned_integer = __is_unsigned_integer<_Tp>::value; + /// @endcond + + // [bit.rot], rotating + + /// Rotate `x` to the left by `s` bits. + template<__unsigned_integer _Tp> + [[nodiscard]] constexpr _Tp + rotl(_Tp __x, int __s) noexcept + { return std::__rotl(__x, __s); } + + /// Rotate `x` to the right by `s` bits. + template<__unsigned_integer _Tp> + [[nodiscard]] constexpr _Tp + rotr(_Tp __x, int __s) noexcept + { return std::__rotr(__x, __s); } + + // [bit.count], counting + + /// The number of contiguous zero bits, starting from the highest bit. + template<__unsigned_integer _Tp> + constexpr int + countl_zero(_Tp __x) noexcept + { return std::__countl_zero(__x); } + + /// The number of contiguous one bits, starting from the highest bit. + template<__unsigned_integer _Tp> + constexpr int + countl_one(_Tp __x) noexcept + { return std::__countl_one(__x); } + + /// The number of contiguous zero bits, starting from the lowest bit. + template<__unsigned_integer _Tp> + constexpr int + countr_zero(_Tp __x) noexcept + { return std::__countr_zero(__x); } + + /// The number of contiguous one bits, starting from the lowest bit. + template<__unsigned_integer _Tp> + constexpr int + countr_one(_Tp __x) noexcept + { return std::__countr_one(__x); } + + /// The number of bits set in `x`. + template<__unsigned_integer _Tp> + constexpr int + popcount(_Tp __x) noexcept + { return std::__popcount(__x); } +#endif // __cpp_lib_bitops + +#ifdef __cpp_lib_int_pow2 // C++ >= 20 + // [bit.pow.two], integral powers of 2 + + /// True if `x` is a power of two, false otherwise. + template<__unsigned_integer _Tp> + constexpr bool + has_single_bit(_Tp __x) noexcept + { return std::__has_single_bit(__x); } + + /// The smallest power-of-two not less than `x`. + template<__unsigned_integer _Tp> + constexpr _Tp + bit_ceil(_Tp __x) noexcept + { return std::__bit_ceil(__x); } + + /// The largest power-of-two not greater than `x`. + template<__unsigned_integer _Tp> + constexpr _Tp + bit_floor(_Tp __x) noexcept + { return std::__bit_floor(__x); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3656. Inconsistent bit operations returning a count + /// The smallest integer greater than the base-2 logarithm of `x`. + template<__unsigned_integer _Tp> + constexpr int + bit_width(_Tp __x) noexcept + { return std::__bit_width(__x); } +#endif // defined (__cpp_lib_int_pow2) + +#ifdef __cpp_lib_endian // C++ >= 20 + + /// Byte order constants + /** + * The platform endianness can be checked by comparing `std::endian::native` + * to one of `std::endian::big` or `std::endian::little`. + * + * @since C++20 + */ + enum class endian + { + little = __ORDER_LITTLE_ENDIAN__, + big = __ORDER_BIG_ENDIAN__, + native = __BYTE_ORDER__ + }; +#endif // __cpp_lib_endian + + /// @} + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++14 +#endif // _GLIBCXX_BIT diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bit.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bit.blob new file mode 100644 index 0000000000000000000000000000000000000000..aab1f0e5b02218f8b00c4911f2cc1dbe5a0f370c GIT binary patch literal 22341 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. + +/** @file bits/alloc_traits.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _ALLOC_TRAITS_H +#define _ALLOC_TRAITS_H 1 + +#include +#include +#if __cplusplus >= 201103L +# include +# include +# if _GLIBCXX_HOSTED +# include +# endif +# if __cpp_exceptions +# include // __make_move_if_noexcept_iterator +# endif +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if __cplusplus >= 201103L + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++14-extensions" // for variable templates +#pragma GCC diagnostic ignored "-Wc++17-extensions" // for if-constexpr + + /// @cond undocumented + struct __allocator_traits_base + { +#if __cpp_concepts + template +#else + template +#endif + struct __rebind : __replace_first_arg<_Tp, _Up> + { + static_assert(is_same< + typename __replace_first_arg<_Tp, typename _Tp::value_type>::type, + _Tp>::value, + "allocator_traits::rebind_alloc must be A"); + }; + + template +#if __cpp_concepts + requires requires { typename _Tp::template rebind<_Up>::other; } + struct __rebind<_Tp, _Up> +#else + struct __rebind<_Tp, _Up, + __void_t::other>> +#endif + { + using type = typename _Tp::template rebind<_Up>::other; + + static_assert(is_same< + typename _Tp::template rebind::other, + _Tp>::value, + "allocator_traits::rebind_alloc must be A"); + }; + + protected: + template + using __pointer = typename _Tp::pointer; + template + using __c_pointer = typename _Tp::const_pointer; + template + using __v_pointer = typename _Tp::void_pointer; + template + using __cv_pointer = typename _Tp::const_void_pointer; + template + using __pocca = typename _Tp::propagate_on_container_copy_assignment; + template + using __pocma = typename _Tp::propagate_on_container_move_assignment; + template + using __pocs = typename _Tp::propagate_on_container_swap; + template + using __equal = __type_identity; + + // __has_allocate_hint is true if a.allocate(n, hint) is well-formed. +#if __cpp_concepts + template + static constexpr bool __has_allocate_hint + = requires (_Alloc& __a, _Sz __n, _Vp __hint) { + __a.allocate(__n, __hint); + }; +#else + template + using __allocate_hint_t + = decltype(std::declval<_Alloc&>() + .allocate(std::declval<_Sz>(), std::declval<_Vp>())); + template + static constexpr bool __has_allocate_hint = false; + template + static constexpr bool + __has_allocate_hint<_Alloc, _Sz, _Vp, + __void_t<__allocate_hint_t<_Alloc, _Sz, _Vp>>> + = true; +#endif + + // __has_construct is true if a.construct(p, args...) is well-formed. + // __can_construct is true if either __has_construct is true, or if + // a placement new-expression for T(args...) is well-formed. We use this + // to constrain allocator_traits::construct, as a libstdc++ extension. +#if __cpp_concepts + template + static constexpr bool __has_construct + = requires (_Alloc& __a, _Tp* __p, _Args&&... __args) { + __a.construct(__p, std::forward<_Args>(__args)...); + }; + template + static constexpr bool __can_construct_at + = requires (_Tp* __p, _Args&&... __args) { +#if __cpp_constexpr_dynamic_alloc + std::construct_at(__p, std::forward<_Args>(__args)...); +#else + ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); +#endif + }; + template + static constexpr bool __can_construct + = __has_construct<_Alloc, _Tp, _Args...> + || __can_construct_at<_Tp, _Args...>; +#else + template + using __construct_t + = decltype(std::declval<_Alloc&>().construct(std::declval<_Tp*>(), + std::declval<_Args>()...)); + template + static constexpr bool __has_construct_impl = false; + template + static constexpr bool + __has_construct_impl<_Alloc, _Tp, + __void_t<__construct_t<_Alloc, _Tp, _Args...>>, + _Args...> + = true; + template + static constexpr bool __has_construct + = __has_construct_impl<_Alloc, _Tp, void, _Args...>; + template + using __new_expr_t + = decltype(::new((void*)0) _Tp(std::declval<_Args>()...)); + template + static constexpr bool __has_new_expr = false; + template + static constexpr bool + __has_new_expr<_Tp, __void_t<__new_expr_t<_Tp, _Args...>>, _Args...> + = true; + template + static constexpr bool __can_construct + = __has_construct<_Alloc, _Tp, _Args...> + || __has_new_expr<_Tp, void, _Args...>; +#endif + + // __has_destroy is true if a.destroy(p) is well-formed. +#if __cpp_concepts + template + static constexpr bool __has_destroy = requires (_Alloc& __a, _Tp* __p) { + __a.destroy(__p); + }; +#else + template + using __destroy_t + = decltype(std::declval<_Alloc&>().destroy(std::declval<_Tp*>())); + template + static constexpr bool __has_destroy = false; + template + static constexpr bool __has_destroy<_Alloc, _Tp, + __void_t<__destroy_t<_Alloc, _Tp>>> + = true; +#endif + + // __has_max_size is true if a.max_size() is well-formed. +#if __cpp_concepts + template + static constexpr bool __has_max_size = requires (const _Alloc& __a) { + __a.max_size(); + }; +#else + template + using __max_size_t = decltype(std::declval().max_size()); + template + static constexpr bool __has_max_size = false; + template + static constexpr bool __has_max_size<_Alloc, + __void_t<__max_size_t<_Alloc>>> + = true; +#endif + + // __has_soccc is true if a.select_on_container_copy_construction() + // is well-formed. +#if __cpp_concepts + template + static constexpr bool __has_soccc = requires (const _Alloc& __a) { + __a.select_on_container_copy_construction(); + }; +#else + template + using __soccc_t + = decltype(std::declval() + .select_on_container_copy_construction()); + template + static constexpr bool __has_soccc = false; + template + static constexpr bool __has_soccc<_Alloc, __void_t<__soccc_t<_Alloc>>> + = true; +#endif + }; + + template + using __alloc_rebind + = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type; + /// @endcond + + /** + * @brief Uniform interface to all allocator types. + * @headerfile memory + * @ingroup allocators + * @since C++11 + */ + template + struct allocator_traits : __allocator_traits_base + { + /// The allocator type + typedef _Alloc allocator_type; + /// The allocated type + typedef typename _Alloc::value_type value_type; + + /** + * @brief The allocator's pointer type. + * + * @c Alloc::pointer if that type exists, otherwise @c value_type* + */ + using pointer = __detected_or_t; + + private: + // Select _Func<_Alloc> or pointer_traits::rebind<_Tp> + template class _Func, typename _Tp, typename = void> + struct _Ptr + { + using type = typename pointer_traits::template rebind<_Tp>; + }; + + template class _Func, typename _Tp> + struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>> + { + using type = _Func<_Alloc>; + }; + + // Select _A2::difference_type or pointer_traits<_Ptr>::difference_type + template + struct _Diff + { using type = typename pointer_traits<_PtrT>::difference_type; }; + + template + struct _Diff<_A2, _PtrT, __void_t> + { using type = typename _A2::difference_type; }; + + // Select _A2::size_type or make_unsigned<_DiffT>::type + template + struct _Size : make_unsigned<_DiffT> { }; + + template + struct _Size<_A2, _DiffT, __void_t> + { using type = typename _A2::size_type; }; + + public: + /** + * @brief The allocator's const pointer type. + * + * @c Alloc::const_pointer if that type exists, otherwise + * pointer_traits::rebind + */ + using const_pointer = typename _Ptr<__c_pointer, const value_type>::type; + + /** + * @brief The allocator's void pointer type. + * + * @c Alloc::void_pointer if that type exists, otherwise + * pointer_traits::rebind + */ + using void_pointer = typename _Ptr<__v_pointer, void>::type; + + /** + * @brief The allocator's const void pointer type. + * + * @c Alloc::const_void_pointer if that type exists, otherwise + * pointer_traits::rebind + */ + using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type; + + /** + * @brief The allocator's difference type + * + * @c Alloc::difference_type if that type exists, otherwise + * pointer_traits::difference_type + */ + using difference_type = typename _Diff<_Alloc, pointer>::type; + + /** + * @brief The allocator's size type + * + * @c Alloc::size_type if that type exists, otherwise + * make_unsigned::type + */ + using size_type = typename _Size<_Alloc, difference_type>::type; + + /** + * @brief How the allocator is propagated on copy assignment + * + * @c Alloc::propagate_on_container_copy_assignment if that type exists, + * otherwise @c false_type + */ + using propagate_on_container_copy_assignment + = __detected_or_t; + + /** + * @brief How the allocator is propagated on move assignment + * + * @c Alloc::propagate_on_container_move_assignment if that type exists, + * otherwise @c false_type + */ + using propagate_on_container_move_assignment + = __detected_or_t; + + /** + * @brief How the allocator is propagated on swap + * + * @c Alloc::propagate_on_container_swap if that type exists, + * otherwise @c false_type + */ + using propagate_on_container_swap + = __detected_or_t; + + /** + * @brief Whether all instances of the allocator type compare equal. + * + * @c Alloc::is_always_equal if that type exists, + * otherwise @c is_empty::type + */ + using is_always_equal + = typename __detected_or_t, __equal, _Alloc>::type; + + template + using rebind_alloc = __alloc_rebind<_Alloc, _Tp>; + template + using rebind_traits = allocator_traits>; + + /** + * @brief Allocate memory. + * @param __a An allocator. + * @param __n The number of objects to allocate space for. + * + * Calls @c a.allocate(n) + */ + _GLIBCXX_NODISCARD static _GLIBCXX20_CONSTEXPR pointer + allocate(_Alloc& __a, size_type __n) + { return __a.allocate(__n); } + + /** + * @brief Allocate memory. + * @param __a An allocator. + * @param __n The number of objects to allocate space for. + * @param __hint Aid to locality. + * @return Memory of suitable size and alignment for @a n objects + * of type @c value_type + * + * Returns a.allocate(n, hint) if that expression is + * well-formed, otherwise returns @c a.allocate(n) + */ + _GLIBCXX_NODISCARD static _GLIBCXX20_CONSTEXPR pointer + allocate(_Alloc& __a, size_type __n, const_void_pointer __hint) + { + if constexpr (__has_allocate_hint<_Alloc, size_type, const_void_pointer>) + return __a.allocate(__n, __hint); + else + return __a.allocate(__n); + } + + /** + * @brief Deallocate memory. + * @param __a An allocator. + * @param __p Pointer to the memory to deallocate. + * @param __n The number of objects space was allocated for. + * + * Calls a.deallocate(p, n) + */ + static _GLIBCXX20_CONSTEXPR void + deallocate(_Alloc& __a, pointer __p, size_type __n) + { __a.deallocate(__p, __n); } + + /** + * @brief Construct an object of type `_Tp` + * @param __a An allocator. + * @param __p Pointer to memory of suitable size and alignment for Tp + * @param __args Constructor arguments. + * + * Calls __a.construct(__p, std::forward(__args)...) + * if that expression is well-formed, otherwise uses placement-new + * to construct an object of type @a _Tp at location @a __p from the + * arguments @a __args... + */ + template +#if __cpp_concepts && __cpp_constexpr_dynamic_alloc + requires __can_construct<_Alloc, _Tp, _Args...> + static constexpr void +#else + static __enable_if_t<__can_construct<_Alloc, _Tp, _Args...>> +#endif + construct(_Alloc& __a, _Tp* __p, _Args&&... __args) + noexcept(_S_nothrow_construct<_Tp, _Args...>()) + { + if constexpr (__has_construct<_Alloc, _Tp, _Args...>) + __a.construct(__p, std::forward<_Args>(__args)...); + else + std::_Construct(__p, std::forward<_Args>(__args)...); + } + + /** + * @brief Destroy an object of type @a _Tp + * @param __a An allocator. + * @param __p Pointer to the object to destroy + * + * Calls @c __a.destroy(__p) if that expression is well-formed, + * otherwise calls @c __p->~_Tp() + */ + template + static _GLIBCXX20_CONSTEXPR void + destroy(_Alloc& __a, _Tp* __p) + noexcept(_S_nothrow_destroy<_Tp>()) + { + if constexpr (__has_destroy<_Alloc, _Tp>) + __a.destroy(__p); + else + std::_Destroy(__p); + } + + /** + * @brief The maximum supported allocation size + * @param __a An allocator. + * @return @c __a.max_size() or @c numeric_limits::max() + * + * Returns @c __a.max_size() if that expression is well-formed, + * otherwise returns @c numeric_limits::max() + */ + static _GLIBCXX20_CONSTEXPR size_type + max_size(const _Alloc& __a) noexcept + { + if constexpr (__has_max_size<_Alloc>) + return __a.max_size(); + else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2466. allocator_traits::max_size() default behavior is incorrect + return __gnu_cxx::__numeric_traits::__max + / sizeof(value_type); + } + + /** + * @brief Obtain an allocator to use when copying a container. + * @param __rhs An allocator. + * @return @c __rhs.select_on_container_copy_construction() or @a __rhs + * + * Returns @c __rhs.select_on_container_copy_construction() if that + * expression is well-formed, otherwise returns @a __rhs + */ + static _GLIBCXX20_CONSTEXPR _Alloc + select_on_container_copy_construction(const _Alloc& __rhs) + { + if constexpr (__has_soccc<_Alloc>) + return __rhs.select_on_container_copy_construction(); + else + return __rhs; + } + + private: +#if __cpp_constexpr >= 201304 // >= C++14 + template + static constexpr bool + _S_nothrow_construct(_Alloc* __a = nullptr, _Tp* __p = nullptr) + { + if constexpr (__has_construct<_Alloc, _Tp, _Args...>) + return noexcept(__a->construct(__p, std::declval<_Args>()...)); + else + return __is_nothrow_new_constructible<_Tp, _Args...>; + } + + template + static constexpr bool + _S_nothrow_destroy(_Alloc* __a = nullptr, _Tp* __p = nullptr) + { + if constexpr (__has_destroy<_Alloc, _Tp>) + return noexcept(__a->destroy(__p)); + else + return is_nothrow_destructible<_Tp>::value; + } +#else + template + static constexpr + __enable_if_t<__has_construct<_Alloc, _Tp, _Args...>, bool> + _S_nothrow_construct(_Alloc* __a = nullptr, _Tp* __p = nullptr) + { return noexcept(__a->construct(__p, std::declval<_Args>()...)); } + + template + static constexpr + __enable_if_t, bool> + _S_nothrow_construct(_Alloc* = nullptr, _Tp* __p = nullptr) + { return __is_nothrow_new_constructible<_Tp, _Args...>; } + + template + static constexpr + __enable_if_t<__has_destroy<_Alloc, _Tp>, bool> + _S_nothrow_destroy(_Alloc* __a = nullptr, _Tp* __p = nullptr) + { return noexcept(__a->destroy(__p)); } + + template + static constexpr + __enable_if_t, bool> + _S_nothrow_destroy(_Alloc* = nullptr, _Tp* __p = nullptr) + { return is_nothrow_destructible<_Tp>::value; } +#endif + }; +#pragma GCC diagnostic pop + +#if _GLIBCXX_HOSTED + /** + * @brief Partial specialization for `std::allocator` + * @headerfile memory + * @ingroup allocators + * @since C++11 + * @see std::allocator_traits + */ + template + struct allocator_traits> + { + /// The allocator type + using allocator_type = allocator<_Tp>; + + /// The allocated type + using value_type = _Tp; + + /// The allocator's pointer type. + using pointer = _Tp*; + + /// The allocator's const pointer type. + using const_pointer = const _Tp*; + + /// The allocator's void pointer type. + using void_pointer = void*; + + /// The allocator's const void pointer type. + using const_void_pointer = const void*; + + /// The allocator's difference type + using difference_type = std::ptrdiff_t; + + /// The allocator's size type + using size_type = std::size_t; + + /// How the allocator is propagated on copy assignment + using propagate_on_container_copy_assignment = false_type; + + /// How the allocator is propagated on move assignment + using propagate_on_container_move_assignment = true_type; + + /// How the allocator is propagated on swap + using propagate_on_container_swap = false_type; + + /// Whether all instances of the allocator type compare equal. + using is_always_equal = true_type; + + template + using rebind_alloc = allocator<_Up>; + + template + using rebind_traits = allocator_traits>; + + /** + * @brief Allocate memory. + * @param __a An allocator. + * @param __n The number of objects to allocate space for. + * + * Calls @c a.allocate(n) + */ + [[__nodiscard__,__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR pointer + allocate(allocator_type& __a, size_type __n) + { return __a.allocate(__n); } + + /** + * @brief Allocate memory. + * @param __a An allocator. + * @param __n The number of objects to allocate space for. + * @param __hint Aid to locality. + * @return Memory of suitable size and alignment for @a n objects + * of type @c value_type + * + * Returns a.allocate(n, hint) + */ + [[__nodiscard__,__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR pointer + allocate(allocator_type& __a, size_type __n, + [[maybe_unused]] const_void_pointer __hint) + { +#if __cplusplus <= 201703L + return __a.allocate(__n, __hint); +#else + return __a.allocate(__n); +#endif + } + + /** + * @brief Deallocate memory. + * @param __a An allocator. + * @param __p Pointer to the memory to deallocate. + * @param __n The number of objects space was allocated for. + * + * Calls a.deallocate(p, n) + */ + [[__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR void + deallocate(allocator_type& __a, pointer __p, size_type __n) + { __a.deallocate(__p, __n); } + + /** + * @brief Construct an object of type `_Up` + * @param __a An allocator. + * @param __p Pointer to memory of suitable size and alignment for + * an object of type `_Up`. + * @param __args Constructor arguments. + * + * Calls `__a.construct(__p, std::forward<_Args>(__args)...)` + * in C++11, C++14 and C++17. Changed in C++20 to call + * `std::construct_at(__p, std::forward<_Args>(__args)...)` instead. + */ + template + [[__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR void + construct(allocator_type& __a __attribute__((__unused__)), + _Up* __p, _Args&&... __args) +#if __cplusplus <= 201703L + noexcept(noexcept(__a.construct(__p, std::forward<_Args>(__args)...))) +#else + noexcept(__is_nothrow_new_constructible<_Up, _Args...>) +#endif + { +#if __cplusplus <= 201703L + __a.construct(__p, std::forward<_Args>(__args)...); +#elif __cpp_constexpr_dynamic_alloc // >= C++20 + std::construct_at(__p, std::forward<_Args>(__args)...); +#else + std::_Construct(__p, std::forward<_Args>(__args)...); +#endif + } + + /** + * @brief Destroy an object of type @a _Up + * @param __a An allocator. + * @param __p Pointer to the object to destroy + * + * Calls @c __a.destroy(__p). + */ + template + [[__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR void + destroy(allocator_type& __a __attribute__((__unused__)), _Up* __p) + noexcept(is_nothrow_destructible<_Up>::value) + { +#if __cplusplus <= 201703L + __a.destroy(__p); +#else + std::destroy_at(__p); +#endif + } + + /** + * @brief The maximum supported allocation size + * @param __a An allocator. + * @return @c __a.max_size() + */ + [[__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR size_type + max_size(const allocator_type& __a __attribute__((__unused__))) noexcept + { +#if __cplusplus <= 201703L + return __a.max_size(); +#else + return size_t(-1) / sizeof(value_type); +#endif + } + + /** + * @brief Obtain an allocator to use when copying a container. + * @param __rhs An allocator. + * @return @c __rhs + */ + [[__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR allocator_type + select_on_container_copy_construction(const allocator_type& __rhs) + { return __rhs; } + }; + + /** + * @brief Explicit specialization for `std::allocator` + * @headerfile memory + * @ingroup allocators + * @since C++11 + * @see std::allocator_traits + */ + template<> + struct allocator_traits> + { + /// The allocator type + using allocator_type = allocator; + + /// The allocated type + using value_type = void; + + /// The allocator's pointer type. + using pointer = void*; + + /// The allocator's const pointer type. + using const_pointer = const void*; + + /// The allocator's void pointer type. + using void_pointer = void*; + + /// The allocator's const void pointer type. + using const_void_pointer = const void*; + + /// The allocator's difference type + using difference_type = std::ptrdiff_t; + + /// The allocator's size type + using size_type = std::size_t; + + /// How the allocator is propagated on copy assignment + using propagate_on_container_copy_assignment = false_type; + + /// How the allocator is propagated on move assignment + using propagate_on_container_move_assignment = true_type; + + /// How the allocator is propagated on swap + using propagate_on_container_swap = false_type; + + /// Whether all instances of the allocator type compare equal. + using is_always_equal = true_type; + + template + using rebind_alloc = allocator<_Up>; + + template + using rebind_traits = allocator_traits>; + + /// allocate is ill-formed for allocator + static void* + allocate(allocator_type&, size_type, const void* = nullptr) = delete; + + /// deallocate is ill-formed for allocator + static void + deallocate(allocator_type&, void*, size_type) = delete; + + /** + * @brief Construct an object of type `_Up` + * @param __a An allocator. + * @param __p Pointer to memory of suitable size and alignment for + * an object of type `_Up`. + * @param __args Constructor arguments. + * + * Calls `__a.construct(__p, std::forward<_Args>(__args)...)` + * in C++11, C++14 and C++17. Changed in C++20 to call + * `std::construct_at(__p, std::forward<_Args>(__args)...)` instead. + */ + template + [[__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR void + construct(allocator_type&, _Up* __p, _Args&&... __args) + noexcept(__is_nothrow_new_constructible<_Up, _Args...>) + { std::_Construct(__p, std::forward<_Args>(__args)...); } + + /** + * @brief Destroy an object of type `_Up` + * @param __a An allocator. + * @param __p Pointer to the object to destroy + * + * Invokes the destructor for `*__p`. + */ + template + [[__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR void + destroy(allocator_type&, _Up* __p) + noexcept(is_nothrow_destructible<_Up>::value) + { std::_Destroy(__p); } + + /// max_size is ill-formed for allocator + static size_type + max_size(const allocator_type&) = delete; + + /** + * @brief Obtain an allocator to use when copying a container. + * @param __rhs An allocator. + * @return `__rhs` + */ + [[__gnu__::__always_inline__]] + static _GLIBCXX20_CONSTEXPR allocator_type + select_on_container_copy_construction(const allocator_type& __rhs) + { return __rhs; } + }; +#endif + + /// @cond undocumented +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr + template + [[__gnu__::__always_inline__]] + _GLIBCXX14_CONSTEXPR inline void + __alloc_on_copy(_Alloc& __one, const _Alloc& __two) + { + using __traits = allocator_traits<_Alloc>; + using __pocca = + typename __traits::propagate_on_container_copy_assignment::type; + if constexpr (__pocca::value) + __one = __two; + } + + template + [[__gnu__::__always_inline__]] + constexpr _Alloc + __alloc_on_copy(const _Alloc& __a) + { + typedef allocator_traits<_Alloc> __traits; + return __traits::select_on_container_copy_construction(__a); + } + + template + [[__gnu__::__always_inline__]] + _GLIBCXX14_CONSTEXPR inline void + __alloc_on_move(_Alloc& __one, _Alloc& __two) + { + using __traits = allocator_traits<_Alloc>; + using __pocma + = typename __traits::propagate_on_container_move_assignment::type; + if constexpr (__pocma::value) + __one = std::move(__two); + } + + template + [[__gnu__::__always_inline__]] + _GLIBCXX14_CONSTEXPR inline void + __alloc_on_swap(_Alloc& __one, _Alloc& __two) + { + using __traits = allocator_traits<_Alloc>; + using __pocs = typename __traits::propagate_on_container_swap::type; + if constexpr (__pocs::value) + { + using std::swap; + swap(__one, __two); + } + } +#pragma GCC diagnostic pop + + template, + typename = void> + struct __is_alloc_insertable_impl + : false_type + { }; + + template + struct __is_alloc_insertable_impl<_Alloc, _Tp, _ValueT, + __void_t::construct( + std::declval<_Alloc&>(), std::declval<_ValueT*>(), + std::declval<_Tp>()))>> + : true_type + { }; + + // true if _Alloc::value_type is CopyInsertable into containers using _Alloc + // (might be wrong if _Alloc::construct exists but is not constrained, + // i.e. actually trying to use it would still be invalid. Use with caution.) + template + struct __is_copy_insertable + : __is_alloc_insertable_impl<_Alloc, + typename _Alloc::value_type const&>::type + { }; + +#if _GLIBCXX_HOSTED + // std::allocator<_Tp> just requires CopyConstructible + template + struct __is_copy_insertable> + : is_copy_constructible<_Tp> + { }; +#endif + + // true if _Alloc::value_type is MoveInsertable into containers using _Alloc + // (might be wrong if _Alloc::construct exists but is not constrained, + // i.e. actually trying to use it would still be invalid. Use with caution.) + template + struct __is_move_insertable + : __is_alloc_insertable_impl<_Alloc, typename _Alloc::value_type>::type + { }; + +#if _GLIBCXX_HOSTED + // std::allocator<_Tp> just requires MoveConstructible + template + struct __is_move_insertable> + : is_move_constructible<_Tp> + { }; +#endif + + // Trait to detect Allocator-like types. + template + struct __is_allocator : false_type { }; + + template + struct __is_allocator<_Alloc, + __void_t().allocate(size_t{}))>> + : true_type { }; + + template + using _RequireAllocator + = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type; + + template + using _RequireNotAllocator + = typename enable_if::value, _Alloc>::type; + +#if __cpp_concepts >= 201907L + template + concept __allocator_like = requires (_Alloc& __a) { + typename _Alloc::value_type; + __a.deallocate(__a.allocate(1u), 1u); + }; + + template + concept __not_allocator_like = !__allocator_like<_Alloc>; +#endif + /// @endcond +#endif // C++11 + + /// @cond undocumented + + // To implement Option 3 of DR 431. + template + struct __alloc_swap + { static void _S_do_it(_Alloc&, _Alloc&) _GLIBCXX_NOEXCEPT { } }; + + template + struct __alloc_swap<_Alloc, false> + { + static void + _S_do_it(_Alloc& __one, _Alloc& __two) _GLIBCXX_NOEXCEPT + { + // Precondition: swappable allocators. + if (__one != __two) + swap(__one, __two); + } + }; + +#if __cplusplus >= 201103L + template, + is_nothrow_move_constructible>::value> + struct __shrink_to_fit_aux + { static bool _S_do_it(_Tp&) noexcept { return false; } }; + + template + struct __shrink_to_fit_aux<_Tp, true> + { + _GLIBCXX20_CONSTEXPR + static bool + _S_do_it(_Tp& __c) noexcept + { +#if __cpp_exceptions + try + { + _Tp(__make_move_if_noexcept_iterator(__c.begin()), + __make_move_if_noexcept_iterator(__c.end()), + __c.get_allocator()).swap(__c); + return true; + } + catch(...) + { return false; } +#else + return false; +#endif + } + }; +#endif + + /** + * Destroy a range of objects using the supplied allocator. For + * non-default allocators we do not optimize away invocation of + * destroy() even if _Tp has a trivial destructor. + */ + + template + _GLIBCXX20_CONSTEXPR + void + _Destroy(_ForwardIterator __first, _ForwardIterator __last, + _Allocator& __alloc) + { + for (; __first != __last; ++__first) +#if __cplusplus < 201103L + __alloc.destroy(std::__addressof(*__first)); +#else + allocator_traits<_Allocator>::destroy(__alloc, + std::__addressof(*__first)); +#endif + } + +#if _GLIBCXX_HOSTED + template + __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR + inline void + _Destroy(_ForwardIterator __first, _ForwardIterator __last, + allocator<_Tp>&) + { + std::_Destroy(__first, __last); + } +#endif + + /// @endcond + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // _ALLOC_TRAITS_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@alloc_traits.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@alloc_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3fcad576147793825b007bc715b67444ad0aa7aa GIT binary patch literal 50474 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. + +/** @file bits/allocated_ptr.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _ALLOCATED_PTR_H +#define _ALLOCATED_PTR_H 1 + +#if __cplusplus < 201103L +# include +#else +# include +# include +# include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +/// @cond undocumented + + /// Non-standard RAII type for managing pointers obtained from allocators. + template + struct __allocated_ptr + { + using pointer = typename allocator_traits<_Alloc>::pointer; + using value_type = typename allocator_traits<_Alloc>::value_type; + + /// Take ownership of __ptr + __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept + : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr) + { } + + /// Convert __ptr to allocator's pointer type and take ownership of it + template>> + __allocated_ptr(_Alloc& __a, _Ptr __ptr) + : _M_alloc(std::__addressof(__a)), + _M_ptr(pointer_traits::pointer_to(*__ptr)) + { } + + /// Transfer ownership of the owned pointer + __allocated_ptr(__allocated_ptr&& __gd) noexcept + : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr) + { __gd._M_ptr = nullptr; } + + /// Deallocate the owned pointer + ~__allocated_ptr() + { + if (_M_ptr != nullptr) + std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1); + } + + /// Release ownership of the owned pointer + __allocated_ptr& + operator=(std::nullptr_t) noexcept + { + _M_ptr = nullptr; + return *this; + } + + explicit operator bool() const noexcept { return (bool)_M_ptr; } + + /// Get the address that the owned pointer refers to. + value_type* get() const { return std::__to_address(_M_ptr); } + + pointer release() { return std::__exchange(_M_ptr, nullptr); } + + private: + _Alloc* _M_alloc; + pointer _M_ptr; + }; + + /// Allocate space for a single object using __a. + template + inline __allocated_ptr<_Alloc> + __allocate_guarded(_Alloc& __a) + { + return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) }; + } + + /// RAII type for constructing/destroying an object with an allocated pointer + template + struct __allocated_obj : __allocated_ptr<_Alloc> + { + using value_type = typename __allocated_ptr<_Alloc>::value_type; + + __allocated_obj(__allocated_obj<_Alloc>&&) = default; + + // Default-initialize a value_type at *__ptr + __allocated_obj(__allocated_ptr<_Alloc>&& __ptr) + : __allocated_ptr<_Alloc>(std::move(__ptr)) + { ::new ((void*)this->get()) value_type; } + + // Call the destructor if an object is owned. + ~__allocated_obj() + { + if (static_cast(*this)) + this->get()->~value_type(); + } + + using __allocated_ptr<_Alloc>::operator=; + + value_type& operator*() const { return *this->get(); } + value_type* operator->() const { return this->get(); } + }; + + /// Construct an object in storage allocated using __a. + template + inline __allocated_obj<_Alloc> + __allocate_guarded_obj(_Alloc& __a) + { + return { std::__allocate_guarded(__a) }; + } + +/// @endcond +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocated_ptr.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocated_ptr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..eaf52c974881abb210f3a043c6aa21ad10fe48d7 GIT binary patch literal 21170 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocator.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocator.h new file mode 100644 index 0000000..37452d1 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocator.h @@ -0,0 +1,303 @@ +// Allocators -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/* + * Copyright (c) 1996-1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/allocator.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _ALLOCATOR_H +#define _ALLOCATOR_H 1 + +#include // Define the base class to std::allocator. +#include +#if __cplusplus >= 201103L +#include +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup allocators + * @{ + */ + + // Since C++20 the primary template should be used for allocator, + // but then it would have a non-trivial default ctor and dtor for C++20, + // but trivial for C++98-17, which would be an ABI incompatibility between + // different standard dialects. So C++20 still uses the allocator + // explicit specialization, with the historical ABI properties, but with + // the same members that are present in the primary template. + + /** std::allocator specialization. + * + * @headerfile memory + */ + template<> + class allocator + { + public: + typedef void value_type; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + +#if __cplusplus <= 201703L + // These were removed for C++20, allocator_traits does the right thing. + typedef void* pointer; + typedef const void* const_pointer; + + template + struct rebind + { typedef allocator<_Tp1> other; }; +#endif + +#if __cplusplus >= 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2103. std::allocator propagate_on_container_move_assignment + using propagate_on_container_move_assignment = true_type; + +#if __cplusplus <= 202302L + using is_always_equal + _GLIBCXX20_DEPRECATED_SUGGEST("std::allocator_traits::is_always_equal") + = true_type; +#endif + +#if __cplusplus >= 202002L + // As noted above, these members are present for C++20 to provide the + // same API as the primary template, but still trivial as in pre-C++20. + allocator() = default; + ~allocator() = default; + + template + __attribute__((__always_inline__)) + constexpr + allocator(const allocator<_Up>&) noexcept { } + + // No allocate member because it's ill-formed by LWG 3307. + // No deallocate member because it would be undefined to call it + // with any pointer which wasn't obtained from allocate. +#endif // C++20 +#endif // C++11 + }; + + /** + * @brief The @a standard allocator, as per C++03 [20.4.1]. + * + * See https://gcc.gnu.org/onlinedocs/libstdc++/manual/memory.html#std.util.memory.allocator + * for further details. + * + * @tparam _Tp Type of allocated object. + * + * @headerfile memory + */ + template + class allocator : public __allocator_base<_Tp> + { + public: + typedef _Tp value_type; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + +#if __cplusplus <= 201703L + // These were removed for C++20. + typedef _Tp* pointer; + typedef const _Tp* const_pointer; + typedef _Tp& reference; + typedef const _Tp& const_reference; + + template + struct rebind + { typedef allocator<_Tp1> other; }; +#endif + +#if __cplusplus >= 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2103. std::allocator propagate_on_container_move_assignment + using propagate_on_container_move_assignment = true_type; + +#if __cplusplus <= 202302L + using is_always_equal + _GLIBCXX20_DEPRECATED_SUGGEST("std::allocator_traits::is_always_equal") + = true_type; +#endif +#endif + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3035. std::allocator's constructors should be constexpr + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + allocator() _GLIBCXX_NOTHROW { } + + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + allocator(const allocator& __a) _GLIBCXX_NOTHROW + : __allocator_base<_Tp>(__a) { } + +#if __cplusplus >= 201103L + // Avoid implicit deprecation. + allocator& operator=(const allocator&) = default; +#endif + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + allocator(const allocator<_Tp1>&) _GLIBCXX_NOTHROW { } + + __attribute__((__always_inline__)) +#if __cpp_constexpr_dynamic_alloc + constexpr +#endif + ~allocator() _GLIBCXX_NOTHROW { } + +#if __cplusplus > 201703L + [[nodiscard,__gnu__::__always_inline__]] + constexpr _Tp* + allocate(size_t __n) + { + if (std::__is_constant_evaluated()) + { + if (__builtin_mul_overflow(__n, sizeof(_Tp), &__n)) + std::__throw_bad_array_new_length(); + return static_cast<_Tp*>(::operator new(__n)); + } + + return __allocator_base<_Tp>::allocate(__n, 0); + } + + [[__gnu__::__always_inline__]] + constexpr void + deallocate(_Tp* __p, size_t __n) + { + if (std::__is_constant_evaluated()) + { + ::operator delete(__p); + return; + } + __allocator_base<_Tp>::deallocate(__p, __n); + } +#endif // C++20 + + friend __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR + bool + operator==(const allocator&, const allocator&) _GLIBCXX_NOTHROW + { return true; } + +#if __cpp_impl_three_way_comparison < 201907L + friend __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR + bool + operator!=(const allocator&, const allocator&) _GLIBCXX_NOTHROW + { return false; } +#endif + + // Inherit everything else. + }; + + /** Equality comparison for std::allocator objects + * + * @return true, for all std::allocator objects. + * @relates std::allocator + */ + template + __attribute__((__always_inline__)) + inline _GLIBCXX20_CONSTEXPR bool + operator==(const allocator<_T1>&, const allocator<_T2>&) + _GLIBCXX_NOTHROW + { return true; } + +#if __cpp_impl_three_way_comparison < 201907L + template + __attribute__((__always_inline__)) + inline _GLIBCXX20_CONSTEXPR bool + operator!=(const allocator<_T1>&, const allocator<_T2>&) + _GLIBCXX_NOTHROW + { return false; } +#endif + + /// @cond undocumented + + // Invalid allocator partial specializations. + // allocator_traits::rebind_alloc can be used to form a valid allocator type. + template + class allocator + { + public: + typedef _Tp value_type; + allocator() { } + template allocator(const allocator<_Up>&) { } + }; + + template + class allocator + { + public: + typedef _Tp value_type; + allocator() { } + template allocator(const allocator<_Up>&) { } + }; + + template + class allocator + { + public: + typedef _Tp value_type; + allocator() { } + template allocator(const allocator<_Up>&) { } + }; + /// @endcond + + /// @} group allocator + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class allocator; + extern template class allocator; +#endif + + // Undefine. +#undef __allocator_base + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocator.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@allocator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..d6e49e6a87966fda212334a2ef1b7653d16b0656 GIT binary patch literal 19184 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. + +/** @file bits/basic_ios.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{ios} + */ + +#ifndef _BASIC_IOS_H +#define _BASIC_IOS_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + inline const _Facet& + __check_facet(const _Facet* __f) + { + if (!__f) + __throw_bad_cast(); + return *__f; + } + + /** + * @brief Template class basic_ios, virtual base class for all + * stream classes. + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * Most of the member functions called dispatched on stream objects + * (e.g., @c std::cout.foo(bar);) are consolidated in this class. + */ + template + class basic_ios : public ios_base + { +#if __cplusplus >= 202002L + static_assert(is_same_v<_CharT, typename _Traits::char_type>); +#endif + + public: + ///@{ + /** + * These are standard types. They permit a standardized way of + * referring to names of (or names dependent on) the template + * parameters, which are specific to the implementation. + */ + typedef _CharT char_type; + typedef typename _Traits::int_type int_type; + typedef typename _Traits::pos_type pos_type; + typedef typename _Traits::off_type off_type; + typedef _Traits traits_type; + ///@} + + ///@{ + /** + * These are non-standard types. + */ + typedef ctype<_CharT> __ctype_type; + typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > + __num_put_type; + typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > + __num_get_type; + ///@} + + // Data members: + protected: + basic_ostream<_CharT, _Traits>* _M_tie; + mutable char_type _M_fill; + mutable bool _M_fill_init; + basic_streambuf<_CharT, _Traits>* _M_streambuf; + + // Cached use_facet, which is based on the current locale info. + const __ctype_type* _M_ctype; + // For ostream. + const __num_put_type* _M_num_put; + // For istream. + const __num_get_type* _M_num_get; + + public: + ///@{ + /** + * @brief The quick-and-easy status check. + * + * This allows you to write constructs such as + * if (!a_stream) ... and while (a_stream) ... + */ +#if __cplusplus >= 201103L + _GLIBCXX_NODISCARD + explicit operator bool() const + { return !this->fail(); } +#else + operator void*() const + { return this->fail() ? 0 : const_cast(this); } +#endif + + _GLIBCXX_NODISCARD + bool + operator!() const + { return this->fail(); } + ///@} + + /** + * @brief Returns the error state of the stream buffer. + * @return A bit pattern (well, isn't everything?) + * + * See std::ios_base::iostate for the possible bit values. Most + * users will call one of the interpreting wrappers, e.g., good(). + */ + _GLIBCXX_NODISCARD + iostate + rdstate() const + { return _M_streambuf_state; } + + /** + * @brief [Re]sets the error state. + * @param __state The new state flag(s) to set. + * + * See std::ios_base::iostate for the possible bit values. Most + * users will not need to pass an argument. + */ + void + clear(iostate __state = goodbit); + + /** + * @brief Sets additional flags in the error state. + * @param __state The additional state flag(s) to set. + * + * See std::ios_base::iostate for the possible bit values. + */ + void + setstate(iostate __state) + { this->clear(this->rdstate() | __state); } + + // Flips the internal state on for the proper state bits, then + // rethrows the propagated exception if bit also set in + // exceptions(). Must only be called within a catch handler. + void + _M_setstate(iostate __state) + { + // 27.6.1.2.1 Common requirements. + // Turn this on without causing an ios::failure to be thrown. + _M_streambuf_state |= __state; + if (this->exceptions() & __state) + { __throw_exception_again; } + } + + /** + * @brief Fast error checking. + * @return True if no error flags are set. + * + * A wrapper around rdstate. + */ + _GLIBCXX_NODISCARD + bool + good() const + { return this->rdstate() == 0; } + + /** + * @brief Fast error checking. + * @return True if the eofbit is set. + * + * Note that other iostate flags may also be set. + */ + _GLIBCXX_NODISCARD + bool + eof() const + { return (this->rdstate() & eofbit) != 0; } + + /** + * @brief Fast error checking. + * @return True if either the badbit or the failbit is set. + * + * Checking the badbit in fail() is historical practice. + * Note that other iostate flags may also be set. + */ + _GLIBCXX_NODISCARD + bool + fail() const + { return (this->rdstate() & (badbit | failbit)) != 0; } + + /** + * @brief Fast error checking. + * @return True if the badbit is set. + * + * Note that other iostate flags may also be set. + */ + _GLIBCXX_NODISCARD + bool + bad() const + { return (this->rdstate() & badbit) != 0; } + + /** + * @brief Throwing exceptions on errors. + * @return The current exceptions mask. + * + * This changes nothing in the stream. See the one-argument version + * of exceptions(iostate) for the meaning of the return value. + */ + _GLIBCXX_NODISCARD + iostate + exceptions() const + { return _M_exception; } + + /** + * @brief Throwing exceptions on errors. + * @param __except The new exceptions mask. + * + * By default, error flags are set silently. You can set an + * exceptions mask for each stream; if a bit in the mask becomes set + * in the error flags, then an exception of type + * std::ios_base::failure is thrown. + * + * If the error flag is already set when the exceptions mask is + * added, the exception is immediately thrown. Try running the + * following under GCC 3.1 or later: + * @code + * #include + * #include + * #include + * + * int main() + * { + * std::set_terminate (__gnu_cxx::__verbose_terminate_handler); + * + * std::ifstream f ("/etc/motd"); + * + * std::cerr << "Setting badbit\n"; + * f.setstate (std::ios_base::badbit); + * + * std::cerr << "Setting exception mask\n"; + * f.exceptions (std::ios_base::badbit); + * } + * @endcode + */ + void + exceptions(iostate __except) + { + _M_exception = __except; + this->clear(_M_streambuf_state); + } + + // Constructor/destructor: + /** + * @brief Constructor performs initialization. + * + * The parameter is passed by derived streams. + */ + explicit + basic_ios(basic_streambuf<_CharT, _Traits>* __sb) + : ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0), + _M_ctype(0), _M_num_put(0), _M_num_get(0) + { this->init(__sb); } + + /** + * @brief Empty. + * + * The destructor does nothing. More specifically, it does not + * destroy the streambuf held by rdbuf(). + */ + virtual + ~basic_ios() { } + + // Members: + /** + * @brief Fetches the current @e tied stream. + * @return A pointer to the tied stream, or NULL if the stream is + * not tied. + * + * A stream may be @e tied (or synchronized) to a second output + * stream. When this stream performs any I/O, the tied stream is + * first flushed. For example, @c std::cin is tied to @c std::cout. + */ + _GLIBCXX_NODISCARD + basic_ostream<_CharT, _Traits>* + tie() const + { return _M_tie; } + + /** + * @brief Ties this stream to an output stream. + * @param __tiestr The output stream. + * @return The previously tied output stream, or NULL if the stream + * was not tied. + * + * This sets up a new tie; see tie() for more. + */ + basic_ostream<_CharT, _Traits>* + tie(basic_ostream<_CharT, _Traits>* __tiestr) + { + basic_ostream<_CharT, _Traits>* __old = _M_tie; + _M_tie = __tiestr; + return __old; + } + + /** + * @brief Accessing the underlying buffer. + * @return The current stream buffer. + * + * This does not change the state of the stream. + */ + _GLIBCXX_NODISCARD + basic_streambuf<_CharT, _Traits>* + rdbuf() const + { return _M_streambuf; } + + /** + * @brief Changing the underlying buffer. + * @param __sb The new stream buffer. + * @return The previous stream buffer. + * + * Associates a new buffer with the current stream, and clears the + * error state. + * + * Due to historical accidents which the LWG refuses to correct, the + * I/O library suffers from a design error: this function is hidden + * in derived classes by overrides of the zero-argument @c rdbuf(), + * which is non-virtual for hysterical raisins. As a result, you + * must use explicit qualifications to access this function via any + * derived class. For example: + * + * @code + * std::fstream foo; // or some other derived type + * std::streambuf* p = .....; + * + * foo.ios::rdbuf(p); // ios == basic_ios + * @endcode + */ + basic_streambuf<_CharT, _Traits>* + rdbuf(basic_streambuf<_CharT, _Traits>* __sb); + + /** + * @brief Copies fields of __rhs into this. + * @param __rhs The source values for the copies. + * @return Reference to this object. + * + * All fields of __rhs are copied into this object except that rdbuf() + * and rdstate() remain unchanged. All values in the pword and iword + * arrays are copied. Before copying, each callback is invoked with + * erase_event. After copying, each (new) callback is invoked with + * copyfmt_event. The final step is to copy exceptions(). + */ + basic_ios& + copyfmt(const basic_ios& __rhs); + + /** + * @brief Retrieves the @a empty character. + * @return The current fill character. + * + * It defaults to a space (' ') in the current locale. + */ + _GLIBCXX_NODISCARD + char_type + fill() const + { + if (__builtin_expect(!_M_fill_init, false)) + return this->widen(' '); + return _M_fill; + } + + /** + * @brief Sets a new @a empty character. + * @param __ch The new character. + * @return The previous fill character. + * + * The fill character is used to fill out space when P+ characters + * have been requested (e.g., via setw), Q characters are actually + * used, and Q >(getloc()).narrow(c,dfault) + * @endcode + * + * Additional l10n notes are at + * https://gcc.gnu.org/onlinedocs/libstdc++/manual/localization.html + */ + char + narrow(char_type __c, char __dfault) const + { return __check_facet(_M_ctype).narrow(__c, __dfault); } + + /** + * @brief Widens characters. + * @param __c The character to widen. + * @return The widened character. + * + * Maps a character of @c char to a character of @c char_type. + * + * Returns the result of + * @code + * std::use_facet >(getloc()).widen(c) + * @endcode + * + * Additional l10n notes are at + * https://gcc.gnu.org/onlinedocs/libstdc++/manual/localization.html + */ + char_type + widen(char __c) const + { return __check_facet(_M_ctype).widen(__c); } + + protected: + // 27.4.5.1 basic_ios constructors + /** + * @brief Empty. + * + * The default constructor does nothing and is not normally + * accessible to users. + */ + basic_ios() + : ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false), + _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0) + { } + + /** + * @brief All setup is performed here. + * + * This is called from the public constructor. It is not virtual and + * cannot be redefined. + */ + void + init(basic_streambuf<_CharT, _Traits>* __sb); + +#if __cplusplus >= 201103L + basic_ios(const basic_ios&) = delete; + basic_ios& operator=(const basic_ios&) = delete; + + void + move(basic_ios& __rhs) + { + ios_base::_M_move(__rhs); + _M_cache_locale(_M_ios_locale); + this->tie(__rhs.tie(nullptr)); + _M_fill = __rhs._M_fill; + _M_fill_init = __rhs._M_fill_init; + _M_streambuf = nullptr; + } + + void + move(basic_ios&& __rhs) + { this->move(__rhs); } + + void + swap(basic_ios& __rhs) noexcept + { + ios_base::_M_swap(__rhs); + _M_cache_locale(_M_ios_locale); + __rhs._M_cache_locale(__rhs._M_ios_locale); + std::swap(_M_tie, __rhs._M_tie); + std::swap(_M_fill, __rhs._M_fill); + std::swap(_M_fill_init, __rhs._M_fill_init); + } + + void + set_rdbuf(basic_streambuf<_CharT, _Traits>* __sb) + { _M_streambuf = __sb; } +#endif + + void + _M_cache_locale(const locale& __loc); + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#include + +#endif /* _BASIC_IOS_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_ios.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_ios.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..75e5855a873f7fdc06f7e1640d01931fb954595f GIT binary patch literal 40602 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 gIv_S$9)QhpLL5qLt(L_Y^EV3`5s+EV6x2Eg05. + +/** @file bits/basic_ios.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{ios} + */ + +#ifndef _BASIC_IOS_TCC +#define _BASIC_IOS_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + void + basic_ios<_CharT, _Traits>::clear(iostate __state) + { + if (this->rdbuf()) + _M_streambuf_state = __state; + else + _M_streambuf_state = __state | badbit; + if (this->exceptions() & this->rdstate()) + __throw_ios_failure(__N("basic_ios::clear")); + } + + template + basic_streambuf<_CharT, _Traits>* + basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb) + { + basic_streambuf<_CharT, _Traits>* __old = _M_streambuf; + _M_streambuf = __sb; + this->clear(); + return __old; + } + + template + basic_ios<_CharT, _Traits>& + basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 292. effects of a.copyfmt (a) + if (this != std::__addressof(__rhs)) + { + // Per 27.1.1, do not call imbue, yet must trash all caches + // associated with imbue() + + // Alloc any new word array first, so if it fails we have "rollback". + _Words* __words = (__rhs._M_word_size <= _S_local_word_size) ? + _M_local_word : new _Words[__rhs._M_word_size]; + + // Bump refs before doing callbacks, for safety. + _Callback_list* __cb = __rhs._M_callbacks; + if (__cb) + __cb->_M_add_reference(); + _M_call_callbacks(erase_event); + if (_M_word != _M_local_word) + { + delete [] _M_word; + _M_word = 0; + } + _M_dispose_callbacks(); + + // NB: Don't want any added during above. + _M_callbacks = __cb; + for (int __i = 0; __i < __rhs._M_word_size; ++__i) + __words[__i] = __rhs._M_word[__i]; + _M_word = __words; + _M_word_size = __rhs._M_word_size; + + this->flags(__rhs.flags()); + this->width(__rhs.width()); + this->precision(__rhs.precision()); + this->tie(__rhs.tie()); + this->fill(__rhs.fill()); + _M_ios_locale = __rhs.getloc(); + _M_cache_locale(_M_ios_locale); + + _M_call_callbacks(copyfmt_event); + + // The next is required to be the last assignment. + this->exceptions(__rhs.exceptions()); + } + return *this; + } + + // Locales: + template + locale + basic_ios<_CharT, _Traits>::imbue(const locale& __loc) + { + locale __old(this->getloc()); + ios_base::imbue(__loc); + _M_cache_locale(__loc); + if (this->rdbuf() != 0) + this->rdbuf()->pubimbue(__loc); + return __old; + } + + template + void + basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb) + { + // NB: This may be called more than once on the same object. + ios_base::_M_init(); + + // Cache locale data and specific facets used by iostreams. + _M_cache_locale(_M_ios_locale); + + // NB: The 27.4.4.1 Postconditions Table specifies requirements + // after basic_ios::init() has been called. As part of this, + // fill() must return widen(' ') any time after init() has been + // called, which needs an imbued ctype facet of char_type to + // return without throwing an exception. Unfortunately, + // ctype is not necessarily a required facet, so + // streams with char_type != [char, wchar_t] will not have it by + // default. If the ctype facet is available now, + // _M_fill is set here, but otherwise no fill character will be + // cached and a call to fill() will check for the facet again later + // (and will throw if the facet is still not present). This way + // unformatted input and output with non-required basic_ios + // instantiations is possible even without imbuing the expected + // ctype facet. + if (_M_ctype) + { + _M_fill = _M_ctype->widen(' '); + _M_fill_init = true; + } + else + _M_fill_init = false; + + _M_tie = 0; + _M_exception = goodbit; + _M_streambuf = __sb; + _M_streambuf_state = __sb ? goodbit : badbit; + } + + template + void + basic_ios<_CharT, _Traits>::_M_cache_locale(const locale& __loc) + { + _M_ctype = std::__try_use_facet<__ctype_type>(__loc); + _M_num_put = std::__try_use_facet<__num_put_type>(__loc); + _M_num_get = std::__try_use_facet<__num_get_type>(__loc); + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class basic_ios; + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class basic_ios; +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_ios.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_ios.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..de7c26915f5cadb15db6c13df0077f7a6bcffdf4 GIT binary patch literal 31259 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.h new file mode 100644 index 0000000..c90bd09 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.h @@ -0,0 +1,5041 @@ +// Components for manipulating sequences of characters -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/basic_string.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{string} + */ + +// +// ISO C++ 14882: 21 Strings library +// + +#ifndef _BASIC_STRING_H +#define _BASIC_STRING_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +#if __cplusplus >= 201103L +#include +#endif + +#include + +#ifdef __glibcxx_string_view // >= C++17 +# include +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 +# include // ranges::copy +# include // ranges::subrange +#endif + +#if __cplusplus > 202302L +# include +#endif + + +#if ! _GLIBCXX_USE_CXX11_ABI +# include "cow_string.h" +#else + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + /** + * @class basic_string basic_string.h + * @brief Managing sequences of characters and character-like objects. + * + * @ingroup strings + * @ingroup sequences + * @headerfile string + * @since C++98 + * + * @tparam _CharT Type of character + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * @tparam _Alloc Allocator type, defaults to allocator<_CharT>. + * + * Meets the requirements of a container, a + * reversible container, and a + * sequence. Of the + * optional sequence requirements, only + * @c push_back, @c at, and @c %array access are supported. + */ + template + class basic_string + { +#if __cplusplus >= 202002L + static_assert(is_trivially_copyable_v<_CharT> + && is_trivially_default_constructible_v<_CharT> + && is_standard_layout_v<_CharT>); + static_assert(is_same_v<_CharT, typename _Traits::char_type>); + static_assert(is_same_v<_CharT, typename _Alloc::value_type>); + using _Char_alloc_type = _Alloc; +#else + typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template + rebind<_CharT>::other _Char_alloc_type; +#endif + + typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits; + + // Types: + public: + typedef _Traits traits_type; + typedef typename _Traits::char_type value_type; + typedef _Char_alloc_type allocator_type; + typedef typename _Alloc_traits::size_type size_type; + typedef typename _Alloc_traits::difference_type difference_type; + typedef typename _Alloc_traits::reference reference; + typedef typename _Alloc_traits::const_reference const_reference; + typedef typename _Alloc_traits::pointer pointer; + typedef typename _Alloc_traits::const_pointer const_pointer; + typedef __gnu_cxx::__normal_iterator iterator; + typedef __gnu_cxx::__normal_iterator + const_iterator; + typedef std::reverse_iterator const_reverse_iterator; + typedef std::reverse_iterator reverse_iterator; + + /// Value returned by various member functions when they fail. + static const size_type npos = static_cast(-1); + + protected: + // type used for positions in insert, erase etc. +#if __cplusplus < 201103L + typedef iterator __const_iterator; +#else + typedef const_iterator __const_iterator; +#endif + + private: + static _GLIBCXX20_CONSTEXPR pointer + _S_allocate(_Char_alloc_type& __a, size_type __n) + { + pointer __p = _Alloc_traits::allocate(__a, __n); +#if __glibcxx_constexpr_string >= 201907L + // std::char_traits begins the lifetime of characters, + // but custom traits might not, so do it here. + if constexpr (!is_same_v<_Traits, char_traits<_CharT>>) + if (std::__is_constant_evaluated()) + // Begin the lifetime of characters in allocated storage. + for (size_type __i = 0; __i < __n; ++__i) + std::construct_at(__builtin_addressof(__p[__i])); +#endif + return __p; + } + +#ifdef __glibcxx_string_view // >= C++17 + // A helper type for avoiding boiler-plate. + typedef basic_string_view<_CharT, _Traits> __sv_type; + + template + using _If_sv = enable_if_t< + __and_, + __not_>, + __not_>>::value, + _Res>; + + // Allows an implicit conversion to __sv_type. + _GLIBCXX20_CONSTEXPR + static __sv_type + _S_to_string_view(__sv_type __svt) noexcept + { return __svt; } + + // Wraps a string_view by explicit conversion and thus + // allows to add an internal constructor that does not + // participate in overload resolution when a string_view + // is provided. + struct __sv_wrapper + { + _GLIBCXX20_CONSTEXPR explicit + __sv_wrapper(__sv_type __sv) noexcept : _M_sv(__sv) { } + + __sv_type _M_sv; + }; + + /** + * @brief Only internally used: Construct string from a string view + * wrapper. + * @param __svw string view wrapper. + * @param __a Allocator to use. + */ + _GLIBCXX20_CONSTEXPR + explicit + basic_string(__sv_wrapper __svw, const _Alloc& __a) + : basic_string(__svw._M_sv.data(), __svw._M_sv.size(), __a) { } +#endif + + // Use empty-base optimization: http://www.cantrip.org/emptyopt.html + struct _Alloc_hider : allocator_type // TODO check __is_final + { +#if __cplusplus < 201103L + _Alloc_hider(pointer __dat, const _Alloc& __a = _Alloc()) + : allocator_type(__a), _M_p(__dat) { } +#else + _GLIBCXX20_CONSTEXPR + _Alloc_hider(pointer __dat, const _Alloc& __a) + : allocator_type(__a), _M_p(__dat) { } + + _GLIBCXX20_CONSTEXPR + _Alloc_hider(pointer __dat, _Alloc&& __a = _Alloc()) + : allocator_type(std::move(__a)), _M_p(__dat) { } +#endif + + pointer _M_p; // The actual data. + }; + + _Alloc_hider _M_dataplus; + size_type _M_string_length; + + enum { _S_local_capacity = 15 / sizeof(_CharT) }; + + union + { + _CharT _M_local_buf[_S_local_capacity + 1]; + size_type _M_allocated_capacity; + }; + + _GLIBCXX20_CONSTEXPR + void + _M_data(pointer __p) + { _M_dataplus._M_p = __p; } + + _GLIBCXX20_CONSTEXPR + void + _M_length(size_type __length) + { _M_string_length = __length; } + + _GLIBCXX20_CONSTEXPR + pointer + _M_data() const + { return _M_dataplus._M_p; } + + _GLIBCXX20_CONSTEXPR + pointer + _M_local_data() + { +#if __cplusplus >= 201103L + return std::pointer_traits::pointer_to(*_M_local_buf); +#else + return pointer(_M_local_buf); +#endif + } + + _GLIBCXX20_CONSTEXPR + const_pointer + _M_local_data() const + { +#if __cplusplus >= 201103L + return std::pointer_traits::pointer_to(*_M_local_buf); +#else + return const_pointer(_M_local_buf); +#endif + } + + _GLIBCXX20_CONSTEXPR + void + _M_capacity(size_type __capacity) + { _M_allocated_capacity = __capacity; } + + _GLIBCXX20_CONSTEXPR + void + _M_set_length(size_type __n) + { + _M_length(__n); + traits_type::assign(_M_data()[__n], _CharT()); + } + + _GLIBCXX20_CONSTEXPR + bool + _M_is_local() const + { + if (_M_data() == _M_local_data()) + { + if (_M_string_length > _S_local_capacity) + __builtin_unreachable(); + return true; + } + return false; + } + + // Create & Destroy + _GLIBCXX20_CONSTEXPR + pointer + _M_create(size_type&, size_type); + + _GLIBCXX20_CONSTEXPR + void + _M_dispose() + { + if (!_M_is_local()) + _M_destroy(_M_allocated_capacity); + } + + _GLIBCXX20_CONSTEXPR + void + _M_destroy(size_type __size) throw() + { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); } + +#if __cplusplus < 201103L || defined _GLIBCXX_DEFINING_STRING_INSTANTIATIONS + // _M_construct_aux is used to implement the 21.3.1 para 15 which + // requires special behaviour if _InIterator is an integral type + template + void + _M_construct_aux(_InIterator __beg, _InIterator __end, + std::__false_type) + { + typedef typename iterator_traits<_InIterator>::iterator_category _Tag; + _M_construct(__beg, __end, _Tag()); + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 438. Ambiguity in the "do the right thing" clause + template + void + _M_construct_aux(_Integer __beg, _Integer __end, std::__true_type) + { _M_construct_aux_2(static_cast(__beg), __end); } + + void + _M_construct_aux_2(size_type __req, _CharT __c) + { _M_construct(__req, __c); } +#endif + + // For Input Iterators, used in istreambuf_iterators, etc. + template + _GLIBCXX20_CONSTEXPR + void + _M_construct(_InIterator __beg, _InIterator __end, + std::input_iterator_tag); + + // For forward_iterators up to random_access_iterators, used for + // string::iterator, _CharT*, etc. + template + _GLIBCXX20_CONSTEXPR + void + _M_construct(_FwdIterator __beg, _FwdIterator __end, + std::forward_iterator_tag); + + _GLIBCXX20_CONSTEXPR + void + _M_construct(size_type __req, _CharT __c); + + // Construct using block of memory of known size. + // If _Terminated is true assume that source is already 0 terminated. + template + _GLIBCXX20_CONSTEXPR + void + _M_construct(const _CharT *__c, size_type __n); + + _GLIBCXX20_CONSTEXPR + allocator_type& + _M_get_allocator() + { return _M_dataplus; } + + _GLIBCXX20_CONSTEXPR + const allocator_type& + _M_get_allocator() const + { return _M_dataplus; } + + // Ensure that _M_local_buf is the active member of the union. + __attribute__((__always_inline__)) + _GLIBCXX14_CONSTEXPR + void + _M_init_local_buf() _GLIBCXX_NOEXCEPT + { +#if __glibcxx_is_constant_evaluated + if (std::is_constant_evaluated()) + for (size_type __i = 0; __i <= _S_local_capacity; ++__i) + _M_local_buf[__i] = _CharT(); +#endif + } + + __attribute__((__always_inline__)) + _GLIBCXX14_CONSTEXPR + pointer + _M_use_local_data() _GLIBCXX_NOEXCEPT + { +#if __cpp_lib_is_constant_evaluated + _M_init_local_buf(); +#endif + return _M_local_data(); + } + + private: + +#ifdef _GLIBCXX_DISAMBIGUATE_REPLACE_INST + // The explicit instantiations in misc-inst.cc require this due to + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64063 + template::__value + && !__are_same<_Tp, const _CharT*>::__value + && !__are_same<_Tp, iterator>::__value + && !__are_same<_Tp, const_iterator>::__value> + struct __enable_if_not_native_iterator + { typedef basic_string& __type; }; + template + struct __enable_if_not_native_iterator<_Tp, false> { }; +#endif + + _GLIBCXX20_CONSTEXPR + size_type + _M_check(size_type __pos, const char* __s) const + { + if (__pos > this->size()) + __throw_out_of_range_fmt(__N("%s: __pos (which is %zu) > " + "this->size() (which is %zu)"), + __s, __pos, this->size()); + return __pos; + } + + _GLIBCXX20_CONSTEXPR + void + _M_check_length(size_type __n1, size_type __n2, const char* __s) const + { + if (this->max_size() - (this->size() - __n1) < __n2) + __throw_length_error(__N(__s)); + } + + + // NB: _M_limit doesn't check for a bad __pos value. + _GLIBCXX20_CONSTEXPR + size_type + _M_limit(size_type __pos, size_type __off) const _GLIBCXX_NOEXCEPT + { + const bool __testoff = __off < this->size() - __pos; + return __testoff ? __off : this->size() - __pos; + } + + // True if _Rep and source do not overlap. + bool + _M_disjunct(const _CharT* __s) const _GLIBCXX_NOEXCEPT + { + return (less()(__s, _M_data()) + || less()(_M_data() + this->size(), __s)); + } + + // When __n = 1 way faster than the general multichar + // traits_type::copy/move/assign. + _GLIBCXX20_CONSTEXPR + static void + _S_copy(_CharT* __d, const _CharT* __s, size_type __n) + { + if (__n == 1) + traits_type::assign(*__d, *__s); + else + traits_type::copy(__d, __s, __n); + } + + _GLIBCXX20_CONSTEXPR + static void + _S_move(_CharT* __d, const _CharT* __s, size_type __n) + { + if (__n == 1) + traits_type::assign(*__d, *__s); + else + traits_type::move(__d, __s, __n); + } + + _GLIBCXX20_CONSTEXPR + static void + _S_assign(_CharT* __d, size_type __n, _CharT __c) + { + if (__n == 1) + traits_type::assign(*__d, __c); + else + traits_type::assign(__d, __n, __c); + } + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + // _S_copy_chars is a separate template to permit specialization + // to optimize for the common case of pointers as iterators. + template + _GLIBCXX20_CONSTEXPR + static void + _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) + { +#if __cplusplus >= 201103L + using _IterBase = decltype(std::__niter_base(__k1)); + if constexpr (__or_, + is_same<_IterBase, const _CharT*>>::value) + _S_copy(__p, std::__niter_base(__k1), __k2 - __k1); +#if __cpp_lib_concepts + else if constexpr (requires { + requires contiguous_iterator<_Iterator>; + { std::to_address(__k1) } + -> convertible_to; + }) + { + const auto __d = __k2 - __k1; + (void) (__k1 + __d); // See P3349R1 + _S_copy(__p, std::to_address(__k1), static_cast(__d)); + } +#endif + else +#endif + for (; __k1 != __k2; ++__k1, (void)++__p) + traits_type::assign(*__p, static_cast<_CharT>(*__k1)); + } +#pragma GCC diagnostic pop + +#if __cplusplus < 201103L || defined _GLIBCXX_DEFINING_STRING_INSTANTIATIONS + static void + _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) + { _S_copy_chars(__p, __k1.base(), __k2.base()); } + + static void + _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) + { _S_copy_chars(__p, __k1.base(), __k2.base()); } + + static void + _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) + { _S_copy(__p, __k1, __k2 - __k1); } + + static void + _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) + { _S_copy(__p, __k1, __k2 - __k1); } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + // pre: __n == ranges::distance(__rg). __p+[0,__n) is a valid range. + template + static constexpr void + _S_copy_range(pointer __p, _Rg&& __rg, size_type __n) + { + if constexpr (requires { + requires ranges::contiguous_range<_Rg>; + { ranges::data(std::forward<_Rg>(__rg)) } + -> convertible_to; + }) + _S_copy(__p, ranges::data(std::forward<_Rg>(__rg)), __n); + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + for (; __first != __last; ++__first) + traits_type::assign(*__p++, static_cast<_CharT>(*__first)); + } + } +#endif + + _GLIBCXX20_CONSTEXPR + static int + _S_compare(size_type __n1, size_type __n2) _GLIBCXX_NOEXCEPT + { + const difference_type __d = difference_type(__n1 - __n2); + + if (__d > __gnu_cxx::__numeric_traits::__max) + return __gnu_cxx::__numeric_traits::__max; + else if (__d < __gnu_cxx::__numeric_traits::__min) + return __gnu_cxx::__numeric_traits::__min; + else + return int(__d); + } + + _GLIBCXX20_CONSTEXPR + void + _M_assign(const basic_string&); + + _GLIBCXX20_CONSTEXPR + void + _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, + size_type __len2); + + _GLIBCXX20_CONSTEXPR + void + _M_erase(size_type __pos, size_type __n); + + public: + // Construct/copy/destroy: + // NB: We overload ctors in some cases instead of using default + // arguments, per 17.4.4.4 para. 2 item 2. + + /** + * @brief Default constructor creates an empty string. + */ + _GLIBCXX20_CONSTEXPR + basic_string() + _GLIBCXX_NOEXCEPT_IF(is_nothrow_default_constructible<_Alloc>::value) +#if __cpp_concepts && __glibcxx_type_trait_variable_templates + requires is_default_constructible_v<_Alloc> +#endif + : _M_dataplus(_M_local_data()) + { + _M_init_local_buf(); + _M_set_length(0); + } + + /** + * @brief Construct an empty string using allocator @a a. + */ + _GLIBCXX20_CONSTEXPR + explicit + basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT + : _M_dataplus(_M_local_data(), __a) + { + _M_init_local_buf(); + _M_set_length(0); + } + + /** + * @brief Construct string with copy of value of @a __str. + * @param __str Source string. + */ + _GLIBCXX20_CONSTEXPR + basic_string(const basic_string& __str) + : _M_dataplus(_M_local_data(), + _Alloc_traits::_S_select_on_copy(__str._M_get_allocator())) + { + _M_construct(__str._M_data(), __str.length()); + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2583. no way to supply an allocator for basic_string(str, pos) + /** + * @brief Construct string as copy of a substring. + * @param __str Source string. + * @param __pos Index of first character to copy from. + * @param __a Allocator to use. + */ + _GLIBCXX20_CONSTEXPR + basic_string(const basic_string& __str, size_type __pos, + const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a) + { + const _CharT* __start = __str._M_data() + + __str._M_check(__pos, "basic_string::basic_string"); + _M_construct(__start, __start + __str._M_limit(__pos, npos), + std::forward_iterator_tag()); + } + + /** + * @brief Construct string as copy of a substring. + * @param __str Source string. + * @param __pos Index of first character to copy from. + * @param __n Number of characters to copy. + */ + _GLIBCXX20_CONSTEXPR + basic_string(const basic_string& __str, size_type __pos, + size_type __n) + : _M_dataplus(_M_local_data()) + { + const _CharT* __start = __str._M_data() + + __str._M_check(__pos, "basic_string::basic_string"); + _M_construct(__start, __start + __str._M_limit(__pos, __n), + std::forward_iterator_tag()); + } + + /** + * @brief Construct string as copy of a substring. + * @param __str Source string. + * @param __pos Index of first character to copy from. + * @param __n Number of characters to copy. + * @param __a Allocator to use. + */ + _GLIBCXX20_CONSTEXPR + basic_string(const basic_string& __str, size_type __pos, + size_type __n, const _Alloc& __a) + : _M_dataplus(_M_local_data(), __a) + { + const _CharT* __start + = __str._M_data() + __str._M_check(__pos, "string::string"); + _M_construct(__start, __start + __str._M_limit(__pos, __n), + std::forward_iterator_tag()); + } + + /** + * @brief Construct string initialized by a character %array. + * @param __s Source character %array. + * @param __n Number of characters to copy. + * @param __a Allocator to use (default is default allocator). + * + * NB: @a __s must have at least @a __n characters, '\\0' + * has no special meaning. + */ + _GLIBCXX20_CONSTEXPR + basic_string(const _CharT* __s, size_type __n, + const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a) + { + // NB: Not required, but considered best practice. + if (__s == 0 && __n > 0) + std::__throw_logic_error(__N("basic_string: " + "construction from null is not valid")); + _M_construct(__s, __s + __n, std::forward_iterator_tag()); + } + + /** + * @brief Construct string as copy of a C string. + * @param __s Source C string. + * @param __a Allocator to use (default is default allocator). + */ +#if __cpp_deduction_guides && ! defined _GLIBCXX_DEFINING_STRING_INSTANTIATIONS + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3076. basic_string CTAD ambiguity + template> +#endif + _GLIBCXX20_CONSTEXPR + basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a) + { + // NB: Not required, but considered best practice. + if (__s == 0) + std::__throw_logic_error(__N("basic_string: " + "construction from null is not valid")); + const _CharT* __end = __s + traits_type::length(__s); + _M_construct(__s, __end, forward_iterator_tag()); + } + + /** + * @brief Construct string as multiple characters. + * @param __n Number of characters. + * @param __c Character to use. + * @param __a Allocator to use (default is default allocator). + */ +#if __cpp_deduction_guides && ! defined _GLIBCXX_DEFINING_STRING_INSTANTIATIONS + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3076. basic_string CTAD ambiguity + template> +#endif + _GLIBCXX20_CONSTEXPR + basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a) + { _M_construct(__n, __c); } + +#if __cplusplus >= 201103L + /** + * @brief Move construct string. + * @param __str Source string. + * + * The newly-created string contains the exact contents of @a __str. + * @a __str is a valid, but unspecified string. + */ + _GLIBCXX20_CONSTEXPR + basic_string(basic_string&& __str) noexcept + : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator())) + { + if (__str._M_is_local()) + { + _M_init_local_buf(); + traits_type::copy(_M_local_buf, __str._M_local_buf, + __str.length() + 1); + } + else + { + _M_data(__str._M_data()); + _M_capacity(__str._M_allocated_capacity); + } + + // Must use _M_length() here not _M_set_length() because + // basic_stringbuf relies on writing into unallocated capacity so + // we mess up the contents if we put a '\0' in the string. + _M_length(__str.length()); + __str._M_data(__str._M_use_local_data()); + __str._M_set_length(0); + } + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Construct a string from a range. + * @since C++23 + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr + basic_string(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc()) + : basic_string(__a) + { + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + const auto __n = static_cast(ranges::distance(__rg)); + reserve(__n); + _S_copy_range(_M_data(), std::forward<_Rg>(__rg), __n); + _M_set_length(__n); + } + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + for (; __first != __last; ++__first) + push_back(*__first); + } + } +#endif + + /** + * @brief Construct string from an initializer %list. + * @param __l std::initializer_list of characters. + * @param __a Allocator to use (default is default allocator). + */ + _GLIBCXX20_CONSTEXPR + basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a) + { _M_construct(__l.begin(), __l.end(), std::forward_iterator_tag()); } + + _GLIBCXX20_CONSTEXPR + basic_string(const basic_string& __str, const _Alloc& __a) + : _M_dataplus(_M_local_data(), __a) + { _M_construct(__str.begin(), __str.end(), std::forward_iterator_tag()); } + + _GLIBCXX20_CONSTEXPR + basic_string(basic_string&& __str, const _Alloc& __a) + noexcept(_Alloc_traits::_S_always_equal()) + : _M_dataplus(_M_local_data(), __a) + { + if (__str._M_is_local()) + { + _M_init_local_buf(); + traits_type::copy(_M_local_buf, __str._M_local_buf, + __str.length() + 1); + _M_length(__str.length()); + __str._M_set_length(0); + } + else if (_Alloc_traits::_S_always_equal() + || __str.get_allocator() == __a) + { + _M_data(__str._M_data()); + _M_length(__str.length()); + _M_capacity(__str._M_allocated_capacity); + __str._M_data(__str._M_use_local_data()); + __str._M_set_length(0); + } + else + _M_construct(__str.begin(), __str.end(), std::forward_iterator_tag()); + } +#endif // C++11 + +#if __cplusplus >= 202100L + basic_string(nullptr_t) = delete; + basic_string& operator=(nullptr_t) = delete; +#endif // C++23 + + /** + * @brief Construct string as copy of a range. + * @param __beg Start of range. + * @param __end End of range. + * @param __a Allocator to use (default is default allocator). + */ +#if __cplusplus >= 201103L + template> +#else + template +#endif + _GLIBCXX20_CONSTEXPR + basic_string(_InputIterator __beg, _InputIterator __end, + const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a), _M_string_length(0) + { +#if __cplusplus >= 201103L + _M_construct(__beg, __end, std::__iterator_category(__beg)); +#else + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_construct_aux(__beg, __end, _Integral()); +#endif + } + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Construct string from a substring of a string_view. + * @param __t Source object convertible to string view. + * @param __pos The index of the first character to copy from __t. + * @param __n The number of characters to copy from __t. + * @param __a Allocator to use. + */ + template>> + _GLIBCXX20_CONSTEXPR + basic_string(const _Tp& __t, size_type __pos, size_type __n, + const _Alloc& __a = _Alloc()) + : basic_string(_S_to_string_view(__t).substr(__pos, __n), __a) { } + + /** + * @brief Construct string from a string_view. + * @param __t Source object convertible to string view. + * @param __a Allocator to use (default is default allocator). + */ + template> + _GLIBCXX20_CONSTEXPR + explicit + basic_string(const _Tp& __t, const _Alloc& __a = _Alloc()) + : basic_string(__sv_wrapper(_S_to_string_view(__t)), __a) { } +#endif // C++17 + + /** + * @brief Destroy the string instance. + */ + _GLIBCXX20_CONSTEXPR + ~basic_string() + { _M_dispose(); } + + /** + * @brief Assign the value of @a str to this string. + * @param __str Source string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + operator=(const basic_string& __str) + { + return this->assign(__str); + } + + /** + * @brief Copy contents of @a s into this string. + * @param __s Source null-terminated string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + operator=(const _CharT* __s) + { return this->assign(__s); } + + /** + * @brief Set value to string of length 1. + * @param __c Source character. + * + * Assigning to a character makes this string length 1 and + * (*this)[0] == @a c. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + operator=(_CharT __c) + { + this->assign(1, __c); + return *this; + } + +#if __cplusplus >= 201103L + /** + * @brief Move assign the value of @a str to this string. + * @param __str Source string. + * + * The contents of @a str are moved into this string (without copying). + * @a str is a valid, but unspecified string. + */ + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2063. Contradictory requirements for string move assignment + _GLIBCXX20_CONSTEXPR + basic_string& + operator=(basic_string&& __str) + noexcept(_Alloc_traits::_S_nothrow_move()) + { + const bool __equal_allocs = _Alloc_traits::_S_always_equal() + || _M_get_allocator() == __str._M_get_allocator(); + if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign() + && !__equal_allocs) + { + // Destroy existing storage before replacing allocator. + _M_destroy(_M_allocated_capacity); + _M_data(_M_local_data()); + _M_set_length(0); + } + // Replace allocator if POCMA is true. + std::__alloc_on_move(_M_get_allocator(), __str._M_get_allocator()); + + if (__str._M_is_local()) + { + // We've always got room for a short string, just copy it + // (unless this is a self-move, because that would violate the + // char_traits::copy precondition that the ranges don't overlap). + if (__builtin_expect(std::__addressof(__str) != this, true)) + { + if (__str.size()) + this->_S_copy(_M_data(), __str._M_data(), __str.size()); + _M_set_length(__str.size()); + } + } + else if (_Alloc_traits::_S_propagate_on_move_assign() || __equal_allocs) + { + // Just move the allocated pointer, our allocator can free it. + pointer __data = nullptr; + size_type __capacity; + if (!_M_is_local()) + { + if (__equal_allocs) + { + // __str can reuse our existing storage. + __data = _M_data(); + __capacity = _M_allocated_capacity; + } + else // __str can't use it, so free it. + _M_destroy(_M_allocated_capacity); + } + + _M_data(__str._M_data()); + _M_length(__str.length()); + _M_capacity(__str._M_allocated_capacity); + if (__data) + { + __str._M_data(__data); + __str._M_capacity(__capacity); + } + else + __str._M_data(__str._M_use_local_data()); + } + else // Need to do a deep copy + _M_assign(__str); + __str.clear(); + return *this; + } + + /** + * @brief Set value to string constructed from initializer %list. + * @param __l std::initializer_list. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + operator=(initializer_list<_CharT> __l) + { + this->assign(__l.begin(), __l.size()); + return *this; + } +#endif // C++11 + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Set value to string constructed from a string_view. + * @param __svt An object convertible to string_view. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + operator=(const _Tp& __svt) + { return this->assign(__svt); } + + /** + * @brief Convert to a string_view. + * @return A string_view. + */ + _GLIBCXX20_CONSTEXPR + operator __sv_type() const noexcept + { return __sv_type(data(), size()); } +#endif // C++17 + + // Iterators: + /** + * Returns a read/write iterator that points to the first character in + * the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + iterator + begin() _GLIBCXX_NOEXCEPT + { return iterator(_M_data()); } + + /** + * Returns a read-only (constant) iterator that points to the first + * character in the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_iterator + begin() const _GLIBCXX_NOEXCEPT + { return const_iterator(_M_data()); } + + /** + * Returns a read/write iterator that points one past the last + * character in the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + iterator + end() _GLIBCXX_NOEXCEPT + { return iterator(_M_data() + this->size()); } + + /** + * Returns a read-only (constant) iterator that points one past the + * last character in the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_iterator + end() const _GLIBCXX_NOEXCEPT + { return const_iterator(_M_data() + this->size()); } + + /** + * Returns a read/write reverse iterator that points to the last + * character in the %string. Iteration is done in reverse element + * order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reverse_iterator + rbegin() _GLIBCXX_NOEXCEPT + { return reverse_iterator(this->end()); } + + /** + * Returns a read-only (constant) reverse iterator that points + * to the last character in the %string. Iteration is done in + * reverse element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reverse_iterator + rbegin() const _GLIBCXX_NOEXCEPT + { return const_reverse_iterator(this->end()); } + + /** + * Returns a read/write reverse iterator that points to one before the + * first character in the %string. Iteration is done in reverse + * element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reverse_iterator + rend() _GLIBCXX_NOEXCEPT + { return reverse_iterator(this->begin()); } + + /** + * Returns a read-only (constant) reverse iterator that points + * to one before the first character in the %string. Iteration + * is done in reverse element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reverse_iterator + rend() const _GLIBCXX_NOEXCEPT + { return const_reverse_iterator(this->begin()); } + +#if __cplusplus >= 201103L + /** + * Returns a read-only (constant) iterator that points to the first + * character in the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_iterator + cbegin() const noexcept + { return const_iterator(this->_M_data()); } + + /** + * Returns a read-only (constant) iterator that points one past the + * last character in the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_iterator + cend() const noexcept + { return const_iterator(this->_M_data() + this->size()); } + + /** + * Returns a read-only (constant) reverse iterator that points + * to the last character in the %string. Iteration is done in + * reverse element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reverse_iterator + crbegin() const noexcept + { return const_reverse_iterator(this->end()); } + + /** + * Returns a read-only (constant) reverse iterator that points + * to one before the first character in the %string. Iteration + * is done in reverse element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reverse_iterator + crend() const noexcept + { return const_reverse_iterator(this->begin()); } +#endif + + public: + // Capacity: + /// Returns the number of characters in the string, not including any + /// null-termination. + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + size() const _GLIBCXX_NOEXCEPT + { + size_type __sz = _M_string_length; + if (__sz > max_size ()) + __builtin_unreachable (); + return __sz; + } + + /// Returns the number of characters in the string, not including any + /// null-termination. + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + length() const _GLIBCXX_NOEXCEPT + { return size(); } + + /// Returns the size() of the largest possible %string. + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + max_size() const _GLIBCXX_NOEXCEPT + { + const size_t __diffmax + = __gnu_cxx::__numeric_traits::__max / sizeof(_CharT); + const size_t __allocmax = _Alloc_traits::max_size(_M_get_allocator()); + return (std::min)(__diffmax, __allocmax) - 1; + } + + /** + * @brief Resizes the %string to the specified number of characters. + * @param __n Number of characters the %string should contain. + * @param __c Character to fill any new elements. + * + * This function will %resize the %string to the specified + * number of characters. If the number is smaller than the + * %string's current size the %string is truncated, otherwise + * the %string is extended and new elements are %set to @a __c. + */ + _GLIBCXX20_CONSTEXPR + void + resize(size_type __n, _CharT __c); + + /** + * @brief Resizes the %string to the specified number of characters. + * @param __n Number of characters the %string should contain. + * + * This function will resize the %string to the specified length. If + * the new size is smaller than the %string's current size the %string + * is truncated, otherwise the %string is extended and new characters + * are default-constructed. For basic types such as char, this means + * setting them to 0. + */ + _GLIBCXX20_CONSTEXPR + void + resize(size_type __n) + { this->resize(__n, _CharT()); } + +#if __cplusplus >= 201103L +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + /// A non-binding request to reduce capacity() to size(). + _GLIBCXX20_CONSTEXPR + void + shrink_to_fit() noexcept + { reserve(); } +#pragma GCC diagnostic pop +#endif + +#ifdef __glibcxx_string_resize_and_overwrite // C++ >= 23 + /** Resize the string and call a function to fill it. + * + * @param __n The maximum size requested. + * @param __op A callable object that writes characters to the string. + * + * This is a low-level function that is easy to misuse, be careful. + * + * Calling `str.resize_and_overwrite(n, op)` will reserve at least `n` + * characters in `str`, evaluate `n2 = std::move(op)(str.data(), n)`, + * and finally set the string length to `n2` (adding a null terminator + * at the end). The function object `op` is allowed to write to the + * extra capacity added by the initial reserve operation, which is not + * allowed if you just call `str.reserve(n)` yourself. + * + * This can be used to efficiently fill a `string` buffer without the + * overhead of zero-initializing characters that will be overwritten + * anyway. + * + * The callable `op` must not access the string directly (only through + * the pointer passed as its first argument), must not write more than + * `n` characters to the string, must return a value no greater than `n`, + * and must ensure that all characters up to the returned length are + * valid after it returns (i.e. there must be no uninitialized values + * left in the string after the call, because accessing them would + * have undefined behaviour). If `op` exits by throwing an exception + * the behaviour is undefined. + * + * @since C++23 + */ + template + constexpr void + resize_and_overwrite(size_type __n, _Operation __op); +#endif + +#if __cplusplus >= 201103L + /// Non-standard version of resize_and_overwrite for C++11 and above. + template + _GLIBCXX20_CONSTEXPR void + __resize_and_overwrite(size_type __n, _Operation __op); +#endif + + /** + * Returns the total number of characters that the %string can hold + * before needing to allocate more memory. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + capacity() const _GLIBCXX_NOEXCEPT + { + size_t __sz = _M_is_local() ? size_type(_S_local_capacity) + : _M_allocated_capacity; + if (__sz < _S_local_capacity || __sz > max_size ()) + __builtin_unreachable (); + return __sz; + } + + /** + * @brief Attempt to preallocate enough memory for specified number of + * characters. + * @param __res_arg Number of characters required. + * @throw std::length_error If @a __res_arg exceeds @c max_size(). + * + * This function attempts to reserve enough memory for the + * %string to hold the specified number of characters. If the + * number requested is more than max_size(), length_error is + * thrown. + * + * The advantage of this function is that if optimal code is a + * necessity and the user can determine the string length that will be + * required, the user can reserve the memory in %advance, and thus + * prevent a possible reallocation of memory and copying of %string + * data. + */ + _GLIBCXX20_CONSTEXPR + void + reserve(size_type __res_arg); + + /** + * Equivalent to shrink_to_fit(). + */ +#if __cplusplus > 201703L + [[deprecated("use shrink_to_fit() instead")]] +#endif + _GLIBCXX20_CONSTEXPR + void + reserve(); + + /** + * Erases the string, making it empty. + */ + _GLIBCXX20_CONSTEXPR + void + clear() _GLIBCXX_NOEXCEPT + { _M_set_length(0); } + + /** + * Returns true if the %string is empty. Equivalent to + * *this == "". + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + bool + empty() const _GLIBCXX_NOEXCEPT + { return _M_string_length == 0; } + + // Element access: + /** + * @brief Subscript access to the data contained in the %string. + * @param __pos The index of the character to access. + * @return Read-only (constant) reference to the character. + * + * This operator allows for easy, array-style, data access. + * Note that data access with this operator is unchecked and + * out_of_range lookups are not defined. (For checked lookups + * see at().) + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + operator[] (size_type __pos) const _GLIBCXX_NOEXCEPT + { + __glibcxx_assert(__pos <= size()); + return _M_data()[__pos]; + } + + /** + * @brief Subscript access to the data contained in the %string. + * @param __pos The index of the character to access. + * @return Read/write reference to the character. + * + * This operator allows for easy, array-style, data access. + * Note that data access with this operator is unchecked and + * out_of_range lookups are not defined. (For checked lookups + * see at().) + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + operator[](size_type __pos) + { + // Allow pos == size() both in C++98 mode, as v3 extension, + // and in C++11 mode. + __glibcxx_assert(__pos <= size()); + // In pedantic mode be strict in C++98 mode. + _GLIBCXX_DEBUG_PEDASSERT(__cplusplus >= 201103L || __pos < size()); + return _M_data()[__pos]; + } + + /** + * @brief Provides access to the data contained in the %string. + * @param __n The index of the character to access. + * @return Read-only (const) reference to the character. + * @throw std::out_of_range If @a n is an invalid index. + * + * This function provides for safer data access. The parameter is + * first checked that it is in the range of the string. The function + * throws out_of_range if the check fails. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + at(size_type __n) const + { + if (__n >= this->size()) + __throw_out_of_range_fmt(__N("basic_string::at: __n " + "(which is %zu) >= this->size() " + "(which is %zu)"), + __n, this->size()); + return _M_data()[__n]; + } + + /** + * @brief Provides access to the data contained in the %string. + * @param __n The index of the character to access. + * @return Read/write reference to the character. + * @throw std::out_of_range If @a n is an invalid index. + * + * This function provides for safer data access. The parameter is + * first checked that it is in the range of the string. The function + * throws out_of_range if the check fails. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + at(size_type __n) + { + if (__n >= size()) + __throw_out_of_range_fmt(__N("basic_string::at: __n " + "(which is %zu) >= this->size() " + "(which is %zu)"), + __n, this->size()); + return _M_data()[__n]; + } + +#if __cplusplus >= 201103L + /** + * Returns a read/write reference to the data at the first + * element of the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + front() noexcept + { + __glibcxx_assert(!empty()); + return operator[](0); + } + + /** + * Returns a read-only (constant) reference to the data at the first + * element of the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + front() const noexcept + { + __glibcxx_assert(!empty()); + return operator[](0); + } + + /** + * Returns a read/write reference to the data at the last + * element of the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + back() noexcept + { + __glibcxx_assert(!empty()); + return operator[](this->size() - 1); + } + + /** + * Returns a read-only (constant) reference to the data at the + * last element of the %string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + back() const noexcept + { + __glibcxx_assert(!empty()); + return operator[](this->size() - 1); + } +#endif + + // Modifiers: + /** + * @brief Append a string to this string. + * @param __str The string to append. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + operator+=(const basic_string& __str) + { return this->append(__str); } + + /** + * @brief Append a C string. + * @param __s The C string to append. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + operator+=(const _CharT* __s) + { return this->append(__s); } + + /** + * @brief Append a character. + * @param __c The character to append. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + operator+=(_CharT __c) + { + this->push_back(__c); + return *this; + } + +#if __cplusplus >= 201103L + /** + * @brief Append an initializer_list of characters. + * @param __l The initializer_list of characters to be appended. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + operator+=(initializer_list<_CharT> __l) + { return this->append(__l.begin(), __l.size()); } +#endif // C++11 + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Append a string_view. + * @param __svt An object convertible to string_view to be appended. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + operator+=(const _Tp& __svt) + { return this->append(__svt); } +#endif // C++17 + + /** + * @brief Append a string to this string. + * @param __str The string to append. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + append(const basic_string& __str) + { return this->append(__str._M_data(), __str.size()); } + + /** + * @brief Append a substring. + * @param __str The string to append. + * @param __pos Index of the first character of str to append. + * @param __n The number of characters to append. + * @return Reference to this string. + * @throw std::out_of_range if @a __pos is not a valid index. + * + * This function appends @a __n characters from @a __str + * starting at @a __pos to this string. If @a __n is is larger + * than the number of available characters in @a __str, the + * remainder of @a __str is appended. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + append(const basic_string& __str, size_type __pos, size_type __n = npos) + { return this->append(__str._M_data() + + __str._M_check(__pos, "basic_string::append"), + __str._M_limit(__pos, __n)); } + + /** + * @brief Append a C substring. + * @param __s The C string to append. + * @param __n The number of characters to append. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + append(const _CharT* __s, size_type __n) + { + __glibcxx_requires_string_len(__s, __n); + _M_check_length(size_type(0), __n, "basic_string::append"); + return _M_append(__s, __n); + } + + /** + * @brief Append a C string. + * @param __s The C string to append. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + append(const _CharT* __s) + { + __glibcxx_requires_string(__s); + const size_type __n = traits_type::length(__s); + _M_check_length(size_type(0), __n, "basic_string::append"); + return _M_append(__s, __n); + } + + /** + * @brief Append multiple characters. + * @param __n The number of characters to append. + * @param __c The character to use. + * @return Reference to this string. + * + * Appends __n copies of __c to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + append(size_type __n, _CharT __c) + { return _M_replace_aux(this->size(), size_type(0), __n, __c); } + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Append a range to the string. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + * + * The range `__rg` is allowed to overlap with `*this`. + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr basic_string& + append_range(_Rg&& __rg) + { + // N.B. __rg may overlap with *this, so we must copy from __rg before + // existing elements or iterators referring to *this are invalidated. + // e.g. in s.append_range(views::concat(s, str)), rg overlaps s. + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + const auto __len = size_type(ranges::distance(__rg)); + + // Don't care if this addition wraps around, we check it below: + const size_type __newlen = size() + __len; + + if ((capacity() - size()) >= __len) + _S_copy_range(_M_data() + size(), std::forward<_Rg>(__rg), + __len); + else + { + _M_check_length(0, __len, "basic_string::append_range"); + basic_string __s(_M_get_allocator()); + __s.reserve(__newlen); + _S_copy_range(__s._M_data() + size(), std::forward<_Rg>(__rg), + __len); + _S_copy(__s._M_data(), _M_data(), size()); + if (!_M_is_local()) + _M_destroy(_M_allocated_capacity); + _M_data(__s._M_data()); + _M_capacity(__s._M_allocated_capacity); + __s._M_data(__s._M_local_data()); + __s._M_length(0); + } + _M_set_length(__newlen); // adds null-terminator + } + else + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + _M_get_allocator()); + append(__s); + } + return *this; + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Append an initializer_list of characters. + * @param __l The initializer_list of characters to append. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + append(initializer_list<_CharT> __l) + { return this->append(__l.begin(), __l.size()); } +#endif // C++11 + + /** + * @brief Append a range of characters. + * @param __first Iterator referencing the first character to append. + * @param __last Iterator marking the end of the range. + * @return Reference to this string. + * + * Appends characters in the range [__first,__last) to this string. + */ +#if __cplusplus >= 201103L + template> + _GLIBCXX20_CONSTEXPR +#else + template +#endif + basic_string& + append(_InputIterator __first, _InputIterator __last) + { return this->replace(end(), end(), __first, __last); } + +#ifdef __glibcxx_string_view + /** + * @brief Append a string_view. + * @param __svt An object convertible to string_view to be appended. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + append(const _Tp& __svt) + { + __sv_type __sv = __svt; + return this->append(__sv.data(), __sv.size()); + } + + /** + * @brief Append a range of characters from a string_view. + * @param __svt An object convertible to string_view to be appended from. + * @param __pos The position in the string_view to append from. + * @param __n The number of characters to append from the string_view. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + append(const _Tp& __svt, size_type __pos, size_type __n = npos) + { + __sv_type __sv = __svt; + return _M_append(__sv.data() + + std::__sv_check(__sv.size(), __pos, "basic_string::append"), + std::__sv_limit(__sv.size(), __pos, __n)); + } +#endif // C++17 + + /** + * @brief Append a single character. + * @param __c Character to append. + */ + _GLIBCXX20_CONSTEXPR + void + push_back(_CharT __c) + { + const size_type __size = this->size(); + if (__size + 1 > this->capacity()) + this->_M_mutate(__size, size_type(0), 0, size_type(1)); + traits_type::assign(this->_M_data()[__size], __c); + this->_M_set_length(__size + 1); + } + + /** + * @brief Set value to contents of another string. + * @param __str Source string to use. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + assign(const basic_string& __str) + { +#if __cplusplus >= 201103L + if (_Alloc_traits::_S_propagate_on_copy_assign()) + { + if (!_Alloc_traits::_S_always_equal() && !_M_is_local() + && _M_get_allocator() != __str._M_get_allocator()) + { + // Propagating allocator cannot free existing storage so must + // deallocate it before replacing current allocator. + if (__str.size() <= _S_local_capacity) + { + _M_destroy(_M_allocated_capacity); + _M_data(_M_use_local_data()); + _M_set_length(0); + } + else + { + const auto __len = __str.size(); + auto __alloc = __str._M_get_allocator(); + // If this allocation throws there are no effects: + auto __ptr = _S_allocate(__alloc, __len + 1); + _M_destroy(_M_allocated_capacity); + _M_data(__ptr); + _M_capacity(__len); + _M_set_length(__len); + } + } + std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator()); + } +#endif + this->_M_assign(__str); + return *this; + } + +#if __cplusplus >= 201103L + /** + * @brief Set value to contents of another string. + * @param __str Source string to use. + * @return Reference to this string. + * + * This function sets this string to the exact contents of @a __str. + * @a __str is a valid, but unspecified string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + assign(basic_string&& __str) + noexcept(_Alloc_traits::_S_nothrow_move()) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2063. Contradictory requirements for string move assignment + return *this = std::move(__str); + } +#endif // C++11 + + /** + * @brief Set value to a substring of a string. + * @param __str The string to use. + * @param __pos Index of the first character of str. + * @param __n Number of characters to use. + * @return Reference to this string. + * @throw std::out_of_range if @a pos is not a valid index. + * + * This function sets this string to the substring of @a __str + * consisting of @a __n characters at @a __pos. If @a __n is + * is larger than the number of available characters in @a + * __str, the remainder of @a __str is used. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + assign(const basic_string& __str, size_type __pos, size_type __n = npos) + { return _M_replace(size_type(0), this->size(), __str._M_data() + + __str._M_check(__pos, "basic_string::assign"), + __str._M_limit(__pos, __n)); } + + /** + * @brief Set value to a C substring. + * @param __s The C string to use. + * @param __n Number of characters to use. + * @return Reference to this string. + * + * This function sets the value of this string to the first @a __n + * characters of @a __s. If @a __n is is larger than the number of + * available characters in @a __s, the remainder of @a __s is used. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + assign(const _CharT* __s, size_type __n) + { + __glibcxx_requires_string_len(__s, __n); + return _M_replace(size_type(0), this->size(), __s, __n); + } + + /** + * @brief Set value to contents of a C string. + * @param __s The C string to use. + * @return Reference to this string. + * + * This function sets the value of this string to the value of @a __s. + * The data is copied, so there is no dependence on @a __s once the + * function returns. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + assign(const _CharT* __s) + { + __glibcxx_requires_string(__s); + return _M_replace(size_type(0), this->size(), __s, + traits_type::length(__s)); + } + + /** + * @brief Set value to multiple characters. + * @param __n Length of the resulting string. + * @param __c The character to use. + * @return Reference to this string. + * + * This function sets the value of this string to @a __n copies of + * character @a __c. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + assign(size_type __n, _CharT __c) + { return _M_replace_aux(size_type(0), this->size(), __n, __c); } + + /** + * @brief Set value to a range of characters. + * @param __first Iterator referencing the first character to append. + * @param __last Iterator marking the end of the range. + * @return Reference to this string. + * + * Sets value of string to characters in the range [__first,__last). + */ +#if __cplusplus >= 201103L +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + template> + _GLIBCXX20_CONSTEXPR + basic_string& + assign(_InputIterator __first, _InputIterator __last) + { + using _IterTraits = iterator_traits<_InputIterator>; + if constexpr (is_pointer::value + && is_same::value) + { + __glibcxx_requires_valid_range(__first, __last); + return _M_replace(size_type(0), size(), + std::__niter_base(__first), __last - __first); + } +#if __cplusplus >= 202002L + else if constexpr (contiguous_iterator<_InputIterator> + && is_same_v, + _CharT>) + { + __glibcxx_requires_valid_range(__first, __last); + return _M_replace(size_type(0), size(), + std::to_address(__first), __last - __first); + } +#endif + else + return *this = basic_string(__first, __last, get_allocator()); + } +#pragma GCC diagnostic pop +#else + template + basic_string& + assign(_InputIterator __first, _InputIterator __last) + { return this->replace(begin(), end(), __first, __last); } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Assign a range to the string. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + * + * The range `__rg` is allowed to overlap with `*this`. + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr basic_string& + assign_range(_Rg&& __rg) + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + _M_get_allocator()); + assign(std::move(__s)); + return *this; + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Set value to an initializer_list of characters. + * @param __l The initializer_list of characters to assign. + * @return Reference to this string. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + assign(initializer_list<_CharT> __l) + { + // The initializer_list array cannot alias the characters in *this + // so we don't need to use replace to that case. + const size_type __n = __l.size(); + if (__n > capacity()) + *this = basic_string(__l.begin(), __l.end(), get_allocator()); + else + { + if (__n) + _S_copy(_M_data(), __l.begin(), __n); + _M_set_length(__n); + } + return *this; + } +#endif // C++11 + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Set value from a string_view. + * @param __svt The source object convertible to string_view. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + assign(const _Tp& __svt) + { + __sv_type __sv = __svt; + return this->assign(__sv.data(), __sv.size()); + } + + /** + * @brief Set value from a range of characters in a string_view. + * @param __svt The source object convertible to string_view. + * @param __pos The position in the string_view to assign from. + * @param __n The number of characters to assign. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + assign(const _Tp& __svt, size_type __pos, size_type __n = npos) + { + __sv_type __sv = __svt; + return _M_replace(size_type(0), this->size(), + __sv.data() + + std::__sv_check(__sv.size(), __pos, "basic_string::assign"), + std::__sv_limit(__sv.size(), __pos, __n)); + } +#endif // C++17 + +#if __cplusplus >= 201103L + /** + * @brief Insert multiple characters. + * @param __p Const_iterator referencing location in string to + * insert at. + * @param __n Number of characters to insert + * @param __c The character to insert. + * @return Iterator referencing the first inserted char. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Inserts @a __n copies of character @a __c starting at the + * position referenced by iterator @a __p. If adding + * characters causes the length to exceed max_size(), + * length_error is thrown. The value of the string doesn't + * change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __p, size_type __n, _CharT __c) + { + _GLIBCXX_DEBUG_PEDASSERT(__p >= begin() && __p <= end()); + const size_type __pos = __p - begin(); + this->replace(__p, __p, __n, __c); + return iterator(this->_M_data() + __pos); + } +#else + /** + * @brief Insert multiple characters. + * @param __p Iterator referencing location in string to insert at. + * @param __n Number of characters to insert + * @param __c The character to insert. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Inserts @a __n copies of character @a __c starting at the + * position referenced by iterator @a __p. If adding + * characters causes the length to exceed max_size(), + * length_error is thrown. The value of the string doesn't + * change if an error is thrown. + */ + void + insert(iterator __p, size_type __n, _CharT __c) + { this->replace(__p, __p, __n, __c); } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Insert a range of characters. + * @param __p Const_iterator referencing location in string to + * insert at. + * @param __beg Start of range. + * @param __end End of range. + * @return Iterator referencing the first inserted char. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Inserts characters in range [beg,end). If adding characters + * causes the length to exceed max_size(), length_error is + * thrown. The value of the string doesn't change if an error + * is thrown. + */ + template> + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __p, _InputIterator __beg, _InputIterator __end) + { + _GLIBCXX_DEBUG_PEDASSERT(__p >= begin() && __p <= end()); + const size_type __pos = __p - begin(); + this->replace(__p, __p, __beg, __end); + return iterator(this->_M_data() + __pos); + } +#else + /** + * @brief Insert a range of characters. + * @param __p Iterator referencing location in string to insert at. + * @param __beg Start of range. + * @param __end End of range. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Inserts characters in range [__beg,__end). If adding + * characters causes the length to exceed max_size(), + * length_error is thrown. The value of the string doesn't + * change if an error is thrown. + */ + template + void + insert(iterator __p, _InputIterator __beg, _InputIterator __end) + { this->replace(__p, __p, __beg, __end); } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Insert a range into the string. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + * + * The range `__rg` is allowed to overlap with `*this`. + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr iterator + insert_range(const_iterator __p, _Rg&& __rg) + { + auto __pos = __p - cbegin(); + + if constexpr (ranges::forward_range<_Rg>) + if (ranges::empty(__rg)) + return begin() + __pos; + + + if (__p == cend()) + append_range(std::forward<_Rg>(__rg)); + else + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + _M_get_allocator()); + insert(__pos, __s); + } + return begin() + __pos; + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Insert an initializer_list of characters. + * @param __p Iterator referencing location in string to insert at. + * @param __l The initializer_list of characters to insert. + * @throw std::length_error If new length exceeds @c max_size(). + */ + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __p, initializer_list<_CharT> __l) + { return this->insert(__p, __l.begin(), __l.end()); } + +#ifdef _GLIBCXX_DEFINING_STRING_INSTANTIATIONS + // See PR libstdc++/83328 + void + insert(iterator __p, initializer_list<_CharT> __l) + { + _GLIBCXX_DEBUG_PEDASSERT(__p >= begin() && __p <= end()); + this->insert(__p - begin(), __l.begin(), __l.size()); + } +#endif +#endif // C++11 + + /** + * @brief Insert value of a string. + * @param __pos1 Position in string to insert at. + * @param __str The string to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Inserts value of @a __str starting at @a __pos1. If adding + * characters causes the length to exceed max_size(), + * length_error is thrown. The value of the string doesn't + * change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + insert(size_type __pos1, const basic_string& __str) + { return this->replace(__pos1, size_type(0), + __str._M_data(), __str.size()); } + + /** + * @brief Insert a substring. + * @param __pos1 Position in string to insert at. + * @param __str The string to insert. + * @param __pos2 Start of characters in str to insert. + * @param __n Number of characters to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * @throw std::out_of_range If @a pos1 > size() or + * @a __pos2 > @a str.size(). + * + * Starting at @a pos1, insert @a __n character of @a __str + * beginning with @a __pos2. If adding characters causes the + * length to exceed max_size(), length_error is thrown. If @a + * __pos1 is beyond the end of this string or @a __pos2 is + * beyond the end of @a __str, out_of_range is thrown. The + * value of the string doesn't change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + insert(size_type __pos1, const basic_string& __str, + size_type __pos2, size_type __n = npos) + { return this->replace(__pos1, size_type(0), __str._M_data() + + __str._M_check(__pos2, "basic_string::insert"), + __str._M_limit(__pos2, __n)); } + + /** + * @brief Insert a C substring. + * @param __pos Position in string to insert at. + * @param __s The C string to insert. + * @param __n The number of characters to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * @throw std::out_of_range If @a __pos is beyond the end of this + * string. + * + * Inserts the first @a __n characters of @a __s starting at @a + * __pos. If adding characters causes the length to exceed + * max_size(), length_error is thrown. If @a __pos is beyond + * end(), out_of_range is thrown. The value of the string + * doesn't change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + insert(size_type __pos, const _CharT* __s, size_type __n) + { return this->replace(__pos, size_type(0), __s, __n); } + + /** + * @brief Insert a C string. + * @param __pos Position in string to insert at. + * @param __s The C string to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * @throw std::out_of_range If @a pos is beyond the end of this + * string. + * + * Inserts the first @a n characters of @a __s starting at @a __pos. If + * adding characters causes the length to exceed max_size(), + * length_error is thrown. If @a __pos is beyond end(), out_of_range is + * thrown. The value of the string doesn't change if an error is + * thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + insert(size_type __pos, const _CharT* __s) + { + __glibcxx_requires_string(__s); + return this->replace(__pos, size_type(0), __s, + traits_type::length(__s)); + } + + /** + * @brief Insert multiple characters. + * @param __pos Index in string to insert at. + * @param __n Number of characters to insert + * @param __c The character to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * @throw std::out_of_range If @a __pos is beyond the end of this + * string. + * + * Inserts @a __n copies of character @a __c starting at index + * @a __pos. If adding characters causes the length to exceed + * max_size(), length_error is thrown. If @a __pos > length(), + * out_of_range is thrown. The value of the string doesn't + * change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + insert(size_type __pos, size_type __n, _CharT __c) + { return _M_replace_aux(_M_check(__pos, "basic_string::insert"), + size_type(0), __n, __c); } + + /** + * @brief Insert one character. + * @param __p Iterator referencing position in string to insert at. + * @param __c The character to insert. + * @return Iterator referencing newly inserted char. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Inserts character @a __c at position referenced by @a __p. + * If adding character causes the length to exceed max_size(), + * length_error is thrown. If @a __p is beyond end of string, + * out_of_range is thrown. The value of the string doesn't + * change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + iterator + insert(__const_iterator __p, _CharT __c) + { + _GLIBCXX_DEBUG_PEDASSERT(__p >= begin() && __p <= end()); + const size_type __pos = __p - begin(); + _M_replace_aux(__pos, size_type(0), size_type(1), __c); + return iterator(_M_data() + __pos); + } + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Insert a string_view. + * @param __pos Position in string to insert at. + * @param __svt The object convertible to string_view to insert. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + insert(size_type __pos, const _Tp& __svt) + { + __sv_type __sv = __svt; + return this->insert(__pos, __sv.data(), __sv.size()); + } + + /** + * @brief Insert a string_view. + * @param __pos1 Position in string to insert at. + * @param __svt The object convertible to string_view to insert from. + * @param __pos2 Start of characters in str to insert. + * @param __n The number of characters to insert. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + insert(size_type __pos1, const _Tp& __svt, + size_type __pos2, size_type __n = npos) + { + __sv_type __sv = __svt; + return this->replace(__pos1, size_type(0), + __sv.data() + + std::__sv_check(__sv.size(), __pos2, "basic_string::insert"), + std::__sv_limit(__sv.size(), __pos2, __n)); + } +#endif // C++17 + + /** + * @brief Remove characters. + * @param __pos Index of first character to remove (default 0). + * @param __n Number of characters to remove (default remainder). + * @return Reference to this string. + * @throw std::out_of_range If @a pos is beyond the end of this + * string. + * + * Removes @a __n characters from this string starting at @a + * __pos. The length of the string is reduced by @a __n. If + * there are < @a __n characters to remove, the remainder of + * the string is truncated. If @a __p is beyond end of string, + * out_of_range is thrown. The value of the string doesn't + * change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + erase(size_type __pos = 0, size_type __n = npos) + { + _M_check(__pos, "basic_string::erase"); + if (__n == npos) + this->_M_set_length(__pos); + else if (__n != 0) + this->_M_erase(__pos, _M_limit(__pos, __n)); + return *this; + } + + /** + * @brief Remove one character. + * @param __position Iterator referencing the character to remove. + * @return iterator referencing same location after removal. + * + * Removes the character at @a __position from this string. The value + * of the string doesn't change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + iterator + erase(__const_iterator __position) + { + _GLIBCXX_DEBUG_PEDASSERT(__position >= begin() + && __position < end()); + const size_type __pos = __position - begin(); + this->_M_erase(__pos, size_type(1)); + return iterator(_M_data() + __pos); + } + + /** + * @brief Remove a range of characters. + * @param __first Iterator referencing the first character to remove. + * @param __last Iterator referencing the end of the range. + * @return Iterator referencing location of first after removal. + * + * Removes the characters in the range [first,last) from this string. + * The value of the string doesn't change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + iterator + erase(__const_iterator __first, __const_iterator __last) + { + _GLIBCXX_DEBUG_PEDASSERT(__first >= begin() && __first <= __last + && __last <= end()); + const size_type __pos = __first - begin(); + if (__last == end()) + this->_M_set_length(__pos); + else + this->_M_erase(__pos, __last - __first); + return iterator(this->_M_data() + __pos); + } + +#if __cplusplus >= 201103L + /** + * @brief Remove the last character. + * + * The string must be non-empty. + */ + _GLIBCXX20_CONSTEXPR + void + pop_back() noexcept + { + __glibcxx_assert(!empty()); + _M_erase(size() - 1, 1); + } +#endif // C++11 + + /** + * @brief Replace characters with value from another string. + * @param __pos Index of first character to replace. + * @param __n Number of characters to be replaced. + * @param __str String to insert. + * @return Reference to this string. + * @throw std::out_of_range If @a pos is beyond the end of this + * string. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__pos,__pos+__n) from + * this string. In place, the value of @a __str is inserted. + * If @a __pos is beyond end of string, out_of_range is thrown. + * If the length of the result exceeds max_size(), length_error + * is thrown. The value of the string doesn't change if an + * error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + replace(size_type __pos, size_type __n, const basic_string& __str) + { return this->replace(__pos, __n, __str._M_data(), __str.size()); } + + /** + * @brief Replace characters with value from another string. + * @param __pos1 Index of first character to replace. + * @param __n1 Number of characters to be replaced. + * @param __str String to insert. + * @param __pos2 Index of first character of str to use. + * @param __n2 Number of characters from str to use. + * @return Reference to this string. + * @throw std::out_of_range If @a __pos1 > size() or @a __pos2 > + * __str.size(). + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__pos1,__pos1 + n) from this + * string. In place, the value of @a __str is inserted. If @a __pos is + * beyond end of string, out_of_range is thrown. If the length of the + * result exceeds max_size(), length_error is thrown. The value of the + * string doesn't change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + replace(size_type __pos1, size_type __n1, const basic_string& __str, + size_type __pos2, size_type __n2 = npos) + { return this->replace(__pos1, __n1, __str._M_data() + + __str._M_check(__pos2, "basic_string::replace"), + __str._M_limit(__pos2, __n2)); } + + /** + * @brief Replace characters with value of a C substring. + * @param __pos Index of first character to replace. + * @param __n1 Number of characters to be replaced. + * @param __s C string to insert. + * @param __n2 Number of characters from @a s to use. + * @return Reference to this string. + * @throw std::out_of_range If @a pos1 > size(). + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__pos,__pos + __n1) + * from this string. In place, the first @a __n2 characters of + * @a __s are inserted, or all of @a __s if @a __n2 is too large. If + * @a __pos is beyond end of string, out_of_range is thrown. If + * the length of result exceeds max_size(), length_error is + * thrown. The value of the string doesn't change if an error + * is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + replace(size_type __pos, size_type __n1, const _CharT* __s, + size_type __n2) + { + __glibcxx_requires_string_len(__s, __n2); + return _M_replace(_M_check(__pos, "basic_string::replace"), + _M_limit(__pos, __n1), __s, __n2); + } + + /** + * @brief Replace characters with value of a C string. + * @param __pos Index of first character to replace. + * @param __n1 Number of characters to be replaced. + * @param __s C string to insert. + * @return Reference to this string. + * @throw std::out_of_range If @a pos > size(). + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__pos,__pos + __n1) + * from this string. In place, the characters of @a __s are + * inserted. If @a __pos is beyond end of string, out_of_range + * is thrown. If the length of result exceeds max_size(), + * length_error is thrown. The value of the string doesn't + * change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + replace(size_type __pos, size_type __n1, const _CharT* __s) + { + __glibcxx_requires_string(__s); + return this->replace(__pos, __n1, __s, traits_type::length(__s)); + } + + /** + * @brief Replace characters with multiple characters. + * @param __pos Index of first character to replace. + * @param __n1 Number of characters to be replaced. + * @param __n2 Number of characters to insert. + * @param __c Character to insert. + * @return Reference to this string. + * @throw std::out_of_range If @a __pos > size(). + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [pos,pos + n1) from this + * string. In place, @a __n2 copies of @a __c are inserted. + * If @a __pos is beyond end of string, out_of_range is thrown. + * If the length of result exceeds max_size(), length_error is + * thrown. The value of the string doesn't change if an error + * is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) + { return _M_replace_aux(_M_check(__pos, "basic_string::replace"), + _M_limit(__pos, __n1), __n2, __c); } + + /** + * @brief Replace range of characters with string. + * @param __i1 Iterator referencing start of range to replace. + * @param __i2 Iterator referencing end of range to replace. + * @param __str String value to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__i1,__i2). In place, + * the value of @a __str is inserted. If the length of result + * exceeds max_size(), length_error is thrown. The value of + * the string doesn't change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + replace(__const_iterator __i1, __const_iterator __i2, + const basic_string& __str) + { return this->replace(__i1, __i2, __str._M_data(), __str.size()); } + + /** + * @brief Replace range of characters with C substring. + * @param __i1 Iterator referencing start of range to replace. + * @param __i2 Iterator referencing end of range to replace. + * @param __s C string value to insert. + * @param __n Number of characters from s to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__i1,__i2). In place, + * the first @a __n characters of @a __s are inserted. If the + * length of result exceeds max_size(), length_error is thrown. + * The value of the string doesn't change if an error is + * thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + replace(__const_iterator __i1, __const_iterator __i2, + const _CharT* __s, size_type __n) + { + _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2 + && __i2 <= end()); + return this->replace(__i1 - begin(), __i2 - __i1, __s, __n); + } + + /** + * @brief Replace range of characters with C string. + * @param __i1 Iterator referencing start of range to replace. + * @param __i2 Iterator referencing end of range to replace. + * @param __s C string value to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__i1,__i2). In place, + * the characters of @a __s are inserted. If the length of + * result exceeds max_size(), length_error is thrown. The + * value of the string doesn't change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + replace(__const_iterator __i1, __const_iterator __i2, const _CharT* __s) + { + __glibcxx_requires_string(__s); + return this->replace(__i1, __i2, __s, traits_type::length(__s)); + } + + /** + * @brief Replace range of characters with multiple characters + * @param __i1 Iterator referencing start of range to replace. + * @param __i2 Iterator referencing end of range to replace. + * @param __n Number of characters to insert. + * @param __c Character to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__i1,__i2). In place, + * @a __n copies of @a __c are inserted. If the length of + * result exceeds max_size(), length_error is thrown. The + * value of the string doesn't change if an error is thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& + replace(__const_iterator __i1, __const_iterator __i2, size_type __n, + _CharT __c) + { + _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2 + && __i2 <= end()); + return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __c); + } + + /** + * @brief Replace range of characters with range. + * @param __i1 Iterator referencing start of range to replace. + * @param __i2 Iterator referencing end of range to replace. + * @param __k1 Iterator referencing start of range to insert. + * @param __k2 Iterator referencing end of range to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__i1,__i2). In place, + * characters in the range [__k1,__k2) are inserted. If the + * length of result exceeds max_size(), length_error is thrown. + * The value of the string doesn't change if an error is + * thrown. + */ +#if __cplusplus >= 201103L + template> + _GLIBCXX20_CONSTEXPR + basic_string& + replace(const_iterator __i1, const_iterator __i2, + _InputIterator __k1, _InputIterator __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2 + && __i2 <= end()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->_M_replace_dispatch(__i1, __i2, __k1, __k2, + std::__false_type()); + } +#else + template +#ifdef _GLIBCXX_DISAMBIGUATE_REPLACE_INST + typename __enable_if_not_native_iterator<_InputIterator>::__type +#else + basic_string& +#endif + replace(iterator __i1, iterator __i2, + _InputIterator __k1, _InputIterator __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2 + && __i2 <= end()); + __glibcxx_requires_valid_range(__k1, __k2); + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral()); + } +#endif + + // Specializations for the common case of pointer and iterator: + // useful to avoid the overhead of temporary buffering in _M_replace. + _GLIBCXX20_CONSTEXPR + basic_string& + replace(__const_iterator __i1, __const_iterator __i2, + _CharT* __k1, _CharT* __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2 + && __i2 <= end()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->replace(__i1 - begin(), __i2 - __i1, + __k1, __k2 - __k1); + } + + _GLIBCXX20_CONSTEXPR + basic_string& + replace(__const_iterator __i1, __const_iterator __i2, + const _CharT* __k1, const _CharT* __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2 + && __i2 <= end()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->replace(__i1 - begin(), __i2 - __i1, + __k1, __k2 - __k1); + } + + _GLIBCXX20_CONSTEXPR + basic_string& + replace(__const_iterator __i1, __const_iterator __i2, + iterator __k1, iterator __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2 + && __i2 <= end()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->replace(__i1 - begin(), __i2 - __i1, + __k1.base(), __k2 - __k1); + } + + _GLIBCXX20_CONSTEXPR + basic_string& + replace(__const_iterator __i1, __const_iterator __i2, + const_iterator __k1, const_iterator __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2 + && __i2 <= end()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->replace(__i1 - begin(), __i2 - __i1, + __k1.base(), __k2 - __k1); + } + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Replace part of the string with a range. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + * + * The range `__rg` is allowed to overlap with `*this`. + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr basic_string& + replace_with_range(const_iterator __i1, const_iterator __i2, _Rg&& __rg) + { + if (__i1 == cend()) + append_range(std::forward<_Rg>(__rg)); + else + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + _M_get_allocator()); + replace(__i1, __i2, __s); + } + return *this; + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Replace range of characters with initializer_list. + * @param __i1 Iterator referencing start of range to replace. + * @param __i2 Iterator referencing end of range to replace. + * @param __l The initializer_list of characters to insert. + * @return Reference to this string. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Removes the characters in the range [__i1,__i2). In place, + * characters in the range [__k1,__k2) are inserted. If the + * length of result exceeds max_size(), length_error is thrown. + * The value of the string doesn't change if an error is + * thrown. + */ + _GLIBCXX20_CONSTEXPR + basic_string& replace(const_iterator __i1, const_iterator __i2, + initializer_list<_CharT> __l) + { return this->replace(__i1, __i2, __l.begin(), __l.size()); } +#endif // C++11 + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Replace range of characters with string_view. + * @param __pos The position to replace at. + * @param __n The number of characters to replace. + * @param __svt The object convertible to string_view to insert. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + replace(size_type __pos, size_type __n, const _Tp& __svt) + { + __sv_type __sv = __svt; + return this->replace(__pos, __n, __sv.data(), __sv.size()); + } + + /** + * @brief Replace range of characters with string_view. + * @param __pos1 The position to replace at. + * @param __n1 The number of characters to replace. + * @param __svt The object convertible to string_view to insert from. + * @param __pos2 The position in the string_view to insert from. + * @param __n2 The number of characters to insert. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + replace(size_type __pos1, size_type __n1, const _Tp& __svt, + size_type __pos2, size_type __n2 = npos) + { + __sv_type __sv = __svt; + return this->replace(__pos1, __n1, + __sv.data() + + std::__sv_check(__sv.size(), __pos2, "basic_string::replace"), + std::__sv_limit(__sv.size(), __pos2, __n2)); + } + + /** + * @brief Replace range of characters with string_view. + * @param __i1 An iterator referencing the start position + to replace at. + * @param __i2 An iterator referencing the end position + for the replace. + * @param __svt The object convertible to string_view to insert from. + * @return Reference to this string. + */ + template + _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, basic_string&> + replace(const_iterator __i1, const_iterator __i2, const _Tp& __svt) + { + __sv_type __sv = __svt; + return this->replace(__i1 - begin(), __i2 - __i1, __sv); + } +#endif // C++17 + + private: + template + _GLIBCXX20_CONSTEXPR + basic_string& + _M_replace_dispatch(const_iterator __i1, const_iterator __i2, + _Integer __n, _Integer __val, __true_type) + { return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __val); } + + template + _GLIBCXX20_CONSTEXPR + basic_string& + _M_replace_dispatch(const_iterator __i1, const_iterator __i2, + _InputIterator __k1, _InputIterator __k2, + __false_type); + + _GLIBCXX20_CONSTEXPR + basic_string& + _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, + _CharT __c); + + __attribute__((__noinline__, __noclone__, __cold__)) void + _M_replace_cold(pointer __p, size_type __len1, const _CharT* __s, + const size_type __len2, const size_type __how_much); + + _GLIBCXX20_CONSTEXPR + basic_string& + _M_replace(size_type __pos, size_type __len1, const _CharT* __s, + const size_type __len2); + + _GLIBCXX20_CONSTEXPR + basic_string& + _M_append(const _CharT* __s, size_type __n); + + public: + + /** + * @brief Copy substring into C string. + * @param __s C string to copy value into. + * @param __n Number of characters to copy. + * @param __pos Index of first character to copy. + * @return Number of characters actually copied + * @throw std::out_of_range If __pos > size(). + * + * Copies up to @a __n characters starting at @a __pos into the + * C string @a __s. If @a __pos is %greater than size(), + * out_of_range is thrown. + */ + _GLIBCXX20_CONSTEXPR + size_type + copy(_CharT* __s, size_type __n, size_type __pos = 0) const; + + /** + * @brief Swap contents with another string. + * @param __s String to swap with. + * + * Exchanges the contents of this string with that of @a __s in constant + * time. + */ + _GLIBCXX20_CONSTEXPR + void + swap(basic_string& __s) _GLIBCXX_NOEXCEPT; + + // String operations: + /** + * @brief Return const pointer to null-terminated contents. + * + * This is a handle to internal data. Do not modify or dire things may + * happen. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const _CharT* + c_str() const _GLIBCXX_NOEXCEPT + { return _M_data(); } + + /** + * @brief Return const pointer to contents. + * + * This is a pointer to internal data. It is undefined to modify + * the contents through the returned pointer. To get a pointer that + * allows modifying the contents use @c &str[0] instead, + * (or in C++17 the non-const @c str.data() overload). + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const _CharT* + data() const _GLIBCXX_NOEXCEPT + { return _M_data(); } + +#if __cplusplus >= 201703L + /** + * @brief Return non-const pointer to contents. + * + * This is a pointer to the character sequence held by the string. + * Modifying the characters in the sequence is allowed. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _CharT* + data() noexcept + { return _M_data(); } +#endif + + /** + * @brief Return copy of allocator used to construct this string. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + allocator_type + get_allocator() const _GLIBCXX_NOEXCEPT + { return _M_get_allocator(); } + + /** + * @brief Find position of a C substring. + * @param __s C string to locate. + * @param __pos Index of character to search from. + * @param __n Number of characters from @a s to search for. + * @return Index of start of first occurrence. + * + * Starting from @a __pos, searches forward for the first @a + * __n characters in @a __s within this string. If found, + * returns the index where it begins. If not found, returns + * npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT; + + /** + * @brief Find position of a string. + * @param __str String to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of start of first occurrence. + * + * Starting from @a __pos, searches forward for value of @a __str within + * this string. If found, returns the index where it begins. If not + * found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find(const basic_string& __str, size_type __pos = 0) const + _GLIBCXX_NOEXCEPT + { return this->find(__str.data(), __pos, __str.size()); } + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Find position of a string_view. + * @param __svt The object convertible to string_view to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of start of first occurrence. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, size_type> + find(const _Tp& __svt, size_type __pos = 0) const + noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return this->find(__sv.data(), __pos, __sv.size()); + } +#endif // C++17 + + /** + * @brief Find position of a C string. + * @param __s C string to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of start of first occurrence. + * + * Starting from @a __pos, searches forward for the value of @a + * __s within this string. If found, returns the index where + * it begins. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find(const _CharT* __s, size_type __pos = 0) const _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string(__s); + return this->find(__s, __pos, traits_type::length(__s)); + } + + /** + * @brief Find position of a character. + * @param __c Character to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + * + * Starting from @a __pos, searches forward for @a __c within + * this string. If found, returns the index where it was + * found. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT; + + /** + * @brief Find last position of a string. + * @param __str String to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of start of last occurrence. + * + * Starting from @a __pos, searches backward for value of @a + * __str within this string. If found, returns the index where + * it begins. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + rfind(const basic_string& __str, size_type __pos = npos) const + _GLIBCXX_NOEXCEPT + { return this->rfind(__str.data(), __pos, __str.size()); } + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Find last position of a string_view. + * @param __svt The object convertible to string_view to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of start of last occurrence. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, size_type> + rfind(const _Tp& __svt, size_type __pos = npos) const + noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return this->rfind(__sv.data(), __pos, __sv.size()); + } +#endif // C++17 + + /** + * @brief Find last position of a C substring. + * @param __s C string to locate. + * @param __pos Index of character to search back from. + * @param __n Number of characters from s to search for. + * @return Index of start of last occurrence. + * + * Starting from @a __pos, searches backward for the first @a + * __n characters in @a __s within this string. If found, + * returns the index where it begins. If not found, returns + * npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + rfind(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT; + + /** + * @brief Find last position of a C string. + * @param __s C string to locate. + * @param __pos Index of character to start search at (default end). + * @return Index of start of last occurrence. + * + * Starting from @a __pos, searches backward for the value of + * @a __s within this string. If found, returns the index + * where it begins. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + rfind(const _CharT* __s, size_type __pos = npos) const + { + __glibcxx_requires_string(__s); + return this->rfind(__s, __pos, traits_type::length(__s)); + } + + /** + * @brief Find last position of a character. + * @param __c Character to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + * + * Starting from @a __pos, searches backward for @a __c within + * this string. If found, returns the index where it was + * found. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + rfind(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT; + + /** + * @brief Find position of a character of string. + * @param __str String containing characters to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + * + * Starting from @a __pos, searches forward for one of the + * characters of @a __str within this string. If found, + * returns the index where it was found. If not found, returns + * npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_first_of(const basic_string& __str, size_type __pos = 0) const + _GLIBCXX_NOEXCEPT + { return this->find_first_of(__str.data(), __pos, __str.size()); } + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Find position of a character of a string_view. + * @param __svt An object convertible to string_view containing + * characters to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, size_type> + find_first_of(const _Tp& __svt, size_type __pos = 0) const + noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return this->find_first_of(__sv.data(), __pos, __sv.size()); + } +#endif // C++17 + + /** + * @brief Find position of a character of C substring. + * @param __s String containing characters to locate. + * @param __pos Index of character to search from. + * @param __n Number of characters from s to search for. + * @return Index of first occurrence. + * + * Starting from @a __pos, searches forward for one of the + * first @a __n characters of @a __s within this string. If + * found, returns the index where it was found. If not found, + * returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_first_of(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT; + + /** + * @brief Find position of a character of C string. + * @param __s String containing characters to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + * + * Starting from @a __pos, searches forward for one of the + * characters of @a __s within this string. If found, returns + * the index where it was found. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_first_of(const _CharT* __s, size_type __pos = 0) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string(__s); + return this->find_first_of(__s, __pos, traits_type::length(__s)); + } + + /** + * @brief Find position of a character. + * @param __c Character to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + * + * Starting from @a __pos, searches forward for the character + * @a __c within this string. If found, returns the index + * where it was found. If not found, returns npos. + * + * Note: equivalent to find(__c, __pos). + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_first_of(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT + { return this->find(__c, __pos); } + + /** + * @brief Find last position of a character of string. + * @param __str String containing characters to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + * + * Starting from @a __pos, searches backward for one of the + * characters of @a __str within this string. If found, + * returns the index where it was found. If not found, returns + * npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_last_of(const basic_string& __str, size_type __pos = npos) const + _GLIBCXX_NOEXCEPT + { return this->find_last_of(__str.data(), __pos, __str.size()); } + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Find last position of a character of string. + * @param __svt An object convertible to string_view containing + * characters to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, size_type> + find_last_of(const _Tp& __svt, size_type __pos = npos) const + noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return this->find_last_of(__sv.data(), __pos, __sv.size()); + } +#endif // C++17 + + /** + * @brief Find last position of a character of C substring. + * @param __s C string containing characters to locate. + * @param __pos Index of character to search back from. + * @param __n Number of characters from s to search for. + * @return Index of last occurrence. + * + * Starting from @a __pos, searches backward for one of the + * first @a __n characters of @a __s within this string. If + * found, returns the index where it was found. If not found, + * returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_last_of(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT; + + /** + * @brief Find last position of a character of C string. + * @param __s C string containing characters to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + * + * Starting from @a __pos, searches backward for one of the + * characters of @a __s within this string. If found, returns + * the index where it was found. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_last_of(const _CharT* __s, size_type __pos = npos) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string(__s); + return this->find_last_of(__s, __pos, traits_type::length(__s)); + } + + /** + * @brief Find last position of a character. + * @param __c Character to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + * + * Starting from @a __pos, searches backward for @a __c within + * this string. If found, returns the index where it was + * found. If not found, returns npos. + * + * Note: equivalent to rfind(__c, __pos). + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_last_of(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT + { return this->rfind(__c, __pos); } + + /** + * @brief Find position of a character not in string. + * @param __str String containing characters to avoid. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + * + * Starting from @a __pos, searches forward for a character not contained + * in @a __str within this string. If found, returns the index where it + * was found. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_first_not_of(const basic_string& __str, size_type __pos = 0) const + _GLIBCXX_NOEXCEPT + { return this->find_first_not_of(__str.data(), __pos, __str.size()); } + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Find position of a character not in a string_view. + * @param __svt A object convertible to string_view containing + * characters to avoid. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, size_type> + find_first_not_of(const _Tp& __svt, size_type __pos = 0) const + noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return this->find_first_not_of(__sv.data(), __pos, __sv.size()); + } +#endif // C++17 + + /** + * @brief Find position of a character not in C substring. + * @param __s C string containing characters to avoid. + * @param __pos Index of character to search from. + * @param __n Number of characters from __s to consider. + * @return Index of first occurrence. + * + * Starting from @a __pos, searches forward for a character not + * contained in the first @a __n characters of @a __s within + * this string. If found, returns the index where it was + * found. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_first_not_of(const _CharT* __s, size_type __pos, + size_type __n) const _GLIBCXX_NOEXCEPT; + + /** + * @brief Find position of a character not in C string. + * @param __s C string containing characters to avoid. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + * + * Starting from @a __pos, searches forward for a character not + * contained in @a __s within this string. If found, returns + * the index where it was found. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_first_not_of(const _CharT* __s, size_type __pos = 0) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string(__s); + return this->find_first_not_of(__s, __pos, traits_type::length(__s)); + } + + /** + * @brief Find position of a different character. + * @param __c Character to avoid. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + * + * Starting from @a __pos, searches forward for a character + * other than @a __c within this string. If found, returns the + * index where it was found. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_first_not_of(_CharT __c, size_type __pos = 0) const + _GLIBCXX_NOEXCEPT; + + /** + * @brief Find last position of a character not in string. + * @param __str String containing characters to avoid. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + * + * Starting from @a __pos, searches backward for a character + * not contained in @a __str within this string. If found, + * returns the index where it was found. If not found, returns + * npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_last_not_of(const basic_string& __str, size_type __pos = npos) const + _GLIBCXX_NOEXCEPT + { return this->find_last_not_of(__str.data(), __pos, __str.size()); } + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Find last position of a character not in a string_view. + * @param __svt An object convertible to string_view containing + * characters to avoid. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, size_type> + find_last_not_of(const _Tp& __svt, size_type __pos = npos) const + noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return this->find_last_not_of(__sv.data(), __pos, __sv.size()); + } +#endif // C++17 + + /** + * @brief Find last position of a character not in C substring. + * @param __s C string containing characters to avoid. + * @param __pos Index of character to search back from. + * @param __n Number of characters from s to consider. + * @return Index of last occurrence. + * + * Starting from @a __pos, searches backward for a character not + * contained in the first @a __n characters of @a __s within this string. + * If found, returns the index where it was found. If not found, + * returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_last_not_of(const _CharT* __s, size_type __pos, + size_type __n) const _GLIBCXX_NOEXCEPT; + /** + * @brief Find last position of a character not in C string. + * @param __s C string containing characters to avoid. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + * + * Starting from @a __pos, searches backward for a character + * not contained in @a __s within this string. If found, + * returns the index where it was found. If not found, returns + * npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_last_not_of(const _CharT* __s, size_type __pos = npos) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string(__s); + return this->find_last_not_of(__s, __pos, traits_type::length(__s)); + } + + /** + * @brief Find last position of a different character. + * @param __c Character to avoid. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + * + * Starting from @a __pos, searches backward for a character other than + * @a __c within this string. If found, returns the index where it was + * found. If not found, returns npos. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + find_last_not_of(_CharT __c, size_type __pos = npos) const + _GLIBCXX_NOEXCEPT; + + /** + * @brief Get a substring. + * @param __pos Index of first character (default 0). + * @param __n Number of characters in substring (default remainder). + * @return The new string. + * @throw std::out_of_range If __pos > size(). + * + * Construct and return a new string using the @a __n + * characters starting at @a __pos. If the string is too + * short, use the remainder of the characters. If @a __pos is + * beyond the end of the string, out_of_range is thrown. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + basic_string + substr(size_type __pos = 0, size_type __n = npos) const + { return basic_string(*this, + _M_check(__pos, "basic_string::substr"), __n); } + + /** + * @brief Compare to a string. + * @param __str String to compare against. + * @return Integer < 0, 0, or > 0. + * + * Returns an integer < 0 if this string is ordered before @a + * __str, 0 if their values are equivalent, or > 0 if this + * string is ordered after @a __str. Determines the effective + * length rlen of the strings to compare as the smallest of + * size() and str.size(). The function then compares the two + * strings by calling traits::compare(data(), str.data(),rlen). + * If the result of the comparison is nonzero returns it, + * otherwise the shorter one is ordered first. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + int + compare(const basic_string& __str) const + { + const size_type __size = this->size(); + const size_type __osize = __str.size(); + const size_type __len = std::min(__size, __osize); + + int __r = traits_type::compare(_M_data(), __str.data(), __len); + if (!__r) + __r = _S_compare(__size, __osize); + return __r; + } + +#ifdef __glibcxx_string_view // >= C++17 + /** + * @brief Compare to a string_view. + * @param __svt An object convertible to string_view to compare against. + * @return Integer < 0, 0, or > 0. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, int> + compare(const _Tp& __svt) const + noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + const size_type __size = this->size(); + const size_type __osize = __sv.size(); + const size_type __len = std::min(__size, __osize); + + int __r = traits_type::compare(_M_data(), __sv.data(), __len); + if (!__r) + __r = _S_compare(__size, __osize); + return __r; + } + + /** + * @brief Compare to a string_view. + * @param __pos A position in the string to start comparing from. + * @param __n The number of characters to compare. + * @param __svt An object convertible to string_view to compare + * against. + * @return Integer < 0, 0, or > 0. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, int> + compare(size_type __pos, size_type __n, const _Tp& __svt) const + noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return __sv_type(*this).substr(__pos, __n).compare(__sv); + } + + /** + * @brief Compare to a string_view. + * @param __pos1 A position in the string to start comparing from. + * @param __n1 The number of characters to compare. + * @param __svt An object convertible to string_view to compare + * against. + * @param __pos2 A position in the string_view to start comparing from. + * @param __n2 The number of characters to compare. + * @return Integer < 0, 0, or > 0. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _If_sv<_Tp, int> + compare(size_type __pos1, size_type __n1, const _Tp& __svt, + size_type __pos2, size_type __n2 = npos) const + noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return __sv_type(*this) + .substr(__pos1, __n1).compare(__sv.substr(__pos2, __n2)); + } +#endif // C++17 + + /** + * @brief Compare substring to a string. + * @param __pos Index of first character of substring. + * @param __n Number of characters in substring. + * @param __str String to compare against. + * @return Integer < 0, 0, or > 0. + * + * Form the substring of this string from the @a __n characters + * starting at @a __pos. Returns an integer < 0 if the + * substring is ordered before @a __str, 0 if their values are + * equivalent, or > 0 if the substring is ordered after @a + * __str. Determines the effective length rlen of the strings + * to compare as the smallest of the length of the substring + * and @a __str.size(). The function then compares the two + * strings by calling + * traits::compare(substring.data(),str.data(),rlen). If the + * result of the comparison is nonzero returns it, otherwise + * the shorter one is ordered first. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + int + compare(size_type __pos, size_type __n, const basic_string& __str) const + { + _M_check(__pos, "basic_string::compare"); + __n = _M_limit(__pos, __n); + const size_type __osize = __str.size(); + const size_type __len = std::min(__n, __osize); + int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len); + if (!__r) + __r = _S_compare(__n, __osize); + return __r; + } + + /** + * @brief Compare substring to a substring. + * @param __pos1 Index of first character of substring. + * @param __n1 Number of characters in substring. + * @param __str String to compare against. + * @param __pos2 Index of first character of substring of str. + * @param __n2 Number of characters in substring of str. + * @return Integer < 0, 0, or > 0. + * + * Form the substring of this string from the @a __n1 + * characters starting at @a __pos1. Form the substring of @a + * __str from the @a __n2 characters starting at @a __pos2. + * Returns an integer < 0 if this substring is ordered before + * the substring of @a __str, 0 if their values are equivalent, + * or > 0 if this substring is ordered after the substring of + * @a __str. Determines the effective length rlen of the + * strings to compare as the smallest of the lengths of the + * substrings. The function then compares the two strings by + * calling + * traits::compare(substring.data(),str.substr(pos2,n2).data(),rlen). + * If the result of the comparison is nonzero returns it, + * otherwise the shorter one is ordered first. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + int + compare(size_type __pos1, size_type __n1, const basic_string& __str, + size_type __pos2, size_type __n2 = npos) const + { + _M_check(__pos1, "basic_string::compare"); + __str._M_check(__pos2, "basic_string::compare"); + __n1 = _M_limit(__pos1, __n1); + __n2 = __str._M_limit(__pos2, __n2); + const size_type __len = std::min(__n1, __n2); + int __r = traits_type::compare(_M_data() + __pos1, + __str.data() + __pos2, __len); + if (!__r) + __r = _S_compare(__n1, __n2); + return __r; + } + + /** + * @brief Compare to a C string. + * @param __s C string to compare against. + * @return Integer < 0, 0, or > 0. + * + * Returns an integer < 0 if this string is ordered before @a __s, 0 if + * their values are equivalent, or > 0 if this string is ordered after + * @a __s. Determines the effective length rlen of the strings to + * compare as the smallest of size() and the length of a string + * constructed from @a __s. The function then compares the two strings + * by calling traits::compare(data(),s,rlen). If the result of the + * comparison is nonzero returns it, otherwise the shorter one is + * ordered first. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + int + compare(const _CharT* __s) const _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string(__s); + const size_type __size = this->size(); + const size_type __osize = traits_type::length(__s); + const size_type __len = std::min(__size, __osize); + int __r = traits_type::compare(_M_data(), __s, __len); + if (!__r) + __r = _S_compare(__size, __osize); + return __r; + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 5 String::compare specification questionable + /** + * @brief Compare substring to a C string. + * @param __pos Index of first character of substring. + * @param __n1 Number of characters in substring. + * @param __s C string to compare against. + * @return Integer < 0, 0, or > 0. + * + * Form the substring of this string from the @a __n1 + * characters starting at @a pos. Returns an integer < 0 if + * the substring is ordered before @a __s, 0 if their values + * are equivalent, or > 0 if the substring is ordered after @a + * __s. Determines the effective length rlen of the strings to + * compare as the smallest of the length of the substring and + * the length of a string constructed from @a __s. The + * function then compares the two string by calling + * traits::compare(substring.data(),__s,rlen). If the result of + * the comparison is nonzero returns it, otherwise the shorter + * one is ordered first. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + int + compare(size_type __pos, size_type __n1, const _CharT* __s) const + { + __glibcxx_requires_string(__s); + _M_check(__pos, "basic_string::compare"); + __n1 = _M_limit(__pos, __n1); + const size_type __osize = traits_type::length(__s); + const size_type __len = std::min(__n1, __osize); + int __r = traits_type::compare(_M_data() + __pos, __s, __len); + if (!__r) + __r = _S_compare(__n1, __osize); + return __r; + } + + /** + * @brief Compare substring against a character %array. + * @param __pos Index of first character of substring. + * @param __n1 Number of characters in substring. + * @param __s character %array to compare against. + * @param __n2 Number of characters of s. + * @return Integer < 0, 0, or > 0. + * + * Form the substring of this string from the @a __n1 + * characters starting at @a __pos. Form a string from the + * first @a __n2 characters of @a __s. Returns an integer < 0 + * if this substring is ordered before the string from @a __s, + * 0 if their values are equivalent, or > 0 if this substring + * is ordered after the string from @a __s. Determines the + * effective length rlen of the strings to compare as the + * smallest of the length of the substring and @a __n2. The + * function then compares the two strings by calling + * traits::compare(substring.data(),s,rlen). If the result of + * the comparison is nonzero returns it, otherwise the shorter + * one is ordered first. + * + * NB: s must have at least n2 characters, '\\0' has + * no special meaning. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + int + compare(size_type __pos, size_type __n1, const _CharT* __s, + size_type __n2) const + { + __glibcxx_requires_string_len(__s, __n2); + _M_check(__pos, "basic_string::compare"); + __n1 = _M_limit(__pos, __n1); + const size_type __len = std::min(__n1, __n2); + int __r = traits_type::compare(_M_data() + __pos, __s, __len); + if (!__r) + __r = _S_compare(__n1, __n2); + return __r; + } + +#if __cplusplus >= 202002L + [[nodiscard]] + constexpr bool + starts_with(basic_string_view<_CharT, _Traits> __x) const noexcept + { return __sv_type(this->data(), this->size()).starts_with(__x); } + + [[nodiscard]] + constexpr bool + starts_with(_CharT __x) const noexcept + { return __sv_type(this->data(), this->size()).starts_with(__x); } + + [[nodiscard, __gnu__::__nonnull__]] + constexpr bool + starts_with(const _CharT* __x) const noexcept + { return __sv_type(this->data(), this->size()).starts_with(__x); } + + [[nodiscard]] + constexpr bool + ends_with(basic_string_view<_CharT, _Traits> __x) const noexcept + { return __sv_type(this->data(), this->size()).ends_with(__x); } + + [[nodiscard]] + constexpr bool + ends_with(_CharT __x) const noexcept + { return __sv_type(this->data(), this->size()).ends_with(__x); } + + [[nodiscard, __gnu__::__nonnull__]] + constexpr bool + ends_with(const _CharT* __x) const noexcept + { return __sv_type(this->data(), this->size()).ends_with(__x); } +#endif // C++20 + +#if __cplusplus > 202002L + [[nodiscard]] + constexpr bool + contains(basic_string_view<_CharT, _Traits> __x) const noexcept + { return __sv_type(this->data(), this->size()).contains(__x); } + + [[nodiscard]] + constexpr bool + contains(_CharT __x) const noexcept + { return __sv_type(this->data(), this->size()).contains(__x); } + + [[nodiscard, __gnu__::__nonnull__]] + constexpr bool + contains(const _CharT* __x) const noexcept + { return __sv_type(this->data(), this->size()).contains(__x); } +#endif // C++23 + + // Allow basic_stringbuf::__xfer_bufptrs to call _M_length: + template friend class basic_stringbuf; + }; +_GLIBCXX_END_NAMESPACE_CXX11 +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // _GLIBCXX_USE_CXX11_ABI + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if __cpp_deduction_guides >= 201606 +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + template::value_type, + typename _Allocator = allocator<_CharT>, + typename = _RequireInputIter<_InputIterator>, + typename = _RequireAllocator<_Allocator>> + basic_string(_InputIterator, _InputIterator, _Allocator = _Allocator()) + -> basic_string<_CharT, char_traits<_CharT>, _Allocator>; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3075. basic_string needs deduction guides from basic_string_view + template, + typename = _RequireAllocator<_Allocator>> + basic_string(basic_string_view<_CharT, _Traits>, const _Allocator& = _Allocator()) + -> basic_string<_CharT, _Traits, _Allocator>; + + template, + typename = _RequireAllocator<_Allocator>> + basic_string(basic_string_view<_CharT, _Traits>, + typename basic_string<_CharT, _Traits, _Allocator>::size_type, + typename basic_string<_CharT, _Traits, _Allocator>::size_type, + const _Allocator& = _Allocator()) + -> basic_string<_CharT, _Traits, _Allocator>; + +#if __glibcxx_containers_ranges // C++ >= 23 + template>> + basic_string(from_range_t, _Rg&&, _Allocator = _Allocator()) + -> basic_string, + char_traits>, + _Allocator>; +#endif +_GLIBCXX_END_NAMESPACE_CXX11 +#endif + + template + _GLIBCXX20_CONSTEXPR + inline _Str + __str_concat(typename _Str::value_type const* __lhs, + typename _Str::size_type __lhs_len, + typename _Str::value_type const* __rhs, + typename _Str::size_type __rhs_len, + typename _Str::allocator_type const& __a) + { + typedef typename _Str::allocator_type allocator_type; + typedef __gnu_cxx::__alloc_traits _Alloc_traits; + _Str __str(_Alloc_traits::_S_select_on_copy(__a)); + __str.reserve(__lhs_len + __rhs_len); + __str.append(__lhs, __lhs_len); + __str.append(__rhs, __rhs_len); + return __str; + } + + // operator+ + /** + * @brief Concatenate two strings. + * @param __lhs First string. + * @param __rhs Last string. + * @return New string with value of @a __lhs followed by @a __rhs. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { + typedef basic_string<_CharT, _Traits, _Alloc> _Str; + return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(), + __rhs.c_str(), __rhs.size(), + __lhs.get_allocator()); + } + + /** + * @brief Concatenate C string and string. + * @param __lhs First string. + * @param __rhs Last string. + * @return New string with value of @a __lhs followed by @a __rhs. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT,_Traits,_Alloc> + operator+(const _CharT* __lhs, + const basic_string<_CharT,_Traits,_Alloc>& __rhs) + { + __glibcxx_requires_string(__lhs); + typedef basic_string<_CharT, _Traits, _Alloc> _Str; + return std::__str_concat<_Str>(__lhs, _Traits::length(__lhs), + __rhs.c_str(), __rhs.size(), + __rhs.get_allocator()); + } + + /** + * @brief Concatenate character and string. + * @param __lhs First string. + * @param __rhs Last string. + * @return New string with @a __lhs followed by @a __rhs. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT,_Traits,_Alloc> + operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs) + { + typedef basic_string<_CharT, _Traits, _Alloc> _Str; + return std::__str_concat<_Str>(__builtin_addressof(__lhs), 1, + __rhs.c_str(), __rhs.size(), + __rhs.get_allocator()); + } + + /** + * @brief Concatenate string and C string. + * @param __lhs First string. + * @param __rhs Last string. + * @return New string with @a __lhs followed by @a __rhs. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) + { + __glibcxx_requires_string(__rhs); + typedef basic_string<_CharT, _Traits, _Alloc> _Str; + return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(), + __rhs, _Traits::length(__rhs), + __lhs.get_allocator()); + } + /** + * @brief Concatenate string and character. + * @param __lhs First string. + * @param __rhs Last string. + * @return New string with @a __lhs followed by @a __rhs. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs) + { + typedef basic_string<_CharT, _Traits, _Alloc> _Str; + return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(), + __builtin_addressof(__rhs), 1, + __lhs.get_allocator()); + } + +#if __cplusplus >= 201103L + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { return std::move(__lhs.append(__rhs)); } + + template + _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + basic_string<_CharT, _Traits, _Alloc>&& __rhs) + { return std::move(__rhs.insert(0, __lhs)); } + + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, + basic_string<_CharT, _Traits, _Alloc>&& __rhs) + { +#if _GLIBCXX_USE_CXX11_ABI + using _Alloc_traits = allocator_traits<_Alloc>; + bool __use_rhs = false; + if _GLIBCXX17_CONSTEXPR (typename _Alloc_traits::is_always_equal{}) + __use_rhs = true; + else if (__lhs.get_allocator() == __rhs.get_allocator()) + __use_rhs = true; + if (__use_rhs) +#endif + { + const auto __size = __lhs.size() + __rhs.size(); + if (__size > __lhs.capacity() && __size <= __rhs.capacity()) + return std::move(__rhs.insert(0, __lhs)); + } + return std::move(__lhs.append(__rhs)); + } + + template + _GLIBCXX_NODISCARD _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(const _CharT* __lhs, + basic_string<_CharT, _Traits, _Alloc>&& __rhs) + { return std::move(__rhs.insert(0, __lhs)); } + + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(_CharT __lhs, + basic_string<_CharT, _Traits, _Alloc>&& __rhs) + { return std::move(__rhs.insert(0, 1, __lhs)); } + + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, + const _CharT* __rhs) + { return std::move(__lhs.append(__rhs)); } + + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline basic_string<_CharT, _Traits, _Alloc> + operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, + _CharT __rhs) + { return std::move(__lhs.append(1, __rhs)); } +#endif + +#if __glibcxx_string_view >= 202403L + // const string & + string_view + template + [[nodiscard]] + constexpr basic_string<_CharT, _Traits, _Alloc> + operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + type_identity_t> __rhs) + { + using _Str = basic_string<_CharT, _Traits, _Alloc>; + return std::__str_concat<_Str>(__lhs.data(), __lhs.size(), + __rhs.data(), __rhs.size(), + __lhs.get_allocator()); + } + + // string && + string_view + template + [[nodiscard]] + constexpr basic_string<_CharT, _Traits, _Alloc> + operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, + type_identity_t> __rhs) + { + return std::move(__lhs.append(__rhs)); + } + + // string_view + const string & + template + [[nodiscard]] + constexpr basic_string<_CharT, _Traits, _Alloc> + operator+(type_identity_t> __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { + using _Str = basic_string<_CharT, _Traits, _Alloc>; + return std::__str_concat<_Str>(__lhs.data(), __lhs.size(), + __rhs.data(), __rhs.size(), + __rhs.get_allocator()); + } + + // string_view + string && + template + [[nodiscard]] + constexpr basic_string<_CharT, _Traits, _Alloc> + operator+(type_identity_t> __lhs, + basic_string<_CharT, _Traits, _Alloc>&& __rhs) + { + return std::move(__rhs.insert(0, __lhs)); + } +#endif + + // operator == + /** + * @brief Test equivalence of two strings. + * @param __lhs First string. + * @param __rhs Second string. + * @return True if @a __lhs.compare(@a __rhs) == 0. False otherwise. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline bool + operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + _GLIBCXX_NOEXCEPT + { + return __lhs.size() == __rhs.size() + && !_Traits::compare(__lhs.data(), __rhs.data(), __lhs.size()); + } + + /** + * @brief Test equivalence of string and C string. + * @param __lhs String. + * @param __rhs C string. + * @return True if @a __lhs.compare(@a __rhs) == 0. False otherwise. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline bool + operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) + { + return __lhs.size() == _Traits::length(__rhs) + && !_Traits::compare(__lhs.data(), __rhs, __lhs.size()); + } + +#if __cpp_lib_three_way_comparison + /** + * @brief Three-way comparison of a string and a C string. + * @param __lhs A string. + * @param __rhs A null-terminated string. + * @return A value indicating whether `__lhs` is less than, equal to, + * greater than, or incomparable with `__rhs`. + */ + template + [[nodiscard]] + constexpr auto + operator<=>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) noexcept + -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0)) + { return __detail::__char_traits_cmp_cat<_Traits>(__lhs.compare(__rhs)); } + + /** + * @brief Three-way comparison of a string and a C string. + * @param __lhs A string. + * @param __rhs A null-terminated string. + * @return A value indicating whether `__lhs` is less than, equal to, + * greater than, or incomparable with `__rhs`. + */ + template + [[nodiscard]] + constexpr auto + operator<=>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) noexcept + -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0)) + { return __detail::__char_traits_cmp_cat<_Traits>(__lhs.compare(__rhs)); } +#else + /** + * @brief Test equivalence of C string and string. + * @param __lhs C string. + * @param __rhs String. + * @return True if @a __rhs.compare(@a __lhs) == 0. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator==(const _CharT* __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { return __rhs == __lhs; } + + // operator != + /** + * @brief Test difference of two strings. + * @param __lhs First string. + * @param __rhs Second string. + * @return True if @a __lhs.compare(@a __rhs) != 0. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + _GLIBCXX_NOEXCEPT + { return !(__lhs == __rhs); } + + /** + * @brief Test difference of C string and string. + * @param __lhs C string. + * @param __rhs String. + * @return True if @a __rhs.compare(@a __lhs) != 0. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator!=(const _CharT* __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { return !(__rhs == __lhs); } + + /** + * @brief Test difference of string and C string. + * @param __lhs String. + * @param __rhs C string. + * @return True if @a __lhs.compare(@a __rhs) != 0. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) + { return !(__lhs == __rhs); } + + // operator < + /** + * @brief Test if string precedes string. + * @param __lhs First string. + * @param __rhs Second string. + * @return True if @a __lhs precedes @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.compare(__rhs) < 0; } + + /** + * @brief Test if string precedes C string. + * @param __lhs String. + * @param __rhs C string. + * @return True if @a __lhs precedes @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) + { return __lhs.compare(__rhs) < 0; } + + /** + * @brief Test if C string precedes string. + * @param __lhs C string. + * @param __rhs String. + * @return True if @a __lhs precedes @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator<(const _CharT* __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { return __rhs.compare(__lhs) > 0; } + + // operator > + /** + * @brief Test if string follows string. + * @param __lhs First string. + * @param __rhs Second string. + * @return True if @a __lhs follows @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.compare(__rhs) > 0; } + + /** + * @brief Test if string follows C string. + * @param __lhs String. + * @param __rhs C string. + * @return True if @a __lhs follows @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) + { return __lhs.compare(__rhs) > 0; } + + /** + * @brief Test if C string follows string. + * @param __lhs C string. + * @param __rhs String. + * @return True if @a __lhs follows @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator>(const _CharT* __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { return __rhs.compare(__lhs) < 0; } + + // operator <= + /** + * @brief Test if string doesn't follow string. + * @param __lhs First string. + * @param __rhs Second string. + * @return True if @a __lhs doesn't follow @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.compare(__rhs) <= 0; } + + /** + * @brief Test if string doesn't follow C string. + * @param __lhs String. + * @param __rhs C string. + * @return True if @a __lhs doesn't follow @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) + { return __lhs.compare(__rhs) <= 0; } + + /** + * @brief Test if C string doesn't follow string. + * @param __lhs C string. + * @param __rhs String. + * @return True if @a __lhs doesn't follow @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator<=(const _CharT* __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { return __rhs.compare(__lhs) >= 0; } + + // operator >= + /** + * @brief Test if string doesn't precede string. + * @param __lhs First string. + * @param __rhs Second string. + * @return True if @a __lhs doesn't precede @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.compare(__rhs) >= 0; } + + /** + * @brief Test if string doesn't precede C string. + * @param __lhs String. + * @param __rhs C string. + * @return True if @a __lhs doesn't precede @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) + { return __lhs.compare(__rhs) >= 0; } + + /** + * @brief Test if C string doesn't precede string. + * @param __lhs C string. + * @param __rhs String. + * @return True if @a __lhs doesn't precede @a __rhs. False otherwise. + */ + template + _GLIBCXX_NODISCARD + inline bool + operator>=(const _CharT* __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { return __rhs.compare(__lhs) <= 0; } +#endif // three-way comparison + + /** + * @brief Swap contents of two strings. + * @param __lhs First string. + * @param __rhs Second string. + * + * Exchanges the contents of @a __lhs and @a __rhs in constant time. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + swap(basic_string<_CharT, _Traits, _Alloc>& __lhs, + basic_string<_CharT, _Traits, _Alloc>& __rhs) + _GLIBCXX_NOEXCEPT_IF(noexcept(__lhs.swap(__rhs))) + { __lhs.swap(__rhs); } + + + /** + * @brief Read stream into a string. + * @param __is Input stream. + * @param __str Buffer to store into. + * @return Reference to the input stream. + * + * Stores characters from @a __is into @a __str until whitespace is + * found, the end of the stream is encountered, or str.max_size() + * is reached. If is.width() is non-zero, that is the limit on the + * number of characters stored into @a __str. Any previous + * contents of @a __str are erased. + */ + template + basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, + basic_string<_CharT, _Traits, _Alloc>& __str); + + template<> + basic_istream& + operator>>(basic_istream& __is, basic_string& __str); + + /** + * @brief Write string to a stream. + * @param __os Output stream. + * @param __str String to write out. + * @return Reference to the output stream. + * + * Output characters of @a __str into os following the same rules as for + * writing a C string. + */ + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, + const basic_string<_CharT, _Traits, _Alloc>& __str) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 586. string inserter not a formatted function + return __ostream_insert(__os, __str.data(), __str.size()); + } + + /** + * @brief Read a line from stream into a string. + * @param __is Input stream. + * @param __str Buffer to store into. + * @param __delim Character marking end of line. + * @return Reference to the input stream. + * + * Stores characters from @a __is into @a __str until @a __delim is + * found, the end of the stream is encountered, or str.max_size() + * is reached. Any previous contents of @a __str are erased. If + * @a __delim is encountered, it is extracted but not stored into + * @a __str. + */ + template + basic_istream<_CharT, _Traits>& + getline(basic_istream<_CharT, _Traits>& __is, + basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim); + + /** + * @brief Read a line from stream into a string. + * @param __is Input stream. + * @param __str Buffer to store into. + * @return Reference to the input stream. + * + * Stores characters from is into @a __str until '\n' is + * found, the end of the stream is encountered, or str.max_size() + * is reached. Any previous contents of @a __str are erased. If + * end of line is encountered, it is extracted but not stored into + * @a __str. + */ + template + inline basic_istream<_CharT, _Traits>& + getline(basic_istream<_CharT, _Traits>& __is, + basic_string<_CharT, _Traits, _Alloc>& __str) + { return std::getline(__is, __str, __is.widen('\n')); } + +#if __cplusplus >= 201103L + /// Read a line from an rvalue stream into a string. + template + inline basic_istream<_CharT, _Traits>& + getline(basic_istream<_CharT, _Traits>&& __is, + basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) + { return std::getline(__is, __str, __delim); } + + /// Read a line from an rvalue stream into a string. + template + inline basic_istream<_CharT, _Traits>& + getline(basic_istream<_CharT, _Traits>&& __is, + basic_string<_CharT, _Traits, _Alloc>& __str) + { return std::getline(__is, __str); } +#endif + + template<> + basic_istream& + getline(basic_istream& __in, basic_string& __str, + char __delim); + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + basic_istream& + getline(basic_istream& __in, basic_string& __str, + wchar_t __delim); +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#if __cplusplus >= 201103L + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + // 21.4 Numeric Conversions [string.conversions]. + inline int + stoi(const string& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::strtol, "stoi", __str.c_str(), + __idx, __base); } + + inline long + stol(const string& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::strtol, "stol", __str.c_str(), + __idx, __base); } + + inline unsigned long + stoul(const string& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::strtoul, "stoul", __str.c_str(), + __idx, __base); } + +#if _GLIBCXX_USE_C99_STDLIB + inline long long + stoll(const string& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::strtoll, "stoll", __str.c_str(), + __idx, __base); } + + inline unsigned long long + stoull(const string& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::strtoull, "stoull", __str.c_str(), + __idx, __base); } +#elif __LONG_WIDTH__ == __LONG_LONG_WIDTH__ + inline long long + stoll(const string& __str, size_t* __idx = 0, int __base = 10) + { return std::stol(__str, __idx, __base); } + + inline unsigned long long + stoull(const string& __str, size_t* __idx = 0, int __base = 10) + { return std::stoul(__str, __idx, __base); } +#endif + + inline double + stod(const string& __str, size_t* __idx = 0) + { return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); } + +#if _GLIBCXX_HAVE_STRTOF + // NB: strtof vs strtod. + inline float + stof(const string& __str, size_t* __idx = 0) + { return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); } +#else + inline float + stof(const string& __str, size_t* __idx = 0) + { + double __d = std::stod(__str, __idx); + if (__builtin_isfinite(__d) && __d != 0.0) + { + double __abs_d = __builtin_fabs(__d); + if (__abs_d < __FLT_MIN__ || __abs_d > __FLT_MAX__) + { + errno = ERANGE; + std::__throw_out_of_range("stof"); + } + } + return __d; + } +#endif + +#if _GLIBCXX_HAVE_STRTOLD && ! _GLIBCXX_HAVE_BROKEN_STRTOLD + inline long double + stold(const string& __str, size_t* __idx = 0) + { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); } +#elif __DBL_MANT_DIG__ == __LDBL_MANT_DIG__ + inline long double + stold(const string& __str, size_t* __idx = 0) + { return std::stod(__str, __idx); } +#endif + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 1261. Insufficent overloads for to_string / to_wstring + + _GLIBCXX_NODISCARD + inline string + to_string(int __val) +#if _GLIBCXX_USE_CXX11_ABI && (__CHAR_BIT__ * __SIZEOF_INT__) <= 32 + noexcept // any 32-bit value fits in the SSO buffer +#endif + { + const bool __neg = __val < 0; + const unsigned __uval = __neg ? (unsigned)~__val + 1u : __val; + const auto __len = __detail::__to_chars_len(__uval); + string __str; + __str.__resize_and_overwrite(__neg + __len, [=](char* __p, size_t __n) { + __p[0] = '-'; + __detail::__to_chars_10_impl(__p + (int)__neg, __len, __uval); + return __n; + }); + return __str; + } + + _GLIBCXX_NODISCARD + inline string + to_string(unsigned __val) +#if _GLIBCXX_USE_CXX11_ABI && (__CHAR_BIT__ * __SIZEOF_INT__) <= 32 + noexcept // any 32-bit value fits in the SSO buffer +#endif + { + const auto __len = __detail::__to_chars_len(__val); + string __str; + __str.__resize_and_overwrite(__len, [__val](char* __p, size_t __n) { + __detail::__to_chars_10_impl(__p, __n, __val); + return __n; + }); + return __str; + } + + _GLIBCXX_NODISCARD + inline string + to_string(long __val) +#if _GLIBCXX_USE_CXX11_ABI && (__CHAR_BIT__ * __SIZEOF_LONG__) <= 32 + noexcept // any 32-bit value fits in the SSO buffer +#endif + { + const bool __neg = __val < 0; + const unsigned long __uval = __neg ? (unsigned long)~__val + 1ul : __val; + const auto __len = __detail::__to_chars_len(__uval); + string __str; + __str.__resize_and_overwrite(__neg + __len, [=](char* __p, size_t __n) { + __p[0] = '-'; + __detail::__to_chars_10_impl(__p + (int)__neg, __len, __uval); + return __n; + }); + return __str; + } + + _GLIBCXX_NODISCARD + inline string + to_string(unsigned long __val) +#if _GLIBCXX_USE_CXX11_ABI && (__CHAR_BIT__ * __SIZEOF_LONG__) <= 32 + noexcept // any 32-bit value fits in the SSO buffer +#endif + { + const auto __len = __detail::__to_chars_len(__val); + string __str; + __str.__resize_and_overwrite(__len, [__val](char* __p, size_t __n) { + __detail::__to_chars_10_impl(__p, __n, __val); + return __n; + }); + return __str; + } + + _GLIBCXX_NODISCARD + inline string + to_string(long long __val) + { + const bool __neg = __val < 0; + const unsigned long long __uval + = __neg ? (unsigned long long)~__val + 1ull : __val; + const auto __len = __detail::__to_chars_len(__uval); + string __str; + __str.__resize_and_overwrite(__neg + __len, [=](char* __p, size_t __n) { + __p[0] = '-'; + __detail::__to_chars_10_impl(__p + (int)__neg, __len, __uval); + return __n; + }); + return __str; + } + + _GLIBCXX_NODISCARD + inline string + to_string(unsigned long long __val) + { + const auto __len = __detail::__to_chars_len(__val); + string __str; + __str.__resize_and_overwrite(__len, [__val](char* __p, size_t __n) { + __detail::__to_chars_10_impl(__p, __n, __val); + return __n; + }); + return __str; + } + +#if __glibcxx_to_string >= 202306L // C++ >= 26 + + [[nodiscard]] + inline string + to_string(float __val) + { + string __str; + size_t __len = 15; + do { + __str.resize_and_overwrite(__len, + [__val, &__len] (char* __p, size_t __n) { + auto [__end, __err] = std::to_chars(__p, __p + __n, __val); + if (__err == errc{}) [[likely]] + return __end - __p; + __len *= 2; + return __p - __p;; + }); + } while (__str.empty()); + return __str; + } + + [[nodiscard]] + inline string + to_string(double __val) + { + string __str; + size_t __len = 15; + do { + __str.resize_and_overwrite(__len, + [__val, &__len] (char* __p, size_t __n) { + auto [__end, __err] = std::to_chars(__p, __p + __n, __val); + if (__err == errc{}) [[likely]] + return __end - __p; + __len *= 2; + return __p - __p;; + }); + } while (__str.empty()); + return __str; + } + + [[nodiscard]] + inline string + to_string(long double __val) + { + string __str; + size_t __len = 15; + do { + __str.resize_and_overwrite(__len, + [__val, &__len] (char* __p, size_t __n) { + auto [__end, __err] = std::to_chars(__p, __p + __n, __val); + if (__err == errc{}) [[likely]] + return __end - __p; + __len *= 2; + return __p - __p;; + }); + } while (__str.empty()); + return __str; + } +#elif _GLIBCXX_USE_C99_STDIO +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsuggest-attribute=format" + // NB: (v)snprintf vs sprintf. + + _GLIBCXX_NODISCARD + inline string + to_string(float __val) + { + const int __n = + __gnu_cxx::__numeric_traits::__max_exponent10 + 20; + return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, + "%f", __val); + } + + _GLIBCXX_NODISCARD + inline string + to_string(double __val) + { + const int __n = + __gnu_cxx::__numeric_traits::__max_exponent10 + 20; + return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, + "%f", __val); + } + + _GLIBCXX_NODISCARD + inline string + to_string(long double __val) + { + const int __n = + __gnu_cxx::__numeric_traits::__max_exponent10 + 20; + return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, + "%Lf", __val); + } +#pragma GCC diagnostic pop +#endif // _GLIBCXX_USE_C99_STDIO + +#if defined(_GLIBCXX_USE_WCHAR_T) && _GLIBCXX_USE_C99_WCHAR + inline int + stoi(const wstring& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::wcstol, "stoi", __str.c_str(), + __idx, __base); } + + inline long + stol(const wstring& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::wcstol, "stol", __str.c_str(), + __idx, __base); } + + inline unsigned long + stoul(const wstring& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::wcstoul, "stoul", __str.c_str(), + __idx, __base); } + + inline long long + stoll(const wstring& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::wcstoll, "stoll", __str.c_str(), + __idx, __base); } + + inline unsigned long long + stoull(const wstring& __str, size_t* __idx = 0, int __base = 10) + { return __gnu_cxx::__stoa(&std::wcstoull, "stoull", __str.c_str(), + __idx, __base); } + + // NB: wcstof vs wcstod. + inline float + stof(const wstring& __str, size_t* __idx = 0) + { return __gnu_cxx::__stoa(&std::wcstof, "stof", __str.c_str(), __idx); } + + inline double + stod(const wstring& __str, size_t* __idx = 0) + { return __gnu_cxx::__stoa(&std::wcstod, "stod", __str.c_str(), __idx); } + + inline long double + stold(const wstring& __str, size_t* __idx = 0) + { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); } +#endif + +#ifdef _GLIBCXX_USE_WCHAR_T +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + _GLIBCXX20_CONSTEXPR + inline void + __to_wstring_numeric(const char* __s, int __len, wchar_t* __wout) + { + // This condition is true if exec-charset and wide-exec-charset share the + // same values for the ASCII subset or the EBCDIC invariant character set. + if constexpr (wchar_t('0') == L'0' && wchar_t('-') == L'-' + && wchar_t('.') == L'.' && wchar_t('e') == L'e') + { + for (int __i = 0; __i < __len; ++__i) + __wout[__i] = (wchar_t) __s[__i]; + } + else + { + wchar_t __wc[256]; + for (int __i = '0'; __i <= '9'; ++__i) + __wc[__i] = L'0' + __i; + __wc['.'] = L'.'; + __wc['+'] = L'+'; + __wc['-'] = L'-'; + __wc['a'] = L'a'; + __wc['b'] = L'b'; + __wc['c'] = L'c'; + __wc['d'] = L'd'; + __wc['e'] = L'e'; + __wc['f'] = L'f'; + __wc['i'] = L'i'; // for "inf" + __wc['n'] = L'n'; // for "nan" and "inf" + __wc['p'] = L'p'; // for hexfloats "0x1p1" + __wc['x'] = L'x'; + __wc['A'] = L'A'; + __wc['B'] = L'B'; + __wc['C'] = L'C'; + __wc['D'] = L'D'; + __wc['E'] = L'E'; + __wc['F'] = L'F'; + __wc['I'] = L'I'; + __wc['N'] = L'N'; + __wc['P'] = L'P'; + __wc['X'] = L'X'; + + for (int __i = 0; __i < __len; ++__i) + __wout[__i] = __wc[(int)__s[__i]]; + } + } + +#if __glibcxx_constexpr_string >= 201907L + constexpr +#endif + inline wstring +#ifdef __glibcxx_string_view // >= C++17 + __to_wstring_numeric(string_view __s) +#else + __to_wstring_numeric(const string& __s) +#endif + { + if constexpr (wchar_t('0') == L'0' && wchar_t('-') == L'-' + && wchar_t('.') == L'.' && wchar_t('e') == L'e') + return wstring(__s.data(), __s.data() + __s.size()); + else + { + wstring __ws; + auto __f = __s.data(); + __ws.__resize_and_overwrite(__s.size(), + [__f] (wchar_t* __to, int __n) { + std::__to_wstring_numeric(__f, __n, __to); + return __n; + }); + return __ws; + } + } +#pragma GCC diagnostic pop + + _GLIBCXX_NODISCARD + inline wstring + to_wstring(int __val) + { return std::__to_wstring_numeric(std::to_string(__val)); } + + _GLIBCXX_NODISCARD + inline wstring + to_wstring(unsigned __val) + { return std::__to_wstring_numeric(std::to_string(__val)); } + + _GLIBCXX_NODISCARD + inline wstring + to_wstring(long __val) + { return std::__to_wstring_numeric(std::to_string(__val)); } + + _GLIBCXX_NODISCARD + inline wstring + to_wstring(unsigned long __val) + { return std::__to_wstring_numeric(std::to_string(__val)); } + + _GLIBCXX_NODISCARD + inline wstring + to_wstring(long long __val) + { return std::__to_wstring_numeric(std::to_string(__val)); } + + _GLIBCXX_NODISCARD + inline wstring + to_wstring(unsigned long long __val) + { return std::__to_wstring_numeric(std::to_string(__val)); } + +#if __glibcxx_to_string || _GLIBCXX_USE_C99_STDIO + _GLIBCXX_NODISCARD + inline wstring + to_wstring(float __val) + { return std::__to_wstring_numeric(std::to_string(__val)); } + + _GLIBCXX_NODISCARD + inline wstring + to_wstring(double __val) + { return std::__to_wstring_numeric(std::to_string(__val)); } + + _GLIBCXX_NODISCARD + inline wstring + to_wstring(long double __val) + { return std::__to_wstring_numeric(std::to_string(__val)); } +#endif +#endif // _GLIBCXX_USE_WCHAR_T + +_GLIBCXX_END_NAMESPACE_CXX11 +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* C++11 */ + +#if __cplusplus >= 201103L + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3705. Hashability shouldn't depend on basic_string's allocator + + template, _Alloc>> + struct __str_hash_base + : public __hash_base + { + [[__nodiscard__]] + size_t + operator()(const _StrT& __s) const noexcept + { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(_CharT)); } + }; + +#ifndef _GLIBCXX_COMPATIBILITY_CXX0X + /// std::hash specialization for string. + template + struct hash, _Alloc>> + : public __str_hash_base + { }; + + /// std::hash specialization for wstring. + template + struct hash, _Alloc>> + : public __str_hash_base + { }; + + template + struct __is_fast_hash, + _Alloc>>> + : std::false_type + { }; +#endif /* _GLIBCXX_COMPATIBILITY_CXX0X */ + +#ifdef _GLIBCXX_USE_CHAR8_T + /// std::hash specialization for u8string. + template + struct hash, _Alloc>> + : public __str_hash_base + { }; +#endif + + /// std::hash specialization for u16string. + template + struct hash, _Alloc>> + : public __str_hash_base + { }; + + /// std::hash specialization for u32string. + template + struct hash, _Alloc>> + : public __str_hash_base + { }; + +#if ! _GLIBCXX_INLINE_VERSION + // PR libstdc++/105907 - __is_fast_hash affects unordered container ABI. + template<> struct __is_fast_hash> : std::false_type { }; + template<> struct __is_fast_hash> : std::false_type { }; + template<> struct __is_fast_hash> : std::false_type { }; + template<> struct __is_fast_hash> : std::false_type { }; +#ifdef _GLIBCXX_USE_CHAR8_T + template<> struct __is_fast_hash> : std::false_type { }; +#endif +#else + // For versioned namespace, assume every std::hash> is slow. + template + struct __is_fast_hash>> + : std::false_type + { }; +#endif + +#ifdef __glibcxx_string_udls // C++ >= 14 + inline namespace literals + { + inline namespace string_literals + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wliteral-suffix" + +#if __glibcxx_constexpr_string >= 201907L +# define _GLIBCXX_STRING_CONSTEXPR constexpr +#else +# define _GLIBCXX_STRING_CONSTEXPR +#endif + + _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR + inline basic_string + operator""s(const char* __str, size_t __len) + { return basic_string{__str, __len}; } + + _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR + inline basic_string + operator""s(const wchar_t* __str, size_t __len) + { return basic_string{__str, __len}; } + +#ifdef _GLIBCXX_USE_CHAR8_T + _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR + inline basic_string + operator""s(const char8_t* __str, size_t __len) + { return basic_string{__str, __len}; } +#endif + + _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR + inline basic_string + operator""s(const char16_t* __str, size_t __len) + { return basic_string{__str, __len}; } + + _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR + inline basic_string + operator""s(const char32_t* __str, size_t __len) + { return basic_string{__str, __len}; } + +#undef _GLIBCXX_STRING_CONSTEXPR +#pragma GCC diagnostic pop + } // inline namespace string_literals + } // inline namespace literals +#endif // __glibcxx_string_udls + +#ifdef __glibcxx_variant // >= C++17 + namespace __detail::__variant + { + template struct _Never_valueless_alt; // see + + // Provide the strong exception-safety guarantee when emplacing a + // basic_string into a variant, but only if moving the string cannot throw. + template + struct _Never_valueless_alt> + : __and_< + is_nothrow_move_constructible>, + is_nothrow_move_assignable> + >::type + { }; + } // namespace __detail::__variant +#endif // C++17 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif /* _BASIC_STRING_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a8baae4c3a642a2dcee6da37eac7a54fa969f2b0 GIT binary patch literal 290329 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 GO~L@=S;UqA literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.tcc b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.tcc new file mode 100644 index 0000000..bca55bc --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.tcc @@ -0,0 +1,1066 @@ +// Components for manipulating sequences of characters -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/basic_string.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{string} + */ + +// +// ISO C++ 14882: 21 Strings library +// + +// Written by Jason Merrill based upon the specification by Takanori Adachi +// in ANSI X3J16/94-0013R2. Rewritten by Nathan Myers to ISO-14882. +// Non-reference-counted implementation written by Paolo Carlini and +// updated by Jonathan Wakely for ISO-14882-2011. + +#ifndef _BASIC_STRING_TCC +#define _BASIC_STRING_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if _GLIBCXX_USE_CXX11_ABI + + template + const typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>::npos; + + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + swap(basic_string& __s) _GLIBCXX_NOEXCEPT + { + if (this == std::__addressof(__s)) + return; + + _Alloc_traits::_S_on_swap(_M_get_allocator(), __s._M_get_allocator()); + + if (_M_is_local()) + if (__s._M_is_local()) + { + if (length() && __s.length()) + { + _CharT __tmp_data[_S_local_capacity + 1]; + traits_type::copy(__tmp_data, __s._M_local_buf, + __s.length() + 1); + traits_type::copy(__s._M_local_buf, _M_local_buf, + length() + 1); + traits_type::copy(_M_local_buf, __tmp_data, + __s.length() + 1); + } + else if (__s.length()) + { + _M_init_local_buf(); + traits_type::copy(_M_local_buf, __s._M_local_buf, + __s.length() + 1); + _M_length(__s.length()); + __s._M_set_length(0); + return; + } + else if (length()) + { + __s._M_init_local_buf(); + traits_type::copy(__s._M_local_buf, _M_local_buf, + length() + 1); + __s._M_length(length()); + _M_set_length(0); + return; + } + } + else + { + const size_type __tmp_capacity = __s._M_allocated_capacity; + __s._M_init_local_buf(); + traits_type::copy(__s._M_local_buf, _M_local_buf, + length() + 1); + _M_data(__s._M_data()); + __s._M_data(__s._M_local_buf); + _M_capacity(__tmp_capacity); + } + else + { + const size_type __tmp_capacity = _M_allocated_capacity; + if (__s._M_is_local()) + { + _M_init_local_buf(); + traits_type::copy(_M_local_buf, __s._M_local_buf, + __s.length() + 1); + __s._M_data(_M_data()); + _M_data(_M_local_buf); + } + else + { + pointer __tmp_ptr = _M_data(); + _M_data(__s._M_data()); + __s._M_data(__tmp_ptr); + _M_capacity(__s._M_allocated_capacity); + } + __s._M_capacity(__tmp_capacity); + } + + const size_type __tmp_length = length(); + _M_length(__s.length()); + __s._M_length(__tmp_length); + } + + template + _GLIBCXX20_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::pointer + basic_string<_CharT, _Traits, _Alloc>:: + _M_create(size_type& __capacity, size_type __old_capacity) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 83. String::npos vs. string::max_size() + if (__capacity > max_size()) + std::__throw_length_error(__N("basic_string::_M_create")); + + // The below implements an exponential growth policy, necessary to + // meet amortized linear time requirements of the library: see + // http://gcc.gnu.org/ml/libstdc++/2001-07/msg00085.html. + if (__capacity > __old_capacity && __capacity < 2 * __old_capacity) + { + __capacity = 2 * __old_capacity; + // Never allocate a string bigger than max_size. + if (__capacity > max_size()) + __capacity = max_size(); + } + + // NB: Need an array of char_type[__capacity], plus a terminating + // null char_type() element. + return _S_allocate(_M_get_allocator(), __capacity + 1); + } + + // NB: This is the special case for Input Iterators, used in + // istreambuf_iterators, etc. + // Input Iterators have a cost structure very different from + // pointers, calling for a different coding style. + template + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_construct(_InIterator __beg, _InIterator __end, + std::input_iterator_tag) + { + size_type __len = 0; + size_type __capacity = size_type(_S_local_capacity); + + _M_init_local_buf(); + + while (__beg != __end && __len < __capacity) + { + _M_local_buf[__len++] = *__beg; + ++__beg; + } + + struct _Guard + { + _GLIBCXX20_CONSTEXPR + explicit _Guard(basic_string* __s) : _M_guarded(__s) { } + + _GLIBCXX20_CONSTEXPR + ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); } + + basic_string* _M_guarded; + } __guard(this); + + while (__beg != __end) + { + if (__len == __capacity) + { + // Allocate more space. + __capacity = __len + 1; + pointer __another = _M_create(__capacity, __len); + this->_S_copy(__another, _M_data(), __len); + _M_dispose(); + _M_data(__another); + _M_capacity(__capacity); + } + traits_type::assign(_M_data()[__len++], + static_cast<_CharT>(*__beg)); + ++__beg; + } + + __guard._M_guarded = 0; + + _M_set_length(__len); + } + + template + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_construct(_InIterator __beg, _InIterator __end, + std::forward_iterator_tag) + { + size_type __dnew = static_cast(std::distance(__beg, __end)); + + if (__dnew > size_type(_S_local_capacity)) + { + _M_data(_M_create(__dnew, size_type(0))); + _M_capacity(__dnew); + } + else + _M_init_local_buf(); + + // Check for out_of_range and length_error exceptions. + struct _Guard + { + _GLIBCXX20_CONSTEXPR + explicit _Guard(basic_string* __s) : _M_guarded(__s) { } + + _GLIBCXX20_CONSTEXPR + ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); } + + basic_string* _M_guarded; + } __guard(this); + + this->_S_copy_chars(_M_data(), __beg, __end); + + __guard._M_guarded = 0; + + _M_set_length(__dnew); + } + + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_construct(size_type __n, _CharT __c) + { + if (__n > size_type(_S_local_capacity)) + { + _M_data(_M_create(__n, size_type(0))); + _M_capacity(__n); + } + else + _M_init_local_buf(); + + if (__n) + this->_S_assign(_M_data(), __n, __c); + + _M_set_length(__n); + } + + // Length of string constructed is easier to propagate inter-procedurally + // than difference between iterators. + template + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_construct(const _CharT* __str, size_type __n) + { + if (__n > size_type(_S_local_capacity)) + { + _M_data(_M_create(__n, size_type(0))); + _M_capacity(__n); + } + else + _M_init_local_buf(); + + if (__n || _Terminated) + this->_S_copy(_M_data(), __str, __n + _Terminated); + + _M_length(__n); + if (!_Terminated) + traits_type::assign(_M_data()[__n], _CharT()); + } + + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_assign(const basic_string& __str) + { + if (this != std::__addressof(__str)) + { + const size_type __rsize = __str.length(); + const size_type __capacity = capacity(); + + if (__rsize > __capacity) + { + size_type __new_capacity = __rsize; + pointer __tmp = _M_create(__new_capacity, __capacity); + _M_dispose(); + _M_data(__tmp); + _M_capacity(__new_capacity); + } + + if (__rsize) + this->_S_copy(_M_data(), __str._M_data(), __rsize); + + _M_set_length(__rsize); + } + } + + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + reserve(size_type __res) + { + const size_type __capacity = capacity(); + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2968. Inconsistencies between basic_string reserve and + // vector/unordered_map/unordered_set reserve functions + // P0966 reserve should not shrink + if (__res <= __capacity) + return; + + pointer __tmp = _M_create(__res, __capacity); + this->_S_copy(__tmp, _M_data(), length() + 1); + _M_dispose(); + _M_data(__tmp); + _M_capacity(__res); + } + + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, + size_type __len2) + { + const size_type __how_much = length() - __pos - __len1; + + size_type __new_capacity = length() + __len2 - __len1; + pointer __r = _M_create(__new_capacity, capacity()); + + if (__pos) + this->_S_copy(__r, _M_data(), __pos); + if (__s && __len2) + this->_S_copy(__r + __pos, __s, __len2); + if (__how_much) + this->_S_copy(__r + __pos + __len2, + _M_data() + __pos + __len1, __how_much); + + _M_dispose(); + _M_data(__r); + _M_capacity(__new_capacity); + } + + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_erase(size_type __pos, size_type __n) + { + const size_type __how_much = length() - __pos - __n; + + if (__how_much && __n) + this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much); + + _M_set_length(length() - __n); + } + + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + reserve() + { + if (_M_is_local()) + return; + + const size_type __length = length(); + const size_type __capacity = _M_allocated_capacity; + + if (__length <= size_type(_S_local_capacity)) + { + _M_init_local_buf(); + this->_S_copy(_M_local_buf, _M_data(), __length + 1); + _M_destroy(__capacity); + _M_data(_M_local_data()); + } +#if __cpp_exceptions + else if (__length < __capacity) + try + { + pointer __tmp = _S_allocate(_M_get_allocator(), __length + 1); + this->_S_copy(__tmp, _M_data(), __length + 1); + _M_dispose(); + _M_data(__tmp); + _M_capacity(__length); + } + catch (const __cxxabiv1::__forced_unwind&) + { throw; } + catch (...) + { /* swallow the exception */ } +#endif + } + + template + _GLIBCXX20_CONSTEXPR + void + basic_string<_CharT, _Traits, _Alloc>:: + resize(size_type __n, _CharT __c) + { + const size_type __size = this->size(); + if (__size < __n) + this->append(__n - __size, __c); + else if (__n < __size) + this->_M_set_length(__n); + } + + template + _GLIBCXX20_CONSTEXPR + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + _M_append(const _CharT* __s, size_type __n) + { + const size_type __len = __n + this->size(); + + if (__len <= this->capacity()) + { + if (__n) + this->_S_copy(this->_M_data() + this->size(), __s, __n); + } + else + this->_M_mutate(this->size(), size_type(0), __s, __n); + + this->_M_set_length(__len); + return *this; + } + + template + template + _GLIBCXX20_CONSTEXPR + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + _M_replace_dispatch(const_iterator __i1, const_iterator __i2, + _InputIterator __k1, _InputIterator __k2, + std::__false_type) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2788. unintentionally require a default constructible allocator + const basic_string __s(__k1, __k2, this->get_allocator()); + const size_type __n1 = __i2 - __i1; + return _M_replace(__i1 - begin(), __n1, __s._M_data(), + __s.size()); + } + + template + _GLIBCXX20_CONSTEXPR + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, + _CharT __c) + { + _M_check_length(__n1, __n2, "basic_string::_M_replace_aux"); + + const size_type __old_size = this->size(); + const size_type __new_size = __old_size + __n2 - __n1; + + if (__new_size <= this->capacity()) + { + pointer __p = this->_M_data() + __pos1; + + const size_type __how_much = __old_size - __pos1 - __n1; + if (__how_much && __n1 != __n2) + this->_S_move(__p + __n2, __p + __n1, __how_much); + } + else + this->_M_mutate(__pos1, __n1, 0, __n2); + + if (__n2) + this->_S_assign(this->_M_data() + __pos1, __n2, __c); + + this->_M_set_length(__new_size); + return *this; + } + + template + __attribute__((__noinline__, __noclone__, __cold__)) void + basic_string<_CharT, _Traits, _Alloc>:: + _M_replace_cold(pointer __p, size_type __len1, const _CharT* __s, + const size_type __len2, const size_type __how_much) + { + // Work in-place. + if (__len2 && __len2 <= __len1) + this->_S_move(__p, __s, __len2); + if (__how_much && __len1 != __len2) + this->_S_move(__p + __len2, __p + __len1, __how_much); + if (__len2 > __len1) + { + if (__s + __len2 <= __p + __len1) + this->_S_move(__p, __s, __len2); + else if (__s >= __p + __len1) + { + // Hint to middle end that __p and __s overlap + // (PR 98465). + const size_type __poff = (__s - __p) + (__len2 - __len1); + this->_S_copy(__p, __p + __poff, __len2); + } + else + { + const size_type __nleft = (__p + __len1) - __s; + this->_S_move(__p, __s, __nleft); + this->_S_copy(__p + __nleft, __p + __len2, __len2 - __nleft); + } + } + } + + template + _GLIBCXX20_CONSTEXPR + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + _M_replace(size_type __pos, size_type __len1, const _CharT* __s, + const size_type __len2) + { + _M_check_length(__len1, __len2, "basic_string::_M_replace"); + + const size_type __old_size = this->size(); + const size_type __new_size = __old_size + __len2 - __len1; + + if (__new_size <= this->capacity()) + { + pointer __p = this->_M_data() + __pos; + + const size_type __how_much = __old_size - __pos - __len1; +#if __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + { + auto __newp = _S_allocate(_M_get_allocator(), __new_size); + _S_copy(__newp, this->_M_data(), __pos); + _S_copy(__newp + __pos, __s, __len2); + _S_copy(__newp + __pos + __len2, __p + __len1, __how_much); + _S_copy(this->_M_data(), __newp, __new_size); + this->_M_get_allocator().deallocate(__newp, __new_size); + } + else +#endif + if (__builtin_expect(_M_disjunct(__s), true)) + { + if (__how_much && __len1 != __len2) + this->_S_move(__p + __len2, __p + __len1, __how_much); + if (__len2) + this->_S_copy(__p, __s, __len2); + } + else + _M_replace_cold(__p, __len1, __s, __len2, __how_much); + } + else + this->_M_mutate(__pos, __len1, __s, __len2); + + this->_M_set_length(__new_size); + return *this; + } + + template + _GLIBCXX20_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + copy(_CharT* __s, size_type __n, size_type __pos) const + { + _M_check(__pos, "basic_string::copy"); + __n = _M_limit(__pos, __n); + __glibcxx_requires_string_len(__s, __n); + if (__n) + _S_copy(__s, _M_data() + __pos, __n); + // 21.3.5.7 par 3: do not append null. (good.) + return __n; + } + +#ifdef __glibcxx_string_resize_and_overwrite // C++ >= 23 + template + template + [[__gnu__::__always_inline__]] + constexpr void + basic_string<_CharT, _Traits, _Alloc>:: + __resize_and_overwrite(const size_type __n, _Operation __op) + { resize_and_overwrite<_Operation&>(__n, __op); } +#endif + +#if __cplusplus >= 201103L + template + template + _GLIBCXX20_CONSTEXPR void + basic_string<_CharT, _Traits, _Alloc>:: +#ifdef __glibcxx_string_resize_and_overwrite // C++ >= 23 + resize_and_overwrite(const size_type __n, _Operation __op) +#else + __resize_and_overwrite(const size_type __n, _Operation __op) +#endif + { + reserve(__n); + _CharT* const __p = _M_data(); +#if __cpp_lib_is_constant_evaluated + if (std::__is_constant_evaluated() && __n > size()) + traits_type::assign(__p + size(), __n - size(), _CharT()); +#endif + struct _Terminator { + _GLIBCXX20_CONSTEXPR ~_Terminator() { _M_this->_M_set_length(_M_r); } + basic_string* _M_this; + size_type _M_r; + }; + _Terminator __term{this, 0}; + auto __r = std::move(__op)(__p + 0, __n + 0); +#ifdef __cpp_lib_concepts + static_assert(ranges::__detail::__is_integer_like); +#else + static_assert(__gnu_cxx::__is_integer_nonstrict::__value, + "resize_and_overwrite operation must return an integer"); +#endif + _GLIBCXX_DEBUG_ASSERT(__r >= 0 && size_type(__r) <= __n); + __term._M_r = size_type(__r); + if (__term._M_r > __n) + __builtin_unreachable(); + } +#endif // C++11 + +#endif // _GLIBCXX_USE_CXX11_ABI + +#if __glibcxx_constexpr_string >= 201907L +# define _GLIBCXX_STRING_CONSTEXPR constexpr +#else +# define _GLIBCXX_STRING_CONSTEXPR +#endif + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + find(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string_len(__s, __n); + const size_type __size = this->size(); + + if (__n == 0) + return __pos <= __size ? __pos : npos; + if (__pos >= __size) + return npos; + + const _CharT __elem0 = __s[0]; + const _CharT* const __data = data(); + const _CharT* __first = __data + __pos; + const _CharT* const __last = __data + __size; + size_type __len = __size - __pos; + + while (__len >= __n) + { + // Find the first occurrence of __elem0: + __first = traits_type::find(__first, __len - __n + 1, __elem0); + if (!__first) + return npos; + // Compare the full strings from the first occurrence of __elem0. + // We already know that __first[0] == __s[0] but compare them again + // anyway because __s is probably aligned, which helps memcmp. + if (traits_type::compare(__first, __s, __n) == 0) + return __first - __data; + __len = __last - ++__first; + } + return npos; + } + + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + find(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT + { + size_type __ret = npos; + const size_type __size = this->size(); + if (__pos < __size) + { + const _CharT* __data = _M_data(); + const size_type __n = __size - __pos; + const _CharT* __p = traits_type::find(__data + __pos, __n, __c); + if (__p) + __ret = __p - __data; + } + return __ret; + } + + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + rfind(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string_len(__s, __n); + const size_type __size = this->size(); + if (__n <= __size) + { + __pos = std::min(size_type(__size - __n), __pos); + const _CharT* __data = _M_data(); + do + { + if (traits_type::compare(__data + __pos, __s, __n) == 0) + return __pos; + } + while (__pos-- > 0); + } + return npos; + } + + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + rfind(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT + { + size_type __size = this->size(); + if (__size) + { + if (--__size > __pos) + __size = __pos; + for (++__size; __size-- > 0; ) + if (traits_type::eq(_M_data()[__size], __c)) + return __size; + } + return npos; + } + + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + find_first_of(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string_len(__s, __n); + for (; __n && __pos < this->size(); ++__pos) + { + const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]); + if (__p) + return __pos; + } + return npos; + } + + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + find_last_of(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string_len(__s, __n); + size_type __size = this->size(); + if (__size && __n) + { + if (--__size > __pos) + __size = __pos; + do + { + if (traits_type::find(__s, __n, _M_data()[__size])) + return __size; + } + while (__size-- != 0); + } + return npos; + } + + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string_len(__s, __n); + for (; __pos < this->size(); ++__pos) + if (!traits_type::find(__s, __n, _M_data()[__pos])) + return __pos; + return npos; + } + + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + find_first_not_of(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT + { + for (; __pos < this->size(); ++__pos) + if (!traits_type::eq(_M_data()[__pos], __c)) + return __pos; + return npos; + } + + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const + _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_string_len(__s, __n); + size_type __size = this->size(); + if (__size) + { + if (--__size > __pos) + __size = __pos; + do + { + if (!traits_type::find(__s, __n, _M_data()[__size])) + return __size; + } + while (__size--); + } + return npos; + } + + template + _GLIBCXX_STRING_CONSTEXPR + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + find_last_not_of(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT + { + size_type __size = this->size(); + if (__size) + { + if (--__size > __pos) + __size = __pos; + do + { + if (!traits_type::eq(_M_data()[__size], __c)) + return __size; + } + while (__size--); + } + return npos; + } + +#undef _GLIBCXX_STRING_CONSTEXPR + + // 21.3.7.9 basic_string::getline and operators + template + basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __in, + basic_string<_CharT, _Traits, _Alloc>& __str) + { + typedef basic_istream<_CharT, _Traits> __istream_type; + typedef basic_string<_CharT, _Traits, _Alloc> __string_type; + typedef typename __istream_type::ios_base __ios_base; + typedef typename __istream_type::int_type __int_type; + typedef typename __string_type::size_type __size_type; + typedef ctype<_CharT> __ctype_type; + typedef typename __ctype_type::ctype_base __ctype_base; + + __size_type __extracted = 0; + typename __ios_base::iostate __err = __ios_base::goodbit; + typename __istream_type::sentry __cerb(__in, false); + if (__cerb) + { + __try + { + // Avoid reallocation for common case. + __str.erase(); + _CharT __buf[128]; + __size_type __len = 0; + const streamsize __w = __in.width(); + const __size_type __n = __w > 0 ? static_cast<__size_type>(__w) + : __str.max_size(); + const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); + const __int_type __eof = _Traits::eof(); + __int_type __c = __in.rdbuf()->sgetc(); + + while (__extracted < __n + && !_Traits::eq_int_type(__c, __eof) + && !__ct.is(__ctype_base::space, + _Traits::to_char_type(__c))) + { + if (__len == sizeof(__buf) / sizeof(_CharT)) + { + __str.append(__buf, sizeof(__buf) / sizeof(_CharT)); + __len = 0; + } + __buf[__len++] = _Traits::to_char_type(__c); + ++__extracted; + __c = __in.rdbuf()->snextc(); + } + __str.append(__buf, __len); + + if (__extracted < __n && _Traits::eq_int_type(__c, __eof)) + __err |= __ios_base::eofbit; + __in.width(0); + } + __catch(__cxxabiv1::__forced_unwind&) + { + __in._M_setstate(__ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 91. Description of operator>> and getline() for string<> + // might cause endless loop + __in._M_setstate(__ios_base::badbit); + } + } + // 211. operator>>(istream&, string&) doesn't set failbit + if (!__extracted) + __err |= __ios_base::failbit; + if (__err) + __in.setstate(__err); + return __in; + } + + template + basic_istream<_CharT, _Traits>& + getline(basic_istream<_CharT, _Traits>& __in, + basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) + { + typedef basic_istream<_CharT, _Traits> __istream_type; + typedef basic_string<_CharT, _Traits, _Alloc> __string_type; + typedef typename __istream_type::ios_base __ios_base; + typedef typename __istream_type::int_type __int_type; + typedef typename __string_type::size_type __size_type; + + __size_type __extracted = 0; + const __size_type __n = __str.max_size(); + typename __ios_base::iostate __err = __ios_base::goodbit; + typename __istream_type::sentry __cerb(__in, true); + if (__cerb) + { + __try + { + __str.erase(); + const __int_type __idelim = _Traits::to_int_type(__delim); + const __int_type __eof = _Traits::eof(); + __int_type __c = __in.rdbuf()->sgetc(); + + while (__extracted < __n + && !_Traits::eq_int_type(__c, __eof) + && !_Traits::eq_int_type(__c, __idelim)) + { + __str += _Traits::to_char_type(__c); + ++__extracted; + __c = __in.rdbuf()->snextc(); + } + + if (_Traits::eq_int_type(__c, __eof)) + __err |= __ios_base::eofbit; + else if (_Traits::eq_int_type(__c, __idelim)) + { + ++__extracted; + __in.rdbuf()->sbumpc(); + } + else + __err |= __ios_base::failbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + __in._M_setstate(__ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 91. Description of operator>> and getline() for string<> + // might cause endless loop + __in._M_setstate(__ios_base::badbit); + } + } + if (!__extracted) + __err |= __ios_base::failbit; + if (__err) + __in.setstate(__err); + return __in; + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + // The explicit instantiation definitions in src/c++11/string-inst.cc and + // src/c++17/string-inst.cc only instantiate the members required for C++17 + // and earlier standards (so not C++20's starts_with and ends_with). + // Suppress the explicit instantiation declarations for C++20, so C++20 + // code will implicitly instantiate std::string and std::wstring as needed. +# if __cplusplus <= 201703L && _GLIBCXX_EXTERN_TEMPLATE > 0 + extern template class basic_string; +# elif ! _GLIBCXX_USE_CXX11_ABI + // Still need to prevent implicit instantiation of the COW empty rep, + // to ensure the definition in libstdc++.so is unique (PR 86138). + extern template basic_string::size_type + basic_string::_Rep::_S_empty_rep_storage[]; +# elif _GLIBCXX_EXTERN_TEMPLATE > 0 + // Export _M_replace_cold even for C++20. + extern template void + basic_string::_M_replace_cold(char *, size_type, const char*, + const size_type, const size_type); +# endif + + extern template + basic_istream& + operator>>(basic_istream&, string&); + extern template + basic_ostream& + operator<<(basic_ostream&, const string&); + extern template + basic_istream& + getline(basic_istream&, string&, char); + extern template + basic_istream& + getline(basic_istream&, string&); + +#ifdef _GLIBCXX_USE_WCHAR_T +# if __cplusplus <= 201703L && _GLIBCXX_EXTERN_TEMPLATE > 0 + extern template class basic_string; +# elif ! _GLIBCXX_USE_CXX11_ABI + extern template basic_string::size_type + basic_string::_Rep::_S_empty_rep_storage[]; +# elif _GLIBCXX_EXTERN_TEMPLATE > 0 + // Export _M_replace_cold even for C++20. + extern template void + basic_string::_M_replace_cold(wchar_t*, size_type, const wchar_t*, + const size_type, const size_type); +# endif + + extern template + basic_istream& + operator>>(basic_istream&, wstring&); + extern template + basic_ostream& + operator<<(basic_ostream&, const wstring&); + extern template + basic_istream& + getline(basic_istream&, wstring&, wchar_t); + extern template + basic_istream& + getline(basic_istream&, wstring&); +#endif // _GLIBCXX_USE_WCHAR_T +#endif // _GLIBCXX_EXTERN_TEMPLATE + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@basic_string.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..6d5380f3f117e1ce3f57ea657268121744af524a GIT binary patch literal 108917 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. + +/** @file bits/char_traits.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{string} + */ + +// +// ISO C++ 14882: 21 Strings library +// + +#ifndef _CHAR_TRAITS_H +#define _CHAR_TRAITS_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#if _GLIBCXX_HOSTED +# include // For streampos +#endif // HOSTED + +#ifdef _GLIBCXX_USE_WCHAR_T +# include // For WEOF, wmemmove, wmemset, etc. +#endif // USE_WCHAR_T + +#if __cplusplus >= 201103L +# include +#if !defined __UINT_LEAST16_TYPE__ || !defined __UINT_LEAST32_TYPE__ +# include +#endif +#endif +#if __cplusplus >= 202002L +# include +# include +#endif + +#ifndef _GLIBCXX_ALWAYS_INLINE +# define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__)) +#endif + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-overflow" +#pragma GCC diagnostic ignored "-Wstringop-overread" +#pragma GCC diagnostic ignored "-Warray-bounds" + + /** + * @brief Mapping from character type to associated types. + * + * @note This is an implementation class for the generic version + * of char_traits. It defines int_type, off_type, pos_type, and + * state_type. By default these are unsigned long, streamoff, + * streampos, and mbstate_t. Users who need a different set of + * types, but who don't need to change the definitions of any function + * defined in char_traits, can specialize __gnu_cxx::_Char_types + * while leaving __gnu_cxx::char_traits alone. */ + template + struct _Char_types + { + typedef unsigned long int_type; +#if _GLIBCXX_HOSTED + typedef std::streampos pos_type; + typedef std::streamoff off_type; + typedef std::mbstate_t state_type; +#endif // HOSTED + }; + + + /** + * @brief Base class used to implement std::char_traits. + * + * @note For any given actual character type, this definition is + * probably wrong. (Most of the member functions are likely to be + * right, but the int_type and state_type typedefs, and the eof() + * member function, are likely to be wrong.) The reason this class + * exists is so users can specialize it. Classes in namespace std + * may not be specialized for fundamental types, but classes in + * namespace __gnu_cxx may be. + * + * See https://gcc.gnu.org/onlinedocs/libstdc++/manual/strings.html#strings.string.character_types + * for advice on how to make use of this class for @a unusual character + * types. Also, check out include/ext/pod_char_traits.h. + */ + template + struct char_traits + { + typedef _CharT char_type; + typedef typename _Char_types<_CharT>::int_type int_type; +#if _GLIBCXX_HOSTED + typedef typename _Char_types<_CharT>::pos_type pos_type; + typedef typename _Char_types<_CharT>::off_type off_type; + typedef typename _Char_types<_CharT>::state_type state_type; +#endif // HOSTED +#if __cpp_lib_three_way_comparison + using comparison_category = std::strong_ordering; +#endif + + static _GLIBCXX14_CONSTEXPR void + assign(char_type& __c1, const char_type& __c2) + { +#if __cpp_constexpr_dynamic_alloc + if (std::__is_constant_evaluated()) + std::construct_at(__builtin_addressof(__c1), __c2); + else +#endif + __c1 = __c2; + } + + static _GLIBCXX_CONSTEXPR bool + eq(const char_type& __c1, const char_type& __c2) + { return __c1 == __c2; } + + static _GLIBCXX_CONSTEXPR bool + lt(const char_type& __c1, const char_type& __c2) + { return __c1 < __c2; } + + static _GLIBCXX14_CONSTEXPR int + compare(const char_type* __s1, const char_type* __s2, std::size_t __n); + + static _GLIBCXX14_CONSTEXPR std::size_t + length(const char_type* __s); + + static _GLIBCXX14_CONSTEXPR const char_type* + find(const char_type* __s, std::size_t __n, const char_type& __a); + + static _GLIBCXX20_CONSTEXPR char_type* + move(char_type* __s1, const char_type* __s2, std::size_t __n); + + static _GLIBCXX20_CONSTEXPR char_type* + copy(char_type* __s1, const char_type* __s2, std::size_t __n); + + static _GLIBCXX20_CONSTEXPR char_type* + assign(char_type* __s, std::size_t __n, char_type __a); + + static _GLIBCXX_CONSTEXPR char_type + to_char_type(const int_type& __c) + { return static_cast(__c); } + + static _GLIBCXX_CONSTEXPR int_type + to_int_type(const char_type& __c) + { return static_cast(__c); } + + static _GLIBCXX_CONSTEXPR bool + eq_int_type(const int_type& __c1, const int_type& __c2) + { return __c1 == __c2; } + +#ifdef _GLIBCXX_STDIO_EOF + static _GLIBCXX_CONSTEXPR int_type + eof() + { return static_cast(_GLIBCXX_STDIO_EOF); } + + static _GLIBCXX_CONSTEXPR int_type + not_eof(const int_type& __c) + { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); } +#endif // defined(_GLIBCXX_STDIO_EOF) + }; + + template + _GLIBCXX14_CONSTEXPR int + char_traits<_CharT>:: + compare(const char_type* __s1, const char_type* __s2, std::size_t __n) + { + for (std::size_t __i = 0; __i < __n; ++__i) + if (lt(__s1[__i], __s2[__i])) + return -1; + else if (lt(__s2[__i], __s1[__i])) + return 1; + return 0; + } + + template + _GLIBCXX14_CONSTEXPR std::size_t + char_traits<_CharT>:: + length(const char_type* __p) + { + std::size_t __i = 0; + while (!eq(__p[__i], char_type())) + ++__i; + return __i; + } + + template + _GLIBCXX14_CONSTEXPR const typename char_traits<_CharT>::char_type* + char_traits<_CharT>:: + find(const char_type* __s, std::size_t __n, const char_type& __a) + { + for (std::size_t __i = 0; __i < __n; ++__i) + if (eq(__s[__i], __a)) + return __s + __i; + return 0; + } + + template + _GLIBCXX20_CONSTEXPR + typename char_traits<_CharT>::char_type* + char_traits<_CharT>:: + move(char_type* __s1, const char_type* __s2, std::size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + { + // Use __builtin_constant_p to avoid comparing unrelated pointers. + if (__builtin_constant_p(__s2 < __s1) + && __s1 > __s2 && __s1 < (__s2 + __n)) + { + do + { + --__n; + assign(__s1[__n], __s2[__n]); + } + while (__n > 0); + } + else + copy(__s1, __s2, __n); + return __s1; + } +#endif + __builtin_memmove(__s1, __s2, __n * sizeof(char_type)); + return __s1; + } + + template + _GLIBCXX20_CONSTEXPR + typename char_traits<_CharT>::char_type* + char_traits<_CharT>:: + copy(char_type* __s1, const char_type* __s2, std::size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + { + for (std::size_t __i = 0; __i < __n; ++__i) + std::construct_at(__s1 + __i, __s2[__i]); + return __s1; + } +#endif + __builtin_memcpy(__s1, __s2, __n * sizeof(char_type)); + return __s1; + } + + template + _GLIBCXX20_CONSTEXPR + typename char_traits<_CharT>::char_type* + char_traits<_CharT>:: + assign(char_type* __s, std::size_t __n, char_type __a) + { +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + { + for (std::size_t __i = 0; __i < __n; ++__i) + std::construct_at(__s + __i, __a); + return __s; + } +#endif + + if _GLIBCXX17_CONSTEXPR (sizeof(_CharT) == 1 && __is_trivial(_CharT)) + { + if (__n) + { + unsigned char __c; + __builtin_memcpy(&__c, __builtin_addressof(__a), 1); + __builtin_memset(__s, __c, __n); + } + } + else + { + for (std::size_t __i = 0; __i < __n; ++__i) + __s[__i] = __a; + } + return __s; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // 21.1 + /** + * @brief Basis for explicit traits specializations. + * + * @note For any given actual character type, this definition is + * probably wrong. Since this is just a thin wrapper around + * __gnu_cxx::char_traits, it is possible to achieve a more + * appropriate definition by specializing __gnu_cxx::char_traits. + * + * See https://gcc.gnu.org/onlinedocs/libstdc++/manual/strings.html#strings.string.character_types + * for advice on how to make use of this class for @a unusual character + * types. Also, check out include/ext/pod_char_traits.h. + */ + template + struct char_traits : public __gnu_cxx::char_traits<_CharT> + { }; + + + /// 21.1.3.1 char_traits specializations + template<> + struct char_traits + { + typedef char char_type; + typedef int int_type; +#if _GLIBCXX_HOSTED + typedef streampos pos_type; + typedef streamoff off_type; + typedef mbstate_t state_type; +#endif // HOSTED +#if __cpp_lib_three_way_comparison + using comparison_category = strong_ordering; +#endif + + static _GLIBCXX17_CONSTEXPR void + assign(char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { +#if __cpp_constexpr_dynamic_alloc + if (std::__is_constant_evaluated()) + std::construct_at(__builtin_addressof(__c1), __c2); + else +#endif + __c1 = __c2; + } + + static _GLIBCXX_CONSTEXPR bool + eq(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { return __c1 == __c2; } + + static _GLIBCXX_CONSTEXPR bool + lt(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { + // LWG 467. + return (static_cast(__c1) + < static_cast(__c2)); + } + + static _GLIBCXX17_CONSTEXPR int + compare(const char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return 0; +#if __cplusplus >= 201703L + if (std::__is_constant_evaluated()) + { + for (size_t __i = 0; __i < __n; ++__i) + if (lt(__s1[__i], __s2[__i])) + return -1; + else if (lt(__s2[__i], __s1[__i])) + return 1; + return 0; + } +#endif + return __builtin_memcmp(__s1, __s2, __n); + } + + static _GLIBCXX17_CONSTEXPR size_t + length(const char_type* __s) + { +#if __cplusplus >= 201703L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::length(__s); +#endif + return __builtin_strlen(__s); + } + + static _GLIBCXX17_CONSTEXPR const char_type* + find(const char_type* __s, size_t __n, const char_type& __a) + { + if (__n == 0) + return 0; +#if __cplusplus >= 201703L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::find(__s, __n, __a); +#endif + return static_cast(__builtin_memchr(__s, __a, __n)); + } + + static _GLIBCXX20_CONSTEXPR char_type* + move(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::move(__s1, __s2, __n); +#endif + return static_cast(__builtin_memmove(__s1, __s2, __n)); + } + + static _GLIBCXX20_CONSTEXPR char_type* + copy(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::copy(__s1, __s2, __n); +#endif + return static_cast(__builtin_memcpy(__s1, __s2, __n)); + } + + static _GLIBCXX20_CONSTEXPR char_type* + assign(char_type* __s, size_t __n, char_type __a) + { + if (__n == 0) + return __s; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::assign(__s, __n, __a); +#endif + return static_cast(__builtin_memset(__s, __a, __n)); + } + + static _GLIBCXX_CONSTEXPR char_type + to_char_type(const int_type& __c) _GLIBCXX_NOEXCEPT + { return static_cast(__c); } + + // To keep both the byte 0xff and the eof symbol 0xffffffff + // from ending up as 0xffffffff. + static _GLIBCXX_CONSTEXPR int_type + to_int_type(const char_type& __c) _GLIBCXX_NOEXCEPT + { return static_cast(static_cast(__c)); } + + static _GLIBCXX_CONSTEXPR bool + eq_int_type(const int_type& __c1, const int_type& __c2) _GLIBCXX_NOEXCEPT + { return __c1 == __c2; } + +#ifdef _GLIBCXX_STDIO_EOF + static _GLIBCXX_CONSTEXPR int_type + eof() _GLIBCXX_NOEXCEPT + { return static_cast(_GLIBCXX_STDIO_EOF); } + + static _GLIBCXX_CONSTEXPR int_type + not_eof(const int_type& __c) _GLIBCXX_NOEXCEPT + { return (__c == eof()) ? 0 : __c; } +#endif // defined(_GLIBCXX_STDIO_EOF) + }; + + +#ifdef _GLIBCXX_USE_WCHAR_T + /// 21.1.3.2 char_traits specializations + template<> + struct char_traits + { + typedef wchar_t char_type; + typedef wint_t int_type; +#if _GLIBCXX_HOSTED + typedef streamoff off_type; + typedef wstreampos pos_type; + typedef mbstate_t state_type; +#endif // HOSTED +#if __cpp_lib_three_way_comparison + using comparison_category = strong_ordering; +#endif + + static _GLIBCXX17_CONSTEXPR void + assign(char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { +#if __cpp_constexpr_dynamic_alloc + if (std::__is_constant_evaluated()) + std::construct_at(__builtin_addressof(__c1), __c2); + else +#endif + __c1 = __c2; + } + + static _GLIBCXX_CONSTEXPR bool + eq(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { return __c1 == __c2; } + + static _GLIBCXX_CONSTEXPR bool + lt(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { return __c1 < __c2; } + + static _GLIBCXX17_CONSTEXPR int + compare(const char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return 0; +#if __cplusplus >= 201703L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::compare(__s1, __s2, __n); +#endif + return wmemcmp(__s1, __s2, __n); + } + + static _GLIBCXX17_CONSTEXPR size_t + length(const char_type* __s) + { +#if __cplusplus >= 201703L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::length(__s); +#endif + return wcslen(__s); + } + + static _GLIBCXX17_CONSTEXPR const char_type* + find(const char_type* __s, size_t __n, const char_type& __a) + { + if (__n == 0) + return 0; +#if __cplusplus >= 201703L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::find(__s, __n, __a); +#endif + return wmemchr(__s, __a, __n); + } + + static _GLIBCXX20_CONSTEXPR char_type* + move(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::move(__s1, __s2, __n); +#endif + return wmemmove(__s1, __s2, __n); + } + + static _GLIBCXX20_CONSTEXPR char_type* + copy(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::copy(__s1, __s2, __n); +#endif + return wmemcpy(__s1, __s2, __n); + } + + static _GLIBCXX20_CONSTEXPR char_type* + assign(char_type* __s, size_t __n, char_type __a) + { + if (__n == 0) + return __s; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::assign(__s, __n, __a); +#endif + return wmemset(__s, __a, __n); + } + + static _GLIBCXX_CONSTEXPR char_type + to_char_type(const int_type& __c) _GLIBCXX_NOEXCEPT + { return char_type(__c); } + + static _GLIBCXX_CONSTEXPR int_type + to_int_type(const char_type& __c) _GLIBCXX_NOEXCEPT + { return int_type(__c); } + + static _GLIBCXX_CONSTEXPR bool + eq_int_type(const int_type& __c1, const int_type& __c2) _GLIBCXX_NOEXCEPT + { return __c1 == __c2; } + +#if _GLIBCXX_HOSTED + static _GLIBCXX_CONSTEXPR int_type + eof() _GLIBCXX_NOEXCEPT + { return static_cast(WEOF); } + + static _GLIBCXX_CONSTEXPR int_type + not_eof(const int_type& __c) _GLIBCXX_NOEXCEPT + { return eq_int_type(__c, eof()) ? 0 : __c; } +#endif // HOSTED + }; +#else // _GLIBCXX_USE_WCHAR_T + template<> + struct char_traits : public __gnu_cxx::char_traits + { }; +#endif //_GLIBCXX_USE_WCHAR_T + +#ifdef _GLIBCXX_USE_CHAR8_T + template<> + struct char_traits + { + typedef char8_t char_type; + typedef unsigned int int_type; +#if _GLIBCXX_HOSTED + typedef u8streampos pos_type; + typedef streamoff off_type; + typedef mbstate_t state_type; +#endif // HOSTED +#if __cpp_lib_three_way_comparison + using comparison_category = strong_ordering; +#endif + + static _GLIBCXX17_CONSTEXPR void + assign(char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { +#if __cpp_constexpr_dynamic_alloc + if (std::__is_constant_evaluated()) + std::construct_at(__builtin_addressof(__c1), __c2); + else +#endif + __c1 = __c2; + } + + static _GLIBCXX_CONSTEXPR bool + eq(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { return __c1 == __c2; } + + static _GLIBCXX_CONSTEXPR bool + lt(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { return __c1 < __c2; } + + static _GLIBCXX17_CONSTEXPR int + compare(const char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return 0; +#if __cplusplus >= 201703L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::compare(__s1, __s2, __n); +#endif + return __builtin_memcmp(__s1, __s2, __n); + } + + static _GLIBCXX17_CONSTEXPR size_t + length(const char_type* __s) + { +#if __cplusplus >= 201703L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::length(__s); +#endif + return __builtin_strlen((const char*)__s); + } + + static _GLIBCXX17_CONSTEXPR const char_type* + find(const char_type* __s, size_t __n, const char_type& __a) + { + if (__n == 0) + return 0; +#if __cplusplus >= 201703L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::find(__s, __n, __a); +#endif + return static_cast(__builtin_memchr(__s, __a, __n)); + } + + static _GLIBCXX20_CONSTEXPR char_type* + move(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::move(__s1, __s2, __n); +#endif + return static_cast(__builtin_memmove(__s1, __s2, __n)); + } + + static _GLIBCXX20_CONSTEXPR char_type* + copy(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::copy(__s1, __s2, __n); +#endif + return static_cast(__builtin_memcpy(__s1, __s2, __n)); + } + + static _GLIBCXX20_CONSTEXPR char_type* + assign(char_type* __s, size_t __n, char_type __a) + { + if (__n == 0) + return __s; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::assign(__s, __n, __a); +#endif + return static_cast(__builtin_memset(__s, __a, __n)); + } + + static _GLIBCXX_CONSTEXPR char_type + to_char_type(const int_type& __c) _GLIBCXX_NOEXCEPT + { return char_type(__c); } + + static _GLIBCXX_CONSTEXPR int_type + to_int_type(const char_type& __c) _GLIBCXX_NOEXCEPT + { return int_type(__c); } + + static _GLIBCXX_CONSTEXPR bool + eq_int_type(const int_type& __c1, const int_type& __c2) _GLIBCXX_NOEXCEPT + { return __c1 == __c2; } + +#if _GLIBCXX_HOSTED + static _GLIBCXX_CONSTEXPR int_type + eof() _GLIBCXX_NOEXCEPT + { return static_cast(-1); } + + static _GLIBCXX_CONSTEXPR int_type + not_eof(const int_type& __c) _GLIBCXX_NOEXCEPT + { return eq_int_type(__c, eof()) ? 0 : __c; } +#endif // HOSTED + }; +#endif //_GLIBCXX_USE_CHAR8_T + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#if __cplusplus >= 201103L + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template<> + struct char_traits + { + typedef char16_t char_type; +#ifdef __UINT_LEAST16_TYPE__ + typedef __UINT_LEAST16_TYPE__ int_type; +#else + typedef uint_least16_t int_type; +#endif +#if _GLIBCXX_HOSTED + typedef streamoff off_type; + typedef u16streampos pos_type; + typedef mbstate_t state_type; +#endif // HOSTED +#if __cpp_lib_three_way_comparison + using comparison_category = strong_ordering; +#endif + + static _GLIBCXX17_CONSTEXPR void + assign(char_type& __c1, const char_type& __c2) noexcept + { +#if __cpp_constexpr_dynamic_alloc + if (std::__is_constant_evaluated()) + std::construct_at(__builtin_addressof(__c1), __c2); + else +#endif + __c1 = __c2; + } + + static constexpr bool + eq(const char_type& __c1, const char_type& __c2) noexcept + { return __c1 == __c2; } + + static constexpr bool + lt(const char_type& __c1, const char_type& __c2) noexcept + { return __c1 < __c2; } + + static _GLIBCXX17_CONSTEXPR int + compare(const char_type* __s1, const char_type* __s2, size_t __n) + { + for (size_t __i = 0; __i < __n; ++__i) + if (lt(__s1[__i], __s2[__i])) + return -1; + else if (lt(__s2[__i], __s1[__i])) + return 1; + return 0; + } + + static _GLIBCXX17_CONSTEXPR size_t + length(const char_type* __s) + { + size_t __i = 0; + while (!eq(__s[__i], char_type())) + ++__i; + return __i; + } + + static _GLIBCXX17_CONSTEXPR const char_type* + find(const char_type* __s, size_t __n, const char_type& __a) + { + for (size_t __i = 0; __i < __n; ++__i) + if (eq(__s[__i], __a)) + return __s + __i; + return 0; + } + + static _GLIBCXX20_CONSTEXPR char_type* + move(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::move(__s1, __s2, __n); +#endif + return (static_cast + (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); + } + + static _GLIBCXX20_CONSTEXPR char_type* + copy(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::copy(__s1, __s2, __n); +#endif + return (static_cast + (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); + } + + static _GLIBCXX20_CONSTEXPR char_type* + assign(char_type* __s, size_t __n, char_type __a) + { + for (size_t __i = 0; __i < __n; ++__i) + assign(__s[__i], __a); + return __s; + } + + static constexpr char_type + to_char_type(const int_type& __c) noexcept + { return char_type(__c); } + + static constexpr bool + eq_int_type(const int_type& __c1, const int_type& __c2) noexcept + { return __c1 == __c2; } + +#if _GLIBCXX_HOSTED + static constexpr int_type + to_int_type(const char_type& __c) noexcept + { return __c == eof() ? int_type(0xfffd) : int_type(__c); } + + static constexpr int_type + eof() noexcept + { return static_cast(-1); } + + static constexpr int_type + not_eof(const int_type& __c) noexcept + { return eq_int_type(__c, eof()) ? 0 : __c; } +#else // !HOSTED + static constexpr int_type + to_int_type(const char_type& __c) noexcept + { return int_type(__c); } +#endif // !HOSTED + }; + + template<> + struct char_traits + { + typedef char32_t char_type; +#ifdef __UINT_LEAST32_TYPE__ + typedef __UINT_LEAST32_TYPE__ int_type; +#else + typedef uint_least32_t int_type; +#endif +#if _GLIBCXX_HOSTED + typedef streamoff off_type; + typedef u32streampos pos_type; + typedef mbstate_t state_type; +#endif // HOSTED +#if __cpp_lib_three_way_comparison + using comparison_category = strong_ordering; +#endif + + static _GLIBCXX17_CONSTEXPR void + assign(char_type& __c1, const char_type& __c2) noexcept + { +#if __cpp_constexpr_dynamic_alloc + if (std::__is_constant_evaluated()) + std::construct_at(__builtin_addressof(__c1), __c2); + else +#endif + __c1 = __c2; + } + + static constexpr bool + eq(const char_type& __c1, const char_type& __c2) noexcept + { return __c1 == __c2; } + + static constexpr bool + lt(const char_type& __c1, const char_type& __c2) noexcept + { return __c1 < __c2; } + + static _GLIBCXX17_CONSTEXPR int + compare(const char_type* __s1, const char_type* __s2, size_t __n) + { + for (size_t __i = 0; __i < __n; ++__i) + if (lt(__s1[__i], __s2[__i])) + return -1; + else if (lt(__s2[__i], __s1[__i])) + return 1; + return 0; + } + + static _GLIBCXX17_CONSTEXPR size_t + length(const char_type* __s) + { + size_t __i = 0; + while (!eq(__s[__i], char_type())) + ++__i; + return __i; + } + + static _GLIBCXX17_CONSTEXPR const char_type* + find(const char_type* __s, size_t __n, const char_type& __a) + { + for (size_t __i = 0; __i < __n; ++__i) + if (eq(__s[__i], __a)) + return __s + __i; + return 0; + } + + static _GLIBCXX20_CONSTEXPR char_type* + move(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::move(__s1, __s2, __n); +#endif + return (static_cast + (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); + } + + static _GLIBCXX20_CONSTEXPR char_type* + copy(char_type* __s1, const char_type* __s2, size_t __n) + { + if (__n == 0) + return __s1; +#if __cplusplus >= 202002L + if (std::__is_constant_evaluated()) + return __gnu_cxx::char_traits::copy(__s1, __s2, __n); +#endif + return (static_cast + (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); + } + + static _GLIBCXX20_CONSTEXPR char_type* + assign(char_type* __s, size_t __n, char_type __a) + { + for (size_t __i = 0; __i < __n; ++__i) + assign(__s[__i], __a); + return __s; + } + + static constexpr char_type + to_char_type(const int_type& __c) noexcept + { return char_type(__c); } + + static constexpr int_type + to_int_type(const char_type& __c) noexcept + { return int_type(__c); } + + static constexpr bool + eq_int_type(const int_type& __c1, const int_type& __c2) noexcept + { return __c1 == __c2; } + +#if _GLIBCXX_HOSTED + static constexpr int_type + eof() noexcept + { return static_cast(-1); } + + static constexpr int_type + not_eof(const int_type& __c) noexcept + { return eq_int_type(__c, eof()) ? 0 : __c; } +#endif // HOSTED + }; + +#if __cpp_lib_three_way_comparison + namespace __detail + { + template + constexpr auto + __char_traits_cmp_cat(int __cmp) noexcept + { + if constexpr (requires { typename _ChTraits::comparison_category; }) + { + using _Cat = typename _ChTraits::comparison_category; + static_assert( !is_void_v> ); + return static_cast<_Cat>(__cmp <=> 0); + } + else + return static_cast(__cmp <=> 0); + } + } // namespace __detail +#endif // C++20 + +#pragma GCC diagnostic pop + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // C++11 + +#endif // _CHAR_TRAITS_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@char_traits.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@char_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a6059b3a42144e08ba6547b9388402e888e0ffa5 GIT binary patch literal 52841 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@charconv.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@charconv.h new file mode 100644 index 0000000..6cb12f1 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@charconv.h @@ -0,0 +1,118 @@ +// Numeric conversions (to_string, to_chars) -*- C++ -*- + +// Copyright (C) 2017-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/charconv.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{charconv} + */ + +#ifndef _GLIBCXX_CHARCONV_H +#define _GLIBCXX_CHARCONV_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus >= 201103L + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +namespace __detail +{ +#if __cpp_variable_templates + // This accepts 128-bit integers even in strict mode. + template + constexpr bool __integer_to_chars_is_unsigned + = ! __gnu_cxx::__int_traits<_Tp>::__is_signed; +#endif + + // Generic implementation for arbitrary bases. + template + _GLIBCXX14_CONSTEXPR unsigned + __to_chars_len(_Tp __value, int __base = 10) noexcept + { +#if __cpp_variable_templates + static_assert(__integer_to_chars_is_unsigned<_Tp>, "implementation bug"); +#endif + + unsigned __n = 1; + const unsigned __b2 = __base * __base; + const unsigned __b3 = __b2 * __base; + const unsigned long __b4 = __b3 * __base; + for (;;) + { + if (__value < (unsigned)__base) return __n; + if (__value < __b2) return __n + 1; + if (__value < __b3) return __n + 2; + if (__value < __b4) return __n + 3; + __value /= __b4; + __n += 4; + } + } + + // Write an unsigned integer value to the range [first,first+len). + // The caller is required to provide a buffer of exactly the right size + // (which can be determined by the __to_chars_len function). + template + _GLIBCXX23_CONSTEXPR void + __to_chars_10_impl(char* __first, unsigned __len, _Tp __val) noexcept + { +#if __cpp_variable_templates + static_assert(__integer_to_chars_is_unsigned<_Tp>, "implementation bug"); +#endif + + constexpr char __digits[201] = + "0001020304050607080910111213141516171819" + "2021222324252627282930313233343536373839" + "4041424344454647484950515253545556575859" + "6061626364656667686970717273747576777879" + "8081828384858687888990919293949596979899"; + unsigned __pos = __len - 1; + while (__val >= 100) + { + auto const __num = (__val % 100) * 2; + __val /= 100; + __first[__pos] = __digits[__num + 1]; + __first[__pos - 1] = __digits[__num]; + __pos -= 2; + } + if (__val >= 10) + { + auto const __num = __val * 2; + __first[1] = __digits[__num + 1]; + __first[0] = __digits[__num]; + } + else + __first[0] = '0' + __val; + } + +} // namespace __detail +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // C++11 +#endif // _GLIBCXX_CHARCONV_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@charconv.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@charconv.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4dd6f0b5c568e2c59d5f4ffafd915b8866df837a GIT binary patch literal 23256 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 BPb~ld literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@chrono.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@chrono.h new file mode 100644 index 0000000..8de8e75 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@chrono.h @@ -0,0 +1,1523 @@ +// chrono::duration and chrono::time_point -*- C++ -*- + +// Copyright (C) 2008-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/chrono.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{chrono} + */ + +#ifndef _GLIBCXX_CHRONO_H +#define _GLIBCXX_CHRONO_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus >= 201103L + +#include +#include +#include +#if _GLIBCXX_HOSTED +# include +#endif +#include // for literals support. +#if __cplusplus >= 202002L +# include +# include +#endif + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if __cplusplus >= 201703L && _GLIBCXX_HOSTED + namespace filesystem { struct __file_clock; }; +#endif + + namespace chrono + { + /// @addtogroup chrono + /// @{ + + /// `chrono::duration` represents a distance between two points in time + template> + class duration; + + /// `chrono::time_point` represents a point in time as measured by a clock + template + class time_point; + /// @} + } + + /// @addtogroup chrono + /// @{ + + // 20.11.4.3 specialization of common_type (for duration, sfinae-friendly) + + /// @cond undocumented + + template + struct __duration_common_type + { }; + + template + struct __duration_common_type<_CT, _Period1, _Period2, + __void_t> + { + private: + using __gcd_num = __static_gcd<_Period1::num, _Period2::num>; + using __gcd_den = __static_gcd<_Period1::den, _Period2::den>; + using __cr = typename _CT::type; + using __r = ratio<__gcd_num::value, + (_Period1::den / __gcd_den::value) * _Period2::den>; + + public: + using type = chrono::duration<__cr, typename __r::type>; + }; + + /// @endcond + + /// @{ + /// @relates chrono::duration + + /// Specialization of common_type for chrono::duration types. + template + struct common_type, + chrono::duration<_Rep2, _Period2>> + : __duration_common_type, + typename _Period1::type, + typename _Period2::type> + { }; + + /// Specialization of common_type for two identical chrono::duration types. + template + struct common_type, + chrono::duration<_Rep, _Period>> + { + using type = chrono::duration::type, + typename _Period::type>; + }; + + /// Specialization of common_type for one chrono::duration type. + template + struct common_type> + { + using type = chrono::duration::type, + typename _Period::type>; + }; + /// @} + + // 20.11.4.3 specialization of common_type (for time_point, sfinae-friendly) + + /// @cond undocumented + + template + struct __timepoint_common_type + { }; + + template + struct __timepoint_common_type<_CT, _Clock, __void_t> + { + using type = chrono::time_point<_Clock, typename _CT::type>; + }; + + /// @endcond + + /// @{ + /// @relates chrono::time_point + + /// Specialization of common_type for chrono::time_point types. + template + struct common_type, + chrono::time_point<_Clock, _Duration2>> + : __timepoint_common_type, _Clock> + { }; + + /// Specialization of common_type for two identical chrono::time_point types. + template + struct common_type, + chrono::time_point<_Clock, _Duration>> + { using type = chrono::time_point<_Clock, _Duration>; }; + + /// Specialization of common_type for one chrono::time_point type. + template + struct common_type> + { using type = chrono::time_point<_Clock, _Duration>; }; + /// @} + + /// @} group chrono + + namespace chrono + { + /// @addtogroup chrono + /// @{ + + /// @cond undocumented + + // Primary template for duration_cast impl. + template + struct __duration_cast_impl + { + template + static constexpr _ToDur + __cast(const duration<_Rep, _Period>& __d) + { + typedef typename _ToDur::rep __to_rep; + return _ToDur(static_cast<__to_rep>(static_cast<_CR>(__d.count()) + * static_cast<_CR>(_CF::num) + / static_cast<_CR>(_CF::den))); + } + }; + + template + struct __duration_cast_impl<_ToDur, _CF, _CR, true, true> + { + template + static constexpr _ToDur + __cast(const duration<_Rep, _Period>& __d) + { + typedef typename _ToDur::rep __to_rep; + return _ToDur(static_cast<__to_rep>(__d.count())); + } + }; + + template + struct __duration_cast_impl<_ToDur, _CF, _CR, true, false> + { + template + static constexpr _ToDur + __cast(const duration<_Rep, _Period>& __d) + { + typedef typename _ToDur::rep __to_rep; + return _ToDur(static_cast<__to_rep>( + static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den))); + } + }; + + template + struct __duration_cast_impl<_ToDur, _CF, _CR, false, true> + { + template + static constexpr _ToDur + __cast(const duration<_Rep, _Period>& __d) + { + typedef typename _ToDur::rep __to_rep; + return _ToDur(static_cast<__to_rep>( + static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num))); + } + }; + + template + struct __is_duration + : std::false_type + { }; + + template + struct __is_duration> + : std::true_type + { }; + + template + using __enable_if_is_duration + = typename enable_if<__is_duration<_Tp>::value, _Tp>::type; + + template + using __disable_if_is_duration + = typename enable_if::value, _Tp>::type; + +#if __cplusplus >= 201703L + template + inline constexpr bool __is_duration_v = false; + template + inline constexpr bool __is_duration_v> = true; + template + inline constexpr bool __is_time_point_v = false; + template + inline constexpr bool __is_time_point_v> = true; +#endif + + /// @endcond + + /** Convert a `duration` to type `ToDur`. + * + * If the duration cannot be represented accurately in the result type, + * returns the result of integer truncation (i.e., rounded towards zero). + * + * @tparam _ToDur The result type must be a `duration`. + * @param __d A duration. + * @return The value of `__d` converted to type `_ToDur`. + * @since C++11 + */ + template + _GLIBCXX_NODISCARD + constexpr __enable_if_is_duration<_ToDur> + duration_cast(const duration<_Rep, _Period>& __d) + { +#if __cpp_inline_variables && __cpp_if_constexpr + if constexpr (is_same_v<_ToDur, duration<_Rep, _Period>>) + return __d; + else + { +#endif + using __to_period = typename _ToDur::period; + using __to_rep = typename _ToDur::rep; + using __cf = ratio_divide<_Period, __to_period>; + using __cr = typename common_type<__to_rep, _Rep, intmax_t>::type; + using __dc = __duration_cast_impl<_ToDur, __cf, __cr, + __cf::num == 1, __cf::den == 1>; + return __dc::__cast(__d); +#if __cpp_inline_variables && __cpp_if_constexpr + } +#endif + } + + /** Trait indicating whether to treat a type as a floating-point type. + * + * The chrono library uses this trait to tell whether a `duration` can + * represent fractional values of the given precision, or only integral + * values. + * + * You should specialize this trait for your own numeric types that are + * used with `duration` and can represent non-integral values. + * + * @since C++11 + */ + template + struct treat_as_floating_point + : is_floating_point<_Rep> + { }; + +#if __cplusplus > 201402L + template + inline constexpr bool treat_as_floating_point_v = + treat_as_floating_point<_Rep>::value; + + template<> + inline constexpr bool treat_as_floating_point_v = false; + template<> + inline constexpr bool treat_as_floating_point_v = false; + template<> + inline constexpr bool treat_as_floating_point_v = false; + template<> + inline constexpr bool treat_as_floating_point_v = true; + template<> + inline constexpr bool treat_as_floating_point_v = true; + template<> + inline constexpr bool treat_as_floating_point_v = true; +#endif // C++17 + +#if __cplusplus > 201703L +#if __cpp_lib_concepts + template + inline constexpr bool is_clock_v = false; + + template + requires requires { + typename _Tp::rep; + typename _Tp::period; + typename _Tp::duration; + typename _Tp::time_point::clock; + typename _Tp::time_point::duration; + { &_Tp::is_steady } -> same_as; + { _Tp::now() } -> same_as; + requires same_as>; + requires same_as; + } + inline constexpr bool is_clock_v<_Tp> = true; +#else + template + inline constexpr bool is_clock_v = false; + + template + inline constexpr bool + is_clock_v<_Tp, void_t> + = __and_v>, + is_same, + is_same, + is_same>; +#endif + + template + struct is_clock + : bool_constant> + { }; +#endif // C++20 + +#if __cplusplus >= 201703L // C++ >= 17 + /** Convert a `duration` to type `ToDur` and round down. + * + * If the duration cannot be represented exactly in the result type, + * returns the closest value that is less than the argument. + * + * @tparam _ToDur The result type must be a `duration`. + * @param __d A duration. + * @return The value of `__d` converted to type `_ToDur`. + * @since C++17 + */ + template + [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> + floor(const duration<_Rep, _Period>& __d) + { + auto __to = chrono::duration_cast<_ToDur>(__d); + if (__to > __d) + return __to - _ToDur{1}; + return __to; + } + + /** Convert a `duration` to type `ToDur` and round up. + * + * If the duration cannot be represented exactly in the result type, + * returns the closest value that is greater than the argument. + * + * @tparam _ToDur The result type must be a `duration`. + * @param __d A duration. + * @return The value of `__d` converted to type `_ToDur`. + * @since C++17 + */ + template + [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> + ceil(const duration<_Rep, _Period>& __d) + { + auto __to = chrono::duration_cast<_ToDur>(__d); + if (__to < __d) + return __to + _ToDur{1}; + return __to; + } + + /** Convert a `duration` to type `ToDur` and round to the closest value. + * + * If the duration cannot be represented exactly in the result type, + * returns the closest value, rounding ties to even. + * + * @tparam _ToDur The result type must be a `duration` with a + * non-floating-point `rep` type. + * @param __d A duration. + * @return The value of `__d` converted to type `_ToDur`. + * @since C++17 + */ + template + [[nodiscard]] constexpr + enable_if_t< + __and_<__is_duration<_ToDur>, + __not_>>::value, + _ToDur> + round(const duration<_Rep, _Period>& __d) + { + _ToDur __t0 = chrono::floor<_ToDur>(__d); + _ToDur __t1 = __t0 + _ToDur{1}; + auto __diff0 = __d - __t0; + auto __diff1 = __t1 - __d; + if (__diff0 == __diff1) + { + if (__t0.count() & 1) + return __t1; + return __t0; + } + else if (__diff0 < __diff1) + return __t0; + return __t1; + } + + /** The absolute (non-negative) value of a duration. + * + * @param __d A duration with a signed `rep` type. + * @return A duration of the same type as the argument, with value |d|. + * @since C++17 + */ + template + [[nodiscard]] constexpr + enable_if_t::is_signed, duration<_Rep, _Period>> + abs(duration<_Rep, _Period> __d) + { + if (__d >= __d.zero()) + return __d; + return -__d; + } + + // Make chrono::ceil also usable as chrono::__detail::ceil. + namespace __detail { using chrono::ceil; } + +#else // ! __glibcxx_chrono + + // We want to use ceil even when compiling for earlier standards versions. + // C++11 only allows a single statement in a constexpr function, so we + // need to move the comparison into a separate function, __ceil_impl. + namespace __detail + { + template + constexpr _Tp + __ceil_impl(const _Tp& __t, const _Up& __u) + { + return (__t < __u) ? (__t + _Tp{1}) : __t; + } + + // C++11-friendly version of std::chrono::ceil for internal use. + template + constexpr _ToDur + ceil(const duration<_Rep, _Period>& __d) + { + return __detail::__ceil_impl(chrono::duration_cast<_ToDur>(__d), __d); + } + } +#endif // __glibcxx_chrono + + /// duration_values + template + struct duration_values + { + static constexpr _Rep + zero() noexcept + { return _Rep(0); } + + static constexpr _Rep + max() noexcept + { return numeric_limits<_Rep>::max(); } + + static constexpr _Rep + min() noexcept + { return numeric_limits<_Rep>::lowest(); } + }; + + template + class duration + { + static_assert(!__is_duration<_Rep>::value, + "rep cannot be a std::chrono::duration"); + static_assert(__is_ratio<_Period>::value, + "period must be a specialization of std::ratio"); + static_assert(_Period::num > 0, "period must be positive"); + + template + using __is_float = treat_as_floating_point<_Rep2>; + + static constexpr intmax_t + _S_gcd(intmax_t __m, intmax_t __n) noexcept + { + // Duration only allows positive periods so we don't need to + // handle negative values here (unlike __static_gcd and std::gcd). +#if __cplusplus >= 201402L + do + { + intmax_t __rem = __m % __n; + __m = __n; + __n = __rem; + } + while (__n != 0); + return __m; +#else + // C++11 doesn't allow loops in constexpr functions, but this + // recursive version can be more expensive to evaluate. + return (__n == 0) ? __m : _S_gcd(__n, __m % __n); +#endif + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2094. overflow shouldn't participate in overload resolution + // 3090. What is [2094] intended to mean? + // This only produces a valid type if no overflow occurs. + template + using __divide = ratio<(_R1::num / __gcd1) * (_R2::den / __gcd2), + (_R1::den / __gcd2) * (_R2::num / __gcd1)>; + + // _Period2 is an exact multiple of _Period + template + using __is_harmonic + = __bool_constant<__divide<_Period2, _Period>::den == 1>; + + public: + + using rep = _Rep; + using period = typename _Period::type; + + // 20.11.5.1 construction / copy / destroy + constexpr duration() = default; + + duration(const duration&) = default; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3050. Conversion specification problem in chrono::duration + template, + __or_<__is_float, __not_<__is_float<_Rep2>>>>> + constexpr explicit duration(const _Rep2& __rep) + : __r(static_cast(__rep)) { } + + template, + __or_<__is_float, + __and_<__is_harmonic<_Period2>, + __not_<__is_float<_Rep2>>>>>> + constexpr duration(const duration<_Rep2, _Period2>& __d) + : __r(duration_cast(__d).count()) { } + + ~duration() = default; + duration& operator=(const duration&) = default; + + // 20.11.5.2 observer + constexpr rep + count() const + { return __r; } + + // 20.11.5.3 arithmetic + + constexpr duration::type, period> + operator+() const + { return duration::type, period>(__r); } + + constexpr duration::type, period> + operator-() const + { return duration::type, period>(-__r); } + + _GLIBCXX17_CONSTEXPR duration& + operator++() + { + ++__r; + return *this; + } + + _GLIBCXX17_CONSTEXPR duration + operator++(int) + { return duration(__r++); } + + _GLIBCXX17_CONSTEXPR duration& + operator--() + { + --__r; + return *this; + } + + _GLIBCXX17_CONSTEXPR duration + operator--(int) + { return duration(__r--); } + + _GLIBCXX17_CONSTEXPR duration& + operator+=(const duration& __d) + { + __r += __d.count(); + return *this; + } + + _GLIBCXX17_CONSTEXPR duration& + operator-=(const duration& __d) + { + __r -= __d.count(); + return *this; + } + + _GLIBCXX17_CONSTEXPR duration& + operator*=(const rep& __rhs) + { + __r *= __rhs; + return *this; + } + + _GLIBCXX17_CONSTEXPR duration& + operator/=(const rep& __rhs) + { + __r /= __rhs; + return *this; + } + + // DR 934. + template + _GLIBCXX17_CONSTEXPR + __enable_if_t::value, duration&> + operator%=(const rep& __rhs) + { + __r %= __rhs; + return *this; + } + + template + _GLIBCXX17_CONSTEXPR + __enable_if_t::value, duration&> + operator%=(const duration& __d) + { + __r %= __d.count(); + return *this; + } + + // 20.11.5.4 special values + static constexpr duration + zero() noexcept + { return duration(duration_values::zero()); } + + static constexpr duration + min() noexcept + { return duration(duration_values::min()); } + + static constexpr duration + max() noexcept + { return duration(duration_values::max()); } + + private: + rep __r; + }; + + /// @{ + /// @relates std::chrono::duration + + /// The sum of two durations. + template + constexpr typename common_type, + duration<_Rep2, _Period2>>::type + operator+(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { + typedef duration<_Rep1, _Period1> __dur1; + typedef duration<_Rep2, _Period2> __dur2; + typedef typename common_type<__dur1,__dur2>::type __cd; + return __cd(__cd(__lhs).count() + __cd(__rhs).count()); + } + + /// The difference between two durations. + template + constexpr typename common_type, + duration<_Rep2, _Period2>>::type + operator-(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { + typedef duration<_Rep1, _Period1> __dur1; + typedef duration<_Rep2, _Period2> __dur2; + typedef typename common_type<__dur1,__dur2>::type __cd; + return __cd(__cd(__lhs).count() - __cd(__rhs).count()); + } + + /// @} + + /// @cond undocumented + + // SFINAE helper to obtain common_type<_Rep1, _Rep2> only if _Rep2 + // is implicitly convertible to it. + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3050. Conversion specification problem in chrono::duration constructor + template::type> + using __common_rep_t = typename + enable_if::value, _CRep>::type; + + /// @endcond + + /** @{ + * Arithmetic operators for chrono::duration + * @relates std::chrono::duration + */ + + template + constexpr duration<__common_rep_t<_Rep1, _Rep2>, _Period> + operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s) + { + typedef duration::type, _Period> + __cd; + return __cd(__cd(__d).count() * __s); + } + + template + constexpr duration<__common_rep_t<_Rep2, _Rep1>, _Period> + operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d) + { return __d * __s; } + + template + constexpr + duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> + operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s) + { + typedef duration::type, _Period> + __cd; + return __cd(__cd(__d).count() / __s); + } + + template + constexpr typename common_type<_Rep1, _Rep2>::type + operator/(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { + typedef duration<_Rep1, _Period1> __dur1; + typedef duration<_Rep2, _Period2> __dur2; + typedef typename common_type<__dur1,__dur2>::type __cd; + return __cd(__lhs).count() / __cd(__rhs).count(); + } + + // DR 934. + template + constexpr + duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> + operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s) + { + typedef duration::type, _Period> + __cd; + return __cd(__cd(__d).count() % __s); + } + + template + constexpr typename common_type, + duration<_Rep2, _Period2>>::type + operator%(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { + typedef duration<_Rep1, _Period1> __dur1; + typedef duration<_Rep2, _Period2> __dur2; + typedef typename common_type<__dur1,__dur2>::type __cd; + return __cd(__cd(__lhs).count() % __cd(__rhs).count()); + } + /// @} + + // comparisons + + /** @{ + * Comparisons for chrono::duration + * @relates std::chrono::duration + */ + + template + constexpr bool + operator==(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { + typedef duration<_Rep1, _Period1> __dur1; + typedef duration<_Rep2, _Period2> __dur2; + typedef typename common_type<__dur1,__dur2>::type __ct; + return __ct(__lhs).count() == __ct(__rhs).count(); + } + + template + constexpr bool + operator<(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { + typedef duration<_Rep1, _Period1> __dur1; + typedef duration<_Rep2, _Period2> __dur2; + typedef typename common_type<__dur1,__dur2>::type __ct; + return __ct(__lhs).count() < __ct(__rhs).count(); + } + +#if __cpp_lib_three_way_comparison + template + requires three_way_comparable> + constexpr auto + operator<=>(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { + using __ct = common_type_t, + duration<_Rep2, _Period2>>; + return __ct(__lhs).count() <=> __ct(__rhs).count(); + } +#else + template + constexpr bool + operator!=(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { return !(__lhs == __rhs); } +#endif + + template + constexpr bool + operator<=(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { return !(__rhs < __lhs); } + + template + constexpr bool + operator>(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { return __rhs < __lhs; } + + template + constexpr bool + operator>=(const duration<_Rep1, _Period1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { return !(__lhs < __rhs); } + + /// @} + + /// @cond undocumented +#ifdef _GLIBCXX_USE_C99_STDINT +# define _GLIBCXX_CHRONO_INT64_T int64_t +#elif defined __INT64_TYPE__ +# define _GLIBCXX_CHRONO_INT64_T __INT64_TYPE__ +#else + static_assert(std::numeric_limits::digits >= 64, + "Representation type for nanoseconds must have at least 64 bits"); +# define _GLIBCXX_CHRONO_INT64_T long long +#endif + /// @endcond + + /// nanoseconds + using nanoseconds = duration<_GLIBCXX_CHRONO_INT64_T, nano>; + + /// microseconds + using microseconds = duration<_GLIBCXX_CHRONO_INT64_T, micro>; + + /// milliseconds + using milliseconds = duration<_GLIBCXX_CHRONO_INT64_T, milli>; + + /// seconds + using seconds = duration<_GLIBCXX_CHRONO_INT64_T>; + + /// minutes + using minutes = duration<_GLIBCXX_CHRONO_INT64_T, ratio< 60>>; + + /// hours + using hours = duration<_GLIBCXX_CHRONO_INT64_T, ratio<3600>>; + +#if __cplusplus > 201703L + /// days + using days = duration<_GLIBCXX_CHRONO_INT64_T, ratio<86400>>; + + /// weeks + using weeks = duration<_GLIBCXX_CHRONO_INT64_T, ratio<604800>>; + + /// years + using years = duration<_GLIBCXX_CHRONO_INT64_T, ratio<31556952>>; + + /// months + using months = duration<_GLIBCXX_CHRONO_INT64_T, ratio<2629746>>; +#endif // C++20 + +#undef _GLIBCXX_CHRONO_INT64_T + + template + class time_point + { + static_assert(__is_duration<_Dur>::value, + "duration must be a specialization of std::chrono::duration"); + + public: + typedef _Clock clock; + typedef _Dur duration; + typedef typename duration::rep rep; + typedef typename duration::period period; + + constexpr time_point() : __d(duration::zero()) + { } + + constexpr explicit time_point(const duration& __dur) + : __d(__dur) + { } + + // conversions + template>> + constexpr time_point(const time_point& __t) + : __d(__t.time_since_epoch()) + { } + + // observer + constexpr duration + time_since_epoch() const + { return __d; } + +#if __cplusplus > 201703L + constexpr time_point& + operator++() + { + ++__d; + return *this; + } + + constexpr time_point + operator++(int) + { return time_point{__d++}; } + + constexpr time_point& + operator--() + { + --__d; + return *this; + } + + constexpr time_point + operator--(int) + { return time_point{__d--}; } +#endif + + // arithmetic + _GLIBCXX17_CONSTEXPR time_point& + operator+=(const duration& __dur) + { + __d += __dur; + return *this; + } + + _GLIBCXX17_CONSTEXPR time_point& + operator-=(const duration& __dur) + { + __d -= __dur; + return *this; + } + + // special values + static constexpr time_point + min() noexcept + { return time_point(duration::min()); } + + static constexpr time_point + max() noexcept + { return time_point(duration::max()); } + + private: + duration __d; + }; + + /** Convert a `time_point` to use `duration` type `ToDur`. + * + * The result is the same time point as measured by the same clock, but + * using the specified `duration` to represent the time. + * If the time point cannot be represented accurately in the result type, + * returns the result of integer truncation (i.e., rounded towards zero). + * + * @tparam _ToDur The `duration` type to use for the result. + * @param __t A time point. + * @return The value of `__t` converted to use type `_ToDur`. + * @since C++11 + */ + template + _GLIBCXX_NODISCARD constexpr + __enable_if_t<__is_duration<_ToDur>::value, time_point<_Clock, _ToDur>> + time_point_cast(const time_point<_Clock, _Dur>& __t) + { + typedef time_point<_Clock, _ToDur> __time_point; + return __time_point(duration_cast<_ToDur>(__t.time_since_epoch())); + } + +#if __cplusplus > 201402L + /** Convert a `time_point` to type `ToDur` and round down. + * + * The result is the same time point as measured by the same clock, but + * using the specified `duration` to represent the time. + * If the time point cannot be represented exactly in the result type, + * returns the closest value that is less than the argument. + * + * @tparam _ToDur The `duration` type to use for the result. + * @param __t A time point. + * @return The value of `__d` converted to type `_ToDur`. + * @since C++17 + */ + template + [[nodiscard]] constexpr + enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>> + floor(const time_point<_Clock, _Dur>& __tp) + { + return time_point<_Clock, _ToDur>{ + chrono::floor<_ToDur>(__tp.time_since_epoch())}; + } + + /** Convert a `time_point` to type `ToDur` and round up. + * + * The result is the same time point as measured by the same clock, but + * using the specified `duration` to represent the time. + * If the time point cannot be represented exactly in the result type, + * returns the closest value that is greater than the argument. + * + * @tparam _ToDur The `duration` type to use for the result. + * @param __t A time point. + * @return The value of `__d` converted to type `_ToDur`. + * @since C++17 + */ + template + [[nodiscard]] constexpr + enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>> + ceil(const time_point<_Clock, _Dur>& __tp) + { + return time_point<_Clock, _ToDur>{ + chrono::ceil<_ToDur>(__tp.time_since_epoch())}; + } + + /** Convert a `time_point` to type `ToDur` and round to the closest value. + * + * The result is the same time point as measured by the same clock, but + * using the specified `duration` to represent the time. + * If the time point cannot be represented exactly in the result type, + * returns the closest value, rounding ties to even. + * + * @tparam _ToDur The `duration` type to use for the result, + * which must have a non-floating-point `rep` type. + * @param __t A time point. + * @return The value of `__d` converted to type `_ToDur`. + * @since C++17 + */ + template + [[nodiscard]] constexpr + enable_if_t<__is_duration_v<_ToDur> + && !treat_as_floating_point_v, + time_point<_Clock, _ToDur>> + round(const time_point<_Clock, _Dur>& __tp) + { + return time_point<_Clock, _ToDur>{ + chrono::round<_ToDur>(__tp.time_since_epoch())}; + } +#endif // C++17 + + /// @{ + /// @relates time_point + + /// Adjust a time point forwards by the given duration. + template + constexpr time_point<_Clock, + typename common_type<_Dur1, duration<_Rep2, _Period2>>::type> + operator+(const time_point<_Clock, _Dur1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { + typedef duration<_Rep2, _Period2> __dur2; + typedef typename common_type<_Dur1,__dur2>::type __ct; + typedef time_point<_Clock, __ct> __time_point; + return __time_point(__lhs.time_since_epoch() + __rhs); + } + + /// Adjust a time point forwards by the given duration. + template + constexpr time_point<_Clock, + typename common_type, _Dur2>::type> + operator+(const duration<_Rep1, _Period1>& __lhs, + const time_point<_Clock, _Dur2>& __rhs) + { + typedef duration<_Rep1, _Period1> __dur1; + typedef typename common_type<__dur1,_Dur2>::type __ct; + typedef time_point<_Clock, __ct> __time_point; + return __time_point(__rhs.time_since_epoch() + __lhs); + } + + /// Adjust a time point backwards by the given duration. + template + constexpr time_point<_Clock, + typename common_type<_Dur1, duration<_Rep2, _Period2>>::type> + operator-(const time_point<_Clock, _Dur1>& __lhs, + const duration<_Rep2, _Period2>& __rhs) + { + typedef duration<_Rep2, _Period2> __dur2; + typedef typename common_type<_Dur1,__dur2>::type __ct; + typedef time_point<_Clock, __ct> __time_point; + return __time_point(__lhs.time_since_epoch() -__rhs); + } + + /// The difference between two time points (as a duration) + template + constexpr typename common_type<_Dur1, _Dur2>::type + operator-(const time_point<_Clock, _Dur1>& __lhs, + const time_point<_Clock, _Dur2>& __rhs) + { return __lhs.time_since_epoch() - __rhs.time_since_epoch(); } + /// @} + + /** @{ + * Comparisons for time_point + * @relates chrono::time_point + */ + + template + constexpr bool + operator==(const time_point<_Clock, _Dur1>& __lhs, + const time_point<_Clock, _Dur2>& __rhs) + { return __lhs.time_since_epoch() == __rhs.time_since_epoch(); } + +#if __cpp_lib_three_way_comparison + template _Dur2> + constexpr auto + operator<=>(const time_point<_Clock, _Dur1>& __lhs, + const time_point<_Clock, _Dur2>& __rhs) + { return __lhs.time_since_epoch() <=> __rhs.time_since_epoch(); } +#else + template + constexpr bool + operator!=(const time_point<_Clock, _Dur1>& __lhs, + const time_point<_Clock, _Dur2>& __rhs) + { return !(__lhs == __rhs); } +#endif + + template + constexpr bool + operator<(const time_point<_Clock, _Dur1>& __lhs, + const time_point<_Clock, _Dur2>& __rhs) + { return __lhs.time_since_epoch() < __rhs.time_since_epoch(); } + + template + constexpr bool + operator<=(const time_point<_Clock, _Dur1>& __lhs, + const time_point<_Clock, _Dur2>& __rhs) + { return !(__rhs < __lhs); } + + template + constexpr bool + operator>(const time_point<_Clock, _Dur1>& __lhs, + const time_point<_Clock, _Dur2>& __rhs) + { return __rhs < __lhs; } + + template + constexpr bool + operator>=(const time_point<_Clock, _Dur1>& __lhs, + const time_point<_Clock, _Dur2>& __rhs) + { return !(__lhs < __rhs); } + + /// @} + /// @} group chrono + +#if _GLIBCXX_HOSTED + // Clocks. + + // Why nanosecond resolution as the default? + // Why have std::system_clock always count in the highest + // resolution (ie nanoseconds), even if on some OSes the low 3 + // or 9 decimal digits will be always zero? This allows later + // implementations to change the system_clock::now() + // implementation any time to provide better resolution without + // changing function signature or units. + + // To support the (forward) evolution of the library's defined + // clocks, wrap inside inline namespace so that the current + // defintions of system_clock, steady_clock, and + // high_resolution_clock types are uniquely mangled. This way, new + // code can use the latests clocks, while the library can contain + // compatibility definitions for previous versions. At some + // point, when these clocks settle down, the inlined namespaces + // can be removed. XXX GLIBCXX_ABI Deprecated +_GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2) + + /** + * @brief System clock. + * + * Time returned represents wall time from the system-wide clock. + * @ingroup chrono + */ + struct system_clock + { + typedef chrono::nanoseconds duration; + typedef duration::rep rep; + typedef duration::period period; + typedef chrono::time_point time_point; + + static_assert(system_clock::duration::min() + < system_clock::duration::zero(), + "a clock's minimum duration cannot be less than its epoch"); + + static constexpr bool is_steady = false; + + static time_point + now() noexcept; + + // Map to C API + [[__gnu__::__always_inline__]] + static std::time_t + to_time_t(const time_point& __t) noexcept + { + return std::time_t(duration_cast + (__t.time_since_epoch()).count()); + } + + [[__gnu__::__always_inline__]] + static time_point + from_time_t(std::time_t __t) noexcept + { + typedef chrono::time_point __from; + return time_point_cast + (__from(chrono::seconds(__t))); + } + }; + + + /** + * @brief Monotonic clock + * + * Time returned has the property of only increasing at a uniform rate. + * @ingroup chrono + */ + struct steady_clock + { + typedef chrono::nanoseconds duration; + typedef duration::rep rep; + typedef duration::period period; + typedef chrono::time_point time_point; + + static constexpr bool is_steady = true; + + static time_point + now() noexcept; + }; + + + /** + * @brief Highest-resolution clock + * + * This is the clock "with the shortest tick period." Alias to + * std::system_clock until higher-than-nanosecond definitions + * become feasible. + * @ingroup chrono + */ + using high_resolution_clock = system_clock; + +_GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) + +#if __cplusplus >= 202002L + /// @addtogroup chrono + /// @{ + template + using sys_time = time_point; + using sys_seconds = sys_time; + using sys_days = sys_time; + + using file_clock = ::std::filesystem::__file_clock; + + template + using file_time = time_point; + + template<> struct is_clock : true_type { }; + template<> struct is_clock : true_type { }; + template<> struct is_clock : true_type { }; + + template<> inline constexpr bool is_clock_v = true; + template<> inline constexpr bool is_clock_v = true; + template<> inline constexpr bool is_clock_v = true; + /// @} +#endif // C++20 +#elif __cplusplus >= 202002L + // Define a fake clock like chrono::local_t so that sys_time etc. + // can be used for freestanding. + struct __sys_t; + template + using sys_time = time_point<__sys_t, _Duration>; + using sys_seconds = sys_time; + using sys_days = sys_time; +#endif // _GLIBCXX_HOSTED + } // namespace chrono + +#ifdef __glibcxx_chrono_udls // C++ >= 14 + inline namespace literals + { + /** ISO C++ 2014 namespace for suffixes for duration literals. + * + * These suffixes can be used to create `chrono::duration` values with + * tick periods of hours, minutes, seconds, milliseconds, microseconds + * or nanoseconds. For example, `std::chrono::seconds(5)` can be written + * as `5s` after making the suffix visible in the current scope. + * The suffixes can be made visible by a using-directive or + * using-declaration such as: + * - `using namespace std::chrono_literals;` + * - `using namespace std::literals;` + * - `using namespace std::chrono;` + * - `using namespace std;` + * - `using std::chrono_literals::operator""s;` + * + * The result of these suffixes on an integer literal is one of the + * standard typedefs such as `std::chrono::hours`. + * The result on a floating-point literal is a duration type with the + * specified tick period and an unspecified floating-point representation, + * for example `1.5e2ms` might be equivalent to + * `chrono::duration(1.5e2)`. + * + * @since C+14 + * @ingroup chrono + */ + inline namespace chrono_literals + { + /// @addtogroup chrono + /// @{ + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wliteral-suffix" + /// @cond undocumented + template + constexpr _Dur __check_overflow() + { + using _Val = __parse_int::_Parse_int<_Digits...>; + constexpr typename _Dur::rep __repval = _Val::value; + static_assert(__repval >= 0 && __repval == _Val::value, + "literal value cannot be represented by duration type"); + return _Dur(__repval); + } + /// @endcond + + /// Literal suffix for durations representing non-integer hours + constexpr chrono::duration> + operator""h(long double __hours) + { return chrono::duration>{__hours}; } + + /// Literal suffix for durations of type `std::chrono::hours` + template + constexpr chrono::hours + operator""h() + { return __check_overflow(); } + + /// Literal suffix for durations representing non-integer minutes + constexpr chrono::duration> + operator""min(long double __mins) + { return chrono::duration>{__mins}; } + + /// Literal suffix for durations of type `std::chrono::minutes` + template + constexpr chrono::minutes + operator""min() + { return __check_overflow(); } + + /// Literal suffix for durations representing non-integer seconds + constexpr chrono::duration + operator""s(long double __secs) + { return chrono::duration{__secs}; } + + /// Literal suffix for durations of type `std::chrono::seconds` + template + constexpr chrono::seconds + operator""s() + { return __check_overflow(); } + + /// Literal suffix for durations representing non-integer milliseconds + constexpr chrono::duration + operator""ms(long double __msecs) + { return chrono::duration{__msecs}; } + + /// Literal suffix for durations of type `std::chrono::milliseconds` + template + constexpr chrono::milliseconds + operator""ms() + { return __check_overflow(); } + + /// Literal suffix for durations representing non-integer microseconds + constexpr chrono::duration + operator""us(long double __usecs) + { return chrono::duration{__usecs}; } + + /// Literal suffix for durations of type `std::chrono::microseconds` + template + constexpr chrono::microseconds + operator""us() + { return __check_overflow(); } + + /// Literal suffix for durations representing non-integer nanoseconds + constexpr chrono::duration + operator""ns(long double __nsecs) + { return chrono::duration{__nsecs}; } + + /// Literal suffix for durations of type `std::chrono::nanoseconds` + template + constexpr chrono::nanoseconds + operator""ns() + { return __check_overflow(); } + +#pragma GCC diagnostic pop + /// @} + } // inline namespace chrono_literals + } // inline namespace literals + + namespace chrono + { + using namespace literals::chrono_literals; + } // namespace chrono +#endif // __glibcxx_chrono_udls + +#if __cplusplus >= 201703L && _GLIBCXX_HOSTED + namespace filesystem + { + struct __file_clock + { + using duration = chrono::nanoseconds; + using rep = duration::rep; + using period = duration::period; + using time_point = chrono::time_point<__file_clock>; + static constexpr bool is_steady = false; + + static time_point + now() noexcept + { return _S_from_sys(chrono::system_clock::now()); } + +#if __cplusplus > 201703L + template + static + chrono::file_time> + from_sys(const chrono::sys_time<_Dur>& __t) noexcept + { return _S_from_sys(__t); } + + // For internal use only + template + static + chrono::sys_time> + to_sys(const chrono::file_time<_Dur>& __t) noexcept + { return _S_to_sys(__t); } +#endif // C++20 + + private: + using __sys_clock = chrono::system_clock; + + // This clock's (unspecified) epoch is 2174-01-01 00:00:00 UTC. + // A signed 64-bit duration with nanosecond resolution gives roughly + // +/- 292 years, which covers the 1901-2446 date range for ext4. + static constexpr chrono::seconds _S_epoch_diff{6437664000}; + + protected: + // For internal use only + template + static + chrono::time_point<__file_clock, common_type_t<_Dur, chrono::seconds>> + _S_from_sys(const chrono::time_point<__sys_clock, _Dur>& __t) noexcept + { + using _CDur = common_type_t<_Dur, chrono::seconds>; + using __file_time = chrono::time_point<__file_clock, _CDur>; + return __file_time{__t.time_since_epoch()} - _S_epoch_diff; + } + + // For internal use only + template + static + chrono::time_point<__sys_clock, common_type_t<_Dur, chrono::seconds>> + _S_to_sys(const chrono::time_point<__file_clock, _Dur>& __t) noexcept + { + using _CDur = common_type_t<_Dur, chrono::seconds>; + using __sys_time = chrono::time_point<__sys_clock, _CDur>; + return __sys_time{__t.time_since_epoch()} + _S_epoch_diff; + } + }; + } // namespace filesystem +#endif // C++17 && HOSTED + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif //_GLIBCXX_CHRONO_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@chrono.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@chrono.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e707e5ada8384442dad3625fb0f59960bdbdece0 GIT binary patch literal 94967 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. + +/** @file bits/codecvt.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.2.1.5 Template class codecvt +// + +// Written by Benjamin Kosnik + +#ifndef _CODECVT_H +#define _CODECVT_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include // locale::facet + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// Empty base class for codecvt facet [22.2.1.5]. + class codecvt_base + { + public: + enum result + { + ok, + partial, + error, + noconv + }; + }; + + /** + * @brief Common base for codecvt functions. + * + * This template class provides implementations of the public functions + * that forward to the protected virtual functions. + * + * This template also provides abstract stubs for the protected virtual + * functions. + */ + template + class __codecvt_abstract_base + : public locale::facet, public codecvt_base + { + public: + // Types: + typedef codecvt_base::result result; + typedef _InternT intern_type; + typedef _ExternT extern_type; + typedef _StateT state_type; + + // 22.2.1.5.1 codecvt members + /** + * @brief Convert from internal to external character set. + * + * Converts input string of intern_type to output string of + * extern_type. This is analogous to wcsrtombs. It does this by + * calling codecvt::do_out. + * + * The source and destination character sets are determined by the + * facet's locale, internal and external types. + * + * The characters in [from,from_end) are converted and written to + * [to,to_end). from_next and to_next are set to point to the + * character following the last successfully converted character, + * respectively. If the result needed no conversion, from_next and + * to_next are not affected. + * + * The @a state argument should be initialized if the input is at the + * beginning and carried from a previous call if continuing + * conversion. There are no guarantees about how @a state is used. + * + * The result returned is a member of codecvt_base::result. If + * all the input is converted, returns codecvt_base::ok. If no + * conversion is necessary, returns codecvt_base::noconv. If + * the input ends early or there is insufficient space in the + * output, returns codecvt_base::partial. Otherwise the + * conversion failed and codecvt_base::error is returned. + * + * @param __state Persistent conversion state data. + * @param __from Start of input. + * @param __from_end End of input. + * @param __from_next Returns start of unconverted data. + * @param __to Start of output buffer. + * @param __to_end End of output buffer. + * @param __to_next Returns start of unused output area. + * @return codecvt_base::result. + */ + result + out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const + { + return this->do_out(__state, __from, __from_end, __from_next, + __to, __to_end, __to_next); + } + + /** + * @brief Reset conversion state. + * + * Writes characters to output that would restore @a state to initial + * conditions. The idea is that if a partial conversion occurs, then + * the converting the characters written by this function would leave + * the state in initial conditions, rather than partial conversion + * state. It does this by calling codecvt::do_unshift(). + * + * For example, if 4 external characters always converted to 1 internal + * character, and input to in() had 6 external characters with state + * saved, this function would write two characters to the output and + * set the state to initialized conditions. + * + * The source and destination character sets are determined by the + * facet's locale, internal and external types. + * + * The result returned is a member of codecvt_base::result. If the + * state could be reset and data written, returns codecvt_base::ok. If + * no conversion is necessary, returns codecvt_base::noconv. If the + * output has insufficient space, returns codecvt_base::partial. + * Otherwise the reset failed and codecvt_base::error is returned. + * + * @param __state Persistent conversion state data. + * @param __to Start of output buffer. + * @param __to_end End of output buffer. + * @param __to_next Returns start of unused output area. + * @return codecvt_base::result. + */ + result + unshift(state_type& __state, extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const + { return this->do_unshift(__state, __to,__to_end,__to_next); } + + /** + * @brief Convert from external to internal character set. + * + * Converts input string of extern_type to output string of + * intern_type. This is analogous to mbsrtowcs. It does this by + * calling codecvt::do_in. + * + * The source and destination character sets are determined by the + * facet's locale, internal and external types. + * + * The characters in [from,from_end) are converted and written to + * [to,to_end). from_next and to_next are set to point to the + * character following the last successfully converted character, + * respectively. If the result needed no conversion, from_next and + * to_next are not affected. + * + * The @a state argument should be initialized if the input is at the + * beginning and carried from a previous call if continuing + * conversion. There are no guarantees about how @a state is used. + * + * The result returned is a member of codecvt_base::result. If + * all the input is converted, returns codecvt_base::ok. If no + * conversion is necessary, returns codecvt_base::noconv. If + * the input ends early or there is insufficient space in the + * output, returns codecvt_base::partial. Otherwise the + * conversion failed and codecvt_base::error is returned. + * + * @param __state Persistent conversion state data. + * @param __from Start of input. + * @param __from_end End of input. + * @param __from_next Returns start of unconverted data. + * @param __to Start of output buffer. + * @param __to_end End of output buffer. + * @param __to_next Returns start of unused output area. + * @return codecvt_base::result. + */ + result + in(state_type& __state, const extern_type* __from, + const extern_type* __from_end, const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const + { + return this->do_in(__state, __from, __from_end, __from_next, + __to, __to_end, __to_next); + } + + int + encoding() const throw() + { return this->do_encoding(); } + + bool + always_noconv() const throw() + { return this->do_always_noconv(); } + + int + length(state_type& __state, const extern_type* __from, + const extern_type* __end, size_t __max) const + { return this->do_length(__state, __from, __end, __max); } + + int + max_length() const throw() + { return this->do_max_length(); } + + protected: + explicit + __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { } + + virtual + ~__codecvt_abstract_base() { } + + /** + * @brief Convert from internal to external character set. + * + * Converts input string of intern_type to output string of + * extern_type. This function is a hook for derived classes to change + * the value returned. @see out for more information. + */ + virtual result + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const = 0; + + virtual result + do_unshift(state_type& __state, extern_type* __to, + extern_type* __to_end, extern_type*& __to_next) const = 0; + + virtual result + do_in(state_type& __state, const extern_type* __from, + const extern_type* __from_end, const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const = 0; + + virtual int + do_encoding() const throw() = 0; + + virtual bool + do_always_noconv() const throw() = 0; + + virtual int + do_length(state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const = 0; + + virtual int + do_max_length() const throw() = 0; + }; + + /** + * @brief Primary class template codecvt. + * @ingroup locales + * + * NB: Generic, mostly useless implementation. + * + */ + template + class codecvt + : public __codecvt_abstract_base<_InternT, _ExternT, _StateT> + { + public: + // Types: + typedef codecvt_base::result result; + typedef _InternT intern_type; + typedef _ExternT extern_type; + typedef _StateT state_type; + + protected: + __c_locale _M_c_locale_codecvt; + + public: + static locale::id id; + + explicit + codecvt(size_t __refs = 0) + : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs), + _M_c_locale_codecvt(0) + { } + + explicit + codecvt(__c_locale __cloc, size_t __refs = 0); + + protected: + virtual + ~codecvt() { } + + virtual result + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_unshift(state_type& __state, extern_type* __to, + extern_type* __to_end, extern_type*& __to_next) const; + + virtual result + do_in(state_type& __state, const extern_type* __from, + const extern_type* __from_end, const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const; + + virtual int + do_encoding() const throw(); + + virtual bool + do_always_noconv() const throw(); + + virtual int + do_length(state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const; + + virtual int + do_max_length() const throw(); + }; + + template + locale::id codecvt<_InternT, _ExternT, _StateT>::id; + + /// class codecvt specialization. + template<> + class codecvt + : public __codecvt_abstract_base + { + friend class messages; + + public: + // Types: + typedef char intern_type; + typedef char extern_type; + typedef mbstate_t state_type; + + protected: + __c_locale _M_c_locale_codecvt; + + public: + static locale::id id; + + explicit + codecvt(size_t __refs = 0); + + explicit + codecvt(__c_locale __cloc, size_t __refs = 0); + + protected: + virtual + ~codecvt(); + + virtual result + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_unshift(state_type& __state, extern_type* __to, + extern_type* __to_end, extern_type*& __to_next) const; + + virtual result + do_in(state_type& __state, const extern_type* __from, + const extern_type* __from_end, const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const; + + virtual int + do_encoding() const throw(); + + virtual bool + do_always_noconv() const throw(); + + virtual int + do_length(state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const; + + virtual int + do_max_length() const throw(); + }; + +#ifdef _GLIBCXX_USE_WCHAR_T + /** @brief Class codecvt specialization. + * + * Converts between narrow and wide characters in the native character set + */ + template<> + class codecvt + : public __codecvt_abstract_base + { + friend class messages; + + public: + // Types: + typedef wchar_t intern_type; + typedef char extern_type; + typedef mbstate_t state_type; + + protected: + __c_locale _M_c_locale_codecvt; + + public: + static locale::id id; + + explicit + codecvt(size_t __refs = 0); + + explicit + codecvt(__c_locale __cloc, size_t __refs = 0); + + protected: + virtual + ~codecvt(); + + virtual result + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_unshift(state_type& __state, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_in(state_type& __state, + const extern_type* __from, const extern_type* __from_end, + const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const; + + virtual + int do_encoding() const throw(); + + virtual + bool do_always_noconv() const throw(); + + virtual + int do_length(state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const; + + virtual int + do_max_length() const throw(); + }; +#endif //_GLIBCXX_USE_WCHAR_T + +#if __cplusplus >= 201103L + /** @brief Class codecvt specialization. + * + * Converts between UTF-16 and UTF-8. + */ + template<> + class codecvt + : public __codecvt_abstract_base + { + public: + // Types: + typedef char16_t intern_type; + typedef char extern_type; + typedef mbstate_t state_type; + + public: + static locale::id id; + + explicit + codecvt(size_t __refs = 0) + : __codecvt_abstract_base(__refs) { } + + protected: + virtual + ~codecvt(); + + virtual result + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_unshift(state_type& __state, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_in(state_type& __state, + const extern_type* __from, const extern_type* __from_end, + const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const; + + virtual + int do_encoding() const throw(); + + virtual + bool do_always_noconv() const throw(); + + virtual + int do_length(state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const; + + virtual int + do_max_length() const throw(); + }; + + /** @brief Class codecvt specialization. + * + * Converts between UTF-32 and UTF-8. + */ + template<> + class codecvt + : public __codecvt_abstract_base + { + public: + // Types: + typedef char32_t intern_type; + typedef char extern_type; + typedef mbstate_t state_type; + + public: + static locale::id id; + + explicit + codecvt(size_t __refs = 0) + : __codecvt_abstract_base(__refs) { } + + protected: + virtual + ~codecvt(); + + virtual result + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_unshift(state_type& __state, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_in(state_type& __state, + const extern_type* __from, const extern_type* __from_end, + const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const; + + virtual + int do_encoding() const throw(); + + virtual + bool do_always_noconv() const throw(); + + virtual + int do_length(state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const; + + virtual int + do_max_length() const throw(); + }; + +#ifdef _GLIBCXX_USE_CHAR8_T + /** @brief Class codecvt specialization. + * + * Converts between UTF-16 and UTF-8. + */ + template<> + class codecvt + : public __codecvt_abstract_base + { + public: + // Types: + typedef char16_t intern_type; + typedef char8_t extern_type; + typedef mbstate_t state_type; + + public: + static locale::id id; + + explicit + codecvt(size_t __refs = 0) + : __codecvt_abstract_base(__refs) { } + + protected: + virtual + ~codecvt(); + + virtual result + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_unshift(state_type& __state, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_in(state_type& __state, + const extern_type* __from, const extern_type* __from_end, + const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const; + + virtual + int do_encoding() const throw(); + + virtual + bool do_always_noconv() const throw(); + + virtual + int do_length(state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const; + + virtual int + do_max_length() const throw(); + }; + + /** @brief Class codecvt specialization. + * + * Converts between UTF-32 and UTF-8. + */ + template<> + class codecvt + : public __codecvt_abstract_base + { + public: + // Types: + typedef char32_t intern_type; + typedef char8_t extern_type; + typedef mbstate_t state_type; + + public: + static locale::id id; + + explicit + codecvt(size_t __refs = 0) + : __codecvt_abstract_base(__refs) { } + + protected: + virtual + ~codecvt(); + + virtual result + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_unshift(state_type& __state, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_in(state_type& __state, + const extern_type* __from, const extern_type* __from_end, + const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const; + + virtual + int do_encoding() const throw(); + + virtual + bool do_always_noconv() const throw(); + + virtual + int do_length(state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const; + + virtual int + do_max_length() const throw(); + }; +#endif // _GLIBCXX_USE_CHAR8_T + +#endif // C++11 + + /// class codecvt_byname [22.2.1.6]. + template + class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> + { + public: + explicit + codecvt_byname(const char* __s, size_t __refs = 0) + : codecvt<_InternT, _ExternT, _StateT>(__refs) + { + if (__builtin_strcmp(__s, "C") != 0 + && __builtin_strcmp(__s, "POSIX") != 0) + { + this->_S_destroy_c_locale(this->_M_c_locale_codecvt); + this->_S_create_c_locale(this->_M_c_locale_codecvt, __s); + } + } + +#if __cplusplus >= 201103L + explicit + codecvt_byname(const string& __s, size_t __refs = 0) + : codecvt_byname(__s.c_str(), __refs) { } +#endif + + protected: + virtual + ~codecvt_byname() { } + }; + +#if __cplusplus >= 201103L + template<> + class codecvt_byname + : public codecvt + { + public: + explicit + codecvt_byname(const char*, size_t __refs = 0) + : codecvt(__refs) { } + + explicit + codecvt_byname(const string& __s, size_t __refs = 0) + : codecvt_byname(__s.c_str(), __refs) { } + + protected: + virtual + ~codecvt_byname() { } + }; + + template<> + class codecvt_byname + : public codecvt + { + public: + explicit + codecvt_byname(const char*, size_t __refs = 0) + : codecvt(__refs) { } + + explicit + codecvt_byname(const string& __s, size_t __refs = 0) + : codecvt_byname(__s.c_str(), __refs) { } + + protected: + virtual + ~codecvt_byname() { } + }; + +#if defined(_GLIBCXX_USE_CHAR8_T) + template<> + class codecvt_byname + : public codecvt + { + public: + explicit + codecvt_byname(const char*, size_t __refs = 0) + : codecvt(__refs) { } + + explicit + codecvt_byname(const string& __s, size_t __refs = 0) + : codecvt_byname(__s.c_str(), __refs) { } + + protected: + virtual + ~codecvt_byname() { } + }; + + template<> + class codecvt_byname + : public codecvt + { + public: + explicit + codecvt_byname(const char*, size_t __refs = 0) + : codecvt(__refs) { } + + explicit + codecvt_byname(const string& __s, size_t __refs = 0) + : codecvt_byname(__s.c_str(), __refs) { } + + protected: + virtual + ~codecvt_byname() { } + }; +#endif + +#endif // C++11 + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class codecvt_byname; + + extern template + const codecvt& + use_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class codecvt_byname; + + extern template + const codecvt& + use_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); +#endif + +#if __cplusplus >= 201103L + extern template class codecvt_byname; + extern template class codecvt_byname; + +#if defined(_GLIBCXX_USE_CHAR8_T) + extern template class codecvt_byname; + extern template class codecvt_byname; +#endif + +#endif + +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif // _CODECVT_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@codecvt.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@codecvt.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..fc6e27c6dd0fe9ed7393f6470383193dfce1d5c5 GIT binary patch literal 55295 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. + +/** @file bits/concept_check.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iterator} + */ + +#ifndef _CONCEPT_CHECK_H +#define _CONCEPT_CHECK_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wvariadic-macros" + +// All places in libstdc++-v3 where these are used, or /might/ be used, or +// don't need to be used, or perhaps /should/ be used, are commented with +// "concept requirements" (and maybe some more text). So grep like crazy +// if you're looking for additional places to use these. + +// Concept-checking code is off by default unless users turn it on via +// configure options or editing c++config.h. +// It is not supported for freestanding implementations. + +#if !defined(_GLIBCXX_CONCEPT_CHECKS) + +#define __glibcxx_function_requires(...) +#define __glibcxx_class_requires(_a,_b) +#define __glibcxx_class_requires2(_a,_b,_c) +#define __glibcxx_class_requires3(_a,_b,_c,_d) +#define __glibcxx_class_requires4(_a,_b,_c,_d,_e) + +#else // the checks are on + +#include + +// Note that the obvious and elegant approach of +// +//#define glibcxx_function_requires(C) debug::function_requires< debug::C >() +// +// won't work due to concept templates with more than one parameter, e.g., +// BinaryPredicateConcept. The preprocessor tries to split things up on +// the commas in the template argument list. We can't use an inner pair of +// parenthesis to hide the commas, because "debug::(Temp)" isn't +// a valid instantiation pattern. Thus, we steal a feature from C99. + +#define __glibcxx_function_requires(...) \ + __gnu_cxx::__function_requires< __gnu_cxx::__VA_ARGS__ >(); +#define __glibcxx_class_requires(_a,_C) \ + _GLIBCXX_CLASS_REQUIRES(_a, __gnu_cxx, _C); +#define __glibcxx_class_requires2(_a,_b,_C) \ + _GLIBCXX_CLASS_REQUIRES2(_a, _b, __gnu_cxx, _C); +#define __glibcxx_class_requires3(_a,_b,_c,_C) \ + _GLIBCXX_CLASS_REQUIRES3(_a, _b, _c, __gnu_cxx, _C); +#define __glibcxx_class_requires4(_a,_b,_c,_d,_C) \ + _GLIBCXX_CLASS_REQUIRES4(_a, _b, _c, _d, __gnu_cxx, _C); + +#endif // enable/disable + +#pragma GCC diagnostic pop +#endif // _GLIBCXX_CONCEPT_CHECK diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@concept_check.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@concept_check.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..759906e5fdfc75d1413535ed119906ac4f2f27ff GIT binary patch literal 11991 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 S3>g?0. + +/** @file bits/cpp_type_traits.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{ext/type_traits.h} + */ + +// Written by Gabriel Dos Reis + +#ifndef _CPP_TYPE_TRAITS_H +#define _CPP_TYPE_TRAITS_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include +#if __glibcxx_type_trait_variable_templates +# include // is_same_v, is_integral_v +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + +// +// This file provides some compile-time information about various types. +// These representations were designed, on purpose, to be constant-expressions +// and not types as found in . In particular, they +// can be used in control structures and the optimizer hopefully will do +// the obvious thing. +// +// Why integral expressions, and not functions nor types? +// Firstly, these compile-time entities are used as template-arguments +// so function return values won't work: We need compile-time entities. +// We're left with types and constant integral expressions. +// Secondly, from the point of view of ease of use, type-based compile-time +// information is -not- *that* convenient. One has to write lots of +// overloaded functions and to hope that the compiler will select the right +// one. As a net effect, the overall structure isn't very clear at first +// glance. +// Thirdly, partial ordering and overload resolution (of function templates) +// is highly costly in terms of compiler-resource. It is a Good Thing to +// keep these resource consumption as least as possible. +// +// See valarray_array.h for a case use. +// +// -- Gaby (dosreis@cmla.ens-cachan.fr) 2000-03-06. +// +// Update 2005: types are also provided and has been +// removed. +// + +extern "C++" { + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + struct __true_type { }; + struct __false_type { }; + + template + struct __truth_type + { typedef __false_type __type; }; + + template<> + struct __truth_type + { typedef __true_type __type; }; + + // N.B. The conversions to bool are needed due to the issue + // explained in c++/19404. + template + struct __traitor + { + enum { __value = bool(_Sp::__value) || bool(_Tp::__value) }; + typedef typename __truth_type<__value>::__type __type; + }; + + // Compare for equality of types. + template + struct __are_same + { + enum { __value = 0 }; + typedef __false_type __type; + }; + + template + struct __are_same<_Tp, _Tp> + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + // + // Integer types + // + template + struct __is_integer + { + enum { __value = 0 }; + typedef __false_type __type; + }; + + // Explicit specializations for the standard integer types. + // Up to four target-specific __int types are supported as well. + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + +# ifdef __WCHAR_TYPE__ + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; +# endif + +#ifdef _GLIBCXX_USE_CHAR8_T + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif + +#if __cplusplus >= 201103L + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_integer + { + enum { __value = 1 }; + typedef __true_type __type; + }; + +#define __INT_N(TYPE) \ + __extension__ \ + template<> \ + struct __is_integer \ + { \ + enum { __value = 1 }; \ + typedef __true_type __type; \ + }; \ + __extension__ \ + template<> \ + struct __is_integer \ + { \ + enum { __value = 1 }; \ + typedef __true_type __type; \ + }; + +#ifdef __GLIBCXX_TYPE_INT_N_0 +__INT_N(__GLIBCXX_TYPE_INT_N_0) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_1 +__INT_N(__GLIBCXX_TYPE_INT_N_1) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_2 +__INT_N(__GLIBCXX_TYPE_INT_N_2) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_3 +__INT_N(__GLIBCXX_TYPE_INT_N_3) +#endif + +#undef __INT_N + + // + // Floating point types + // + template + struct __is_floating + { + enum { __value = 0 }; + typedef __false_type __type; + }; + + // three specializations (float, double and 'long double') + template<> + struct __is_floating + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_floating + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_floating + { + enum { __value = 1 }; + typedef __true_type __type; + }; + +#ifdef __STDCPP_FLOAT16_T__ + template<> + struct __is_floating<_Float16> + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif + +#ifdef __STDCPP_FLOAT32_T__ + template<> + struct __is_floating<_Float32> + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif + +#ifdef __STDCPP_FLOAT64_T__ + template<> + struct __is_floating<_Float64> + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif + +#ifdef __STDCPP_FLOAT128_T__ + template<> + struct __is_floating<_Float128> + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif + +#ifdef __STDCPP_BFLOAT16_T__ + template<> + struct __is_floating<__gnu_cxx::__bfloat16_t> + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif + + // + // An arithmetic type is an integer type or a floating point type + // + template + struct __is_arithmetic + : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > + { }; + + // + // For use in std::copy and std::find overloads for streambuf iterators. + // + template + struct __is_char + { + enum { __value = 0 }; + typedef __false_type __type; + }; + + template<> + struct __is_char + { + enum { __value = 1 }; + typedef __true_type __type; + }; + +#ifdef __WCHAR_TYPE__ + template<> + struct __is_char + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif + + template + struct __is_byte + { + enum { __value = 0 }; + typedef __false_type __type; + }; + + template<> + struct __is_byte + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_byte + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template<> + struct __is_byte + { + enum { __value = 1 }; + typedef __true_type __type; + }; + +#ifdef __glibcxx_byte // C++ >= 17 + enum class byte : unsigned char; + + template<> + struct __is_byte + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif // C++17 + +#ifdef _GLIBCXX_USE_CHAR8_T + template<> + struct __is_byte + { + enum { __value = 1 }; + typedef __true_type __type; + }; +#endif + + // A type that is safe for use with memcpy, memmove, memcmp etc. + template + struct __is_nonvolatile_trivially_copyable + { + enum { __value = __is_trivially_copyable(_Tp) }; + }; + + // Cannot use memcpy/memmove/memcmp on volatile types even if they are + // trivially copyable, so ensure __memcpyable + // and similar will be false. + template + struct __is_nonvolatile_trivially_copyable + { + enum { __value = 0 }; + }; + + // Whether two iterator types can be used with memcpy/memmove. + template + struct __memcpyable + { + enum { __value = 0 }; + }; + + // Allow memcpy when source and destination are pointers to the same type. + template + struct __memcpyable<_Tp*, _Tp*> + : __is_nonvolatile_trivially_copyable<_Tp> + { }; + + // Source pointer can be const. + template + struct __memcpyable<_Tp*, const _Tp*> + : __is_nonvolatile_trivially_copyable<_Tp> + { }; + + template struct __memcpyable_integer; + + // For heterogeneous types, allow memcpy between equal-sized integers. + // N.B. we cannot do the same for equal-sized enums, they're not assignable. + // We cannot do it for pointers, because derived-to-base can adjust offset. + template + struct __memcpyable<_Tp*, _Up*> + { + enum { + __value = __memcpyable_integer<_Tp>::__width != 0 + && ((int)__memcpyable_integer<_Tp>::__width + == (int)__memcpyable_integer<_Up>::__width) + }; + }; + + // Specialization for const U* because __is_integer is never true. + template + struct __memcpyable<_Tp*, const _Up*> + : __memcpyable<_Tp*, _Up*> + { }; + + template + struct __memcpyable_integer + { + enum { + __width = __is_integer<_Tp>::__value ? (sizeof(_Tp) * __CHAR_BIT__) : 0 + }; + }; + + // Cannot memcpy volatile memory. + template + struct __memcpyable_integer + { enum { __width = 0 }; }; + + // Assigning an integer to bool needs to convert all non-zero values to true + // so it is not a memcpyable integer. + // __memcpyable is still true though. + template<> + struct __memcpyable_integer + { enum { __width = 0 }; }; + + // Specializations for __intNN types with padding bits. +#if defined __GLIBCXX_TYPE_INT_N_0 && __GLIBCXX_BITSIZE_INT_N_0 % __CHAR_BIT__ + __extension__ + template<> + struct __memcpyable_integer<__GLIBCXX_TYPE_INT_N_0> + { enum { __width = __GLIBCXX_BITSIZE_INT_N_0 }; }; + __extension__ + template<> + struct __memcpyable_integer + { enum { __width = __GLIBCXX_BITSIZE_INT_N_0 }; }; +#endif +#if defined __GLIBCXX_TYPE_INT_N_1 && __GLIBCXX_BITSIZE_INT_N_1 % __CHAR_BIT__ + __extension__ + template<> + struct __memcpyable_integer<__GLIBCXX_TYPE_INT_N_1> + { enum { __width = __GLIBCXX_BITSIZE_INT_N_1 }; }; + __extension__ + template<> + struct __memcpyable_integer + { enum { __width = __GLIBCXX_BITSIZE_INT_N_1 }; }; +#endif +#if defined __GLIBCXX_TYPE_INT_N_2 && __GLIBCXX_BITSIZE_INT_N_2 % __CHAR_BIT__ + __extension__ + template<> + struct __memcpyable_integer<__GLIBCXX_TYPE_INT_N_2> + { enum { __width = __GLIBCXX_BITSIZE_INT_N_2 }; }; + __extension__ + template<> + struct __memcpyable_integer + { enum { __width = __GLIBCXX_BITSIZE_INT_N_2 }; }; +#endif +#if defined __GLIBCXX_TYPE_INT_N_3 && __GLIBCXX_BITSIZE_INT_N_3 % __CHAR_BIT__ + __extension__ + template<> + struct __memcpyable_integer<__GLIBCXX_TYPE_INT_N_3> + { enum { __width = __GLIBCXX_BITSIZE_INT_N_3 }; }; + __extension__ + template<> + struct __memcpyable_integer + { enum { __width = __GLIBCXX_BITSIZE_INT_N_3 }; }; +#endif + +#if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__ + // In strict modes __is_integer<__int128> is false, + // but we want to allow memcpy between signed/unsigned __int128. + __extension__ + template<> + struct __memcpyable_integer<__int128> { enum { __width = 128 }; }; + __extension__ + template<> + struct __memcpyable_integer { enum { __width = 128 }; }; +#endif + +#if _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && _GLIBCXX_LDOUBLE_IS_IEEE_BINARY64 + template<> + struct __memcpyable { enum { __value = true }; }; + template<> + struct __memcpyable { enum { __value = true }; }; +#endif + +#if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32) + template<> + struct __memcpyable<_Float32*, float*> { enum { __value = true }; }; + template<> + struct __memcpyable { enum { __value = true }; }; +#endif + +#if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64) + template<> + struct __memcpyable<_Float64*, double*> { enum { __value = true }; }; + template<> + struct __memcpyable { enum { __value = true }; }; +#endif + +#if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) + template<> + struct __memcpyable<_Float128*, long double*> { enum { __value = true }; }; + template<> + struct __memcpyable { enum { __value = true }; }; +#endif + + // Whether two iterator types can be used with memcmp. + // This trait only says it's well-formed to use memcmp, not that it + // gives the right answer for a given algorithm. So for example, std::equal + // needs to add additional checks that the types are integers or pointers, + // because other trivially copyable types can overload operator==. + template + struct __memcmpable + { + enum { __value = 0 }; + }; + + // OK to use memcmp with pointers to trivially copyable types. + template + struct __memcmpable<_Tp*, _Tp*> + : __is_nonvolatile_trivially_copyable<_Tp> + { }; + + template + struct __memcmpable + : __is_nonvolatile_trivially_copyable<_Tp> + { }; + + template + struct __memcmpable<_Tp*, const _Tp*> + : __is_nonvolatile_trivially_copyable<_Tp> + { }; + + // Whether memcmp can be used to determine ordering for a type + // e.g. in std::lexicographical_compare or three-way comparisons. + // True for unsigned integer-like types where comparing each byte in turn + // as an unsigned char yields the right result. This is true for all + // unsigned integers on big endian targets, but only unsigned narrow + // character types (and std::byte) on little endian targets. + template::__value +#else + __is_byte<_Tp>::__value +#endif + > + struct __is_memcmp_ordered + { + static const bool __value = _Tp(-1) > _Tp(1); // is unsigned + }; + + template + struct __is_memcmp_ordered<_Tp, false> + { + static const bool __value = false; + }; + + // Whether two types can be compared using memcmp. + template + struct __is_memcmp_ordered_with + { + static const bool __value = __is_memcmp_ordered<_Tp>::__value + && __is_memcmp_ordered<_Up>::__value; + }; + + template + struct __is_memcmp_ordered_with<_Tp, _Up, false> + { + static const bool __value = false; + }; + +#if __cplusplus >= 201703L +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + // std::byte is not an integer, but it can be compared using memcmp. + template<> + struct __is_memcmp_ordered + { static constexpr bool __value = true; }; +#endif + + // std::byte can only be compared to itself, not to other types. + template<> + struct __is_memcmp_ordered_with + { static constexpr bool __value = true; }; + + template + struct __is_memcmp_ordered_with<_Tp, std::byte, _SameSize> + { static constexpr bool __value = false; }; + + template + struct __is_memcmp_ordered_with + { static constexpr bool __value = false; }; +#endif + +#if __glibcxx_type_trait_variable_templates + template + constexpr bool __can_use_memchr_for_find + // Can only use memchr to search for narrow characters and std::byte. + = __is_byte<_ValT>::__value + // And only if the value to find is an integer (or is also std::byte). + && (is_same_v<_Tp, _ValT> || is_integral_v<_Tp>); +#endif + + // + // Move iterator type + // + template + struct __is_move_iterator + { + enum { __value = 0 }; + typedef __false_type __type; + }; + + // Fallback implementation of the function in bits/stl_iterator.h used to + // remove the move_iterator wrapper. + template + _GLIBCXX20_CONSTEXPR + inline _Iterator + __miter_base(_Iterator __it) + { return __it; } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +} // extern "C++" + +#pragma GCC diagnostic pop + +#endif //_CPP_TYPE_TRAITS_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cpp_type_traits.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cpp_type_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3eb7ced61a10c6942863409c4f81afecf1885141 GIT binary patch literal 39544 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 OyjIP`^S7EQg#iGK6DURi literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_forced.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_forced.h new file mode 100644 index 0000000..01236df --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_forced.h @@ -0,0 +1,62 @@ +// cxxabi.h subset for cancellation -*- C++ -*- + +// Copyright (C) 2007-2025 Free Software Foundation, Inc. +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/cxxabi_forced.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{cxxabi.h} + */ + +#ifndef _CXXABI_FORCED_H +#define _CXXABI_FORCED_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#pragma GCC visibility push(default) + +#ifdef __cplusplus +namespace __cxxabiv1 +{ + /** + * @brief Thrown as part of forced unwinding. + * @ingroup exceptions + * + * A magic placeholder class that can be caught by reference to + * recognize forced unwinding. + */ + class __forced_unwind + { + virtual ~__forced_unwind() throw(); + + // Prevent catch by value. + virtual void __pure_dummy() = 0; + }; +} +#endif // __cplusplus + +#pragma GCC visibility pop + +#endif // __CXXABI_FORCED_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_forced.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_forced.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a7a70afa177c30811442902fc88017248f37d125 GIT binary patch literal 11966 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. + +/** @file bits/cxxabi_init_exception.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. + */ + +#ifndef _CXXABI_INIT_EXCEPTION_H +#define _CXXABI_INIT_EXCEPTION_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#pragma GCC visibility push(default) + +#include +#include + +#ifndef _GLIBCXX_CDTOR_CALLABI +#define _GLIBCXX_CDTOR_CALLABI +#define _GLIBCXX_HAVE_CDTOR_CALLABI 0 +#else +#define _GLIBCXX_HAVE_CDTOR_CALLABI 1 +#endif + +#ifdef __cplusplus + +namespace std +{ + class type_info; +} + +namespace __cxxabiv1 +{ + struct __cxa_refcounted_exception; + + extern "C" + { + // Allocate memory for the primary exception plus the thrown object. + void* + __cxa_allocate_exception(size_t) _GLIBCXX_NOTHROW; + + void + __cxa_free_exception(void*) _GLIBCXX_NOTHROW; + + // Initialize exception (this is a GNU extension) + __cxa_refcounted_exception* + __cxa_init_primary_exception(void *__object, std::type_info *__tinfo, + void (_GLIBCXX_CDTOR_CALLABI *__dest) (void *)) + _GLIBCXX_NOTHROW; + + } +} // namespace __cxxabiv1 + +#endif + +#pragma GCC visibility pop + +#endif // _CXXABI_INIT_EXCEPTION_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_init_exception.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@cxxabi_init_exception.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7127e2197649e5c59b3e76930c9328a16eeea2c5 GIT binary patch literal 13715 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception.h new file mode 100644 index 0000000..f8bca91 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception.h @@ -0,0 +1,85 @@ +// Exception Handling support header for -*- C++ -*- + +// Copyright (C) 2016-2025 Free Software Foundation, Inc. +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/exception.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. + */ + +#ifndef __EXCEPTION_H +#define __EXCEPTION_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +extern "C++" { + +namespace std _GLIBCXX_VISIBILITY(default) +{ + /** + * @defgroup exceptions Exceptions + * @ingroup diagnostics + * @since C++98 + * + * Classes and functions for reporting errors via exceptions. + * @{ + */ + + /** + * @brief Base class for all library exceptions. + * + * This is the base class for all exceptions thrown by the standard + * library, and by certain language expressions. You are free to derive + * your own %exception classes, or use a different hierarchy, or to + * throw non-class data (e.g., fundamental types). + */ + class exception + { + public: + exception() _GLIBCXX_NOTHROW { } + virtual ~exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; +#if __cplusplus >= 201103L + exception(const exception&) = default; + exception& operator=(const exception&) = default; + exception(exception&&) = default; + exception& operator=(exception&&) = default; +#endif + + /** Returns a C-style character string describing the general cause + * of the current error. */ + virtual const char* + what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; + }; + + /// @} + +} // namespace std + +} + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4cace51e141b24dc1621d21cb7c739826ad08c16 GIT binary patch literal 13763 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. + +/** @file bits/exception_defines.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{exception} + */ + +#ifndef _EXCEPTION_DEFINES_H +#define _EXCEPTION_DEFINES_H 1 + +#if ! __cpp_exceptions +// Iff -fno-exceptions, transform error handling code to work without it. +# define __try if (true) +# define __catch(X) if (false) +# define __throw_exception_again +#else +// Else proceed normally. +# define __try try +# define __catch(X) catch(X) +# define __throw_exception_again throw +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_defines.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_defines.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..71ee64f729db77746d6be7886bbc45df2e8a2ab9 GIT binary patch literal 11671 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 OloOD%U;>dg5ZeHnCaQJ- literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_ptr.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_ptr.h new file mode 100644 index 0000000..a7e5e52 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_ptr.h @@ -0,0 +1,294 @@ +// Exception Handling support header (exception_ptr class) for -*- C++ -*- + +// Copyright (C) 2008-2025 Free Software Foundation, Inc. +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/exception_ptr.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{exception} + */ + +#ifndef _EXCEPTION_PTR_H +#define _EXCEPTION_PTR_H + +#include +#include +#include +#include +#include + +#if __cplusplus >= 201103L +# include +#endif + +#ifdef _GLIBCXX_EH_PTR_RELOPS_COMPAT +# define _GLIBCXX_EH_PTR_USED __attribute__((__used__)) +#else +# define _GLIBCXX_EH_PTR_USED +#endif + +extern "C++" { + +namespace std _GLIBCXX_VISIBILITY(default) +{ + class type_info; + + /** + * @addtogroup exceptions + * @{ + */ + + namespace __exception_ptr + { + class exception_ptr; + } + + using __exception_ptr::exception_ptr; + + /** Obtain an exception_ptr to the currently handled exception. + * + * If there is none, or the currently handled exception is foreign, + * return the null value. + * + * @since C++11 + */ + exception_ptr current_exception() _GLIBCXX_USE_NOEXCEPT; + + template + exception_ptr make_exception_ptr(_Ex) _GLIBCXX_USE_NOEXCEPT; + + /// Throw the object pointed to by the exception_ptr. + void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__)); + + namespace __exception_ptr + { + using std::rethrow_exception; // So that ADL finds it. + + /** + * @brief An opaque pointer to an arbitrary exception. + * + * The actual name of this type is unspecified, so the alias + * `std::exception_ptr` should be used to refer to it. + * + * @headerfile exception + * @since C++11 (but usable in C++98 as a GCC extension) + * @ingroup exceptions + */ + class exception_ptr + { + void* _M_exception_object; + + explicit exception_ptr(void* __e) _GLIBCXX_USE_NOEXCEPT; + + void _M_addref() _GLIBCXX_USE_NOEXCEPT; + void _M_release() _GLIBCXX_USE_NOEXCEPT; + + void *_M_get() const _GLIBCXX_NOEXCEPT __attribute__ ((__pure__)); + + friend exception_ptr std::current_exception() _GLIBCXX_USE_NOEXCEPT; + friend void std::rethrow_exception(exception_ptr); + template + friend exception_ptr std::make_exception_ptr(_Ex) _GLIBCXX_USE_NOEXCEPT; + + public: + exception_ptr() _GLIBCXX_USE_NOEXCEPT; + + exception_ptr(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT; + +#if __cplusplus >= 201103L + exception_ptr(nullptr_t) noexcept + : _M_exception_object(nullptr) + { } + + exception_ptr(exception_ptr&& __o) noexcept + : _M_exception_object(__o._M_exception_object) + { __o._M_exception_object = nullptr; } +#endif + +#if (__cplusplus < 201103L) || defined (_GLIBCXX_EH_PTR_COMPAT) + typedef void (exception_ptr::*__safe_bool)(); + + // For construction from nullptr or 0. + exception_ptr(__safe_bool) _GLIBCXX_USE_NOEXCEPT; +#endif + + exception_ptr& + operator=(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT; + +#if __cplusplus >= 201103L + exception_ptr& + operator=(exception_ptr&& __o) noexcept + { + exception_ptr(static_cast(__o)).swap(*this); + return *this; + } +#endif + + ~exception_ptr() _GLIBCXX_USE_NOEXCEPT; + + void + swap(exception_ptr&) _GLIBCXX_USE_NOEXCEPT; + +#ifdef _GLIBCXX_EH_PTR_COMPAT + // Retained for compatibility with CXXABI_1.3. + void _M_safe_bool_dummy() _GLIBCXX_USE_NOEXCEPT; + bool operator!() const _GLIBCXX_USE_NOEXCEPT + __attribute__ ((__pure__)); + operator __safe_bool() const _GLIBCXX_USE_NOEXCEPT; +#endif + +#if __cplusplus >= 201103L + explicit operator bool() const noexcept + { return _M_exception_object; } +#endif + +#if __cpp_impl_three_way_comparison >= 201907L \ + && ! defined _GLIBCXX_EH_PTR_RELOPS_COMPAT + friend bool + operator==(const exception_ptr&, const exception_ptr&) noexcept = default; +#else + friend _GLIBCXX_EH_PTR_USED bool + operator==(const exception_ptr& __x, const exception_ptr& __y) + _GLIBCXX_USE_NOEXCEPT + { return __x._M_exception_object == __y._M_exception_object; } + + friend _GLIBCXX_EH_PTR_USED bool + operator!=(const exception_ptr& __x, const exception_ptr& __y) + _GLIBCXX_USE_NOEXCEPT + { return __x._M_exception_object != __y._M_exception_object; } +#endif + + const class std::type_info* + __cxa_exception_type() const _GLIBCXX_USE_NOEXCEPT + __attribute__ ((__pure__)); + }; + + _GLIBCXX_EH_PTR_USED + inline + exception_ptr::exception_ptr() _GLIBCXX_USE_NOEXCEPT + : _M_exception_object(0) + { } + + _GLIBCXX_EH_PTR_USED + inline + exception_ptr::exception_ptr(const exception_ptr& __other) + _GLIBCXX_USE_NOEXCEPT + : _M_exception_object(__other._M_exception_object) + { + if (_M_exception_object) + _M_addref(); + } + + _GLIBCXX_EH_PTR_USED + inline + exception_ptr::~exception_ptr() _GLIBCXX_USE_NOEXCEPT + { + if (_M_exception_object) + _M_release(); + } + + _GLIBCXX_EH_PTR_USED + inline exception_ptr& + exception_ptr::operator=(const exception_ptr& __other) _GLIBCXX_USE_NOEXCEPT + { + exception_ptr(__other).swap(*this); + return *this; + } + + _GLIBCXX_EH_PTR_USED + inline void + exception_ptr::swap(exception_ptr &__other) _GLIBCXX_USE_NOEXCEPT + { + void *__tmp = _M_exception_object; + _M_exception_object = __other._M_exception_object; + __other._M_exception_object = __tmp; + } + + /// @relates exception_ptr + inline void + swap(exception_ptr& __lhs, exception_ptr& __rhs) + { __lhs.swap(__rhs); } + + /// @cond undocumented + template + _GLIBCXX_CDTOR_CALLABI + inline void + __dest_thunk(void* __x) + { static_cast<_Ex*>(__x)->~_Ex(); } + /// @endcond + + } // namespace __exception_ptr + + using __exception_ptr::swap; // So that std::swap(exp1, exp2) finds it. + + /// Obtain an exception_ptr pointing to a copy of the supplied object. +#if (__cplusplus >= 201103L && __cpp_rtti) || __cpp_exceptions + template + exception_ptr + make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT + { +#if __cplusplus >= 201103L && __cpp_rtti + using _Ex2 = typename decay<_Ex>::type; + void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex)); + (void) __cxxabiv1::__cxa_init_primary_exception( + __e, const_cast(&typeid(_Ex)), + __exception_ptr::__dest_thunk<_Ex2>); + __try + { + ::new (__e) _Ex2(__ex); + return exception_ptr(__e); + } + __catch(...) + { + __cxxabiv1::__cxa_free_exception(__e); + return current_exception(); + } +#else + try + { + throw __ex; + } + catch(...) + { + return current_exception(); + } +#endif + } +#else // no RTTI and no exceptions + // This is always_inline so the linker will never use this useless definition + // instead of a working one compiled with RTTI and/or exceptions enabled. + template + __attribute__ ((__always_inline__)) + inline exception_ptr + make_exception_ptr(_Ex) _GLIBCXX_USE_NOEXCEPT + { return exception_ptr(); } +#endif + +#undef _GLIBCXX_EH_PTR_USED + + /// @} group exceptions +} // namespace std + +} // extern "C++" + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_ptr.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@exception_ptr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ed501acfab1e15596c6b1b35f9036a69a79337b8 GIT binary patch literal 20006 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. + +/** @file include/bits/fs_dir.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{filesystem} + */ + +#ifndef _GLIBCXX_FS_DIR_H +#define _GLIBCXX_FS_DIR_H 1 + +#if __cplusplus >= 201703L +# include +# include +# include +# include + +#if __cplusplus >= 202002L +# include // std::strong_ordering +# include // std::default_sentinel_t +# include // enable_view, enable_borrowed_range +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +namespace filesystem +{ + /** @addtogroup filesystem + * @{ + */ + + /// Information about a file's type and permissions. + /** + * @headerfile filesystem + * @since C++17 + */ + class file_status + { + public: + // constructors and destructor + file_status() noexcept : file_status(file_type::none) {} + + explicit + file_status(file_type __ft, perms __prms = perms::unknown) noexcept + : _M_type(__ft), _M_perms(__prms) { } + + file_status(const file_status&) noexcept = default; + file_status(file_status&&) noexcept = default; + ~file_status() = default; + + file_status& operator=(const file_status&) noexcept = default; + file_status& operator=(file_status&&) noexcept = default; + + // observers + file_type type() const noexcept { return _M_type; } + perms permissions() const noexcept { return _M_perms; } + + // modifiers + void type(file_type __ft) noexcept { _M_type = __ft; } + void permissions(perms __prms) noexcept { _M_perms = __prms; } + +#if __cpp_lib_three_way_comparison + friend bool + operator==(const file_status&, const file_status&) noexcept = default; +#endif + + private: + file_type _M_type; + perms _M_perms; + }; + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + struct _Dir; + class directory_iterator; + class recursive_directory_iterator; + + /// The value type used by directory iterators + /** + * @headerfile filesystem + * @since C++17 + */ + class directory_entry + { + public: + // constructors and destructor + directory_entry() noexcept = default; + directory_entry(const directory_entry&) = default; + directory_entry(directory_entry&&) noexcept = default; + + explicit + directory_entry(const filesystem::path& __p) + : _M_path(__p) + { refresh(); } + + directory_entry(const filesystem::path& __p, error_code& __ec) + : _M_path(__p) + { + refresh(__ec); + if (__ec) + _M_path.clear(); + } + + ~directory_entry() = default; + + // modifiers + directory_entry& operator=(const directory_entry&) = default; + directory_entry& operator=(directory_entry&&) noexcept = default; + + void + assign(const filesystem::path& __p) + { + _M_path = __p; + refresh(); + } + + void + assign(const filesystem::path& __p, error_code& __ec) + { + _M_path = __p; + refresh(__ec); + } + + void + replace_filename(const filesystem::path& __p) + { + _M_path.replace_filename(__p); + refresh(); + } + + void + replace_filename(const filesystem::path& __p, error_code& __ec) + { + _M_path.replace_filename(__p); + refresh(__ec); + } + + void + refresh() + { _M_type = symlink_status().type(); } + + void + refresh(error_code& __ec) noexcept + { _M_type = symlink_status(__ec).type(); } + + // observers + const filesystem::path& path() const noexcept { return _M_path; } + operator const filesystem::path& () const noexcept { return _M_path; } + + bool + exists() const + { return filesystem::exists(file_status{_M_file_type()}); } + + bool + exists(error_code& __ec) const noexcept + { return filesystem::exists(file_status{_M_file_type(__ec)}); } + + bool + is_block_file() const + { return _M_file_type() == file_type::block; } + + bool + is_block_file(error_code& __ec) const noexcept + { return _M_file_type(__ec) == file_type::block; } + + bool + is_character_file() const + { return _M_file_type() == file_type::character; } + + bool + is_character_file(error_code& __ec) const noexcept + { return _M_file_type(__ec) == file_type::character; } + + bool + is_directory() const + { return _M_file_type() == file_type::directory; } + + bool + is_directory(error_code& __ec) const noexcept + { return _M_file_type(__ec) == file_type::directory; } + + bool + is_fifo() const + { return _M_file_type() == file_type::fifo; } + + bool + is_fifo(error_code& __ec) const noexcept + { return _M_file_type(__ec) == file_type::fifo; } + + bool + is_other() const + { return filesystem::is_other(file_status{_M_file_type()}); } + + bool + is_other(error_code& __ec) const noexcept + { return filesystem::is_other(file_status{_M_file_type(__ec)}); } + + bool + is_regular_file() const + { return _M_file_type() == file_type::regular; } + + bool + is_regular_file(error_code& __ec) const noexcept + { return _M_file_type(__ec) == file_type::regular; } + + bool + is_socket() const + { return _M_file_type() == file_type::socket; } + + bool + is_socket(error_code& __ec) const noexcept + { return _M_file_type(__ec) == file_type::socket; } + + bool + is_symlink() const + { + if (_M_type != file_type::none) + return _M_type == file_type::symlink; + return symlink_status().type() == file_type::symlink; + } + + bool + is_symlink(error_code& __ec) const noexcept + { + if (_M_type != file_type::none) + return _M_type == file_type::symlink; + return symlink_status(__ec).type() == file_type::symlink; + } + + uintmax_t + file_size() const + { return filesystem::file_size(_M_path); } + + uintmax_t + file_size(error_code& __ec) const noexcept + { return filesystem::file_size(_M_path, __ec); } + + uintmax_t + hard_link_count() const + { return filesystem::hard_link_count(_M_path); } + + uintmax_t + hard_link_count(error_code& __ec) const noexcept + { return filesystem::hard_link_count(_M_path, __ec); } + + file_time_type + last_write_time() const + { return filesystem::last_write_time(_M_path); } + + + file_time_type + last_write_time(error_code& __ec) const noexcept + { return filesystem::last_write_time(_M_path, __ec); } + + file_status + status() const + { return filesystem::status(_M_path); } + + file_status + status(error_code& __ec) const noexcept + { return filesystem::status(_M_path, __ec); } + + file_status + symlink_status() const + { return filesystem::symlink_status(_M_path); } + + file_status + symlink_status(error_code& __ec) const noexcept + { return filesystem::symlink_status(_M_path, __ec); } + + bool + operator==(const directory_entry& __rhs) const noexcept + { return _M_path == __rhs._M_path; } + +#if __cpp_lib_three_way_comparison + strong_ordering + operator<=>(const directory_entry& __rhs) const noexcept + { return _M_path <=> __rhs._M_path; } +#else + bool + operator!=(const directory_entry& __rhs) const noexcept + { return _M_path != __rhs._M_path; } + + bool + operator< (const directory_entry& __rhs) const noexcept + { return _M_path < __rhs._M_path; } + + bool + operator<=(const directory_entry& __rhs) const noexcept + { return _M_path <= __rhs._M_path; } + + bool + operator> (const directory_entry& __rhs) const noexcept + { return _M_path > __rhs._M_path; } + + bool + operator>=(const directory_entry& __rhs) const noexcept + { return _M_path >= __rhs._M_path; } +#endif + + private: + friend struct _Dir; + friend class directory_iterator; + friend class recursive_directory_iterator; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3171. LWG 2989 breaks directory_entry stream insertion + template + friend basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, + const directory_entry& __d) + { return __os << __d.path(); } + + directory_entry(const filesystem::path& __p, file_type __t) + : _M_path(__p), _M_type(__t) + { } + + // Equivalent to status().type() but uses cached value, if any. + file_type + _M_file_type() const + { + if (_M_type != file_type::none && _M_type != file_type::symlink) + return _M_type; + return status().type(); + } + + // Equivalent to status(__ec).type() but uses cached value, if any. + file_type + _M_file_type(error_code& __ec) const noexcept + { + if (_M_type != file_type::none && _M_type != file_type::symlink) + { + __ec.clear(); + return _M_type; + } + return status(__ec).type(); + } + + filesystem::path _M_path; + file_type _M_type = file_type::none; + }; + + /// @cond undocumented + + /// Proxy returned by post-increment on directory iterators. + /** + * @headerfile filesystem + * @since C++17 + */ + struct __directory_iterator_proxy + { + const directory_entry& operator*() const& noexcept { return _M_entry; } + + directory_entry operator*() && noexcept { return std::move(_M_entry); } + + private: + friend class directory_iterator; + friend class recursive_directory_iterator; + + explicit + __directory_iterator_proxy(const directory_entry& __e) : _M_entry(__e) { } + + directory_entry _M_entry; + }; + /// @endcond + + /// Iterator type for traversing the entries in a single directory. + /** + * @headerfile filesystem + * @since C++17 + */ + class directory_iterator + { + public: + typedef directory_entry value_type; + typedef ptrdiff_t difference_type; + typedef const directory_entry* pointer; + typedef const directory_entry& reference; + typedef input_iterator_tag iterator_category; + + directory_iterator() = default; + + explicit + directory_iterator(const path& __p) + : directory_iterator(__p, directory_options::none, nullptr) { } + + directory_iterator(const path& __p, directory_options __options) + : directory_iterator(__p, __options, nullptr) { } + + directory_iterator(const path& __p, error_code& __ec) + : directory_iterator(__p, directory_options::none, __ec) { } + + directory_iterator(const path& __p, directory_options __options, + error_code& __ec) + : directory_iterator(__p, __options, &__ec) { } + + directory_iterator(const directory_iterator& __rhs) = default; + + directory_iterator(directory_iterator&& __rhs) noexcept = default; + + ~directory_iterator() = default; + + directory_iterator& + operator=(const directory_iterator& __rhs) = default; + + directory_iterator& + operator=(directory_iterator&& __rhs) noexcept = default; + + const directory_entry& operator*() const noexcept; + const directory_entry* operator->() const noexcept { return &**this; } + directory_iterator& operator++(); + directory_iterator& increment(error_code& __ec); + + __directory_iterator_proxy operator++(int) + { + __directory_iterator_proxy __pr{**this}; + ++*this; + return __pr; + } + + friend bool + operator==(const directory_iterator& __lhs, + const directory_iterator& __rhs) noexcept + { + return !__rhs._M_dir.owner_before(__lhs._M_dir) + && !__lhs._M_dir.owner_before(__rhs._M_dir); + } + +#if __cplusplus >= 202002L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3719. Directory iterators should be usable with default sentinel + bool operator==(default_sentinel_t) const noexcept + { return !_M_dir; } +#endif + +#if __cpp_impl_three_way_comparison < 201907L + friend bool + operator!=(const directory_iterator& __lhs, + const directory_iterator& __rhs) noexcept + { return !(__lhs == __rhs); } +#endif + + private: + directory_iterator(const path&, directory_options, error_code*); + + friend class recursive_directory_iterator; + + std::__shared_ptr<_Dir> _M_dir; + }; + + /** @relates std::filesystem::directory_iterator + * @headerfile filesystem + * @since C++17 + * @{ + */ + + /** @brief Enable range-based `for` using directory_iterator. + * + * e.g. `for (auto& entry : std::filesystem::directory_iterator(".")) ...` + */ + inline directory_iterator + begin(directory_iterator __iter) noexcept + { return __iter; } + + /// Return a past-the-end directory_iterator + inline directory_iterator + end(directory_iterator) noexcept + { return directory_iterator(); } + /// @} + + /// Iterator type for recursively traversing a directory hierarchy. + /** + * @headerfile filesystem + * @since C++17 + */ + class recursive_directory_iterator + { + public: + typedef directory_entry value_type; + typedef ptrdiff_t difference_type; + typedef const directory_entry* pointer; + typedef const directory_entry& reference; + typedef input_iterator_tag iterator_category; + + recursive_directory_iterator() = default; + + explicit + recursive_directory_iterator(const path& __p) + : recursive_directory_iterator(__p, directory_options::none, nullptr) { } + + recursive_directory_iterator(const path& __p, directory_options __options) + : recursive_directory_iterator(__p, __options, nullptr) { } + + recursive_directory_iterator(const path& __p, directory_options __options, + error_code& __ec) + : recursive_directory_iterator(__p, __options, &__ec) { } + + recursive_directory_iterator(const path& __p, error_code& __ec) + : recursive_directory_iterator(__p, directory_options::none, &__ec) { } + + recursive_directory_iterator( + const recursive_directory_iterator&) = default; + + recursive_directory_iterator(recursive_directory_iterator&&) = default; + + ~recursive_directory_iterator(); + + // observers + directory_options options() const noexcept; + int depth() const noexcept; + bool recursion_pending() const noexcept; + + const directory_entry& operator*() const noexcept; + const directory_entry* operator->() const noexcept { return &**this; } + + // modifiers + recursive_directory_iterator& + operator=(const recursive_directory_iterator& __rhs) noexcept; + recursive_directory_iterator& + operator=(recursive_directory_iterator&& __rhs) noexcept; + + recursive_directory_iterator& operator++(); + recursive_directory_iterator& increment(error_code& __ec); + + __directory_iterator_proxy operator++(int) + { + __directory_iterator_proxy __pr{**this}; + ++*this; + return __pr; + } + + void pop(); + void pop(error_code&); + + void disable_recursion_pending() noexcept; + + friend bool + operator==(const recursive_directory_iterator& __lhs, + const recursive_directory_iterator& __rhs) noexcept + { + return !__rhs._M_dirs.owner_before(__lhs._M_dirs) + && !__lhs._M_dirs.owner_before(__rhs._M_dirs); + } + +#if __cplusplus >= 202002L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3719. Directory iterators should be usable with default sentinel + bool operator==(default_sentinel_t) const noexcept + { return !_M_dirs; } +#endif + +#if __cpp_impl_three_way_comparison < 201907L + friend bool + operator!=(const recursive_directory_iterator& __lhs, + const recursive_directory_iterator& __rhs) noexcept + { return !(__lhs == __rhs); } +#endif + + private: + recursive_directory_iterator(const path&, directory_options, error_code*); + + struct _Dir_stack; + std::__shared_ptr<_Dir_stack> _M_dirs; + + recursive_directory_iterator& + __erase(error_code* = nullptr); + + friend uintmax_t + filesystem::remove_all(const path&, error_code&); + friend uintmax_t + filesystem::remove_all(const path&); + }; + + /** @relates std::filesystem::directory_iterator + * @headerfile filesystem + * @since C++17 + * @{ + */ + + /** @brief Enable range-based `for` using recursive_directory_iterator. + * + * e.g. `for (auto& entry : recursive_directory_iterator(".")) ...` + */ + inline recursive_directory_iterator + begin(recursive_directory_iterator __iter) noexcept + { return __iter; } + + /// Return a past-the-end recursive_directory_iterator + inline recursive_directory_iterator + end(recursive_directory_iterator) noexcept + { return recursive_directory_iterator(); } + /// @} + +_GLIBCXX_END_NAMESPACE_CXX11 + + /// @} group filesystem +} // namespace filesystem + + // Use explicit instantiations of these types. Any inconsistency in the + // value of __default_lock_policy between code including this header and + // the library will cause a linker error. + extern template class + __shared_ptr; + extern template class + __shared_ptr; + +#if __glibcxx_ranges // >= C++20 +// _GLIBCXX_RESOLVE_LIB_DEFECTS +// 3480. directory_iterator and recursive_directory_iterator are not ranges +namespace ranges +{ + template<> + inline constexpr bool + enable_borrowed_range = true; + template<> + inline constexpr bool + enable_borrowed_range = true; + + template<> + inline constexpr bool + enable_view = true; + template<> + inline constexpr bool + enable_view = true; +} // namespace ranges +#endif // ranges + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++17 + +#endif // _GLIBCXX_FS_DIR_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_dir.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_dir.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..78407081a757db58e233001f25da4da5782ecb4c GIT binary patch literal 51860 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 e%V_e~7kYY?FC!a>jW7$`3G`#s`|Af. + +/** @file include/bits/fs_fwd.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{filesystem} + */ + +#ifndef _GLIBCXX_FS_FWD_H +#define _GLIBCXX_FS_FWD_H 1 + +#if __cplusplus >= 201703L + +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +/// ISO C++ 2017 namespace for File System library +namespace filesystem +{ +#if _GLIBCXX_USE_CXX11_ABI +/// @cond undocumented +inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } +/// @endcond +#endif + +/** @addtogroup filesystem + * @{ + */ + + class file_status; +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + class path; + class filesystem_error; + class directory_entry; + class directory_iterator; + class recursive_directory_iterator; +_GLIBCXX_END_NAMESPACE_CXX11 + + /// Information about free space on a disk + struct space_info + { + uintmax_t capacity; + uintmax_t free; + uintmax_t available; + +#if __cpp_impl_three_way_comparison >= 201907L + friend bool operator==(const space_info&, const space_info&) = default; +#endif + }; + + /// Enumerated type representing the type of a file + enum class file_type : signed char { + none = 0, not_found = -1, regular = 1, directory = 2, symlink = 3, + block = 4, character = 5, fifo = 6, socket = 7, unknown = 8 + }; + + /// Bitmask type controlling effects of `filesystem::copy` + enum class copy_options : unsigned short { + none = 0, + skip_existing = 1, overwrite_existing = 2, update_existing = 4, + recursive = 8, + copy_symlinks = 16, skip_symlinks = 32, + directories_only = 64, create_symlinks = 128, create_hard_links = 256 + }; + + /// @{ + /// @relates copy_options + [[nodiscard]] + constexpr copy_options + operator&(copy_options __x, copy_options __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) & static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr copy_options + operator|(copy_options __x, copy_options __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) | static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr copy_options + operator^(copy_options __x, copy_options __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) ^ static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr copy_options + operator~(copy_options __x) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast(~static_cast<__utype>(__x)); + } + + inline copy_options& + operator&=(copy_options& __x, copy_options __y) noexcept + { return __x = __x & __y; } + + inline copy_options& + operator|=(copy_options& __x, copy_options __y) noexcept + { return __x = __x | __y; } + + inline copy_options& + operator^=(copy_options& __x, copy_options __y) noexcept + { return __x = __x ^ __y; } + /// @} + + + /// Bitmask type representing file access permissions + enum class perms : unsigned { + none = 0, + owner_read = 0400, + owner_write = 0200, + owner_exec = 0100, + owner_all = 0700, + group_read = 040, + group_write = 020, + group_exec = 010, + group_all = 070, + others_read = 04, + others_write = 02, + others_exec = 01, + others_all = 07, + all = 0777, + set_uid = 04000, + set_gid = 02000, + sticky_bit = 01000, + mask = 07777, + unknown = 0xFFFF, + }; + + /// @{ + /// @relates perms + [[nodiscard]] + constexpr perms + operator&(perms __x, perms __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) & static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr perms + operator|(perms __x, perms __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) | static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr perms + operator^(perms __x, perms __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) ^ static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr perms + operator~(perms __x) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast(~static_cast<__utype>(__x)); + } + + inline perms& + operator&=(perms& __x, perms __y) noexcept + { return __x = __x & __y; } + + inline perms& + operator|=(perms& __x, perms __y) noexcept + { return __x = __x | __y; } + + inline perms& + operator^=(perms& __x, perms __y) noexcept + { return __x = __x ^ __y; } + /// @} + + /// Bitmask type controlling changes to permissions + enum class perm_options : unsigned { + replace = 0x1, + add = 0x2, + remove = 0x4, + nofollow = 0x8 + }; + + /// @{ + /// @relates perm_options + [[nodiscard]] + constexpr perm_options + operator&(perm_options __x, perm_options __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) & static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr perm_options + operator|(perm_options __x, perm_options __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) | static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr perm_options + operator^(perm_options __x, perm_options __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) ^ static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr perm_options + operator~(perm_options __x) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast(~static_cast<__utype>(__x)); + } + + inline perm_options& + operator&=(perm_options& __x, perm_options __y) noexcept + { return __x = __x & __y; } + + inline perm_options& + operator|=(perm_options& __x, perm_options __y) noexcept + { return __x = __x | __y; } + + inline perm_options& + operator^=(perm_options& __x, perm_options __y) noexcept + { return __x = __x ^ __y; } + /// @} + + /// Bitmask type controlling directory iteration + enum class directory_options : unsigned char { + none = 0, follow_directory_symlink = 1, skip_permission_denied = 2 + }; + + /// @{ + /// @relates directory_options + [[nodiscard]] + constexpr directory_options + operator&(directory_options __x, directory_options __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) & static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr directory_options + operator|(directory_options __x, directory_options __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) | static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr directory_options + operator^(directory_options __x, directory_options __y) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast( + static_cast<__utype>(__x) ^ static_cast<__utype>(__y)); + } + + [[nodiscard]] + constexpr directory_options + operator~(directory_options __x) noexcept + { + using __utype = typename std::underlying_type::type; + return static_cast(~static_cast<__utype>(__x)); + } + + inline directory_options& + operator&=(directory_options& __x, directory_options __y) noexcept + { return __x = __x & __y; } + + inline directory_options& + operator|=(directory_options& __x, directory_options __y) noexcept + { return __x = __x | __y; } + + inline directory_options& + operator^=(directory_options& __x, directory_options __y) noexcept + { return __x = __x ^ __y; } + /// @} + + /// The type used for file timestamps + using file_time_type = __file_clock::time_point; + + // operational functions + + void copy(const path& __from, const path& __to, copy_options __options); + void copy(const path& __from, const path& __to, copy_options __options, + error_code&); + + bool copy_file(const path& __from, const path& __to, copy_options __option); + bool copy_file(const path& __from, const path& __to, copy_options __option, + error_code&); + + path current_path(); + + bool exists(file_status) noexcept; + + bool is_other(file_status) noexcept; + + uintmax_t file_size(const path&); + uintmax_t file_size(const path&, error_code&) noexcept; + uintmax_t hard_link_count(const path&); + uintmax_t hard_link_count(const path&, error_code&) noexcept; + file_time_type last_write_time(const path&); + file_time_type last_write_time(const path&, error_code&) noexcept; + + void permissions(const path&, perms, perm_options, error_code&) noexcept; + + path proximate(const path& __p, const path& __base, error_code& __ec); + path proximate(const path& __p, const path& __base, error_code& __ec); + + path relative(const path& __p, const path& __base, error_code& __ec); + + file_status status(const path&); + file_status status(const path&, error_code&) noexcept; + + bool status_known(file_status) noexcept; + + file_status symlink_status(const path&); + file_status symlink_status(const path&, error_code&) noexcept; + + bool is_regular_file(file_status) noexcept; + bool is_symlink(file_status) noexcept; + + bool remove(const path&, error_code&) noexcept; + uintmax_t remove_all(const path&); + uintmax_t remove_all(const path&, error_code&); + +/// @} +} // namespace filesystem +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // C++17 +#endif // _GLIBCXX_FS_FWD_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_fwd.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_fwd.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..83254db55a1c1c636f950e315c165ea23d6ef357 GIT binary patch literal 34958 zcmdO5_$PB#_%ahCBZGcvaglyzUUE)pN~(Ucwzj^Zsh*LZp?-yhS-hEvZb7ncPG(+d zg>HIYseV#sNij%Ga(-S~X1ZPmgMMyaiGERHW{Q46QGQlxa!Ij%N^yaHMq*KJeqLsB zA`+{(C>g=i%P1&dU{20S%uA=t4BhhlqU_APblsH9qSWM){Gv)*65Pb__aB=7ODYRe z^)eX##dHf_#uYN)P)N+l$xn_iDN4*NDF$f(1t*FIuqu#o#rpB_xk<$(i6yD=B_O5v z%q}iTNv%juEhvFR5Q>R8nMs*>B{^7)NJ~vDDJ@C`I|ZNlIAb-xI6fscEi(^d1cq;r z5=L=JQEFmtQfV3%Cn6~W`@guPC^IiTtvm(fXbeNaN|Gu|Qj5zI3qUIHxg4xGA7Z&) zNpdn4+rdf_OY(CwljF-XQ&QuT^GoweQi})~omx?%4~i*#(TVP}SU))>H4S@;1IGj?NQ?E0ONvU9 zOXA%;eOy5SfG>&*ic50zK}0;ffB_d%D7gU1=;ZwT?99~o%>4MY(!Au7%>2A!961b0 zQ%PoSY7q`)=rIS*#7NvuO zl%T$x{N%)()cE9_#NuMYnYJjgBr_jNG$I8|e0*9#J`n+kzbpeASe%@Z3eNKQVjHZo zD7COOvnaJVJ|n-l1fmDS=U|19#8jS{S3+dm6%?gH3bd5?`~reO3Nk)3FAZA|p(hGh zT1(7{&qyrJAS#lpfn7UzzANXpo)(#&P*>(MGr2lrAd5z zaY;%_YFd1Gaz-LFbAZbgP}=~%j^fNJXtf5{04pMp0xr2c85F`;5+ITyu;U?tl$oE0 zGs}TW9*|++IK>eHnYpQECb&bWG&8RxPd76qHLoPIq!Oz-ba%mXC`dI%5=B>?R*W;z zB^KxErl;nm7G);uXXcgY=Hx(JddZAHizB(BA~7j5J}ti}8AnDb&Pz$l%mKGwR?U2M z5wqA#%}dEl%meuVN4QlMq=K3&(6R+wzhI~YHwX0#@{2Po;^Fat;d*dnmgg6xfD#B+ z8_~lIQf9`NWu}(nsNX@A9=OWIa1)YQpvoL-6sXcoEh+}p3m_L@#2UmWkfaY%fZ+)w zW5NDON-WMyj)#~I(tu$iSXFUqNmefQ_6(>IU0hO{RICe$bPSIq7U$}x78OBS76jb` zX$>Wnrr`)Muyf#Xgkc$y_u$!%lq`xh2q1w9w-mz<$mt*KQ{AM*VsM(pP>SR}uupPR zbMuQTkz13bbw3JnO4Bp*iuH>#)AJH@;=#Evu_V6;Ljck)no*~Rvt0ys4>X&kB_^lh z=ma47AQ@b?5)r)6e4d$?SrQMA7OX*yWO_uF@ zuPb$RO|}S!yD9;12_LN^T9PQcFPM& zGKx|YQ@{yNH?b%g+^obGggKeHnI*);cTr+qdTM-Paxyf>W7v=6;ABw45`QuU`#&?U zEI%7uX5%vrtQ6$^(mYUMmYJB7S%stJg5(CAQJ9-rT%4GmS{$F7nwykb1WpSCt%nU5 zWZ?G|sL_yDnhR=_;Tr@1`v??96`*8r=y7U*QZ@@Mr_5zg=9Cm`Au4gE${NLIrB0LwZ=mMMXhkQE_T~UMcR# zgLD$$;euQ)f$c3$%}Gs0&2?BiC&eWxiAA8{$$#)Z308IRZVx2a$LA&{7lGTCaBaAX zMM&9|nO}^f;f0i*lX3NYz+Ng(%q&UENrd$IF%lG53Ajvv4Wq=zXXO^eCzYnfmn4FH zh@l6`YOr=lu@?_%q{Qdt=VgMuh>>%OOHz_`A)RJ;3{a9Xi&INV3m^$|Lp_0p6ucc9 zpIMSx1Zt9joPgm(B(LF2&&dU)#13SF8YelKNmw!|avPOUgMk=FrI%zB>87NnC4%!R z77HO29lTh;SH*!N6;!GgBxVvGlS)j^E>A2<(ND_EOTkrUg6mgMfa6O`xC0!NK5;h= zkb(#7@}ktV@*>D+FFbznXU^QjiulBw%=A1+I}9Ulf{lgNpYg>diOJdVxtV#oDV2GN zxtYmW{e`RrjICvfoPk2|#uud)=a&{GV{hSr6+(=LmaV8& z5=zuV)Ws7u{0(Y^fQOmzH9?T$737kF)S{gHJaAP2E;UFivJ+Dh3rbRp^r1AQxbB*S z){X$#18IN5s-a9!j20Caq+-us=uw5}MS#)>Mr0u=$63sPicqYYA&$$;1xFUX2+oAm zGDM^-=*TPfJ_*D=@IV=)?Swt{k^BT1FT!Fk?p%YU8R&X zP=kyDfTX}dMp~+YG(k&?GePODpn&1uj83!^0~(_RN#~@-LpnB)c0brI#5of~OU*szP@KwBmqG-eE6k z(1xqxA@L6`<&pCcd`y`ro70Np3ldAf!wdKV73!^=_#|jyNT34^R*yQB333iTD~fTJ z$6&)CK?E`cBh1l5Gp#s21xH&LY!p%DELbJPQc!o8;B0+fYB@Bykyd!Z2BC8k)AKS* zK#OkREJ*dcuN|$o1a=uTiGe1ru!adJv49k!w+E0@3VOKZ=9ghF4bT-ri&>Dx7%>X6 z6t!_sf<3388wwqoiOBriFug?_+1Mbvj>wP>oMGltBU-zwBpo~{4|hDF{%qBFGE^Q z;ORj8!3cHN<8v~J%m2kCDe;L(*!z}9E(V(n_Bw&Jc90%4 zC`>V83&}X#O(bn?aOaDd(I>E*K&?MmUm0X8MnXce6|NyUKMzur5TygOz9b&JK#nNo zpomQ^D2Y$bNQKP7U^oflLy%!)g%LQZlQR5XnwMEvnu>EN2Q*l~4XxbLl2n4j>R=6! zH7dAM1A4eaN=DQXQ0y%(_&^E1(1A3F@Rv!TYz7{)N=*R`)}}$$AYw!Zx=TSFEA*NR zcdkq*DJl?N^bV4LARi)>QyCo)y$|6d-+nP{T+; zO_M>yOoRapco-NM|CTXI{4HbD`OC-xVzc}$V@zOR_-}hK`bUF7t_10}p_^aIDDk%x zYJMpr%imH)HwK3P2f7&?StL#WCgtbnV0t98IKC(~y)-AWC?4cL4G;kuEiEZ6)>O#L zhb%N;;L?!;dxHV&k3vSizlBhH3K?1c7BWUKF#LZrWnti}xS}mcCSY1uT$!7bnU@W< z0bkf5ESIp7L9#rbQRZ(xqXjq+^BGzG<}=nYF#O+@$$i%TH=5HR< zmOMt5zj=&73=IF@&0zc(Vf=R|II^*%iJZie%(7GzU&Y54=qMm3k$7+m12v(<$EPN1 zGH~e#fc(k)f3whp|J^yqtp3+8pw2+f<0;AI31V#t2OA;7a{w6TCF);k^U+e9+A?xHbl5N#wKs7#|QR#0y z)cANtmcQ|gQ49?Km!&>u+myQQ8J?V;kyw-x56&UrHR>oy38&XY%#ghn$0+ePj?oP4 zwKztWzj2H;3=IE2YJUy=v%HWAdno{!g^172%P-HvSp-Oc;-3K&lZ=0J82SF@Fsgwq z$zf#qn*+`tx5E{^c2_%=5X#8%H|9L~|AZ`p~ z4bz>kS%ilo8Squ#SUp5L|a`~RO9x_6!P>@=bTdbglQS;;%KxW5lY&D=t;^QlH zpvvRpE0Kyp89Nci^DO5j{xY#Jo@2RS#lXP8^j{;cd-LBf7FPey2k!nE#AA@ictPue z&i|82>#F?nu5&W~RdL{924%$m?uQ>~TP%3Gkw^!r5$B-OET_Q^I>mAZ;-EmQdlNP6 z7mECEZ2Z6OI`7m_#xq)HbpF4#xw4>DZf!D>gQ7${i(S7R<^`v#)QW;41^A9HXtF8B zY=ywWOHBh)F*xL~2_uK1MU)WZUnxeGzfz21ppg74$;k3oo{^2gp_J6K$7t~%<`uZ_m|#+WRU8=q+A?bWwPn-+ zvHy2ZT6N=p{I=!T({5&QJhYvKv(!UwmKHJc{Vift0%zzVMwY)tjD8FZ|F?YUcy%lO z<#Ig52)@b+)HX$~m0}qs{>CywYNc34mcOx#0SpZPr&^jvZx;~hEX&VK!HgzQsew{Y z#K)6VU=(AP7#yHf%=|xmUW3}!_KfKNPr|KSHoczJ{r_}V28S6012{r}>2FCwK?$u>EJD4qIJZ^K`4sH|NZ(w0?)-Y{- z(z2~^elRqWKxqhG5a5j;RF&YUK@mbNN40!J7+YCd!7SuM0FOIWw~Sb%iD+{iVg%uTACo^uH`vyQs?W{4&PBu8dlLT^V)$I|t~i z3fZ#!L-K&zMxAHf@`=+Cag7pKxLvP-q7LkAG!f*2Rxdz^v5=(@oE8dL%0Ov>>Hq7a z3t}03Z*KZ8C206A>2#()W2srG#ebNS;I3o>34;;huI5v8dwUbdcY0N`MRgG*{!uieMm;FKHnKE=(`y4u6C}Mx$rPS6JAAO}|C@Mz{nI*pyBM3a znsojO>lS(lagWZlz7&*Oy8wNUzEPr*N4FhdPmcNFKpfths-*_F1^+A;c=Kn&%$ER5B zG-77_Yrtss*MQLiGlwz3q(F%TmJvbh|79l{f-D>TQ=w6T=_0(T28(i{JO(a0Y#3So z+CXE*nvvzNEi`5tHcXw{>94{6f4g7%y!Gchq~Wa<%tj3Zyf{R}3`)Ai87VcWNgnKM z6rHGP36w1}STexbGMyzC5(S8?yX=)xg(s=*-+Dj5%gG7H}uQ(+?9!7!=%~ z0vtsDH&p#{n|WTJD)uH9WIPb1v4Yn4K#XT`=^*zCOBnh7mM}_zn;IpIEPqSDgMzT8 zHzJHcxdu;Dwgyp^VsH3^YSm3Fo4~=bk!3q1IF4&&TtA_w&-s7D(Vee%zdY&2xXo;v z1!lva2_y^(22j5MME_rEWGFY|Y^xOZmK(^inZ@88c4%P&k|~C`5LPVU2`Dj8a}C<& zNMhvso5ZLB4yYtXmcL1iQy3WFT>_#5N{yI+TFJ5!98fD*)}glP!OjP@W*P5-hfIA0~kU+wq5Ce5!K=gl}eZgy*CQd3R+Qo6ixOg|qZm^4Y zu^fOzZPHHn-W{rwj{SdTu##!_ves{m`_1-Sz->o35F`w8*cGiSkV>*$;zpxxVt5O* zfB}0MPp1=F$QLU>>L7@6)T{{VbY5n;46b}Gv0Q;vKI#%#lKeK89{r5F?bIn z$OV`VWcbfL=gg~DRWkUv@@S}VI{ z#cb3Ffu&B&ZV9aS2+4AAb>Q*{3wgf_4LE=XrE>N*>C^t;Hp(`JRAQ%v}d<_d!;*)5#~fpUoiZC|7PlS zfzaC%NDXU9u7x|9kc&ZK{g~x3IIJJByui%EFq1%8SzXY^E?{!2)c^W_nq0nbeP1&^ zH+yaYcPb(dK*HcSU}Mz!%La`DSYrv{Ba}J`XKkiNdTkcZ5)bxK97_tSkC1Hy`H1Uc zwP3#Jk;Tx0`jng-fG71)|3dF?E zSC+3}-+W>D1<4Ci;?ubpB9B%5FWID(^>ev{HRDgSpB8W@A>sif400{3`3GYE4_@Oo z?L`##QfOX44ifx@7ph9I%Ta_-i!xAN=w#^x7iAqRU67(IK<)U_BPwrf{{QRyvCa5R zL{L9Gb^_P*+2kr)VfWoD~0XetXalfM9hdyXPqQpP$LIpa~2X`T&GJp$V z2IOB>MwY*<&_acUk>xKNv`~4ye1G^1o$2-e%`6@U`S@(kV*CrubC}tZ0Y1`!2vp2g zF3yx&gQYhOP6U`{pn3q@)K_L?`Kt_V>MJp_{M7)5I@ABdW)Y{BK2iSj|3CZr_)S~C zbppe%*b z6eM*l4>Xp}!N35id^7X&5_1$_+h>az7?}S%&CfXZDXu!_|AY8%{GQd7EB?<+pY|xc z^h7;mNY9s%@2@X(NY9s%<*zT}BnAe-|Eh7a#>aOY*$Q5A3#sdortqt48F<8?W2FoX ztPCKF;Io~uxlQ=&Ebm``My|j9jB+fDe}fs>{suEju`vFPVRZW&!x+WF_&1I*=x-cj z8Vlp!1jd-Z35*3SjDM3Dv;HPA*0C`DO<~OWo5I+@!uU6pG3Re8n3c|$^*0?Xo5kqz zH;XZXh4F7bW60lp#tat5za@-je@hs>z^e&7{+2PuurU7rWgP6h?!`gQ)V$JM1td>_ z#`Pd;CakPbvb2>#X&&g{gVYoS(6ncDErXba1cOs%Np50swgPD3259=aq$ocpCo?Zy zAvpuIZ@5^YBp*Dz0Bz(mFy4^5VFVfpzrk`BRGPE=KmOgaUZnVE6XXBI(sTL`t$N_V z`2Ww_-lP1J_f<3g-|~8W-VIBaDn`5MB)_(Si98w=y#zYG$8|1ub`F#i3=Ao2Gfn8nDb_m`0oB+J4m^p}NE zi-qwoE2Gq3Rz@Q*%i%98I665Ph5mAYWjPt8{&Iq4IT;=Pa)M=f7=`}wfMt0ZrT+4Q zWqBDL{_=ullNkN}CV>*v|0s@stjEm1d*vnOrWO|@CZ~duvO;w&gNO(lgMVpBPG(-J zLVlV;PG%BlL#MX30$gRW9v2s!1JcG-jl_?S2QNfbs8*;&5e2P$&&f&6!H`I@h(L;w{9%Zs0Nr&slwolxB3zKoE6K<#hHj$4uoYT$BmAEOUXYkmtWb?) ztqB)~I*2dg5y};6;gNz(d46s|PHF|w>Y;0Qi8UUo9CY#zb}K;X1SO>;CS`&G138s| zSHi_7S5%;+74#@~%P&$$E6vGKfTYr5h2qpyE3S-^k^(Dz{q*Eyz4W|Nz5Jqd{e19V znUwtGVtsgC(g)A?mFTAAS5&5_=IO)3y;v`!BsT{%hQausQ=;s;d=Tda1_ovZMl}&N zDMm&$hQHN}OvqAjRd6Ff84`Kv88}bNi79pqoX=`xG)fUkPFTl}e z_*)4|yD&=_7~tygH9asJ)ky6R&;nji`WCZL!rcIYo1g$L(?Cl^7#RNwF-rXvVzdFZ zK>i9bviubRw_=(9N5$mNKid11oALi2sa`urjp%8N|D!%GoNM5p?*wamU`)wlw%##^ z?&0m@{}_Yc|1lP#3V z{+fVgO&KNrnu1vtjCy}9z_QkiLVv9pO;{NJ+AvD}wPCaYv%LP=Fy^o@{j0K@VD$Ry0G4%T6#DB7mUUs2`s)Igbz$`S>jIL6r!;)21Jp>32RAvb6rgQV zM4Av{a0MU50y=jS(k?AZEhtJY1|8Oym#$EfkqQybPg6)#0GY(V=qu%`14*VjVEoVad8cFCHjf>Q|L5KNx~w{Wp9ACn1d+461*Q|F8UM@w>UzD| z%zzJ)s2CXFnGQ!A9OOXgDp&>{JuwD{#FUhh{Pd#y(gLvKA#HUohiXvm!2s%eFq#XP zgBRSHvzV(fFmV12XO#IH4sH=fGAjIyWHe)8{0muE2I_V|7RZ5EIgA>Aa~SPd82>_6 zvVz1QD`!EhLPov6g^VsNjDL$5RsI%%(!>94D^s;tC)dxx;dancH3l9%@LCFx^H>=e zEd?wkKqK>(ES3@sd{{bTm@6(YS43g1IxLKTeHnfJ z`Z9*FF#h#pRQc-%7V~5D`RfN33uM&$8wd`!K*q4YfsAo1jDLd|_5KEd#ex{a{sw`? zAdBmGSQ!6CGg|zOW^@2|>n#4pfLXDOE`MVgeZU<&m%njfRy?EM-+0C_a97XoZvvQ= z#Ax(42^7A6A!}bj=A|&|{Y?SemckhDHwE0Phpd7H$)+;u{Y?eSrZNWnO$EzB7W{%_ z(;0RCri1faI-}p;bg&(njAnl`!Ev3%X!bV?%*tbQ`XW-GZ0GSHHtPG5{0=6C?lWkdSJwPT)Jc{0M z_PvWK4wFGy7LqNY+YWg26hJ0{Fe?M2m4KB2$TTY!D+7>eusXIFd;%JJJI=}q+)axI z9WD#1^Y{!z7(DaR@{4joC-UYgBqrsTmMEkZrKT!?6)NQCDI_YSWEN*LFggl3s)33% zM;0$ovBvzr&mc5BLdH>(;eS)-75=YqiSK8{9F|3l|NmDk z>HN0)NfhIM!zX<5{jKN48UN3?H?`;r&yO0$|Ht#Xe$4Bd^N#U<#MTuGH~e2bX8ixx zaN3s;L5*t0|6YQ=TY?K)%^3fOo%wT;BX>JL0!ubDs=>~&EY1uN2|6{n#((lj9Zf5+y zb(!z!m-YXg82?YQPtvLX^Nf@6KWG2qXF=+5!H}|@_dmwm-~Z$2^QiwZrr+QznEqod zZp2)F`5$9)Omc<93MCfCl@cpKq~1yk7REJtYb;n8H%e?&Vqx4Qu?a-#ZL(lt+^VfBu0n7 zN#N0^y^NqNfQ%7I5}qRA36cTc48`bvVhqy8gF0@8hM)|hjbnTn2QTRKgAjOMI|5)h~XPnOHE4y-I4$rqDcT{CP+DB zWd$-dfq^ktDi}Pv7R(X}%0^uO-*VMmeYtFXA>;phdzNd)XoOiZ{!h4ItFk3cv54{i zm!KFjh%a8L%+c>eafjFg6G^Xt6LhN;Mj> zFg7|gMzAop2(@UjFt$py8nH08IK{VqBmK3$`E~l;+?m8MgSIK}t#hlqmukJN^bT&Hx$l7vi}Y@azF`8LWK8<+8+_ z9FUXD&CMAY4A>YL80YfL6#|(zmuIdDnv-B9J}$Gs?PbVTAds0xAYY0xFfdNznWh9X zavIMxBQzsnl>;s#^Gh;Pi;9uVWMD9mU|?XJ#WM?Blg;9pWrAiTtcJp6B*c}7xPV5* zRGz8esF=z#6+J3o*&D+|YgB6j$PKLytqJgO z2M1W2UK_}7ux1D@mq628YDH=?C^`)p7z{wEcs9>$a4Me7GaEe>!^(9G6Oo+=+NKI^ z3@g|wSTHcyfkG^dCkz~7VLV}KaMwao32d7o(hQgyXm28egajyr{-!fF{Y_`=0{QhX zWNNAlK7j`EF9W=AM|K8yVGx6i3^=IFTET-ftx~NvaLYkjncBqKWJDO-l-e|S5PfnC z?}6$@@CX6OZ{TgK3bqP{3=9^03=E8Z4t{G;27+5 z=tPUbF1;>L48mH|cvjAXo9W>8yp>gASz=~RVp2{jgNPp}%w1(%^*}Cj<#5&eyO)te z98})Isy!4pf#%JjVby8Y2@b1HsZO-8>Jsac5n=37>H>uoY_BEm+9Z`R=5H!v2FL+_ zQyE=AY_!@0wxSxvDe>_Y&;(v+RA>RxT_{m#ff8$sr8=cXJcvdJMtmU~Xk}HLommhM zUatk3N(4uoofHEDV<=B3xI+`l6RHO{9};n}NnB)u;5)*K8Kk5@!TZ;jvF@)g;{=c! z|3a$a32<{jsfz*LXhAav=EDr546qL~Br?!^n4^;e@*%7lghPM4Q9M|GyhJ>j{$!nG zPlLt7NbnlYl+os|DYS-z41c26a2AXWe=Qi>co_dz$V$&z z>Kq6f!+=K`BdCwyzz84n#k33@Wol}mvhJ@9qr+btMmKP(gbb&;p;UiNe{C7X{@Q}0 z%$8B^<#7ZvC)d7=HB0@i##VUMF|334qX!mM)+oPTy<0mW6R$Z#vX8>LzYzZ zpw&^ZrQc{-8CIKTgk{8lbZ6LP#K4n0D2FlTq~v7rF#cbv{V2NZTe3814#4V6h&>3lSUemN~TDHIrv1xZO3AXC`{P3${TP9G&1MAP*17G3V{hyMP>W-srpw zyzvN5G#B(PfEp06ZZ(EekW-jTVqjp5$cO+pz9KRr zroodYB&^hHIy)~dNL(22?&Im?91#)k798&u?h+3g*i=$Z0bk*#fFTKLIx)%#$Qdz# zNHd22pphK-Kmq}`=9i@wm4i=VK&sL~6^9C_N;e7(0|iK^QD_{RQ@28g*f5L-2db4- zaY<%!c4d50W(g>v7#hIS^a7p*;55B}XMq7ckRjfO4bkB;vosHUwgJe%3O6@5HwFd+ zP~uy}vk08{7V#`XHxV`&gkd65^#(8g6>JrZ7#J)-Z4tjHzZ{Uq{i6Iz(8^oboD)7H z^YTmL)ACF6QWR_zbU_VUu$c;e;Nc%X1wR`!Ghs7T_{@Y>?4Wub)>5wUYXdv7!mkg_ zK-ho{a=Jur!8e*Uf?K7HQjKV>(k8Jc84<=Nr6y3r1GX&!9H&SbWu?_haE@K6x6%O~ zhv1B|Hf1fSbiE`n{j2M*Pp42yS2YmyM!zw718$|gk$8jFO8cPm z0o06!O`YQNP+DeMzJjfS83O~j0psuB?*aCWgMR>;Z(ut|K&~kUCj>}oeA(_YxHP_O zbQ!HQzM^*pR2swPZSgsyI6pZ%6;uS7GcZ_yM&2S*4y0n3hn$P7 ztYGCuW@>SKeqK%`$d@Jz40Z~jvYjUaT(3s(M3|u!n6P;Y4Aa5>wz2}9VqBUDDltF< zeV}9oD%rJE;26QQ7{({7ZrHz4;xy> za38Ag!8~YL1gh5zLDd?l`xnj=4(|Si^Mo6qc^$S>5*BjEr-HzTnRFPl{^~FmfD*}H z9Y)ZShXRy#HfWn=%3lLUPy&X{^kBFZDJ;_=VQB=Zc|c(~pJzTeEa&sgM-NNbG!ZTX z!OLiE6%5QF1D>EjT*$K!+$3Mfvrr8!W?-xJL9Ri{pRoM(_aB4N-+v6?JO*8Bik8p* zGBTF^Wn`=Yji^B=dhJHm_7k_bD;e+2S$g#4$yuYWMK<>Kh2R*?5`uZ zo8!o+^w$yG&4JDEp?hk#%5Jcyc1!F=^VEKw{h;85El@{o)*|{xzKjuneWA6OFQWs9 zjn=M(O?u)=bC8M#*2w@B2%uKP44xU_fxj6%Gtlc9*d9TcUn-$VWw+ICaBaO?Z#P

a-q8&SW|xc1A{o@r=?LP}>T&KMJHD77F0n57G?!8uk@jiGQ{EidKpLO!*0lG}xg! zApIbR!(#ii-Dz;OdD`eSTD5sb?+hqA!OjVSXhd@Od5!a6ho6@^kLK_TVi#mY7%wPY z0F4a5X0vo+VFjo!0t(h!Jh#9T zOt*M$$)P0$*p37OCPKD%gVPtNz6P}hZu8s*Zvwl`b6W+?P}p8hkT@&26v> z=Bv?HaOLt<;wxIk@>Az0sPKaAt3c5YP6^O4BTh!Mznsu9Bgl>h^f4nYMzOzKU}teL zD*fdGI}5f^5iLu?3i|l4cyN%#+r*=d$t0&FgM#cKbn_{Svk>F^e>oYW{&GUgRLJfM z^qv71quyUGaL)iXdybJNkR4}bRa%e&>Z&94eL+bBRHB6@g*JeSp3tPw4zv;tc60?U zck(hu{pE$a6SB_(-JN`ldVl%A?u4yv#c(G^x&alDu$e*+Pz&U*FeA@jVMcH(1j?3y zH<=)XBy4vRu5q?h#+JXS&~Y}%h9&fIHrSa0Aip9PGn=e7fh(0wdYjNHm2D~8K#>Vs zs!NQ=ASFN2S}$lF1DO``FaXV23o|PG6=nqQFUv)-MK8KxOgPi6;+j^lhLRCgp z;Bul$q6%%kqqeLT)c7=po^^uPK{|{!e|4Y^f~;CbcaQ<2&R+wtgJ4ICU^5Wj6R=^- z`)dQ8aJFFtEn7yPaJFUC`)do%KClggsLe3Y0b{UL7`}`Ke|@1vnJ=RRh>g||gB_KG z*HJEvd4FA?j)JU*Mt77equyUvu%m8sFI-k>>+~CC^h1F|LC%5kKWqstZU_4@8vONx zI@pg<0>nmhFzlGKWYB?(hz2#31)EOuW32n@2c1syV+5^bL7z^8E#AfLmOw_Uzk$%| zDUeYK#71)qY~e1d8SvrVbViH6>5O*ZT$IkJ0AiyV06R(%)c{08I*>8xZy;k9*n~hv zFAy8e1lWpWR1=WXKoFzV-yoaaAW6jXx34#GtB7b0YW7?b`6 zK|>~p(F?>z^A+rHUsMx7HyXimM+#%i-xTPqatfmhh>d0jY^^q`8Sn^BWwiR63LU>s LWmE#OQ4Ih9?UW3p literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_ops.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_ops.h new file mode 100644 index 0000000..3f47dd6 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_ops.h @@ -0,0 +1,392 @@ +// Filesystem operational functions -*- C++ -*- + +// Copyright (C) 2014-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your __option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/fs_ops.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{filesystem} + */ + +#ifndef _GLIBCXX_FS_OPS_H +#define _GLIBCXX_FS_OPS_H 1 + +#if __cplusplus >= 201703L + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +namespace filesystem +{ + /** @addtogroup filesystem + * @{ + */ + + [[nodiscard]] + path absolute(const path& __p); + + [[nodiscard]] + path absolute(const path& __p, error_code& __ec); + + [[nodiscard]] + path canonical(const path& __p); + + [[nodiscard]] + path canonical(const path& __p, error_code& __ec); + + inline void + copy(const path& __from, const path& __to) + { copy(__from, __to, copy_options::none); } + + inline void + copy(const path& __from, const path& __to, error_code& __ec) + { copy(__from, __to, copy_options::none, __ec); } + + void copy(const path& __from, const path& __to, copy_options __options); + void copy(const path& __from, const path& __to, copy_options __options, + error_code& __ec); + + inline bool + copy_file(const path& __from, const path& __to) + { return copy_file(__from, __to, copy_options::none); } + + inline bool + copy_file(const path& __from, const path& __to, error_code& __ec) + { return copy_file(__from, __to, copy_options::none, __ec); } + + bool copy_file(const path& __from, const path& __to, copy_options __option); + bool copy_file(const path& __from, const path& __to, copy_options __option, + error_code& __ec); + + void copy_symlink(const path& __existing_symlink, const path& __new_symlink); + void copy_symlink(const path& __existing_symlink, const path& __new_symlink, + error_code& __ec) noexcept; + + bool create_directories(const path& __p); + bool create_directories(const path& __p, error_code& __ec); + + bool create_directory(const path& __p); + bool create_directory(const path& __p, error_code& __ec) noexcept; + + bool create_directory(const path& __p, const path& __attributes); + bool create_directory(const path& __p, const path& __attributes, + error_code& __ec) noexcept; + + void create_directory_symlink(const path& __to, const path& __new_symlink); + void create_directory_symlink(const path& __to, const path& __new_symlink, + error_code& __ec) noexcept; + + void create_hard_link(const path& __to, const path& __new_hard_link); + void create_hard_link(const path& __to, const path& __new_hard_link, + error_code& __ec) noexcept; + + void create_symlink(const path& __to, const path& __new_symlink); + void create_symlink(const path& __to, const path& __new_symlink, + error_code& __ec) noexcept; + + [[nodiscard]] + path current_path(); + + [[nodiscard]] + path current_path(error_code& __ec); + + void current_path(const path& __p); + void current_path(const path& __p, error_code& __ec) noexcept; + + [[nodiscard]] + bool + equivalent(const path& __p1, const path& __p2); + + [[nodiscard]] + bool + equivalent(const path& __p1, const path& __p2, error_code& __ec) noexcept; + + [[nodiscard]] + inline bool + exists(file_status __s) noexcept + { return status_known(__s) && __s.type() != file_type::not_found; } + + [[nodiscard]] + inline bool + exists(const path& __p) + { return exists(status(__p)); } + + [[nodiscard]] + inline bool + exists(const path& __p, error_code& __ec) noexcept + { + auto __s = status(__p, __ec); + if (status_known(__s)) + { + __ec.clear(); + return __s.type() != file_type::not_found; + } + return false; + } + + [[nodiscard]] + uintmax_t file_size(const path& __p); + + [[nodiscard]] + uintmax_t file_size(const path& __p, error_code& __ec) noexcept; + + [[nodiscard]] + uintmax_t hard_link_count(const path& __p); + + [[nodiscard]] + uintmax_t hard_link_count(const path& __p, error_code& __ec) noexcept; + + [[nodiscard]] + inline bool + is_block_file(file_status __s) noexcept + { return __s.type() == file_type::block; } + + [[nodiscard]] + inline bool + is_block_file(const path& __p) + { return is_block_file(status(__p)); } + + [[nodiscard]] + inline bool + is_block_file(const path& __p, error_code& __ec) noexcept + { return is_block_file(status(__p, __ec)); } + + [[nodiscard]] + inline bool + is_character_file(file_status __s) noexcept + { return __s.type() == file_type::character; } + + [[nodiscard]] + inline bool + is_character_file(const path& __p) + { return is_character_file(status(__p)); } + + [[nodiscard]] + inline bool + is_character_file(const path& __p, error_code& __ec) noexcept + { return is_character_file(status(__p, __ec)); } + + [[nodiscard]] + inline bool + is_directory(file_status __s) noexcept + { return __s.type() == file_type::directory; } + + [[nodiscard]] + inline bool + is_directory(const path& __p) + { return is_directory(status(__p)); } + + [[nodiscard]] + inline bool + is_directory(const path& __p, error_code& __ec) noexcept + { return is_directory(status(__p, __ec)); } + + [[nodiscard]] + bool is_empty(const path& __p); + + [[nodiscard]] + bool is_empty(const path& __p, error_code& __ec); + + [[nodiscard]] + inline bool + is_fifo(file_status __s) noexcept + { return __s.type() == file_type::fifo; } + + [[nodiscard]] + inline bool + is_fifo(const path& __p) + { return is_fifo(status(__p)); } + + [[nodiscard]] + inline bool + is_fifo(const path& __p, error_code& __ec) noexcept + { return is_fifo(status(__p, __ec)); } + + [[nodiscard]] + inline bool + is_other(file_status __s) noexcept + { + return exists(__s) && !is_regular_file(__s) && !is_directory(__s) + && !is_symlink(__s); + } + + [[nodiscard]] + inline bool + is_other(const path& __p) + { return is_other(status(__p)); } + + [[nodiscard]] + inline bool + is_other(const path& __p, error_code& __ec) noexcept + { return is_other(status(__p, __ec)); } + + [[nodiscard]] + inline bool + is_regular_file(file_status __s) noexcept + { return __s.type() == file_type::regular; } + + [[nodiscard]] + inline bool + is_regular_file(const path& __p) + { return is_regular_file(status(__p)); } + + [[nodiscard]] + inline bool + is_regular_file(const path& __p, error_code& __ec) noexcept + { return is_regular_file(status(__p, __ec)); } + + [[nodiscard]] + inline bool + is_socket(file_status __s) noexcept + { return __s.type() == file_type::socket; } + + [[nodiscard]] + inline bool + is_socket(const path& __p) + { return is_socket(status(__p)); } + + [[nodiscard]] + inline bool + is_socket(const path& __p, error_code& __ec) noexcept + { return is_socket(status(__p, __ec)); } + + [[nodiscard]] + inline bool + is_symlink(file_status __s) noexcept + { return __s.type() == file_type::symlink; } + + [[nodiscard]] + inline bool + is_symlink(const path& __p) + { return is_symlink(symlink_status(__p)); } + + [[nodiscard]] + inline bool + is_symlink(const path& __p, error_code& __ec) noexcept + { return is_symlink(symlink_status(__p, __ec)); } + + [[nodiscard]] + file_time_type last_write_time(const path& __p); + + [[nodiscard]] + file_time_type last_write_time(const path& __p, error_code& __ec) noexcept; + + void last_write_time(const path& __p, file_time_type __new_time); + void last_write_time(const path& __p, file_time_type __new_time, + error_code& __ec) noexcept; + + void + permissions(const path& __p, perms __prms, + perm_options __opts = perm_options::replace); + + inline void + permissions(const path& __p, perms __prms, error_code& __ec) noexcept + { permissions(__p, __prms, perm_options::replace, __ec); } + + void + permissions(const path& __p, perms __prms, perm_options __opts, + error_code& __ec) noexcept; + + [[nodiscard]] + inline path proximate(const path& __p, error_code& __ec) + { return proximate(__p, current_path(), __ec); } + + [[nodiscard]] + path proximate(const path& __p, const path& __base = current_path()); + + [[nodiscard]] + path proximate(const path& __p, const path& __base, error_code& __ec); + + [[nodiscard]] + path read_symlink(const path& __p); + + [[nodiscard]] + path read_symlink(const path& __p, error_code& __ec); + + [[nodiscard]] + inline path relative(const path& __p, error_code& __ec) + { return relative(__p, current_path(), __ec); } + + [[nodiscard]] + path relative(const path& __p, const path& __base = current_path()); + + [[nodiscard]] + path relative(const path& __p, const path& __base, error_code& __ec); + + bool remove(const path& __p); + bool remove(const path& __p, error_code& __ec) noexcept; + + uintmax_t remove_all(const path& __p); + uintmax_t remove_all(const path& __p, error_code& __ec); + + void rename(const path& __from, const path& __to); + void rename(const path& __from, const path& __to, error_code& __ec) noexcept; + + void resize_file(const path& __p, uintmax_t __size); + void resize_file(const path& __p, uintmax_t __size, error_code& __ec) noexcept; + + [[nodiscard]] + space_info space(const path& __p); + + [[nodiscard]] + space_info space(const path& __p, error_code& __ec) noexcept; + + [[nodiscard]] + file_status status(const path& __p); + + [[nodiscard]] + file_status status(const path& __p, error_code& __ec) noexcept; + + [[nodiscard]] + inline bool status_known(file_status __s) noexcept + { return __s.type() != file_type::none; } + + [[nodiscard]] + file_status symlink_status(const path& __p); + + [[nodiscard]] + file_status symlink_status(const path& __p, error_code& __ec) noexcept; + + [[nodiscard]] + path temp_directory_path(); + + [[nodiscard]] + path temp_directory_path(error_code& __ec); + + [[nodiscard]] + path weakly_canonical(const path& __p); + + [[nodiscard]] + path weakly_canonical(const path& __p, error_code& __ec); + + /// @} group filesystem +} // namespace filesystem + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++17 + +#endif // _GLIBCXX_FS_OPS_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_ops.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_ops.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..48c3042824f10661d887dbd2a6998734922f2267 GIT binary patch literal 44915 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. + +/** @file include/bits/fs_path.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{filesystem} + */ + +#ifndef _GLIBCXX_FS_PATH_H +#define _GLIBCXX_FS_PATH_H 1 + +#if __cplusplus >= 201703L + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __cplusplus > 201703L +# include +#endif + +#if defined(_WIN32) && !defined(__CYGWIN__) +# define _GLIBCXX_FILESYSTEM_IS_WINDOWS 1 +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +namespace filesystem +{ +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + class path; + + /// @cond undocumented +namespace __detail +{ + /// @addtogroup filesystem + /// @{ + template + inline constexpr bool __is_encoded_char = false; + template<> + inline constexpr bool __is_encoded_char = true; +#ifdef _GLIBCXX_USE_CHAR8_T + template<> + inline constexpr bool __is_encoded_char = true; +#endif +#if _GLIBCXX_USE_WCHAR_T + template<> + inline constexpr bool __is_encoded_char = true; +#endif + template<> + inline constexpr bool __is_encoded_char = true; + template<> + inline constexpr bool __is_encoded_char = true; + +#if __cpp_concepts >= 201907L + template + using __safe_iterator_traits = std::iterator_traits<_Iter>; +#else + template + struct __safe_iterator_traits : std::iterator_traits<_Iter> + { }; + + // Protect against ill-formed iterator_traits specializations in C++17 + template<> struct __safe_iterator_traits { }; + template<> struct __safe_iterator_traits { }; + template<> struct __safe_iterator_traits { }; + template<> struct __safe_iterator_traits { }; +#endif + + template + inline constexpr bool __is_path_iter_src = false; + + template + inline constexpr bool + __is_path_iter_src<_Iter_traits, void_t> + = __is_encoded_char; + + template + inline constexpr bool __is_path_src + = __is_path_iter_src>>; + + template<> + inline constexpr bool __is_path_src = false; + + template<> + inline constexpr bool __is_path_src = false; + + template<> + inline constexpr bool __is_path_src = false; + + template<> + inline constexpr bool __is_path_src = false; + + template<> + inline constexpr bool __is_path_src = false; + + template<> + inline constexpr bool __is_path_src = false; + + template + inline constexpr bool + __is_path_src> + = __is_encoded_char<_CharT>; + + template + inline constexpr bool + __is_path_src> + = __is_encoded_char<_CharT>; + + // SFINAE constraint for Source parameters as required by [fs.path.req]. + template + using _Path = enable_if_t<__is_path_src<_Tp>, path>; + + // SFINAE constraint for InputIterator parameters as required by [fs.req]. + template> + using _Path2 = enable_if_t<__is_path_iter_src<_Tr>, path>; + +#if __cpp_lib_concepts + template + constexpr bool __is_contiguous = std::contiguous_iterator<_Iter>; +#else + template + constexpr bool __is_contiguous = false; +#endif + + template + constexpr bool __is_contiguous<_Tp*> = true; + + template + constexpr bool + __is_contiguous<__gnu_cxx::__normal_iterator<_Tp*, _Seq>> = true; + +#if !defined _GLIBCXX_FILESYSTEM_IS_WINDOWS && defined _GLIBCXX_USE_CHAR8_T + // For POSIX treat char8_t sequences as char without encoding conversions. + template + using __unified_u8_t + = __conditional_t, char, _EcharT>; +#else + template + using __unified_u8_t = _EcharT; +#endif + + // The __effective_range overloads convert a Source parameter into + // either a basic_string_view or basic_string containing the + // effective range of the Source, as defined in [fs.path.req]. + + template + inline basic_string_view<_CharT> + __effective_range(const basic_string<_CharT, _Traits, _Alloc>& __source) + noexcept + { return __source; } + + template + inline basic_string_view<_CharT> + __effective_range(const basic_string_view<_CharT, _Traits>& __source) + noexcept + { return __source; } + + // Return the effective range of an NTCTS. + template + auto + __effective_range(const _Source& __source) + { + // Remove a level of normal/safe iterator indirection, or decay an array. + using _Iter = decltype(std::__niter_base(__source)); + using value_type = typename iterator_traits<_Iter>::value_type; + + if constexpr (__is_contiguous<_Iter>) + return basic_string_view{&*__source}; + else + { + // _Source is an input iterator that iterates over an NTCTS. + // Create a basic_string by reading until the null character. + basic_string<__unified_u8_t> __str; + _Source __it = __source; + for (value_type __ch = *__it; __ch != value_type(); __ch = *++__it) + __str.push_back(__ch); + return __str; + } + } + + // The value type of a Source parameter's effective range. + template + struct __source_value_type_impl + { + using type + = typename __safe_iterator_traits>::value_type; + }; + + template + struct __source_value_type_impl> + { + using type = _CharT; + }; + + template + struct __source_value_type_impl> + { + using type = _CharT; + }; + + // The value type of a Source parameter's effective range. + template + using __source_value_t = typename __source_value_type_impl<_Source>::type; + + // SFINAE helper to check that an effective range has value_type char, + // as required by path constructors taking a std::locale parameter. + // The type _Tp must have already been checked by _Path or _Path2<_Tp>. + template> + using __value_type_is_char + = std::enable_if_t, _Val>; + + // As above, but also allows char8_t, as required by u8path + // C++20 [depr.fs.path.factory] + template> + using __value_type_is_char_or_char8_t + = std::enable_if_t +#ifdef _GLIBCXX_USE_CHAR8_T + || std::is_same_v<_Val, char8_t> +#endif + , _Val>; + + // Create a basic_string or basic_string_view from an iterator range. + template + inline auto + __string_from_range(_InputIterator __first, _InputIterator __last) + { + using _EcharT + = typename std::iterator_traits<_InputIterator>::value_type; + static_assert(__is_encoded_char<_EcharT>); // C++17 [fs.req]/3 + + if constexpr (__is_contiguous<_InputIterator>) + { + // For contiguous iterators we can just return a string view. + if (auto __len = __last - __first) [[__likely__]] + return basic_string_view<_EcharT>(&*__first, __len); + return basic_string_view<_EcharT>(); + } + else + { + // Conversion requires contiguous characters, so create a string. + return basic_string<__unified_u8_t<_EcharT>>(__first, __last); + } + } + + /// @} group filesystem +} // namespace __detail + /// @endcond + + /// @addtogroup filesystem + /// @{ + + /// A filesystem path + /** + * @ingroup filesystem + * @headerfile filesystem + * @since C++17 + */ + class path + { + public: +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + using value_type = wchar_t; + static constexpr value_type preferred_separator = L'\\'; +#else +# ifdef _GLIBCXX_DOXYGEN + /// Windows uses wchar_t for path::value_type, POSIX uses char. + using value_type = __os_dependent__; +# else + using value_type = char; +# endif + static constexpr value_type preferred_separator = '/'; +#endif + using string_type = std::basic_string; + + /// path::format is ignored in this implementation + enum format : unsigned char { native_format, generic_format, auto_format }; + + // constructors and destructor + + path() noexcept { } + + path(const path& __p) = default; + + path(path&& __p) noexcept + : _M_pathname(std::move(__p._M_pathname)), + _M_cmpts(std::move(__p._M_cmpts)) + { __p.clear(); } + + path(string_type&& __source, format = auto_format) + : _M_pathname(std::move(__source)) + { _M_split_cmpts(); } + + template> + path(_Source const& __source, format = auto_format) + : _M_pathname(_S_convert(__detail::__effective_range(__source))) + { _M_split_cmpts(); } + + template> + path(_InputIterator __first, _InputIterator __last, format = auto_format) + : _M_pathname(_S_convert(__detail::__string_from_range(__first, __last))) + { _M_split_cmpts(); } + + template, + typename _Require2 = __detail::__value_type_is_char<_Source>> + path(_Source const& __src, const locale& __loc, format = auto_format) + : _M_pathname(_S_convert_loc(__detail::__effective_range(__src), __loc)) + { _M_split_cmpts(); } + + template, + typename _Req2 = __detail::__value_type_is_char<_InputIterator>> + path(_InputIterator __first, _InputIterator __last, const locale& __loc, + format = auto_format) + : _M_pathname(_S_convert_loc(__first, __last, __loc)) + { _M_split_cmpts(); } + + ~path() = default; + + // assignments + + path& operator=(const path&); + path& operator=(path&&) noexcept; + path& operator=(string_type&& __source); + path& assign(string_type&& __source); + + template + __detail::_Path<_Source>& + operator=(_Source const& __source) + { return *this = path(__source); } + + template + __detail::_Path<_Source>& + assign(_Source const& __source) + { return *this = path(__source); } + + template + __detail::_Path2<_InputIterator>& + assign(_InputIterator __first, _InputIterator __last) + { return *this = path(__first, __last); } + + // appends + + path& operator/=(const path& __p); + + template + __detail::_Path<_Source>& + operator/=(_Source const& __source) + { + _M_append(_S_convert(__detail::__effective_range(__source))); + return *this; + } + + template + __detail::_Path<_Source>& + append(_Source const& __source) + { + _M_append(_S_convert(__detail::__effective_range(__source))); + return *this; + } + + template + __detail::_Path2<_InputIterator>& + append(_InputIterator __first, _InputIterator __last) + { + _M_append(_S_convert(__detail::__string_from_range(__first, __last))); + return *this; + } + + // concatenation + + path& operator+=(const path& __x); + path& operator+=(const string_type& __x); + path& operator+=(const value_type* __x); + path& operator+=(value_type __x); + path& operator+=(basic_string_view __x); + + template + __detail::_Path<_Source>& + operator+=(_Source const& __x) { return concat(__x); } + + template + __detail::_Path2<_CharT*>& + operator+=(_CharT __x); + + template + __detail::_Path<_Source>& + concat(_Source const& __x) + { + _M_concat(_S_convert(__detail::__effective_range(__x))); + return *this; + } + + template + __detail::_Path2<_InputIterator>& + concat(_InputIterator __first, _InputIterator __last) + { + _M_concat(_S_convert(__detail::__string_from_range(__first, __last))); + return *this; + } + + // modifiers + + void clear() noexcept { _M_pathname.clear(); _M_split_cmpts(); } + + path& make_preferred(); + path& remove_filename(); + path& replace_filename(const path& __replacement); + path& replace_extension(const path& __replacement = path()); + + void swap(path& __rhs) noexcept; + + // native format observers + + const string_type& native() const noexcept { return _M_pathname; } + const value_type* c_str() const noexcept { return _M_pathname.c_str(); } + operator string_type() const { return _M_pathname; } + + template, + typename _Allocator = std::allocator<_CharT>> + std::basic_string<_CharT, _Traits, _Allocator> + string(const _Allocator& __a = _Allocator()) const; + + std::string string() const; +#if _GLIBCXX_USE_WCHAR_T + std::wstring wstring() const; +#endif +#ifdef _GLIBCXX_USE_CHAR8_T + __attribute__((__abi_tag__("__u8"))) + std::u8string u8string() const; +#else + std::string u8string() const; +#endif // _GLIBCXX_USE_CHAR8_T + std::u16string u16string() const; + std::u32string u32string() const; + + // generic format observers + template, + typename _Allocator = std::allocator<_CharT>> + std::basic_string<_CharT, _Traits, _Allocator> + generic_string(const _Allocator& __a = _Allocator()) const; + + std::string generic_string() const; +#if _GLIBCXX_USE_WCHAR_T + std::wstring generic_wstring() const; +#endif +#ifdef _GLIBCXX_USE_CHAR8_T + __attribute__((__abi_tag__("__u8"))) + std::u8string generic_u8string() const; +#else + std::string generic_u8string() const; +#endif // _GLIBCXX_USE_CHAR8_T + std::u16string generic_u16string() const; + std::u32string generic_u32string() const; + + // compare + + int compare(const path& __p) const noexcept; + int compare(const string_type& __s) const noexcept; + int compare(const value_type* __s) const noexcept; + int compare(basic_string_view __s) const noexcept; + + // decomposition + + path root_name() const; + path root_directory() const; + path root_path() const; + path relative_path() const; + path parent_path() const; + path filename() const; + path stem() const; + path extension() const; + + // query + + [[nodiscard]] bool empty() const noexcept { return _M_pathname.empty(); } + bool has_root_name() const noexcept; + bool has_root_directory() const noexcept; + bool has_root_path() const noexcept; + bool has_relative_path() const noexcept; + bool has_parent_path() const noexcept; + bool has_filename() const noexcept; + bool has_stem() const noexcept; + bool has_extension() const noexcept; + bool is_absolute() const noexcept; + bool is_relative() const noexcept { return !is_absolute(); } + + // generation + path lexically_normal() const; + path lexically_relative(const path& base) const; + path lexically_proximate(const path& base) const; + + // iterators + class iterator; + using const_iterator = iterator; + + iterator begin() const noexcept; + iterator end() const noexcept; + + /// Write a path to a stream + template + friend std::basic_ostream<_CharT, _Traits>& + operator<<(std::basic_ostream<_CharT, _Traits>& __os, const path& __p) + { + __os << std::quoted(__p.string<_CharT, _Traits>()); + return __os; + } + + /// Read a path from a stream + template + friend std::basic_istream<_CharT, _Traits>& + operator>>(std::basic_istream<_CharT, _Traits>& __is, path& __p) + { + std::basic_string<_CharT, _Traits> __tmp; + if (__is >> std::quoted(__tmp)) + __p = std::move(__tmp); + return __is; + } + + // non-member operators + + /// Compare paths + friend bool operator==(const path& __lhs, const path& __rhs) noexcept + { return path::_S_compare(__lhs, __rhs) == 0; } + +#if __cpp_lib_three_way_comparison + /// Compare paths + friend strong_ordering + operator<=>(const path& __lhs, const path& __rhs) noexcept + { return path::_S_compare(__lhs, __rhs) <=> 0; } +#else + /// Compare paths + friend bool operator!=(const path& __lhs, const path& __rhs) noexcept + { return !(__lhs == __rhs); } + + /// Compare paths + friend bool operator<(const path& __lhs, const path& __rhs) noexcept + { return __lhs.compare(__rhs) < 0; } + + /// Compare paths + friend bool operator<=(const path& __lhs, const path& __rhs) noexcept + { return !(__rhs < __lhs); } + + /// Compare paths + friend bool operator>(const path& __lhs, const path& __rhs) noexcept + { return __rhs < __lhs; } + + /// Compare paths + friend bool operator>=(const path& __lhs, const path& __rhs) noexcept + { return !(__lhs < __rhs); } +#endif + + /// Append one path to another + friend path operator/(const path& __lhs, const path& __rhs) + { + path __result(__lhs); + __result /= __rhs; + return __result; + } + + private: + enum class _Type : unsigned char { + _Multi = 0, _Root_name, _Root_dir, _Filename + }; + + path(basic_string_view __str, _Type __type); + + enum class _Split { _Stem, _Extension }; + + void _M_append(basic_string_view); + void _M_concat(basic_string_view); + + pair _M_find_extension() const noexcept; + + // path::_S_convert creates a basic_string or + // basic_string_view from a basic_string or + // basic_string_view, for an encoded character type C, + // performing the conversions required by [fs.path.type.cvt]. + template + static auto + _S_convert(_Tp __str) + noexcept(is_same_v) + { + if constexpr (is_same_v) + return __str; // No conversion needed. +#if !defined _GLIBCXX_FILESYSTEM_IS_WINDOWS && defined _GLIBCXX_USE_CHAR8_T + else if constexpr (is_same_v<_Tp, std::u8string>) + // Calling _S_convert will return a u8string_view that + // refers to __str and would dangle after this function returns. + // Return a string_type instead, to avoid dangling. + return string_type(_S_convert(__str.data(), + __str.data() + __str.size())); +#endif + else + return _S_convert(__str.data(), __str.data() + __str.size()); + } + + template + static auto + _S_convert(const _EcharT* __first, const _EcharT* __last); + + // _S_convert_loc converts a range of char to string_type, using the + // supplied locale for encoding conversions. + + static string_type + _S_convert_loc(const char* __first, const char* __last, + const std::locale& __loc); + + template + static string_type + _S_convert_loc(_Iter __first, _Iter __last, const std::locale& __loc) + { + const auto __s = __detail::__string_from_range(__first, __last); + return _S_convert_loc(__s.data(), __s.data() + __s.size(), __loc); + } + + template + static string_type + _S_convert_loc(const _Tp& __s, const std::locale& __loc) + { + return _S_convert_loc(__s.data(), __s.data() + __s.size(), __loc); + } + + template + static basic_string<_CharT, _Traits, _Allocator> + _S_str_convert(basic_string_view, const _Allocator&); + + // Returns lhs.compare(rhs), but defined after path::iterator is complete. + __attribute__((__always_inline__)) + static int + _S_compare(const path& __lhs, const path& __rhs) noexcept; + + void _M_split_cmpts(); + + _Type _M_type() const noexcept { return _M_cmpts.type(); } + + string_type _M_pathname; + + struct _Cmpt; + + struct _List + { + using value_type = _Cmpt; + using iterator = value_type*; + using const_iterator = const value_type*; + + _List(); + _List(const _List&); + _List(_List&&) = default; + _List& operator=(const _List&); + _List& operator=(_List&&) = default; + ~_List() = default; + + _Type type() const noexcept + { return _Type(reinterpret_cast<__UINTPTR_TYPE__>(_M_impl.get()) & 0x3); } + + void type(_Type) noexcept; + + int size() const noexcept; // zero unless type() == _Type::_Multi + bool empty() const noexcept; // true unless type() == _Type::_Multi + void clear(); + void swap(_List& __l) noexcept { _M_impl.swap(__l._M_impl); } + int capacity() const noexcept; + void reserve(int, bool); ///< @pre type() == _Type::_Multi + + // All the member functions below here have a precondition !empty() + // (and they should only be called from within the library). + + iterator begin() noexcept; + iterator end() noexcept; + const_iterator begin() const noexcept; + const_iterator end() const noexcept; + + value_type& front() noexcept; + value_type& back() noexcept; + const value_type& front() const noexcept; + const value_type& back() const noexcept; + + void pop_back(); + void _M_erase_from(const_iterator __pos); // erases [__pos,end()) + + struct _Impl; + struct _Impl_deleter + { + void operator()(_Impl*) const noexcept; + }; + unique_ptr<_Impl, _Impl_deleter> _M_impl; + }; + _List _M_cmpts; + + struct _Parser; + + template struct _Codecvt; + }; + + /// @{ + /// @relates std::filesystem::path + + inline void swap(path& __lhs, path& __rhs) noexcept { __lhs.swap(__rhs); } + + size_t hash_value(const path& __p) noexcept; + + /// @} + + /// Exception type thrown by the Filesystem library + /** + * @headerfile filesystem + * @since C++17 + */ + class filesystem_error : public std::system_error + { + public: + filesystem_error(const string& __what_arg, error_code __ec); + + filesystem_error(const string& __what_arg, const path& __p1, + error_code __ec); + + filesystem_error(const string& __what_arg, const path& __p1, + const path& __p2, error_code __ec); + + filesystem_error(const filesystem_error&) = default; + filesystem_error& operator=(const filesystem_error&) = default; + + // No move constructor or assignment operator. + // Copy rvalues instead, so that _M_impl is not left empty. + + ~filesystem_error(); + + const path& path1() const noexcept; + const path& path2() const noexcept; + const char* what() const noexcept; + + private: + struct _Impl; + std::__shared_ptr _M_impl; + }; + + /// @cond undocumented +namespace __detail +{ + [[noreturn]] inline void + __throw_conversion_error() + { + _GLIBCXX_THROW_OR_ABORT(filesystem_error( + "Cannot convert character sequence", + std::make_error_code(errc::illegal_byte_sequence))); + } + +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + template + inline std::wstring + __wstr_from_utf8(const _Tp& __str) + { + static_assert(std::is_same_v); + std::wstring __wstr; + // XXX This assumes native wide encoding is UTF-16. + std::codecvt_utf8_utf16 __wcvt; + const auto __p = __str.data(); + if (!__str_codecvt_in_all(__p, __p + __str.size(), __wstr, __wcvt)) + __detail::__throw_conversion_error(); + return __wstr; + } +#endif + +} // namespace __detail + /// @endcond + + + /** Create a path from a UTF-8-encoded sequence of char + * + * @relates std::filesystem::path + * @headerfile filesystem + * @since C++17 + */ + template, + typename _CharT + = __detail::__value_type_is_char_or_char8_t<_InputIterator>> + _GLIBCXX20_DEPRECATED_SUGGEST("path(u8string(first, last))") + inline path + u8path(_InputIterator __first, _InputIterator __last) + { +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + if constexpr (is_same_v<_CharT, char>) + return path{ __detail::__wstr_from_utf8( + __detail::__string_from_range(__first, __last)) }; + else + return path{ __first, __last }; // constructor handles char8_t +#else + // This assumes native normal encoding is UTF-8. + return path{ __first, __last }; +#endif + } + + /** Create a path from a UTF-8-encoded sequence of char + * + * @relates std::filesystem::path + * @headerfile filesystem + * @since C++17 + */ + template, + typename _CharT = __detail::__value_type_is_char_or_char8_t<_Source>> + _GLIBCXX20_DEPRECATED_SUGGEST("path((const char8_t*)&*source)") + inline path + u8path(const _Source& __source) + { +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + if constexpr (is_same_v<_CharT, char>) + return path{ __detail::__wstr_from_utf8( + __detail::__effective_range(__source)) }; + else + return path{ __source }; // constructor handles char8_t +#else + // This assumes native normal encoding is UTF-8. + return path{ __source }; +#endif + } + + /// @cond undocumented + + struct path::_Cmpt : path + { + _Cmpt(basic_string_view __s, _Type __t, size_t __pos); + + _Cmpt() : _M_pos(-1) { } + + size_t _M_pos; + }; + + // path::_Codecvt Performs conversions between C and path::string_type. + // The native encoding of char strings is the OS-dependent current + // encoding for pathnames. FIXME: We assume this is UTF-8 everywhere, + // but should use a Windows API to query it. + + // Converts between native pathname encoding and char16_t or char32_t. + template + struct path::_Codecvt + // Need derived class here because std::codecvt has protected destructor. + : std::codecvt<_EcharT, char, mbstate_t> + { }; + + // Converts between native pathname encoding and native wide encoding. + // The native encoding for wide strings is the execution wide-character + // set encoding. FIXME: We assume that this is either UTF-32 or UTF-16 + // (depending on the width of wchar_t). That matches GCC's default, + // but can be changed with -fwide-exec-charset. + // We need a custom codecvt converting the native pathname encoding + // to/from the native wide encoding. + template<> + struct path::_Codecvt + : __conditional_t, // UTF-8 <-> UTF-32 + std::codecvt_utf8_utf16> // UTF-8 <-> UTF-16 + { }; + + template + auto + path::_S_convert(const _EcharT* __f, const _EcharT* __l) + { + static_assert(__detail::__is_encoded_char<_EcharT>); + +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS +# define _GLIBCXX_CONV_FROM_UTF8(S) __detail::__wstr_from_utf8(S) +#else +# define _GLIBCXX_CONV_FROM_UTF8(S) S +#endif + + if constexpr (is_same_v<_EcharT, value_type>) + return basic_string_view(__f, __l - __f); +#ifdef _GLIBCXX_USE_CHAR8_T + else if constexpr (is_same_v<_EcharT, char8_t>) + { + string_view __str(reinterpret_cast(__f), __l - __f); + return _GLIBCXX_CONV_FROM_UTF8(__str); + } +#endif +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + else if constexpr (is_same_v<_EcharT, char>) + { + std::wstring __wstr; + path::_Codecvt __cvt; + if (__str_codecvt_in_all(__f, __l, __wstr, __cvt)) + return __wstr; + } +#endif + else + { + path::_Codecvt<_EcharT> __cvt; + std::string __str; + if (__str_codecvt_out_all(__f, __l, __str, __cvt)) + return _GLIBCXX_CONV_FROM_UTF8(__str); + } + __detail::__throw_conversion_error(); + } +#undef _GLIBCXX_CONV_FROM_UTF8 + + /// @endcond + + /// An iterator for the components of a path + /** + * @headerfile filesystem + * @since C++17 + */ + class path::iterator + { + public: + using difference_type = std::ptrdiff_t; + using value_type = path; + using reference = const path&; + using pointer = const path*; + using iterator_category = std::bidirectional_iterator_tag; + + iterator() noexcept : _M_path(nullptr), _M_cur(), _M_at_end() { } + + iterator(const iterator&) = default; + iterator& operator=(const iterator&) = default; + + reference operator*() const noexcept; + pointer operator->() const noexcept { return std::__addressof(**this); } + + iterator& operator++() noexcept; + + iterator operator++(int) noexcept + { auto __tmp = *this; ++*this; return __tmp; } + + iterator& operator--() noexcept; + + iterator operator--(int) noexcept + { auto __tmp = *this; --*this; return __tmp; } + + friend bool + operator==(const iterator& __lhs, const iterator& __rhs) noexcept + { return __lhs._M_equals(__rhs); } + + friend bool + operator!=(const iterator& __lhs, const iterator& __rhs) noexcept + { return !__lhs._M_equals(__rhs); } + + private: + friend class path; + + bool + _M_is_multi() const noexcept + { return _M_path->_M_type() == _Type::_Multi; } + + friend difference_type + __path_iter_distance(const iterator& __first, const iterator& __last) + noexcept + { + __glibcxx_assert(__first._M_path != nullptr); + __glibcxx_assert(__first._M_path == __last._M_path); + if (__first._M_is_multi()) + return std::distance(__first._M_cur, __last._M_cur); + else if (__first._M_at_end == __last._M_at_end) + return 0; + else + return __first._M_at_end ? -1 : 1; + } + + friend void + __path_iter_advance(iterator& __i, difference_type __n) noexcept + { + if (__n == 1) + ++__i; + else if (__n == -1) + --__i; + else if (__n != 0) + { + __glibcxx_assert(__i._M_path != nullptr); + __glibcxx_assert(__i._M_is_multi()); + // __glibcxx_assert(__i._M_path->_M_cmpts.end() - __i._M_cur >= __n); + __i._M_cur += __n; + } + } + + iterator(const path* __path, path::_List::const_iterator __iter) noexcept + : _M_path(__path), _M_cur(__iter), _M_at_end() + { } + + iterator(const path* __path, bool __at_end) noexcept + : _M_path(__path), _M_cur(), _M_at_end(__at_end) + { } + + bool _M_equals(iterator) const noexcept; + + const path* _M_path; + path::_List::const_iterator _M_cur; + bool _M_at_end; // only used when type != _Multi + }; + + + inline path& + path::operator=(path&& __p) noexcept + { + if (&__p == this) [[__unlikely__]] + return *this; + + _M_pathname = std::move(__p._M_pathname); + _M_cmpts = std::move(__p._M_cmpts); + __p.clear(); + return *this; + } + + inline path& + path::operator=(string_type&& __source) + { return *this = path(std::move(__source)); } + + inline path& + path::assign(string_type&& __source) + { return *this = path(std::move(__source)); } + + inline path& + path::operator+=(const string_type& __x) + { + _M_concat(__x); + return *this; + } + + inline path& + path::operator+=(const value_type* __x) + { + _M_concat(__x); + return *this; + } + + inline path& + path::operator+=(value_type __x) + { + _M_concat(basic_string_view(&__x, 1)); + return *this; + } + + inline path& + path::operator+=(basic_string_view __x) + { + _M_concat(__x); + return *this; + } + + template + inline __detail::_Path2<_CharT*>& + path::operator+=(const _CharT __x) + { + _M_concat(_S_convert(&__x, &__x + 1)); + return *this; + } + + inline path& + path::make_preferred() + { +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + auto __pos = _M_pathname.find(L'/'); + while (__pos != _M_pathname.npos) + { + _M_pathname[__pos] = preferred_separator; + __pos = _M_pathname.find(L'/', __pos); + } +#endif + return *this; + } + + inline void path::swap(path& __rhs) noexcept + { + _M_pathname.swap(__rhs._M_pathname); + _M_cmpts.swap(__rhs._M_cmpts); + } + + /// @cond undocumented + template + std::basic_string<_CharT, _Traits, _Allocator> + path::_S_str_convert(basic_string_view __str, + const _Allocator& __a) + { + static_assert(!is_same_v<_CharT, value_type>); + + using _WString = basic_string<_CharT, _Traits, _Allocator>; + + if (__str.size() == 0) + return _WString(__a); + +#ifndef _GLIBCXX_FILESYSTEM_IS_WINDOWS + string_view __u8str = __str; +#else + // First convert native string from UTF-16 to to UTF-8. + // XXX This assumes that the execution wide-character set is UTF-16. + std::codecvt_utf8_utf16 __cvt; + + using _CharAlloc = __alloc_rebind<_Allocator, char>; + using _String = basic_string, _CharAlloc>; + _String __u8str{_CharAlloc{__a}}; + const value_type* __wfirst = __str.data(); + const value_type* __wlast = __wfirst + __str.size(); + if (!__str_codecvt_out_all(__wfirst, __wlast, __u8str, __cvt)) + __detail::__throw_conversion_error(); + if constexpr (is_same_v<_CharT, char>) + return __u8str; // XXX assumes native ordinary encoding is UTF-8. + else +#endif + { + const char* __first = __u8str.data(); + const char* __last = __first + __u8str.size(); + + // Convert UTF-8 string to requested format. +#ifdef _GLIBCXX_USE_CHAR8_T + if constexpr (is_same_v<_CharT, char8_t>) + return _WString(__first, __last, __a); + else +#endif + { + // Convert UTF-8 to wide string. + _WString __wstr(__a); + path::_Codecvt<_CharT> __cvt; + if (__str_codecvt_in_all(__first, __last, __wstr, __cvt)) + return __wstr; + } + } + __detail::__throw_conversion_error(); + } + /// @endcond + + template + inline basic_string<_CharT, _Traits, _Allocator> + path::string(const _Allocator& __a) const + { + if constexpr (is_same_v<_CharT, value_type>) + return { _M_pathname.c_str(), _M_pathname.length(), __a }; + else + return _S_str_convert<_CharT, _Traits>(_M_pathname, __a); + } + + inline std::string + path::string() const { return string(); } + +#if _GLIBCXX_USE_WCHAR_T + inline std::wstring + path::wstring() const { return string(); } +#endif + +#ifdef _GLIBCXX_USE_CHAR8_T + inline std::u8string + path::u8string() const { return string(); } +#else + inline std::string + path::u8string() const + { +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + std::string __str; + // convert from native wide encoding (assumed to be UTF-16) to UTF-8 + std::codecvt_utf8_utf16 __cvt; + const value_type* __first = _M_pathname.data(); + const value_type* __last = __first + _M_pathname.size(); + if (__str_codecvt_out_all(__first, __last, __str, __cvt)) + return __str; + __detail::__throw_conversion_error(); +#else + return _M_pathname; +#endif + } +#endif // _GLIBCXX_USE_CHAR8_T + + inline std::u16string + path::u16string() const { return string(); } + + inline std::u32string + path::u32string() const { return string(); } + + template + inline std::basic_string<_CharT, _Traits, _Allocator> + path::generic_string(const _Allocator& __a) const + { +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + const value_type __slash = L'/'; +#else + const value_type __slash = '/'; +#endif + using _Alloc2 = typename allocator_traits<_Allocator>::template + rebind_alloc; + basic_string, _Alloc2> __str(__a); + + if (_M_type() == _Type::_Root_dir) + __str.assign(1, __slash); + else + { + __str.reserve(_M_pathname.size()); + bool __add_slash = false; + for (auto& __elem : *this) + { +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + if (__elem._M_type() == _Type::_Root_dir) + { + __str += __slash; + continue; + } +#endif + if (__add_slash) + __str += __slash; + __str += basic_string_view(__elem._M_pathname); + __add_slash = __elem._M_type() == _Type::_Filename; + } + } + + if constexpr (is_same_v<_CharT, value_type>) + return __str; + else + return _S_str_convert<_CharT, _Traits>(__str, __a); + } + + inline std::string + path::generic_string() const + { return generic_string(); } + +#if _GLIBCXX_USE_WCHAR_T + inline std::wstring + path::generic_wstring() const + { return generic_string(); } +#endif + +#ifdef _GLIBCXX_USE_CHAR8_T + inline std::u8string + path::generic_u8string() const + { return generic_string(); } +#else + inline std::string + path::generic_u8string() const + { return generic_string(); } +#endif + + inline std::u16string + path::generic_u16string() const + { return generic_string(); } + + inline std::u32string + path::generic_u32string() const + { return generic_string(); } + + inline int + path::compare(const string_type& __s) const noexcept + { return compare(basic_string_view(__s)); } + + inline int + path::compare(const value_type* __s) const noexcept + { return compare(basic_string_view(__s)); } + + inline path + path::filename() const + { + if (empty()) + return {}; + else if (_M_type() == _Type::_Filename) + return *this; + else if (_M_type() == _Type::_Multi) + { + if (_M_pathname.back() == preferred_separator) + return {}; + auto __last = --end(); + if (__last->_M_type() == _Type::_Filename) + return *__last; + } + return {}; + } + + inline path + path::stem() const + { + auto ext = _M_find_extension(); + if (ext.first && ext.second != 0) + return path{ext.first->substr(0, ext.second)}; + return {}; + } + + inline path + path::extension() const + { + auto ext = _M_find_extension(); + if (ext.first && ext.second != string_type::npos) + return path{ext.first->substr(ext.second)}; + return {}; + } + + inline bool + path::has_stem() const noexcept + { + auto ext = _M_find_extension(); + return ext.first && ext.second != 0; + } + + inline bool + path::has_extension() const noexcept + { + auto ext = _M_find_extension(); + return ext.first && ext.second != string_type::npos; + } + + inline bool + path::is_absolute() const noexcept + { +#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS + return has_root_name() && has_root_directory(); +#else + return has_root_directory(); +#endif + } + + inline path::iterator + path::begin() const noexcept + { + if (_M_type() == _Type::_Multi) + return iterator(this, _M_cmpts.begin()); + return iterator(this, empty()); + } + + inline path::iterator + path::end() const noexcept + { + if (_M_type() == _Type::_Multi) + return iterator(this, _M_cmpts.end()); + return iterator(this, true); + } + + inline path::iterator& + path::iterator::operator++() noexcept + { + __glibcxx_assert(_M_path != nullptr); + if (_M_is_multi()) + { + __glibcxx_assert(_M_cur != _M_path->_M_cmpts.end()); + ++_M_cur; + } + else + { + __glibcxx_assert(!_M_at_end); + _M_at_end = true; + } + return *this; + } + + inline path::iterator& + path::iterator::operator--() noexcept + { + __glibcxx_assert(_M_path != nullptr); + if (_M_is_multi()) + { + __glibcxx_assert(_M_cur != _M_path->_M_cmpts.begin()); + --_M_cur; + } + else + { + __glibcxx_assert(_M_at_end); + _M_at_end = false; + } + return *this; + } + + inline path::iterator::reference + path::iterator::operator*() const noexcept + { + __glibcxx_assert(_M_path != nullptr); + if (_M_is_multi()) + { + __glibcxx_assert(_M_cur != _M_path->_M_cmpts.end()); + return *_M_cur; + } + return *_M_path; + } + + inline bool + path::iterator::_M_equals(iterator __rhs) const noexcept + { + if (_M_path != __rhs._M_path) + return false; + if (_M_path == nullptr) + return true; + if (_M_is_multi()) + return _M_cur == __rhs._M_cur; + return _M_at_end == __rhs._M_at_end; + } + + // Define this now that path and path::iterator are complete. + // It needs to consider the string_view(Range&&) constructor during + // overload resolution, which depends on whether range is satisfied, + // which depends on whether path::iterator is complete. + inline int + path::_S_compare(const path& __lhs, const path& __rhs) noexcept + { return __lhs.compare(__rhs); } + + /// @} group filesystem +_GLIBCXX_END_NAMESPACE_CXX11 +} // namespace filesystem + +/// @cond undocumented + +inline ptrdiff_t +distance(filesystem::path::iterator __first, filesystem::path::iterator __last) +noexcept +{ return __path_iter_distance(__first, __last); } + +template + inline void + advance(filesystem::path::iterator& __i, _Distance __n) noexcept + { __path_iter_advance(__i, static_cast(__n)); } + +extern template class __shared_ptr; + +/// @endcond + +// _GLIBCXX_RESOLVE_LIB_DEFECTS +// 3657. std::hash is not enabled +template<> + struct hash + { + size_t + operator()(const filesystem::path& __p) const noexcept + { return filesystem::hash_value(__p); } + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++17 + +#endif // _GLIBCXX_FS_PATH_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_path.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@fs_path.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..55ab97b443cbc443a0bac717a2d913021f9b775e GIT binary patch literal 106878 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

  • `ai8JlUBz{<1TH4kLk0|D~iR=YYmF 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functexcept.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functexcept.h new file mode 100644 index 0000000..b1bf43a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functexcept.h @@ -0,0 +1,143 @@ +// Function-Based Exception Support -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/functexcept.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{exception} + * + * This header provides support for -fno-exceptions. + */ + +// +// ISO C++ 14882: 19.1 Exception classes +// + +#ifndef _FUNCTEXCEPT_H +#define _FUNCTEXCEPT_H 1 + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if _GLIBCXX_HOSTED + // Helper for exception objects in + void + __throw_bad_exception(void) __attribute__((__noreturn__)); + + // Helper for exception objects in + void + __throw_bad_alloc(void) __attribute__((__noreturn__)); + + void + __throw_bad_array_new_length(void) __attribute__((__noreturn__)); + + // Helper for exception objects in + void + __throw_bad_cast(void) __attribute__((__noreturn__,__cold__)); + + void + __throw_bad_typeid(void) __attribute__((__noreturn__,__cold__)); + + // Helpers for exception objects in + void + __throw_logic_error(const char*) __attribute__((__noreturn__,__cold__)); + + void + __throw_domain_error(const char*) __attribute__((__noreturn__,__cold__)); + + void + __throw_invalid_argument(const char*) __attribute__((__noreturn__,__cold__)); + + void + __throw_length_error(const char*) __attribute__((__noreturn__,__cold__)); + + void + __throw_out_of_range(const char*) __attribute__((__noreturn__,__cold__)); + + void + __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__,__cold__)) + __attribute__((__format__(__gnu_printf__, 1, 2))); + + void + __throw_runtime_error(const char*) __attribute__((__noreturn__,__cold__)); + + void + __throw_range_error(const char*) __attribute__((__noreturn__,__cold__)); + + void + __throw_overflow_error(const char*) __attribute__((__noreturn__,__cold__)); + + void + __throw_underflow_error(const char*) __attribute__((__noreturn__,__cold__)); + + // Helpers for exception objects in + void + __throw_ios_failure(const char*) __attribute__((__noreturn__,__cold__)); + + void + __throw_ios_failure(const char*, int) __attribute__((__noreturn__,__cold__)); + + // Helpers for exception objects in + void + __throw_system_error(int) __attribute__((__noreturn__,__cold__)); + + // Helpers for exception objects in + void + __throw_future_error(int) __attribute__((__noreturn__,__cold__)); + + // Helpers for exception objects in + void + __throw_bad_function_call() __attribute__((__noreturn__,__cold__)); + +#else // ! HOSTED + + __attribute__((__noreturn__)) inline void + __throw_invalid_argument(const char*) + { std::__terminate(); } + + __attribute__((__noreturn__)) inline void + __throw_out_of_range(const char*) + { std::__terminate(); } + + __attribute__((__noreturn__)) inline void + __throw_out_of_range_fmt(const char*, ...) + { std::__terminate(); } + + __attribute__((__noreturn__)) inline void + __throw_runtime_error(const char*) + { std::__terminate(); } + + __attribute__((__noreturn__)) inline void + __throw_overflow_error(const char*) + { std::__terminate(); } + +#endif // HOSTED + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functexcept.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functexcept.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e67277c3481ad2e6545c82c2ddd26c27f7739a5f GIT binary patch literal 14661 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functional_hash.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functional_hash.h new file mode 100644 index 0000000..e84c9ee --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functional_hash.h @@ -0,0 +1,308 @@ +// functional_hash.h header -*- C++ -*- + +// Copyright (C) 2007-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/functional_hash.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{functional} + */ + +#ifndef _FUNCTIONAL_HASH_H +#define _FUNCTIONAL_HASH_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** @defgroup hashes Hashes + * @ingroup functors + * + * Hashing functors taking a variable type and returning a @c std::size_t. + * + * @{ + */ + + template + struct __hash_base + { +#if __cplusplus < 202002L + typedef _Result result_type _GLIBCXX17_DEPRECATED; + typedef _Arg argument_type _GLIBCXX17_DEPRECATED; +#endif + }; + +#if ! _GLIBCXX_INLINE_VERSION + // Some std::hash specializations inherit this for ABI compatibility reasons. + template struct __hash_empty_base { }; +#endif + + /// Primary class template hash. + template + struct hash; + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++14-extensions" + template + constexpr bool __is_hash_enabled_for = false; + + template + constexpr bool + __is_hash_enabled_for<_Tp, + __void_t()(declval<_Tp>()))>> + = true; +#pragma GCC diagnostic pop + + // Helper struct for defining disabled specializations of std::hash. + template + struct __hash_not_enabled + { + __hash_not_enabled(__hash_not_enabled&&) = delete; + ~__hash_not_enabled() = delete; + }; + + // Helper struct for hash with enum types. + template + struct __hash_enum : public __hash_base + { + size_t + operator()(_Tp __val) const noexcept + { + using __type = typename underlying_type<_Tp>::type; + return hash<__type>{}(static_cast<__type>(__val)); + } + }; + + /// Primary class template hash, usable for enum types only. + template + struct hash + : __conditional_t<__is_enum(_Tp), __hash_enum<_Tp>, __hash_not_enabled<_Tp>> + { }; + + /// Partial specializations for pointer types. + template + struct hash<_Tp*> : public __hash_base + { + size_t + operator()(_Tp* __p) const noexcept + { return reinterpret_cast(__p); } + }; + + // Explicit specializations for integer types. +#define _Cxx_hashtable_define_trivial_hash(_Tp) \ + template<> \ + struct hash<_Tp> : public __hash_base \ + { \ + size_t \ + operator()(_Tp __val) const noexcept \ + { return static_cast(__val); } \ + }; + + /// Explicit specialization for bool. + _Cxx_hashtable_define_trivial_hash(bool) + + /// Explicit specialization for char. + _Cxx_hashtable_define_trivial_hash(char) + + /// Explicit specialization for signed char. + _Cxx_hashtable_define_trivial_hash(signed char) + + /// Explicit specialization for unsigned char. + _Cxx_hashtable_define_trivial_hash(unsigned char) + + /// Explicit specialization for wchar_t. + _Cxx_hashtable_define_trivial_hash(wchar_t) + +#ifdef _GLIBCXX_USE_CHAR8_T + /// Explicit specialization for char8_t. + _Cxx_hashtable_define_trivial_hash(char8_t) +#endif + + /// Explicit specialization for char16_t. + _Cxx_hashtable_define_trivial_hash(char16_t) + + /// Explicit specialization for char32_t. + _Cxx_hashtable_define_trivial_hash(char32_t) + + /// Explicit specialization for short. + _Cxx_hashtable_define_trivial_hash(short) + + /// Explicit specialization for int. + _Cxx_hashtable_define_trivial_hash(int) + + /// Explicit specialization for long. + _Cxx_hashtable_define_trivial_hash(long) + + /// Explicit specialization for long long. + _Cxx_hashtable_define_trivial_hash(long long) + + /// Explicit specialization for unsigned short. + _Cxx_hashtable_define_trivial_hash(unsigned short) + + /// Explicit specialization for unsigned int. + _Cxx_hashtable_define_trivial_hash(unsigned int) + + /// Explicit specialization for unsigned long. + _Cxx_hashtable_define_trivial_hash(unsigned long) + + /// Explicit specialization for unsigned long long. + _Cxx_hashtable_define_trivial_hash(unsigned long long) + +#ifdef __GLIBCXX_TYPE_INT_N_0 + __extension__ + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0) + __extension__ + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0 unsigned) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_1 + __extension__ + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_1) + __extension__ + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_1 unsigned) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_2 + __extension__ + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_2) + __extension__ + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_2 unsigned) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_3 + __extension__ + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_3) + __extension__ + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_3 unsigned) +#endif + +#undef _Cxx_hashtable_define_trivial_hash + + struct _Hash_impl + { + static size_t + hash(const void* __ptr, size_t __clength, + size_t __seed = static_cast(0xc70f6907UL)) + { return _Hash_bytes(__ptr, __clength, __seed); } + + template + static size_t + hash(const _Tp& __val) + { return hash(&__val, sizeof(__val)); } + + template + static size_t + __hash_combine(const _Tp& __val, size_t __hash) + { return hash(&__val, sizeof(__val), __hash); } + }; + + // A hash function similar to FNV-1a (see PR59406 for how it differs). + struct _Fnv_hash_impl + { + static size_t + hash(const void* __ptr, size_t __clength, + size_t __seed = static_cast(2166136261UL)) + { return _Fnv_hash_bytes(__ptr, __clength, __seed); } + + template + static size_t + hash(const _Tp& __val) + { return hash(&__val, sizeof(__val)); } + + template + static size_t + __hash_combine(const _Tp& __val, size_t __hash) + { return hash(&__val, sizeof(__val), __hash); } + }; + + /// Specialization for float. + template<> + struct hash : public __hash_base + { + size_t + operator()(float __val) const noexcept + { + // 0 and -0 both hash to zero. + return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0; + } + }; + + /// Specialization for double. + template<> + struct hash : public __hash_base + { + size_t + operator()(double __val) const noexcept + { + // 0 and -0 both hash to zero. + return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0; + } + }; + + /// Specialization for long double. + template<> + struct hash + : public __hash_base + { + _GLIBCXX_PURE size_t + operator()(long double __val) const noexcept; + }; + +#if __cplusplus >= 201703L + template<> + struct hash : public __hash_base + { + size_t + operator()(nullptr_t) const noexcept + { return 0; } + }; +#endif + + /// @} group hashes + + /** Hint about performance of hash functions. + * + * If a given hash function object is not fast, the hash-based containers + * will cache the hash code. + * The default behavior is to consider that hashers are fast unless specified + * otherwise. + * + * Users can specialize this for their own hash functions in order to force + * caching of hash codes in unordered containers. Specializing this trait + * affects the ABI of the unordered containers, so use it carefully. + */ + template + struct __is_fast_hash : public std::true_type + { }; + + template<> + struct __is_fast_hash> : public std::false_type + { }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // _FUNCTIONAL_HASH_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functional_hash.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@functional_hash.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3909e2bd557d26ee68d9ceeb384f07b2be515d9b GIT binary patch literal 27530 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 T1tI=M?wkHSj%)@<24)5TsI}0d literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@hash_bytes.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@hash_bytes.h new file mode 100644 index 0000000..8266b50 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@hash_bytes.h @@ -0,0 +1,61 @@ +// Declarations for hash functions. -*- C++ -*- + +// Copyright (C) 2010-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/hash_bytes.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{functional} + */ + +#ifndef _HASH_BYTES_H +#define _HASH_BYTES_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +namespace std +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Hash function implementation for the nontrivial specialization. + // All of them are based on a primitive that hashes a pointer to a + // byte array. The actual hash algorithm is not guaranteed to stay + // the same from release to release -- it may be updated or tuned to + // improve hash quality or speed. + size_t + _Hash_bytes(const void* __ptr, size_t __len, size_t __seed); + + // A similar hash primitive, using the FNV hash algorithm. This + // algorithm is guaranteed to stay the same from release to release. + // (although it might not produce the same values on different + // machines.) + size_t + _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed); + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@hash_bytes.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@hash_bytes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..cbefc6eb7132335725661de937b99414c3d1b58d GIT binary patch literal 13711 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 QPC!nJ2}J5K{0Ei(0A6xnwg3PC literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@invoke.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@invoke.h new file mode 100644 index 0000000..dc26cfb --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@invoke.h @@ -0,0 +1,162 @@ +// Implementation of INVOKE -*- C++ -*- + +// Copyright (C) 2016-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/invoke.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{functional} + */ + +#ifndef _GLIBCXX_INVOKE_H +#define _GLIBCXX_INVOKE_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus < 201103L +# include +#else + +#include +#include // forward + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup utilities + * @{ + */ + + // Used by __invoke_impl instead of std::forward<_Tp> so that a + // reference_wrapper is converted to an lvalue-reference. + template::type> + constexpr _Up&& + __invfwd(typename remove_reference<_Tp>::type& __t) noexcept + { return static_cast<_Up&&>(__t); } + + template + constexpr _Res + __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args) + { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } + + template + constexpr _Res + __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t, + _Args&&... __args) + { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); } + + template + constexpr _Res + __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t, + _Args&&... __args) + { + return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...); + } + + template + constexpr _Res + __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t) + { return __invfwd<_Tp>(__t).*__f; } + + template + constexpr _Res + __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t) + { return (*std::forward<_Tp>(__t)).*__f; } + + /// Invoke a callable object. + template + constexpr typename __invoke_result<_Callable, _Args...>::type + __invoke(_Callable&& __fn, _Args&&... __args) + noexcept(__is_nothrow_invocable<_Callable, _Args...>::value) + { + using __result = __invoke_result<_Callable, _Args...>; + using __type = typename __result::type; + using __tag = typename __result::__invoke_type; + return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), + std::forward<_Args>(__args)...); + } + +#if __cplusplus >= 201703L + // INVOKE: Invoke a callable object and convert the result to R. + template + constexpr enable_if_t, _Res> + __invoke_r(_Callable&& __fn, _Args&&... __args) + noexcept(is_nothrow_invocable_r_v<_Res, _Callable, _Args...>) + { + using __result = __invoke_result<_Callable, _Args...>; + using __type = typename __result::type; + using __tag = typename __result::__invoke_type; + if constexpr (is_void_v<_Res>) + std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), + std::forward<_Args>(__args)...); + else + return std::__invoke_impl<__type>(__tag{}, + std::forward<_Callable>(__fn), + std::forward<_Args>(__args)...); + } +#else // C++11 or C++14 + // This is a non-SFINAE-friendly std::invoke_r(fn, args...) for C++11/14. + // It's used in std::function, std::bind, and std::packaged_task. Only + // std::function is constrained on is_invocable_r, but that is checked on + // construction so doesn't need to be checked again when calling __invoke_r. + // Consequently, these __invoke_r overloads do not check for invocable + // arguments, nor check that the invoke result is convertible to R. + + // INVOKE: Invoke a callable object and convert the result to R. + template + constexpr __enable_if_t::value, _Res> + __invoke_r(_Callable&& __fn, _Args&&... __args) + { + using __result = __invoke_result<_Callable, _Args...>; + using __type = typename __result::type; +#if __has_builtin(__reference_converts_from_temporary) + static_assert(!__reference_converts_from_temporary(_Res, __type), + "INVOKE must not create a dangling reference"); +#endif + using __tag = typename __result::__invoke_type; + return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), + std::forward<_Args>(__args)...); + } + + // INVOKE when R is cv void + template + _GLIBCXX14_CONSTEXPR __enable_if_t::value, _Res> + __invoke_r(_Callable&& __fn, _Args&&... __args) + { + using __result = __invoke_result<_Callable, _Args...>; + using __type = typename __result::type; + using __tag = typename __result::__invoke_type; + std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), + std::forward<_Args>(__args)...); + } +#endif // C++11 or C++14 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif // _GLIBCXX_INVOKE_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@invoke.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@invoke.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..53d0821e2218d2a4b3a589b750842709eb6e44f9 GIT binary patch literal 19729 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ios_base.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ios_base.h new file mode 100644 index 0000000..b94b2cd --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ios_base.h @@ -0,0 +1,1157 @@ +// Iostreams base classes -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/ios_base.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{ios} + */ + +// +// ISO C++ 14882: 27.4 Iostreams base classes +// + +#ifndef _IOS_BASE_H +#define _IOS_BASE_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include +#include + +#if __cplusplus < 201103L +# include +#else +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // The following definitions of bitmask types are enums, not ints, + // as permitted (but not required) in the standard, in order to provide + // better type safety in iostream calls. A side effect is that in C++98 + // expressions involving them are not compile-time constants. + enum _Ios_Fmtflags + { + _S_boolalpha = 1L << 0, + _S_dec = 1L << 1, + _S_fixed = 1L << 2, + _S_hex = 1L << 3, + _S_internal = 1L << 4, + _S_left = 1L << 5, + _S_oct = 1L << 6, + _S_right = 1L << 7, + _S_scientific = 1L << 8, + _S_showbase = 1L << 9, + _S_showpoint = 1L << 10, + _S_showpos = 1L << 11, + _S_skipws = 1L << 12, + _S_unitbuf = 1L << 13, + _S_uppercase = 1L << 14, + _S_adjustfield = _S_left | _S_right | _S_internal, + _S_basefield = _S_dec | _S_oct | _S_hex, + _S_floatfield = _S_scientific | _S_fixed, + _S_ios_fmtflags_end = 1L << 16, + _S_ios_fmtflags_max = __INT_MAX__, + _S_ios_fmtflags_min = ~__INT_MAX__ + }; + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Fmtflags + operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b) _GLIBCXX_NOTHROW + { return _Ios_Fmtflags(static_cast(__a) & static_cast(__b)); } + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Fmtflags + operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b) _GLIBCXX_NOTHROW + { return _Ios_Fmtflags(static_cast(__a) | static_cast(__b)); } + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Fmtflags + operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b) _GLIBCXX_NOTHROW + { return _Ios_Fmtflags(static_cast(__a) ^ static_cast(__b)); } + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Fmtflags + operator~(_Ios_Fmtflags __a) _GLIBCXX_NOTHROW + { return _Ios_Fmtflags(~static_cast(__a)); } + + _GLIBCXX14_CONSTEXPR + inline const _Ios_Fmtflags& + operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) _GLIBCXX_NOTHROW + { return __a = __a | __b; } + + _GLIBCXX14_CONSTEXPR + inline const _Ios_Fmtflags& + operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) _GLIBCXX_NOTHROW + { return __a = __a & __b; } + + _GLIBCXX14_CONSTEXPR + inline const _Ios_Fmtflags& + operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) _GLIBCXX_NOTHROW + { return __a = __a ^ __b; } + + // If std::ios_base::noreplace isn't available, -Wswitch should ignore + // _S_noreplace. +#ifdef __glibcxx_ios_noreplace +#define _NOREPLACE_UNUSED +#else +#define _NOREPLACE_UNUSED __attribute__((__unused__)) +#endif + + enum __attribute__((__flag_enum__)) _Ios_Openmode + { + _S_app = 1L << 0, + _S_ate = 1L << 1, + _S_bin = 1L << 2, + _S_in = 1L << 3, + _S_out = 1L << 4, + _S_trunc = 1L << 5, + _S_noreplace _NOREPLACE_UNUSED = 1L << 6, + _S_ios_openmode_end __attribute__((__unused__)) = 1L << 16, + _S_ios_openmode_max __attribute__((__unused__)) = __INT_MAX__, + _S_ios_openmode_min __attribute__((__unused__)) = ~__INT_MAX__ + }; + +#undef _NOREPLACE_UNUSED + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Openmode + operator&(_Ios_Openmode __a, _Ios_Openmode __b) _GLIBCXX_NOTHROW + { return _Ios_Openmode(static_cast(__a) & static_cast(__b)); } + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Openmode + operator|(_Ios_Openmode __a, _Ios_Openmode __b) _GLIBCXX_NOTHROW + { return _Ios_Openmode(static_cast(__a) | static_cast(__b)); } + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Openmode + operator^(_Ios_Openmode __a, _Ios_Openmode __b) _GLIBCXX_NOTHROW + { return _Ios_Openmode(static_cast(__a) ^ static_cast(__b)); } + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Openmode + operator~(_Ios_Openmode __a) _GLIBCXX_NOTHROW + { return _Ios_Openmode(~static_cast(__a)); } + + _GLIBCXX14_CONSTEXPR + inline const _Ios_Openmode& + operator|=(_Ios_Openmode& __a, _Ios_Openmode __b) _GLIBCXX_NOTHROW + { return __a = __a | __b; } + + _GLIBCXX14_CONSTEXPR + inline const _Ios_Openmode& + operator&=(_Ios_Openmode& __a, _Ios_Openmode __b) _GLIBCXX_NOTHROW + { return __a = __a & __b; } + + _GLIBCXX14_CONSTEXPR + inline const _Ios_Openmode& + operator^=(_Ios_Openmode& __a, _Ios_Openmode __b) _GLIBCXX_NOTHROW + { return __a = __a ^ __b; } + + + enum _Ios_Iostate + { + _S_goodbit = 0, + _S_badbit = 1L << 0, + _S_eofbit = 1L << 1, + _S_failbit = 1L << 2, + _S_ios_iostate_end = 1L << 16, + _S_ios_iostate_max = __INT_MAX__, + _S_ios_iostate_min = ~__INT_MAX__ + }; + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Iostate + operator&(_Ios_Iostate __a, _Ios_Iostate __b) _GLIBCXX_NOTHROW + { return _Ios_Iostate(static_cast(__a) & static_cast(__b)); } + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Iostate + operator|(_Ios_Iostate __a, _Ios_Iostate __b) _GLIBCXX_NOTHROW + { return _Ios_Iostate(static_cast(__a) | static_cast(__b)); } + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Iostate + operator^(_Ios_Iostate __a, _Ios_Iostate __b) _GLIBCXX_NOTHROW + { return _Ios_Iostate(static_cast(__a) ^ static_cast(__b)); } + + _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR + inline _Ios_Iostate + operator~(_Ios_Iostate __a) _GLIBCXX_NOTHROW + { return _Ios_Iostate(~static_cast(__a)); } + + _GLIBCXX14_CONSTEXPR + inline const _Ios_Iostate& + operator|=(_Ios_Iostate& __a, _Ios_Iostate __b) _GLIBCXX_NOTHROW + { return __a = __a | __b; } + + _GLIBCXX14_CONSTEXPR + inline const _Ios_Iostate& + operator&=(_Ios_Iostate& __a, _Ios_Iostate __b) _GLIBCXX_NOTHROW + { return __a = __a & __b; } + + _GLIBCXX14_CONSTEXPR + inline const _Ios_Iostate& + operator^=(_Ios_Iostate& __a, _Ios_Iostate __b) _GLIBCXX_NOTHROW + { return __a = __a ^ __b; } + + + enum _Ios_Seekdir + { + _S_beg = 0, + _S_cur = _GLIBCXX_STDIO_SEEK_CUR, + _S_end = _GLIBCXX_STDIO_SEEK_END, + _S_ios_seekdir_end = 1L << 16 + }; + +#if __cplusplus >= 201103L + /// I/O error code + enum class io_errc { stream = 1 }; + + template <> struct is_error_code_enum : public true_type { }; + + [[__nodiscard__, __gnu__::__const__]] + const error_category& + iostream_category() noexcept; + + [[__nodiscard__]] + inline error_code + make_error_code(io_errc __e) noexcept + { return error_code(static_cast(__e), iostream_category()); } + + [[__nodiscard__]] + inline error_condition + make_error_condition(io_errc __e) noexcept + { return error_condition(static_cast(__e), iostream_category()); } +#endif + + // 27.4.2 Class ios_base + /** + * @brief The base of the I/O class hierarchy. + * @ingroup io + * + * This class defines everything that can be defined about I/O that does + * not depend on the type of characters being input or output. Most + * people will only see @c ios_base when they need to specify the full + * name of the various I/O flags (e.g., the openmodes). + */ + class ios_base + { +#if _GLIBCXX_USE_CXX11_ABI +#if __cplusplus < 201103L + // Type that is layout-compatible with std::system_error + struct system_error : std::runtime_error + { + // Type that is layout-compatible with std::error_code + struct error_code + { + error_code() { } + private: + int _M_value; + const void* _M_cat; + } _M_code; + }; +#endif +#endif + public: + + /** + * @brief These are thrown to indicate problems with io. + * @ingroup exceptions + * + * 27.4.2.1.1 Class ios_base::failure + */ +#if _GLIBCXX_USE_CXX11_ABI + class _GLIBCXX_ABI_TAG_CXX11 failure : public system_error + { + public: + explicit + failure(const string& __str); + +#if __cplusplus >= 201103L + explicit + failure(const string&, const error_code&); + + explicit + failure(const char*, const error_code& = io_errc::stream); +#endif + + virtual + ~failure() throw(); + + virtual const char* + what() const throw(); + }; +#else + class failure : public exception + { + public: + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 48. Use of non-existent exception constructor + explicit + failure(const string& __str) throw(); + + // This declaration is not useless: + // http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Vague-Linkage.html + virtual + ~failure() throw(); + + virtual const char* + what() const throw(); + +#if __cplusplus >= 201103L + // Define the new members required by C++11, + // even though the error_code cannot be stored. + + explicit + failure(const string& __s, const error_code&) noexcept + : failure(__s) + { } + + explicit + failure(const char* __s, const error_code& = error_code{}) + : failure(string(__s)) + { } + + // Stand-in for system_error::code() but returning by value. + error_code code() const noexcept { return error_code{}; } +#endif + + private: + string _M_msg; + }; +#endif + + // 27.4.2.1.2 Type ios_base::fmtflags + /** + * @brief This is a bitmask type. + * + * @c @a _Ios_Fmtflags is implementation-defined, but it is valid to + * perform bitwise operations on these values and expect the Right + * Thing to happen. Defined objects of type fmtflags are: + * - boolalpha + * - dec + * - fixed + * - hex + * - internal + * - left + * - oct + * - right + * - scientific + * - showbase + * - showpoint + * - showpos + * - skipws + * - unitbuf + * - uppercase + * - adjustfield + * - basefield + * - floatfield + */ + typedef _Ios_Fmtflags fmtflags; + + /// Insert/extract @c bool in alphabetic rather than numeric format. + static const fmtflags boolalpha = _S_boolalpha; + + /// Converts integer input or generates integer output in decimal base. + static const fmtflags dec = _S_dec; + + /// Generate floating-point output in fixed-point notation. + static const fmtflags fixed = _S_fixed; + + /// Converts integer input or generates integer output in hexadecimal base. + static const fmtflags hex = _S_hex; + + /// Adds fill characters at a designated internal point in certain + /// generated output, or identical to @c right if no such point is + /// designated. + static const fmtflags internal = _S_internal; + + /// Adds fill characters on the right (final positions) of certain + /// generated output. (I.e., the thing you print is flush left.) + static const fmtflags left = _S_left; + + /// Converts integer input or generates integer output in octal base. + static const fmtflags oct = _S_oct; + + /// Adds fill characters on the left (initial positions) of certain + /// generated output. (I.e., the thing you print is flush right.) + static const fmtflags right = _S_right; + + /// Generates floating-point output in scientific notation. + static const fmtflags scientific = _S_scientific; + + /// Generates a prefix indicating the numeric base of generated integer + /// output. + static const fmtflags showbase = _S_showbase; + + /// Generates a decimal-point character unconditionally in generated + /// floating-point output. + static const fmtflags showpoint = _S_showpoint; + + /// Generates a + sign in non-negative generated numeric output. + static const fmtflags showpos = _S_showpos; + + /// Skips leading white space before certain input operations. + static const fmtflags skipws = _S_skipws; + + /// Flushes output after each output operation. + static const fmtflags unitbuf = _S_unitbuf; + + /// Replaces certain lowercase letters with their uppercase equivalents + /// in generated output. + static const fmtflags uppercase = _S_uppercase; + + /// A mask of left|right|internal. Useful for the 2-arg form of @c setf. + static const fmtflags adjustfield = _S_adjustfield; + + /// A mask of dec|oct|hex. Useful for the 2-arg form of @c setf. + static const fmtflags basefield = _S_basefield; + + /// A mask of scientific|fixed. Useful for the 2-arg form of @c setf. + static const fmtflags floatfield = _S_floatfield; + + // 27.4.2.1.3 Type ios_base::iostate + /** + * @brief This is a bitmask type. + * + * @c @a _Ios_Iostate is implementation-defined, but it is valid to + * perform bitwise operations on these values and expect the Right + * Thing to happen. Defined objects of type iostate are: + * - badbit + * - eofbit + * - failbit + * - goodbit + */ + typedef _Ios_Iostate iostate; + + /// Indicates a loss of integrity in an input or output sequence (such + /// as an irrecoverable read error from a file). + static const iostate badbit = _S_badbit; + + /// Indicates that an input operation reached the end of an input sequence. + static const iostate eofbit = _S_eofbit; + + /// Indicates that an input operation failed to read the expected + /// characters, or that an output operation failed to generate the + /// desired characters. + static const iostate failbit = _S_failbit; + + /// Indicates all is well. + static const iostate goodbit = _S_goodbit; + + // 27.4.2.1.4 Type ios_base::openmode + /** + * @brief This is a bitmask type. + * + * @c @a _Ios_Openmode is implementation-defined, but it is valid to + * perform bitwise operations on these values and expect the Right + * Thing to happen. Defined objects of type openmode are: + * - app + * - ate + * - binary + * - in + * - out + * - trunc + */ + typedef _Ios_Openmode openmode; + + /// Seek to end before each write. + static const openmode app = _S_app; + + /// Open and seek to end immediately after opening. + static const openmode ate = _S_ate; + + /// Perform input and output in binary mode (as opposed to text mode). + /// This is probably not what you think it is; see + /// https://gcc.gnu.org/onlinedocs/libstdc++/manual/fstreams.html#std.io.filestreams.binary + static const openmode binary = _S_bin; + + /// Open for input. Default for @c ifstream and fstream. + static const openmode in = _S_in; + + /// Open for output. Default for @c ofstream and fstream. + static const openmode out = _S_out; + + /// Truncate an existing stream when opening. Default for @c ofstream. + static const openmode trunc = _S_trunc; + + static const openmode __noreplace = _S_noreplace; + +#ifdef __glibcxx_ios_noreplace // C++ >= 23 && HOSTED + /// Open a file in exclusive mode. + static const openmode noreplace = _S_noreplace; +#endif + + // 27.4.2.1.5 Type ios_base::seekdir + /** + * @brief This is an enumerated type. + * + * @c @a _Ios_Seekdir is implementation-defined. Defined values + * of type seekdir are: + * - beg + * - cur, equivalent to @c SEEK_CUR in the C standard library. + * - end, equivalent to @c SEEK_END in the C standard library. + */ + typedef _Ios_Seekdir seekdir; + + /// Request a seek relative to the beginning of the stream. + static const seekdir beg = _S_beg; + + /// Request a seek relative to the current position within the sequence. + static const seekdir cur = _S_cur; + + /// Request a seek relative to the current end of the sequence. + static const seekdir end = _S_end; + +#if __cplusplus <= 201402L + // Annex D.6 (removed in C++17) + typedef int io_state + _GLIBCXX_DEPRECATED_SUGGEST("std::iostate"); + typedef int open_mode + _GLIBCXX_DEPRECATED_SUGGEST("std::openmode"); + typedef int seek_dir + _GLIBCXX_DEPRECATED_SUGGEST("std::seekdir"); + + typedef std::streampos streampos + _GLIBCXX_DEPRECATED_SUGGEST("std::streampos"); + typedef std::streamoff streamoff + _GLIBCXX_DEPRECATED_SUGGEST("std::streamoff"); +#endif + + // Callbacks; + /** + * @brief The set of events that may be passed to an event callback. + * + * erase_event is used during ~ios() and copyfmt(). imbue_event is used + * during imbue(). copyfmt_event is used during copyfmt(). + */ + enum event + { + erase_event, + imbue_event, + copyfmt_event + }; + + /** + * @brief The type of an event callback function. + * @param __e One of the members of the event enum. + * @param __b Reference to the ios_base object. + * @param __i The integer provided when the callback was registered. + * + * Event callbacks are user defined functions that get called during + * several ios_base and basic_ios functions, specifically imbue(), + * copyfmt(), and ~ios(). + */ + typedef void (*event_callback) (event __e, ios_base& __b, int __i); + + /** + * @brief Add the callback __fn with parameter __index. + * @param __fn The function to add. + * @param __index The integer to pass to the function when invoked. + * + * Registers a function as an event callback with an integer parameter to + * be passed to the function when invoked. Multiple copies of the + * function are allowed. If there are multiple callbacks, they are + * invoked in the order they were registered. + */ + void + register_callback(event_callback __fn, int __index); + + protected: + streamsize _M_precision; + streamsize _M_width; + fmtflags _M_flags; + iostate _M_exception; + iostate _M_streambuf_state; + + // 27.4.2.6 Members for callbacks + // 27.4.2.6 ios_base callbacks + struct _Callback_list + { + // Data Members + _Callback_list* _M_next; + ios_base::event_callback _M_fn; + int _M_index; + _Atomic_word _M_refcount; // 0 means one reference. + + _Callback_list(ios_base::event_callback __fn, int __index, + _Callback_list* __cb) + : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { } + + void + _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } + + // 0 => OK to delete. + int + _M_remove_reference() + { + // Be race-detector-friendly. For more info see bits/c++config. + _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount); + int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1); + if (__res == 0) + { + _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount); + } + return __res; + } + }; + + _Callback_list* _M_callbacks; + + void + _M_call_callbacks(event __ev) throw(); + + void + _M_dispose_callbacks(void) throw(); + + // 27.4.2.5 Members for iword/pword storage + struct _Words + { + void* _M_pword; + long _M_iword; + _Words() : _M_pword(0), _M_iword(0) { } + }; + + // Only for failed iword/pword calls. + _Words _M_word_zero; + + // Guaranteed storage. + // The first 5 iword and pword slots are reserved for internal use. + enum { _S_local_word_size = 8 }; + _Words _M_local_word[_S_local_word_size]; + + // Allocated storage. + int _M_word_size; + _Words* _M_word; + + _Words& + _M_grow_words(int __index, bool __iword); + + // Members for locale and locale caching. + locale _M_ios_locale; + + void + _M_init() throw(); + + public: + + // 27.4.2.1.6 Class ios_base::Init + // Used to initialize standard streams. In theory, g++ could use + // -finit-priority to order this stuff correctly without going + // through these machinations. + class Init + { + friend class ios_base; + public: + Init(); + ~Init(); + +#if __cplusplus >= 201103L + Init(const Init&) = default; + Init& operator=(const Init&) = default; +#endif + + private: + static _Atomic_word _S_refcount; + static bool _S_synced_with_stdio; + }; + + // [27.4.2.2] fmtflags state functions + /** + * @brief Access to format flags. + * @return The format control flags for both input and output. + */ + _GLIBCXX_NODISCARD + fmtflags + flags() const + { return _M_flags; } + + /** + * @brief Setting new format flags all at once. + * @param __fmtfl The new flags to set. + * @return The previous format control flags. + * + * This function overwrites all the format flags with @a __fmtfl. + */ + fmtflags + flags(fmtflags __fmtfl) + { + fmtflags __old = _M_flags; + _M_flags = __fmtfl; + return __old; + } + + /** + * @brief Setting new format flags. + * @param __fmtfl Additional flags to set. + * @return The previous format control flags. + * + * This function sets additional flags in format control. Flags that + * were previously set remain set. + */ + fmtflags + setf(fmtflags __fmtfl) + { + fmtflags __old = _M_flags; + _M_flags |= __fmtfl; + return __old; + } + + /** + * @brief Setting new format flags. + * @param __fmtfl Additional flags to set. + * @param __mask The flags mask for @a fmtfl. + * @return The previous format control flags. + * + * This function clears @a mask in the format flags, then sets + * @a fmtfl @c & @a mask. An example mask is @c ios_base::adjustfield. + */ + fmtflags + setf(fmtflags __fmtfl, fmtflags __mask) + { + fmtflags __old = _M_flags; + _M_flags &= ~__mask; + _M_flags |= (__fmtfl & __mask); + return __old; + } + + /** + * @brief Clearing format flags. + * @param __mask The flags to unset. + * + * This function clears @a __mask in the format flags. + */ + void + unsetf(fmtflags __mask) + { _M_flags &= ~__mask; } + + /** + * @brief Flags access. + * @return The precision to generate on certain output operations. + * + * Be careful if you try to give a definition of @a precision here; see + * DR 189. + */ + _GLIBCXX_NODISCARD + streamsize + precision() const + { return _M_precision; } + + /** + * @brief Changing flags. + * @param __prec The new precision value. + * @return The previous value of precision(). + */ + streamsize + precision(streamsize __prec) + { + streamsize __old = _M_precision; + _M_precision = __prec; + return __old; + } + + /** + * @brief Flags access. + * @return The minimum field width to generate on output operations. + * + * Minimum field width refers to the number of characters. + */ + _GLIBCXX_NODISCARD + streamsize + width() const + { return _M_width; } + + /** + * @brief Changing flags. + * @param __wide The new width value. + * @return The previous value of width(). + */ + streamsize + width(streamsize __wide) + { + streamsize __old = _M_width; + _M_width = __wide; + return __old; + } + + // [27.4.2.4] ios_base static members + /** + * @brief Interaction with the standard C I/O objects. + * @param __sync Whether to synchronize or not. + * @return True if the standard streams were previously synchronized. + * + * The synchronization referred to is @e only that between the standard + * C facilities (e.g., stdout) and the standard C++ objects (e.g., + * cout). User-declared streams are unaffected. See + * https://gcc.gnu.org/onlinedocs/libstdc++/manual/fstreams.html#std.io.filestreams.binary + */ + static bool + sync_with_stdio(bool __sync = true); + + // [27.4.2.3] ios_base locale functions + /** + * @brief Setting a new locale. + * @param __loc The new locale. + * @return The previous locale. + * + * Sets the new locale for this stream, and then invokes each callback + * with imbue_event. + */ + locale + imbue(const locale& __loc) throw(); + + /** + * @brief Locale access + * @return A copy of the current locale. + * + * If @c imbue(loc) has previously been called, then this function + * returns @c loc. Otherwise, it returns a copy of @c std::locale(), + * the global C++ locale. + */ + _GLIBCXX_NODISCARD + locale + getloc() const + { return _M_ios_locale; } + + /** + * @brief Locale access + * @return A reference to the current locale. + * + * Like getloc above, but returns a reference instead of + * generating a copy. + */ + const locale& + _M_getloc() const + { return _M_ios_locale; } + + // [27.4.2.5] ios_base storage functions + /** + * @brief Access to unique indices. + * @return An integer different from all previous calls. + * + * This function returns a unique integer every time it is called. It + * can be used for any purpose, but is primarily intended to be a unique + * index for the iword and pword functions. The expectation is that an + * application calls xalloc in order to obtain an index in the iword and + * pword arrays that can be used without fear of conflict. + * + * The implementation maintains a static variable that is incremented and + * returned on each invocation. xalloc is guaranteed to return an index + * that is safe to use in the iword and pword arrays. + */ + static int + xalloc() throw(); + + /** + * @brief Access to integer array. + * @param __ix Index into the array. + * @return A reference to an integer associated with the index. + * + * The iword function provides access to an array of integers that can be + * used for any purpose. The array grows as required to hold the + * supplied index. All integers in the array are initialized to 0. + * + * The implementation reserves several indices. You should use xalloc to + * obtain an index that is safe to use. Also note that since the array + * can grow dynamically, it is not safe to hold onto the reference. + */ + long& + iword(int __ix) + { + _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size) + ? _M_word[__ix] : _M_grow_words(__ix, true); + return __word._M_iword; + } + + /** + * @brief Access to void pointer array. + * @param __ix Index into the array. + * @return A reference to a void* associated with the index. + * + * The pword function provides access to an array of pointers that can be + * used for any purpose. The array grows as required to hold the + * supplied index. All pointers in the array are initialized to 0. + * + * The implementation reserves several indices. You should use xalloc to + * obtain an index that is safe to use. Also note that since the array + * can grow dynamically, it is not safe to hold onto the reference. + */ + void*& + pword(int __ix) + { + _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size) + ? _M_word[__ix] : _M_grow_words(__ix, false); + return __word._M_pword; + } + + // Destructor + /** + * Invokes each callback with erase_event. Destroys local storage. + * + * Note that the ios_base object for the standard streams never gets + * destroyed. As a result, any callbacks registered with the standard + * streams will not get invoked with erase_event (unless copyfmt is + * used). + */ + virtual ~ios_base(); + + protected: + ios_base() throw (); + +#if __cplusplus < 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 50. Copy constructor and assignment operator of ios_base + private: + ios_base(const ios_base&); + + ios_base& + operator=(const ios_base&); +#else + public: + ios_base(const ios_base&) = delete; + + ios_base& + operator=(const ios_base&) = delete; + + protected: + void + _M_move(ios_base&) noexcept; + + void + _M_swap(ios_base& __rhs) noexcept; +#endif + }; + + // [27.4.5.1] fmtflags manipulators + /// Calls base.setf(ios_base::boolalpha). + inline ios_base& + boolalpha(ios_base& __base) + { + __base.setf(ios_base::boolalpha); + return __base; + } + + /// Calls base.unsetf(ios_base::boolalpha). + inline ios_base& + noboolalpha(ios_base& __base) + { + __base.unsetf(ios_base::boolalpha); + return __base; + } + + /// Calls base.setf(ios_base::showbase). + inline ios_base& + showbase(ios_base& __base) + { + __base.setf(ios_base::showbase); + return __base; + } + + /// Calls base.unsetf(ios_base::showbase). + inline ios_base& + noshowbase(ios_base& __base) + { + __base.unsetf(ios_base::showbase); + return __base; + } + + /// Calls base.setf(ios_base::showpoint). + inline ios_base& + showpoint(ios_base& __base) + { + __base.setf(ios_base::showpoint); + return __base; + } + + /// Calls base.unsetf(ios_base::showpoint). + inline ios_base& + noshowpoint(ios_base& __base) + { + __base.unsetf(ios_base::showpoint); + return __base; + } + + /// Calls base.setf(ios_base::showpos). + inline ios_base& + showpos(ios_base& __base) + { + __base.setf(ios_base::showpos); + return __base; + } + + /// Calls base.unsetf(ios_base::showpos). + inline ios_base& + noshowpos(ios_base& __base) + { + __base.unsetf(ios_base::showpos); + return __base; + } + + /// Calls base.setf(ios_base::skipws). + inline ios_base& + skipws(ios_base& __base) + { + __base.setf(ios_base::skipws); + return __base; + } + + /// Calls base.unsetf(ios_base::skipws). + inline ios_base& + noskipws(ios_base& __base) + { + __base.unsetf(ios_base::skipws); + return __base; + } + + /// Calls base.setf(ios_base::uppercase). + inline ios_base& + uppercase(ios_base& __base) + { + __base.setf(ios_base::uppercase); + return __base; + } + + /// Calls base.unsetf(ios_base::uppercase). + inline ios_base& + nouppercase(ios_base& __base) + { + __base.unsetf(ios_base::uppercase); + return __base; + } + + /// Calls base.setf(ios_base::unitbuf). + inline ios_base& + unitbuf(ios_base& __base) + { + __base.setf(ios_base::unitbuf); + return __base; + } + + /// Calls base.unsetf(ios_base::unitbuf). + inline ios_base& + nounitbuf(ios_base& __base) + { + __base.unsetf(ios_base::unitbuf); + return __base; + } + + // [27.4.5.2] adjustfield manipulators + /// Calls base.setf(ios_base::internal, ios_base::adjustfield). + inline ios_base& + internal(ios_base& __base) + { + __base.setf(ios_base::internal, ios_base::adjustfield); + return __base; + } + + /// Calls base.setf(ios_base::left, ios_base::adjustfield). + inline ios_base& + left(ios_base& __base) + { + __base.setf(ios_base::left, ios_base::adjustfield); + return __base; + } + + /// Calls base.setf(ios_base::right, ios_base::adjustfield). + inline ios_base& + right(ios_base& __base) + { + __base.setf(ios_base::right, ios_base::adjustfield); + return __base; + } + + // [27.4.5.3] basefield manipulators + /// Calls base.setf(ios_base::dec, ios_base::basefield). + inline ios_base& + dec(ios_base& __base) + { + __base.setf(ios_base::dec, ios_base::basefield); + return __base; + } + + /// Calls base.setf(ios_base::hex, ios_base::basefield). + inline ios_base& + hex(ios_base& __base) + { + __base.setf(ios_base::hex, ios_base::basefield); + return __base; + } + + /// Calls base.setf(ios_base::oct, ios_base::basefield). + inline ios_base& + oct(ios_base& __base) + { + __base.setf(ios_base::oct, ios_base::basefield); + return __base; + } + + // [27.4.5.4] floatfield manipulators + /// Calls base.setf(ios_base::fixed, ios_base::floatfield). + inline ios_base& + fixed(ios_base& __base) + { + __base.setf(ios_base::fixed, ios_base::floatfield); + return __base; + } + + /// Calls base.setf(ios_base::scientific, ios_base::floatfield). + inline ios_base& + scientific(ios_base& __base) + { + __base.setf(ios_base::scientific, ios_base::floatfield); + return __base; + } + +#if __cplusplus >= 201103L + // New C++11 floatfield manipulators + + /// Calls + /// base.setf(ios_base::fixed|ios_base::scientific, ios_base::floatfield) + inline ios_base& + hexfloat(ios_base& __base) + { + __base.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield); + return __base; + } + + /// Calls @c base.unsetf(ios_base::floatfield) + inline ios_base& + defaultfloat(ios_base& __base) + { + __base.unsetf(ios_base::floatfield); + return __base; + } +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _IOS_BASE_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ios_base.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ios_base.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..34a55c6a0d87462b173c0faa4b04200118a2590e GIT binary patch literal 63455 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. + +/** @file bits/istream.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{istream} + */ + +// +// ISO C++ 14882: 27.6.1 Input streams +// + +#ifndef _ISTREAM_TCC +#define _ISTREAM_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + basic_istream<_CharT, _Traits>::sentry:: + sentry(basic_istream<_CharT, _Traits>& __in, bool __noskip) : _M_ok(false) + { + ios_base::iostate __err = ios_base::goodbit; + if (__in.good()) + { + __try + { + if (__in.tie()) + __in.tie()->flush(); + if (!__noskip && bool(__in.flags() & ios_base::skipws)) + { + const __int_type __eof = traits_type::eof(); + __streambuf_type* __sb = __in.rdbuf(); + __int_type __c = __sb->sgetc(); + + const __ctype_type& __ct = __check_facet(__in._M_ctype); + while (!traits_type::eq_int_type(__c, __eof) + && __ct.is(ctype_base::space, + traits_type::to_char_type(__c))) + __c = __sb->snextc(); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 195. Should basic_istream::sentry's constructor ever + // set eofbit? + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + } + } + __catch(__cxxabiv1::__forced_unwind&) + { + __in._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __in._M_setstate(ios_base::badbit); } + } + + if (__in.good() && __err == ios_base::goodbit) + _M_ok = true; + else + { + __err |= ios_base::failbit; + __in.setstate(__err); + } + } + + template + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + _M_extract(_ValueT& __v) + { + sentry __cerb(*this, false); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { +#ifndef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT + const __num_get_type& __ng = __check_facet(this->_M_num_get); +#else + const __num_get_type& __ng + = use_facet<__num_get_type>(this->_M_ios_locale); +#endif + __ng.get(*this, 0, *this, __err, __v); + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + operator>>(short& __n) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 118. basic_istream uses nonexistent num_get member functions. + sentry __cerb(*this, false); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + long __l; +#ifndef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT + const __num_get_type& __ng = __check_facet(this->_M_num_get); +#else + const __num_get_type& __ng + = use_facet<__num_get_type>(this->_M_ios_locale); +#endif + __ng.get(*this, 0, *this, __err, __l); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 696. istream::operator>>(int&) broken. + if (__l < __gnu_cxx::__numeric_traits::__min) + { + __err |= ios_base::failbit; + __n = __gnu_cxx::__numeric_traits::__min; + } + else if (__l > __gnu_cxx::__numeric_traits::__max) + { + __err |= ios_base::failbit; + __n = __gnu_cxx::__numeric_traits::__max; + } + else + __n = short(__l); + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + operator>>(int& __n) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 118. basic_istream uses nonexistent num_get member functions. + sentry __cerb(*this, false); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + long __l; +#ifndef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT + const __num_get_type& __ng = __check_facet(this->_M_num_get); +#else + const __num_get_type& __ng + = use_facet<__num_get_type>(this->_M_ios_locale); +#endif + __ng.get(*this, 0, *this, __err, __l); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 696. istream::operator>>(int&) broken. + if (__l < __gnu_cxx::__numeric_traits::__min) + { + __err |= ios_base::failbit; + __n = __gnu_cxx::__numeric_traits::__min; + } + else if (__l > __gnu_cxx::__numeric_traits::__max) + { + __err |= ios_base::failbit; + __n = __gnu_cxx::__numeric_traits::__max; + } + else + __n = int(__l); + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + operator>>(__streambuf_type* __sbout) + { + ios_base::iostate __err = ios_base::goodbit; + sentry __cerb(*this, false); + if (__cerb && __sbout) + { + __try + { + bool __ineof; + if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof)) + __err |= ios_base::failbit; + if (__ineof) + __err |= ios_base::eofbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::failbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::failbit); } + } + else if (!__sbout) + __err |= ios_base::failbit; + if (__err) + this->setstate(__err); + return *this; + } + + template + typename basic_istream<_CharT, _Traits>::int_type + basic_istream<_CharT, _Traits>:: + get(void) + { + const int_type __eof = traits_type::eof(); + int_type __c = __eof; + _M_gcount = 0; + ios_base::iostate __err = ios_base::goodbit; + sentry __cerb(*this, true); + if (__cerb) + { + __try + { + __c = this->rdbuf()->sbumpc(); + // 27.6.1.1 paragraph 3 + if (!traits_type::eq_int_type(__c, __eof)) + _M_gcount = 1; + else + __err |= ios_base::eofbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + } + if (!_M_gcount) + __err |= ios_base::failbit; + if (__err) + this->setstate(__err); + return __c; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + get(char_type& __c) + { + _M_gcount = 0; + ios_base::iostate __err = ios_base::goodbit; + sentry __cerb(*this, true); + if (__cerb) + { + __try + { + const int_type __cb = this->rdbuf()->sbumpc(); + // 27.6.1.1 paragraph 3 + if (!traits_type::eq_int_type(__cb, traits_type::eof())) + { + _M_gcount = 1; + __c = traits_type::to_char_type(__cb); + } + else + __err |= ios_base::eofbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + } + if (!_M_gcount) + __err |= ios_base::failbit; + if (__err) + this->setstate(__err); + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + get(char_type* __s, streamsize __n, char_type __delim) + { + _M_gcount = 0; + ios_base::iostate __err = ios_base::goodbit; + sentry __cerb(*this, true); + if (__cerb) + { + __try + { + const int_type __idelim = traits_type::to_int_type(__delim); + const int_type __eof = traits_type::eof(); + __streambuf_type* __sb = this->rdbuf(); + int_type __c = __sb->sgetc(); + + while (_M_gcount + 1 < __n + && !traits_type::eq_int_type(__c, __eof) + && !traits_type::eq_int_type(__c, __idelim)) + { + *__s++ = traits_type::to_char_type(__c); + ++_M_gcount; + __c = __sb->snextc(); + } + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + } + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 243. get and getline when sentry reports failure. + if (__n > 0) + *__s = char_type(); + if (!_M_gcount) + __err |= ios_base::failbit; + if (__err) + this->setstate(__err); + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + get(__streambuf_type& __sb, char_type __delim) + { + _M_gcount = 0; + ios_base::iostate __err = ios_base::goodbit; + sentry __cerb(*this, true); + if (__cerb) + { + __try + { + const int_type __idelim = traits_type::to_int_type(__delim); + const int_type __eof = traits_type::eof(); + __streambuf_type* __this_sb = this->rdbuf(); + int_type __c = __this_sb->sgetc(); + char_type __c2 = traits_type::to_char_type(__c); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + unsigned long long __gcount = 0; +#pragma GCC diagnostic pop + + while (!traits_type::eq_int_type(__c, __eof) + && !traits_type::eq_int_type(__c, __idelim) + && !traits_type::eq_int_type(__sb.sputc(__c2), __eof)) + { + ++__gcount; + __c = __this_sb->snextc(); + __c2 = traits_type::to_char_type(__c); + } + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3464. istream::gcount() can overflow + if (__gcount <= __gnu_cxx::__numeric_traits::__max) + _M_gcount = __gcount; + else + _M_gcount = __gnu_cxx::__numeric_traits::__max; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + } + if (!_M_gcount) + __err |= ios_base::failbit; + if (__err) + this->setstate(__err); + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + getline(char_type* __s, streamsize __n, char_type __delim) + { + _M_gcount = 0; + ios_base::iostate __err = ios_base::goodbit; + sentry __cerb(*this, true); + if (__cerb) + { + __try + { + const int_type __idelim = traits_type::to_int_type(__delim); + const int_type __eof = traits_type::eof(); + __streambuf_type* __sb = this->rdbuf(); + int_type __c = __sb->sgetc(); + + while (_M_gcount + 1 < __n + && !traits_type::eq_int_type(__c, __eof) + && !traits_type::eq_int_type(__c, __idelim)) + { + *__s++ = traits_type::to_char_type(__c); + __c = __sb->snextc(); + ++_M_gcount; + } + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + else + { + if (traits_type::eq_int_type(__c, __idelim)) + { + __sb->sbumpc(); + ++_M_gcount; + } + else + __err |= ios_base::failbit; + } + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + } + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 243. get and getline when sentry reports failure. + if (__n > 0) + *__s = char_type(); + if (!_M_gcount) + __err |= ios_base::failbit; + if (__err) + this->setstate(__err); + return *this; + } + + // We provide three overloads, since the first two are much simpler + // than the general case. Also, the latter two can thus adopt the + // same "batchy" strategy used by getline above. + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + ignore(void) + { + _M_gcount = 0; + sentry __cerb(*this, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + const int_type __eof = traits_type::eof(); + __streambuf_type* __sb = this->rdbuf(); + + if (traits_type::eq_int_type(__sb->sbumpc(), __eof)) + __err |= ios_base::eofbit; + else + _M_gcount = 1; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + ignore(streamsize __n) + { + _M_gcount = 0; + sentry __cerb(*this, true); + if (__cerb && __n > 0) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + const int_type __eof = traits_type::eof(); + __streambuf_type* __sb = this->rdbuf(); + int_type __c = __sb->sgetc(); + + // N.B. On LFS-enabled platforms streamsize is still 32 bits + // wide: if we want to implement the standard mandated behavior + // for n == max() (see 27.6.1.3/24) we are at risk of signed + // integer overflow: thus these contortions. Also note that, + // by definition, when more than 2G chars are actually ignored, + // _M_gcount (the return value of gcount, that is) cannot be + // really correct, being unavoidably too small. + bool __large_ignore = false; + while (true) + { + while (_M_gcount < __n + && !traits_type::eq_int_type(__c, __eof)) + { + ++_M_gcount; + __c = __sb->snextc(); + } + if (__n == __gnu_cxx::__numeric_traits::__max + && !traits_type::eq_int_type(__c, __eof)) + { + _M_gcount = + __gnu_cxx::__numeric_traits::__min; + __large_ignore = true; + } + else + break; + } + + if (__n == __gnu_cxx::__numeric_traits::__max) + { + if (__large_ignore) + _M_gcount = __gnu_cxx::__numeric_traits::__max; + + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + } + else if (_M_gcount < __n) + { + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + } + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + ignore(streamsize __n, int_type __delim) + { + _M_gcount = 0; + sentry __cerb(*this, true); + if (__cerb && __n > 0) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + const int_type __eof = traits_type::eof(); + __streambuf_type* __sb = this->rdbuf(); + int_type __c = __sb->sgetc(); + + // See comment above. + bool __large_ignore = false; + while (true) + { + while (_M_gcount < __n + && !traits_type::eq_int_type(__c, __eof) + && !traits_type::eq_int_type(__c, __delim)) + { + ++_M_gcount; + __c = __sb->snextc(); + } + if (__n == __gnu_cxx::__numeric_traits::__max + && !traits_type::eq_int_type(__c, __eof) + && !traits_type::eq_int_type(__c, __delim)) + { + _M_gcount = + __gnu_cxx::__numeric_traits::__min; + __large_ignore = true; + } + else + break; + } + + if (__n == __gnu_cxx::__numeric_traits::__max) + { + if (__large_ignore) + _M_gcount = __gnu_cxx::__numeric_traits::__max; + + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + else + { + if (_M_gcount != __n) + ++_M_gcount; + __sb->sbumpc(); + } + } + else if (_M_gcount < __n) // implies __c == __delim or EOF + { + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + else + { + ++_M_gcount; + __sb->sbumpc(); + } + } + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + typename basic_istream<_CharT, _Traits>::int_type + basic_istream<_CharT, _Traits>:: + peek(void) + { + int_type __c = traits_type::eof(); + _M_gcount = 0; + sentry __cerb(*this, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + __c = this->rdbuf()->sgetc(); + if (traits_type::eq_int_type(__c, traits_type::eof())) + __err |= ios_base::eofbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return __c; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + read(char_type* __s, streamsize __n) + { + _M_gcount = 0; + sentry __cerb(*this, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + _M_gcount = this->rdbuf()->sgetn(__s, __n); + if (_M_gcount != __n) + __err |= (ios_base::eofbit | ios_base::failbit); + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + streamsize + basic_istream<_CharT, _Traits>:: + readsome(char_type* __s, streamsize __n) + { + _M_gcount = 0; + sentry __cerb(*this, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + // Cannot compare int_type with streamsize generically. + const streamsize __num = this->rdbuf()->in_avail(); + if (__num > 0) + _M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n)); + else if (__num == -1) + __err |= ios_base::eofbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return _M_gcount; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + putback(char_type __c) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 60. What is a formatted input function? + _M_gcount = 0; + // Clear eofbit per N3168. + this->clear(this->rdstate() & ~ios_base::eofbit); + sentry __cerb(*this, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + const int_type __eof = traits_type::eof(); + __streambuf_type* __sb = this->rdbuf(); + if (!__sb + || traits_type::eq_int_type(__sb->sputbackc(__c), __eof)) + __err |= ios_base::badbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + unget(void) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 60. What is a formatted input function? + _M_gcount = 0; + // Clear eofbit per N3168. + this->clear(this->rdstate() & ~ios_base::eofbit); + sentry __cerb(*this, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + const int_type __eof = traits_type::eof(); + __streambuf_type* __sb = this->rdbuf(); + if (!__sb + || traits_type::eq_int_type(__sb->sungetc(), __eof)) + __err |= ios_base::badbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + int + basic_istream<_CharT, _Traits>:: + sync(void) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR60. Do not change _M_gcount. + int __ret = -1; + sentry __cerb(*this, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + __streambuf_type* __sb = this->rdbuf(); + if (__sb) + { + if (__sb->pubsync() == -1) + __err |= ios_base::badbit; + else + __ret = 0; + } + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return __ret; + } + + template + typename basic_istream<_CharT, _Traits>::pos_type + basic_istream<_CharT, _Traits>:: + tellg(void) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR60. Do not change _M_gcount. + pos_type __ret = pos_type(-1); + sentry __cerb(*this, true); + if (__cerb) + { + __try + { + if (!this->fail()) + __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, + ios_base::in); + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + } + return __ret; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + seekg(pos_type __pos) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR60. Do not change _M_gcount. + // Clear eofbit per N3168. + this->clear(this->rdstate() & ~ios_base::eofbit); + sentry __cerb(*this, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + if (!this->fail()) + { + // 136. seekp, seekg setting wrong streams? + const pos_type __p = this->rdbuf()->pubseekpos(__pos, + ios_base::in); + + // 129. Need error indication from seekp() and seekg() + if (__p == pos_type(off_type(-1))) + __err |= ios_base::failbit; + } + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + basic_istream<_CharT, _Traits>& + basic_istream<_CharT, _Traits>:: + seekg(off_type __off, ios_base::seekdir __dir) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR60. Do not change _M_gcount. + // Clear eofbit per N3168. + this->clear(this->rdstate() & ~ios_base::eofbit); + sentry __cerb(*this, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + if (!this->fail()) + { + // 136. seekp, seekg setting wrong streams? + const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, + ios_base::in); + + // 129. Need error indication from seekp() and seekg() + if (__p == pos_type(off_type(-1))) + __err |= ios_base::failbit; + } + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + // 27.6.1.2.3 Character extraction templates + template + basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c) + { + typedef basic_istream<_CharT, _Traits> __istream_type; + typedef typename __istream_type::int_type __int_type; + + typename __istream_type::sentry __cerb(__in, false); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + const __int_type __cb = __in.rdbuf()->sbumpc(); + if (!_Traits::eq_int_type(__cb, _Traits::eof())) + __c = _Traits::to_char_type(__cb); + else + __err |= (ios_base::eofbit | ios_base::failbit); + } + __catch(__cxxabiv1::__forced_unwind&) + { + __in._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __in._M_setstate(ios_base::badbit); } + if (__err) + __in.setstate(__err); + } + return __in; + } + + template + void + __istream_extract(basic_istream<_CharT, _Traits>& __in, _CharT* __s, + streamsize __num) + { + typedef basic_istream<_CharT, _Traits> __istream_type; + typedef basic_streambuf<_CharT, _Traits> __streambuf_type; + typedef typename _Traits::int_type int_type; + typedef _CharT char_type; + typedef ctype<_CharT> __ctype_type; + + streamsize __extracted = 0; + ios_base::iostate __err = ios_base::goodbit; + typename __istream_type::sentry __cerb(__in, false); + if (__cerb) + { + __try + { + // Figure out how many characters to extract. + streamsize __width = __in.width(); + if (0 < __width && __width < __num) + __num = __width; + + const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); + + const int_type __eof = _Traits::eof(); + __streambuf_type* __sb = __in.rdbuf(); + int_type __c = __sb->sgetc(); + + while (__extracted < __num - 1 + && !_Traits::eq_int_type(__c, __eof) + && !__ct.is(ctype_base::space, + _Traits::to_char_type(__c))) + { + *__s++ = _Traits::to_char_type(__c); + ++__extracted; + __c = __sb->snextc(); + } + + if (__extracted < __num - 1 + && _Traits::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 68. Extractors for char* should store null at end + *__s = char_type(); + __in.width(0); + } + __catch(__cxxabiv1::__forced_unwind&) + { + __in._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __in._M_setstate(ios_base::badbit); } + } + if (!__extracted) + __err |= ios_base::failbit; + if (__err) + __in.setstate(__err); + } + + // 27.6.1.4 Standard basic_istream manipulators + template + basic_istream<_CharT, _Traits>& + ws(basic_istream<_CharT, _Traits>& __in) + { + typedef basic_istream<_CharT, _Traits> __istream_type; + typedef basic_streambuf<_CharT, _Traits> __streambuf_type; + typedef typename __istream_type::int_type __int_type; + typedef ctype<_CharT> __ctype_type; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 451. behavior of std::ws + typename __istream_type::sentry __cerb(__in, true); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); + const __int_type __eof = _Traits::eof(); + __streambuf_type* __sb = __in.rdbuf(); + __int_type __c = __sb->sgetc(); + + while (true) + { + if (_Traits::eq_int_type(__c, __eof)) + { + __err = ios_base::eofbit; + break; + } + if (!__ct.is(ctype_base::space, _Traits::to_char_type(__c))) + break; + __c = __sb->snextc(); + } + } + __catch (const __cxxabiv1::__forced_unwind&) + { + __in._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch (...) + { + __in._M_setstate(ios_base::badbit); + } + if (__err) + __in.setstate(__err); + } + return __in; + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template +#pragma GCC diagnostic ignored "-Wlong-long" + extern template class basic_istream; + extern template istream& ws(istream&); + extern template istream& operator>>(istream&, char&); + extern template istream& operator>>(istream&, unsigned char&); + extern template istream& operator>>(istream&, signed char&); + + extern template istream& istream::_M_extract(unsigned short&); + extern template istream& istream::_M_extract(unsigned int&); + extern template istream& istream::_M_extract(long&); + extern template istream& istream::_M_extract(unsigned long&); + extern template istream& istream::_M_extract(bool&); +#ifdef _GLIBCXX_USE_LONG_LONG +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + extern template istream& istream::_M_extract(long long&); + extern template istream& istream::_M_extract(unsigned long long&); +#pragma GCC diagnostic pop +#endif + extern template istream& istream::_M_extract(float&); + extern template istream& istream::_M_extract(double&); + extern template istream& istream::_M_extract(long double&); + extern template istream& istream::_M_extract(void*&); + + extern template class basic_iostream; + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class basic_istream; + extern template wistream& ws(wistream&); + extern template wistream& operator>>(wistream&, wchar_t&); + extern template void __istream_extract(wistream&, wchar_t*, streamsize); + + extern template wistream& wistream::_M_extract(unsigned short&); + extern template wistream& wistream::_M_extract(unsigned int&); + extern template wistream& wistream::_M_extract(long&); + extern template wistream& wistream::_M_extract(unsigned long&); + extern template wistream& wistream::_M_extract(bool&); +#ifdef _GLIBCXX_USE_LONG_LONG + extern template wistream& wistream::_M_extract(long long&); + extern template wistream& wistream::_M_extract(unsigned long long&); +#endif + extern template wistream& wistream::_M_extract(float&); + extern template wistream& wistream::_M_extract(double&); + extern template wistream& wistream::_M_extract(long double&); + extern template wistream& wistream::_M_extract(void*&); + + extern template class basic_iostream; +#endif +#pragma GCC diagnostic pop +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@istream.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@istream.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..9b28457e366d1798eb7a4c997a800b4566eda3a6 GIT binary patch literal 71883 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

    KMsO{K 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

    PXITUo&dpcphfz#G#*DVxzL#i@ja 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.h new file mode 100644 index 0000000..a759b7d --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.h @@ -0,0 +1,898 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/locale_classes.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.1 Locales +// + +#ifndef _LOCALE_CLASSES_H +#define _LOCALE_CLASSES_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include +#include + +#ifdef __glibcxx_text_encoding +#include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // 22.1.1 Class locale + /** + * @brief Container class for localization functionality. + * @ingroup locales + * + * The locale class is first a class wrapper for C library locales. It is + * also an extensible container for user-defined localization. A locale is + * a collection of facets that implement various localization features such + * as money, time, and number printing. + * + * Constructing C++ locales does not change the C library locale. + * + * This library supports efficient construction and copying of locales + * through a reference counting implementation of the locale class. + */ + class locale + { + public: + // Types: + /// Definition of locale::category. + typedef int category; + + // Forward decls and friends: + class facet; + class id; + class _Impl; + + friend class facet; + friend class _Impl; + + template + friend bool + has_facet(const locale&) throw(); + + template + friend const _Facet& + use_facet(const locale&); + + template + friend const _Facet* + __try_use_facet(const locale&) _GLIBCXX_NOTHROW; + + template + friend struct __use_cache; + + ///@{ + /** + * @brief Category values. + * + * The standard category values are none, ctype, numeric, collate, time, + * monetary, and messages. They form a bitmask that supports union and + * intersection. The category all is the union of these values. + * + * NB: Order must match _S_facet_categories definition in locale.cc + */ + static const category none = 0; + static const category ctype = 1L << 0; + static const category numeric = 1L << 1; + static const category collate = 1L << 2; + static const category time = 1L << 3; + static const category monetary = 1L << 4; + static const category messages = 1L << 5; + static const category all = (ctype | numeric | collate | + time | monetary | messages); + ///@} + + // Construct/copy/destroy: + + /** + * @brief Default constructor. + * + * Constructs a copy of the global locale. If no locale has been + * explicitly set, this is the C locale. + */ + locale() throw(); + + /** + * @brief Copy constructor. + * + * Constructs a copy of @a other. + * + * @param __other The locale to copy. + */ + locale(const locale& __other) throw(); + + /** + * @brief Named locale constructor. + * + * Constructs a copy of the named C library locale. + * + * @param __s Name of the locale to construct. + * @throw std::runtime_error if __s is null or an undefined locale. + */ + explicit + locale(const char* __s); + + /** + * @brief Construct locale with facets from another locale. + * + * Constructs a copy of the locale @a base. The facets specified by @a + * cat are replaced with those from the locale named by @a s. If base is + * named, this locale instance will also be named. + * + * @param __base The locale to copy. + * @param __s Name of the locale to use facets from. + * @param __cat Set of categories defining the facets to use from __s. + * @throw std::runtime_error if __s is null or an undefined locale. + */ + locale(const locale& __base, const char* __s, category __cat); + +#if __cplusplus >= 201103L + /** + * @brief Named locale constructor. + * + * Constructs a copy of the named C library locale. + * + * @param __s Name of the locale to construct. + * @throw std::runtime_error if __s is an undefined locale. + */ + explicit + locale(const std::string& __s) : locale(__s.c_str()) { } + + /** + * @brief Construct locale with facets from another locale. + * + * Constructs a copy of the locale @a base. The facets specified by @a + * cat are replaced with those from the locale named by @a s. If base is + * named, this locale instance will also be named. + * + * @param __base The locale to copy. + * @param __s Name of the locale to use facets from. + * @param __cat Set of categories defining the facets to use from __s. + * @throw std::runtime_error if __s is an undefined locale. + */ + locale(const locale& __base, const std::string& __s, category __cat) + : locale(__base, __s.c_str(), __cat) { } +#endif + + /** + * @brief Construct locale with facets from another locale. + * + * Constructs a copy of the locale @a base. The facets specified by @a + * cat are replaced with those from the locale @a add. If @a base and @a + * add are named, this locale instance will also be named. + * + * @param __base The locale to copy. + * @param __add The locale to use facets from. + * @param __cat Set of categories defining the facets to use from add. + */ + locale(const locale& __base, const locale& __add, category __cat); + + /** + * @brief Construct locale with another facet. + * + * Constructs a copy of the locale @a __other. The facet @a __f + * is added to @a __other, replacing an existing facet of type + * Facet if there is one. If @a __f is null, this locale is a + * copy of @a __other. + * + * @param __other The locale to copy. + * @param __f The facet to add in. + */ + template + locale(const locale& __other, _Facet* __f); + + /// Locale destructor. + ~locale() throw(); + + /** + * @brief Assignment operator. + * + * Set this locale to be a copy of @a other. + * + * @param __other The locale to copy. + * @return A reference to this locale. + */ + const locale& + operator=(const locale& __other) throw(); + + /** + * @brief Construct locale with another facet. + * + * Constructs and returns a new copy of this locale. Adds or replaces an + * existing facet of type Facet from the locale @a other into the new + * locale. + * + * @tparam _Facet The facet type to copy from other + * @param __other The locale to copy from. + * @return Newly constructed locale. + * @throw std::runtime_error if __other has no facet of type _Facet. + */ + template + _GLIBCXX_NODISCARD + locale + combine(const locale& __other) const; + + // Locale operations: + /** + * @brief Return locale name. + * @return Locale name or "*" if unnamed. + */ + _GLIBCXX_NODISCARD _GLIBCXX_DEFAULT_ABI_TAG + string + name() const; + +#ifdef __glibcxx_text_encoding +# if __CHAR_BIT__ == 8 + text_encoding + encoding() const; +# else + text_encoding + encoding() const = delete; +# endif +#endif + + /** + * @brief Locale equality. + * + * @param __other The locale to compare against. + * @return True if other and this refer to the same locale instance, are + * copies, or have the same name. False otherwise. + */ + _GLIBCXX_NODISCARD + bool + operator==(const locale& __other) const throw(); + +#if __cpp_impl_three_way_comparison < 201907L + /** + * @brief Locale inequality. + * + * @param __other The locale to compare against. + * @return ! (*this == __other) + */ + _GLIBCXX_NODISCARD + bool + operator!=(const locale& __other) const throw() + { return !(this->operator==(__other)); } +#endif + + /** + * @brief Compare two strings according to collate. + * + * Template operator to compare two strings using the compare function of + * the collate facet in this locale. One use is to provide the locale to + * the sort function. For example, a vector v of strings could be sorted + * according to locale loc by doing: + * @code + * std::sort(v.begin(), v.end(), loc); + * @endcode + * + * @param __s1 First string to compare. + * @param __s2 Second string to compare. + * @return True if collate<_Char> facet compares __s1 < __s2, else false. + */ + template + _GLIBCXX_NODISCARD + bool + operator()(const basic_string<_Char, _Traits, _Alloc>& __s1, + const basic_string<_Char, _Traits, _Alloc>& __s2) const; + + // Global locale objects: + /** + * @brief Set global locale + * + * This function sets the global locale to the argument and returns a + * copy of the previous global locale. If the argument has a name, it + * will also call std::setlocale(LC_ALL, loc.name()). + * + * @param __loc The new locale to make global. + * @return Copy of the old global locale. + */ + static locale + global(const locale& __loc); + + /** + * @brief Return reference to the C locale. + */ + _GLIBCXX_NODISCARD + static const locale& + classic(); + + private: + // The (shared) implementation + _Impl* _M_impl; + + // The "C" reference locale + static _Impl* _S_classic; + + // Current global locale + static _Impl* _S_global; + + // Names of underlying locale categories. + // NB: locale::global() has to know how to modify all the + // underlying categories, not just the ones required by the C++ + // standard. + static const char* const* const _S_categories; + + // Number of standard categories. For C++, these categories are + // collate, ctype, monetary, numeric, time, and messages. These + // directly correspond to ISO C99 macros LC_COLLATE, LC_CTYPE, + // LC_MONETARY, LC_NUMERIC, and LC_TIME. In addition, POSIX (IEEE + // 1003.1-2001) specifies LC_MESSAGES. + // In addition to the standard categories, the underlying + // operating system is allowed to define extra LC_* + // macros. For GNU systems, the following are also valid: + // LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, + // and LC_IDENTIFICATION. + enum { _S_categories_size = 6 + _GLIBCXX_NUM_CATEGORIES }; + +#ifdef __GTHREADS + static __gthread_once_t _S_once; +#endif + + explicit + locale(_Impl*) throw(); + + static void + _S_initialize(); + + static void + _S_initialize_once() throw(); + + static category + _S_normalize_category(category); + + void + _M_coalesce(const locale& __base, const locale& __add, category __cat); + +#if _GLIBCXX_USE_CXX11_ABI + static const id* const _S_twinned_facets[]; +#endif + }; + +#if __cpp_lib_type_trait_variable_templates // C++ >= 17 + template + constexpr bool __is_facet = is_base_of_v; + template + constexpr bool __is_facet = false; +#endif + + // 22.1.1.1.2 Class locale::facet + /** + * @brief Localization functionality base class. + * @ingroup locales + * + * The facet class is the base class for a localization feature, such as + * money, time, and number printing. It provides common support for facets + * and reference management. + * + * Facets may not be copied or assigned. + */ + class locale::facet + { + private: + friend class locale; + friend class locale::_Impl; + + mutable _Atomic_word _M_refcount; + + // Contains data from the underlying "C" library for the classic locale. + static __c_locale _S_c_locale; + + // String literal for the name of the classic locale. + static const char _S_c_name[2]; + +#ifdef __GTHREADS + static __gthread_once_t _S_once; +#endif + + static void + _S_initialize_once(); + + protected: + /** + * @brief Facet constructor. + * + * This is the constructor provided by the standard. If refs is 0, the + * facet is destroyed when the last referencing locale is destroyed. + * Otherwise the facet will never be destroyed. + * + * @param __refs The initial value for reference count. + */ + explicit + facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0) + { } + + /// Facet destructor. + virtual + ~facet(); + + static void + _S_create_c_locale(__c_locale& __cloc, const char* __s, + __c_locale __old = 0); + + static __c_locale + _S_clone_c_locale(__c_locale& __cloc) throw(); + + static void + _S_destroy_c_locale(__c_locale& __cloc); + + static __c_locale + _S_lc_ctype_c_locale(__c_locale __cloc, const char* __s); + + // Returns data from the underlying "C" library data for the + // classic locale. + static __c_locale + _S_get_c_locale(); + + _GLIBCXX_CONST static const char* + _S_get_c_name() throw(); + +#if __cplusplus < 201103L + private: + facet(const facet&); // Not defined. + + facet& + operator=(const facet&); // Not defined. +#else + facet(const facet&) = delete; + + facet& + operator=(const facet&) = delete; +#endif + + private: + void + _M_add_reference() const throw() + { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } + + void + _M_remove_reference() const throw() + { + // Be race-detector-friendly. For more info see bits/c++config. + _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount); + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) + { + _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount); + __try + { delete this; } + __catch(...) + { } + } + } + + const facet* _M_sso_shim(const id*) const; + const facet* _M_cow_shim(const id*) const; + + protected: + class __shim; // For internal use only. + }; + + + // 22.1.1.1.3 Class locale::id + /** + * @brief Facet ID class. + * @ingroup locales + * + * The ID class provides facets with an index used to identify them. + * Every facet class must define a public static member locale::id, or be + * derived from a facet that provides this member, otherwise the facet + * cannot be used in a locale. The locale::id ensures that each class + * type gets a unique identifier. + */ + class locale::id + { + private: + friend class locale; + friend class locale::_Impl; + + template + friend const _Facet& + use_facet(const locale&); + + template + friend bool + has_facet(const locale&) throw(); + + template + friend const _Facet* + __try_use_facet(const locale&) _GLIBCXX_NOTHROW; + + // NB: There is no accessor for _M_index because it may be used + // before the constructor is run; the effect of calling a member + // function (even an inline) would be undefined. + mutable size_t _M_index; + + // Last id number assigned. + static _Atomic_word _S_refcount; + + void + operator=(const id&); // Not defined. + + id(const id&); // Not defined. + + public: + // NB: This class is always a static data member, and thus can be + // counted on to be zero-initialized. + /// Constructor. + id() { } + + size_t + _M_id() const throw(); + }; + + + // Implementation object for locale. + class locale::_Impl + { + public: + // Friends. + friend class locale; + friend class locale::facet; + + template + friend bool + has_facet(const locale&) throw(); + + template + friend const _Facet& + use_facet(const locale&); + + template + friend const _Facet* + __try_use_facet(const locale&) _GLIBCXX_NOTHROW; + + template + friend struct __use_cache; + + private: + // Data Members. + _Atomic_word _M_refcount; + const facet** _M_facets; + size_t _M_facets_size; + const facet** _M_caches; + char** _M_names; + static const locale::id* const _S_id_ctype[]; + static const locale::id* const _S_id_numeric[]; + static const locale::id* const _S_id_collate[]; + static const locale::id* const _S_id_time[]; + static const locale::id* const _S_id_monetary[]; + static const locale::id* const _S_id_messages[]; + static const locale::id* const* const _S_facet_categories[]; + + void + _M_add_reference() throw() + { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } + + void + _M_remove_reference() throw() + { + // Be race-detector-friendly. For more info see bits/c++config. + _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount); + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) + { + _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount); + __try + { delete this; } + __catch(...) + { } + } + } + + _Impl(const _Impl&, size_t); + _Impl(const char*, size_t); + _Impl(size_t) throw(); + + ~_Impl() throw(); + + _Impl(const _Impl&); // Not defined. + + void + operator=(const _Impl&); // Not defined. + + bool + _M_check_same_name() + { + bool __ret = true; + if (_M_names[1]) + // We must actually compare all the _M_names: can be all equal! + for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i) + __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0; + return __ret; + } + + void + _M_replace_categories(const _Impl*, category); + + void + _M_replace_category(const _Impl*, const locale::id* const*); + + void + _M_replace_facet(const _Impl*, const locale::id*); + + void + _M_install_facet(const locale::id*, const facet*); + + template + void + _M_init_facet(_Facet* __facet) + { _M_install_facet(&_Facet::id, __facet); } + + template + void + _M_init_facet_unchecked(_Facet* __facet) + { + __facet->_M_add_reference(); + _M_facets[_Facet::id._M_id()] = __facet; + } + + void + _M_install_cache(const facet*, size_t); + + void _M_init_extra(facet**); + void _M_init_extra(void*, void*, const char*, const char*); + +#ifdef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT + void _M_init_extra_ldbl128(bool); +#endif + }; + + + /** + * @brief Facet for localized string comparison. + * + * This facet encapsulates the code to compare strings in a localized + * manner. + * + * The collate template uses protected virtual functions to provide + * the actual results. The public accessors forward the call to + * the virtual functions. These virtual functions are hooks for + * developers to implement the behavior they require from the + * collate facet. + */ + template + class _GLIBCXX_NAMESPACE_CXX11 collate : public locale::facet + { + public: + // Types: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef basic_string<_CharT> string_type; + ///@} + + protected: + // Underlying "C" library locale information saved from + // initialization, needed by collate_byname as well. + __c_locale _M_c_locale_collate; + + public: + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + collate(size_t __refs = 0) + : facet(__refs), _M_c_locale_collate(_S_get_c_locale()) + { } + + /** + * @brief Internal constructor. Not for general use. + * + * This is a constructor for use by the library itself to set up new + * locales. + * + * @param __cloc The C locale. + * @param __refs Passed to the base facet class. + */ + explicit + collate(__c_locale __cloc, size_t __refs = 0) + : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc)) + { } + + /** + * @brief Compare two strings. + * + * This function compares two strings and returns the result by calling + * collate::do_compare(). + * + * @param __lo1 Start of string 1. + * @param __hi1 End of string 1. + * @param __lo2 Start of string 2. + * @param __hi2 End of string 2. + * @return 1 if string1 > string2, -1 if string1 < string2, else 0. + */ + int + compare(const _CharT* __lo1, const _CharT* __hi1, + const _CharT* __lo2, const _CharT* __hi2) const + { return this->do_compare(__lo1, __hi1, __lo2, __hi2); } + + /** + * @brief Transform string to comparable form. + * + * This function is a wrapper for strxfrm functionality. It takes the + * input string and returns a modified string that can be directly + * compared to other transformed strings. In the C locale, this + * function just returns a copy of the input string. In some other + * locales, it may replace two chars with one, change a char for + * another, etc. It does so by returning collate::do_transform(). + * + * @param __lo Start of string. + * @param __hi End of string. + * @return Transformed string_type. + */ + string_type + transform(const _CharT* __lo, const _CharT* __hi) const + { return this->do_transform(__lo, __hi); } + + /** + * @brief Return hash of a string. + * + * This function computes and returns a hash on the input string. It + * does so by returning collate::do_hash(). + * + * @param __lo Start of string. + * @param __hi End of string. + * @return Hash value. + */ + long + hash(const _CharT* __lo, const _CharT* __hi) const + { return this->do_hash(__lo, __hi); } + + // Used to abstract out _CharT bits in virtual member functions, below. + int + _M_compare(const _CharT*, const _CharT*) const throw(); + + size_t + _M_transform(_CharT*, const _CharT*, size_t) const throw(); + + protected: + /// Destructor. + virtual + ~collate() + { _S_destroy_c_locale(_M_c_locale_collate); } + + /** + * @brief Compare two strings. + * + * This function is a hook for derived classes to change the value + * returned. @see compare(). + * + * @param __lo1 Start of string 1. + * @param __hi1 End of string 1. + * @param __lo2 Start of string 2. + * @param __hi2 End of string 2. + * @return 1 if string1 > string2, -1 if string1 < string2, else 0. + */ + virtual int + do_compare(const _CharT* __lo1, const _CharT* __hi1, + const _CharT* __lo2, const _CharT* __hi2) const; + + /** + * @brief Transform string to comparable form. + * + * This function is a hook for derived classes to change the value + * returned. + * + * @param __lo Start. + * @param __hi End. + * @return transformed string. + */ + virtual string_type + do_transform(const _CharT* __lo, const _CharT* __hi) const; + + /** + * @brief Return hash of a string. + * + * This function computes and returns a hash on the input string. This + * function is a hook for derived classes to change the value returned. + * + * @param __lo Start of string. + * @param __hi End of string. + * @return Hash value. + */ + virtual long + do_hash(const _CharT* __lo, const _CharT* __hi) const; + }; + + template + locale::id collate<_CharT>::id; + + // Specializations. + template<> + int + collate::_M_compare(const char*, const char*) const throw(); + + template<> + size_t + collate::_M_transform(char*, const char*, size_t) const throw(); + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + int + collate::_M_compare(const wchar_t*, const wchar_t*) const throw(); + + template<> + size_t + collate::_M_transform(wchar_t*, const wchar_t*, size_t) const throw(); +#endif + + /// class collate_byname [22.2.4.2]. + template + class _GLIBCXX_NAMESPACE_CXX11 collate_byname : public collate<_CharT> + { + public: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef basic_string<_CharT> string_type; + ///@} + + explicit + collate_byname(const char* __s, size_t __refs = 0) + : collate<_CharT>(__refs) + { + if (__builtin_strcmp(__s, "C") != 0 + && __builtin_strcmp(__s, "POSIX") != 0) + { + this->_S_destroy_c_locale(this->_M_c_locale_collate); + this->_S_create_c_locale(this->_M_c_locale_collate, __s); + } + } + +#if __cplusplus >= 201103L + explicit + collate_byname(const string& __s, size_t __refs = 0) + : collate_byname(__s.c_str(), __refs) { } +#endif + + protected: + virtual + ~collate_byname() { } + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +# include + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4e93b1c12a14cdc424b54e29eb096552435e3716 GIT binary patch literal 47026 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 O{oBmw@V6PXQ3L=1_HVWT literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.tcc b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.tcc new file mode 100644 index 0000000..ff1e943 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.tcc @@ -0,0 +1,429 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2007-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/locale_classes.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.1 Locales +// + +#ifndef _LOCALE_CLASSES_TCC +#define _LOCALE_CLASSES_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template +#pragma GCC diagnostic ignored "-Wvariadic-macros" + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + locale:: + locale(const locale& __other, _Facet* __f) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2295. Locale name when the provided Facet is a nullptr + if (__builtin_expect(!__f, 0)) + { + _M_impl = __other._M_impl; + _M_impl->_M_add_reference(); + return; + } + + _M_impl = new _Impl(*__other._M_impl, 1); + + __try + { _M_impl->_M_install_facet(&_Facet::id, __f); } + __catch(...) + { + _M_impl->_M_remove_reference(); + __throw_exception_again; + } + delete [] _M_impl->_M_names[0]; + _M_impl->_M_names[0] = 0; // Unnamed. + } + + template + locale + locale:: + combine(const locale& __other) const + { +#if __cpp_lib_type_trait_variable_templates // C++ >= 17 + static_assert(__is_facet<_Facet>, "Template argument must be a facet"); +#endif + + _Impl* __tmp = new _Impl(*_M_impl, 1); + __try + { + __tmp->_M_replace_facet(__other._M_impl, &_Facet::id); + } + __catch(...) + { + __tmp->_M_remove_reference(); + __throw_exception_again; + } + delete[] __tmp->_M_names[0]; + __tmp->_M_names[0] = 0; // Unnamed. + return locale(__tmp); + } + + template + bool + locale:: + operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1, + const basic_string<_CharT, _Traits, _Alloc>& __s2) const + { + typedef std::collate<_CharT> __collate_type; + const __collate_type& __collate = use_facet<__collate_type>(*this); + return (__collate.compare(__s1.data(), __s1.data() + __s1.length(), + __s2.data(), __s2.data() + __s2.length()) < 0); + } + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + template + inline const _Facet* + __try_use_facet(const locale& __loc) _GLIBCXX_NOTHROW + { + const size_t __i = _Facet::id._M_id(); + const locale::facet** __facets = __loc._M_impl->_M_facets; + + // We know these standard facets are always installed in every locale + // so dynamic_cast always succeeds, just use static_cast instead. +#define _GLIBCXX_STD_FACET(...) \ + if _GLIBCXX_CONSTEXPR (__is_same(const _Facet, const __VA_ARGS__)) \ + return static_cast(__facets[__i]) + + _GLIBCXX_STD_FACET(ctype); + _GLIBCXX_STD_FACET(num_get); + _GLIBCXX_STD_FACET(num_put); + _GLIBCXX_STD_FACET(codecvt); + _GLIBCXX_STD_FACET(collate); + _GLIBCXX_STD_FACET(moneypunct); + _GLIBCXX_STD_FACET(moneypunct); + _GLIBCXX_STD_FACET(money_get); + _GLIBCXX_STD_FACET(money_put); + _GLIBCXX_STD_FACET(numpunct); + _GLIBCXX_STD_FACET(time_get); + _GLIBCXX_STD_FACET(time_put); + _GLIBCXX_STD_FACET(messages); + +#ifdef _GLIBCXX_USE_WCHAR_T + _GLIBCXX_STD_FACET(ctype); + _GLIBCXX_STD_FACET(num_get); + _GLIBCXX_STD_FACET(num_put); + _GLIBCXX_STD_FACET(codecvt); + _GLIBCXX_STD_FACET(collate); + _GLIBCXX_STD_FACET(moneypunct); + _GLIBCXX_STD_FACET(moneypunct); + _GLIBCXX_STD_FACET(money_get); + _GLIBCXX_STD_FACET(money_put); + _GLIBCXX_STD_FACET(numpunct); + _GLIBCXX_STD_FACET(time_get); + _GLIBCXX_STD_FACET(time_put); + _GLIBCXX_STD_FACET(messages); +#endif +#if __cplusplus >= 201103L + _GLIBCXX_STD_FACET(codecvt); + _GLIBCXX_STD_FACET(codecvt); +#endif + +#undef _GLIBCXX_STD_FACET + + if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i]) + return 0; + +#if __cpp_rtti + return dynamic_cast(__facets[__i]); +#else + return static_cast(__facets[__i]); +#endif + } +#pragma GCC diagnostic pop + + /** + * @brief Test for the presence of a facet. + * @ingroup locales + * + * has_facet tests the locale argument for the presence of the facet type + * provided as the template parameter. Facets derived from the facet + * parameter will also return true. + * + * @tparam _Facet The facet type to test the presence of. + * @param __loc The locale to test. + * @return true if @p __loc contains a facet of type _Facet, else false. + */ + template + _GLIBCXX_NODISCARD + inline bool + has_facet(const locale& __loc) _GLIBCXX_USE_NOEXCEPT + { +#if __cplusplus >= 201103L + static_assert(__is_base_of(locale::facet, _Facet), + "template argument must be derived from locale::facet"); +#else + (void) static_cast(static_cast(0)); +#endif + return std::__try_use_facet<_Facet>(__loc) != 0; + } + + /** + * @brief Return a facet. + * @ingroup locales + * + * use_facet looks for and returns a reference to a facet of type Facet + * where Facet is the template parameter. If has_facet(locale) is true, + * there is a suitable facet to return. It throws std::bad_cast if the + * locale doesn't contain a facet of type Facet. + * + * @tparam _Facet The facet type to access. + * @param __loc The locale to use. + * @return Reference to facet of type Facet. + * @throw std::bad_cast if @p __loc doesn't contain a facet of type _Facet. + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdangling-reference" + template + _GLIBCXX_NODISCARD + inline const _Facet& + use_facet(const locale& __loc) + { +#if __cplusplus >= 201103L + static_assert(__is_base_of(locale::facet, _Facet), + "template argument must be derived from locale::facet"); +#else + (void) static_cast(static_cast(0)); +#endif + if (const _Facet* __f = std::__try_use_facet<_Facet>(__loc)) + return *__f; + __throw_bad_cast(); + } +#pragma GCC diagnostic pop + + + // Generic version does nothing. + template + int + collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw () + { return 0; } + + // Generic version does nothing. + template + size_t + collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw () + { return 0; } + + template + int + collate<_CharT>:: + do_compare(const _CharT* __lo1, const _CharT* __hi1, + const _CharT* __lo2, const _CharT* __hi2) const + { + // strcoll assumes zero-terminated strings so we make a copy + // and then put a zero at the end. + const string_type __one(__lo1, __hi1); + const string_type __two(__lo2, __hi2); + + const _CharT* __p = __one.c_str(); + const _CharT* __pend = __one.data() + __one.length(); + const _CharT* __q = __two.c_str(); + const _CharT* __qend = __two.data() + __two.length(); + + // strcoll stops when it sees a nul character so we break + // the strings into zero-terminated substrings and pass those + // to strcoll. + for (;;) + { + const int __res = _M_compare(__p, __q); + if (__res) + return __res; + + __p += char_traits<_CharT>::length(__p); + __q += char_traits<_CharT>::length(__q); + if (__p == __pend && __q == __qend) + return 0; + else if (__p == __pend) + return -1; + else if (__q == __qend) + return 1; + + __p++; + __q++; + } + } + + template + typename collate<_CharT>::string_type + collate<_CharT>:: + do_transform(const _CharT* __lo, const _CharT* __hi) const + { + string_type __ret; + + // strxfrm assumes zero-terminated strings so we make a copy + const string_type __str(__lo, __hi); + + const _CharT* __p = __str.c_str(); + const _CharT* __pend = __str.data() + __str.length(); + + size_t __len = (__hi - __lo) * 2; + + struct _Buf + { + _Buf(size_t __n, void* __buf, int __e) + : _M_c(__buf ? (_CharT*)__buf : new _CharT[__n]), + _M_stackbuf(__buf), + _M_errno(__e) + { } + + ~_Buf() + { + if (_M_c != _M_stackbuf) + delete[] _M_c; + if (errno == 0) + errno = _M_errno; + } + + void _M_realloc(size_t __len) + { + _CharT* __p = new _CharT[__len]; + if (_M_c != _M_stackbuf) + delete[] _M_c; + _M_c = __p; + } + + _CharT* _M_c; + void* const _M_stackbuf; + int _M_errno; + }; + + const size_t __bytes = __len * sizeof(_CharT); + _Buf __buf(__len, __bytes <= 256 ? __builtin_alloca(__bytes) : 0, errno); + errno = 0; + + // strxfrm stops when it sees a nul character so we break + // the string into zero-terminated substrings and pass those + // to strxfrm. + for (;;) + { + // First try a buffer perhaps big enough. + size_t __res = _M_transform(__buf._M_c, __p, __len); + // If the buffer was not large enough, try again with the + // correct size. + if (__res >= __len) + { + if (__builtin_expect(errno, 0)) + { +#if __cpp_exceptions + __throw_system_error(errno); +#else + // std::regex can call this function internally with + // char values that always fail, so we don't want to + // use _GLIBCXX_THROW_OR_ABORT here. + __ret.clear(); + break; +#endif + } + + __len = __res + 1; + __buf._M_realloc(__len); + __res = _M_transform(__buf._M_c, __p, __len); + } + + __ret.append(__buf._M_c, __res); + __p += char_traits<_CharT>::length(__p); + if (__p == __pend) + break; + + __p++; + __ret.push_back(_CharT()); + } + + return __ret; + } + + template + long + collate<_CharT>:: + do_hash(const _CharT* __lo, const _CharT* __hi) const + { + unsigned long __val = 0; + for (; __lo < __hi; ++__lo) + __val = + *__lo + ((__val << 7) + | (__val >> (__gnu_cxx::__numeric_traits:: + __digits - 7))); + return static_cast(__val); + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class collate; + extern template class collate_byname; + + extern template + const collate* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const collate& + use_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class collate; + extern template class collate_byname; + + extern template + const collate* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const collate& + use_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_classes.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..824d1dd72d5d2197e09c95df65369fd7a81592a4 GIT binary patch literal 47232 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. + +/** @file bits/locale_conv.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +#ifndef _LOCALE_CONV_H +#define _LOCALE_CONV_H 1 + +#if __cplusplus < 201103L +# include +#else + +#include +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup locales + * @{ + */ + + template + bool + __do_str_codecvt(const _InChar* __first, const _InChar* __last, + _OutStr& __outstr, const _Codecvt& __cvt, _State& __state, + size_t& __count, _Fn __fn) + { + if (__first == __last) + { + __outstr.clear(); + __count = 0; + return true; + } + + size_t __outchars = 0; + auto __next = __first; + const auto __maxlen = __cvt.max_length() + 1; + + codecvt_base::result __result; + do + { + __outstr.resize(__outstr.size() + (__last - __next) * __maxlen); + auto __outnext = &__outstr.front() + __outchars; + auto const __outlast = &__outstr.back() + 1; + __result = (__cvt.*__fn)(__state, __next, __last, __next, + __outnext, __outlast, __outnext); + __outchars = __outnext - &__outstr.front(); + } + while (__result == codecvt_base::partial && __next != __last + && ptrdiff_t(__outstr.size() - __outchars) < __maxlen); + + if (__result == codecvt_base::error) + { + __count = __next - __first; + return false; + } + + // The codecvt facet will only return noconv when the types are + // the same, so avoid instantiating basic_string::assign otherwise + if _GLIBCXX17_CONSTEXPR (is_same()) + if (__result == codecvt_base::noconv) + { + __outstr.assign(__first, __last); + __count = __last - __first; + return true; + } + + __outstr.resize(__outchars); + __count = __next - __first; + return true; + } + + // Convert narrow character string to wide. + template + inline bool + __str_codecvt_in(const char* __first, const char* __last, + basic_string<_CharT, _Traits, _Alloc>& __outstr, + const codecvt<_CharT, char, _State>& __cvt, + _State& __state, size_t& __count) + { + using _Codecvt = codecvt<_CharT, char, _State>; + using _ConvFn + = codecvt_base::result + (_Codecvt::*)(_State&, const char*, const char*, const char*&, + _CharT*, _CharT*, _CharT*&) const; + _ConvFn __fn = &codecvt<_CharT, char, _State>::in; + return __do_str_codecvt(__first, __last, __outstr, __cvt, __state, + __count, __fn); + } + + // As above, but with no __count parameter + template + inline bool + __str_codecvt_in(const char* __first, const char* __last, + basic_string<_CharT, _Traits, _Alloc>& __outstr, + const codecvt<_CharT, char, _State>& __cvt) + { + _State __state = {}; + size_t __n; + return __str_codecvt_in(__first, __last, __outstr, __cvt, __state, __n); + } + + // As above, but returns false for partial conversion + template + inline bool + __str_codecvt_in_all(const char* __first, const char* __last, + basic_string<_CharT, _Traits, _Alloc>& __outstr, + const codecvt<_CharT, char, _State>& __cvt) + { + _State __state = {}; + size_t __n; + return __str_codecvt_in(__first, __last, __outstr, __cvt, __state, __n) + && (__n == size_t(__last - __first)); + } + + // Convert wide character string to narrow. + template + inline bool + __str_codecvt_out(const _CharT* __first, const _CharT* __last, + basic_string& __outstr, + const codecvt<_CharT, char, _State>& __cvt, + _State& __state, size_t& __count) + { + using _Codecvt = codecvt<_CharT, char, _State>; + using _ConvFn + = codecvt_base::result + (_Codecvt::*)(_State&, const _CharT*, const _CharT*, const _CharT*&, + char*, char*, char*&) const; + _ConvFn __fn = &codecvt<_CharT, char, _State>::out; + return __do_str_codecvt(__first, __last, __outstr, __cvt, __state, + __count, __fn); + } + + // As above, but with no __count parameter + template + inline bool + __str_codecvt_out(const _CharT* __first, const _CharT* __last, + basic_string& __outstr, + const codecvt<_CharT, char, _State>& __cvt) + { + _State __state = {}; + size_t __n; + return __str_codecvt_out(__first, __last, __outstr, __cvt, __state, __n); + } + + // As above, but returns false for partial conversions + template + inline bool + __str_codecvt_out_all(const _CharT* __first, const _CharT* __last, + basic_string& __outstr, + const codecvt<_CharT, char, _State>& __cvt) + { + _State __state = {}; + size_t __n; + return __str_codecvt_out(__first, __last, __outstr, __cvt, __state, __n) + && (__n == size_t(__last - __first)); + } + +#ifdef _GLIBCXX_USE_CHAR8_T + + // Convert wide character string to narrow. + template + inline bool + __str_codecvt_out(const _CharT* __first, const _CharT* __last, + basic_string& __outstr, + const codecvt<_CharT, char8_t, _State>& __cvt, + _State& __state, size_t& __count) + { + using _Codecvt = codecvt<_CharT, char8_t, _State>; + using _ConvFn + = codecvt_base::result + (_Codecvt::*)(_State&, const _CharT*, const _CharT*, const _CharT*&, + char8_t*, char8_t*, char8_t*&) const; + _ConvFn __fn = &codecvt<_CharT, char8_t, _State>::out; + return __do_str_codecvt(__first, __last, __outstr, __cvt, __state, + __count, __fn); + } + + template + inline bool + __str_codecvt_out(const _CharT* __first, const _CharT* __last, + basic_string& __outstr, + const codecvt<_CharT, char8_t, _State>& __cvt) + { + _State __state = {}; + size_t __n; + return __str_codecvt_out(__first, __last, __outstr, __cvt, __state, __n); + } + +#endif // _GLIBCXX_USE_CHAR8_T + + namespace __detail + { + template + struct _Scoped_ptr + { + __attribute__((__nonnull__(2))) + explicit + _Scoped_ptr(_Tp* __ptr) noexcept + : _M_ptr(__ptr) + { } + + _Scoped_ptr(_Tp* __ptr, const char* __msg) + : _M_ptr(__ptr) + { + if (!__ptr) + __throw_logic_error(__msg); + } + + ~_Scoped_ptr() { delete _M_ptr; } + + _Scoped_ptr(const _Scoped_ptr&) = delete; + _Scoped_ptr& operator=(const _Scoped_ptr&) = delete; + + __attribute__((__returns_nonnull__)) + _Tp* operator->() const noexcept { return _M_ptr; } + + _Tp& operator*() const noexcept { return *_M_ptr; } + + private: + _Tp* _M_ptr; + }; + } + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + /// String conversions + template, + typename _Byte_alloc = allocator> + class _GLIBCXX17_DEPRECATED wstring_convert + { + public: + typedef basic_string, _Byte_alloc> byte_string; + typedef basic_string<_Elem, char_traits<_Elem>, _Wide_alloc> wide_string; + typedef typename _Codecvt::state_type state_type; + typedef typename wide_string::traits_type::int_type int_type; + + /// Default constructor. + wstring_convert() : _M_cvt(new _Codecvt()) { } + + /** Constructor. + * + * @param __pcvt The facet to use for conversions. + * + * Takes ownership of @p __pcvt and will delete it in the destructor. + */ + explicit + wstring_convert(_Codecvt* __pcvt) : _M_cvt(__pcvt, "wstring_convert") + { } + + /** Construct with an initial converstion state. + * + * @param __pcvt The facet to use for conversions. + * @param __state Initial conversion state. + * + * Takes ownership of @p __pcvt and will delete it in the destructor. + * The object's conversion state will persist between conversions. + */ + wstring_convert(_Codecvt* __pcvt, state_type __state) + : _M_cvt(__pcvt, "std::wstring_convert"), + _M_state(__state), _M_with_cvtstate(true) + { } + + /** Construct with error strings. + * + * @param __byte_err A string to return on failed conversions. + * @param __wide_err A wide string to return on failed conversions. + */ + explicit + wstring_convert(const byte_string& __byte_err, + const wide_string& __wide_err = wide_string()) + : _M_cvt(new _Codecvt), + _M_byte_err_string(__byte_err), _M_wide_err_string(__wide_err), + _M_with_strings(true) + { } + + ~wstring_convert() = default; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2176. Special members for wstring_convert and wbuffer_convert + wstring_convert(const wstring_convert&) = delete; + wstring_convert& operator=(const wstring_convert&) = delete; + + /// @{ Convert from bytes. + wide_string + from_bytes(char __byte) + { + char __bytes[2] = { __byte }; + return from_bytes(__bytes, __bytes+1); + } + + wide_string + from_bytes(const char* __ptr) + { return from_bytes(__ptr, __ptr+char_traits::length(__ptr)); } + + wide_string + from_bytes(const byte_string& __str) + { + auto __ptr = __str.data(); + return from_bytes(__ptr, __ptr + __str.size()); + } + + wide_string + from_bytes(const char* __first, const char* __last) + { + if (!_M_with_cvtstate) + _M_state = state_type(); + wide_string __out{ _M_wide_err_string.get_allocator() }; + if (__str_codecvt_in(__first, __last, __out, *_M_cvt, _M_state, + _M_count)) + return __out; + if (_M_with_strings) + return _M_wide_err_string; + __throw_range_error("wstring_convert::from_bytes"); + } + /// @} + + /// @{ Convert to bytes. + byte_string + to_bytes(_Elem __wchar) + { + _Elem __wchars[2] = { __wchar }; + return to_bytes(__wchars, __wchars+1); + } + + byte_string + to_bytes(const _Elem* __ptr) + { + return to_bytes(__ptr, __ptr+wide_string::traits_type::length(__ptr)); + } + + byte_string + to_bytes(const wide_string& __wstr) + { + auto __ptr = __wstr.data(); + return to_bytes(__ptr, __ptr + __wstr.size()); + } + + byte_string + to_bytes(const _Elem* __first, const _Elem* __last) + { + if (!_M_with_cvtstate) + _M_state = state_type(); + byte_string __out{ _M_byte_err_string.get_allocator() }; + if (__str_codecvt_out(__first, __last, __out, *_M_cvt, _M_state, + _M_count)) + return __out; + if (_M_with_strings) + return _M_byte_err_string; + __throw_range_error("wstring_convert::to_bytes"); + } + /// @} + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2174. wstring_convert::converted() should be noexcept + /// The number of elements successfully converted in the last conversion. + size_t converted() const noexcept { return _M_count; } + + /// The final conversion state of the last conversion. + state_type state() const { return _M_state; } + + private: + __detail::_Scoped_ptr<_Codecvt> _M_cvt; + byte_string _M_byte_err_string; + wide_string _M_wide_err_string; + state_type _M_state = state_type(); + size_t _M_count = 0; + bool _M_with_cvtstate = false; + bool _M_with_strings = false; + }; + +_GLIBCXX_END_NAMESPACE_CXX11 + + /// Buffer conversions + template> + class _GLIBCXX17_DEPRECATED wbuffer_convert + : public basic_streambuf<_Elem, _Tr> + { + typedef basic_streambuf<_Elem, _Tr> _Wide_streambuf; + + public: + typedef typename _Codecvt::state_type state_type; + + /// Default constructor. + wbuffer_convert() : wbuffer_convert(nullptr) { } + + /** Constructor. + * + * @param __bytebuf The underlying byte stream buffer. + * @param __pcvt The facet to use for conversions. + * @param __state Initial conversion state. + * + * Takes ownership of @p __pcvt and will delete it in the destructor. + */ + explicit + wbuffer_convert(streambuf* __bytebuf, _Codecvt* __pcvt = new _Codecvt, + state_type __state = state_type()) + : _M_buf(__bytebuf), _M_cvt(__pcvt, "std::wbuffer_convert"), + _M_state(__state), _M_always_noconv(_M_cvt->always_noconv()) + { + if (_M_buf) + { + this->setp(_M_put_area, _M_put_area + _S_buffer_length); + this->setg(_M_get_area + _S_putback_length, + _M_get_area + _S_putback_length, + _M_get_area + _S_putback_length); + } + } + + ~wbuffer_convert() = default; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2176. Special members for wstring_convert and wbuffer_convert + wbuffer_convert(const wbuffer_convert&) = delete; + wbuffer_convert& operator=(const wbuffer_convert&) = delete; + + streambuf* rdbuf() const noexcept { return _M_buf; } + + streambuf* + rdbuf(streambuf *__bytebuf) noexcept + { + auto __prev = _M_buf; + _M_buf = __bytebuf; + return __prev; + } + + /// The conversion state following the last conversion. + state_type state() const noexcept { return _M_state; } + + protected: + int + sync() + { return _M_buf && _M_conv_put() && !_M_buf->pubsync() ? 0 : -1; } + + typename _Wide_streambuf::int_type + overflow(typename _Wide_streambuf::int_type __out) + { + if (!_M_buf || !_M_conv_put()) + return _Tr::eof(); + else if (!_Tr::eq_int_type(__out, _Tr::eof())) + return this->sputc(__out); + return _Tr::not_eof(__out); + } + + typename _Wide_streambuf::int_type + underflow() + { + if (!_M_buf) + return _Tr::eof(); + + if (this->gptr() < this->egptr() || (_M_buf && _M_conv_get())) + return _Tr::to_int_type(*this->gptr()); + else + return _Tr::eof(); + } + + streamsize + xsputn(const typename _Wide_streambuf::char_type* __s, streamsize __n) + { + if (!_M_buf || __n == 0) + return 0; + streamsize __done = 0; + do + { + auto __nn = std::min(this->epptr() - this->pptr(), + __n - __done); + _Tr::copy(this->pptr(), __s + __done, __nn); + this->pbump(__nn); + __done += __nn; + } while (__done < __n && _M_conv_put()); + return __done; + } + + private: + // fill the get area from converted contents of the byte stream buffer + bool + _M_conv_get() + { + const streamsize __pb1 = this->gptr() - this->eback(); + const streamsize __pb2 = _S_putback_length; + const streamsize __npb = std::min(__pb1, __pb2); + + _Tr::move(_M_get_area + _S_putback_length - __npb, + this->gptr() - __npb, __npb); + + streamsize __nbytes = sizeof(_M_get_buf) - _M_unconv; + __nbytes = std::min(__nbytes, _M_buf->in_avail()); + if (__nbytes < 1) + __nbytes = 1; + __nbytes = _M_buf->sgetn(_M_get_buf + _M_unconv, __nbytes); + if (__nbytes < 1) + return false; + __nbytes += _M_unconv; + + // convert _M_get_buf into _M_get_area + + _Elem* __outbuf = _M_get_area + _S_putback_length; + _Elem* __outnext = __outbuf; + const char* __bnext = _M_get_buf; + + codecvt_base::result __result; + if (_M_always_noconv) + __result = codecvt_base::noconv; + else + { + _Elem* __outend = _M_get_area + _S_buffer_length; + + __result = _M_cvt->in(_M_state, + __bnext, __bnext + __nbytes, __bnext, + __outbuf, __outend, __outnext); + } + + if (__result == codecvt_base::noconv) + { + // cast is safe because noconv means _Elem is same type as char + auto __get_buf = reinterpret_cast(_M_get_buf); + _Tr::copy(__outbuf, __get_buf, __nbytes); + _M_unconv = 0; + return true; + } + + if ((_M_unconv = _M_get_buf + __nbytes - __bnext)) + char_traits::move(_M_get_buf, __bnext, _M_unconv); + + this->setg(__outbuf, __outbuf, __outnext); + + return __result != codecvt_base::error; + } + + // unused + bool + _M_put(...) + { return false; } + + bool + _M_put(const char* __p, streamsize __n) + { + if (_M_buf->sputn(__p, __n) < __n) + return false; + return true; + } + + // convert the put area and write to the byte stream buffer + bool + _M_conv_put() + { + _Elem* const __first = this->pbase(); + const _Elem* const __last = this->pptr(); + const streamsize __pending = __last - __first; + + if (_M_always_noconv) + return _M_put(__first, __pending); + + char __outbuf[2 * _S_buffer_length]; + + const _Elem* __next = __first; + const _Elem* __start; + do + { + __start = __next; + char* __outnext = __outbuf; + char* const __outlast = __outbuf + sizeof(__outbuf); + auto __result = _M_cvt->out(_M_state, __next, __last, __next, + __outnext, __outlast, __outnext); + if (__result == codecvt_base::error) + return false; + else if (__result == codecvt_base::noconv) + return _M_put(__next, __pending); + + if (!_M_put(__outbuf, __outnext - __outbuf)) + return false; + } + while (__next != __last && __next != __start); + + if (__next != __last) + _Tr::move(__first, __next, __last - __next); + + this->pbump(__first - __next); + return __next != __first; + } + + streambuf* _M_buf; + __detail::_Scoped_ptr<_Codecvt> _M_cvt; + state_type _M_state; + + static const streamsize _S_buffer_length = 32; + static const streamsize _S_putback_length = 3; + _Elem _M_put_area[_S_buffer_length]; + _Elem _M_get_area[_S_buffer_length]; + streamsize _M_unconv = 0; + char _M_get_buf[_S_buffer_length-_S_putback_length]; + bool _M_always_noconv; + }; + + /// @} group locales + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // __cplusplus + +#endif /* _LOCALE_CONV_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_conv.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_conv.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8a63c74008cc3469f524542d0fea7444b513f999 GIT binary patch literal 74439 zcmdO5_$PB#_%ahCBZGcvaglyzUUE)pN~(Ucwzj^Zsh*LZp?-yhS-hEvZb7ncPG(+d zg>HIYseV#sNij%Ga(-S~X1ZPmgMMyaiGERHW{Q46QGQlxa!Ij%N^yaHMq*KJeqLsB zA`+{(C>g=i%P1&dU{20S%uA=t4BhhlqU_APblsH9qSWM){Gv)*65Pb__aB=7ODYRe z^)eX##dHf_#uYN)P)N+l$xn_iDN4*NDF$f(1t*FIuqu#o#rpB_xk<$(i6yD=B_O5v z%q}iTNv%juEhvFR5Q>R8nMs*>B{^7)NJ~vDDJ@C`I|ZNlIAb-xI6fscEi(^d1cq;r z5=L=JQEFmtQfV3%Cn6~W`@guPC^IiTtvm(fXbeNaN|Gu|Qj5zI3qUIHxg4xGA7Z&) zNpdn4+rdf_OY(CwljF-XQ&QuT^GoweQi})~omx?%4~i*#(TVP}SU))>H4S@;1IGj?NQ?E0ONvU9 zOXA%;eOy5SfG>&*ic50zK}0;ffB_d%D7gU1=;ZwT?99~o%>4MY(!Au7%>2A!961b0 zQ%PoSY7q`)=rIS*#7NvuO zl%T$x{N%)()cE9_#NuMYnYJjgBr_jNG$I8|e0*9#J`n+kzbpeASe%@Z3eNKQVjHZo zD7COOvnaJVJ|n-l1fmDS=U|19#8jS{S3+dm6%?gH3bd5?`~reO3Nk)3FAZA|p(hGh zT1(7{&qyrJAS#lpfn7UzzANXpo)(#&P*>(MGr2lrAd5z zaY;%_YFd1Gaz-LFbAZbgP}=~%j^fNJXtf5{04pMp0xr2c85F`;5+ITyu;U?tl$oE0 zGs}TW9*|++IK>eHnYpQECb&bWG&8RxPd76qHLoPIq!Oz-ba%mXC`dI%5=B>?R*W;z zB^KxErl;nm7G);uXXcgY=Hx(JddZAHizB(BA~7j5J}ti}8AnDb&Pz$l%mKGwR?U2M z5wqA#%}dEl%meuVN4QlMq=K3&(6R+wzhI~YHwX0#@{2Po;^Fat;d*dnmgg6xfD#B+ z8_~lIQf9`NWu}(nsNX@A9=OWIa1)YQpvoL-6sXcoEh+}p3m_L@#2UmWkfaY%fZ+)w zW5NDON-WMyj)#~I(tu$iSXFUqNmefQ_6(>IU0hO{RICe$bPSIq7U$}x78OBS76jb` zX$>Wnrr`)Muyf#Xgkc$y_u$!%lq`xh2q1w9w-mz<$mt*KQ{AM*VsM(pP>SR}uupPR zbMuQTkz13bbw3JnO4Bp*iuH>#)AJH@;=#Evu_V6;Ljck)no*~Rvt0ys4>X&kB_^lh z=ma47AQ@b?5)r)6e4d$?SrQMA7OX*yWO_uF@ zuPb$RO|}S!yD9;12_LN^T9PQcFPM& zGKx|YQ@{yNH?b%g+^obGggKeHnI*);cTr+qdTM-Paxyf>W7v=6;ABw45`QuU`#&?U zEI%7uX5%vrtQ6$^(mYUMmYJB7S%stJg5(CAQJ9-rT%4GmS{$F7nwykb1WpSCt%nU5 zWZ?G|sL_yDnhR=_;Tr@1`v??96`*8r=y7U*QZ@@Mr_5zg=9Cm`Au4gE${NLIrB0LwZ=mMMXhkQE_T~UMcR# zgLD$$;euQ)f$c3$%}Gs0&2?BiC&eWxiAA8{$$#)Z308IRZVx2a$LA&{7lGTCaBaAX zMM&9|nO}^f;f0i*lX3NYz+Ng(%q&UENrd$IF%lG53Ajvv4Wq=zXXO^eCzYnfmn4FH zh@l6`YOr=lu@?_%q{Qdt=VgMuh>>%OOHz_`A)RJ;3{a9Xi&INV3m^$|Lp_0p6ucc9 zpIMSx1Zt9joPgm(B(LF2&&dU)#13SF8YelKNmw!|avPOUgMk=FrI%zB>87NnC4%!R z77HO29lTh;SH*!N6;!GgBxVvGlS)j^E>A2<(ND_EOTkrUg6mgMfa6O`xC0!NK5;h= zkb(#7@}ktV@*>D+FFbznXU^QjiulBw%=A1+I}9Ulf{lgNpYg>diOJdVxtV#oDV2GN zxtYmW{e`RrjICvfoPk2|#uud)=a&{GV{hSr6+(=LmaV8& z5=zuV)Ws7u{0(Y^fQOmzH9?T$737kF)S{gHJaAP2E;UFivJ+Dh3rbRp^r1AQxbB*S z){X$#18IN5s-a9!j20Caq+-us=uw5}MS#)>Mr0u=$63sPicqYYA&$$;1xFUX2+oAm zGDM^-=*TPfJ_*D=@IV=)?Swt{k^BT1FT!Fk?p%YU8R&X zP=kyDfTX}dMp~+YG(k&?GePODpn&1uj83!^0~(_RN#~@-LpnB)c0brI?F4fiF;@-pYwjf|i>E`r2UisI#6R z=isxV7-!K9HVhI(AVV<196dDCisMsoG@HRj5mhATrItgJ4{7BlZ2UPlF+DG{1hn1; z&Vtmu``XbuN?n{eaHsVVDSUEqIts7t$cn1!rH7 z*D%rzL@~IQhb~|MmB7R_crx>I6Z0|)@Vgc=Tn{Ee)?>I8$@gHFAjTW8WiCAFAFLbf zO<22Dhw6x;XlKeD~sTjpSl9wS3 zCh$xk{$K>V1X?)YD5jB&1*^`?F9x@bKyJVYcCZRib6PhgzcdLllM446ti=FU1P&d2 zP*@UKPbL=>fM-jg)enmG_(Kg;VHT92&&tDG18!+yj*G#hk-QJeA<6l9$)!a_sd;F9 z8~iRPC@D(GOiP3K6eHrm;Q=b6^5b(diOc`RB`NWVN!YuUNG=AO4E8#KWpvK6i&IX@3lln|u@w6r81yf%&~<)Da7 zEhvdk&Pat!zhF2C;zN*OWQ7qpsgpADUYeI#SelA+6$dm}zzwI|(vnnyBkEuckmV`3 zQv-UqLrO-}!B6ZhDEJr&zR-a*aPXH&plk*nu1ZY-jnk$t3wN$e zEJ}}$k5A7lO^z>11P=j$A{HZS7MG;tWF~>6@cAkk>~|zzVYL@B-3u}c!y0hZKuScM z%lyD2m?p!OY0#J`oLsJ2q&)c#SH*$xzqit2tG!KMmV$-{Gm{mNOa@19d~!vFl@&x3oa(Kt zKrJ^7hzQsP@$tomIuM&swHF)dD1e;@8hMK^QHYPv(_~Ny;Q%>;f#DyBV*1O>#PgS# zNd)AUzX?nNe-oG_KW-o@b@z#IN<)OGKu_EWdghL|G}BL8>;`5>>?P51qCHVNMQ(# zB5-nH{`--!pcNmVlTi!{dwAZ; z%uBa{sL)Y}4*?ejXb zyxjbhRMa9%O#@XDTvwnAB_U-aI}ah`a>+x(LkncNr-`Q-i1xAYu>#R0S|wmdfr1aj z{|^g7?2dEGg{-;2>NvP0!f{AK)NmXuvJgQA>gS<51}qjIpQEDyWfdWXi<|~|;S%&* z_e<@U2e&Z71+#jAmwupi2B3lulqo@_Tzovdkj9j%)MU^xL#|5*7k$@td~_x;?6^;g zn~G9F^E9dO=`NdiPw2uCA8_7>yAZd+Ah1F*+`Dp-+J@#(hhtFpq7+_`k_{A6XccWS zsGk6zxj-IU^SZ=gZ^%23<0yZFk1ZG!U)b} zf44Gf{oM-5{eQPHYW>{?Wq)S0`}>*E0j!>xN$)Q+lL445$Yl3dkO?9##pL!^iV1A* z|IcqKUO!jp*b56ljFt^N>EUPuz+)GOJVqmda3Y-K^vU_-6=6@Pn-Ezuv9u%~HEZfZ zD>qO_jBo5_Y_LW!xOj}yi34{LlJ%0oF|o^J7g*ijkBljQKQg9)^#1+N==b+OV*r@V z%oO&QnJEIyW?@qL%fh4rX1g+Z{dHyX0kadBy#6LY*-1=Vf0LNNMecvi7g62EeQ$I? zLk>?tLS&+crg?A_C=jg&)Qm;6ut{xxEfp2`BcU&~1g9t9%`c)Il!IuCL$j|IH2%^4ZH_QXBTuW=jm>Y%GPDT0E$YM`BwH)Y4L5 ztl_B90JXHLIhwf`9E%kalk&?_brh0HLG7)Q428UWa2K&OuS5Ynk(yePTExJ>_Mh=$ z$xo4w$7}z4FlqFx)=oJ5|K@A9)tguk*!*``E8fGf=Xcuw3&-}euatYR_q?)Y$!-5Iat^o@erYT3Ntg6lj2|yY;AYo7<@003-6m=ntTz^9t!I|m5Hsj7` z1sgd2LW3EcF2M~Q%%l!aB{*_DTIGa86|8JPt4YaEC=9_{GQ_?JsgmLY+!ZId-h>yy z1k_>FujKn8>)l$vek1J?a6=wEmjWr5%ONdu&>Ch?yWPqPtN>{^g^TfTJEPLyc19gg z%KO{S$n&?IF^wT4BUK?SGcPd*G@=1&PGsiiDS-7Vx^a4NV3P6As3|7Z`c|USJdfTYsLB z=kGQxDfTK$!vaOnW0z;-v8r9mQ3L}{RBV~|?(H-b!F{~#8Dh`3@`D7y zF~a=UgGuDC2a^J*p!gfXB=a`{+K-Q768Rei5&wT%}P?ud`aIPV}!AqsCt^MuY#a%C7U~ zEKSY>r7Y}%-i!i&y%|;hFK_v4a$fbGJXj@65atUM!KAbGf8O3a<%c3DU&=LA;-B&i zs35o#@c)Eobox%u;2S7{Z!SD-^ohMb4@HpmfJ^26?#z8Cg0fSEx7=NFA3PKR>sb7E z`&4=J-MyKMP*l!tK62z-)vVi%SVVeUfOKo1|e#h8@<`amcw05KvK-siv)cUWRJB^4CqprApHROAsm@>}R@Z(oYq z5Yn+7>Q+R#gL@DKce#VsSHi6j)?GpyN`Z}@D1e4iVB;!-dnhGLx^*!gL)xC*bH;qjp^JDWYPp zwQ@r4qpsg)VWS6lTn!6TNDifQ)`c}7$!HscS~8%1M?pyuv{CHB$n)0)+9-Br&jU2*Ojs1zn{C@ zo4hiHcOaD{wB6i8&W3z^Jf{)Q@|5D#k^&Ah7hcr$(5+fWo`V9?7aFCD};ox!& zJ}iSHzQKyXjaky78#YLY;Y{4UFgwUlDy*lVtpS?R&P&WqRluXi$_livBo(|L1=4_u zkI#cG@WP`H)P=3k9P)kpQ%UoUCyUQ$0WT5-=N23z-LO#AwS!G-Av*6|P9luoc)o#$ zpuaMG%K$eMp(EbXKhCaSDUx>;BOdXzOz8O8oS zW|aG{@{zf!b+r;?j^Z(+$=}C}cK^Rwv^Y=94}1u7nSEH;%uST7GDC`A)d(R(y@c}R4pj{Ly^kK*!$i273lH-XU^G;|`VwT77)B`Kh z$evChE!l)BNi49xvM&p*G_#3!h8zTM%465pfS@ zLH5dk>wLodXUN$uGoffh)ZAdVJ5cMBFy;*~q7dh}BU0Q_R%gLhm?In$AD@yBnpX$c zmdR!CeFL6(pgk?1QAL!+YVinh(Apdwg?RtclHigeP(6#fI{=m-Kr%#a1kh24cgs_V zk59`34YnyTnsS(e7pj?Xq;fGhB&MX4HnEJg_ztO9C81>9`QLUew*#`U*d7W#KXQR7yf^pyuAOV{mh{Ms*_m+ zq)fv0{AX)^BKt?KtL1;}rrbldH$4OX?^hP4XYMlp9o0fCbWAN;d44u-pX~fGw&AT7i|yIW97I{zaqb~{~Od-M#u}C zZUm)uumEhuJY1m1Y~!v6mX$Ve0obkpxBzUS0$c#Lr57#$+Z+uSfb|RE0BBDnQ$>P*i{gkX3*- zW}&D63m~fi?@M7Sl_~}AM*;261&?vSN?2&G4&0Rl5Afg^#lbx)k4ppIA$eSyK)tLA zO@@#-@nZbD zkCEr^K1T4-4p4RuL%h3>r;~F;M0}8Iu)j~3YrK!AQ@o3-o2zq3Fqe^`xtX3qa6xKv zW@3&4^tdyHwEQ9kv|VNjiFqjsXs!Z{{&7ME|6r|HN)i~ja3_8PEK({%TXHkhlTnG( zB%@QGPNbnuXu-1*l)TrvE2CWIAlnJ;(n)XIg7j#?RdiqJQ%kwf^QY8li5g!YY{0DDXF*QQ`j~=9|^x zYC@1*i7-K!CqV7nzc9g*zG+$gUpM-q2ws}F$5ywk6nr?#U+Ad`C_Q1gAgrwh)eb&i z;XiVZ7_JhzR}2?K?is@cVdV;nnXq(>A_%MEPy~^C%5XE0d&_V^c9;)&G=%Y`2Usf|cQljJA||b^3G38Cor{@hVUEOcmDH78q!v9%DWZCJ32~BQhP5dw7HfV+Tiv0jN@F=a_(gctlZZ zNoi4Du|is6PH`%@!B&u1R03+mAufRhog-mt)@~!|=6vYCxUP2GjpYY@|4TcpF`ve_ zV8;JrWviFJG&9`#U)s9zxVOQy`~TnVmpI1ly8RCm=v)Ytb0ok580SbZ{D%!#5R)h= zo9HJk#%J=W@-Cju$p|iJKs9YB{|(#uvgJn_az|2QK zZxdEd6CEr_Ju;&8fPxZvQ6Omv0yeZs6F(sGBgl~qq>i~<*gZY%uF*7a47Z_HI{Bp~ zprQp@>mckzT?YbM9RfM=6!X|3P^AQ30F;Ym{=A75;x>X?5?y#fv%r&({boxIBTg|9|FLzoRv}*8~3d&X_tu zV(ovm|K<6m2_eV78L@y)Ui{CLvnpxx1~Kq~5nut>Ih>%jJ?LyNl%Zs>0LD-P~holK)zk-4SSQGf}OVG)krO>tkqD@eYtOx8`1qB7qyiByF z1LRyFJua@0#O%~!h5Yio)S}{y%mUC!K@J59@$q2mz+*z0IXTc}VhWih3YmEdpp%4B zQsF*hU|{}lp<=Msxi4kFXjNd5~wk`J|` z2@^!=Xu_l$jADPcFv|TG^3;`E#4OYdwg`HHA!^XU1W|$xCWsPrFhP`{g9)Mp z9ZV1<=wN~CWsPBFhP`1f(fF85=;;!lwg7=p#&2|2_={yN+`huQ9=oN z>LqF@!30r42_}dVN-#l`P=X1fgc3{;C6r)-D4_%sLCWsPBFhP`1 zf(fF85=;;|l%PZ4uvt}%`X1KMhqb2=bv(HZCX(ACE}!G`=4?*qM0Cb6>Ott)YI=Hl zpv~MojDJm-c>bC|&rdUE;`wXJq{mR2S6ZB!0vh)RFTf}6h%nd`KF)xFPvpVo!jKl= zA_Wl^Sy00ax%G%VbVdH$9jyI<;b2ge4m$A;THgSo@w|9^+YFRq3?2>ttis)y914Zb}r|JyxGvROWN7C>&Pfv5EGpQ(NGt^1b3@Lfw0XAs0gPX@@zPtQz_2S+(H zkU`B{1uf8GW#p3q7~gWe1)ur)Ur@*X|4pT~@8B*!j(ueq2dF_he(1ue6KfUr1{?$6CNgMwJ*c^?25Crx z(hzKiCHf2uXaiYlQ4y$#Uc&fSmyzeMF0_fR!^rd3h*1d9L{|W3A#i$xo{V3N(Pjr( zrQisa1~tDSgLDe{c?xNXnK`K`NM~!Jw8O#fN-Zi>10j-M z2-^1kxInR+pOlrFT%ukKb3fwX*>X_tu>f=hadC-4Qff(gYHA*ms$xA*8n0nxFEcdF zKmC8#q^Y0vcS>r(BJjKNI}Q8X&6lViftn29$l+t;`O62590)su!6g+u_6u?(QWuv2 z<|IeHO2gZnE-qAe5~P45KT)FAX`rNM!N~L10_r;mn@)>GV0{Ew`-=QwT%v~=k(!Z2 z>j5<`8HV~=62UcpJAID(?WH8)U{A}irT~0bA*9xV&9abCUZNz;iX}pfe=QmH{#rt} z8d@^){Ix{gY6v?93tVqPtc7m+hHzkRu(Cov*ft}v2s*e1T6Q7A_}7+^=dUgF*e)AJ zp1+Qad<+iN3b6ZdKzhL~3P>r`a3bmi=aNNX|KBZ&S<}1f=q#4M&?8b&PxXQcqMYgl z6GS=H3nmEj4rurW+OL92fz|`S&JF{!kq=*mot8^lD1gq`10Uc88ni?iWQH`b;Dss7|DB&HygYk6rs2PfpY5|*TNb$ePZVHI;$r#qnDuWk zqu<|P#*F_{U!QmXzsA0Zb%R#qvAC5f0#X&EQv!_=5yhbDuJhAjXBvH!oh%bav0q$LK!U*LW| zuIu4a3(>EKgD*4#-4X@AToFaoNRvS)2KCao8;lBnZ!m%{+V~IK6bUQRF(#AXvz!=* zRv;D47;@kunADRZU}qUaA{TT~9+rRyNn!@Ph!twUdozNMM+OBpY*i14{eLEOzW`3} zVhm|OR`DYF72K5o6;z0GX+gfF{%8hluLsnv;3Nr7{NO|a4jNcd4tF)?Qf~OF3`{AE zMMLEGLt$kGc;X#&J251~fgOpOane)4(`Na}AXS(VDd!>u?tem#BV>Y=KcL9_Th8eB zw;Xy$=aii``)04_>VZtFfD#3?B7sb>fZ_*o$3g{YwI%G{N8D$SKnf91ngbOQpmsm% z%>-gjJdA%|G4lL<#Rwiy`1_KP=kE`2smk(yl7w@+{q4J5|5GmgQqHj9N&9d6I{8}b zb%DPBZ+85-*=&=pDEIdxBlzOT|FG@$prQ~ixD|SbB~%c6`3=fs8SF-!|Hu<&uxl{k zw`xMQgRkL)U+M`J97x+gL+%~@{~3D!DcDKSD?(A-3B95Tb>JE%h%#^u6NEKNp=N?_ zc>0era1B$5GH?wOL>ah-38D;K!vs+Vu3>^G1J^J?l!0rQAj-fsOb}(@8YYM`a19eg z9=L|xFZ&;MQ!Uu<-xy8)eq;2)c0~tlDJf_I6gJEP&YNhhODik1rLW*aDli%xa8X!` zLxAybF(c34V(3!XB1WFSb>O_g{NMV^R^KU~jbH!Yp*%|8*m79SV@NyT%I3 z(5NjAXf8(;gx=?eGHwaG4jz%W6S3=9)Q z$-po{lne|LM9IJ~L6i&(6GX|tFhP_I3=>4jz%W6S3=9)Q$-po{lne|LM9#p_CNMDx zQh5EO+fsc^(6KJ`+N}<4ItWYWEu;v2?VAtd-(8G6e|JIGzCqY1Yv1-tvpn!S>cIx8 zS7FU;jG_XvHlZXn1+y0Cvl3$b+rlXIw*_iP3nS0p7RCyKds{DoVms6pxa&)7+*5I1UDUCGQDE~ zUubl58iTUwj(I%)utbA7>1LW^=@SHggX z#=IE+E@b5SyAV2f1Yze88XAMGQb0`hz?*dNEiI`f=}0?TwBqB_F%O(h&r7WU9dMhG zSOjSvf|Ox7gqrCubbSQ4)u+qE_g9xm48;ELyKBX+z85M&kX9dPsSV^XE{q^4N=YhB z!%UZAPF#$C4>BtKJqS&g2N`+(9%L*5H#xzXlHvc(ONU~__scFI(hekLka>%w(lkwY z>SO@hc!ZJX?-52ZP=WvVFeA_3li-q=>HnLM97oyb3L5{*Os>zg**K}00qTZH4%15_ zJI?ij`iIcbXY5fAR)E8wXBd_Ko`L%F3?t9qGmI7BtHdDr36$y~i-i=@@^fSTMpAV@nxcTt^`GcQ-EjpYv6W@f&Dmf*9jpM<$-Xj!a76eBi*u^EZWwj{%Yz zOTdfI3Q9{95{pt3A$t~!GD}iHQ)!??32G04=I2rqbD>M<7#KMJzfq6+WuAXQ=6_dB z$xC;sg|C|kvL`j^|C5@Ij3qDqH~-gO?QXd4>!YIog7=k<-oLSL;(x8E)Ucpq zX#xLLwW@n(`mWsd|3+rS_oYihS2z51X0rL~%;fg}^RKTe!WQd2KtYOK(1pqEuM3kO zYVQTBAoOlh)b1Qi5T!c@6GT2W=PyhUMJ4oxxBsxa_rUIi3BneQfCZuVxTBoH1-sn+ zKWxVmib~|uxZo<0Pvn9NBA?0y7eqdp3oeL!Iu~3J`GhXGAZ$Pi#YxB~b-`64pVkEz zL_V<#E{J?;7hDkeRjh!XNJL6ne(38I921mw;`)Z76RM9Ce{8xc`e!UR!N#xlwMjb&0oIf3ObOpqZM za&IX(*}w#QkWONOt3*DH1ulquA`4s)`BWCTAo9s9a6#nLS>S@mC$zu?Var}n+zDIe zg(8T2S_@n|@`){QLF7|g;DX2}x4;FFPj7(>!bW6KY@ZFiOA0FJ_BWQv3q9l^f@mQR z5kw1lh#*?XLj=)69wLYq@(@9^kcSAOg*-$ME#x7BXdw>~L<@O{AX>;n1kpksB8V39 z5J9w%hX|sDJVX#J^2X!vs-69wvwq@-RV^ zkcSDPggi_TCFEg(C?O9ML6Cb_@K z=w%&D5GCGWf++D06GVx3m>^2L!vs;{9VUnp?=V4>c!vq1#5+t7CEj6zDDe&xM2UBp zAWFQ$1X1E0CWsR6FhP`fhY6y@J4_Hc-of2JX4qxRpf2yNuQ6JH+0YSQ5c_{f zn)0bHJQf>4JwTMHQTXg1u4%-){E~RkHEiGsB?Y*0&=ex*W;Q->XP5zeGaKXITZ~eF zZ$YnYs{W-l+t{(^Fz#6txMA3PtNCTAMQNae+=(y&y!jS%;JX0h-z$tff3HACGA}do z{JjnCKQsRS+xbU%!AX&2Y_L#58T*FaDu;6Z_+RMcCwvMPoU@>J&Y`M=p1|=RcB%(h zB{V$X!4DDy#~QB0n2#<VC}X-XL6k9Fm>|lSE=&+*Ocy4I zGNua?L>beC38IYY!UV}2(}kV94~li@NEkT7U<|9F9Vw4I$ISve#~)N0{C&a*K7Sv~ z{?F*}_dlZtn9af@@|T542E>M+;!i}MJw3HV1KMZ*%gFQhFC(PS{)dt0uK^PuLmFuD zAE;ZNo(k=-gO}VuyYi6bvL&Evtv~~^Aa$TDf!=-R`meEQqruns-KPJoCv3<$GRJP) ze@A16DgASf#{B0$E*>KGRetmTYr5iBem>+={@@g0!Fh|7#HS z=(Y&I@Bg5m9{ESbf}a0x-_B81WwQBb?BD;4et-Wn2B6k;FhP{M4jNjhHy8Y8jQjha zG2?&L9<$@w(Tab-xd5gerFRY!B-2brCcD3kOfHB?VV1uzA^4OqLI^%}j1WRn#mvO> zmzhZfwaviH6!w>yDFQVhV1g))W@gg+%gkhen#o~;D4854h?2=+f+(3BCWw;BVS*@` z943g8$zg&hnH(mFlF4C$D4854h?2=+f+(3BCWw;BVS>n+{4WcW(q9%P71Z#A38I82 zH0z-zEOsWPzwAsJi1_}i;_w$H2#-sUpdgdoUqL1Z)aZZ-qC^Kw5G6Wbf+*1e6GVv) zm>^1YzywjE115+P9WX(Z=zs~LL^18f(fFeC72*eT7n6pq$QXjN?L*mqNF95AWB+-38JJW zm>^18f(fFeC72*eT7n6pq$QXjN?L*mj)oF6EvYhz{8eR=L0!tD&7|{Jo5|$=6uW%q zH-gi@gHs)J;tpk#Gq|bD`1dg*_+lYYv&8f7QAS9Q13_|QSx7}pV?isAu}$sec|OE6 z!1hA6n@$Fb$N&E=@>l=!$I1G?uFO)s#qM2`82;bCm9P6^!bDqyy)f2)k=XV7yN^e8 zfchyZsc8xYB}Jh7-(XYWkU2ll!~fVt94CtYg}wX(GKLqtK0t;x_ zSk>QGjD0MOf8Q}O{e8zM#=`jbBcs9JkBlxXjDP<#^8NkKsKmnfmw}1zF9Q>Z#mL0> zml4cjV`BQt#stz~!DRE-f+>K7@vkcr-(Od-Y!;K+-z+987RJBXOlp6#!K^$cp1*la z3M`EOe|4O;!qQQ6Q!FJGCS%EsH@VQIaCK?7MGZ6*`#=r9zBmT}~%mL2?&12*Nu|c86@P`$& zZv=M6!2j3E@s`;?|JAVkUCSu&cP*m|3*+Clj8=cwGWxMF{)J3xfxTLz}TGa04+&SbRs%fi97*71x{u>oX(U-_MLZER27dnV9}EGjXsm{#9k-`m4$$z{2=9fr;&J0uv7l z<9};DEm!H^i_XJRAI#Ap8szY4j2eHZFFI+F(rSN{7= z`XVB@?am60sTNaRSQw|KO)X+!oUSw7f`xIG-7GH_#<>o2eOMUh#?8%QVVqktw}XXo zzRi3O7RLYo{geN^;n#_VTsjD|2t-RUFt$x-o5RT1R@XL%ff0Ug7*m%+mk$eL4^NK- z3*&!>RM8BRHMv{kA;}G-5r#nqc(p|^GPYT?MKCZhb{cg$urU7LTK4y9z2mu3oQW8e z$BIgmF&FA9SSb{gCgo%%D_|d`f}Y}J2TH*%e$eIX3=H7aFid|r8D0KzGDd+@q1xZ+ zpse-(PKJ$-*@MuNSbe{7!p1p_j2r7Vf_x7X-pJQ7&{u3^;qy9S)LAd5}pSQx>J zKn^p4SVtHo{vKh}VqyH7#>DeCjY*D$@qe*n%Ie%%+pb|vH5)ZHnlLhM6x#?&H5h00 zFmHC)?8CyiId5|n3*%O`twt=2|G!Kx4tiwN(i`uXlarqei&79R#lTpVS5?KxSQS%M z#lXN=>s1RXn^rHLp}w*;kqvu7sPd|cU}UVar~)N~T8mmY7RLYXEx%r97aXrEEe5S3 zi3e@OamxdhSCGrj;*%1KQ?0CuQj1G-N)$9;xzx%^OH%_9UkYld%ck)0)IjI=fQm>3 zEo>|`P0+fo;t~cP9zF&J#sY}~H73Rao?;J>j~V{(fC@p_8Vtq~o)Re*#{b7Joe|@D zYSn@@h}!bnsu&sDV%k7K)alY0z{2?d@BH@95nDJ6A+86T3?-x(7?)01I){;QY28v# zYJ+XSXIkm8GK7V3HP32LYDSa9unYjA!PO6Fy$f_a)5@v@Tor)_t*orz!@V#DgHjmCy1(3v zRe!k|yTFwtHzN;-4Gtb~CCTvrKy8%%b&*N;VF>{&2PLE!7>x>y8W zzEbYNVx~H`x*!(D2A&3xm(BLS3QkFjY{aVHSjt$9kBbU^0CEh5l4{(3*+Ct7b*(6t7g`Xe^KPLiywAcSD zw-j$M+G?9J{Erd2Cy_lnR}GXjKxJfUUU6o6UTTU$PJUiGqy++M6vvk^=$JwGSV4+P zX2gwhk+5}8GY)<`CgnR_mB*aVT#AL!fyY6Dg)!G4*M^0$k*86Dg|U~XSAvDHU!q@y zg>i<_3_BLaH9Tu1SQvNk?2uq#+$FIK)Ea~=ECuj4|Yv7T*T zcN%Z^+-QI}#p68m;5CkHzHBuX##+8wH5SHBj!p#@#%Ti6G*}o{2&~XxVcf#C1=MNa zV3hgG!Dzz5_?MGW<}W9R_21I3-Q&|15k0IaJYzz}97e{Bx(rYbfh|;H&2h^KVqwhX z%avkb%#X@XV__^(D$-+NEQu&dVPX8AeSNc#{>j=isd=TjkSK>9PlsB_SJyId8Nky3 z=xB2$#6^Lyky{oQ4Hpv@#zLh+Jr>3}N^|sB82^eg$^8{&(qdu!|H4H{+OVd#0ecxa z*=uqHBjaR?$)GZFn%OiLklT(uJEY`Y<$|MJ`OCzp@s|nO3}gbW$7Hl%V1l16@E^8a zo$W6dquyUGaGlM^==GNm+|&?f)cGq8YHIvdV$}Jo1ZL?os{PexG-F}>+r?<{w~GSMg63}3uk9xUoXv=jrQv5m14BcrjFu@eI${ANW)a|3fT7RLW=o(W$J_|$o^ zR{9wl877R38DbeG3=Hhq8rdc+j5%64W-N^PcKKc`jKyrlLM)8M62&SkjKx~TW-N>) zHYFgpzzTY7Il(ipB(*3HrJvzifgu!Jl30=&g3`%=#y4^k4k{F%m{eR+l$cxsP75~i za4X{BCPNZp2)JQ4VHR|*kpY@H;HxGb){6Hq?D?IBIO_JpJ;#NdUV_IFC)>adBjn1F z%F$q9%-74eVPP!MDY0TC%V{%2tL`=7xE+{Xa1Co@`r`i+&0DSs;&iyRpKpYHCI z{J!wb^~1!OWd4dXfr=4DCZ)fM;4uY#CXK)POb#rJe?ytH{)RF+u`vD(XEOO4 z&g8?w_`lKES0+7s@4a})9j7o4foM==s9|Kr$Y>;HWX8Y#<^-(Oe86c)z6+DvSJ zwV6Pn<&ztIL|*Ol8}J|o$jLAaN;}gS{r*m4i~y&dX^b|1r!nR*aAKK1gU^;>uAaqQ zE2|N>bIXJHX>I@2{fxs`w?{Mc{+-Tf_jfv|r29LQ(dzF^@EF!?Mw`F08QoYI{|YiO z{S^fD$^Qy5G5r++v!s}~{z@^4urU5rVT$^z!UXb^GZWKaXRxdb6W?DKCQuFT!^HR3 z2h8$i;`{3hX5}#P{LKN6f8{dq{LKZi{tN&6C#m+$huqLgdNG-6n1W#|MxB$BS&~|mm{Y7!jbyC}7lt~BFX9o(6>8y;f=zjTZb43J z1<~rEXK@f~JXCpEW@gUL^mbBqB1=-PamG{ ziuE!|a&s6M7}(+4ApXO)y1>u4_|B=ruv1&$XS%@GWBrFMaQY8h{sdnf^&hs;@qgC4wSN6Z+9e$SvyVYK5&yHe z*N4pwPGl1_wY2Q(GRFTR?B(;HMecjX2=8Ar!iSO>;bX~+46Muy z3=EuqA*Wb@#tEUvw6QS4jv!-!pMb{#y3~LVbg2Og<6jF#i@z42xrV~&0ysC zTgb$Pm{Jk=58EyYKT7;RY!~f+*iCQ$LzN^J*k9R~1>aK$-}v_*w)^gXgj)F8U6c3k z{SRCD_`m6T$ag~@x%~gI^C#e|s{X@v3&8ghz!xL3!sjRc!&-3gS(g8>2`l)N8V7vr znDKx2&T{!b4dE9V;WJ^3|6xrsMtGZy5k9HO`2X_j!)q%aT3=>_&q6?x5C?4MCkx}> zg^VVD7cvHcCpo~Uo3ns+1oMG*1hatdqO-{1Y< zgrnpBpt{dF#X3ksFZoR#c~%G#^q_ti&z*}>Z}9}=D~6h ztSbPbK}ECztT#_!N|B2(!OMS>=pOf6GDRYk#{LdH!~T#Qu9SJ^yil^G+@HvSX>&(g;Szr4~y; zWycD$6`&!S8*ED-T+*4y7#~sq@&pV^F)%*Rd0+(UygZP4V8p=u|Dw#!?I~4C{{P{- zq|Z+^u5|a^JdgFM)Kdi(#+Onr6<8R*F@57;Vf?}LgM)?fH`8wp7RLWor`i%0xHiaR zt>8B1ZLDHs+!(VFRKaa=+TzE;2(O1hsSTy`4{2q9YBv!%0S3^-0jvSf!1(|7PyR=H zMJl4ez5ja>_cTC`zsK_TFX-qRroUZ`Jb$~u)1K)}Jb%-{{Wp=F&yrY`m}FsnMC3`| zkOGuJ7I57TIwA*TyNw&X2Mq2fGW}&{H2cd8?u4;0n*C(~vEUAZoNfq7U$6$0l@-#C zb&!#KI-s=mQ0gK0o}!05fA|>K|NodUdw;rh#EJi~E%5&ZC4*P+?K<59Kcx3R?0}5_ zr;_FyPZpoi@*j2vE#rS!Oiv|Pz|&k`(*pKU&a3aKteg}+_kQMPm@g}>=cpw3*(R_;zg6Zd~u3!gTP zHWNn1HnBEPAFxxYQ;&tQOQp+zg%Mt-W9>mRG5Y;wg7%=97;XMCG3GF^{>NBj4L?8w z^K27PbIa>5Gh+yN5Z3H3CnIRggp)DmFDGLf3utY(+~0Uc4Hm|~iHuBt6B$7>+i8qi zf73vNwSS8lwf+`ESz&*R852Omf?TsieL58VVFe9{2BlMl67X08?ui&1P=W<#FVI{i z1M}a@j1GS{^7nB~sM^Vc2B0-fyV2WAB`f{w}p4WeW)+WgG`*X=osT7PrE39yHe=Wh>4T?c%t zb7E;pzCwI_5qL_Lfs0E3ML@w;0knO)tVGu?zqCXn-Zvh+nny<=J|1$01LUwlIG+pD zU*!aE*?`ICmzID|5&$X5FD(IyYJw`WU?!2j!AvSljDLffxc-JPc`@*^F)%Rw4P_Gg z8wy_26wV~`H=Id_g%Q3{8&rFOPSSvy!@$EMgeC-XFX&iz(0UyP#=n6~Vt)gfG?+jv zuD^jyc3?}G|Av6A1T94gVKVz00$$P)#bow3iphhA5xzkjnrdBhQgcDJ7MCOzl`u$2 zfhLpx`ZCG<^<~mxV*KmN!~|l&TXYa_1Tb;^4PcTGVf-7*T& zlhofNFe{l!?*XrTgZsvI)jrT{urBC#Zufsc<5RYbuSRD&@vu9jM@!33I7H-gW{ z^MVS8wM}a$urR_~olw8RZ(@Rkpo|PCLYI3i4+AxE{^erw`^&|Yz{B{L zmr3d`FOv=r<6kuzGwn$@`9oTHK5uVI%SKc`44RpW4YFg!OIJ@NMc&lv@DR} z(*&kv!7C1k;c*K0q|FeG3~DsV+qI; z(7tmCeAw$RCn&9{FpB(D0kt#!!&Wz-WDH1>124V>t!KrSHT?WQS)(?l7Q8gLmajGk zHET4*HG#4QY=tHMt!#-o<%yNW@p<{+5{=7D0p!L4CaJ##OjclD6fp6C*;~M66!YKp zj2eH}GkS1KgaDKq_*V>0;co>(KbMu7>m8VH^z)=pVFi-i$>wi0XwVtjmB9)o}Y z2QnX2d*ZDFKrFY3k37v%NxP@rA(y^)HsE$mw{$KwDK!gE>{PX#B%v^ zb>NF|K&1v_X+tR}yUpGBw)CRR)~%p!0}L}p3PoBuFv8aYL&_3Ju0a$>kcP`tkE!5> z%T%4IVenA6JuNRXH6XRbmCZ@k$OdjAQ!1_0k zNe|RQXJPys#ANk1h{+4giu)VHl*hvOH;PH=ZxpC;_&18l?{5@S9H{7r-h)hDKI{zZ zOau9-lcO^YwQT8&>jULO*veflg+8u44qXaW*n?{oTkY#sfNwF6r+<#ylRzzsDHm{vKlll{m*4nf@MUqW+}zZbz>_G^qhf3Go0@G$;;z{vCW0hsle(dX}D@T!3~j68qefW_FE z?EbQYLz9b1;x88yXiCY7iR-TwcnTf1zy^}U@MZ_pCQ)5PT@onx>iFuCP@6y9-`bf6gnXkmoFUqL1XCJ+m>L?Q*HjAs2S#H8_8h{=M5 z@vj^c&tEyvc;R1FCb_?=OrTY9x=a#(b-~>wT_&Bsx}eU~|6NP1ZcO;~Q6CZ>(4spx zu_7lmk3mdK0E;llGx5n~C3?Au6;Rj1yADoDPDV_OPCQO2;I0Fcdy#t+3!{IUe;Eto z|D~^uz8;v*#RM@Ey66>DB!L?^a&n*?U|M0?0!kUCQKl{M^|7F!XS39@G-F|O_i>M4 zVf2dfN@HR4tMF@KVT`qj^4wOqdw|x-c>QbzurZ3vgE^o4>B$A%I|}w7$wtYb{$P9PhSeVP!q&m+1Q1~STgt@nx0K1off2rr z7Fs8Q4(&kd3Yp89gR32LK64$Et`Lh2n~jJFV=!B=hzMgGSDb_hV=_;&lnCR05!-+5 z?|WhvgDiq!#=nyp8U9XYv~Xbje>}P?ud`aI4w}9SN{Se`xVR8JaGEMEDbj=7hyV(C zFGilfUW{U(qMi|S2Z9N>sAu}?&8YU*8$7w<&1mx18??Uie}$~{tfkI@;PY1z)`Qm1 z{bvCAcded*4%5~8^DsFO&GeU*QRFWxqn!ie-x-V|e`kPL@FN2t6_eUuEAV(4Yw0@5{&?7L2h4HUGlgnRyCeX&jP$sv( zp`fjr@Dpl4!_wekd&tTSNMcMXO#`(xOJKdN{L&HzH#bl<_V)^7%HJ!DdEn^0!YBt~ zgQJuA?+r$azc&~`3ovgo>ioS4o))>qsP*?2XyO3AzA_%N6cbcALdJ<0goHpnD>DT% z@Pv;UpP2!C-6p7z=Co$B7Gq&_XLARUYVKw%j2>DZRxFI3W}a>=j6POAUM!6MYW`*{ zjIms?QY?%~JV~G>iDF7yw|q)r@sIcMcXsq~jd%9<3yTMBwUJRyNlgPSXG4_%4^znr z$muXK$_dCBF#HFtC4g_Qz}}cPD>4Ijoz0TW8vdK@hwRw^IhxVS!V9!F26p}`Bw>Tn z0H{<3*G-VlcUDdocw#s!B&!14`DQHjD+P_s!ZuJrbYgF6Zw}ZDZc}VF*&K&9C}OwM zhlO#M#V(K|ZgVeOR%z?>8&pEUFrxy8f}8^*d{ZB~HDD(~hF+$YO$85_OpTh_gw~+< zTL5xu?55m9wKqKjphYh@*K%?3AaPN0tD~5s5)-2%kE0p5K4)`}bI)R7^z!lwV`22l z@+xCt^h@z8U||fF3RYubOjbw+b!uR9t)S~9L8S|%uxDUke5vvhJRb8>>ZKlhnh(?m zV0tC;N{)r`jldfz9>)K_+T;YhW^FRSl5GkSi$GVEGcc&}fkFqAaTxvl{6IrNciB|9 zLO0mV$D#|`cV|!oZzTX}Vu`kk2K5odnJoT_gNqJDCcD3i;FfMUQ^4PFCXkV^qj@0# z4oeY`k_2&#=Y+Bs+U+ z$X0M>-paK#4%OK^OLl@**tbK^5Q63_P|H85G>w6aO9)j&!B(LtH50UlqM#_XBtAK@ zxWoqH8gRv`We1uygX-2~07)xk7Aq7drll$*r6wnq7K4tk2MtUq1=^D!{~RbdkOtHPwl1Y&XhRbgrXx2QmSp^g5kf-=E>*rrx!2}*E0bi34c z4JOduS0nh&S#ZMK*|ZZhcM=KRr3Ffom?Q4F4!M4yxX(4n^+Rc9GL{LIfkxb6mwq4x z2&hDc;Hz{vA=0;9)Y*Z`p+ zBhz0)MgwDD^NH>M$|B8QG(;4%j2N^ zNrM>hx$NYdpkS+DYy|R37L(22ET$MH#=luiJb$y8(!jGZU@lk!v|6$r|g`?!nliTmjDkVe3cJIh4WP9DY(LUD)kh#!eM+S z@=T6}5x!v&!^U2zUIiw`UY=gKjeV2)X0R~!bM=F4gsn^g+X$|4u&$8-Cn#`d2Ryv< zo98$9?uOq?za`-HABQ*t1M4%kXF?*3uh?D*i7z@dgwB+ORtw9Aj4l8 zy$oRhwHO%R8ojmQL0sw!AIJeUIFids7(_%s!wG-I86EzLGx~t^{)Ozl^MS9;1)K9% zoH6OII3sAx4z_a-msv`T4u6%PW+{Pp@1dKe%qaI)88p-eUmys|#qje>u&oP$t%_g} za}pq0F{sZ8pJ9Ovv-UEo{OyGfvqIJy2Epf5Krz7fSA~)3uL>imry0b^_BV(T)T<0( z%=;Sx+7tG-jFIhc8Ca}>vEXk7V*?B0-*(1;zwO`!M6ly2h$sw`%SyohVBj)SAVE2D z;n~k9^|zl9GP}~x$n&?K(FHHOCvS9*k7X|HGvq5ASHU!;Y+l!76I_PbZ{*Uf-I3?aL56t*Dgk%zg>*rIl{k?#eWg-C3zg+DR4eUlfQh7 z4kCf(X9sYOK$YHA{Q6)4z(?@x7-Ip~3wu!*Bo&^Ri@8UGno{{CmwV*(wB z#Ps(+V-B=Y%lMa($?Y#AxHkd9p-l)|MkO%&03)PPW6!Ad*PhXghY^12CB)fi zfoX&@FpWTd!We{R039Et@|S@L6oL#)On(`e!jM8RSgF9yGX%O9Bl-e2I4~#0xjc#-s`JS3#y9j8F~KNGfFWr{8-E=bE&e)y_8Gzt2tx@r(6~2vH0%}QgukyCr-423iV<}B*0jGz!4bgx_YI@M z-#4HI5r0213jF;9o`(6xsP^|8xEMON=f+amdGflD00O%h8a|Nf?5_)>)n6Az7qHPT zj7lIjbY#Yr(d4fyXi)R7E2Gn2S4JNm#=owNO@Cb(dw3ZCUlN%9)%Dk>Q=rZ-3^QuV zXgWDC{)a8uhFA)&s1cdFxCE51!Exik=<(NsF$iq82cr^*4X>*~sS7mND)ZM1JdNtj z=(6NQ*Pqb?Y_LD05{M1<6yx6zMxDPQpeX*IGp)5M zN> z;4bG%ft6@$eb$z&1$7KnC$k7hnS||$cgq7U!^>mf;NW0jU^KTdcL2G_+`!!7KWy(m zWN=Ey%Y=myzW5VdNJFC)JV6R-AYlkXG6kqFlad;bXszjidXn%p;ToEd3=_;K^*0zi z5CB>KSpYA%A;BEN==V1SJTDl=DDpQ9bl}kcrP`08%T8`z21|n=no*lU+rfbmzSJ2~ zEku+VdEctjBp)-li*hkL2@4?ae{4!rf=wiRx}BaBcRJ#6|@yVVU(Yy0oDe( zWDHbf1~Do94FXSc1u=2`4Pq()XE4UUAxsK?LqPN9|6wPCL%a-)Q*epQ!vme{L=uD~ zKgfCHkTjOa$oDsqQH}`|y`UxQ4)92aq_HGMrN2qwRm(|?W}uV8K?`@G=P+U~oGqAw z{#r0W8cL8u4I`k1Gt*xyCWF6L;7I~2CcD2@OrR|zu$?WCz(Fe=!CYw52NWQ>j6r{O z8NoCBe{~skKx{-230|aRz^L)p0Gvuse8_azpnHxVVlZ-6REv)XC0EdtBgoJkMwh=i zjNswIzd4L@AT~UwLCW1cMw!2P;D!D9j1GVEL473n{u{6p(K9}VASC2{sN>uRbPMgCTSGyV?f{i_h)LXv|PboHN<6u8||%$V}G z7+Sy#EM=kGD_LZV}gOrZ4=@HG}7 zk2C%~!6@+e1bAT6Ld9UMb6?7I6iYyX3u*|8i3x#BTf^w|cMT)Bd-@l0Oj`)tJV?`b z9i!aeb&Lj})#3Zq=g4dPR)SW4u(jxjaY3jEXn7Ghi-P7v(~9!*O2AX>U?ET_6*Dj} zdI)$ZF)@0uc|hjcnZ3EZWmp)!&AdHW7=09cKuatI7C*0@rn|!nTaOl9Ou<$mFSQ)L zPY&XOWZuuX=;f7dZOi7@_M&*=4cJ$Rp?43olN8PF8v-(V)KzrmpV58o+^oGo$I zBVa{{OamL+=wVd*+XL;|K=wd*!SgMox-ejL`fI?LCc^kPm{H?zFeqjJjbIe{8v!2M zfE_;y?iE93=^#$P5(r>5prHUz@Mkco{mp{z8t?sDjr|AV)C$-OQ-)cQbefaWkXU-_79E06XY|fQ9LxYut-c6Ok>(BG}#0&^Rq(BExf7BiFBUuJMJ5M)yOD+pTT@>hyU z@2?cN8i1YP3kqnG#zqTDOF-RB=zwi1QydfH-)ttHzuAc4 zRj34bcoize{&x$b&EGAIaV(5~w=(Me-3kiqzuOq~{%!-a7??~zT{a%jNvB4CnZdnI zK_;iag5c9q@|lAE<};P>Fv72zhZMWGrtHwG6Ze? zDM&H`F92m^Qu)gW?wc|)G5uv^N`UrFng22~Mg3(4dy<7o?Joc8!lN}4= ze-9>&p4Hk3harvuc?vX-0BtmZ>a3ca8t}|+O-K!NX1B?&2{c^_+XxNTgEQZNk}+tZ zqLF1R0~h3I;(R8lzxhm%)@42u&)B|G!XHZi^=3K7Zd12SYakT h&?o}. + +/** @file bits/locale_facets.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.1 Locales +// + +#ifndef _LOCALE_FACETS_H +#define _LOCALE_FACETS_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // For wctype_t +#include +#include +#include +#include // For ios_base, ios_base::iostate +#include +#include +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +// Number of standard facets (for narrow characters only) +#define _GLIBCXX_NUM_FACETS 14 + +// Number of duplicated facets for cxx11 ABI +#define _GLIBCXX_NUM_CXX11_FACETS (_GLIBCXX_USE_DUAL_ABI ? 8 : 0) + +// codecvt and codecvt +#ifdef _GLIBCXX_USE_CHAR8_T +# define _GLIBCXX_NUM_UNICODE_FACETS 4 +#else +# define _GLIBCXX_NUM_UNICODE_FACETS 2 +#endif + +// Facets duplicated for alt128 long double format +// num_get, num_put, money_get, money_put (+ cxx11 money_get, money_put) +#define _GLIBCXX_NUM_LBDL_ALT128_FACETS (4 + (_GLIBCXX_USE_DUAL_ABI ? 2 : 0)) + + // Convert string to numeric value of type _Tp and store results. + // NB: This is specialized for all required types, there is no + // generic definition. + template + void + __convert_to_v(const char*, _Tp&, ios_base::iostate&, + const __c_locale&) throw(); + + // Explicit specializations for required types. + template<> + void + __convert_to_v(const char*, float&, ios_base::iostate&, + const __c_locale&) throw(); + + template<> + void + __convert_to_v(const char*, double&, ios_base::iostate&, + const __c_locale&) throw(); + + template<> + void + __convert_to_v(const char*, long double&, ios_base::iostate&, + const __c_locale&) throw(); + + // NB: __pad is a struct, rather than a function, so it can be + // partially-specialized. + template + struct __pad + { + static void + _S_pad(ios_base& __io, _CharT __fill, _CharT* __news, + const _CharT* __olds, streamsize __newlen, streamsize __oldlen); + }; + + // Used by both numeric and monetary facets. + // Inserts "group separator" characters into an array of characters. + // It's recursive, one iteration per group. It moves the characters + // in the buffer this way: "xxxx12345" -> "12,345xxx". Call this + // only with __gsize != 0. + template + _CharT* + __add_grouping(_CharT* __s, _CharT __sep, + const char* __gbeg, size_t __gsize, + const _CharT* __first, const _CharT* __last); + + // This template permits specializing facet output code for + // ostreambuf_iterator. For ostreambuf_iterator, sputn is + // significantly more efficient than incrementing iterators. + template + inline + ostreambuf_iterator<_CharT> + __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len) + { + __s._M_put(__ws, __len); + return __s; + } + + // This is the unspecialized form of the template. + template + inline + _OutIter + __write(_OutIter __s, const _CharT* __ws, int __len) + { + for (int __j = 0; __j < __len; __j++, ++__s) + *__s = __ws[__j]; + return __s; + } + + + // 22.2.1.1 Template class ctype + // Include host and configuration specific ctype enums for ctype_base. + + /** + * @brief Common base for ctype facet + * + * This template class provides implementations of the public functions + * that forward to the protected virtual functions. + * + * This template also provides abstract stubs for the protected virtual + * functions. + */ + template + class __ctype_abstract_base : public locale::facet, public ctype_base + { + public: + // Types: + /// Typedef for the template parameter + typedef _CharT char_type; + + /** + * @brief Test char_type classification. + * + * This function finds a mask M for @a __c and compares it to + * mask @a __m. It does so by returning the value of + * ctype::do_is(). + * + * @param __c The char_type to compare the mask of. + * @param __m The mask to compare against. + * @return (M & __m) != 0. + */ + bool + is(mask __m, char_type __c) const + { return this->do_is(__m, __c); } + + /** + * @brief Return a mask array. + * + * This function finds the mask for each char_type in the range [lo,hi) + * and successively writes it to vec. vec must have as many elements + * as the char array. It does so by returning the value of + * ctype::do_is(). + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __vec Pointer to an array of mask storage. + * @return @a __hi. + */ + const char_type* + is(const char_type *__lo, const char_type *__hi, mask *__vec) const + { return this->do_is(__lo, __hi, __vec); } + + /** + * @brief Find char_type matching a mask + * + * This function searches for and returns the first char_type c in + * [lo,hi) for which is(m,c) is true. It does so by returning + * ctype::do_scan_is(). + * + * @param __m The mask to compare against. + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return Pointer to matching char_type if found, else @a __hi. + */ + const char_type* + scan_is(mask __m, const char_type* __lo, const char_type* __hi) const + { return this->do_scan_is(__m, __lo, __hi); } + + /** + * @brief Find char_type not matching a mask + * + * This function searches for and returns the first char_type c in + * [lo,hi) for which is(m,c) is false. It does so by returning + * ctype::do_scan_not(). + * + * @param __m The mask to compare against. + * @param __lo Pointer to first char in range. + * @param __hi Pointer to end of range. + * @return Pointer to non-matching char if found, else @a __hi. + */ + const char_type* + scan_not(mask __m, const char_type* __lo, const char_type* __hi) const + { return this->do_scan_not(__m, __lo, __hi); } + + /** + * @brief Convert to uppercase. + * + * This function converts the argument to uppercase if possible. + * If not possible (for example, '2'), returns the argument. It does + * so by returning ctype::do_toupper(). + * + * @param __c The char_type to convert. + * @return The uppercase char_type if convertible, else @a __c. + */ + char_type + toupper(char_type __c) const + { return this->do_toupper(__c); } + + /** + * @brief Convert array to uppercase. + * + * This function converts each char_type in the range [lo,hi) to + * uppercase if possible. Other elements remain untouched. It does so + * by returning ctype:: do_toupper(lo, hi). + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + const char_type* + toupper(char_type *__lo, const char_type* __hi) const + { return this->do_toupper(__lo, __hi); } + + /** + * @brief Convert to lowercase. + * + * This function converts the argument to lowercase if possible. If + * not possible (for example, '2'), returns the argument. It does so + * by returning ctype::do_tolower(c). + * + * @param __c The char_type to convert. + * @return The lowercase char_type if convertible, else @a __c. + */ + char_type + tolower(char_type __c) const + { return this->do_tolower(__c); } + + /** + * @brief Convert array to lowercase. + * + * This function converts each char_type in the range [__lo,__hi) to + * lowercase if possible. Other elements remain untouched. It does so + * by returning ctype:: do_tolower(__lo, __hi). + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + const char_type* + tolower(char_type* __lo, const char_type* __hi) const + { return this->do_tolower(__lo, __hi); } + + /** + * @brief Widen char to char_type + * + * This function converts the char argument to char_type using the + * simplest reasonable transformation. It does so by returning + * ctype::do_widen(c). + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The char to convert. + * @return The converted char_type. + */ + char_type + widen(char __c) const + { return this->do_widen(__c); } + + /** + * @brief Widen array to char_type + * + * This function converts each char in the input to char_type using the + * simplest reasonable transformation. It does so by returning + * ctype::do_widen(c). + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + const char* + widen(const char* __lo, const char* __hi, char_type* __to) const + { return this->do_widen(__lo, __hi, __to); } + + /** + * @brief Narrow char_type to char + * + * This function converts the char_type to char using the simplest + * reasonable transformation. If the conversion fails, dfault is + * returned instead. It does so by returning + * ctype::do_narrow(__c). + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The char_type to convert. + * @param __dfault Char to return if conversion fails. + * @return The converted char. + */ + char + narrow(char_type __c, char __dfault) const + { return this->do_narrow(__c, __dfault); } + + /** + * @brief Narrow array to char array + * + * This function converts each char_type in the input to char using the + * simplest reasonable transformation and writes the results to the + * destination array. For any char_type in the input that cannot be + * converted, @a dfault is used instead. It does so by returning + * ctype::do_narrow(__lo, __hi, __dfault, __to). + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __dfault Char to use if conversion fails. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + const char_type* + narrow(const char_type* __lo, const char_type* __hi, + char __dfault, char* __to) const + { return this->do_narrow(__lo, __hi, __dfault, __to); } + + protected: + explicit + __ctype_abstract_base(size_t __refs = 0): facet(__refs) { } + + virtual + ~__ctype_abstract_base() { } + + /** + * @brief Test char_type classification. + * + * This function finds a mask M for @a c and compares it to mask @a m. + * + * do_is() is a hook for a derived facet to change the behavior of + * classifying. do_is() must always return the same result for the + * same input. + * + * @param __c The char_type to find the mask of. + * @param __m The mask to compare against. + * @return (M & __m) != 0. + */ + virtual bool + do_is(mask __m, char_type __c) const = 0; + + /** + * @brief Return a mask array. + * + * This function finds the mask for each char_type in the range [lo,hi) + * and successively writes it to vec. vec must have as many elements + * as the input. + * + * do_is() is a hook for a derived facet to change the behavior of + * classifying. do_is() must always return the same result for the + * same input. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __vec Pointer to an array of mask storage. + * @return @a __hi. + */ + virtual const char_type* + do_is(const char_type* __lo, const char_type* __hi, + mask* __vec) const = 0; + + /** + * @brief Find char_type matching mask + * + * This function searches for and returns the first char_type c in + * [__lo,__hi) for which is(__m,c) is true. + * + * do_scan_is() is a hook for a derived facet to change the behavior of + * match searching. do_is() must always return the same result for the + * same input. + * + * @param __m The mask to compare against. + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return Pointer to a matching char_type if found, else @a __hi. + */ + virtual const char_type* + do_scan_is(mask __m, const char_type* __lo, + const char_type* __hi) const = 0; + + /** + * @brief Find char_type not matching mask + * + * This function searches for and returns a pointer to the first + * char_type c of [lo,hi) for which is(m,c) is false. + * + * do_scan_is() is a hook for a derived facet to change the behavior of + * match searching. do_is() must always return the same result for the + * same input. + * + * @param __m The mask to compare against. + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return Pointer to a non-matching char_type if found, else @a __hi. + */ + virtual const char_type* + do_scan_not(mask __m, const char_type* __lo, + const char_type* __hi) const = 0; + + /** + * @brief Convert to uppercase. + * + * This virtual function converts the char_type argument to uppercase + * if possible. If not possible (for example, '2'), returns the + * argument. + * + * do_toupper() is a hook for a derived facet to change the behavior of + * uppercasing. do_toupper() must always return the same result for + * the same input. + * + * @param __c The char_type to convert. + * @return The uppercase char_type if convertible, else @a __c. + */ + virtual char_type + do_toupper(char_type __c) const = 0; + + /** + * @brief Convert array to uppercase. + * + * This virtual function converts each char_type in the range [__lo,__hi) + * to uppercase if possible. Other elements remain untouched. + * + * do_toupper() is a hook for a derived facet to change the behavior of + * uppercasing. do_toupper() must always return the same result for + * the same input. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + virtual const char_type* + do_toupper(char_type* __lo, const char_type* __hi) const = 0; + + /** + * @brief Convert to lowercase. + * + * This virtual function converts the argument to lowercase if + * possible. If not possible (for example, '2'), returns the argument. + * + * do_tolower() is a hook for a derived facet to change the behavior of + * lowercasing. do_tolower() must always return the same result for + * the same input. + * + * @param __c The char_type to convert. + * @return The lowercase char_type if convertible, else @a __c. + */ + virtual char_type + do_tolower(char_type __c) const = 0; + + /** + * @brief Convert array to lowercase. + * + * This virtual function converts each char_type in the range [__lo,__hi) + * to lowercase if possible. Other elements remain untouched. + * + * do_tolower() is a hook for a derived facet to change the behavior of + * lowercasing. do_tolower() must always return the same result for + * the same input. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + virtual const char_type* + do_tolower(char_type* __lo, const char_type* __hi) const = 0; + + /** + * @brief Widen char + * + * This virtual function converts the char to char_type using the + * simplest reasonable transformation. + * + * do_widen() is a hook for a derived facet to change the behavior of + * widening. do_widen() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The char to convert. + * @return The converted char_type + */ + virtual char_type + do_widen(char __c) const = 0; + + /** + * @brief Widen char array + * + * This function converts each char in the input to char_type using the + * simplest reasonable transformation. + * + * do_widen() is a hook for a derived facet to change the behavior of + * widening. do_widen() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to start range. + * @param __hi Pointer to end of range. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + virtual const char* + do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0; + + /** + * @brief Narrow char_type to char + * + * This virtual function converts the argument to char using the + * simplest reasonable transformation. If the conversion fails, dfault + * is returned instead. + * + * do_narrow() is a hook for a derived facet to change the behavior of + * narrowing. do_narrow() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The char_type to convert. + * @param __dfault Char to return if conversion fails. + * @return The converted char. + */ + virtual char + do_narrow(char_type __c, char __dfault) const = 0; + + /** + * @brief Narrow char_type array to char + * + * This virtual function converts each char_type in the range + * [__lo,__hi) to char using the simplest reasonable + * transformation and writes the results to the destination + * array. For any element in the input that cannot be + * converted, @a __dfault is used instead. + * + * do_narrow() is a hook for a derived facet to change the behavior of + * narrowing. do_narrow() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __dfault Char to use if conversion fails. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + virtual const char_type* + do_narrow(const char_type* __lo, const char_type* __hi, + char __dfault, char* __to) const = 0; + }; + + /** + * @brief Primary class template ctype facet. + * @ingroup locales + * + * This template class defines classification and conversion functions for + * character sets. It wraps cctype functionality. Ctype gets used by + * streams for many I/O operations. + * + * This template provides the protected virtual functions the developer + * will have to replace in a derived class or specialization to make a + * working facet. The public functions that access them are defined in + * __ctype_abstract_base, to allow for implementation flexibility. See + * ctype for an example. The functions are documented in + * __ctype_abstract_base. + * + * Note: implementations are provided for all the protected virtual + * functions, but will likely not be useful. + */ + template + class ctype : public __ctype_abstract_base<_CharT> + { + public: + // Types: + typedef _CharT char_type; + typedef typename __ctype_abstract_base<_CharT>::mask mask; + + /// The facet id for ctype + static locale::id id; + + explicit + ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { } + + protected: + virtual + ~ctype(); + + virtual bool + do_is(mask __m, char_type __c) const; + + virtual const char_type* + do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; + + virtual const char_type* + do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; + + virtual const char_type* + do_scan_not(mask __m, const char_type* __lo, + const char_type* __hi) const; + + virtual char_type + do_toupper(char_type __c) const; + + virtual const char_type* + do_toupper(char_type* __lo, const char_type* __hi) const; + + virtual char_type + do_tolower(char_type __c) const; + + virtual const char_type* + do_tolower(char_type* __lo, const char_type* __hi) const; + + virtual char_type + do_widen(char __c) const; + + virtual const char* + do_widen(const char* __lo, const char* __hi, char_type* __dest) const; + + virtual char + do_narrow(char_type, char __dfault) const; + + virtual const char_type* + do_narrow(const char_type* __lo, const char_type* __hi, + char __dfault, char* __to) const; + }; + + template + locale::id ctype<_CharT>::id; + + // Incomplete to provide a compile time diagnostics for common misuse + // of [locale.convenience] functions with basic_string as a character type. + template + class ctype >; + + /** + * @brief The ctype specialization. + * @ingroup locales + * + * This class defines classification and conversion functions for + * the char type. It gets used by char streams for many I/O + * operations. The char specialization provides a number of + * optimizations as well. + */ + template<> + class ctype : public locale::facet, public ctype_base + { + public: + // Types: + /// Typedef for the template parameter char. + typedef char char_type; + + protected: + // Data Members: + __c_locale _M_c_locale_ctype; + bool _M_del; + __to_type _M_toupper; + __to_type _M_tolower; + const mask* _M_table; + mutable char _M_widen_ok; + mutable char _M_widen[1 + static_cast(-1)]; + mutable char _M_narrow[1 + static_cast(-1)]; + mutable char _M_narrow_ok; // 0 uninitialized, 1 init, + // 2 memcpy can't be used + + public: + /// The facet id for ctype + static locale::id id; + /// The size of the mask table. It is SCHAR_MAX + 1. + static const size_t table_size = 1 + static_cast(-1); + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __table If non-zero, table is used as the per-char mask. + * Else classic_table() is used. + * @param __del If true, passes ownership of table to this facet. + * @param __refs Passed to the base facet class. + */ + explicit + ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0); + + /** + * @brief Constructor performs static initialization. + * + * This constructor is used to construct the initial C locale facet. + * + * @param __cloc Handle to C locale data. + * @param __table If non-zero, table is used as the per-char mask. + * @param __del If true, passes ownership of table to this facet. + * @param __refs Passed to the base facet class. + */ + explicit + ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false, + size_t __refs = 0); + + /** + * @brief Test char classification. + * + * This function compares the mask table[c] to @a __m. + * + * @param __c The char to compare the mask of. + * @param __m The mask to compare against. + * @return True if __m & table[__c] is true, false otherwise. + */ + inline bool + is(mask __m, char __c) const; + + /** + * @brief Return a mask array. + * + * This function finds the mask for each char in the range [lo, hi) and + * successively writes it to vec. vec must have as many elements as + * the char array. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __vec Pointer to an array of mask storage. + * @return @a __hi. + */ + inline const char* + is(const char* __lo, const char* __hi, mask* __vec) const; + + /** + * @brief Find char matching a mask + * + * This function searches for and returns the first char in [lo,hi) for + * which is(m,char) is true. + * + * @param __m The mask to compare against. + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return Pointer to a matching char if found, else @a __hi. + */ + inline const char* + scan_is(mask __m, const char* __lo, const char* __hi) const; + + /** + * @brief Find char not matching a mask + * + * This function searches for and returns a pointer to the first char + * in [__lo,__hi) for which is(m,char) is false. + * + * @param __m The mask to compare against. + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return Pointer to a non-matching char if found, else @a __hi. + */ + inline const char* + scan_not(mask __m, const char* __lo, const char* __hi) const; + + /** + * @brief Convert to uppercase. + * + * This function converts the char argument to uppercase if possible. + * If not possible (for example, '2'), returns the argument. + * + * toupper() acts as if it returns ctype::do_toupper(c). + * do_toupper() must always return the same result for the same input. + * + * @param __c The char to convert. + * @return The uppercase char if convertible, else @a __c. + */ + char_type + toupper(char_type __c) const + { return this->do_toupper(__c); } + + /** + * @brief Convert array to uppercase. + * + * This function converts each char in the range [__lo,__hi) to uppercase + * if possible. Other chars remain untouched. + * + * toupper() acts as if it returns ctype:: do_toupper(__lo, __hi). + * do_toupper() must always return the same result for the same input. + * + * @param __lo Pointer to first char in range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + const char_type* + toupper(char_type *__lo, const char_type* __hi) const + { return this->do_toupper(__lo, __hi); } + + /** + * @brief Convert to lowercase. + * + * This function converts the char argument to lowercase if possible. + * If not possible (for example, '2'), returns the argument. + * + * tolower() acts as if it returns ctype::do_tolower(__c). + * do_tolower() must always return the same result for the same input. + * + * @param __c The char to convert. + * @return The lowercase char if convertible, else @a __c. + */ + char_type + tolower(char_type __c) const + { return this->do_tolower(__c); } + + /** + * @brief Convert array to lowercase. + * + * This function converts each char in the range [lo,hi) to lowercase + * if possible. Other chars remain untouched. + * + * tolower() acts as if it returns ctype:: do_tolower(__lo, __hi). + * do_tolower() must always return the same result for the same input. + * + * @param __lo Pointer to first char in range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + const char_type* + tolower(char_type* __lo, const char_type* __hi) const + { return this->do_tolower(__lo, __hi); } + + /** + * @brief Widen char + * + * This function converts the char to char_type using the simplest + * reasonable transformation. For an underived ctype facet, the + * argument will be returned unchanged. + * + * This function works as if it returns ctype::do_widen(c). + * do_widen() must always return the same result for the same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The char to convert. + * @return The converted character. + */ + char_type + widen(char __c) const + { + if (_M_widen_ok) + return _M_widen[static_cast(__c)]; + this->_M_widen_init(); + return this->do_widen(__c); + } + + /** + * @brief Widen char array + * + * This function converts each char in the input to char using the + * simplest reasonable transformation. For an underived ctype + * facet, the argument will be copied unchanged. + * + * This function works as if it returns ctype::do_widen(c). + * do_widen() must always return the same result for the same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to first char in range. + * @param __hi Pointer to end of range. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + const char* + widen(const char* __lo, const char* __hi, char_type* __to) const + { + if (_M_widen_ok == 1) + { + if (__builtin_expect(__hi != __lo, true)) + __builtin_memcpy(__to, __lo, __hi - __lo); + return __hi; + } + if (!_M_widen_ok) + _M_widen_init(); + return this->do_widen(__lo, __hi, __to); + } + + /** + * @brief Narrow char + * + * This function converts the char to char using the simplest + * reasonable transformation. If the conversion fails, dfault is + * returned instead. For an underived ctype facet, @a c + * will be returned unchanged. + * + * This function works as if it returns ctype::do_narrow(c). + * do_narrow() must always return the same result for the same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The char to convert. + * @param __dfault Char to return if conversion fails. + * @return The converted character. + */ + char + narrow(char_type __c, char __dfault) const + { + if (_M_narrow[static_cast(__c)]) + return _M_narrow[static_cast(__c)]; + const char __t = do_narrow(__c, __dfault); + if (__t != __dfault) + _M_narrow[static_cast(__c)] = __t; + return __t; + } + + /** + * @brief Narrow char array + * + * This function converts each char in the input to char using the + * simplest reasonable transformation and writes the results to the + * destination array. For any char in the input that cannot be + * converted, @a dfault is used instead. For an underived ctype + * facet, the argument will be copied unchanged. + * + * This function works as if it returns ctype::do_narrow(lo, hi, + * dfault, to). do_narrow() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __dfault Char to use if conversion fails. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + const char_type* + narrow(const char_type* __lo, const char_type* __hi, + char __dfault, char* __to) const + { + if (__builtin_expect(_M_narrow_ok == 1, true)) + { + if (__builtin_expect(__hi != __lo, true)) + __builtin_memcpy(__to, __lo, __hi - __lo); + return __hi; + } + if (!_M_narrow_ok) + _M_narrow_init(); + return this->do_narrow(__lo, __hi, __dfault, __to); + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 695. ctype::classic_table() not accessible. + /// Returns a pointer to the mask table provided to the constructor, or + /// the default from classic_table() if none was provided. + const mask* + table() const throw() + { return _M_table; } + + /// Returns a pointer to the C locale mask table. + static const mask* + classic_table() throw(); + protected: + + /** + * @brief Destructor. + * + * This function deletes table() if @a del was true in the + * constructor. + */ + virtual + ~ctype(); + + /** + * @brief Convert to uppercase. + * + * This virtual function converts the char argument to uppercase if + * possible. If not possible (for example, '2'), returns the argument. + * + * do_toupper() is a hook for a derived facet to change the behavior of + * uppercasing. do_toupper() must always return the same result for + * the same input. + * + * @param __c The char to convert. + * @return The uppercase char if convertible, else @a __c. + */ + virtual char_type + do_toupper(char_type __c) const; + + /** + * @brief Convert array to uppercase. + * + * This virtual function converts each char in the range [lo,hi) to + * uppercase if possible. Other chars remain untouched. + * + * do_toupper() is a hook for a derived facet to change the behavior of + * uppercasing. do_toupper() must always return the same result for + * the same input. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + virtual const char_type* + do_toupper(char_type* __lo, const char_type* __hi) const; + + /** + * @brief Convert to lowercase. + * + * This virtual function converts the char argument to lowercase if + * possible. If not possible (for example, '2'), returns the argument. + * + * do_tolower() is a hook for a derived facet to change the behavior of + * lowercasing. do_tolower() must always return the same result for + * the same input. + * + * @param __c The char to convert. + * @return The lowercase char if convertible, else @a __c. + */ + virtual char_type + do_tolower(char_type __c) const; + + /** + * @brief Convert array to lowercase. + * + * This virtual function converts each char in the range [lo,hi) to + * lowercase if possible. Other chars remain untouched. + * + * do_tolower() is a hook for a derived facet to change the behavior of + * lowercasing. do_tolower() must always return the same result for + * the same input. + * + * @param __lo Pointer to first char in range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + virtual const char_type* + do_tolower(char_type* __lo, const char_type* __hi) const; + + /** + * @brief Widen char + * + * This virtual function converts the char to char using the simplest + * reasonable transformation. For an underived ctype facet, the + * argument will be returned unchanged. + * + * do_widen() is a hook for a derived facet to change the behavior of + * widening. do_widen() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The char to convert. + * @return The converted character. + */ + virtual char_type + do_widen(char __c) const + { return __c; } + + /** + * @brief Widen char array + * + * This function converts each char in the range [lo,hi) to char using + * the simplest reasonable transformation. For an underived + * ctype facet, the argument will be copied unchanged. + * + * do_widen() is a hook for a derived facet to change the behavior of + * widening. do_widen() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + virtual const char* + do_widen(const char* __lo, const char* __hi, char_type* __to) const + { + if (__builtin_expect(__hi != __lo, true)) + __builtin_memcpy(__to, __lo, __hi - __lo); + return __hi; + } + + /** + * @brief Narrow char + * + * This virtual function converts the char to char using the simplest + * reasonable transformation. If the conversion fails, dfault is + * returned instead. For an underived ctype facet, @a c will be + * returned unchanged. + * + * do_narrow() is a hook for a derived facet to change the behavior of + * narrowing. do_narrow() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The char to convert. + * @param __dfault Char to return if conversion fails. + * @return The converted char. + */ + virtual char + do_narrow(char_type __c, char __dfault __attribute__((__unused__))) const + { return __c; } + + /** + * @brief Narrow char array to char array + * + * This virtual function converts each char in the range [lo,hi) to + * char using the simplest reasonable transformation and writes the + * results to the destination array. For any char in the input that + * cannot be converted, @a dfault is used instead. For an underived + * ctype facet, the argument will be copied unchanged. + * + * do_narrow() is a hook for a derived facet to change the behavior of + * narrowing. do_narrow() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __dfault Char to use if conversion fails. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + virtual const char_type* + do_narrow(const char_type* __lo, const char_type* __hi, + char __dfault __attribute__((__unused__)), char* __to) const + { + if (__builtin_expect(__hi != __lo, true)) + __builtin_memcpy(__to, __lo, __hi - __lo); + return __hi; + } + + private: + void _M_narrow_init() const; + void _M_widen_init() const; + }; + +#ifdef _GLIBCXX_USE_WCHAR_T + /** + * @brief The ctype specialization. + * @ingroup locales + * + * This class defines classification and conversion functions for the + * wchar_t type. It gets used by wchar_t streams for many I/O operations. + * The wchar_t specialization provides a number of optimizations as well. + * + * ctype inherits its public methods from + * __ctype_abstract_base. + */ + template<> + class ctype : public __ctype_abstract_base + { + public: + // Types: + /// Typedef for the template parameter wchar_t. + typedef wchar_t char_type; + typedef wctype_t __wmask_type; + + protected: + __c_locale _M_c_locale_ctype; + + // Pre-computed narrowed and widened chars. + bool _M_narrow_ok; + char _M_narrow[128]; + wint_t _M_widen[1 + static_cast(-1)]; + + // Pre-computed elements for do_is. + mask _M_bit[16]; + __wmask_type _M_wmask[16]; + + public: + // Data Members: + /// The facet id for ctype + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + ctype(size_t __refs = 0); + + /** + * @brief Constructor performs static initialization. + * + * This constructor is used to construct the initial C locale facet. + * + * @param __cloc Handle to C locale data. + * @param __refs Passed to the base facet class. + */ + explicit + ctype(__c_locale __cloc, size_t __refs = 0); + + protected: + __wmask_type + _M_convert_to_wmask(const mask __m) const throw(); + + /// Destructor + virtual + ~ctype(); + + /** + * @brief Test wchar_t classification. + * + * This function finds a mask M for @a c and compares it to mask @a m. + * + * do_is() is a hook for a derived facet to change the behavior of + * classifying. do_is() must always return the same result for the + * same input. + * + * @param __c The wchar_t to find the mask of. + * @param __m The mask to compare against. + * @return (M & __m) != 0. + */ + virtual bool + do_is(mask __m, char_type __c) const; + + /** + * @brief Return a mask array. + * + * This function finds the mask for each wchar_t in the range [lo,hi) + * and successively writes it to vec. vec must have as many elements + * as the input. + * + * do_is() is a hook for a derived facet to change the behavior of + * classifying. do_is() must always return the same result for the + * same input. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __vec Pointer to an array of mask storage. + * @return @a __hi. + */ + virtual const char_type* + do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; + + /** + * @brief Find wchar_t matching mask + * + * This function searches for and returns the first wchar_t c in + * [__lo,__hi) for which is(__m,c) is true. + * + * do_scan_is() is a hook for a derived facet to change the behavior of + * match searching. do_is() must always return the same result for the + * same input. + * + * @param __m The mask to compare against. + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return Pointer to a matching wchar_t if found, else @a __hi. + */ + virtual const char_type* + do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; + + /** + * @brief Find wchar_t not matching mask + * + * This function searches for and returns a pointer to the first + * wchar_t c of [__lo,__hi) for which is(__m,c) is false. + * + * do_scan_is() is a hook for a derived facet to change the behavior of + * match searching. do_is() must always return the same result for the + * same input. + * + * @param __m The mask to compare against. + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return Pointer to a non-matching wchar_t if found, else @a __hi. + */ + virtual const char_type* + do_scan_not(mask __m, const char_type* __lo, + const char_type* __hi) const; + + /** + * @brief Convert to uppercase. + * + * This virtual function converts the wchar_t argument to uppercase if + * possible. If not possible (for example, '2'), returns the argument. + * + * do_toupper() is a hook for a derived facet to change the behavior of + * uppercasing. do_toupper() must always return the same result for + * the same input. + * + * @param __c The wchar_t to convert. + * @return The uppercase wchar_t if convertible, else @a __c. + */ + virtual char_type + do_toupper(char_type __c) const; + + /** + * @brief Convert array to uppercase. + * + * This virtual function converts each wchar_t in the range [lo,hi) to + * uppercase if possible. Other elements remain untouched. + * + * do_toupper() is a hook for a derived facet to change the behavior of + * uppercasing. do_toupper() must always return the same result for + * the same input. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + virtual const char_type* + do_toupper(char_type* __lo, const char_type* __hi) const; + + /** + * @brief Convert to lowercase. + * + * This virtual function converts the argument to lowercase if + * possible. If not possible (for example, '2'), returns the argument. + * + * do_tolower() is a hook for a derived facet to change the behavior of + * lowercasing. do_tolower() must always return the same result for + * the same input. + * + * @param __c The wchar_t to convert. + * @return The lowercase wchar_t if convertible, else @a __c. + */ + virtual char_type + do_tolower(char_type __c) const; + + /** + * @brief Convert array to lowercase. + * + * This virtual function converts each wchar_t in the range [lo,hi) to + * lowercase if possible. Other elements remain untouched. + * + * do_tolower() is a hook for a derived facet to change the behavior of + * lowercasing. do_tolower() must always return the same result for + * the same input. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @return @a __hi. + */ + virtual const char_type* + do_tolower(char_type* __lo, const char_type* __hi) const; + + /** + * @brief Widen char to wchar_t + * + * This virtual function converts the char to wchar_t using the + * simplest reasonable transformation. For an underived ctype + * facet, the argument will be cast to wchar_t. + * + * do_widen() is a hook for a derived facet to change the behavior of + * widening. do_widen() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The char to convert. + * @return The converted wchar_t. + */ + virtual char_type + do_widen(char __c) const; + + /** + * @brief Widen char array to wchar_t array + * + * This function converts each char in the input to wchar_t using the + * simplest reasonable transformation. For an underived ctype + * facet, the argument will be copied, casting each element to wchar_t. + * + * do_widen() is a hook for a derived facet to change the behavior of + * widening. do_widen() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to start range. + * @param __hi Pointer to end of range. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + virtual const char* + do_widen(const char* __lo, const char* __hi, char_type* __to) const; + + /** + * @brief Narrow wchar_t to char + * + * This virtual function converts the argument to char using + * the simplest reasonable transformation. If the conversion + * fails, dfault is returned instead. For an underived + * ctype facet, @a c will be cast to char and + * returned. + * + * do_narrow() is a hook for a derived facet to change the + * behavior of narrowing. do_narrow() must always return the + * same result for the same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __c The wchar_t to convert. + * @param __dfault Char to return if conversion fails. + * @return The converted char. + */ + virtual char + do_narrow(char_type __c, char __dfault) const; + + /** + * @brief Narrow wchar_t array to char array + * + * This virtual function converts each wchar_t in the range [lo,hi) to + * char using the simplest reasonable transformation and writes the + * results to the destination array. For any wchar_t in the input that + * cannot be converted, @a dfault is used instead. For an underived + * ctype facet, the argument will be copied, casting each + * element to char. + * + * do_narrow() is a hook for a derived facet to change the behavior of + * narrowing. do_narrow() must always return the same result for the + * same input. + * + * Note: this is not what you want for codepage conversions. See + * codecvt for that. + * + * @param __lo Pointer to start of range. + * @param __hi Pointer to end of range. + * @param __dfault Char to use if conversion fails. + * @param __to Pointer to the destination array. + * @return @a __hi. + */ + virtual const char_type* + do_narrow(const char_type* __lo, const char_type* __hi, + char __dfault, char* __to) const; + + // For use at construction time only. + void + _M_initialize_ctype() throw(); + }; +#endif //_GLIBCXX_USE_WCHAR_T + + /// class ctype_byname [22.2.1.2]. + template + class ctype_byname : public ctype<_CharT> + { + public: + typedef typename ctype<_CharT>::mask mask; + + explicit + ctype_byname(const char* __s, size_t __refs = 0); + +#if __cplusplus >= 201103L + explicit + ctype_byname(const string& __s, size_t __refs = 0) + : ctype_byname(__s.c_str(), __refs) { } +#endif + + protected: + virtual + ~ctype_byname() { } + }; + + /// 22.2.1.4 Class ctype_byname specializations. + template<> + class ctype_byname : public ctype + { + public: + explicit + ctype_byname(const char* __s, size_t __refs = 0); + +#if __cplusplus >= 201103L + explicit + ctype_byname(const string& __s, size_t __refs = 0); +#endif + + protected: + virtual + ~ctype_byname(); + }; + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + class ctype_byname : public ctype + { + public: + explicit + ctype_byname(const char* __s, size_t __refs = 0); + +#if __cplusplus >= 201103L + explicit + ctype_byname(const string& __s, size_t __refs = 0); +#endif + + protected: + virtual + ~ctype_byname(); + }; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +// Include host and configuration specific ctype inlines. +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // 22.2.2 The numeric category. + class __num_base + { + public: + // NB: Code depends on the order of _S_atoms_out elements. + // Below are the indices into _S_atoms_out. + enum + { + _S_ominus, + _S_oplus, + _S_ox, + _S_oX, + _S_odigits, + _S_odigits_end = _S_odigits + 16, + _S_oudigits = _S_odigits_end, + _S_oudigits_end = _S_oudigits + 16, + _S_oe = _S_odigits + 14, // For scientific notation, 'e' + _S_oE = _S_oudigits + 14, // For scientific notation, 'E' + _S_oend = _S_oudigits_end + }; + + // A list of valid numeric literals for output. This array + // contains chars that will be passed through the current locale's + // ctype<_CharT>.widen() and then used to render numbers. + // For the standard "C" locale, this is + // "-+xX0123456789abcdef0123456789ABCDEF". + static const char* _S_atoms_out; + + // String literal of acceptable (narrow) input, for num_get. + // "-+xX0123456789abcdefABCDEF" + static const char* _S_atoms_in; + + enum + { + _S_iminus, + _S_iplus, + _S_ix, + _S_iX, + _S_izero, + _S_ie = _S_izero + 14, + _S_iE = _S_izero + 20, + _S_iend = 26 + }; + + // num_put + // Construct and return valid scanf format for floating point types. + static void + _S_format_float(const ios_base& __io, char* __fptr, char __mod) throw(); + }; + + template + struct __numpunct_cache : public locale::facet + { + const char* _M_grouping; + size_t _M_grouping_size; + bool _M_use_grouping; + const _CharT* _M_truename; + size_t _M_truename_size; + const _CharT* _M_falsename; + size_t _M_falsename_size; + _CharT _M_decimal_point; + _CharT _M_thousands_sep; + + // A list of valid numeric literals for output: in the standard + // "C" locale, this is "-+xX0123456789abcdef0123456789ABCDEF". + // This array contains the chars after having been passed + // through the current locale's ctype<_CharT>.widen(). + _CharT _M_atoms_out[__num_base::_S_oend]; + + // A list of valid numeric literals for input: in the standard + // "C" locale, this is "-+xX0123456789abcdefABCDEF" + // This array contains the chars after having been passed + // through the current locale's ctype<_CharT>.widen(). + _CharT _M_atoms_in[__num_base::_S_iend]; + + bool _M_allocated; + + __numpunct_cache(size_t __refs = 0) + : facet(__refs), _M_grouping(0), _M_grouping_size(0), + _M_use_grouping(false), + _M_truename(0), _M_truename_size(0), _M_falsename(0), + _M_falsename_size(0), _M_decimal_point(_CharT()), + _M_thousands_sep(_CharT()), _M_allocated(false) + { } + + ~__numpunct_cache(); + + void + _M_cache(const locale& __loc); + + private: + __numpunct_cache& + operator=(const __numpunct_cache&); + + explicit + __numpunct_cache(const __numpunct_cache&); + }; + + template + __numpunct_cache<_CharT>::~__numpunct_cache() + { + if (_M_allocated) + { + delete [] _M_grouping; + delete [] _M_truename; + delete [] _M_falsename; + } + } + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + /** + * @brief Primary class template numpunct. + * @ingroup locales + * + * This facet stores several pieces of information related to printing and + * scanning numbers, such as the decimal point character. It takes a + * template parameter specifying the char type. The numpunct facet is + * used by streams for many I/O operations involving numbers. + * + * The numpunct template uses protected virtual functions to provide the + * actual results. The public accessors forward the call to the virtual + * functions. These virtual functions are hooks for developers to + * implement the behavior they require from a numpunct facet. + */ + template + class numpunct : public locale::facet + { + public: + // Types: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef basic_string<_CharT> string_type; + ///@} + typedef __numpunct_cache<_CharT> __cache_type; + + protected: + __cache_type* _M_data; + + public: + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Numpunct constructor. + * + * @param __refs Refcount to pass to the base class. + */ + explicit + numpunct(size_t __refs = 0) + : facet(__refs), _M_data(0) + { _M_initialize_numpunct(); } + + /** + * @brief Internal constructor. Not for general use. + * + * This is a constructor for use by the library itself to set up the + * predefined locale facets. + * + * @param __cache __numpunct_cache object. + * @param __refs Refcount to pass to the base class. + */ + explicit + numpunct(__cache_type* __cache, size_t __refs = 0) + : facet(__refs), _M_data(__cache) + { _M_initialize_numpunct(); } + + /** + * @brief Internal constructor. Not for general use. + * + * This is a constructor for use by the library itself to set up new + * locales. + * + * @param __cloc The C locale. + * @param __refs Refcount to pass to the base class. + */ + explicit + numpunct(__c_locale __cloc, size_t __refs = 0) + : facet(__refs), _M_data(0) + { _M_initialize_numpunct(__cloc); } + + /** + * @brief Return decimal point character. + * + * This function returns a char_type to use as a decimal point. It + * does so by returning returning + * numpunct::do_decimal_point(). + * + * @return @a char_type representing a decimal point. + */ + char_type + decimal_point() const + { return this->do_decimal_point(); } + + /** + * @brief Return thousands separator character. + * + * This function returns a char_type to use as a thousands + * separator. It does so by returning returning + * numpunct::do_thousands_sep(). + * + * @return char_type representing a thousands separator. + */ + char_type + thousands_sep() const + { return this->do_thousands_sep(); } + + /** + * @brief Return grouping specification. + * + * This function returns a string representing groupings for the + * integer part of a number. Groupings indicate where thousands + * separators should be inserted in the integer part of a number. + * + * Each char in the return string is interpret as an integer + * rather than a character. These numbers represent the number + * of digits in a group. The first char in the string + * represents the number of digits in the least significant + * group. If a char is negative, it indicates an unlimited + * number of digits for the group. If more chars from the + * string are required to group a number, the last char is used + * repeatedly. + * + * For example, if the grouping() returns "\003\002" and is + * applied to the number 123456789, this corresponds to + * 12,34,56,789. Note that if the string was "32", this would + * put more than 50 digits into the least significant group if + * the character set is ASCII. + * + * The string is returned by calling + * numpunct::do_grouping(). + * + * @return string representing grouping specification. + */ + string + grouping() const + { return this->do_grouping(); } + + /** + * @brief Return string representation of bool true. + * + * This function returns a string_type containing the text + * representation for true bool variables. It does so by calling + * numpunct::do_truename(). + * + * @return string_type representing printed form of true. + */ + string_type + truename() const + { return this->do_truename(); } + + /** + * @brief Return string representation of bool false. + * + * This function returns a string_type containing the text + * representation for false bool variables. It does so by calling + * numpunct::do_falsename(). + * + * @return string_type representing printed form of false. + */ + string_type + falsename() const + { return this->do_falsename(); } + + protected: + /// Destructor. + virtual + ~numpunct(); + + /** + * @brief Return decimal point character. + * + * Returns a char_type to use as a decimal point. This function is a + * hook for derived classes to change the value returned. + * + * @return @a char_type representing a decimal point. + */ + virtual char_type + do_decimal_point() const + { return _M_data->_M_decimal_point; } + + /** + * @brief Return thousands separator character. + * + * Returns a char_type to use as a thousands separator. This function + * is a hook for derived classes to change the value returned. + * + * @return @a char_type representing a thousands separator. + */ + virtual char_type + do_thousands_sep() const + { return _M_data->_M_thousands_sep; } + + /** + * @brief Return grouping specification. + * + * Returns a string representing groupings for the integer part of a + * number. This function is a hook for derived classes to change the + * value returned. @see grouping() for details. + * + * @return String representing grouping specification. + */ + virtual string + do_grouping() const + { return _M_data->_M_grouping; } + + /** + * @brief Return string representation of bool true. + * + * Returns a string_type containing the text representation for true + * bool variables. This function is a hook for derived classes to + * change the value returned. + * + * @return string_type representing printed form of true. + */ + virtual string_type + do_truename() const + { return _M_data->_M_truename; } + + /** + * @brief Return string representation of bool false. + * + * Returns a string_type containing the text representation for false + * bool variables. This function is a hook for derived classes to + * change the value returned. + * + * @return string_type representing printed form of false. + */ + virtual string_type + do_falsename() const + { return _M_data->_M_falsename; } + + // For use at construction time only. + void + _M_initialize_numpunct(__c_locale __cloc = 0); + }; + + template + locale::id numpunct<_CharT>::id; + + template<> + numpunct::~numpunct(); + + template<> + void + numpunct::_M_initialize_numpunct(__c_locale __cloc); + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + numpunct::~numpunct(); + + template<> + void + numpunct::_M_initialize_numpunct(__c_locale __cloc); +#endif + + /// class numpunct_byname [22.2.3.2]. + template + class numpunct_byname : public numpunct<_CharT> + { + public: + typedef _CharT char_type; + typedef basic_string<_CharT> string_type; + + explicit + numpunct_byname(const char* __s, size_t __refs = 0) + : numpunct<_CharT>(__refs) + { + if (__builtin_strcmp(__s, "C") != 0 + && __builtin_strcmp(__s, "POSIX") != 0) + { + __c_locale __tmp; + this->_S_create_c_locale(__tmp, __s); + this->_M_initialize_numpunct(__tmp); + this->_S_destroy_c_locale(__tmp); + } + } + +#if __cplusplus >= 201103L + explicit + numpunct_byname(const string& __s, size_t __refs = 0) + : numpunct_byname(__s.c_str(), __refs) { } +#endif + + protected: + virtual + ~numpunct_byname() { } + }; + +_GLIBCXX_END_NAMESPACE_CXX11 + +_GLIBCXX_BEGIN_NAMESPACE_LDBL + + /** + * @brief Primary class template num_get. + * @ingroup locales + * + * This facet encapsulates the code to parse and return a number + * from a string. It is used by the istream numeric extraction + * operators. + * + * The num_get template uses protected virtual functions to provide the + * actual results. The public accessors forward the call to the virtual + * functions. These virtual functions are hooks for developers to + * implement the behavior they require from the num_get facet. + */ + template + class num_get : public locale::facet + { + public: + // Types: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef _InIter iter_type; + ///@} + + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + num_get(size_t __refs = 0) : facet(__refs) { } + + /** + * @brief Numeric parsing. + * + * Parses the input stream into the bool @a v. It does so by calling + * num_get::do_get(). + * + * If ios_base::boolalpha is set, attempts to read + * ctype::truename() or ctype::falsename(). Sets + * @a v to true or false if successful. Sets err to + * ios_base::failbit if reading the string fails. Sets err to + * ios_base::eofbit if the stream is emptied. + * + * If ios_base::boolalpha is not set, proceeds as with reading a long, + * except if the value is 1, sets @a v to true, if the value is 0, sets + * @a v to false, and otherwise set err to ios_base::failbit. + * + * @param __in Start of input stream. + * @param __end End of input stream. + * @param __io Source of locale and flags. + * @param __err Error flags to set. + * @param __v Value to format and insert. + * @return Iterator after reading. + */ + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, bool& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + + ///@{ + /** + * @brief Numeric parsing. + * + * Parses the input stream into the integral variable @a v. It does so + * by calling num_get::do_get(). + * + * Parsing is affected by the flag settings in @a io. + * + * The basic parse is affected by the value of io.flags() & + * ios_base::basefield. If equal to ios_base::oct, parses like the + * scanf %o specifier. Else if equal to ios_base::hex, parses like %X + * specifier. Else if basefield equal to 0, parses like the %i + * specifier. Otherwise, parses like %d for signed and %u for unsigned + * types. The matching type length modifier is also used. + * + * Digit grouping is interpreted according to + * numpunct::grouping() and numpunct::thousands_sep(). If the + * pattern of digit groups isn't consistent, sets err to + * ios_base::failbit. + * + * If parsing the string yields a valid value for @a v, @a v is set. + * Otherwise, sets err to ios_base::failbit and leaves @a v unaltered. + * Sets err to ios_base::eofbit if the stream is emptied. + * + * @param __in Start of input stream. + * @param __end End of input stream. + * @param __io Source of locale and flags. + * @param __err Error flags to set. + * @param __v Value to format and insert. + * @return Iterator after reading. + */ + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, long& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, unsigned short& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, unsigned int& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, unsigned long& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + +#ifdef _GLIBCXX_USE_LONG_LONG +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, long long& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, unsigned long long& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } +#pragma GCC diagnostic pop +#endif + ///@} + + ///@{ + /** + * @brief Numeric parsing. + * + * Parses the input stream into the integral variable @a v. It does so + * by calling num_get::do_get(). + * + * The input characters are parsed like the scanf %g specifier. The + * matching type length modifier is also used. + * + * The decimal point character used is numpunct::decimal_point(). + * Digit grouping is interpreted according to + * numpunct::grouping() and numpunct::thousands_sep(). If the + * pattern of digit groups isn't consistent, sets err to + * ios_base::failbit. + * + * If parsing the string yields a valid value for @a v, @a v is set. + * Otherwise, sets err to ios_base::failbit and leaves @a v unaltered. + * Sets err to ios_base::eofbit if the stream is emptied. + * + * @param __in Start of input stream. + * @param __end End of input stream. + * @param __io Source of locale and flags. + * @param __err Error flags to set. + * @param __v Value to format and insert. + * @return Iterator after reading. + */ + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, float& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, double& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, long double& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + ///@} + + /** + * @brief Numeric parsing. + * + * Parses the input stream into the pointer variable @a v. It does so + * by calling num_get::do_get(). + * + * The input characters are parsed like the scanf %p specifier. + * + * Digit grouping is interpreted according to + * numpunct::grouping() and numpunct::thousands_sep(). If the + * pattern of digit groups isn't consistent, sets err to + * ios_base::failbit. + * + * Note that the digit grouping effect for pointers is a bit ambiguous + * in the standard and shouldn't be relied on. See DR 344. + * + * If parsing the string yields a valid value for @a v, @a v is set. + * Otherwise, sets err to ios_base::failbit and leaves @a v unaltered. + * Sets err to ios_base::eofbit if the stream is emptied. + * + * @param __in Start of input stream. + * @param __end End of input stream. + * @param __io Source of locale and flags. + * @param __err Error flags to set. + * @param __v Value to format and insert. + * @return Iterator after reading. + */ + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, void*& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + + protected: + /// Destructor. + virtual ~num_get() { } + + _GLIBCXX_DEFAULT_ABI_TAG + iter_type + _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&, + string&) const; + + template + _GLIBCXX_DEFAULT_ABI_TAG + iter_type + _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&, + _ValueT&) const; + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type + _M_find(const _CharT2*, size_t __len, _CharT2 __c) const + { + int __ret = -1; + if (__len <= 10) + { + if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len)) + __ret = __c - _CharT2('0'); + } + else + { + if (__c >= _CharT2('0') && __c <= _CharT2('9')) + __ret = __c - _CharT2('0'); + else if (__c >= _CharT2('a') && __c <= _CharT2('f')) + __ret = 10 + (__c - _CharT2('a')); + else if (__c >= _CharT2('A') && __c <= _CharT2('F')) + __ret = 10 + (__c - _CharT2('A')); + } + return __ret; + } + + template + typename __gnu_cxx::__enable_if::__value, + int>::__type + _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const + { + int __ret = -1; + const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c); + if (__q) + { + __ret = __q - __zero; + if (__ret > 15) + __ret -= 6; + } + return __ret; + } + + ///@{ + /** + * @brief Numeric parsing. + * + * Parses the input stream into the variable @a v. This function is a + * hook for derived classes to change the value returned. @see get() + * for more details. + * + * @param __beg Start of input stream. + * @param __end End of input stream. + * @param __io Source of locale and flags. + * @param __err Error flags to set. + * @param __v Value to format and insert. + * @return Iterator after reading. + */ + virtual iter_type + do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const; + + virtual iter_type + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, long& __v) const + { return _M_extract_int(__beg, __end, __io, __err, __v); } + + virtual iter_type + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, unsigned short& __v) const + { return _M_extract_int(__beg, __end, __io, __err, __v); } + + virtual iter_type + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, unsigned int& __v) const + { return _M_extract_int(__beg, __end, __io, __err, __v); } + + virtual iter_type + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, unsigned long& __v) const + { return _M_extract_int(__beg, __end, __io, __err, __v); } + +#ifdef _GLIBCXX_USE_LONG_LONG +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + virtual iter_type + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, long long& __v) const + { return _M_extract_int(__beg, __end, __io, __err, __v); } + + virtual iter_type + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, unsigned long long& __v) const + { return _M_extract_int(__beg, __end, __io, __err, __v); } +#pragma GCC diagnostic pop +#endif + + virtual iter_type + do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const; + + virtual iter_type + do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, + double&) const; + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + // For __gnu_cxx_ldbl128::num_get and __gnu_cxx_ieee128::num_get + // this entry in the vtable is for a 64-bit "long double" with the + // same format as double. This keeps the vtable layout consistent + // with std::num_get (visible when -mlong-double-64 is used). + virtual iter_type + __do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, + double&) const; +#else + virtual iter_type + do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, + long double&) const; +#endif + + virtual iter_type + do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const; + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ + // For __gnu_cxx_ieee128::num_get this entry in the vtable is for + // the non-IEEE 128-bit "long double" (aka "double double"). This + // is consistent with __gnu_cxx_ldbl128::num_get (-mabi=ibmlongdouble) + virtual iter_type + __do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, + __ibm128&) const; +#endif + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + // For __gnu_cxx_ldbl128::num_get and __gnu_cxx_ieee128::num_get + // this entry in the vtable is for the 128-bit "long double" type. + virtual iter_type + do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, + long double&) const; +#endif + ///@} + }; + + template + locale::id num_get<_CharT, _InIter>::id; + + + /** + * @brief Primary class template num_put. + * @ingroup locales + * + * This facet encapsulates the code to convert a number to a string. It is + * used by the ostream numeric insertion operators. + * + * The num_put template uses protected virtual functions to provide the + * actual results. The public accessors forward the call to the virtual + * functions. These virtual functions are hooks for developers to + * implement the behavior they require from the num_put facet. + */ + template + class num_put : public locale::facet + { + public: + // Types: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef _OutIter iter_type; + ///@} + + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + num_put(size_t __refs = 0) : facet(__refs) { } + + /** + * @brief Numeric formatting. + * + * Formats the boolean @a v and inserts it into a stream. It does so + * by calling num_put::do_put(). + * + * If ios_base::boolalpha is set, writes ctype::truename() or + * ctype::falsename(). Otherwise formats @a v as an int. + * + * @param __s Stream to write to. + * @param __io Source of locale and flags. + * @param __fill Char_type to use for filling. + * @param __v Value to format and insert. + * @return Iterator after writing. + */ + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const + { return this->do_put(__s, __io, __fill, __v); } + + ///@{ + /** + * @brief Numeric formatting. + * + * Formats the integral value @a v and inserts it into a + * stream. It does so by calling num_put::do_put(). + * + * Formatting is affected by the flag settings in @a io. + * + * The basic format is affected by the value of io.flags() & + * ios_base::basefield. If equal to ios_base::oct, formats like the + * printf %o specifier. Else if equal to ios_base::hex, formats like + * %x or %X with ios_base::uppercase unset or set respectively. + * Otherwise, formats like %d, %ld, %lld for signed and %u, %lu, %llu + * for unsigned values. Note that if both oct and hex are set, neither + * will take effect. + * + * If ios_base::showpos is set, '+' is output before positive values. + * If ios_base::showbase is set, '0' precedes octal values (except 0) + * and '0[xX]' precedes hex values. + * + * The decimal point character used is numpunct::decimal_point(). + * Thousands separators are inserted according to + * numpunct::grouping() and numpunct::thousands_sep(). + * + * If io.width() is non-zero, enough @a fill characters are inserted to + * make the result at least that wide. If + * (io.flags() & ios_base::adjustfield) == ios_base::left, result is + * padded at the end. If ios_base::internal, then padding occurs + * immediately after either a '+' or '-' or after '0x' or '0X'. + * Otherwise, padding occurs at the beginning. + * + * @param __s Stream to write to. + * @param __io Source of locale and flags. + * @param __fill Char_type to use for filling. + * @param __v Value to format and insert. + * @return Iterator after writing. + */ + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, long __v) const + { return this->do_put(__s, __io, __fill, __v); } + + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, + unsigned long __v) const + { return this->do_put(__s, __io, __fill, __v); } + +#ifdef _GLIBCXX_USE_LONG_LONG +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const + { return this->do_put(__s, __io, __fill, __v); } + + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, + unsigned long long __v) const + { return this->do_put(__s, __io, __fill, __v); } +#pragma GCC diagnostic pop +#endif + ///@} + + ///@{ + /** + * @brief Numeric formatting. + * + * Formats the floating point value @a v and inserts it into a stream. + * It does so by calling num_put::do_put(). + * + * Formatting is affected by the flag settings in @a io. + * + * The basic format is affected by the value of io.flags() & + * ios_base::floatfield. If equal to ios_base::fixed, formats like the + * printf %f specifier. Else if equal to ios_base::scientific, formats + * like %e or %E with ios_base::uppercase unset or set respectively. + * Otherwise, formats like %g or %G depending on uppercase. Note that + * if both fixed and scientific are set, the effect will also be like + * %g or %G. + * + * The output precision is given by io.precision(). This precision is + * capped at numeric_limits::digits10 + 2 (different for double and + * long double). The default precision is 6. + * + * If ios_base::showpos is set, '+' is output before positive values. + * If ios_base::showpoint is set, a decimal point will always be + * output. + * + * The decimal point character used is numpunct::decimal_point(). + * Thousands separators are inserted according to + * numpunct::grouping() and numpunct::thousands_sep(). + * + * If io.width() is non-zero, enough @a fill characters are inserted to + * make the result at least that wide. If + * (io.flags() & ios_base::adjustfield) == ios_base::left, result is + * padded at the end. If ios_base::internal, then padding occurs + * immediately after either a '+' or '-' or after '0x' or '0X'. + * Otherwise, padding occurs at the beginning. + * + * @param __s Stream to write to. + * @param __io Source of locale and flags. + * @param __fill Char_type to use for filling. + * @param __v Value to format and insert. + * @return Iterator after writing. + */ + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, double __v) const + { return this->do_put(__s, __io, __fill, __v); } + + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, + long double __v) const + { return this->do_put(__s, __io, __fill, __v); } + ///@} + + /** + * @brief Numeric formatting. + * + * Formats the pointer value @a v and inserts it into a stream. It + * does so by calling num_put::do_put(). + * + * This function formats @a v as an unsigned long with ios_base::hex + * and ios_base::showbase set. + * + * @param __s Stream to write to. + * @param __io Source of locale and flags. + * @param __fill Char_type to use for filling. + * @param __v Value to format and insert. + * @return Iterator after writing. + */ + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, + const void* __v) const + { return this->do_put(__s, __io, __fill, __v); } + + protected: + template + iter_type + _M_insert_float(iter_type, ios_base& __io, char_type __fill, + char __mod, _ValueT __v) const; + + void + _M_group_float(const char* __grouping, size_t __grouping_size, + char_type __sep, const char_type* __p, char_type* __new, + char_type* __cs, int& __len) const; + + template + iter_type + _M_insert_int(iter_type, ios_base& __io, char_type __fill, + _ValueT __v) const; + + void + _M_group_int(const char* __grouping, size_t __grouping_size, + char_type __sep, ios_base& __io, char_type* __new, + char_type* __cs, int& __len) const; + + void + _M_pad(char_type __fill, streamsize __w, ios_base& __io, + char_type* __new, const char_type* __cs, int& __len) const; + + /// Destructor. + virtual + ~num_put() { } + + ///@{ + /** + * @brief Numeric formatting. + * + * These functions do the work of formatting numeric values and + * inserting them into a stream. This function is a hook for derived + * classes to change the value returned. + * + * @param __s Stream to write to. + * @param __io Source of locale and flags. + * @param __fill Char_type to use for filling. + * @param __v Value to format and insert. + * @return Iterator after writing. + */ + virtual iter_type + do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const; + + virtual iter_type + do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const + { return _M_insert_int(__s, __io, __fill, __v); } + + virtual iter_type + do_put(iter_type __s, ios_base& __io, char_type __fill, + unsigned long __v) const + { return _M_insert_int(__s, __io, __fill, __v); } + +#ifdef _GLIBCXX_USE_LONG_LONG +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + virtual iter_type + do_put(iter_type __s, ios_base& __io, char_type __fill, + long long __v) const + { return _M_insert_int(__s, __io, __fill, __v); } + + virtual iter_type + do_put(iter_type __s, ios_base& __io, char_type __fill, + unsigned long long __v) const + { return _M_insert_int(__s, __io, __fill, __v); } +#pragma GCC diagnostic pop +#endif + + virtual iter_type + do_put(iter_type, ios_base&, char_type, double) const; + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + __do_put(iter_type, ios_base&, char_type, double) const; +#else + virtual iter_type + do_put(iter_type, ios_base&, char_type, long double) const; +#endif + + virtual iter_type + do_put(iter_type, ios_base&, char_type, const void*) const; + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ + virtual iter_type + __do_put(iter_type, ios_base&, char_type, __ibm128) const; +#endif + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + do_put(iter_type, ios_base&, char_type, long double) const; +#endif + ///@} + }; + + template + locale::id num_put<_CharT, _OutIter>::id; + +_GLIBCXX_END_NAMESPACE_LDBL + + // Subclause convenience interfaces, inlines. + // NB: These are inline because, when used in a loop, some compilers + // can hoist the body out of the loop; then it's just as fast as the + // C is*() function. + + /// Convenience interface to ctype.is(ctype_base::space, __c). + template + inline bool + isspace(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::space, __c); } + + /// Convenience interface to ctype.is(ctype_base::print, __c). + template + inline bool + isprint(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::print, __c); } + + /// Convenience interface to ctype.is(ctype_base::cntrl, __c). + template + inline bool + iscntrl(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::cntrl, __c); } + + /// Convenience interface to ctype.is(ctype_base::upper, __c). + template + inline bool + isupper(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::upper, __c); } + + /// Convenience interface to ctype.is(ctype_base::lower, __c). + template + inline bool + islower(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::lower, __c); } + + /// Convenience interface to ctype.is(ctype_base::alpha, __c). + template + inline bool + isalpha(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::alpha, __c); } + + /// Convenience interface to ctype.is(ctype_base::digit, __c). + template + inline bool + isdigit(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::digit, __c); } + + /// Convenience interface to ctype.is(ctype_base::punct, __c). + template + inline bool + ispunct(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::punct, __c); } + + /// Convenience interface to ctype.is(ctype_base::xdigit, __c). + template + inline bool + isxdigit(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::xdigit, __c); } + + /// Convenience interface to ctype.is(ctype_base::alnum, __c). + template + inline bool + isalnum(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::alnum, __c); } + + /// Convenience interface to ctype.is(ctype_base::graph, __c). + template + inline bool + isgraph(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::graph, __c); } + +#if __cplusplus >= 201103L + /// Convenience interface to ctype.is(ctype_base::blank, __c). + template + inline bool + isblank(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::blank, __c); } +#endif + + /// Convenience interface to ctype.toupper(__c). + template + inline _CharT + toupper(_CharT __c, const locale& __loc) + { return use_facet >(__loc).toupper(__c); } + + /// Convenience interface to ctype.tolower(__c). + template + inline _CharT + tolower(_CharT __c, const locale& __loc) + { return use_facet >(__loc).tolower(__c); } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +# include + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8f11d67367fdf7b61d11e731595657af3418e9d8 GIT binary patch literal 165568 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. + +/** @file bits/locale_facets.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +#ifndef _LOCALE_FACETS_TCC +#define _LOCALE_FACETS_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Routine to access a cache for the facet. If the cache didn't + // exist before, it gets constructed on the fly. + template + struct __use_cache + { + const _Facet* + operator() (const locale& __loc) const; + }; + + // Specializations. + template + struct __use_cache<__numpunct_cache<_CharT> > + { + const __numpunct_cache<_CharT>* + operator() (const locale& __loc) const + { + const size_t __i = numpunct<_CharT>::id._M_id(); + const locale::facet** __caches = __loc._M_impl->_M_caches; + if (!__caches[__i]) + { + __numpunct_cache<_CharT>* __tmp = 0; + __try + { + __tmp = new __numpunct_cache<_CharT>; + __tmp->_M_cache(__loc); + } + __catch(...) + { + delete __tmp; + __throw_exception_again; + } + __loc._M_impl->_M_install_cache(__tmp, __i); + } + return static_cast*>(__caches[__i]); + } + }; + + template + void + __numpunct_cache<_CharT>::_M_cache(const locale& __loc) + { + const numpunct<_CharT>& __np = use_facet >(__loc); + + char* __grouping = 0; + _CharT* __truename = 0; + _CharT* __falsename = 0; + __try + { + const string& __g = __np.grouping(); + _M_grouping_size = __g.size(); + __grouping = new char[_M_grouping_size]; + __g.copy(__grouping, _M_grouping_size); + _M_use_grouping = (_M_grouping_size + && static_cast(__grouping[0]) > 0 + && (__grouping[0] + != __gnu_cxx::__numeric_traits::__max)); + + const basic_string<_CharT>& __tn = __np.truename(); + _M_truename_size = __tn.size(); + __truename = new _CharT[_M_truename_size]; + __tn.copy(__truename, _M_truename_size); + + const basic_string<_CharT>& __fn = __np.falsename(); + _M_falsename_size = __fn.size(); + __falsename = new _CharT[_M_falsename_size]; + __fn.copy(__falsename, _M_falsename_size); + + _M_decimal_point = __np.decimal_point(); + _M_thousands_sep = __np.thousands_sep(); + + const ctype<_CharT>& __ct = use_facet >(__loc); + __ct.widen(__num_base::_S_atoms_out, + __num_base::_S_atoms_out + + __num_base::_S_oend, _M_atoms_out); + __ct.widen(__num_base::_S_atoms_in, + __num_base::_S_atoms_in + + __num_base::_S_iend, _M_atoms_in); + + _M_grouping = __grouping; + _M_truename = __truename; + _M_falsename = __falsename; + _M_allocated = true; + } + __catch(...) + { + delete [] __grouping; + delete [] __truename; + delete [] __falsename; + __throw_exception_again; + } + } + + // Used by both numeric and monetary facets. + // Check to make sure that the __grouping_tmp string constructed in + // money_get or num_get matches the canonical grouping for a given + // locale. + // __grouping_tmp is parsed L to R + // 1,222,444 == __grouping_tmp of "\1\3\3" + // __grouping is parsed R to L + // 1,222,444 == __grouping of "\3" == "\3\3\3" + _GLIBCXX_PURE bool + __verify_grouping(const char* __grouping, size_t __grouping_size, + const string& __grouping_tmp) throw (); + +_GLIBCXX_BEGIN_NAMESPACE_LDBL + + template + _GLIBCXX_DEFAULT_ABI_TAG + _InIter + num_get<_CharT, _InIter>:: + _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io, + ios_base::iostate& __err, string& __xtrc) const + { + typedef char_traits<_CharT> __traits_type; + typedef __numpunct_cache<_CharT> __cache_type; + __use_cache<__cache_type> __uc; + const locale& __loc = __io._M_getloc(); + const __cache_type* __lc = __uc(__loc); + const _CharT* __lit = __lc->_M_atoms_in; + char_type __c = char_type(); + + // True if __beg becomes equal to __end. + bool __testeof = __beg == __end; + + // First check for sign. + if (!__testeof) + { + __c = *__beg; + const bool __plus = __c == __lit[__num_base::_S_iplus]; + if ((__plus || __c == __lit[__num_base::_S_iminus]) + && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) + && !(__c == __lc->_M_decimal_point)) + { + __xtrc += __plus ? '+' : '-'; + if (++__beg != __end) + __c = *__beg; + else + __testeof = true; + } + } + + // Next, look for leading zeros. + bool __found_mantissa = false; + int __sep_pos = 0; + while (!__testeof) + { + if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) + || __c == __lc->_M_decimal_point) + break; + else if (__c == __lit[__num_base::_S_izero]) + { + if (!__found_mantissa) + { + __xtrc += '0'; + __found_mantissa = true; + } + ++__sep_pos; + + if (++__beg != __end) + __c = *__beg; + else + __testeof = true; + } + else + break; + } + + // Only need acceptable digits for floating point numbers. + bool __found_dec = false; + bool __found_sci = false; + string __found_grouping; + if (__lc->_M_use_grouping) + __found_grouping.reserve(32); + const char_type* __lit_zero = __lit + __num_base::_S_izero; + + if (!__lc->_M_allocated) + // "C" locale + while (!__testeof) + { + const int __digit = _M_find(__lit_zero, 10, __c); + if (__digit != -1) + { + __xtrc += '0' + __digit; + __found_mantissa = true; + } + else if (__c == __lc->_M_decimal_point + && !__found_dec && !__found_sci) + { + __xtrc += '.'; + __found_dec = true; + } + else if ((__c == __lit[__num_base::_S_ie] + || __c == __lit[__num_base::_S_iE]) + && !__found_sci && __found_mantissa) + { + // Scientific notation. + __xtrc += 'e'; + __found_sci = true; + + // Remove optional plus or minus sign, if they exist. + if (++__beg != __end) + { + __c = *__beg; + const bool __plus = __c == __lit[__num_base::_S_iplus]; + if (__plus || __c == __lit[__num_base::_S_iminus]) + __xtrc += __plus ? '+' : '-'; + else + continue; + } + else + { + __testeof = true; + break; + } + } + else + break; + + if (++__beg != __end) + __c = *__beg; + else + __testeof = true; + } + else + while (!__testeof) + { + // According to 22.2.2.1.2, p8-9, first look for thousands_sep + // and decimal_point. + if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) + { + if (!__found_dec && !__found_sci) + { + // NB: Thousands separator at the beginning of a string + // is a no-no, as is two consecutive thousands separators. + if (__sep_pos) + { + __found_grouping += static_cast(__sep_pos); + __sep_pos = 0; + } + else + { + // NB: __convert_to_v will not assign __v and will + // set the failbit. + __xtrc.clear(); + break; + } + } + else + break; + } + else if (__c == __lc->_M_decimal_point) + { + if (!__found_dec && !__found_sci) + { + // If no grouping chars are seen, no grouping check + // is applied. Therefore __found_grouping is adjusted + // only if decimal_point comes after some thousands_sep. + if (__found_grouping.size()) + __found_grouping += static_cast(__sep_pos); + __xtrc += '.'; + __found_dec = true; + } + else + break; + } + else + { + const char_type* __q = + __traits_type::find(__lit_zero, 10, __c); + if (__q) + { + __xtrc += '0' + (__q - __lit_zero); + __found_mantissa = true; + ++__sep_pos; + } + else if ((__c == __lit[__num_base::_S_ie] + || __c == __lit[__num_base::_S_iE]) + && !__found_sci && __found_mantissa) + { + // Scientific notation. + if (__found_grouping.size() && !__found_dec) + __found_grouping += static_cast(__sep_pos); + __xtrc += 'e'; + __found_sci = true; + + // Remove optional plus or minus sign, if they exist. + if (++__beg != __end) + { + __c = *__beg; + const bool __plus = __c == __lit[__num_base::_S_iplus]; + if ((__plus || __c == __lit[__num_base::_S_iminus]) + && !(__lc->_M_use_grouping + && __c == __lc->_M_thousands_sep) + && !(__c == __lc->_M_decimal_point)) + __xtrc += __plus ? '+' : '-'; + else + continue; + } + else + { + __testeof = true; + break; + } + } + else + break; + } + + if (++__beg != __end) + __c = *__beg; + else + __testeof = true; + } + + // Digit grouping is checked. If grouping and found_grouping don't + // match, then get very very upset, and set failbit. + if (__found_grouping.size()) + { + // Add the ending grouping if a decimal or 'e'/'E' wasn't found. + if (!__found_dec && !__found_sci) + __found_grouping += static_cast(__sep_pos); + + if (!std::__verify_grouping(__lc->_M_grouping, + __lc->_M_grouping_size, + __found_grouping)) + __err = ios_base::failbit; + } + + return __beg; + } + + template + template + _GLIBCXX_DEFAULT_ABI_TAG + _InIter + num_get<_CharT, _InIter>:: + _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io, + ios_base::iostate& __err, _ValueT& __v) const + { + typedef char_traits<_CharT> __traits_type; + using __gnu_cxx::__add_unsigned; + typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; + typedef __numpunct_cache<_CharT> __cache_type; + __use_cache<__cache_type> __uc; + const locale& __loc = __io._M_getloc(); + const __cache_type* __lc = __uc(__loc); + const _CharT* __lit = __lc->_M_atoms_in; + char_type __c = char_type(); + + // NB: Iff __basefield == 0, __base can change based on contents. + const ios_base::fmtflags __basefield = __io.flags() + & ios_base::basefield; + const bool __oct = __basefield == ios_base::oct; + int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10); + + // True if __beg becomes equal to __end. + bool __testeof = __beg == __end; + + // First check for sign. + bool __negative = false; + if (!__testeof) + { + __c = *__beg; + __negative = __c == __lit[__num_base::_S_iminus]; + if ((__negative || __c == __lit[__num_base::_S_iplus]) + && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) + && !(__c == __lc->_M_decimal_point)) + { + if (++__beg != __end) + __c = *__beg; + else + __testeof = true; + } + } + + // Next, look for leading zeros and check required digits + // for base formats. + bool __found_zero = false; + int __sep_pos = 0; + while (!__testeof) + { + if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) + || __c == __lc->_M_decimal_point) + break; + else if (__c == __lit[__num_base::_S_izero] + && (!__found_zero || __base == 10)) + { + __found_zero = true; + ++__sep_pos; + if (__basefield == 0) + __base = 8; + if (__base == 8) + __sep_pos = 0; + } + else if (__found_zero + && (__c == __lit[__num_base::_S_ix] + || __c == __lit[__num_base::_S_iX])) + { + if (__basefield == 0) + __base = 16; + if (__base == 16) + { + __found_zero = false; + __sep_pos = 0; + } + else + break; + } + else + break; + + if (++__beg != __end) + { + __c = *__beg; + if (!__found_zero) + break; + } + else + __testeof = true; + } + + // At this point, base is determined. If not hex, only allow + // base digits as valid input. + const size_t __len = (__base == 16 ? __num_base::_S_iend + - __num_base::_S_izero : __base); + + // Extract. + typedef __gnu_cxx::__numeric_traits<_ValueT> __num_traits; + string __found_grouping; + if (__lc->_M_use_grouping) + __found_grouping.reserve(32); + bool __testfail = false; + bool __testoverflow = false; + const __unsigned_type __max = + (__negative && __num_traits::__is_signed) + ? -static_cast<__unsigned_type>(__num_traits::__min) + : __num_traits::__max; + const __unsigned_type __smax = __max / __base; + __unsigned_type __result = 0; + int __digit = 0; + const char_type* __lit_zero = __lit + __num_base::_S_izero; + + if (!__lc->_M_allocated) + // "C" locale + while (!__testeof) + { + __digit = _M_find(__lit_zero, __len, __c); + if (__digit == -1) + break; + + if (__result > __smax) + __testoverflow = true; + else + { + __result *= __base; + __testoverflow |= __result > __max - __digit; + __result += __digit; + ++__sep_pos; + } + + if (++__beg != __end) + __c = *__beg; + else + __testeof = true; + } + else + while (!__testeof) + { + // According to 22.2.2.1.2, p8-9, first look for thousands_sep + // and decimal_point. + if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) + { + // NB: Thousands separator at the beginning of a string + // is a no-no, as is two consecutive thousands separators. + if (__sep_pos) + { + __found_grouping += static_cast(__sep_pos); + __sep_pos = 0; + } + else + { + __testfail = true; + break; + } + } + else if (__c == __lc->_M_decimal_point) + break; + else + { + const char_type* __q = + __traits_type::find(__lit_zero, __len, __c); + if (!__q) + break; + + __digit = __q - __lit_zero; + if (__digit > 15) + __digit -= 6; + if (__result > __smax) + __testoverflow = true; + else + { + __result *= __base; + __testoverflow |= __result > __max - __digit; + __result += __digit; + ++__sep_pos; + } + } + + if (++__beg != __end) + __c = *__beg; + else + __testeof = true; + } + + // Digit grouping is checked. If grouping and found_grouping don't + // match, then get very very upset, and set failbit. + if (__found_grouping.size()) + { + // Add the ending grouping. + __found_grouping += static_cast(__sep_pos); + + if (!std::__verify_grouping(__lc->_M_grouping, + __lc->_M_grouping_size, + __found_grouping)) + __err = ios_base::failbit; + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 23. Num_get overflow result. + if ((!__sep_pos && !__found_zero && !__found_grouping.size()) + || __testfail) + { + __v = 0; + __err = ios_base::failbit; + } + else if (__testoverflow) + { + if (__negative && __num_traits::__is_signed) + __v = __num_traits::__min; + else + __v = __num_traits::__max; + __err = ios_base::failbit; + } + else + __v = __negative ? -__result : __result; + + if (__testeof) + __err |= ios_base::eofbit; + return __beg; + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 17. Bad bool parsing + template + _InIter + num_get<_CharT, _InIter>:: + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, bool& __v) const + { + if (!(__io.flags() & ios_base::boolalpha)) + { + // Parse bool values as long. + // NB: We can't just call do_get(long) here, as it might + // refer to a derived class. + long __l = -1; + __beg = _M_extract_int(__beg, __end, __io, __err, __l); + if (__l == 0 || __l == 1) + __v = bool(__l); + else + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 23. Num_get overflow result. + __v = true; + __err = ios_base::failbit; + if (__beg == __end) + __err |= ios_base::eofbit; + } + } + else + { + // Parse bool values as alphanumeric. + typedef __numpunct_cache<_CharT> __cache_type; + __use_cache<__cache_type> __uc; + const locale& __loc = __io._M_getloc(); + const __cache_type* __lc = __uc(__loc); + + bool __testf = true; + bool __testt = true; + bool __donef = __lc->_M_falsename_size == 0; + bool __donet = __lc->_M_truename_size == 0; + bool __testeof = false; + size_t __n = 0; + while (!__donef || !__donet) + { + if (__beg == __end) + { + __testeof = true; + break; + } + + const char_type __c = *__beg; + + if (!__donef) + __testf = __c == __lc->_M_falsename[__n]; + + if (!__testf && __donet) + break; + + if (!__donet) + __testt = __c == __lc->_M_truename[__n]; + + if (!__testt && __donef) + break; + + if (!__testt && !__testf) + break; + + ++__n; + ++__beg; + + __donef = !__testf || __n >= __lc->_M_falsename_size; + __donet = !__testt || __n >= __lc->_M_truename_size; + } + if (__testf && __n == __lc->_M_falsename_size && __n) + { + __v = false; + if (__testt && __n == __lc->_M_truename_size) + __err = ios_base::failbit; + else + __err = __testeof ? ios_base::eofbit : ios_base::goodbit; + } + else if (__testt && __n == __lc->_M_truename_size && __n) + { + __v = true; + __err = __testeof ? ios_base::eofbit : ios_base::goodbit; + } + else + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 23. Num_get overflow result. + __v = false; + __err = ios_base::failbit; + if (__testeof) + __err |= ios_base::eofbit; + } + } + return __beg; + } + + template + _InIter + num_get<_CharT, _InIter>:: + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, float& __v) const + { + string __xtrc; + __xtrc.reserve(32); + __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); + std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + + template + _InIter + num_get<_CharT, _InIter>:: + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, double& __v) const + { + string __xtrc; + __xtrc.reserve(32); + __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); + std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + template + _InIter + num_get<_CharT, _InIter>:: + __do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, double& __v) const + { + string __xtrc; + __xtrc.reserve(32); + __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); + std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } +#endif + + template + _InIter + num_get<_CharT, _InIter>:: + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, long double& __v) const + { + string __xtrc; + __xtrc.reserve(32); + __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); + std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + + template + _InIter + num_get<_CharT, _InIter>:: + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, void*& __v) const + { + // Prepare for hex formatted input. + typedef ios_base::fmtflags fmtflags; + const fmtflags __fmt = __io.flags(); + __io.flags((__fmt & ~ios_base::basefield) | ios_base::hex); + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + typedef __gnu_cxx::__conditional_type<(sizeof(void*) + <= sizeof(unsigned long)), + unsigned long, unsigned long long>::__type _UIntPtrType; +#pragma GCC diagnostic pop + + _UIntPtrType __ul; + __beg = _M_extract_int(__beg, __end, __io, __err, __ul); + + // Reset from hex formatted input. + __io.flags(__fmt); + + __v = reinterpret_cast(__ul); + return __beg; + } + +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ + template + _InIter + num_get<_CharT, _InIter>:: + __do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, __ibm128& __v) const + { + string __xtrc; + __xtrc.reserve(32); + __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); + std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } +#endif + + // For use by integer and floating-point types after they have been + // converted into a char_type string. + template + void + num_put<_CharT, _OutIter>:: + _M_pad(_CharT __fill, streamsize __w, ios_base& __io, + _CharT* __new, const _CharT* __cs, int& __len) const + { + // [22.2.2.2.2] Stage 3. + // If necessary, pad. + __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new, + __cs, __w, __len); + __len = static_cast(__w); + } + +_GLIBCXX_END_NAMESPACE_LDBL + + template + int + __int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit, + ios_base::fmtflags __flags, bool __dec) + { + _CharT* __buf = __bufend; + if (__builtin_expect(__dec, true)) + { + // Decimal. + do + { + *--__buf = __lit[(__v % 10) + __num_base::_S_odigits]; + __v /= 10; + } + while (__v != 0); + } + else if ((__flags & ios_base::basefield) == ios_base::oct) + { + // Octal. + do + { + *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits]; + __v >>= 3; + } + while (__v != 0); + } + else + { + // Hex. + const bool __uppercase = __flags & ios_base::uppercase; + const int __case_offset = __uppercase ? __num_base::_S_oudigits + : __num_base::_S_odigits; + do + { + *--__buf = __lit[(__v & 0xf) + __case_offset]; + __v >>= 4; + } + while (__v != 0); + } + return __bufend - __buf; + } + +_GLIBCXX_BEGIN_NAMESPACE_LDBL + + template + void + num_put<_CharT, _OutIter>:: + _M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep, + ios_base&, _CharT* __new, _CharT* __cs, int& __len) const + { + _CharT* __p = std::__add_grouping(__new, __sep, __grouping, + __grouping_size, __cs, __cs + __len); + __len = __p - __new; + } + + template + template + _OutIter + num_put<_CharT, _OutIter>:: + _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill, + _ValueT __v) const + { + using __gnu_cxx::__add_unsigned; + typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; + typedef __numpunct_cache<_CharT> __cache_type; + __use_cache<__cache_type> __uc; + const locale& __loc = __io._M_getloc(); + const __cache_type* __lc = __uc(__loc); + const _CharT* __lit = __lc->_M_atoms_out; + const ios_base::fmtflags __flags = __io.flags(); + + // Long enough to hold hex, dec, and octal representations. + const int __ilen = 5 * sizeof(_ValueT); + _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __ilen)); + + // [22.2.2.2.2] Stage 1, numeric conversion to character. + // Result is returned right-justified in the buffer. + const ios_base::fmtflags __basefield = __flags & ios_base::basefield; + const bool __dec = (__basefield != ios_base::oct + && __basefield != ios_base::hex); + const __unsigned_type __u = ((__v > 0 || !__dec) + ? __unsigned_type(__v) + : -__unsigned_type(__v)); + int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec); + __cs += __ilen - __len; + + // Add grouping, if necessary. + if (__lc->_M_use_grouping) + { + // Grouping can add (almost) as many separators as the number + // of digits + space is reserved for numeric base or sign. + _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * (__len + 1) + * 2)); + _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size, + __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len); + __cs = __cs2 + 2; + } + + // Complete Stage 1, prepend numeric base or sign. + if (__builtin_expect(__dec, true)) + { + // Decimal. + if (__v >= 0) + { + if (bool(__flags & ios_base::showpos) + && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) + *--__cs = __lit[__num_base::_S_oplus], ++__len; + } + else + *--__cs = __lit[__num_base::_S_ominus], ++__len; + } + else if (bool(__flags & ios_base::showbase) && __v) + { + if (__basefield == ios_base::oct) + *--__cs = __lit[__num_base::_S_odigits], ++__len; + else + { + // 'x' or 'X' + const bool __uppercase = __flags & ios_base::uppercase; + *--__cs = __lit[__num_base::_S_ox + __uppercase]; + // '0' + *--__cs = __lit[__num_base::_S_odigits]; + __len += 2; + } + } + + // Pad. + const streamsize __w = __io.width(); + if (__w > static_cast(__len)) + { + _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __w)); + _M_pad(__fill, __w, __io, __cs3, __cs, __len); + __cs = __cs3; + } + __io.width(0); + + // [22.2.2.2.2] Stage 4. + // Write resulting, fully-formatted string to output iterator. + return std::__write(__s, __cs, __len); + } + + template + void + num_put<_CharT, _OutIter>:: + _M_group_float(const char* __grouping, size_t __grouping_size, + _CharT __sep, const _CharT* __p, _CharT* __new, + _CharT* __cs, int& __len) const + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 282. What types does numpunct grouping refer to? + // Add grouping, if necessary. + const int __declen = __p ? __p - __cs : __len; + _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping, + __grouping_size, + __cs, __cs + __declen); + + // Tack on decimal part. + int __newlen = __p2 - __new; + if (__p) + { + char_traits<_CharT>::copy(__p2, __p, __len - __declen); + __newlen += __len - __declen; + } + __len = __newlen; + } + + // The following code uses vsnprintf (or vsprintf(), when + // _GLIBCXX_USE_C99_STDIO is not defined) to convert floating point + // values for insertion into a stream. An optimization would be to + // replace them with code that works directly on a wide buffer and + // then use __pad to do the padding. It would be good to replace + // them anyway to gain back the efficiency that C++ provides by + // knowing up front the type of the values to insert. Also, sprintf + // is dangerous since may lead to accidental buffer overruns. This + // implementation follows the C++ standard fairly directly as + // outlined in 22.2.2.2 [lib.locale.num.put] + template + template + _OutIter + num_put<_CharT, _OutIter>:: + _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod, + _ValueT __v) const + { + typedef __numpunct_cache<_CharT> __cache_type; + __use_cache<__cache_type> __uc; + const locale& __loc = __io._M_getloc(); + const __cache_type* __lc = __uc(__loc); + + // Use default precision if out of range. + const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision(); + + const int __max_digits = + __gnu_cxx::__numeric_traits<_ValueT>::__digits10; + + // [22.2.2.2.2] Stage 1, numeric conversion to character. + int __len; + // Long enough for the max format spec. + char __fbuf[16]; + __num_base::_S_format_float(__io, __fbuf, __mod); + +#if _GLIBCXX_USE_C99_STDIO && !_GLIBCXX_HAVE_BROKEN_VSNPRINTF + // Precision is always used except for hexfloat format. + const bool __use_prec = + (__io.flags() & ios_base::floatfield) != ios_base::floatfield; + + // First try a buffer perhaps big enough (most probably sufficient + // for non-ios_base::fixed outputs) + int __cs_size = __max_digits * 3; + char* __cs = static_cast(__builtin_alloca(__cs_size)); + if (__use_prec) + __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, + __fbuf, __prec, __v); + else + __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, + __fbuf, __v); + + // If the buffer was not large enough, try again with the correct size. + if (__len >= __cs_size) + { + __cs_size = __len + 1; + __cs = static_cast(__builtin_alloca(__cs_size)); + if (__use_prec) + __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, + __fbuf, __prec, __v); + else + __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, + __fbuf, __v); + } +#else + // Consider the possibility of long ios_base::fixed outputs + const bool __fixed = __io.flags() & ios_base::fixed; + const int __max_exp = + __gnu_cxx::__numeric_traits<_ValueT>::__max_exponent10; + + // The size of the output string is computed as follows. + // ios_base::fixed outputs may need up to __max_exp + 1 chars + // for the integer part + __prec chars for the fractional part + // + 3 chars for sign, decimal point, '\0'. On the other hand, + // for non-fixed outputs __max_digits * 2 + __prec chars are + // largely sufficient. + const int __cs_size = __fixed ? __max_exp + __prec + 4 + : __max_digits * 2 + __prec; + char* __cs = static_cast(__builtin_alloca(__cs_size)); + __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, __fbuf, + __prec, __v); +#endif + + // [22.2.2.2.2] Stage 2, convert to char_type, using correct + // numpunct.decimal_point() values for '.' and adding grouping. + const ctype<_CharT>& __ctype = use_facet >(__loc); + + _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __len)); + __ctype.widen(__cs, __cs + __len, __ws); + + // Replace decimal point. + _CharT* __wp = 0; + const char* __p = char_traits::find(__cs, __len, '.'); + if (__p) + { + __wp = __ws + (__p - __cs); + *__wp = __lc->_M_decimal_point; + } + + // Add grouping, if necessary. + // N.B. Make sure to not group things like 2e20, i.e., no decimal + // point, scientific notation. + if (__lc->_M_use_grouping + && (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9' + && __cs[1] >= '0' && __cs[2] >= '0'))) + { + // Grouping can add (almost) as many separators as the + // number of digits, but no more. + _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __len * 2)); + + streamsize __off = 0; + if (__cs[0] == '-' || __cs[0] == '+') + { + __off = 1; + __ws2[0] = __ws[0]; + __len -= 1; + } + + _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size, + __lc->_M_thousands_sep, __wp, __ws2 + __off, + __ws + __off, __len); + __len += __off; + + __ws = __ws2; + } + + // Pad. + const streamsize __w = __io.width(); + if (__w > static_cast(__len)) + { + _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __w)); + _M_pad(__fill, __w, __io, __ws3, __ws, __len); + __ws = __ws3; + } + __io.width(0); + + // [22.2.2.2.2] Stage 4. + // Write resulting, fully-formatted string to output iterator. + return std::__write(__s, __ws, __len); + } + + template + _OutIter + num_put<_CharT, _OutIter>:: + do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const + { + const ios_base::fmtflags __flags = __io.flags(); + if ((__flags & ios_base::boolalpha) == 0) + { + const long __l = __v; + __s = _M_insert_int(__s, __io, __fill, __l); + } + else + { + typedef __numpunct_cache<_CharT> __cache_type; + __use_cache<__cache_type> __uc; + const locale& __loc = __io._M_getloc(); + const __cache_type* __lc = __uc(__loc); + + const _CharT* __name = __v ? __lc->_M_truename + : __lc->_M_falsename; + int __len = __v ? __lc->_M_truename_size + : __lc->_M_falsename_size; + + const streamsize __w = __io.width(); + if (__w > static_cast(__len)) + { + const streamsize __plen = __w - __len; + _CharT* __ps + = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __plen)); + + char_traits<_CharT>::assign(__ps, __plen, __fill); + __io.width(0); + + if ((__flags & ios_base::adjustfield) == ios_base::left) + { + __s = std::__write(__s, __name, __len); + __s = std::__write(__s, __ps, __plen); + } + else + { + __s = std::__write(__s, __ps, __plen); + __s = std::__write(__s, __name, __len); + } + return __s; + } + __io.width(0); + __s = std::__write(__s, __name, __len); + } + return __s; + } + + template + _OutIter + num_put<_CharT, _OutIter>:: + do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const + { return _M_insert_float(__s, __io, __fill, char(), __v); } + +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + template + _OutIter + num_put<_CharT, _OutIter>:: + __do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const + { return _M_insert_float(__s, __io, __fill, char(), __v); } +#endif + + template + _OutIter + num_put<_CharT, _OutIter>:: + do_put(iter_type __s, ios_base& __io, char_type __fill, + long double __v) const + { return _M_insert_float(__s, __io, __fill, 'L', __v); } + + template + _OutIter + num_put<_CharT, _OutIter>:: + do_put(iter_type __s, ios_base& __io, char_type __fill, + const void* __v) const + { + const ios_base::fmtflags __flags = __io.flags(); + const ios_base::fmtflags __fmt = ~(ios_base::basefield + | ios_base::uppercase); + __io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase)); + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + typedef __gnu_cxx::__conditional_type<(sizeof(const void*) + <= sizeof(unsigned long)), + unsigned long, unsigned long long>::__type _UIntPtrType; +#pragma GCC diagnostic pop + + __s = _M_insert_int(__s, __io, __fill, + reinterpret_cast<_UIntPtrType>(__v)); + __io.flags(__flags); + return __s; + } + +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ + template + _OutIter + num_put<_CharT, _OutIter>:: + __do_put(iter_type __s, ios_base& __io, char_type __fill, + __ibm128 __v) const + { return _M_insert_float(__s, __io, __fill, 'L', __v); } +#endif +_GLIBCXX_END_NAMESPACE_LDBL + + // Construct correctly padded string, as per 22.2.2.2.2 + // Assumes + // __newlen > __oldlen + // __news is allocated for __newlen size + + // NB: Of the two parameters, _CharT can be deduced from the + // function arguments. The other (_Traits) has to be explicitly specified. + template + void + __pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill, + _CharT* __news, const _CharT* __olds, + streamsize __newlen, streamsize __oldlen) + { + const size_t __plen = static_cast(__newlen - __oldlen); + const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield; + + // Padding last. + if (__adjust == ios_base::left) + { + _Traits::copy(__news, __olds, __oldlen); + _Traits::assign(__news + __oldlen, __plen, __fill); + return; + } + + size_t __mod = 0; + if (__adjust == ios_base::internal) + { + // Pad after the sign, if there is one. + // Pad after 0[xX], if there is one. + // Who came up with these rules, anyway? Jeeze. + const locale& __loc = __io._M_getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); + + if (__ctype.widen('-') == __olds[0] + || __ctype.widen('+') == __olds[0]) + { + __news[0] = __olds[0]; + __mod = 1; + ++__news; + } + else if (__ctype.widen('0') == __olds[0] + && __oldlen > 1 + && (__ctype.widen('x') == __olds[1] + || __ctype.widen('X') == __olds[1])) + { + __news[0] = __olds[0]; + __news[1] = __olds[1]; + __mod = 2; + __news += 2; + } + // else Padding first. + } + _Traits::assign(__news, __plen, __fill); + _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod); + } + + template + _CharT* + __add_grouping(_CharT* __s, _CharT __sep, + const char* __gbeg, size_t __gsize, + const _CharT* __first, const _CharT* __last) + { + size_t __idx = 0; + size_t __ctr = 0; + + while (__last - __first > __gbeg[__idx] + && static_cast(__gbeg[__idx]) > 0 + && __gbeg[__idx] != __gnu_cxx::__numeric_traits::__max) + { + __last -= __gbeg[__idx]; + __idx < __gsize - 1 ? ++__idx : ++__ctr; + } + + while (__first != __last) + *__s++ = *__first++; + + while (__ctr--) + { + *__s++ = __sep; + for (char __i = __gbeg[__idx]; __i > 0; --__i) + *__s++ = *__first++; + } + + while (__idx--) + { + *__s++ = __sep; + for (char __i = __gbeg[__idx]; __i > 0; --__i) + *__s++ = *__first++; + } + + return __s; + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class _GLIBCXX_NAMESPACE_CXX11 numpunct; + extern template class _GLIBCXX_NAMESPACE_CXX11 numpunct_byname; + extern template class _GLIBCXX_NAMESPACE_LDBL num_get; + extern template class _GLIBCXX_NAMESPACE_LDBL num_put; + extern template class ctype_byname; + + extern template + const ctype* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const numpunct* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const num_put* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const num_get* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const ctype& + use_facet >(const locale&); + + extern template + const numpunct& + use_facet >(const locale&); + + extern template + const num_put& + use_facet >(const locale&); + + extern template + const num_get& + use_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class _GLIBCXX_NAMESPACE_CXX11 numpunct; + extern template class _GLIBCXX_NAMESPACE_CXX11 numpunct_byname; + extern template class _GLIBCXX_NAMESPACE_LDBL num_get; + extern template class _GLIBCXX_NAMESPACE_LDBL num_put; + extern template class ctype_byname; + + extern template + const ctype* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const numpunct* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const num_put* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const num_get* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const ctype& + use_facet >(const locale&); + + extern template + const numpunct& + use_facet >(const locale&); + + extern template + const num_put& + use_facet >(const locale&); + + extern template + const num_get& + use_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#pragma GCC diagnostic pop +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..2eeaa1c589c8cd1dc09c91fe9dedddfbdb376a46 GIT binary patch literal 138397 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%0Al}NXKfIc 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. + +/** @file bits/locale_facets_nonio.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.1 Locales +// + +#ifndef _LOCALE_FACETS_NONIO_H +#define _LOCALE_FACETS_NONIO_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // For struct tm + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief Time format ordering data. + * @ingroup locales + * + * This class provides an enum representing different orderings of + * time: day, month, and year. + */ + class time_base + { + public: + enum dateorder { no_order, dmy, mdy, ymd, ydm }; + }; + + template + struct __timepunct_cache : public locale::facet + { + // List of all known timezones, with GMT first. + static const _CharT* _S_timezones[14]; + + const _CharT* _M_date_format; + const _CharT* _M_date_era_format; + const _CharT* _M_time_format; + const _CharT* _M_time_era_format; + const _CharT* _M_date_time_format; + const _CharT* _M_date_time_era_format; + const _CharT* _M_am; + const _CharT* _M_pm; + const _CharT* _M_am_pm_format; + + // Day names, starting with "C"'s Sunday. + const _CharT* _M_day1; + const _CharT* _M_day2; + const _CharT* _M_day3; + const _CharT* _M_day4; + const _CharT* _M_day5; + const _CharT* _M_day6; + const _CharT* _M_day7; + + // Abbreviated day names, starting with "C"'s Sun. + const _CharT* _M_aday1; + const _CharT* _M_aday2; + const _CharT* _M_aday3; + const _CharT* _M_aday4; + const _CharT* _M_aday5; + const _CharT* _M_aday6; + const _CharT* _M_aday7; + + // Month names, starting with "C"'s January. + const _CharT* _M_month01; + const _CharT* _M_month02; + const _CharT* _M_month03; + const _CharT* _M_month04; + const _CharT* _M_month05; + const _CharT* _M_month06; + const _CharT* _M_month07; + const _CharT* _M_month08; + const _CharT* _M_month09; + const _CharT* _M_month10; + const _CharT* _M_month11; + const _CharT* _M_month12; + + // Abbreviated month names, starting with "C"'s Jan. + const _CharT* _M_amonth01; + const _CharT* _M_amonth02; + const _CharT* _M_amonth03; + const _CharT* _M_amonth04; + const _CharT* _M_amonth05; + const _CharT* _M_amonth06; + const _CharT* _M_amonth07; + const _CharT* _M_amonth08; + const _CharT* _M_amonth09; + const _CharT* _M_amonth10; + const _CharT* _M_amonth11; + const _CharT* _M_amonth12; + + bool _M_allocated; + + __timepunct_cache(size_t __refs = 0) : facet(__refs), + _M_date_format(0), _M_date_era_format(0), _M_time_format(0), + _M_time_era_format(0), _M_date_time_format(0), + _M_date_time_era_format(0), _M_am(0), _M_pm(0), + _M_am_pm_format(0), _M_day1(0), _M_day2(0), _M_day3(0), + _M_day4(0), _M_day5(0), _M_day6(0), _M_day7(0), + _M_aday1(0), _M_aday2(0), _M_aday3(0), _M_aday4(0), + _M_aday5(0), _M_aday6(0), _M_aday7(0), _M_month01(0), + _M_month02(0), _M_month03(0), _M_month04(0), _M_month05(0), + _M_month06(0), _M_month07(0), _M_month08(0), _M_month09(0), + _M_month10(0), _M_month11(0), _M_month12(0), _M_amonth01(0), + _M_amonth02(0), _M_amonth03(0), _M_amonth04(0), + _M_amonth05(0), _M_amonth06(0), _M_amonth07(0), + _M_amonth08(0), _M_amonth09(0), _M_amonth10(0), + _M_amonth11(0), _M_amonth12(0), _M_allocated(false) + { } + + ~__timepunct_cache(); + + private: + __timepunct_cache& + operator=(const __timepunct_cache&); + + explicit + __timepunct_cache(const __timepunct_cache&); + }; + + template + __timepunct_cache<_CharT>::~__timepunct_cache() + { + if (_M_allocated) + { + // Unused. + } + } + + // Specializations. + template<> + const char* + __timepunct_cache::_S_timezones[14]; + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + const wchar_t* + __timepunct_cache::_S_timezones[14]; +#endif + + // Generic. + template + const _CharT* __timepunct_cache<_CharT>::_S_timezones[14]; + + template + class __timepunct : public locale::facet + { + public: + // Types: + typedef _CharT __char_type; + typedef __timepunct_cache<_CharT> __cache_type; + + protected: + __cache_type* _M_data; + __c_locale _M_c_locale_timepunct; + const char* _M_name_timepunct; + + public: + /// Numpunct facet id. + static locale::id id; + + explicit + __timepunct(size_t __refs = 0); + + explicit + __timepunct(__cache_type* __cache, size_t __refs = 0); + + /** + * @brief Internal constructor. Not for general use. + * + * This is a constructor for use by the library itself to set up new + * locales. + * + * @param __cloc The C locale. + * @param __s The name of a locale. + * @param refs Passed to the base facet class. + */ + explicit + __timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0); + + // FIXME: for error checking purposes _M_put should return the return + // value of strftime/wcsftime. + void + _M_put(_CharT* __s, size_t __maxlen, const _CharT* __format, + const tm* __tm) const throw (); + + void + _M_date_formats(const _CharT** __date) const + { + // Always have default first. + __date[0] = _M_data->_M_date_format; + __date[1] = _M_data->_M_date_era_format; + } + + void + _M_time_formats(const _CharT** __time) const + { + // Always have default first. + __time[0] = _M_data->_M_time_format; + __time[1] = _M_data->_M_time_era_format; + } + + void + _M_date_time_formats(const _CharT** __dt) const + { + // Always have default first. + __dt[0] = _M_data->_M_date_time_format; + __dt[1] = _M_data->_M_date_time_era_format; + } + +#if !_GLIBCXX_INLINE_VERSION + void + _M_am_pm_format(const _CharT*) const + { /* Kept for ABI compatibility, see PR65927 */ } +#endif + + void + _M_am_pm_format(const _CharT** __ampm_format) const + { + __ampm_format[0] = _M_data->_M_am_pm_format; + } + + void + _M_am_pm(const _CharT** __ampm) const + { + __ampm[0] = _M_data->_M_am; + __ampm[1] = _M_data->_M_pm; + } + + void + _M_days(const _CharT** __days) const + { + __days[0] = _M_data->_M_day1; + __days[1] = _M_data->_M_day2; + __days[2] = _M_data->_M_day3; + __days[3] = _M_data->_M_day4; + __days[4] = _M_data->_M_day5; + __days[5] = _M_data->_M_day6; + __days[6] = _M_data->_M_day7; + } + + void + _M_days_abbreviated(const _CharT** __days) const + { + __days[0] = _M_data->_M_aday1; + __days[1] = _M_data->_M_aday2; + __days[2] = _M_data->_M_aday3; + __days[3] = _M_data->_M_aday4; + __days[4] = _M_data->_M_aday5; + __days[5] = _M_data->_M_aday6; + __days[6] = _M_data->_M_aday7; + } + + void + _M_months(const _CharT** __months) const + { + __months[0] = _M_data->_M_month01; + __months[1] = _M_data->_M_month02; + __months[2] = _M_data->_M_month03; + __months[3] = _M_data->_M_month04; + __months[4] = _M_data->_M_month05; + __months[5] = _M_data->_M_month06; + __months[6] = _M_data->_M_month07; + __months[7] = _M_data->_M_month08; + __months[8] = _M_data->_M_month09; + __months[9] = _M_data->_M_month10; + __months[10] = _M_data->_M_month11; + __months[11] = _M_data->_M_month12; + } + + void + _M_months_abbreviated(const _CharT** __months) const + { + __months[0] = _M_data->_M_amonth01; + __months[1] = _M_data->_M_amonth02; + __months[2] = _M_data->_M_amonth03; + __months[3] = _M_data->_M_amonth04; + __months[4] = _M_data->_M_amonth05; + __months[5] = _M_data->_M_amonth06; + __months[6] = _M_data->_M_amonth07; + __months[7] = _M_data->_M_amonth08; + __months[8] = _M_data->_M_amonth09; + __months[9] = _M_data->_M_amonth10; + __months[10] = _M_data->_M_amonth11; + __months[11] = _M_data->_M_amonth12; + } + + protected: + virtual + ~__timepunct(); + + // For use at construction time only. + void + _M_initialize_timepunct(__c_locale __cloc = 0); + }; + + template + locale::id __timepunct<_CharT>::id; + + // Specializations. + template<> + void + __timepunct::_M_initialize_timepunct(__c_locale __cloc); + + template<> + void + __timepunct::_M_put(char*, size_t, const char*, const tm*) const throw (); + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + void + __timepunct::_M_initialize_timepunct(__c_locale __cloc); + + template<> + void + __timepunct::_M_put(wchar_t*, size_t, const wchar_t*, + const tm*) const throw (); +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +// Include host and configuration specific timepunct functions. +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + struct __time_get_state + { + // Finalize state. + void + _M_finalize_state(tm* __tm); + + unsigned int _M_have_I : 1; + unsigned int _M_have_wday : 1; + unsigned int _M_have_yday : 1; + unsigned int _M_have_mon : 1; + unsigned int _M_have_mday : 1; + unsigned int _M_have_uweek : 1; + unsigned int _M_have_wweek : 1; + unsigned int _M_have_century : 1; + unsigned int _M_is_pm : 1; + unsigned int _M_want_century : 1; + unsigned int _M_want_xday : 1; + unsigned int _M_pad1 : 5; + unsigned int _M_week_no : 6; + unsigned int _M_pad2 : 10; + int _M_century; + int _M_pad3; + }; + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + /** + * @brief Primary class template time_get. + * @ingroup locales + * + * This facet encapsulates the code to parse and return a date or + * time from a string. It is used by the istream numeric + * extraction operators. + * + * The time_get template uses protected virtual functions to provide the + * actual results. The public accessors forward the call to the virtual + * functions. These virtual functions are hooks for developers to + * implement the behavior they require from the time_get facet. + */ + template + class time_get : public locale::facet, public time_base + { + public: + // Types: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef _InIter iter_type; + ///@} + + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + time_get(size_t __refs = 0) + : facet (__refs) { } + + /** + * @brief Return preferred order of month, day, and year. + * + * This function returns an enum from time_base::dateorder giving the + * preferred ordering if the format @a x given to time_put::put() only + * uses month, day, and year. If the format @a x for the associated + * locale uses other fields, this function returns + * time_base::dateorder::noorder. + * + * NOTE: The library always returns noorder at the moment. + * + * @return A member of time_base::dateorder. + */ + dateorder + date_order() const + { return this->do_date_order(); } + + /** + * @brief Parse input time string. + * + * This function parses a time according to the format @a X and puts the + * results into a user-supplied struct tm. The result is returned by + * calling time_get::do_get_time(). + * + * If there is a valid time string according to format @a X, @a tm will + * be filled in accordingly and the returned iterator will point to the + * first character beyond the time string. If an error occurs before + * the end, err |= ios_base::failbit. If parsing reads all the + * characters, err |= ios_base::eofbit. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond time string. + */ + iter_type + get_time(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const + { return this->do_get_time(__beg, __end, __io, __err, __tm); } + + /** + * @brief Parse input date string. + * + * This function parses a date according to the format @a x and puts the + * results into a user-supplied struct tm. The result is returned by + * calling time_get::do_get_date(). + * + * If there is a valid date string according to format @a x, @a tm will + * be filled in accordingly and the returned iterator will point to the + * first character beyond the date string. If an error occurs before + * the end, err |= ios_base::failbit. If parsing reads all the + * characters, err |= ios_base::eofbit. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond date string. + */ + iter_type + get_date(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const + { return this->do_get_date(__beg, __end, __io, __err, __tm); } + + /** + * @brief Parse input weekday string. + * + * This function parses a weekday name and puts the results into a + * user-supplied struct tm. The result is returned by calling + * time_get::do_get_weekday(). + * + * Parsing starts by parsing an abbreviated weekday name. If a valid + * abbreviation is followed by a character that would lead to the full + * weekday name, parsing continues until the full name is found or an + * error occurs. Otherwise parsing finishes at the end of the + * abbreviated name. + * + * If an error occurs before the end, err |= ios_base::failbit. If + * parsing reads all the characters, err |= ios_base::eofbit. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond weekday name. + */ + iter_type + get_weekday(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const + { return this->do_get_weekday(__beg, __end, __io, __err, __tm); } + + /** + * @brief Parse input month string. + * + * This function parses a month name and puts the results into a + * user-supplied struct tm. The result is returned by calling + * time_get::do_get_monthname(). + * + * Parsing starts by parsing an abbreviated month name. If a valid + * abbreviation is followed by a character that would lead to the full + * month name, parsing continues until the full name is found or an + * error occurs. Otherwise parsing finishes at the end of the + * abbreviated name. + * + * If an error occurs before the end, err |= ios_base::failbit. If + * parsing reads all the characters, err |= + * ios_base::eofbit. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond month name. + */ + iter_type + get_monthname(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const + { return this->do_get_monthname(__beg, __end, __io, __err, __tm); } + + /** + * @brief Parse input year string. + * + * This function reads up to 4 characters to parse a year string and + * puts the results into a user-supplied struct tm. The result is + * returned by calling time_get::do_get_year(). + * + * 4 consecutive digits are interpreted as a full year. If there are + * exactly 2 consecutive digits, the library interprets this as the + * number of years since 1900. + * + * If an error occurs before the end, err |= ios_base::failbit. If + * parsing reads all the characters, err |= ios_base::eofbit. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond year. + */ + iter_type + get_year(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const + { return this->do_get_year(__beg, __end, __io, __err, __tm); } + +#if __cplusplus >= 201103L + /** + * @brief Parse input string according to format. + * + * This function calls time_get::do_get with the provided + * parameters. @see do_get() and get(). + * + * @param __s Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @param __format Format specifier. + * @param __modifier Format modifier. + * @return Iterator to first char not parsed. + */ + inline + iter_type get(iter_type __s, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm, char __format, + char __modifier = 0) const + { + return this->do_get(__s, __end, __io, __err, __tm, __format, + __modifier); + } + + /** + * @brief Parse input string according to format. + * + * This function parses the input string according to a + * provided format string. It does the inverse of + * time_put::put. The format string follows the format + * specified for strftime(3)/strptime(3). The actual parsing + * is done by time_get::do_get. + * + * @param __s Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @param __fmt Start of the format string. + * @param __fmtend End of the format string. + * @return Iterator to first char not parsed. + */ + iter_type get(iter_type __s, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm, const char_type* __fmt, + const char_type* __fmtend) const; +#endif // __cplusplus >= 201103L + + protected: + /// Destructor. + virtual + ~time_get() { } + + /** + * @brief Return preferred order of month, day, and year. + * + * This function returns an enum from time_base::dateorder giving the + * preferred ordering if the format @a x given to time_put::put() only + * uses month, day, and year. This function is a hook for derived + * classes to change the value returned. + * + * @return A member of time_base::dateorder. + */ + virtual dateorder + do_date_order() const; + + /** + * @brief Parse input time string. + * + * This function parses a time according to the format @a x and puts the + * results into a user-supplied struct tm. This function is a hook for + * derived classes to change the value returned. @see get_time() for + * details. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond time string. + */ + virtual iter_type + do_get_time(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const; + + /** + * @brief Parse input date string. + * + * This function parses a date according to the format @a X and puts the + * results into a user-supplied struct tm. This function is a hook for + * derived classes to change the value returned. @see get_date() for + * details. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond date string. + */ + virtual iter_type + do_get_date(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const; + + /** + * @brief Parse input weekday string. + * + * This function parses a weekday name and puts the results into a + * user-supplied struct tm. This function is a hook for derived + * classes to change the value returned. @see get_weekday() for + * details. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond weekday name. + */ + virtual iter_type + do_get_weekday(iter_type __beg, iter_type __end, ios_base&, + ios_base::iostate& __err, tm* __tm) const; + + /** + * @brief Parse input month string. + * + * This function parses a month name and puts the results into a + * user-supplied struct tm. This function is a hook for derived + * classes to change the value returned. @see get_monthname() for + * details. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond month name. + */ + virtual iter_type + do_get_monthname(iter_type __beg, iter_type __end, ios_base&, + ios_base::iostate& __err, tm* __tm) const; + + /** + * @brief Parse input year string. + * + * This function reads up to 4 characters to parse a year string and + * puts the results into a user-supplied struct tm. This function is a + * hook for derived classes to change the value returned. @see + * get_year() for details. + * + * @param __beg Start of string to parse. + * @param __end End of string to parse. + * @param __io Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @return Iterator to first char beyond year. + */ + virtual iter_type + do_get_year(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const; + +#if __cplusplus >= 201103L + /** + * @brief Parse input string according to format. + * + * This function parses the string according to the provided + * format and optional modifier. This function is a hook for + * derived classes to change the value returned. @see get() + * for more details. + * + * @param __s Start of string to parse. + * @param __end End of string to parse. + * @param __f Source of the locale. + * @param __err Error flags to set. + * @param __tm Pointer to struct tm to fill in. + * @param __format Format specifier. + * @param __modifier Format modifier. + * @return Iterator to first char not parsed. + */ +#if _GLIBCXX_USE_CXX11_ABI + virtual +#endif + iter_type + do_get(iter_type __s, iter_type __end, ios_base& __f, + ios_base::iostate& __err, tm* __tm, + char __format, char __modifier) const; +#endif // __cplusplus >= 201103L + + // Extract numeric component of length __len. + iter_type + _M_extract_num(iter_type __beg, iter_type __end, int& __member, + int __min, int __max, size_t __len, + ios_base& __io, ios_base::iostate& __err) const; + + // Extract any unique array of string literals in a const _CharT* array. + iter_type + _M_extract_name(iter_type __beg, iter_type __end, int& __member, + const _CharT** __names, size_t __indexlen, + ios_base& __io, ios_base::iostate& __err) const; + + // Extract day or month name in a const _CharT* array. + iter_type + _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member, + const _CharT** __names, size_t __indexlen, + ios_base& __io, ios_base::iostate& __err) const; + + // Extract on a component-by-component basis, via __format argument. + iter_type + _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm, + const _CharT* __format) const; + + // Extract on a component-by-component basis, via __format argument, with + // state. + iter_type + _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm, + const _CharT* __format, + __time_get_state &__state) const; + }; + + template + locale::id time_get<_CharT, _InIter>::id; + + /// class time_get_byname [22.2.5.2]. + template + class time_get_byname : public time_get<_CharT, _InIter> + { + public: + // Types: + typedef _CharT char_type; + typedef _InIter iter_type; + + explicit + time_get_byname(const char*, size_t __refs = 0) + : time_get<_CharT, _InIter>(__refs) { } + +#if __cplusplus >= 201103L + explicit + time_get_byname(const string& __s, size_t __refs = 0) + : time_get_byname(__s.c_str(), __refs) { } +#endif + + protected: + virtual + ~time_get_byname() { } + }; + +_GLIBCXX_END_NAMESPACE_CXX11 + + /** + * @brief Primary class template time_put. + * @ingroup locales + * + * This facet encapsulates the code to format and output dates and times + * according to formats used by strftime(). + * + * The time_put template uses protected virtual functions to provide the + * actual results. The public accessors forward the call to the virtual + * functions. These virtual functions are hooks for developers to + * implement the behavior they require from the time_put facet. + */ + template + class time_put : public locale::facet + { + public: + // Types: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef _OutIter iter_type; + ///@} + + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + time_put(size_t __refs = 0) + : facet(__refs) { } + + /** + * @brief Format and output a time or date. + * + * This function formats the data in struct tm according to the + * provided format string. The format string is interpreted as by + * strftime(). + * + * @param __s The stream to write to. + * @param __io Source of locale. + * @param __fill char_type to use for padding. + * @param __tm Struct tm with date and time info to format. + * @param __beg Start of format string. + * @param __end End of format string. + * @return Iterator after writing. + */ + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, + const _CharT* __beg, const _CharT* __end) const; + + /** + * @brief Format and output a time or date. + * + * This function formats the data in struct tm according to the + * provided format char and optional modifier. The format and modifier + * are interpreted as by strftime(). It does so by returning + * time_put::do_put(). + * + * @param __s The stream to write to. + * @param __io Source of locale. + * @param __fill char_type to use for padding. + * @param __tm Struct tm with date and time info to format. + * @param __format Format char. + * @param __mod Optional modifier char. + * @return Iterator after writing. + */ + iter_type + put(iter_type __s, ios_base& __io, char_type __fill, + const tm* __tm, char __format, char __mod = 0) const + { return this->do_put(__s, __io, __fill, __tm, __format, __mod); } + + protected: + /// Destructor. + virtual + ~time_put() + { } + + /** + * @brief Format and output a time or date. + * + * This function formats the data in struct tm according to the + * provided format char and optional modifier. This function is a hook + * for derived classes to change the value returned. @see put() for + * more details. + * + * @param __s The stream to write to. + * @param __io Source of locale. + * @param __fill char_type to use for padding. + * @param __tm Struct tm with date and time info to format. + * @param __format Format char. + * @param __mod Optional modifier char. + * @return Iterator after writing. + */ + virtual iter_type + do_put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, + char __format, char __mod) const; + }; + + template + locale::id time_put<_CharT, _OutIter>::id; + + /// class time_put_byname [22.2.5.4]. + template + class time_put_byname : public time_put<_CharT, _OutIter> + { + public: + // Types: + typedef _CharT char_type; + typedef _OutIter iter_type; + + explicit + time_put_byname(const char*, size_t __refs = 0) + : time_put<_CharT, _OutIter>(__refs) + { } + +#if __cplusplus >= 201103L + explicit + time_put_byname(const string& __s, size_t __refs = 0) + : time_put_byname(__s.c_str(), __refs) { } +#endif + + protected: + virtual + ~time_put_byname() { } + }; + + + /** + * @brief Money format ordering data. + * @ingroup locales + * + * This class contains an ordered array of 4 fields to represent the + * pattern for formatting a money amount. Each field may contain one entry + * from the part enum. symbol, sign, and value must be present and the + * remaining field must contain either none or space. @see + * moneypunct::pos_format() and moneypunct::neg_format() for details of how + * these fields are interpreted. + */ + class money_base + { + public: + enum part { none, space, symbol, sign, value }; + struct pattern { char field[4]; }; + + static const pattern _S_default_pattern; + + enum + { + _S_minus, + _S_zero, + _S_end = 11 + }; + + // String literal of acceptable (narrow) input/output, for + // money_get/money_put. "-0123456789" + static const char* _S_atoms; + + // Construct and return valid pattern consisting of some combination of: + // space none symbol sign value + _GLIBCXX_CONST static pattern + _S_construct_pattern(char __precedes, char __space, char __posn) throw (); + }; + + template + struct __moneypunct_cache : public locale::facet + { + const char* _M_grouping; + size_t _M_grouping_size; + bool _M_use_grouping; + _CharT _M_decimal_point; + _CharT _M_thousands_sep; + const _CharT* _M_curr_symbol; + size_t _M_curr_symbol_size; + const _CharT* _M_positive_sign; + size_t _M_positive_sign_size; + const _CharT* _M_negative_sign; + size_t _M_negative_sign_size; + int _M_frac_digits; + money_base::pattern _M_pos_format; + money_base::pattern _M_neg_format; + + // A list of valid numeric literals for input and output: in the standard + // "C" locale, this is "-0123456789". This array contains the chars after + // having been passed through the current locale's ctype<_CharT>.widen(). + _CharT _M_atoms[money_base::_S_end]; + + bool _M_allocated; + + __moneypunct_cache(size_t __refs = 0) : facet(__refs), + _M_grouping(0), _M_grouping_size(0), _M_use_grouping(false), + _M_decimal_point(_CharT()), _M_thousands_sep(_CharT()), + _M_curr_symbol(0), _M_curr_symbol_size(0), + _M_positive_sign(0), _M_positive_sign_size(0), + _M_negative_sign(0), _M_negative_sign_size(0), + _M_frac_digits(0), + _M_pos_format(money_base::pattern()), + _M_neg_format(money_base::pattern()), _M_allocated(false) + { } + + ~__moneypunct_cache(); + + void + _M_cache(const locale& __loc); + + private: + __moneypunct_cache& + operator=(const __moneypunct_cache&); + + explicit + __moneypunct_cache(const __moneypunct_cache&); + }; + + template + __moneypunct_cache<_CharT, _Intl>::~__moneypunct_cache() + { + if (_M_allocated) + { + delete [] _M_grouping; + delete [] _M_curr_symbol; + delete [] _M_positive_sign; + delete [] _M_negative_sign; + } + } + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + /** + * @brief Primary class template moneypunct. + * @ingroup locales + * + * This facet encapsulates the punctuation, grouping and other formatting + * features of money amount string representations. + */ + template + class moneypunct : public locale::facet, public money_base + { + public: + // Types: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef basic_string<_CharT> string_type; + ///@} + typedef __moneypunct_cache<_CharT, _Intl> __cache_type; + + private: + __cache_type* _M_data; + + public: + /// This value is provided by the standard, but no reason for its + /// existence. + static const bool intl = _Intl; + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + moneypunct(size_t __refs = 0) + : facet(__refs), _M_data(0) + { _M_initialize_moneypunct(); } + + /** + * @brief Constructor performs initialization. + * + * This is an internal constructor. + * + * @param __cache Cache for optimization. + * @param __refs Passed to the base facet class. + */ + explicit + moneypunct(__cache_type* __cache, size_t __refs = 0) + : facet(__refs), _M_data(__cache) + { _M_initialize_moneypunct(); } + + /** + * @brief Internal constructor. Not for general use. + * + * This is a constructor for use by the library itself to set up new + * locales. + * + * @param __cloc The C locale. + * @param __s The name of a locale. + * @param __refs Passed to the base facet class. + */ + explicit + moneypunct(__c_locale __cloc, const char* __s, size_t __refs = 0) + : facet(__refs), _M_data(0) + { _M_initialize_moneypunct(__cloc, __s); } + + /** + * @brief Return decimal point character. + * + * This function returns a char_type to use as a decimal point. It + * does so by returning returning + * moneypunct::do_decimal_point(). + * + * @return @a char_type representing a decimal point. + */ + char_type + decimal_point() const + { return this->do_decimal_point(); } + + /** + * @brief Return thousands separator character. + * + * This function returns a char_type to use as a thousands + * separator. It does so by returning returning + * moneypunct::do_thousands_sep(). + * + * @return char_type representing a thousands separator. + */ + char_type + thousands_sep() const + { return this->do_thousands_sep(); } + + /** + * @brief Return grouping specification. + * + * This function returns a string representing groupings for the + * integer part of an amount. Groupings indicate where thousands + * separators should be inserted. + * + * Each char in the return string is interpret as an integer rather + * than a character. These numbers represent the number of digits in a + * group. The first char in the string represents the number of digits + * in the least significant group. If a char is negative, it indicates + * an unlimited number of digits for the group. If more chars from the + * string are required to group a number, the last char is used + * repeatedly. + * + * For example, if the grouping() returns \003\002 + * and is applied to the number 123456789, this corresponds to + * 12,34,56,789. Note that if the string was 32, this would + * put more than 50 digits into the least significant group if + * the character set is ASCII. + * + * The string is returned by calling + * moneypunct::do_grouping(). + * + * @return string representing grouping specification. + */ + string + grouping() const + { return this->do_grouping(); } + + /** + * @brief Return currency symbol string. + * + * This function returns a string_type to use as a currency symbol. It + * does so by returning returning + * moneypunct::do_curr_symbol(). + * + * @return @a string_type representing a currency symbol. + */ + string_type + curr_symbol() const + { return this->do_curr_symbol(); } + + /** + * @brief Return positive sign string. + * + * This function returns a string_type to use as a sign for positive + * amounts. It does so by returning returning + * moneypunct::do_positive_sign(). + * + * If the return value contains more than one character, the first + * character appears in the position indicated by pos_format() and the + * remainder appear at the end of the formatted string. + * + * @return @a string_type representing a positive sign. + */ + string_type + positive_sign() const + { return this->do_positive_sign(); } + + /** + * @brief Return negative sign string. + * + * This function returns a string_type to use as a sign for negative + * amounts. It does so by returning returning + * moneypunct::do_negative_sign(). + * + * If the return value contains more than one character, the first + * character appears in the position indicated by neg_format() and the + * remainder appear at the end of the formatted string. + * + * @return @a string_type representing a negative sign. + */ + string_type + negative_sign() const + { return this->do_negative_sign(); } + + /** + * @brief Return number of digits in fraction. + * + * This function returns the exact number of digits that make up the + * fractional part of a money amount. It does so by returning + * returning moneypunct::do_frac_digits(). + * + * The fractional part of a money amount is optional. But if it is + * present, there must be frac_digits() digits. + * + * @return Number of digits in amount fraction. + */ + int + frac_digits() const + { return this->do_frac_digits(); } + + ///@{ + /** + * @brief Return pattern for money values. + * + * This function returns a pattern describing the formatting of a + * positive or negative valued money amount. It does so by returning + * returning moneypunct::do_pos_format() or + * moneypunct::do_neg_format(). + * + * The pattern has 4 fields describing the ordering of symbol, sign, + * value, and none or space. There must be one of each in the pattern. + * The none and space enums may not appear in the first field and space + * may not appear in the final field. + * + * The parts of a money string must appear in the order indicated by + * the fields of the pattern. The symbol field indicates that the + * value of curr_symbol() may be present. The sign field indicates + * that the value of positive_sign() or negative_sign() must be + * present. The value field indicates that the absolute value of the + * money amount is present. none indicates 0 or more whitespace + * characters, except at the end, where it permits no whitespace. + * space indicates that 1 or more whitespace characters must be + * present. + * + * For example, for the US locale and pos_format() pattern + * {symbol,sign,value,none}, curr_symbol() == '$' + * positive_sign() == '+', and value 10.01, and + * options set to force the symbol, the corresponding string is + * $+10.01. + * + * @return Pattern for money values. + */ + pattern + pos_format() const + { return this->do_pos_format(); } + + pattern + neg_format() const + { return this->do_neg_format(); } + ///@} + + protected: + /// Destructor. + virtual + ~moneypunct(); + + /** + * @brief Return decimal point character. + * + * Returns a char_type to use as a decimal point. This function is a + * hook for derived classes to change the value returned. + * + * @return @a char_type representing a decimal point. + */ + virtual char_type + do_decimal_point() const + { return _M_data->_M_decimal_point; } + + /** + * @brief Return thousands separator character. + * + * Returns a char_type to use as a thousands separator. This function + * is a hook for derived classes to change the value returned. + * + * @return @a char_type representing a thousands separator. + */ + virtual char_type + do_thousands_sep() const + { return _M_data->_M_thousands_sep; } + + /** + * @brief Return grouping specification. + * + * Returns a string representing groupings for the integer part of a + * number. This function is a hook for derived classes to change the + * value returned. @see grouping() for details. + * + * @return String representing grouping specification. + */ + virtual string + do_grouping() const + { return _M_data->_M_grouping; } + + /** + * @brief Return currency symbol string. + * + * This function returns a string_type to use as a currency symbol. + * This function is a hook for derived classes to change the value + * returned. @see curr_symbol() for details. + * + * @return @a string_type representing a currency symbol. + */ + virtual string_type + do_curr_symbol() const + { return _M_data->_M_curr_symbol; } + + /** + * @brief Return positive sign string. + * + * This function returns a string_type to use as a sign for positive + * amounts. This function is a hook for derived classes to change the + * value returned. @see positive_sign() for details. + * + * @return @a string_type representing a positive sign. + */ + virtual string_type + do_positive_sign() const + { return _M_data->_M_positive_sign; } + + /** + * @brief Return negative sign string. + * + * This function returns a string_type to use as a sign for negative + * amounts. This function is a hook for derived classes to change the + * value returned. @see negative_sign() for details. + * + * @return @a string_type representing a negative sign. + */ + virtual string_type + do_negative_sign() const + { return _M_data->_M_negative_sign; } + + /** + * @brief Return number of digits in fraction. + * + * This function returns the exact number of digits that make up the + * fractional part of a money amount. This function is a hook for + * derived classes to change the value returned. @see frac_digits() + * for details. + * + * @return Number of digits in amount fraction. + */ + virtual int + do_frac_digits() const + { return _M_data->_M_frac_digits; } + + /** + * @brief Return pattern for money values. + * + * This function returns a pattern describing the formatting of a + * positive valued money amount. This function is a hook for derived + * classes to change the value returned. @see pos_format() for + * details. + * + * @return Pattern for money values. + */ + virtual pattern + do_pos_format() const + { return _M_data->_M_pos_format; } + + /** + * @brief Return pattern for money values. + * + * This function returns a pattern describing the formatting of a + * negative valued money amount. This function is a hook for derived + * classes to change the value returned. @see neg_format() for + * details. + * + * @return Pattern for money values. + */ + virtual pattern + do_neg_format() const + { return _M_data->_M_neg_format; } + + // For use at construction time only. + void + _M_initialize_moneypunct(__c_locale __cloc = 0, + const char* __name = 0); + }; + + template + locale::id moneypunct<_CharT, _Intl>::id; + + template + const bool moneypunct<_CharT, _Intl>::intl; + + template<> + moneypunct::~moneypunct(); + + template<> + moneypunct::~moneypunct(); + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale, const char*); + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale, const char*); + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + moneypunct::~moneypunct(); + + template<> + moneypunct::~moneypunct(); + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale, + const char*); + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale, + const char*); +#endif + + /// class moneypunct_byname [22.2.6.4]. + template + class moneypunct_byname : public moneypunct<_CharT, _Intl> + { + public: + typedef _CharT char_type; + typedef basic_string<_CharT> string_type; + + static const bool intl = _Intl; + + explicit + moneypunct_byname(const char* __s, size_t __refs = 0) + : moneypunct<_CharT, _Intl>(__refs) + { + if (__builtin_strcmp(__s, "C") != 0 + && __builtin_strcmp(__s, "POSIX") != 0) + { + __c_locale __tmp; + this->_S_create_c_locale(__tmp, __s); + this->_M_initialize_moneypunct(__tmp); + this->_S_destroy_c_locale(__tmp); + } + } + +#if __cplusplus >= 201103L + explicit + moneypunct_byname(const string& __s, size_t __refs = 0) + : moneypunct_byname(__s.c_str(), __refs) { } +#endif + + protected: + virtual + ~moneypunct_byname() { } + }; + + template + const bool moneypunct_byname<_CharT, _Intl>::intl; + +_GLIBCXX_END_NAMESPACE_CXX11 + +_GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 + + /** + * @brief Primary class template money_get. + * @ingroup locales + * + * This facet encapsulates the code to parse and return a monetary + * amount from a string. + * + * The money_get template uses protected virtual functions to + * provide the actual results. The public accessors forward the + * call to the virtual functions. These virtual functions are + * hooks for developers to implement the behavior they require from + * the money_get facet. + */ + template + class money_get : public locale::facet + { + public: + // Types: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef _InIter iter_type; + typedef basic_string<_CharT> string_type; + ///@} + + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + money_get(size_t __refs = 0) : facet(__refs) { } + + /** + * @brief Read and parse a monetary value. + * + * This function reads characters from @a __s, interprets them as a + * monetary value according to moneypunct and ctype facets retrieved + * from io.getloc(), and returns the result in @a units as an integral + * value moneypunct::frac_digits() * the actual amount. For example, + * the string $10.01 in a US locale would store 1001 in @a units. + * + * Any characters not part of a valid money amount are not consumed. + * + * If a money value cannot be parsed from the input stream, sets + * err=(err|io.failbit). If the stream is consumed before finishing + * parsing, sets err=(err|io.failbit|io.eofbit). @a units is + * unchanged if parsing fails. + * + * This function works by returning the result of do_get(). + * + * @param __s Start of characters to parse. + * @param __end End of characters to parse. + * @param __intl Parameter to use_facet >. + * @param __io Source of facets and io state. + * @param __err Error field to set if parsing fails. + * @param __units Place to store result of parsing. + * @return Iterator referencing first character beyond valid money + * amount. + */ + iter_type + get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, long double& __units) const + { return this->do_get(__s, __end, __intl, __io, __err, __units); } + + /** + * @brief Read and parse a monetary value. + * + * This function reads characters from @a __s, interprets them as + * a monetary value according to moneypunct and ctype facets + * retrieved from io.getloc(), and returns the result in @a + * digits. For example, the string $10.01 in a US locale would + * store 1001 in @a digits. + * + * Any characters not part of a valid money amount are not consumed. + * + * If a money value cannot be parsed from the input stream, sets + * err=(err|io.failbit). If the stream is consumed before finishing + * parsing, sets err=(err|io.failbit|io.eofbit). + * + * This function works by returning the result of do_get(). + * + * @param __s Start of characters to parse. + * @param __end End of characters to parse. + * @param __intl Parameter to use_facet >. + * @param __io Source of facets and io state. + * @param __err Error field to set if parsing fails. + * @param __digits Place to store result of parsing. + * @return Iterator referencing first character beyond valid money + * amount. + */ + iter_type + get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, string_type& __digits) const + { return this->do_get(__s, __end, __intl, __io, __err, __digits); } + + protected: + /// Destructor. + virtual + ~money_get() { } + + /** + * @brief Read and parse a monetary value. + * + * This function reads and parses characters representing a monetary + * value. This function is a hook for derived classes to change the + * value returned. @see get() for details. + */ + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ \ + && (_GLIBCXX_USE_CXX11_ABI == 0 || defined __LONG_DOUBLE_IEEE128__) + virtual iter_type + __do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, double& __units) const; +#else + virtual iter_type + do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, long double& __units) const; +#endif + + /** + * @brief Read and parse a monetary value. + * + * This function reads and parses characters representing a monetary + * value. This function is a hook for derived classes to change the + * value returned. @see get() for details. + */ + virtual iter_type + do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, string_type& __digits) const; + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ + virtual iter_type + __do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, __ibm128& __units) const; +#endif + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ \ + && (_GLIBCXX_USE_CXX11_ABI == 0 || defined __LONG_DOUBLE_IEEE128__) + virtual iter_type + do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, long double& __units) const; +#endif + + template + iter_type + _M_extract(iter_type __s, iter_type __end, ios_base& __io, + ios_base::iostate& __err, string& __digits) const; + }; + + template + locale::id money_get<_CharT, _InIter>::id; + + /** + * @brief Primary class template money_put. + * @ingroup locales + * + * This facet encapsulates the code to format and output a monetary + * amount. + * + * The money_put template uses protected virtual functions to + * provide the actual results. The public accessors forward the + * call to the virtual functions. These virtual functions are + * hooks for developers to implement the behavior they require from + * the money_put facet. + */ + template + class money_put : public locale::facet + { + public: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef _OutIter iter_type; + typedef basic_string<_CharT> string_type; + ///@} + + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + money_put(size_t __refs = 0) : facet(__refs) { } + + /** + * @brief Format and output a monetary value. + * + * This function formats @a units as a monetary value according to + * moneypunct and ctype facets retrieved from io.getloc(), and writes + * the resulting characters to @a __s. For example, the value 1001 in a + * US locale would write $10.01 to @a __s. + * + * This function works by returning the result of do_put(). + * + * @param __s The stream to write to. + * @param __intl Parameter to use_facet >. + * @param __io Source of facets and io state. + * @param __fill char_type to use for padding. + * @param __units Place to store result of parsing. + * @return Iterator after writing. + */ + iter_type + put(iter_type __s, bool __intl, ios_base& __io, + char_type __fill, long double __units) const + { return this->do_put(__s, __intl, __io, __fill, __units); } + + /** + * @brief Format and output a monetary value. + * + * This function formats @a digits as a monetary value + * according to moneypunct and ctype facets retrieved from + * io.getloc(), and writes the resulting characters to @a __s. + * For example, the string 1001 in a US locale + * would write $10.01 to @a __s. + * + * This function works by returning the result of do_put(). + * + * @param __s The stream to write to. + * @param __intl Parameter to use_facet >. + * @param __io Source of facets and io state. + * @param __fill char_type to use for padding. + * @param __digits Place to store result of parsing. + * @return Iterator after writing. + */ + iter_type + put(iter_type __s, bool __intl, ios_base& __io, + char_type __fill, const string_type& __digits) const + { return this->do_put(__s, __intl, __io, __fill, __digits); } + + protected: + /// Destructor. + virtual + ~money_put() { } + + /** + * @brief Format and output a monetary value. + * + * This function formats @a units as a monetary value according to + * moneypunct and ctype facets retrieved from io.getloc(), and writes + * the resulting characters to @a __s. For example, the value 1001 in a + * US locale would write $10.01 to @a __s. + * + * This function is a hook for derived classes to change the value + * returned. @see put(). + * + * @param __s The stream to write to. + * @param __intl Parameter to use_facet >. + * @param __io Source of facets and io state. + * @param __fill char_type to use for padding. + * @param __units Place to store result of parsing. + * @return Iterator after writing. + */ + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ \ + && (_GLIBCXX_USE_CXX11_ABI == 0 || defined __LONG_DOUBLE_IEEE128__) + virtual iter_type + __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + double __units) const; +#else + virtual iter_type + do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + long double __units) const; +#endif + + /** + * @brief Format and output a monetary value. + * + * This function formats @a digits as a monetary value + * according to moneypunct and ctype facets retrieved from + * io.getloc(), and writes the resulting characters to @a __s. + * For example, the string 1001 in a US locale + * would write $10.01 to @a __s. + * + * This function is a hook for derived classes to change the value + * returned. @see put(). + * + * @param __s The stream to write to. + * @param __intl Parameter to use_facet >. + * @param __io Source of facets and io state. + * @param __fill char_type to use for padding. + * @param __digits Place to store result of parsing. + * @return Iterator after writing. + */ + virtual iter_type + do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + const string_type& __digits) const; + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ + virtual iter_type + __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + __ibm128 __units) const; +#endif + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ \ + && (_GLIBCXX_USE_CXX11_ABI == 0 || defined __LONG_DOUBLE_IEEE128__) + virtual iter_type + do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + long double __units) const; +#endif + + template + iter_type + _M_insert(iter_type __s, ios_base& __io, char_type __fill, + const string_type& __digits) const; + }; + + template + locale::id money_put<_CharT, _OutIter>::id; + +_GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 + + /** + * @brief Messages facet base class providing catalog typedef. + * @ingroup locales + */ + struct messages_base + { + typedef int catalog; + }; + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + /** + * @brief Primary class template messages. + * @ingroup locales + * + * This facet encapsulates the code to retrieve messages from + * message catalogs. The only thing defined by the standard for this facet + * is the interface. All underlying functionality is + * implementation-defined. + * + * This library currently implements 3 versions of the message facet. The + * first version (gnu) is a wrapper around gettext, provided by libintl. + * The second version (ieee) is a wrapper around catgets. The final + * version (default) does no actual translation. These implementations are + * only provided for char and wchar_t instantiations. + * + * The messages template uses protected virtual functions to + * provide the actual results. The public accessors forward the + * call to the virtual functions. These virtual functions are + * hooks for developers to implement the behavior they require from + * the messages facet. + */ + template + class messages : public locale::facet, public messages_base + { + public: + // Types: + ///@{ + /// Public typedefs + typedef _CharT char_type; + typedef basic_string<_CharT> string_type; + ///@} + + protected: + // Underlying "C" library locale information saved from + // initialization, needed by messages_byname as well. + __c_locale _M_c_locale_messages; + const char* _M_name_messages; + + public: + /// Numpunct facet id. + static locale::id id; + + /** + * @brief Constructor performs initialization. + * + * This is the constructor provided by the standard. + * + * @param __refs Passed to the base facet class. + */ + explicit + messages(size_t __refs = 0); + + // Non-standard. + /** + * @brief Internal constructor. Not for general use. + * + * This is a constructor for use by the library itself to set up new + * locales. + * + * @param __cloc The C locale. + * @param __s The name of a locale. + * @param __refs Refcount to pass to the base class. + */ + explicit + messages(__c_locale __cloc, const char* __s, size_t __refs = 0); + + /* + * @brief Open a message catalog. + * + * This function opens and returns a handle to a message catalog by + * returning do_open(__s, __loc). + * + * @param __s The catalog to open. + * @param __loc Locale to use for character set conversions. + * @return Handle to the catalog or value < 0 if open fails. + */ + catalog + open(const basic_string& __s, const locale& __loc) const + { return this->do_open(__s, __loc); } + + // Non-standard and unorthodox, yet effective. + /* + * @brief Open a message catalog. + * + * This non-standard function opens and returns a handle to a message + * catalog by returning do_open(s, loc). The third argument provides a + * message catalog root directory for gnu gettext and is ignored + * otherwise. + * + * @param __s The catalog to open. + * @param __loc Locale to use for character set conversions. + * @param __dir Message catalog root directory. + * @return Handle to the catalog or value < 0 if open fails. + */ + catalog + open(const basic_string&, const locale&, const char*) const; + + /* + * @brief Look up a string in a message catalog. + * + * This function retrieves and returns a message from a catalog by + * returning do_get(c, set, msgid, s). + * + * For gnu, @a __set and @a msgid are ignored. Returns gettext(s). + * For default, returns s. For ieee, returns catgets(c,set,msgid,s). + * + * @param __c The catalog to access. + * @param __set Implementation-defined. + * @param __msgid Implementation-defined. + * @param __s Default return value if retrieval fails. + * @return Retrieved message or @a __s if get fails. + */ + string_type + get(catalog __c, int __set, int __msgid, const string_type& __s) const + { return this->do_get(__c, __set, __msgid, __s); } + + /* + * @brief Close a message catalog. + * + * Closes catalog @a c by calling do_close(c). + * + * @param __c The catalog to close. + */ + void + close(catalog __c) const + { return this->do_close(__c); } + + protected: + /// Destructor. + virtual + ~messages(); + + /* + * @brief Open a message catalog. + * + * This function opens and returns a handle to a message catalog in an + * implementation-defined manner. This function is a hook for derived + * classes to change the value returned. + * + * @param __s The catalog to open. + * @param __loc Locale to use for character set conversions. + * @return Handle to the opened catalog, value < 0 if open failed. + */ + virtual catalog + do_open(const basic_string&, const locale&) const; + + /* + * @brief Look up a string in a message catalog. + * + * This function retrieves and returns a message from a catalog in an + * implementation-defined manner. This function is a hook for derived + * classes to change the value returned. + * + * For gnu, @a __set and @a __msgid are ignored. Returns gettext(s). + * For default, returns s. For ieee, returns catgets(c,set,msgid,s). + * + * @param __c The catalog to access. + * @param __set Implementation-defined. + * @param __msgid Implementation-defined. + * @param __s Default return value if retrieval fails. + * @return Retrieved message or @a __s if get fails. + */ + virtual string_type + do_get(catalog, int, int, const string_type& __dfault) const; + + /* + * @brief Close a message catalog. + * + * @param __c The catalog to close. + */ + virtual void + do_close(catalog) const; + + // Returns a locale and codeset-converted string, given a char* message. + char* + _M_convert_to_char(const string_type& __msg) const + { + // XXX + return reinterpret_cast(const_cast<_CharT*>(__msg.c_str())); + } + + // Returns a locale and codeset-converted string, given a char* message. + string_type + _M_convert_from_char(char*) const + { + // XXX + return string_type(); + } + }; + + template + locale::id messages<_CharT>::id; + + /// Specializations for required instantiations. + template<> + string + messages::do_get(catalog, int, int, const string&) const; + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + wstring + messages::do_get(catalog, int, int, const wstring&) const; +#endif + + /// class messages_byname [22.2.7.2]. + template + class messages_byname : public messages<_CharT> + { + public: + typedef _CharT char_type; + typedef basic_string<_CharT> string_type; + + explicit + messages_byname(const char* __s, size_t __refs = 0); + +#if __cplusplus >= 201103L + explicit + messages_byname(const string& __s, size_t __refs = 0) + : messages_byname(__s.c_str(), __refs) { } +#endif + + protected: + virtual + ~messages_byname() + { } + }; + +_GLIBCXX_END_NAMESPACE_CXX11 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +// Include host and configuration specific messages functions. +#include + +// 22.2.1.5 Template class codecvt +#include + +#include + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets_nonio.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets_nonio.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6469ea7e83aafc571f1c184fc3a4a97420adbf67 GIT binary patch literal 109186 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

    %bkS&gU?6Rg-0 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. + +/** @file bits/locale_facets_nonio.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +#ifndef _LOCALE_FACETS_NONIO_TCC +#define _LOCALE_FACETS_NONIO_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + struct __use_cache<__moneypunct_cache<_CharT, _Intl> > + { + const __moneypunct_cache<_CharT, _Intl>* + operator() (const locale& __loc) const + { + const size_t __i = moneypunct<_CharT, _Intl>::id._M_id(); + const locale::facet** __caches = __loc._M_impl->_M_caches; + if (!__caches[__i]) + { + __moneypunct_cache<_CharT, _Intl>* __tmp = 0; + __try + { + __tmp = new __moneypunct_cache<_CharT, _Intl>; + __tmp->_M_cache(__loc); + } + __catch(...) + { + delete __tmp; + __throw_exception_again; + } + __loc._M_impl->_M_install_cache(__tmp, __i); + } + return static_cast< + const __moneypunct_cache<_CharT, _Intl>*>(__caches[__i]); + } + }; + + template + void + __moneypunct_cache<_CharT, _Intl>::_M_cache(const locale& __loc) + { + const moneypunct<_CharT, _Intl>& __mp = + use_facet >(__loc); + + struct _Scoped_str + { + size_t _M_len; + _CharT* _M_str; + + explicit + _Scoped_str(const basic_string<_CharT>& __str) + : _M_len(__str.size()), _M_str(new _CharT[_M_len]) + { __str.copy(_M_str, _M_len); } + + ~_Scoped_str() { delete[] _M_str; } + + void + _M_release(const _CharT*& __p, size_t& __n) + { + __p = _M_str; + __n = _M_len; + _M_str = 0; + } + }; + + _Scoped_str __curr_symbol(__mp.curr_symbol()); + _Scoped_str __positive_sign(__mp.positive_sign()); + _Scoped_str __negative_sign(__mp.negative_sign()); + + const string& __g = __mp.grouping(); + const size_t __g_size = __g.size(); + char* const __grouping = new char[__g_size]; + __g.copy(__grouping, __g_size); + + // All allocations succeeded without throwing, OK to modify *this now. + + _M_grouping = __grouping; + _M_grouping_size = __g_size; + _M_use_grouping = (__g_size + && static_cast(__grouping[0]) > 0 + && (__grouping[0] + != __gnu_cxx::__numeric_traits::__max)); + + _M_decimal_point = __mp.decimal_point(); + _M_thousands_sep = __mp.thousands_sep(); + + __curr_symbol._M_release(_M_curr_symbol, _M_curr_symbol_size); + __positive_sign._M_release(_M_positive_sign, _M_positive_sign_size); + __negative_sign._M_release(_M_negative_sign, _M_negative_sign_size); + + _M_frac_digits = __mp.frac_digits(); + _M_pos_format = __mp.pos_format(); + _M_neg_format = __mp.neg_format(); + + const ctype<_CharT>& __ct = use_facet >(__loc); + __ct.widen(money_base::_S_atoms, + money_base::_S_atoms + money_base::_S_end, _M_atoms); + + _M_allocated = true; + } + +_GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 + + template + template + _InIter + money_get<_CharT, _InIter>:: + _M_extract(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, string& __units) const + { + typedef char_traits<_CharT> __traits_type; + typedef typename string_type::size_type size_type; + typedef money_base::part part; + typedef __moneypunct_cache<_CharT, _Intl> __cache_type; + + const locale& __loc = __io._M_getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); + + __use_cache<__cache_type> __uc; + const __cache_type* __lc = __uc(__loc); + const char_type* __lit = __lc->_M_atoms; + + // Deduced sign. + bool __negative = false; + // Sign size. + size_type __sign_size = 0; + // True if sign is mandatory. + const bool __mandatory_sign = (__lc->_M_positive_sign_size + && __lc->_M_negative_sign_size); + // String of grouping info from thousands_sep plucked from __units. + string __grouping_tmp; + if (__lc->_M_use_grouping) + __grouping_tmp.reserve(32); + // Last position before the decimal point. + int __last_pos = 0; + // Separator positions, then, possibly, fractional digits. + int __n = 0; + // If input iterator is in a valid state. + bool __testvalid = true; + // Flag marking when a decimal point is found. + bool __testdecfound = false; + + // The tentative returned string is stored here. + string __res; + __res.reserve(32); + + const char_type* __lit_zero = __lit + money_base::_S_zero; + const money_base::pattern __p = __lc->_M_neg_format; + for (int __i = 0; __i < 4 && __testvalid; ++__i) + { + const part __which = static_cast(__p.field[__i]); + switch (__which) + { + case money_base::symbol: + // According to 22.2.6.1.2, p2, symbol is required + // if (__io.flags() & ios_base::showbase), otherwise + // is optional and consumed only if other characters + // are needed to complete the format. + if (__io.flags() & ios_base::showbase || __sign_size > 1 + || __i == 0 + || (__i == 1 && (__mandatory_sign + || (static_cast(__p.field[0]) + == money_base::sign) + || (static_cast(__p.field[2]) + == money_base::space))) + || (__i == 2 && ((static_cast(__p.field[3]) + == money_base::value) + || (__mandatory_sign + && (static_cast(__p.field[3]) + == money_base::sign))))) + { + const size_type __len = __lc->_M_curr_symbol_size; + size_type __j = 0; + for (; __beg != __end && __j < __len + && *__beg == __lc->_M_curr_symbol[__j]; + ++__beg, (void)++__j); + if (__j != __len + && (__j || __io.flags() & ios_base::showbase)) + __testvalid = false; + } + break; + case money_base::sign: + // Sign might not exist, or be more than one character long. + if (__lc->_M_positive_sign_size && __beg != __end + && *__beg == __lc->_M_positive_sign[0]) + { + __sign_size = __lc->_M_positive_sign_size; + ++__beg; + } + else if (__lc->_M_negative_sign_size && __beg != __end + && *__beg == __lc->_M_negative_sign[0]) + { + __negative = true; + __sign_size = __lc->_M_negative_sign_size; + ++__beg; + } + else if (__lc->_M_positive_sign_size + && !__lc->_M_negative_sign_size) + // "... if no sign is detected, the result is given the sign + // that corresponds to the source of the empty string" + __negative = true; + else if (__mandatory_sign) + __testvalid = false; + break; + case money_base::value: + // Extract digits, remove and stash away the + // grouping of found thousands separators. + for (; __beg != __end; ++__beg) + { + const char_type __c = *__beg; + const char_type* __q = __traits_type::find(__lit_zero, + 10, __c); + if (__q != 0) + { + __res += money_base::_S_atoms[__q - __lit]; + ++__n; + } + else if (__c == __lc->_M_decimal_point + && !__testdecfound) + { + if (__lc->_M_frac_digits <= 0) + break; + + __last_pos = __n; + __n = 0; + __testdecfound = true; + } + else if (__lc->_M_use_grouping + && __c == __lc->_M_thousands_sep + && !__testdecfound) + { + if (__n) + { + // Mark position for later analysis. + __grouping_tmp += static_cast(__n); + __n = 0; + } + else + { + __testvalid = false; + break; + } + } + else + break; + } + if (__res.empty()) + __testvalid = false; + break; + case money_base::space: + // At least one space is required. + if (__beg != __end && __ctype.is(ctype_base::space, *__beg)) + ++__beg; + else + __testvalid = false; + // fallthrough + case money_base::none: + // Only if not at the end of the pattern. + if (__i != 3) + for (; __beg != __end + && __ctype.is(ctype_base::space, *__beg); ++__beg); + break; + } + } + + // Need to get the rest of the sign characters, if they exist. + if (__sign_size > 1 && __testvalid) + { + const char_type* __sign = __negative ? __lc->_M_negative_sign + : __lc->_M_positive_sign; + size_type __i = 1; + for (; __beg != __end && __i < __sign_size + && *__beg == __sign[__i]; ++__beg, (void)++__i); + + if (__i != __sign_size) + __testvalid = false; + } + + if (__testvalid) + { + // Strip leading zeros. + if (__res.size() > 1) + { + const size_type __first = __res.find_first_not_of('0'); + const bool __only_zeros = __first == string::npos; + if (__first) + __res.erase(0, __only_zeros ? __res.size() - 1 : __first); + } + + // 22.2.6.1.2, p4 + if (__negative && __res[0] != '0') + __res.insert(__res.begin(), '-'); + + // Test for grouping fidelity. + if (__grouping_tmp.size()) + { + // Add the ending grouping. + __grouping_tmp += static_cast(__testdecfound ? __last_pos + : __n); + if (!std::__verify_grouping(__lc->_M_grouping, + __lc->_M_grouping_size, + __grouping_tmp)) + __err |= ios_base::failbit; + } + + // Iff not enough digits were supplied after the decimal-point. + if (__testdecfound && __n != __lc->_M_frac_digits) + __testvalid = false; + } + + // Iff valid sequence is not recognized. + if (!__testvalid) + __err |= ios_base::failbit; + else + __units.swap(__res); + + // Iff no more characters are available. + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ \ + && (_GLIBCXX_USE_CXX11_ABI == 0 || defined __LONG_DOUBLE_IEEE128__) + template + _InIter + money_get<_CharT, _InIter>:: + __do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, double& __units) const + { + string __str; + __beg = __intl ? _M_extract(__beg, __end, __io, __err, __str) + : _M_extract(__beg, __end, __io, __err, __str); + std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale()); + return __beg; + } +#endif + + template + _InIter + money_get<_CharT, _InIter>:: + do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, long double& __units) const + { + string __str; + __beg = __intl ? _M_extract(__beg, __end, __io, __err, __str) + : _M_extract(__beg, __end, __io, __err, __str); + std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale()); + return __beg; + } + + template + _InIter + money_get<_CharT, _InIter>:: + do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, string_type& __digits) const + { + typedef typename string::size_type size_type; + + const locale& __loc = __io._M_getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); + + string __str; + __beg = __intl ? _M_extract(__beg, __end, __io, __err, __str) + : _M_extract(__beg, __end, __io, __err, __str); + const size_type __len = __str.size(); + if (__len) + { + __digits.resize(__len); + __ctype.widen(__str.data(), __str.data() + __len, &__digits[0]); + } + return __beg; + } + +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ + template + _InIter + money_get<_CharT, _InIter>:: + __do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, __ibm128& __units) const + { + string __str; + __beg = __intl ? _M_extract(__beg, __end, __io, __err, __str) + : _M_extract(__beg, __end, __io, __err, __str); + std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale()); + return __beg; + } +#endif + + template + template + _OutIter + money_put<_CharT, _OutIter>:: + _M_insert(iter_type __s, ios_base& __io, char_type __fill, + const string_type& __digits) const + { + typedef typename string_type::size_type size_type; + typedef money_base::part part; + typedef __moneypunct_cache<_CharT, _Intl> __cache_type; + + const locale& __loc = __io._M_getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); + + __use_cache<__cache_type> __uc; + const __cache_type* __lc = __uc(__loc); + const char_type* __lit = __lc->_M_atoms; + + // Determine if negative or positive formats are to be used, and + // discard leading negative_sign if it is present. + const char_type* __beg = __digits.data(); + + money_base::pattern __p; + const char_type* __sign; + size_type __sign_size; + if (!(*__beg == __lit[money_base::_S_minus])) + { + __p = __lc->_M_pos_format; + __sign = __lc->_M_positive_sign; + __sign_size = __lc->_M_positive_sign_size; + } + else + { + __p = __lc->_M_neg_format; + __sign = __lc->_M_negative_sign; + __sign_size = __lc->_M_negative_sign_size; + if (__digits.size()) + ++__beg; + } + + // Look for valid numbers in the ctype facet within input digits. + size_type __len = __ctype.scan_not(ctype_base::digit, __beg, + __beg + __digits.size()) - __beg; + if (__len) + { + // Assume valid input, and attempt to format. + // Break down input numbers into base components, as follows: + // final_value = grouped units + (decimal point) + (digits) + string_type __value; + __value.reserve(2 * __len); + + // Add thousands separators to non-decimal digits, per + // grouping rules. + long __paddec = __len - __lc->_M_frac_digits; + if (__paddec > 0) + { + if (__lc->_M_frac_digits < 0) + __paddec = __len; + if (__lc->_M_grouping_size) + { + __value.assign(2 * __paddec, char_type()); + _CharT* __vend = + std::__add_grouping(&__value[0], __lc->_M_thousands_sep, + __lc->_M_grouping, + __lc->_M_grouping_size, + __beg, __beg + __paddec); + __value.erase(__vend - &__value[0]); + } + else + __value.assign(__beg, __paddec); + } + + // Deal with decimal point, decimal digits. + if (__lc->_M_frac_digits > 0) + { + __value += __lc->_M_decimal_point; + if (__paddec >= 0) + __value.append(__beg + __paddec, __lc->_M_frac_digits); + else + { + // Have to pad zeros in the decimal position. + __value.append(-__paddec, __lit[money_base::_S_zero]); + __value.append(__beg, __len); + } + } + + // Calculate length of resulting string. + const ios_base::fmtflags __f = __io.flags() + & ios_base::adjustfield; + __len = __value.size() + __sign_size; + __len += ((__io.flags() & ios_base::showbase) + ? __lc->_M_curr_symbol_size : 0); + + string_type __res; + __res.reserve(2 * __len); + + const size_type __width = static_cast(__io.width()); + const bool __testipad = (__f == ios_base::internal + && __len < __width); + // Fit formatted digits into the required pattern. + for (int __i = 0; __i < 4; ++__i) + { + const part __which = static_cast(__p.field[__i]); + switch (__which) + { + case money_base::symbol: + if (__io.flags() & ios_base::showbase) + __res.append(__lc->_M_curr_symbol, + __lc->_M_curr_symbol_size); + break; + case money_base::sign: + // Sign might not exist, or be more than one + // character long. In that case, add in the rest + // below. + if (__sign_size) + __res += __sign[0]; + break; + case money_base::value: + __res += __value; + break; + case money_base::space: + // At least one space is required, but if internal + // formatting is required, an arbitrary number of + // fill spaces will be necessary. + if (__testipad) + __res.append(__width - __len, __fill); + else + __res += __fill; + break; + case money_base::none: + if (__testipad) + __res.append(__width - __len, __fill); + break; + } + } + + // Special case of multi-part sign parts. + if (__sign_size > 1) + __res.append(__sign + 1, __sign_size - 1); + + // Pad, if still necessary. + __len = __res.size(); + if (__width > __len) + { + if (__f == ios_base::left) + // After. + __res.append(__width - __len, __fill); + else + // Before. + __res.insert(0, __width - __len, __fill); + __len = __width; + } + + // Write resulting, fully-formatted string to output iterator. + __s = std::__write(__s, __res.data(), __len); + } + __io.width(0); + return __s; + } + +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ \ + && (_GLIBCXX_USE_CXX11_ABI == 0 || defined __LONG_DOUBLE_IEEE128__) + template + _OutIter + money_put<_CharT, _OutIter>:: + __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + double __units) const + { return this->do_put(__s, __intl, __io, __fill, (long double) __units); } +#endif + + template + _OutIter + money_put<_CharT, _OutIter>:: + do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + long double __units) const + { + const locale __loc = __io.getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); +#if _GLIBCXX_USE_C99_STDIO + // First try a buffer perhaps big enough. + int __cs_size = 64; + char* __cs = static_cast(__builtin_alloca(__cs_size)); + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 328. Bad sprintf format modifier in money_put<>::do_put() + int __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, + "%.*Lf", 0, __units); + // If the buffer was not large enough, try again with the correct size. + if (__len >= __cs_size) + { + __cs_size = __len + 1; + __cs = static_cast(__builtin_alloca(__cs_size)); + __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, + "%.*Lf", 0, __units); + } +#else + // max_exponent10 + 1 for the integer part, + 2 for sign and '\0'. + const int __cs_size = + __gnu_cxx::__numeric_traits::__max_exponent10 + 3; + char* __cs = static_cast(__builtin_alloca(__cs_size)); + int __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, "%.*Lf", + 0, __units); +#endif + string_type __digits(__len, char_type()); + __ctype.widen(__cs, __cs + __len, &__digits[0]); + return __intl ? _M_insert(__s, __io, __fill, __digits) + : _M_insert(__s, __io, __fill, __digits); + } + + template + _OutIter + money_put<_CharT, _OutIter>:: + do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + const string_type& __digits) const + { return __intl ? _M_insert(__s, __io, __fill, __digits) + : _M_insert(__s, __io, __fill, __digits); } + +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ +// The snprintf symbol in glibc that works with __ibm128 format is not visible +// when compiling with -mabi=ieeelongdouble so we use this name for it instead. +// N.B. we don't use __typeof__(__builtin_snprintf) for the type because that +// would inherit __attribute__((format(printf, 3, 4))) and give a warning for +// passing __ibm128 to %Lf instead of long double. The warning would be wrong +// because long double in this TU is __ieee128 and snprintf expects __ibm128. +extern "C" int +__glibcxx_snprintfibm128(char*, size_t, const char*, ...) __asm__("snprintf"); + + template + _OutIter + money_put<_CharT, _OutIter>:: + __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + __ibm128 __units) const + { + const locale __loc = __io.getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); + // First try a buffer perhaps big enough. + int __cs_size = 64; + char* __cs = static_cast(__builtin_alloca(__cs_size)); + const __c_locale __old = __gnu_cxx::__uselocale(_S_get_c_locale()); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 328. Bad sprintf format modifier in money_put<>::do_put() + int __len = __glibcxx_snprintfibm128(__cs, __cs_size, "%.*Lf", 0, + __units); + // If the buffer was not large enough, try again with the correct size. + if (__len >= __cs_size) + { + __cs_size = __len + 1; + __cs = static_cast(__builtin_alloca(__cs_size)); + __len = __glibcxx_snprintfibm128(__cs, __cs_size, "%.*Lf", 0, + __units); + } + __gnu_cxx::__uselocale(__old); + string_type __digits(__len, char_type()); + __ctype.widen(__cs, __cs + __len, &__digits[0]); + return __intl ? _M_insert(__s, __io, __fill, __digits) + : _M_insert(__s, __io, __fill, __digits); + } +#endif + +_GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 + + // NB: Not especially useful. Without an ios_base object or some + // kind of locale reference, we are left clawing at the air where + // the side of the mountain used to be... + template + time_base::dateorder + time_get<_CharT, _InIter>::do_date_order() const + { return time_base::no_order; } + + // Expand a strptime format string and parse it. E.g., do_get_date() may + // pass %m/%d/%Y => extracted characters. + template + _InIter + time_get<_CharT, _InIter>:: + _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm, + const _CharT* __format, + __time_get_state &__state) const + { + const locale& __loc = __io._M_getloc(); + const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); + const ctype<_CharT>& __ctype = use_facet >(__loc); + const size_t __len = char_traits<_CharT>::length(__format); + + ios_base::iostate __tmperr = ios_base::goodbit; + size_t __i = 0; + for (; __beg != __end && __i < __len && !__tmperr; ++__i) + { + if (__ctype.narrow(__format[__i], 0) == '%') + { + // Verify valid formatting code, attempt to extract. + char __c = __ctype.narrow(__format[++__i], 0); + int __mem = 0; + if (__c == 'E' || __c == 'O') + __c = __ctype.narrow(__format[++__i], 0); + switch (__c) + { + const char* __cs; + _CharT __wcs[10]; + case 'a': + case 'A': + // Weekday name (possibly abbreviated) [tm_wday] + const char_type* __days[14]; + __tp._M_days(&__days[0]); + __tp._M_days_abbreviated(&__days[7]); + __beg = _M_extract_name(__beg, __end, __mem, __days, + 14, __io, __tmperr); + if (!__tmperr) + { + __tm->tm_wday = __mem % 7; + __state._M_have_wday = 1; + } + break; + case 'h': + case 'b': + case 'B': + // Month name (possibly abbreviated) [tm_mon] + const char_type* __months[24]; + __tp._M_months(&__months[0]); + __tp._M_months_abbreviated(&__months[12]); + __beg = _M_extract_name(__beg, __end, __mem, + __months, 24, __io, __tmperr); + if (!__tmperr) + { + __tm->tm_mon = __mem % 12; + __state._M_have_mon = 1; + __state._M_want_xday = 1; + } + break; + case 'c': + // Default time and date representation. + const char_type* __dt[2]; + __tp._M_date_time_formats(__dt); + __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, + __tm, __dt[0], __state); + if (!__tmperr) + __state._M_want_xday = 1; + break; + case 'C': + // Century. + __beg = _M_extract_num(__beg, __end, __mem, 0, 99, 2, + __io, __tmperr); + if (!__tmperr) + { + __state._M_century = __mem; + __state._M_have_century = 1; + __state._M_want_xday = 1; + } + break; + case 'd': + case 'e': + // Day [1, 31]. [tm_mday] + if (__ctype.is(ctype_base::space, *__beg)) + ++__beg; + __beg = _M_extract_num(__beg, __end, __mem, 1, 31, 2, + __io, __tmperr); + if (!__tmperr) + { + __tm->tm_mday = __mem; + __state._M_have_mday = 1; + __state._M_want_xday = 1; + } + break; + case 'D': + // Equivalent to %m/%d/%y.[tm_mon, tm_mday, tm_year] + __cs = "%m/%d/%y"; + __ctype.widen(__cs, __cs + 9, __wcs); + __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, + __tm, __wcs, __state); + if (!__tmperr) + __state._M_want_xday = 1; + break; + case 'H': + // Hour [00, 23]. [tm_hour] + __beg = _M_extract_num(__beg, __end, __mem, 0, 23, 2, + __io, __tmperr); + if (!__tmperr) + { + __tm->tm_hour = __mem; + __state._M_have_I = 0; + } + break; + case 'I': + // Hour [01, 12]. [tm_hour] + __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2, + __io, __tmperr); + if (!__tmperr) + { + __tm->tm_hour = __mem % 12; + __state._M_have_I = 1; + } + break; + case 'j': + // Day number of year. + __beg = _M_extract_num(__beg, __end, __mem, 1, 366, 3, + __io, __tmperr); + if (!__tmperr) + { + __tm->tm_yday = __mem - 1; + __state._M_have_yday = 1; + } + break; + case 'm': + // Month [01, 12]. [tm_mon] + __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2, + __io, __tmperr); + if (!__tmperr) + { + __tm->tm_mon = __mem - 1; + __state._M_have_mon = 1; + } + break; + case 'M': + // Minute [00, 59]. [tm_min] + __beg = _M_extract_num(__beg, __end, __mem, 0, 59, 2, + __io, __tmperr); + if (!__tmperr) + __tm->tm_min = __mem; + break; + case 'n': + case 't': + while (__beg != __end + && __ctype.is(ctype_base::space, *__beg)) + ++__beg; + break; + case 'p': + // Locale's a.m. or p.m. + const char_type* __ampm[2]; + __tp._M_am_pm(&__ampm[0]); + if (!__ampm[0][0] || !__ampm[1][0]) + break; + __beg = _M_extract_name(__beg, __end, __mem, __ampm, + 2, __io, __tmperr); + if (!__tmperr && __mem) + __state._M_is_pm = 1; + break; + case 'r': + // Locale's 12-hour clock time format (in C %I:%M:%S %p). + const char_type* __ampm_format; + __tp._M_am_pm_format(&__ampm_format); + __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, + __tm, __ampm_format, __state); + break; + case 'R': + // Equivalent to (%H:%M). + __cs = "%H:%M"; + __ctype.widen(__cs, __cs + 6, __wcs); + __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, + __tm, __wcs, __state); + break; + case 'S': + // Seconds. [tm_sec] + // [00, 60] in C99 (one leap-second), [00, 61] in C89. +#if _GLIBCXX_USE_C99 + __beg = _M_extract_num(__beg, __end, __mem, 0, 60, 2, +#else + __beg = _M_extract_num(__beg, __end, __mem, 0, 61, 2, +#endif + __io, __tmperr); + if (!__tmperr) + __tm->tm_sec = __mem; + break; + case 'T': + // Equivalent to (%H:%M:%S). + __cs = "%H:%M:%S"; + __ctype.widen(__cs, __cs + 9, __wcs); + __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, + __tm, __wcs, __state); + break; + case 'U': + // Week number of the year (Sunday as first day of week). + __beg = _M_extract_num(__beg, __end, __mem, 0, 53, 2, + __io, __tmperr); + if (!__tmperr) + { + __state._M_week_no = __mem; + __state._M_have_uweek = 1; + } + break; + case 'w': + // Weekday [tm_wday] + __beg = _M_extract_num(__beg, __end, __mem, 0, 6, 1, + __io, __tmperr); + if (!__tmperr) + { + __tm->tm_wday = __mem; + __state._M_have_wday = 1; + } + break; + case 'W': + // Week number of the year (Monday as first day of week). + __beg = _M_extract_num(__beg, __end, __mem, 0, 53, 2, + __io, __tmperr); + if (!__tmperr) + { + __state._M_week_no = __mem; + __state._M_have_wweek = 1; + } + break; + case 'x': + // Locale's date. + const char_type* __dates[2]; + __tp._M_date_formats(__dates); + __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, + __tm, __dates[0], __state); + break; + case 'X': + // Locale's time. + const char_type* __times[2]; + __tp._M_time_formats(__times); + __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, + __tm, __times[0], __state); + break; + case 'y': + // The last 2 digits of year. + __beg = _M_extract_num(__beg, __end, __mem, 0, 99, 2, + __io, __tmperr); + if (!__tmperr) + { + __state._M_want_century = 1; + __state._M_want_xday = 1; + // As an extension, if the 2 digits are followed by + // 1-2 further digits, treat it like %Y. + __c = 0; + if (__beg != __end) + __c = __ctype.narrow(*__beg, '*'); + if (__c >= '0' && __c <= '9') + { + ++__beg; + __mem = __mem * 10 + (__c - '0'); + if (__beg != __end) + { + __c = __ctype.narrow(*__beg, '*'); + if (__c >= '0' && __c <= '9') + { + ++__beg; + __mem = __mem * 10 + (__c - '0'); + } + } + __mem -= 1900; + __state._M_want_century = 0; + } + // Otherwise, as per POSIX 2008, 00-68 is 2000-2068, + // while 69-99 is 1969-1999. + else if (__mem < 69) + __mem += 100; + __tm->tm_year = __mem; + } + break; + case 'Y': + // Year. + __beg = _M_extract_num(__beg, __end, __mem, 0, 9999, 4, + __io, __tmperr); + if (!__tmperr) + { + __tm->tm_year = __mem - 1900; + __state._M_want_century = 0; + __state._M_want_xday = 1; + } + break; + case 'Z': + // Timezone info. + if (__ctype.is(ctype_base::upper, *__beg)) + { + int __tmp; + __beg = _M_extract_name(__beg, __end, __tmp, + __timepunct_cache<_CharT>::_S_timezones, + 14, __io, __tmperr); + + // GMT requires special effort. + if (__beg != __end && !__tmperr && __tmp == 0 + && (*__beg == __ctype.widen('-') + || *__beg == __ctype.widen('+'))) + { + __beg = _M_extract_num(__beg, __end, __tmp, 0, 23, 2, + __io, __tmperr); + __beg = _M_extract_num(__beg, __end, __tmp, 0, 59, 2, + __io, __tmperr); + } + } + else + __tmperr |= ios_base::failbit; + break; + case '%': + if (*__beg == __ctype.widen('%')) + ++__beg; + else + __tmperr |= ios_base::failbit; + break; + default: + // Not recognized. + __tmperr |= ios_base::failbit; + } + } + else if (__ctype.is(ctype_base::space, __format[__i])) + { + // Skip any whitespace. + while (__beg != __end + && __ctype.is(ctype_base::space, *__beg)) + ++__beg; + } + else + { + // Verify format and input match, extract and discard. + // TODO real case-insensitive comparison + if (__ctype.tolower(__format[__i]) == __ctype.tolower(*__beg) + || __ctype.toupper(__format[__i]) == __ctype.toupper(*__beg)) + ++__beg; + else + __tmperr |= ios_base::failbit; + } + } + + if (__tmperr || __i != __len) + __err |= ios_base::failbit; + + return __beg; + } + + template + _InIter + time_get<_CharT, _InIter>:: + _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm, + const _CharT* __format) const + { + __time_get_state __state = __time_get_state(); + return _M_extract_via_format(__beg, __end, __io, __err, __tm, + __format, __state); + } + + template + _InIter + time_get<_CharT, _InIter>:: + _M_extract_num(iter_type __beg, iter_type __end, int& __member, + int __min, int __max, size_t __len, + ios_base& __io, ios_base::iostate& __err) const + { + const locale& __loc = __io._M_getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); + + size_t __i = 0; + int __value = 0; + for (; __beg != __end && __i < __len; ++__beg, (void)++__i) + { + const char __c = __ctype.narrow(*__beg, '*'); + if (__c >= '0' && __c <= '9') + { + __value = __value * 10 + (__c - '0'); + if (__value > __max) + break; + } + else + break; + } + if (__i && __value >= __min && __value <= __max) + __member = __value; + else + __err |= ios_base::failbit; + + return __beg; + } + + // Assumptions: + // All elements in __names are unique, except if __indexlen is + // even __names in the first half could be the same as corresponding + // __names in the second half (May is abbreviated as May). Some __names + // elements could be prefixes of other __names elements. + template + _InIter + time_get<_CharT, _InIter>:: + _M_extract_name(iter_type __beg, iter_type __end, int& __member, + const _CharT** __names, size_t __indexlen, + ios_base& __io, ios_base::iostate& __err) const + { + typedef char_traits<_CharT> __traits_type; + const locale& __loc = __io._M_getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); + + size_t* __matches + = static_cast(__builtin_alloca(2 * sizeof(size_t) + * __indexlen)); + size_t* __lengths = __matches + __indexlen; + size_t __nmatches = 0; + size_t __pos = 0; + bool __testvalid = true; + const char_type* __name; + bool __begupdated = false; + + // Look for initial matches. + if (__beg != __end) + { + const char_type __c = *__beg; + // TODO real case-insensitive comparison + const char_type __cl = __ctype.tolower(__c); + const char_type __cu = __ctype.toupper(__c); + for (size_t __i1 = 0; __i1 < __indexlen; ++__i1) + if (__cl == __ctype.tolower(__names[__i1][0]) + || __cu == __ctype.toupper(__names[__i1][0])) + { + __lengths[__nmatches] + = __traits_type::length(__names[__i1]); + __matches[__nmatches++] = __i1; + } + } + + while (__nmatches > 1) + { + // Find smallest matching string. + size_t __minlen = __lengths[0]; + for (size_t __i2 = 1; __i2 < __nmatches; ++__i2) + __minlen = std::min(__minlen, __lengths[__i2]); + ++__pos; + ++__beg; + if (__pos == __minlen) + { + // If some match has remaining length of 0, + // need to decide if any match with remaining + // length non-zero matches the next character. + // If so, remove all matches with remaining length + // 0 from consideration, otherwise keep only matches + // with remaining length 0. + bool __match_longer = false; + + if (__beg != __end) + { + // TODO real case-insensitive comparison + const char_type __cl = __ctype.tolower(*__beg); + const char_type __cu = __ctype.toupper(*__beg); + for (size_t __i3 = 0; __i3 < __nmatches; ++__i3) + { + __name = __names[__matches[__i3]]; + if (__lengths[__i3] > __pos + && (__ctype.tolower(__name[__pos]) == __cl + || __ctype.toupper(__name[__pos]) == __cu)) + { + __match_longer = true; + break; + } + } + } + for (size_t __i4 = 0; __i4 < __nmatches;) + if (__match_longer == (__lengths[__i4] == __pos)) + { + __matches[__i4] = __matches[--__nmatches]; + __lengths[__i4] = __lengths[__nmatches]; + } + else + ++__i4; + if (__match_longer) + { + __minlen = __lengths[0]; + for (size_t __i5 = 1; __i5 < __nmatches; ++__i5) + __minlen = std::min(__minlen, __lengths[__i5]); + } + else + { + // Deal with May being full as well as abbreviated month + // name. Pick the smaller index. + if (__nmatches == 2 && (__indexlen & 1) == 0) + { + if (__matches[0] < __indexlen / 2) + { + if (__matches[1] == __matches[0] + __indexlen / 2) + __nmatches = 1; + } + else if (__matches[1] == __matches[0] - __indexlen / 2) + { + __matches[0] = __matches[1]; + __lengths[0] = __lengths[1]; + __nmatches = 1; + } + } + __begupdated = true; + break; + } + } + if (__pos < __minlen && __beg != __end) + { + // TODO real case-insensitive comparison + const char_type __cl = __ctype.tolower(*__beg); + const char_type __cu = __ctype.toupper(*__beg); + for (size_t __i6 = 0; __i6 < __nmatches;) + { + __name = __names[__matches[__i6]]; + if (__ctype.tolower(__name[__pos]) != __cl + && __ctype.toupper(__name[__pos]) != __cu) + { + __matches[__i6] = __matches[--__nmatches]; + __lengths[__i6] = __lengths[__nmatches]; + } + else + ++__i6; + } + } + else + break; + } + + if (__nmatches == 1) + { + // Make sure found name is completely extracted. + if (!__begupdated) + { + ++__beg; + ++__pos; + } + __name = __names[__matches[0]]; + const size_t __len = __lengths[0]; + while (__pos < __len + && __beg != __end + // TODO real case-insensitive comparison + && (__ctype.tolower(__name[__pos]) == __ctype.tolower(*__beg) + || (__ctype.toupper(__name[__pos]) + == __ctype.toupper(*__beg)))) + ++__beg, (void)++__pos; + + if (__len == __pos) + __member = __matches[0]; + else + __testvalid = false; + } + else + __testvalid = false; + if (!__testvalid) + __err |= ios_base::failbit; + + return __beg; + } + + template + _InIter + time_get<_CharT, _InIter>:: + _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member, + const _CharT** __names, size_t __indexlen, + ios_base& __io, ios_base::iostate& __err) const + { + typedef char_traits<_CharT> __traits_type; + const locale& __loc = __io._M_getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); + + int* __matches = static_cast(__builtin_alloca(2 * sizeof(int) + * __indexlen)); + size_t __nmatches = 0; + size_t* __matches_lengths = 0; + size_t __pos = 0; + + if (__beg != __end) + { + const char_type __c = *__beg; + for (size_t __i = 0; __i < 2 * __indexlen; ++__i) + if (__c == __names[__i][0] + || __c == __ctype.toupper(__names[__i][0])) + __matches[__nmatches++] = __i; + } + + if (__nmatches) + { + ++__beg; + ++__pos; + + __matches_lengths + = static_cast(__builtin_alloca(sizeof(size_t) + * __nmatches)); + for (size_t __i = 0; __i < __nmatches; ++__i) + __matches_lengths[__i] + = __traits_type::length(__names[__matches[__i]]); + } + + for (; __beg != __end; ++__beg, (void)++__pos) + { + size_t __nskipped = 0; + const char_type __c = *__beg; + for (size_t __i = 0; __i < __nmatches;) + { + const char_type* __name = __names[__matches[__i]]; + if (__pos >= __matches_lengths[__i]) + ++__nskipped, ++__i; + else if (!(__name[__pos] == __c)) + { + --__nmatches; + __matches[__i] = __matches[__nmatches]; + __matches_lengths[__i] = __matches_lengths[__nmatches]; + } + else + ++__i; + } + if (__nskipped == __nmatches) + break; + } + + if ((__nmatches == 1 && __matches_lengths[0] == __pos) + || (__nmatches == 2 && (__matches_lengths[0] == __pos + || __matches_lengths[1] == __pos))) + __member = (__matches[0] >= (int)__indexlen + ? __matches[0] - (int)__indexlen : __matches[0]); + else + __err |= ios_base::failbit; + + return __beg; + } + + template + _InIter + time_get<_CharT, _InIter>:: + do_get_time(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const + { + const locale& __loc = __io._M_getloc(); + const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); + const char_type* __times[2]; + __tp._M_time_formats(__times); + __time_get_state __state = __time_get_state(); + __beg = _M_extract_via_format(__beg, __end, __io, __err, + __tm, __times[0], __state); + __state._M_finalize_state(__tm); + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + + template + _InIter + time_get<_CharT, _InIter>:: + do_get_date(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const + { + const locale& __loc = __io._M_getloc(); + const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); + const char_type* __dates[2]; + __tp._M_date_formats(__dates); + __time_get_state __state = __time_get_state(); + __beg = _M_extract_via_format(__beg, __end, __io, __err, + __tm, __dates[0], __state); + __state._M_finalize_state(__tm); + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + + template + _InIter + time_get<_CharT, _InIter>:: + do_get_weekday(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const + { + const locale& __loc = __io._M_getloc(); + const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); + const char_type* __days[14]; + __tp._M_days_abbreviated(__days); + __tp._M_days(__days + 7); + int __tmpwday; + ios_base::iostate __tmperr = ios_base::goodbit; + + __beg = _M_extract_wday_or_month(__beg, __end, __tmpwday, __days, 7, + __io, __tmperr); + if (!__tmperr) + __tm->tm_wday = __tmpwday; + else + __err |= ios_base::failbit; + + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + + template + _InIter + time_get<_CharT, _InIter>:: + do_get_monthname(iter_type __beg, iter_type __end, + ios_base& __io, ios_base::iostate& __err, tm* __tm) const + { + const locale& __loc = __io._M_getloc(); + const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); + const char_type* __months[24]; + __tp._M_months_abbreviated(__months); + __tp._M_months(__months + 12); + int __tmpmon; + ios_base::iostate __tmperr = ios_base::goodbit; + + __beg = _M_extract_wday_or_month(__beg, __end, __tmpmon, __months, 12, + __io, __tmperr); + if (!__tmperr) + __tm->tm_mon = __tmpmon; + else + __err |= ios_base::failbit; + + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + + template + _InIter + time_get<_CharT, _InIter>:: + do_get_year(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm) const + { + int __tmpyear; + ios_base::iostate __tmperr = ios_base::goodbit; + const locale& __loc = __io._M_getloc(); + const ctype<_CharT>& __ctype = use_facet >(__loc); + + __beg = _M_extract_num(__beg, __end, __tmpyear, 0, 99, 2, + __io, __tmperr); + if (!__tmperr) + { + char __c = 0; + if (__beg != __end) + __c = __ctype.narrow(*__beg, '*'); + // For 1-2 digit year, assume 69-99 is 1969-1999, 0-68 is 2000-2068. + // For 3-4 digit year, use it as year. + // __tm->tm_year needs year - 1900 though. + if (__c >= '0' && __c <= '9') + { + ++__beg; + __tmpyear = __tmpyear * 10 + (__c - '0'); + if (__beg != __end) + { + __c = __ctype.narrow(*__beg, '*'); + if (__c >= '0' && __c <= '9') + { + ++__beg; + __tmpyear = __tmpyear * 10 + (__c - '0'); + } + } + __tmpyear -= 1900; + } + else if (__tmpyear < 69) + __tmpyear += 100; + __tm->tm_year = __tmpyear; + } + else + __err |= ios_base::failbit; + + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + +#if __cplusplus >= 201103L + template + inline + _InIter + time_get<_CharT, _InIter>:: + get(iter_type __s, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm, const char_type* __fmt, + const char_type* __fmtend) const + { + const locale& __loc = __io._M_getloc(); + ctype<_CharT> const& __ctype = use_facet >(__loc); + __err = ios_base::goodbit; + bool __use_state = false; +#if __GNUC__ >= 5 && !defined(_GLIBCXX_CLANG) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpmf-conversions" + // Nasty hack. The C++ standard mandates that get invokes the do_get + // virtual method, but unfortunately at least without an ABI change + // for the facets we can't keep state across the different do_get + // calls. So e.g. if __fmt is "%p %I:%M:%S", we can't handle it + // properly, because we first handle the %p am/pm specifier and only + // later the 12-hour format specifier. + if ((void*)(this->*(&time_get::do_get)) == (void*)(&time_get::do_get)) + __use_state = true; +#pragma GCC diagnostic pop +#endif + __time_get_state __state = __time_get_state(); + while (__fmt != __fmtend && + __err == ios_base::goodbit) + { + if (__s == __end) + { + __err = ios_base::eofbit | ios_base::failbit; + break; + } + else if (__ctype.narrow(*__fmt, 0) == '%') + { + const char_type* __fmt_start = __fmt; + char __format; + char __mod = 0; + if (++__fmt == __fmtend) + { + __err = ios_base::failbit; + break; + } + const char __c = __ctype.narrow(*__fmt, 0); + if (__c != 'E' && __c != 'O') + __format = __c; + else if (++__fmt != __fmtend) + { + __mod = __c; + __format = __ctype.narrow(*__fmt, 0); + } + else + { + __err = ios_base::failbit; + break; + } + if (__use_state) + { + char_type __new_fmt[4]; + __new_fmt[0] = __fmt_start[0]; + __new_fmt[1] = __fmt_start[1]; + if (__mod) + { + __new_fmt[2] = __fmt_start[2]; + __new_fmt[3] = char_type(); + } + else + __new_fmt[2] = char_type(); + __s = _M_extract_via_format(__s, __end, __io, __err, __tm, + __new_fmt, __state); + if (__s == __end) + __err |= ios_base::eofbit; + } + else + __s = this->do_get(__s, __end, __io, __err, __tm, __format, + __mod); + ++__fmt; + } + else if (__ctype.is(ctype_base::space, *__fmt)) + { + ++__fmt; + while (__fmt != __fmtend && + __ctype.is(ctype_base::space, *__fmt)) + ++__fmt; + + while (__s != __end && + __ctype.is(ctype_base::space, *__s)) + ++__s; + } + // TODO real case-insensitive comparison + else if (__ctype.tolower(*__s) == __ctype.tolower(*__fmt) || + __ctype.toupper(*__s) == __ctype.toupper(*__fmt)) + { + ++__s; + ++__fmt; + } + else + { + __err = ios_base::failbit; + break; + } + } + if (__use_state) + __state._M_finalize_state(__tm); + return __s; + } + + template + inline + _InIter + time_get<_CharT, _InIter>:: + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, tm* __tm, + char __format, char __mod) const + { + const locale& __loc = __io._M_getloc(); + ctype<_CharT> const& __ctype = use_facet >(__loc); + __err = ios_base::goodbit; + + char_type __fmt[4]; + __fmt[0] = __ctype.widen('%'); + if (!__mod) + { + __fmt[1] = __format; + __fmt[2] = char_type(); + } + else + { + __fmt[1] = __mod; + __fmt[2] = __format; + __fmt[3] = char_type(); + } + + __time_get_state __state = __time_get_state(); + __beg = _M_extract_via_format(__beg, __end, __io, __err, __tm, __fmt, + __state); + __state._M_finalize_state(__tm); + if (__beg == __end) + __err |= ios_base::eofbit; + return __beg; + } + +#endif // __cplusplus >= 201103L + + template + _OutIter + time_put<_CharT, _OutIter>:: + put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, + const _CharT* __beg, const _CharT* __end) const + { + const locale& __loc = __io._M_getloc(); + ctype<_CharT> const& __ctype = use_facet >(__loc); + for (; __beg != __end; ++__beg) + if (__ctype.narrow(*__beg, 0) != '%') + { + *__s = *__beg; + ++__s; + } + else if (++__beg != __end) + { + char __format; + char __mod = 0; + const char __c = __ctype.narrow(*__beg, 0); + if (__c != 'E' && __c != 'O') + __format = __c; + else if (++__beg != __end) + { + __mod = __c; + __format = __ctype.narrow(*__beg, 0); + } + else + break; + __s = this->do_put(__s, __io, __fill, __tm, __format, __mod); + } + else + break; + return __s; + } + + template + _OutIter + time_put<_CharT, _OutIter>:: + do_put(iter_type __s, ios_base& __io, char_type, const tm* __tm, + char __format, char __mod) const + { + const locale& __loc = __io._M_getloc(); + ctype<_CharT> const& __ctype = use_facet >(__loc); + __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc); + + // NB: This size is arbitrary. Should this be a data member, + // initialized at construction? + const size_t __maxlen = 128; + char_type __res[__maxlen]; + + // NB: In IEEE 1003.1-200x, and perhaps other locale models, it + // is possible that the format character will be longer than one + // character. Possibilities include 'E' or 'O' followed by a + // format character: if __mod is not the default argument, assume + // it's a valid modifier. + char_type __fmt[4]; + __fmt[0] = __ctype.widen('%'); + if (!__mod) + { + __fmt[1] = __format; + __fmt[2] = char_type(); + } + else + { + __fmt[1] = __mod; + __fmt[2] = __format; + __fmt[3] = char_type(); + } + + __tp._M_put(__res, __maxlen, __fmt, __tm); + + // Write resulting, fully-formatted string to output iterator. + return std::__write(__s, __res, char_traits::length(__res)); + } + + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template +#pragma GCC diagnostic ignored "-Wlong-long" + extern template class moneypunct; + extern template class moneypunct; + extern template class moneypunct_byname; + extern template class moneypunct_byname; + extern template class _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 money_get; + extern template class _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 money_put; + extern template class __timepunct; + extern template class time_put; + extern template class time_put_byname; + extern template class time_get; + extern template class time_get_byname; + extern template class messages; + extern template class messages_byname; + + extern template + const moneypunct* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const moneypunct* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const money_put* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const money_get* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const __timepunct* + __try_use_facet<__timepunct >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const time_put* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const time_get* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const messages* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const moneypunct& + use_facet >(const locale&); + + extern template + const moneypunct& + use_facet >(const locale&); + + extern template + const money_put& + use_facet >(const locale&); + + extern template + const money_get& + use_facet >(const locale&); + + extern template + const __timepunct& + use_facet<__timepunct >(const locale&); + + extern template + const time_put& + use_facet >(const locale&); + + extern template + const time_get& + use_facet >(const locale&); + + extern template + const messages& + use_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet<__timepunct >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class moneypunct; + extern template class moneypunct; + extern template class moneypunct_byname; + extern template class moneypunct_byname; + extern template class _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 money_get; + extern template class _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 money_put; + extern template class __timepunct; + extern template class time_put; + extern template class time_put_byname; + extern template class time_get; + extern template class time_get_byname; + extern template class messages; + extern template class messages_byname; + + extern template + const moneypunct* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const moneypunct* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const money_put* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const money_get* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const __timepunct* + __try_use_facet<__timepunct >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const time_put* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const time_get* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const messages* + __try_use_facet >(const locale&) _GLIBCXX_NOTHROW; + + extern template + const moneypunct& + use_facet >(const locale&); + + extern template + const moneypunct& + use_facet >(const locale&); + + extern template + const money_put& + use_facet >(const locale&); + + extern template + const money_get& + use_facet >(const locale&); + + extern template + const __timepunct& + use_facet<__timepunct >(const locale&); + + extern template + const time_put& + use_facet >(const locale&); + + extern template + const time_get& + use_facet >(const locale&); + + extern template + const messages& + use_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet<__timepunct >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); +#endif +#pragma GCC diagnostic pop +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets_nonio.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@locale_facets_nonio.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..e26d7931ee67251b2112a7ec6703dc7c2a07bcbc GIT binary patch literal 155522 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@localefwd.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@localefwd.h new file mode 100644 index 0000000..23925c0 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@localefwd.h @@ -0,0 +1,216 @@ +// Forward declarations -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/localefwd.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.1 Locales +// + +#ifndef _LOCALE_FWD_H +#define _LOCALE_FWD_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include // Defines __c_locale, config-specific include +#include // For ostreambuf_iterator, istreambuf_iterator +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup locales Locales + * + * Classes and functions for internationalization and localization. + */ + + // 22.1.1 Locale + class locale; + + template + bool + has_facet(const locale&) throw(); + + template + const _Facet& + use_facet(const locale&); + + // 22.1.3 Convenience interfaces + template + bool + isspace(_CharT, const locale&); + + template + bool + isprint(_CharT, const locale&); + + template + bool + iscntrl(_CharT, const locale&); + + template + bool + isupper(_CharT, const locale&); + + template + bool + islower(_CharT, const locale&); + + template + bool + isalpha(_CharT, const locale&); + + template + bool + isdigit(_CharT, const locale&); + + template + bool + ispunct(_CharT, const locale&); + + template + bool + isxdigit(_CharT, const locale&); + + template + bool + isalnum(_CharT, const locale&); + + template + bool + isgraph(_CharT, const locale&); + +#if __cplusplus >= 201103L + template + bool + isblank(_CharT, const locale&); +#endif + + template + _CharT + toupper(_CharT, const locale&); + + template + _CharT + tolower(_CharT, const locale&); + + // 22.2.1 and 22.2.1.3 ctype + struct ctype_base; + template + class ctype; + template<> class ctype; +#ifdef _GLIBCXX_USE_WCHAR_T + template<> class ctype; +#endif + template + class ctype_byname; + // NB: Specialized for char and wchar_t in locale_facets.h. + + class codecvt_base; + template + class codecvt; + template<> class codecvt; +#ifdef _GLIBCXX_USE_WCHAR_T + template<> class codecvt; +#endif +#if __cplusplus >= 201103L + template<> class codecvt; + template<> class codecvt; +#ifdef _GLIBCXX_USE_CHAR8_T + template<> class codecvt; + template<> class codecvt; +#endif +#endif + template + class codecvt_byname; + + // 22.2.2 and 22.2.3 numeric +_GLIBCXX_BEGIN_NAMESPACE_LDBL + template > + class num_get; + template > + class num_put; +_GLIBCXX_END_NAMESPACE_LDBL +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + template class numpunct; + template class numpunct_byname; +_GLIBCXX_END_NAMESPACE_CXX11 + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + // 22.2.4 collation + template + class collate; + template + class collate_byname; +_GLIBCXX_END_NAMESPACE_CXX11 + + // 22.2.5 date and time + class time_base; +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + template > + class time_get; + template > + class time_get_byname; +_GLIBCXX_END_NAMESPACE_CXX11 + template > + class time_put; + template > + class time_put_byname; + + // 22.2.6 money + class money_base; +_GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 + template > + class money_get; + template > + class money_put; +_GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + template + class moneypunct; + template + class moneypunct_byname; +_GLIBCXX_END_NAMESPACE_CXX11 + + // 22.2.7 message retrieval + struct messages_base; +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + template + class messages; + template + class messages_byname; +_GLIBCXX_END_NAMESPACE_CXX11 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@localefwd.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@localefwd.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ab9a6a49dfd244fcc017a4f1ff1003022aba32b5 GIT binary patch literal 19997 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memory_resource.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memory_resource.h new file mode 100644 index 0000000..d4ed06c --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memory_resource.h @@ -0,0 +1,525 @@ +// -*- C++ -*- + +// Copyright (C) 2018-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/memory_resource.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory_resource} + */ + +#ifndef _GLIBCXX_MEMORY_RESOURCE_H +#define _GLIBCXX_MEMORY_RESOURCE_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus >= 201703L + +#include // operator new(size_t, void*) +#include // size_t, max_align_t, byte +#include // __throw_bad_array_new_length +#include // allocator_arg_t, __use_alloc +#include // uninitialized_construct_using_alloc +#include // __int_traits +#include + +#if ! __glibcxx_make_obj_using_allocator +# include // index_sequence +# include // tuple, forward_as_tuple +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +namespace pmr +{ + /// Class `memory_resource` + /** + * @ingroup pmr + * @headerfile memory_resource + * @since C++17 + */ + class memory_resource + { + static constexpr size_t _S_max_align = alignof(max_align_t); + + public: + memory_resource() = default; + memory_resource(const memory_resource&) = default; + virtual ~memory_resource(); // key function + + memory_resource& operator=(const memory_resource&) = default; + + [[nodiscard]] + void* + allocate(size_t __bytes, size_t __alignment = _S_max_align) + __attribute__((__returns_nonnull__,__alloc_size__(2),__alloc_align__(3))) + { return ::operator new(__bytes, do_allocate(__bytes, __alignment)); } + + void + deallocate(void* __p, size_t __bytes, size_t __alignment = _S_max_align) + __attribute__((__nonnull__)) + { return do_deallocate(__p, __bytes, __alignment); } + + [[nodiscard]] + bool + is_equal(const memory_resource& __other) const noexcept + { return do_is_equal(__other); } + + private: + virtual void* + do_allocate(size_t __bytes, size_t __alignment) = 0; + + virtual void + do_deallocate(void* __p, size_t __bytes, size_t __alignment) = 0; + + virtual bool + do_is_equal(const memory_resource& __other) const noexcept = 0; + }; + + [[nodiscard]] + inline bool + operator==(const memory_resource& __a, const memory_resource& __b) noexcept + { return &__a == &__b || __a.is_equal(__b); } + +#if __cpp_impl_three_way_comparison < 201907L + [[nodiscard]] + inline bool + operator!=(const memory_resource& __a, const memory_resource& __b) noexcept + { return !(__a == __b); } +#endif + + // C++17 23.12.3 Class template polymorphic_allocator + + /// Class template polymorphic_allocator + /** + * @ingroup pmr + * @headerfile memory_resource + * @since C++17 + */ + template + class polymorphic_allocator + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2975. Missing case for pair construction in polymorphic allocators + template + struct __not_pair { using type = void; }; + + template + struct __not_pair> { }; + + public: + using value_type = _Tp; + + polymorphic_allocator() noexcept + { + extern memory_resource* get_default_resource() noexcept + __attribute__((__returns_nonnull__)); + _M_resource = get_default_resource(); + } + + polymorphic_allocator(memory_resource* __r) noexcept + __attribute__((__nonnull__)) + : _M_resource(__r) + { _GLIBCXX_DEBUG_ASSERT(__r); } + + polymorphic_allocator(const polymorphic_allocator& __other) = default; + + template + polymorphic_allocator(const polymorphic_allocator<_Up>& __x) noexcept + : _M_resource(__x.resource()) + { } + + polymorphic_allocator& + operator=(const polymorphic_allocator&) = delete; + + [[nodiscard]] + _Tp* + allocate(size_t __n) + __attribute__((__returns_nonnull__)) + { + if ((__gnu_cxx::__int_traits::__max / sizeof(_Tp)) < __n) + std::__throw_bad_array_new_length(); + return static_cast<_Tp*>(_M_resource->allocate(__n * sizeof(_Tp), + alignof(_Tp))); + } + + void + deallocate(_Tp* __p, size_t __n) noexcept + __attribute__((__nonnull__)) + { _M_resource->deallocate(__p, __n * sizeof(_Tp), alignof(_Tp)); } + +#ifdef __glibcxx_polymorphic_allocator // >= C++20 + [[nodiscard]] void* + allocate_bytes(size_t __nbytes, + size_t __alignment = alignof(max_align_t)) + { return _M_resource->allocate(__nbytes, __alignment); } + + void + deallocate_bytes(void* __p, size_t __nbytes, + size_t __alignment = alignof(max_align_t)) + { _M_resource->deallocate(__p, __nbytes, __alignment); } + + template + [[nodiscard]] _Up* + allocate_object(size_t __n = 1) + { + if ((__gnu_cxx::__int_traits::__max / sizeof(_Up)) < __n) + std::__throw_bad_array_new_length(); + return static_cast<_Up*>(allocate_bytes(__n * sizeof(_Up), + alignof(_Up))); + } + + template + void + deallocate_object(_Up* __p, size_t __n = 1) + { deallocate_bytes(__p, __n * sizeof(_Up), alignof(_Up)); } + + template + [[nodiscard]] _Up* + new_object(_CtorArgs&&... __ctor_args) + { + _Up* __p = allocate_object<_Up>(); + __try + { + construct(__p, std::forward<_CtorArgs>(__ctor_args)...); + } + __catch (...) + { + deallocate_object(__p); + __throw_exception_again; + } + return __p; + } + + template + void + delete_object(_Up* __p) + { + __p->~_Up(); + deallocate_object(__p); + } +#endif // C++20 + +#if ! __glibcxx_make_obj_using_allocator // >= C++20 + template + __attribute__((__nonnull__)) + typename __not_pair<_Tp1>::type + construct(_Tp1* __p, _Args&&... __args) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2969. polymorphic_allocator::construct() shouldn't pass resource() + using __use_tag + = std::__uses_alloc_t<_Tp1, polymorphic_allocator, _Args...>; + if constexpr (is_base_of_v<__uses_alloc0, __use_tag>) + ::new(__p) _Tp1(std::forward<_Args>(__args)...); + else if constexpr (is_base_of_v<__uses_alloc1_, __use_tag>) + ::new(__p) _Tp1(allocator_arg, *this, + std::forward<_Args>(__args)...); + else + ::new(__p) _Tp1(std::forward<_Args>(__args)..., *this); + } + + template + __attribute__((__nonnull__)) + void + construct(pair<_Tp1, _Tp2>* __p, piecewise_construct_t, + tuple<_Args1...> __x, tuple<_Args2...> __y) + { + auto __x_tag = + __use_alloc<_Tp1, polymorphic_allocator, _Args1...>(*this); + auto __y_tag = + __use_alloc<_Tp2, polymorphic_allocator, _Args2...>(*this); + index_sequence_for<_Args1...> __x_i; + index_sequence_for<_Args2...> __y_i; + + ::new(__p) pair<_Tp1, _Tp2>(piecewise_construct, + _S_construct_p(__x_tag, __x_i, __x), + _S_construct_p(__y_tag, __y_i, __y)); + } + + template + __attribute__((__nonnull__)) + void + construct(pair<_Tp1, _Tp2>* __p) + { this->construct(__p, piecewise_construct, tuple<>(), tuple<>()); } + + template + __attribute__((__nonnull__)) + void + construct(pair<_Tp1, _Tp2>* __p, _Up&& __x, _Vp&& __y) + { + this->construct(__p, piecewise_construct, + std::forward_as_tuple(std::forward<_Up>(__x)), + std::forward_as_tuple(std::forward<_Vp>(__y))); + } + + template + __attribute__((__nonnull__)) + void + construct(pair<_Tp1, _Tp2>* __p, const std::pair<_Up, _Vp>& __pr) + { + this->construct(__p, piecewise_construct, + std::forward_as_tuple(__pr.first), + std::forward_as_tuple(__pr.second)); + } + + template + __attribute__((__nonnull__)) + void + construct(pair<_Tp1, _Tp2>* __p, pair<_Up, _Vp>&& __pr) + { + this->construct(__p, piecewise_construct, + std::forward_as_tuple(std::forward<_Up>(__pr.first)), + std::forward_as_tuple(std::forward<_Vp>(__pr.second))); + } +#else // make_obj_using_allocator + template + __attribute__((__nonnull__)) + void + construct(_Tp1* __p, _Args&&... __args) + { + std::uninitialized_construct_using_allocator(__p, *this, + std::forward<_Args>(__args)...); + } +#endif + + template + __attribute__((__nonnull__)) + void + destroy(_Up* __p) + { __p->~_Up(); } + + polymorphic_allocator + select_on_container_copy_construction() const noexcept + { return polymorphic_allocator(); } + + memory_resource* + resource() const noexcept + __attribute__((__returns_nonnull__)) + { return _M_resource; } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3683. operator== for polymorphic_allocator cannot deduce template arg + [[nodiscard]] + friend bool + operator==(const polymorphic_allocator& __a, + const polymorphic_allocator& __b) noexcept + { return *__a.resource() == *__b.resource(); } + +#if __cpp_impl_three_way_comparison < 201907L + [[nodiscard]] + friend bool + operator!=(const polymorphic_allocator& __a, + const polymorphic_allocator& __b) noexcept + { return !(__a == __b); } +#endif + + private: +#if ! __glibcxx_make_obj_using_allocator // >= C++20 + using __uses_alloc1_ = __uses_alloc1; + using __uses_alloc2_ = __uses_alloc2; + + template + static tuple<_Args&&...> + _S_construct_p(__uses_alloc0, _Ind, tuple<_Args...>& __t) + { return std::move(__t); } + + template + static tuple + _S_construct_p(__uses_alloc1_ __ua, index_sequence<_Ind...>, + tuple<_Args...>& __t) + { + return { + allocator_arg, *__ua._M_a, std::get<_Ind>(std::move(__t))... + }; + } + + template + static tuple<_Args&&..., polymorphic_allocator> + _S_construct_p(__uses_alloc2_ __ua, index_sequence<_Ind...>, + tuple<_Args...>& __t) + { return { std::get<_Ind>(std::move(__t))..., *__ua._M_a }; } +#endif + + memory_resource* _M_resource; + }; + + template + [[nodiscard]] + inline bool + operator==(const polymorphic_allocator<_Tp1>& __a, + const polymorphic_allocator<_Tp2>& __b) noexcept + { return *__a.resource() == *__b.resource(); } + +#if __cpp_impl_three_way_comparison < 201907L + template + [[nodiscard]] + inline bool + operator!=(const polymorphic_allocator<_Tp1>& __a, + const polymorphic_allocator<_Tp2>& __b) noexcept + { return !(__a == __b); } +#endif + +} // namespace pmr + + template struct allocator_traits; + + /// Partial specialization for `std::pmr::polymorphic_allocator` + /** + * @ingroup pmr + * @headerfile memory_resource + * @since C++17 + */ + template + struct allocator_traits> + { + /// The allocator type + using allocator_type = pmr::polymorphic_allocator<_Tp>; + + /// The allocated type + using value_type = _Tp; + + /// The allocator's pointer type. + using pointer = _Tp*; + + /// The allocator's const pointer type. + using const_pointer = const _Tp*; + + /// The allocator's void pointer type. + using void_pointer = void*; + + /// The allocator's const void pointer type. + using const_void_pointer = const void*; + + /// The allocator's difference type + using difference_type = std::ptrdiff_t; + + /// The allocator's size type + using size_type = std::size_t; + + /** @{ + * A `polymorphic_allocator` does not propagate when a + * container is copied, moved, or swapped. + */ + using propagate_on_container_copy_assignment = false_type; + using propagate_on_container_move_assignment = false_type; + using propagate_on_container_swap = false_type; + + static allocator_type + select_on_container_copy_construction(const allocator_type&) noexcept + { return allocator_type(); } + /// @} + + /// Whether all instances of the allocator type compare equal. + using is_always_equal = false_type; + + template + using rebind_alloc = pmr::polymorphic_allocator<_Up>; + + template + using rebind_traits = allocator_traits>; + + /** + * @brief Allocate memory. + * @param __a An allocator. + * @param __n The number of objects to allocate space for. + * + * Calls `a.allocate(n)`. + */ + [[nodiscard]] static pointer + allocate(allocator_type& __a, size_type __n) + { return __a.allocate(__n); } + + /** + * @brief Allocate memory. + * @param __a An allocator. + * @param __n The number of objects to allocate space for. + * @return Memory of suitable size and alignment for `n` objects + * of type `value_type`. + * + * The third parameter is ignored.. + * + * Returns `a.allocate(n)`. + */ + [[nodiscard]] static pointer + allocate(allocator_type& __a, size_type __n, const_void_pointer) + { return __a.allocate(__n); } + + /** + * @brief Deallocate memory. + * @param __a An allocator. + * @param __p Pointer to the memory to deallocate. + * @param __n The number of objects space was allocated for. + * + * Calls `a.deallocate(p, n)`. + */ + static void + deallocate(allocator_type& __a, pointer __p, size_type __n) + { __a.deallocate(__p, __n); } + + /** + * @brief Construct an object of type `_Up` + * @param __a An allocator. + * @param __p Pointer to memory of suitable size and alignment for + * an object of type `_Up`. + * @param __args Constructor arguments. + * + * Calls `__a.construct(__p, std::forward<_Args>(__args)...)` + * in C++11, C++14 and C++17. Changed in C++20 to call + * `std::construct_at(__p, std::forward<_Args>(__args)...)` instead. + */ + template + static void + construct(allocator_type& __a, _Up* __p, _Args&&... __args) + { __a.construct(__p, std::forward<_Args>(__args)...); } + + /** + * @brief Destroy an object of type `_Up` + * @param __a An allocator. + * @param __p Pointer to the object to destroy + * + * Calls `p->_Up()`. + */ + template + static _GLIBCXX20_CONSTEXPR void + destroy(allocator_type&, _Up* __p) + noexcept(is_nothrow_destructible<_Up>::value) + { __p->~_Up(); } + + /** + * @brief The maximum supported allocation size + * @return `numeric_limits::max() / sizeof(value_type)` + */ + static _GLIBCXX20_CONSTEXPR size_type + max_size(const allocator_type&) noexcept + { return size_t(-1) / sizeof(value_type); } + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++17 +#endif // _GLIBCXX_MEMORY_RESOURCE_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memory_resource.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memory_resource.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..71008a8c290222e56fe4653a99d827d71661be35 GIT binary patch literal 42866 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 Yct+4Xy&HT%0c6-FnNja=GN@nz03XVirvLx| literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memoryfwd.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memoryfwd.h new file mode 100644 index 0000000..0da5cbb --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memoryfwd.h @@ -0,0 +1,86 @@ +// Forward declarations -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/* + * Copyright (c) 1996-1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/memoryfwd.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _MEMORYFWD_H +#define _MEMORYFWD_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup allocators Allocators + * @ingroup memory + * + * Classes encapsulating memory operations. + * + * @{ + */ + + // Included in freestanding as a libstdc++ extension. + template + class allocator; + + template<> + class allocator; + +#if __cplusplus >= 201103L + /// Declare uses_allocator so it can be specialized in `` etc. + template + struct uses_allocator; + + template + struct allocator_traits; +#endif + + /// @} group memory + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memoryfwd.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@memoryfwd.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2c7a7314caca02b23a618cb46fd037744590f38a GIT binary patch literal 12958 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@move.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@move.h new file mode 100644 index 0000000..e91b003 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@move.h @@ -0,0 +1,262 @@ +// Move, forward and identity for C++11 + swap -*- C++ -*- + +// Copyright (C) 2007-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/move.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{utility} + */ + +#ifndef _MOVE_H +#define _MOVE_H 1 + +#include +#if __cplusplus < 201103L +# include +#else +# include // Brings in std::declval too. +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Used, in C++03 mode too, by allocators, etc. + /** + * @brief Same as C++11 std::addressof + * @ingroup utilities + */ + template + __attribute__((__always_inline__)) + inline _GLIBCXX_CONSTEXPR _Tp* + __addressof(_Tp& __r) _GLIBCXX_NOEXCEPT + { return __builtin_addressof(__r); } + +#if __cplusplus >= 201103L + + /** + * @addtogroup utilities + * @{ + */ + + /** + * @brief Forward an lvalue. + * @return The parameter cast to the specified type. + * + * This function is used to implement "perfect forwarding". + * @since C++11 + */ + template + [[__nodiscard__,__gnu__::__always_inline__]] + constexpr _Tp&& + forward(typename std::remove_reference<_Tp>::type& __t) noexcept + { return static_cast<_Tp&&>(__t); } + + /** + * @brief Forward an rvalue. + * @return The parameter cast to the specified type. + * + * This function is used to implement "perfect forwarding". + * @since C++11 + */ + template + [[__nodiscard__,__gnu__::__always_inline__]] + constexpr _Tp&& + forward(typename std::remove_reference<_Tp>::type&& __t) noexcept + { + static_assert(!std::is_lvalue_reference<_Tp>::value, + "std::forward must not be used to convert an rvalue to an lvalue"); + return static_cast<_Tp&&>(__t); + } + +#if __glibcxx_forward_like // C++ >= 23 + template + struct __like_impl; // _Tp must be a reference and _Up an lvalue reference + + template + struct __like_impl<_Tp&, _Up&> + { using type = _Up&; }; + + template + struct __like_impl + { using type = const _Up&; }; + + template + struct __like_impl<_Tp&&, _Up&> + { using type = _Up&&; }; + + template + struct __like_impl + { using type = const _Up&&; }; + + template + using __like_t = typename __like_impl<_Tp&&, _Up&>::type; + + /** @brief Forward with the cv-qualifiers and value category of another type. + * @tparam _Tp An lvalue reference or rvalue reference. + * @tparam _Up An lvalue reference type deduced from the function argument. + * @param __x An lvalue. + * @return `__x` converted to match the qualifiers of `_Tp`. + * @since C++23 + */ + template + [[nodiscard,__gnu__::__always_inline__]] + constexpr __like_t<_Tp, _Up> + forward_like(_Up&& __x) noexcept + { return static_cast<__like_t<_Tp, _Up>>(__x); } +#endif + + /** + * @brief Convert a value to an rvalue. + * @param __t A thing of arbitrary type. + * @return The parameter cast to an rvalue-reference to allow moving it. + * @since C++11 + */ + template + [[__nodiscard__,__gnu__::__always_inline__]] + constexpr typename std::remove_reference<_Tp>::type&& + move(_Tp&& __t) noexcept + { return static_cast::type&&>(__t); } + + + template + struct __move_if_noexcept_cond + : public __and_<__not_>, + is_copy_constructible<_Tp>>::type { }; + + /** + * @brief Conditionally convert a value to an rvalue. + * @param __x A thing of arbitrary type. + * @return The parameter, possibly cast to an rvalue-reference. + * + * Same as std::move unless the type's move constructor could throw and the + * type is copyable, in which case an lvalue-reference is returned instead. + * @since C++11 + */ + template + [[__nodiscard__,__gnu__::__always_inline__]] + constexpr + __conditional_t<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&> + move_if_noexcept(_Tp& __x) noexcept + { return std::move(__x); } + + // declval, from type_traits. + + /** + * @brief Returns the actual address of the object or function + * referenced by r, even in the presence of an overloaded + * operator&. + * @param __r Reference to an object or function. + * @return The actual address. + * @since C++11 + */ + template + [[__nodiscard__,__gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR _Tp* + addressof(_Tp& __r) noexcept + { return std::__addressof(__r); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2598. addressof works on temporaries + template + const _Tp* addressof(const _Tp&&) = delete; + + // C++11 version of std::exchange for internal use. + template + _GLIBCXX20_CONSTEXPR + inline _Tp + __exchange(_Tp& __obj, _Up&& __new_val) + { + _Tp __old_val = std::move(__obj); + __obj = std::forward<_Up>(__new_val); + return __old_val; + } + + /// @} group utilities + +#define _GLIBCXX_FWDREF(_Tp) _Tp&& +#define _GLIBCXX_MOVE(__val) std::move(__val) +#define _GLIBCXX_FORWARD(_Tp, __val) std::forward<_Tp>(__val) +#else +#define _GLIBCXX_FWDREF(_Tp) const _Tp& +#define _GLIBCXX_MOVE(__val) (__val) +#define _GLIBCXX_FORWARD(_Tp, __val) (__val) +#endif + + /** + * @addtogroup utilities + * @{ + */ + + /** + * @brief Swaps two values. + * @param __a A thing of arbitrary type. + * @param __b Another thing of arbitrary type. + * @return Nothing. + */ + template + _GLIBCXX20_CONSTEXPR + inline +#if __cplusplus >= 201103L + typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>, + is_move_constructible<_Tp>, + is_move_assignable<_Tp>>::value>::type +#else + void +#endif + swap(_Tp& __a, _Tp& __b) + _GLIBCXX_NOEXCEPT_IF(__and_, + is_nothrow_move_assignable<_Tp>>::value) + { +#if __cplusplus < 201103L + // concept requirements + __glibcxx_function_requires(_SGIAssignableConcept<_Tp>) +#endif + _Tp __tmp = _GLIBCXX_MOVE(__a); + __a = _GLIBCXX_MOVE(__b); + __b = _GLIBCXX_MOVE(__tmp); + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 809. std::swap should be overloaded for array types. + /// Swap the contents of two arrays. + template + _GLIBCXX20_CONSTEXPR + inline +#if __cplusplus >= 201103L + typename enable_if<__is_swappable<_Tp>::value>::type +#else + void +#endif + swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) + _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Tp>::value) + { + for (size_t __n = 0; __n < _Nm; ++__n) + swap(__a[__n], __b[__n]); + } + + /// @} group utilities +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _MOVE_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@move.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@move.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..0d6d315c8ee92f49f7d2c530375fdb04d72d2c41 GIT binary patch literal 19562 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@nested_exception.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@nested_exception.h new file mode 100644 index 0000000..c9f63e5 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@nested_exception.h @@ -0,0 +1,243 @@ +// Nested Exception support header (nested_exception class) for -*- C++ -*- + +// Copyright (C) 2009-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/nested_exception.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{exception} + */ + +#ifndef _GLIBCXX_NESTED_EXCEPTION_H +#define _GLIBCXX_NESTED_EXCEPTION_H 1 + +#if __cplusplus < 201103L +# include +#else + +#include +#include + +extern "C++" { + +namespace std _GLIBCXX_VISIBILITY(default) +{ + /** + * @addtogroup exceptions + * @{ + */ + + /** Mixin class that stores the current exception. + * + * This type can be used via `std::throw_with_nested` to store + * the current exception nested within another exception. + * + * @headerfile exception + * @since C++11 + * @see std::throw_with_nested + * @ingroup exceptions + */ + class nested_exception + { + exception_ptr _M_ptr; + + public: + /// The default constructor stores the current exception (if any). + nested_exception() noexcept : _M_ptr(current_exception()) { } + + nested_exception(const nested_exception&) noexcept = default; + + nested_exception& operator=(const nested_exception&) noexcept = default; + + virtual ~nested_exception() noexcept; + + /// Rethrow the stored exception, or terminate if none was stored. + [[noreturn]] + void + rethrow_nested() const + { + if (_M_ptr) + rethrow_exception(_M_ptr); + std::terminate(); + } + + /// Access the stored exception. + exception_ptr + nested_ptr() const noexcept + { return _M_ptr; } + }; + + /// @cond undocumented + + template + struct _Nested_exception : public _Except, public nested_exception + { + explicit _Nested_exception(const _Except& __ex) + : _Except(__ex) + { } + + explicit _Nested_exception(_Except&& __ex) + : _Except(static_cast<_Except&&>(__ex)) + { } + }; + +#if __cplusplus < 201703L || ! defined __cpp_if_constexpr + // [except.nested]/8 + // Throw an exception of unspecified type that is publicly derived from + // both remove_reference_t<_Tp> and nested_exception. + template + [[noreturn]] + inline void + __throw_with_nested_impl(_Tp&& __t, true_type) + { + throw _Nested_exception<__remove_cvref_t<_Tp>>{std::forward<_Tp>(__t)}; + } + + template + [[noreturn]] + inline void + __throw_with_nested_impl(_Tp&& __t, false_type) + { throw std::forward<_Tp>(__t); } +#endif + + /// @endcond + + /** Throw an exception that also stores the currently active exception. + * + * If `_Tp` is derived from `std::nested_exception` or is not usable + * as a base-class, throws a copy of `__t`. + * Otherwise, throws an object of an implementation-defined type derived + * from both `_Tp` and `std::nested_exception`, containing a copy of `__t` + * and the result of `std::current_exception()`. + * + * In other words, throws the argument as a new exception that contains + * the currently active exception nested within it. This is intended for + * use in a catch handler to replace the caught exception with a different + * type, while still preserving the original exception. When the new + * exception is caught, the nested exception can be rethrown by using + * `std::rethrow_if_nested`. + * + * This can be used at API boundaries, for example to catch a library's + * internal exception type and rethrow it nested with a `std::runtime_error`, + * or vice versa. + * + * @since C++11 + */ + template + [[noreturn]] + inline void + throw_with_nested(_Tp&& __t) + { + using _Up = typename decay<_Tp>::type; + using _CopyConstructible + = __and_, is_move_constructible<_Up>>; + static_assert(_CopyConstructible::value, + "throw_with_nested argument must be CopyConstructible"); + +#if __cplusplus >= 201703L && __cpp_if_constexpr + if constexpr (is_class_v<_Up>) + if constexpr (!is_final_v<_Up>) + if constexpr (!is_base_of_v) + throw _Nested_exception<_Up>{std::forward<_Tp>(__t)}; + throw std::forward<_Tp>(__t); +#else + using __nest = __and_, __bool_constant, + __not_>>; + std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{}); +#endif + } + +#if __cplusplus < 201703L || ! defined __cpp_if_constexpr + /// @cond undocumented + + // Attempt dynamic_cast to nested_exception and call rethrow_nested(). + template + inline void + __rethrow_if_nested_impl(const _Ex* __ptr, true_type) + { + if (auto __ne_ptr = dynamic_cast(__ptr)) + __ne_ptr->rethrow_nested(); + } + + // Otherwise, no effects. + inline void + __rethrow_if_nested_impl(const void*, false_type) + { } + + /// @endcond +#endif + + /** Rethrow a nested exception + * + * If `__ex` contains a `std::nested_exception` object, call its + * `rethrow_nested()` member to rethrow the stored exception. + * + * After catching an exception thrown by a call to `std::throw_with_nested` + * this function can be used to rethrow the exception that was active when + * `std::throw_with_nested` was called. + * + * @since C++11 + */ + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2484. rethrow_if_nested() is doubly unimplementable + // 2784. Resolution to LWG 2484 is missing "otherwise, no effects" and [...] + template +# if ! __cpp_rtti + [[__gnu__::__always_inline__]] +#endif + inline void + rethrow_if_nested(const _Ex& __ex) + { + const _Ex* __ptr = __builtin_addressof(__ex); +#if __cplusplus < 201703L || ! defined __cpp_if_constexpr +# if __cpp_rtti + using __cast = __and_, + __or_<__not_>, + is_convertible<_Ex*, nested_exception*>>>; +# else + using __cast = __and_, + is_base_of, + is_convertible<_Ex*, nested_exception*>>; +# endif + std::__rethrow_if_nested_impl(__ptr, __cast{}); +#else + if constexpr (!is_polymorphic_v<_Ex>) + return; + else if constexpr (is_base_of_v + && !is_convertible_v<_Ex*, nested_exception*>) + return; // nested_exception base class is inaccessible or ambiguous. +# if ! __cpp_rtti + else if constexpr (!is_base_of_v) + return; // Cannot do polymorphic casts without RTTI. +# endif + else if (auto __ne_ptr = dynamic_cast(__ptr)) + __ne_ptr->rethrow_nested(); +#endif + } + + /// @} group exceptions +} // namespace std + +} // extern "C++" + +#endif // C++11 +#endif // _GLIBCXX_NESTED_EXCEPTION_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@nested_exception.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@nested_exception.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f11f03c037d0d9bda1a266048d04797676acbe2b GIT binary patch literal 19085 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

    !kA={ zYmoGWEs^kuDKPkER%GTWKoo-eGT`D8NAFjUiwoRl2W4H9k&LoT*r*J+sOtSh0k$F|fhM72qw*|F9O{e^?70J{<8MR&6mb{^t+9Ys_u4&9#An zm6-vN3>e`f8Qh>D2Np&rGp8^XMo{aLh0%q>MT3RW#m6Owh0#sQ&5DIFIw!j4FAE3b zJiB>uEQ}9)9^|kvKD2un$HMqL<#`JW<9`LNuDko*ZP*XVU*HN7oCu(!cc9z_=7WY4 zG#PkQI6z4Pg#UmD#;JZ&!$3tQ$3NC%=HIUi8T6d6>lbVAekz7$>XlZEy z7Dv$msSOlR4KGV9%1q2F0jcKX)Jwg{QVb}^CoI?0N2Rt2=Q>;*pWUUDohB}BZ;t|Rf zYT=QBO?f`3^Ik!;dg#n4vBpD{gLYeDw*r(-P~s~wDH9YJ$f*Q84-ubSQGt?H(4*Wf zzepjiG$%&^l1hseic?dqxH3vg3as??)030+((_97@{7{-^TCUnQu33F_2GF*AJq6N zF40ZNuc%B<&C`d6d$C?dNp21U0|V24*tj8le4PniGs7DR3=GT+jG7{vQjCn63~!kj z7?}Ne{DoK;=ex}JVqsh$u|ST6Q4n7IfLn6VA{Nn@R?v!%&jZhEF&G#K5K;r`B16_7 z$0sKim)KxeuVtqZ59)wwGB7Yc*LZHh#Q0q9`82rud3hKZm_Xt@j4zm82=OrfS5Mq* zbhT&Ca3MyNytiY{=yt34y5>V?QzKlUm1JZFNpiTi)5~6C>h<7W>&(%?g z56RaA6^6W^=Kn*1hXyQ+{~K3zFWPyDWi5P|+|M;Q#MLFA1_nks0Xa7&5b4G6pOJxq0p1n>dlA-dgA8~u$jNaqFfhg@#Abl1p;)Kb z40uE9FDC;7W1K>q1`Ff=tq(u*um4&118fAQ?+fyCDs%IT3NkX2@rDwLI#?(n2|_9k z1_lOj@Z8h7=f%SK|2Fr+WtFy0zd^wU!>kG%3UUsNX&h;C4ve!oX3IG+uHaZ9=fHT0 z|T(UL20d^q=-RGj0;^1?2e?;%$$3@uJd2 z9VW($JQq{oog+{xVtn59d(eP%2!d!v zO&Lum2gd)2-vhGiN>g@##9)|lw$1DW2gd)rZin-m4nzgP#6dLEX};4+4vdfa9xFL8 z{y)aeV42qYwF`&;(m+GIctZfH0u};bE@}wORhVnSf@mzmXDgt6p2-%I!9!J(btc=v z8{U6GS$%%S{5%%M1vU$uSQz1*R9?u0H2`2>i_@% literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@new_allocator.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@new_allocator.h new file mode 100644 index 0000000..8f1bc57 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@new_allocator.h @@ -0,0 +1,243 @@ +// Allocator that wraps operator new -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/new_allocator.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _STD_NEW_ALLOCATOR_H +#define _STD_NEW_ALLOCATOR_H 1 + +#include +#include +#include +#include +#if __cplusplus >= 201103L +#include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief An allocator that uses global `new`, as per C++03 [20.4.1]. + * @ingroup allocators + * + * This is precisely the allocator defined in the C++ Standard. + * - all allocation calls `operator new` + * - all deallocation calls `operator delete` + * + * This is the default base-class implementation of `std::allocator`, + * and is also the base-class of the `__gnu_cxx::new_allocator` extension. + * You should use either `std::allocator` or `__gnu_cxx::new_allocator` + * instead of using this directly. + * + * @tparam _Tp Type of allocated object. + * + * @headerfile memory + */ + template + class __new_allocator + { + public: + typedef _Tp value_type; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; +#if __cplusplus <= 201703L + typedef _Tp* pointer; + typedef const _Tp* const_pointer; + typedef _Tp& reference; + typedef const _Tp& const_reference; + + template + struct rebind + { typedef __new_allocator<_Tp1> other; }; +#endif + +#if __cplusplus >= 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2103. propagate_on_container_move_assignment + typedef std::true_type propagate_on_container_move_assignment; +#endif + + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + __new_allocator() _GLIBCXX_USE_NOEXCEPT { } + + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + __new_allocator(const __new_allocator&) _GLIBCXX_USE_NOEXCEPT { } + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + __new_allocator(const __new_allocator<_Tp1>&) _GLIBCXX_USE_NOEXCEPT { } + +#if __cplusplus >= 201103L + __new_allocator& operator=(const __new_allocator&) = default; +#endif + +#if __cplusplus <= 201703L + ~__new_allocator() _GLIBCXX_USE_NOEXCEPT { } + + pointer + address(reference __x) const _GLIBCXX_NOEXCEPT + { return std::__addressof(__x); } + + const_pointer + address(const_reference __x) const _GLIBCXX_NOEXCEPT + { return std::__addressof(__x); } +#endif + +#if __has_builtin(__builtin_operator_new) >= 201802L +# define _GLIBCXX_OPERATOR_NEW __builtin_operator_new +# define _GLIBCXX_OPERATOR_DELETE __builtin_operator_delete +#else +# define _GLIBCXX_OPERATOR_NEW ::operator new +# define _GLIBCXX_OPERATOR_DELETE ::operator delete +#endif + + // NB: __n is permitted to be 0. The C++ standard says nothing + // about what the return value is when __n == 0. + _GLIBCXX_NODISCARD _Tp* + allocate(size_type __n, const void* = static_cast(0)) + { +#if __cplusplus >= 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3308. std::allocator().allocate(n) + static_assert(sizeof(_Tp) != 0, "cannot allocate incomplete types"); +#endif + + if (__builtin_expect(__n > this->_M_max_size(), false)) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3190. allocator::allocate sometimes returns too little storage + if (__n > (std::size_t(-1) / sizeof(_Tp))) + std::__throw_bad_array_new_length(); + std::__throw_bad_alloc(); + } + +#if __cpp_aligned_new && __cplusplus >= 201103L + if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) + { + std::align_val_t __al = std::align_val_t(alignof(_Tp)); + return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp), + __al)); + } +#endif + return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp))); + } + + // __p is not permitted to be a null pointer. + void + deallocate(_Tp* __p, size_type __n __attribute__ ((__unused__))) + { +#if __cpp_sized_deallocation +# define _GLIBCXX_SIZED_DEALLOC(p, n) (p), (n) * sizeof(_Tp) +#else +# define _GLIBCXX_SIZED_DEALLOC(p, n) (p) +#endif + +#if __cpp_aligned_new && __cplusplus >= 201103L + if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) + { + _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(__p, __n), + std::align_val_t(alignof(_Tp))); + return; + } +#endif + _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(__p, __n)); + } + +#undef _GLIBCXX_SIZED_DEALLOC +#undef _GLIBCXX_OPERATOR_DELETE +#undef _GLIBCXX_OPERATOR_NEW + +#if __cplusplus <= 201703L + __attribute__((__always_inline__)) + size_type + max_size() const _GLIBCXX_USE_NOEXCEPT + { return _M_max_size(); } + +#if __cplusplus >= 201103L + template + __attribute__((__always_inline__)) + void + construct(_Up* __p, _Args&&... __args) + noexcept(__is_nothrow_new_constructible<_Up, _Args...>) + { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } + + template + __attribute__((__always_inline__)) + void + destroy(_Up* __p) + noexcept(std::is_nothrow_destructible<_Up>::value) + { __p->~_Up(); } +#else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 402. wrong new expression in [some_] allocator::construct + __attribute__((__always_inline__)) + void + construct(pointer __p, const _Tp& __val) + { ::new((void *)__p) _Tp(__val); } + + __attribute__((__always_inline__)) + void + destroy(pointer __p) { __p->~_Tp(); } +#endif +#endif // ! C++20 + + template + friend __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR bool + operator==(const __new_allocator&, const __new_allocator<_Up>&) + _GLIBCXX_NOTHROW + { return true; } + +#if __cpp_impl_three_way_comparison < 201907L + template + friend __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR bool + operator!=(const __new_allocator&, const __new_allocator<_Up>&) + _GLIBCXX_NOTHROW + { return false; } +#endif + + private: + __attribute__((__always_inline__)) + _GLIBCXX_CONSTEXPR size_type + _M_max_size() const _GLIBCXX_USE_NOEXCEPT + { +#if __PTRDIFF_MAX__ < __SIZE_MAX__ + return std::size_t(__PTRDIFF_MAX__) / sizeof(_Tp); +#else + return std::size_t(-1) / sizeof(_Tp); +#endif + } + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@new_allocator.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@new_allocator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..199f9702eea73b234799cfaad61568c67be65bf0 GIT binary patch literal 20905 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.h new file mode 100644 index 0000000..d19a76a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.h @@ -0,0 +1,846 @@ +// Output streams -*- C++ -*- + +// Copyright (C) 1997-2024 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/ostream.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{ostream} + */ + +// +// ISO C++ 14882: 27.6.2 Output streams +// + +#ifndef _GLIBCXX_OSTREAM_H +#define _GLIBCXX_OSTREAM_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // iostreams + +#include +#include + +# define __glibcxx_want_print +#include // __glibcxx_syncbuf + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief Template class basic_ostream. + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * This is the base class for all output streams. It provides text + * formatting of all builtin types, and communicates with any class + * derived from basic_streambuf to do the actual output. + */ + template + class basic_ostream : virtual public basic_ios<_CharT, _Traits> + { + public: + // Types (inherited from basic_ios): + typedef _CharT char_type; + typedef typename _Traits::int_type int_type; + typedef typename _Traits::pos_type pos_type; + typedef typename _Traits::off_type off_type; + typedef _Traits traits_type; + + // Non-standard Types: + typedef basic_streambuf<_CharT, _Traits> __streambuf_type; + typedef basic_ios<_CharT, _Traits> __ios_type; + typedef basic_ostream<_CharT, _Traits> __ostream_type; + typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > + __num_put_type; + typedef ctype<_CharT> __ctype_type; + + /** + * @brief Base constructor. + * + * This ctor is almost never called by the user directly, rather from + * derived classes' initialization lists, which pass a pointer to + * their own stream buffer. + */ + explicit + basic_ostream(__streambuf_type* __sb) + { this->init(__sb); } + + /** + * @brief Base destructor. + * + * This does very little apart from providing a virtual base dtor. + */ + virtual + ~basic_ostream() { } + + /// Safe prefix/suffix operations. + class sentry; + friend class sentry; + + ///@{ + /** + * @brief Interface for manipulators. + * + * Manipulators such as @c std::endl and @c std::hex use these + * functions in constructs like "std::cout << std::endl". For more + * information, see the iomanip header. + */ + __ostream_type& + operator<<(__ostream_type& (*__pf)(__ostream_type&)) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // The inserters for manipulators are *not* formatted output functions. + return __pf(*this); + } + + __ostream_type& + operator<<(__ios_type& (*__pf)(__ios_type&)) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // The inserters for manipulators are *not* formatted output functions. + __pf(*this); + return *this; + } + + __ostream_type& + operator<<(ios_base& (*__pf) (ios_base&)) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // The inserters for manipulators are *not* formatted output functions. + __pf(*this); + return *this; + } + ///@} + + ///@{ + /** + * @name Inserters + * + * All the @c operator<< functions (aka formatted output + * functions) have some common behavior. Each starts by + * constructing a temporary object of type std::basic_ostream::sentry. + * This can have several effects, concluding with the setting of a + * status flag; see the sentry documentation for more. + * + * If the sentry status is good, the function tries to generate + * whatever data is appropriate for the type of the argument. + * + * If an exception is thrown during insertion, ios_base::badbit + * will be turned on in the stream's error state without causing an + * ios_base::failure to be thrown. The original exception will then + * be rethrown. + */ + + ///@{ + /** + * @brief Integer arithmetic inserters + * @param __n A variable of builtin integral type. + * @return @c *this if successful + * + * These functions use the stream's current locale (specifically, the + * @c num_get facet) to perform numeric formatting. + */ + __ostream_type& + operator<<(long __n) + { return _M_insert(__n); } + + __ostream_type& + operator<<(unsigned long __n) + { return _M_insert(__n); } + + __ostream_type& + operator<<(bool __n) + { return _M_insert(__n); } + + __ostream_type& + operator<<(short __n); + + __ostream_type& + operator<<(unsigned short __n) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 117. basic_ostream uses nonexistent num_put member functions. + return _M_insert(static_cast(__n)); + } + + __ostream_type& + operator<<(int __n); + + __ostream_type& + operator<<(unsigned int __n) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 117. basic_ostream uses nonexistent num_put member functions. + return _M_insert(static_cast(__n)); + } + +#ifdef _GLIBCXX_USE_LONG_LONG +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + __ostream_type& + operator<<(long long __n) + { return _M_insert(__n); } + + __ostream_type& + operator<<(unsigned long long __n) + { return _M_insert(__n); } +#pragma GCC diagnostic pop +#endif + ///@} + + ///@{ + /** + * @brief Floating point arithmetic inserters + * @param __f A variable of builtin floating point type. + * @return @c *this if successful + * + * These functions use the stream's current locale (specifically, the + * @c num_get facet) to perform numeric formatting. + */ + __ostream_type& + operator<<(double __f) + { return _M_insert(__f); } + + __ostream_type& + operator<<(float __f) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 117. basic_ostream uses nonexistent num_put member functions. + return _M_insert(_S_cast_flt(__f)); + } + + __ostream_type& + operator<<(long double __f) + { return _M_insert(__f); } + ///@} + +#if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64) + __attribute__((__always_inline__)) + __ostream_type& + operator<<(_Float16 __f) + { + return _M_insert(_S_cast_flt(__f)); + } +#endif + +#if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64) + __attribute__((__always_inline__)) + __ostream_type& + operator<<(_Float32 __f) + { + return _M_insert(_S_cast_flt(__f)); + } +#endif + +#if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64) + __attribute__((__always_inline__)) + __ostream_type& + operator<<(_Float64 __f) + { + return _M_insert(_S_cast_flt(__f)); + } +#endif + +#if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) + __attribute__((__always_inline__)) + __ostream_type& + operator<<(_Float128 __f) + { + return _M_insert(_S_cast_flt(__f)); + } +#endif + +#if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64) + __attribute__((__always_inline__)) + __ostream_type& + operator<<(__gnu_cxx::__bfloat16_t __f) + { + return _M_insert(_S_cast_flt(__f)); + } +#endif + + /** + * @brief Pointer arithmetic inserters + * @param __p A variable of pointer type. + * @return @c *this if successful + * + * These functions use the stream's current locale (specifically, the + * @c num_get facet) to perform numeric formatting. + */ + __ostream_type& + operator<<(const void* __p) + { return _M_insert(__p); } + +#if __cplusplus >= 201703L + __ostream_type& + operator<<(nullptr_t) + { return *this << "nullptr"; } +#endif + +#if __cplusplus > 202002L + __attribute__((__always_inline__)) + __ostream_type& + operator<<(const volatile void* __p) + { return _M_insert(const_cast(__p)); } +#endif + + /** + * @brief Extracting from another streambuf. + * @param __sb A pointer to a streambuf + * + * This function behaves like one of the basic arithmetic extractors, + * in that it also constructs a sentry object and has the same error + * handling behavior. + * + * If @p __sb is NULL, the stream will set failbit in its error state. + * + * Characters are extracted from @p __sb and inserted into @c *this + * until one of the following occurs: + * + * - the input stream reaches end-of-file, + * - insertion into the output sequence fails (in this case, the + * character that would have been inserted is not extracted), or + * - an exception occurs while getting a character from @p __sb, which + * sets failbit in the error state + * + * If the function inserts no characters, failbit is set. + */ + __ostream_type& + operator<<(__streambuf_type* __sb); + ///@} + + ///@{ + /** + * @name Unformatted Output Functions + * + * All the unformatted output functions have some common behavior. + * Each starts by constructing a temporary object of type + * std::basic_ostream::sentry. This has several effects, concluding + * with the setting of a status flag; see the sentry documentation + * for more. + * + * If the sentry status is good, the function tries to generate + * whatever data is appropriate for the type of the argument. + * + * If an exception is thrown during insertion, ios_base::badbit + * will be turned on in the stream's error state. If badbit is on in + * the stream's exceptions mask, the exception will be rethrown + * without completing its actions. + */ + + /** + * @brief Simple insertion. + * @param __c The character to insert. + * @return *this + * + * Tries to insert @p __c. + * + * @note This function is not overloaded on signed char and + * unsigned char. + */ + __ostream_type& + put(char_type __c); + + /** + * @brief Character string insertion. + * @param __s The array to insert. + * @param __n Maximum number of characters to insert. + * @return *this + * + * Characters are copied from @p __s and inserted into the stream until + * one of the following happens: + * + * - @p __n characters are inserted + * - inserting into the output sequence fails (in this case, badbit + * will be set in the stream's error state) + * + * @note This function is not overloaded on signed char and + * unsigned char. + */ + __ostream_type& + write(const char_type* __s, streamsize __n); + ///@} + + /** + * @brief Synchronizing the stream buffer. + * @return *this + * + * If @c rdbuf() is a null pointer, changes nothing. + * + * Otherwise, calls @c rdbuf()->pubsync(), and if that returns -1, + * sets badbit. + */ + __ostream_type& + flush(); + + /** + * @brief Getting the current write position. + * @return A file position object. + * + * If @c fail() is not false, returns @c pos_type(-1) to indicate + * failure. Otherwise returns @c rdbuf()->pubseekoff(0,cur,out). + */ + pos_type + tellp(); + + /** + * @brief Changing the current write position. + * @param __pos A file position object. + * @return *this + * + * If @c fail() is not true, calls @c rdbuf()->pubseekpos(pos). If + * that function fails, sets failbit. + */ + __ostream_type& + seekp(pos_type); + + /** + * @brief Changing the current write position. + * @param __off A file offset object. + * @param __dir The direction in which to seek. + * @return *this + * + * If @c fail() is not true, calls @c rdbuf()->pubseekoff(off,dir). + * If that function fails, sets failbit. + */ + __ostream_type& + seekp(off_type, ios_base::seekdir); + + protected: + basic_ostream() + { this->init(0); } + +#if __cplusplus >= 201103L + // Non-standard constructor that does not call init() + basic_ostream(basic_iostream<_CharT, _Traits>&) { } + + basic_ostream(const basic_ostream&) = delete; + + basic_ostream(basic_ostream&& __rhs) + : __ios_type() + { __ios_type::move(__rhs); } + + // 27.7.3.3 Assign/swap + + basic_ostream& operator=(const basic_ostream&) = delete; + + basic_ostream& + operator=(basic_ostream&& __rhs) + { + swap(__rhs); + return *this; + } + + void + swap(basic_ostream& __rhs) + { __ios_type::swap(__rhs); } +#endif + + template + __ostream_type& + _M_insert(_ValueT __v); + + private: +#if !_GLIBCXX_INLINE_VERSION + void + _M_write(const char_type* __s, streamsize __n) + { std::__ostream_insert(*this, __s, __n); } +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // for if-constexpr + template + static _To + _S_cast_flt(_From __f) + { + _To __d = static_cast<_To>(__f); + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4101: LWG 117 loses the sign for negative NaN on some arches. +#if defined __riscv + _To __sign; +#if __cpp_constexpr && __has_builtin(__builtin_bit_cast) + if constexpr (sizeof(__f) == sizeof(short)) + __sign = static_cast<_To>(__builtin_bit_cast(short, __f)); + else if constexpr (sizeof(__f) == sizeof(int)) + __sign = static_cast<_To>(__builtin_bit_cast(int, __f)); + else if constexpr (sizeof(__f) == sizeof(long long)) + __sign = static_cast<_To>(__builtin_bit_cast(long long, __f)); + else +#endif + __sign = __builtin_signbit(__f) ? _To(-1.0) : _To(+1.0); + + if _GLIBCXX17_CONSTEXPR (__is_same(_To, double)) + __d = __builtin_copysign(__d, __sign); + else if _GLIBCXX17_CONSTEXPR (__is_same(_To, long double)) + __d = __builtin_copysignl(__d, __sign); +#endif + return __d; + } +#pragma GCC diagnostic pop + + // RAII type to clear and restore an ostream's exceptions mask. + struct _Disable_exceptions + { + _Disable_exceptions(basic_ostream& __os) + : _M_os(__os), _M_exception(_M_os._M_exception) + { _M_os._M_exception = ios_base::goodbit; } + + ~_Disable_exceptions() + { _M_os._M_exception = _M_exception; } + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // deleted functions + _Disable_exceptions(const _Disable_exceptions&) = delete; + _Disable_exceptions& operator=(const _Disable_exceptions&) = delete; +#pragma GCC diagnostic pop + + private: + basic_ostream& _M_os; + const ios_base::iostate _M_exception; + }; + }; + + /** + * @brief Performs setup work for output streams. + * + * Objects of this class are created before all of the standard + * inserters are run. It is responsible for exception-safe prefix and + * suffix operations. + */ + template + class basic_ostream<_CharT, _Traits>::sentry + { + // Data Members. + bool _M_ok; + basic_ostream<_CharT, _Traits>& _M_os; + + public: + /** + * @brief The constructor performs preparatory work. + * @param __os The output stream to guard. + * + * If the stream state is good (@a __os.good() is true), then if the + * stream is tied to another output stream, @c is.tie()->flush() + * is called to synchronize the output sequences. + * + * If the stream state is still good, then the sentry state becomes + * true (@a okay). + */ + explicit + sentry(basic_ostream<_CharT, _Traits>& __os); + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + /** + * @brief Possibly flushes the stream. + * + * If `ios_base::unitbuf` is set in `os.flags()`, and + * `std::uncaught_exception()` is true, the sentry destructor flushes + * the output stream. + */ + ~sentry() + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 397. ostream::sentry dtor throws exceptions + // 835. Tying two streams together (correction to DR 581) + // 4188. ostream::sentry destructor should handle exceptions + if (bool(_M_os.flags() & ios_base::unitbuf) && _M_os.good() + && !uncaught_exception()) // XXX MT + { + _Disable_exceptions __noex(_M_os); + __try + { + // Can't call _M_os.flush() directly because that constructs + // another sentry. + if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1) + _M_os.setstate(ios_base::badbit); + } + __catch(...) + { _M_os.setstate(ios_base::badbit); } + } + } +#pragma GCC diagnostic pop + + /** + * @brief Quick status checking. + * @return The sentry state. + * + * For ease of use, sentries may be converted to booleans. The + * return value is that of the sentry state (true == okay). + */ +#if __cplusplus >= 201103L + explicit +#endif + operator bool() const + { return _M_ok; } + }; + + ///@{ + /** + * @brief Character inserters + * @param __out An output stream. + * @param __c A character. + * @return out + * + * Behaves like one of the formatted arithmetic inserters described in + * std::basic_ostream. After constructing a sentry object with good + * status, this function inserts a single character and any required + * padding (as determined by [22.2.2.2.2]). @c __out.width(0) is then + * called. + * + * If @p __c is of type @c char and the character type of the stream is not + * @c char, the character is widened before insertion. + */ + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c) + { + if (__out.width() != 0) + return __ostream_insert(__out, &__c, 1); + __out.put(__c); + return __out; + } + + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __out, char __c) + { return (__out << __out.widen(__c)); } + + // Specialization + template + inline basic_ostream& + operator<<(basic_ostream& __out, char __c) + { + if (__out.width() != 0) + return __ostream_insert(__out, &__c, 1); + __out.put(__c); + return __out; + } + + // Signed and unsigned + template + inline basic_ostream& + operator<<(basic_ostream& __out, signed char __c) + { return (__out << static_cast(__c)); } + + template + inline basic_ostream& + operator<<(basic_ostream& __out, unsigned char __c) + { return (__out << static_cast(__c)); } + +#if __cplusplus > 201703L + // The following deleted overloads prevent formatting character values as + // numeric values. + + template + basic_ostream& + operator<<(basic_ostream&, wchar_t) = delete; + +#ifdef _GLIBCXX_USE_CHAR8_T + template + basic_ostream& + operator<<(basic_ostream&, char8_t) = delete; +#endif + + template + basic_ostream& + operator<<(basic_ostream&, char16_t) = delete; + + template + basic_ostream& + operator<<(basic_ostream&, char32_t) = delete; + +#ifdef _GLIBCXX_USE_WCHAR_T +#ifdef _GLIBCXX_USE_CHAR8_T + template + basic_ostream& + operator<<(basic_ostream&, char8_t) = delete; +#endif // _GLIBCXX_USE_CHAR8_T + + template + basic_ostream& + operator<<(basic_ostream&, char16_t) = delete; + + template + basic_ostream& + operator<<(basic_ostream&, char32_t) = delete; +#endif // _GLIBCXX_USE_WCHAR_T +#endif // C++20 + ///@} + + ///@{ + /** + * @brief String inserters + * @param __out An output stream. + * @param __s A character string. + * @return out + * @pre @p __s must be a non-NULL pointer + * + * Behaves like one of the formatted arithmetic inserters described in + * std::basic_ostream. After constructing a sentry object with good + * status, this function inserts @c traits::length(__s) characters starting + * at @p __s, widened if necessary, followed by any required padding (as + * determined by [22.2.2.2.2]). @c __out.width(0) is then called. + */ + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s) + { + if (!__s) + __out.setstate(ios_base::badbit); + else + __ostream_insert(__out, __s, + static_cast(_Traits::length(__s))); + return __out; + } + + template + basic_ostream<_CharT, _Traits> & + operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s); + + // Partial specializations + template + inline basic_ostream& + operator<<(basic_ostream& __out, const char* __s) + { + if (!__s) + __out.setstate(ios_base::badbit); + else + __ostream_insert(__out, __s, + static_cast(_Traits::length(__s))); + return __out; + } + + // Signed and unsigned + template + inline basic_ostream& + operator<<(basic_ostream& __out, const signed char* __s) + { return (__out << reinterpret_cast(__s)); } + + template + inline basic_ostream & + operator<<(basic_ostream& __out, const unsigned char* __s) + { return (__out << reinterpret_cast(__s)); } + +#if __cplusplus > 201703L + // The following deleted overloads prevent formatting strings as + // pointer values. + + template + basic_ostream& + operator<<(basic_ostream&, const wchar_t*) = delete; + +#ifdef _GLIBCXX_USE_CHAR8_T + template + basic_ostream& + operator<<(basic_ostream&, const char8_t*) = delete; +#endif // _GLIBCXX_USE_CHAR8_T + + template + basic_ostream& + operator<<(basic_ostream&, const char16_t*) = delete; + + template + basic_ostream& + operator<<(basic_ostream&, const char32_t*) = delete; + +#ifdef _GLIBCXX_USE_WCHAR_T +#ifdef _GLIBCXX_USE_CHAR8_T + template + basic_ostream& + operator<<(basic_ostream&, const char8_t*) = delete; +#endif + + template + basic_ostream& + operator<<(basic_ostream&, const char16_t*) = delete; + + template + basic_ostream& + operator<<(basic_ostream&, const char32_t*) = delete; +#endif // _GLIBCXX_USE_WCHAR_T +#endif // C++20 + ///@} + +#if __cplusplus >= 201103L + // C++11 27.7.3.9 Rvalue stream insertion [ostream.rvalue] + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 1203. More useful rvalue stream insertion + +#if __cpp_concepts >= 201907L && __glibcxx_type_trait_variable_templates + // Use concepts if possible because they're cheaper to evaluate. + template + concept __derived_from_ios_base = is_class_v<_Tp> + && (!is_same_v<_Tp, ios_base>) + && requires (_Tp* __t, ios_base* __b) { __b = __t; }; + + template + requires __derived_from_ios_base<_Os> + && requires (_Os& __os, const _Tp& __t) { __os << __t; } + using __rvalue_stream_insertion_t = _Os&&; +#else + template + using _Require_derived_from_ios_base + = _Require, __not_>, + is_convertible::type, ios_base*>>; + + template, + typename + = decltype(std::declval<_Os&>() << std::declval())> + using __rvalue_stream_insertion_t = _Os&&; +#endif + + /** + * @brief Generic inserter for rvalue stream + * @param __os An input stream. + * @param __x A reference to the object being inserted. + * @return __os + * + * This is just a forwarding function to allow insertion to + * rvalue streams since they won't bind to the inserter functions + * that take an lvalue reference. + */ + template + inline __rvalue_stream_insertion_t<_Ostream, _Tp> + operator<<(_Ostream&& __os, const _Tp& __x) + { + __os << __x; + return std::move(__os); + } +#endif // C++11 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif /* _GLIBCXX_OSTREAM_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6b8c3e18b4258712af09c005560bf0560ecea5b9 GIT binary patch literal 49477 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.tcc b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.tcc new file mode 100644 index 0000000..a4fe9d4 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.tcc @@ -0,0 +1,404 @@ +// ostream classes -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/ostream.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{ostream} + */ + +// +// ISO C++ 14882: 27.6.2 Output streams +// + +#ifndef _OSTREAM_TCC +#define _OSTREAM_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + basic_ostream<_CharT, _Traits>::sentry:: + sentry(basic_ostream<_CharT, _Traits>& __os) + : _M_ok(false), _M_os(__os) + { + // XXX MT + if (__os.tie() && __os.good()) + __os.tie()->flush(); + + if (__os.good()) + _M_ok = true; + else if (__os.bad()) + __os.setstate(ios_base::failbit); + } + + template + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + _M_insert(_ValueT __v) + { + sentry __cerb(*this); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { +#ifndef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT + const __num_put_type& __np = __check_facet(this->_M_num_put); +#else + const __num_put_type& __np + = use_facet<__num_put_type>(this->_M_ios_locale); +#endif + if (__np.put(*this, *this, this->fill(), __v).failed()) + __err |= ios_base::badbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(short __n) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 117. basic_ostream uses nonexistent num_put member functions. + const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; + if (__fmt == ios_base::oct || __fmt == ios_base::hex) + return _M_insert(static_cast(static_cast(__n))); + else + return _M_insert(static_cast(__n)); + } + + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(int __n) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 117. basic_ostream uses nonexistent num_put member functions. + const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; + if (__fmt == ios_base::oct || __fmt == ios_base::hex) + return _M_insert(static_cast(static_cast(__n))); + else + return _M_insert(static_cast(__n)); + } + + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(__streambuf_type* __sbin) + { + ios_base::iostate __err = ios_base::goodbit; + sentry __cerb(*this); + if (__cerb && __sbin) + { + __try + { + if (!__copy_streambufs(__sbin, this->rdbuf())) + __err |= ios_base::failbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::failbit); } + } + else if (!__sbin) + __err |= ios_base::badbit; + if (__err) + this->setstate(__err); + return *this; + } + + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + put(char_type __c) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // basic_ostream::put(char_type) is an unformatted output function. + // DR 63. Exception-handling policy for unformatted output. + // Unformatted output functions should catch exceptions thrown + // from streambuf members. + sentry __cerb(*this); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + const int_type __put = this->rdbuf()->sputc(__c); + if (traits_type::eq_int_type(__put, traits_type::eof())) + __err |= ios_base::badbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + write(const _CharT* __s, streamsize __n) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // basic_ostream::write(const char_type*, streamsize) is an + // unformatted output function. + // DR 63. Exception-handling policy for unformatted output. + // Unformatted output functions should catch exceptions thrown + // from streambuf members. + sentry __cerb(*this); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + if (this->rdbuf()->sputn(__s, __n) != __n) + __err = ios_base::badbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(ios_base::badbit); + } + return *this; + } + + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + flush() + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // basic_ostream::flush() is *not* an unformatted output function. + // 581. flush() not unformatted function + // basic_ostream::flush() *is* an unformatted output function. + if (__streambuf_type* __buf = this->rdbuf()) + { + sentry __cerb(*this); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + if (this->rdbuf()->pubsync() == -1) + __err |= ios_base::badbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + } + return *this; + } + + template + typename basic_ostream<_CharT, _Traits>::pos_type + basic_ostream<_CharT, _Traits>:: + tellp() + { + sentry __cerb(*this); + pos_type __ret = pos_type(-1); + if (!this->fail()) + __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); + return __ret; + } + + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + seekp(pos_type __pos) + { + sentry __cerb(*this); + if (!this->fail()) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 136. seekp, seekg setting wrong streams? + const pos_type __p = this->rdbuf()->pubseekpos(__pos, ios_base::out); + + // 129. Need error indication from seekp() and seekg() + if (__p == pos_type(off_type(-1))) + this->setstate(ios_base::failbit); + } + return *this; + } + + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + seekp(off_type __off, ios_base::seekdir __dir) + { + sentry __cerb(*this); + if (!this->fail()) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 136. seekp, seekg setting wrong streams? + const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, + ios_base::out); + + // 129. Need error indication from seekp() and seekg() + if (__p == pos_type(off_type(-1))) + this->setstate(ios_base::failbit); + } + return *this; + } + + template + basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s) + { + if (!__s) + __out.setstate(ios_base::badbit); + else + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 167. Improper use of traits_type::length() + const size_t __clen = char_traits::length(__s); + __try + { + struct __ptr_guard + { + _CharT *__p; + __ptr_guard (_CharT *__ip): __p(__ip) { } + ~__ptr_guard() { delete[] __p; } + _CharT* __get() { return __p; } + } __pg (new _CharT[__clen]); + + _CharT *__ws = __pg.__get(); + for (size_t __i = 0; __i < __clen; ++__i) + __ws[__i] = __out.widen(__s[__i]); + __ostream_insert(__out, __ws, __clen); + } + __catch(__cxxabiv1::__forced_unwind&) + { + __out._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __out._M_setstate(ios_base::badbit); } + } + return __out; + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class basic_ostream; + extern template ostream& endl(ostream&); + extern template ostream& ends(ostream&); + extern template ostream& flush(ostream&); + extern template ostream& operator<<(ostream&, char); + extern template ostream& operator<<(ostream&, unsigned char); + extern template ostream& operator<<(ostream&, signed char); + extern template ostream& operator<<(ostream&, const char*); + extern template ostream& operator<<(ostream&, const unsigned char*); + extern template ostream& operator<<(ostream&, const signed char*); + + extern template ostream& ostream::_M_insert(long); + extern template ostream& ostream::_M_insert(unsigned long); + extern template ostream& ostream::_M_insert(bool); +#ifdef _GLIBCXX_USE_LONG_LONG +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + extern template ostream& ostream::_M_insert(long long); + extern template ostream& ostream::_M_insert(unsigned long long); +#pragma GCC diagnostic pop +#endif + extern template ostream& ostream::_M_insert(double); + extern template ostream& ostream::_M_insert(long double); + extern template ostream& ostream::_M_insert(const void*); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class basic_ostream; + extern template wostream& endl(wostream&); + extern template wostream& ends(wostream&); + extern template wostream& flush(wostream&); + extern template wostream& operator<<(wostream&, wchar_t); + extern template wostream& operator<<(wostream&, char); + extern template wostream& operator<<(wostream&, const wchar_t*); + extern template wostream& operator<<(wostream&, const char*); + + extern template wostream& wostream::_M_insert(long); + extern template wostream& wostream::_M_insert(unsigned long); + extern template wostream& wostream::_M_insert(bool); +#ifdef _GLIBCXX_USE_LONG_LONG +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + extern template wostream& wostream::_M_insert(long long); + extern template wostream& wostream::_M_insert(unsigned long long); +#pragma GCC diagnostic pop +#endif + extern template wostream& wostream::_M_insert(double); + extern template wostream& wostream::_M_insert(long double); + extern template wostream& wostream::_M_insert(const void*); +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..0aef4608338696202f38ad7655554303f404b01c GIT binary patch literal 38341 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. + +/** @file bits/ostream_insert.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{ostream} + */ + +#ifndef _OSTREAM_INSERT_H +#define _OSTREAM_INSERT_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include +#include + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// @cond undocumented + + template + inline void + __ostream_write(basic_ostream<_CharT, _Traits>& __out, + const _CharT* __s, streamsize __n) + { + typedef basic_ostream<_CharT, _Traits> __ostream_type; + typedef typename __ostream_type::ios_base __ios_base; + + const streamsize __put = __out.rdbuf()->sputn(__s, __n); + if (__put != __n) + __out.setstate(__ios_base::badbit); + } + + template + inline void + __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n) + { + typedef basic_ostream<_CharT, _Traits> __ostream_type; + typedef typename __ostream_type::ios_base __ios_base; + + const _CharT __c = __out.fill(); + for (; __n > 0; --__n) + { + const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c); + if (_Traits::eq_int_type(__put, _Traits::eof())) + { + __out.setstate(__ios_base::badbit); + break; + } + } + } + + template + basic_ostream<_CharT, _Traits>& + __ostream_insert(basic_ostream<_CharT, _Traits>& __out, + const _CharT* __s, streamsize __n) + { + typedef basic_ostream<_CharT, _Traits> __ostream_type; + typedef typename __ostream_type::ios_base __ios_base; + + typename __ostream_type::sentry __cerb(__out); + if (__cerb) + { + __try + { + const streamsize __w = __out.width(); + if (__w > __n) + { + const bool __left = ((__out.flags() + & __ios_base::adjustfield) + == __ios_base::left); + if (!__left) + __ostream_fill(__out, __w - __n); + if (__out.good()) + __ostream_write(__out, __s, __n); + if (__left && __out.good()) + __ostream_fill(__out, __w - __n); + } + else + __ostream_write(__out, __s, __n); + __out.width(0); + } + __catch(__cxxabiv1::__forced_unwind&) + { + __out._M_setstate(__ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __out._M_setstate(__ios_base::badbit); } + } + return __out; + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template ostream& __ostream_insert(ostream&, const char*, streamsize); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template wostream& __ostream_insert(wostream&, const wchar_t*, + streamsize); +#endif +#endif + + /// @endcond + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif /* _OSTREAM_INSERT_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream_insert.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ostream_insert.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..239c922f775c9f7119a280fe5d9730b03872473d GIT binary patch literal 18087 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. + +/** @file bits/parse_numbers.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{chrono} + */ + +#ifndef _GLIBCXX_PARSE_NUMBERS_H +#define _GLIBCXX_PARSE_NUMBERS_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +// From n3642.pdf except I added binary literals and digit separator '\''. + +#if __cplusplus >= 201402L + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +namespace __parse_int +{ + template + struct _Digit; + + template + struct _Digit<_Base, '0'> : integral_constant + { + using __valid = true_type; + }; + + template + struct _Digit<_Base, '1'> : integral_constant + { + using __valid = true_type; + }; + + template + struct _Digit_impl : integral_constant + { + static_assert(_Base > _Val, "invalid digit"); + using __valid = true_type; + }; + + template + struct _Digit<_Base, '2'> : _Digit_impl<_Base, 2> + { }; + + template + struct _Digit<_Base, '3'> : _Digit_impl<_Base, 3> + { }; + + template + struct _Digit<_Base, '4'> : _Digit_impl<_Base, 4> + { }; + + template + struct _Digit<_Base, '5'> : _Digit_impl<_Base, 5> + { }; + + template + struct _Digit<_Base, '6'> : _Digit_impl<_Base, 6> + { }; + + template + struct _Digit<_Base, '7'> : _Digit_impl<_Base, 7> + { }; + + template + struct _Digit<_Base, '8'> : _Digit_impl<_Base, 8> + { }; + + template + struct _Digit<_Base, '9'> : _Digit_impl<_Base, 9> + { }; + + template + struct _Digit<_Base, 'a'> : _Digit_impl<_Base, 0xa> + { }; + + template + struct _Digit<_Base, 'A'> : _Digit_impl<_Base, 0xa> + { }; + + template + struct _Digit<_Base, 'b'> : _Digit_impl<_Base, 0xb> + { }; + + template + struct _Digit<_Base, 'B'> : _Digit_impl<_Base, 0xb> + { }; + + template + struct _Digit<_Base, 'c'> : _Digit_impl<_Base, 0xc> + { }; + + template + struct _Digit<_Base, 'C'> : _Digit_impl<_Base, 0xc> + { }; + + template + struct _Digit<_Base, 'd'> : _Digit_impl<_Base, 0xd> + { }; + + template + struct _Digit<_Base, 'D'> : _Digit_impl<_Base, 0xd> + { }; + + template + struct _Digit<_Base, 'e'> : _Digit_impl<_Base, 0xe> + { }; + + template + struct _Digit<_Base, 'E'> : _Digit_impl<_Base, 0xe> + { }; + + template + struct _Digit<_Base, 'f'> : _Digit_impl<_Base, 0xf> + { }; + + template + struct _Digit<_Base, 'F'> : _Digit_impl<_Base, 0xf> + { }; + + // Digit separator + template + struct _Digit<_Base, '\''> : integral_constant + { + using __valid = false_type; + }; + +//------------------------------------------------------------------------------ + + template + using __ull_constant = integral_constant; + + template + struct _Power_help + { + using __next = typename _Power_help<_Base, _Digs...>::type; + using __valid_digit = typename _Digit<_Base, _Dig>::__valid; + using type + = __ull_constant<__next::value * (__valid_digit{} ? _Base : 1ULL)>; + }; + + template + struct _Power_help<_Base, _Dig> + { + using __valid_digit = typename _Digit<_Base, _Dig>::__valid; + using type = __ull_constant<__valid_digit::value>; + }; + + template + struct _Power : _Power_help<_Base, _Digs...>::type + { }; + + template + struct _Power<_Base> : __ull_constant<0> + { }; + +//------------------------------------------------------------------------------ + + template + struct _Number_help + { + using __digit = _Digit<_Base, _Dig>; + using __valid_digit = typename __digit::__valid; + using __next = _Number_help<_Base, + __valid_digit::value ? _Pow / _Base : _Pow, + _Digs...>; + using type = __ull_constant<_Pow * __digit::value + __next::type::value>; + static_assert((type::value / _Pow) == __digit::value, + "integer literal does not fit in unsigned long long"); + }; + + // Skip past digit separators: + template + struct _Number_help<_Base, _Pow, '\'', _Dig, _Digs...> + : _Number_help<_Base, _Pow, _Dig, _Digs...> + { }; + + // Terminating case for recursion: + template + struct _Number_help<_Base, 1ULL, _Dig> + { + using type = __ull_constant<_Digit<_Base, _Dig>::value>; + }; + + template + struct _Number + : _Number_help<_Base, _Power<_Base, _Digs...>::value, _Digs...>::type + { }; + + template + struct _Number<_Base> + : __ull_constant<0> + { }; + +//------------------------------------------------------------------------------ + + template + struct _Parse_int; + + template + struct _Parse_int<'0', 'b', _Digs...> + : _Number<2U, _Digs...>::type + { }; + + template + struct _Parse_int<'0', 'B', _Digs...> + : _Number<2U, _Digs...>::type + { }; + + template + struct _Parse_int<'0', 'x', _Digs...> + : _Number<16U, _Digs...>::type + { }; + + template + struct _Parse_int<'0', 'X', _Digs...> + : _Number<16U, _Digs...>::type + { }; + + template + struct _Parse_int<'0', _Digs...> + : _Number<8U, _Digs...>::type + { }; + + template + struct _Parse_int + : _Number<10U, _Digs...>::type + { }; + +} // namespace __parse_int + + +namespace __select_int +{ + template + struct _Select_int_base; + + template + struct _Select_int_base<_Val, _IntType, _Ints...> + : __conditional_t<(_Val <= __gnu_cxx::__int_traits<_IntType>::__max), + integral_constant<_IntType, (_IntType)_Val>, + _Select_int_base<_Val, _Ints...>> + { }; + + template + struct _Select_int_base<_Val> + { }; + + template + using _Select_int = typename _Select_int_base< + __parse_int::_Parse_int<_Digs...>::value, + unsigned char, + unsigned short, + unsigned int, + unsigned long, + unsigned long long + >::type; + +} // namespace __select_int + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++14 + +#endif // _GLIBCXX_PARSE_NUMBERS_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@parse_numbers.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@parse_numbers.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f93f7acb4122c6937f067519bdb6d25ce3019f99 GIT binary patch literal 28159 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⋘uPF>u*|%UVcnWawZBu8j=M z3_TeBryjRGqR@Zm11@9enmG4PiLI2f@VpFvmPvrXTr|Ju`vF> zx_HOsM}?au2*oBi2(YJA(5hB=6ocFP{u=&9OpN|w{?Nb^{YkC&?@`13vdZ4yzv>P!owu`kx>|*MO z=tyE=>`>_d+1MVsVYSD+uyxSz1XGNEl^GfSDl^(RF#b<2=*%|BoWV3_U;e-m;A!YK_G|PTF){Xw^+Ro( z5HTT%g>iz)1dxreMaYC~1Xu9zctmc@ZPwTf&WxMIHXAW+ao7TCB37S%bg||A27;Xq zu&LPmff#P7041628rzMS7`KaUhj@W;hsq9+<6#S@2{|6As)BnV3aR$qtFagCg}q{X zjhGKu9dKb`Jmhl7kA?BD$6-*9@>$mbxit@aAK3*&!};MDHExz3%$`4WFa7$CdNBrcc7tpSM4rn zR_wvPTgl~D*C!LQ2VdoxjGp+)HOh^c7|X@VA$BoUL{ucPFjlBkfa34kiVpiN5%mPK zJW~8&^B%V5Jh{z(NQ?BZ2&DP1aoUK9@wC`!sN>J7oi$)#JY#UiiiHur_z72{Kyoy! zvE>CWZy}AXy+wPgKz*RS8GEZ34|p6105x9<7eAi+=PMtf7(g-_dwAd;J%RXd3n&>} z)VOHG#CTEcBE)x$mkcg}{59L-S)IJ%oFn)CS2r4w5-u|Ju_3M&lgnW-L{kfs1zsVYtjhGlGi%o`jl4(lB zlq43$DJoMy=?}Kwf{=}n@P-#1kijoVwRv6RI=JY#E_U6B>89FE0~W@cPB(p67~xCd z@Ps4WTu9g34O}EalE-zo>)`76y4m#rrkepbqgWVkmfWlZjV_xpKi}KiqKC&^_@p~D zen4xFiHe_RYR?Rq7@vtfgT~Jbl^1#}jL#jOgW_kJ1sliD${>3ZECy|fCd%U1YOf8L z7+;IMhFbhq<*gnI;~R%JAd9oLeset(e|4L9iwW7;21@_G)P5N-G5!+!1-0{!${#%z L#@}YY9atCv)ib}% literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@postypes.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@postypes.h new file mode 100644 index 0000000..77c0058 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@postypes.h @@ -0,0 +1,228 @@ +// Position types -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/postypes.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iosfwd} + */ + +// +// ISO C++ 14882: 27.4.1 - Types +// ISO C++ 14882: 27.4.3 - Template class fpos +// + +#ifndef _GLIBCXX_POSTYPES_H +#define _GLIBCXX_POSTYPES_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // For mbstate_t + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // The types streamoff, streampos and wstreampos and the class + // template fpos<> are described in clauses 21.1.2, 21.1.3, 27.1.2, + // 27.2, 27.4.1, 27.4.3 and D.6. Despite all this verbiage, the + // behaviour of these types is mostly implementation defined or + // unspecified. The behaviour in this implementation is as noted + // below. + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + /** + * @brief Type used by fpos, char_traits, and char_traits. + * + * In clauses 21.1.3.1 and 27.4.1 streamoff is described as an + * implementation defined type. + * Note: In versions of GCC up to and including GCC 3.3, streamoff + * was typedef long. + */ +#ifdef __INT64_TYPE__ + typedef __INT64_TYPE__ streamoff; +#else + typedef long long streamoff; +#endif +#pragma GCC diagnostic pop + + /// Integral type for I/O operation counts and buffer sizes. + typedef ptrdiff_t streamsize; // Signed integral type + + /** + * @brief Class representing stream positions. + * + * The standard places no requirements upon the template parameter StateT. + * In this implementation StateT must be DefaultConstructible, + * CopyConstructible and Assignable. The standard only requires that fpos + * should contain a member of type StateT. In this implementation it also + * contains an offset stored as a signed integer. + * + * @param StateT Type passed to and returned from state(). + */ + template + class fpos + { + private: + streamoff _M_off; + _StateT _M_state; + + public: + // The standard doesn't require that fpos objects can be default + // constructed. This implementation provides a default + // constructor that initializes the offset to 0 and default + // constructs the state. + fpos() + : _M_off(0), _M_state() { } + + // The standard requires that fpos objects can be constructed + // from streamoff objects using the constructor syntax, and + // fails to give any meaningful semantics. In this + // implementation implicit conversion is also allowed, and this + // constructor stores the streamoff as the offset and default + // constructs the state. + /// Construct position from offset. + fpos(streamoff __off) + : _M_off(__off), _M_state() { } + +#if __cplusplus >= 201103L + fpos(const fpos&) = default; + fpos& operator=(const fpos&) = default; + ~fpos() = default; +#endif + + /// Convert to streamoff. + operator streamoff() const { return _M_off; } + + /// Remember the value of @a st. + void + state(_StateT __st) + { _M_state = __st; } + + /// Return the last set value of @a st. + _StateT + state() const + { return _M_state; } + + // The standard requires that this operator must be defined, but + // gives no semantics. In this implementation it just adds its + // argument to the stored offset and returns *this. + /// Add offset to this position. + fpos& + operator+=(streamoff __off) + { + _M_off += __off; + return *this; + } + + // The standard requires that this operator must be defined, but + // gives no semantics. In this implementation it just subtracts + // its argument from the stored offset and returns *this. + /// Subtract offset from this position. + fpos& + operator-=(streamoff __off) + { + _M_off -= __off; + return *this; + } + + // The standard requires that this operator must be defined, but + // defines its semantics only in terms of operator-. In this + // implementation it constructs a copy of *this, adds the + // argument to that copy using operator+= and then returns the + // copy. + /// Add position and offset. + fpos + operator+(streamoff __off) const + { + fpos __pos(*this); + __pos += __off; + return __pos; + } + + // The standard requires that this operator must be defined, but + // defines its semantics only in terms of operator+. In this + // implementation it constructs a copy of *this, subtracts the + // argument from that copy using operator-= and then returns the + // copy. + /// Subtract offset from position. + fpos + operator-(streamoff __off) const + { + fpos __pos(*this); + __pos -= __off; + return __pos; + } + + // The standard requires that this operator must be defined, but + // defines its semantics only in terms of operator+. In this + // implementation it returns the difference between the offset + // stored in *this and in the argument. + /// Subtract position to return offset. + streamoff + operator-(const fpos& __other) const + { return _M_off - __other._M_off; } + }; + + // The standard only requires that operator== must be an + // equivalence relation. In this implementation two fpos + // objects belong to the same equivalence class if the contained + // offsets compare equal. + /// Test if equivalent to another position. + template + inline bool + operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) + { return streamoff(__lhs) == streamoff(__rhs); } + + template + inline bool + operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) + { return streamoff(__lhs) != streamoff(__rhs); } + + // Clauses 21.1.3.1 and 21.1.3.2 describe streampos and wstreampos + // as implementation defined types, but clause 27.2 requires that + // they must both be typedefs for fpos + /// File position for char streams. + typedef fpos streampos; + /// File position for wchar_t streams. + typedef fpos wstreampos; + +#ifdef _GLIBCXX_USE_CHAR8_T + /// File position for char8_t streams. + typedef fpos u8streampos; +#endif + +#if __cplusplus >= 201103L + /// File position for char16_t streams. + typedef fpos u16streampos; + /// File position for char32_t streams. + typedef fpos u32streampos; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@postypes.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@postypes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e407a87d79a35aa124ba7e2046ceca6c24393358 GIT binary patch literal 19367 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 nN<1ld5-la3(mMr8iLhQTb|. + +/** @file predefined_ops.h + * This is an internal header file, included by other library headers. + * You should not attempt to use it directly. @headername{algorithm} + */ + +#ifndef _GLIBCXX_PREDEFINED_OPS_H +#define _GLIBCXX_PREDEFINED_OPS_H 1 + +#include + +namespace __gnu_cxx +{ +namespace __ops +{ + struct _Iter_less_iter + { + template + _GLIBCXX14_CONSTEXPR + bool + operator()(_Iterator1 __it1, _Iterator2 __it2) const + { return *__it1 < *__it2; } + }; + + _GLIBCXX14_CONSTEXPR + inline _Iter_less_iter + __iter_less_iter() + { return _Iter_less_iter(); } + + struct _Iter_less_val + { +#if __cplusplus >= 201103L + constexpr _Iter_less_val() = default; +#else + _Iter_less_val() { } +#endif + + _GLIBCXX20_CONSTEXPR + explicit + _Iter_less_val(_Iter_less_iter) { } + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator __it, _Value& __val) const + { return *__it < __val; } + }; + + _GLIBCXX20_CONSTEXPR + inline _Iter_less_val + __iter_less_val() + { return _Iter_less_val(); } + + _GLIBCXX20_CONSTEXPR + inline _Iter_less_val + __iter_comp_val(_Iter_less_iter) + { return _Iter_less_val(); } + + struct _Val_less_iter + { +#if __cplusplus >= 201103L + constexpr _Val_less_iter() = default; +#else + _Val_less_iter() { } +#endif + + _GLIBCXX20_CONSTEXPR + explicit + _Val_less_iter(_Iter_less_iter) { } + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Value& __val, _Iterator __it) const + { return __val < *__it; } + }; + + _GLIBCXX20_CONSTEXPR + inline _Val_less_iter + __val_less_iter() + { return _Val_less_iter(); } + + _GLIBCXX20_CONSTEXPR + inline _Val_less_iter + __val_comp_iter(_Iter_less_iter) + { return _Val_less_iter(); } + + struct _Iter_equal_to_iter + { + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator1 __it1, _Iterator2 __it2) const + { return *__it1 == *__it2; } + }; + + _GLIBCXX20_CONSTEXPR + inline _Iter_equal_to_iter + __iter_equal_to_iter() + { return _Iter_equal_to_iter(); } + + struct _Iter_equal_to_val + { + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator __it, _Value& __val) const + { return *__it == __val; } + }; + + _GLIBCXX20_CONSTEXPR + inline _Iter_equal_to_val + __iter_equal_to_val() + { return _Iter_equal_to_val(); } + + _GLIBCXX20_CONSTEXPR + inline _Iter_equal_to_val + __iter_comp_val(_Iter_equal_to_iter) + { return _Iter_equal_to_val(); } + + template + struct _Iter_comp_iter + { + _Compare _M_comp; + + explicit _GLIBCXX14_CONSTEXPR + _Iter_comp_iter(_Compare __comp) + : _M_comp(_GLIBCXX_MOVE(__comp)) + { } + + template + _GLIBCXX14_CONSTEXPR + bool + operator()(_Iterator1 __it1, _Iterator2 __it2) + { return bool(_M_comp(*__it1, *__it2)); } + }; + + template + _GLIBCXX14_CONSTEXPR + inline _Iter_comp_iter<_Compare> + __iter_comp_iter(_Compare __comp) + { return _Iter_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); } + + template + struct _Iter_comp_val + { + _Compare _M_comp; + + _GLIBCXX20_CONSTEXPR + explicit + _Iter_comp_val(_Compare __comp) + : _M_comp(_GLIBCXX_MOVE(__comp)) + { } + + _GLIBCXX20_CONSTEXPR + explicit + _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp) + : _M_comp(__comp._M_comp) + { } + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + explicit + _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp) + : _M_comp(std::move(__comp._M_comp)) + { } +#endif + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator __it, _Value& __val) + { return bool(_M_comp(*__it, __val)); } + }; + + template + _GLIBCXX20_CONSTEXPR + inline _Iter_comp_val<_Compare> + __iter_comp_val(_Compare __comp) + { return _Iter_comp_val<_Compare>(_GLIBCXX_MOVE(__comp)); } + + template + _GLIBCXX20_CONSTEXPR + inline _Iter_comp_val<_Compare> + __iter_comp_val(_Iter_comp_iter<_Compare> __comp) + { return _Iter_comp_val<_Compare>(_GLIBCXX_MOVE(__comp)); } + + template + struct _Val_comp_iter + { + _Compare _M_comp; + + _GLIBCXX20_CONSTEXPR + explicit + _Val_comp_iter(_Compare __comp) + : _M_comp(_GLIBCXX_MOVE(__comp)) + { } + + _GLIBCXX20_CONSTEXPR + explicit + _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp) + : _M_comp(__comp._M_comp) + { } + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + explicit + _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp) + : _M_comp(std::move(__comp._M_comp)) + { } +#endif + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Value& __val, _Iterator __it) + { return bool(_M_comp(__val, *__it)); } + }; + + template + _GLIBCXX20_CONSTEXPR + inline _Val_comp_iter<_Compare> + __val_comp_iter(_Compare __comp) + { return _Val_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); } + + template + _GLIBCXX20_CONSTEXPR + inline _Val_comp_iter<_Compare> + __val_comp_iter(_Iter_comp_iter<_Compare> __comp) + { return _Val_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); } + + template + struct _Iter_equals_val + { + _Value& _M_value; + + _GLIBCXX20_CONSTEXPR + explicit + _Iter_equals_val(_Value& __value) + : _M_value(__value) + { } + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator __it) + { return *__it == _M_value; } + }; + + template + _GLIBCXX20_CONSTEXPR + inline _Iter_equals_val<_Value> + __iter_equals_val(_Value& __val) + { return _Iter_equals_val<_Value>(__val); } + + template + struct _Iter_equals_iter + { + _Iterator1 _M_it1; + + _GLIBCXX20_CONSTEXPR + explicit + _Iter_equals_iter(_Iterator1 __it1) + : _M_it1(__it1) + { } + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator2 __it2) + { return *__it2 == *_M_it1; } + }; + + template + _GLIBCXX20_CONSTEXPR + inline _Iter_equals_iter<_Iterator> + __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it) + { return _Iter_equals_iter<_Iterator>(__it); } + + template + struct _Iter_pred + { + _Predicate _M_pred; + + _GLIBCXX20_CONSTEXPR + explicit + _Iter_pred(_Predicate __pred) + : _M_pred(_GLIBCXX_MOVE(__pred)) + { } + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator __it) + { return bool(_M_pred(*__it)); } + }; + + template + _GLIBCXX20_CONSTEXPR + inline _Iter_pred<_Predicate> + __pred_iter(_Predicate __pred) + { return _Iter_pred<_Predicate>(_GLIBCXX_MOVE(__pred)); } + + template + struct _Iter_comp_to_val + { + _Compare _M_comp; + _Value& _M_value; + + _GLIBCXX20_CONSTEXPR + _Iter_comp_to_val(_Compare __comp, _Value& __value) + : _M_comp(_GLIBCXX_MOVE(__comp)), _M_value(__value) + { } + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator __it) + { return bool(_M_comp(*__it, _M_value)); } + }; + + template + _Iter_comp_to_val<_Compare, _Value> + _GLIBCXX20_CONSTEXPR + __iter_comp_val(_Compare __comp, _Value &__val) + { + return _Iter_comp_to_val<_Compare, _Value>(_GLIBCXX_MOVE(__comp), __val); + } + + template + struct _Iter_comp_to_iter + { + _Compare _M_comp; + _Iterator1 _M_it1; + + _GLIBCXX20_CONSTEXPR + _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1) + : _M_comp(_GLIBCXX_MOVE(__comp)), _M_it1(__it1) + { } + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator2 __it2) + { return bool(_M_comp(*__it2, *_M_it1)); } + }; + + template + _GLIBCXX20_CONSTEXPR + inline _Iter_comp_to_iter<_Compare, _Iterator> + __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it) + { + return _Iter_comp_to_iter<_Compare, _Iterator>( + _GLIBCXX_MOVE(__comp._M_comp), __it); + } + + template + struct _Iter_negate + { + _Predicate _M_pred; + + _GLIBCXX20_CONSTEXPR + explicit + _Iter_negate(_Predicate __pred) + : _M_pred(_GLIBCXX_MOVE(__pred)) + { } + + template + _GLIBCXX20_CONSTEXPR + bool + operator()(_Iterator __it) + { return !bool(_M_pred(*__it)); } + }; + + template + _GLIBCXX20_CONSTEXPR + inline _Iter_negate<_Predicate> + __negate(_Iter_pred<_Predicate> __pred) + { return _Iter_negate<_Predicate>(_GLIBCXX_MOVE(__pred._M_pred)); } + +} // namespace __ops +} // namespace __gnu_cxx + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@predefined_ops.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@predefined_ops.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c5dab8b2b4e5ccd5aee7bb3c193cafb783bf8223 GIT binary patch literal 32142 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 VS?~5YgAsI+S3aY|-+WNa0RYnZ4k-Wt literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ptr_traits.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ptr_traits.h new file mode 100644 index 0000000..d3c1765 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ptr_traits.h @@ -0,0 +1,273 @@ +// Pointer Traits -*- C++ -*- + +// Copyright (C) 2011-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/ptr_traits.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _PTR_TRAITS_H +#define _PTR_TRAITS_H 1 + +#if __cplusplus >= 201103L + +#include + +#if __cplusplus > 201703L +#include +namespace __gnu_debug { struct _Safe_iterator_base; } +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// @cond undocumented + + class __undefined; + + // For a specialization `SomeTemplate` the member `type` is T, + // otherwise `type` is `__undefined`. + template + struct __get_first_arg + { using type = __undefined; }; + + template class _SomeTemplate, typename _Tp, + typename... _Types> + struct __get_first_arg<_SomeTemplate<_Tp, _Types...>> + { using type = _Tp; }; + + // For a specialization `SomeTemplate` and a type `U` the member + // `type` is `SomeTemplate`, otherwise there is no member `type`. + template + struct __replace_first_arg + { }; + + template class _SomeTemplate, typename _Up, + typename _Tp, typename... _Types> + struct __replace_first_arg<_SomeTemplate<_Tp, _Types...>, _Up> + { using type = _SomeTemplate<_Up, _Types...>; }; + + // Detect the element type of a pointer-like type. + template + struct __ptr_traits_elem : __get_first_arg<_Ptr> + { }; + + // Use _Ptr::element_type if is a valid type. +#if __cpp_concepts + template requires requires { typename _Ptr::element_type; } + struct __ptr_traits_elem<_Ptr, void> + { using type = typename _Ptr::element_type; }; +#else + template + struct __ptr_traits_elem<_Ptr, __void_t> + { using type = typename _Ptr::element_type; }; +#endif + + template + using __ptr_traits_elem_t = typename __ptr_traits_elem<_Ptr>::type; + + /// @endcond + + // Define pointer_traits

    ::pointer_to. + template::value> + struct __ptr_traits_ptr_to + { + using pointer = _Ptr; + using element_type = _Elt; + + /** + * @brief Obtain a pointer to an object + * @param __r A reference to an object of type `element_type` + * @return `pointer::pointer_to(__r)` + * @pre `pointer::pointer_to(__r)` is a valid expression. + */ + static pointer + pointer_to(element_type& __r) +#if __cpp_lib_concepts + requires requires { + { pointer::pointer_to(__r) } -> convertible_to; + } +#endif + { return pointer::pointer_to(__r); } + }; + + // Do not define pointer_traits

    ::pointer_to if element type is void. + template + struct __ptr_traits_ptr_to<_Ptr, _Elt, true> + { }; + + // Partial specialization defining pointer_traits::pointer_to(T&). + template + struct __ptr_traits_ptr_to<_Tp*, _Tp, false> + { + using pointer = _Tp*; + using element_type = _Tp; + + /** + * @brief Obtain a pointer to an object + * @param __r A reference to an object of type `element_type` + * @return `addressof(__r)` + */ + static _GLIBCXX20_CONSTEXPR pointer + pointer_to(element_type& __r) noexcept + { return std::addressof(__r); } + }; + + template + struct __ptr_traits_impl : __ptr_traits_ptr_to<_Ptr, _Elt> + { + private: + template + using __diff_t = typename _Tp::difference_type; + + template + using __rebind = __type_identity>; + + public: + /// The pointer type. + using pointer = _Ptr; + + /// The type pointed to. + using element_type = _Elt; + + /// The type used to represent the difference between two pointers. + using difference_type = __detected_or_t; + + /// A pointer to a different type. + template + using rebind = typename __detected_or_t<__replace_first_arg<_Ptr, _Up>, + __rebind, _Ptr, _Up>::type; + }; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3545. std::pointer_traits should be SFINAE-friendly + template + struct __ptr_traits_impl<_Ptr, __undefined> + { }; + + /** + * @brief Uniform interface to all pointer-like types + * @headerfile memory + * @ingroup pointer_abstractions + * @since C++11 + */ + template + struct pointer_traits : __ptr_traits_impl<_Ptr, __ptr_traits_elem_t<_Ptr>> + { }; + + /** + * @brief Partial specialization for built-in pointers. + * @headerfile memory + * @ingroup pointer_abstractions + * @since C++11 + */ + template + struct pointer_traits<_Tp*> : __ptr_traits_ptr_to<_Tp*, _Tp> + { + /// The pointer type + typedef _Tp* pointer; + /// The type pointed to + typedef _Tp element_type; + /// Type used to represent the difference between two pointers + typedef ptrdiff_t difference_type; + /// A pointer to a different type. + template using rebind = _Up*; + }; + + /// Convenience alias for rebinding pointers. + template + using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>; + +#ifndef __glibcxx_to_address // C++ < 20 + template + [[__gnu__::__always_inline__]] + constexpr _Tp* + __to_address(_Tp* __ptr) noexcept + { + static_assert(!std::is_function<_Tp>::value, "std::to_address argument " + "must not be a function pointer"); + return __ptr; + } + + // This should only be used for pointer-like types (e.g. allocator pointers) + // and (in C++20 and later) for types satisfying std::contiguous_iterator. + // It should not be used for arbitrary random access iterators, because + // they might not be contiguous iterators (e.g. deque::iterator isn't). + template + constexpr typename std::pointer_traits<_Ptr>::element_type* + __to_address(const _Ptr& __ptr) + { return std::__to_address(__ptr.operator->()); } +#else + /** + * @brief Obtain address referenced by a pointer to an object + * @param __ptr A pointer to an object + * @return @c __ptr + * @ingroup pointer_abstractions + */ + template + [[__gnu__::__always_inline__]] + constexpr _Tp* + to_address(_Tp* __ptr) noexcept + { + static_assert(!is_function_v<_Tp>, "std::to_address argument " + "must not be a function pointer"); + return __ptr; + } + + /** + * @brief Obtain address referenced by a pointer to an object + * @param __ptr A pointer to an object + * @return @c pointer_traits<_Ptr>::to_address(__ptr) if that expression is + well-formed, otherwise @c to_address(__ptr.operator->()) + * @ingroup pointer_abstractions + */ + template + constexpr auto + to_address(const _Ptr& __ptr) noexcept + { + if constexpr (requires { pointer_traits<_Ptr>::to_address(__ptr); }) + return pointer_traits<_Ptr>::to_address(__ptr); + else if constexpr (is_base_of_v<__gnu_debug::_Safe_iterator_base, _Ptr>) + return std::to_address(__ptr.base().operator->()); + else + return std::to_address(__ptr.operator->()); + } + + /// @cond undocumented + /// Compatibility for use in code that is also compiled as pre-C++20. + template + [[__gnu__::__always_inline__]] + constexpr auto + __to_address(const _Ptr& __ptr) noexcept + { return std::to_address(__ptr); } + /// @endcond +#endif // __glibcxx_to_address + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ptr_traits.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@ptr_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..53aed435456c9e42e080a1a229f8cb34720b52cd GIT binary patch literal 21148 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@quoted_string.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@quoted_string.h new file mode 100644 index 0000000..3a828d5 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@quoted_string.h @@ -0,0 +1,188 @@ +// Helpers for quoted stream manipulators -*- C++ -*- + +// Copyright (C) 2013-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/quoted_string.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iomanip} + */ + +#ifndef _GLIBCXX_QUOTED_STRING_H +#define _GLIBCXX_QUOTED_STRING_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus < 201103L +# include +#else +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + namespace __detail { + /** + * @brief Struct for delimited strings. + */ + template + struct _Quoted_string + { + static_assert(is_reference<_String>::value + || is_pointer<_String>::value, + "String type must be pointer or reference"); + + _Quoted_string(_String __str, _CharT __del, _CharT __esc) + : _M_string(__str), _M_delim{__del}, _M_escape{__esc} + { } + + _Quoted_string& + operator=(_Quoted_string&) = delete; + + _String _M_string; + _CharT _M_delim; + _CharT _M_escape; + }; + +#if __cplusplus >= 201703L + template + struct _Quoted_string, _CharT> + { + _Quoted_string(basic_string_view<_CharT, _Traits> __str, + _CharT __del, _CharT __esc) + : _M_string(__str), _M_delim{__del}, _M_escape{__esc} + { } + + _Quoted_string& + operator=(_Quoted_string&) = delete; + + basic_string_view<_CharT, _Traits> _M_string; + _CharT _M_delim; + _CharT _M_escape; + }; +#endif // C++17 + + /** + * @brief Inserter for quoted strings. + * + * @headerfile iomanip + */ + template + std::basic_ostream<_CharT, _Traits>& + operator<<(std::basic_ostream<_CharT, _Traits>& __os, + const _Quoted_string& __str) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 2344 quoted()'s interaction with padding is unclear + std::basic_ostringstream<_CharT, _Traits> __ostr; + __ostr << __str._M_delim; + for (const _CharT* __c = __str._M_string; *__c; ++__c) + { + if (*__c == __str._M_delim || *__c == __str._M_escape) + __ostr << __str._M_escape; + __ostr << *__c; + } + __ostr << __str._M_delim; + + return __os << __ostr.str(); + } + + /** + * @brief Inserter for quoted strings. + * + * @headerfile iomanip + */ + template + std::basic_ostream<_CharT, _Traits>& + operator<<(std::basic_ostream<_CharT, _Traits>& __os, + const _Quoted_string<_String, _CharT>& __str) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 2344 quoted()'s interaction with padding is unclear + std::basic_ostringstream<_CharT, _Traits> __ostr; + __ostr << __str._M_delim; + for (auto __c : __str._M_string) + { + if (__c == __str._M_delim || __c == __str._M_escape) + __ostr << __str._M_escape; + __ostr << __c; + } + __ostr << __str._M_delim; + + return __os << __ostr.str(); + } + + /** + * @brief Extractor for delimited strings. + * The left and right delimiters can be different. + * + * @headerfile iomanip + */ + template + std::basic_istream<_CharT, _Traits>& + operator>>(std::basic_istream<_CharT, _Traits>& __is, + const _Quoted_string&, + _CharT>& __str) + { + _CharT __c; + __is >> __c; + if (!__is.good()) + return __is; + if (__c != __str._M_delim) + { + __is.unget(); + __is >> __str._M_string; + return __is; + } + __str._M_string.clear(); + std::ios_base::fmtflags __flags + = __is.flags(__is.flags() & ~std::ios_base::skipws); + do + { + __is >> __c; + if (!__is.good()) + break; + if (__c == __str._M_escape) + { + __is >> __c; + if (!__is.good()) + break; + } + else if (__c == __str._M_delim) + break; + __str._M_string += __c; + } + while (true); + __is.setf(__flags); + + return __is; + } + } // namespace __detail + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 +#endif /* _GLIBCXX_QUOTED_STRING_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@quoted_string.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@quoted_string.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5ebb6582ae4bc6e06808b8b90cc65789929a0b4c GIT binary patch literal 29185 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. + +/** @file bits/range_access.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iterator} + */ + +#ifndef _GLIBCXX_RANGE_ACCESS_H +#define _GLIBCXX_RANGE_ACCESS_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus >= 201103L +#include +#include // common_type_t, make_signed_t +#include // reverse_iterator + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief Return an iterator pointing to the first element of + * the container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + begin(_Container& __cont) noexcept(noexcept(__cont.begin())) + -> decltype(__cont.begin()) + { return __cont.begin(); } + + /** + * @brief Return an iterator pointing to the first element of + * the const container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + begin(const _Container& __cont) noexcept(noexcept(__cont.begin())) + -> decltype(__cont.begin()) + { return __cont.begin(); } + + /** + * @brief Return an iterator pointing to one past the last element of + * the container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + end(_Container& __cont) noexcept(noexcept(__cont.end())) + -> decltype(__cont.end()) + { return __cont.end(); } + + /** + * @brief Return an iterator pointing to one past the last element of + * the const container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + end(const _Container& __cont) noexcept(noexcept(__cont.end())) + -> decltype(__cont.end()) + { return __cont.end(); } + + /** + * @brief Return an iterator pointing to the first element of the array. + * @param __arr Array. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX14_CONSTEXPR _Tp* + begin(_Tp (&__arr)[_Nm]) noexcept + { return __arr; } + + /** + * @brief Return an iterator pointing to one past the last element + * of the array. + * @param __arr Array. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX14_CONSTEXPR _Tp* + end(_Tp (&__arr)[_Nm]) noexcept + { return __arr + _Nm; } + +#if __cplusplus >= 201402L + + template class valarray; + // These overloads must be declared for cbegin and cend to use them. + template _Tp* begin(valarray<_Tp>&) noexcept; + template const _Tp* begin(const valarray<_Tp>&) noexcept; + template _Tp* end(valarray<_Tp>&) noexcept; + template const _Tp* end(const valarray<_Tp>&) noexcept; + + /** + * @brief Return an iterator pointing to the first element of + * the const container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + constexpr auto + cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont))) + -> decltype(std::begin(__cont)) + { return std::begin(__cont); } + + /** + * @brief Return an iterator pointing to one past the last element of + * the const container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + constexpr auto + cend(const _Container& __cont) noexcept(noexcept(std::end(__cont))) + -> decltype(std::end(__cont)) + { return std::end(__cont); } + + /** + * @brief Return a reverse iterator pointing to the last element of + * the container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + rbegin(_Container& __cont) noexcept(noexcept(__cont.rbegin())) + -> decltype(__cont.rbegin()) + { return __cont.rbegin(); } + + /** + * @brief Return a reverse iterator pointing to the last element of + * the const container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + rbegin(const _Container& __cont) noexcept(noexcept(__cont.rbegin())) + -> decltype(__cont.rbegin()) + { return __cont.rbegin(); } + + /** + * @brief Return a reverse iterator pointing one past the first element of + * the container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + rend(_Container& __cont) noexcept(noexcept(__cont.rend())) + -> decltype(__cont.rend()) + { return __cont.rend(); } + + /** + * @brief Return a reverse iterator pointing one past the first element of + * the const container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + rend(const _Container& __cont) noexcept(noexcept(__cont.rend())) + -> decltype(__cont.rend()) + { return __cont.rend(); } + + /** + * @brief Return a reverse iterator pointing to the last element of + * the array. + * @param __arr Array. + */ + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*> + rbegin(_Tp (&__arr)[_Nm]) noexcept + { return reverse_iterator<_Tp*>(__arr + _Nm); } + + /** + * @brief Return a reverse iterator pointing one past the first element of + * the array. + * @param __arr Array. + */ + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*> + rend(_Tp (&__arr)[_Nm]) noexcept + { return reverse_iterator<_Tp*>(__arr); } + + /** + * @brief Return a reverse iterator pointing to the last element of + * the initializer_list. + * @param __il initializer_list. + */ + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR reverse_iterator + rbegin(initializer_list<_Tp> __il) noexcept + { return reverse_iterator(__il.end()); } + + /** + * @brief Return a reverse iterator pointing one past the first element of + * the initializer_list. + * @param __il initializer_list. + */ + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR reverse_iterator + rend(initializer_list<_Tp> __il) noexcept + { return reverse_iterator(__il.begin()); } + + /** + * @brief Return a reverse iterator pointing to the last element of + * the const container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + crbegin(const _Container& __cont) noexcept(noexcept(std::rbegin(__cont))) + -> decltype(std::rbegin(__cont)) + { return std::rbegin(__cont); } + + /** + * @brief Return a reverse iterator pointing one past the first element of + * the const container. + * @param __cont Container. + */ + template + [[__nodiscard__, __gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR auto + crend(const _Container& __cont) noexcept(noexcept(std::rend(__cont))) + -> decltype(std::rend(__cont)) + { return std::rend(__cont); } + +#endif // C++14 + +#ifdef __glibcxx_nonmember_container_access // C++ >= 17 + /** + * @brief Return the size of a container. + * @param __cont Container. + */ + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr auto + size(const _Container& __cont) noexcept(noexcept(__cont.size())) + -> decltype(__cont.size()) + { return __cont.size(); } + + /** + * @brief Return the size of an array. + */ + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr size_t + size(const _Tp (&)[_Nm]) noexcept + { return _Nm; } + + /** + * @brief Return whether a container is empty. + * @param __cont Container. + */ + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr auto + empty(const _Container& __cont) noexcept(noexcept(__cont.empty())) + -> decltype(__cont.empty()) + { return __cont.empty(); } + + /** + * @brief Return whether an array is empty (always false). + */ + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr bool + empty(const _Tp (&)[_Nm]) noexcept + { return false; } + + /** + * @brief Return whether an initializer_list is empty. + * @param __il Initializer list. + */ + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr bool + empty(initializer_list<_Tp> __il) noexcept + { return __il.size() == 0;} + + /** + * @brief Return the data pointer of a container. + * @param __cont Container. + */ + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr auto + data(_Container& __cont) noexcept(noexcept(__cont.data())) + -> decltype(__cont.data()) + { return __cont.data(); } + + /** + * @brief Return the data pointer of a const container. + * @param __cont Container. + */ + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr auto + data(const _Container& __cont) noexcept(noexcept(__cont.data())) + -> decltype(__cont.data()) + { return __cont.data(); } + + /** + * @brief Return the data pointer of an array. + * @param __array Array. + */ + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr _Tp* + data(_Tp (&__array)[_Nm]) noexcept + { return __array; } + + /** + * @brief Return the data pointer of an initializer list. + * @param __il Initializer list. + */ + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr const _Tp* + data(initializer_list<_Tp> __il) noexcept + { return __il.begin(); } +#endif // __glibcxx_nonmember_container_access + +#ifdef __glibcxx_ssize // C++ >= 20 + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr auto + ssize(const _Container& __cont) noexcept(noexcept(__cont.size())) + -> common_type_t> + { + using type = make_signed_t; + return static_cast>(__cont.size()); + } + + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr ptrdiff_t + ssize(const _Tp (&)[_Num]) noexcept + { return _Num; } +#endif // __glibcxx_ssize +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // C++11 +#endif // _GLIBCXX_RANGE_ACCESS_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@range_access.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@range_access.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a76e0ded7567dc0dc29e7dff2353515e8f427e42 GIT binary patch literal 28668 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@refwrap.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@refwrap.h new file mode 100644 index 0000000..612715e --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@refwrap.h @@ -0,0 +1,465 @@ +// Implementation of std::reference_wrapper -*- C++ -*- + +// Copyright (C) 2004-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/refwrap.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{functional} + */ + +#ifndef _GLIBCXX_REFWRAP_H +#define _GLIBCXX_REFWRAP_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus >= 201103L + +#include +#include +#include // for unary_function and binary_function + +#if __glibcxx_reference_wrapper >= 202403L // >= C++26 +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// @cond undocumented + + /** + * Derives from @c unary_function or @c binary_function, or perhaps + * nothing, depending on the number of arguments provided. The + * primary template is the basis case, which derives nothing. + */ + template + struct _Maybe_unary_or_binary_function { }; + +// Ignore warnings about unary_function and binary_function. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + /// Derives from @c unary_function, as appropriate. + template + struct _Maybe_unary_or_binary_function<_Res, _T1> + : std::unary_function<_T1, _Res> { }; + + /// Derives from @c binary_function, as appropriate. + template + struct _Maybe_unary_or_binary_function<_Res, _T1, _T2> + : std::binary_function<_T1, _T2, _Res> { }; + +#pragma GCC diagnostic pop + + template + struct _Mem_fn_traits; + + template + struct _Mem_fn_traits_base + { + using __result_type = _Res; + using __maybe_type + = _Maybe_unary_or_binary_function<_Res, _Class*, _ArgTypes...>; + using __arity = integral_constant; + }; + +#define _GLIBCXX_MEM_FN_TRAITS2(_CV, _REF, _LVAL, _RVAL) \ + template \ + struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) _CV _REF> \ + : _Mem_fn_traits_base<_Res, _CV _Class, _ArgTypes...> \ + { \ + using __vararg = false_type; \ + }; \ + template \ + struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes..., ...) _CV _REF> \ + : _Mem_fn_traits_base<_Res, _CV _Class, _ArgTypes...> \ + { \ + using __vararg = true_type; \ + }; + +#define _GLIBCXX_MEM_FN_TRAITS(_REF, _LVAL, _RVAL) \ + _GLIBCXX_MEM_FN_TRAITS2( , _REF, _LVAL, _RVAL) \ + _GLIBCXX_MEM_FN_TRAITS2(const , _REF, _LVAL, _RVAL) \ + _GLIBCXX_MEM_FN_TRAITS2(volatile , _REF, _LVAL, _RVAL) \ + _GLIBCXX_MEM_FN_TRAITS2(const volatile, _REF, _LVAL, _RVAL) + +_GLIBCXX_MEM_FN_TRAITS( , true_type, true_type) +_GLIBCXX_MEM_FN_TRAITS(&, true_type, false_type) +_GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) + +#if __cplusplus > 201402L +_GLIBCXX_MEM_FN_TRAITS(noexcept, true_type, true_type) +_GLIBCXX_MEM_FN_TRAITS(& noexcept, true_type, false_type) +_GLIBCXX_MEM_FN_TRAITS(&& noexcept, false_type, true_type) +#endif + +#undef _GLIBCXX_MEM_FN_TRAITS +#undef _GLIBCXX_MEM_FN_TRAITS2 + + /// If we have found a result_type, extract it. + template> + struct _Maybe_get_result_type + { }; + + template + struct _Maybe_get_result_type<_Functor, + __void_t> + { typedef typename _Functor::result_type result_type; }; + + /** + * Base class for any function object that has a weak result type, as + * defined in 20.8.2 [func.require] of C++11. + */ + template + struct _Weak_result_type_impl + : _Maybe_get_result_type<_Functor> + { }; + + /// Retrieve the result type for a function type. + template + struct _Weak_result_type_impl<_Res(_ArgTypes...) _GLIBCXX_NOEXCEPT_QUAL> + { typedef _Res result_type; }; + + /// Retrieve the result type for a varargs function type. + template + struct _Weak_result_type_impl<_Res(_ArgTypes..., + ...) _GLIBCXX_NOEXCEPT_QUAL> + { typedef _Res result_type; }; + + /// Retrieve the result type for a function pointer. + template + struct _Weak_result_type_impl<_Res(*)(_ArgTypes...) _GLIBCXX_NOEXCEPT_QUAL> + { typedef _Res result_type; }; + + /// Retrieve the result type for a varargs function pointer. + template + struct + _Weak_result_type_impl<_Res(*)(_ArgTypes..., ...) _GLIBCXX_NOEXCEPT_QUAL> + { typedef _Res result_type; }; + + // Let _Weak_result_type_impl perform the real work. + template::value> + struct _Weak_result_type_memfun + : _Weak_result_type_impl<_Functor> + { }; + + // A pointer to member function has a weak result type. + template + struct _Weak_result_type_memfun<_MemFunPtr, true> + { + using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; + }; + + // A pointer to data member doesn't have a weak result type. + template + struct _Weak_result_type_memfun<_Func _Class::*, false> + { }; + + /** + * Strip top-level cv-qualifiers from the function object and let + * _Weak_result_type_memfun perform the real work. + */ + template + struct _Weak_result_type + : _Weak_result_type_memfun::type> + { }; + +#if __cplusplus <= 201703L + // Detect nested argument_type. + template> + struct _Refwrap_base_arg1 + { }; + + // Nested argument_type. + template + struct _Refwrap_base_arg1<_Tp, + __void_t> + { + typedef typename _Tp::argument_type argument_type; + }; + + // Detect nested first_argument_type and second_argument_type. + template> + struct _Refwrap_base_arg2 + { }; + + // Nested first_argument_type and second_argument_type. + template + struct _Refwrap_base_arg2<_Tp, + __void_t> + { + typedef typename _Tp::first_argument_type first_argument_type; + typedef typename _Tp::second_argument_type second_argument_type; + }; + + /** + * Derives from unary_function or binary_function when it + * can. Specializations handle all of the easy cases. The primary + * template determines what to do with a class type, which may + * derive from both unary_function and binary_function. + */ + template + struct _Reference_wrapper_base + : _Weak_result_type<_Tp>, _Refwrap_base_arg1<_Tp>, _Refwrap_base_arg2<_Tp> + { }; + +// Ignore warnings about unary_function and binary_function. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + // - a function type (unary) + template + struct _Reference_wrapper_base<_Res(_T1) _GLIBCXX_NOEXCEPT_QUAL> + : unary_function<_T1, _Res> + { }; + + template + struct _Reference_wrapper_base<_Res(_T1) const> + : unary_function<_T1, _Res> + { }; + + template + struct _Reference_wrapper_base<_Res(_T1) volatile> + : unary_function<_T1, _Res> + { }; + + template + struct _Reference_wrapper_base<_Res(_T1) const volatile> + : unary_function<_T1, _Res> + { }; + + // - a function type (binary) + template + struct _Reference_wrapper_base<_Res(_T1, _T2) _GLIBCXX_NOEXCEPT_QUAL> + : binary_function<_T1, _T2, _Res> + { }; + + template + struct _Reference_wrapper_base<_Res(_T1, _T2) const> + : binary_function<_T1, _T2, _Res> + { }; + + template + struct _Reference_wrapper_base<_Res(_T1, _T2) volatile> + : binary_function<_T1, _T2, _Res> + { }; + + template + struct _Reference_wrapper_base<_Res(_T1, _T2) const volatile> + : binary_function<_T1, _T2, _Res> + { }; + + // - a function pointer type (unary) + template + struct _Reference_wrapper_base<_Res(*)(_T1) _GLIBCXX_NOEXCEPT_QUAL> + : unary_function<_T1, _Res> + { }; + + // - a function pointer type (binary) + template + struct _Reference_wrapper_base<_Res(*)(_T1, _T2) _GLIBCXX_NOEXCEPT_QUAL> + : binary_function<_T1, _T2, _Res> + { }; + + template::value> + struct _Reference_wrapper_base_memfun + : _Reference_wrapper_base<_Tp> + { }; + + template + struct _Reference_wrapper_base_memfun<_MemFunPtr, true> + : _Mem_fn_traits<_MemFunPtr>::__maybe_type + { + using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; + }; +#pragma GCC diagnostic pop +#endif // ! C++20 + + /// @endcond + + /** + * @brief Primary class template for reference_wrapper. + * @ingroup functors + */ + template + class reference_wrapper +#if __cplusplus <= 201703L + // In C++20 std::reference_wrapper allows T to be incomplete, + // so checking for nested types could result in ODR violations. + : public _Reference_wrapper_base_memfun::type> +#endif + { + _Tp* _M_data; + + _GLIBCXX20_CONSTEXPR + static _Tp* _S_fun(_Tp& __r) noexcept { return std::__addressof(__r); } + + static void _S_fun(_Tp&&) = delete; + + template> + using __not_same + = typename enable_if::value>::type; + + public: + typedef _Tp type; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2993. reference_wrapper conversion from T&& + // 3041. Unnecessary decay in reference_wrapper + template, typename + = decltype(reference_wrapper::_S_fun(std::declval<_Up>()))> + _GLIBCXX20_CONSTEXPR + reference_wrapper(_Up&& __uref) + noexcept(noexcept(reference_wrapper::_S_fun(std::declval<_Up>()))) + : _M_data(reference_wrapper::_S_fun(std::forward<_Up>(__uref))) + { } + + reference_wrapper(const reference_wrapper&) = default; + + reference_wrapper& + operator=(const reference_wrapper&) = default; + + _GLIBCXX20_CONSTEXPR + operator _Tp&() const noexcept + { return this->get(); } + + _GLIBCXX20_CONSTEXPR + _Tp& + get() const noexcept + { return *_M_data; } + + template + _GLIBCXX20_CONSTEXPR + typename __invoke_result<_Tp&, _Args...>::type + operator()(_Args&&... __args) const + noexcept(__is_nothrow_invocable<_Tp&, _Args...>::value) + { +#if __cplusplus > 201703L + if constexpr (is_object_v) + static_assert(sizeof(type), "type must be complete"); +#endif + return std::__invoke(get(), std::forward<_Args>(__args)...); + } + +#if __glibcxx_reference_wrapper >= 202403L // >= C++26 + // [refwrap.comparisons], comparisons + [[nodiscard]] + friend constexpr bool + operator==(reference_wrapper __x, reference_wrapper __y) + requires requires { { __x.get() == __y.get() } -> convertible_to; } + { return __x.get() == __y.get(); } + + [[nodiscard]] + friend constexpr bool + operator==(reference_wrapper __x, const _Tp& __y) + requires requires { { __x.get() == __y } -> convertible_to; } + { return __x.get() == __y; } + + [[nodiscard]] + friend constexpr bool + operator==(reference_wrapper __x, reference_wrapper __y) + requires (!is_const_v<_Tp>) + && requires { { __x.get() == __y.get() } -> convertible_to; } + { return __x.get() == __y.get(); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4071. reference_wrapper comparisons are not SFINAE-friendly + + [[nodiscard]] + friend constexpr auto + operator<=>(reference_wrapper __x, reference_wrapper __y) + requires requires (const _Tp __t) { + { __t < __t } -> __detail::__boolean_testable; + } + { return __detail::__synth3way(__x.get(), __y.get()); } + + [[nodiscard]] + friend constexpr auto + operator<=>(reference_wrapper __x, const _Tp& __y) + requires requires { { __y < __y } -> __detail::__boolean_testable; } + { return __detail::__synth3way(__x.get(), __y); } + + [[nodiscard]] + friend constexpr auto + operator<=>(reference_wrapper __x, reference_wrapper __y) + requires (!is_const_v<_Tp>) && requires (const _Tp __t) { + { __t < __t } -> __detail::__boolean_testable; + } + { return __detail::__synth3way(__x.get(), __y.get()); } +#endif + }; + +#if __cpp_deduction_guides + template + reference_wrapper(_Tp&) -> reference_wrapper<_Tp>; +#endif + + /// @relates reference_wrapper @{ + + /// Denotes a reference should be taken to a variable. + template + _GLIBCXX20_CONSTEXPR + inline reference_wrapper<_Tp> + ref(_Tp& __t) noexcept + { return reference_wrapper<_Tp>(__t); } + + /// Denotes a const reference should be taken to a variable. + template + _GLIBCXX20_CONSTEXPR + inline reference_wrapper + cref(const _Tp& __t) noexcept + { return reference_wrapper(__t); } + + template + void ref(const _Tp&&) = delete; + + template + void cref(const _Tp&&) = delete; + + /// std::ref overload to prevent wrapping a reference_wrapper + template + _GLIBCXX20_CONSTEXPR + inline reference_wrapper<_Tp> + ref(reference_wrapper<_Tp> __t) noexcept + { return __t; } + + /// std::cref overload to prevent wrapping a reference_wrapper + template + _GLIBCXX20_CONSTEXPR + inline reference_wrapper + cref(reference_wrapper<_Tp> __t) noexcept + { return { __t.get() }; } + + /// @} + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif // _GLIBCXX_REFWRAP_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@refwrap.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@refwrap.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..15975b01734d1573c5a2f546f9563dc18ce17271 GIT binary patch literal 32568 zcmdO5_$PB#_%ahC6O(>vaglyzUUE)pN~(Ucwzj^Zsh*LZp?-yhS-hEvZb7ncPG(+d zg>HIYseV#sNij%Ga(-S~X1ZPm0|PGIV3kFwY2`(U1$r3_`nh=}`bCMEDf$IP`B|yS zCB^zF#Rd8qiAA~jd6~(HNUY+bWCTwyqo9C+IXNdWFP$?#+QJU;xoIrBqg;XIklh!5|Jn-=42*i=9T1NH6krFv81#p73>sz=Hrb0 z{NnhO)U?bzh!GgRK}tZyB}J);xk;sISe%HY4DA2nlA_GK^tAF6kfSjS1uIFaEJ-ac z2d5^&p`H)1T(2ZK8H?>;^Abz)b2F3U%QI6_qQ>SOm_7|D5({<4o(B`Ne7FDM+q?l_Ej9t0DSRKP+XFu4

    1rfM7L&*h5MknXzXJ@9yXXeMJ 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@requires_hosted.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@requires_hosted.h new file mode 100644 index 0000000..86916e2 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@requires_hosted.h @@ -0,0 +1,37 @@ +// Copyright The GNU Toolchain Authors. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/requires_hosted.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{version} + */ + +#ifndef _REQUIRES_FREESTANDING_H +#define _REQUIRES_FREESTANDING_H 1 + +#include + +#if !_GLIBCXX_HOSTED +# error "This header is not available in freestanding mode." +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@requires_hosted.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@requires_hosted.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b67c3eb6ef4f53219c1b6c7c5a526fb289825873 GIT binary patch literal 11526 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. + +// GCC Note: Based on files from version 1.32.0 of the Boost library. + +// shared_count.hpp +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. + +// shared_ptr.hpp +// Copyright (C) 1998, 1999 Greg Colvin and Beman Dawes. +// Copyright (C) 2001, 2002, 2003 Peter Dimov + +// weak_ptr.hpp +// Copyright (C) 2001, 2002, 2003 Peter Dimov + +// enable_shared_from_this.hpp +// Copyright (C) 2002 Peter Dimov + +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +/** @file + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _SHARED_PTR_H +#define _SHARED_PTR_H 1 + +#include // std::basic_ostream +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup pointer_abstractions + * @{ + */ + + // 20.7.2.2.11 shared_ptr I/O + + /// Write the stored pointer to an ostream. + /// @relates shared_ptr + template + inline std::basic_ostream<_Ch, _Tr>& + operator<<(std::basic_ostream<_Ch, _Tr>& __os, + const __shared_ptr<_Tp, _Lp>& __p) + { + __os << __p.get(); + return __os; + } + + template + inline _Del* + get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept + { +#if __cpp_rtti + return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); +#else + return 0; +#endif + } + + /// 20.7.2.2.10 shared_ptr get_deleter + + /// If `__p` has a deleter of type `_Del`, return a pointer to it. + /// @relates shared_ptr + template + inline _Del* + get_deleter(const shared_ptr<_Tp>& __p) noexcept + { +#if __cpp_rtti + return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); +#else + return 0; +#endif + } + + /// @cond undocumented + + // Constraint for overloads taking non-array types. +#if __cpp_concepts && __glibcxx_type_trait_variable_templates + template + requires (!is_array_v<_Tp>) + using _NonArray = _Tp; +#else + template + using _NonArray = __enable_if_t::value, _Tp>; +#endif + +#if __glibcxx_shared_ptr_arrays >= 201707L + // Constraint for overloads taking array types with unknown bound, U[]. +#if __cpp_concepts + template + requires is_array_v<_Tp> && (extent_v<_Tp> == 0) + using _UnboundedArray = _Tp; +#else + template + using _UnboundedArray + = __enable_if_t<__is_array_unknown_bounds<_Tp>::value, _Tp>; +#endif + + // Constraint for overloads taking array types with known bound, U[N]. +#if __cpp_concepts + template + requires (extent_v<_Tp> != 0) + using _BoundedArray = _Tp; +#else + template + using _BoundedArray + = __enable_if_t<__is_array_known_bounds<_Tp>::value, _Tp>; +#endif + +#if __glibcxx_smart_ptr_for_overwrite + // Constraint for overloads taking either non-array or bounded array, U[N]. +#if __cpp_concepts + template + requires (!is_array_v<_Tp>) || (extent_v<_Tp> != 0) + using _NotUnboundedArray = _Tp; +#else + template + using _NotUnboundedArray + = __enable_if_t::value, _Tp>; +#endif +#endif // smart_ptr_for_overwrite +#endif // shared_ptr_arrays + + /// @endcond + + /** + * @brief A smart pointer with reference-counted copy semantics. + * @headerfile memory + * @since C++11 + * + * A `shared_ptr` object is either empty or _owns_ a pointer passed + * to the constructor. Copies of a `shared_ptr` share ownership of + * the same pointer. When the last `shared_ptr` that owns the pointer + * is destroyed or reset, the owned pointer is freed (either by `delete` + * or by invoking a custom deleter that was passed to the constructor). + * + * A `shared_ptr` also stores another pointer, which is usually + * (but not always) the same pointer as it owns. The stored pointer + * can be retrieved by calling the `get()` member function. + * + * The equality and relational operators for `shared_ptr` only compare + * the stored pointer returned by `get()`, not the owned pointer. + * To test whether two `shared_ptr` objects share ownership of the same + * pointer see `std::shared_ptr::owner_before` and `std::owner_less`. + */ + template + class shared_ptr : public __shared_ptr<_Tp> + { + template + using _Constructible = typename enable_if< + is_constructible<__shared_ptr<_Tp>, _Args...>::value + >::type; + + template + using _Assignable = typename enable_if< + is_assignable<__shared_ptr<_Tp>&, _Arg>::value, shared_ptr& + >::type; + + public: + + /// The type pointed to by the stored pointer, remove_extent_t<_Tp> + using element_type = typename __shared_ptr<_Tp>::element_type; + +#ifdef __glibcxx_shared_ptr_weak_type // C++ >= 17 && HOSTED + /// The corresponding weak_ptr type for this shared_ptr + /// @since C++17 + using weak_type = weak_ptr<_Tp>; +#endif + /** + * @brief Construct an empty %shared_ptr. + * @post use_count()==0 && get()==0 + */ + constexpr shared_ptr() noexcept : __shared_ptr<_Tp>() { } + + shared_ptr(const shared_ptr&) noexcept = default; ///< Copy constructor + + /** + * @brief Construct a %shared_ptr that owns the pointer @a __p. + * @param __p A pointer that is convertible to element_type*. + * @post use_count() == 1 && get() == __p + * @throw std::bad_alloc, in which case @c delete @a __p is called. + */ + template> + explicit + shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { } + + /** + * @brief Construct a %shared_ptr that owns the pointer @a __p + * and the deleter @a __d. + * @param __p A pointer. + * @param __d A deleter. + * @post use_count() == 1 && get() == __p + * @throw std::bad_alloc, in which case @a __d(__p) is called. + * + * Requirements: _Deleter's copy constructor and destructor must + * not throw + * + * __shared_ptr will release __p by calling __d(__p) + */ + template> + shared_ptr(_Yp* __p, _Deleter __d) + : __shared_ptr<_Tp>(__p, std::move(__d)) { } + + /** + * @brief Construct a %shared_ptr that owns a null pointer + * and the deleter @a __d. + * @param __p A null pointer constant. + * @param __d A deleter. + * @post use_count() == 1 && get() == __p + * @throw std::bad_alloc, in which case @a __d(__p) is called. + * + * Requirements: _Deleter's copy constructor and destructor must + * not throw + * + * The last owner will call __d(__p) + */ + template + shared_ptr(nullptr_t __p, _Deleter __d) + : __shared_ptr<_Tp>(__p, std::move(__d)) { } + + /** + * @brief Construct a %shared_ptr that owns the pointer @a __p + * and the deleter @a __d. + * @param __p A pointer. + * @param __d A deleter. + * @param __a An allocator. + * @post use_count() == 1 && get() == __p + * @throw std::bad_alloc, in which case @a __d(__p) is called. + * + * Requirements: _Deleter's copy constructor and destructor must + * not throw _Alloc's copy constructor and destructor must not + * throw. + * + * __shared_ptr will release __p by calling __d(__p) + */ + template> + shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) + : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } + + /** + * @brief Construct a %shared_ptr that owns a null pointer + * and the deleter @a __d. + * @param __p A null pointer constant. + * @param __d A deleter. + * @param __a An allocator. + * @post use_count() == 1 && get() == __p + * @throw std::bad_alloc, in which case @a __d(__p) is called. + * + * Requirements: _Deleter's copy constructor and destructor must + * not throw _Alloc's copy constructor and destructor must not + * throw. + * + * The last owner will call __d(__p) + */ + template + shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) + : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } + + // Aliasing constructor + + /** + * @brief Constructs a `shared_ptr` instance that stores `__p` + * and shares ownership with `__r`. + * @param __r A `shared_ptr`. + * @param __p A pointer that will remain valid while `*__r` is valid. + * @post `get() == __p && use_count() == __r.use_count()` + * + * This can be used to construct a `shared_ptr` to a sub-object + * of an object managed by an existing `shared_ptr`. The complete + * object will remain valid while any `shared_ptr` owns it, even + * if they don't store a pointer to the complete object. + * + * @code + * shared_ptr> pii(new pair()); + * shared_ptr pi(pii, &pii->first); + * assert(pii.use_count() == 2); + * @endcode + */ + template + shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept + : __shared_ptr<_Tp>(__r, __p) { } + +#if __cplusplus > 201703L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2996. Missing rvalue overloads for shared_ptr operations + /** + * @brief Constructs a `shared_ptr` instance that stores `__p` + * and shares ownership with `__r`. + * @param __r A `shared_ptr`. + * @param __p A pointer that will remain valid while `*__r` is valid. + * @post `get() == __p && !__r.use_count() && !__r.get()` + * @since C++17 + * + * This can be used to construct a `shared_ptr` to a sub-object + * of an object managed by an existing `shared_ptr`. The complete + * object will remain valid while any `shared_ptr` owns it, even + * if they don't store a pointer to the complete object. + * + * @code + * shared_ptr> pii(new pair()); + * shared_ptr pi1(pii, &pii->first); + * assert(pii.use_count() == 2); + * shared_ptr pi2(std::move(pii), &pii->second); + * assert(pii.use_count() == 0); + * @endcode + */ + template + shared_ptr(shared_ptr<_Yp>&& __r, element_type* __p) noexcept + : __shared_ptr<_Tp>(std::move(__r), __p) { } +#endif + /** + * @brief If @a __r is empty, constructs an empty %shared_ptr; + * otherwise construct a %shared_ptr that shares ownership + * with @a __r. + * @param __r A %shared_ptr. + * @post get() == __r.get() && use_count() == __r.use_count() + */ + template&>> + shared_ptr(const shared_ptr<_Yp>& __r) noexcept + : __shared_ptr<_Tp>(__r) { } + + /** + * @brief Move-constructs a %shared_ptr instance from @a __r. + * @param __r A %shared_ptr rvalue. + * @post *this contains the old value of @a __r, @a __r is empty. + */ + shared_ptr(shared_ptr&& __r) noexcept + : __shared_ptr<_Tp>(std::move(__r)) { } + + /** + * @brief Move-constructs a %shared_ptr instance from @a __r. + * @param __r A %shared_ptr rvalue. + * @post *this contains the old value of @a __r, @a __r is empty. + */ + template>> + shared_ptr(shared_ptr<_Yp>&& __r) noexcept + : __shared_ptr<_Tp>(std::move(__r)) { } + + /** + * @brief Constructs a %shared_ptr that shares ownership with @a __r + * and stores a copy of the pointer stored in @a __r. + * @param __r A weak_ptr. + * @post use_count() == __r.use_count() + * @throw bad_weak_ptr when __r.expired(), + * in which case the constructor has no effect. + */ + template&>> + explicit shared_ptr(const weak_ptr<_Yp>& __r) + : __shared_ptr<_Tp>(__r) { } + +#if _GLIBCXX_USE_DEPRECATED +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + template>> + shared_ptr(auto_ptr<_Yp>&& __r); +#pragma GCC diagnostic pop +#endif + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2399. shared_ptr's constructor from unique_ptr should be constrained + template>> + shared_ptr(unique_ptr<_Yp, _Del>&& __r) + : __shared_ptr<_Tp>(std::move(__r)) { } + +#if __cplusplus <= 201402L && _GLIBCXX_USE_DEPRECATED + // This non-standard constructor exists to support conversions that + // were possible in C++11 and C++14 but are ill-formed in C++17. + // If an exception is thrown this constructor has no effect. + template, __sp_array_delete>* = 0> + shared_ptr(unique_ptr<_Yp, _Del>&& __r) + : __shared_ptr<_Tp>(std::move(__r), __sp_array_delete()) { } +#endif + + /** + * @brief Construct an empty %shared_ptr. + * @post use_count() == 0 && get() == nullptr + */ + constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { } + + shared_ptr& operator=(const shared_ptr&) noexcept = default; + + template + _Assignable&> + operator=(const shared_ptr<_Yp>& __r) noexcept + { + this->__shared_ptr<_Tp>::operator=(__r); + return *this; + } + +#if _GLIBCXX_USE_DEPRECATED +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + template + _Assignable> + operator=(auto_ptr<_Yp>&& __r) + { + this->__shared_ptr<_Tp>::operator=(std::move(__r)); + return *this; + } +#pragma GCC diagnostic pop +#endif + + shared_ptr& + operator=(shared_ptr&& __r) noexcept + { + this->__shared_ptr<_Tp>::operator=(std::move(__r)); + return *this; + } + + template + _Assignable> + operator=(shared_ptr<_Yp>&& __r) noexcept + { + this->__shared_ptr<_Tp>::operator=(std::move(__r)); + return *this; + } + + template + _Assignable> + operator=(unique_ptr<_Yp, _Del>&& __r) + { + this->__shared_ptr<_Tp>::operator=(std::move(__r)); + return *this; + } + + private: + // This constructor is non-standard, it is used by allocate_shared. + template + shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) + : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...) + { } + + template + friend shared_ptr<_NonArray<_Yp>> + allocate_shared(const _Alloc&, _Args&&...); + + template + friend shared_ptr<_NonArray<_Yp>> + make_shared(_Args&&...); + +#if __glibcxx_shared_ptr_arrays >= 201707L + // This constructor is non-standard, it is used by allocate_shared. + template*> + shared_ptr(const _Sp_counted_array_base<_Alloc>& __a, + _Init __init = nullptr) + : __shared_ptr<_Tp>(__a, __init) + { } + + template + friend shared_ptr<_UnboundedArray<_Yp>> + allocate_shared(const _Alloc&, size_t); + + template + friend shared_ptr<_UnboundedArray<_Yp>> + make_shared(size_t); + + template + friend shared_ptr<_UnboundedArray<_Yp>> + allocate_shared(const _Alloc&, size_t, const remove_extent_t<_Yp>&); + + template + friend shared_ptr<_UnboundedArray<_Yp>> + make_shared(size_t, const remove_extent_t<_Yp>&); + + template + friend shared_ptr<_BoundedArray<_Yp>> + allocate_shared(const _Alloc&); + + template + friend shared_ptr<_BoundedArray<_Yp>> + make_shared(); + + template + friend shared_ptr<_BoundedArray<_Yp>> + allocate_shared(const _Alloc&, const remove_extent_t<_Yp>&); + + template + friend shared_ptr<_BoundedArray<_Yp>> + make_shared(const remove_extent_t<_Yp>&); + +#if __glibcxx_smart_ptr_for_overwrite + template + friend shared_ptr<_NotUnboundedArray<_Yp>> + allocate_shared_for_overwrite(const _Alloc&); + + template + friend shared_ptr<_NotUnboundedArray<_Yp>> + make_shared_for_overwrite(); + + template + friend shared_ptr<_UnboundedArray<_Yp>> + allocate_shared_for_overwrite(const _Alloc&, size_t); + + template + friend shared_ptr<_UnboundedArray<_Yp>> + make_shared_for_overwrite(size_t); +#endif +#endif + + // This constructor is non-standard, it is used by weak_ptr::lock(). + shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t) noexcept + : __shared_ptr<_Tp>(__r, std::nothrow) { } + + friend class weak_ptr<_Tp>; + }; + +#if __cpp_deduction_guides >= 201606 + template + shared_ptr(weak_ptr<_Tp>) -> shared_ptr<_Tp>; + template + shared_ptr(unique_ptr<_Tp, _Del>) -> shared_ptr<_Tp>; +#endif + + // 20.7.2.2.7 shared_ptr comparisons + + /// @relates shared_ptr @{ + + /// Equality operator for shared_ptr objects, compares the stored pointers + template + _GLIBCXX_NODISCARD inline bool + operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept + { return __a.get() == __b.get(); } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept + { return !__a; } + +#ifdef __cpp_lib_three_way_comparison + template + inline strong_ordering + operator<=>(const shared_ptr<_Tp>& __a, + const shared_ptr<_Up>& __b) noexcept + { return compare_three_way()(__a.get(), __b.get()); } + + template + inline strong_ordering + operator<=>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept + { + using pointer = typename shared_ptr<_Tp>::element_type*; + return compare_three_way()(__a.get(), static_cast(nullptr)); + } +#else + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept + { return !__a; } + + /// Inequality operator for shared_ptr objects, compares the stored pointers + template + _GLIBCXX_NODISCARD inline bool + operator!=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept + { return __a.get() != __b.get(); } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept + { return (bool)__a; } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept + { return (bool)__a; } + + /// Relational operator for shared_ptr objects, compares the stored pointers + template + _GLIBCXX_NODISCARD inline bool + operator<(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept + { + using _Tp_elt = typename shared_ptr<_Tp>::element_type; + using _Up_elt = typename shared_ptr<_Up>::element_type; + using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; + return less<_Vp>()(__a.get(), __b.get()); + } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept + { + using _Tp_elt = typename shared_ptr<_Tp>::element_type; + return less<_Tp_elt*>()(__a.get(), nullptr); + } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept + { + using _Tp_elt = typename shared_ptr<_Tp>::element_type; + return less<_Tp_elt*>()(nullptr, __a.get()); + } + + /// Relational operator for shared_ptr objects, compares the stored pointers + template + _GLIBCXX_NODISCARD inline bool + operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept + { return !(__b < __a); } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept + { return !(nullptr < __a); } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept + { return !(__a < nullptr); } + + /// Relational operator for shared_ptr objects, compares the stored pointers + template + _GLIBCXX_NODISCARD inline bool + operator>(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept + { return (__b < __a); } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept + { return nullptr < __a; } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept + { return __a < nullptr; } + + /// Relational operator for shared_ptr objects, compares the stored pointers + template + _GLIBCXX_NODISCARD inline bool + operator>=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept + { return !(__a < __b); } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept + { return !(__a < nullptr); } + + /// shared_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept + { return !(nullptr < __a); } +#endif + + // 20.7.2.2.8 shared_ptr specialized algorithms. + + /// Swap overload for shared_ptr + template + inline void + swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept + { __a.swap(__b); } + + // 20.7.2.2.9 shared_ptr casts. + + /// Convert type of `shared_ptr`, via `static_cast` + template + inline shared_ptr<_Tp> + static_pointer_cast(const shared_ptr<_Up>& __r) noexcept + { + using _Sp = shared_ptr<_Tp>; + return _Sp(__r, static_cast(__r.get())); + } + + /// Convert type of `shared_ptr`, via `const_cast` + template + inline shared_ptr<_Tp> + const_pointer_cast(const shared_ptr<_Up>& __r) noexcept + { + using _Sp = shared_ptr<_Tp>; + return _Sp(__r, const_cast(__r.get())); + } + + /// Convert type of `shared_ptr`, via `dynamic_cast` + template + inline shared_ptr<_Tp> + dynamic_pointer_cast(const shared_ptr<_Up>& __r) noexcept + { + using _Sp = shared_ptr<_Tp>; + if (auto* __p = dynamic_cast(__r.get())) + return _Sp(__r, __p); + return _Sp(); + } + +#if __cplusplus >= 201703L + /// Convert type of `shared_ptr`, via `reinterpret_cast` + /// @since C++17 + template + inline shared_ptr<_Tp> + reinterpret_pointer_cast(const shared_ptr<_Up>& __r) noexcept + { + using _Sp = shared_ptr<_Tp>; + return _Sp(__r, reinterpret_cast(__r.get())); + } + +#if __cplusplus > 201703L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2996. Missing rvalue overloads for shared_ptr operations + + /// Convert type of `shared_ptr` rvalue, via `static_cast` + /// @since C++20 + template + inline shared_ptr<_Tp> + static_pointer_cast(shared_ptr<_Up>&& __r) noexcept + { + using _Sp = shared_ptr<_Tp>; + return _Sp(std::move(__r), + static_cast(__r.get())); + } + + /// Convert type of `shared_ptr` rvalue, via `const_cast` + /// @since C++20 + template + inline shared_ptr<_Tp> + const_pointer_cast(shared_ptr<_Up>&& __r) noexcept + { + using _Sp = shared_ptr<_Tp>; + return _Sp(std::move(__r), + const_cast(__r.get())); + } + + /// Convert type of `shared_ptr` rvalue, via `dynamic_cast` + /// @since C++20 + template + inline shared_ptr<_Tp> + dynamic_pointer_cast(shared_ptr<_Up>&& __r) noexcept + { + using _Sp = shared_ptr<_Tp>; + if (auto* __p = dynamic_cast(__r.get())) + return _Sp(std::move(__r), __p); + return _Sp(); + } + + /// Convert type of `shared_ptr` rvalue, via `reinterpret_cast` + /// @since C++20 + template + inline shared_ptr<_Tp> + reinterpret_pointer_cast(shared_ptr<_Up>&& __r) noexcept + { + using _Sp = shared_ptr<_Tp>; + return _Sp(std::move(__r), + reinterpret_cast(__r.get())); + } +#endif // C++20 +#endif // C++17 + + /// @} + + /** + * @brief A non-owning observer for a pointer owned by a shared_ptr + * @headerfile memory + * @since C++11 + * + * A weak_ptr provides a safe alternative to a raw pointer when you want + * a non-owning reference to an object that is managed by a shared_ptr. + * + * Unlike a raw pointer, a weak_ptr can be converted to a new shared_ptr + * that shares ownership with every other shared_ptr that already owns + * the pointer. In other words you can upgrade from a non-owning "weak" + * reference to an owning shared_ptr, without having access to any of + * the existing shared_ptr objects. + * + * Also unlike a raw pointer, a weak_ptr does not become "dangling" after + * the object it points to has been destroyed. Instead, a weak_ptr + * becomes _expired_ and can no longer be converted to a shared_ptr that + * owns the freed pointer, so you cannot accidentally access the pointed-to + * object after it has been destroyed. + */ + template + class weak_ptr : public __weak_ptr<_Tp> + { + template + using _Constructible = typename enable_if< + is_constructible<__weak_ptr<_Tp>, _Arg>::value + >::type; + + template + using _Assignable = typename enable_if< + is_assignable<__weak_ptr<_Tp>&, _Arg>::value, weak_ptr& + >::type; + + public: + constexpr weak_ptr() noexcept = default; + + template&>> + weak_ptr(const shared_ptr<_Yp>& __r) noexcept + : __weak_ptr<_Tp>(__r) { } + + weak_ptr(const weak_ptr&) noexcept = default; + + template&>> + weak_ptr(const weak_ptr<_Yp>& __r) noexcept + : __weak_ptr<_Tp>(__r) { } + + weak_ptr(weak_ptr&&) noexcept = default; + + template>> + weak_ptr(weak_ptr<_Yp>&& __r) noexcept + : __weak_ptr<_Tp>(std::move(__r)) { } + + weak_ptr& + operator=(const weak_ptr& __r) noexcept = default; + + template + _Assignable&> + operator=(const weak_ptr<_Yp>& __r) noexcept + { + this->__weak_ptr<_Tp>::operator=(__r); + return *this; + } + + template + _Assignable&> + operator=(const shared_ptr<_Yp>& __r) noexcept + { + this->__weak_ptr<_Tp>::operator=(__r); + return *this; + } + + weak_ptr& + operator=(weak_ptr&& __r) noexcept = default; + + template + _Assignable> + operator=(weak_ptr<_Yp>&& __r) noexcept + { + this->__weak_ptr<_Tp>::operator=(std::move(__r)); + return *this; + } + + shared_ptr<_Tp> + lock() const noexcept + { return shared_ptr<_Tp>(*this, std::nothrow); } + }; + +#if __cpp_deduction_guides >= 201606 + template + weak_ptr(shared_ptr<_Tp>) -> weak_ptr<_Tp>; +#endif + + // 20.7.2.3.6 weak_ptr specialized algorithms. + /// Swap overload for weak_ptr + /// @relates weak_ptr + template + inline void + swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept + { __a.swap(__b); } + + + /// Primary template owner_less + template + struct owner_less; + + /// Void specialization of owner_less compares either shared_ptr or weak_ptr + template<> + struct owner_less : _Sp_owner_less + { }; + + /// Partial specialization of owner_less for shared_ptr. + template + struct owner_less> + : public _Sp_owner_less, weak_ptr<_Tp>> + { }; + + /// Partial specialization of owner_less for weak_ptr. + template + struct owner_less> + : public _Sp_owner_less, shared_ptr<_Tp>> + { }; + + /** + * @brief Base class allowing use of the member function `shared_from_this`. + * @headerfile memory + * @since C++11 + */ + template + class enable_shared_from_this + { + protected: + constexpr enable_shared_from_this() noexcept { } + + enable_shared_from_this(const enable_shared_from_this&) noexcept { } + + enable_shared_from_this& + operator=(const enable_shared_from_this&) noexcept + { return *this; } + + ~enable_shared_from_this() { } + + public: + shared_ptr<_Tp> + shared_from_this() + { return shared_ptr<_Tp>(this->_M_weak_this); } + + shared_ptr + shared_from_this() const + { return shared_ptr(this->_M_weak_this); } + +#ifdef __glibcxx_enable_shared_from_this // C++ >= 17 && HOSTED + /** @{ + * Get a `weak_ptr` referring to the object that has `*this` as its base. + * @since C++17 + */ + weak_ptr<_Tp> + weak_from_this() noexcept + { return this->_M_weak_this; } + + weak_ptr + weak_from_this() const noexcept + { return this->_M_weak_this; } + /// @} +#endif + + private: + template + void + _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept + { _M_weak_this._M_assign(__p, __n); } + + // Found by ADL when this is an associated class. + friend const enable_shared_from_this* + __enable_shared_from_this_base(const __shared_count<>&, + const enable_shared_from_this* __p) + { return __p; } + + template + friend class __shared_ptr; + + mutable weak_ptr<_Tp> _M_weak_this; + }; + + /// @relates shared_ptr @{ + + /** + * @brief Create an object that is owned by a shared_ptr. + * @param __a An allocator. + * @param __args Arguments for the @a _Tp object's constructor. + * @return A shared_ptr that owns the newly created object. + * @throw An exception thrown from @a _Alloc::allocate or from the + * constructor of @a _Tp. + * + * A copy of @a __a will be used to allocate memory for the shared_ptr + * and the new object. + */ + template + inline shared_ptr<_NonArray<_Tp>> + allocate_shared(const _Alloc& __a, _Args&&... __args) + { + return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a}, + std::forward<_Args>(__args)...); + } + + /** + * @brief Create an object that is owned by a shared_ptr. + * @param __args Arguments for the @a _Tp object's constructor. + * @return A shared_ptr that owns the newly created object. + * @throw std::bad_alloc, or an exception thrown from the + * constructor of @a _Tp. + */ + template + inline shared_ptr<_NonArray<_Tp>> + make_shared(_Args&&... __args) + { + using _Alloc = allocator; + _Alloc __a; + return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a}, + std::forward<_Args>(__args)...); + } + +#if __glibcxx_shared_ptr_arrays >= 201707L + /// @cond undocumented + template> + auto + __make_shared_arr_tag(size_t __n, const _Alloc& __a = _Alloc()) noexcept + { + using _Up = remove_all_extents_t<_Tp>; + using _UpAlloc = __alloc_rebind<_Alloc, _Up>; + size_t __s = sizeof(remove_extent_t<_Tp>) / sizeof(_Up); + if (__builtin_mul_overflow(__s, __n, &__n)) + std::__throw_bad_array_new_length(); + return _Sp_counted_array_base<_UpAlloc>{_UpAlloc(__a), __n}; + } + /// @endcond + + template + inline shared_ptr<_UnboundedArray<_Tp>> + allocate_shared(const _Alloc& __a, size_t __n) + { + return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n, __a)); + } + + template + inline shared_ptr<_UnboundedArray<_Tp>> + make_shared(size_t __n) + { + return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n)); + } + + template + inline shared_ptr<_UnboundedArray<_Tp>> + allocate_shared(const _Alloc& __a, size_t __n, + const remove_extent_t<_Tp>& __u) + { + return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n, __a), + std::__addressof(__u)); + } + + template + inline shared_ptr<_UnboundedArray<_Tp>> + make_shared(size_t __n, const remove_extent_t<_Tp>& __u) + { + return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n), + std::__addressof(__u)); + } + + /// @cond undocumented + template> + auto + __make_shared_arrN_tag(const _Alloc& __a = _Alloc()) noexcept + { + using _Up = remove_all_extents_t<_Tp>; + using _UpAlloc = __alloc_rebind<_Alloc, _Up>; + size_t __n = sizeof(_Tp) / sizeof(_Up); + return _Sp_counted_array_base<_UpAlloc>{_UpAlloc(__a), __n}; + } + /// @endcond + + template + inline shared_ptr<_BoundedArray<_Tp>> + allocate_shared(const _Alloc& __a) + { + return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(__a)); + } + + template + inline shared_ptr<_BoundedArray<_Tp>> + make_shared() + { + return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>()); + } + + template + inline shared_ptr<_BoundedArray<_Tp>> + allocate_shared(const _Alloc& __a, const remove_extent_t<_Tp>& __u) + { + return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(__a), + std::__addressof(__u)); + } + + template + inline shared_ptr<_BoundedArray<_Tp>> + make_shared(const remove_extent_t<_Tp>& __u) + { + return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(), + std::__addressof(__u)); + } + +#if __glibcxx_smart_ptr_for_overwrite + template + inline shared_ptr<_NotUnboundedArray<_Tp>> + allocate_shared_for_overwrite(const _Alloc& __a) + { + if constexpr (is_array_v<_Tp>) + return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(__a), + _Sp_overwrite_tag{}); + else + { + // Rebind the allocator to _Sp_overwrite_tag, so that the + // relevant _Sp_counted_ptr_inplace specialization is used. + using _Alloc2 = __alloc_rebind<_Alloc, _Sp_overwrite_tag>; + _Alloc2 __a2 = __a; + return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc2>{__a2}); + } + } + + template + inline shared_ptr<_NotUnboundedArray<_Tp>> + make_shared_for_overwrite() + { + if constexpr (is_array_v<_Tp>) + return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(), + _Sp_overwrite_tag{}); + else + { + using _Alloc = allocator<_Sp_overwrite_tag>; + return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{{}}); + } + } + + template + inline shared_ptr<_UnboundedArray<_Tp>> + allocate_shared_for_overwrite(const _Alloc& __a, size_t __n) + { + return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n, __a), + _Sp_overwrite_tag{}); + } + + template + inline shared_ptr<_UnboundedArray<_Tp>> + make_shared_for_overwrite(size_t __n) + { + return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n), + _Sp_overwrite_tag{}); + } +#endif // smart_ptr_for_overwrite +#endif // shared_ptr_arrays + + /// std::hash specialization for shared_ptr. + template + struct hash> + : public __hash_base> + { + size_t + operator()(const shared_ptr<_Tp>& __s) const noexcept + { + return std::hash::element_type*>()(__s.get()); + } + }; + +#if __cpp_variable_templates + template + constexpr bool __is_shared_ptr = false; + template + constexpr bool __is_shared_ptr> = true; +#endif + + /// @} relates shared_ptr + /// @} group pointer_abstractions + +#if __cplusplus >= 201703L + namespace __detail::__variant + { + template struct _Never_valueless_alt; // see + + // Provide the strong exception-safety guarantee when emplacing a + // shared_ptr into a variant. + template + struct _Never_valueless_alt> + : std::true_type + { }; + + // Provide the strong exception-safety guarantee when emplacing a + // weak_ptr into a variant. + template + struct _Never_valueless_alt> + : std::true_type + { }; + } // namespace __detail::__variant +#endif // C++17 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // _SHARED_PTR_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@shared_ptr.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@shared_ptr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6453dc1fb1083124adf0aed2cdc0919fd102b388 GIT binary patch literal 72030 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 k$p+I@^n_Z;)bh6ynouj5!a!_. + +// GCC Note: Based on files from version 1.32.0 of the Boost library. + +// shared_count.hpp +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. + +// shared_ptr.hpp +// Copyright (C) 1998, 1999 Greg Colvin and Beman Dawes. +// Copyright (C) 2001, 2002, 2003 Peter Dimov + +// weak_ptr.hpp +// Copyright (C) 2001, 2002, 2003 Peter Dimov + +// enable_shared_from_this.hpp +// Copyright (C) 2002 Peter Dimov + +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +/** @file bits/shared_ptr_base.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _SHARED_PTR_BASE_H +#define _SHARED_PTR_BASE_H 1 + +#include +#include +#include +#include +#include +#include +#include // std::less +#include +#include +#include +#include +#if __cplusplus >= 202002L +# include +# include // std::align +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if _GLIBCXX_USE_DEPRECATED +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + template class auto_ptr; +#pragma GCC diagnostic pop +#endif + + /** + * @brief Exception possibly thrown by @c shared_ptr. + * @ingroup exceptions + */ + class bad_weak_ptr : public std::exception + { + public: + virtual char const* what() const noexcept; + + virtual ~bad_weak_ptr() noexcept; + }; + + // Substitute for bad_weak_ptr object in the case of -fno-exceptions. + inline void + __throw_bad_weak_ptr() + { _GLIBCXX_THROW_OR_ABORT(bad_weak_ptr()); } + + using __gnu_cxx::_Lock_policy; + using __gnu_cxx::__default_lock_policy; + using __gnu_cxx::_S_single; + using __gnu_cxx::_S_mutex; + using __gnu_cxx::_S_atomic; + + // Empty helper class except when the template argument is _S_mutex. + template<_Lock_policy _Lp> + class _Mutex_base + { + protected: + // The atomic policy uses fully-fenced builtins, single doesn't care. + enum { _S_need_barriers = 0 }; + }; + + template<> + class _Mutex_base<_S_mutex> + : public __gnu_cxx::__mutex + { + protected: + // This policy is used when atomic builtins are not available. + // The replacement atomic operations might not have the necessary + // memory barriers. + enum { _S_need_barriers = 1 }; + }; + + template<_Lock_policy _Lp = __default_lock_policy> + class _Sp_counted_base + : public _Mutex_base<_Lp> + { + public: + _Sp_counted_base() noexcept + : _M_use_count(1), _M_weak_count(1) { } + + virtual + ~_Sp_counted_base() noexcept + { } + + // Called when _M_use_count drops to zero, to release the resources + // managed by *this. + virtual void + _M_dispose() noexcept = 0; + + // Called when _M_weak_count drops to zero. + virtual void + _M_destroy() noexcept + { delete this; } + + virtual void* + _M_get_deleter(const std::type_info&) noexcept = 0; + + // Increment the use count (used when the count is greater than zero). + void + _M_add_ref_copy() + { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); } + + // Increment the use count if it is non-zero, throw otherwise. + void + _M_add_ref_lock() + { + if (!_M_add_ref_lock_nothrow()) + __throw_bad_weak_ptr(); + } + + // Increment the use count if it is non-zero. + bool + _M_add_ref_lock_nothrow() noexcept; + + // Decrement the use count. + void + _M_release() noexcept; + + // Called by _M_release() when the use count reaches zero. + void + _M_release_last_use() noexcept + { + _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_use_count); + _M_dispose(); + // There must be a memory barrier between dispose() and destroy() + // to ensure that the effects of dispose() are observed in the + // thread that runs destroy(). + // See http://gcc.gnu.org/ml/libstdc++/2005-11/msg00136.html + if (_Mutex_base<_Lp>::_S_need_barriers) + { + __atomic_thread_fence (__ATOMIC_ACQ_REL); + } + + // Be race-detector-friendly. For more info see bits/c++config. + _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count); + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, + -1) == 1) + { + _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count); + _M_destroy(); + } + } + + // As above, but 'noinline' to reduce code size on the cold path. + __attribute__((__noinline__)) + void + _M_release_last_use_cold() noexcept + { _M_release_last_use(); } + + // Increment the weak count. + void + _M_weak_add_ref() noexcept + { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); } + + // Decrement the weak count. + void + _M_weak_release() noexcept + { + // Be race-detector-friendly. For more info see bits/c++config. + _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count); + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1) + { + _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count); + if (_Mutex_base<_Lp>::_S_need_barriers) + { + // See _M_release(), + // destroy() must observe results of dispose() + __atomic_thread_fence (__ATOMIC_ACQ_REL); + } + _M_destroy(); + } + } + + long + _M_get_use_count() const noexcept + { + // No memory barrier is used here so there is no synchronization + // with other threads. + return __atomic_load_n(&_M_use_count, __ATOMIC_RELAXED); + } + + private: + _Sp_counted_base(_Sp_counted_base const&) = delete; + _Sp_counted_base& operator=(_Sp_counted_base const&) = delete; + + _Atomic_word _M_use_count; // #shared + _Atomic_word _M_weak_count; // #weak + (#shared != 0) + }; + + template<> + inline bool + _Sp_counted_base<_S_single>:: + _M_add_ref_lock_nothrow() noexcept + { + if (_M_use_count == 0) + return false; + ++_M_use_count; + return true; + } + + template<> + inline bool + _Sp_counted_base<_S_mutex>:: + _M_add_ref_lock_nothrow() noexcept + { + __gnu_cxx::__scoped_lock sentry(*this); + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) + { + _M_use_count = 0; + return false; + } + return true; + } + + template<> + inline bool + _Sp_counted_base<_S_atomic>:: + _M_add_ref_lock_nothrow() noexcept + { + // Perform lock-free add-if-not-zero operation. + _Atomic_word __count = _M_get_use_count(); + do + { + if (__count == 0) + return false; + // Replace the current counter value with the old value + 1, as + // long as it's not changed meanwhile. + } + while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1, + true, __ATOMIC_ACQ_REL, + __ATOMIC_RELAXED)); + return true; + } + + template<> + inline void + _Sp_counted_base<_S_single>::_M_add_ref_copy() + { ++_M_use_count; } + + template<> + inline void + _Sp_counted_base<_S_single>::_M_release() noexcept + { + if (--_M_use_count == 0) + { + _M_dispose(); + if (--_M_weak_count == 0) + _M_destroy(); + } + } + + template<> + inline void + _Sp_counted_base<_S_mutex>::_M_release() noexcept + { + // Be race-detector-friendly. For more info see bits/c++config. + _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_use_count); + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) + { + _M_release_last_use(); + } + } + + template<> + inline void + _Sp_counted_base<_S_atomic>::_M_release() noexcept + { + _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_use_count); +#if ! _GLIBCXX_TSAN + constexpr bool __lock_free + = __atomic_always_lock_free(sizeof(long long), 0) + && __atomic_always_lock_free(sizeof(_Atomic_word), 0); + constexpr bool __double_word + = sizeof(long long) == 2 * sizeof(_Atomic_word); + // The ref-count members follow the vptr, so are aligned to + // alignof(void*). + constexpr bool __aligned = __alignof(long long) <= alignof(void*); + if _GLIBCXX17_CONSTEXPR (__lock_free && __double_word && __aligned) + { + constexpr int __wordbits = __CHAR_BIT__ * sizeof(_Atomic_word); + constexpr int __shiftbits = __double_word ? __wordbits : 0; + constexpr long long __unique_ref = 1LL + (1LL << __shiftbits); + auto __both_counts = reinterpret_cast(&_M_use_count); + + _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count); + if (__atomic_load_n(__both_counts, __ATOMIC_ACQUIRE) == __unique_ref) + { + // Both counts are 1, so there are no weak references and + // we are releasing the last strong reference. No other + // threads can observe the effects of this _M_release() + // call (e.g. calling use_count()) without a data race. + _M_weak_count = _M_use_count = 0; + _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_use_count); + _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count); + _M_dispose(); + _M_destroy(); + return; + } + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) + [[__unlikely__]] + { + _M_release_last_use_cold(); + return; + } + } + else +#endif + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) + { + _M_release_last_use(); + } + } + + template<> + inline void + _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept + { ++_M_weak_count; } + + template<> + inline void + _Sp_counted_base<_S_single>::_M_weak_release() noexcept + { + if (--_M_weak_count == 0) + _M_destroy(); + } + + template<> + inline long + _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept + { return _M_use_count; } + + + // Forward declarations. + template + class __shared_ptr; + + template + class __weak_ptr; + + template + class __enable_shared_from_this; + + template + class shared_ptr; + + template + class weak_ptr; + + template + struct owner_less; + + template + class enable_shared_from_this; + + template<_Lock_policy _Lp = __default_lock_policy> + class __weak_count; + + template<_Lock_policy _Lp = __default_lock_policy> + class __shared_count; + +#ifdef __glibcxx_atomic_shared_ptr + template + class _Sp_atomic; +#endif + + // Counted ptr with no deleter or allocator support + template + class _Sp_counted_ptr final : public _Sp_counted_base<_Lp> + { + public: + explicit + _Sp_counted_ptr(_Ptr __p) noexcept + : _M_ptr(__p) { } + + virtual void + _M_dispose() noexcept + { delete _M_ptr; } + + virtual void + _M_destroy() noexcept + { delete this; } + + virtual void* + _M_get_deleter(const std::type_info&) noexcept + { return nullptr; } + + _Sp_counted_ptr(const _Sp_counted_ptr&) = delete; + _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete; + + private: + _Ptr _M_ptr; + }; + + template<> + inline void + _Sp_counted_ptr::_M_dispose() noexcept { } + + template<> + inline void + _Sp_counted_ptr::_M_dispose() noexcept { } + + template<> + inline void + _Sp_counted_ptr::_M_dispose() noexcept { } + + // FIXME: once __has_cpp_attribute(__no_unique_address__)) is true for + // all supported compilers we can greatly simplify _Sp_ebo_helper. + // N.B. unconditionally applying the attribute could change layout for + // final types, which currently cannot use EBO so have a unique address. + + template + struct _Sp_ebo_helper; + + /// Specialization using EBO. + template + struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp + { + explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { } + explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { } + + static _Tp& + _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); } + }; + + /// Specialization not using EBO. + template + struct _Sp_ebo_helper<_Nm, _Tp, false> + { + explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { } + explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { } + + static _Tp& + _S_get(_Sp_ebo_helper& __eboh) + { return __eboh._M_tp; } + + private: + _Tp _M_tp; + }; + + // Support for custom deleter and/or allocator + template + class _Sp_counted_deleter final : public _Sp_counted_base<_Lp> + { + class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc> + { + typedef _Sp_ebo_helper<0, _Deleter> _Del_base; + typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base; + + public: + _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept + : _Del_base(std::move(__d)), _Alloc_base(__a), _M_ptr(__p) + { } + + _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); } + _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); } + + _Ptr _M_ptr; + }; + + public: + using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>; + + // __d(__p) must not throw. + _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept + : _M_impl(__p, std::move(__d), _Alloc()) { } + + // __d(__p) must not throw. + _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept + : _M_impl(__p, std::move(__d), __a) { } + + ~_Sp_counted_deleter() noexcept { } + + virtual void + _M_dispose() noexcept + { _M_impl._M_del()(_M_impl._M_ptr); } + + virtual void + _M_destroy() noexcept + { + __allocator_type __a(_M_impl._M_alloc()); + __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; + this->~_Sp_counted_deleter(); + } + + virtual void* + _M_get_deleter(const type_info& __ti [[__gnu__::__unused__]]) noexcept + { +#if __cpp_rtti + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2400. shared_ptr's get_deleter() should use addressof() + return __ti == typeid(_Deleter) + ? std::__addressof(_M_impl._M_del()) + : nullptr; +#else + return nullptr; +#endif + } + + private: +#ifdef __glibcxx_out_ptr + template friend class out_ptr_t; +#endif + _Impl _M_impl; + }; + + // helpers for make_shared / allocate_shared + + struct _Sp_make_shared_tag + { + private: + template + friend class _Sp_counted_ptr_inplace; + + static const type_info& + _S_ti() noexcept _GLIBCXX_VISIBILITY(default) + { + alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { }; + return reinterpret_cast(__tag); + } + + static bool _S_eq(const type_info&) noexcept; + }; + + template + struct _Sp_alloc_shared_tag + { + const _Alloc& _M_a; + }; + + template + class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp> + { + class _Impl : _Sp_ebo_helper<0, _Alloc> + { + typedef _Sp_ebo_helper<0, _Alloc> _A_base; + + public: + explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { } + + _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); } + + __gnu_cxx::__aligned_buffer<__remove_cv_t<_Tp>> _M_storage; + }; + + public: + using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>; + + // Alloc parameter is not a reference so doesn't alias anything in __args + template + _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args) + : _M_impl(__a) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2070. allocate_shared should use allocator_traits::construct + allocator_traits<_Alloc>::construct(__a, _M_ptr(), + std::forward<_Args>(__args)...); // might throw + } + + ~_Sp_counted_ptr_inplace() noexcept { } + + virtual void + _M_dispose() noexcept + { + allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr()); + } + + // Override because the allocator needs to know the dynamic type + virtual void + _M_destroy() noexcept + { + __allocator_type __a(_M_impl._M_alloc()); + __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; + this->~_Sp_counted_ptr_inplace(); + } + + private: + friend class __shared_count<_Lp>; // To be able to call _M_ptr(). + + // No longer used, but code compiled against old libstdc++ headers + // might still call it from __shared_ptr ctor to get the pointer out. + virtual void* + _M_get_deleter(const std::type_info& __ti) noexcept override + { + // Check for the fake type_info first, so we don't try to access it + // as a real type_info object. Otherwise, check if it's the real + // type_info for this class. With RTTI enabled we can check directly, + // or call a library function to do it. + if (&__ti == &_Sp_make_shared_tag::_S_ti() + || +#if __cpp_rtti + __ti == typeid(_Sp_make_shared_tag) +#else + _Sp_make_shared_tag::_S_eq(__ti) +#endif + ) + return _M_ptr(); + return nullptr; + } + + __remove_cv_t<_Tp>* + _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); } + + _Impl _M_impl; + }; + +#ifdef __glibcxx_smart_ptr_for_overwrite // C++ >= 20 && HOSTED + struct _Sp_overwrite_tag { }; + + // Partial specialization used for make_shared_for_overwrite(). + // This partial specialization is used when the allocator's value type + // is the special _Sp_overwrite_tag type. +#if __cpp_concepts + template + requires is_same_v + class _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> final +#else + template class _Alloc, _Lock_policy _Lp> + class _Sp_counted_ptr_inplace<_Tp, _Alloc<_Sp_overwrite_tag>, _Lp> final +#endif + : public _Sp_counted_base<_Lp> + { + [[no_unique_address]] _Alloc _M_alloc; + + union { + remove_cv_t<_Tp> _M_obj; + char _M_unused; + }; + + friend class __shared_count<_Lp>; // To be able to call _M_ptr(). + + auto _M_ptr() noexcept { return std::__addressof(_M_obj); } + + public: + using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>; + + _Sp_counted_ptr_inplace(const _Alloc& __a) + : _M_alloc(__a) + { + ::new((void*)_M_ptr()) _Tp; // default-initialized, for overwrite. + } + + ~_Sp_counted_ptr_inplace() noexcept { } + + virtual void + _M_dispose() noexcept + { + _M_obj.~_Tp(); + } + + // Override because the allocator needs to know the dynamic type + virtual void + _M_destroy() noexcept + { + using pointer = typename allocator_traits<__allocator_type>::pointer; + __allocator_type __a(_M_alloc); + auto __p = pointer_traits::pointer_to(*this); + __allocated_ptr<__allocator_type> __guard_ptr{ __a, __p }; + this->~_Sp_counted_ptr_inplace(); + } + + void* + _M_get_deleter(const std::type_info&) noexcept override + { return nullptr; } + }; +#endif // __glibcxx_smart_ptr_for_overwrite + +#if __glibcxx_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED + struct _Sp_overwrite_tag; + + // For make_shared, make_shared, allocate_shared etc. + template + struct _Sp_counted_array_base + { + [[no_unique_address]] _Alloc _M_alloc{}; + size_t _M_n = 0; + bool _M_overwrite = false; + + typename allocator_traits<_Alloc>::pointer + _M_alloc_array(size_t __tail) + { + return allocator_traits<_Alloc>::allocate(_M_alloc, _M_n + __tail); + } + + void + _M_dealloc_array(typename allocator_traits<_Alloc>::pointer __p, + size_t __tail) + { + allocator_traits<_Alloc>::deallocate(_M_alloc, __p, _M_n + __tail); + } + + // Init the array elements + template + void + _M_init(typename allocator_traits<_Alloc>::value_type* __p, + _Init __init) + { + using _Tp = remove_pointer_t<_Init>; + using _Up = typename allocator_traits<_Alloc>::value_type; + + if constexpr (is_same_v<_Init, _Sp_overwrite_tag>) + { + std::uninitialized_default_construct_n(__p, _M_n); + _M_overwrite = true; + } + else if (__init == nullptr) + std::__uninitialized_default_n_a(__p, _M_n, _M_alloc); + else if constexpr (!is_array_v<_Tp>) + std::__uninitialized_fill_n_a(__p, _M_n, *__init, _M_alloc); + else + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-local-typedefs" + struct _Iter + { + using value_type = _Up; + using difference_type = ptrdiff_t; + using pointer = const _Up*; + using reference = const _Up&; + using iterator_category = forward_iterator_tag; + + const _Up* _M_p; + size_t _M_len; + size_t _M_pos; + + _Iter& operator++() { ++_M_pos; return *this; } + _Iter operator++(int) { auto __i(*this); ++_M_pos; return __i; } + + reference operator*() const { return _M_p[_M_pos % _M_len]; } + pointer operator->() const { return _M_p + (_M_pos % _M_len); } + + bool operator==(const _Iter& __i) const + { return _M_pos == __i._M_pos; } + }; +#pragma GCC diagnostic pop + + _Iter __first{_S_first_elem(__init), sizeof(_Tp) / sizeof(_Up)}; + _Iter __last = __first; + __last._M_pos = _M_n; + std::__uninitialized_copy_a(__first, __last, __p, _M_alloc); + } + } + + protected: + // Destroy the array elements + void + _M_dispose_array(typename allocator_traits<_Alloc>::value_type* __p) + { + if (_M_overwrite) + std::destroy_n(__p, _M_n); + else + { + size_t __n = _M_n; + while (__n--) + allocator_traits<_Alloc>::destroy(_M_alloc, __p + __n); + } + } + + private: + template + static _Tp* + _S_first_elem(_Tp* __p) { return __p; } + + template + static auto + _S_first_elem(_Tp (*__p)[_Nm]) { return _S_first_elem(*__p); } + }; + + // Control block for make_shared, make_shared etc. that will be + // placed into unused memory at the end of the array. + template + class _Sp_counted_array final + : public _Sp_counted_base<_Lp>, _Sp_counted_array_base<_Alloc> + { + using pointer = typename allocator_traits<_Alloc>::pointer; + + pointer _M_alloc_ptr; + + auto _M_ptr() const noexcept { return std::to_address(_M_alloc_ptr); } + + friend class __shared_count<_Lp>; // To be able to call _M_ptr(). + + public: + _Sp_counted_array(const _Sp_counted_array_base<_Alloc>& __a, + pointer __p) noexcept + : _Sp_counted_array_base<_Alloc>(__a), _M_alloc_ptr(__p) + { } + + ~_Sp_counted_array() = default; + + virtual void + _M_dispose() noexcept + { + if (this->_M_n) + this->_M_dispose_array(_M_ptr()); + } + + // Override because the allocator needs to know the dynamic type + virtual void + _M_destroy() noexcept + { + _Sp_counted_array_base<_Alloc> __a = *this; + pointer __p = _M_alloc_ptr; + this->~_Sp_counted_array(); + __a._M_dealloc_array(__p, _S_tail()); + } + + // Returns the number of additional array elements that must be + // allocated in order to store a _Sp_counted_array at the end. + static constexpr size_t + _S_tail() + { + // The array elemenent type. + using _Tp = typename allocator_traits<_Alloc>::value_type; + + // The space needed to store a _Sp_counted_array object. + size_t __bytes = sizeof(_Sp_counted_array); + + // Add any padding needed for manual alignment within the buffer. + if constexpr (alignof(_Tp) < alignof(_Sp_counted_array)) + __bytes += alignof(_Sp_counted_array) - alignof(_Tp); + + return (__bytes + sizeof(_Tp) - 1) / sizeof(_Tp); + } + + void* + _M_get_deleter(const std::type_info&) noexcept override + { return nullptr; } + }; +#endif // __glibcxx_shared_ptr_arrays >= 201707L + + // The default deleter for shared_ptr and shared_ptr. + struct __sp_array_delete + { + template + void operator()(_Yp* __p) const { delete[] __p; } + }; + + template<_Lock_policy _Lp> + class __shared_count + { + // Prevent _Sp_alloc_shared_tag from matching the shared_ptr(P, D) ctor. + template + struct __not_alloc_shared_tag { using type = void; }; + + template + struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { }; + +#if __glibcxx_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED + template + struct __not_alloc_shared_tag<_Sp_counted_array_base<_Alloc>> { }; +#endif + + public: + constexpr __shared_count() noexcept : _M_pi(0) + { } + + template + explicit + __shared_count(_Ptr __p) : _M_pi(0) + { + __try + { + _M_pi = new _Sp_counted_ptr<_Ptr, _Lp>(__p); + } + __catch(...) + { + delete __p; + __throw_exception_again; + } + } + + template + __shared_count(_Ptr __p, /* is_array = */ false_type) + : __shared_count(__p) + { } + + template + __shared_count(_Ptr __p, /* is_array = */ true_type) + : __shared_count(__p, __sp_array_delete{}, allocator()) + { } + + template::type> + __shared_count(_Ptr __p, _Deleter __d) + : __shared_count(__p, std::move(__d), allocator()) + { } + + template::type> + __shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0) + { + typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type; + __try + { + typename _Sp_cd_type::__allocator_type __a2(__a); + auto __guard = std::__allocate_guarded(__a2); + _Sp_cd_type* __mem = __guard.get(); + ::new (__mem) _Sp_cd_type(__p, std::move(__d), std::move(__a)); + _M_pi = __mem; + __guard = nullptr; + } + __catch(...) + { + __d(__p); // Call _Deleter on __p. + __throw_exception_again; + } + } + + template + __shared_count(_Tp*& __p, _Sp_alloc_shared_tag<_Alloc> __a, + _Args&&... __args) + { + using _Tp2 = __remove_cv_t<_Tp>; + using _Sp_cp_type = _Sp_counted_ptr_inplace<_Tp2, _Alloc, _Lp>; + typename _Sp_cp_type::__allocator_type __a2(__a._M_a); + auto __guard = std::__allocate_guarded(__a2); + _Sp_cp_type* __mem = __guard.get(); + auto __pi = ::new (__mem) + _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...); + __guard = nullptr; + _M_pi = __pi; + __p = __pi->_M_ptr(); + } + +#if __glibcxx_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED + template + __shared_count(_Tp*& __p, const _Sp_counted_array_base<_Alloc>& __a, + _Init __init) + { + using _Up = remove_all_extents_t<_Tp>; + static_assert(is_same_v<_Up, typename _Alloc::value_type>); + + using _Sp_ca_type = _Sp_counted_array<_Alloc, _Lp>; + const size_t __tail = _Sp_ca_type::_S_tail(); + + struct _Guarded_ptr : _Sp_counted_array_base<_Alloc> + { + typename allocator_traits<_Alloc>::pointer _M_ptr; + + _Guarded_ptr(_Sp_counted_array_base<_Alloc> __a) + : _Sp_counted_array_base<_Alloc>(__a), + _M_ptr(this->_M_alloc_array(_Sp_ca_type::_S_tail())) + { } + + ~_Guarded_ptr() + { + if (_M_ptr) + this->_M_dealloc_array(_M_ptr, _Sp_ca_type::_S_tail()); + } + }; + + _Guarded_ptr __guard{__a}; + _Up* const __raw = std::to_address(__guard._M_ptr); + __guard._M_init(__raw, __init); // might throw + + void* __c = __raw + __a._M_n; + if constexpr (alignof(_Up) < alignof(_Sp_ca_type)) + { + size_t __space = sizeof(_Up) * __tail; + __c = std::align(alignof(_Sp_ca_type), sizeof(_Sp_ca_type), + __c, __space); + } + auto __pi = ::new(__c) _Sp_ca_type(__guard, __guard._M_ptr); + __guard._M_ptr = nullptr; + _M_pi = __pi; + __p = reinterpret_cast<_Tp*>(__raw); + } +#endif + +#if _GLIBCXX_USE_DEPRECATED +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + // Special case for auto_ptr<_Tp> to provide the strong guarantee. + template + explicit + __shared_count(std::auto_ptr<_Tp>&& __r); +#pragma GCC diagnostic pop +#endif + + // Special case for unique_ptr<_Tp,_Del> to provide the strong guarantee. + template + explicit + __shared_count(std::unique_ptr<_Tp, _Del>&& __r) : _M_pi(0) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2415. Inconsistency between unique_ptr and shared_ptr + if (__r.get() == nullptr) + return; + + using _Ptr = typename unique_ptr<_Tp, _Del>::pointer; + using _Del2 = __conditional_t::value, + reference_wrapper::type>, + _Del>; + using _Sp_cd_type + = _Sp_counted_deleter<_Ptr, _Del2, allocator, _Lp>; + using _Alloc = allocator<_Sp_cd_type>; + using _Alloc_traits = allocator_traits<_Alloc>; + _Alloc __a; + _Sp_cd_type* __mem = _Alloc_traits::allocate(__a, 1); + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3548. shared_ptr construction from unique_ptr should move + // (not copy) the deleter + _Alloc_traits::construct(__a, __mem, __r.release(), + std::forward<_Del>(__r.get_deleter())); + _M_pi = __mem; + } + + // Throw bad_weak_ptr when __r._M_get_use_count() == 0. + explicit __shared_count(const __weak_count<_Lp>& __r); + + // Does not throw if __r._M_get_use_count() == 0, caller must check. + explicit + __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept; + + ~__shared_count() noexcept + { + if (_M_pi != nullptr) + _M_pi->_M_release(); + } + + __shared_count(const __shared_count& __r) noexcept + : _M_pi(__r._M_pi) + { + if (_M_pi != nullptr) + _M_pi->_M_add_ref_copy(); + } + + __shared_count& + operator=(const __shared_count& __r) noexcept + { + _Sp_counted_base<_Lp>* __tmp = __r._M_pi; + if (__tmp != _M_pi) + { + if (__tmp != nullptr) + __tmp->_M_add_ref_copy(); + if (_M_pi != nullptr) + _M_pi->_M_release(); + _M_pi = __tmp; + } + return *this; + } + + void + _M_swap(__shared_count& __r) noexcept + { + _Sp_counted_base<_Lp>* __tmp = __r._M_pi; + __r._M_pi = _M_pi; + _M_pi = __tmp; + } + + long + _M_get_use_count() const noexcept + { return _M_pi ? _M_pi->_M_get_use_count() : 0; } + + bool + _M_unique() const noexcept + { return this->_M_get_use_count() == 1; } + + void* + _M_get_deleter(const std::type_info& __ti) const noexcept + { return _M_pi ? _M_pi->_M_get_deleter(__ti) : nullptr; } + + bool + _M_less(const __shared_count& __rhs) const noexcept + { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } + + bool + _M_less(const __weak_count<_Lp>& __rhs) const noexcept + { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } + + // Friend function injected into enclosing namespace and found by ADL + friend inline bool + operator==(const __shared_count& __a, const __shared_count& __b) noexcept + { return __a._M_pi == __b._M_pi; } + + private: + friend class __weak_count<_Lp>; +#ifdef __glibcxx_atomic_shared_ptr + template friend class _Sp_atomic; +#endif +#ifdef __glibcxx_out_ptr + template friend class out_ptr_t; +#endif + + _Sp_counted_base<_Lp>* _M_pi; + }; + + + template<_Lock_policy _Lp> + class __weak_count + { + public: + constexpr __weak_count() noexcept : _M_pi(nullptr) + { } + + __weak_count(const __shared_count<_Lp>& __r) noexcept + : _M_pi(__r._M_pi) + { + if (_M_pi != nullptr) + _M_pi->_M_weak_add_ref(); + } + + __weak_count(const __weak_count& __r) noexcept + : _M_pi(__r._M_pi) + { + if (_M_pi != nullptr) + _M_pi->_M_weak_add_ref(); + } + + __weak_count(__weak_count&& __r) noexcept + : _M_pi(__r._M_pi) + { __r._M_pi = nullptr; } + + ~__weak_count() noexcept + { + if (_M_pi != nullptr) + _M_pi->_M_weak_release(); + } + + __weak_count& + operator=(const __shared_count<_Lp>& __r) noexcept + { + _Sp_counted_base<_Lp>* __tmp = __r._M_pi; + if (__tmp != nullptr) + __tmp->_M_weak_add_ref(); + if (_M_pi != nullptr) + _M_pi->_M_weak_release(); + _M_pi = __tmp; + return *this; + } + + __weak_count& + operator=(const __weak_count& __r) noexcept + { + _Sp_counted_base<_Lp>* __tmp = __r._M_pi; + if (__tmp != nullptr) + __tmp->_M_weak_add_ref(); + if (_M_pi != nullptr) + _M_pi->_M_weak_release(); + _M_pi = __tmp; + return *this; + } + + __weak_count& + operator=(__weak_count&& __r) noexcept + { + if (_M_pi != nullptr) + _M_pi->_M_weak_release(); + _M_pi = __r._M_pi; + __r._M_pi = nullptr; + return *this; + } + + void + _M_swap(__weak_count& __r) noexcept + { + _Sp_counted_base<_Lp>* __tmp = __r._M_pi; + __r._M_pi = _M_pi; + _M_pi = __tmp; + } + + long + _M_get_use_count() const noexcept + { return _M_pi != nullptr ? _M_pi->_M_get_use_count() : 0; } + + bool + _M_less(const __weak_count& __rhs) const noexcept + { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } + + bool + _M_less(const __shared_count<_Lp>& __rhs) const noexcept + { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } + + // Friend function injected into enclosing namespace and found by ADL + friend inline bool + operator==(const __weak_count& __a, const __weak_count& __b) noexcept + { return __a._M_pi == __b._M_pi; } + + private: + friend class __shared_count<_Lp>; +#ifdef __glibcxx_atomic_shared_ptr + template friend class _Sp_atomic; +#endif + + _Sp_counted_base<_Lp>* _M_pi; + }; + + // Now that __weak_count is defined we can define this constructor: + template<_Lock_policy _Lp> + inline + __shared_count<_Lp>::__shared_count(const __weak_count<_Lp>& __r) + : _M_pi(__r._M_pi) + { + if (_M_pi == nullptr || !_M_pi->_M_add_ref_lock_nothrow()) + __throw_bad_weak_ptr(); + } + + // Now that __weak_count is defined we can define this constructor: + template<_Lock_policy _Lp> + inline + __shared_count<_Lp>:: + __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept + : _M_pi(__r._M_pi) + { + if (_M_pi && !_M_pi->_M_add_ref_lock_nothrow()) + _M_pi = nullptr; + } + + // Helper traits for shared_ptr of array: + + // A pointer type Y* is said to be compatible with a pointer type T* when + // either Y* is convertible to T* or Y is U[N] and T is U cv []. + template + struct __sp_compatible_with + : false_type + { }; + + template + struct __sp_compatible_with<_Yp*, _Tp*> + : is_convertible<_Yp*, _Tp*>::type + { }; + + template + struct __sp_compatible_with<_Up(*)[_Nm], _Up(*)[]> + : true_type + { }; + + template + struct __sp_compatible_with<_Up(*)[_Nm], const _Up(*)[]> + : true_type + { }; + + template + struct __sp_compatible_with<_Up(*)[_Nm], volatile _Up(*)[]> + : true_type + { }; + + template + struct __sp_compatible_with<_Up(*)[_Nm], const volatile _Up(*)[]> + : true_type + { }; + + // Test conversion from Y(*)[N] to U(*)[N] without forming invalid type Y[N]. + template + struct __sp_is_constructible_arrN + : false_type + { }; + + template + struct __sp_is_constructible_arrN<_Up, _Nm, _Yp, __void_t<_Yp[_Nm]>> + : is_convertible<_Yp(*)[_Nm], _Up(*)[_Nm]>::type + { }; + + // Test conversion from Y(*)[] to U(*)[] without forming invalid type Y[]. + template + struct __sp_is_constructible_arr + : false_type + { }; + + template + struct __sp_is_constructible_arr<_Up, _Yp, __void_t<_Yp[]>> + : is_convertible<_Yp(*)[], _Up(*)[]>::type + { }; + + // Trait to check if shared_ptr can be constructed from Y*. + template + struct __sp_is_constructible; + + // When T is U[N], Y(*)[N] shall be convertible to T*; + template + struct __sp_is_constructible<_Up[_Nm], _Yp> + : __sp_is_constructible_arrN<_Up, _Nm, _Yp>::type + { }; + + // when T is U[], Y(*)[] shall be convertible to T*; + template + struct __sp_is_constructible<_Up[], _Yp> + : __sp_is_constructible_arr<_Up, _Yp>::type + { }; + + // otherwise, Y* shall be convertible to T*. + template + struct __sp_is_constructible + : is_convertible<_Yp*, _Tp*>::type + { }; + + + template + [[__gnu__::__always_inline__]] + inline _Tp* + __shared_ptr_deref(_Tp* __p) + { + __glibcxx_assert(__p != nullptr); + return __p; + } + + // Define operator* and operator-> for shared_ptr. + template::value, bool = is_void<_Tp>::value> + class __shared_ptr_access + { + public: + using element_type = _Tp; + + element_type& + operator*() const noexcept + { return *std::__shared_ptr_deref(_M_get()); } + + element_type* + operator->() const noexcept + { + _GLIBCXX_DEBUG_PEDASSERT(_M_get() != nullptr); + return _M_get(); + } + + private: + element_type* + _M_get() const noexcept + { return static_cast*>(this)->get(); } + }; + + // Define operator-> for shared_ptr. + template + class __shared_ptr_access<_Tp, _Lp, false, true> + { + public: + using element_type = _Tp; + + element_type* + operator->() const noexcept + { + auto __ptr = static_cast*>(this)->get(); + _GLIBCXX_DEBUG_PEDASSERT(__ptr != nullptr); + return __ptr; + } + }; + + // Define operator[] for shared_ptr and shared_ptr. + template + class __shared_ptr_access<_Tp, _Lp, true, false> + { + public: + using element_type = typename remove_extent<_Tp>::type; + +#if __cplusplus <= 201402L + [[__deprecated__("shared_ptr::operator* is absent from C++17")]] + element_type& + operator*() const noexcept + { return *std::__shared_ptr_deref(_M_get()); } + + [[__deprecated__("shared_ptr::operator-> is absent from C++17")]] + element_type* + operator->() const noexcept + { + _GLIBCXX_DEBUG_PEDASSERT(_M_get() != nullptr); + return _M_get(); + } +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + element_type& + operator[](ptrdiff_t __i) const noexcept + { + if constexpr (extent<_Tp>::value) + __glibcxx_assert(__i < extent<_Tp>::value); + return std::__shared_ptr_deref(_M_get())[__i]; + } +#pragma GCC diagnostic pop + + private: + element_type* + _M_get() const noexcept + { return static_cast*>(this)->get(); } + }; + + template + class __shared_ptr + : public __shared_ptr_access<_Tp, _Lp> + { + public: + using element_type = typename remove_extent<_Tp>::type; + + private: + // Constraint for taking ownership of a pointer of type _Yp*: + template + using _SafeConv + = typename enable_if<__sp_is_constructible<_Tp, _Yp>::value>::type; + + // Constraint for construction from shared_ptr and weak_ptr: + template + using _Compatible = typename + enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; + + // Constraint for assignment from shared_ptr and weak_ptr: + template + using _Assignable = _Compatible<_Yp, __shared_ptr&>; + + // Constraint for construction from unique_ptr: + template::pointer> + using _UniqCompatible = __enable_if_t<__and_< + __sp_compatible_with<_Yp*, _Tp*>, + is_convertible<_Ptr, element_type*>, + is_move_constructible<_Del> + >::value, _Res>; + + // Constraint for assignment from unique_ptr: + template + using _UniqAssignable = _UniqCompatible<_Yp, _Del, __shared_ptr&>; + + public: + +#if __cplusplus > 201402L + using weak_type = __weak_ptr<_Tp, _Lp>; +#endif + + constexpr __shared_ptr() noexcept + : _M_ptr(0), _M_refcount() + { } + + template> + explicit + __shared_ptr(_Yp* __p) + : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type()) + { + static_assert( !is_void<_Yp>::value, "incomplete type" ); + static_assert( sizeof(_Yp) > 0, "incomplete type" ); + _M_enable_shared_from_this_with(__p); + } + + template> + __shared_ptr(_Yp* __p, _Deleter __d) + : _M_ptr(__p), _M_refcount(__p, std::move(__d)) + { + static_assert(__is_invocable<_Deleter&, _Yp*&>::value, + "deleter expression d(p) is well-formed"); + _M_enable_shared_from_this_with(__p); + } + + template> + __shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) + : _M_ptr(__p), _M_refcount(__p, std::move(__d), std::move(__a)) + { + static_assert(__is_invocable<_Deleter&, _Yp*&>::value, + "deleter expression d(p) is well-formed"); + _M_enable_shared_from_this_with(__p); + } + + template + __shared_ptr(nullptr_t __p, _Deleter __d) + : _M_ptr(0), _M_refcount(__p, std::move(__d)) + { } + + template + __shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) + : _M_ptr(0), _M_refcount(__p, std::move(__d), std::move(__a)) + { } + + // Aliasing constructor + template + __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r, + element_type* __p) noexcept + : _M_ptr(__p), _M_refcount(__r._M_refcount) // never throws + { } + + // Aliasing constructor + template + __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r, + element_type* __p) noexcept + : _M_ptr(__p), _M_refcount() + { + _M_refcount._M_swap(__r._M_refcount); + __r._M_ptr = nullptr; + } + + __shared_ptr(const __shared_ptr&) noexcept = default; + __shared_ptr& operator=(const __shared_ptr&) noexcept = default; + ~__shared_ptr() = default; + + template> + __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept + : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) + { } + + __shared_ptr(__shared_ptr&& __r) noexcept + : _M_ptr(__r._M_ptr), _M_refcount() + { + _M_refcount._M_swap(__r._M_refcount); + __r._M_ptr = nullptr; + } + + template> + __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r) noexcept + : _M_ptr(__r._M_ptr), _M_refcount() + { + _M_refcount._M_swap(__r._M_refcount); + __r._M_ptr = nullptr; + } + + template> + explicit __shared_ptr(const __weak_ptr<_Yp, _Lp>& __r) + : _M_refcount(__r._M_refcount) // may throw + { + // It is now safe to copy __r._M_ptr, as + // _M_refcount(__r._M_refcount) did not throw. + _M_ptr = __r._M_ptr; + } + + // If an exception is thrown this constructor has no effect. + template> + __shared_ptr(unique_ptr<_Yp, _Del>&& __r) + : _M_ptr(__r.get()), _M_refcount() + { + auto __raw = std::__to_address(__r.get()); + _M_refcount = __shared_count<_Lp>(std::move(__r)); + _M_enable_shared_from_this_with(__raw); + } + +#if __cplusplus <= 201402L && _GLIBCXX_USE_DEPRECATED + protected: + // If an exception is thrown this constructor has no effect. + template>, is_array<_Tp1>, + is_convertible::pointer, _Tp*> + >::value, bool>::type = true> + __shared_ptr(unique_ptr<_Tp1, _Del>&& __r, __sp_array_delete) + : _M_ptr(__r.get()), _M_refcount() + { + auto __raw = std::__to_address(__r.get()); + _M_refcount = __shared_count<_Lp>(std::move(__r)); + _M_enable_shared_from_this_with(__raw); + } + public: +#endif + +#if _GLIBCXX_USE_DEPRECATED +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + // Postcondition: use_count() == 1 and __r.get() == 0 + template> + __shared_ptr(auto_ptr<_Yp>&& __r); +#pragma GCC diagnostic pop +#endif + + constexpr __shared_ptr(nullptr_t) noexcept : __shared_ptr() { } + + template + _Assignable<_Yp> + operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept + { + _M_ptr = __r._M_ptr; + _M_refcount = __r._M_refcount; // __shared_count::op= doesn't throw + return *this; + } + +#if _GLIBCXX_USE_DEPRECATED +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + template + _Assignable<_Yp> + operator=(auto_ptr<_Yp>&& __r) + { + __shared_ptr(std::move(__r)).swap(*this); + return *this; + } +#pragma GCC diagnostic pop +#endif + + __shared_ptr& + operator=(__shared_ptr&& __r) noexcept + { + __shared_ptr(std::move(__r)).swap(*this); + return *this; + } + + template + _Assignable<_Yp> + operator=(__shared_ptr<_Yp, _Lp>&& __r) noexcept + { + __shared_ptr(std::move(__r)).swap(*this); + return *this; + } + + template + _UniqAssignable<_Yp, _Del> + operator=(unique_ptr<_Yp, _Del>&& __r) + { + __shared_ptr(std::move(__r)).swap(*this); + return *this; + } + + void + reset() noexcept + { __shared_ptr().swap(*this); } + + template + _SafeConv<_Yp> + reset(_Yp* __p) // _Yp must be complete. + { + // Catch self-reset errors. + __glibcxx_assert(__p == nullptr || __p != _M_ptr); + __shared_ptr(__p).swap(*this); + } + + template + _SafeConv<_Yp> + reset(_Yp* __p, _Deleter __d) + { __shared_ptr(__p, std::move(__d)).swap(*this); } + + template + _SafeConv<_Yp> + reset(_Yp* __p, _Deleter __d, _Alloc __a) + { __shared_ptr(__p, std::move(__d), std::move(__a)).swap(*this); } + + /// Return the stored pointer. + element_type* + get() const noexcept + { return _M_ptr; } + + /// Return true if the stored pointer is not null. + explicit operator bool() const noexcept + { return _M_ptr != nullptr; } + + /// Return true if use_count() == 1. + bool + unique() const noexcept + { return _M_refcount._M_unique(); } + + /// If *this owns a pointer, return the number of owners, otherwise zero. + long + use_count() const noexcept + { return _M_refcount._M_get_use_count(); } + + /// Exchange both the owned pointer and the stored pointer. + void + swap(__shared_ptr<_Tp, _Lp>& __other) noexcept + { + std::swap(_M_ptr, __other._M_ptr); + _M_refcount._M_swap(__other._M_refcount); + } + + /** @brief Define an ordering based on ownership. + * + * This function defines a strict weak ordering between two shared_ptr + * or weak_ptr objects, such that one object is less than the other + * unless they share ownership of the same pointer, or are both empty. + * @{ + */ + template + bool + owner_before(__shared_ptr<_Tp1, _Lp> const& __rhs) const noexcept + { return _M_refcount._M_less(__rhs._M_refcount); } + + template + bool + owner_before(__weak_ptr<_Tp1, _Lp> const& __rhs) const noexcept + { return _M_refcount._M_less(__rhs._M_refcount); } + /// @} + + protected: + // This constructor is non-standard, it is used by allocate_shared. + template + __shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) + : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...) + { _M_enable_shared_from_this_with(_M_ptr); } + + template + friend __shared_ptr<_Tp1, _Lp1> + __allocate_shared(const _Alloc& __a, _Args&&... __args); + +#if __glibcxx_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED + // This constructor is non-standard, it is used by allocate_shared. + template*> + __shared_ptr(const _Sp_counted_array_base<_Alloc>& __a, + _Init __init = nullptr) + : _M_ptr(), _M_refcount(_M_ptr, __a, __init) + { } +#endif + + // This constructor is used by __weak_ptr::lock() and + // shared_ptr::shared_ptr(const weak_ptr&, std::nothrow_t). + __shared_ptr(const __weak_ptr<_Tp, _Lp>& __r, std::nothrow_t) noexcept + : _M_refcount(__r._M_refcount, std::nothrow) + { + _M_ptr = _M_refcount._M_get_use_count() ? __r._M_ptr : nullptr; + } + + friend class __weak_ptr<_Tp, _Lp>; + + private: + + template + using __esft_base_t = decltype(__enable_shared_from_this_base( + std::declval&>(), + std::declval<_Yp*>())); + + // Detect an accessible and unambiguous enable_shared_from_this base. + template + struct __has_esft_base + : false_type { }; + + template + struct __has_esft_base<_Yp, __void_t<__esft_base_t<_Yp>>> + : __not_> { }; // No enable shared_from_this for arrays + + template::type> + typename enable_if<__has_esft_base<_Yp2>::value>::type + _M_enable_shared_from_this_with(_Yp* __p) noexcept + { + if (auto __base = __enable_shared_from_this_base(_M_refcount, __p)) + __base->_M_weak_assign(const_cast<_Yp2*>(__p), _M_refcount); + } + + template::type> + typename enable_if::value>::type + _M_enable_shared_from_this_with(_Yp*) noexcept + { } + + void* + _M_get_deleter(const std::type_info& __ti) const noexcept + { return _M_refcount._M_get_deleter(__ti); } + + template friend class __shared_ptr; + template friend class __weak_ptr; + + template + friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept; + + template + friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept; + +#ifdef __glibcxx_atomic_shared_ptr + friend _Sp_atomic>; +#endif +#ifdef __glibcxx_out_ptr + template friend class out_ptr_t; +#endif + + element_type* _M_ptr; // Contained pointer. + __shared_count<_Lp> _M_refcount; // Reference counter. + }; + + + // 20.7.2.2.7 shared_ptr comparisons + template + inline bool + operator==(const __shared_ptr<_Tp1, _Lp>& __a, + const __shared_ptr<_Tp2, _Lp>& __b) noexcept + { return __a.get() == __b.get(); } + + template + inline bool + operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept + { return !__a; } + +#ifdef __cpp_lib_three_way_comparison + template + inline strong_ordering + operator<=>(const __shared_ptr<_Tp, _Lp>& __a, + const __shared_ptr<_Up, _Lp>& __b) noexcept + { return compare_three_way()(__a.get(), __b.get()); } + + template + inline strong_ordering + operator<=>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept + { + using pointer = typename __shared_ptr<_Tp, _Lp>::element_type*; + return compare_three_way()(__a.get(), static_cast(nullptr)); + } +#else + template + inline bool + operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept + { return !__a; } + + template + inline bool + operator!=(const __shared_ptr<_Tp1, _Lp>& __a, + const __shared_ptr<_Tp2, _Lp>& __b) noexcept + { return __a.get() != __b.get(); } + + template + inline bool + operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept + { return (bool)__a; } + + template + inline bool + operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept + { return (bool)__a; } + + template + inline bool + operator<(const __shared_ptr<_Tp, _Lp>& __a, + const __shared_ptr<_Up, _Lp>& __b) noexcept + { + using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; + using _Up_elt = typename __shared_ptr<_Up, _Lp>::element_type; + using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; + return less<_Vp>()(__a.get(), __b.get()); + } + + template + inline bool + operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept + { + using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; + return less<_Tp_elt*>()(__a.get(), nullptr); + } + + template + inline bool + operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept + { + using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; + return less<_Tp_elt*>()(nullptr, __a.get()); + } + + template + inline bool + operator<=(const __shared_ptr<_Tp1, _Lp>& __a, + const __shared_ptr<_Tp2, _Lp>& __b) noexcept + { return !(__b < __a); } + + template + inline bool + operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept + { return !(nullptr < __a); } + + template + inline bool + operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept + { return !(__a < nullptr); } + + template + inline bool + operator>(const __shared_ptr<_Tp1, _Lp>& __a, + const __shared_ptr<_Tp2, _Lp>& __b) noexcept + { return (__b < __a); } + + template + inline bool + operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept + { return nullptr < __a; } + + template + inline bool + operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept + { return __a < nullptr; } + + template + inline bool + operator>=(const __shared_ptr<_Tp1, _Lp>& __a, + const __shared_ptr<_Tp2, _Lp>& __b) noexcept + { return !(__a < __b); } + + template + inline bool + operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept + { return !(__a < nullptr); } + + template + inline bool + operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept + { return !(nullptr < __a); } +#endif // three-way comparison + + // 20.7.2.2.8 shared_ptr specialized algorithms. + template + inline void + swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept + { __a.swap(__b); } + + // 20.7.2.2.9 shared_ptr casts + + // The seemingly equivalent code: + // shared_ptr<_Tp, _Lp>(static_cast<_Tp*>(__r.get())) + // will eventually result in undefined behaviour, attempting to + // delete the same object twice. + /// static_pointer_cast + template + inline __shared_ptr<_Tp, _Lp> + static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept + { + using _Sp = __shared_ptr<_Tp, _Lp>; + return _Sp(__r, static_cast(__r.get())); + } + + // The seemingly equivalent code: + // shared_ptr<_Tp, _Lp>(const_cast<_Tp*>(__r.get())) + // will eventually result in undefined behaviour, attempting to + // delete the same object twice. + /// const_pointer_cast + template + inline __shared_ptr<_Tp, _Lp> + const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept + { + using _Sp = __shared_ptr<_Tp, _Lp>; + return _Sp(__r, const_cast(__r.get())); + } + + // The seemingly equivalent code: + // shared_ptr<_Tp, _Lp>(dynamic_cast<_Tp*>(__r.get())) + // will eventually result in undefined behaviour, attempting to + // delete the same object twice. + /// dynamic_pointer_cast + template + inline __shared_ptr<_Tp, _Lp> + dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept + { + using _Sp = __shared_ptr<_Tp, _Lp>; + if (auto* __p = dynamic_cast(__r.get())) + return _Sp(__r, __p); + return _Sp(); + } + +#if __cplusplus > 201402L + template + inline __shared_ptr<_Tp, _Lp> + reinterpret_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept + { + using _Sp = __shared_ptr<_Tp, _Lp>; + return _Sp(__r, reinterpret_cast(__r.get())); + } +#endif + + template + class __weak_ptr + { + template + using _Compatible = typename + enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; + + // Constraint for assignment from shared_ptr and weak_ptr: + template + using _Assignable = _Compatible<_Yp, __weak_ptr&>; + + public: + using element_type = typename remove_extent<_Tp>::type; + + constexpr __weak_ptr() noexcept + : _M_ptr(nullptr), _M_refcount() + { } + + __weak_ptr(const __weak_ptr&) noexcept = default; + + ~__weak_ptr() = default; + + // The "obvious" converting constructor implementation: + // + // template + // __weak_ptr(const __weak_ptr<_Tp1, _Lp>& __r) + // : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws + // { } + // + // has a serious problem. + // + // __r._M_ptr may already have been invalidated. The _M_ptr(__r._M_ptr) + // conversion may require access to *__r._M_ptr (virtual inheritance). + // + // It is not possible to avoid spurious access violations since + // in multithreaded programs __r._M_ptr may be invalidated at any point. + template> + __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept + : _M_refcount(__r._M_refcount) + { _M_ptr = __r.lock().get(); } + + template> + __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept + : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) + { } + + __weak_ptr(__weak_ptr&& __r) noexcept + : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount)) + { __r._M_ptr = nullptr; } + + template> + __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept + : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount)) + { __r._M_ptr = nullptr; } + + __weak_ptr& + operator=(const __weak_ptr& __r) noexcept = default; + + template + _Assignable<_Yp> + operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept + { + _M_ptr = __r.lock().get(); + _M_refcount = __r._M_refcount; + return *this; + } + + template + _Assignable<_Yp> + operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept + { + _M_ptr = __r._M_ptr; + _M_refcount = __r._M_refcount; + return *this; + } + + __weak_ptr& + operator=(__weak_ptr&& __r) noexcept + { + __weak_ptr(std::move(__r)).swap(*this); + return *this; + } + + template + _Assignable<_Yp> + operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept + { + _M_ptr = __r.lock().get(); + _M_refcount = std::move(__r._M_refcount); + __r._M_ptr = nullptr; + return *this; + } + + __shared_ptr<_Tp, _Lp> + lock() const noexcept + { return __shared_ptr<_Tp, _Lp>(*this, std::nothrow); } + + long + use_count() const noexcept + { return _M_refcount._M_get_use_count(); } + + bool + expired() const noexcept + { return _M_refcount._M_get_use_count() == 0; } + + template + bool + owner_before(const __shared_ptr<_Tp1, _Lp>& __rhs) const noexcept + { return _M_refcount._M_less(__rhs._M_refcount); } + + template + bool + owner_before(const __weak_ptr<_Tp1, _Lp>& __rhs) const noexcept + { return _M_refcount._M_less(__rhs._M_refcount); } + + void + reset() noexcept + { __weak_ptr().swap(*this); } + + void + swap(__weak_ptr& __s) noexcept + { + std::swap(_M_ptr, __s._M_ptr); + _M_refcount._M_swap(__s._M_refcount); + } + + private: + // Used by __enable_shared_from_this. + void + _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept + { + if (use_count() == 0) + { + _M_ptr = __ptr; + _M_refcount = __refcount; + } + } + + template friend class __shared_ptr; + template friend class __weak_ptr; + friend class __enable_shared_from_this<_Tp, _Lp>; + friend class enable_shared_from_this<_Tp>; +#ifdef __glibcxx_atomic_shared_ptr + friend _Sp_atomic>; +#endif + + element_type* _M_ptr; // Contained pointer. + __weak_count<_Lp> _M_refcount; // Reference counter. + }; + + // 20.7.2.3.6 weak_ptr specialized algorithms. + template + inline void + swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept + { __a.swap(__b); } + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + template + struct _Sp_owner_less : public binary_function<_Tp, _Tp, bool> + { + bool + operator()(const _Tp& __lhs, const _Tp& __rhs) const noexcept + { return __lhs.owner_before(__rhs); } + + bool + operator()(const _Tp& __lhs, const _Tp1& __rhs) const noexcept + { return __lhs.owner_before(__rhs); } + + bool + operator()(const _Tp1& __lhs, const _Tp& __rhs) const noexcept + { return __lhs.owner_before(__rhs); } + }; +#pragma GCC diagnostic pop + + template<> + struct _Sp_owner_less + { + template + auto + operator()(const _Tp& __lhs, const _Up& __rhs) const noexcept + -> decltype(__lhs.owner_before(__rhs)) + { return __lhs.owner_before(__rhs); } + + using is_transparent = void; + }; + + template + struct owner_less<__shared_ptr<_Tp, _Lp>> + : public _Sp_owner_less<__shared_ptr<_Tp, _Lp>, __weak_ptr<_Tp, _Lp>> + { }; + + template + struct owner_less<__weak_ptr<_Tp, _Lp>> + : public _Sp_owner_less<__weak_ptr<_Tp, _Lp>, __shared_ptr<_Tp, _Lp>> + { }; + + + template + class __enable_shared_from_this + { + protected: + constexpr __enable_shared_from_this() noexcept { } + + __enable_shared_from_this(const __enable_shared_from_this&) noexcept { } + + __enable_shared_from_this& + operator=(const __enable_shared_from_this&) noexcept + { return *this; } + + ~__enable_shared_from_this() { } + + public: + __shared_ptr<_Tp, _Lp> + shared_from_this() + { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); } + + __shared_ptr + shared_from_this() const + { return __shared_ptr(this->_M_weak_this); } + +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + __weak_ptr<_Tp, _Lp> + weak_from_this() noexcept + { return this->_M_weak_this; } + + __weak_ptr + weak_from_this() const noexcept + { return this->_M_weak_this; } +#endif + + private: + template + void + _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept + { _M_weak_this._M_assign(__p, __n); } + + friend const __enable_shared_from_this* + __enable_shared_from_this_base(const __shared_count<_Lp>&, + const __enable_shared_from_this* __p) + { return __p; } + + template + friend class __shared_ptr; + + mutable __weak_ptr<_Tp, _Lp> _M_weak_this; + }; + + template + inline __shared_ptr<_Tp, _Lp> + __allocate_shared(const _Alloc& __a, _Args&&... __args) + { + static_assert(!is_array<_Tp>::value, "make_shared not supported"); + + return __shared_ptr<_Tp, _Lp>(_Sp_alloc_shared_tag<_Alloc>{__a}, + std::forward<_Args>(__args)...); + } + + template + inline __shared_ptr<_Tp, _Lp> + __make_shared(_Args&&... __args) + { + typedef typename std::remove_const<_Tp>::type _Tp_nc; + return std::__allocate_shared<_Tp, _Lp>(std::allocator<_Tp_nc>(), + std::forward<_Args>(__args)...); + } + + /// std::hash specialization for __shared_ptr. + template + struct hash<__shared_ptr<_Tp, _Lp>> + : public __hash_base> + { + size_t + operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept + { + return hash::element_type*>()( + __s.get()); + } + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // _SHARED_PTR_BASE_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@shared_ptr_base.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@shared_ptr_base.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..49f50875bade84901831cf4d5c161a05459292fb GIT binary patch literal 143959 zcmdO5_$PB#_%ahC6O(>vaglyzUUE)pN~(Ucwzj^Zsh*LZp?-yhS-hEvZb7ncPG(+d zg>HIYseV#sNij%Ga(-S~X1ZPm0|PGIV3oxgiAAX?@dYJC@kxorsd^a<`nh=}`bCME zDf$IP`B|ySCB^zF#Rd8qiAA~jd6~(HNUY+bWCTwyqo9C+IXNdWFP$t9T_@MXMVk(iT{pB!IOl$cpktd{`^eiRMh z5Ca)ktREkrn^atqSdtoF0#b_4?BbG?)QaTPf)Xqy=42*i=9T1NH6krFv81#p73>sz z=HpBS`Ni=mscD&c5FFR-OWKG=`yI zB}tVfsm0}q1t1mpTn<*853yXYBsm$2?O-K|CHc9T$?@fxDXH z2gMY==tTEfaz;^pUOvcV3~ym7O)N^z&nqLOxVW;oBsDiawWuh+2+4OjnMwNKoT6`J z2+!EXB`KMC;MA05&Ul%GBoE4lr6rj;#rkE5Mc{1s&uNb~&a|GHUz}E+g5(-l$x>Wd zte>2cnua~afnx#`q{aHhB}JvlCGl>aKCYkuz!${@#U(lVAR-=KAc2cDl$3~MbaH-v zc4lgPW`2BHXjg%zP}-h!imK@o5G5L_ z3kU`&$oR~>G;BeHo+w~xEiorPBe6Jxs7MCuffVdSsV^?ci7x}!XIPbk(lAH@BY2U5 zDn7nAGrc$!J-D!zCh_sbB`GPXY4PRB8Hv!$0WMcSZ3+B3iZiRA)f!v_tcXAgxa9I= zPzYm5fJlnKj)w$NW_}*1nE~=6Msfg^JRrlsaf%}ZGILYSOhCG^%a>;6mE`GWrljVT zWR_H7Rfp~_cn$@r#&8q5>a=2))6%~m| znel1)MaeiaN^xFFT4oNo{jzH2tBaV$W@=taW?~-52iU^}9IX2B@zAmbT)$wb1UDb` z3-XIIE8@W#K;~h%9vqqF`9&$91OiflVGeqjLCVbdvdq+S9Q8Y>(gRny_{;)T=1`+R zm2PTLF{oYuxd0>9AU=U4eUJhSPoO(7DX};+IUZs6v-O`o)>)d5Jmk;9Qtkl3#=& z0BIM^sMEvQE&{s;noZIYlT&eY0+4)=3@%%V2wrGD&&gRrUxI~r03dklosTqVzCg(SxK2C_!Z#nnI&s$<7o~f zS&^BK&C^HR$xKSt%}7m5NiEVXE=erHUXy`6n_N(;Tbznr0eaYhnq}aoTxLGF z7R7FPK}kkYYGMjF5$PrtC4-xY_<}GeGdHt@n7AuS%u7#=PfSjR=3Wf@ksO>1Y9!)M za$x^w=9T4VgWC-FOam(gdA~FdR4`>G=44jkXoVoT0cRBErWO|`rl%Ii=ceW+r51tH z0zvCxoquejEl8Gv8UT5vxu6CXz79RuN1!mO03{>5(F5*jVF^mG5#TxuZUku+5~L#z z8p28~D%LMbEiTO|fz&;0eQG%C9-N^H9ytK@or_Bn^9a{S5a)wOn?UVtNNx4h4>9y0Sq;_>DfZ$a4UYJ{{Jc!C7cp{9aY;(DE~Entj{!V)pk_WXq&RftJIP#VFAEF|SPiy2T6 zid8ejahbW`$if%FnUGqBh?E5#MaAAHf!J4BkXj5HbjgQ~eB!ehGWLVTUfj6`DMUcY zH<5^*B52km2VQ?dGA}swVGT7%j~*lib~$OO2GRsAEzSg`yMh9Se=|DKQVeLk6(pUL z8V~8%K-&FayO5i8Nd5$eYhEg7M4$K}jO6^3)Z{X3V0LHJD@Cuw07nf-=b9 zA1Gw-rBkr+pjtRFCp{lF7==#*sIifmhs~wXstaTzM)<&{XmvsP4ae{wk`Hj^9&jlg zpP84FnFr1%7%m0-2NGPM1ecweLS%`VRveE$E`Yx}&nwLVPe)^~$01`px;d$d#n?+# zB;SJFoR?aTm3CKWD#sg1Rg4-6QU~_iZ3njEss(46J0apmf*$qCFOq9)O#qkA+CE$?= ze1Qt}R!)2pwA>`n*9NOcoxub-2cH$iIE!wuVUQpK8G;e!=%JZb9G`-t*$g&{s3IAx z5@IQ+=S*;tJ}VZ32d1Wl5{}^5$TVzL~xOfp&Gd{3J)8MQU~lJuyke> zWYq!OApBKDep*^_YDs#RKbFl+kxv( zj9>$|%rM8%V2(xdJ}8GI=jSDt78RxDq4kCEyP%+?C?zv34dPP_7l6Y9R7T~;=VTI> z|BFjf;uDjwcSDg}3^p0;bplK5Af0Vcm}0~hl5x0OQ`*|#ei|_YRbV%P8j7%PHON+s zgoI=(Ttjkx9;7HCN(X3JNj!L698tT73T^LXt01ATDheqsRT#h!5Sb-Q*fsS^l*oijHrX9*jrriF%^8F18ET9FOxvo z3_QG*ngSZvO@k~w#E1@bmxB6W=rtGaT$xyu9v>f{o>!V2UzP|SG6F>`M%FAYNy*7f z0!iWXRWjJ`NWQ{qFJ!70WEO@s;HZI=h&Y${fz?3VqYKWiAd^6@;!ZNP*q{}61tp*X)GT6D=Yv${;8h8qcSjn3&cmw%HZ6!)6;^;(J!0&%2(LO& zaRW13FN2{3uVR#ZSB6U|)>K-7S2a@OstTV%P*H@aV}$J(oOu4uVr2L`myzeM0u#eu zB_^J~YD^4&HJEt*HZd{$ZDHd1JAsMe?`fv6zh{{k{^m0${B2@p_}j|N^Y=V6!{1-b zJbyD-82)Cl@chkYVfdTN!t?h$3&Y=wEIfaUSsDH|u=4y>VPp7f!p8G=9~;Bpqij5X zf3q?C{maJl_a7U>Uj}xbzrySce-+ue{`zn*{PpAD`76ly|5vuQv{ludSa7kd5FekK zmzb238V_k1#-|nK=f;<0WER`RhZN{2#QPN3DQFd!q*z(uR0(cYXuynvngd>aYy;M= zrlSCpB*L!v_ySFauml^%ziT*n{;uKh_{+q?_;)o2&);<%S_}*fjQ`m*{6Fru;bvms zVP;@pVEAvnJYL=YW2<6(e0geOHmKmWf!YW60e%lyS%Edey{@4Nb#PujBrhXTp@BrD*z{U!q{ue)#+VnAg_hlq!AcBx&2f(e?%93IHJC}p! z?_8+Wb2xbZ&O^1DJ#E!)^JmXn<6*H_P*Q{xe}pWDMj4X-8T9fL82?V;;Q2d+LkH~P z$s9a?r*c$)dXo&5u%M zs?0Wlg=Tx!H%YCoozIi<^K-Cy1iRx6(OnPm56B_tX_(7Igz;|%2hZOO4h68Y(m8nk zW^#mqo%N&BY0n*{RQvylo5IYOQd-XJNVu>`wzjYs zhUE$55-C1D5gy;z<&%)op@fnM z?Cbx}>f8I|r8!MR|E91Q{Y_yp`ycdN_e<@U2e+92syM&}(_Bh6?3S?Hg(7%e$46%p z!;bqXf~KY)Lz2D**P;kY|2VsTrAXdY6hS#9BjNEla-@ZHOY6R>f~uY^?hkMR4wvB{rVR<wUFGqW&{GFd1Sb@2h?*Phb_Yf9-V#fW zCwj~~Q3M;TC%m2^-zbA3$bO%_=6JPeC5qs4m4B1c7I{nn2|{ZmQ1KEEYW{&TQAs9xDa62ICd2qQjD_cK z7z?B>3T5H>8_rS(t{bBmO&*Vt=>i4o&jC%3TZ&Zj67sIC%bcaoB;& zB?x;CsQ6)kmhvZ-{<+JrM#rKov#6vrF$Y|nBMM1ykV5vUfCDxqwYa1xzY@7Bk#ZAZ z{JWNs=kHoZg}+WLjDOcK^88)Lr~|eH94rj~XD`^hqP+S*D9$oP5mu(a*BYf{f)<>D zA_}Pnfyt(%f+WCY9=uAEP!a)K$-o1mME+{Ci2c=Okpe}I;>?JH>f0sbnYgxqpu7$Gqv1t9>$D#+e*PhkvuRW_3GTVXSZ#i4Y-*UDHuqc%6 z!0@++P3Lb9n*mrw-)fWi_4jb5GDK2RP$QHc;pIFu>kwrqQmXUn z5@P(@%fa)vmqQMm>UubM{`PU`fuaRgB`*~f_#>e&wS;hjfDBVYhVN|Roih@PLUa`3 zL%{uY9ff#D(0)lfP-;L*CJ7E=J1>coyr2O8-tBQ zp@%m(oZ;0wu^N&zM|2Fps%3By4sOe1ZBikpbMP=VX5h!iSLi4ZrLGbwJIZMwmy29~ zd0CYH^0KIb%8kFlECGLmSwg^UXu}B1KFwnE_cV(cn0<#u;qM(56)?M;&ERi2n+Y=8 zf#EL?yWU?ONJ;cpl_Tb_Dn|lXg(HX3Uq=qGP5)2TX1OpdzZHfr!^20VVGT&cxC6BO zawz~O!3rerjpWR&y7aKQ;fvx*(DVYd&PHi+gR5*%Td1@cx@j4+|IKBh!1&jXh3Bsy z3#2>h%fj>5pCu1eS~LFjXR-O~&l205144V&#{Xbb`=S=Slb=UF5Iyhe_;EZY=1$eR;jdgIKo~d(Fjd(7ZfiqB% zI%we07jPpEI$(s-J;Nf4(K$QC!t?hOv~zZnh3D^Ss&&p*?)P~mX!G{vf1S%|R+kuB zc8LCkmOH4OGngPs=L{x@(m8_(qIAw+f+(Fcm>^2$3?_)uIfDtJbk1OcD4jEyAWG*9 zCJ3tqKp6<`O_a_VOeIR^3?_)uIfDtJbk1OcD4jEyAWG*9CWz8Gg9)N^&R~Kloimsq zmd@FCr|j*#w|Z`7=9R#TBXANcC@DgWvDj)L5937^Ku1E=)Z*idka9SOmJs7#VGgFh z!W<&tR-_OI(_cvr7I0r|#*zN4q%B8wviue0(EBUOVedwTP3>oCb4;-x;=?a>u(a9 z5vto^f>_)RtFm!set63fPjehx5u&u$LqT=8E2L{ysfpIvAE*xJl-%ta-$QdHA){Tv z1<*sAQefl4R#tWKn4&iE0VPE`3h^$G!DH9}6QqrTJnG3{lEnCzlZodqCzA;{+ddZuR%H6?%Np?4mo)~|J^LHXD)2X$RR+ZV4{J^1Oabr=how?QN(wMp z!sFfpmEE2_eY)+;f-6T*ig`#;LHtxbw7^7~Er-msGFVk9F#esv!SiMK{7vRe@T9Md{SZxd>MlVsF>1VjAe-h4|>F~#KkZK zmnIdLWR{ecq$;H47bzesSIAESO+PAR<|&k9q$(sQ7N;uYrzz;B<>l)_)-iw&g8?}Q zJWs_mmu)U&bpI|3)8D%+THw^ME3@#xT?-*WaIk>85>WRcs(jFF5P}D37$8;lB34R_ zf6G}E{+6>?fD>pr3(wyQ79o(uun8Sl2M`(#m@PbvGzUplLn^u1KbaS646|hqYHrC$>WKCyupM zpe6+2HC`H;3=9q)jDII^@cf;?;Q-FI5H@Jp3InY8O8v9w$?c~u3OEB7-dIR0$S<~u z4+b6l83L~Vk#a7E+=y=*{D`fuEH{-}3))t_@dM_(2;@J8k!7T7IKWUcxGvVO3#@*^Y|D%^OB3ejeT%~th6{)0X$>^ z8s^9>QOE?1eB|j?r55GuK*vAwOEOZ6$}@{oLF*8h=J3q1`j0$`?Id{FYR^Jf!37lUC{uMXm9TL?s7mm>{eRfv z0gxcLuw(o?kwjnpEA(&E$<9fhRQ5(UtvXockb z+=9%U)D(rp^u)}(;u3}YoD_we%p}mkTiV(RkTb}NxpFhpGe9#7nK_{PBPT~8vqS+j zXo6CFD}b&oP$#sG}X?^3e+t} z(jM=Z3vN+EAYC>U0N&u0Jy4!mu%oU1Y{nx9qvy~JWjq6H--?{G3wcams5pl&9@BO`fD)|!29+FBbPu7adVq!J8ThCs3eENMUm@lQLz3RJ|r zghG6LiY6kw8B7uw|1vT0{AFS?0%sZ!o0%zvAwE7u15^@2ruE>HfqI~+J!x;7#?xB+ z9{k^Y>spA)SBZN}f0>y~{xUP!pw1`31d->HplipEzx-7zBye^X#IH!13N(xf9n3|^ zVjA(0@Xj=JiUsTyNG3bY%Jla%s}$G=AofL8P))(~|3bp8q9-fMI{y2%wtIFtOY}1T zJ;Unr_Y7+Ys!L&l$S(bRftBs=1y+~;+noQ_Svy@@4XW;-&Og0|$9+cSzF)8UQol0GBL~W$a9U=dkho zox>&q%ItqFIC%bAaDdtWzelVTj9Y531(D<7MIJbDfon<7P$+tt2bKkoEQ1C(z!?|4 z95Uf!{2Rr>^EZkG5*d*!Jb$BE=7G!LqW&3t96X6DV711bmyffp9;{pn4MeyjP~sh0 zCdTI`X2Z5aYQ$rVrZCvJNiqIC!ol(P2!|3l6&&W^_3WB{Ba!&Y|-6IEUN+Q@b2av_!2+1I6v%6C4VEPjKk{U)68zyUpHK9z}4;_s<^= zB?(G{1i>Tq4FCJTTs)@M@b?}x5raqHp;ZWsjZ}dUwRVX?NrUn4M|P&aAK4+>)IjXd z>`veS{AYaW2iM1CZ&?0*V%PfniQNEYLh0`(cA3AQ*i}&1E`4H;`TL1I1vRmoa`d=d6ao9_4@2>y(nJPWV(XQL~+m?eBI7`@dm`?Am>?*;<(GW^hpp**z7H z=)8F57UWo2#e*o=NOOFAB9a$`Vz?Op`Y?(7^HFV7FH9 zB&_KP>+FJ)8IIu$N)uAJYXd>Wx4pswVlT%RB1h@4;dj%O7^t2dX@Vo#wz+dpZK-moq>+2IP zQXv(8G5CryTnzmzW4)GjyU~nu} zNKDEvONI2y)${TpQLYZ^OBbc4lqQ45np090K&RCz~kfI8~nlkh-w{853UX8&`- z*-Y7r>}GS(=ivEk58Zud$HDX0jf0ONv^W*KH5%u3K5(xf_`i`zJ-hDF{~Y-? zbMMS`nVZA38D-X!USPuCyJ9`Z6_2#lz~E+c9elam>|kP zAxscfc%YbxGEfLpi84?K6a0?6;Tk50GEfK;L>VZA38D-X!URzU3SolJRS+Al|2lGT z{dMG!`QPq8FXY=HokJkUgA+32-<2E+e^+uq_MXDr0m&s;b{N8IAJkP$NTnZ4g2)xc z169u55#6rVnQq(yE$3jp15g`YyBzlXw?16<;{D5a2bul~G1>eTV)FT4uC)BvX~TDr{Ekf!oI)7> zUz)y`QCnf=~eCOBDwlOd>5&C`UeIz%+HxV&T-|E}O*`nv*J zr!MDU`nwW(?2PiOeR3bBG*0{9DD`lfX@u5Mc=7ljR^Nk?3p8I8ez{mxV7>G`jt&pJ zf3AVtVFVW&E~z=^d*bFwNzZuX8*mO3gzd6te*ljI8JoKbWPcZ+@VsrSL zg}!J!i%siq7W$%bm>}|40@TH@b_`OG6VuK@ZDOf0uHsn*9-Carv!9Q_8MN5|(i-uN zhqll(G!@D-QX$PL#C(2HYGQImYOw-nDjzg+&%Bmtt=Ru9Y2RA5`mSHX{5Qp6r^3## z|H~?zR4-|c(ef0L@doK z!7?EVYFa69@cdPPCIfj6p1+D537{bZ#=nXjW`7kq!u~(sXuQ(m`vnhpq%*>5Qn2lf zoSWV2-I}Kp7o4b}D8j(tl8SZR11M-1*cccXm+>r904)Jn%CpRjf$6Ufi^yLc77dWi zf9+Xh{@SyE508LP&_W9+aDE`vc`Ql=9ekdOWq%vEHv?aMLO|W1S&8yh@vg(`sXNP{ zVSqVE1}~)12Q@)E&A|Imz?Bg=@DMF@a77(^!L;|7ZQS+1veE`cC2XrBis0N0<`2ED{ds^Q2&>po1i7E*edu}i z6x=|BJ8ANvuowL8J%3PC!WKEA2*MVKpa{Ztj-v>|4iP{Rgw24V2*S2rpa{Ya9YGPS zoRIsd>-X8eD1xwEawvkZLu^n4)o<@OVcXz;07VdX=mv@)Y%mcjsPtExT?2LKSDW4D zuQt0AiXeE9nh_SNpnUv)>yqMobv2uUpiL`S(-YLJg0ZnQLoua5Lm%)-Yoz&3(BSn2 zcAmc%*da%9LD)H?(iL*wy|Ytj_&8IVlcu zJ{C-nW1fb|p=0*?;8=kPri5*7-?(H^2#O%fi@!WYm$SN21n(OB*PZ|Uw+f2jnwb|D zO<1m&j3RjG@`-?*VeZi=f=?ouH2NNFazYUdn7&Cd+%d`;MR3}pYVCuCk6Td$RSuq6 zDY=dB1&W~j`W*_K?@gzo2v&NmPG9x*ZXSxD$1cyvV^zDBqX-6^sMs>^-P>s>g8O*e zGsK>6 z7c%}WW#;)?%A5zbY}3{icMC2xeTVHOfQ=5|texQ9YNE#uk$T+m;DeMvtzpoBBHHG$ zf$CqcaN9j=KNH6RsF%@eU1)_0F7}`|cf~{3w8SST7MH+c7uIWpR>Vj}4)XZ|Hf|b> zf7h^c{9VIt0IrBvvvd62#LmSKl98%VoSK@OnU|hZsQ|i1zAP~(H4m~v$BGNubA=iX zagzqjIUr|%%3duy(28T|enwpwi<(WA-3aMqOd7u;4aw-*yz&A32b`zE6L9Rzk zQAkS7NG!|DFD=qhNGvHy%`GU&%u81&$>)M}3+ul*SyOr6BM$h zGX4F-uJ`v3JKEt6f7liN{$WQw+yUIeXZSB+RB>$Si)CAp7vF#*3bLsa+++hMA2bD6 zJb~23K{o+u!oVU$i1F`MM!mmV86lHRTN!!&Ze?r&*OgF5t$bv1YTK<(JHgFFa2p#u zybEzhd`W(MVoFL;YH=~rs4r4yUrs{;Y#0OhR6EAM@@!gv<=LFT4S`3$jvPq#lqw}* zAPCDmC}<#vhl%Ge4|E`in~CQyFB9nOQU=Dqyi5vzd6{(ncRMWQZ-227JfaKrSL@7W z_beMG96&3|lS zG)xd>Od2MLGA0cZL>ZHY38IWi!vs;rq+x<6W704|lrd?TU>fovpfEv{F=?0}%9u1v z5M@jnCJ3u_Ks7Zylu*W`VJcC^q+x=vv0xPKC}Ywvl_+Db zgbp1c#wK7bW$;#nb3Et3HTYScyL@O}a!{g%>_q_e$(b%GTtXe4xXpDN%jg8l-+mU6 zzx^!WA@#pASw#NMgtC{ii2Pj&Wv^oq`MVCn{@=C#;RzZwIr&-wtN*1lZpWW}d&D%#ck=(7{aD*b1y#b_Ac=9$%hcl%fE>FaWe#3S?7i zMREq@Ch5EsP^ku9c9B?;oS_kqtVb(8J~uU22fP(4KE5n5N0ULr4%CciV1SfzOrRkh zPzeVLJP`fAVU3PceUQUT=q4^u0SY}hg3Q&akoKUJReUh$tXK_DeSp;NM66PUr~{Qu zsY&@6nhX+)co_daX5{(%m=Uth_z@$|-zSVV;3nL;86vXV?*8&-_y;*a8wwt>>`H$N*dd2`ma(h-ErY7BW>@=L4P`g5 z>-}wjnE79$-#2WH&KhGxA_J}U2cMyh)M$n^{o!(;0yD8F9oq3lnn=-tt{r3pHEJ3E z$}(yEm1P1u?LTa3CZY@h7xR#EJ}tipbVs!Y$c8*nF9=-O6{UiUiK5iBRPg;%pstsl zl@&-4c%}sToFoM;(A*}hiedR1$0YGLjtP7?>ECT^QGd6wWq?CyABWW6eH@U`g)Sup ziT^*|HOZ^=QG5nc9|(~ItgMPsi&IPB>(M|903j#HK$bUi=y5Urtz~2STg%1+ZqwGV zG5xJ$O9RLLpWVuO(PmnA{`+0KrZZdNIV1DmIySGrb!7dKOT6V*IbWFyhbNe&KGhztBU&|Dz1X!vs+V z<6(k5$b<1PL6pIGm>{g41vji=f+&OWFhP{Tc$gr{U_49^WiTElh%y)t6GRz|hY6w# z#=`_r2IFCZD1-4ZL6pIGm>{fbL-8icU_4AE%3wT95M?kPCWtZ^4--TgjIU!6`CG?g z^ncQ%I31yohgBfkp>1EWjG3Yw77c|+eFazt7d%@C$@WMMYAypV#=rS&Jb&}qAWOgV z*m(XHuz5ksy8<@7zXfb&DES)NoraC&B8opmnG2g0wt?0@o4bQUe^j&=Lftjz>AY6jAYmcXlHxI`D#?H|#ur->^d_Q9$f> z>~`ROLi-V&RjCpRLQH?(vPb=W%btX~t{*0dT%<#jWf1B8JAbQ}faUu!0Xzt&7z;O??D6USd`rUV9t z|JxrQ{16`dV-M6$aHR|hDKh(B@STD9yIx>rprRPs^IE{e`1b}Q&)*x+p4W9SdkQ#2 ze=IyNE`MQtFRbSUEAQ}SCU}1Yy5^Y*i=szXV;MGDL%4kb+60xFm`jJN1qP}ge3Eh3 z;{~@KzD2Gl5bX_cu?5~s1}#x=w>7v7_!$3gW#Rd|6}tCo3k%QRUEsC`)Boe|<|s*| zsHp$<;F*=2&~WcG+K{%vLD`P<40DG6IxdH!~> zLK;t1W^>MZq)swt{@cOI_P2vI>OV{D9R1Bnv9CdO@ZU~WslT19cK-!U3#HyvF$+Nj z9sYK*`uty$)BN@JF33s-XdRlSy)(c0>XUsqQ>2}(2E20yTWN|leGfWU=(itX*GU*HxM45Dk38G9o!vs+#oneBoh6;+~Q6`;X zDp4k#VS*@=&M-lgNoSZK%A_+)5M|OCCWtcW3=_mM>0EH$;iB(Wrx-}}h0>72o(eQj zg~99az_Uo8>Rv|yC5vf+H`>C7iNV{(Kd>_W{Q%w33Sxg_Wnpm4$xH-aT?Ve4K<7>6 z7lHQUt~2j;-x=pS|3Alv+&`txN&1X`zp%>v{lcpA|F@m!dExI4;LEX~EdiUn--i|m zFj%3qnIQf`8q7vNH38c`xG)jMzbQ;Se^a3IKgmoyf78JWff<X-sMV*`;b&IfR~NF#lC?fabsSw#ZEh^U`GrxC6Tbp?S{{bfFI< z4SP(u+ZnQny^uw>ihG>;Li7ds>9R zSGz%v?D`KoSd1AymVmnD6gt2FAJ<_1tKtBSys|a7&S_?@f^FJIR2twq0>|Na6*>wy zWRPxq(SW5tjrjNqJ+N`{@s*mIplzF=)#R}858V5TVZ{*6GL)zxFmT#NTN4M~_6W{B z@$slj;)EFgTC#KewS*3hS+H~bbpQ{IG5_z`AIBHMEAsh&Y@^HP{{?5m{&%}>@a~i^ z;AHx1&u;bCp4|aujO?#Hd%$0N_AnH|0T?)gtv|(|KjD*2*jDI!h%ol@^nzFC_we-T zz!uFy<~*VEQ{aY#LP}A7K{0515^R+$q+P%SS_%6%#eoqt=LDkR{Z2%RLoVQ;``wX+ zpqUaHYv41qkUCdf1{{okXR-18odsQnJd=&*?>sg>23P1zkU~;^Nd|c70_bSY6b0xa z1@K*spo3J4OY)0S;lkikNjkrALTmMl6Vc8NaIG0W8?_4$wl(H9G%yIq= zWOMi%2stL_FZ4`t&=4W)jBYR+y7U^%E`ap|mh zH%t&^{u?HUGXD(|M4A7F38Kt@!vtXisVI&|ng52VM4A7F38Kt@!vs<0zhQ!~9u|j+BTNuwj1eY?GR6oKL>Xg*3Bvl^P{)I>FZ_=( z#t2i1GR6oKL>Xg*38IWK!UR#q7-51aV~j9Clrct_Aj%jcOb}&^5hjQ-#t0Kc8DoSA zqKq-Z1X0Eq%h}lema}D`_HUqt0lZiS1s%AIVfYUl{DD@(@&2BWGc-UG9vbnUo(l2t zX_-aEB{~Wa4rqI;jsi$od^}`%nI?mn0&`l!&^Zt=yP3`DZ!;U@R84>xTCFZqIAd$(BZrSDR5A;$ZHA`>i1|D#-L1dV5S8UiINXv-7Ur-CLc!~h~|kP089{NAOI$aG7tb0L>UNx38D-Hzyx8579~JX z1_EFzQ3e8Ff>;IuV1+o&<^064kn1wfP)F5G~i%@C=EE6AW8!cCWz92g9)NE;9!C%4LF!!CGw6fm>^06 z4kn1wfP)Fb@;)e$z@r1D0S8lw(tv{=x`=rbDidtyCpe9%a+v*9^Z3x)NJ7}s8&ss&)Rs?8!%L7KazYn0ThzE>3e;+XRfLjr#ZhA#VCY^cD1ZxbU zwj!V{L~N}HSeF`Fd?ICV&{9yegYzJh)k&pkxX!}CJT#AZEyN9dnIN}=aSwgLPK*P$ zfZ!|j)gW^xWUN4nN4cnt(gjGcvj?Do9uGMpA+ZE zFG@`;Ni9++$w|W)rZx>rO~drpm__8TF{BpxYs(_@*OtW!9EPx_IXDEs zsR}gZM(iRsaCAaCeV|=yYN%-{rwln|kM{81vL}JU{4X&*yan%qa+I=_ufj%X!SSPz zoRL@ry*do}0w^o1@{B|*M*?X0fg*tM|KIEB0jOWIJKxGJ}ogb2f9)N;sQ|jJ|`8nNIoYsFBLXl370R;OD@UG z&qEha&WE;Dkq2r;w2<;U%U^p|p1=02;5)kimNN1EEoHKBV1muTf=+&!6t<9Zz2=V-$W+J1_TH@ z3hZ2P8;$`faKWNbg7H5r1{vT-Q$fo{L~#Y{*4k1w@vFkl@mB>p@vF?v@mG~y1Ki*1 zJ+%LPcSFbf|H>;Lxjub!Jf8tP)xh*ul_Tb_Dn|k+_+STMf!O~G9OGx0h+jAkOLX8Q zfw|NPy1WVA+=TL>DFjr0K-cob$CqRx#j{L+4C7x3CZ4|%&=beSnRxyxgD3MC|2NMH z*vpXf<}x#E*)4o^FSscr$0YJsj!EnPSq7Pl2Uxj0p@KGl<(NFM?f?2xK7G^G@0aV5 zy?{EU>I+)n1Kk*lYpE8*1CYE2o4aD*F_K~Y`<{*G?|U{4Q1k!qJ2sxbAJ|gB%@)N| z&-bs*DV@yt_XC^R-w$j-|BdI*={*yEA{69eXp(`oq@f7{Y(BW`#Y`ITt{#DNE8trb z2&fz3yAysHyld6?+0KBiumCMdLtMlOURDR+nF&qXXvGWcU~KRN6w<~^1|1W|zgrl2 z{%&CeSMX3a${_`?>s=60j%+x*{|Re0uFS_#UfH)NQv~AwrCQ%~^QkM67#Q5S>9xJoT>i8!#8Q97$IL6puaOc15B3KK->til9QI;${2l+G$l5T&yU6GZ8(!URz|t1v;7&MHh0 zrLzhXMCq);1W`JxHY{>~ZCI30BMv5r5^*p=l!$`~qC^}_5GCSZf+!IO6GVwPm>^2T z!30qv4km~aaWFxYh=U2DL>x>ICE{R$C=mw}M2R?G6GVwk zm>^1Q+Cxs<`rimW^9vN4&;|-@K^1gWHMkK4F6QA|LE}rH_Y%U^hCq7wpdK~St%Qii zAMzE1P%WUQH~88?2{+JsOUOEJ&|P8BWnCF*EZV-T2NCkcQmyT5Ww;8rDw{Xb}PkJDTKYiM^! zKYx`)5H|e^iZSTa+1*`b{7V;lZANNNz-r`zk|HZB&lH zn6G{Ks(FJbmi5HoRD>*!+*Cjohc+%iOBoTVh(XOqi1F`g7M{PWp>2d!EIfZVf!hd- z|I;sYdD&@Pi4^<0mIZ{-ng%dIlrjk>h*BoO1X0Q)m>^1-1QSFllVE}?<&+5B+f=%)(TBe#Tki3&@MlzE62ej*N_F|c8J8N zYlnHlB6zWQ3M^m533;5VyV|i*kj$)YKI40=?|K{BrPmIOwrG;H$Gh3r!pH60RKWx}5O;mu{5M z%e^mbnEvK6+5F9A@i&YTn%SA6c_IUG_oyYJPq5wzoEmRQJ!Ghk#16pT`yZ|?# zqzH7C8|r>m*oYHSg@jaqfG;CrW8(SC2EB|3#AauT!gCoB^Z)o|?*dQsE~xtd$d|`+ zR`X7y|0~kxo5g)Q$;k8z@fCZ@Imy%grK-38p z5_-rZXiT6%U{Li1nsx-y|08*MlN|Ex4nhJSQtrbmF>oya=7Gyx)Y<_d4yxKQ_MJAe z@ceCr?mGps+n`19@AXl%g0Wh*A{81W}4&m>^0~3=>2tieZ8%MKMeer6`68 zq7=n2L6o8xCWulL!vs-^V(5G{wtc6Y+1Mt|n8v_ERB|F*se^Ygcd+pM?SQ5v5W9=T z20Wm~?DVW(-(byG*fDpon1tpZM0*D|mdsuk>_OPgdM}a}? z3E<+7LF{iI3kai?dN4thQV%AGQtH73QA$0SAWEqR6GSQXV1lr`0%}FUorF^A!BnD@ zdN4thQV%AGQtH73QA$0SAWEqR6GSQXV1g*69!wCW)Po74lzK2hlu{2Sh*Ijo1W`&o zm>^222R-NtTLbi7%L}doqxiWvbA}>i(>NyV9Dhxq(>TWL9DhyOLHod&{(t=yUh~@P zsqz0mJVH)$mZob$rg0elpSIp}TEt}YB(xPAuznx7>INMx0c{+E`H(6eoZ6Aka0hP{ zM?S+Hd^s*B3)5dtXh(~KMc}Uj3k&AW;AqBxy1jOw-5vxk2xtE9@_He2?HfVc|Dw4i ze6n3T{r)!zci8KBx>bn&JhOb~es0CY6s{O-M5Z71K@jZuQa25?ZCps<>ogt-Fn zIKX5Up1+f!$#W75&)+%V(wFJ~=dCY|o;+|j`9IbCyl4IH7x6lOr?H6rorXSF024$h zk70r+WAt%43)yN_h+uL@AG9f+*!NOc13!h6$pS$Iz9KD6P=HGg!p_&Onb% zm>^1Q!UR!b6DEifn=nC?*n|n9#3oD-B{pG#D6t6>M2St9AWCe)1W{rWCWsQ7FhP{q zgbAX=CQJ||HerG&u?Z7IiA|UwN^HUeQDPG&h!UGHL6q2p9vz9Tc0Ds)n5XI}{{nK0 z476S>dT$k6V9aOX`8yw4V9aCT`MUyIU?}z9*i^QO{p0^H!7P_|TlH+$`MZck?C&D< zBnA^iNn$WTlq3cdL`h;WL6js06GTa3FhP_g1`|X{VlY9JBnA^iNn$WTlq3cdL`h;W zL6js06GTa3FhP_g1`|X{VlY9JBnA^iNn$WTlq3cdL`h;WL6js0T`rAUU@Tz~`?~}^ zHerG&u?Z7IiA|UwN^HUeQDPG&h!UGHL6q2p38KU%Ob{hDVS*^J2@^z#O_(4`Y{CRl zViP8a5}PnVl-Ps`qQoXl5G6KYf+(>G6GVwkm>^1Q!UR!b6MDWZwgLkdL(t|pg^Or> zh`l8y2&`~~FQci?)M3`yzTpgF^aZ)t29HmZweA*lyv#usp1%j7>uwLQ@ccalU3aT; z@a*A*P3GFLNu~|X>@%)R`&JIM89I#xS;L3g%!EvU6{Hq{)^Z~nncx}&OeaNw(wq_o9X}z)zu(w-{(fVJTzdNz%q{{CQ8}M3d$c_|G6?3fx9blSADnSg4&2Lv zPZEM%fy@KVe?puKA998E)WD8H9Or@JD9B~>e_5IS{)Hah0b>7Wg{<`K?Nv^BDedwY zHd=P%fkD6HY<~%2BMRyOL{|}9k7At<sCR7ELhno6Ii< z3lP`|Inb;MI;0D_su0#!1<*OnE0=j~q`R*t`p zte`W&82^|3Qrp^MXx$+8*PhkvuRW_3>S_|0AWGQ|6NHr<;QkIw5T$H~38IwkFhP{E z9VUoUw!;Kb%66C_O4$w*L@C>0f+%G>Oc14PhY6yT?Jz-T;2b#Np9kT>t|KE9QnkLtk z$^TL20HJFFkdqQ*4iGV$r-fxQFF=U#uMaEFUmsRTj`n8d`RmJ?0b0My^cU&?)U%y@ zSp)w1vc~-X&AO7A)9&g7kb|MKTd?D1V3SUetdBII1xnx;mu&mSgD2sThZO~)1Q`GN zF$w+kV}dMJ@MB{7>&H|Fauy^zfsVZapK${U5!j3yi2Z+J1h?Ys+VVFjp@Su(p@$CE zxy}F)#=ilqJbweAbDjRIJby#LbDa!~e}h>C{syzkU<--s@;_C%Z=0P(8Hh z2FeDX9|LAX4`Bwg{n^9*`m;kes83~Y`#Y7r2Q0pbz2)yB_AW3RdanwYy^DRq-(Bp} z!0e~&Hh-T&-SCNB>+dJX>B_MCO~7hIIrRRDa+rYGS2%?JUg3}cvHwqWnJ?k`R?7}_ z+jM*hD8{)Og2%xGu)+sO((wGW)67bL0g)GA^l ze#sZO=Ycp)3a#yglq$fN0PC~x{MBcHY#acwO~7LijQ>k?78mt3Z_X6^Ys3P=Xmdv} zL6im!Oc13(0~17P(7*&y8Za%-a8H+un(m&`?0BBjVvjJGj_|tURUY1~oOt zzmwQG{!U`o1J~md**X4BBl89|sA~q`0yU`3(4)z~H_3q(WPRVQ-G4l$Smr;M<=*SJ zVno(4{)JZiD8(DNInD5&VO>RU$|`|OM6v^iF>?4L%@cxqpRm|KZkvi&=`jA?!>aIi z532<@NcXVv{N2Y2IY$MW&|&9$K%*F8BccZio9=-f)kocQ4si`+>o9!}3XfqF7k|ik z>@4wN3%i05eE}P^7ZD$ys0r!rUu9+bdllN<2eEInf-a+D{(qa}x|(BsneTraQw5$| zTs>+3J(f9^&G7!m&iWU6-Vy4;G?*ar!nD88(~!_rf{#c-*kf< zvv#@$zHkj1@k-LIJ5G1+pGLgz;b+}quHl1v`yMOP-+NGRgV+ziqZ~~Cw|YM)50wv? z@jv90*|$*V9!p+me%CQ~6IGlGTbBqrniJ~u$E*T>AG1QL zc@X<4*y+swB^c)EJj~h6`2WWFI+i0`@7Mef*G@g7%6I)G%U|f}Q>cD`2_pO9?-N$= z*;ME%A%e&%p}vLfn#9PJ$U`yEoBr}4V=!n7uXW7CK&>d~9axNiq5CnxEvCz>o(j$u z4w^%JSb~cMM3V_z;-HLo5pjC$OID`8FQJJ8#D2rdf%Ej*>!;-{1$bni{THxI+nRJO zU@EMyxGK8W>RrU`87OOSpM%K!tUzs&GIviHi~ z$vQV3QLO+sp^+^C3qY2xXd-%93|bnDe>GWn{%W#7wpoJMy5ROSgV(L6l}ROc13R4HHCZM#BVAn$a*plx8$c5TzLn6GUl7>#&IY)nU=Vwl7I{ zO_A|ZnL<0%HkKP9yWCAB^Lho|B<-D_^jF-STXGNg|TzzeVa;% z3t=O<;9QT?Fa`4=r2uS<5O2##OO5gG8fK=yYoJ@MKFdMJ(3c&iiQaySJ8jBFoO@QL{|wBL{G{6&7mvas#a1 zMT}q}k{xK4i9yIhhw-l{i#3nzJ8j?kjp4^d zKw=LmeL<>Cl%qF5LXap#D#!)wbQqg?n)UuVu`o9Av_P8h&`L;QrlE}Cl+9ug!-?@E z@`6OL_mI~$f^(A$8`EDIXl??rmDpGqJkt~s^Au7ml2Z#n=aztu*eS^<$}b0v_+}PE zMu{QE;VWb$f_Bs^q^6~%CYOLO@qOK``!sPvZTtUMK{}6~rXGID4!a8ZKkR~Ka7uyR zkNp44oi|6UW-RPQ5hSb zRzz*w5ZbP&Bf#wBFZASK)a(lrM9#j@ zqOaBYu#U!wyNo1c5=6mHct{FD#3!d~>r! zVA<(KI06lF(Ht?u8Q>$}o7kBCHbIYoZ)9Wo+sp>KD2w?&YuM4r-Ua{o|IaCzxOd5x zV@3a$cR$Oo{d4m@>tE;*^r#^UJx>`mL}7x+A^I13+A_LI@Da=?V;s=1|J>25f4qsO z4>{}+C6JXBq>{m$g5WaXVf;IRjpy$KHpmo2KO4{AiEKge>BFMZRE5kmjDi6?mHBrf zo7vxqY##r=yxw`eze#5fsD6Mt2zJCSMi(C8LRiv;4XhO;W)|7Rhk%O85F_xiCHUSa zOeye+CP>XY5QAqXcN;p3H~#8IKG_r{yo*yI2lrtMav{dQQ`va_PGy74Jb7*>Nf!xDhfR-SI2}AmOZ4@y;2mp3s|FtynU@b~B_iKulao;l zyUzxshJ+h!el5OtaGqZMALN7sE5%_K_afEWTsmBge~mbJ{u*&WZtyhZ;Q4FJ;RdQU z8UI43W&gvbv60G;Q@b2av_!2+gN7H5eleuNg)B=+EJ=knx1mE_&|zuNA)TNRPmCLn zY}}L>|L)}A_`8z>G9I&ogX8ah4p0@({9owe^X5h|t8@RW|2>%a`tyy0{{`O*et27v zl*9BFdaLn&*b%27XTt?yH!p((!Sfl6e~)vh{5{U$1|B%O&T@QN;fnX$5yc>~*QnB# z1RZ^`l8x!_N@$m11sl`fRcvVt4oO9ssc8x>scD&csi59Neo;zl5$KjCP@^P8AwLgV zsAOao=y7p{fQq6t=(&grDPUcoVhNN(l1mgok*Vg4+> z5SB|d$VDA!6du&n^C>X2gDk{C9KsCEU__SVMm9>I>V)~fecz|^8V}3d|1W#U+v4iG zT>by$aP#UNIy0Vunuv^l_pmYj-NU8=?x^ktvkMp){`;-}xuIs$H|Q)1)M`+Pg|i?4 z=UD~B2mr_{kd@Kk<;OY@@8so!2V_u=tp=9`C)s%Zo`jCug4k!-_^_4*uzZiO$jSE&@cm)&LBUiVK@eSFPKt>=d$+N;O&fm&#>wIJ;UaM(o}@@JbTM; ztvP&s`x{Wl65^$l)a0D9MC8+|6m;zrK%$^A8IAaO5VI^X2NWQ78U~u03|u0hF=@m_ zc~{va{$6DR?M1)FCh_+gi1oi*Y5B3!hVPcZ>T5`ej5IEXG46|PA!?8S$w@hM6z z&Mz%WPA%rjP0UM7Pfbxss#E~?h(MJ9_#Dtqo=yeOjARE-ryT?1TBfyP;G6jVHoo_> ziqZZV?~WlYFonvgP!Ytsr~Zc7K&h+OUZ`a5|)q~4Pn}0tJ+Xh zqU^bcsYKax4--V$a}N_l*>evQMA>r>6GYi_4--tQ;ZQ z%TWZu-6v*PM1vDNuA{&|yuSDPFVCtaq$hYpT291uN0kWUUjcTGzXH%?&Cky9R}gw; zd4Nn=MuE?^N&nB;pW1owW?U=eunXL0maDzI%C~s>r8RhqDnxY-%5H{s3RsFL@X{8> zzdzYz{{DoPOh4I}{{CbuV_^8dHmc}+v{QBs&ftKbI)tA8i3<*Wc8MzH|`_^ zZTk{EJO&<2gVe@E>nQ?lE`-4cy#FN=!j&aMU4lk(z1@ z0%lU+<^{M>6(JEJ1-f7(f+NC%f#E+afkML>96sRrJ8W%au&e^^C9&X!1bi5ufVu%5 z(}yKQsK;@8m*SJe1}@RS$`q&{!O=$`azXdy#AlX3wjLfU>laGr*h znUs4PH96z(Gg#38r)5};0QEBNw2b3aL3ozMArG4Q7{Ia*R<{w8eoIOVa#C&LLtJxG zb5rw5iuLsLz%f(;>)t>WgrX}b)nt&<7`RmX+fMYn@OOtwH_dU6jHwyd_|ZW3(sFS=>B(C7M{P};I*er{}1Y{Ji7Z_#r6L?oUFNDr*n8f z225D~eqojS`-N2p-13I5B?Pmfi}%26=+*8Z_J3GIf?%qHOh<#dfuII1XjL3&T}pg> z1#%OdVIXT)Sn~&uS3twlpncNtgoM*qngi+;So;i*SHSs5f#^mMQo|`8ezh^EWi+7v zgtaaS`V&@vr=)_i36f_}B|siRtll2T#JJdFf$GXL7OTNcJmleE*qNWG6ICdy+Lg2z z|6XF}`Fn{SvOyoh2HmjC0LkVI|6z@7f&qs!fy0VYWCfuGItuZwkbFJB)dj!mrc2%Z zkGJFYAgb_ei{W{df9*GA}EefB>u=nH@3Z!t;XztQY^ zf1}wAP`j2eL6oi~Oc14O2@^!=TEYZjEq8G53?_)uwS)=6nt>=PVa+5IL0CfqMG#i~ zq6ngNEnybHY6KLOu(B0J5Z1jz5rh?8D1s>Pg+py}gyUhuCK{9ji5 zXZ_OjVeiW&io$;r*wy|fpbtI31X0olOb{h~zywj!2TTwpeZT}!(g#csC4ImIQPKxY z5G8%U1X0olOb{h~zywj!2TTwpeZT}!(g#csC4ImIQPKxY5G8%U1X0olOb|=@xV2j{ z_s;ConK;vj9YvEx`Rp8j^P!VPdF&j23)n%$Gt>WTHoJ-y{=V<{A0g+%wxP~yg7Du0 zcBQ`s>?)|m2TTwpdB6lwk_Su>C3(OEQIZEt5G8rQ1W}R)Ob{h`zywi}2TTwpdB6lw zk_Su>C3(OEQIZEt5G8rQ1W}R)Ob{h`zywi}2TTwpdB6m*BoD)=L#kqV;>V!L1JPiI zw$5RbvCy_I^gIyIy+iP^8dRwylmdi<@ozW>$KP-c0q|CpFbY9xy?a>;V%*$sRC4lY9xy?a z>;V%*$sRC4EZO7n75{d}vve?BFrfKx0+q;Z#8=QfC-|c511fI`hW?dqz{-NO8S5aqNER)AWHgx38JJAm>^2} zfC-|c511fI`hW?dqz{-NO8S5aqNER)AWHgx38JJAm>^2}fC-|c511g9^Z`3g2%0`H zicjdE2WB%%2W?9>Y^5Hk4Te#Kwy|^kZDWTNp{?v3f7{vNMW~UUg#yA71w4i5BF>*- zZfyR||Ihpme6=d^Uvvd5N&ko*N@^>CP$KSeoTB9C$xd_FZA#*%qe7s{}nf8aCyA_6+}d!7o}$Am82FG6s49> z6!Zp+f48%9{N2tD*{!sVo#XFr=prC*>z|^sg3(p~9cHw@d$%V19^+r=0cY6UzOD8n z``k+fpYbil#GZ;YU^`qiAsZzRu`>NV1U-V_AS=_~6X0Vx82{(hhZ!YCuuC!iJu zW%pqS$w*aD%1IbMmq>oQwJng zl$r(}(S=FC_?im(`U-ieWvN99;3bB|AXBOpYPq;TTRjsMic^a~zELPB%1_Ek&DG=L z0@@I+RFKX@NU>i~3UNBr$g<4*9B_~qD->tuC8u&_<|*Ws=9FZXWPm)7nga4;dQoC- zF}e?vQWcQAq>xymkeF8q*-`^u0U1-ha9Y%dQ!Gq>q2~#rWIfn|EBF#G&|m>Hg~Ar% zK+6)$7O^dsdsUDJ#=zB-3uIud0;Q!d0?Gp5g&hnG19j-t{ovOf+jieLiL`YN)_*}9 zP>Q|Hk1OwSXbCa?W#(Y|%M4xN#>Bz&mxBYevz_t(Jo8IleL==0u))Zx6DL3EE@$vZ z%`~u$4{LX3a8Ie7kZb3isT{%rZ=Lir1zeFNZp4BZe4ouGku1!Q4F7K~7C7;3@qr#hDn$g7l~rm* zL1s~E3g+5Do5D==NpYzT719Y0rC+ft^bu^{J+UGP;Te-Ki^X@%-qhLk+;LR?US1MjhB{Ckc=>hC!Y zgTE{sjQ=GaZYJoPr)|e(S4aV>!60K9>^wkcdw@)15C`oBn#XyH!A!E~6$9hn%NzoK zFLOw+F#Z?W`7DW5iAffhsmVEs#l;ZULigh27lGVr;|6KMFfcHH8!@0AUul1jb5yV} z{$Kg$Ueb~P9kmeo(LlwH_FFj9`xZfBmwJ_P@Cz3;%$e z%=q^hN8I0I9BC|!|3l^K1CR9!FoCqCq^2Q46vJpx8_W)Betbwld|om`Obicb!~QXj zjK9Y?N|-?A@_<+%OBnv}fKG@1dz_={?{SVc7RLYLf^QNl3{C~dI~JuEgOxxDDF(*B zhd31e9^%kq1hF_kECvRqzehM!{vP4bV`2Pzg2UkN2@We3#{Y{KXxbNbLEd!2I_xhr!>&9A+#a#|8a8#u32+3Qmu|$2t6182_ur z*56&ea_1o|rfuWU_`3~k+BOa`5DR454i1CAJHV#x=CJv@o5P8P@$X&^lfQexZe!Cb zh&ByOR|PfQz^;N4Ajd7^F!;NS!-A3V?=lWK5Q~BFzw)bnav!ENPGkJLfm_acI(pX?; zr(mT}P@0sJnGCK62&l%@AGQM}(xe;_P~6vZi2bdH?su%?VENm~!N>T&cctg-QXYvr zAn&s>gUJ7@B$@j-x#v}21T<*zDNurU6Ac{+%Fg3CoQ484qh3pfn^7I2s`f>?4O76apdo4Uv|I-4$EV*Fdgq4Kwg zLyLv+|Fw?kdTDPv?!|{%&yCux9>UY#M)e zu^BNk{@ukU0Ahh0wujBiM{v<3$IKvF8GluXS5r9e>W z3aO{iwmv|zCF=Py3_Lu1pa5`Vm-y?(uExap*NvU$uNyn0AqFj0-Pu+Cy0aUxF#bQS zW4rh$`^3xGqAj#QM*(^^dAwgPa(xLpxCOc3h>tHWh|esJ2iGE?@&we8vWX8Zh>rKm zjnz>ApY&2)%TQFK#Sos6nx_x~>UD)i`^D-gL~3YhM*GEr#=LTJ6p~V*{kjs65um$E4&a=p!OHSio0X68|Ew!gx4wMV6aeKxXi4$qYU|!5_uoCk9w!aV z8Gjp?^H>mC3Hn08N&(_Aa8Eo5w0JABKtW3fR7Wak!K$?CS_VD|EryVy#LNnkJplhd) zmR|&l-6F^x^ESz4;4;+?8p2=(p?_x*qs#g}K6WPr{jLXOLRF*xVv6@!j=$}0hT4w3Bh z^B@t5h<4EKNcfbP6$9hnMXY>(7qLPP%3H+B^mj396Da+{>X4(1d~31!6NW!B2#P->lB^_Y0%f-!F_|ER264TMzkI82>UedHrQ( z0*SFP75rsms$pULzvRNvYtETQBA^{0sU@kPJ9(hiF))BEyvu6v_b#ggBjew@ta2b0 z1LJ?#!Lf{g@3C6_y~pas!uY?^?Cf#noS$bP=^D~3#ab%FCl(d?fzk?}gb71PYH* z1tHnz^c1lR8SU5o|MNUu6L#G5=5u$9Y9e}Az!{Qbq^#=`jb z7faONUo4MgTZRR53929+a8#v=?**Faxx_xY>2u^SVUhQ*6$3E6PWy-a_(G zor+okfD&(92J~cFc(dgj3(wzgEE+6~f6Z8V{+h9ZTH})oxdW$Mxz&ozP6~qtYgqhZ z5&Qd#1rioNSy=x5Vc}!^k0mTpUi7BF4SZ*Xl-dwOf>u`0*$oAxgcctUQUDqkj?c_3 z0B@;=tdoVSX5i6-x8$JxL;;qBzXB|v+V*Vjibuj-yk|fy8BjkFF`S1q;sjc~igC-2 zBe)OFAdv)a)Oa$v{qTYu`ZM*o$0+7GK z_CN_x!T6p<jH4F$?`IVuo}_ikMmcmNBz2F#cCJe!_n2 z!BiavXhFyLcOkRh--XNpER6q4xH>BV^7w1W6aw~>A(I)14e}Fgcmi88 z#@>KH_C09C160>$B*Gd1u=WE=hY~U1VgqS&66im2Fo5fPkm-myQt;?JI0%v30-(y_ zEQi?Nv(Qo2GaM{`uW@i825uPPSMh)bO(0#)nJ<3CyX5Hh$A=VvixFtlgDb@#cDKJl z?0$@le}mXfKrB!}6v}S)H~bI$Nasg( zy}uvXLH(RL?cdc8ELvL!$(Y~+A(1j6C<~URf)XRBs0Zc0)Eqmc49LR)GEIO*=&t~a z6cgiL0Twn;{sX)G4=0HF-z?Gpj(fkXE2ukBT#%TYst_Nao>v;5Tu}i^lp-SVu_JIO za3u&ND6udm3M4AAFeV8kDX}mn3nVMCFs2BkD6udWN)_s`FisPgro_UylWV683*#w) zQ%Wq1m$)v;urU6&W51s?%lWGvwzfFa-)}5tf4{MSdQ@LoeExoA31VUV-{gDgq3X}L zceqj-sQdsqT_N730CB+}G*^KF#m-Ivsqu;kFp%e3`k*r!kbyCzJJjJPkZx=F;h`s0 zdV=LICyUl!P8K^BP$(Mx6#%ybWY}c>%CH%*F#gS86Z@ONrUmMwV$|=9|EtXAob^bZ zWX|w^5BuW2^Pe6GL)-)pYS398xuqqk;4tS=f|r}%Q3S?9gF?H%pmD`h9~VoxI_G@C z78(>*ACQ_AYbElZMeOf?XeIKGh2<|JjtW(4{cCx}YqB`v3bg`-wo@RsR@XAvc|cD$ zg;t-S;WdlD$2dSml%ae4Yb|VlAl;9_^hy9(z9tTQr z|DJqtXP?u6k@3JCZ8KJ_zhSfJ@7*;yH$Y8gP-cQ*P;J1@;`5iCC4`ajFFT7Bhy@zS;AHXo%Lz)?e+5{A z{tB=}fvkr1;V_)Y_*aG1<*y2>7uZ@ARwED_WbH$~<}(Zii@Py$5y&oszw9ia(uAEw z4#a}k>hPBnoL&W3JpKx>fCehX%wGJ+>vpfjI)1XBx#aJD<~l~kzx$bEKrB$89%L5! zdypBFizE9JzxHiu5QdgX!Jv$XT)Kj?9b_PafrkflQ2*bB>=J($vdb|s{$0q<^LHV8 z04SvXPn}x3(teicZtxHU)89qxQhyh*E3kl8N`(Af#10A^21)V6>;Q!X?6uQ=W}m_74rnwcF>1G&>z<#WG6K}b01fiNCc2=Ns|~0`g_N71z7FVs ztel+uWQgm*W17h+@gV&SMMYvD)7LRq{9VV~$He$|9Wxt<1@?*e_MN+n&wQEyDpMKZ z=UX%X-N>x)cOx@suy`{w-`~y5DlCkDw=iq{-NNj^!uVg#@v-c&io$wqxfy+yAhQ_M zO-if;6sdzdwah4Jrh4z0ht!NbT&&M%xo zI1jwVl3wPrYy6!H9>SZ;E(T(O(#t${gTM3GL9SlNZufT~y9*2B{~KSHP2KCC!vRX_ zppXJt4#S}2zKYrJ?<(dvM#jIZm~B8T21fW<;LLwlGpGGs&0NL;IzZgy?;2(o7Et(k z{awclisYO-8%_OHj6PzEWYFzAdkYd1?AGd?{9m_R(YHCrtc&%p50k=QA0{0Z#=npY z9YLMh2qvSy5lo;0I+jV}Z!D7u3*+B3CY8TwOrRX@6w+$X?Z;4o+z1wkMV!*+~?YE*SBaeGKe#S z92zdYv)rbo!Qwyc*fW;D4a|0b8<;`kg$J0;{vKckjbd(Plli-q4HO1@IXwREQ@`7Z$D{8Wgra*bM&uU;_>H|6r2?u|Ns&C!4_EpKPFMp%qW+rG!oLNCtV_tp<{D~H82bO zZD6(m_YdlsdHyyqS26zI5WJqDWp!UBD5O}yj{d(fQpf-BoMYj{muWlMCI0RNmuWlM zdH(LiUZ(A0m-@R4T&C?}Px!lw9W+JODaBUj(DL;rw)mRQZ18tJIKJjH%Yj%7jQ{g* z)WcyMS5Y?*dSK{eQtwa{L^PF9}3J6R(@(e(eT>CIo2u70OM0~HJm|9d$MS5&Ti)rY0ltY$O# zTMh2mRkO)~SPYE+|Lj)Qi#F4`!}zzBjqh(Qn+OZz{}_>b64|qJ)j*B{RS%_k#hK}O zsVNGGLvtbh4h9`F(A*=)84Tc#Ec0JJR-?aste~>y9EZ{0a~vQR=yuEt;E7sT`a&sd zU`ZEmq6U{f7CH<8prZ)#O29P`IM2a!gGwmym{@LNNpc2g6a%qAO_ji`+{EY$ z3k$GBQwg)q-x6lfBuxpk6o|#Z_LW&}zmFI}ZH(uPJb#}v3b8Q$y~}9#_bwx-l6$NtcU5rnS}6>x82?(aYW%fg1w^$_ZXOE&o1@Xo?VHB@vl3()L(Zn z%b#89uRnpLg3Ms#FG5n z%wz@V1bAt2YOz9EX--b1Zdz(yGU$xA(#)Ka%skM!u$g)3IjIUM`KiTu>Lm)viAAY; z42(HEIpCA)b9i#Vrv@`{K`NAAC)hi@p6u>|bo9UlBJyb`h$sL{L5@HMEnKXwW#AE$ zU{G*?oQA953co@Fx*V}m0lcU(4|MvRLo(7diXNAOLuOujQGRIw;^K{B2F754VDQCh z!7Pz%jQ^V#GA%Odk&R^fzu;X^j#9Sr)&H=QT3|yR%n?!%Ml6hR7I6U((t+Xsh5tV| zx@Mg>!`4P){JVwC;O`bT8%7XI4#Wb5{#G`(zgyWro%r@G!H>`FJ#Y=JJj9$J1hsL& zMWBQco|%AH(0m$rA|O_Qz&rqW8bFFw?5`B72e=I&#mezl1~Lr*8`%DT>#?j-pR(?4 z=;#>3f63DV73@=Ae8<{33THC=8_oop{|IN21F=9&<_IRQzY$EJnfy2=jlXeBpn_}Z zlqJ_4tL$eXrGR)}P#+&WfC=&@=rli9&>_GI8L2r1sYTF{3P@s5C980axDW{6~f>&py|TrSY!Ay{Gu&x|qspRz>f`4nBDr2lS{p2&Ru ztSZF7Tq9KjUZ}K*Ym)*C<5i)npt0$HdxB@JRNe%d#spV&Py*D9>}J&X+YQZ--Hc)& zHYh```@1IN-Bsm@$Ua0GzJ>O&p!XqxJ?sE-;NN$Q5`W)8&%u1h$n*CPBOe3vf7rcB z|GOQQ^0&X(xEg-)Ce!~)7g5<5o7FG=2VZdf*=F~5BIEz+(!LrqQQJd|44@_)J} zjxXpmHf$D~&?L4#tJq(C=mf7GE6ZO)(9jB&N$l9kVj{w6o*zL)7h-_U$|@dtrnb74 zflC2Ci~>3*oPjYxEdewD*&$vVYFe6*fX(}$Ww8kFV`+>Nm=h&>K0GQ#15_@2WfA-P z6*`>sg@xtscN}vPMTc@aCTSX9K}ubSA#VmAG04~*<9|ur)HUB2%U^>A@fiPhGK&1| zWYhqUnRGI8fY=~Qf3i9J{mB->!ua1Tu$N~;MgIll!U%pAE+~=mNx(Za(C)Q5OTk}t zmL?X)zfV|l{yt%;V`2PzlC9|PNwyXi#{c(353TJ@dD4rmT1sNq_?yITz{vPFiCqlD z0=XrH-RW-%J7|vdxckb*J>J}LTWpQ)8FkJpkcA?99ke2sF2#p5%hN_M+^(&-+dfffA?{KI>=kFj8?ugn{~yO zXZs9>zk9LBw%^ICo~1v*jsae7VsX7BtIJCg}jpxtlJrjN+ z^#AvWm4b0g4YvHh@Rpr5bt-3}Ve;X8Svb8Pt|rz|8b_ z0a$DyGuz*VV6kP)On;Yw#g;R({ap?g16>cd1}t`fnd$EVFpG(W=`Rxt$UIIKroWtE zmNJXnUu7067RJBoEIfbJ!4syMEPS9_C|MZ)>a&>r)d!E5f^K)$X8{dXn6dEuH3PHE zS#{p2Ov@Jx2lyXhEja-xVC7 z(VsOOVSm?f6tOV=_uXfs(DT5v9a|547PGPV{EM_?ni-Ga~nc3yfvSl14K=GpR zcQ&X8{{P0p#P4s8@}z?ba8M@}G>;nZ2yWBHm**FyFi1$iYXorLmFYFlYZVs8H#~1Z zllxO!tD@g5-g_KN7WQQ``0ESqM*FhKfmonS>CdL|*Pl&~h4KI2*p%&Et~cIct5FC~ z0V1ungckrP!vXkKmLh5aXn)10zz#Gwh&iYL?!Z7-mR50y{jGwoEUn~V`CEfyW$8RQ z)l84B#roJr;=ZyO{QU|ZiTlbX2V#N3eS4EY{=Vf^$G?ez>ZU_@D#WlS6D4-f%mROXTm{$T)&B@8hsjsi# ztgUTm&Q*)-rlQoG`22!mkRoK^k|IMCrxxTSCZ}fP=cJ?-LDVALTa=ofS^-(un3z|B zE(`J_#BB<-s5X}r8KK*nlA4^En+WkYlK+x3it_XFL5h+5VThyv-E}yWVR0!UT#(Hx z$p9^K2JczJuob$G4B`JA@L`KN#R}C()|zl(sDt<-9-&;J79J_sl;?vsF;)<*9(2!3 zUOK7D%Q92TvFib)6O@#an3M?$4CGV-pRYwpE9g<~mR|%OLr_Rb1*L>yh2qpyE3S-^ zk^(Dz{q*Eyz4W|Nz5Jqd{ro&oR!YfFF4l+VC4JDY&EgW>l>Cay^wd0kc(@nqWt8OR zFfcGE{jY15%(QP*KlQ(1w&aV*$C^q1&(yi8Mm(3y_%CQ$DD|d_S?IsQe8`;^|6zyE z|A!sz3_qs)KWr})e5cg^uZnjaUQgXw20x+s|GkzMTm?q)bN|Cm8u$-8hv5Ig>fE1` zlj8i~rzii19b^SRvFQI66Up3Je!)rq9k>0vaf0Rf_W!WMYW~BH?)VQofZ>0d_Rjp~ zt55d*hi$q4zhc(@PuuoRwEPd-mi~W*+wNKWnK%x>_e}qX9dGjgSGKmaRn?r>|FFxM z{@;1|INR#M%B6kd$Lt@&Cnn*8&i~o=vT^*Gw7K^`tW)y8 z>0siee;W1?@XZPTKkWH>bN+`fG5?jDn|?B#x0~@F*4+Ky{K2GnS;#Hz|KF}Ob@WTW zdi7u4#VfSdKwS6#KdXK7KYyPj_#ZZh_QrPOQ|FAyaf7qh4|FGo)|6QARDK#z4sev!mgRj>74;!n2FQvv@L5z@st;>b4 zDE@!7VUvPrDwi~tFys%)zW8K|2J8Plaz6rDxUZGK+YsU}j)+5pj`X zWOQNpdy|8Sfx$l5CfJFEaiZBoP-Ar?quJk$j3Cxk#)Q9D89`HR4;WMaK41h5t}-)e z{bdHt|NUiW()!B|X2~&e{gq=9U}5|l$HezHj!A@t@oxo_+20B#kSWWV_5Lnr26c@# zG3)%@1R8?=yM@{3?-u4D@Z@dI-!05Vpxr;rDu0hLgBE-+u_*jyVgXIQa$o)MAW<6m^`ul_> zgN5<0JuA;&d+>m8DHF@zQYJ13roXjU(AI&!*I1qYUW2ld{$67RnRlPn?(cn8P}BGctKHuxP*&XEC*TQVc{YW=@@yb~ zD6o0`RRA|-1KAY*27<++*kt}jv4J`ONo)##lfYtGYzlv~z^rmMw!h_UAUo>VwEotC zm&7!)S^RAVH;tRwBK|hBff~Pa*qHv#VdG$7{JV`U;O{mz(6IMOwv4|g+45Kz|DIy= z`g;m&?^QOwzgI!CG=HzL@%_C9X1!-K`}>{^6i08_1OC2c2kHI99`yGUJ7^CUFNefm zUJg*#LX1P{uNY|W(_dMRsK2t{=C=h0(_ae?kiGjj1pe;h0EN{t4!ys}z@6aZ98!Oe zbAVpai@p4>ZQ>mS0q!Sd;?3peC^hyi%+YUQ&>6vvaoY8sQqVH zSJ9iYN+9z;?7)Tp$6x-c6%sf*>wgTRxcEcPV`u*>Nw@Ae-MxR>|6|Du&F?zqZu)brVK?9^VR z|Fa9Vvh*s?Ui)A8GxQ$O|F8=#;m4W$huvKF|L(3b{-q1OHvflRp$5M~>Hjw8zjfA5*H-`k zQa*jt)$f<1I6@&9JVFV6Fe4n6)4yO#dH z*kh)jaatSt{%5qWn|n;{UBUmHUlxaS8Im3TcYfo@-TStS8Gex*=0zp&OCbI$uYBbC z^v&`7|00Wv7wPZW9r~a1yySy|2NnJBn-Tv1;SqA0vou}ve{7@6=l=y~!~S=>Zt(7u zFW~&oqt}1p(1b8=_$@)0mlVK{l!Tuh`2UJ|ztpd@kEZ=Ms)}E>(Dt3_|A&Vc2}SJ5 zwt*iYhk0h!f7szj|NZ_=urw2!sE2vB&3`V-z1MHWh^&Jjw(>t)yM#Ys^Sz1iBTW9s zJ$7x~zh?g|_=bM?z19Cu-C3mFa=Q0l&fiE@r@xWlA~lWG;cpr%s9>4E>hyO4SZoig z!rwitpfLvMNhK_de^0YA{XNYp1?vB^GX1>@X5C|D`g;$|ddw>D_c3VU_urSS8h>B1 zIL92C{()+;BFYzu{mzBG?rEMzDcGD2k2gZxqMyOE5KrPY;1q)z^rCAk-yDspk+R@*u?(M0-LguP3G@Pus=W- z6>bIFv71fc?{2UupbN`Rg5C0s&EfAiHc$+5v1|S1Vh4@taI?$&~?>Bz$`y@yT5*5RtUS+-w?1J zq3kk$L&5e&v1|Q}0*l47JN%6Y+nd6!@izr*UMjoP-&C-@S?n5rv%q5c>~??i!RD2) zYyB+&>n&xM`CAG$uZmskZxvXqp55VZJ=nZ9cA>v*?4Tx08@tcnHg?ct|3r4NzZ2O( zI~^yn+x(rx9>T)-cM7}8-zn^%igzBn*xz|z+4<~Nf9JDob(vK(@MWx?B|H90i?YI1_1zmvgwr*g>soeI`ForCA^bgMq z7h(Ihk*8V^BYzBh5+dLsGRFU~CKhP%FXP{SMzO#Bj9Op|`WZPuY$nXU0s{lQ$AuK^ z(9L|%AwtkfnRw9P1_O^6_>wjTM)ED_s;Bg8rMRpBM0|P^Hn-!|B#~4s&>Zz zQ@?P?zOT!70JV@9m=XPCcxM>a2WJ1zl=NBYJk$BL@LK@jlPUkFnxFTq-~A%~|CeBv z%e$?5w*U9wnU$Q-b#mT+flVn>&Q&(f6{+W`*I{97=4;ktVSJ(Y!jFaV1zkTK}*LdGJ{TKm6m7^D8aVXOkPU73>px-vC^*_JF!e=S**SQ!6$urU4g z0JEZ5jQ&Q0XDQ-YjQ+-hS@|qHfAd*Db=OoDroU6c>K3vv{apxVZD(QnyB*9r#A5XK z5Lm}C7Nft%z^uzGJby2P^um{GAf*k+@&Nc+5%`!fD`@Wj7j)SP17omTa0JM~@Zks~ zBcNwFfKwP~U>DRIVPO1Q!Xomwgay*^C}H9FdxeFIf#?6O%)$eAErbOBH~HqC6YgM2 z{U6E8o8*vhckusaHnxc~rZMpRmsfu~-6@id?f?1Rd$-z7zOnoNnd!njRY&<3{6Cnl zefX+*gXsU0jJqB$xb^TY{Ct-G^_e=%I@>p#`G4erLBHc{e+dRgc!Ysc1moYSj3R%h zLfgz!896{~2EPAWbdSCkw6uBqf2~yB%E&dcFaQ64-x;=K_mfrsf3Mea$xv2E`_Jt3 ztY6Hp zV)j=ZJU0}_qVYG51ynDkv#9+|2k#RpXHocD4xW>$V&VB)1@7E8vKaks1kXt|vhe(E z1dDaBsQv8#>*!$N`P%^&>tW&h+XEg-n8d>KcM@1^9t+Rkd0^Ij7M;KI!82B?Sa|-f z0*kF?QTV$WY}-~AnZH|EKrOw4EE<0gf?airMepw^@E(9uED3*4u~e`y{=LZ(^YhM0IPG#Yjehrj6n=^V0GmxfMCjGqC(`o)xf{A?MBI z|K;+NYNl#WYWN?;X!7Xft6Ks86;D0izc#0IGWSG>iJ;cnMn;Ff8yP_?2`00@5=@}E zQxhhozb4@2^5#qxf6bY?SQ!7BGs*llX9BeYEtow1S}=jyK-Nqaf32B7^Qjd~4u30{ zK&FJTIQ$I*ms#)G9R9usFZU|)nH(q|ki&;%Qt>65!QYqQNyV3Jav&CHUBXMYhQBYt zdo5qHIsJVN-fJnUcOaKpR&)}US*s>SjlWIML6;^*F%TORYDaVat<{lv@C{pS%k=j@ zi^Jdl;Pn5WCGGEj(9j%wQ4uI`VRNV8)p*FYFX|#DD=Sbt0K9;UK_UvgVEF^1*WV9} zG2m4CfsqNs2DfUU3zfr@&N;of_-HYPM;I6wSpJ^li1~Yt12o=rk;CKfMbL>We=l>m z{k;r2sOIlk4y(UsL5F-%a zQ1qT<%=mkj5wz(Rwh|0BXN$VFAEjjhU0sGe4GY^A2wIR2UU~*fi%L3T3=E6~A_btf zDq}uN1ya+4f${&l&Hof^B|^f$OVL2FOiG}$2cRS8NI3{OPLcK%D-d6X zfzD<8>&hhZ*Okc$9NVr;9Dn3|9X| zD*v(vEITgopPiv&OTO9;x&Qi&=Y3}$+8o3DKc^}~Xz4uGIq==M{}oTH+`P+UQU&9G z&t=EjS3Nk@2r8u*{~9r={WXGa$Teb;0-=YlC`>j2*k*Upw{~7RLVv>NS)4 zc+)RK?1W@1__BW*p2eXDN{@dJvGe^s#11)9;}AR3-^1)EM{4ZL@%P9SdgFp^<;4 zAuFy5S$X~zvLeogU|{;&!pifv1w0JZ$IA1!55$7c*C1!KcpQB&P;tQ{W(2aSl|$rj zD~B667qxP5{N2LA#lZRh`isRg7G7Iv|Nq0Tw{w606Z!xDamwFnllb-b{;w``SbMc} zV(WkQv{k#!pFMB=|Lp10ZD$r-Ir6{wq12|2@w+eow_YBvZvU}W@xO^?pUh1H@)v{LiN0|8c(!HxuVyFAlZ8Uf}b? zIye;mc5r}dx-Jf%zg--lF|aNUp1)ljpfx`|96Wz}z^q;loxi;tpec?C9DIK#fC}xu zt2xyEt_GX3mP79ETF_Vpy!C-C;_`3kQ9Bcuj7>Lcl^nZyDXTa$f(J$f66{f#S z8Fl_HWdt?wb};h%-N6Xj%`%IxzplNHeI=F}f`P^0F9Uc}Cp+(F!0$-M zVQ}+|@O8CP$j?g#Z7$D9ERIhuD2PuiDJjZKDlJLXh>y?92cITUni`*&l2VjfTpS;- zsR>%;3`*Fb-TPdLIXSSFVQLEaZtlz+(9(?ZR0YrxO6f(Zi6uFe3dNwaC^FM3!5e1~ z&d}rX({s{OD9uaG&r8V!ospcFlT)dXSWu8t3EM*hcaK7HerZmMLUKl8UV5rRPGTkW zoEa`iRRL-(6zeFIXJjU4C?uB_6{Y5ZY)($h%gZlOC@oG^aCP!mD9(o*UYw`^*>bJ` z^%!^*f)QSyLk2v~F^c^?#|XK;{Tw3)h|PpKL(IVNfBOu}Z;y*7@56{>(54iBtGv6~EP1c8bqSfK}^ zLF>eqF#G*o0^S9>gxLnfVqpBQct?Kig?AYVYTXz2cl-%ta-$QdH|3CV5t@`#&Upmjwf*F{Y?N**C%iU{Y?PZt0^3Me^bC> z85|*hGe9Ht|6yxVkV^wt^dZ_-kj4nc*>qaqlXY;PR2Kq1Wyg(GFOz!yfQ-59 zMj#fb3ZKs&@^?PCnI0kZIOp^`n+;ehe?|_2zl`8RMj1KeKrE0>W)7Rb%%Edx{}-4o zV#<)ItiopL4>rHQKft^3ez4hqSRk!G*~0$*1g!#r?>fbny1`?Tpe`o1J>T$&4bbj$ z2A(wV@iw*0et&D3!@!xVmf7iVEprMu$o_zKZ-8o@n!ih#K_|ejX0G|W8pMM4x3C1U zA(PHuLncUFY{(=9VuONs)$_)SYE#m;V$tEnuJP9kTu*tii-B06ddi1A;;#>=cKYkb z9`V-?#De$fkW(g7Jq1dfsHa_l6R8Jy%al8l#9wzN$Q7CHOgw)BnfMr({u_qKuH6@# zt@WQ>s)m(A=vfBif7roVjQ=O3ByY`|XS5i$K?>H9WcusFB=XmX2{d)v%f$1y7ra3V z)>B8{A(>eW+Z&l#3~Jq^K=!3Uw@oHNcSkBD7NshH+CPb9iJ3W|^Az>CK({m$rGl5L zf;X)}wLmggW`16=LT+YyMhRFO_@W2UUbno|B+|=CsqDqCN#G<0i)FRNr zm~x(S@K(!mo^q6}masKv*lHH+OVN>I0JChcfgMK$DKMdjT7uV-V>!+;Iu=|7AbM{$ zA^1+{%3~Gzo5u=iE9A1W{GEt=z9rND-y+lg=DvM1`Tv@n=C8MRRoXEAhjkXgMFuD> zZavmj;b|Z;0V(^SbnW1|Bt9NR96AMP!U4`63=FW%?1iiapuQdp$cw_p9uhXl7G~)AwPvBaauMZ&gF_EXZ~{4{&cBskk#XFAuDLSZ3e5y-x*-mDRz&)r`VHN5H3P*0U-Q`80;ou=QODA!@&4AmP71s zEY$O{92|eMK%S3#*?ngYTWc2cfBPr%VvYP4Jp6z6){^?Ydt<8pw`YBm)au&#oasNT zcKu&@io>PJ{lr8D&`BeRIALJ=Tg@T$x0=HYG}H69fkWzV1BCq_w#6SyfmOq7@VAB; zvbC&+Sq{VoC94ConDky=U3LRYRglJJ@HY+I4@_f|1F=Bmc?O%#-wZa;PFL7MDbS&) zpumPq1tmzYAHDK$;h`=KNjES^^rYgL(~HJrcv=@;8RV2dp`U z!wAG?VEX@v-}*?tde_gc9p;W?4XcfF`xD4Y^t6OBDsQYwm?28IivvV zwtVQANoE=--9{wA2l&D17IY*m+uy~k5}?Hi>}-DzvxClk`E_IszvgAr3@q_=iq+un zDOS)KAg5U6Kr9Bv{}&Q&6+Ky5)&W|tB=h$)D`*Du9BbI$bF84@IXNg{ri3Wd9gV!LPV|Dm@jumuj*RnZ=7b;HA zs73?@sDlAo&aM#emWLE1dU|@GJ&Ylh1*yeoWeey8>CC*c{A5s#0t%U&GW1h6&#@}~ zJqJFC;|8nJ-y0y-|E6-6)C0Z?Yp{gOWmbc~m%$-(nN<$NVqpA#o8!8gV||$~X#JMV z->cw|xxpIt_Xap*?pN*!_Rz}Qh<#pxh1KCN3oB?{2n%b@Ulvx-zOLPwrN<;zFrLE| zmX}$5{$2)$Q=G>{t%{$2%#MMtA3l-)|4Z~L1FgK9k^k>CEHC%%a@h0V z`f%Bc_b=Zagf~e3H{>N;IofqO;r}n)D4~~oU)cQDwqMc^%=!G=f6?3$KH09FehmMk zu6wJvu|4L;5{Z9U4gUTCN8%q=IS>m}qWoob`ui8Wp2ALWLC?Mw=|`|HUwOnD_V*EM z5+mc^N31R&76aq|aP8DHs(ja9g1npZ_c1HzM5Z^JJI|Y@rp~~2++z{D+utJaagRmp zCLk8b0j2C_e@nr~JwBP&@_X{?4^3E{{({xu?+dWgU$Dx7SRkD*S)KmA1Uvm$={Lc< zjZWD1BL^F6B^hy~L5fz|Bq2hcF{|CHJ0a*jUh=VP%`ip}7!6u9)3Vv_^0 zKssgEjQ+}img@bFlh)Es|91~FprOlD!v1Q4GlKW&RUiBRg>D9AW6(H3N@{Wrhz+}2 zSQE70%gQRRG$#ktlr3Q}v4a<5;KfG#fA6u%{JjT0NB=Ra*5Ah%%Vd*9W|&EQ&ql zZxmQvJiFZAc(A%G_N2dAV0HQIGJo^I>Z;gN{#Jq2)w9d}tp}<5|E{6b^^>b(E+~V* zsxA->s=lPyeEv#-m-tArS%FxPu(SCq!{)-m_}`Of8ArgRHU?~!7YDn>Uk>ozZw_`b z5DTQ0i{0ff7dz+{3gMY=4&7O^)(a!Tz`?H18t_*ibSlh$XPq5Q)~=5~Vp9h?GgIsD zH}GjIUs)Xfeg(~N{(rXdPRtkgbZ2ZSSDoGMuR1v8se|AT|8{@hY92A%8=3OpDF1)>$3!CxzI z0<>b21F=9lt=aVcT7%Yc{tw=F^ybnE$1rSxSj4XJw+I}FMeJfA7D#IeyUX7aa3H?u zc1=1M_U11};4uDu&TjDcIrw1J=j?JI7D(p{cDuhXzz5n*6urCX+_xFk*o$>eR)@cw z;9{MVwc;-)YaOT|oX8{T@?f?J7P}nT4E{QTJ?O|L2V#Nja%Qvn>kK}o2X=N9O1A^H zIsjCyfe$la{JWoB$h0 z)$rR0|KAbauGX1u-12`CgQ@K%1+F9i`@dW~rq=NH-v15G>@%)R`&RxxYOnbh?$WNu z|6y0C{jY-FW%mEOQ}%Y=TRk`7_sRWl_n#N??U2qP_zhkE*SuxTJa|fI`u|qv!#Wx# z?lS)WwfNq_d3yDK;Mb7-&;L-`;mDO}$od~PfBzqL#KC`99R{BngdcIvggAE`zRCtP zp2_&PnNj3#GxRWrW=0MWn}Pp-cA(>3e-_^I|5xfJ?>hM;v*5o{hUc>O+TiW~Vb|vU zZ$F~5Dpf*3=>I?COFy_iE_?Ie`E=Q%?a`4z|F3zMRVFB8P5lqMPwoGVBmG%PTaN7f z?`rcRwr)>{?|&ZIm9;&M+OIHgqlV8UDgE8aYVda_coU5vo7G=I@Yzi3*kt~$18;vh z$!7HTBpaw@aGp)=?|JZ=Y3SvWER26Iudi0iVzKhMni{8?fGw>=J)JvV&HeePn0) z`w^_}D?88MuVC44>^gtHfmaFtVpsb63#^xmgXb?7c+(3vhr(ZO@F*HD2h(3(@a7m{ z4za(&pgUy#>TziN)#I>XVf<^%A@J82v^MCk8Hd`-Bw66|d9jX9YtpwV6bBj&j?=3bx@KDk%Hm1L~*_0SS6N7tMG`1wWMuSgD z19g=O)t-F_UuNEcr6`DF)A}3720HO0j!h240u==bYzBW5K&N>9KQ1&w;Ngw;JF)02 zVl((#1TI91*yKPg2FCxgb;6G(^(UG${w-nS`&$Cq2L->i0E-cPtTBK2Sd+m0B|cU! z5F6xNhS$Zb`ggLI$GfD0Zsfx_-nN>}=WjI|sBvG-W(8s~F#h+uc1>rt!gEH@iFrzY zYr*|I{i&%HB>Zxb8n+?AU>XPCmyr7pncku_`vf7gILvW86#!~%I_ z9h=eLb)YQ#|GuJawAI_UDWEP3#;s#p*dqRJVFR@-x3D>YSfHW6t!ycOx3Youw{2s~ z`n!z{)Fu~x;r-pzY}ywrad?2$;O_x&JMRFi9Eioh2)_ZB`R^fCnZJj?J(Q!YW`B=@ zTTsVXjs6}3?MwMD{C4%Pyo2r2v2^;)*){%}gGVXN*~LICkkc&Lo&H*aXVYxhBmUZe zM=4>K%V04>g;nFP3iQ4Q6;?428#_LNg=sRAsT!v*asG|zaOCI5Pe|b`1^^44>XMmJLMmKCNy}= zg_Wf3v<#pgyVT#spv4}453@`CJq#-9|Nq(LpTbl9?;y5hx0B7_?@n;C+sP&eVu6y~ zZZ@sIyTR%HLf8~j0q$8P*wg(^wvxX)*%}xb|L$Z<0|{;_%Z%!1D-@6{u=<8k#zg&IwF0_~vOl4NXl=1|B0RkaMrF@%_ER25Ea; zVPpDxjm-+&g#80K&d>f!qjYaz(=qJfzlyo!?j{)gT8298YTzuv4of4xD|mw)|PdH(u?S>dcaf5Snn|NnM( zoHq?^aK+XK;$V0C%K`2Kaj=_!SRgNRvzz_p2FJ~h4_4PsRwiDg*bS)xkX}b#^fj3#3((-Q}+) zxF-eM{)!{;F+v^G^9K*+p^UnNrcUf2^A8L>M&LM^!7A~01~g7)u=0TB7r<@;#Rc@I&pz~Om`iNh*PET{#0QrONR^>;gm8YAQ1?Hn8+76aq|>VFR=zW#jU zAk*KS92S3fg14CMvWtOOAeZQ~yZqG$ z7u`b7-SzTcb?(OK=`#K`XLtE)&hEtsVi|#0phkfeyUAZGcF?{vTlR>*w%|rVtfgbe zC;f@+bu3R2K|4$xhqsHp~a5uq)+#9v$RSh_7c4=BDM>4674@L|WE^w*9Z zGyu0ataSU5Wpi4gc7}ll&f%#pIX^cyKM#B~KPb(Codddp59%`5HGHrO2<+G;{@Q^L z>$YR(`D@4CfNZ5byUJgC&^}1`N*i3Q)Ypt|e_u0(f!o)w8BIWJ2Il`plO8s7>m?Tc z-+b#@h{{)qd;cH#@_5c_-f6`8_Y0%a-!F`yU4=gwng0F&A2`g!+2{bNLQLX0TlBp7pW!xMzQjR|9g%l7BE`I2j65Fwx{j~$9N7!m2Yzq%x zGiv;O4PAKnno$hIW?=bW*}XblGL}yoe$wWDX>Xgx(^~r;{EuJuF7QO}f-2Cha(sWk zFoOE0zZseS{$}K2Vf@R)Wb&5@yabtz$>c8^i1mNkmGk8yO#O^ll5YgN#@`5V@{M2@ z1F=BKH;UcmZxlHBu9=$QnxA{V5{u3Zc8$LoV4WH4VjvbsXBNBD-z-p@_P=Jjn%2tW zJ(sZ5b`5L>e;dGktp+wZ5Q~BFKWo_0$=(J3_(2^7zQ0Z2zLv%QvbTQA)iSVHp3AQB zHy3PqF1r|r1+qM!J>qXZILFKo{`yff@%aI`au=qO_yo7W* zhtc2Z9H37BOb(a7GdVyTE#`12{hb3o%VGhC-roh_PWomJqraO$>i*~bJiF)oM^P>e zI~e~~uxtFS0K2Y&T@1tmxvq-c3b}aQ30 z6cKNZu)p4*ArAQBOhhPTf=+AqL%lQ(?WXVe;DUI>np7L`4XWU!2B1~0;GGslnPrJ3 zsh|^hK_M0pCBqP0keZyCn3GurJ|08?QWm;8`GZC)E-{Mzy#(DKb&-+f?@iGDDA)-@ z%>S=MHHCY*HwOGSxju7xy0VA+|LupRYtkLSHY|sj8cDZFq*M2!Vf8;j(5R}(ZI_ou=o(Phy=x#cNxY0-i7+|4kOFo z7pT5GWd2O(u`t7t|MxGvT)F+<^m+dq*629Z2RXcCV1yqA4;oDb`S;um5!r2be|a+Ur*J0SrQPsB|-Q`jZ`P61bRQ`mX_PQiXF#Z-2w zzf-{jgHzeV{!Rri1ak||{At_qVSw#{c2`*5aQGBRsHaUB&M5cNJLcDt03f3#4@o zd&J*0;39)dd1`J{YI6ti!Ml!K;_o_e@UCO$`MVBV@G}2h&mQr2J*X1+yMbNc?*{N# z>_&E}zZ*e8{$GC{t5)28^Rrk2dMmre->u+)-pVcpVu1pB8@s{ZZQy|3$!_;|Cpe&C zN7Te)UTe6J)!^?!R!DDrA*&pS4f6D2R+qnvLFbD6f4W6}v(o7^hq34tE1os01Qm3Y?qSK9(X{Su7Uunvd8UmXt6MKd}aav&B+s~(5lUp>&F z3ICbp`$`L|YK~xwBy|phzv^JE>Kt+)7D%fmhtpq8P!;(9gN@DejcWx@V+pTN4voK| z9H15Ap&Vi$7AU;JIW+!;gHLY==ZO0o&XK~x_#d{~22p;&8CJ)Q3G4u1YQ8-_BWOz1-wK@nGt^64BCJN z%JHWPYVq;K3^q34+p{im#QnXXyPcw3Q_gVU)yIWqq4))30xyw4Mg|--J2^c5?&R=;8lnSY|A+O>ApYLV(e!sOM+Xbzf8|&E~;1+ebJ3J#sWE1*lbR&XeQ*#FtI3ZhK|(^Vlcu#&^%?@G|ACGh#7+|rUn z&}bxduRUt?f=8}!j&505#rs0`%7M?Wu&M%gq&IVT{N2ov0QSjd4jvHuKWt`^gO!1S z_3u=Uh`&=g3RoEb&g4k>I}x|g-M@=CwEivvvsQAj{awi+$HMqOvu~pE z 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 E0gRdkK>z>% literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@sstream.tcc b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@sstream.tcc new file mode 100644 index 0000000..36d8033 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@sstream.tcc @@ -0,0 +1,312 @@ +// String based streams -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/sstream.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{sstream} + */ + +// +// ISO C++ 14882: 27.7 String-based streams +// + +#ifndef _SSTREAM_TCC +#define _SSTREAM_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type + basic_stringbuf<_CharT, _Traits, _Alloc>:: + pbackfail(int_type __c) + { + int_type __ret = traits_type::eof(); + if (this->eback() < this->gptr()) + { + // Try to put back __c into input sequence in one of three ways. + // Order these tests done in is unspecified by the standard. + const bool __testeof = traits_type::eq_int_type(__c, __ret); + if (!__testeof) + { + const bool __testeq = traits_type::eq(traits_type:: + to_char_type(__c), + this->gptr()[-1]); + const bool __testout = this->_M_mode & ios_base::out; + if (__testeq || __testout) + { + this->gbump(-1); + if (!__testeq) + *this->gptr() = traits_type::to_char_type(__c); + __ret = __c; + } + } + else + { + this->gbump(-1); + __ret = traits_type::not_eof(__c); + } + } + return __ret; + } + + template + typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type + basic_stringbuf<_CharT, _Traits, _Alloc>:: + overflow(int_type __c) + { + const bool __testout = this->_M_mode & ios_base::out; + if (__builtin_expect(!__testout, false)) + return traits_type::eof(); + + const bool __testeof = traits_type::eq_int_type(__c, traits_type::eof()); + if (__builtin_expect(__testeof, false)) + return traits_type::not_eof(__c); + + const __size_type __capacity = _M_string.capacity(); + +#if _GLIBCXX_USE_CXX11_ABI + if (size_t(this->epptr() - this->pbase()) < __capacity) + { + // There is additional capacity in _M_string that can be used. + char_type* __base = const_cast(_M_string.data()); + _M_pbump(__base, __base + __capacity, this->pptr() - this->pbase()); + if (_M_mode & ios_base::in) + { + const __size_type __nget = this->gptr() - this->eback(); + const __size_type __eget = this->egptr() - this->eback(); + this->setg(__base, __base + __nget, __base + __eget + 1); + } + *this->pptr() = traits_type::to_char_type(__c); + this->pbump(1); + return __c; + } +#endif + + const __size_type __max_size = _M_string.max_size(); + const bool __testput = this->pptr() < this->epptr(); + if (__builtin_expect(!__testput && __capacity == __max_size, false)) + return traits_type::eof(); + + // Try to append __c into output sequence in one of two ways. + // Order these tests done in is unspecified by the standard. + const char_type __conv = traits_type::to_char_type(__c); + if (!__testput) + { + // NB: Start ostringstream buffers at 512 chars. This is an + // experimental value (pronounced "arbitrary" in some of the + // hipper English-speaking countries), and can be changed to + // suit particular needs. + // + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 169. Bad efficiency of overflow() mandated + // 432. stringbuf::overflow() makes only one write position + // available + const __size_type __opt_len = std::max(__size_type(2 * __capacity), + __size_type(512)); + const __size_type __len = std::min(__opt_len, __max_size); + __string_type __tmp(_M_string.get_allocator()); + __tmp.reserve(__len); + if (this->pbase()) + __tmp.assign(this->pbase(), this->epptr() - this->pbase()); + __tmp.push_back(__conv); + _M_string.swap(__tmp); + _M_sync(const_cast(_M_string.data()), + this->gptr() - this->eback(), this->pptr() - this->pbase()); + } + else + *this->pptr() = __conv; + this->pbump(1); + return __c; + } + + template + typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type + basic_stringbuf<_CharT, _Traits, _Alloc>:: + underflow() + { + int_type __ret = traits_type::eof(); + const bool __testin = this->_M_mode & ios_base::in; + if (__testin) + { + // Update egptr() to match the actual string end. + _M_update_egptr(); + + if (this->gptr() < this->egptr()) + __ret = traits_type::to_int_type(*this->gptr()); + } + return __ret; + } + + template + typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type + basic_stringbuf<_CharT, _Traits, _Alloc>:: + seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode) + { + pos_type __ret = pos_type(off_type(-1)); + bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; + bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; + const bool __testboth = __testin && __testout && __way != ios_base::cur; + __testin &= !(__mode & ios_base::out); + __testout &= !(__mode & ios_base::in); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 453. basic_stringbuf::seekoff need not always fail for an empty stream. + const char_type* __beg = __testin ? this->eback() : this->pbase(); + if ((__beg || !__off) && (__testin || __testout || __testboth)) + { + _M_update_egptr(); + + off_type __newoffi = __off; + off_type __newoffo = __newoffi; + if (__way == ios_base::cur) + { + __newoffi += this->gptr() - __beg; + __newoffo += this->pptr() - __beg; + } + else if (__way == ios_base::end) + __newoffo = __newoffi += this->egptr() - __beg; + + if ((__testin || __testboth) + && __newoffi >= 0 + && this->egptr() - __beg >= __newoffi) + { + this->setg(this->eback(), this->eback() + __newoffi, + this->egptr()); + __ret = pos_type(__newoffi); + } + if ((__testout || __testboth) + && __newoffo >= 0 + && this->egptr() - __beg >= __newoffo) + { + _M_pbump(this->pbase(), this->epptr(), __newoffo); + __ret = pos_type(__newoffo); + } + } + return __ret; + } + + template + typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type + basic_stringbuf<_CharT, _Traits, _Alloc>:: + seekpos(pos_type __sp, ios_base::openmode __mode) + { + pos_type __ret = pos_type(off_type(-1)); + const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; + const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; + + const char_type* __beg = __testin ? this->eback() : this->pbase(); + if ((__beg || !off_type(__sp)) && (__testin || __testout)) + { + _M_update_egptr(); + + const off_type __pos(__sp); + const bool __testpos = (0 <= __pos + && __pos <= this->egptr() - __beg); + if (__testpos) + { + if (__testin) + this->setg(this->eback(), this->eback() + __pos, + this->egptr()); + if (__testout) + _M_pbump(this->pbase(), this->epptr(), __pos); + __ret = __sp; + } + } + return __ret; + } + + template + void + basic_stringbuf<_CharT, _Traits, _Alloc>:: + _M_sync(char_type* __base, __size_type __i, __size_type __o) + { + const bool __testin = _M_mode & ios_base::in; + const bool __testout = _M_mode & ios_base::out; + char_type* __endg = __base + _M_string.size(); + char_type* __endp = __base + _M_string.capacity(); + + if (__base != _M_string.data()) + { + // setbuf: __i == size of buffer area (_M_string.size() == 0). + __endg += __i; + __i = 0; + __endp = __endg; + } + + if (__testin) + this->setg(__base, __base + __i, __endg); + if (__testout) + { + _M_pbump(__base, __endp, __o); + // egptr() always tracks the string end. When !__testin, + // for the correct functioning of the streambuf inlines + // the other get area pointers are identical. + if (!__testin) + this->setg(__endg, __endg, __endg); + } + } + + template + void + basic_stringbuf<_CharT, _Traits, _Alloc>:: + _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off) + { + this->setp(__pbeg, __pend); + while (__off > __gnu_cxx::__numeric_traits::__max) + { + this->pbump(__gnu_cxx::__numeric_traits::__max); + __off -= __gnu_cxx::__numeric_traits::__max; + } + this->pbump(__off); + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class basic_stringbuf; + extern template class basic_istringstream; + extern template class basic_ostringstream; + extern template class basic_stringstream; + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class basic_stringbuf; + extern template class basic_istringstream; + extern template class basic_ostringstream; + extern template class basic_stringstream; +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@sstream.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@sstream.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..b7a60f9feadda971cdd243110772f0f5151f8bc6 GIT binary patch literal 50477 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@std_abs.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@std_abs.h new file mode 100644 index 0000000..35ec4d3 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@std_abs.h @@ -0,0 +1,162 @@ +// -*- C++ -*- C library enhancements header. + +// Copyright (C) 2016-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/std_abs.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{cmath, cstdlib} + */ + +#ifndef _GLIBCXX_BITS_STD_ABS_H +#define _GLIBCXX_BITS_STD_ABS_H + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" // include_next +#pragma GCC diagnostic ignored "-Wlong-long" + +#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS +#include_next +#ifdef __CORRECT_ISO_CPP_MATH_H_PROTO +# include_next +#endif +#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS + +#undef abs + +extern "C++" +{ +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + using ::abs; + +#ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO + inline long + abs(long __i) { return __builtin_labs(__i); } +#endif + +#ifdef _GLIBCXX_USE_LONG_LONG + inline long long + abs(long long __x) { return __builtin_llabs (__x); } +#endif + +// _GLIBCXX_RESOLVE_LIB_DEFECTS +// 2192. Validity and return type of std::abs(0u) is unclear +// 2294. should declare abs(double) +// 2735. std::abs(short), std::abs(signed char) and others should return int + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR double + abs(double __x) + { return __builtin_fabs(__x); } + + inline _GLIBCXX_CONSTEXPR float + abs(float __x) + { return __builtin_fabsf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + abs(long double __x) + { return __builtin_fabsl(__x); } +#endif + +#if defined(__GLIBCXX_TYPE_INT_N_0) + __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_0 + abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; } +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_1 + abs(__GLIBCXX_TYPE_INT_N_1 __x) { return __x >= 0 ? __x : -__x; } +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_2 + abs(__GLIBCXX_TYPE_INT_N_2 __x) { return __x >= 0 ? __x : -__x; } +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_3 + abs(__GLIBCXX_TYPE_INT_N_3 __x) { return __x >= 0 ? __x : -__x; } +#endif + +#if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32) + constexpr _Float16 + abs(_Float16 __x) + { return _Float16(__builtin_fabsf(__x)); } +#endif + +#if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32) + constexpr _Float32 + abs(_Float32 __x) + { return __builtin_fabsf(__x); } +#endif + +#if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64) + constexpr _Float64 + abs(_Float64 __x) + { return __builtin_fabs(__x); } +#endif + +#if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) + constexpr _Float128 + abs(_Float128 __x) + { return __builtin_fabsl(__x); } +#elif defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_HAVE_FLOAT128_MATH) + constexpr _Float128 + abs(_Float128 __x) + { return __builtin_fabsf128(__x); } +#endif + +#if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32) + constexpr __gnu_cxx::__bfloat16_t + abs(__gnu_cxx::__bfloat16_t __x) + { return __gnu_cxx::__bfloat16_t(__builtin_fabsf(__x)); } +#endif + +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) + __extension__ inline _GLIBCXX_CONSTEXPR + __float128 + abs(__float128 __x) + { +#if defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) + return __builtin_fabsl(__x); +#elif defined(_GLIBCXX_HAVE_FLOAT128_MATH) + return __builtin_fabsf128(__x); +#else + // Assume that __builtin_signbit works for __float128. + return __builtin_signbit(__x) ? -__x : __x; +#endif + } +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +} // extern "C++" + +#pragma GCC diagnostic pop + +#endif // _GLIBCXX_BITS_STD_ABS_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@std_abs.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@std_abs.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1191986572ced43ffb7b387c904b7e1c3bd08d31 GIT binary patch literal 14156 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
    _5%jlr!YV`d`|3)C>MVK(|} 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. + +/** @file include/bits/uses_allocator_args.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _USES_ALLOCATOR_H +#define _USES_ALLOCATOR_H 1 + +#if __cplusplus < 201103L +# include +#else + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +/// @cond undocumented + + // This is used for std::experimental::erased_type from Library Fundamentals. + struct __erased_type { }; + + // This also supports the "type-erased allocator" protocol from the + // Library Fundamentals TS, where allocator_type is erased_type. + // The second condition will always be false for types not using the TS. + template + using __is_erased_or_convertible + = __or_, is_same<_Tp, __erased_type>>; + + /// [allocator.tag] + struct allocator_arg_t { explicit allocator_arg_t() = default; }; + + _GLIBCXX17_INLINE constexpr allocator_arg_t allocator_arg = + allocator_arg_t(); + + template> + struct __uses_allocator_helper + : false_type { }; + + template + struct __uses_allocator_helper<_Tp, _Alloc, + __void_t> + : __is_erased_or_convertible<_Alloc, typename _Tp::allocator_type>::type + { }; + + /// [allocator.uses.trait] + template + struct uses_allocator + : __uses_allocator_helper<_Tp, _Alloc>::type + { }; + + struct __uses_alloc_base { }; + + struct __uses_alloc0 : __uses_alloc_base + { + struct _Sink { void _GLIBCXX20_CONSTEXPR operator=(const void*) { } } _M_a; + }; + + template + struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; }; + + template + struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; }; + + template + struct __uses_alloc; + + template + struct __uses_alloc + : __conditional_t< + is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>::value, + __uses_alloc1<_Alloc>, + __uses_alloc2<_Alloc>> + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2586. Wrong value category used in scoped_allocator_adaptor::construct + static_assert(__or_< + is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>, + is_constructible<_Tp, _Args..., const _Alloc&>>::value, + "construction with an allocator must be possible" + " if uses_allocator is true"); + }; + + template + struct __uses_alloc + : __uses_alloc0 { }; + + template + using __uses_alloc_t = + __uses_alloc::value, _Tp, _Alloc, _Args...>; + + template + _GLIBCXX20_CONSTEXPR + inline __uses_alloc_t<_Tp, _Alloc, _Args...> + __use_alloc(const _Alloc& __a) + { + __uses_alloc_t<_Tp, _Alloc, _Args...> __ret; + __ret._M_a = std::__addressof(__a); + return __ret; + } + + template + void + __use_alloc(const _Alloc&&) = delete; + +#if __cplusplus > 201402L + template + inline constexpr bool uses_allocator_v = + uses_allocator<_Tp, _Alloc>::value; +#endif // C++17 + +#if __cpp_concepts + template + concept __allocator_for = (uses_allocator_v<_Ts, _Alloc> && ...); +#endif + + template class _Predicate, + typename _Tp, typename _Alloc, typename... _Args> + struct __is_uses_allocator_predicate + : __conditional_t::value, + __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>, + _Predicate<_Tp, _Args..., _Alloc>>, + _Predicate<_Tp, _Args...>> { }; + + template + struct __is_uses_allocator_constructible + : __is_uses_allocator_predicate + { }; + +#if __cplusplus >= 201402L + template + _GLIBCXX17_INLINE constexpr bool __is_uses_allocator_constructible_v = + __is_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; +#endif // C++14 + + template + struct __is_nothrow_uses_allocator_constructible + : __is_uses_allocator_predicate + { }; + + +#if __cplusplus >= 201402L + template + _GLIBCXX17_INLINE constexpr bool + __is_nothrow_uses_allocator_constructible_v = + __is_nothrow_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; +#endif // C++14 + + template + void __uses_allocator_construct_impl(__uses_alloc0, _Tp* __ptr, + _Args&&... __args) + { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)...); } + + template + void __uses_allocator_construct_impl(__uses_alloc1<_Alloc> __a, _Tp* __ptr, + _Args&&... __args) + { + ::new ((void*)__ptr) _Tp(allocator_arg, *__a._M_a, + std::forward<_Args>(__args)...); + } + + template + void __uses_allocator_construct_impl(__uses_alloc2<_Alloc> __a, _Tp* __ptr, + _Args&&... __args) + { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)..., *__a._M_a); } + + template + void __uses_allocator_construct(const _Alloc& __a, _Tp* __ptr, + _Args&&... __args) + { + std::__uses_allocator_construct_impl( + std::__use_alloc<_Tp, _Alloc, _Args...>(__a), __ptr, + std::forward<_Args>(__args)...); + } + +/// @endcond +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c4c437884c7fc3ee172347480478722bce01940f GIT binary patch literal 22087 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator_args.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator_args.h new file mode 100644 index 0000000..44fe349 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator_args.h @@ -0,0 +1,250 @@ +// Utility functions for uses-allocator construction -*- C++ -*- + +// Copyright (C) 2019-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/uses_allocator_args.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _USES_ALLOCATOR_ARGS +#define _USES_ALLOCATOR_ARGS 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#ifdef __glibcxx_make_obj_using_allocator // C++ >= 20 && concepts +#include // for placement operator new +#include // for tuple, make_tuple, make_from_tuple +#include // construct_at +#include // pair + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + concept _Std_pair = __is_pair>; + +/** @addtogroup allocators + * @{ + */ + template + constexpr auto + uses_allocator_construction_args(const _Alloc& __a, + _Args&&... __args) noexcept + requires (! _Std_pair<_Tp>) + { + if constexpr (uses_allocator_v, _Alloc>) + { + if constexpr (is_constructible_v<_Tp, allocator_arg_t, + const _Alloc&, _Args...>) + { + return tuple( + allocator_arg, __a, std::forward<_Args>(__args)...); + } + else + { + static_assert(is_constructible_v<_Tp, _Args..., const _Alloc&>, + "construction with an allocator must be possible" + " if uses_allocator is true"); + + return tuple<_Args&&..., const _Alloc&>( + std::forward<_Args>(__args)..., __a); + } + } + else + { + static_assert(is_constructible_v<_Tp, _Args...>); + + return tuple<_Args&&...>(std::forward<_Args>(__args)...); + } + } + + template<_Std_pair _Tp, typename _Alloc, typename _Tuple1, typename _Tuple2> + constexpr auto + uses_allocator_construction_args(const _Alloc& __a, piecewise_construct_t, + _Tuple1&& __x, _Tuple2&& __y) noexcept; + + template<_Std_pair _Tp, typename _Alloc> + constexpr auto + uses_allocator_construction_args(const _Alloc&) noexcept; + + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc&, _Up&&, _Vp&&) noexcept; + + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc&, + const pair<_Up, _Vp>&) noexcept; + + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc&, pair<_Up, _Vp>&&) noexcept; + +#if __cplusplus > 202002L + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc&, + pair<_Up, _Vp>&) noexcept; + + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc&, const pair<_Up, _Vp>&&) noexcept; +#endif // C++23 + + template<_Std_pair _Tp, typename _Alloc, typename _Tuple1, typename _Tuple2> + constexpr auto + uses_allocator_construction_args(const _Alloc& __a, piecewise_construct_t, + _Tuple1&& __x, _Tuple2&& __y) noexcept + { + using _Tp1 = typename _Tp::first_type; + using _Tp2 = typename _Tp::second_type; + + return std::make_tuple(piecewise_construct, + std::apply([&__a](auto&&... __args1) { + return std::uses_allocator_construction_args<_Tp1>( + __a, std::forward(__args1)...); + }, std::forward<_Tuple1>(__x)), + std::apply([&__a](auto&&... __args2) { + return std::uses_allocator_construction_args<_Tp2>( + __a, std::forward(__args2)...); + }, std::forward<_Tuple2>(__y))); + } + + template<_Std_pair _Tp, typename _Alloc> + constexpr auto + uses_allocator_construction_args(const _Alloc& __a) noexcept + { + using _Tp1 = typename _Tp::first_type; + using _Tp2 = typename _Tp::second_type; + + return std::make_tuple(piecewise_construct, + std::uses_allocator_construction_args<_Tp1>(__a), + std::uses_allocator_construction_args<_Tp2>(__a)); + } + + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc& __a, _Up&& __u, _Vp&& __v) + noexcept + { + using _Tp1 = typename _Tp::first_type; + using _Tp2 = typename _Tp::second_type; + + return std::make_tuple(piecewise_construct, + std::uses_allocator_construction_args<_Tp1>(__a, + std::forward<_Up>(__u)), + std::uses_allocator_construction_args<_Tp2>(__a, + std::forward<_Vp>(__v))); + } + + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc& __a, + const pair<_Up, _Vp>& __pr) noexcept + { + using _Tp1 = typename _Tp::first_type; + using _Tp2 = typename _Tp::second_type; + + return std::make_tuple(piecewise_construct, + std::uses_allocator_construction_args<_Tp1>(__a, __pr.first), + std::uses_allocator_construction_args<_Tp2>(__a, __pr.second)); + } + + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc& __a, + pair<_Up, _Vp>&& __pr) noexcept + { + using _Tp1 = typename _Tp::first_type; + using _Tp2 = typename _Tp::second_type; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3527. uses_allocator_construction_args handles rvalue pairs + // of rvalue references incorrectly + return std::make_tuple(piecewise_construct, + std::uses_allocator_construction_args<_Tp1>(__a, + std::get<0>(std::move(__pr))), + std::uses_allocator_construction_args<_Tp2>(__a, + std::get<1>(std::move(__pr)))); + } + +#if __cplusplus > 202002L + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc& __a, + pair<_Up, _Vp>& __pr) noexcept + { + using _Tp1 = typename _Tp::first_type; + using _Tp2 = typename _Tp::second_type; + + return std::make_tuple(piecewise_construct, + std::uses_allocator_construction_args<_Tp1>(__a, __pr.first), + std::uses_allocator_construction_args<_Tp2>(__a, __pr.second)); + } + + template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc& __a, + const pair<_Up, _Vp>&& __pr) noexcept + { + using _Tp1 = typename _Tp::first_type; + using _Tp2 = typename _Tp::second_type; + + return std::make_tuple(piecewise_construct, + std::uses_allocator_construction_args<_Tp1>(__a, + std::get<0>(std::move(__pr))), + std::uses_allocator_construction_args<_Tp2>(__a, + std::get<1>(std::move(__pr)))); + } +#endif // C++23 + + template + constexpr _Tp + make_obj_using_allocator(const _Alloc& __a, _Args&&... __args) + { + return std::make_from_tuple<_Tp>( + std::uses_allocator_construction_args<_Tp>(__a, + std::forward<_Args>(__args)...)); + } + + template + constexpr _Tp* + uninitialized_construct_using_allocator(_Tp* __p, const _Alloc& __a, + _Args&&... __args) + { + return std::apply([&](auto&&... __xs) { + return std::construct_at(__p, std::forward(__xs)...); + }, std::uses_allocator_construction_args<_Tp>(__a, + std::forward<_Args>(__args)...)); + } +/// @} +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // __glibcxx_make_obj_using_allocator +#endif // _USES_ALLOCATOR_ARGS diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator_args.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@uses_allocator_args.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..74401b288c2f3a4d6a6fa10a0ba3b53bd1155ef2 GIT binary patch literal 11468 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@utility.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@utility.h new file mode 100644 index 0000000..6fa6b67 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@utility.h @@ -0,0 +1,323 @@ +// Utilities used throughout the library -*- C++ -*- + +// Copyright (C) 2004-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/utility.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{utility} + * + * This file contains the parts of `` needed by other headers, + * so they don't need to include the whole of ``. + */ + +#ifndef _GLIBCXX_UTILITY_H +#define _GLIBCXX_UTILITY_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus >= 201103L + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// Finds the size of a given tuple type. + template + struct tuple_size; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2313. tuple_size should always derive from integral_constant + // 2770. tuple_size specialization is not SFINAE compatible + + template::type, + typename = typename enable_if::value>::type, + size_t = tuple_size<_Tp>::value> + using __enable_if_has_tuple_size = _Tp; + + template + struct tuple_size> + : public tuple_size<_Tp> { }; + + template + struct tuple_size> + : public tuple_size<_Tp> { }; + + template + struct tuple_size> + : public tuple_size<_Tp> { }; + +#if __cplusplus >= 201703L + template + inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value; +#endif + + /// Gives the type of the ith element of a given tuple type. + template + struct tuple_element; + + // Duplicate of C++14's tuple_element_t for internal use in C++11 mode + template + using __tuple_element_t = typename tuple_element<__i, _Tp>::type; + + template + struct tuple_element<__i, const _Tp> + { + using type = const __tuple_element_t<__i, _Tp>; + }; + + template + struct tuple_element<__i, volatile _Tp> + { + using type = volatile __tuple_element_t<__i, _Tp>; + }; + + template + struct tuple_element<__i, const volatile _Tp> + { + using type = const volatile __tuple_element_t<__i, _Tp>; + }; + +#if __cplusplus >= 201402L + + // Return the index of _Tp in _Types, if it occurs exactly once. + // Otherwise, return sizeof...(_Types). + template + constexpr size_t + __find_uniq_type_in_pack() + { + constexpr size_t __sz = sizeof...(_Types); + constexpr bool __found[__sz] = { __is_same(_Tp, _Types) ... }; + size_t __n = __sz; + for (size_t __i = 0; __i < __sz; ++__i) + { + if (__found[__i]) + { + if (__n < __sz) // more than one _Tp found + return __sz; + __n = __i; + } + } + return __n; + } +#endif // C++14 + +// The standard says this macro and alias template should be in but we +// define them here, to be available in , and too. +// _GLIBCXX_RESOLVE_LIB_DEFECTS +// 3378. tuple_size_v/tuple_element_t should be available when +// tuple_size/tuple_element are +#ifdef __glibcxx_tuple_element_t // C++ >= 14 + template + using tuple_element_t = typename tuple_element<__i, _Tp>::type; +#endif + + // Stores a tuple of indices. Used by tuple and pair, and by bind() to + // extract the elements in a tuple. + template struct _Index_tuple { }; + + // Builds an _Index_tuple<0, 1, 2, ..., _Num-1>. + template + struct _Build_index_tuple + { +#if __has_builtin(__make_integer_seq) + template + using _IdxTuple = _Index_tuple<_Indices...>; + + // Clang defines __make_integer_seq for this purpose. + using __type = __make_integer_seq<_IdxTuple, size_t, _Num>; +#else + // For GCC and other compilers, use __integer_pack instead. + using __type = _Index_tuple<__integer_pack(_Num)...>; +#endif + }; + +#ifdef __glibcxx_integer_sequence // C++ >= 14 + + /// Class template integer_sequence + template + struct integer_sequence + { +#if __cplusplus >= 202002L + static_assert(is_integral_v<_Tp>); +#endif + typedef _Tp value_type; + static constexpr size_t size() noexcept { return sizeof...(_Idx); } + }; + + /// Alias template make_integer_sequence + template + using make_integer_sequence +#if __has_builtin(__make_integer_seq) + = __make_integer_seq; +#else + = integer_sequence<_Tp, __integer_pack(_Num)...>; +#endif + + /// Alias template index_sequence + template + using index_sequence = integer_sequence; + + /// Alias template make_index_sequence + template + using make_index_sequence = make_integer_sequence; + + /// Alias template index_sequence_for + template + using index_sequence_for = make_index_sequence; +#endif // __glibcxx_integer_sequence + +#if __cplusplus >= 201703L + + struct in_place_t { + explicit in_place_t() = default; + }; + + inline constexpr in_place_t in_place{}; + + template struct in_place_type_t + { + explicit in_place_type_t() = default; + }; + + template + inline constexpr in_place_type_t<_Tp> in_place_type{}; + + template struct in_place_index_t + { + explicit in_place_index_t() = default; + }; + + template + inline constexpr in_place_index_t<_Idx> in_place_index{}; + + template + inline constexpr bool __is_in_place_type_v = false; + + template + inline constexpr bool __is_in_place_type_v> = true; + + template + inline constexpr bool __is_in_place_index_v = false; + + template + inline constexpr bool __is_in_place_index_v> = true; + +#endif // C++17 + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__type_pack_element) + template + struct _Nth_type + { using type = __type_pack_element<_Np, _Types...>; }; +#else + template + struct _Nth_type + { }; + + template + struct _Nth_type<0, _Tp0, _Rest...> + { using type = _Tp0; }; + + template + struct _Nth_type<1, _Tp0, _Tp1, _Rest...> + { using type = _Tp1; }; + + template + struct _Nth_type<2, _Tp0, _Tp1, _Tp2, _Rest...> + { using type = _Tp2; }; + + template +#if __cpp_concepts + requires (_Np >= 3) +#endif + struct _Nth_type<_Np, _Tp0, _Tp1, _Tp2, _Rest...> + : _Nth_type<_Np - 3, _Rest...> + { }; + +#if ! __cpp_concepts // Need additional specializations to avoid ambiguities. + template + struct _Nth_type<0, _Tp0, _Tp1, _Tp2, _Rest...> + { using type = _Tp0; }; + + template + struct _Nth_type<1, _Tp0, _Tp1, _Tp2, _Rest...> + { using type = _Tp1; }; +#endif +#endif + +#if __glibcxx_ranges + namespace ranges::__detail + { + template + inline constexpr bool __is_subrange = false; + } // namespace __detail +#endif + + // A class (and instance) which can be used in 'tie' when an element + // of a tuple is not required. + struct _Swallow_assign + { + template + constexpr const _Swallow_assign& + operator=(const _Tp&) const noexcept + { return *this; } + }; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2773. Making std::ignore constexpr + /** Used with `std::tie` to ignore an element of a tuple + * + * When using `std::tie` to assign the elements of a tuple to variables, + * unwanted elements can be ignored by using `std::ignore`. For example: + * + * ``` + * int x, y; + * std::tie(x, std::ignore, y) = std::make_tuple(1, 2, 3); + * ``` + * + * This assignment will perform `x=1; std::ignore=2; y=3;` which results + * in the second element being ignored. + * + * @since C++11 + */ + _GLIBCXX17_INLINE constexpr _Swallow_assign ignore{}; + +#if __glibcxx_flat_map || __glibcxx_flat_set // >= C++23 + struct sorted_unique_t { explicit sorted_unique_t() = default; }; + inline constexpr sorted_unique_t sorted_unique{}; + + struct sorted_equivalent_t { explicit sorted_equivalent_t() = default; }; + inline constexpr sorted_equivalent_t sorted_equivalent{}; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // C++11 +#endif /* _GLIBCXX_UTILITY_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@utility.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@utility.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a483cec129c7d91e18dd596f0ec57abdf0d0d172 GIT binary patch literal 20185 zcmdO5_$PB#_%ahCgMMyaiGERHW{Q46QGQlxa!Ij%N^yaHMq*KJeqLsBA`+{(C>g=i z%P1&dU{20S%uA=t4BhhlqU_APblsH9qSWM){Gv)*65Pb__aB3PX>pN$W?phmX-cYo za!F-Ds$K@eznE^}%cwHi+WLm3dPaJN`bn83#rlakIr+))B}IvuCB+~Opa4P909FMu zu2?@lJ~yejB(Wqlz67KcpV`GFDXA67sRbpFAVx7UCo?HCuOtVn5oxK3C8b5FV5i_S zzrw;S-poX|AXzsjGq1ElH$ATu;-CED_>|PN%shw@7`{nHc)z%$C^a!RsWc6X6OojG z{a;*Cl$n>FR-OWKG=`yIB}tVfsm0}q1t1mpTn<*853yXYBsm$2?O-K|CHc9T$?@fx zDXH2gMY==tTEfaz;^pUOvcV3~ym7O)N^z&nqLOxVW;oBsDia zwWuh+2+4OjnMwNKoT6`J2v4ZRB`KMC;MA05&Ul%GBoE4lr6rj;#rkE5Mc{1s&uNb~ z&a|GHUz}E+g5(-lPARS|)=y4JO~anzz%c;|(qjGMlA_Y&l6W^yA6HNS;EUpd;*uPF z5D}l8pO==I4pNU1x=2PR=jUfnJSE2Puc7d#vt9*HK!WS{x6xD8DE^u_zrJqy%ls$xlwqNsUj= zNh~fVoN0>^OEUAZL?cqb#K)%<81yy`}ab|jPDtd5XEluL%i%U{cQq$tglQR;b znFCy|fa*s4I*K!^pw${&1FVQZ3b^EQaLtM(0U{{^J0229nfZA*vmB`80Yw)$PH}`l zW^SsP3GNUo&CDyw)6Gmt%`3?)sl=)d-Cgh;3Q~=cMA22J72`~FiN(3P>8W|CMVZO^ znRz9;IXMuQUNR%l;z+KjNKDF%Ps=Y##*tBq^HS0>bHMGFRWn~*L}@%g0yi%uGcgb3 z103O2S&#~9u0YEcaQ%Xz65MdmFUT*>tcZul1BUCt_Lb)srGOF$RvXd73{qysmu04w zOB3M;%YDrcu_Vx^@xm8?JnpCU{iF6E)Bo^oDrxq1KS{4M|18EH{H#O#A0xo#ZZdmKCn-6Q*-l+Dv?{0q;)?E za!S)P^NRJ0Gt=`DbK=3dFtH@R2txqUE}BuNhqGM-b`Lb0q$MV&;^+h*`5+lwwh|G% z(0rbmmst`Ij~1*!jbwUCYEo&sKBy^B1a1dmRS$M_D!2^DOD)D;eu5Gp?#M&3F&UC? z@OucP2y43ol$9avSA3}w>|oST#@_Nrc2|BLsQ*-q#bF@75mj!113(|rATl!{+~6oF zEyzj5Vj+^Vk}^y1E5O+^OV-xL(;P;!A~PSGr;!vO1t)SQ0#))@>TIy;;*7*1Nb@%y zmQ8UKdXQ#*QF%^&ayBUS5sX)q!W4V7Ldp_wYZBZ+11DL0#RR@Ugrp;o)3Ey>Co?Ho zHzPGMCACPmxFoR%d+i4fmE?j_-Qra23edwF)RY4^|1$HzH7|C{3raGIQWI0a2~Rh% zC>h+W#217)nYo!I#Kd<|VqSV`d}4AkG{*I41lZ(LZOSm>%#UiBa%FHju(eOe_ z&&jxYK434ECuWwUCkr3H|LxuKpwLkixGjn6DeEdn*kKu*AL zB9hl|rsw2>Qep=(L5-7~%p@$C6uFH`sKG#tqtZ((BV&lEmcf_}t7q-IU6_#N5neto}mQ0&+gM z03*xyu+irHBJg+@+)J>618fs0lY_?pOR?JnR+E;KpIDNoo1CAU3u!0da}J_9EsD>{ zEXLNdL{7q_r7Kt#1ji|OWEJde99{#LZo1&U4ep=@Rhh($1As;^Afw<|@(6lLD#$N} z#~pUZfu;46K`l~9+QAp5;8=k4Fyo6-i}Op1lCigNzzQKoL(5jwDhVa(A?o6Z8vX_~ zLcqgJ_?jTd@d|QDL26M>ejd0g0GAr171@a?i3KI8Mfy-0Qe1aULTg8W?18kuVbxG3 zC`OBl3sSM?FZ8HF^ddlM1S7JLl;bRBKt(84%@D_B=7J*&Uj%1DY8fI@7Ifqld!Gbi zA9$b)(ssfg`$&F*j2B_C7k92f(hW+!iA3}+K{G8m@cI*ydBLd9tiUEz$f~0d&;~^azNV^|w7jm->$)DhG%}WK%0uVp!k({5B znp}ph`~w>Y_CIKJ2Xh=8mP^rHPzD(=1ceN~bP6^eR0}8Or03)886z1EYHVcYVRI?8 z>H^t_5k9bKU0qOq!!cxtWC_mP11_cGGxKsX^T7E8!)svwK!OXD;IcDQh%7PFisRA8 z67W~&d8IkvDQxWZIAmN%Hzzf*m|(sFyE!kl95H(a3PTL9A%zdfgV4eiOLjz32sRp8 zVBl!tgOz{`1Z6z%6eqYH61*8zY>42P4(8Db^zYKf9fvyl*B7-c(h*6NGsO^Xn z>^TM9Q0OR5d}dy8Dr8&^!)zoiP}R^N$Kfk*V+*`g1UdtVVIst};9)skNCQR}oZUfQ z!$@Zk#o$%}bio6t#3rVJl$oEKn3q|A-?fn8eJ}~K9>c9jz6ZMmF+PDUGeVLs$RHy9 zQI-fUvN2R6H%8%MgHh^$T?CfStb(jmfE$Frs>n}ED^4xRPXoCWqq;!yGNge8o;k!H zj9`~Q3lkj0I+C$q)tULl;I!#$FCP8Li;eLa)Fu;ny-q#1E2_oy& z?*XnLa`oysDUcjf)eyue3)y%Ei=qxFgKxI^Zd`>2D`MI*GARL>3OBe@nwnN zVIWXsVPv=Bl9ZgxB#;!`rC7~`Oy`2sVHklFO37e73~AlU~p5n2Q?gy2#HHW%7LVOM5Q<(bJahi56na-NM0n|aCX=dT$f!(SUl9=87zet39HIeKk9IGd$b6cj0dSqkyN<)EZr9-mkYS|^~OR$P)| zWrZecWtCq58K}0^fNBdVP*Br^nvs_enYd?g$`fMzE6>RDSDsPsFB1#nUpYpezY2_c z3?RTJ4kG{OM)`Ig6`UZPT2YXbnVeao0JbnQFTNlrF*y}l30PU73E0Gk6xeBKD%dJO z$CVj`>@*n9NS(0&*>i^DOaRDm22O|_g_D=~fBf_@4~HF~!QqPd5+qBYA~x}!DHUke zIOs55k-B09vgQiMl^|qmetn;G*5}{}4jk4XTTr5*sQ?QmWKWogFdmgUss}RtD92GZ zgz1bYY)<(6RbgcOKSS!{IXOq6U!Wn?%w$NAgCh_$#260`zmnAS)S~#})WT9w^<`xR zl0~wV!61%Xp~;}6W5Aftkq?f9JdQdphM?4v(xN+KW00 znQ01{B?|e;$)!cb3aJ%|$t5|J3ZPXCdR+b`8L36(nZ>C(3PliuK)%RN)6>(_fN0m$ zV_;zU?{HK5;&Tgc|NkuyoEBFumu&d|fBAxi3x3UK|Nq#}&|c!is(lPR%pf1C{qN9P zc;AFyPXJQ6KvEl8@>Zy>W#E&LV{lXecRLj{67y0NGV?%FgvqIz3gsD@$r%dCiFpc1 zsS2gVsUSH8^^(j~b%pYb)I5d6JcZPp)ZEm(60ZC-g+vAL@(6{@Vuif?5(Vgr&lEid z#=p{xLVu+h4L~vQSDKOKuOcHG10y_VGB7ZRGczzS{@0e}x~Hjse>2lxIYynoa*SRq zjDJlSZT^}tMzJvdf8RgDK)LkKVvz4pFym{r*FG$a|7Sct-L&s~1}}KP3hH0Kk_>Rv zSy_Qf7zJB}crZ7<05p97b-YcyUx5xZmh|-W>=<}-I2afhUrW4J0J-=z&+8nJeQ*c- zfux;CvwI8^BOSk^gfGlKNXQB?FfhInd!+#~<`u{5A_fMg|Gu@Q*4m5{WZ=$)_@05` z?-oXoHOQFd|NM91JFChHHUDqqWn)~o-|_eV=&4dpJsTdR|JRJmw_kel!4ii5ic|NC zbuR3ljqDOoQU#YQ;M5pj0&$Q60|VnFyGwB(2VF9_3W^0-kpYi|BhIYOwNZ*knLxRp zh4F^g4KEhP|C(<$l(L#-rpAX9AiGcs#9@r^i11@!{GYuz{fE!H#zn{x;8dEKlM)Yg z1Zeq;l@+M02>~%d(czhwl3EcDPB}L5o_Q&m$*IMVNU#Hi-c-J+;7FLtG&KTb)&FnL z3?9l!99{~Igq2*mhYX8@IZ9G<3vv=mQWb1K87IC(AwE7+M*$S)d5O8Hpqyx@fE+wv z3*+Gl0HhdP20&C+*D{19NHH)lMuX;bsRRjmR!svxld3zYa01zSV_ zVhJx$#RSP#3_M~=3@)XhY7Gcx-}0m;O){33-+&{mDS#2iqG0xBLs zY7G@~^HWk87(+!u%|K~0lq0kQ6v_;Lz`^|ge%+Ph(>NF;kerL+BGMcy$H2hYA<|(4 zvZ;fkqXpTf2j83pfBu|CjRaMepOaXUnFCFI@H7=C76(pKu`G#L)6{?G#i^0zs{NH^)L~@&E6XSaVlgm) z+9^7J^+jovQ}QCn>3E3Z;3Vrci2%0;sPGDM2CGi9yGV2OLTa3=Drj z41OOiA2Sxl0I>ii7RC^<5G5AIJefQV7REw_LLC;yVxD3N7RC~>5+xSKcCmIP7RFw& zUL_XB31SnJSQw`mO|fHPT&cIxiiPo#*d-+v#_M9&l~@>GioH}~Vf^pVu3dEH*!@UM z|18p2qzCfMqHERcRohM1}OsveZ0CG6rV`aEp%d|5IP}YsO-$^%xk$85je_0u4Z} z3giehVEzv)k^aL{(*L;yuQF1UP8TvTh5ChNurPLbb)>K`{*U7L$9l~CyBDZ{DlSM& zP6Y)xsF)TJVPo(wEdh<;gB+2QnFLz1p{=a|S6Qsb#Rcbpv~g7<@#Evc14s(h3biPr zpb_hwoYWi)iR6k3LrY5wusDj2l+=>M%p3(&!^;wjG86MkK&m-8IXU(9!MWX>s}|W! zMX5QUmGK}&$igK>hA2)2H+?hmb3khrz-ke`DoRaHtpE+Xf?6Xb#b~l1KSJE5P>X7F zNs$p)Es{r4Qj;@t6CwUa5{7K;0x3rFhar*zbl2ffhQ+0ba6vY&BqOsJI!}gSD`d_F z5yc8Q;DLmkVuflXYfZQ?)Iod^k5H~q3y&0R%JXvza#AaZRu3I>Bi4ARa?s*_>{fu% z2}(*yOv(fW268F^_jcoxD=JXZ3VM{g!Ka0_3iMcz<<6sHG&boj8^a(6;A;GFWKSs8N503|A9%pM#&kQ z6aU5h4{rHeg56*$(M{cpKB(7;f7{k{JuKcD{gv`IY~-r)NWYlFfY`#kX0 z2P3@I!3b|#F#bP3(X;)B{+Tq!|Jzm<*LA&a?qq~FCK&(2ntqJ%b|)je;mHVZc{0MA zo`@zpBLg!7qmGD<6eFV!!(V$wCI$uucvBbBg8@|=Ff7Hu_|olV5UA9AsrNDn)Y^`C z4Js62Uc@Z>&ug3qm;L9(&V$-97rZV6urR_S1XI1YhBsKfx0p9by-$u$5ewsgWl_e` za~89#Fw`?JFfhjX#f7ji!ebk=0s&Qq415wI3~rfuDUjL&Bm^p@aaI*a(j2wTzDtyV zs|q7ABQ21pjW~?77#J9R!hEt=82{(Jx_sH^TX`B*N2NriB(N~TD-o(SbaAv!Qp8fg zt&?PybnLAYSOXk6bU+PvSSub>gYij7Fa($67o`@%dxiOFpnfs9b+4ch3hGNHRYL1k zP^S~L$W2E9#7e4E04-wE&{QbN=Sr<8DN0N(0oT*e#(FWR%?Ryl>M=0(`t+uN+Ht*h zy`WqR?MyLFRhw$Zf~co4LY6VWApqQz3eXDx4LCP3?^l|uYiOs( zz&KHCB6#3sBF9`VP|q0Fvx0h$0bWWV+YV}2BM*f@>{eiK25lWxfF~SuWekjq#TJ8G z-HSO^aWNpqU6|l4vHyyb{#ZBJM5V#)hZTF60UP2F0uI;^y%10vHMAtOiiHtw0I0DA zYH5OoMxf(g=;JqKi8-Z^;V=dXHxUK~#uX|nz~d|{cve_|3J|!npnX7CL5Ug`uwgYw zD1gj4B6LIzlvIwe90PTHe?bSa;2mFB*~kPMm||f(p?1QGh4DWu|6=;oP{R;h!WfDf zf|`Z@E57FLTUI_7OAqXn#woDMQ(~vUDq$r$b{AI`q{8~^pq|Pphg0DG`YEHcAZNpd z5gFn3K_UfFqBDU;2U!>|XkGANVN`;Ts(|~q;4v=rQ6NY}r03-qr81b<@erj@!4?#- z@$NpJPRR#(E0AiJ)^EK#f!@t4y#Rh><)l zNJ&thS(2fU0Cq)5W@>^$NxlM9C1QjLQpSQieOz4OpwTBtUl3IrbSxLtl!q4=NJCR4 z`3m6HYf?^Xu?|;hUU_0(NooqL#a|2?>VjCFqL5UnfNTjwI6+SV)bdEJNCY*cthl%m z5)!yF^GXydbQCJBxnRD~sL(<7vyMU~XbcxDo12)O3h8TWKr+9vrZw0Uu8@q(Vg-mF zK%;63<(WA-3I(Y}Y57ID3JDdqhStbt+8S9aRN5L_CqM`4iokmWin%f&!;rZi_4)nGcP$6+;%r)0FAT7{54_B0OgOrCX6h9O&D|FjS5~+Cmde= zBa%l_etr(bLGkgK#qnrEPGt;o8d^jvRu4V+D2!!9=90#z5(`^!x&NiEVf z&^6FefLH&ZAV85cw6n5`kI!V_o5jY!z!<9%tHs0^D;BH8@E637Gm5idL9`2|MjwT0j~dRKfx>l(Vz?m z%4BK|jPPMXWP?#+5E>t5Fnh!q7z0!S!1e@)1!yt+U$R>5;OrC6{(($}Va696FKiqb z;S&T<)8pgw82I?u5IoQzYyxZDiIOJ zTB%wE9>)Lep&M3v%nMrwvj#*n{6>gfl*OF(S!*^S}^8?HqWK0~34ve61o2CdMM3qBaIlUSKTaE0bYi{Qqm6 zUf+ysB?n-E0-~8Fb4*rpU|i3!Ude&+|0RLxUtNEFIt7w}VMZMp9VZ7wR~r-(uo+Cy zbO-~V1P7uJxvp|u2UN^o7rU;*c*Exgs8b3X>jX8N_4M?>IRU*T52}SyDj4`|KxV;P z$)I{@k;5Vnkco?o7I`qhhXYVt0V?s4OR{#Ac5n&PF4nHa*pb$e1DXVaPC224E!Z(s zX#$i$s^KRlPrxmJ$1G1~!Se)cIt0bl*s4yy(p&~U2T&M5YvBnh6Tsm)L2QB!1AL+s zY7V#vM=B6A6>Jp@7#J8!R7$j%KttF@(1giSVpd|q!&nkj5+TD_CRe7y!dN9$1u7F^ zLn(-0K~#p|#ymL3L0U>EG7NSeQY32vC0. + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/vector.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{vector} + */ + +#ifndef _VECTOR_TCC +#define _VECTOR_TCC 1 + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER + + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + reserve(size_type __n) + { + if (__n > this->max_size()) + __throw_length_error(__N("vector::reserve")); + if (this->capacity() < __n) + { + const size_type __old_size = size(); + pointer __tmp; +#if __cplusplus >= 201103L + if _GLIBCXX17_CONSTEXPR (_S_use_relocate()) + { + __tmp = this->_M_allocate(__n); + _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish, + __tmp, _M_get_Tp_allocator()); + } + else +#endif + { + __tmp = _M_allocate_and_copy(__n, + _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_start), + _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_finish)); + std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, + _M_get_Tp_allocator()); + } + _GLIBCXX_ASAN_ANNOTATE_REINIT; + _M_deallocate(this->_M_impl._M_start, + this->_M_impl._M_end_of_storage + - this->_M_impl._M_start); + this->_M_impl._M_start = __tmp; + this->_M_impl._M_finish = __tmp + __old_size; + this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; + } + } + +#if __cplusplus >= 201103L + template + template +#if __cplusplus > 201402L + _GLIBCXX20_CONSTEXPR + typename vector<_Tp, _Alloc>::reference +#else + void +#endif + vector<_Tp, _Alloc>:: + emplace_back(_Args&&... __args) + { + if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(1); + _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, + std::forward<_Args>(__args)...); + ++this->_M_impl._M_finish; + _GLIBCXX_ASAN_ANNOTATE_GREW(1); + } + else + _M_realloc_append(std::forward<_Args>(__args)...); +#if __cplusplus > 201402L + return back(); +#endif + } +#endif + + template + _GLIBCXX20_CONSTEXPR + typename vector<_Tp, _Alloc>::iterator + vector<_Tp, _Alloc>:: +#if __cplusplus >= 201103L + insert(const_iterator __position, const value_type& __x) +#else + insert(iterator __position, const value_type& __x) +#endif + { + const size_type __n = __position - begin(); + if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) + { + __glibcxx_assert(__position != const_iterator()); + if (!(__position != const_iterator())) + __builtin_unreachable(); // PR 106434 + + if (__position == end()) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(1); + _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, + __x); + ++this->_M_impl._M_finish; + _GLIBCXX_ASAN_ANNOTATE_GREW(1); + } + else + { +#if __cplusplus >= 201103L + const auto __pos = begin() + (__position - cbegin()); + // __x could be an existing element of this vector, so make a + // copy of it before _M_insert_aux moves elements around. + _Temporary_value __x_copy(this, __x); + _M_insert_aux(__pos, std::move(__x_copy._M_val())); +#else + _M_insert_aux(__position, __x); +#endif + } + } + else +#if __cplusplus >= 201103L + _M_realloc_insert(begin() + (__position - cbegin()), __x); +#else + _M_realloc_insert(__position, __x); +#endif + + return iterator(this->_M_impl._M_start + __n); + } + + template + _GLIBCXX20_CONSTEXPR + typename vector<_Tp, _Alloc>::iterator + vector<_Tp, _Alloc>:: + _M_erase(iterator __position) + { + if (__position + 1 != end()) + _GLIBCXX_MOVE3(__position + 1, end(), __position); + --this->_M_impl._M_finish; + _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); + _GLIBCXX_ASAN_ANNOTATE_SHRINK(1); + return __position; + } + + template + _GLIBCXX20_CONSTEXPR + typename vector<_Tp, _Alloc>::iterator + vector<_Tp, _Alloc>:: + _M_erase(iterator __first, iterator __last) + { + if (__first != __last) + { + if (__last != end()) + _GLIBCXX_MOVE3(__last, end(), __first); + _M_erase_at_end(__first.base() + (end() - __last)); + } + return __first; + } + + template + _GLIBCXX20_CONSTEXPR + vector<_Tp, _Alloc>& + vector<_Tp, _Alloc>:: + operator=(const vector<_Tp, _Alloc>& __x) + { + if (std::__addressof(__x) != this) + { + _GLIBCXX_ASAN_ANNOTATE_REINIT; +#if __cplusplus >= 201103L + if (_Alloc_traits::_S_propagate_on_copy_assign()) + { + if (!_Alloc_traits::_S_always_equal() + && _M_get_Tp_allocator() != __x._M_get_Tp_allocator()) + { + // replacement allocator cannot free existing storage + this->clear(); + _M_deallocate(this->_M_impl._M_start, + this->_M_impl._M_end_of_storage + - this->_M_impl._M_start); + this->_M_impl._M_start = nullptr; + this->_M_impl._M_finish = nullptr; + this->_M_impl._M_end_of_storage = nullptr; + } + std::__alloc_on_copy(_M_get_Tp_allocator(), + __x._M_get_Tp_allocator()); + } +#endif + const size_type __xlen = __x.size(); + if (__xlen > capacity()) + { + pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(), + __x.end()); + std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, + _M_get_Tp_allocator()); + _M_deallocate(this->_M_impl._M_start, + this->_M_impl._M_end_of_storage + - this->_M_impl._M_start); + this->_M_impl._M_start = __tmp; + this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen; + } + else if (size() >= __xlen) + { + std::_Destroy(std::copy(__x.begin(), __x.end(), begin()), + end(), _M_get_Tp_allocator()); + } + else + { + std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(), + this->_M_impl._M_start); + std::__uninitialized_copy_a(__x._M_impl._M_start + size(), + __x._M_impl._M_finish, + this->_M_impl._M_finish, + _M_get_Tp_allocator()); + } + this->_M_impl._M_finish = this->_M_impl._M_start + __xlen; + } + return *this; + } + + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_fill_assign(size_t __n, const value_type& __val) + { + const size_type __sz = size(); + if (__n > capacity()) + { + if (__n <= __sz) + __builtin_unreachable(); + vector __tmp(__n, __val, _M_get_Tp_allocator()); + __tmp._M_impl._M_swap_data(this->_M_impl); + } + else if (__n > __sz) + { + std::fill(begin(), end(), __val); + const size_type __add = __n - __sz; + _GLIBCXX_ASAN_ANNOTATE_GROW(__add); + this->_M_impl._M_finish = + std::__uninitialized_fill_n_a(this->_M_impl._M_finish, + __add, __val, _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_GREW(__add); + } + else + _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val)); + } + + template + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_assign_aux(_InputIterator __first, _InputIterator __last, + std::input_iterator_tag) + { + pointer __cur(this->_M_impl._M_start); + for (; __first != __last && __cur != this->_M_impl._M_finish; + ++__cur, (void)++__first) + *__cur = *__first; + if (__first == __last) + _M_erase_at_end(__cur); + else + _M_range_insert(end(), __first, __last, + std::__iterator_category(__first)); + } + + template + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, + std::forward_iterator_tag) + { + const size_type __sz = size(); + const size_type __len = std::distance(__first, __last); + + if (__len > capacity()) + { + if (__len <= __sz) + __builtin_unreachable(); + + _S_check_init_len(__len, _M_get_Tp_allocator()); + pointer __tmp(_M_allocate_and_copy(__len, __first, __last)); + std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, + _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_REINIT; + _M_deallocate(this->_M_impl._M_start, + this->_M_impl._M_end_of_storage + - this->_M_impl._M_start); + this->_M_impl._M_start = __tmp; + this->_M_impl._M_finish = this->_M_impl._M_start + __len; + this->_M_impl._M_end_of_storage = this->_M_impl._M_finish; + } + else if (__sz >= __len) + _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start)); + else + { + _ForwardIterator __mid = __first; + std::advance(__mid, __sz); + std::copy(__first, __mid, this->_M_impl._M_start); + const size_type __attribute__((__unused__)) __n = __len - __sz; + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + this->_M_impl._M_finish = + std::__uninitialized_copy_a(__mid, __last, + this->_M_impl._M_finish, + _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_GREW(__n); + } + } + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + auto + vector<_Tp, _Alloc>:: + _M_insert_rval(const_iterator __position, value_type&& __v) -> iterator + { + const auto __n = __position - cbegin(); + if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) + if (__position == cend()) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(1); + _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, + std::move(__v)); + ++this->_M_impl._M_finish; + _GLIBCXX_ASAN_ANNOTATE_GREW(1); + } + else + _M_insert_aux(begin() + __n, std::move(__v)); + else + _M_realloc_insert(begin() + __n, std::move(__v)); + + return iterator(this->_M_impl._M_start + __n); + } + + template + template + _GLIBCXX20_CONSTEXPR + auto + vector<_Tp, _Alloc>:: + _M_emplace_aux(const_iterator __position, _Args&&... __args) + -> iterator + { + const auto __n = __position - cbegin(); + if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) + if (__position == cend()) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(1); + _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, + std::forward<_Args>(__args)...); + ++this->_M_impl._M_finish; + _GLIBCXX_ASAN_ANNOTATE_GREW(1); + } + else + { + // We need to construct a temporary because something in __args... + // could alias one of the elements of the container and so we + // need to use it before _M_insert_aux moves elements around. + _Temporary_value __tmp(this, std::forward<_Args>(__args)...); + _M_insert_aux(begin() + __n, std::move(__tmp._M_val())); + } + else + _M_realloc_insert(begin() + __n, std::forward<_Args>(__args)...); + + return iterator(this->_M_impl._M_start + __n); + } + + template + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_insert_aux(iterator __position, _Arg&& __arg) +#else + template + void + vector<_Tp, _Alloc>:: + _M_insert_aux(iterator __position, const _Tp& __x) +#endif + { + _GLIBCXX_ASAN_ANNOTATE_GROW(1); + _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, + _GLIBCXX_MOVE(*(this->_M_impl._M_finish - 1))); + ++this->_M_impl._M_finish; + _GLIBCXX_ASAN_ANNOTATE_GREW(1); +#if __cplusplus < 201103L + _Tp __x_copy = __x; +#endif + _GLIBCXX_MOVE_BACKWARD3(__position.base(), + this->_M_impl._M_finish - 2, + this->_M_impl._M_finish - 1); +#if __cplusplus < 201103L + *__position = __x_copy; +#else + *__position = std::forward<_Arg>(__arg); +#endif + } + +#if __cplusplus >= 201103L + template + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_realloc_insert(iterator __position, _Args&&... __args) +#else + template + void + vector<_Tp, _Alloc>:: + _M_realloc_insert(iterator __position, const _Tp& __x) +#endif + { + const size_type __len = _M_check_len(1u, "vector::_M_realloc_insert"); + if (__len <= 0) + __builtin_unreachable (); + pointer __old_start = this->_M_impl._M_start; + pointer __old_finish = this->_M_impl._M_finish; + const size_type __elems_before = __position - begin(); + pointer __new_start(this->_M_allocate(__len)); + pointer __new_finish(__new_start); + + { + _Guard_alloc __guard(__new_start, __len, *this); + + // The order of the three operations is dictated by the C++11 + // case, where the moves could alter a new element belonging + // to the existing vector. This is an issue only for callers + // taking the element by lvalue ref (see last bullet of C++11 + // [res.on.arguments]). + + // If this throws, the existing elements are unchanged. +#if __cplusplus >= 201103L + _Alloc_traits::construct(this->_M_impl, + std::__to_address(__new_start + __elems_before), + std::forward<_Args>(__args)...); +#else + _Alloc_traits::construct(this->_M_impl, + __new_start + __elems_before, + __x); +#endif + +#if __cplusplus >= 201103L + if _GLIBCXX17_CONSTEXPR (_S_use_relocate()) + { + // Relocation cannot throw. + __new_finish = _S_relocate(__old_start, __position.base(), + __new_start, _M_get_Tp_allocator()); + ++__new_finish; + __new_finish = _S_relocate(__position.base(), __old_finish, + __new_finish, _M_get_Tp_allocator()); + } + else +#endif + { + // RAII type to destroy initialized elements. + struct _Guard_elts + { + pointer _M_first, _M_last; // Elements to destroy + _Tp_alloc_type& _M_alloc; + + _GLIBCXX20_CONSTEXPR + _Guard_elts(pointer __elt, _Tp_alloc_type& __a) + : _M_first(__elt), _M_last(__elt + 1), _M_alloc(__a) + { } + + _GLIBCXX20_CONSTEXPR + ~_Guard_elts() + { std::_Destroy(_M_first, _M_last, _M_alloc); } + + private: + _Guard_elts(const _Guard_elts&); + }; + + // Guard the new element so it will be destroyed if anything throws. + _Guard_elts __guard_elts(__new_start + __elems_before, _M_impl); + + __new_finish = std::__uninitialized_move_if_noexcept_a( + __old_start, __position.base(), + __new_start, _M_get_Tp_allocator()); + + ++__new_finish; + // Guard everything before the new element too. + __guard_elts._M_first = __new_start; + + __new_finish = std::__uninitialized_move_if_noexcept_a( + __position.base(), __old_finish, + __new_finish, _M_get_Tp_allocator()); + + // New storage has been fully initialized, destroy the old elements. + __guard_elts._M_first = __old_start; + __guard_elts._M_last = __old_finish; + } + __guard._M_storage = __old_start; + __guard._M_len = this->_M_impl._M_end_of_storage - __old_start; + } + // deallocate should be called before assignments to _M_impl, + // to avoid call-clobbering + + this->_M_impl._M_start = __new_start; + this->_M_impl._M_finish = __new_finish; + this->_M_impl._M_end_of_storage = __new_start + __len; + } + +#if __cplusplus >= 201103L + template + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_realloc_append(_Args&&... __args) +#else + template + void + vector<_Tp, _Alloc>:: + _M_realloc_append(const _Tp& __x) +#endif + { + const size_type __len = _M_check_len(1u, "vector::_M_realloc_append"); + if (__len <= 0) + __builtin_unreachable (); + pointer __old_start = this->_M_impl._M_start; + pointer __old_finish = this->_M_impl._M_finish; + const size_type __elems = end() - begin(); + pointer __new_start(this->_M_allocate(__len)); + pointer __new_finish(__new_start); + + { + _Guard_alloc __guard(__new_start, __len, *this); + + // The order of the three operations is dictated by the C++11 + // case, where the moves could alter a new element belonging + // to the existing vector. This is an issue only for callers + // taking the element by lvalue ref (see last bullet of C++11 + // [res.on.arguments]). + + // If this throws, the existing elements are unchanged. +#if __cplusplus >= 201103L + _Alloc_traits::construct(this->_M_impl, + std::__to_address(__new_start + __elems), + std::forward<_Args>(__args)...); +#else + _Alloc_traits::construct(this->_M_impl, + __new_start + __elems, + __x); +#endif + +#if __cplusplus >= 201103L + if _GLIBCXX17_CONSTEXPR (_S_use_relocate()) + { + // Relocation cannot throw. + __new_finish = _S_relocate(__old_start, __old_finish, + __new_start, _M_get_Tp_allocator()); + ++__new_finish; + } + else +#endif + { + // RAII type to destroy initialized elements. + struct _Guard_elts + { + pointer _M_first, _M_last; // Elements to destroy + _Tp_alloc_type& _M_alloc; + + _GLIBCXX20_CONSTEXPR + _Guard_elts(pointer __elt, _Tp_alloc_type& __a) + : _M_first(__elt), _M_last(__elt + 1), _M_alloc(__a) + { } + + _GLIBCXX20_CONSTEXPR + ~_Guard_elts() + { std::_Destroy(_M_first, _M_last, _M_alloc); } + + private: + _Guard_elts(const _Guard_elts&); + }; + + // Guard the new element so it will be destroyed if anything throws. + _Guard_elts __guard_elts(__new_start + __elems, _M_impl); + + __new_finish = std::__uninitialized_move_if_noexcept_a( + __old_start, __old_finish, + __new_start, _M_get_Tp_allocator()); + + ++__new_finish; + + // New storage has been fully initialized, destroy the old elements. + __guard_elts._M_first = __old_start; + __guard_elts._M_last = __old_finish; + } + __guard._M_storage = __old_start; + __guard._M_len = this->_M_impl._M_end_of_storage - __old_start; + } + // deallocate should be called before assignments to _M_impl, + // to avoid call-clobbering + + this->_M_impl._M_start = __new_start; + this->_M_impl._M_finish = __new_finish; + this->_M_impl._M_end_of_storage = __new_start + __len; + } + + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_fill_insert(iterator __position, size_type __n, const value_type& __x) + { + if (__n != 0) + { + if (__position.base() == this->_M_impl._M_finish) + _M_fill_append(__n, __x); + else if (size_type(this->_M_impl._M_end_of_storage + - this->_M_impl._M_finish) >= __n) + { +#if __cplusplus < 201103L + value_type __x_copy = __x; +#else + _Temporary_value __tmp(this, __x); + value_type& __x_copy = __tmp._M_val(); +#endif + const size_type __elems_after = end() - __position; + pointer __old_finish(this->_M_impl._M_finish); + if (__elems_after > __n) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + std::__uninitialized_move_a(__old_finish - __n, + __old_finish, + __old_finish, + _M_get_Tp_allocator()); + this->_M_impl._M_finish += __n; + _GLIBCXX_ASAN_ANNOTATE_GREW(__n); + _GLIBCXX_MOVE_BACKWARD3(__position.base(), + __old_finish - __n, __old_finish); + std::fill(__position.base(), __position.base() + __n, + __x_copy); + } + else + { + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + this->_M_impl._M_finish = + std::__uninitialized_fill_n_a(__old_finish, + __n - __elems_after, + __x_copy, + _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after); + std::__uninitialized_move_a(__position.base(), __old_finish, + this->_M_impl._M_finish, + _M_get_Tp_allocator()); + this->_M_impl._M_finish += __elems_after; + _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after); + std::fill(__position.base(), __old_finish, __x_copy); + } + } + else + { + // Make local copies of these members because the compiler thinks + // the allocator can alter them if 'this' is globally reachable. + pointer __old_start = this->_M_impl._M_start; + pointer __old_finish = this->_M_impl._M_finish; + const pointer __pos = __position.base(); + + const size_type __len = + _M_check_len(__n, "vector::_M_fill_insert"); + const size_type __elems_before = __pos - __old_start; + pointer __new_start(this->_M_allocate(__len)); + pointer __new_finish(__new_start); + __try + { + // See _M_realloc_insert above. + std::__uninitialized_fill_n_a(__new_start + __elems_before, + __n, __x, + _M_get_Tp_allocator()); + __new_finish = pointer(); + + __new_finish + = std::__uninitialized_move_if_noexcept_a + (__old_start, __pos, __new_start, _M_get_Tp_allocator()); + + __new_finish += __n; + + __new_finish + = std::__uninitialized_move_if_noexcept_a + (__pos, __old_finish, __new_finish, _M_get_Tp_allocator()); + } + __catch(...) + { + if (!__new_finish) + std::_Destroy(__new_start + __elems_before, + __new_start + __elems_before + __n, + _M_get_Tp_allocator()); + else + std::_Destroy(__new_start, __new_finish, + _M_get_Tp_allocator()); + _M_deallocate(__new_start, __len); + __throw_exception_again; + } + std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_REINIT; + _M_deallocate(__old_start, + this->_M_impl._M_end_of_storage - __old_start); + this->_M_impl._M_start = __new_start; + this->_M_impl._M_finish = __new_finish; + this->_M_impl._M_end_of_storage = __new_start + __len; + } + } + } + + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_fill_append(size_type __n, const value_type& __x) + { + if (size_type(this->_M_impl._M_end_of_storage + - this->_M_impl._M_finish) >= __n) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + this->_M_impl._M_finish = + std::__uninitialized_fill_n_a(this->_M_impl._M_finish, __n, __x, + _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_GREW(__n); + } + else + { + // Make local copies of these members because the compiler thinks + // the allocator can alter them if 'this' is globally reachable. + pointer __old_start = this->_M_impl._M_start; + pointer __old_finish = this->_M_impl._M_finish; + const size_type __old_size = __old_finish - __old_start; + + const size_type __len = + _M_check_len(__n, "vector::_M_fill_append"); + pointer __new_start(this->_M_allocate(__len)); + pointer __new_finish(__new_start + __old_size); + __try + { + // See _M_realloc_insert above. + __new_finish = std::__uninitialized_fill_n_a( + __new_finish, __n, __x, + _M_get_Tp_allocator()); + std::__uninitialized_move_if_noexcept_a( + __old_start, __old_finish, __new_start, + _M_get_Tp_allocator()); + } + __catch(...) + { + std::_Destroy(__new_start + __old_size, __new_finish, + _M_get_Tp_allocator()); + _M_deallocate(__new_start, __len); + __throw_exception_again; + } + std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_REINIT; + _M_deallocate(__old_start, + this->_M_impl._M_end_of_storage - __old_start); + this->_M_impl._M_start = __new_start; + this->_M_impl._M_finish = __new_finish; + this->_M_impl._M_end_of_storage = __new_start + __len; + } + } + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_default_append(size_type __n) + { + if (__n != 0) + { + const size_type __size = size(); + size_type __navail = size_type(this->_M_impl._M_end_of_storage + - this->_M_impl._M_finish); + + if (__size > max_size() || __navail > max_size() - __size) + __builtin_unreachable(); + + if (__navail >= __n) + { + if (!this->_M_impl._M_finish) + __builtin_unreachable(); + + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + this->_M_impl._M_finish = + std::__uninitialized_default_n_a(this->_M_impl._M_finish, + __n, _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_GREW(__n); + } + else + { + // Make local copies of these members because the compiler thinks + // the allocator can alter them if 'this' is globally reachable. + pointer __old_start = this->_M_impl._M_start; + pointer __old_finish = this->_M_impl._M_finish; + + const size_type __len = + _M_check_len(__n, "vector::_M_default_append"); + pointer __new_start(this->_M_allocate(__len)); + + { + _Guard_alloc __guard(__new_start, __len, *this); + + std::__uninitialized_default_n_a(__new_start + __size, __n, + _M_get_Tp_allocator()); + + if _GLIBCXX17_CONSTEXPR (_S_use_relocate()) + { + _S_relocate(__old_start, __old_finish, + __new_start, _M_get_Tp_allocator()); + } + else + { + // RAII type to destroy initialized elements. + struct _Guard_elts + { + pointer _M_first, _M_last; // Elements to destroy + _Tp_alloc_type& _M_alloc; + + _GLIBCXX20_CONSTEXPR + _Guard_elts(pointer __first, size_type __n, + _Tp_alloc_type& __a) + : _M_first(__first), _M_last(__first + __n), _M_alloc(__a) + { } + + _GLIBCXX20_CONSTEXPR + ~_Guard_elts() + { std::_Destroy(_M_first, _M_last, _M_alloc); } + + private: + _Guard_elts(const _Guard_elts&); + }; + _Guard_elts __guard_elts(__new_start + __size, __n, _M_impl); + + std::__uninitialized_move_if_noexcept_a( + __old_start, __old_finish, __new_start, + _M_get_Tp_allocator()); + + __guard_elts._M_first = __old_start; + __guard_elts._M_last = __old_finish; + } + _GLIBCXX_ASAN_ANNOTATE_REINIT; + __guard._M_storage = __old_start; + __guard._M_len = this->_M_impl._M_end_of_storage - __old_start; + } + // deallocate should be called before assignments to _M_impl, + // to avoid call-clobbering + + this->_M_impl._M_start = __new_start; + this->_M_impl._M_finish = __new_start + __size + __n; + this->_M_impl._M_end_of_storage = __new_start + __len; + } + } + } + + template + _GLIBCXX20_CONSTEXPR + bool + vector<_Tp, _Alloc>:: + _M_shrink_to_fit() + { + if (capacity() == size()) + return false; + _GLIBCXX_ASAN_ANNOTATE_REINIT; + return std::__shrink_to_fit_aux::_S_do_it(*this); + } +#endif + + template + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_range_insert(iterator __pos, _InputIterator __first, + _InputIterator __last, std::input_iterator_tag) + { + if (__pos == end()) + { + for (; __first != __last; ++__first) + insert(end(), *__first); + } + else if (__first != __last) + { + vector __tmp(__first, __last, _M_get_Tp_allocator()); + insert(__pos, + _GLIBCXX_MAKE_MOVE_ITERATOR(__tmp.begin()), + _GLIBCXX_MAKE_MOVE_ITERATOR(__tmp.end())); + } + } + + template + template + _GLIBCXX20_CONSTEXPR + void + vector<_Tp, _Alloc>:: + _M_range_insert(iterator __position, _ForwardIterator __first, + _ForwardIterator __last, std::forward_iterator_tag) + { + if (__first != __last) + { + const size_type __n = std::distance(__first, __last); + if (size_type(this->_M_impl._M_end_of_storage + - this->_M_impl._M_finish) >= __n) + { + const size_type __elems_after = end() - __position; + pointer __old_finish(this->_M_impl._M_finish); + if (__elems_after > __n) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + std::__uninitialized_move_a(this->_M_impl._M_finish - __n, + this->_M_impl._M_finish, + this->_M_impl._M_finish, + _M_get_Tp_allocator()); + this->_M_impl._M_finish += __n; + _GLIBCXX_ASAN_ANNOTATE_GREW(__n); + _GLIBCXX_MOVE_BACKWARD3(__position.base(), + __old_finish - __n, __old_finish); + std::copy(__first, __last, __position); + } + else + { + _ForwardIterator __mid = __first; + std::advance(__mid, __elems_after); + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + std::__uninitialized_copy_a(__mid, __last, + this->_M_impl._M_finish, + _M_get_Tp_allocator()); + this->_M_impl._M_finish += __n - __elems_after; + _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after); + std::__uninitialized_move_a(__position.base(), + __old_finish, + this->_M_impl._M_finish, + _M_get_Tp_allocator()); + this->_M_impl._M_finish += __elems_after; + _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after); + std::copy(__first, __mid, __position); + } + } + else + { + // Make local copies of these members because the compiler + // thinks the allocator can alter them if 'this' is globally + // reachable. + pointer __old_start = this->_M_impl._M_start; + pointer __old_finish = this->_M_impl._M_finish; + + const size_type __len = + _M_check_len(__n, "vector::_M_range_insert"); +#if __cplusplus < 201103L + if (__len < (__n + (__old_finish - __old_start))) + __builtin_unreachable(); +#endif + + pointer __new_start(this->_M_allocate(__len)); + pointer __new_finish(__new_start); + __try + { + __new_finish + = std::__uninitialized_move_if_noexcept_a + (__old_start, __position.base(), + __new_start, _M_get_Tp_allocator()); + __new_finish + = std::__uninitialized_copy_a(__first, __last, + __new_finish, + _M_get_Tp_allocator()); + __new_finish + = std::__uninitialized_move_if_noexcept_a + (__position.base(), __old_finish, + __new_finish, _M_get_Tp_allocator()); + } + __catch(...) + { + std::_Destroy(__new_start, __new_finish, + _M_get_Tp_allocator()); + _M_deallocate(__new_start, __len); + __throw_exception_again; + } + std::_Destroy(__old_start, __old_finish, + _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_REINIT; + _M_deallocate(__old_start, + this->_M_impl._M_end_of_storage - __old_start); + this->_M_impl._M_start = __new_start; + this->_M_impl._M_finish = __new_finish; + this->_M_impl._M_end_of_storage = __new_start + __len; + } + } + } + +#if __glibcxx_containers_ranges // C++ >= 23 + template + template<__detail::__container_compatible_range<_Tp> _Rg> + constexpr auto + vector<_Tp, _Alloc>:: + insert_range(const_iterator __pos, _Rg&& __rg) + -> iterator + { + if (__pos == cend()) + { + const auto __ins_idx = size(); + append_range(std::forward<_Rg>(__rg)); + return begin() + __ins_idx; + } + + if constexpr (ranges::forward_range<_Rg>) + { + const auto __ins_idx = __pos - cbegin(); + // Number of new elements to insert: + const auto __n = size_type(ranges::distance(__rg)); + if (__n == 0) + return begin() + __ins_idx; + + // Start of existing elements: + pointer __old_start = this->_M_impl._M_start; + // End of existing elements: + pointer __old_finish = this->_M_impl._M_finish; + // Insertion point: + pointer __ins = __old_start + __ins_idx; + // Number of elements that can fit in unused capacity: + const auto __cap = this->_M_impl._M_end_of_storage - __old_finish; + if (__cap >= __n) + { + // Number of existing elements after insertion point: + const size_type __elems_after = cend() - __pos; + if (__elems_after > __n) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + std::__uninitialized_move_a(__old_finish - __n, + __old_finish, + __old_finish, + _M_get_Tp_allocator()); + this->_M_impl._M_finish += __n; + _GLIBCXX_ASAN_ANNOTATE_GREW(__n); + std::move_backward(__ins, __old_finish - __n, __old_finish); + ranges::copy(__rg, __ins); + } + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + auto __mid = ranges::next(__first, __elems_after); + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + _Base::_M_append_range(ranges::subrange(__mid, __last)); + _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after); + std::__uninitialized_move_a(__ins, __old_finish, + this->_M_impl._M_finish, + _M_get_Tp_allocator()); + this->_M_impl._M_finish += __elems_after; + _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after); + ranges::copy(__first, __mid, __ins); + } + } + else // Reallocate + { + const size_type __len + = _M_check_len(__n, "vector::insert_range"); + + struct _Guard : _Guard_alloc + { + // End of elements to destroy: + pointer _M_finish = _Guard_alloc::_M_storage; + + using _Guard_alloc::_Guard_alloc; + + constexpr + ~_Guard() + { + std::_Destroy(this->_M_storage, _M_finish, + this->_M_vect._M_get_Tp_allocator()); + } + }; + + // Allocate new storage: + pointer __new_start(this->_M_allocate(__len)); + _Guard __guard(__new_start, __len, *this); + + auto& __alloc = _M_get_Tp_allocator(); + + // Populate the new storage in three steps. After each step, + // __guard owns the new storage and any elements that have + // been constructed there. + + // Move elements from before insertion point to new storage: + __guard._M_finish + = std::__uninitialized_move_if_noexcept_a( + __old_start, __ins, __new_start, __alloc); + + // Append new elements to new storage: + _Base::_M_append_range_to(__rg, __guard._M_finish); + + // Move elements from after insertion point to new storage: + __guard._M_finish + = std::__uninitialized_move_if_noexcept_a( + __ins, __old_finish, __guard._M_finish, __alloc); + + _GLIBCXX_ASAN_ANNOTATE_REINIT; // Creates _Asan::_Reinit. + + // All elements are in the new storage, exchange ownership + // with __guard so that it cleans up the old storage: + this->_M_impl._M_start = __guard._M_storage; + this->_M_impl._M_finish = __guard._M_finish; + this->_M_impl._M_end_of_storage = __new_start + __len; + __guard._M_storage = __old_start; + __guard._M_finish = __old_finish; + __guard._M_len = (__old_finish - __old_start) + __cap; + // _Asan::_Reinit destructor marks unused capacity. + // _Guard destructor destroys [old_start,old_finish). + // _Guard_alloc destructor frees [old_start,old_start+len). + } + return begin() + __ins_idx; + } + else + return insert_range(__pos, vector(from_range, std::forward<_Rg>(__rg), + _M_get_Tp_allocator())); + } +#endif // containers_ranges + + // vector + template + _GLIBCXX20_CONSTEXPR + void + vector:: + _M_reallocate(size_type __n) + { + const iterator __begin = begin(), __end = end(); + if (size_type(__end - __begin) > __n) + __builtin_unreachable(); + _Bit_pointer __q = this->_M_allocate(__n); + iterator __start(std::__addressof(*__q), 0); + iterator __finish(_M_copy_aligned(__begin, __end, __start)); + this->_M_deallocate(); + this->_M_impl._M_start = __start; + this->_M_impl._M_finish = __finish; + this->_M_impl._M_end_of_storage = __q + _S_nword(__n); + } + + template + _GLIBCXX20_CONSTEXPR + void + vector:: + _M_fill_insert(iterator __position, size_type __n, bool __x) + { + if (__n == 0) + return; + if (capacity() - size() >= __n) + { + std::copy_backward(__position, end(), + this->_M_impl._M_finish + difference_type(__n)); + std::fill(__position, __position + difference_type(__n), __x); + this->_M_impl._M_finish += difference_type(__n); + } + else + { + const size_type __len = + _M_check_len(__n, "vector::_M_fill_insert"); + iterator __begin = begin(), __end = end(); + _Bit_pointer __q = this->_M_allocate(__len); + iterator __start(std::__addressof(*__q), 0); + iterator __i = _M_copy_aligned(__begin, __position, __start); + std::fill(__i, __i + difference_type(__n), __x); + iterator __finish = std::copy(__position, __end, + __i + difference_type(__n)); + this->_M_deallocate(); + this->_M_impl._M_end_of_storage = __q + _S_nword(__len); + this->_M_impl._M_start = __start; + this->_M_impl._M_finish = __finish; + } + } + + template + template + _GLIBCXX20_CONSTEXPR + void + vector:: + _M_insert_range(iterator __position, _ForwardIterator __first, + _ForwardIterator __last, std::forward_iterator_tag) + { + if (__first != __last) + { + size_type __n = std::distance(__first, __last); + if (capacity() - size() >= __n) + { + std::copy_backward(__position, end(), + this->_M_impl._M_finish + + difference_type(__n)); + std::copy(__first, __last, __position); + this->_M_impl._M_finish += difference_type(__n); + } + else + { + const size_type __len = + _M_check_len(__n, "vector::_M_insert_range"); + const iterator __begin = begin(), __end = end(); + _Bit_pointer __q = this->_M_allocate(__len); + iterator __start(std::__addressof(*__q), 0); + iterator __i = _M_copy_aligned(__begin, __position, __start); + __i = std::copy(__first, __last, __i); + iterator __finish = std::copy(__position, __end, __i); + this->_M_deallocate(); + this->_M_impl._M_end_of_storage = __q + _S_nword(__len); + this->_M_impl._M_start = __start; + this->_M_impl._M_finish = __finish; + } + } + } + + template + _GLIBCXX20_CONSTEXPR + void + vector:: + _M_insert_aux(iterator __position, bool __x) + { + if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) + { + std::copy_backward(__position, this->_M_impl._M_finish, + this->_M_impl._M_finish + 1); + *__position = __x; + ++this->_M_impl._M_finish; + } + else + { + const size_type __len = + _M_check_len(size_type(1), "vector::_M_insert_aux"); + _Bit_pointer __q = this->_M_allocate(__len); + iterator __start(std::__addressof(*__q), 0); + iterator __i = _M_copy_aligned(begin(), __position, __start); + *__i++ = __x; + iterator __finish = std::copy(__position, end(), __i); + this->_M_deallocate(); + this->_M_impl._M_end_of_storage = __q + _S_nword(__len); + this->_M_impl._M_start = __start; + this->_M_impl._M_finish = __finish; + } + } + + template + _GLIBCXX20_CONSTEXPR + typename vector::iterator + vector:: + _M_erase(iterator __position) + { + if (__position + 1 != end()) + std::copy(__position + 1, end(), __position); + --this->_M_impl._M_finish; + return __position; + } + + template + _GLIBCXX20_CONSTEXPR + typename vector::iterator + vector:: + _M_erase(iterator __first, iterator __last) + { + if (__first != __last) + _M_erase_at_end(std::copy(__last, end(), __first)); + return __first; + } + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + bool + vector:: + _M_shrink_to_fit() + { + if (capacity() - size() < int(_S_word_bit)) + return false; + __try + { + if (size_type __n = size()) + _M_reallocate(__n); + else + { + this->_M_deallocate(); + this->_M_impl._M_reset(); + } + return true; + } + __catch(...) + { return false; } + } +#endif + +_GLIBCXX_END_NAMESPACE_CONTAINER +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#if __cplusplus >= 201103L + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + size_t + hash<_GLIBCXX_STD_C::vector>:: + operator()(const _GLIBCXX_STD_C::vector& __b) const noexcept + { + size_t __hash = 0; + const size_t __words = __b.size() / _S_word_bit; + if (__words) + { + const size_t __clength = __words * sizeof(_Bit_type); + __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength); + } + + const size_t __extrabits = __b.size() % _S_word_bit; + if (__extrabits) + { + _Bit_type __hiword = *__b._M_impl._M_finish._M_p; + __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits); + + const size_t __clength + = (__extrabits + __CHAR_BIT__ - 1) / __CHAR_BIT__; + if (__words) + __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash); + else + __hash = std::_Hash_impl::hash(&__hiword, __clength); + } + + return __hash; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#undef _GLIBCXX_ASAN_ANNOTATE_REINIT +#undef _GLIBCXX_ASAN_ANNOTATE_GROW +#undef _GLIBCXX_ASAN_ANNOTATE_GREW +#undef _GLIBCXX_ASAN_ANNOTATE_SHRINK + +#endif /* _VECTOR_TCC */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@vector.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@vector.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..1b26b1b578ee7538af72b8649f7d97651d793d64 GIT binary patch literal 97214 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. + +// DO NOT EDIT THIS FILE (version.h) +// +// It has been AutoGen-ed +// From the definitions version.def +// and the template file version.tpl + +/** @file bits/version.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{version} + */ + +// Usage guide: +// +// In your usual header, do something like: +// +// #define __glibcxx_want_ranges +// #define __glibcxx_want_concepts +// #include +// +// This will generate the FTMs you named, and let you use them in your code as +// if it was user code. All macros are also exposed under __glibcxx_NAME even +// if unwanted, to permit bits and other FTMs to depend on them for condtional +// computation without exposing extra FTMs to user code. + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#if !defined(__cpp_lib_incomplete_container_elements) +# if _GLIBCXX_HOSTED +# define __glibcxx_incomplete_container_elements 201505L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_incomplete_container_elements) +# define __cpp_lib_incomplete_container_elements 201505L +# endif +# endif +#endif /* !defined(__cpp_lib_incomplete_container_elements) && defined(__glibcxx_want_incomplete_container_elements) */ +#undef __glibcxx_want_incomplete_container_elements + +#if !defined(__cpp_lib_uncaught_exceptions) +# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 199711L)) +# define __glibcxx_uncaught_exceptions 201411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_uncaught_exceptions) +# define __cpp_lib_uncaught_exceptions 201411L +# endif +# endif +#endif /* !defined(__cpp_lib_uncaught_exceptions) && defined(__glibcxx_want_uncaught_exceptions) */ +#undef __glibcxx_want_uncaught_exceptions + +#if !defined(__cpp_lib_allocator_traits_is_always_equal) +# if (__cplusplus >= 201103L) +# define __glibcxx_allocator_traits_is_always_equal 201411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_allocator_traits_is_always_equal) +# define __cpp_lib_allocator_traits_is_always_equal 201411L +# endif +# endif +#endif /* !defined(__cpp_lib_allocator_traits_is_always_equal) && defined(__glibcxx_want_allocator_traits_is_always_equal) */ +#undef __glibcxx_want_allocator_traits_is_always_equal + +#if !defined(__cpp_lib_is_null_pointer) +# if (__cplusplus >= 201103L) +# define __glibcxx_is_null_pointer 201309L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_null_pointer) +# define __cpp_lib_is_null_pointer 201309L +# endif +# endif +#endif /* !defined(__cpp_lib_is_null_pointer) && defined(__glibcxx_want_is_null_pointer) */ +#undef __glibcxx_want_is_null_pointer + +#if !defined(__cpp_lib_result_of_sfinae) +# if (__cplusplus >= 201103L) +# define __glibcxx_result_of_sfinae 201210L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_result_of_sfinae) +# define __cpp_lib_result_of_sfinae 201210L +# endif +# endif +#endif /* !defined(__cpp_lib_result_of_sfinae) && defined(__glibcxx_want_result_of_sfinae) */ +#undef __glibcxx_want_result_of_sfinae + +#if !defined(__cpp_lib_shared_ptr_arrays) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_shared_ptr_arrays 201707L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_arrays) +# define __cpp_lib_shared_ptr_arrays 201707L +# endif +# elif (__cplusplus >= 201103L) && _GLIBCXX_HOSTED +# define __glibcxx_shared_ptr_arrays 201611L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_arrays) +# define __cpp_lib_shared_ptr_arrays 201611L +# endif +# endif +#endif /* !defined(__cpp_lib_shared_ptr_arrays) && defined(__glibcxx_want_shared_ptr_arrays) */ +#undef __glibcxx_want_shared_ptr_arrays + +#if !defined(__cpp_lib_is_swappable) +# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L)) +# define __glibcxx_is_swappable 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_swappable) +# define __cpp_lib_is_swappable 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_is_swappable) && defined(__glibcxx_want_is_swappable) */ +#undef __glibcxx_want_is_swappable + +#if !defined(__cpp_lib_void_t) +# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L)) +# define __glibcxx_void_t 201411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_void_t) +# define __cpp_lib_void_t 201411L +# endif +# endif +#endif /* !defined(__cpp_lib_void_t) && defined(__glibcxx_want_void_t) */ +#undef __glibcxx_want_void_t + +#if !defined(__cpp_lib_enable_shared_from_this) +# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L)) && _GLIBCXX_HOSTED +# define __glibcxx_enable_shared_from_this 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_enable_shared_from_this) +# define __cpp_lib_enable_shared_from_this 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_enable_shared_from_this) && defined(__glibcxx_want_enable_shared_from_this) */ +#undef __glibcxx_want_enable_shared_from_this + +#if !defined(__cpp_lib_math_spec_funcs) +# if (__cplusplus >= 201103L) +# define __glibcxx_math_spec_funcs 201003L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_spec_funcs) +# define __STDCPP_MATH_SPEC_FUNCS__ 201003L +# endif +# endif +#endif /* !defined(__cpp_lib_math_spec_funcs) && defined(__glibcxx_want_math_spec_funcs) */ +#undef __glibcxx_want_math_spec_funcs + +#if !defined(__cpp_lib_coroutine) +# if (__cplusplus >= 201402L) && (__cpp_impl_coroutine) +# define __glibcxx_coroutine 201902L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_coroutine) +# define __cpp_lib_coroutine 201902L +# endif +# endif +#endif /* !defined(__cpp_lib_coroutine) && defined(__glibcxx_want_coroutine) */ +#undef __glibcxx_want_coroutine + +#if !defined(__cpp_lib_exchange_function) +# if (__cplusplus >= 201402L) +# define __glibcxx_exchange_function 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_exchange_function) +# define __cpp_lib_exchange_function 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_exchange_function) && defined(__glibcxx_want_exchange_function) */ +#undef __glibcxx_want_exchange_function + +#if !defined(__cpp_lib_integer_sequence) +# if (__cplusplus >= 201402L) +# define __glibcxx_integer_sequence 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integer_sequence) +# define __cpp_lib_integer_sequence 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_integer_sequence) && defined(__glibcxx_want_integer_sequence) */ +#undef __glibcxx_want_integer_sequence + +#if !defined(__cpp_lib_integral_constant_callable) +# if (__cplusplus >= 201402L) +# define __glibcxx_integral_constant_callable 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integral_constant_callable) +# define __cpp_lib_integral_constant_callable 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_integral_constant_callable) && defined(__glibcxx_want_integral_constant_callable) */ +#undef __glibcxx_want_integral_constant_callable + +#if !defined(__cpp_lib_is_final) +# if (__cplusplus >= 201402L) +# define __glibcxx_is_final 201402L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_final) +# define __cpp_lib_is_final 201402L +# endif +# endif +#endif /* !defined(__cpp_lib_is_final) && defined(__glibcxx_want_is_final) */ +#undef __glibcxx_want_is_final + +#if !defined(__cpp_lib_make_reverse_iterator) +# if (__cplusplus >= 201402L) +# define __glibcxx_make_reverse_iterator 201402L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_reverse_iterator) +# define __cpp_lib_make_reverse_iterator 201402L +# endif +# endif +#endif /* !defined(__cpp_lib_make_reverse_iterator) && defined(__glibcxx_want_make_reverse_iterator) */ +#undef __glibcxx_want_make_reverse_iterator + +#if !defined(__cpp_lib_null_iterators) +# if (__cplusplus >= 201402L) +# define __glibcxx_null_iterators 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_null_iterators) +# define __cpp_lib_null_iterators 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_null_iterators) && defined(__glibcxx_want_null_iterators) */ +#undef __glibcxx_want_null_iterators + +#if !defined(__cpp_lib_transformation_trait_aliases) +# if (__cplusplus >= 201402L) +# define __glibcxx_transformation_trait_aliases 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_transformation_trait_aliases) +# define __cpp_lib_transformation_trait_aliases 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_transformation_trait_aliases) && defined(__glibcxx_want_transformation_trait_aliases) */ +#undef __glibcxx_want_transformation_trait_aliases + +#if !defined(__cpp_lib_transparent_operators) +# if (__cplusplus >= 201402L) +# define __glibcxx_transparent_operators 201510L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_transparent_operators) +# define __cpp_lib_transparent_operators 201510L +# endif +# endif +#endif /* !defined(__cpp_lib_transparent_operators) && defined(__glibcxx_want_transparent_operators) */ +#undef __glibcxx_want_transparent_operators + +#if !defined(__cpp_lib_tuple_element_t) +# if (__cplusplus >= 201402L) +# define __glibcxx_tuple_element_t 201402L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_element_t) +# define __cpp_lib_tuple_element_t 201402L +# endif +# endif +#endif /* !defined(__cpp_lib_tuple_element_t) && defined(__glibcxx_want_tuple_element_t) */ +#undef __glibcxx_want_tuple_element_t + +#if !defined(__cpp_lib_tuples_by_type) +# if (__cplusplus >= 201402L) +# define __glibcxx_tuples_by_type 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuples_by_type) +# define __cpp_lib_tuples_by_type 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_tuples_by_type) && defined(__glibcxx_want_tuples_by_type) */ +#undef __glibcxx_want_tuples_by_type + +#if !defined(__cpp_lib_robust_nonmodifying_seq_ops) +# if (__cplusplus >= 201402L) +# define __glibcxx_robust_nonmodifying_seq_ops 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_robust_nonmodifying_seq_ops) +# define __cpp_lib_robust_nonmodifying_seq_ops 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_robust_nonmodifying_seq_ops) && defined(__glibcxx_want_robust_nonmodifying_seq_ops) */ +#undef __glibcxx_want_robust_nonmodifying_seq_ops + +#if !defined(__cpp_lib_to_chars) +# if (__cplusplus > 202302L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32) +# define __glibcxx_to_chars 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars) +# define __cpp_lib_to_chars 202306L +# endif +# elif (__cplusplus >= 201402L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32) +# define __glibcxx_to_chars 201611L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars) +# define __cpp_lib_to_chars 201611L +# endif +# endif +#endif /* !defined(__cpp_lib_to_chars) && defined(__glibcxx_want_to_chars) */ +#undef __glibcxx_want_to_chars + +#if !defined(__cpp_lib_chrono_udls) +# if (__cplusplus >= 201402L) +# define __glibcxx_chrono_udls 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono_udls) +# define __cpp_lib_chrono_udls 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_chrono_udls) && defined(__glibcxx_want_chrono_udls) */ +#undef __glibcxx_want_chrono_udls + +#if !defined(__cpp_lib_complex_udls) +# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED +# define __glibcxx_complex_udls 201309L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_complex_udls) +# define __cpp_lib_complex_udls 201309L +# endif +# endif +#endif /* !defined(__cpp_lib_complex_udls) && defined(__glibcxx_want_complex_udls) */ +#undef __glibcxx_want_complex_udls + +#if !defined(__cpp_lib_generic_associative_lookup) +# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED +# define __glibcxx_generic_associative_lookup 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generic_associative_lookup) +# define __cpp_lib_generic_associative_lookup 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_generic_associative_lookup) && defined(__glibcxx_want_generic_associative_lookup) */ +#undef __glibcxx_want_generic_associative_lookup + +#if !defined(__cpp_lib_make_unique) +# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED +# define __glibcxx_make_unique 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_unique) +# define __cpp_lib_make_unique 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_make_unique) && defined(__glibcxx_want_make_unique) */ +#undef __glibcxx_want_make_unique + +#if !defined(__cpp_lib_quoted_string_io) +# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED +# define __glibcxx_quoted_string_io 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_quoted_string_io) +# define __cpp_lib_quoted_string_io 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_quoted_string_io) && defined(__glibcxx_want_quoted_string_io) */ +#undef __glibcxx_want_quoted_string_io + +#if !defined(__cpp_lib_shared_timed_mutex) +# if (__cplusplus >= 201402L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED +# define __glibcxx_shared_timed_mutex 201402L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_timed_mutex) +# define __cpp_lib_shared_timed_mutex 201402L +# endif +# endif +#endif /* !defined(__cpp_lib_shared_timed_mutex) && defined(__glibcxx_want_shared_timed_mutex) */ +#undef __glibcxx_want_shared_timed_mutex + +#if !defined(__cpp_lib_string_udls) +# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED +# define __glibcxx_string_udls 201304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_udls) +# define __cpp_lib_string_udls 201304L +# endif +# endif +#endif /* !defined(__cpp_lib_string_udls) && defined(__glibcxx_want_string_udls) */ +#undef __glibcxx_want_string_udls + +#if !defined(__cpp_lib_addressof_constexpr) +# if (__cplusplus >= 201703L) +# define __glibcxx_addressof_constexpr 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_addressof_constexpr) +# define __cpp_lib_addressof_constexpr 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_addressof_constexpr) && defined(__glibcxx_want_addressof_constexpr) */ +#undef __glibcxx_want_addressof_constexpr + +#if !defined(__cpp_lib_any) +# if (__cplusplus >= 201703L) +# define __glibcxx_any 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_any) +# define __cpp_lib_any 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_any) && defined(__glibcxx_want_any) */ +#undef __glibcxx_want_any + +#if !defined(__cpp_lib_apply) +# if (__cplusplus >= 201703L) +# define __glibcxx_apply 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_apply) +# define __cpp_lib_apply 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_apply) && defined(__glibcxx_want_apply) */ +#undef __glibcxx_want_apply + +#if !defined(__cpp_lib_as_const) +# if (__cplusplus >= 201703L) +# define __glibcxx_as_const 201510L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_as_const) +# define __cpp_lib_as_const 201510L +# endif +# endif +#endif /* !defined(__cpp_lib_as_const) && defined(__glibcxx_want_as_const) */ +#undef __glibcxx_want_as_const + +#if !defined(__cpp_lib_atomic_is_always_lock_free) +# if (__cplusplus >= 201703L) +# define __glibcxx_atomic_is_always_lock_free 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_is_always_lock_free) +# define __cpp_lib_atomic_is_always_lock_free 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_atomic_is_always_lock_free) && defined(__glibcxx_want_atomic_is_always_lock_free) */ +#undef __glibcxx_want_atomic_is_always_lock_free + +#if !defined(__cpp_lib_bool_constant) +# if (__cplusplus >= 201703L) +# define __glibcxx_bool_constant 201505L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bool_constant) +# define __cpp_lib_bool_constant 201505L +# endif +# endif +#endif /* !defined(__cpp_lib_bool_constant) && defined(__glibcxx_want_bool_constant) */ +#undef __glibcxx_want_bool_constant + +#if !defined(__cpp_lib_byte) +# if (__cplusplus >= 201703L) +# define __glibcxx_byte 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_byte) +# define __cpp_lib_byte 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_byte) && defined(__glibcxx_want_byte) */ +#undef __glibcxx_want_byte + +#if !defined(__cpp_lib_has_unique_object_representations) +# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP)) +# define __glibcxx_has_unique_object_representations 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_has_unique_object_representations) +# define __cpp_lib_has_unique_object_representations 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_has_unique_object_representations) && defined(__glibcxx_want_has_unique_object_representations) */ +#undef __glibcxx_want_has_unique_object_representations + +#if !defined(__cpp_lib_hardware_interference_size) +# if (__cplusplus >= 201703L) && (defined(__GCC_DESTRUCTIVE_SIZE)) +# define __glibcxx_hardware_interference_size 201703L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hardware_interference_size) +# define __cpp_lib_hardware_interference_size 201703L +# endif +# endif +#endif /* !defined(__cpp_lib_hardware_interference_size) && defined(__glibcxx_want_hardware_interference_size) */ +#undef __glibcxx_want_hardware_interference_size + +#if !defined(__cpp_lib_invoke) +# if (__cplusplus >= 201703L) +# define __glibcxx_invoke 201411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke) +# define __cpp_lib_invoke 201411L +# endif +# endif +#endif /* !defined(__cpp_lib_invoke) && defined(__glibcxx_want_invoke) */ +#undef __glibcxx_want_invoke + +#if !defined(__cpp_lib_is_aggregate) +# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE)) +# define __glibcxx_is_aggregate 201703L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_aggregate) +# define __cpp_lib_is_aggregate 201703L +# endif +# endif +#endif /* !defined(__cpp_lib_is_aggregate) && defined(__glibcxx_want_is_aggregate) */ +#undef __glibcxx_want_is_aggregate + +#if !defined(__cpp_lib_is_invocable) +# if (__cplusplus >= 201703L) +# define __glibcxx_is_invocable 201703L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_invocable) +# define __cpp_lib_is_invocable 201703L +# endif +# endif +#endif /* !defined(__cpp_lib_is_invocable) && defined(__glibcxx_want_is_invocable) */ +#undef __glibcxx_want_is_invocable + +#if !defined(__cpp_lib_launder) +# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_LAUNDER)) +# define __glibcxx_launder 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_launder) +# define __cpp_lib_launder 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_launder) && defined(__glibcxx_want_launder) */ +#undef __glibcxx_want_launder + +#if !defined(__cpp_lib_logical_traits) +# if (__cplusplus >= 201703L) +# define __glibcxx_logical_traits 201510L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_logical_traits) +# define __cpp_lib_logical_traits 201510L +# endif +# endif +#endif /* !defined(__cpp_lib_logical_traits) && defined(__glibcxx_want_logical_traits) */ +#undef __glibcxx_want_logical_traits + +#if !defined(__cpp_lib_make_from_tuple) +# if (__cplusplus >= 201703L) +# define __glibcxx_make_from_tuple 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_from_tuple) +# define __cpp_lib_make_from_tuple 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_make_from_tuple) && defined(__glibcxx_want_make_from_tuple) */ +#undef __glibcxx_want_make_from_tuple + +#if !defined(__cpp_lib_not_fn) +# if (__cplusplus >= 201703L) +# define __glibcxx_not_fn 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_not_fn) +# define __cpp_lib_not_fn 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_not_fn) && defined(__glibcxx_want_not_fn) */ +#undef __glibcxx_want_not_fn + +#if !defined(__cpp_lib_type_trait_variable_templates) +# if (__cplusplus >= 201703L) +# define __glibcxx_type_trait_variable_templates 201510L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_trait_variable_templates) +# define __cpp_lib_type_trait_variable_templates 201510L +# endif +# endif +#endif /* !defined(__cpp_lib_type_trait_variable_templates) && defined(__glibcxx_want_type_trait_variable_templates) */ +#undef __glibcxx_want_type_trait_variable_templates + +#if !defined(__cpp_lib_variant) +# if (__cplusplus > 202302L) && (__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L && __cpp_explicit_this_parameter) +# define __glibcxx_variant 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant) +# define __cpp_lib_variant 202306L +# endif +# elif (__cplusplus >= 202002L) && (__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L) +# define __glibcxx_variant 202106L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant) +# define __cpp_lib_variant 202106L +# endif +# elif (__cplusplus >= 201703L) +# define __glibcxx_variant 202102L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant) +# define __cpp_lib_variant 202102L +# endif +# endif +#endif /* !defined(__cpp_lib_variant) && defined(__glibcxx_want_variant) */ +#undef __glibcxx_want_variant + +#if !defined(__cpp_lib_lcm) +# if (__cplusplus >= 201703L) +# define __glibcxx_lcm 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_lcm) +# define __cpp_lib_lcm 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_lcm) && defined(__glibcxx_want_lcm) */ +#undef __glibcxx_want_lcm + +#if !defined(__cpp_lib_gcd) +# if (__cplusplus >= 201703L) +# define __glibcxx_gcd 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd) +# define __cpp_lib_gcd 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_gcd) && defined(__glibcxx_want_gcd) */ +#undef __glibcxx_want_gcd + +#if !defined(__cpp_lib_gcd_lcm) +# if (__cplusplus >= 201703L) +# define __glibcxx_gcd_lcm 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd_lcm) +# define __cpp_lib_gcd_lcm 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_gcd_lcm) && defined(__glibcxx_want_gcd_lcm) */ +#undef __glibcxx_want_gcd_lcm + +#if !defined(__cpp_lib_raw_memory_algorithms) +# if (__cplusplus > 202302L) && (__cpp_constexpr >= 202406L) +# define __glibcxx_raw_memory_algorithms 202411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_raw_memory_algorithms) +# define __cpp_lib_raw_memory_algorithms 202411L +# endif +# elif (__cplusplus >= 201703L) +# define __glibcxx_raw_memory_algorithms 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_raw_memory_algorithms) +# define __cpp_lib_raw_memory_algorithms 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_raw_memory_algorithms) && defined(__glibcxx_want_raw_memory_algorithms) */ +#undef __glibcxx_want_raw_memory_algorithms + +#if !defined(__cpp_lib_array_constexpr) +# if (__cplusplus >= 202002L) +# define __glibcxx_array_constexpr 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr) +# define __cpp_lib_array_constexpr 201811L +# endif +# elif (__cplusplus >= 201703L) +# define __glibcxx_array_constexpr 201803L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr) +# define __cpp_lib_array_constexpr 201803L +# endif +# endif +#endif /* !defined(__cpp_lib_array_constexpr) && defined(__glibcxx_want_array_constexpr) */ +#undef __glibcxx_want_array_constexpr + +#if !defined(__cpp_lib_nonmember_container_access) +# if (__cplusplus >= 201703L) +# define __glibcxx_nonmember_container_access 201411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_nonmember_container_access) +# define __cpp_lib_nonmember_container_access 201411L +# endif +# endif +#endif /* !defined(__cpp_lib_nonmember_container_access) && defined(__glibcxx_want_nonmember_container_access) */ +#undef __glibcxx_want_nonmember_container_access + +#if !defined(__cpp_lib_clamp) +# if (__cplusplus >= 201703L) +# define __glibcxx_clamp 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_clamp) +# define __cpp_lib_clamp 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_clamp) && defined(__glibcxx_want_clamp) */ +#undef __glibcxx_want_clamp + +#if !defined(__cpp_lib_sample) +# if (__cplusplus >= 201703L) +# define __glibcxx_sample 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_sample) +# define __cpp_lib_sample 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_sample) && defined(__glibcxx_want_sample) */ +#undef __glibcxx_want_sample + +#if !defined(__cpp_lib_boyer_moore_searcher) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_boyer_moore_searcher 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_boyer_moore_searcher) +# define __cpp_lib_boyer_moore_searcher 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_boyer_moore_searcher) && defined(__glibcxx_want_boyer_moore_searcher) */ +#undef __glibcxx_want_boyer_moore_searcher + +#if !defined(__cpp_lib_chrono) +# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED +# define __glibcxx_chrono 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono) +# define __cpp_lib_chrono 201907L +# endif +# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_chrono 201611L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono) +# define __cpp_lib_chrono 201611L +# endif +# endif +#endif /* !defined(__cpp_lib_chrono) && defined(__glibcxx_want_chrono) */ +#undef __glibcxx_want_chrono + +#if !defined(__cpp_lib_execution) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_execution 201902L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_execution) +# define __cpp_lib_execution 201902L +# endif +# endif +#endif /* !defined(__cpp_lib_execution) && defined(__glibcxx_want_execution) */ +#undef __glibcxx_want_execution + +#if !defined(__cpp_lib_filesystem) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_filesystem 201703L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_filesystem) +# define __cpp_lib_filesystem 201703L +# endif +# endif +#endif /* !defined(__cpp_lib_filesystem) && defined(__glibcxx_want_filesystem) */ +#undef __glibcxx_want_filesystem + +#if !defined(__cpp_lib_hypot) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_hypot 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hypot) +# define __cpp_lib_hypot 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_hypot) && defined(__glibcxx_want_hypot) */ +#undef __glibcxx_want_hypot + +#if !defined(__cpp_lib_map_try_emplace) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_map_try_emplace 201411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_map_try_emplace) +# define __cpp_lib_map_try_emplace 201411L +# endif +# endif +#endif /* !defined(__cpp_lib_map_try_emplace) && defined(__glibcxx_want_map_try_emplace) */ +#undef __glibcxx_want_map_try_emplace + +#if !defined(__cpp_lib_math_special_functions) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_math_special_functions 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_special_functions) +# define __cpp_lib_math_special_functions 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_math_special_functions) && defined(__glibcxx_want_math_special_functions) */ +#undef __glibcxx_want_math_special_functions + +#if !defined(__cpp_lib_memory_resource) +# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED +# define __glibcxx_memory_resource 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource) +# define __cpp_lib_memory_resource 201603L +# endif +# elif (__cplusplus >= 201703L) && !defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED +# define __glibcxx_memory_resource 1L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource) +# define __cpp_lib_memory_resource 1L +# endif +# endif +#endif /* !defined(__cpp_lib_memory_resource) && defined(__glibcxx_want_memory_resource) */ +#undef __glibcxx_want_memory_resource + +#if !defined(__cpp_lib_node_extract) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_node_extract 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_node_extract) +# define __cpp_lib_node_extract 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_node_extract) && defined(__glibcxx_want_node_extract) */ +#undef __glibcxx_want_node_extract + +#if !defined(__cpp_lib_parallel_algorithm) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_parallel_algorithm 201603L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_parallel_algorithm) +# define __cpp_lib_parallel_algorithm 201603L +# endif +# endif +#endif /* !defined(__cpp_lib_parallel_algorithm) && defined(__glibcxx_want_parallel_algorithm) */ +#undef __glibcxx_want_parallel_algorithm + +#if !defined(__cpp_lib_scoped_lock) +# if (__cplusplus >= 201703L) +# define __glibcxx_scoped_lock 201703L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_scoped_lock) +# define __cpp_lib_scoped_lock 201703L +# endif +# endif +#endif /* !defined(__cpp_lib_scoped_lock) && defined(__glibcxx_want_scoped_lock) */ +#undef __glibcxx_want_scoped_lock + +#if !defined(__cpp_lib_shared_mutex) +# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED +# define __glibcxx_shared_mutex 201505L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_mutex) +# define __cpp_lib_shared_mutex 201505L +# endif +# endif +#endif /* !defined(__cpp_lib_shared_mutex) && defined(__glibcxx_want_shared_mutex) */ +#undef __glibcxx_want_shared_mutex + +#if !defined(__cpp_lib_shared_ptr_weak_type) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_shared_ptr_weak_type 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_weak_type) +# define __cpp_lib_shared_ptr_weak_type 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_shared_ptr_weak_type) && defined(__glibcxx_want_shared_ptr_weak_type) */ +#undef __glibcxx_want_shared_ptr_weak_type + +#if !defined(__cpp_lib_string_view) +# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED +# define __glibcxx_string_view 202403L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_view) +# define __cpp_lib_string_view 202403L +# endif +# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_string_view 201803L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_view) +# define __cpp_lib_string_view 201803L +# endif +# endif +#endif /* !defined(__cpp_lib_string_view) && defined(__glibcxx_want_string_view) */ +#undef __glibcxx_want_string_view + +#if !defined(__cpp_lib_unordered_map_try_emplace) +# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED +# define __glibcxx_unordered_map_try_emplace 201411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unordered_map_try_emplace) +# define __cpp_lib_unordered_map_try_emplace 201411L +# endif +# endif +#endif /* !defined(__cpp_lib_unordered_map_try_emplace) && defined(__glibcxx_want_unordered_map_try_emplace) */ +#undef __glibcxx_want_unordered_map_try_emplace + +#if !defined(__cpp_lib_assume_aligned) +# if (__cplusplus >= 202002L) +# define __glibcxx_assume_aligned 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_assume_aligned) +# define __cpp_lib_assume_aligned 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_assume_aligned) && defined(__glibcxx_want_assume_aligned) */ +#undef __glibcxx_want_assume_aligned + +#if !defined(__cpp_lib_atomic_flag_test) +# if (__cplusplus >= 202002L) +# define __glibcxx_atomic_flag_test 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_flag_test) +# define __cpp_lib_atomic_flag_test 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_atomic_flag_test) && defined(__glibcxx_want_atomic_flag_test) */ +#undef __glibcxx_want_atomic_flag_test + +#if !defined(__cpp_lib_atomic_float) +# if (__cplusplus >= 202002L) +# define __glibcxx_atomic_float 201711L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_float) +# define __cpp_lib_atomic_float 201711L +# endif +# endif +#endif /* !defined(__cpp_lib_atomic_float) && defined(__glibcxx_want_atomic_float) */ +#undef __glibcxx_want_atomic_float + +#if !defined(__cpp_lib_atomic_lock_free_type_aliases) +# if (__cplusplus >= 202002L) && ((__GCC_ATOMIC_INT_LOCK_FREE | __GCC_ATOMIC_LONG_LOCK_FREE | __GCC_ATOMIC_CHAR_LOCK_FREE) & 2) +# define __glibcxx_atomic_lock_free_type_aliases 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_lock_free_type_aliases) +# define __cpp_lib_atomic_lock_free_type_aliases 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_atomic_lock_free_type_aliases) && defined(__glibcxx_want_atomic_lock_free_type_aliases) */ +#undef __glibcxx_want_atomic_lock_free_type_aliases + +#if !defined(__cpp_lib_atomic_ref) +# if (__cplusplus >= 202002L) +# define __glibcxx_atomic_ref 201806L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_ref) +# define __cpp_lib_atomic_ref 201806L +# endif +# endif +#endif /* !defined(__cpp_lib_atomic_ref) && defined(__glibcxx_want_atomic_ref) */ +#undef __glibcxx_want_atomic_ref + +#if !defined(__cpp_lib_atomic_value_initialization) +# if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L) +# define __glibcxx_atomic_value_initialization 201911L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_value_initialization) +# define __cpp_lib_atomic_value_initialization 201911L +# endif +# endif +#endif /* !defined(__cpp_lib_atomic_value_initialization) && defined(__glibcxx_want_atomic_value_initialization) */ +#undef __glibcxx_want_atomic_value_initialization + +#if !defined(__cpp_lib_bind_front) +# if (__cplusplus >= 202002L) +# define __glibcxx_bind_front 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_front) +# define __cpp_lib_bind_front 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_bind_front) && defined(__glibcxx_want_bind_front) */ +#undef __glibcxx_want_bind_front + +#if !defined(__cpp_lib_bind_back) +# if (__cplusplus >= 202100L) && (__cpp_explicit_this_parameter) +# define __glibcxx_bind_back 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back) +# define __cpp_lib_bind_back 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_bind_back) && defined(__glibcxx_want_bind_back) */ +#undef __glibcxx_want_bind_back + +#if !defined(__cpp_lib_starts_ends_with) +# if (__cplusplus >= 202002L) +# define __glibcxx_starts_ends_with 201711L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_starts_ends_with) +# define __cpp_lib_starts_ends_with 201711L +# endif +# endif +#endif /* !defined(__cpp_lib_starts_ends_with) && defined(__glibcxx_want_starts_ends_with) */ +#undef __glibcxx_want_starts_ends_with + +#if !defined(__cpp_lib_bit_cast) +# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_bit_cast)) +# define __glibcxx_bit_cast 201806L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bit_cast) +# define __cpp_lib_bit_cast 201806L +# endif +# endif +#endif /* !defined(__cpp_lib_bit_cast) && defined(__glibcxx_want_bit_cast) */ +#undef __glibcxx_want_bit_cast + +#if !defined(__cpp_lib_bitops) +# if (__cplusplus >= 202002L) +# define __glibcxx_bitops 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bitops) +# define __cpp_lib_bitops 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_bitops) && defined(__glibcxx_want_bitops) */ +#undef __glibcxx_want_bitops + +#if !defined(__cpp_lib_bounded_array_traits) +# if (__cplusplus >= 202002L) +# define __glibcxx_bounded_array_traits 201902L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bounded_array_traits) +# define __cpp_lib_bounded_array_traits 201902L +# endif +# endif +#endif /* !defined(__cpp_lib_bounded_array_traits) && defined(__glibcxx_want_bounded_array_traits) */ +#undef __glibcxx_want_bounded_array_traits + +#if !defined(__cpp_lib_concepts) +# if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L) +# define __glibcxx_concepts 202002L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_concepts) +# define __cpp_lib_concepts 202002L +# endif +# endif +#endif /* !defined(__cpp_lib_concepts) && defined(__glibcxx_want_concepts) */ +#undef __glibcxx_want_concepts + +#if !defined(__cpp_lib_optional) +# if (__cplusplus >= 202100L) && (__glibcxx_concepts) +# define __glibcxx_optional 202110L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional) +# define __cpp_lib_optional 202110L +# endif +# elif (__cplusplus >= 202002L) +# define __glibcxx_optional 202106L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional) +# define __cpp_lib_optional 202106L +# endif +# elif (__cplusplus >= 201703L) +# define __glibcxx_optional 201606L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional) +# define __cpp_lib_optional 201606L +# endif +# endif +#endif /* !defined(__cpp_lib_optional) && defined(__glibcxx_want_optional) */ +#undef __glibcxx_want_optional + +#if !defined(__cpp_lib_destroying_delete) +# if (__cplusplus >= 202002L) && (__cpp_impl_destroying_delete) +# define __glibcxx_destroying_delete 201806L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_destroying_delete) +# define __cpp_lib_destroying_delete 201806L +# endif +# endif +#endif /* !defined(__cpp_lib_destroying_delete) && defined(__glibcxx_want_destroying_delete) */ +#undef __glibcxx_want_destroying_delete + +#if !defined(__cpp_lib_constexpr_string_view) +# if (__cplusplus >= 202002L) +# define __glibcxx_constexpr_string_view 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string_view) +# define __cpp_lib_constexpr_string_view 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_string_view) && defined(__glibcxx_want_constexpr_string_view) */ +#undef __glibcxx_want_constexpr_string_view + +#if !defined(__cpp_lib_endian) +# if (__cplusplus >= 202002L) +# define __glibcxx_endian 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_endian) +# define __cpp_lib_endian 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_endian) && defined(__glibcxx_want_endian) */ +#undef __glibcxx_want_endian + +#if !defined(__cpp_lib_int_pow2) +# if (__cplusplus >= 202002L) +# define __glibcxx_int_pow2 202002L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_int_pow2) +# define __cpp_lib_int_pow2 202002L +# endif +# endif +#endif /* !defined(__cpp_lib_int_pow2) && defined(__glibcxx_want_int_pow2) */ +#undef __glibcxx_want_int_pow2 + +#if !defined(__cpp_lib_integer_comparison_functions) +# if (__cplusplus >= 202002L) +# define __glibcxx_integer_comparison_functions 202002L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integer_comparison_functions) +# define __cpp_lib_integer_comparison_functions 202002L +# endif +# endif +#endif /* !defined(__cpp_lib_integer_comparison_functions) && defined(__glibcxx_want_integer_comparison_functions) */ +#undef __glibcxx_want_integer_comparison_functions + +#if !defined(__cpp_lib_is_constant_evaluated) +# if (__cplusplus >= 202002L) && (defined(_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED)) +# define __glibcxx_is_constant_evaluated 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_constant_evaluated) +# define __cpp_lib_is_constant_evaluated 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_is_constant_evaluated) && defined(__glibcxx_want_is_constant_evaluated) */ +#undef __glibcxx_want_is_constant_evaluated + +#if !defined(__cpp_lib_constexpr_char_traits) +# if (__cplusplus >= 202002L) && (defined(__glibcxx_is_constant_evaluated)) +# define __glibcxx_constexpr_char_traits 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_char_traits) +# define __cpp_lib_constexpr_char_traits 201811L +# endif +# elif (__cplusplus >= 201703L) && (_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED) +# define __glibcxx_constexpr_char_traits 201611L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_char_traits) +# define __cpp_lib_constexpr_char_traits 201611L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_char_traits) && defined(__glibcxx_want_constexpr_char_traits) */ +#undef __glibcxx_want_constexpr_char_traits + +#if !defined(__cpp_lib_is_layout_compatible) +# if (__cplusplus >= 202002L) && (__has_builtin(__is_layout_compatible) && __has_builtin(__builtin_is_corresponding_member)) +# define __glibcxx_is_layout_compatible 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_layout_compatible) +# define __cpp_lib_is_layout_compatible 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_is_layout_compatible) && defined(__glibcxx_want_is_layout_compatible) */ +#undef __glibcxx_want_is_layout_compatible + +#if !defined(__cpp_lib_is_nothrow_convertible) +# if (__cplusplus >= 202002L) +# define __glibcxx_is_nothrow_convertible 201806L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_nothrow_convertible) +# define __cpp_lib_is_nothrow_convertible 201806L +# endif +# endif +#endif /* !defined(__cpp_lib_is_nothrow_convertible) && defined(__glibcxx_want_is_nothrow_convertible) */ +#undef __glibcxx_want_is_nothrow_convertible + +#if !defined(__cpp_lib_is_pointer_interconvertible) +# if (__cplusplus >= 202002L) && (__has_builtin(__is_pointer_interconvertible_base_of) && __has_builtin(__builtin_is_pointer_interconvertible_with_class)) +# define __glibcxx_is_pointer_interconvertible 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_pointer_interconvertible) +# define __cpp_lib_is_pointer_interconvertible 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_is_pointer_interconvertible) && defined(__glibcxx_want_is_pointer_interconvertible) */ +#undef __glibcxx_want_is_pointer_interconvertible + +#if !defined(__cpp_lib_math_constants) +# if (__cplusplus >= 202002L) +# define __glibcxx_math_constants 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_constants) +# define __cpp_lib_math_constants 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_math_constants) && defined(__glibcxx_want_math_constants) */ +#undef __glibcxx_want_math_constants + +#if !defined(__cpp_lib_make_obj_using_allocator) +# if (__cplusplus >= 202002L) && (__cpp_concepts) +# define __glibcxx_make_obj_using_allocator 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_obj_using_allocator) +# define __cpp_lib_make_obj_using_allocator 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_make_obj_using_allocator) && defined(__glibcxx_want_make_obj_using_allocator) */ +#undef __glibcxx_want_make_obj_using_allocator + +#if !defined(__cpp_lib_remove_cvref) +# if (__cplusplus >= 202002L) +# define __glibcxx_remove_cvref 201711L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_remove_cvref) +# define __cpp_lib_remove_cvref 201711L +# endif +# endif +#endif /* !defined(__cpp_lib_remove_cvref) && defined(__glibcxx_want_remove_cvref) */ +#undef __glibcxx_want_remove_cvref + +#if !defined(__cpp_lib_source_location) +# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_source_location)) +# define __glibcxx_source_location 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_source_location) +# define __cpp_lib_source_location 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_source_location) && defined(__glibcxx_want_source_location) */ +#undef __glibcxx_want_source_location + +#if !defined(__cpp_lib_span) +# if (__cplusplus > 202302L) && (__glibcxx_concepts) +# define __glibcxx_span 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span) +# define __cpp_lib_span 202311L +# endif +# elif (__cplusplus >= 202002L) && (__glibcxx_concepts) +# define __glibcxx_span 202002L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span) +# define __cpp_lib_span 202002L +# endif +# endif +#endif /* !defined(__cpp_lib_span) && defined(__glibcxx_want_span) */ +#undef __glibcxx_want_span + +#if !defined(__cpp_lib_ssize) +# if (__cplusplus >= 202002L) +# define __glibcxx_ssize 201902L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ssize) +# define __cpp_lib_ssize 201902L +# endif +# endif +#endif /* !defined(__cpp_lib_ssize) && defined(__glibcxx_want_ssize) */ +#undef __glibcxx_want_ssize + +#if !defined(__cpp_lib_three_way_comparison) +# if (__cplusplus >= 202002L) && (__cpp_impl_three_way_comparison >= 201907L && __glibcxx_concepts) +# define __glibcxx_three_way_comparison 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_three_way_comparison) +# define __cpp_lib_three_way_comparison 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_three_way_comparison) && defined(__glibcxx_want_three_way_comparison) */ +#undef __glibcxx_want_three_way_comparison + +#if !defined(__cpp_lib_to_address) +# if (__cplusplus >= 202002L) +# define __glibcxx_to_address 201711L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_address) +# define __cpp_lib_to_address 201711L +# endif +# endif +#endif /* !defined(__cpp_lib_to_address) && defined(__glibcxx_want_to_address) */ +#undef __glibcxx_want_to_address + +#if !defined(__cpp_lib_to_array) +# if (__cplusplus >= 202002L) && (__cpp_generic_lambdas >= 201707L) +# define __glibcxx_to_array 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_array) +# define __cpp_lib_to_array 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_to_array) && defined(__glibcxx_want_to_array) */ +#undef __glibcxx_want_to_array + +#if !defined(__cpp_lib_type_identity) +# if (__cplusplus >= 202002L) +# define __glibcxx_type_identity 201806L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_identity) +# define __cpp_lib_type_identity 201806L +# endif +# endif +#endif /* !defined(__cpp_lib_type_identity) && defined(__glibcxx_want_type_identity) */ +#undef __glibcxx_want_type_identity + +#if !defined(__cpp_lib_unwrap_ref) +# if (__cplusplus >= 202002L) +# define __glibcxx_unwrap_ref 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unwrap_ref) +# define __cpp_lib_unwrap_ref 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_unwrap_ref) && defined(__glibcxx_want_unwrap_ref) */ +#undef __glibcxx_want_unwrap_ref + +#if !defined(__cpp_lib_constexpr_iterator) +# if (__cplusplus >= 202002L) +# define __glibcxx_constexpr_iterator 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_iterator) +# define __cpp_lib_constexpr_iterator 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_iterator) && defined(__glibcxx_want_constexpr_iterator) */ +#undef __glibcxx_want_constexpr_iterator + +#if !defined(__cpp_lib_interpolate) +# if (__cplusplus >= 202002L) +# define __glibcxx_interpolate 201902L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_interpolate) +# define __cpp_lib_interpolate 201902L +# endif +# endif +#endif /* !defined(__cpp_lib_interpolate) && defined(__glibcxx_want_interpolate) */ +#undef __glibcxx_want_interpolate + +#if !defined(__cpp_lib_constexpr_utility) +# if (__cplusplus >= 202002L) +# define __glibcxx_constexpr_utility 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_utility) +# define __cpp_lib_constexpr_utility 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_utility) && defined(__glibcxx_want_constexpr_utility) */ +#undef __glibcxx_want_constexpr_utility + +#if !defined(__cpp_lib_shift) +# if (__cplusplus >= 202002L) +# define __glibcxx_shift 201806L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift) +# define __cpp_lib_shift 201806L +# endif +# endif +#endif /* !defined(__cpp_lib_shift) && defined(__glibcxx_want_shift) */ +#undef __glibcxx_want_shift + +#if !defined(__cpp_lib_ranges) +# if (__cplusplus > 202302L) && (__glibcxx_concepts) +# define __glibcxx_ranges 202406L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges) +# define __cpp_lib_ranges 202406L +# endif +# elif (__cplusplus >= 202100L) && (__glibcxx_concepts) +# define __glibcxx_ranges 202302L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges) +# define __cpp_lib_ranges 202302L +# endif +# elif (__cplusplus >= 202002L) && (__glibcxx_concepts) +# define __glibcxx_ranges 202110L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges) +# define __cpp_lib_ranges 202110L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges) && defined(__glibcxx_want_ranges) */ +#undef __glibcxx_want_ranges + +#if !defined(__cpp_lib_constexpr_numeric) +# if (__cplusplus >= 202002L) +# define __glibcxx_constexpr_numeric 201911L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_numeric) +# define __cpp_lib_constexpr_numeric 201911L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_numeric) && defined(__glibcxx_want_constexpr_numeric) */ +#undef __glibcxx_want_constexpr_numeric + +#if !defined(__cpp_lib_constexpr_functional) +# if (__cplusplus >= 202002L) +# define __glibcxx_constexpr_functional 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_functional) +# define __cpp_lib_constexpr_functional 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_functional) && defined(__glibcxx_want_constexpr_functional) */ +#undef __glibcxx_want_constexpr_functional + +#if !defined(__cpp_lib_constexpr_algorithms) +# if (__cplusplus > 202302L) +# define __glibcxx_constexpr_algorithms 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_algorithms) +# define __cpp_lib_constexpr_algorithms 202306L +# endif +# elif (__cplusplus >= 202002L) +# define __glibcxx_constexpr_algorithms 201806L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_algorithms) +# define __cpp_lib_constexpr_algorithms 201806L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_algorithms) && defined(__glibcxx_want_constexpr_algorithms) */ +#undef __glibcxx_want_constexpr_algorithms + +#if !defined(__cpp_lib_constexpr_tuple) +# if (__cplusplus >= 202002L) +# define __glibcxx_constexpr_tuple 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_tuple) +# define __cpp_lib_constexpr_tuple 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_tuple) && defined(__glibcxx_want_constexpr_tuple) */ +#undef __glibcxx_want_constexpr_tuple + +#if !defined(__cpp_lib_constexpr_memory) +# if (__cplusplus >= 202100L) && (__cpp_constexpr_dynamic_alloc) +# define __glibcxx_constexpr_memory 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory) +# define __cpp_lib_constexpr_memory 202202L +# endif +# elif (__cplusplus >= 202002L) +# define __glibcxx_constexpr_memory 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory) +# define __cpp_lib_constexpr_memory 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_memory) && defined(__glibcxx_want_constexpr_memory) */ +#undef __glibcxx_want_constexpr_memory + +#if !defined(__cpp_lib_atomic_shared_ptr) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_atomic_shared_ptr 201711L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_shared_ptr) +# define __cpp_lib_atomic_shared_ptr 201711L +# endif +# endif +#endif /* !defined(__cpp_lib_atomic_shared_ptr) && defined(__glibcxx_want_atomic_shared_ptr) */ +#undef __glibcxx_want_atomic_shared_ptr + +#if !defined(__cpp_lib_atomic_wait) +# if (__cplusplus >= 202002L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED +# define __glibcxx_atomic_wait 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait) +# define __cpp_lib_atomic_wait 201907L +# endif +# elif (__cplusplus >= 202002L) && !defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED && (defined(_GLIBCXX_HAVE_LINUX_FUTEX)) +# define __glibcxx_atomic_wait 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait) +# define __cpp_lib_atomic_wait 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_atomic_wait) && defined(__glibcxx_want_atomic_wait) */ +#undef __glibcxx_want_atomic_wait + +#if !defined(__cpp_lib_barrier) +# if (__cplusplus >= 202002L) && (__cpp_aligned_new && __glibcxx_atomic_wait) +# define __glibcxx_barrier 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_barrier) +# define __cpp_lib_barrier 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_barrier) && defined(__glibcxx_want_barrier) */ +#undef __glibcxx_want_barrier + +#if !defined(__cpp_lib_format) +# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED +# define __glibcxx_format 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format) +# define __cpp_lib_format 202311L +# endif +# elif (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_format 202304L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format) +# define __cpp_lib_format 202304L +# endif +# endif +#endif /* !defined(__cpp_lib_format) && defined(__glibcxx_want_format) */ +#undef __glibcxx_want_format + +#if !defined(__cpp_lib_format_uchar) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_format_uchar 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_uchar) +# define __cpp_lib_format_uchar 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_format_uchar) && defined(__glibcxx_want_format_uchar) */ +#undef __glibcxx_want_format_uchar + +#if !defined(__cpp_lib_constexpr_complex) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_constexpr_complex 201711L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_complex) +# define __cpp_lib_constexpr_complex 201711L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_complex) && defined(__glibcxx_want_constexpr_complex) */ +#undef __glibcxx_want_constexpr_complex + +#if !defined(__cpp_lib_constexpr_dynamic_alloc) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_constexpr_dynamic_alloc 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_dynamic_alloc) +# define __cpp_lib_constexpr_dynamic_alloc 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) && defined(__glibcxx_want_constexpr_dynamic_alloc) */ +#undef __glibcxx_want_constexpr_dynamic_alloc + +#if !defined(__cpp_lib_constexpr_string) +# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated)) +# define __glibcxx_constexpr_string 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string) +# define __cpp_lib_constexpr_string 201907L +# endif +# elif (__cplusplus >= 202002L) && !_GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated)) +# define __glibcxx_constexpr_string 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string) +# define __cpp_lib_constexpr_string 201811L +# endif +# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED) +# define __glibcxx_constexpr_string 201611L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string) +# define __cpp_lib_constexpr_string 201611L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_string) && defined(__glibcxx_want_constexpr_string) */ +#undef __glibcxx_want_constexpr_string + +#if !defined(__cpp_lib_constexpr_vector) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_constexpr_vector 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_vector) +# define __cpp_lib_constexpr_vector 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_vector) && defined(__glibcxx_want_constexpr_vector) */ +#undef __glibcxx_want_constexpr_vector + +#if !defined(__cpp_lib_constrained_equality) +# if (__cplusplus >= 202100L) && (__glibcxx_three_way_comparison) +# define __glibcxx_constrained_equality 202411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constrained_equality) +# define __cpp_lib_constrained_equality 202411L +# endif +# elif (__cplusplus >= 202002L) && (__glibcxx_three_way_comparison) +# define __glibcxx_constrained_equality 202403L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constrained_equality) +# define __cpp_lib_constrained_equality 202403L +# endif +# endif +#endif /* !defined(__cpp_lib_constrained_equality) && defined(__glibcxx_want_constrained_equality) */ +#undef __glibcxx_want_constrained_equality + +#if !defined(__cpp_lib_erase_if) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_erase_if 202002L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_erase_if) +# define __cpp_lib_erase_if 202002L +# endif +# endif +#endif /* !defined(__cpp_lib_erase_if) && defined(__glibcxx_want_erase_if) */ +#undef __glibcxx_want_erase_if + +#if !defined(__cpp_lib_generic_unordered_lookup) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_generic_unordered_lookup 201811L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generic_unordered_lookup) +# define __cpp_lib_generic_unordered_lookup 201811L +# endif +# endif +#endif /* !defined(__cpp_lib_generic_unordered_lookup) && defined(__glibcxx_want_generic_unordered_lookup) */ +#undef __glibcxx_want_generic_unordered_lookup + +#if !defined(__cpp_lib_jthread) +# if (__cplusplus >= 202002L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED +# define __glibcxx_jthread 201911L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_jthread) +# define __cpp_lib_jthread 201911L +# endif +# endif +#endif /* !defined(__cpp_lib_jthread) && defined(__glibcxx_want_jthread) */ +#undef __glibcxx_want_jthread + +#if !defined(__cpp_lib_latch) +# if (__cplusplus >= 202002L) && (__glibcxx_atomic_wait) +# define __glibcxx_latch 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_latch) +# define __cpp_lib_latch 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_latch) && defined(__glibcxx_want_latch) */ +#undef __glibcxx_want_latch + +#if !defined(__cpp_lib_list_remove_return_type) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_list_remove_return_type 201806L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_list_remove_return_type) +# define __cpp_lib_list_remove_return_type 201806L +# endif +# endif +#endif /* !defined(__cpp_lib_list_remove_return_type) && defined(__glibcxx_want_list_remove_return_type) */ +#undef __glibcxx_want_list_remove_return_type + +#if !defined(__cpp_lib_polymorphic_allocator) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_polymorphic_allocator 201902L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_polymorphic_allocator) +# define __cpp_lib_polymorphic_allocator 201902L +# endif +# endif +#endif /* !defined(__cpp_lib_polymorphic_allocator) && defined(__glibcxx_want_polymorphic_allocator) */ +#undef __glibcxx_want_polymorphic_allocator + +#if !defined(__cpp_lib_move_iterator_concept) +# if (__cplusplus >= 202002L) && (__glibcxx_concepts) +# define __glibcxx_move_iterator_concept 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_move_iterator_concept) +# define __cpp_lib_move_iterator_concept 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_move_iterator_concept) && defined(__glibcxx_want_move_iterator_concept) */ +#undef __glibcxx_want_move_iterator_concept + +#if !defined(__cpp_lib_semaphore) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED && (__glibcxx_atomic_wait || _GLIBCXX_HAVE_POSIX_SEMAPHORE) +# define __glibcxx_semaphore 201907L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_semaphore) +# define __cpp_lib_semaphore 201907L +# endif +# endif +#endif /* !defined(__cpp_lib_semaphore) && defined(__glibcxx_want_semaphore) */ +#undef __glibcxx_want_semaphore + +#if !defined(__cpp_lib_smart_ptr_for_overwrite) +# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# define __glibcxx_smart_ptr_for_overwrite 202002L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_smart_ptr_for_overwrite) +# define __cpp_lib_smart_ptr_for_overwrite 202002L +# endif +# endif +#endif /* !defined(__cpp_lib_smart_ptr_for_overwrite) && defined(__glibcxx_want_smart_ptr_for_overwrite) */ +#undef __glibcxx_want_smart_ptr_for_overwrite + +#if !defined(__cpp_lib_syncbuf) +# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED +# define __glibcxx_syncbuf 201803L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_syncbuf) +# define __cpp_lib_syncbuf 201803L +# endif +# endif +#endif /* !defined(__cpp_lib_syncbuf) && defined(__glibcxx_want_syncbuf) */ +#undef __glibcxx_want_syncbuf + +#if !defined(__cpp_lib_byteswap) +# if (__cplusplus >= 202100L) +# define __glibcxx_byteswap 202110L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_byteswap) +# define __cpp_lib_byteswap 202110L +# endif +# endif +#endif /* !defined(__cpp_lib_byteswap) && defined(__glibcxx_want_byteswap) */ +#undef __glibcxx_want_byteswap + +#if !defined(__cpp_lib_constexpr_charconv) +# if (__cplusplus >= 202100L) +# define __glibcxx_constexpr_charconv 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_charconv) +# define __cpp_lib_constexpr_charconv 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_charconv) && defined(__glibcxx_want_constexpr_charconv) */ +#undef __glibcxx_want_constexpr_charconv + +#if !defined(__cpp_lib_constexpr_typeinfo) +# if (__cplusplus >= 202100L) +# define __glibcxx_constexpr_typeinfo 202106L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_typeinfo) +# define __cpp_lib_constexpr_typeinfo 202106L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_typeinfo) && defined(__glibcxx_want_constexpr_typeinfo) */ +#undef __glibcxx_want_constexpr_typeinfo + +#if !defined(__cpp_lib_expected) +# if (__cplusplus >= 202100L) && (__cpp_concepts >= 202002L) +# define __glibcxx_expected 202211L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_expected) +# define __cpp_lib_expected 202211L +# endif +# endif +#endif /* !defined(__cpp_lib_expected) && defined(__glibcxx_want_expected) */ +#undef __glibcxx_want_expected + +#if !defined(__cpp_lib_format_ranges) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_format_ranges 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_ranges) +# define __cpp_lib_format_ranges 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_format_ranges) && defined(__glibcxx_want_format_ranges) */ +#undef __glibcxx_want_format_ranges + +#if !defined(__cpp_lib_freestanding_algorithm) +# if (__cplusplus >= 202100L) +# define __glibcxx_freestanding_algorithm 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_algorithm) +# define __cpp_lib_freestanding_algorithm 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_freestanding_algorithm) && defined(__glibcxx_want_freestanding_algorithm) */ +#undef __glibcxx_want_freestanding_algorithm + +#if !defined(__cpp_lib_freestanding_array) +# if (__cplusplus >= 202100L) +# define __glibcxx_freestanding_array 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_array) +# define __cpp_lib_freestanding_array 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_freestanding_array) && defined(__glibcxx_want_freestanding_array) */ +#undef __glibcxx_want_freestanding_array + +#if !defined(__cpp_lib_freestanding_cstring) +# if (__cplusplus >= 202100L) +# define __glibcxx_freestanding_cstring 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_cstring) +# define __cpp_lib_freestanding_cstring 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_freestanding_cstring) && defined(__glibcxx_want_freestanding_cstring) */ +#undef __glibcxx_want_freestanding_cstring + +#if !defined(__cpp_lib_freestanding_expected) +# if (__cplusplus >= 202100L) && (__cpp_lib_expected) +# define __glibcxx_freestanding_expected 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_expected) +# define __cpp_lib_freestanding_expected 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_freestanding_expected) && defined(__glibcxx_want_freestanding_expected) */ +#undef __glibcxx_want_freestanding_expected + +#if !defined(__cpp_lib_freestanding_optional) +# if (__cplusplus >= 202100L) +# define __glibcxx_freestanding_optional 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_optional) +# define __cpp_lib_freestanding_optional 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_freestanding_optional) && defined(__glibcxx_want_freestanding_optional) */ +#undef __glibcxx_want_freestanding_optional + +#if !defined(__cpp_lib_freestanding_string_view) +# if (__cplusplus >= 202100L) +# define __glibcxx_freestanding_string_view 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_string_view) +# define __cpp_lib_freestanding_string_view 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_freestanding_string_view) && defined(__glibcxx_want_freestanding_string_view) */ +#undef __glibcxx_want_freestanding_string_view + +#if !defined(__cpp_lib_freestanding_variant) +# if (__cplusplus >= 202100L) +# define __glibcxx_freestanding_variant 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_variant) +# define __cpp_lib_freestanding_variant 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_freestanding_variant) && defined(__glibcxx_want_freestanding_variant) */ +#undef __glibcxx_want_freestanding_variant + +#if !defined(__cpp_lib_invoke_r) +# if (__cplusplus >= 202100L) +# define __glibcxx_invoke_r 202106L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke_r) +# define __cpp_lib_invoke_r 202106L +# endif +# endif +#endif /* !defined(__cpp_lib_invoke_r) && defined(__glibcxx_want_invoke_r) */ +#undef __glibcxx_want_invoke_r + +#if !defined(__cpp_lib_is_scoped_enum) +# if (__cplusplus >= 202100L) +# define __glibcxx_is_scoped_enum 202011L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_scoped_enum) +# define __cpp_lib_is_scoped_enum 202011L +# endif +# endif +#endif /* !defined(__cpp_lib_is_scoped_enum) && defined(__glibcxx_want_is_scoped_enum) */ +#undef __glibcxx_want_is_scoped_enum + +#if !defined(__cpp_lib_reference_from_temporary) +# if (__cplusplus >= 202100L) && (__has_builtin(__reference_constructs_from_temporary) && __has_builtin(__reference_converts_from_temporary)) +# define __glibcxx_reference_from_temporary 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_reference_from_temporary) +# define __cpp_lib_reference_from_temporary 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_reference_from_temporary) && defined(__glibcxx_want_reference_from_temporary) */ +#undef __glibcxx_want_reference_from_temporary + +#if !defined(__cpp_lib_containers_ranges) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_containers_ranges 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_containers_ranges) +# define __cpp_lib_containers_ranges 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_containers_ranges) && defined(__glibcxx_want_containers_ranges) */ +#undef __glibcxx_want_containers_ranges + +#if !defined(__cpp_lib_ranges_to_container) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_ranges_to_container 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_to_container) +# define __cpp_lib_ranges_to_container 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_to_container) && defined(__glibcxx_want_ranges_to_container) */ +#undef __glibcxx_want_ranges_to_container + +#if !defined(__cpp_lib_ranges_zip) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_zip 202110L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_zip) +# define __cpp_lib_ranges_zip 202110L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_zip) && defined(__glibcxx_want_ranges_zip) */ +#undef __glibcxx_want_ranges_zip + +#if !defined(__cpp_lib_ranges_chunk) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_chunk 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk) +# define __cpp_lib_ranges_chunk 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_chunk) && defined(__glibcxx_want_ranges_chunk) */ +#undef __glibcxx_want_ranges_chunk + +#if !defined(__cpp_lib_ranges_slide) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_slide 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_slide) +# define __cpp_lib_ranges_slide 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_slide) && defined(__glibcxx_want_ranges_slide) */ +#undef __glibcxx_want_ranges_slide + +#if !defined(__cpp_lib_ranges_chunk_by) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_chunk_by 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk_by) +# define __cpp_lib_ranges_chunk_by 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_chunk_by) && defined(__glibcxx_want_ranges_chunk_by) */ +#undef __glibcxx_want_ranges_chunk_by + +#if !defined(__cpp_lib_ranges_join_with) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_join_with 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_join_with) +# define __cpp_lib_ranges_join_with 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_join_with) && defined(__glibcxx_want_ranges_join_with) */ +#undef __glibcxx_want_ranges_join_with + +#if !defined(__cpp_lib_ranges_repeat) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_repeat 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_repeat) +# define __cpp_lib_ranges_repeat 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_repeat) && defined(__glibcxx_want_ranges_repeat) */ +#undef __glibcxx_want_ranges_repeat + +#if !defined(__cpp_lib_ranges_stride) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_stride 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_stride) +# define __cpp_lib_ranges_stride 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_stride) && defined(__glibcxx_want_ranges_stride) */ +#undef __glibcxx_want_ranges_stride + +#if !defined(__cpp_lib_ranges_cartesian_product) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_cartesian_product 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_cartesian_product) +# define __cpp_lib_ranges_cartesian_product 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_cartesian_product) && defined(__glibcxx_want_ranges_cartesian_product) */ +#undef __glibcxx_want_ranges_cartesian_product + +#if !defined(__cpp_lib_ranges_as_rvalue) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_as_rvalue 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_rvalue) +# define __cpp_lib_ranges_as_rvalue 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_as_rvalue) && defined(__glibcxx_want_ranges_as_rvalue) */ +#undef __glibcxx_want_ranges_as_rvalue + +#if !defined(__cpp_lib_ranges_as_const) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_as_const 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_const) +# define __cpp_lib_ranges_as_const 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_as_const) && defined(__glibcxx_want_ranges_as_const) */ +#undef __glibcxx_want_ranges_as_const + +#if !defined(__cpp_lib_ranges_enumerate) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_enumerate 202302L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_enumerate) +# define __cpp_lib_ranges_enumerate 202302L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_enumerate) && defined(__glibcxx_want_ranges_enumerate) */ +#undef __glibcxx_want_ranges_enumerate + +#if !defined(__cpp_lib_ranges_fold) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_fold 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_fold) +# define __cpp_lib_ranges_fold 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_fold) && defined(__glibcxx_want_ranges_fold) */ +#undef __glibcxx_want_ranges_fold + +#if !defined(__cpp_lib_ranges_contains) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_contains 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_contains) +# define __cpp_lib_ranges_contains 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_contains) && defined(__glibcxx_want_ranges_contains) */ +#undef __glibcxx_want_ranges_contains + +#if !defined(__cpp_lib_ranges_iota) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_iota 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_iota) +# define __cpp_lib_ranges_iota 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_iota) && defined(__glibcxx_want_ranges_iota) */ +#undef __glibcxx_want_ranges_iota + +#if !defined(__cpp_lib_ranges_find_last) +# if (__cplusplus >= 202100L) +# define __glibcxx_ranges_find_last 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_find_last) +# define __cpp_lib_ranges_find_last 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_find_last) && defined(__glibcxx_want_ranges_find_last) */ +#undef __glibcxx_want_ranges_find_last + +#if !defined(__cpp_lib_constexpr_bitset) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__cpp_constexpr_dynamic_alloc) +# define __glibcxx_constexpr_bitset 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_bitset) +# define __cpp_lib_constexpr_bitset 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_bitset) && defined(__glibcxx_want_constexpr_bitset) */ +#undef __glibcxx_want_constexpr_bitset + +#if !defined(__cpp_lib_stdatomic_h) +# if (__cplusplus >= 202100L) +# define __glibcxx_stdatomic_h 202011L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_stdatomic_h) +# define __cpp_lib_stdatomic_h 202011L +# endif +# endif +#endif /* !defined(__cpp_lib_stdatomic_h) && defined(__glibcxx_want_stdatomic_h) */ +#undef __glibcxx_want_stdatomic_h + +#if !defined(__cpp_lib_adaptor_iterator_pair_constructor) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_adaptor_iterator_pair_constructor 202106L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_adaptor_iterator_pair_constructor) +# define __cpp_lib_adaptor_iterator_pair_constructor 202106L +# endif +# endif +#endif /* !defined(__cpp_lib_adaptor_iterator_pair_constructor) && defined(__glibcxx_want_adaptor_iterator_pair_constructor) */ +#undef __glibcxx_want_adaptor_iterator_pair_constructor + +#if !defined(__cpp_lib_flat_map) +# if (__cplusplus >= 202100L) +# define __glibcxx_flat_map 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_flat_map) +# define __cpp_lib_flat_map 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_flat_map) && defined(__glibcxx_want_flat_map) */ +#undef __glibcxx_want_flat_map + +#if !defined(__cpp_lib_flat_set) +# if (__cplusplus >= 202100L) +# define __glibcxx_flat_set 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_flat_set) +# define __cpp_lib_flat_set 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_flat_set) && defined(__glibcxx_want_flat_set) */ +#undef __glibcxx_want_flat_set + +#if !defined(__cpp_lib_common_reference) +# if (__cplusplus >= 202002L) +# define __glibcxx_common_reference 202302L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_common_reference) +# define __cpp_lib_common_reference 202302L +# endif +# endif +#endif /* !defined(__cpp_lib_common_reference) && defined(__glibcxx_want_common_reference) */ +#undef __glibcxx_want_common_reference + +#if !defined(__cpp_lib_formatters) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_formatters 202302L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_formatters) +# define __cpp_lib_formatters 202302L +# endif +# endif +#endif /* !defined(__cpp_lib_formatters) && defined(__glibcxx_want_formatters) */ +#undef __glibcxx_want_formatters + +#if !defined(__cpp_lib_forward_like) +# if (__cplusplus >= 202100L) +# define __glibcxx_forward_like 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_forward_like) +# define __cpp_lib_forward_like 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_forward_like) && defined(__glibcxx_want_forward_like) */ +#undef __glibcxx_want_forward_like + +#if !defined(__cpp_lib_generator) +# if (__cplusplus >= 202100L) && (__glibcxx_coroutine && __cpp_sized_deallocation) +# define __glibcxx_generator 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generator) +# define __cpp_lib_generator 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_generator) && defined(__glibcxx_want_generator) */ +#undef __glibcxx_want_generator + +#if !defined(__cpp_lib_ios_noreplace) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_ios_noreplace 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ios_noreplace) +# define __cpp_lib_ios_noreplace 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_ios_noreplace) && defined(__glibcxx_want_ios_noreplace) */ +#undef __glibcxx_want_ios_noreplace + +#if !defined(__cpp_lib_move_only_function) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_move_only_function 202110L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_move_only_function) +# define __cpp_lib_move_only_function 202110L +# endif +# endif +#endif /* !defined(__cpp_lib_move_only_function) && defined(__glibcxx_want_move_only_function) */ +#undef __glibcxx_want_move_only_function + +#if !defined(__cpp_lib_out_ptr) +# if (__cplusplus >= 202100L) +# define __glibcxx_out_ptr 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_out_ptr) +# define __cpp_lib_out_ptr 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_out_ptr) && defined(__glibcxx_want_out_ptr) */ +#undef __glibcxx_want_out_ptr + +#if !defined(__cpp_lib_print) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_print 202211L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_print) +# define __cpp_lib_print 202211L +# endif +# endif +#endif /* !defined(__cpp_lib_print) && defined(__glibcxx_want_print) */ +#undef __glibcxx_want_print + +#if !defined(__cpp_lib_spanstream) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__glibcxx_span) +# define __glibcxx_spanstream 202106L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_spanstream) +# define __cpp_lib_spanstream 202106L +# endif +# endif +#endif /* !defined(__cpp_lib_spanstream) && defined(__glibcxx_want_spanstream) */ +#undef __glibcxx_want_spanstream + +#if !defined(__cpp_lib_stacktrace) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_STACKTRACE) +# define __glibcxx_stacktrace 202011L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_stacktrace) +# define __cpp_lib_stacktrace 202011L +# endif +# endif +#endif /* !defined(__cpp_lib_stacktrace) && defined(__glibcxx_want_stacktrace) */ +#undef __glibcxx_want_stacktrace + +#if !defined(__cpp_lib_string_contains) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_string_contains 202011L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_contains) +# define __cpp_lib_string_contains 202011L +# endif +# endif +#endif /* !defined(__cpp_lib_string_contains) && defined(__glibcxx_want_string_contains) */ +#undef __glibcxx_want_string_contains + +#if !defined(__cpp_lib_string_resize_and_overwrite) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_string_resize_and_overwrite 202110L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_resize_and_overwrite) +# define __cpp_lib_string_resize_and_overwrite 202110L +# endif +# endif +#endif /* !defined(__cpp_lib_string_resize_and_overwrite) && defined(__glibcxx_want_string_resize_and_overwrite) */ +#undef __glibcxx_want_string_resize_and_overwrite + +#if !defined(__cpp_lib_to_underlying) +# if (__cplusplus >= 202100L) +# define __glibcxx_to_underlying 202102L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_underlying) +# define __cpp_lib_to_underlying 202102L +# endif +# endif +#endif /* !defined(__cpp_lib_to_underlying) && defined(__glibcxx_want_to_underlying) */ +#undef __glibcxx_want_to_underlying + +#if !defined(__cpp_lib_tuple_like) +# if (__cplusplus > 202302L) && (__cpp_explicit_this_parameter >= 202110L) +# define __glibcxx_tuple_like 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like) +# define __cpp_lib_tuple_like 202311L +# endif +# elif (__cplusplus >= 202100L) +# define __glibcxx_tuple_like 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like) +# define __cpp_lib_tuple_like 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_tuple_like) && defined(__glibcxx_want_tuple_like) */ +#undef __glibcxx_want_tuple_like + +#if !defined(__cpp_lib_unreachable) +# if (__cplusplus >= 202100L) +# define __glibcxx_unreachable 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unreachable) +# define __cpp_lib_unreachable 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_unreachable) && defined(__glibcxx_want_unreachable) */ +#undef __glibcxx_want_unreachable + +#if !defined(__cpp_lib_algorithm_default_value_type) +# if (__cplusplus > 202302L) +# define __glibcxx_algorithm_default_value_type 202403L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_algorithm_default_value_type) +# define __cpp_lib_algorithm_default_value_type 202403L +# endif +# endif +#endif /* !defined(__cpp_lib_algorithm_default_value_type) && defined(__glibcxx_want_algorithm_default_value_type) */ +#undef __glibcxx_want_algorithm_default_value_type + +#if !defined(__cpp_lib_constexpr_new) +# if (__cplusplus > 202302L) && (__cpp_constexpr >= 202406L) +# define __glibcxx_constexpr_new 202406L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_new) +# define __cpp_lib_constexpr_new 202406L +# endif +# endif +#endif /* !defined(__cpp_lib_constexpr_new) && defined(__glibcxx_want_constexpr_new) */ +#undef __glibcxx_want_constexpr_new + +#if !defined(__cpp_lib_fstream_native_handle) +# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED +# define __glibcxx_fstream_native_handle 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_fstream_native_handle) +# define __cpp_lib_fstream_native_handle 202306L +# endif +# endif +#endif /* !defined(__cpp_lib_fstream_native_handle) && defined(__glibcxx_want_fstream_native_handle) */ +#undef __glibcxx_want_fstream_native_handle + +#if !defined(__cpp_lib_is_virtual_base_of) +# if (__cplusplus > 202302L) && (__has_builtin(__builtin_is_virtual_base_of)) +# define __glibcxx_is_virtual_base_of 202406L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_virtual_base_of) +# define __cpp_lib_is_virtual_base_of 202406L +# endif +# endif +#endif /* !defined(__cpp_lib_is_virtual_base_of) && defined(__glibcxx_want_is_virtual_base_of) */ +#undef __glibcxx_want_is_virtual_base_of + +#if !defined(__cpp_lib_ranges_cache_latest) +# if (__cplusplus > 202302L) +# define __glibcxx_ranges_cache_latest 202411L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_cache_latest) +# define __cpp_lib_ranges_cache_latest 202411L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_cache_latest) && defined(__glibcxx_want_ranges_cache_latest) */ +#undef __glibcxx_want_ranges_cache_latest + +#if !defined(__cpp_lib_ranges_concat) +# if (__cplusplus > 202302L) && (__cpp_pack_indexing) +# define __glibcxx_ranges_concat 202403L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_concat) +# define __cpp_lib_ranges_concat 202403L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_concat) && defined(__glibcxx_want_ranges_concat) */ +#undef __glibcxx_want_ranges_concat + +#if !defined(__cpp_lib_ratio) +# if (__cplusplus > 202302L) +# define __glibcxx_ratio 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ratio) +# define __cpp_lib_ratio 202306L +# endif +# endif +#endif /* !defined(__cpp_lib_ratio) && defined(__glibcxx_want_ratio) */ +#undef __glibcxx_want_ratio + +#if !defined(__cpp_lib_reference_wrapper) +# if (__cplusplus > 202302L) +# define __glibcxx_reference_wrapper 202403L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_reference_wrapper) +# define __cpp_lib_reference_wrapper 202403L +# endif +# endif +#endif /* !defined(__cpp_lib_reference_wrapper) && defined(__glibcxx_want_reference_wrapper) */ +#undef __glibcxx_want_reference_wrapper + +#if !defined(__cpp_lib_saturation_arithmetic) +# if (__cplusplus > 202302L) +# define __glibcxx_saturation_arithmetic 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_saturation_arithmetic) +# define __cpp_lib_saturation_arithmetic 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_saturation_arithmetic) && defined(__glibcxx_want_saturation_arithmetic) */ +#undef __glibcxx_want_saturation_arithmetic + +#if !defined(__cpp_lib_span_initializer_list) +# if (__cplusplus > 202302L) +# define __glibcxx_span_initializer_list 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span_initializer_list) +# define __cpp_lib_span_initializer_list 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_span_initializer_list) && defined(__glibcxx_want_span_initializer_list) */ +#undef __glibcxx_want_span_initializer_list + +#if !defined(__cpp_lib_text_encoding) +# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && (_GLIBCXX_USE_NL_LANGINFO_L) +# define __glibcxx_text_encoding 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_text_encoding) +# define __cpp_lib_text_encoding 202306L +# endif +# endif +#endif /* !defined(__cpp_lib_text_encoding) && defined(__glibcxx_want_text_encoding) */ +#undef __glibcxx_want_text_encoding + +#if !defined(__cpp_lib_ranges_to_input) +# if (__cplusplus > 202302L) +# define __glibcxx_ranges_to_input 202502L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_to_input) +# define __cpp_lib_ranges_to_input 202502L +# endif +# endif +#endif /* !defined(__cpp_lib_ranges_to_input) && defined(__glibcxx_want_ranges_to_input) */ +#undef __glibcxx_want_ranges_to_input + +#if !defined(__cpp_lib_to_string) +# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && (__glibcxx_to_chars) +# define __glibcxx_to_string 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_string) +# define __cpp_lib_to_string 202306L +# endif +# endif +#endif /* !defined(__cpp_lib_to_string) && defined(__glibcxx_want_to_string) */ +#undef __glibcxx_want_to_string + +#if !defined(__cpp_lib_modules) +# if (__cplusplus >= 202002L) && (__cpp_modules) +# define __glibcxx_modules 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_modules) +# define __cpp_lib_modules 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_modules) && defined(__glibcxx_want_modules) */ +#undef __glibcxx_want_modules + +#undef __glibcxx_want_all diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@version.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@version.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a00ae5c135503db9ef72a0ca8e54e0b004ce539f GIT binary patch literal 24204 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 blz7O>A}l6DC6V21$0YLC4s0@n1vMD}zK{bz literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cctype b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cctype new file mode 100644 index 0000000..d569bb4 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cctype @@ -0,0 +1,96 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/cctype + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c ctype.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: +// + +#ifndef _GLIBCXX_CCTYPE +#define _GLIBCXX_CCTYPE 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +// Get rid of those macros defined in in lieu of real functions. +#undef isalnum +#undef isalpha +#undef iscntrl +#undef isdigit +#undef isgraph +#undef islower +#undef isprint +#undef ispunct +#undef isspace +#undef isupper +#undef isxdigit +#undef tolower +#undef toupper + +namespace std +{ + using ::isalnum; + using ::isalpha; + using ::iscntrl; + using ::isdigit; + using ::isgraph; + using ::islower; + using ::isprint; + using ::ispunct; + using ::isspace; + using ::isupper; + using ::isxdigit; + using ::tolower; + using ::toupper; +} // namespace std + +#if __cplusplus >= 201103L + +#ifdef _GLIBCXX_USE_C99_CTYPE + +#undef isblank + +namespace std +{ + using ::isblank; +} // namespace std + +#endif // _GLIBCXX_USE_C99_CTYPE + +#endif // C++11 + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cctype.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cctype.blob new file mode 100644 index 0000000000000000000000000000000000000000..ea847869f111d1416ee29fd8e4966889adbecc03 GIT binary patch literal 13479 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. + +/** @file cerrno + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c errno.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: 19.3 Error numbers +// + +#ifndef _GLIBCXX_CERRNO +#define _GLIBCXX_CERRNO 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998 +#ifndef errno +#define errno errno +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cerrno.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cerrno.blob new file mode 100644 index 0000000000000000000000000000000000000000..dc4a1b636879f9cc1973280446e3899a60ef412f GIT binary patch literal 11522 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@clocale b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@clocale new file mode 100644 index 0000000..fd30f17 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@clocale @@ -0,0 +1,60 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file clocale + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c locale.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: 18.2.2 Implementation properties: C library +// + +#ifndef _GLIBCXX_CLOCALE +#define _GLIBCXX_CLOCALE 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +// Get rid of those macros defined in in lieu of real functions. +#undef setlocale +#undef localeconv + +namespace std +{ + using ::lconv; + using ::setlocale; + using ::localeconv; +} // namespace std + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@clocale.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@clocale.blob new file mode 100644 index 0000000000000000000000000000000000000000..d9e3766eabd204fa4bffb5644f4072d2e5379187 GIT binary patch literal 12701 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 Qs2ebWNE3$tj0_A600!Fqj{pDw literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@codecvt b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@codecvt new file mode 100644 index 0000000..20e54ef --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@codecvt @@ -0,0 +1,179 @@ +// -*- C++ -*- + +// Copyright (C) 2015-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// ISO C++ 14882: 22.5 Standard code conversion facets + +/** @file include/codecvt + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_CODECVT +#define _GLIBCXX_CODECVT 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus < 201103L +# include +#else + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + enum codecvt_mode + { + consume_header = 4, + generate_header = 2, + little_endian = 1 + }; + + template + class codecvt_utf8 : public codecvt<_Elem, char, mbstate_t> + { + public: + explicit + codecvt_utf8(size_t __refs = 0); + + ~codecvt_utf8(); + }; + + template + class codecvt_utf16 : public codecvt<_Elem, char, mbstate_t> + { + public: + explicit + codecvt_utf16(size_t __refs = 0); + + ~codecvt_utf16(); + }; + + template + class codecvt_utf8_utf16 : public codecvt<_Elem, char, mbstate_t> + { + public: + explicit + codecvt_utf8_utf16(size_t __refs = 0); + + ~codecvt_utf8_utf16(); + }; + +#define _GLIBCXX_CODECVT_SPECIALIZATION2(_NAME, _ELEM) \ + template<> \ + class _NAME<_ELEM> \ + : public codecvt<_ELEM, char, mbstate_t> \ + { \ + public: \ + typedef _ELEM intern_type; \ + typedef char extern_type; \ + typedef mbstate_t state_type; \ + \ + protected: \ + _NAME(unsigned long __maxcode, codecvt_mode __mode, size_t __refs) \ + : codecvt(__refs), _M_maxcode(__maxcode), _M_mode(__mode) { } \ + \ + virtual \ + ~_NAME(); \ + \ + virtual result \ + do_out(state_type& __state, const intern_type* __from, \ + const intern_type* __from_end, const intern_type*& __from_next, \ + extern_type* __to, extern_type* __to_end, \ + extern_type*& __to_next) const; \ + \ + virtual result \ + do_unshift(state_type& __state, \ + extern_type* __to, extern_type* __to_end, \ + extern_type*& __to_next) const; \ + \ + virtual result \ + do_in(state_type& __state, \ + const extern_type* __from, const extern_type* __from_end, \ + const extern_type*& __from_next, \ + intern_type* __to, intern_type* __to_end, \ + intern_type*& __to_next) const; \ + \ + virtual \ + int do_encoding() const throw(); \ + \ + virtual \ + bool do_always_noconv() const throw(); \ + \ + virtual \ + int do_length(state_type&, const extern_type* __from, \ + const extern_type* __end, size_t __max) const; \ + \ + virtual int \ + do_max_length() const throw(); \ + \ + private: \ + unsigned long _M_maxcode; \ + codecvt_mode _M_mode; \ + } + +#define _GLIBCXX_CODECVT_SPECIALIZATION(_NAME, _ELEM) \ + _GLIBCXX_CODECVT_SPECIALIZATION2(__ ## _NAME ## _base, _ELEM); \ + template \ + class _NAME<_ELEM, _Maxcode, _Mode> \ + : public __ ## _NAME ## _base<_ELEM> \ + { \ + public: \ + explicit \ + _NAME(size_t __refs = 0) \ + : __ ## _NAME ## _base<_ELEM>(std::min(_Maxcode, 0x10fffful), \ + _Mode, __refs) \ + { } \ + } + + template class __codecvt_utf8_base; + template class __codecvt_utf16_base; + template class __codecvt_utf8_utf16_base; + + _GLIBCXX_CODECVT_SPECIALIZATION(codecvt_utf8, char16_t); + _GLIBCXX_CODECVT_SPECIALIZATION(codecvt_utf16, char16_t); + _GLIBCXX_CODECVT_SPECIALIZATION(codecvt_utf8_utf16, char16_t); + + _GLIBCXX_CODECVT_SPECIALIZATION(codecvt_utf8, char32_t); + _GLIBCXX_CODECVT_SPECIALIZATION(codecvt_utf16, char32_t); + _GLIBCXX_CODECVT_SPECIALIZATION(codecvt_utf8_utf16, char32_t); + +#ifdef _GLIBCXX_USE_WCHAR_T + _GLIBCXX_CODECVT_SPECIALIZATION(codecvt_utf8, wchar_t); + _GLIBCXX_CODECVT_SPECIALIZATION(codecvt_utf16, wchar_t); + _GLIBCXX_CODECVT_SPECIALIZATION(codecvt_utf8_utf16, wchar_t); +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // C++11 + +#endif /* _GLIBCXX_CODECVT */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@codecvt.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@codecvt.blob new file mode 100644 index 0000000000000000000000000000000000000000..6ccf438b58f6662b10619b6c22ebf3e85b3dccf8 GIT binary patch literal 65811 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 -*- C++ -*- + +// Copyright (C) 2019-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/concepts + * This is a Standard C++ Library header. + * @ingroup concepts + */ + +#ifndef _GLIBCXX_CONCEPTS +#define _GLIBCXX_CONCEPTS 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#define __glibcxx_want_concepts +#include + +#ifdef __cpp_lib_concepts // C++ >= 20 && concepts +/** + * @defgroup concepts Concepts + * @ingroup utilities + * + * Concepts for checking type requirements. + */ + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // [concepts.lang], language-related concepts + + namespace __detail + { + template + concept __same_as = std::is_same_v<_Tp, _Up>; + } // namespace __detail + + /// [concept.same], concept same_as + template + concept same_as + = __detail::__same_as<_Tp, _Up> && __detail::__same_as<_Up, _Tp>; + + namespace __detail + { + template + concept __different_from + = !same_as, remove_cvref_t<_Up>>; + } // namespace __detail + + /// [concept.derived], concept derived_from + template + concept derived_from = __is_base_of(_Base, _Derived) + && is_convertible_v; + + /// [concept.convertible], concept convertible_to + template + concept convertible_to = is_convertible_v<_From, _To> + && requires { static_cast<_To>(std::declval<_From>()); }; + + /// [concept.commonref], concept common_reference_with + template + concept common_reference_with + = same_as, common_reference_t<_Up, _Tp>> + && convertible_to<_Tp, common_reference_t<_Tp, _Up>> + && convertible_to<_Up, common_reference_t<_Tp, _Up>>; + + /// [concept.common], concept common_with + template + concept common_with + = same_as, common_type_t<_Up, _Tp>> + && requires { + static_cast>(std::declval<_Tp>()); + static_cast>(std::declval<_Up>()); + } + && common_reference_with, + add_lvalue_reference_t> + && common_reference_with>, + common_reference_t< + add_lvalue_reference_t, + add_lvalue_reference_t>>; + + // [concepts.arithmetic], arithmetic concepts + + template + concept integral = is_integral_v<_Tp>; + + template + concept signed_integral = integral<_Tp> && is_signed_v<_Tp>; + + template + concept unsigned_integral = integral<_Tp> && !signed_integral<_Tp>; + + template + concept floating_point = is_floating_point_v<_Tp>; + + namespace __detail + { + template + using __cref = const remove_reference_t<_Tp>&; + + template + concept __class_or_enum + = is_class_v<_Tp> || is_union_v<_Tp> || is_enum_v<_Tp>; + + template + constexpr bool __destructible_impl = false; + template + requires requires(_Tp& __t) { { __t.~_Tp() } noexcept; } + constexpr bool __destructible_impl<_Tp> = true; + + template + constexpr bool __destructible = __destructible_impl<_Tp>; + template + constexpr bool __destructible<_Tp&> = true; + template + constexpr bool __destructible<_Tp&&> = true; + template + constexpr bool __destructible<_Tp[_Nm]> = __destructible<_Tp>; + + } // namespace __detail + + /// [concept.assignable], concept assignable_from + template + concept assignable_from + = is_lvalue_reference_v<_Lhs> + && common_reference_with<__detail::__cref<_Lhs>, __detail::__cref<_Rhs>> + && requires(_Lhs __lhs, _Rhs&& __rhs) { + { __lhs = static_cast<_Rhs&&>(__rhs) } -> same_as<_Lhs>; + }; + + /// [concept.destructible], concept destructible + template + concept destructible = __detail::__destructible<_Tp>; + + /// [concept.constructible], concept constructible_from + template + concept constructible_from + = destructible<_Tp> && is_constructible_v<_Tp, _Args...>; + + /// [concept.defaultinitializable], concept default_initializable + template + concept default_initializable = constructible_from<_Tp> + && requires + { + _Tp{}; + (void) ::new _Tp; + }; + + /// [concept.moveconstructible], concept move_constructible + template + concept move_constructible + = constructible_from<_Tp, _Tp> && convertible_to<_Tp, _Tp>; + + /// [concept.copyconstructible], concept copy_constructible + template + concept copy_constructible + = move_constructible<_Tp> + && constructible_from<_Tp, _Tp&> && convertible_to<_Tp&, _Tp> + && constructible_from<_Tp, const _Tp&> && convertible_to + && constructible_from<_Tp, const _Tp> && convertible_to; + + // [concept.swappable], concept swappable + + namespace ranges + { + /// @cond undocumented + namespace __swap + { + template void swap(_Tp&, _Tp&) = delete; + + template + concept __adl_swap + = (std::__detail::__class_or_enum> + || std::__detail::__class_or_enum>) + && requires(_Tp&& __t, _Up&& __u) { + swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); + }; + + struct _Swap + { + private: + template + static constexpr bool + _S_noexcept() + { + if constexpr (__adl_swap<_Tp, _Up>) + return noexcept(swap(std::declval<_Tp>(), std::declval<_Up>())); + else + return is_nothrow_move_constructible_v> + && is_nothrow_move_assignable_v>; + } + + public: + template + requires __adl_swap<_Tp, _Up> + || (same_as<_Tp, _Up> && is_lvalue_reference_v<_Tp> + && move_constructible> + && assignable_from<_Tp, remove_reference_t<_Tp>>) + constexpr void + operator()(_Tp&& __t, _Up&& __u) const + noexcept(_S_noexcept<_Tp, _Up>()) + { + if constexpr (__adl_swap<_Tp, _Up>) + swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); + else + { + auto __tmp = static_cast&&>(__t); + __t = static_cast&&>(__u); + __u = static_cast&&>(__tmp); + } + } + + template + requires requires(const _Swap& __swap, _Tp& __e1, _Up& __e2) { + __swap(__e1, __e2); + } + constexpr void + operator()(_Tp (&__e1)[_Num], _Up (&__e2)[_Num]) const + noexcept(noexcept(std::declval()(*__e1, *__e2))) + { + for (size_t __n = 0; __n < _Num; ++__n) + (*this)(__e1[__n], __e2[__n]); + } + }; + } // namespace __swap + /// @endcond + + inline namespace _Cpo { + inline constexpr __swap::_Swap swap{}; + } + } // namespace ranges + + template + concept swappable + = requires(_Tp& __a, _Tp& __b) { ranges::swap(__a, __b); }; + + template + concept swappable_with = common_reference_with<_Tp, _Up> + && requires(_Tp&& __t, _Up&& __u) { + ranges::swap(static_cast<_Tp&&>(__t), static_cast<_Tp&&>(__t)); + ranges::swap(static_cast<_Up&&>(__u), static_cast<_Up&&>(__u)); + ranges::swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); + ranges::swap(static_cast<_Up&&>(__u), static_cast<_Tp&&>(__t)); + }; + + // [concepts.object], Object concepts + + template + concept movable = is_object_v<_Tp> && move_constructible<_Tp> + && assignable_from<_Tp&, _Tp> && swappable<_Tp>; + + template + concept copyable = copy_constructible<_Tp> && movable<_Tp> + && assignable_from<_Tp&, _Tp&> && assignable_from<_Tp&, const _Tp&> + && assignable_from<_Tp&, const _Tp>; + + template + concept semiregular = copyable<_Tp> && default_initializable<_Tp>; + + // [concepts.compare], comparison concepts + + // [concept.booleantestable], Boolean testability + namespace __detail + { + template + concept __boolean_testable_impl = convertible_to<_Tp, bool>; + + template + concept __boolean_testable + = __boolean_testable_impl<_Tp> + && requires(_Tp&& __t) + { { !static_cast<_Tp&&>(__t) } -> __boolean_testable_impl; }; + } // namespace __detail + + // [concept.equalitycomparable], concept equality_comparable + + namespace __detail + { + template + concept __weakly_eq_cmp_with + = requires(__detail::__cref<_Tp> __t, __detail::__cref<_Up> __u) { + { __t == __u } -> __boolean_testable; + { __t != __u } -> __boolean_testable; + { __u == __t } -> __boolean_testable; + { __u != __t } -> __boolean_testable; + }; + } // namespace __detail + + template + concept equality_comparable = __detail::__weakly_eq_cmp_with<_Tp, _Tp>; + + template + concept equality_comparable_with + = equality_comparable<_Tp> && equality_comparable<_Up> + && common_reference_with<__detail::__cref<_Tp>, __detail::__cref<_Up>> + && equality_comparable, + __detail::__cref<_Up>>> + && __detail::__weakly_eq_cmp_with<_Tp, _Up>; + + namespace __detail + { + template + concept __partially_ordered_with + = requires(const remove_reference_t<_Tp>& __t, + const remove_reference_t<_Up>& __u) { + { __t < __u } -> __boolean_testable; + { __t > __u } -> __boolean_testable; + { __t <= __u } -> __boolean_testable; + { __t >= __u } -> __boolean_testable; + { __u < __t } -> __boolean_testable; + { __u > __t } -> __boolean_testable; + { __u <= __t } -> __boolean_testable; + { __u >= __t } -> __boolean_testable; + }; + } // namespace __detail + + // [concept.totallyordered], concept totally_ordered + template + concept totally_ordered + = equality_comparable<_Tp> + && __detail::__partially_ordered_with<_Tp, _Tp>; + + template + concept totally_ordered_with + = totally_ordered<_Tp> && totally_ordered<_Up> + && equality_comparable_with<_Tp, _Up> + && totally_ordered, + __detail::__cref<_Up>>> + && __detail::__partially_ordered_with<_Tp, _Up>; + + template + concept regular = semiregular<_Tp> && equality_comparable<_Tp>; + + // [concepts.callable], callable concepts + + /// [concept.invocable], concept invocable + template + concept invocable = is_invocable_v<_Fn, _Args...>; + + /// [concept.regularinvocable], concept regular_invocable + template + concept regular_invocable = invocable<_Fn, _Args...>; + + /// [concept.predicate], concept predicate + template + concept predicate = regular_invocable<_Fn, _Args...> + && __detail::__boolean_testable>; + + /// [concept.relation], concept relation + template + concept relation + = predicate<_Rel, _Tp, _Tp> && predicate<_Rel, _Up, _Up> + && predicate<_Rel, _Tp, _Up> && predicate<_Rel, _Up, _Tp>; + + /// [concept.equiv], concept equivalence_relation + template + concept equivalence_relation = relation<_Rel, _Tp, _Up>; + + /// [concept.strictweakorder], concept strict_weak_order + template + concept strict_weak_order = relation<_Rel, _Tp, _Up>; + + namespace __detail + { + // operator<=> are automatically reversed, so we need to consider + // both directions if types are different. + template + concept __not_overloaded_spaceship + = ! requires(_Tp&& __t, _Up&& __u) + { operator<=>(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); } + && ! requires(_Tp&& __t, _Up&& __u) + { static_cast<_Tp&&>(__t).operator<=>(static_cast<_Up&&>(__u)); } + && (is_same_v<_Tp, _Up> + || (! requires(_Tp&& __t, _Up&& __u) + { operator<=>(static_cast<_Up&&>(__u), static_cast<_Tp&&>(__t)); } + && ! requires(_Tp&& __t, _Up&& __u) + { static_cast<_Up&&>(__u).operator<=>(static_cast<_Tp&&>(__t)); })); + } +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +#endif // __cpp_lib_concepts + +#endif /* _GLIBCXX_CONCEPTS */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@concepts.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@concepts.blob new file mode 100644 index 0000000000000000000000000000000000000000..c9dbd745f4bb7069e8d5a7b5214a7b1e03f5b864 GIT binary patch literal 11568 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 dLV_6>7?j}Vp-U. + +/** @file cstddef + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c stddef.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: 18.1 Types +// + +#ifndef _GLIBCXX_CSTDDEF +#define _GLIBCXX_CSTDDEF 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#undef __need_wchar_t +#undef __need_ptrdiff_t +#undef __need_size_t +#undef __need_NULL +#undef __need_wint_t +#include +#include + +#define __glibcxx_want_byte +#include + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" // __int128 + +extern "C++" +{ +#if __cplusplus >= 201103L +namespace std +{ + // We handle size_t, ptrdiff_t, and nullptr_t in c++config.h. + using ::max_align_t; +} +#endif // C++11 + +#ifdef __cpp_lib_byte // C++ >= 17 +namespace std +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + /// std::byte + enum class byte : unsigned char {}; + + template struct __byte_operand { }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; +#ifdef _GLIBCXX_USE_CHAR8_T + template<> struct __byte_operand { using __type = byte; }; +#endif + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; +#if defined(__GLIBCXX_TYPE_INT_N_0) + template<> struct __byte_operand<__GLIBCXX_TYPE_INT_N_0> + { using __type = byte; }; + template<> struct __byte_operand + { using __type = byte; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + template<> struct __byte_operand<__GLIBCXX_TYPE_INT_N_1> + { using __type = byte; }; + template<> struct __byte_operand + { using __type = byte; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + template<> struct __byte_operand<__GLIBCXX_TYPE_INT_N_2> + { using __type = byte; }; + template<> struct __byte_operand + { using __type = byte; }; +#endif + template + struct __byte_operand + : __byte_operand<_IntegerType> { }; + template + struct __byte_operand + : __byte_operand<_IntegerType> { }; + template + struct __byte_operand + : __byte_operand<_IntegerType> { }; + + template + using __byte_op_t = typename __byte_operand<_IntegerType>::__type; + + template + [[__gnu__::__always_inline__]] + constexpr __byte_op_t<_IntegerType> + operator<<(byte __b, _IntegerType __shift) noexcept + { return (byte)(unsigned char)((unsigned)__b << __shift); } + + template + [[__gnu__::__always_inline__]] + constexpr __byte_op_t<_IntegerType> + operator>>(byte __b, _IntegerType __shift) noexcept + { return (byte)(unsigned char)((unsigned)__b >> __shift); } + + [[__gnu__::__always_inline__]] + constexpr byte + operator|(byte __l, byte __r) noexcept + { return (byte)(unsigned char)((unsigned)__l | (unsigned)__r); } + + [[__gnu__::__always_inline__]] + constexpr byte + operator&(byte __l, byte __r) noexcept + { return (byte)(unsigned char)((unsigned)__l & (unsigned)__r); } + + [[__gnu__::__always_inline__]] + constexpr byte + operator^(byte __l, byte __r) noexcept + { return (byte)(unsigned char)((unsigned)__l ^ (unsigned)__r); } + + [[__gnu__::__always_inline__]] + constexpr byte + operator~(byte __b) noexcept + { return (byte)(unsigned char)~(unsigned)__b; } + + template + [[__gnu__::__always_inline__]] + constexpr __byte_op_t<_IntegerType>& + operator<<=(byte& __b, _IntegerType __shift) noexcept + { return __b = __b << __shift; } + + template + [[__gnu__::__always_inline__]] + constexpr __byte_op_t<_IntegerType>& + operator>>=(byte& __b, _IntegerType __shift) noexcept + { return __b = __b >> __shift; } + + [[__gnu__::__always_inline__]] + constexpr byte& + operator|=(byte& __l, byte __r) noexcept + { return __l = __l | __r; } + + [[__gnu__::__always_inline__]] + constexpr byte& + operator&=(byte& __l, byte __r) noexcept + { return __l = __l & __r; } + + [[__gnu__::__always_inline__]] + constexpr byte& + operator^=(byte& __l, byte __r) noexcept + { return __l = __l ^ __r; } + + template + [[nodiscard,__gnu__::__always_inline__]] + constexpr _IntegerType + to_integer(__byte_op_t<_IntegerType> __b) noexcept + { return _IntegerType(__b); } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // __cpp_lib_byte +} // extern "C++" + +#pragma GCC diagnostic pop + +#endif // _GLIBCXX_CSTDDEF diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstddef.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstddef.blob new file mode 100644 index 0000000000000000000000000000000000000000..adcd49946dd94f9fd05063cfc2f55cfe7e53d677 GIT binary patch literal 21568 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 -*- C++ -*- + +// Copyright (C) 2007-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/cstdint + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_CSTDINT +#define _GLIBCXX_CSTDINT 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus < 201103L +# include +#else + +#include + +#if ! _GLIBCXX_HOSTED && __has_include() +// For --disable-hosted-libstdcxx we want GCC's own stdint-gcc.h header +// even when -ffreestanding isn't used. +# include +#elif __has_include() +# include +#endif + +namespace std +{ +#ifdef _GLIBCXX_USE_C99_STDINT + using ::int8_t; + using ::int16_t; + using ::int32_t; + using ::int64_t; + + using ::int_fast8_t; + using ::int_fast16_t; + using ::int_fast32_t; + using ::int_fast64_t; + + using ::int_least8_t; + using ::int_least16_t; + using ::int_least32_t; + using ::int_least64_t; + + using ::intmax_t; + using ::intptr_t; + + using ::uint8_t; + using ::uint16_t; + using ::uint32_t; + using ::uint64_t; + + using ::uint_fast8_t; + using ::uint_fast16_t; + using ::uint_fast32_t; + using ::uint_fast64_t; + + using ::uint_least8_t; + using ::uint_least16_t; + using ::uint_least32_t; + using ::uint_least64_t; + + using ::uintmax_t; + using ::uintptr_t; +#else // !_GLIBCXX_USE_C99_STDINT + + using intmax_t = __INTMAX_TYPE__; + using uintmax_t = __UINTMAX_TYPE__; + +#ifdef __INT8_TYPE__ + using int8_t = __INT8_TYPE__; +#endif +#ifdef __INT16_TYPE__ + using int16_t = __INT16_TYPE__; +#endif +#ifdef __INT32_TYPE__ + using int32_t = __INT32_TYPE__; +#endif +#ifdef __INT64_TYPE__ + using int64_t = __INT64_TYPE__; +#endif + + using int_least8_t = __INT_LEAST8_TYPE__; + using int_least16_t = __INT_LEAST16_TYPE__; + using int_least32_t = __INT_LEAST32_TYPE__; + using int_least64_t = __INT_LEAST64_TYPE__; + using int_fast8_t = __INT_FAST8_TYPE__; + using int_fast16_t = __INT_FAST16_TYPE__; + using int_fast32_t = __INT_FAST32_TYPE__; + using int_fast64_t = __INT_FAST64_TYPE__; + +#ifdef __INTPTR_TYPE__ + using intptr_t = __INTPTR_TYPE__; +#endif + +#ifdef __UINT8_TYPE__ + using uint8_t = __UINT8_TYPE__; +#endif +#ifdef __UINT16_TYPE__ + using uint16_t = __UINT16_TYPE__; +#endif +#ifdef __UINT32_TYPE__ + using uint32_t = __UINT32_TYPE__; +#endif +#ifdef __UINT64_TYPE__ + using uint64_t = __UINT64_TYPE__; +#endif + using uint_least8_t = __UINT_LEAST8_TYPE__; + using uint_least16_t = __UINT_LEAST16_TYPE__; + using uint_least32_t = __UINT_LEAST32_TYPE__; + using uint_least64_t = __UINT_LEAST64_TYPE__; + using uint_fast8_t = __UINT_FAST8_TYPE__; + using uint_fast16_t = __UINT_FAST16_TYPE__; + using uint_fast32_t = __UINT_FAST32_TYPE__; + using uint_fast64_t = __UINT_FAST64_TYPE__; +#ifdef __UINTPTR_TYPE__ + using uintptr_t = __UINTPTR_TYPE__; +#endif + +#endif // _GLIBCXX_USE_C99_STDINT +} // namespace std + +#endif // C++11 + +#endif // _GLIBCXX_CSTDINT diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdint.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdint.blob new file mode 100644 index 0000000000000000000000000000000000000000..85508d5fb02755b6398b1cb39aa7c000164da112 GIT binary patch literal 14994 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. + +/** @file include/cstdio + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c stdio.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: 27.8.2 C Library files +// + +#ifndef _GLIBCXX_CSTDIO +#define _GLIBCXX_CSTDIO 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +#if __cplusplus <= 201103L && !defined(_GLIBCXX_HAVE_GETS) +extern "C" char* gets (char* __s) __attribute__((__deprecated__)); +#endif + +// Get rid of those macros defined in in lieu of real functions. +#undef clearerr +#undef fclose +#undef feof +#undef ferror +#undef fflush +#undef fgetc +#undef fgetpos +#undef fgets +#undef fopen +#undef fprintf +#undef fputc +#undef fputs +#undef fread +#undef freopen +#undef fscanf +#undef fseek +#undef fsetpos +#undef ftell +#undef fwrite +#undef getc +#undef getchar +#if __cplusplus <= 201103L +# undef gets +#endif +#undef perror +#undef printf +#undef putc +#undef putchar +#undef puts +#undef remove +#undef rename +#undef rewind +#undef scanf +#undef setbuf +#undef setvbuf +#undef sprintf +#undef sscanf +#undef tmpfile +#undef tmpnam +#undef ungetc +#undef vfprintf +#undef vprintf +#undef vsprintf + +namespace std +{ + using ::FILE; + using ::fpos_t; + + using ::clearerr; + using ::fclose; + using ::feof; + using ::ferror; + using ::fflush; + using ::fgetc; + using ::fgetpos; + using ::fgets; + using ::fopen; + using ::fprintf; + using ::fputc; + using ::fputs; + using ::fread; + using ::freopen; + using ::fscanf; + using ::fseek; + using ::fsetpos; + using ::ftell; + using ::fwrite; + using ::getc; + using ::getchar; +#if __cplusplus <= 201103L + // LWG 2249 + using ::gets; +#endif + using ::perror; + using ::printf; + using ::putc; + using ::putchar; + using ::puts; + using ::remove; + using ::rename; + using ::rewind; + using ::scanf; + using ::setbuf; + using ::setvbuf; + using ::sprintf; + using ::sscanf; + using ::tmpfile; +#if _GLIBCXX_USE_TMPNAM + using ::tmpnam; +#endif + using ::ungetc; + using ::vfprintf; + using ::vprintf; + using ::vsprintf; +} // namespace + +#if _GLIBCXX_USE_C99_STDIO + +#undef snprintf +#undef vfscanf +#undef vscanf +#undef vsnprintf +#undef vsscanf + +namespace __gnu_cxx +{ +#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC + extern "C" int + (snprintf)(char * __restrict, std::size_t, const char * __restrict, ...) + throw (); + extern "C" int + (vfscanf)(FILE * __restrict, const char * __restrict, __gnuc_va_list); + extern "C" int (vscanf)(const char * __restrict, __gnuc_va_list); + extern "C" int + (vsnprintf)(char * __restrict, std::size_t, const char * __restrict, + __gnuc_va_list) throw (); + extern "C" int + (vsscanf)(const char * __restrict, const char * __restrict, __gnuc_va_list) + throw (); +#endif + +#if !_GLIBCXX_USE_C99_DYNAMIC + using ::snprintf; + using ::vfscanf; + using ::vscanf; + using ::vsnprintf; + using ::vsscanf; +#endif +} // namespace __gnu_cxx + +namespace std +{ + using ::__gnu_cxx::snprintf; + using ::__gnu_cxx::vfscanf; + using ::__gnu_cxx::vscanf; + using ::__gnu_cxx::vsnprintf; + using ::__gnu_cxx::vsscanf; +} // namespace std + +#endif // _GLIBCXX_USE_C99_STDIO + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdio.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdio.blob new file mode 100644 index 0000000000000000000000000000000000000000..4814330ab8e560666596d1a4c896aa7603ed434c GIT binary patch literal 17246 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 O1R{+X{xdQ#FaQ8GH+vQU literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdlib b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdlib new file mode 100644 index 0000000..ced9247 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdlib @@ -0,0 +1,288 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/cstdlib + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c stdlib.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: 20.4.6 C library +// + +#ifndef _GLIBCXX_CSTDLIB +#define _GLIBCXX_CSTDLIB 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#if !_GLIBCXX_HOSTED +// The C standard does not require a freestanding implementation to +// provide . However, the C++ standard does still require +// -- but only the functionality mentioned in +// [lib.support.start.term]. + +#define EXIT_SUCCESS 0 +#define EXIT_FAILURE 1 +#define NULL __null + +namespace std +{ + extern "C" void abort(void) _GLIBCXX_NOTHROW _GLIBCXX_NORETURN; + extern "C" int atexit(void (*)(void)) _GLIBCXX_NOTHROW; + extern "C" void exit(int) _GLIBCXX_NOTHROW _GLIBCXX_NORETURN; +#if __cplusplus >= 201103L +# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT + extern "C" int at_quick_exit(void (*)(void)) _GLIBCXX_NOTHROW; +# endif +# ifdef _GLIBCXX_HAVE_QUICK_EXIT + extern "C" void quick_exit(int) _GLIBCXX_NOTHROW _GLIBCXX_NORETURN; +# endif +#if _GLIBCXX_USE_C99_STDLIB + extern "C" void _Exit(int) _GLIBCXX_NOTHROW _GLIBCXX_NORETURN; +#endif +#endif +} // namespace std + +#else + +// Need to ensure this finds the C library's not a libstdc++ +// wrapper that might already be installed later in the include search path. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" // include_next +#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS +#include_next +#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS +#pragma GCC diagnostic pop + +#include + +// Get rid of those macros defined in in lieu of real functions. +#undef abort +#if __cplusplus >= 201703L && defined(_GLIBCXX_HAVE_ALIGNED_ALLOC) +# undef aligned_alloc +#endif +#undef atexit +#if __cplusplus >= 201103L +# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT +# undef at_quick_exit +# endif +#endif +#undef atof +#undef atoi +#undef atol +#undef bsearch +#undef calloc +#undef div +#undef exit +#undef free +#undef getenv +#undef labs +#undef ldiv +#undef malloc +#undef mblen +#undef mbstowcs +#undef mbtowc +#undef qsort +#if __cplusplus >= 201103L +# ifdef _GLIBCXX_HAVE_QUICK_EXIT +# undef quick_exit +# endif +#endif +#undef rand +#undef realloc +#undef srand +#undef strtod +#undef strtol +#undef strtoul +#undef system +#undef wcstombs +#undef wctomb + +extern "C++" +{ +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + using ::div_t; + using ::ldiv_t; + + using ::abort; +#if __cplusplus >= 201703L && defined(_GLIBCXX_HAVE_ALIGNED_ALLOC) + using ::aligned_alloc; +#endif + using ::atexit; +#if __cplusplus >= 201103L +# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT + using ::at_quick_exit; +# endif +#endif + using ::atof; + using ::atoi; + using ::atol; + using ::bsearch; + using ::calloc; + using ::div; + using ::exit; + using ::free; + using ::getenv; + using ::labs; + using ::ldiv; + using ::malloc; +#ifdef _GLIBCXX_HAVE_MBSTATE_T + using ::mblen; + using ::mbstowcs; + using ::mbtowc; +#endif // _GLIBCXX_HAVE_MBSTATE_T + using ::qsort; +#if __cplusplus >= 201103L +# ifdef _GLIBCXX_HAVE_QUICK_EXIT + using ::quick_exit; +# endif +#endif + using ::rand; + using ::realloc; + using ::srand; + using ::strtod; + using ::strtol; + using ::strtoul; + using ::system; +#ifdef _GLIBCXX_USE_WCHAR_T + using ::wcstombs; + using ::wctomb; +#endif // _GLIBCXX_USE_WCHAR_T + +#ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO + inline ldiv_t + div(long __i, long __j) _GLIBCXX_NOTHROW { return ldiv(__i, __j); } +#endif + + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#if _GLIBCXX_USE_C99_STDLIB + +#undef _Exit +#undef llabs +#undef lldiv +#undef atoll +#undef strtoll +#undef strtoull +#undef strtof +#undef strtold + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC + using ::lldiv_t; +#endif +#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC + extern "C" void (_Exit)(int) _GLIBCXX_NOTHROW _GLIBCXX_NORETURN; +#endif +#if !_GLIBCXX_USE_C99_DYNAMIC + using ::_Exit; +#endif + +#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + using ::llabs; + + inline lldiv_t + div(long long __n, long long __d) + { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } + + using ::lldiv; +#pragma GCC diagnostic pop +#endif + +#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC + extern "C" long long int (atoll)(const char *) _GLIBCXX_NOTHROW; + extern "C" long long int + (strtoll)(const char * __restrict, char ** __restrict, int) _GLIBCXX_NOTHROW; + extern "C" unsigned long long int + (strtoull)(const char * __restrict, char ** __restrict, int) _GLIBCXX_NOTHROW; +#endif +#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC + using ::atoll; + using ::strtoll; + using ::strtoull; +#endif + using ::strtof; + using ::strtold; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace __gnu_cxx + +namespace std +{ +#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC + using ::__gnu_cxx::lldiv_t; +#endif + using ::__gnu_cxx::_Exit; +#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC + using ::__gnu_cxx::llabs; + using ::__gnu_cxx::div; + using ::__gnu_cxx::lldiv; +#endif + using ::__gnu_cxx::atoll; + using ::__gnu_cxx::strtof; + using ::__gnu_cxx::strtoll; + using ::__gnu_cxx::strtoull; + using ::__gnu_cxx::strtold; +} // namespace std + +#else // ! _GLIBCXX_USE_C99_STDLIB + +// We also check for strtof and strtold separately from _GLIBCXX_USE_C99_STDLIB + +#if _GLIBCXX_HAVE_STRTOF +#undef strtof +namespace std { using ::strtof; } +#endif + +#if _GLIBCXX_HAVE_STRTOLD +#undef strtold +namespace std { using ::strtold; } +#endif + +#endif // _GLIBCXX_USE_C99_STDLIB + +} // extern "C++" + +#endif // !_GLIBCXX_HOSTED + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdlib.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cstdlib.blob new file mode 100644 index 0000000000000000000000000000000000000000..fec63f0ce127c306a8d896f0b6e4179e116e4ef8 GIT binary patch literal 17987 zcmdO5_$PB#_%ahCgMMyaiGERHW{Q46QGQlxa!Ij%N^yaHMq*KJeqLsBA`+{(C>g=i z%P1&dU{20S%uA=t4BhhlqU_APblsH9qSWM){Gv)*65Pb__aB3PX>pN$W?phmX-cYo za!F-Ds$K@eznE^}%cwHi+WLm3dPaJN`bn83#rlakIr+))B}IvuCB+~Opa4P909FMu zu2?@lJ~yejB(Wqlz67KcpV`GFDXA67sRbpFAVx7UCo?HCuOtVn5oxK3C8b5FV5i_S zzrw;S-poX|AXzsjGq1ElH$ATu;-CED_>|PN%shw@7`{nHc)z%$C^a!RsWc6X6OojG z{a;*Cl$n>FR-OWKG=`yIB}tVfsm0}q1t1mpTn<*853yXYBsm$2?O-K|CHc9T$?@fx zDXH2gMY==tTEfaz;^pUOvcV3~ym7O)N^z&nqLOxVW;oBsDia zwWuh+2+4OjnMwNKoT6`J2v4ZRB`KMC;MA05&Ul%GBoE4lr6rj;#rkE5Mc{1s&uNb~ z&a|GHUz}E+g5(-lPARS|)=y4JO~anzz%c;|(qjGMlA_Y&l6W^yA6HNS;EUpd;*uPF z5D}l8pO==I4pNU1x=2PR=jUfnJSE2Puc7d#vt9*HK!WS{x6xD8DE^u_zrJqy%ls$xlwqNsUj= zNh~fVoN0>^OEUAZL?cqb#K)%<81yy`}ab|jPDtd5XEluL%i%U{cQq$tglQR;b znFCy|fa*s4I*K!^pw${&1FVQZ3b^EQaLtM(0U{{^J0229nfZA*vmB`80Yw)$PH}`l zW^SsP3GNUo&CDyw)6Gmt%`3?)sl=)d-Cgh;3Q~=cMA22J72`~FiN(3P>8W|CMVZO^ znRz9;IXMuQUNR%l;z+KjNKDF%Ps=Y##*tBq^HS0>bHMGFRWn~*L}@%g0yi%uGcgb3 z103O2S&#~9u0YEcaQ%Xz65MdmFUT*>tcZul1BUCt_Lb)srGOF$RvXd73{qysmu04w zOB3M;%YDrcu_Vx^@xm8?JnpCU{iF6E)Bo^oDrxq1KS{4M|18EH{H#O#A0xo#ZZdmKCn-6Q*-l+Dv?{0q;)?E za!S)P^NRJ0Gt=`DbK=3dFtH@R2txqUE}BuNhqGM-b`Lb0q$MV&;^+h*`5+lwwh|G% z(0rbmmst`Ij~1*!jbwUCYEo&sKBy^B1a1dmRS$M_D!2^DOD)D;eu5Gp?#M&3F&UC? z@OucP2y43ol$9avSA3}w>|oST#@_Nrc2|BLsQ*-q#bF@75mj!113(|rATl!{+~6oF zEyzj5Vj+^Vk}^y1E5O+^OV-xL(;P;!A~PSGr;!vO1t)SQ0#))@>TIy;;*7*1Nb@%y zmQ8UKdXQ#*QF%^&ayBUS5sX)q!W4V7Ldp_wYZBZ+11DL0#RR@Ugrp;o)3Ey>Co?Ho zHzPGMCACPmxFoR%d+i4fmE?j_-Qra23edwF)RY4^|1$HzH7|C{3raGIQWI0a2~Rh% zC>h+W#217)nYo!I#Kd<|VqSV`d}4AkG{*I41lZ(LZOSm>%#UiBa%FHju(eOe_ z&&jxYK434ECuWwUCkr3H|LxuKpwLkixGjn6DeEdn*kKu*AL zB9hl|rsw2>QoIA1;4lG&I%q()6r6G~f)KfhN~pa+jGNL+GKzFlQqvN_Srtp60IBET zr2@Vh4(xtVp<0lbNq9&qF*&UP0lF5e~%o4V=1hw+)bt0K2>> zHLbh|GS~}`Ui^78H?blf zYXRpjtg4Wljx)8v2AlJXz{6c|FTu(UuuW+>`H3ZYy2<&uxsWCRzJNy5ltuA5nZ?)| zjmXK9v@`?DUEufv51N8A0Cs0XN@HDcw*_kefjtMR4TomreHH6oyYj1)Z+ZoqGari7qCKz(a>TOwYEWtR*1TIqDHns z?F;Y-628_2a=e0EQjl7dlb;7J<-sKaX{B*uN@77tYLPyahLprzlhB$7AbTK9Ygi4F z35wC8;(}D{c?UhJ5FG?i8o`JxB;`0W5vX{?su|+A%v^9};fvr*NCiSf%7PB6V()H1 z>;sR1L7GL_V;{*+kf9(f_TtVpNV-AEH<5^rBWMyO2VONoGA}swVGT7%2OlH_4l>eG z4WxBhTAT?=cLfCu|7LWer5MogD@ZygH6GGufi&sCb|JUeko*Y_*Su8F06*~~8p-)7 zsmW#7%0IAiVE=;#ZZL z9Ibb-5|DwQj0c{*1hFrz^3r97fNV@R`HOe z0I6ehOlNf9iQAILXCB#xtr9Pv9&_ zO}(!jt=I~Uf}>bRG8U{lGrt(zmIAo}BiO+zK+SL6l>E{p$fPRVZ?F~ySP|I!`k*vHWWAbP zPyn7dg;rN6*5eN~Pz761f<8eHa}Bs1BVBwjLMJC$s{iS7nh{OCnjOSN(jdZLCV{dUc<3rM1vF%v23d)S5gq6*1@*zuYcAZmGO;Kk)QXbSqC5pqwV(j078Ht0ic0cxQZ&F>S^<DB}F<=2~?TXyp)2HB29(7e8@DvMoCd=swRV)8Xp4~@PJ6B zFCt%*SQ!6uFlznfV6_#5Yuw`-t|0f!*O8EI5>g_IQ7dIknC#q?R^vjPj_ zUsgt~zpRXAER6pvnhys2`l1*Lbwz0&Xi-IK3M6d60R#@2(wrRf9i^j?nFk6&P$wKC zm`qFrK;Z*(;75^Zle*}$=Pym(H=m9h&LARTsvoSc-*vUrdu)ALH>lPfB$tWq+|G{6o86Y=qR zI!J*UAD^PhAZNnH_<-dB*IyHlqa z_j1RnYA7@CFf%YPF#cs^)cVWFXu!hw-+?bbb0$w^EqMzOsDBjA;kxR3+> zuEJReXFF!UhHzH8#dw zEW5xy+sU%4i-CcG>Hjx#k$1mqH=X(4CuKSN*9Q|<#$6e^3jW6$N?csJgWaF`uZjcM zhYbJs?%nZ6YhR%ihQAU^@-bo@lra%jLo*+m=iZCF2YHT#QR^=Y*mF~AcT9XUKXe(? zhO+$36os^+)Km>HODi5!$zd2OA;EzZVvKV{=E$%x{@-+BW!pKXZewJl3XAiLO5kRJ z(!GuXXmlN%Lh?X$E)pLkp`#EVpPZjtkXRI-mIqb^;b}5RNFYZO<1&$Dax9GhSPOgab6CaP6bkG7~p2$3q zIgIO;bHqMAQ3Evx5|X*#Mv4Z=k6>?s7#QwCEuM(HAU8723bfrb_1h_^nW)7bxI`(XRY9kv#fO}FHi~RiVqyG0 zNp@Gm*~W%2sDr?P7Vk<#Od_WWrt2ctLFxM+gVx`F44}*_6&M`7C8qutC^;mS#21!k zCTGWk6A0J_4Xt?aw2`KUCVFHjBo^mtD52<4(q!P^kV1C+B#}vaER6rXr%LpGEt~oo z>UfZ4<;f-axk(zZ3ba^90X$vuuctpFIeifjc%{@qm$nv9xvnV?2P z3Lj9B3bG^~wEQ5o2v)D8q~_)4Vwfu>#fI$USt7HfSQ!6@L{<1Y^Xkb#%>{>sR#7S> zl|p#n%#W5ov6zk$n`=eZf?{(5OUm4TC%0^anhvWKz%)v63|^!HEjqy&E3u~0vBY_r`#n3uX`}VY|PI~hcqH+m5e1MP@-#t$Oce!HEn!u+;sV+ zAk-OSo zzoVPb&lOM;K_)Jh=>r# z0LK5Y?jxwn$G~_-6=31L)W5bysno~e(%Cx$)*jUA<=rh(cbrO71CH*0r(T>zvj^VTj4xq;x4#(v!wdr3!Pp_v0m>aw z9RFC4nSb{}M0jyY3M8u882n31K-2jO`DqF{nMt6PncCV4aFxY+TwHLDLUBn7S2YqJ z)F4bMO;@N^s6`P4O5qBv(`zT3T9w#Zh#mq?ROR<|v>VUY1ytnV44sQq9T9 z$*Hfe;H<4}XwFrO?53jB9MJwZkRoK^k|IMCrxxTSCZ}fP=YWg^RGUkRjKFG)s&dd4KJ0ox=>#REBqn8o0s}dfzzaTdN zQc_^0ub-Zrte2iws+V7suAdKH8IzKqT&xezOZqv9C8@j*;{f7->flFGZ7LgVyM#dI~{Y*baeo8Si{$%*e$;iaOz##Dd{hzuY=bq1g4{pDM z35~?O{5)t0rfFqWl$y&RVg&9~f;tF{55peDh%o*al9%P%VQ^p`SPPgy(+Ap1&LCn0 z(!&5E7$0gqG!kL_ul)TYf+sfJe`~)BI2EcLtK13ofsGx6qF$=@)gkK6bu;{ z7}W*T4VXZr3B!L-S^odsiuX+}Co`Ze9Y`U^sL!RZ;lKzVJp}hb!7b=Q1_1#!1_s85 z5)b8=7$0&xlw;uKVPIf>sPs^Sh4G=^!w?q6hiwmgSQ!7`=3cn0($?uW#7GFq7R3=I z=fD`p5hv%sSjj^%O=jPTJ*aDae``1lkC5fPBZ59}Ve zfW|x@XgzTGdyMff4+8_!LzjnMJd6+X9+vPh{$Hy7D7x(A_GJ(YAtX~9Lz{yG<2iJqiv%#$7eLns^xDqpVOJnJ^t. + +/** @file include/ctime + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c time.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: 20.5 Date and time +// + +#ifndef _GLIBCXX_CTIME +#define _GLIBCXX_CTIME 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +// Get rid of those macros defined in in lieu of real functions. +#undef clock +#undef difftime +#undef mktime +#undef time +#undef asctime +#undef ctime +#undef gmtime +#undef localtime +#undef strftime + +namespace std +{ + using ::clock_t; + using ::time_t; + using ::tm; + + using ::clock; + using ::difftime; + using ::mktime; + using ::time; + using ::asctime; + using ::ctime; + using ::gmtime; + using ::localtime; + using ::strftime; +} // namespace + +#if __cplusplus >= 201703L && defined(_GLIBCXX_HAVE_TIMESPEC_GET) +#undef timespec_get +namespace std +{ + using ::timespec; + using ::timespec_get; +} // namespace std +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ctime.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ctime.blob new file mode 100644 index 0000000000000000000000000000000000000000..1b748bfc1311d02c1ec81d76698de77a8eaa4ef4 GIT binary patch literal 13743 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwchar b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwchar new file mode 100644 index 0000000..dbcc104 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwchar @@ -0,0 +1,308 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/cwchar + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c wchar.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: 21.4 +// + +#ifndef _GLIBCXX_CWCHAR +#define _GLIBCXX_CWCHAR 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#if _GLIBCXX_HAVE_WCHAR_H +#include +#endif + +// Need to do a bit of trickery here with mbstate_t as char_traits +// assumes it is in wchar.h, regardless of wchar_t specializations. +#ifndef _GLIBCXX_HAVE_MBSTATE_T +extern "C" +{ + typedef struct + { + int __fill[6]; + } mbstate_t; +} +#endif + +namespace std +{ + using ::mbstate_t; +} // namespace std + +// Get rid of those macros defined in in lieu of real functions. +#undef btowc +#undef fgetwc +#undef fgetws +#undef fputwc +#undef fputws +#undef fwide +#undef fwprintf +#undef fwscanf +#undef getwc +#undef getwchar +#undef mbrlen +#undef mbrtowc +#undef mbsinit +#undef mbsrtowcs +#undef putwc +#undef putwchar +#undef swprintf +#undef swscanf +#undef ungetwc +#undef vfwprintf +#if _GLIBCXX_HAVE_VFWSCANF +# undef vfwscanf +#endif +#undef vswprintf +#if _GLIBCXX_HAVE_VSWSCANF +# undef vswscanf +#endif +#undef vwprintf +#if _GLIBCXX_HAVE_VWSCANF +# undef vwscanf +#endif +#undef wcrtomb +#undef wcscat +#undef wcschr +#undef wcscmp +#undef wcscoll +#undef wcscpy +#undef wcscspn +#undef wcsftime +#undef wcslen +#undef wcsncat +#undef wcsncmp +#undef wcsncpy +#undef wcspbrk +#undef wcsrchr +#undef wcsrtombs +#undef wcsspn +#undef wcsstr +#undef wcstod +#if _GLIBCXX_HAVE_WCSTOF +# undef wcstof +#endif +#undef wcstok +#undef wcstol +#undef wcstoul +#undef wcsxfrm +#undef wctob +#undef wmemchr +#undef wmemcmp +#undef wmemcpy +#undef wmemmove +#undef wmemset +#undef wprintf +#undef wscanf + +#if _GLIBCXX_USE_WCHAR_T + +extern "C++" +{ +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + using ::wint_t; + + using ::btowc; + using ::fgetwc; + using ::fgetws; + using ::fputwc; + using ::fputws; + using ::fwide; + using ::fwprintf; + using ::fwscanf; + using ::getwc; + using ::getwchar; + using ::mbrlen; + using ::mbrtowc; + using ::mbsinit; + using ::mbsrtowcs; + using ::putwc; + using ::putwchar; +#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF + using ::swprintf; +#endif + using ::swscanf; + using ::ungetwc; + using ::vfwprintf; +#if _GLIBCXX_HAVE_VFWSCANF + using ::vfwscanf; +#endif +#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF + using ::vswprintf; +#endif +#if _GLIBCXX_HAVE_VSWSCANF + using ::vswscanf; +#endif + using ::vwprintf; +#if _GLIBCXX_HAVE_VWSCANF + using ::vwscanf; +#endif + using ::wcrtomb; + using ::wcscat; + using ::wcscmp; + using ::wcscoll; + using ::wcscpy; + using ::wcscspn; + using ::wcsftime; + using ::wcslen; + using ::wcsncat; + using ::wcsncmp; + using ::wcsncpy; + using ::wcsrtombs; + using ::wcsspn; + using ::wcstod; +#if _GLIBCXX_HAVE_WCSTOF + using ::wcstof; +#endif + using ::wcstok; + using ::wcstol; + using ::wcstoul; + using ::wcsxfrm; + using ::wctob; + using ::wmemcmp; + using ::wmemcpy; + using ::wmemmove; + using ::wmemset; + using ::wprintf; + using ::wscanf; + using ::wcschr; + using ::wcspbrk; + using ::wcsrchr; + using ::wcsstr; + using ::wmemchr; + +#ifndef __CORRECT_ISO_CPP_WCHAR_H_PROTO + inline wchar_t* + wcschr(wchar_t* __p, wchar_t __c) + { return wcschr(const_cast(__p), __c); } + + inline wchar_t* + wcspbrk(wchar_t* __s1, const wchar_t* __s2) + { return wcspbrk(const_cast(__s1), __s2); } + + inline wchar_t* + wcsrchr(wchar_t* __p, wchar_t __c) + { return wcsrchr(const_cast(__p), __c); } + + inline wchar_t* + wcsstr(wchar_t* __s1, const wchar_t* __s2) + { return wcsstr(const_cast(__s1), __s2); } + + inline wchar_t* + wmemchr(wchar_t* __p, wchar_t __c, size_t __n) + { return wmemchr(const_cast(__p), __c, __n); } +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +} // extern "C++" + +#if _GLIBCXX_USE_C99_WCHAR + +#undef wcstold +#undef wcstoll +#undef wcstoull + +namespace __gnu_cxx +{ +#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC + extern "C" long double + (wcstold)(const wchar_t * __restrict, wchar_t ** __restrict) throw (); +#endif +#if !_GLIBCXX_USE_C99_DYNAMIC + using ::wcstold; +#endif +#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC + extern "C" long long int + (wcstoll)(const wchar_t * __restrict, wchar_t ** __restrict, int) throw (); + extern "C" unsigned long long int + (wcstoull)(const wchar_t * __restrict, wchar_t ** __restrict, int) throw (); +#endif +#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC + using ::wcstoll; + using ::wcstoull; +#endif +} // namespace __gnu_cxx + +namespace std +{ + using ::__gnu_cxx::wcstold; + using ::__gnu_cxx::wcstoll; + using ::__gnu_cxx::wcstoull; +} // namespace + +#endif + +#endif //_GLIBCXX_USE_WCHAR_T + +#if __cplusplus >= 201103L + +#ifdef _GLIBCXX_USE_WCHAR_T + +namespace std +{ +#if _GLIBCXX_HAVE_WCSTOF + using std::wcstof; +#endif +#if _GLIBCXX_HAVE_VFWSCANF + using std::vfwscanf; +#endif +#if _GLIBCXX_HAVE_VSWSCANF + using std::vswscanf; +#endif +#if _GLIBCXX_HAVE_VWSCANF + using std::vwscanf; +#endif + +#if _GLIBCXX_USE_C99_WCHAR + using std::wcstold; + using std::wcstoll; + using std::wcstoull; +#endif +} // namespace + +#endif // _GLIBCXX_USE_WCHAR_T + +#endif // C++11 + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwchar.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwchar.blob new file mode 100644 index 0000000000000000000000000000000000000000..86b4a98c3e8315c71702f84e3e87a4e80fd33425 GIT binary patch literal 21838 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. + +/** @file include/cwctype + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c wctype.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: +// + +#ifndef _GLIBCXX_CWCTYPE +#define _GLIBCXX_CWCTYPE 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#if _GLIBCXX_HAVE_WCTYPE_H + +#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 10 +// Work around glibc BZ 9694 +#include +#endif + +#include +#endif // _GLIBCXX_HAVE_WCTYPE_H + +// Get rid of those macros defined in in lieu of real functions. +#undef iswalnum +#undef iswalpha +#if _GLIBCXX_HAVE_ISWBLANK +# undef iswblank +#endif +#undef iswcntrl +#undef iswctype +#undef iswdigit +#undef iswgraph +#undef iswlower +#undef iswprint +#undef iswpunct +#undef iswspace +#undef iswupper +#undef iswxdigit +#undef towctrans +#undef towlower +#undef towupper +#undef wctrans +#undef wctype + +#if _GLIBCXX_USE_WCHAR_T + +namespace std +{ + using ::wctrans_t; + using ::wctype_t; + using ::wint_t; + + using ::iswalnum; + using ::iswalpha; +#if _GLIBCXX_HAVE_ISWBLANK + using ::iswblank; +#endif + using ::iswcntrl; + using ::iswctype; + using ::iswdigit; + using ::iswgraph; + using ::iswlower; + using ::iswprint; + using ::iswpunct; + using ::iswspace; + using ::iswupper; + using ::iswxdigit; + using ::towctrans; + using ::towlower; + using ::towupper; + using ::wctrans; + using ::wctype; +} // namespace + +#endif //_GLIBCXX_USE_WCHAR_T + +#endif // _GLIBCXX_CWCTYPE diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwctype.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@cwctype.blob new file mode 100644 index 0000000000000000000000000000000000000000..ba55d3d0b425115904075a91d416e5f3da0bab82 GIT binary patch literal 14323 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@assertions.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@assertions.h new file mode 100644 index 0000000..86720a7 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@assertions.h @@ -0,0 +1,70 @@ +// Debugging support implementation -*- C++ -*- + +// Copyright (C) 2003-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file debug/assertions.h + * This file is a GNU debug extension to the Standard C++ Library. + */ + +#ifndef _GLIBCXX_DEBUG_ASSERTIONS_H +#define _GLIBCXX_DEBUG_ASSERTIONS_H 1 + +#include + +#ifndef _GLIBCXX_DEBUG +// Verify that [_First, _Last) forms a non-empty iterator range. +# define __glibcxx_requires_non_empty_range(_First,_Last) \ + __glibcxx_assert(_First != _Last) +# define __glibcxx_requires_subscript(_N) \ + __glibcxx_assert(_N < this->size()) +// Verify that the container is nonempty +# define __glibcxx_requires_nonempty() \ + __glibcxx_assert(!this->empty()) +#else // Use the more verbose Debug Mode checks. +# define __glibcxx_requires_non_empty_range(_First,_Last) \ + __glibcxx_check_non_empty_range(_First,_Last) +# define __glibcxx_requires_nonempty() \ + __glibcxx_check_nonempty() +# define __glibcxx_requires_subscript(_N) \ + __glibcxx_check_subscript(_N) +#endif + +#if defined _GLIBCXX_DEBUG && _GLIBCXX_HOSTED + +# define _GLIBCXX_DEBUG_ASSERT(_Condition) __glibcxx_assert(_Condition) + +# ifdef _GLIBCXX_DEBUG_PEDANTIC +# define _GLIBCXX_DEBUG_PEDASSERT(_Condition) _GLIBCXX_DEBUG_ASSERT(_Condition) +# else +# define _GLIBCXX_DEBUG_PEDASSERT(_Condition) +# endif + +# define _GLIBCXX_DEBUG_ONLY(_Statement) _Statement + +#else +# define _GLIBCXX_DEBUG_ASSERT(_Condition) +# define _GLIBCXX_DEBUG_PEDASSERT(_Condition) +# define _GLIBCXX_DEBUG_ONLY(_Statement) +#endif + +#endif // _GLIBCXX_DEBUG_ASSERTIONS diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@assertions.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@assertions.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1e35d8c8ad01ca2df2435ae0a1e4ec8129674008 GIT binary patch literal 14502 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@debug.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@debug.h new file mode 100644 index 0000000..0e02d58 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@debug.h @@ -0,0 +1,145 @@ +// Debugging support implementation -*- C++ -*- + +// Copyright (C) 2003-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file debug/debug.h + * This file is a GNU debug extension to the Standard C++ Library. + */ + +#ifndef _GLIBCXX_DEBUG_MACRO_SWITCH_H +#define _GLIBCXX_DEBUG_MACRO_SWITCH_H 1 + +/** Macros and namespaces used by the implementation outside of debug + * wrappers to verify certain properties. The __glibcxx_requires_xxx + * macros are merely wrappers around the __glibcxx_check_xxx wrappers + * when we are compiling with debug mode, but disappear when we are + * in release mode so that there is no checking performed in, e.g., + * the standard library algorithms. +*/ + +#include + +// Debug mode namespaces. + +/** + * @namespace std::__debug + * @brief GNU debug code, replaces standard behavior with debug behavior. + */ +namespace std +{ + namespace __debug { } +} + +/** @namespace __gnu_debug + * @brief GNU debug classes for public use. +*/ +namespace __gnu_debug +{ + using namespace std::__debug; + + template + struct _Safe_iterator; +} + +#if ! defined _GLIBCXX_DEBUG || ! _GLIBCXX_HOSTED + +# define __glibcxx_requires_cond(_Cond,_Msg) +# define __glibcxx_requires_valid_range(_First,_Last) +# define __glibcxx_requires_can_increment(_First,_Size) +# define __glibcxx_requires_can_increment_range(_First1,_Last1,_First2) +# define __glibcxx_requires_can_decrement_range(_First1,_Last1,_First2) +# define __glibcxx_requires_sorted(_First,_Last) +# define __glibcxx_requires_sorted_pred(_First,_Last,_Pred) +# define __glibcxx_requires_sorted_set(_First1,_Last1,_First2) +# define __glibcxx_requires_sorted_set_pred(_First1,_Last1,_First2,_Pred) +# define __glibcxx_requires_partitioned_lower(_First,_Last,_Value) +# define __glibcxx_requires_partitioned_upper(_First,_Last,_Value) +# define __glibcxx_requires_partitioned_lower_pred(_First,_Last,_Value,_Pred) +# define __glibcxx_requires_partitioned_upper_pred(_First,_Last,_Value,_Pred) +# define __glibcxx_requires_heap(_First,_Last) +# define __glibcxx_requires_heap_pred(_First,_Last,_Pred) +# define __glibcxx_requires_string(_String) +# define __glibcxx_requires_string_len(_String,_Len) +# define __glibcxx_requires_irreflexive(_First,_Last) +# define __glibcxx_requires_irreflexive2(_First,_Last) +# define __glibcxx_requires_irreflexive_pred(_First,_Last,_Pred) +# define __glibcxx_requires_irreflexive_pred2(_First,_Last,_Pred) + +#else + +# include + +# define __glibcxx_requires_cond(_Cond,_Msg) _GLIBCXX_DEBUG_VERIFY(_Cond,_Msg) +# define __glibcxx_requires_valid_range(_First,_Last) \ + __glibcxx_check_valid_range(_First,_Last) +# define __glibcxx_requires_can_increment(_First,_Size) \ + __glibcxx_check_can_increment(_First,_Size) +# define __glibcxx_requires_can_increment_range(_First1,_Last1,_First2) \ + __glibcxx_check_can_increment_range(_First1,_Last1,_First2) +# define __glibcxx_requires_can_decrement_range(_First1,_Last1,_First2) \ + __glibcxx_check_can_decrement_range(_First1,_Last1,_First2) +# define __glibcxx_requires_sorted(_First,_Last) \ + __glibcxx_check_sorted(_First,_Last) +# define __glibcxx_requires_sorted_pred(_First,_Last,_Pred) \ + __glibcxx_check_sorted_pred(_First,_Last,_Pred) +# define __glibcxx_requires_sorted_set(_First1,_Last1,_First2) \ + __glibcxx_check_sorted_set(_First1,_Last1,_First2) +# define __glibcxx_requires_sorted_set_pred(_First1,_Last1,_First2,_Pred) \ + __glibcxx_check_sorted_set_pred(_First1,_Last1,_First2,_Pred) +# define __glibcxx_requires_partitioned_lower(_First,_Last,_Value) \ + __glibcxx_check_partitioned_lower(_First,_Last,_Value) +# define __glibcxx_requires_partitioned_upper(_First,_Last,_Value) \ + __glibcxx_check_partitioned_upper(_First,_Last,_Value) +# define __glibcxx_requires_partitioned_lower_pred(_First,_Last,_Value,_Pred) \ + __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) +# define __glibcxx_requires_partitioned_upper_pred(_First,_Last,_Value,_Pred) \ + __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) +# define __glibcxx_requires_heap(_First,_Last) \ + __glibcxx_check_heap(_First,_Last) +# define __glibcxx_requires_heap_pred(_First,_Last,_Pred) \ + __glibcxx_check_heap_pred(_First,_Last,_Pred) +# if __cplusplus < 201103L +# define __glibcxx_requires_string(_String) \ + _GLIBCXX_DEBUG_PEDASSERT(_String != 0) +# define __glibcxx_requires_string_len(_String,_Len) \ + _GLIBCXX_DEBUG_PEDASSERT(_String != 0 || _Len == 0) +# else +# define __glibcxx_requires_string(_String) \ + _GLIBCXX_DEBUG_PEDASSERT(_String != nullptr) +# define __glibcxx_requires_string_len(_String,_Len) \ + _GLIBCXX_DEBUG_PEDASSERT(_String != nullptr || _Len == 0) +# endif +# define __glibcxx_requires_irreflexive(_First,_Last) \ + __glibcxx_check_irreflexive(_First,_Last) +# define __glibcxx_requires_irreflexive2(_First,_Last) \ + __glibcxx_check_irreflexive2(_First,_Last) +# define __glibcxx_requires_irreflexive_pred(_First,_Last,_Pred) \ + __glibcxx_check_irreflexive_pred(_First,_Last,_Pred) +# define __glibcxx_requires_irreflexive_pred2(_First,_Last,_Pred) \ + __glibcxx_check_irreflexive_pred2(_First,_Last,_Pred) + +# include + +#endif + +#endif // _GLIBCXX_DEBUG_MACRO_SWITCH_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@debug.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@debug@debug.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..db1c6641366d62be91b841b65a4283000cbf8c54 GIT binary patch literal 15361 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@exception b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@exception new file mode 100644 index 0000000..246c9b1 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@exception @@ -0,0 +1,172 @@ +// Exception Handling support header for -*- C++ -*- + +// Copyright (C) 1995-2025 Free Software Foundation, Inc. +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file exception + * This is a Standard C++ Library header. + */ + +#ifndef __EXCEPTION__ +#define __EXCEPTION__ + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +#define __glibcxx_want_uncaught_exceptions +#include + +extern "C++" { + +namespace std _GLIBCXX_VISIBILITY(default) +{ + /** @addtogroup exceptions + * @{ + */ + + /** If an %exception is thrown which is not listed in a function's + * %exception specification, one of these may be thrown. + * + * @ingroup exceptions + */ + class bad_exception : public exception + { + public: + bad_exception() _GLIBCXX_USE_NOEXCEPT { } + + // This declaration is not useless: + // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 + virtual ~bad_exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_USE_NOEXCEPT; + + // See comment in eh_exception.cc. + virtual const char* + what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_USE_NOEXCEPT; + }; + + /// If you write a replacement %terminate handler, it must be of this type. + typedef void (*terminate_handler) (); + + /// Takes a new handler function as an argument, returns the old function. + terminate_handler set_terminate(terminate_handler) _GLIBCXX_USE_NOEXCEPT; + +#if __cplusplus >= 201103L + /// Return the current terminate handler. + terminate_handler get_terminate() noexcept; +#endif + + /** The runtime will call this function if %exception handling must be + * abandoned for any reason. It can also be called by the user. */ + void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__,__cold__)); + +#if __cplusplus < 201703L || (__cplusplus <= 202002L && _GLIBCXX_USE_DEPRECATED) + /// If you write a replacement %unexpected handler, it must be of this type. + typedef void (*_GLIBCXX11_DEPRECATED unexpected_handler) (); + + /** Takes a new handler function as an argument, returns the old function. + * + * @deprecated Removed from the C++ standard in C++17 + */ + _GLIBCXX11_DEPRECATED + unexpected_handler set_unexpected(unexpected_handler) _GLIBCXX_USE_NOEXCEPT; + +#if __cplusplus >= 201103L + /** Return the current unexpected handler. + * + * @since C++11 + * @deprecated Removed from the C++ standard in C++17 + */ + _GLIBCXX11_DEPRECATED + unexpected_handler get_unexpected() noexcept; +#endif + + /** The runtime will call this function if an %exception is thrown which + * violates the function's %exception specification. + * + * @deprecated Removed from the C++ standard in C++17 + */ + _GLIBCXX11_DEPRECATED + void unexpected() __attribute__ ((__noreturn__,__cold__)); +#endif + + /** [18.6.4]/1: 'Returns true after completing evaluation of a + * throw-expression until either completing initialization of the + * exception-declaration in the matching handler or entering `unexpected()` + * due to the throw; or after entering `terminate()` for any reason + * other than an explicit call to `terminate()`. [Note: This includes + * stack unwinding [15.2]. end note]' + * + * 2: 'When `uncaught_exception()` is true, throwing an + * %exception can result in a call of 1terminate()` + * (15.5.1).' + */ + _GLIBCXX17_DEPRECATED_SUGGEST("std::uncaught_exceptions()") + bool uncaught_exception() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); + +#ifdef __cpp_lib_uncaught_exceptions // C++ >= 17 || GNU++ >= 03 + /** The number of uncaught exceptions. + * @since C++17, or any non-strict mode, e.g. `-std=gnu++98` + * @see uncaught_exception() + */ + int uncaught_exceptions() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); +#endif + + /// @} group exceptions +} // namespace std + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief A replacement for the standard terminate_handler which + * prints more information about the terminating exception (if any) + * on stderr. + * + * @ingroup exceptions + * + * Call + * @code + * std::set_terminate(__gnu_cxx::__verbose_terminate_handler) + * @endcode + * to use. For more info, see + * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt02ch06s02.html + * + * In 3.4 and later, this is on by default. + */ + void __verbose_terminate_handler(); + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +} // extern "C++" + +#if (__cplusplus >= 201103L) +#include +#include +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@exception.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@exception.blob new file mode 100644 index 0000000000000000000000000000000000000000..4da49202b9ef43eccd7476ba76e5c52f75134090 GIT binary patch literal 16700 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 SVI_(Lqnv=87896+m<|A8wMi`i literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@aligned_buffer.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@aligned_buffer.h new file mode 100644 index 0000000..15c88d6 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@aligned_buffer.h @@ -0,0 +1,130 @@ +// Aligned memory buffer -*- C++ -*- + +// Copyright (C) 2013-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file ext/aligned_buffer.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _ALIGNED_BUFFER_H +#define _ALIGNED_BUFFER_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus >= 201103L +# include +#else +# include +#endif + +namespace __gnu_cxx +{ + // A utility type containing a POD object that can hold an object of type + // _Tp initialized via placement new or allocator_traits::construct. + // Intended for use as a data member subobject, use __aligned_buffer for + // complete objects. + template + struct __aligned_membuf + { + // Target macro ADJUST_FIELD_ALIGN can produce different alignment for + // types when used as class members. __aligned_membuf is intended + // for use as a class member, so align the buffer as for a class member. + // Since GCC 8 we can just use alignas(_Tp) to get the right alignment. +#ifdef __EDG__ + // The EDG front end does not implement the PR c++/69560 alignof change. + struct _Tp2 { _Tp _M_t; }; + alignas(__alignof__(_Tp2::_M_t)) +#else + alignas(_Tp) +#endif + unsigned char _M_storage[sizeof(_Tp)]; + + __aligned_membuf() = default; + + // Can be used to avoid value-initialization zeroing _M_storage. + __aligned_membuf(std::nullptr_t) { } + + void* + _M_addr() noexcept + { return static_cast(&_M_storage); } + + const void* + _M_addr() const noexcept + { return static_cast(&_M_storage); } + + _Tp* + _M_ptr() noexcept + { return static_cast<_Tp*>(_M_addr()); } + + const _Tp* + _M_ptr() const noexcept + { return static_cast(_M_addr()); } + }; + +#if _GLIBCXX_INLINE_VERSION + template + using __aligned_buffer = __aligned_membuf<_Tp>; +#else + // Similar to __aligned_membuf but aligned for complete objects, not members. + // This type is used in , , + // and , but ideally they would use __aligned_membuf + // instead, as it has smaller size for some types on some targets. + // This type is still used to avoid an ABI change. + template + struct __aligned_buffer + { + // Using __alignof__ gives the alignment for a complete object. + alignas(__alignof__(_Tp)) unsigned char _M_storage[sizeof(_Tp)]; + + __aligned_buffer() = default; + + // Can be used to avoid value-initialization + __aligned_buffer(std::nullptr_t) { } + + void* + _M_addr() noexcept + { + return static_cast(&_M_storage); + } + + const void* + _M_addr() const noexcept + { + return static_cast(&_M_storage); + } + + _Tp* + _M_ptr() noexcept + { return static_cast<_Tp*>(_M_addr()); } + + const _Tp* + _M_ptr() const noexcept + { return static_cast(_M_addr()); } + }; +#endif + +} // namespace + +#endif /* _ALIGNED_BUFFER_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@aligned_buffer.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@aligned_buffer.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..81513130fb260ba1ca1f6899befd210c8ccb4f4d GIT binary patch literal 14550 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. + +/** @file ext/alloc_traits.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _EXT_ALLOC_TRAITS_H +#define _EXT_ALLOC_TRAITS_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +# include + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +/** + * @brief Uniform interface to C++98 and C++11 allocators. + * @ingroup allocators +*/ +template + struct __alloc_traits +#if __cplusplus >= 201103L + : std::allocator_traits<_Alloc> +#endif + { + typedef _Alloc allocator_type; +#if __cplusplus >= 201103L + typedef std::allocator_traits<_Alloc> _Base_type; + typedef typename _Base_type::value_type value_type; + typedef typename _Base_type::pointer pointer; + typedef typename _Base_type::const_pointer const_pointer; + typedef typename _Base_type::size_type size_type; + typedef typename _Base_type::difference_type difference_type; + // C++11 allocators do not define reference or const_reference + typedef value_type& reference; + typedef const value_type& const_reference; + using _Base_type::allocate; + using _Base_type::deallocate; + using _Base_type::construct; + using _Base_type::destroy; + using _Base_type::max_size; + + private: + template + using __is_custom_pointer + = std::__and_, + std::__not_>>; + + public: + // overload construct for non-standard pointer types + template + [[__gnu__::__always_inline__]] + static _GLIBCXX14_CONSTEXPR + std::__enable_if_t<__is_custom_pointer<_Ptr>::value> + construct(_Alloc& __a, _Ptr __p, _Args&&... __args) + noexcept(noexcept(_Base_type::construct(__a, std::__to_address(__p), + std::forward<_Args>(__args)...))) + { + _Base_type::construct(__a, std::__to_address(__p), + std::forward<_Args>(__args)...); + } + + // overload destroy for non-standard pointer types + template + [[__gnu__::__always_inline__]] + static _GLIBCXX14_CONSTEXPR + std::__enable_if_t<__is_custom_pointer<_Ptr>::value> + destroy(_Alloc& __a, _Ptr __p) + noexcept(noexcept(_Base_type::destroy(__a, std::__to_address(__p)))) + { _Base_type::destroy(__a, std::__to_address(__p)); } + + [[__gnu__::__always_inline__]] + static constexpr _Alloc _S_select_on_copy(const _Alloc& __a) + { return _Base_type::select_on_container_copy_construction(__a); } + + [[__gnu__::__always_inline__]] + static _GLIBCXX14_CONSTEXPR void _S_on_swap(_Alloc& __a, _Alloc& __b) + { std::__alloc_on_swap(__a, __b); } + + [[__gnu__::__always_inline__]] + static constexpr bool _S_propagate_on_copy_assign() + { return _Base_type::propagate_on_container_copy_assignment::value; } + + [[__gnu__::__always_inline__]] + static constexpr bool _S_propagate_on_move_assign() + { return _Base_type::propagate_on_container_move_assignment::value; } + + [[__gnu__::__always_inline__]] + static constexpr bool _S_propagate_on_swap() + { return _Base_type::propagate_on_container_swap::value; } + + [[__gnu__::__always_inline__]] + static constexpr bool _S_always_equal() + { return _Base_type::is_always_equal::value; } + + __attribute__((__always_inline__)) + static constexpr bool _S_nothrow_move() + { return _S_propagate_on_move_assign() || _S_always_equal(); } + + template + struct rebind + { typedef typename _Base_type::template rebind_alloc<_Tp> other; }; +#else // ! C++11 + + typedef typename _Alloc::pointer pointer; + typedef typename _Alloc::const_pointer const_pointer; + typedef typename _Alloc::value_type value_type; + typedef typename _Alloc::reference reference; + typedef typename _Alloc::const_reference const_reference; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + + __attribute__((__always_inline__)) _GLIBCXX_NODISCARD + static pointer + allocate(_Alloc& __a, size_type __n) + { return __a.allocate(__n); } + + template + __attribute__((__always_inline__)) _GLIBCXX_NODISCARD + static pointer + allocate(_Alloc& __a, size_type __n, _Hint __hint) + { return __a.allocate(__n, __hint); } + + __attribute__((__always_inline__)) + static void deallocate(_Alloc& __a, pointer __p, size_type __n) + { __a.deallocate(__p, __n); } + + template + __attribute__((__always_inline__)) + static void construct(_Alloc& __a, pointer __p, const _Tp& __arg) + { __a.construct(__p, __arg); } + + __attribute__((__always_inline__)) + static void destroy(_Alloc& __a, pointer __p) + { __a.destroy(__p); } + + __attribute__((__always_inline__)) + static size_type max_size(const _Alloc& __a) + { return __a.max_size(); } + + __attribute__((__always_inline__)) + static const _Alloc& _S_select_on_copy(const _Alloc& __a) { return __a; } + + __attribute__((__always_inline__)) + static void _S_on_swap(_Alloc& __a, _Alloc& __b) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 431. Swapping containers with unequal allocators. + std::__alloc_swap<_Alloc>::_S_do_it(__a, __b); + } + + template + struct rebind + { typedef typename _Alloc::template rebind<_Tp>::other other; }; +#endif // C++11 + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace __gnu_cxx + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@alloc_traits.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@alloc_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4673e98201841ff37bcfb5cbb30dfc363d9895da GIT binary patch literal 18275 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 E0EH=Xu>b%7 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@atomicity.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@atomicity.h new file mode 100644 index 0000000..98f745c --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@atomicity.h @@ -0,0 +1,129 @@ +// Support for atomic operations -*- C++ -*- + +// Copyright (C) 2004-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file ext/atomicity.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _GLIBCXX_ATOMICITY_H +#define _GLIBCXX_ATOMICITY_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include +#include +#if __has_include() +# include +#endif + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + __attribute__((__always_inline__)) + inline bool + __is_single_threaded() _GLIBCXX_NOTHROW + { +#ifndef __GTHREADS + return true; +#elif __has_include() + return ::__libc_single_threaded; +#else + return !__gthread_active_p(); +#endif + } + + // Functions for portable atomic access. + // To abstract locking primitives across all thread policies, use: + // __exchange_and_add_dispatch + // __atomic_add_dispatch +#ifdef _GLIBCXX_ATOMIC_BUILTINS + inline _Atomic_word + __attribute__((__always_inline__)) + __exchange_and_add(volatile _Atomic_word* __mem, int __val) + { return __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); } + + inline void + __attribute__((__always_inline__)) + __atomic_add(volatile _Atomic_word* __mem, int __val) + { __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); } +#else + _Atomic_word + __exchange_and_add(volatile _Atomic_word*, int) _GLIBCXX_NOTHROW; + + void + __atomic_add(volatile _Atomic_word*, int) _GLIBCXX_NOTHROW; +#endif + + inline _Atomic_word + __attribute__((__always_inline__)) + __exchange_and_add_single(_Atomic_word* __mem, int __val) + { + _Atomic_word __result = *__mem; + *__mem += __val; + return __result; + } + + inline void + __attribute__((__always_inline__)) + __atomic_add_single(_Atomic_word* __mem, int __val) + { *__mem += __val; } + + inline _Atomic_word + __attribute__ ((__always_inline__)) + __exchange_and_add_dispatch(_Atomic_word* __mem, int __val) + { + if (__is_single_threaded()) + return __exchange_and_add_single(__mem, __val); + else + return __exchange_and_add(__mem, __val); + } + + inline void + __attribute__ ((__always_inline__)) + __atomic_add_dispatch(_Atomic_word* __mem, int __val) + { + if (__is_single_threaded()) + __atomic_add_single(__mem, __val); + else + __atomic_add(__mem, __val); + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +// Even if the CPU doesn't need a memory barrier, we need to ensure +// that the compiler doesn't reorder memory accesses across the +// barriers. +#ifndef _GLIBCXX_READ_MEM_BARRIER +#define _GLIBCXX_READ_MEM_BARRIER __atomic_thread_fence (__ATOMIC_ACQUIRE) +#endif +#ifndef _GLIBCXX_WRITE_MEM_BARRIER +#define _GLIBCXX_WRITE_MEM_BARRIER __atomic_thread_fence (__ATOMIC_RELEASE) +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@atomicity.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@atomicity.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c1a5b232065fec860fb21c18a0f98c641030c2ac GIT binary patch literal 14208 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@concurrence.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@concurrence.h new file mode 100644 index 0000000..2c3a893 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@concurrence.h @@ -0,0 +1,322 @@ +// Support for concurrent programing -*- C++ -*- + +// Copyright (C) 2003-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file ext/concurrence.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _CONCURRENCE_H +#define _CONCURRENCE_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include +#include +#include +#include + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Available locking policies: + // _S_single single-threaded code that doesn't need to be locked. + // _S_mutex multi-threaded code that requires additional support + // from gthr.h or abstraction layers in concurrence.h. + // _S_atomic multi-threaded code using atomic operations. + enum _Lock_policy { _S_single, _S_mutex, _S_atomic }; + + // Compile time constant that indicates prefered locking policy in + // the current configuration. + _GLIBCXX17_INLINE const _Lock_policy __default_lock_policy = +#ifndef __GTHREADS + _S_single; +#elif defined _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY + _S_atomic; +#else + _S_mutex; +#endif + + // NB: As this is used in libsupc++, need to only depend on + // exception. No stdexception classes, no use of std::string. + class __concurrence_lock_error : public std::exception + { + public: + virtual char const* + what() const throw() + { return "__gnu_cxx::__concurrence_lock_error"; } + }; + + class __concurrence_unlock_error : public std::exception + { + public: + virtual char const* + what() const throw() + { return "__gnu_cxx::__concurrence_unlock_error"; } + }; + + class __concurrence_broadcast_error : public std::exception + { + public: + virtual char const* + what() const throw() + { return "__gnu_cxx::__concurrence_broadcast_error"; } + }; + + class __concurrence_wait_error : public std::exception + { + public: + virtual char const* + what() const throw() + { return "__gnu_cxx::__concurrence_wait_error"; } + }; + + // Substitute for concurrence_error object in the case of -fno-exceptions. + inline void + __throw_concurrence_lock_error() + { _GLIBCXX_THROW_OR_ABORT(__concurrence_lock_error()); } + + inline void + __throw_concurrence_unlock_error() + { _GLIBCXX_THROW_OR_ABORT(__concurrence_unlock_error()); } + +#ifdef __GTHREAD_HAS_COND + inline void + __throw_concurrence_broadcast_error() + { _GLIBCXX_THROW_OR_ABORT(__concurrence_broadcast_error()); } + + inline void + __throw_concurrence_wait_error() + { _GLIBCXX_THROW_OR_ABORT(__concurrence_wait_error()); } +#endif + + class __mutex + { + private: +#if __GTHREADS && defined __GTHREAD_MUTEX_INIT + __gthread_mutex_t _M_mutex = __GTHREAD_MUTEX_INIT; +#else + __gthread_mutex_t _M_mutex; +#endif + + __mutex(const __mutex&); + __mutex& operator=(const __mutex&); + + public: + __mutex() + { +#if __GTHREADS && ! defined __GTHREAD_MUTEX_INIT + if (__gthread_active_p()) + __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex); +#endif + } + +#if __GTHREADS && ! defined __GTHREAD_MUTEX_INIT + ~__mutex() + { + if (__gthread_active_p()) + __gthread_mutex_destroy(&_M_mutex); + } +#endif + + void lock() + { +#if __GTHREADS + if (__gthread_active_p()) + { + if (__gthread_mutex_lock(&_M_mutex) != 0) + __throw_concurrence_lock_error(); + } +#endif + } + + void unlock() + { +#if __GTHREADS + if (__gthread_active_p()) + { + if (__gthread_mutex_unlock(&_M_mutex) != 0) + __throw_concurrence_unlock_error(); + } +#endif + } + + __gthread_mutex_t* gthread_mutex(void) + { return &_M_mutex; } + }; + + class __recursive_mutex + { + private: +#if __GTHREADS && defined __GTHREAD_RECURSIVE_MUTEX_INIT + __gthread_recursive_mutex_t _M_mutex = __GTHREAD_RECURSIVE_MUTEX_INIT; +#else + __gthread_recursive_mutex_t _M_mutex; +#endif + + __recursive_mutex(const __recursive_mutex&); + __recursive_mutex& operator=(const __recursive_mutex&); + + public: + __recursive_mutex() + { +#if __GTHREADS && ! defined __GTHREAD_RECURSIVE_MUTEX_INIT + if (__gthread_active_p()) + __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex); +#endif + } + +#if __GTHREADS && ! defined __GTHREAD_RECURSIVE_MUTEX_INIT + ~__recursive_mutex() + { + if (__gthread_active_p()) + __gthread_recursive_mutex_destroy(&_M_mutex); + } +#endif + + void lock() + { +#if __GTHREADS + if (__gthread_active_p()) + { + if (__gthread_recursive_mutex_lock(&_M_mutex) != 0) + __throw_concurrence_lock_error(); + } +#endif + } + + void unlock() + { +#if __GTHREADS + if (__gthread_active_p()) + { + if (__gthread_recursive_mutex_unlock(&_M_mutex) != 0) + __throw_concurrence_unlock_error(); + } +#endif + } + + __gthread_recursive_mutex_t* gthread_recursive_mutex(void) + { return &_M_mutex; } + }; + + /// Scoped lock idiom. + // Acquire the mutex here with a constructor call, then release with + // the destructor call in accordance with RAII style. + class __scoped_lock + { + public: + typedef __mutex __mutex_type; + + private: + __mutex_type& _M_device; + + __scoped_lock(const __scoped_lock&); + __scoped_lock& operator=(const __scoped_lock&); + + public: + explicit __scoped_lock(__mutex_type& __name) : _M_device(__name) + { _M_device.lock(); } + + ~__scoped_lock() throw() + { _M_device.unlock(); } + }; + +#ifdef __GTHREAD_HAS_COND + class __cond + { + private: +#if __GTHREADS && defined __GTHREAD_COND_INIT + __gthread_cond_t _M_cond = __GTHREAD_COND_INIT; +#else + __gthread_cond_t _M_cond; +#endif + + __cond(const __cond&); + __cond& operator=(const __cond&); + + public: + __cond() + { +#if __GTHREADS && ! defined __GTHREAD_COND_INIT + if (__gthread_active_p()) + __GTHREAD_COND_INIT_FUNCTION(&_M_cond); +#endif + } + +#if __GTHREADS && ! defined __GTHREAD_COND_INIT + ~__cond() + { + if (__gthread_active_p()) + __gthread_cond_destroy(&_M_cond); + } +#endif + + void broadcast() + { +#if __GTHREADS + if (__gthread_active_p()) + { + if (__gthread_cond_broadcast(&_M_cond) != 0) + __throw_concurrence_broadcast_error(); + } +#endif + } + + void wait(__mutex *mutex) + { +#if __GTHREADS + { + if (__gthread_cond_wait(&_M_cond, mutex->gthread_mutex()) != 0) + __throw_concurrence_wait_error(); + } +#endif + } + + void wait_recursive(__recursive_mutex *mutex) + { +#if __GTHREADS + { + if (__gthread_cond_wait_recursive(&_M_cond, + mutex->gthread_recursive_mutex()) + != 0) + __throw_concurrence_wait_error(); + } +#endif + } + }; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#pragma GCC diagnostic pop + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@concurrence.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@concurrence.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..43148f5f029d90ac1cc05a7666ba59e82771fd8a GIT binary patch literal 20787 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. + +/** @file ext/numeric_traits.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _EXT_NUMERIC_TRAITS +#define _EXT_NUMERIC_TRAITS 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Compile time constants for builtin types. + // In C++98 std::numeric_limits member functions are not constant expressions + // (that changed in C++11 with the addition of 'constexpr'). + // Even for C++11, this header is smaller than and can be used + // when only is_signed, digits, min, or max values are needed for integers, + // or is_signed, digits10, max_digits10, or max_exponent10 for floats. + + // Unlike __is_integer (and std::is_integral) this trait is true for + // non-standard built-in integer types such as __int128 and __int20. + template + struct __is_integer_nonstrict + : public std::__is_integer<_Tp> + { + using std::__is_integer<_Tp>::__value; + + // The number of bits in the value representation. + enum { __width = __value ? sizeof(_Tp) * __CHAR_BIT__ : 0 }; + }; + + template + struct __numeric_traits_integer + { +#if __cplusplus >= 201103L + static_assert(__is_integer_nonstrict<_Value>::__value, + "invalid specialization"); +#endif + + // NB: these two are also available in std::numeric_limits as compile + // time constants, but is big and we can avoid including it. + static const bool __is_signed = (_Value)(-1) < 0; + static const int __digits + = __is_integer_nonstrict<_Value>::__width - __is_signed; + + // The initializers must be constants so that __max and __min are too. + static const _Value __max = __is_signed + ? (((((_Value)1 << (__digits - 1)) - 1) << 1) + 1) + : ~(_Value)0; + static const _Value __min = __is_signed ? -__max - 1 : (_Value)0; + }; + + template + const _Value __numeric_traits_integer<_Value>::__min; + + template + const _Value __numeric_traits_integer<_Value>::__max; + + template + const bool __numeric_traits_integer<_Value>::__is_signed; + + template + const int __numeric_traits_integer<_Value>::__digits; + + // Enable __numeric_traits_integer for types where the __is_integer_nonstrict + // primary template doesn't give the right answer. +#define _GLIBCXX_INT_N_TRAITS(T, WIDTH) \ + __extension__ \ + template<> struct __is_integer_nonstrict \ + { \ + enum { __value = 1 }; \ + typedef std::__true_type __type; \ + enum { __width = WIDTH }; \ + }; \ + __extension__ \ + template<> struct __is_integer_nonstrict \ + { \ + enum { __value = 1 }; \ + typedef std::__true_type __type; \ + enum { __width = WIDTH }; \ + }; + + // We need to specify the width for some __intNN types because they + // have padding bits, e.g. the object representation of __int20 has 32 bits, + // but its width (number of bits in the value representation) is only 20. +#if defined __GLIBCXX_TYPE_INT_N_0 && __GLIBCXX_BITSIZE_INT_N_0 % __CHAR_BIT__ + _GLIBCXX_INT_N_TRAITS(__GLIBCXX_TYPE_INT_N_0, __GLIBCXX_BITSIZE_INT_N_0) +#endif +#if defined __GLIBCXX_TYPE_INT_N_1 && __GLIBCXX_BITSIZE_INT_N_1 % __CHAR_BIT__ + _GLIBCXX_INT_N_TRAITS(__GLIBCXX_TYPE_INT_N_1, __GLIBCXX_BITSIZE_INT_N_1) +#endif +#if defined __GLIBCXX_TYPE_INT_N_2 && __GLIBCXX_BITSIZE_INT_N_2 % __CHAR_BIT__ + _GLIBCXX_INT_N_TRAITS(__GLIBCXX_TYPE_INT_N_2, __GLIBCXX_BITSIZE_INT_N_2) +#endif +#if defined __GLIBCXX_TYPE_INT_N_3 && __GLIBCXX_BITSIZE_INT_N_3 % __CHAR_BIT__ + _GLIBCXX_INT_N_TRAITS(__GLIBCXX_TYPE_INT_N_3, __GLIBCXX_BITSIZE_INT_N_3) +#endif + +#if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__ + // In strict modes __is_integer<__int128> is false, + // but we still want to define __numeric_traits_integer<__int128>. + _GLIBCXX_INT_N_TRAITS(__int128, 128) +#endif + +#undef _GLIBCXX_INT_N_TRAITS + +#if __cplusplus >= 201103L + /// Convenience alias for __numeric_traits. + template + using __int_traits = __numeric_traits_integer<_Tp>; +#endif + +#define __glibcxx_floating(_Tp, _Fval, _Dval, _LDval) \ + (std::__are_same<_Tp, float>::__value ? _Fval \ + : std::__are_same<_Tp, double>::__value ? _Dval : _LDval) + +#define __glibcxx_max_digits10(_Tp) \ + (2 + __glibcxx_floating(_Tp, __FLT_MANT_DIG__, __DBL_MANT_DIG__, \ + __LDBL_MANT_DIG__) * 643L / 2136) + +#define __glibcxx_digits10(_Tp) \ + __glibcxx_floating(_Tp, __FLT_DIG__, __DBL_DIG__, __LDBL_DIG__) + +#define __glibcxx_max_exponent10(_Tp) \ + __glibcxx_floating(_Tp, __FLT_MAX_10_EXP__, __DBL_MAX_10_EXP__, \ + __LDBL_MAX_10_EXP__) + + // N.B. this only supports float, double and long double (no __float128 etc.) + template + struct __numeric_traits_floating + { + // Only floating point types. See N1822. + static const int __max_digits10 = __glibcxx_max_digits10(_Value); + + // See above comment... + static const bool __is_signed = true; + static const int __digits10 = __glibcxx_digits10(_Value); + static const int __max_exponent10 = __glibcxx_max_exponent10(_Value); + }; + + template + const int __numeric_traits_floating<_Value>::__max_digits10; + + template + const bool __numeric_traits_floating<_Value>::__is_signed; + + template + const int __numeric_traits_floating<_Value>::__digits10; + + template + const int __numeric_traits_floating<_Value>::__max_exponent10; + +#undef __glibcxx_floating +#undef __glibcxx_max_digits10 +#undef __glibcxx_digits10 +#undef __glibcxx_max_exponent10 + + template + struct __numeric_traits + : public __numeric_traits_integer<_Value> + { }; + + template<> + struct __numeric_traits + : public __numeric_traits_floating + { }; + + template<> + struct __numeric_traits + : public __numeric_traits_floating + { }; + + template<> + struct __numeric_traits + : public __numeric_traits_floating + { }; + +#ifdef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT +# if defined __LONG_DOUBLE_IEEE128__ + // long double is __ieee128, define traits for __ibm128 + template<> + struct __numeric_traits_floating<__ibm128> + { + static const int __max_digits10 = 33; + static const bool __is_signed = true; + static const int __digits10 = 31; + static const int __max_exponent10 = 308; + }; + template<> + struct __numeric_traits<__ibm128> + : public __numeric_traits_floating<__ibm128> + { }; +# elif defined __LONG_DOUBLE_IBM128__ + // long double is __ibm128, define traits for __ieee128 + template<> + struct __numeric_traits_floating<__ieee128> + { + static const int __max_digits10 = 36; + static const bool __is_signed = true; + static const int __digits10 = 33; + static const int __max_exponent10 = 4932; + }; + template<> + struct __numeric_traits<__ieee128> + : public __numeric_traits_floating<__ieee128> + { }; +# endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@numeric_traits.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@numeric_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..580d00e560e9b880d71b18baed9ac98a8275f219 GIT binary patch literal 18353 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 Gho=B$Ohfqq literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@string_conversions.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@string_conversions.h new file mode 100644 index 0000000..a9e478b --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@string_conversions.h @@ -0,0 +1,127 @@ +// String Conversions -*- C++ -*- + +// Copyright (C) 2008-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file ext/string_conversions.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _STRING_CONVERSIONS_H +#define _STRING_CONVERSIONS_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // GNU extensions are currently omitted + +#if __cplusplus < 201103L +# include +#else + +#include +#include +#include +#include +#include +#include +#include + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Helper for all the sto* functions. + template + _Ret + __stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...), + const char* __name, const _CharT* __str, std::size_t* __idx, + _Base... __base) + { + _Ret __ret; + + _CharT* __endptr; + + struct _Save_errno { + _Save_errno() : _M_errno(errno) { errno = 0; } + ~_Save_errno() { if (errno == 0) errno = _M_errno; } + int _M_errno; + } const __save_errno; + + struct _Range_chk { + static bool + _S_chk(_TRet, std::false_type) { return false; } + + static bool + _S_chk(_TRet __val, std::true_type) // only called when _Ret is int + { + return __val < _TRet(__numeric_traits::__min) + || __val > _TRet(__numeric_traits::__max); + } + }; + + const _TRet __tmp = __convf(__str, &__endptr, __base...); + + if (__endptr == __str) + std::__throw_invalid_argument(__name); + else if (errno == ERANGE + || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{})) + std::__throw_out_of_range(__name); + else + __ret = __tmp; + + if (__idx) + *__idx = __endptr - __str; + + return __ret; + } + + // Helper for the to_string / to_wstring functions. + template + _String + __to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*, + __builtin_va_list), std::size_t __n, + const _CharT* __fmt, ...) + { + // XXX Eventually the result should be constructed in-place in + // the __cxx11 string, likely with the help of internal hooks. + _CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __n)); + + __builtin_va_list __args; + __builtin_va_start(__args, __fmt); + + const int __len = __convf(__s, __n, __fmt, __args); + + __builtin_va_end(__args); + + return _String(__s, __s + __len); + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // C++11 + +#endif // _STRING_CONVERSIONS_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@string_conversions.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@string_conversions.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..490638c0ea686a1c631e0ecae935e4bc3c85546a GIT binary patch literal 17853 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 JmN-5hMgY3@gqZ*U literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@type_traits.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@type_traits.h new file mode 100644 index 0000000..0615552 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@type_traits.h @@ -0,0 +1,280 @@ +// -*- C++ -*- + +// Copyright (C) 2005-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file ext/type_traits.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _EXT_TYPE_TRAITS +#define _EXT_TYPE_TRAITS 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + +extern "C++" { + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Define a nested type if some predicate holds. + template + struct __enable_if + { }; + + template + struct __enable_if + { typedef _Tp __type; }; + + + // Conditional expression for types. If true, first, if false, second. + template + struct __conditional_type + { typedef _Iftrue __type; }; + + template + struct __conditional_type + { typedef _Iffalse __type; }; + + + // Given an integral builtin type, return the corresponding unsigned type. + template + struct __add_unsigned + { + private: + typedef __enable_if::__value, _Tp> __if_type; + + public: + typedef typename __if_type::__type __type; + }; + + template<> + struct __add_unsigned + { typedef unsigned char __type; }; + + template<> + struct __add_unsigned + { typedef unsigned char __type; }; + + template<> + struct __add_unsigned + { typedef unsigned short __type; }; + + template<> + struct __add_unsigned + { typedef unsigned int __type; }; + + template<> + struct __add_unsigned + { typedef unsigned long __type; }; + + template<> + struct __add_unsigned + { typedef unsigned long long __type; }; + + // Declare but don't define. + template<> + struct __add_unsigned; + + template<> + struct __add_unsigned; + + + // Given an integral builtin type, return the corresponding signed type. + template + struct __remove_unsigned + { + private: + typedef __enable_if::__value, _Tp> __if_type; + + public: + typedef typename __if_type::__type __type; + }; + + template<> + struct __remove_unsigned + { typedef signed char __type; }; + + template<> + struct __remove_unsigned + { typedef signed char __type; }; + + template<> + struct __remove_unsigned + { typedef short __type; }; + + template<> + struct __remove_unsigned + { typedef int __type; }; + + template<> + struct __remove_unsigned + { typedef long __type; }; + + template<> + struct __remove_unsigned + { typedef long long __type; }; + + // Declare but don't define. + template<> + struct __remove_unsigned; + + template<> + struct __remove_unsigned; + + + // For use in string and vstring. + template + _GLIBCXX_CONSTEXPR + inline bool + __is_null_pointer(_Type* __ptr) + { return __ptr == 0; } + + template + _GLIBCXX_CONSTEXPR + inline bool + __is_null_pointer(_Type) + { return false; } + +#if __cplusplus >= 201103L + constexpr bool + __is_null_pointer(std::nullptr_t) + { return true; } +#endif + + // For arithmetic promotions in and + + template::__value> + struct __promote + { typedef double __type; }; + + // No nested __type member for non-integer non-floating point types, + // allows this type to be used for SFINAE to constrain overloads in + // and to only the intended types. + template + struct __promote<_Tp, false> + { }; + + template<> + struct __promote + { typedef long double __type; }; + + template<> + struct __promote + { typedef double __type; }; + + template<> + struct __promote + { typedef float __type; }; + +#ifdef __STDCPP_FLOAT16_T__ + template<> + struct __promote<_Float16> + { typedef _Float16 __type; }; +#endif + +#ifdef __STDCPP_FLOAT32_T__ + template<> + struct __promote<_Float32> + { typedef _Float32 __type; }; +#endif + +#ifdef __STDCPP_FLOAT64_T__ + template<> + struct __promote<_Float64> + { typedef _Float64 __type; }; +#endif + +#ifdef __STDCPP_FLOAT128_T__ + template<> + struct __promote<_Float128> + { typedef _Float128 __type; }; +#endif + +#ifdef __STDCPP_BFLOAT16_T__ + template<> + struct __promote<__gnu_cxx::__bfloat16_t> + { typedef __gnu_cxx::__bfloat16_t __type; }; +#endif + +#if __cpp_fold_expressions + + template + using __promoted_t = decltype((typename __promote<_Tp>::__type(0) + ...)); + + // Deducing the promoted type is done by __promoted_t<_Tp...>, + // then __promote is used to provide the nested __type member. + template + using __promote_2 = __promote<__promoted_t<_Tp, _Up>>; + + template + using __promote_3 = __promote<__promoted_t<_Tp, _Up, _Vp>>; + + template + using __promote_4 = __promote<__promoted_t<_Tp, _Up, _Vp, _Wp>>; + +#else + + template::__type, + typename _Up2 = typename __promote<_Up>::__type> + struct __promote_2 + { + typedef __typeof__(_Tp2() + _Up2()) __type; + }; + + template::__type, + typename _Up2 = typename __promote<_Up>::__type, + typename _Vp2 = typename __promote<_Vp>::__type> + struct __promote_3 + { + typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type; + }; + + template::__type, + typename _Up2 = typename __promote<_Up>::__type, + typename _Vp2 = typename __promote<_Vp>::__type, + typename _Wp2 = typename __promote<_Wp>::__type> + struct __promote_4 + { + typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type; + }; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +} // extern "C++" + +#pragma GCC diagnostic pop + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@type_traits.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ext@type_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ce71639b3a819a3ca158e4d73bf1ee88396af620 GIT binary patch literal 18829 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 hFaraFf- -*- C++ -*- + +// Copyright (C) 2014-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/filesystem + * This is a Standard C++ Library header. + * @ingroup filesystem + */ + +#ifndef _GLIBCXX_FILESYSTEM +#define _GLIBCXX_FILESYSTEM 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#define __glibcxx_want_filesystem +#include + +#ifdef __cpp_lib_filesystem // C++ >= 17 && HOSTED + +/** + * @defgroup filesystem File System + * + * Utilities for performing operations on file systems and their components, + * such as paths, regular files, and directories. + * + * @since C++17 + */ + +#include +#include +#include +#include + +#endif // __cpp_lib_filesystem + +#endif // _GLIBCXX_FILESYSTEM diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@filesystem.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@filesystem.blob new file mode 100644 index 0000000000000000000000000000000000000000..18a3b81e4dccfb44444ca529fe5a87beb5ac98db GIT binary patch literal 11773 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 CZqxt( literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@initializer_list b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@initializer_list new file mode 100644 index 0000000..e33f75c --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@initializer_list @@ -0,0 +1,107 @@ +// std::initializer_list support -*- C++ -*- + +// Copyright (C) 2008-2025 Free Software Foundation, Inc. +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file initializer_list + * This is a Standard C++ Library header. + */ + +#ifndef _INITIALIZER_LIST +#define _INITIALIZER_LIST + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus < 201103L +# include +#else // C++0x + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ + /// initializer_list + template + class initializer_list + { + public: + typedef _E value_type; + typedef const _E& reference; + typedef const _E& const_reference; + typedef size_t size_type; + typedef const _E* iterator; + typedef const _E* const_iterator; + + private: + iterator _M_array; + size_type _M_len; + + // The compiler can call a private constructor. + constexpr initializer_list(const_iterator __a, size_type __l) + : _M_array(__a), _M_len(__l) { } + + public: + constexpr initializer_list() noexcept + : _M_array(0), _M_len(0) { } + + // Number of elements. + constexpr size_type + size() const noexcept { return _M_len; } + + // First element. + constexpr const_iterator + begin() const noexcept { return _M_array; } + + // One past the last element. + constexpr const_iterator + end() const noexcept { return begin() + size(); } + }; + + /** + * @brief Return an iterator pointing to the first element of + * the initializer_list. + * @param __ils Initializer list. + * @relates initializer_list + */ + template + constexpr const _Tp* + begin(initializer_list<_Tp> __ils) noexcept + { return __ils.begin(); } + + /** + * @brief Return an iterator pointing to one past the last element + * of the initializer_list. + * @param __ils Initializer list. + * @relates initializer_list + */ + template + constexpr const _Tp* + end(initializer_list<_Tp> __ils) noexcept + { return __ils.end(); } +} + +#endif // C++11 + +#endif // _INITIALIZER_LIST diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@initializer_list.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@initializer_list.blob new file mode 100644 index 0000000000000000000000000000000000000000..e96e36265f3a98a6106614f2daf2b97d9ee07f45 GIT binary patch literal 15872 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iomanip b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iomanip new file mode 100644 index 0000000..afa3698 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iomanip @@ -0,0 +1,552 @@ +// Standard stream manipulators -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/iomanip + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 27.6.3 Standard manipulators +// + +#ifndef _GLIBCXX_IOMANIP +#define _GLIBCXX_IOMANIP 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" + +#include // iostreams + +#include +#include +#include + +#define __glibcxx_want_quoted_string_io +#include + +#if __cplusplus >= 201103L +#include +#if __cplusplus > 201103L +#include +#endif +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // [27.6.3] standard manipulators + // Also see DR 183. + + struct _Resetiosflags { ios_base::fmtflags _M_mask; }; + + /** + * @brief Manipulator for @c setf. + * @param __mask A format flags mask. + * + * Sent to a stream object, this manipulator resets the specified flags, + * via @e stream.setf(0,__mask). + */ + inline _Resetiosflags + resetiosflags(ios_base::fmtflags __mask) + { return { __mask }; } + + template + inline basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, _Resetiosflags __f) + { + __is.setf(ios_base::fmtflags(0), __f._M_mask); + return __is; + } + + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, _Resetiosflags __f) + { + __os.setf(ios_base::fmtflags(0), __f._M_mask); + return __os; + } + + + struct _Setiosflags { ios_base::fmtflags _M_mask; }; + + /** + * @brief Manipulator for @c setf. + * @param __mask A format flags mask. + * + * Sent to a stream object, this manipulator sets the format flags + * to @a __mask. + */ + inline _Setiosflags + setiosflags(ios_base::fmtflags __mask) + { return { __mask }; } + + template + inline basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, _Setiosflags __f) + { + __is.setf(__f._M_mask); + return __is; + } + + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, _Setiosflags __f) + { + __os.setf(__f._M_mask); + return __os; + } + + + struct _Setbase { int _M_base; }; + + /** + * @brief Manipulator for @c setf. + * @param __base A numeric base. + * + * Sent to a stream object, this manipulator changes the + * @c ios_base::basefield flags to @c oct, @c dec, or @c hex when @a base + * is 8, 10, or 16, accordingly, and to 0 if @a __base is any other value. + */ + inline _Setbase + setbase(int __base) + { return { __base }; } + + template + inline basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, _Setbase __f) + { + __is.setf(__f._M_base == 8 ? ios_base::oct : + __f._M_base == 10 ? ios_base::dec : + __f._M_base == 16 ? ios_base::hex : + ios_base::fmtflags(0), ios_base::basefield); + return __is; + } + + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, _Setbase __f) + { + __os.setf(__f._M_base == 8 ? ios_base::oct : + __f._M_base == 10 ? ios_base::dec : + __f._M_base == 16 ? ios_base::hex : + ios_base::fmtflags(0), ios_base::basefield); + return __os; + } + + + template + struct _Setfill { _CharT _M_c; }; + + /** + * @brief Manipulator for @c fill. + * @param __c The new fill character. + * + * Sent to a stream object, this manipulator calls @c fill(__c) for that + * object. + */ + template + inline _Setfill<_CharT> + setfill(_CharT __c) + { return { __c }; } + + template + __attribute__((__deprecated__("'std::setfill' should only be used with " + "output streams"))) + inline basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, _Setfill<_CharT> __f) + { + __is.fill(__f._M_c); + return __is; + } + + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, _Setfill<_CharT> __f) + { + __os.fill(__f._M_c); + return __os; + } + + + struct _Setprecision { int _M_n; }; + + /** + * @brief Manipulator for @c precision. + * @param __n The new precision. + * + * Sent to a stream object, this manipulator calls @c precision(__n) for + * that object. + */ + inline _Setprecision + setprecision(int __n) + { return { __n }; } + + template + inline basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, _Setprecision __f) + { + __is.precision(__f._M_n); + return __is; + } + + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, _Setprecision __f) + { + __os.precision(__f._M_n); + return __os; + } + + + struct _Setw { int _M_n; }; + + /** + * @brief Manipulator for @c width. + * @param __n The new width. + * + * Sent to a stream object, this manipulator calls @c width(__n) for + * that object. + */ + inline _Setw + setw(int __n) + { return { __n }; } + + template + inline basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, _Setw __f) + { + __is.width(__f._M_n); + return __is; + } + + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f) + { + __os.width(__f._M_n); + return __os; + } + +#if __cplusplus >= 201103L + + template + struct _Get_money { _MoneyT& _M_mon; bool _M_intl; }; + + /** + * @brief Extended manipulator for extracting money. + * @param __mon Either long double or a specialization of @c basic_string. + * @param __intl A bool indicating whether international format + * is to be used. + * + * Sent to a stream object, this manipulator extracts @a __mon. + */ + template + inline _Get_money<_MoneyT> + get_money(_MoneyT& __mon, bool __intl = false) + { return { __mon, __intl }; } + + template + basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, _Get_money<_MoneyT> __f) + { + typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + typedef istreambuf_iterator<_CharT, _Traits> _Iter; + typedef money_get<_CharT, _Iter> _MoneyGet; + + const _MoneyGet& __mg = use_facet<_MoneyGet>(__is.getloc()); + __mg.get(_Iter(__is.rdbuf()), _Iter(), __f._M_intl, + __is, __err, __f._M_mon); + } + __catch(__cxxabiv1::__forced_unwind&) + { + __is._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __is._M_setstate(ios_base::badbit); } + if (__err) + __is.setstate(__err); + } + return __is; + } + + + template + struct _Put_money { const _MoneyT& _M_mon; bool _M_intl; }; + + /** + * @brief Extended manipulator for inserting money. + * @param __mon Either long double or a specialization of @c basic_string. + * @param __intl A bool indicating whether international format + * is to be used. + * + * Sent to a stream object, this manipulator inserts @a __mon. + */ + template + inline _Put_money<_MoneyT> + put_money(const _MoneyT& __mon, bool __intl = false) + { return { __mon, __intl }; } + + template + basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_money<_MoneyT> __f) + { + typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + typedef ostreambuf_iterator<_CharT, _Traits> _Iter; + typedef money_put<_CharT, _Iter> _MoneyPut; + + const _MoneyPut& __mp = use_facet<_MoneyPut>(__os.getloc()); + if (__mp.put(_Iter(__os.rdbuf()), __f._M_intl, __os, + __os.fill(), __f._M_mon).failed()) + __err |= ios_base::badbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + __os._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __os._M_setstate(ios_base::badbit); } + if (__err) + __os.setstate(__err); + } + return __os; + } + + template + struct _Put_time + { + const std::tm* _M_tmb; + const _CharT* _M_fmt; + }; + + /** + * @brief Extended manipulator for formatting time. + * + * This manipulator uses time_put::put to format time. + * [ext.manip] + * + * @param __tmb struct tm time data to format. + * @param __fmt format string. + */ + template + inline _Put_time<_CharT> + put_time(const std::tm* __tmb, const _CharT* __fmt) + { return { __tmb, __fmt }; } + + template + basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_time<_CharT> __f) + { + typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + typedef ostreambuf_iterator<_CharT, _Traits> _Iter; + typedef time_put<_CharT, _Iter> _TimePut; + + const _CharT* const __fmt_end = __f._M_fmt + + _Traits::length(__f._M_fmt); + + const _TimePut& __mp = use_facet<_TimePut>(__os.getloc()); + if (__mp.put(_Iter(__os.rdbuf()), __os, __os.fill(), + __f._M_tmb, __f._M_fmt, __fmt_end).failed()) + __err |= ios_base::badbit; + } + __catch(__cxxabiv1::__forced_unwind&) + { + __os._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __os._M_setstate(ios_base::badbit); } + if (__err) + __os.setstate(__err); + } + return __os; + } + + template + struct _Get_time + { + std::tm* _M_tmb; + const _CharT* _M_fmt; + }; + + /** + * @brief Extended manipulator for extracting time. + * + * This manipulator uses time_get::get to extract time. + * [ext.manip] + * + * @param __tmb struct to extract the time data to. + * @param __fmt format string. + */ + template + inline _Get_time<_CharT> + get_time(std::tm* __tmb, const _CharT* __fmt) + { return { __tmb, __fmt }; } + + template + basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, _Get_time<_CharT> __f) + { + typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false); + if (__cerb) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + typedef istreambuf_iterator<_CharT, _Traits> _Iter; + typedef time_get<_CharT, _Iter> _TimeGet; + + const _CharT* const __fmt_end = __f._M_fmt + + _Traits::length(__f._M_fmt); + + const _TimeGet& __mg = use_facet<_TimeGet>(__is.getloc()); + __mg.get(_Iter(__is.rdbuf()), _Iter(), __is, + __err, __f._M_tmb, __f._M_fmt, __fmt_end); + } + __catch(__cxxabiv1::__forced_unwind&) + { + __is._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __is._M_setstate(ios_base::badbit); } + if (__err) + __is.setstate(__err); + } + return __is; + } + +#ifdef __cpp_lib_quoted_string_io // C++ >= 14 && HOSTED + + /** + * @brief Manipulator for quoted strings. + * @param __string String to quote. + * @param __delim Character to quote string with. + * @param __escape Escape character to escape itself or quote character. + * @since C++14 + */ + template + inline auto + quoted(const _CharT* __string, + _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) + { + return __detail::_Quoted_string(__string, __delim, + __escape); + } + + template + inline auto + quoted(const basic_string<_CharT, _Traits, _Alloc>& __string, + _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) + { + return __detail::_Quoted_string< + const basic_string<_CharT, _Traits, _Alloc>&, _CharT>( + __string, __delim, __escape); + } + + template + inline auto + quoted(basic_string<_CharT, _Traits, _Alloc>& __string, + _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) + { + return __detail::_Quoted_string< + basic_string<_CharT, _Traits, _Alloc>&, _CharT>( + __string, __delim, __escape); + } + +#if __cplusplus >= 201703L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2785. quoted should work with basic_string_view + template + inline auto + quoted(basic_string_view<_CharT, _Traits> __sv, + _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) + { + return __detail::_Quoted_string< + basic_string_view<_CharT, _Traits>, _CharT>(__sv, __delim, __escape); + } +#endif // C++17 +#endif // __cpp_lib_quoted_string_io + +#endif // __cplusplus >= 201103L + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. + // NB: This syntax is a GNU extension. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template ostream& operator<<(ostream&, _Setfill); + extern template ostream& operator<<(ostream&, _Setiosflags); + extern template ostream& operator<<(ostream&, _Resetiosflags); + extern template ostream& operator<<(ostream&, _Setbase); + extern template ostream& operator<<(ostream&, _Setprecision); + extern template ostream& operator<<(ostream&, _Setw); + extern template istream& operator>>(istream&, _Setfill); + extern template istream& operator>>(istream&, _Setiosflags); + extern template istream& operator>>(istream&, _Resetiosflags); + extern template istream& operator>>(istream&, _Setbase); + extern template istream& operator>>(istream&, _Setprecision); + extern template istream& operator>>(istream&, _Setw); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template wostream& operator<<(wostream&, _Setfill); + extern template wostream& operator<<(wostream&, _Setiosflags); + extern template wostream& operator<<(wostream&, _Resetiosflags); + extern template wostream& operator<<(wostream&, _Setbase); + extern template wostream& operator<<(wostream&, _Setprecision); + extern template wostream& operator<<(wostream&, _Setw); + extern template wistream& operator>>(wistream&, _Setfill); + extern template wistream& operator>>(wistream&, _Setiosflags); + extern template wistream& operator>>(wistream&, _Resetiosflags); + extern template wistream& operator>>(wistream&, _Setbase); + extern template wistream& operator>>(wistream&, _Setprecision); + extern template wistream& operator>>(wistream&, _Setw); +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#pragma GCC diagnostic pop +#endif /* _GLIBCXX_IOMANIP */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iomanip.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iomanip.blob new file mode 100644 index 0000000000000000000000000000000000000000..303d671ce51b6807d94542c378508af78701ff1d GIT binary patch literal 44877 zcmdO5_$PB#_%ahCBZGcvaglyzUUE)pN~(Ucwzj^Zsh*LZp?+q5Zem_$0fT;SUWtBD zVrGhdK~a8IYH~@jeoAqHenw(ZZhl^7av~C|xF{LH)5|C*U|>$pNz6;9%naS~{G#m4 zymZ}^%%arflKi4dTN2#F@b@2@7fUJ&QuQ(z{>5|)U&iJ6q|B0H{luJ{{N(tOqQuOS zVvq(!_5c4>Zbd`fCsW*)={4BsHdeQ`-q zYGQ6uX&M$MA}Ir#T3k|;nU|hco&s_-hM{03NtGq3#pQ_wAQkvr4py8Gv0SetIT?%X zU?qtq`MH_N@#UE*sqxAArFkW(MTCq_ttin4#T35iME6;8Mp1rVKFDMYZ(%A;EK1JL zDhXCy*12e@1TRsZ;P6lYdJt2MX=SP_8~aLMJ#pb*BA0Fe}d9S;el%=|o@ zSq@b4fD8l2DUJ}x%uO{j!5u=SnRz97x|u1dc_o=8l~~oGy9=H}L8>v5D7xyjVw{OC zu{c*ZJvA@2C^K0BfFs;03sOPN6=>N4u3s=zf*TI{1^LC974h(Rz;Hd-zViH{6i@=e zY9o4>LCVbdvdq+S9Q8Y>(gRny7;Zu`3sjjyjRIA=sYS)0dI97Dj97#C1d{YY3NSo@ zWGvV}Nr}ao$?*`=K^ibj1gk1eEy>Eo-kt$9w~9+jlZtgAk&fY!#Nu52)S@Ct%YvYL zAg!UK(li_a26hfSjxa1k@*X_fk&;ER1_2~c;g(|f0XhAHeX5(3SPV|H7)p`c2lh#B zYHof}C30($wC+biPHB2(Ua@|0W_n&?PCPglCYIzEVF*ClMKkL3aJGxU?tx~Lw8Z38 z9Gw6pA0&gzRw9BIn$I)yGE3s&(SkLokxWlXO)5>-2Q>wX!0jNc>cNgq1(yMNsm0jK zPf!BH9eGGLCPVTKeh+~ZVQqJSvNELoiZ4}y9gG^v*jxU{?#j;t^`DBdI1J=BqRK6B z0O&&+L}n(08yqF21v#l$EJSivQf3K$1vqNGl3Y-#Tbznr0eX0YnsVUgUuHhI=EZJ# zK}kkYYGMjF;prw8C4-xl_<}GeGdHt@nD{PA%u7#=PfSjR=6DSIksO>1YFOe=reObP z=9T4VgUf7urh%1$ykD9JD$Ftyb26)Nv|NzffHMknQ;Ule(^HG%b5nDZQj5T8fuQxU z0fP+uz5+EG@=9|-jWT?L0AL@1!l(k2jPOPexOaxdQm_%=dJk>{X_XkH^9~yJN-ZkZ zFG?*g%_)J@S8RQ1IO{8%p$Z;t0QI+vOA_-4*J2RogGZ=9ZFEQvi@2yLNGvK&jn6B^ z9eI#W0z6!h%O$YA#i==|$*8#wYv-i6Bqgy3JbD1{lVDW`@Ag1)eSB_WauK+F3D<_J zScH^anfb*y8eT~0IT=^a2kfQt#LSYkoJ2^UA0t75m4M3x*f2_bd{%Bjd{Svzd`TkM zhZuU0tOjd`6npWIMoN5MeqJWnix@elxFjW67t(2l#{eZMvpBV+v;dMYH`EhoNWt5& z@tGy5MW7}b$O#xuMDiNW^qgE!O6));sBw~$nS>>iBDYZqH5iC-RC-B9k#0(AS|T{F zVzCfX(ZP!ad{rDcQbDC^L1HH1F{#Al?DE8-6#b;kycAqzCb)hD1vtL6ggd}N=@WP3 z04aFDE-y+=D=&hK_QK;Af9A|htcXv{$xP3Kw8Jp+CfHbL{TW|el9-$wpPQMdn^KvV zn46i5)nCY3K+XpjU}X6oHrkwD1Rn2#dkI!>fNcV0a?tpHDRz6nYSMD@6HD@Rlk;

    Ip07wcPWTd4UNE5WQI1`la3JMth&FDl+F`zM8kaSLJJfvd-Y4?NeLT=U}`4b$j zd8wdT0OE%|lJiqilgqG`e_-Rl{s)cjV2*>saw)nC${+)Vppe0rPQk{5YT?A3^n9E> zVD2W?oKa9yp(1cn$0yNN|A? zTy|y(ktJqYaXk810{-eeuQUfdg^j%)hl~s9=A1r0@ZG z5L&om$&N@0!A3(13>-~-uo94gpo|Be;sm#&;tLXs5_3Tg!H7(-4yXsgGZ0u+p}PWF z$H3ZX>aCpkBxt!wpsx*9k2>oK zat=N#ig6a*V8b9m1Tq98%+W(LtvEgfN3$7h6j4PoSS7?#P|um*#C~3CIW)PER?fo4 zt8)|6^D;|7OK{*UNKL)39j#*pb{RB@f#$fdh6yOKfE1!P9gtHBdbs80mtikB&=o>U zWRS%eF$%I2wH;A{J*S`>3LV9X&&(@Mg^bH#n2n?bsu~*PID7?eY=M`GKxY6kOoX@= zJS?XRX~5`$vpdLZ80ie67~Cp=E_eWy*u*rDAS3r+5@a%lGmsm6aQiWGHj?+jPC*P% zV9Sk=vn z0G>F7)4q+PjKL)j_5f1tk%U(vqDPs5OC2O_ zGUVWr2V01~w2)DmL6yhwzfimp_d^jj4oK%tA+fY1U!k}p#mWkzUIWq+K&nS=;+-=R zi$Zi1;zPi>$4((WzPLJhLQ20mF3+49x#8F9=iis5DykUy3&*F~YL=&ws5$?o(?w*UB*PFf%YP zF#LD;Dri{{W@L%W)8GPD0oibLU+XBuJA#&Q+bO7lrh!1ql##rQHwYdua{PS&4TAfO z9DkoNaxs9Ny}FlW@6T%E{~vmISmf4cGyHG8c6g1=(a>C&vlD*rbBNvg@IHQLLnA_q zRCirxaJ^y9DnaHaxpk06=kNTDfog`>zC$$YBhzl{33XCfR|?%>v1`Nd##{^ z02WaQhEOH>5S2&@z#*fc07^oM$t9^p3NSSakR%3WjUJanab{j}s)Dn&wxJ0qgn92-m^KugQ2YONe&)LqAGwwO3%okwR9s|w z8y3PZG#hruNih3ELpa_Yv;Z#_gBvdw%M;s>X|LiD!EyX2J`im}iTB`!~a!!^GEGMA@~QU*a|0$%(eWkj|3_?(Pl z%vdPODAr_%N)ZBOeFg>|5XJPjk+JA+BV);56$i$@I~a@p?trlW-`4zCo?y527aiS8 zT$re-#mAH66Sq&5H{acxxrh>iGLrM*_adhbn z9*zrpJ@cTB##?#fNw}nz)UOyh{=R~i)Grx1{(gYgAf+q%_BzjFyzu{WtI0*F#}7*W zpKjmA^3y8sEG##&9&oAL-<`P+>R{qR1uZv1LYX+Ns9BO|JtU=b|M_}};_nlKDEAXI zwQE6>JCV*MHDA8D@U+n<_WC@id%?k(T2WA>02(BN&%oHkdqUSTKr0;Au3@qPW;sq42x1&LLu!YJ`q zg;DQ+L%K`of14yluyzebiN6}?f?A9sf3+A@{-3tq%B1%FvO7p6v~^mYzu-3G7Y!X~ z0)d1uqPNHdclF# z!!ZTaXJGn&xlwWL!`3?s|C?UE8QNo!_!j0s?+5xD8`;e5pbi8@Oj`xiL;w+<*+xh>uSOM+-Ps zxR9gec&P1>TywQDn6FE|FyG#!Ug8AxH6&U{%sJrlnE1XQxQzkNZ6sA(`*JegFT7v0 z3hG)=9D$=7oLY(@aSzQjAaP9w1uZ_t4weofP~5b$bQ<7|8&Kq;#0|&{1qDY1=t5PH z7gIq!3KFtR252#Gu|i2kDi_33YohG8qWX3GjXddR1j(1FfoXtB;S*2US(UsU@HhAJ8gHL{2T^C z|7zwvd3$Fco(2oa^DSw6lU|C#223C!Np(jCr50lg%K(l5urvKRLLko6I$5-O?F!eF z|8X2oY^EG?vw=BtzgiXB<5DNshsV96peqk+r-Wwf;XB2X_Gk|RKZq~*5a)Dm!31Jy`ybGSgc!66aqQgEsd zFiCwl_uJYFut0#dJ<9SkQy{f4G`jMOt*qjG<3Z+vP7?qH0Eh+;+a#8xYBF$XiGe!D z3=C`_isLV|H3RM=LmM$*b_k=y-w;MUFgt=#;%@|$-OZ@>x0}%hEZ)zk_O~C(KFFx{ z_aKyglu_;PQ3(4#bNB5Bw;JZYgGLv`nYi;CI0j+OV3P7@IU-~J?1UtizLJ@989&Sr_#fD}&D6$Wfe{pyxQVy-h z^E4TxR5%#lu)N^`l`XGX-r{fkmS?7vWT4dId59JkRFbTQ6<9Bx2Cu8w`k(ACKjy%E zXZ1~fX9Snx4w&yyi|XQ%6f3JDXH$NmbK0VZn34Gdg{z zXYdVZ@PKnkDyUCilnR=^NhPUUk4F#Qo;@CYpjnCvO$K5ILA%#8z6oL9sR8v)d_ZYQ zJZJzKoKtFJR>OTSU}gIHWoyb}+o4w8YA)pcLF0 zgy;khX%jgXo(onC8~=vZz=(VpACF@g{N(ZTC)DPNh13ePD8}I3Wki*Cnd36J47n* zz4zU`P*-9bg#pJrXaWR0I->y{odKn<-26Npg{1ua9EJFJ&_P3*3}y~OjDPtUIsWo7 zf}2u*c^NtW@-sRi`YpuFe1I)NggvO~lb@%c;F<|;{e#xnC_vWOfVvoo3gFxf+A9b; zvLsI-KMm9afrK}t7Dh1&QHc<0?yiq5niyfK(z{399pdqE@5mLIsV#0OBfqQj=y$9l`xRS zprEN$ux%)%Lhi6BU?9FkD_^dzzAt6`$Vc!0x{uL~M!dh~!4gyc_RG89SaBOcauU_k zIL2%`cwiGeq`#JtnfG%3lKW@=d+0LQGyOQ!p$wbR{SRxGfkxNig0Kk~6hYX` z7>XclQW8ZFHm`~z2 z;sQl*G?Wx$Q33=dly)EMZen(`1lQL!N+Sflbqa2bFvo z?f&{Q27uWuj9!0R7-PU}XuyNm|98$mU%67q>LoN(z;=VXVqlg+yk~wf2!ltyP-iD= zY&AeKAPkX>k5AM=)es+_q^XdX4>?zd!7D@rG*AX#Qxd=^@Hc=_1mujr?Tk8q+Zhc& z?El+dMDh8S>Lx;+M7xMeL!ROR7p|Z&jJ+It!4bBH;~*r$QdfkfgjMpi{!e&V9T}Cd z-WC>NLiG{aH;;a|p^*zQx{+Wfg3JFhMvlK_(DJ{Ok>l?aX!-y9`Kiwf4o24f7nVEH zXDZab6l=2@Y zh*JK;1W`&hm>^2|4-*^>C5L0+N&#BXpqBqFj5U8-(93_~RYFS#cwq&$2s(U@TK+@F z(NP5_GAjL@h`myP)e~4p|M3m|3qXo8@X$ZYU+D4#Q1SIQic#cm6r&254Ye7}hE`1= zHoP8$mgC@-JYs?+J+&k!KUqT)vOto7PY1jR4?52PD&oP5E&sXNWQzu4_zfREd)RB?nZ!EYxW&Qu))a08@ zj`>Od=Pu$p|HCjy^}lNAS0kf;M>qao@uK>Km)E>S|F4!GN1DvR1Te5LKTE2Ml9{2`2VW|-#jdg(K0AW%`M1DEJ;k77zaZAw3V(5k{=op2aodS5%EJPj>hmd}CJm`!`h3Z;{Im?tFnTCOZ zl>xL&om%FH>9WAS=gVIzhA)1LNNp zjCp@wFjg^wSTP_L0|V3FSByb_Uopn9F#dhVX!rLWqZbR~|Gl3I|EsQV-vsdzNIMKe zjM4b}g3$zQj2MW;z=XLRkp1r~MuWev7;RV>|GsAA`1_hs1k7^z`|Y@nZNHCHNdQ(zwbbf`v1GWE1qBPFFSUpTxHbwdll@ItBhhG76bEt+)J?8 z|6XTQ`g@&GkA?B?4MvW?H^6SX!RYe$2G~tE7`6W10K4f1W5(YbU^m@jjQD$tF@=Tk z?=8lxzqc66SQ!6XpIV`+yE5}EQHj7a546e-C8j~++@Ph@3RVgQrAaxN$qJA%&B_XV z29gd;6s!*1GOn&=NGpIApOBQm!1#9?qt4%LpaA|qhuczPqhp9H_CUJFsPXq6IFRl! zih)=ROqd%0*#ACYwE6ph(SwEY??Xn8zYoD-^N`Wy??Z6dJY>}R`w$#94;eH5J_Lu& z6Gn}{PZ&*D82>(DjQjh9F^h%qe`<_bT%Gd~cTg@!NljCL_V7XHLBTemK~q0`gw9R@ zybzHgDvFDNf${HF#;U(t8C#e@EEy0Bl=lAXDHz_jcqJ|K2UM;z|J}yu_jem(1PkNe zJ&byP_kgp(9>$2jdl-{g82?{#W4m;lIoA|>c&ujB_`4b$9;+F}Kr9AEcn6>T?;1vx zziSu`SQ!7VWwiRcmeCE&s{6Z^v5STA?|Me7zw5zbTNy+CZe>hh0mXye-)*3L^LGcM z#@`*F0QrCAYRJ|Oz9uK4l8Aq43HCGsnq0u1MnGjlMiF|7sAtsqTMteV(rfH@RNYl+ zhD8H7DHW8KAi^GEV|++vZfZbj34?=!04VV58LR%*Gj=gC{;g+}0kOb=5AzKu@EPH4 zV5YwaJjUWG3)PI#u^sJ z{{ajBZ58;J$c#OSl`v}jEdeL75=Jo)i-8f|hhYC(%Bb?U6r9A$7_I)6fs<1iW8L2} za1yIvwE9~C7OP_n`CA80V)cx6f9t_XtdUXUZzDK~+3ffc$+UNwJ$4u5GivF=jQwIxK&#JAu4{b6)E7BTs)yN z1v)eWuVuU$<^Fnu66=5Ox#wBevWIPjl__xZpm7Qs$S6rIvQvPJr-MorCns<&^k&TY z>&;ll#Q4{nkq^WI#qNKYhaja2tVzi9*OyW1uP>tx3*%p3#-P8xpvw3E!^M4%W>j+= z#~z5w7&ZPb11I)njA9@b10#Hw5Gea<{ap@D>?;`E{;psQVqyFr6xTh)-a&c^%rDR} zEfT6JFUFj|UW{c-jDNit`9LhNpPv6PV*F_=ArA5r1Jhq`MyJ2tj6N)kfBhIW{`xT* zu`vFxIiSEA`TM9Vr0EA~^+Byi1SBMX*;!c?r{jJ8E|5h-@{jC78{_nVNeRO*U`)WuWgn*Sp2~hFtz?k>ffw6{>@vj4842T6PB%K%= z{yH)Cu`vE$^w_5Cpvj~k*bDDzUeh8N8K+rHi(p`2n(j0`fQ4~}*Ng}j#{X6?uX_~P z|9gUx$zW@Xt7{qfBtW%Gtx&BJs3fjssdWK2X0_K<-!z{6CY}LYivwEvo7-wY7sA6IK?|S>#Tc6*r=AzpL8kqux6U45?VvE&4b}i;u>;Wpxlk*Fc zwY_rAGydm{2)+E?h~YCN_cFm(*}#XYnAeJ}Rbye?nzglxg>i4zUXZ0L7hjE$eJ?AI zBUlX>HU1hfnt^k%0izg*&A|BobERj&JlRfW#=nM)Hh&F4<@bM~?WW(IW?iYq9>RaW zGJ5^}3a%c%GFpIGpeFivMz6o$!BydJMzg=a8C_Ty|4%MI@4nfyc{+A;c6;rPU}W5F zu^SXqdz|(JurTiR+6#)Qe~xjSjj#VyVa-VIHQt*rGQJmkZ^FR9^ug$Z9Sh?}tB-Ch zjQ>M)wN+MG%LiiBHcexi2_xe)v1uS}(~YLvu`tfCngP<5)g*BxX3?@-l(<6e^;UyY zhYUlsk-46ko^h-K=#x_3*-OHlt0I|J-xCCdobSg zx*5U9c+=u0C>U=!-3nk~yzO-x6pW9jWPKDUwKOEEFotAi1zYf1b;4ahXknmWrBIex zR8pFl1M3e!%8JbVVvKSElCOnB3uOAc zn^EKMZjdwo?q-bpyBpjN{x`M#k)YfvewfYBSS6u`sbj4ATL(r@u1bic_9Z;jcWS77OEFc}B0l@{A!YjQ=;@Tl{jZu}2`x5uo{$csJM*YqXI; z*y2D29WPja>Hm)>6NLq@vcLPoz`(%rA69bwhpoB$zgu2>p>cRs%zxO*XAVaX#|Rci zZxe497RDfxAQu+KD3d4`7RGp&_z)JxOoL1Z7RE^ulQdWu=Ss}gU}60K-I%LYQ=wcH z`%uh1#=O7xz(XUEigA746exi`F8#dx zA{ZI{Ec`$Pl)saI01IP)R{*GhYAD>k&;04BGuZWYdv!-JGIm>ZgY@+{^#rgm_ImY# z^u1oUR$Jxt;SJadHprfPPmU{Owp61FQl-*}r8b&&jBy59c6lEtG@-au1IfEJc8eOa>)K6Gs;o zMsEdg0~W?0g&+eK#wdj-0~W@3gLnrP#!Q(^9TvuZkNyZ2#tAwTY*-j4>P)m@VVuM= zNrZ)QlF=k57RFf~vm#g+XY0(iVPTx3GslL7aW2bT5f;X|Msq>^TM0(CzY>gMER268 z7_I(Ffc*AX1vG~T%D8_u7!CevfLZR0Y=7Os>f9Nv{Q#SRPq`tM^i! z{Rh?ec%Fh)@32)$@Fn%kuZ3RAurPki`dGrk_%rJ#XhiV{BdUWL7})-6LmQp{VS9Q0 zr^`xI9sHKB1>b}BA7h)4 zER0*kwivK5Zk5|=!NPb+?2-Ws<7K(a7A%Y(#6B3XFn*N#2&(ZxTW5tBK{dWGqugI% za1|-aDEC(s%v!_9@plbab}gga-?d<|^^9_V*MnI9!!P$dE~s{3M@b~0^*!KzCnTka zfVwYCjADP87_~r+!M{w59DkV@3qURY*ZWrP=U)?{#`J%S&G96o);aBr|GAESH+otY z`vTJTXN2$KW%|p@DE5~ZT+IkGX8jdrtYcyPpP?|%=;gt6;@Hd3zxNou{@w%EqxTps zKrBcZ?(_EnV-$E;!s71}&^Qi!?2@`k2byS*8x)8EW%yWYW*%s@8;lD&lOJ}73}$+@ zvdRY?oK{(o3R9z?1!LKP0({aOHCTQEjmt1F{gq~v`zsCVko?`ssPlI#xNkk>Zm;|D zg+Ai2+8G>QSQ}m7eb=B?7j&FJhB4=_40xPChLI1%0@?QeoyIodw}Km)A+0Xh?rNsL za*R@c<-p?va*RQL&C*kw`Ok#3*&#E(&ViccUfYvYW}YA-Gq_xyV!S7Y4*eDhaC&!PphAx(hSzM#HwwP z#v<_G&LXizCJacO&&4{6EkON`Z(h6)O%t54>J8HfGht*56AJ@b8EzDA$HEw46#=sH z#;nD2H(6QfVb#{H(QU%W*e%u#($-_tW5>eSYt;+V7RB+8^_cm0FVNQh;)29v(EfuI zP{fLeurc_TmVgf51ubXJ$xH%WwxF%809RS8$HfKbfNFZKY9v1BNT#IHbcJe#S`<;x zp*=Y{sW})D$rTlbmX;P^aTFbp#)AT?;bn@FcK_C+nr> zmFnderR(Q|&#_L)PcGJn=Oum6d~tD!Zc2VdWqN9!K0Mru^)gCwa~K#Hdg9 zhJ`Og_z&B7`d<&aoA*C#@9}@wF7N-aGXws^*6sa=ZPNdL7`n*~zEbQz>}ZAmu#F@C zVQc^Y!#0}zhb>Hp@1y(=+rRN2b~?v@*sAOQ>!FJg{=@e6{D&>}`VTww>OXAx?|;}q zWAKC0{=-hXfu9%0^&d8T^q;|{Aa|j}oG$o4BYYI_zih>WldW>x_5WdwN_fNJf9>+Q zvMbN-JPn@%fKMASFfcPPT8UUmF)~^){8eFMV*G!zhB6h1s2BttusvjU%Bxfa>FfXuX$#2JhWCuj4y;h zjxzTH51S8`{i;W<6ZgJWYz{0rIYb(f|u=W{_ zAyr03jlYc0Ayr03F%X-95z&Nhm?M@0 zstj|Da_v|c^Q`hfm0=;f-v0I-nz&kb4vb!Z9l)(S2Sy7J3p7gN$Y}D{5!|72V)Xj! z1nx4qFnaxU0kgaq!~S}Kn<217i5>@tO)ua`kYZq9JR)>N2h?;u!g9m|90{=A2rLp{ zJE-8BV3^Meoz-DsyqtBpg@y5U*6kJ+#{cEdElr>QmD0r?34dQOdi{L?_RI@L3lIy` zRDH$h@b?v{hxhj#qt4%Vpt-dFPu8X0J+?cc9J@Iey)H&DGG4T}2#U;0PL~2$7%zKW z21O<;tD$%pG|L8V{DGPnd=lWsx*?<3UqfhP-H?&vuOVX%sId+kUuQxLn*Tq^*T#AJ zz`Go*sos^DE0Rji1i;fXh+>10G1&|P)K98(!Chv{(6C1>2-`cf9t@l^kmUf zbL)1@oQyTR)@ZCTVPsq*wg%K@g&l#yv{qxS2@B&oiFKf*MsLIfch{ztT*IDH-g~`| zU}Su6@g9^?J~({{U}5~|^%0a(Ts16b9AFkTz^?DR*Y^lU#_ty2LHd3;{Rm)T{OR=* zq|YyBM*UKmd(h(pKyd)W|MPyWlx<(1^%JXCHfn4%VPxDWwh`3m-(s}Ij)ifn)mAqa z#;rA5J6IV1ZowELV1aiN;k)DDX%VrX<$sD^H{a9xLu^=W{VT|*@mCN$B`L@#24aEM zIS4VT{1pPtrT!IWwE8Oy>Ky(RWwiP$3T8<&y8V>~#m!$CMx(zn;IeJfq^E*BPRmqb zeJSurr)NIst|oBf-O38F1TqsM%%J7L2MwD4ut0;1bHY!kg0I7aFK~wKbYb}`!6@}t z0z8H7&M5WQ9n7j`)c9M?2wJSQiBaS4CJ^ht^SbCc_1Q~3l zN&{FJ%e=}!@mRX_*P|^9j~L=8_5~U9{tAL8Cn`Whfxf~Vqp9a+p-B7tI+w&3o5Sv z@-fQ%_`9D`+w1#s1+TG3=~qULzhA-m=qsZbh{eE!dFU?t z-|vi8f4_rs(GNzBzdyi>*M2a%{QUu5y!L}p>+cUxs{Q+eG2`zK@Zz=KjB0;>Ga7-H zPkR0R4IXUYk(RPe$Wr+a_CWl*n$hd;YH%&On$ZHp0_Ev7j3$5AfSUws8NL3l1vdoN zGkX194`yv;O!>PNymo0Pqr%^vptULgTlOFHVYFPi1~Mp(2yRfV1GzgrzBI2qGY{M| z=TVV^W@g9`H7NY`{wgto))Xi)f?443*ZUg;77Jnov%ukR^S2W`64l8FW`V=s=I?&6 z*nUPZ%Yos)#M+RsWnW6`aU?}+MvcGL;G}5HC5KK z^!Ep25~$tv7m`dG;OX!$4@kvt#)`kc89}2$up^$~rh*R`X5i!FLlr@?MhRw%*xw(F zDo|TM$tHWV{mih06FtJW6a<0j45C%APa(1 z;A@m&9*O$<8@wtKc2XzY*`$QnYsR3zuc0CKnh~^$w*kIP7-G?TMuWfaK~oX`VT-ho z{etcd#I|hs>DCN>exOw%e_t`C{C&k(0`}7@@QSXI|FFerFsr!!z6Y=Ff}LMYmY*In z2K{{q^%G>JYr}uoQd)>bPZx^O`Hin5+e{X?S6T)}5 zLgE5f?-X>nLS`|8g9A8Gt!0e+yOuExY(8XUJ`Fzo0dg_N-}Q`Df7dfMu`vGK%~Y_H4`bHfJ>Wv`AfwFRgP;oc?@>mXzemBW{XGd9 z|A#NuLicxCZV7{o3}`;+?+V7SzbhCMz>ZqMXa!=!SA~Hb#rSt6qt4%z;1US7loQoB z@bn*iktq0}DzN!B;0!;DQRD9{Mia34vlw|mZ1^%!4siws=D#}_Q~vH?EMQ^$yOYu5 z?@rK6^xwUVF@N_mX0RYu#X{|buB!zFY;FOAf&vFNaRpn@few&eiZ-yNxON(#Q{VJp z8(P5SRSTod-xfv}CdR)lj52>)82kRi7Wndl9pB2R^0yT!w`uh}|17S@_jCLrfNG>X3P*LH+A*EoefRIVg z&rbo}K+nMVx0=!7Z#AP66Nm+x)6Du0YXyTm%lx;UQQ>bpqm~Tg-wBK|e`mkeMAQ1*FUbMi+zrd1yA!E|tLdG0$bQChWf!P0HtA9bxWBgmh zsPnf7ob*pZkB5O62TtAt8Z>Je>-*3L22(iPI8uic`UPe?4Q) z-}Q_YOrXsNJb%|SPGW$#b_1ix-wmL|1m9ML$W73$AlX^aol)zrJEI8`<6p=^gc!6e z7{JK#H-M2(hVgGCBj4XhMhPCqzfp{8f1^NcIQV`qv@pPx7p-7Jqc}s4NS%<-%P$58 zn+s#kUl(w&xiIqlbzy9Q2AeCR$X{1*u))TY!08#>p+ni`#-O3W25MqCF;4pH#5e<- z`yj(jGvFi3pj^ZB*N-viuOGO%@6V|A*B@LC!jy4;{26)v`hz<`A&h)~Ll{8|P9hlj{ziaV zQH)%FqrhX?F^p1wW5C4_?3@my)0G&wxOkAb3bqR1L{{O#Lb!^+a2hpI>ip*rl&P)Z^axBO=8zRYOq*gHKc(DtHOmyR6oZ~RZjfWAwSRYc9fQv0qF$iXW;~QRnmEs62IT&}2WJG> z>JmssAg%!_%oz7q7@83v3rEl!prVXbe?`F=L5?xwuN*id$TRBvl?QE&`K!Pv^j87Y zI{B-@$oE$Toai+e`TlBvSz3%-f3?8LUx!iZuMRl*vq8`Gg&ZIb+H=Ri!2wDX9Wou@ z-9sHB9U6a+K$3W;RHqsbD?`oNOcgv8A}oxR zQk6<9jPM1Ch}?miYvNIsP=n(hboeWSS^ysd1EXVQo}S&Z6X-OXt8cQ?4fx|>nv z?{3Dv|FD&~kjiThqs-qupf=He*c?+l@)T8kd>Vt46sY*kYsu>Zc_uF_uM0j62rg&} z6bjT>7~xAbafTI=xkw@90}845uy}CSIo=>X1vR7!Gz!dE7%Ma?%vc!VSNOm)3Mn1u z8;n7JZ$LYlkgcW-Xq~m&j1qrugBxA2jYRMg3fgW3pBBoXq5=w#zh#Vlf6ExBfCA+& zWS7wt_yi{?U|9Y(GRFLE1huICHZeNv@x3fZ3EX5ZH#_@+dwTZ_@FkpkS{Jt zv9bbN46X{nK?ORxj)6-D6jXl=88iMGGM0g@HDrtfv$rsUk`<`o6!q5+)c%D}6yk`@ zvX(M%Y?ft}p~Yr}LIo%`VduMm^n-FC=u8*}At8{*XVlDS0@*$zYeo}%9vI|d=2;4} z)L0m2v&`mVVVuJ0i3d^#v}nEuK$#{88BCoTm> zoxcj85mfk20}@KYh`0!FNf;p)fmRYm@kEKRFh)y7gGxfV(m79bHdQ4F5qhJn%)Hpb{RE){*a$04Mi61`Y#I z{dvUd2)O<{Vsymm?-6hsXS!;1)ry7juF+j97RLX#xfd?0v~~Io8<_>sEXEwhat@59 z9Hw#(jDP<#aQywx0AhV&m*Pn*qXI<(tp^#Dv&LV+ZDEhvLkGt2ni9pH*PODV)x4JMT^+|Jo`mh7!ODt07dLl z?MKmNC$}#H1sx1C+A!ESI55KZ#2BO5zKV zSJlU7<})xb*uk>`A*GB40tS9eU=o@yV0#|0)SvO-v+5bt)Ih=P?dBZ>3Sw^s?;vMW98()_+M&Y=lh~rclkkLFwFRum5JjoE0cu- zp%em!;F8GnHc^mGub#W!WY4VGCTN?PX-k2Z8QJW8<$s!PDR48&mIPy;mpY7J`bKql2{)Y?G{MYev8els4% z2|N>|co--0OqAkboTV|#jE8YH&ul3k#yLE5q<9$N*C9dMncx8$c!QDwZBz#?f!fl9 zX~Ndjlw&mbD+eCckz?fhE63RKAGQD)($th^vi(&Dvw|4e{sw_r;f!p5 z!@;ahMv=drj7koSfBP6k{`P@c`x!<4?gz7uFpB&=0%E~W+JL$mI>iCy#i!+##HZ$^ zFlcB9L4~j@0AHLQ+MFJXV$ z%Zsw1*I}XNhI4A?z}n8qozsEkhVxSA6?hQKBcRjRuzUb5WBC~M{_-(efb#)l(S!wj z4F=fSzx<4HfB8Wk`48J6LqZn69CsO<#V^ZUM$6(?d9I4EFkX|o2Fl{FV+8RgZCa=O zMn;#vjo`H3$SCu-i7^a*mI);7w=t&uZDXupVT7OE4k|AZD;Gh1a~T;>BwlX2+ye^H z%UPFu;OlU~p?Ov7DrkhM6?%R*BqWI%A-NrQ8yu3i}jPx51viopl?{(|5J* zf;^2pK?FZJpG&Jw+IX4AE`eer+tQ=Cjd=8;7Tz>0dm49TF)I^ z1vr4(ZGR0J{r(yknGQ@xMlY*+ouX?hPnSBh;}c zMA4F;Ttf8dW`1%BsK^eE2Wf(~pP2e%`jdDVXT{7);$ehuxdUZ*a61VU0p;LUNFD=+ z0;pg1Nb3=}mH$ZTkrA{B!t`0|vk?p9Z>`^;qcuK2ueF93H$+d;KV%g9`w%*!2|51C z0b?nE+~23*5lz_fplDSBu9zlVB@n3-QYApAH!2u&{#JnNf(k~SzZLN5jY>w5zm?#+ zK>nu4N>y{Km!N7KhFSiqGV=XZWwdc%{2R*1_cs*G>S2`m+r#MP!1(tNqs-q!Al84_ z?m$Q?CMtt{jQa>q#UJH9qGhnpJfB5a7{5q;0i|NtJ%XV41+_21gEEjIp5B^X@DNXL zRxjERPrpLH8VlnDmI+)ej1yTVf`)it8$dzkAUAnGmVE>_c|T@-L~HVXR{9KT^1`+Q z!fOgha&u2Di3bmifYTf(0|}XcGY}JKs+7?WoPi*#&i($w7Oz7xkOHI0Uj^_o5!gCP zL@uGU0^Y=E@plt=HXO2F7kxH-FQeYyy`brqzsDG5{vHF*h974%`Fk8Z8@^*k|Hjm# z9Q#l*G|Wk0eGiMwh=TpnmsX4Mvy08emocqt@R5 zMl&A9zafk+e?!1x5sWT>BfzY7Mz_E1j6pn%f4doj{&q8h&Liw+4Eoy-W*uY<`g;(} zI?5RI_b7-3-9=M&WrCwFQzp|7wcna0l?Cdz!VblNq;y<)5mc4Hhw*2` z%>bwL8FDkw%IjG?vqV@J=Sj^2rF7VCQ>5`#)I^3nzRJWH^OuP+3!2J;z--v~syt)L wUwP1i8u)@_u#u2UQ1DFC@iDsn. + +/** @file include/ios + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 27.4 Iostreams base classes +// + +#ifndef _GLIBCXX_IOS +#define _GLIBCXX_IOS 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // iostreams + +#include +#include // For ios_base::failure +#include // For char_traits, streamoff, streamsize, fpos +#include // For class locale +#include // For ios_base declarations. +#include +#include + +#define __glibcxx_want_ios_noreplace +#include + +#endif /* _GLIBCXX_IOS */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ios.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ios.blob new file mode 100644 index 0000000000000000000000000000000000000000..e2d2a3f517471de179dfd097b23f1a849bf4a1b9 GIT binary patch literal 11886 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iosfwd b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iosfwd new file mode 100644 index 0000000..4decf24 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iosfwd @@ -0,0 +1,260 @@ +// Forward declarations -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/iosfwd + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 27.2 Forward declarations +// + +#ifndef _GLIBCXX_IOSFWD +#define _GLIBCXX_IOSFWD 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // iostreams + +#include +#include // For string forward declarations. +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup io I/O + * + * Nearly all of the I/O classes are parameterized on the type of + * characters they read and write. (The major exception is ios_base at + * the top of the hierarchy.) This is a change from pre-Standard + * streams, which were not templates. + * + * For ease of use and compatibility, all of the basic_* I/O-related + * classes are given typedef names for both of the builtin character + * widths (wide and narrow). The typedefs are the same as the + * pre-Standard names, for example: + * + * @code + * typedef basic_ifstream ifstream; + * @endcode + * + * Because properly forward-declaring these classes can be difficult, you + * should not do it yourself. Instead, include the <iosfwd> + * header, which contains only declarations of all the I/O classes as + * well as the typedefs. Trying to forward-declare the typedefs + * themselves (e.g., class ostream;) is not valid ISO C++. + * + * For more specific declarations, see + * https://gcc.gnu.org/onlinedocs/libstdc++/manual/io.html#std.io.objects + * + * @{ + */ + class ios_base; + + template > + class basic_ios; + + template > + class basic_streambuf; + + template > + class basic_istream; + + template > + class basic_ostream; + + template > + class basic_iostream; + + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + template, + typename _Alloc = allocator<_CharT> > + class basic_stringbuf; + + template, + typename _Alloc = allocator<_CharT> > + class basic_istringstream; + + template, + typename _Alloc = allocator<_CharT> > + class basic_ostringstream; + + template, + typename _Alloc = allocator<_CharT> > + class basic_stringstream; + +_GLIBCXX_END_NAMESPACE_CXX11 + + template > + class basic_filebuf; + + template > + class basic_ifstream; + + template > + class basic_ofstream; + + template > + class basic_fstream; + + template > + class istreambuf_iterator; + + template > + class ostreambuf_iterator; + + + /// Base class for @c char streams. + typedef basic_ios ios; + + /// Base class for @c char buffers. + typedef basic_streambuf streambuf; + + /// Base class for @c char input streams. + typedef basic_istream istream; + + /// Base class for @c char output streams. + typedef basic_ostream ostream; + + /// Base class for @c char mixed input and output streams. + typedef basic_iostream iostream; + + /// Class for @c char memory buffers. + typedef basic_stringbuf stringbuf; + + /// Class for @c char input memory streams. + typedef basic_istringstream istringstream; + + /// Class for @c char output memory streams. + typedef basic_ostringstream ostringstream; + + /// Class for @c char mixed input and output memory streams. + typedef basic_stringstream stringstream; + + /// Class for @c char file buffers. + typedef basic_filebuf filebuf; + + /// Class for @c char input file streams. + typedef basic_ifstream ifstream; + + /// Class for @c char output file streams. + typedef basic_ofstream ofstream; + + /// Class for @c char mixed input and output file streams. + typedef basic_fstream fstream; + +#ifdef _GLIBCXX_USE_WCHAR_T + /// Base class for @c wchar_t streams. + typedef basic_ios wios; + + /// Base class for @c wchar_t buffers. + typedef basic_streambuf wstreambuf; + + /// Base class for @c wchar_t input streams. + typedef basic_istream wistream; + + /// Base class for @c wchar_t output streams. + typedef basic_ostream wostream; + + /// Base class for @c wchar_t mixed input and output streams. + typedef basic_iostream wiostream; + + /// Class for @c wchar_t memory buffers. + typedef basic_stringbuf wstringbuf; + + /// Class for @c wchar_t input memory streams. + typedef basic_istringstream wistringstream; + + /// Class for @c wchar_t output memory streams. + typedef basic_ostringstream wostringstream; + + /// Class for @c wchar_t mixed input and output memory streams. + typedef basic_stringstream wstringstream; + + /// Class for @c wchar_t file buffers. + typedef basic_filebuf wfilebuf; + + /// Class for @c wchar_t input file streams. + typedef basic_ifstream wifstream; + + /// Class for @c wchar_t output file streams. + typedef basic_ofstream wofstream; + + /// Class for @c wchar_t mixed input and output file streams. + typedef basic_fstream wfstream; +#endif + +#if __cplusplus >= 202002L && _GLIBCXX_USE_CXX11_ABI + template, + typename _Allocator = allocator<_CharT>> + class basic_syncbuf; + template, + typename _Allocator = allocator<_CharT>> + class basic_osyncstream; + + using syncbuf = basic_syncbuf; + using osyncstream = basic_osyncstream; + +#ifdef _GLIBCXX_USE_WCHAR_T + using wsyncbuf = basic_syncbuf; + using wosyncstream = basic_osyncstream; +#endif +#endif // C++20 && CXX11_ABI + +#if __cplusplus > 202002L + template> + class basic_spanbuf; + template> + class basic_ispanstream; + template> + class basic_ospanstream; + template> + class basic_spanstream; + + using spanbuf = basic_spanbuf; + using ispanstream = basic_ispanstream; + using ospanstream = basic_ospanstream; + using spanstream = basic_spanstream; + +#ifdef _GLIBCXX_USE_WCHAR_T + using wspanbuf = basic_spanbuf; + using wispanstream = basic_ispanstream; + using wospanstream = basic_ospanstream; + using wspanstream = basic_spanstream; +#endif +#endif // C++23 + + /** @} */ + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _GLIBCXX_IOSFWD */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iosfwd.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@iosfwd.blob new file mode 100644 index 0000000000000000000000000000000000000000..769e07956fbc311faf80349d14a0ba3d140f782f GIT binary patch literal 20125 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 C@P2;) literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@istream b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@istream new file mode 100644 index 0000000..d5bb187 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@istream @@ -0,0 +1,1113 @@ +// Input streams -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// +// ISO C++ 14882: 27.6.1 Input streams +// + +/** @file include/istream + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_ISTREAM +#define _GLIBCXX_ISTREAM 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // iostreams + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief Template class basic_istream. + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * This is the base class for all input streams. It provides text + * formatting of all builtin types, and communicates with any class + * derived from basic_streambuf to do the actual input. + */ + template + class basic_istream : virtual public basic_ios<_CharT, _Traits> + { + public: + // Types (inherited from basic_ios (27.4.4)): + typedef _CharT char_type; + typedef typename _Traits::int_type int_type; + typedef typename _Traits::pos_type pos_type; + typedef typename _Traits::off_type off_type; + typedef _Traits traits_type; + + // Non-standard Types: + typedef basic_streambuf<_CharT, _Traits> __streambuf_type; + typedef basic_ios<_CharT, _Traits> __ios_type; + typedef basic_istream<_CharT, _Traits> __istream_type; + typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > + __num_get_type; + typedef ctype<_CharT> __ctype_type; + + protected: + // Data Members: + /** + * The number of characters extracted in the previous unformatted + * function; see gcount(). + */ + streamsize _M_gcount; + + public: + /** + * @brief Base constructor. + * + * This ctor is almost never called by the user directly, rather from + * derived classes' initialization lists, which pass a pointer to + * their own stream buffer. + */ + explicit + basic_istream(__streambuf_type* __sb) + : _M_gcount(streamsize(0)) + { this->init(__sb); } + + /** + * @brief Base destructor. + * + * This does very little apart from providing a virtual base dtor. + */ + virtual + ~basic_istream() + { _M_gcount = streamsize(0); } + + /// Safe prefix/suffix operations. + class sentry; + friend class sentry; + + ///@{ + /** + * @brief Interface for manipulators. + * + * Manipulators such as @c std::ws and @c std::dec use these + * functions in constructs like + * std::cin >> std::ws. + * For more information, see the iomanip header. + */ + __istream_type& + operator>>(__istream_type& (*__pf)(__istream_type&)) + { return __pf(*this); } + + __istream_type& + operator>>(__ios_type& (*__pf)(__ios_type&)) + { + __pf(*this); + return *this; + } + + __istream_type& + operator>>(ios_base& (*__pf)(ios_base&)) + { + __pf(*this); + return *this; + } + ///@} + + ///@{ + /** + * @name Extractors + * + * All the @c operator>> functions (aka formatted input + * functions) have some common behavior. Each starts by + * constructing a temporary object of type std::basic_istream::sentry + * with the second argument (noskipws) set to false. This has several + * effects, concluding with the setting of a status flag; see the + * sentry documentation for more. + * + * If the sentry status is good, the function tries to extract + * whatever data is appropriate for the type of the argument. + * + * If an exception is thrown during extraction, ios_base::badbit + * will be turned on in the stream's error state (without causing an + * ios_base::failure to be thrown) and the original exception will + * be rethrown if badbit is set in the exceptions mask. + */ + + ///@{ + /** + * @brief Integer arithmetic extractors + * @param __n A variable of builtin integral type. + * @return @c *this if successful + * + * These functions use the stream's current locale (specifically, the + * @c num_get facet) to parse the input data. + */ + __istream_type& + operator>>(bool& __n) + { return _M_extract(__n); } + + __istream_type& + operator>>(short& __n); + + __istream_type& + operator>>(unsigned short& __n) + { return _M_extract(__n); } + + __istream_type& + operator>>(int& __n); + + __istream_type& + operator>>(unsigned int& __n) + { return _M_extract(__n); } + + __istream_type& + operator>>(long& __n) + { return _M_extract(__n); } + + __istream_type& + operator>>(unsigned long& __n) + { return _M_extract(__n); } + +#ifdef _GLIBCXX_USE_LONG_LONG +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + __istream_type& + operator>>(long long& __n) + { return _M_extract(__n); } + + __istream_type& + operator>>(unsigned long long& __n) + { return _M_extract(__n); } +#pragma GCC diagnostic pop +#endif + ///@} + + ///@{ + /** + * @brief Floating point arithmetic extractors + * @param __f A variable of builtin floating point type. + * @return @c *this if successful + * + * These functions use the stream's current locale (specifically, the + * @c num_get facet) to parse the input data. + */ + __istream_type& + operator>>(float& __f) + { return _M_extract(__f); } + + __istream_type& + operator>>(double& __f) + { return _M_extract(__f); } + + __istream_type& + operator>>(long double& __f) + { return _M_extract(__f); } + ///@} + +#if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32) + __attribute__((__always_inline__)) + __istream_type& + operator>>(_Float16& __f) + { + float __flt; + __istream_type& __ret = _M_extract(__flt); + ios_base::iostate __err = ios_base::goodbit; + if (__flt < -__FLT16_MAX__) + { + __f = -__FLT16_MAX__; + __err = ios_base::failbit; + } + else if (__flt > __FLT16_MAX__) + { + __f = __FLT16_MAX__; + __err = ios_base::failbit; + } + else + __f = static_cast<_Float16>(__flt); + if (__err) + this->setstate(__err); + return __ret; + } +#endif + +#if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32) + __attribute__((__always_inline__)) + __istream_type& + operator>>(_Float32& __f) + { + float __flt; + __istream_type& __ret = _M_extract(__flt); + __f = static_cast<_Float32> (__flt); + return __ret; + } +#endif + +#if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64) + __attribute__((__always_inline__)) + __istream_type& + operator>>(_Float64& __f) + { + double __dbl; + __istream_type& __ret = _M_extract(__dbl); + __f = static_cast<_Float64> (__dbl); + return __ret; + } +#endif + +#if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) + __attribute__((__always_inline__)) + __istream_type& + operator>>(_Float128& __f) + { + long double __ldbl; + __istream_type& __ret = _M_extract(__ldbl); + __f = static_cast<_Float128> (__ldbl); + return __ret; + } +#endif + +#if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32) + __attribute__((__always_inline__)) + __istream_type& + operator>>(__gnu_cxx::__bfloat16_t & __f) + { + float __flt; + __istream_type& __ret = _M_extract(__flt); + ios_base::iostate __err = ios_base::goodbit; + if (__flt < -__BFLT16_MAX__) + { + __f = -__BFLT16_MAX__; + __err = ios_base::failbit; + } + else if (__flt > __BFLT16_MAX__) + { + __f = __BFLT16_MAX__; + __err = ios_base::failbit; + } + else + __f = static_cast<__gnu_cxx::__bfloat16_t>(__flt); + if (__err) + this->setstate(__err); + return __ret; + } +#endif + + /** + * @brief Basic arithmetic extractors + * @param __p A variable of pointer type. + * @return @c *this if successful + * + * These functions use the stream's current locale (specifically, the + * @c num_get facet) to parse the input data. + */ + __istream_type& + operator>>(void*& __p) + { return _M_extract(__p); } + + /** + * @brief Extracting into another streambuf. + * @param __sb A pointer to a streambuf + * + * This function behaves like one of the basic arithmetic extractors, + * in that it also constructs a sentry object and has the same error + * handling behavior. + * + * If @p __sb is NULL, the stream will set failbit in its error state. + * + * Characters are extracted from this stream and inserted into the + * @p __sb streambuf until one of the following occurs: + * + * - the input stream reaches end-of-file, + * - insertion into the output buffer fails (in this case, the + * character that would have been inserted is not extracted), or + * - an exception occurs (and in this case is caught) + * + * If the function inserts no characters, failbit is set. + */ + __istream_type& + operator>>(__streambuf_type* __sb); + ///@} + + // [27.6.1.3] unformatted input + /** + * @brief Character counting + * @return The number of characters extracted by the previous + * unformatted input function dispatched for this stream. + */ + streamsize + gcount() const + { return _M_gcount; } + + ///@{ + /** + * @name Unformatted Input Functions + * + * All the unformatted input functions have some common behavior. + * Each starts by constructing a temporary object of type + * std::basic_istream::sentry with the second argument (noskipws) + * set to true. This has several effects, concluding with the + * setting of a status flag; see the sentry documentation for more. + * + * If the sentry status is good, the function tries to extract + * whatever data is appropriate for the type of the argument. + * + * The number of characters extracted is stored for later retrieval + * by gcount(). + * + * If an exception is thrown during extraction, ios_base::badbit + * will be turned on in the stream's error state (without causing an + * ios_base::failure to be thrown) and the original exception will + * be rethrown if badbit is set in the exceptions mask. + */ + + /** + * @brief Simple extraction. + * @return A character, or eof(). + * + * Tries to extract a character. If none are available, sets failbit + * and returns traits::eof(). + */ + int_type + get(); + + /** + * @brief Simple extraction. + * @param __c The character in which to store data. + * @return *this + * + * Tries to extract a character and store it in @a __c. If none are + * available, sets failbit and returns traits::eof(). + * + * @note This function is not overloaded on signed char and + * unsigned char. + */ + __istream_type& + get(char_type& __c); + + /** + * @brief Simple multiple-character extraction. + * @param __s Pointer to an array. + * @param __n Maximum number of characters to store in @a __s. + * @param __delim A "stop" character. + * @return *this + * + * Characters are extracted and stored into @a __s until one of the + * following happens: + * + * - @c __n-1 characters are stored + * - the input sequence reaches EOF + * - the next character equals @a __delim, in which case the character + * is not extracted + * + * If no characters are stored, failbit is set in the stream's error + * state. + * + * In any case, a null character is stored into the next location in + * the array. + * + * @note This function is not overloaded on signed char and + * unsigned char. + */ + __istream_type& + get(char_type* __s, streamsize __n, char_type __delim); + + /** + * @brief Simple multiple-character extraction. + * @param __s Pointer to an array. + * @param __n Maximum number of characters to store in @a s. + * @return *this + * + * Returns @c get(__s,__n,widen('\\n')). + */ + __istream_type& + get(char_type* __s, streamsize __n) + { return this->get(__s, __n, this->widen('\n')); } + + /** + * @brief Extraction into another streambuf. + * @param __sb A streambuf in which to store data. + * @param __delim A "stop" character. + * @return *this + * + * Characters are extracted and inserted into @a __sb until one of the + * following happens: + * + * - the input sequence reaches EOF + * - insertion into the output buffer fails (in this case, the + * character that would have been inserted is not extracted) + * - the next character equals @a __delim (in this case, the character + * is not extracted) + * - an exception occurs (and in this case is caught) + * + * If no characters are stored, failbit is set in the stream's error + * state. + */ + __istream_type& + get(__streambuf_type& __sb, char_type __delim); + + /** + * @brief Extraction into another streambuf. + * @param __sb A streambuf in which to store data. + * @return *this + * + * Returns @c get(__sb,widen('\\n')). + */ + __istream_type& + get(__streambuf_type& __sb) + { return this->get(__sb, this->widen('\n')); } + + /** + * @brief String extraction. + * @param __s A character array in which to store the data. + * @param __n Maximum number of characters to extract. + * @param __delim A "stop" character. + * @return *this + * + * Extracts and stores characters into @a __s until one of the + * following happens. Note that these criteria are required to be + * tested in the order listed here, to allow an input line to exactly + * fill the @a __s array without setting failbit. + * + * -# the input sequence reaches end-of-file, in which case eofbit + * is set in the stream error state + * -# the next character equals @c __delim, in which case the character + * is extracted (and therefore counted in @c gcount()) but not stored + * -# @c __n-1 characters are stored, in which case failbit is set + * in the stream error state + * + * If no characters are extracted, failbit is set. (An empty line of + * input should therefore not cause failbit to be set.) + * + * In any case, a null character is stored in the next location in + * the array. + */ + __istream_type& + getline(char_type* __s, streamsize __n, char_type __delim); + + /** + * @brief String extraction. + * @param __s A character array in which to store the data. + * @param __n Maximum number of characters to extract. + * @return *this + * + * Returns @c getline(__s,__n,widen('\\n')). + */ + __istream_type& + getline(char_type* __s, streamsize __n) + { return this->getline(__s, __n, this->widen('\n')); } + + /** + * @brief Discarding characters + * @param __n Number of characters to discard. + * @param __delim A "stop" character. + * @return *this + * + * Extracts characters and throws them away until one of the + * following happens: + * - if @a __n @c != @c std::numeric_limits::max(), @a __n + * characters are extracted + * - the input sequence reaches end-of-file + * - the next character equals @a __delim (in this case, the character + * is extracted); note that this condition will never occur if + * @a __delim equals @c traits::eof(). + * + * NB: Provide three overloads, instead of the single function + * (with defaults) mandated by the Standard: this leads to a + * better performing implementation, while still conforming to + * the Standard. + */ + __istream_type& + ignore(streamsize __n, int_type __delim); + + __istream_type& + ignore(streamsize __n); + + __istream_type& + ignore(); + + /** + * @brief Looking ahead in the stream + * @return The next character, or eof(). + * + * If, after constructing the sentry object, @c good() is false, + * returns @c traits::eof(). Otherwise reads but does not extract + * the next input character. + */ + int_type + peek(); + + /** + * @brief Extraction without delimiters. + * @param __s A character array. + * @param __n Maximum number of characters to store. + * @return *this + * + * If the stream state is @c good(), extracts characters and stores + * them into @a __s until one of the following happens: + * - @a __n characters are stored + * - the input sequence reaches end-of-file, in which case the error + * state is set to @c failbit|eofbit. + * + * @note This function is not overloaded on signed char and + * unsigned char. + */ + __istream_type& + read(char_type* __s, streamsize __n); + + /** + * @brief Extraction until the buffer is exhausted, but no more. + * @param __s A character array. + * @param __n Maximum number of characters to store. + * @return The number of characters extracted. + * + * Extracts characters and stores them into @a __s depending on the + * number of characters remaining in the streambuf's buffer, + * @c rdbuf()->in_avail(), called @c A here: + * - if @c A @c == @c -1, sets eofbit and extracts no characters + * - if @c A @c == @c 0, extracts no characters + * - if @c A @c > @c 0, extracts @c min(A,n) + * + * The goal is to empty the current buffer, and to not request any + * more from the external input sequence controlled by the streambuf. + */ + streamsize + readsome(char_type* __s, streamsize __n); + + /** + * @brief Unextracting a single character. + * @param __c The character to push back into the input stream. + * @return *this + * + * If @c rdbuf() is not null, calls @c rdbuf()->sputbackc(c). + * + * If @c rdbuf() is null or if @c sputbackc() fails, sets badbit in + * the error state. + * + * @note This function first clears eofbit. Since no characters + * are extracted, the next call to @c gcount() will return 0, + * as required by DR 60. + */ + __istream_type& + putback(char_type __c); + + /** + * @brief Unextracting the previous character. + * @return *this + * + * If @c rdbuf() is not null, calls @c rdbuf()->sungetc(c). + * + * If @c rdbuf() is null or if @c sungetc() fails, sets badbit in + * the error state. + * + * @note This function first clears eofbit. Since no characters + * are extracted, the next call to @c gcount() will return 0, + * as required by DR 60. + */ + __istream_type& + unget(); + + /** + * @brief Synchronizing the stream buffer. + * @return 0 on success, -1 on failure + * + * If @c rdbuf() is a null pointer, returns -1. + * + * Otherwise, calls @c rdbuf()->pubsync(), and if that returns -1, + * sets badbit and returns -1. + * + * Otherwise, returns 0. + * + * @note This function does not count the number of characters + * extracted, if any, and therefore does not affect the next + * call to @c gcount(). + */ + int + sync(); + + /** + * @brief Getting the current read position. + * @return A file position object. + * + * If @c fail() is not false, returns @c pos_type(-1) to indicate + * failure. Otherwise returns @c rdbuf()->pubseekoff(0,cur,in). + * + * @note This function does not count the number of characters + * extracted, if any, and therefore does not affect the next + * call to @c gcount(). At variance with putback, unget and + * seekg, eofbit is not cleared first. + */ + pos_type + tellg(); + + /** + * @brief Changing the current read position. + * @param __pos A file position object. + * @return *this + * + * If @c fail() is not true, calls @c rdbuf()->pubseekpos(__pos). If + * that function fails, sets failbit. + * + * @note This function first clears eofbit. It does not count the + * number of characters extracted, if any, and therefore does + * not affect the next call to @c gcount(). + */ + __istream_type& + seekg(pos_type); + + /** + * @brief Changing the current read position. + * @param __off A file offset object. + * @param __dir The direction in which to seek. + * @return *this + * + * If @c fail() is not true, calls @c rdbuf()->pubseekoff(__off,__dir). + * If that function fails, sets failbit. + * + * @note This function first clears eofbit. It does not count the + * number of characters extracted, if any, and therefore does + * not affect the next call to @c gcount(). + */ + __istream_type& + seekg(off_type, ios_base::seekdir); + ///@} + + protected: + basic_istream() + : _M_gcount(streamsize(0)) + { this->init(0); } + +#if __cplusplus >= 201103L + basic_istream(const basic_istream&) = delete; + + basic_istream(basic_istream&& __rhs) + : __ios_type(), _M_gcount(__rhs._M_gcount) + { + __ios_type::move(__rhs); + __rhs._M_gcount = 0; + } + + // 27.7.3.3 Assign/swap + + basic_istream& operator=(const basic_istream&) = delete; + + basic_istream& + operator=(basic_istream&& __rhs) + { + swap(__rhs); + return *this; + } + + void + swap(basic_istream& __rhs) + { + __ios_type::swap(__rhs); + std::swap(_M_gcount, __rhs._M_gcount); + } +#endif + + template + __istream_type& + _M_extract(_ValueT& __v); + }; + + /// Explicit specialization declarations, defined in src/istream.cc. + template<> + basic_istream& + basic_istream:: + getline(char_type* __s, streamsize __n, char_type __delim); + + template<> + basic_istream& + basic_istream:: + ignore(streamsize __n); + + template<> + basic_istream& + basic_istream:: + ignore(streamsize __n, int_type __delim); + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + basic_istream& + basic_istream:: + getline(char_type* __s, streamsize __n, char_type __delim); + + template<> + basic_istream& + basic_istream:: + ignore(streamsize __n); + + template<> + basic_istream& + basic_istream:: + ignore(streamsize __n, int_type __delim); +#endif + + /** + * @brief Performs setup work for input streams. + * + * Objects of this class are created before all of the standard + * extractors are run. It is responsible for exception-safe + * prefix and suffix operations, although only prefix actions + * are currently required by the standard. + */ + template + class basic_istream<_CharT, _Traits>::sentry + { + // Data Members. + bool _M_ok; + + public: + /// Easy access to dependent types. + typedef _Traits traits_type; + typedef basic_streambuf<_CharT, _Traits> __streambuf_type; + typedef basic_istream<_CharT, _Traits> __istream_type; + typedef typename __istream_type::__ctype_type __ctype_type; + typedef typename _Traits::int_type __int_type; + + /** + * @brief The constructor performs all the work. + * @param __is The input stream to guard. + * @param __noskipws Whether to consume whitespace or not. + * + * If the stream state is good (@a __is.good() is true), then the + * following actions are performed, otherwise the sentry state + * is false (not okay) and failbit is set in the + * stream state. + * + * The sentry's preparatory actions are: + * + * -# if the stream is tied to an output stream, @c is.tie()->flush() + * is called to synchronize the output sequence + * -# if @a __noskipws is false, and @c ios_base::skipws is set in + * @c is.flags(), the sentry extracts and discards whitespace + * characters from the stream. The currently imbued locale is + * used to determine whether each character is whitespace. + * + * If the stream state is still good, then the sentry state becomes + * true (@a okay). + */ + explicit + sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false); + + /** + * @brief Quick status checking. + * @return The sentry state. + * + * For ease of use, sentries may be converted to booleans. The + * return value is that of the sentry state (true == okay). + */ +#if __cplusplus >= 201103L + explicit +#endif + operator bool() const + { return _M_ok; } + }; + + ///@{ + /** + * @brief Character extractors + * @param __in An input stream. + * @param __c A character reference. + * @return in + * + * Behaves like one of the formatted arithmetic extractors described in + * std::basic_istream. After constructing a sentry object with good + * status, this function extracts a character (if one is available) and + * stores it in @a __c. Otherwise, sets failbit in the input stream. + */ + template + basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c); + + template + inline basic_istream& + operator>>(basic_istream& __in, unsigned char& __c) + { return (__in >> reinterpret_cast(__c)); } + + template + inline basic_istream& + operator>>(basic_istream& __in, signed char& __c) + { return (__in >> reinterpret_cast(__c)); } + ///@} + + + template + void + __istream_extract(basic_istream<_CharT, _Traits>&, _CharT*, streamsize); + + void __istream_extract(istream&, char*, streamsize); + + ///@{ + /** + * @brief Character string extractors + * @param __in An input stream. + * @param __s A character array (or a pointer to an array before C++20). + * @return __in + * + * Behaves like one of the formatted arithmetic extractors described in + * `std::basic_istream`. After constructing a sentry object with good + * status, this function extracts up to `n` characters and stores them + * into the array `__s`. `n` is defined as: + * + * - if `width()` is greater than zero, `n` is `min(width(), n)` + * - otherwise `n` is the number of elements of the array + * - (before C++20 the pointer is assumed to point to an array of + * the largest possible size for an array of `char_type`). + * + * Characters are extracted and stored until one of the following happens: + * - `n - 1` characters are stored + * - EOF is reached + * - the next character is whitespace according to the current locale + * + * `width(0)` is then called for the input stream. + * + * If no characters are extracted, sets failbit. + */ + +#if __cplusplus <= 201703L + template + __attribute__((__nonnull__(2), __access__(__write_only__, 2))) + inline basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s) + { +#ifdef __OPTIMIZE__ + // Function inlining might make the buffer size known, allowing us to + // prevent overflow. + size_t __n = __builtin_object_size(__s, 0); + if (__n < sizeof(_CharT)) + { + // There is not even space for the required null terminator. + __glibcxx_assert(__n >= sizeof(_CharT)); + // No point calling __istream_extract, but still need to reset width. + __in.width(0); + __in.setstate(ios_base::failbit); + } + else if (__n != (size_t)-1) + { + __n /= sizeof(_CharT); + streamsize __w = __in.width(); + std::__istream_extract(__in, __s, __n); + if (__in.good() && (__w <= 0 || __n < (size_t)__w)) + { + // Stopped extracting early to avoid overflowing the buffer, + // but might have stopped anyway (and set eofbit) if at EOF. + const typename _Traits::int_type __c = __in.rdbuf()->sgetc(); + const bool __eof = _Traits::eq_int_type(__c, _Traits::eof()); + if (__builtin_expect(__eof, true)) // Assume EOF, not overflow. + __in.setstate(ios_base::eofbit); + } + } + else +#endif // __OPTIMIZE + { + // Buffer size is unknown, have to assume it's huge. + streamsize __n = __gnu_cxx::__numeric_traits::__max; + __n /= sizeof(_CharT); + std::__istream_extract(__in, __s, __n); + } + return __in; + } + + template + __attribute__((__nonnull__(2), __access__(__write_only__, 2))) + inline basic_istream& + operator>>(basic_istream& __in, unsigned char* __s) + { return __in >> reinterpret_cast(__s); } + + template + __attribute__((__nonnull__(2), __access__(__write_only__, 2))) + inline basic_istream& + operator>>(basic_istream& __in, signed char* __s) + { return __in >> reinterpret_cast(__s); } +#else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2499. operator>>(istream&, char*) makes it hard to avoid buffer overflows + template + inline basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __in, _CharT (&__s)[_Num]) + { + static_assert(_Num <= __gnu_cxx::__numeric_traits::__max); + std::__istream_extract(__in, __s, _Num); + return __in; + } + + template + inline basic_istream& + operator>>(basic_istream& __in, unsigned char (&__s)[_Num]) + { return __in >> reinterpret_cast(__s); } + + template + inline basic_istream& + operator>>(basic_istream& __in, signed char (&__s)[_Num]) + { return __in >> reinterpret_cast(__s); } +#endif + ///@} + + /** + * @brief Template class basic_iostream + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * This class multiply inherits from the input and output stream classes + * simply to provide a single interface. + */ + template + class basic_iostream + : public basic_istream<_CharT, _Traits>, + public basic_ostream<_CharT, _Traits> + { + public: + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 271. basic_iostream missing typedefs + // Types (inherited): + typedef _CharT char_type; + typedef typename _Traits::int_type int_type; + typedef typename _Traits::pos_type pos_type; + typedef typename _Traits::off_type off_type; + typedef _Traits traits_type; + + // Non-standard Types: + typedef basic_istream<_CharT, _Traits> __istream_type; + typedef basic_ostream<_CharT, _Traits> __ostream_type; + + /** + * @brief Constructor does nothing. + * + * Both of the parent classes are initialized with the same + * streambuf pointer passed to this constructor. + */ + explicit + basic_iostream(basic_streambuf<_CharT, _Traits>* __sb) + : __istream_type(__sb), __ostream_type(__sb) { } + + /** + * @brief Destructor does nothing. + */ + virtual + ~basic_iostream() { } + + protected: + basic_iostream() + : __istream_type(), __ostream_type() { } + +#if __cplusplus >= 201103L + basic_iostream(const basic_iostream&) = delete; + + basic_iostream(basic_iostream&& __rhs) + : __istream_type(std::move(__rhs)), __ostream_type(*this) + { } + + // 27.7.3.3 Assign/swap + + basic_iostream& operator=(const basic_iostream&) = delete; + + basic_iostream& + operator=(basic_iostream&& __rhs) + { + swap(__rhs); + return *this; + } + + void + swap(basic_iostream& __rhs) + { __istream_type::swap(__rhs); } +#endif + }; + + /** + * @brief Quick and easy way to eat whitespace + * + * This manipulator extracts whitespace characters, stopping when the + * next character is non-whitespace, or when the input sequence is empty. + * If the sequence is empty, @c eofbit is set in the stream, but not + * @c failbit. + * + * The current locale is used to distinguish whitespace characters. + * + * Example: + * @code + * MyClass mc; + * + * std::cin >> std::ws >> mc; + * @endcode + * will skip leading whitespace before calling operator>> on cin and your + * object. Note that the same effect can be achieved by creating a + * std::basic_istream::sentry inside your definition of operator>>. + */ + template + basic_istream<_CharT, _Traits>& + ws(basic_istream<_CharT, _Traits>& __is); + +#if __cplusplus >= 201103L + // C++11 27.7.2.6 Rvalue stream extraction [istream.rvalue] + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2328. Rvalue stream extraction should use perfect forwarding + // 1203. More useful rvalue stream insertion + +#if __cpp_concepts >= 201907L && __glibcxx_type_trait_variable_templates + template + requires __derived_from_ios_base<_Is> + && requires (_Is& __is, _Tp&& __t) { __is >> std::forward<_Tp>(__t); } + using __rvalue_stream_extraction_t = _Is&&; +#else + template, + typename = decltype(std::declval<_Is&>() >> std::declval<_Tp>())> + using __rvalue_stream_extraction_t = _Is&&; +#endif + + /** + * @brief Generic extractor for rvalue stream + * @param __is An input stream. + * @param __x A reference to the extraction target. + * @return __is + * + * This is just a forwarding function to allow extraction from + * rvalue streams since they won't bind to the extractor functions + * that take an lvalue reference. + */ + template + inline __rvalue_stream_extraction_t<_Istream, _Tp> + operator>>(_Istream&& __is, _Tp&& __x) + { + __is >> std::forward<_Tp>(__x); + return std::move(__is); + } +#endif // C++11 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#include + +#endif /* _GLIBCXX_ISTREAM */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@istream.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@istream.blob new file mode 100644 index 0000000000000000000000000000000000000000..4a814d81963e0455f1316b5fa791262ea3ffa27a GIT binary patch literal 51468 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 IgF)pr0D9M1rT_o{ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@limits b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@limits new file mode 100644 index 0000000..5662a22 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@limits @@ -0,0 +1,2240 @@ +// The template and inlines for the numeric_limits classes. -*- C++ -*- + +// Copyright (C) 1999-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/limits + * This is a Standard C++ Library header. + */ + +// Note: this is not a conforming implementation. +// Written by Gabriel Dos Reis + +// +// ISO 14882:1998 +// 18.2.1 +// + +#ifndef _GLIBCXX_NUMERIC_LIMITS +#define _GLIBCXX_NUMERIC_LIMITS 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" // Q suffix +#pragma GCC diagnostic ignored "-Wlong-long" +#pragma GCC diagnostic ignored "-Wc++23-extensions" + +#include + +// +// The numeric_limits<> traits document implementation-defined aspects +// of fundamental arithmetic data types (integers and floating points). +// From Standard C++ point of view, there are 14 such types: +// * integers +// bool (1) +// char, signed char, unsigned char, wchar_t (4) +// short, unsigned short (2) +// int, unsigned (2) +// long, unsigned long (2) +// +// * floating points +// float (1) +// double (1) +// long double (1) +// +// GNU C++ understands (where supported by the host C-library) +// * integer +// long long, unsigned long long (2) +// +// which brings us to 16 fundamental arithmetic data types in GNU C++. +// +// +// Since a numeric_limits<> is a bit tricky to get right, we rely on +// an interface composed of macros which should be defined in config/os +// or config/cpu when they differ from the generic (read arbitrary) +// definitions given here. +// + +// These values can be overridden in the target configuration file. +// The default values are appropriate for many 32-bit targets. + +// GCC only intrinsically supports modulo integral types. The only remaining +// integral exceptional values is division by zero. Only targets that do not +// signal division by zero in some "hard to ignore" way should use false. +#ifndef __glibcxx_integral_traps +# define __glibcxx_integral_traps true +#endif + +// float +// + +// Default values. Should be overridden in configuration files if necessary. + +#ifndef __glibcxx_float_has_denorm_loss +# define __glibcxx_float_has_denorm_loss false +#endif +#ifndef __glibcxx_float_traps +# define __glibcxx_float_traps false +#endif +#ifndef __glibcxx_float_tinyness_before +# define __glibcxx_float_tinyness_before false +#endif + +// double + +// Default values. Should be overridden in configuration files if necessary. + +#ifndef __glibcxx_double_has_denorm_loss +# define __glibcxx_double_has_denorm_loss false +#endif +#ifndef __glibcxx_double_traps +# define __glibcxx_double_traps false +#endif +#ifndef __glibcxx_double_tinyness_before +# define __glibcxx_double_tinyness_before false +#endif + +// long double + +// Default values. Should be overridden in configuration files if necessary. + +#ifndef __glibcxx_long_double_has_denorm_loss +# define __glibcxx_long_double_has_denorm_loss false +#endif +#ifndef __glibcxx_long_double_traps +# define __glibcxx_long_double_traps false +#endif +#ifndef __glibcxx_long_double_tinyness_before +# define __glibcxx_long_double_tinyness_before false +#endif + +// You should not need to define any macros below this point. + +#define __glibcxx_signed_b(T,B) ((T)(-1) < 0) + +#define __glibcxx_min_b(T,B) \ + (__glibcxx_signed_b (T,B) ? -__glibcxx_max_b (T,B) - 1 : (T)0) + +#define __glibcxx_max_b(T,B) \ + (__glibcxx_signed_b (T,B) ? \ + (((((T)1 << (__glibcxx_digits_b (T,B) - 1)) - 1) << 1) + 1) : ~(T)0) + +#define __glibcxx_digits_b(T,B) \ + (B - __glibcxx_signed_b (T,B)) + +// The fraction 643/2136 approximates log10(2) to 7 significant digits. +#define __glibcxx_digits10_b(T,B) \ + (__glibcxx_digits_b (T,B) * 643L / 2136) + +#define __glibcxx_signed(T) \ + __glibcxx_signed_b (T, sizeof(T) * __CHAR_BIT__) +#define __glibcxx_min(T) \ + __glibcxx_min_b (T, sizeof(T) * __CHAR_BIT__) +#define __glibcxx_max(T) \ + __glibcxx_max_b (T, sizeof(T) * __CHAR_BIT__) +#define __glibcxx_digits(T) \ + __glibcxx_digits_b (T, sizeof(T) * __CHAR_BIT__) +#define __glibcxx_digits10(T) \ + __glibcxx_digits10_b (T, sizeof(T) * __CHAR_BIT__) + +#define __glibcxx_max_digits10(T) \ + (2 + (T) * 643L / 2136) + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief Describes the rounding style for floating-point types. + * + * This is used in the std::numeric_limits class. + */ + enum float_round_style + { + round_indeterminate = -1, ///< Intermediate. + round_toward_zero = 0, ///< To zero. + round_to_nearest = 1, ///< To the nearest representable value. + round_toward_infinity = 2, ///< To infinity. + round_toward_neg_infinity = 3 ///< To negative infinity. + }; + + /** + * @brief Describes the denormalization for floating-point types. + * + * These values represent the presence or absence of a variable number + * of exponent bits. This type is used in the std::numeric_limits class. + */ + enum float_denorm_style + { + /// Indeterminate at compile time whether denormalized values are allowed. + denorm_indeterminate = -1, + /// The type does not allow denormalized values. + denorm_absent = 0, + /// The type allows denormalized values. + denorm_present = 1 + }; + + /** + * @brief Part of std::numeric_limits. + * + * The @c static @c const members are usable as integral constant + * expressions. + * + * @note This is a separate class for purposes of efficiency; you + * should only access these members as part of an instantiation + * of the std::numeric_limits class. + */ + struct __numeric_limits_base + { + /** This will be true for all fundamental types (which have + specializations), and false for everything else. */ + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false; + + /** The number of @c radix digits that be represented without change: for + integer types, the number of non-sign bits in the mantissa; for + floating types, the number of @c radix digits in the mantissa. */ + static _GLIBCXX_USE_CONSTEXPR int digits = 0; + + /** The number of base 10 digits that can be represented without change. */ + static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; + +#if __cplusplus >= 201103L + /** The number of base 10 digits required to ensure that values which + differ are always differentiated. */ + static constexpr int max_digits10 = 0; +#endif + + /** True if the type is signed. */ + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; + + /** True if the type is integer. */ + static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; + + /** True if the type uses an exact representation. All integer types are + exact, but not all exact types are integer. For example, rational and + fixed-exponent representations are exact but not integer. */ + static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; + + /** For integer types, specifies the base of the representation. For + floating types, specifies the base of the exponent representation. */ + static _GLIBCXX_USE_CONSTEXPR int radix = 0; + + /** The minimum negative integer such that @c radix raised to the power of + (one less than that integer) is a normalized floating point number. */ + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + + /** The minimum negative integer such that 10 raised to that power is in + the range of normalized floating point numbers. */ + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + + /** The maximum positive integer such that @c radix raised to the power of + (one less than that integer) is a representable finite floating point + number. */ + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + + /** The maximum positive integer such that 10 raised to that power is in + the range of representable finite floating point numbers. */ + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + /** True if the type has a representation for positive infinity. */ + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + + /** True if the type has a representation for a quiet (non-signaling) + Not a Number. */ + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + + /** True if the type has a representation for a signaling + Not a Number. */ + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + + /** See std::float_denorm_style for more information. */ + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent; + + /** True if loss of accuracy is detected as a denormalization loss, + rather than as an inexact result. */ + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + /** True if-and-only-if the type adheres to the IEC 559 standard, also + known as IEEE 754. (Only makes sense for floating point types.) */ + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + + /** True if the set of values representable by the type is + finite. All built-in types are bounded, this member would be + false for arbitrary precision types. */ + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false; + + /** True if the type is @e modulo. A type is modulo if, for any + operation involving +, -, or * on values of that type whose + result would fall outside the range [min(),max()], the value + returned differs from the true value by an integer multiple of + max() - min() + 1. On most machines, this is false for floating + types, true for unsigned integers, and true for signed integers. + See PR22200 about signed integers. */ + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + /** True if trapping is implemented for this type. */ + static _GLIBCXX_USE_CONSTEXPR bool traps = false; + + /** True if tininess is detected before rounding. (see IEC 559) */ + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + + /** See std::float_round_style for more information. This is only + meaningful for floating types; integer types will all be + round_toward_zero. */ + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = + round_toward_zero; + }; + + /** + * @brief Properties of fundamental types. + * + * This class allows a program to obtain information about the + * representation of a fundamental type on a given platform. For + * non-fundamental types, the functions will return 0 and the data + * members will all be @c false. + */ + template + struct numeric_limits : public __numeric_limits_base + { + /** The minimum finite value, or for floating types with + denormalization, the minimum positive normalized value. */ + static _GLIBCXX_CONSTEXPR _Tp + min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } + + /** The maximum finite value. */ + static _GLIBCXX_CONSTEXPR _Tp + max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } + +#if __cplusplus >= 201103L + /** A finite value x such that there is no other finite value y + * where y < x. */ + static constexpr _Tp + lowest() noexcept { return _Tp(); } +#endif + + /** The @e machine @e epsilon: the difference between 1 and the least + value greater than 1 that is representable. */ + static _GLIBCXX_CONSTEXPR _Tp + epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } + + /** The maximum rounding error measurement (see LIA-1). */ + static _GLIBCXX_CONSTEXPR _Tp + round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } + + /** The representation of positive infinity, if @c has_infinity. */ + static _GLIBCXX_CONSTEXPR _Tp + infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } + + /** The representation of a quiet Not a Number, + if @c has_quiet_NaN. */ + static _GLIBCXX_CONSTEXPR _Tp + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } + + /** The representation of a signaling Not a Number, if + @c has_signaling_NaN. */ + static _GLIBCXX_CONSTEXPR _Tp + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } + + /** The minimum positive denormalized value. For types where + @c has_denorm is false, this is the minimum positive normalized + value. */ + static _GLIBCXX_CONSTEXPR _Tp + denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } + }; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 559. numeric_limits + + template + struct numeric_limits + : public numeric_limits<_Tp> { }; + + template + struct numeric_limits + : public numeric_limits<_Tp> { }; + + template + struct numeric_limits + : public numeric_limits<_Tp> { }; + + // Now there follow 16 explicit specializations. Yes, 16. Make sure + // you get the count right. (18 in C++11 mode, with char16_t and char32_t.) + // (+1 if char8_t is enabled.) + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 184. numeric_limits wording problems + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR bool + min() _GLIBCXX_USE_NOEXCEPT { return false; } + + static _GLIBCXX_CONSTEXPR bool + max() _GLIBCXX_USE_NOEXCEPT { return true; } + +#if __cplusplus >= 201103L + static constexpr bool + lowest() noexcept { return min(); } +#endif + static _GLIBCXX_USE_CONSTEXPR int digits = 1; + static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR bool + epsilon() _GLIBCXX_USE_NOEXCEPT { return false; } + + static _GLIBCXX_CONSTEXPR bool + round_error() _GLIBCXX_USE_NOEXCEPT { return false; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR bool + infinity() _GLIBCXX_USE_NOEXCEPT { return false; } + + static _GLIBCXX_CONSTEXPR bool + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } + + static _GLIBCXX_CONSTEXPR bool + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } + + static _GLIBCXX_CONSTEXPR bool + denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + // It is not clear what it means for a boolean type to trap. + // This is a DR on the LWG issue list. Here, I use integer + // promotion semantics. + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR char + min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); } + + static _GLIBCXX_CONSTEXPR char + max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); } + +#if __cplusplus >= 201103L + static constexpr char + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char); + static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char); + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR char + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR char + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR + char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); } + + static _GLIBCXX_CONSTEXPR char + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } + + static _GLIBCXX_CONSTEXPR char + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } + + static _GLIBCXX_CONSTEXPR char + denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR signed char + min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; } + + static _GLIBCXX_CONSTEXPR signed char + max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; } + +#if __cplusplus >= 201103L + static constexpr signed char + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (signed char); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR signed char + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR signed char + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR signed char + infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR signed char + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR signed char + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR signed char + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR unsigned char + min() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned char + max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; } + +#if __cplusplus >= 201103L + static constexpr unsigned char + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (unsigned char); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (unsigned char); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR unsigned char + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned char + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR unsigned char + infinity() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned char + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned char + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned char + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR wchar_t + min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); } + + static _GLIBCXX_CONSTEXPR wchar_t + max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); } + +#if __cplusplus >= 201103L + static constexpr wchar_t + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (wchar_t); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t); + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR wchar_t + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR wchar_t + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR wchar_t + infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } + + static _GLIBCXX_CONSTEXPR wchar_t + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } + + static _GLIBCXX_CONSTEXPR wchar_t + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } + + static _GLIBCXX_CONSTEXPR wchar_t + denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + +#if _GLIBCXX_USE_CHAR8_T + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR char8_t + min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (char8_t); } + + static _GLIBCXX_CONSTEXPR char8_t + max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (char8_t); } + + static _GLIBCXX_CONSTEXPR char8_t + lowest() _GLIBCXX_USE_NOEXCEPT { return min(); } + + static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char8_t); + static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char8_t); + static _GLIBCXX_USE_CONSTEXPR int max_digits10 = 0; + static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char8_t); + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR char8_t + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR char8_t + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR char8_t + infinity() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } + + static _GLIBCXX_CONSTEXPR char8_t + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } + + static _GLIBCXX_CONSTEXPR char8_t + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } + + static _GLIBCXX_CONSTEXPR char8_t + denorm_min() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; +#endif + +#if __cplusplus >= 201103L + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static constexpr bool is_specialized = true; + + static constexpr char16_t + min() noexcept { return __glibcxx_min (char16_t); } + + static constexpr char16_t + max() noexcept { return __glibcxx_max (char16_t); } + + static constexpr char16_t + lowest() noexcept { return min(); } + + static constexpr int digits = __glibcxx_digits (char16_t); + static constexpr int digits10 = __glibcxx_digits10 (char16_t); + static constexpr int max_digits10 = 0; + static constexpr bool is_signed = __glibcxx_signed (char16_t); + static constexpr bool is_integer = true; + static constexpr bool is_exact = true; + static constexpr int radix = 2; + + static constexpr char16_t + epsilon() noexcept { return 0; } + + static constexpr char16_t + round_error() noexcept { return 0; } + + static constexpr int min_exponent = 0; + static constexpr int min_exponent10 = 0; + static constexpr int max_exponent = 0; + static constexpr int max_exponent10 = 0; + + static constexpr bool has_infinity = false; + static constexpr bool has_quiet_NaN = false; + static constexpr bool has_signaling_NaN = false; + static constexpr float_denorm_style has_denorm = denorm_absent; + static constexpr bool has_denorm_loss = false; + + static constexpr char16_t + infinity() noexcept { return char16_t(); } + + static constexpr char16_t + quiet_NaN() noexcept { return char16_t(); } + + static constexpr char16_t + signaling_NaN() noexcept { return char16_t(); } + + static constexpr char16_t + denorm_min() noexcept { return char16_t(); } + + static constexpr bool is_iec559 = false; + static constexpr bool is_bounded = true; + static constexpr bool is_modulo = !is_signed; + + static constexpr bool traps = __glibcxx_integral_traps; + static constexpr bool tinyness_before = false; + static constexpr float_round_style round_style = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static constexpr bool is_specialized = true; + + static constexpr char32_t + min() noexcept { return __glibcxx_min (char32_t); } + + static constexpr char32_t + max() noexcept { return __glibcxx_max (char32_t); } + + static constexpr char32_t + lowest() noexcept { return min(); } + + static constexpr int digits = __glibcxx_digits (char32_t); + static constexpr int digits10 = __glibcxx_digits10 (char32_t); + static constexpr int max_digits10 = 0; + static constexpr bool is_signed = __glibcxx_signed (char32_t); + static constexpr bool is_integer = true; + static constexpr bool is_exact = true; + static constexpr int radix = 2; + + static constexpr char32_t + epsilon() noexcept { return 0; } + + static constexpr char32_t + round_error() noexcept { return 0; } + + static constexpr int min_exponent = 0; + static constexpr int min_exponent10 = 0; + static constexpr int max_exponent = 0; + static constexpr int max_exponent10 = 0; + + static constexpr bool has_infinity = false; + static constexpr bool has_quiet_NaN = false; + static constexpr bool has_signaling_NaN = false; + static constexpr float_denorm_style has_denorm = denorm_absent; + static constexpr bool has_denorm_loss = false; + + static constexpr char32_t + infinity() noexcept { return char32_t(); } + + static constexpr char32_t + quiet_NaN() noexcept { return char32_t(); } + + static constexpr char32_t + signaling_NaN() noexcept { return char32_t(); } + + static constexpr char32_t + denorm_min() noexcept { return char32_t(); } + + static constexpr bool is_iec559 = false; + static constexpr bool is_bounded = true; + static constexpr bool is_modulo = !is_signed; + + static constexpr bool traps = __glibcxx_integral_traps; + static constexpr bool tinyness_before = false; + static constexpr float_round_style round_style = round_toward_zero; + }; +#endif + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR short + min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; } + + static _GLIBCXX_CONSTEXPR short + max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; } + +#if __cplusplus >= 201103L + static constexpr short + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short); + static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR short + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR short + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR short + infinity() _GLIBCXX_USE_NOEXCEPT { return short(); } + + static _GLIBCXX_CONSTEXPR short + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } + + static _GLIBCXX_CONSTEXPR short + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } + + static _GLIBCXX_CONSTEXPR short + denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR unsigned short + min() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned short + max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; } + +#if __cplusplus >= 201103L + static constexpr unsigned short + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (unsigned short); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (unsigned short); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR unsigned short + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned short + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR unsigned short + infinity() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned short + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned short + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned short + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR int + min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; } + + static _GLIBCXX_CONSTEXPR int + max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; } + +#if __cplusplus >= 201103L + static constexpr int + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int); + static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR int + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR int + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR int + infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR int + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR int + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR int + denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR unsigned int + min() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned int + max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; } + +#if __cplusplus >= 201103L + static constexpr unsigned int + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (unsigned int); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (unsigned int); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR unsigned int + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned int + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR unsigned int + infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned int + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned int + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned int + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR long + min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; } + + static _GLIBCXX_CONSTEXPR long + max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; } + +#if __cplusplus >= 201103L + static constexpr long + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long); + static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR long + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR long + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR long + infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR long + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR long + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR long + denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR unsigned long + min() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned long + max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; } + +#if __cplusplus >= 201103L + static constexpr unsigned long + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (unsigned long); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (unsigned long); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR unsigned long + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned long + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR unsigned long + infinity() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned long + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned long + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned long + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR long long + min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; } + + static _GLIBCXX_CONSTEXPR long long + max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; } + +#if __cplusplus >= 201103L + static constexpr long long + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (long long); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (long long); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR long long + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR long long + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR long long + infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR long long + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR long long + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR long long + denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR unsigned long long + min() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned long long + max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; } + +#if __cplusplus >= 201103L + static constexpr unsigned long long + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (unsigned long long); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (unsigned long long); +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR unsigned long long + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR unsigned long long + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR unsigned long long + infinity() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned long long + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned long long + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_CONSTEXPR unsigned long long + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + +#define __INT_N(TYPE, BITSIZE, EXT, UEXT) \ + __extension__ \ + template<> \ + struct numeric_limits \ + { \ + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; \ + \ + static _GLIBCXX_CONSTEXPR TYPE \ + min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min_b (TYPE, BITSIZE); } \ + \ + static _GLIBCXX_CONSTEXPR TYPE \ + max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max_b (TYPE, BITSIZE); } \ + \ + static _GLIBCXX_USE_CONSTEXPR int digits \ + = BITSIZE - 1; \ + static _GLIBCXX_USE_CONSTEXPR int digits10 \ + = (BITSIZE - 1) * 643L / 2136; \ + \ + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; \ + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; \ + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; \ + static _GLIBCXX_USE_CONSTEXPR int radix = 2; \ + \ + static _GLIBCXX_CONSTEXPR TYPE \ + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } \ + \ + static _GLIBCXX_CONSTEXPR TYPE \ + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } \ + \ + EXT \ + \ + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; \ + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; \ + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; \ + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; \ + \ + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \ + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; \ + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \ + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \ + = denorm_absent; \ + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \ + \ + static _GLIBCXX_CONSTEXPR TYPE \ + infinity() _GLIBCXX_USE_NOEXCEPT \ + { return static_cast(0); } \ + \ + static _GLIBCXX_CONSTEXPR TYPE \ + quiet_NaN() _GLIBCXX_USE_NOEXCEPT \ + { return static_cast(0); } \ + \ + static _GLIBCXX_CONSTEXPR TYPE \ + signaling_NaN() _GLIBCXX_USE_NOEXCEPT \ + { return static_cast(0); } \ + \ + static _GLIBCXX_CONSTEXPR TYPE \ + denorm_min() _GLIBCXX_USE_NOEXCEPT \ + { return static_cast(0); } \ + \ + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; \ + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \ + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; \ + \ + static _GLIBCXX_USE_CONSTEXPR bool traps \ + = __glibcxx_integral_traps; \ + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; \ + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style \ + = round_toward_zero; \ + }; \ + \ + __extension__ \ + template<> \ + struct numeric_limits \ + { \ + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; \ + \ + static _GLIBCXX_CONSTEXPR unsigned TYPE \ + min() _GLIBCXX_USE_NOEXCEPT { return 0; } \ + \ + static _GLIBCXX_CONSTEXPR unsigned TYPE \ + max() _GLIBCXX_USE_NOEXCEPT \ + { return __glibcxx_max_b (unsigned TYPE, BITSIZE); } \ + \ + UEXT \ + \ + static _GLIBCXX_USE_CONSTEXPR int digits \ + = BITSIZE; \ + static _GLIBCXX_USE_CONSTEXPR int digits10 \ + = BITSIZE * 643L / 2136; \ + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; \ + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; \ + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; \ + static _GLIBCXX_USE_CONSTEXPR int radix = 2; \ + \ + static _GLIBCXX_CONSTEXPR unsigned TYPE \ + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } \ + \ + static _GLIBCXX_CONSTEXPR unsigned TYPE \ + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } \ + \ + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; \ + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; \ + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; \ + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; \ + \ + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \ + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; \ + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \ + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \ + = denorm_absent; \ + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \ + \ + static _GLIBCXX_CONSTEXPR unsigned TYPE \ + infinity() _GLIBCXX_USE_NOEXCEPT \ + { return static_cast(0); } \ + \ + static _GLIBCXX_CONSTEXPR unsigned TYPE \ + quiet_NaN() _GLIBCXX_USE_NOEXCEPT \ + { return static_cast(0); } \ + \ + static _GLIBCXX_CONSTEXPR unsigned TYPE \ + signaling_NaN() _GLIBCXX_USE_NOEXCEPT \ + { return static_cast(0); } \ + \ + static _GLIBCXX_CONSTEXPR unsigned TYPE \ + denorm_min() _GLIBCXX_USE_NOEXCEPT \ + { return static_cast(0); } \ + \ + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; \ + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \ + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; \ + \ + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; \ + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; \ + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style \ + = round_toward_zero; \ + }; + +#if __cplusplus >= 201103L + +#define __INT_N_201103(TYPE) \ + static constexpr TYPE \ + lowest() noexcept { return min(); } \ + static constexpr int max_digits10 = 0; + +#define __INT_N_U201103(TYPE) \ + static constexpr unsigned TYPE \ + lowest() noexcept { return min(); } \ + static constexpr int max_digits10 = 0; + +#else +#define __INT_N_201103(TYPE) +#define __INT_N_U201103(TYPE) +#endif + +#if !defined(__STRICT_ANSI__) +#ifdef __GLIBCXX_TYPE_INT_N_0 + __INT_N(__GLIBCXX_TYPE_INT_N_0, __GLIBCXX_BITSIZE_INT_N_0, + __INT_N_201103 (__GLIBCXX_TYPE_INT_N_0), + __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_0)) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_1 + __INT_N (__GLIBCXX_TYPE_INT_N_1, __GLIBCXX_BITSIZE_INT_N_1, + __INT_N_201103 (__GLIBCXX_TYPE_INT_N_1), + __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_1)) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_2 + __INT_N (__GLIBCXX_TYPE_INT_N_2, __GLIBCXX_BITSIZE_INT_N_2, + __INT_N_201103 (__GLIBCXX_TYPE_INT_N_2), + __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_2)) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_3 + __INT_N (__GLIBCXX_TYPE_INT_N_3, __GLIBCXX_BITSIZE_INT_N_3, + __INT_N_201103 (__GLIBCXX_TYPE_INT_N_3), + __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_3)) +#endif + +#elif defined __STRICT_ANSI__ && defined __SIZEOF_INT128__ + __INT_N(__int128, 128, + __INT_N_201103 (__int128), + __INT_N_U201103 (__int128)) +#endif + +#undef __INT_N +#undef __INT_N_201103 +#undef __INT_N_U201103 + + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR float + min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; } + + static _GLIBCXX_CONSTEXPR float + max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; } + +#if __cplusplus >= 201103L + static constexpr float + lowest() noexcept { return -__FLT_MAX__; } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__; + static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__; +#if __cplusplus >= 201103L + static constexpr int max_digits10 + = __glibcxx_max_digits10 (__FLT_MANT_DIG__); +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; + static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; + + static _GLIBCXX_CONSTEXPR float + epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; } + + static _GLIBCXX_CONSTEXPR float + round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss + = __glibcxx_float_has_denorm_loss; + + static _GLIBCXX_CONSTEXPR float + infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); } + + static _GLIBCXX_CONSTEXPR float + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); } + + static _GLIBCXX_CONSTEXPR float + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); } + + static _GLIBCXX_CONSTEXPR float + denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 + = has_infinity && has_quiet_NaN && has_denorm == denorm_present; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before + = __glibcxx_float_tinyness_before; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_to_nearest; + }; + +#undef __glibcxx_float_has_denorm_loss +#undef __glibcxx_float_traps +#undef __glibcxx_float_tinyness_before + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR double + min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; } + + static _GLIBCXX_CONSTEXPR double + max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; } + +#if __cplusplus >= 201103L + static constexpr double + lowest() noexcept { return -__DBL_MAX__; } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__; + static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__; +#if __cplusplus >= 201103L + static constexpr int max_digits10 + = __glibcxx_max_digits10 (__DBL_MANT_DIG__); +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; + static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; + + static _GLIBCXX_CONSTEXPR double + epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; } + + static _GLIBCXX_CONSTEXPR double + round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss + = __glibcxx_double_has_denorm_loss; + + static _GLIBCXX_CONSTEXPR double + infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); } + + static _GLIBCXX_CONSTEXPR double + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); } + + static _GLIBCXX_CONSTEXPR double + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); } + + static _GLIBCXX_CONSTEXPR double + denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 + = has_infinity && has_quiet_NaN && has_denorm == denorm_present; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before + = __glibcxx_double_tinyness_before; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_to_nearest; + }; + +#undef __glibcxx_double_has_denorm_loss +#undef __glibcxx_double_traps +#undef __glibcxx_double_tinyness_before + + /// numeric_limits specialization. + template<> + struct numeric_limits + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR long double + min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; } + + static _GLIBCXX_CONSTEXPR long double + max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; } + +#if __cplusplus >= 201103L + static constexpr long double + lowest() noexcept { return -__LDBL_MAX__; } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__; + static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__; +#if __cplusplus >= 201103L + static _GLIBCXX_USE_CONSTEXPR int max_digits10 + = __glibcxx_max_digits10 (__LDBL_MANT_DIG__); +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; + static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; + + static _GLIBCXX_CONSTEXPR long double + epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; } + + static _GLIBCXX_CONSTEXPR long double + round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss + = __glibcxx_long_double_has_denorm_loss; + + static _GLIBCXX_CONSTEXPR long double + infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); } + + static _GLIBCXX_CONSTEXPR long double + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); } + + static _GLIBCXX_CONSTEXPR long double + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); } + + static _GLIBCXX_CONSTEXPR long double + denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 + = has_infinity && has_quiet_NaN && has_denorm == denorm_present; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = + __glibcxx_long_double_tinyness_before; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = + round_to_nearest; + }; + +#undef __glibcxx_long_double_has_denorm_loss +#undef __glibcxx_long_double_traps +#undef __glibcxx_long_double_tinyness_before + +#define __glibcxx_concat3_(P,M,S) P ## M ## S +#define __glibcxx_concat3(P,M,S) __glibcxx_concat3_ (P,M,S) + +#if __cplusplus >= 201103L +# define __max_digits10 max_digits10 +#endif + +#define __glibcxx_float_n(BITSIZE) \ + __extension__ \ + template<> \ + struct numeric_limits<_Float##BITSIZE> \ + { \ + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; \ + \ + static _GLIBCXX_CONSTEXPR _Float##BITSIZE \ + min() _GLIBCXX_USE_NOEXCEPT \ + { return __glibcxx_concat3 (__FLT, BITSIZE, _MIN__); } \ + \ + static _GLIBCXX_CONSTEXPR _Float##BITSIZE \ + max() _GLIBCXX_USE_NOEXCEPT \ + { return __glibcxx_concat3 (__FLT, BITSIZE, _MAX__); } \ + \ + static _GLIBCXX_CONSTEXPR _Float##BITSIZE \ + lowest() _GLIBCXX_USE_NOEXCEPT \ + { return -__glibcxx_concat3 (__FLT, BITSIZE, _MAX__); } \ + \ + static _GLIBCXX_USE_CONSTEXPR int digits \ + = __glibcxx_concat3 (__FLT, BITSIZE, _MANT_DIG__); \ + static _GLIBCXX_USE_CONSTEXPR int digits10 \ + = __glibcxx_concat3 (__FLT, BITSIZE, _DIG__); \ + static _GLIBCXX_USE_CONSTEXPR int __max_digits10 \ + = __glibcxx_max_digits10 (__glibcxx_concat3 (__FLT, BITSIZE, \ + _MANT_DIG__)); \ + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; \ + static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; \ + static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; \ + static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; \ + \ + static _GLIBCXX_CONSTEXPR _Float##BITSIZE \ + epsilon() _GLIBCXX_USE_NOEXCEPT \ + { return __glibcxx_concat3 (__FLT, BITSIZE, _EPSILON__); } \ + \ + static _GLIBCXX_CONSTEXPR _Float##BITSIZE \ + round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F##BITSIZE; } \ + \ + static _GLIBCXX_USE_CONSTEXPR int min_exponent \ + = __glibcxx_concat3 (__FLT, BITSIZE, _MIN_EXP__); \ + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 \ + = __glibcxx_concat3 (__FLT, BITSIZE, _MIN_10_EXP__); \ + static _GLIBCXX_USE_CONSTEXPR int max_exponent \ + = __glibcxx_concat3 (__FLT, BITSIZE, _MAX_EXP__); \ + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 \ + = __glibcxx_concat3 (__FLT, BITSIZE, _MAX_10_EXP__); \ + \ + static _GLIBCXX_USE_CONSTEXPR bool has_infinity \ + = __glibcxx_concat3 (__FLT, BITSIZE, _HAS_INFINITY__); \ + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN \ + = __glibcxx_concat3 (__FLT, BITSIZE, _HAS_QUIET_NAN__); \ + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN \ + = has_quiet_NaN; \ + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \ + = bool(__glibcxx_concat3 (__FLT, BITSIZE, _HAS_DENORM__)) \ + ? denorm_present : denorm_absent; \ + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \ + \ + static _GLIBCXX_CONSTEXPR _Float##BITSIZE \ + infinity() _GLIBCXX_USE_NOEXCEPT \ + { return __builtin_huge_valf##BITSIZE(); } \ + \ + static _GLIBCXX_CONSTEXPR _Float##BITSIZE \ + quiet_NaN() _GLIBCXX_USE_NOEXCEPT \ + { return __builtin_nanf##BITSIZE(""); } \ + \ + static _GLIBCXX_CONSTEXPR _Float##BITSIZE \ + signaling_NaN() _GLIBCXX_USE_NOEXCEPT \ + { return __builtin_nansf##BITSIZE(""); } \ + \ + static _GLIBCXX_CONSTEXPR _Float##BITSIZE \ + denorm_min() _GLIBCXX_USE_NOEXCEPT \ + { return __glibcxx_concat3 (__FLT, BITSIZE, _DENORM_MIN__); } \ + \ + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 \ + = has_infinity && has_quiet_NaN && has_denorm == denorm_present;\ + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \ + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; \ + \ + static _GLIBCXX_USE_CONSTEXPR bool traps = false; \ + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; \ + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style \ + = round_to_nearest; \ + }; \ + +#ifdef __STDCPP_FLOAT16_T__ +__glibcxx_float_n(16) +#endif +#ifdef __FLT32_DIG__ +__glibcxx_float_n(32) +#endif +#ifdef __FLT64_DIG__ +__glibcxx_float_n(64) +#endif +#ifdef __FLT128_DIG__ +__glibcxx_float_n(128) +#endif +#undef __glibcxx_float_n +#undef __glibcxx_concat3 +#undef __glibcxx_concat3_ + +#if __cplusplus >= 201103L +# undef __max_digits10 +#endif + +#ifdef __STDCPP_BFLOAT16_T__ + __extension__ + template<> + struct numeric_limits<__gnu_cxx::__bfloat16_t> + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t + min() _GLIBCXX_USE_NOEXCEPT + { return __BFLT16_MIN__; } + + static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t + max() _GLIBCXX_USE_NOEXCEPT + { return __BFLT16_MAX__; } + + static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t + lowest() _GLIBCXX_USE_NOEXCEPT + { return -__BFLT16_MAX__; } + + static _GLIBCXX_USE_CONSTEXPR int digits = __BFLT16_MANT_DIG__; + static _GLIBCXX_USE_CONSTEXPR int digits10 = __BFLT16_DIG__; +#if __cplusplus >= 201103L + static _GLIBCXX_USE_CONSTEXPR int max_digits10 + = __glibcxx_max_digits10 (__BFLT16_MANT_DIG__); +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; + static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; + + static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t + epsilon() _GLIBCXX_USE_NOEXCEPT + { return __BFLT16_EPSILON__; } + + static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t + round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5BF16; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = __BFLT16_MIN_EXP__; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __BFLT16_MIN_10_EXP__; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = __BFLT16_MAX_EXP__; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __BFLT16_MAX_10_EXP__; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity + = __BFLT16_HAS_INFINITY__; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN + = __BFLT16_HAS_QUIET_NAN__; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = bool(__BFLT16_HAS_DENORM__) ? denorm_present : denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t + infinity() _GLIBCXX_USE_NOEXCEPT + { return __gnu_cxx::__bfloat16_t(__builtin_huge_valf()); } + + static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return __gnu_cxx::__bfloat16_t(__builtin_nanf("")); } + + static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return __builtin_nansf16b(""); } + + static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return __BFLT16_DENORM_MIN__; } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 + = has_infinity && has_quiet_NaN && has_denorm == denorm_present; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = false; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_to_nearest; + }; +#endif // __STDCPP_BFLOAT16_T__ + +#if defined(_GLIBCXX_USE_FLOAT128) +// We either need Q literal suffixes, or IEEE double. +#if ! defined(__STRICT_ANSI__) || defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64) + __extension__ + template<> + struct numeric_limits<__float128> + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR __float128 + min() _GLIBCXX_USE_NOEXCEPT + { +#ifdef __STRICT_ANSI__ + // 0x1.0p-30 * 0x1.0p-16352 + return double(9.3132257461547852e-10) * _S_1pm16352(); +#else + return __extension__ 0x1.0p-16382Q; +#endif + } + + static _GLIBCXX_CONSTEXPR __float128 + max() _GLIBCXX_USE_NOEXCEPT + { +#ifdef __STRICT_ANSI__ + // (0x1.fffffffffffffp+127 + 0x0.fffffffffffffp+75 + 0x0.ffp+23) + // * 0x1.0p16256 + return (__float128(double(3.4028236692093843e+38)) + + double(3.7778931862957153e+22) + double(8.35584e+6)) + * _S_1p16256(); +#else + return __extension__ 0x1.ffffffffffffffffffffffffffffp+16383Q; +#endif + } + + static _GLIBCXX_CONSTEXPR __float128 + lowest() _GLIBCXX_USE_NOEXCEPT + { return -max(); } + + static _GLIBCXX_USE_CONSTEXPR int digits = 113; + static _GLIBCXX_USE_CONSTEXPR int digits10 = 33; +#if __cplusplus >= 201103L + static constexpr int max_digits10 = 36; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; + static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; + + static _GLIBCXX_CONSTEXPR __float128 + epsilon() _GLIBCXX_USE_NOEXCEPT + { return double(1.9259299443872359e-34); } + + static _GLIBCXX_CONSTEXPR __float128 + round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = -16381; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = -4931; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 16384; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 4932; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = 1; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = 1; +#if __has_builtin(__builtin_nansq) \ + || (__has_builtin(__builtin_bit_cast) && __has_builtin(__builtin_nansf128)) + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = true; +#else + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; +#endif + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_present; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR __float128 + infinity() _GLIBCXX_USE_NOEXCEPT + { return __builtin_huge_val(); } + + static _GLIBCXX_CONSTEXPR __float128 + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return __builtin_nan(""); } + + static _GLIBCXX_CONSTEXPR __float128 + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { +#if __has_builtin(__builtin_nansq) + return __builtin_nansq(""); +#elif __has_builtin(__builtin_bit_cast) && __has_builtin(__builtin_nansf128) + return __builtin_bit_cast(__float128, __builtin_nansf128("")); +#else + return quiet_NaN(); +#endif + } + + static _GLIBCXX_CONSTEXPR __float128 + denorm_min() _GLIBCXX_USE_NOEXCEPT + { +#if defined(__STRICT_ANSI__) || defined(__INTEL_COMPILER) + // 0x1.0p-142 * 0x1.0p-16352 + return double(1.7936620343357659e-43) * _S_1pm16352(); +#else + return __extension__ 0x1.0p-16494Q; +#endif + } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = has_signaling_NaN; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; + + static _GLIBCXX_USE_CONSTEXPR bool traps = false; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_to_nearest; + +#if defined(__STRICT_ANSI__) || defined(__INTEL_COMPILER) + private: + static _GLIBCXX_CONSTEXPR __float128 + _S_4p(__float128 __v) _GLIBCXX_USE_NOEXCEPT + { return __v * __v * __v * __v; } + + static _GLIBCXX_CONSTEXPR __float128 + _S_1pm4088() _GLIBCXX_USE_NOEXCEPT + { return _S_4p(/* 0x1.0p-1022 */ double(2.2250738585072014e-308)); } + + static _GLIBCXX_CONSTEXPR __float128 + _S_1pm16352() _GLIBCXX_USE_NOEXCEPT + { return _S_4p(_S_1pm4088()); } + + static _GLIBCXX_CONSTEXPR __float128 + _S_1p4064() _GLIBCXX_USE_NOEXCEPT + { return _S_4p(/* 0x1.0p+1016 */ double(7.0222388080559215e+305)); } + + static _GLIBCXX_CONSTEXPR __float128 + _S_1p16256() _GLIBCXX_USE_NOEXCEPT + { return _S_4p(_S_1p4064()); } +#endif + }; +#endif // !__STRICT_ANSI__ || DOUBLE_IS_IEEE_BINARY64 +#endif // _GLIBCXX_USE_FLOAT128 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#undef __glibcxx_signed +#undef __glibcxx_min +#undef __glibcxx_max +#undef __glibcxx_digits +#undef __glibcxx_digits10 +#undef __glibcxx_max_digits10 + +#pragma GCC diagnostic pop +#endif // _GLIBCXX_NUMERIC_LIMITS diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@limits.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@limits.blob new file mode 100644 index 0000000000000000000000000000000000000000..e485b63fb320e98b227027f18250a8fb424e4e89 GIT binary patch literal 161246 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�G)jjVB+~JfHeE0vr_%R<{CxJMkmgsf#_F)rv9Px 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@locale b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@locale new file mode 100644 index 0000000..769f168 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@locale @@ -0,0 +1,50 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// +// ISO C++ 14882: 22.1 Locales +// + +/** @file include/locale + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_LOCALE +#define _GLIBCXX_LOCALE 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // locales + +#include +#include +#include +#include +#if __cplusplus >= 201103L +# include +#endif + +#endif /* _GLIBCXX_LOCALE */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@locale.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@locale.blob new file mode 100644 index 0000000000000000000000000000000000000000..8674a9e8edfcd39cc02657744044b57185939231 GIT binary patch literal 11741 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@new b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@new new file mode 100644 index 0000000..a550373 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@new @@ -0,0 +1,269 @@ +// The -*- C++ -*- dynamic memory management header. + +// Copyright (C) 1994-2025 Free Software Foundation, Inc. + +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file new + * This is a Standard C++ Library header. + * + * The header @c new defines several functions to manage dynamic memory and + * handling memory allocation errors; see + * https://gcc.gnu.org/onlinedocs/libstdc++/manual/dynamic_memory.html + * for more. + */ + +#ifndef _NEW +#define _NEW + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +#define __glibcxx_want_launder +#define __glibcxx_want_hardware_interference_size +#define __glibcxx_want_destroying_delete +#define __glibcxx_want_constexpr_new +#include + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // scoped enum + +#pragma GCC visibility push(default) + +extern "C++" { + +namespace std +{ + /** + * @brief Exception possibly thrown by @c new. + * @ingroup exceptions + * + * @c bad_alloc (or classes derived from it) is used to report allocation + * errors from the throwing forms of @c new. */ + class bad_alloc : public exception + { + public: + bad_alloc() throw() { } + +#if __cplusplus >= 201103L + bad_alloc(const bad_alloc&) = default; + bad_alloc& operator=(const bad_alloc&) = default; +#endif + + // This declaration is not useless: + // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 + virtual ~bad_alloc() throw(); + + // See comment in eh_exception.cc. + virtual const char* what() const throw(); + }; + +#if __cplusplus >= 201103L + class bad_array_new_length : public bad_alloc + { + public: + bad_array_new_length() throw() { } + + // This declaration is not useless: + // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 + virtual ~bad_array_new_length() throw(); + + // See comment in eh_exception.cc. + virtual const char* what() const throw(); + }; +#endif + +#if __cpp_aligned_new + enum class align_val_t: size_t {}; +#endif + + struct nothrow_t + { +#if __cplusplus >= 201103L + explicit nothrow_t() = default; +#endif + }; + + extern const nothrow_t nothrow; + + /** If you write your own error handler to be called by @c new, it must + * be of this type. */ + typedef void (*new_handler)(); + + /// Takes a replacement handler as the argument, returns the + /// previous handler. + new_handler set_new_handler(new_handler) throw(); + +#if __cplusplus >= 201103L + /// Return the current new handler. + new_handler get_new_handler() noexcept; +#endif +} // namespace std + +//@{ +/** These are replaceable signatures: + * - normal single new and delete (no arguments, throw @c bad_alloc on error) + * - normal array new and delete (same) + * - @c nothrow single new and delete (take a @c nothrow argument, return + * @c NULL on error) + * - @c nothrow array new and delete (same) + * + * Placement new and delete signatures (take a memory address argument, + * does nothing) may not be replaced by a user's program. +*/ +_GLIBCXX_NODISCARD void* operator new(std::size_t) + _GLIBCXX_TXN_SAFE _GLIBCXX_THROW (std::bad_alloc) + __attribute__((__externally_visible__, __malloc__)); +_GLIBCXX_NODISCARD void* operator new[](std::size_t) + _GLIBCXX_TXN_SAFE _GLIBCXX_THROW (std::bad_alloc) + __attribute__((__externally_visible__, __malloc__)); +void operator delete(void*) _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +void operator delete[](void*) _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +#if __cpp_sized_deallocation +void operator delete(void*, std::size_t) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +void operator delete[](void*, std::size_t) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +#endif +_GLIBCXX_NODISCARD void* operator new(std::size_t, const std::nothrow_t&) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); +_GLIBCXX_NODISCARD void* operator new[](std::size_t, const std::nothrow_t&) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); +void operator delete(void*, const std::nothrow_t&) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +void operator delete[](void*, const std::nothrow_t&) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +#if __cpp_aligned_new +_GLIBCXX_NODISCARD void* operator new(std::size_t, std::align_val_t) + _GLIBCXX_TXN_SAFE + __attribute__((__externally_visible__, __alloc_size__ (1), __alloc_align__ (2), __malloc__)); +_GLIBCXX_NODISCARD void* operator new(std::size_t, std::align_val_t, const std::nothrow_t&) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__, __alloc_size__ (1), __alloc_align__ (2), __malloc__)); +void operator delete(void*, std::align_val_t) _GLIBCXX_TXN_SAFE + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +void operator delete(void*, std::align_val_t, const std::nothrow_t&) + _GLIBCXX_TXN_SAFE + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +_GLIBCXX_NODISCARD void* operator new[](std::size_t, std::align_val_t) + _GLIBCXX_TXN_SAFE + __attribute__((__externally_visible__, __alloc_size__ (1), __alloc_align__ (2), __malloc__)); +_GLIBCXX_NODISCARD void* operator new[](std::size_t, std::align_val_t, const std::nothrow_t&) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__, __alloc_size__ (1), __alloc_align__ (2), __malloc__)); +void operator delete[](void*, std::align_val_t) _GLIBCXX_TXN_SAFE + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +void operator delete[](void*, std::align_val_t, const std::nothrow_t&) + _GLIBCXX_TXN_SAFE + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +#if __cpp_sized_deallocation +void operator delete(void*, std::size_t, std::align_val_t) _GLIBCXX_TXN_SAFE + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +void operator delete[](void*, std::size_t, std::align_val_t) _GLIBCXX_TXN_SAFE + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +#endif // __cpp_sized_deallocation +#endif // __cpp_aligned_new + +#if __cpp_lib_constexpr_new >= 202406L +# define _GLIBCXX_PLACEMENT_CONSTEXPR constexpr +#else +# define _GLIBCXX_PLACEMENT_CONSTEXPR inline +#endif + +// Default placement versions of operator new. +_GLIBCXX_NODISCARD _GLIBCXX_PLACEMENT_CONSTEXPR +void* operator new(std::size_t, void* __p) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT +{ return __p; } +_GLIBCXX_NODISCARD _GLIBCXX_PLACEMENT_CONSTEXPR +void* operator new[](std::size_t, void* __p) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT +{ return __p; } + +#undef _GLIBCXX_PLACEMENT_CONSTEXPR + +// Default placement versions of operator delete. +inline void operator delete (void*, void*) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT +{ } +inline void operator delete[](void*, void*) + _GLIBCXX_TXN_SAFE _GLIBCXX_USE_NOEXCEPT +{ } +//@} +} // extern "C++" + +namespace std +{ +#ifdef __cpp_lib_launder // C++ >= 17 && HAVE_BUILTIN_LAUNDER + /// Pointer optimization barrier [ptr.launder] + template + [[nodiscard]] constexpr _Tp* + launder(_Tp* __p) noexcept + { + if constexpr (__is_same(const volatile _Tp, const volatile void)) + static_assert(!__is_same(const volatile _Tp, const volatile void), + "std::launder argument must not be a void pointer"); +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_function) + else if constexpr (__is_function(_Tp)) + static_assert(!__is_function(_Tp), + "std::launder argument must not be a function pointer"); +#endif + else + return __builtin_launder(__p); + return nullptr; + } +#endif // __cpp_lib_launder + +#ifdef __cpp_lib_hardware_interference_size // C++ >= 17 && defined(gcc_dest_sz) + inline constexpr size_t hardware_destructive_interference_size = __GCC_DESTRUCTIVE_SIZE; + inline constexpr size_t hardware_constructive_interference_size = __GCC_CONSTRUCTIVE_SIZE; +#endif // __cpp_lib_hardware_interference_size + +// Emitted despite the FTM potentially being undefined. +#if __cplusplus >= 202002L + /// Tag type used to declare a class-specific operator delete that can + /// invoke the destructor before deallocating the memory. + struct destroying_delete_t + { + explicit destroying_delete_t() = default; + }; + /// Tag variable of type destroying_delete_t. + inline constexpr destroying_delete_t destroying_delete{}; +#endif // C++20 +} + +#pragma GCC visibility pop +#pragma GCC diagnostic pop + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@new.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@new.blob new file mode 100644 index 0000000000000000000000000000000000000000..1606f6d5851c5ef51cb37bcf84cd125014edacfd GIT binary patch literal 20203 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 B*P#Fa literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ostream b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ostream new file mode 100644 index 0000000..644e568 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ostream @@ -0,0 +1,296 @@ +// Output streams -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/ostream + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 27.6.2 Output streams +// + +#ifndef _GLIBCXX_OSTREAM +#define _GLIBCXX_OSTREAM 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // iostreams + +#include +#if __cplusplus > 202002L +# include +#endif + +# define __glibcxx_want_print +#include // __glibcxx_syncbuf + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Standard basic_ostream manipulators + + /** + * @brief Write a newline and flush the stream. + * + * This manipulator is often mistakenly used when a simple newline is + * desired, leading to poor buffering performance. See + * https://gcc.gnu.org/onlinedocs/libstdc++/manual/streambufs.html#io.streambuf.buffering + * for more on this subject. + */ + template + inline basic_ostream<_CharT, _Traits>& + endl(basic_ostream<_CharT, _Traits>& __os) + { return flush(__os.put(__os.widen('\n'))); } + + /** + * @brief Write a null character into the output sequence. + * + * Null character is @c CharT() by definition. For CharT + * of @c char, this correctly writes the ASCII @c NUL character + * string terminator. + */ + template + inline basic_ostream<_CharT, _Traits>& + ends(basic_ostream<_CharT, _Traits>& __os) + { return __os.put(_CharT()); } + + /** + * @brief Flushes the output stream. + * + * This manipulator simply calls the stream's @c flush() member function. + */ + template + inline basic_ostream<_CharT, _Traits>& + flush(basic_ostream<_CharT, _Traits>& __os) + { return __os.flush(); } + +#ifdef __glibcxx_syncbuf // C++ >= 20 && HOSTED && CXX11ABI + template + class __syncbuf_base : public basic_streambuf<_CharT, _Traits> + { + public: + static bool* + _S_get(basic_streambuf<_CharT, _Traits>* __buf [[maybe_unused]]) noexcept + { +#if __cpp_rtti + if (auto __p = dynamic_cast<__syncbuf_base*>(__buf)) + return &__p->_M_emit_on_sync; +#endif + return nullptr; + } + + protected: + __syncbuf_base(basic_streambuf<_CharT, _Traits>* __w = nullptr) + : _M_wrapped(__w) + { } + + basic_streambuf<_CharT, _Traits>* _M_wrapped = nullptr; + bool _M_emit_on_sync = false; + bool _M_needs_sync = false; + }; + + template + inline basic_ostream<_CharT, _Traits>& + emit_on_flush(basic_ostream<_CharT, _Traits>& __os) + { + if (bool* __flag = __syncbuf_base<_CharT, _Traits>::_S_get(__os.rdbuf())) + *__flag = true; + return __os; + } + + template + inline basic_ostream<_CharT, _Traits>& + noemit_on_flush(basic_ostream<_CharT, _Traits>& __os) + { + if (bool* __flag = __syncbuf_base<_CharT, _Traits>::_S_get(__os.rdbuf())) + *__flag = false; + return __os; + } + + template + inline basic_ostream<_CharT, _Traits>& + flush_emit(basic_ostream<_CharT, _Traits>& __os) + { + struct _Restore + { + ~_Restore() { *_M_flag = _M_prev; } + + bool _M_prev = false; + bool* _M_flag = &_M_prev; + } __restore; + + if (bool* __flag = __syncbuf_base<_CharT, _Traits>::_S_get(__os.rdbuf())) + { + __restore._M_prev = *__flag; + __restore._M_flag = __flag; + *__flag = true; + } + + __os.flush(); + return __os; + } +#endif // __glibcxx_syncbuf + +#if __cpp_lib_print // C++ >= 23 + inline void + vprint_nonunicode(ostream& __os, string_view __fmt, format_args __args) + { + ostream::sentry __cerb(__os); + if (__cerb) + { + __format::_Str_sink __buf; + std::vformat_to(__buf.out(), __os.getloc(), __fmt, __args); + auto __out = __buf.view(); + + __try + { + std::__ostream_write(__os, __out.data(), __out.size()); + } + __catch(const __cxxabiv1::__forced_unwind&) + { + __os._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __os._M_setstate(ios_base::badbit); } + } + } + + inline void + vprint_unicode(ostream& __os, string_view __fmt, format_args __args) + { +#if !defined(_WIN32) || defined(__CYGWIN__) + // For most targets we don't need to do anything special to write + // Unicode to a terminal. + std::vprint_nonunicode(__os, __fmt, __args); +#else + ostream::sentry __cerb(__os); + if (__cerb) + { + __format::_Str_sink __buf; + std::vformat_to(__buf.out(), __os.getloc(), __fmt, __args); + auto __out = __buf.view(); + + void* __open_terminal(streambuf*); + error_code __write_to_terminal(void*, span); + // If stream refers to a terminal, write a Unicode string to it. + if (auto __term = __open_terminal(__os.rdbuf())) + { +#if !defined(_WIN32) || defined(__CYGWIN__) + // For POSIX, __open_terminal(streambuf*) uses fdopen to open a + // new file, so we would need to close it here. This code is not + // actually compiled because it's inside an #ifdef _WIN32 group, + // but just in case that changes in future ... + struct _Guard + { + _Guard(void* __p) : _M_f((FILE*)__p) { } + ~_Guard() { std::fclose(_M_f); } + _Guard(_Guard&&) = delete; + _Guard& operator=(_Guard&&) = delete; + FILE* _M_f; + }; + _Guard __g(__term); +#endif + + ios_base::iostate __err = ios_base::goodbit; + __try + { + if (__os.rdbuf()->pubsync() == -1) + __err = ios::badbit; + else if (auto __e = __write_to_terminal(__term, __out)) + if (__e != std::make_error_code(errc::illegal_byte_sequence)) + __err = ios::badbit; + } + __catch(const __cxxabiv1::__forced_unwind&) + { + __os._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __os._M_setstate(ios_base::badbit); } + + if (__err) + __os.setstate(__err); + return; + } + + // Otherwise just insert the string as vprint_nonunicode does. + __try + { + std::__ostream_write(__os, __out.data(), __out.size()); + } + __catch(const __cxxabiv1::__forced_unwind&) + { + __os._M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { __os._M_setstate(ios_base::badbit); } + } +#endif // _WIN32 + } + + template + inline void + print(ostream& __os, format_string<_Args...> __fmt, _Args&&... __args) + { + auto __fmtargs = std::make_format_args(__args...); + if constexpr (__unicode::__literal_encoding_is_utf8()) + std::vprint_unicode(__os, __fmt.get(), __fmtargs); + else + std::vprint_nonunicode(__os, __fmt.get(), __fmtargs); + } + + template + inline void + println(ostream& __os, format_string<_Args...> __fmt, _Args&&... __args) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4088. println ignores the locale imbued in std::ostream + std::print(__os, "{}\n", std::format(__os.getloc(), __fmt, + std::forward<_Args>(__args)...)); + } + + // Defined for C++26, supported as an extension to C++23. + inline void println(ostream& __os) + { +#if defined(_WIN32) && !defined(__CYGWIN__) + if constexpr (__unicode::__literal_encoding_is_utf8()) + std::vprint_unicode(__os, "\n", std::make_format_args()); + else +#endif + __os.put('\n'); + } + +#endif // __cpp_lib_print + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#include + +#endif /* _GLIBCXX_OSTREAM */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ostream.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ostream.blob new file mode 100644 index 0000000000000000000000000000000000000000..fac96a43f2921a9b2f6c77d90bd4b71bf1d444f4 GIT binary patch literal 14932 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 gAwjN=z6=Zu3UIfh$tf5zFfb|#C>k(= 201307) || \ + (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1600) || \ + (!defined(__INTEL_COMPILER) && _PSTL_GCC_VERSION >= 40900) || \ + defined(_GLIBCXX_CLANG) +# define _PSTL_PRAGMA_SIMD _PSTL_PRAGMA(omp simd) +# define _PSTL_PRAGMA_DECLARE_SIMD _PSTL_PRAGMA(omp declare simd) +# define _PSTL_PRAGMA_SIMD_REDUCTION(PRM) _PSTL_PRAGMA(omp simd reduction(PRM)) +#elif !defined(_MSC_VER) //#pragma simd +# define _PSTL_PRAGMA_SIMD _PSTL_PRAGMA(simd) +# define _PSTL_PRAGMA_DECLARE_SIMD +# define _PSTL_PRAGMA_SIMD_REDUCTION(PRM) _PSTL_PRAGMA(simd reduction(PRM)) +#else //no simd +# define _PSTL_PRAGMA_SIMD +# define _PSTL_PRAGMA_DECLARE_SIMD +# define _PSTL_PRAGMA_SIMD_REDUCTION(PRM) +#endif //Enable SIMD + +#if defined(__INTEL_COMPILER) +# define _PSTL_PRAGMA_FORCEINLINE _PSTL_PRAGMA(forceinline) +#else +# define _PSTL_PRAGMA_FORCEINLINE +#endif + +#if (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1900) || \ + (!defined(__INTEL_COMPILER) && _PSTL_GCC_VERSION >= 100000) +# define _PSTL_PRAGMA_SIMD_SCAN(PRM) _PSTL_PRAGMA(omp simd reduction(inscan, PRM)) +# define _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN(PRM) _PSTL_PRAGMA(omp scan inclusive(PRM)) +# define _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN(PRM) _PSTL_PRAGMA(omp scan exclusive(PRM)) +#else +# define _PSTL_PRAGMA_SIMD_SCAN(PRM) +# define _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN(PRM) +# define _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN(PRM) +#endif + +// Should be defined to 1 for environments with a vendor implementation of C++17 execution policies +#define _PSTL_CPP17_EXECUTION_POLICIES_PRESENT (_MSC_VER >= 1912 && _MSVC_LANG >= 201703L) || \ + (_GLIBCXX_RELEASE >= 9 && __GLIBCXX__ >= 20190503 && __cplusplus >= 201703L) + +#if (defined(_MSC_VER) && _MSC_VER >= 1900) || \ + __cplusplus >= 201300L || \ + __cpp_lib_robust_nonmodifying_seq_ops == 201304 +# define _PSTL_CPP14_2RANGE_MISMATCH_EQUAL_PRESENT +#endif +#if (defined(_MSC_VER) && _MSC_VER >= 1900) || \ + __cplusplus >= 201402L || \ + __cpp_lib_make_reverse_iterator == 201402 +# define _PSTL_CPP14_MAKE_REVERSE_ITERATOR_PRESENT +#endif +#if (defined(_MSC_VER) && _MSC_VER >= 1900) || __cplusplus >= 201402L +# define _PSTL_CPP14_INTEGER_SEQUENCE_PRESENT +#endif +#if (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1700) || \ + (defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023918) || \ + __cplusplus >= 201402L +# define _PSTL_CPP14_VARIABLE_TEMPLATES_PRESENT +#endif + +#if defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1800 +# define _PSTL_EARLYEXIT_PRESENT +# define _PSTL_MONOTONIC_PRESENT +#endif + +#if (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1900) || \ + (!defined(__INTEL_COMPILER) && _PSTL_GCC_VERSION >= 40900) || \ + (defined(_OPENMP) && _OPENMP >= 201307) +# define _PSTL_UDR_PRESENT +#endif + +#if (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1900 && __INTEL_COMPILER_BUILD_DATE >= 20180626) || \ + (!defined(__INTEL_COMPILER) && _PSTL_GCC_VERSION >= 100000) +# define _PSTL_UDS_PRESENT +#endif + +#if defined(_PSTL_EARLYEXIT_PRESENT) +# define _PSTL_PRAGMA_SIMD_EARLYEXIT _PSTL_PRAGMA(omp simd early_exit) +#else +# define _PSTL_PRAGMA_SIMD_EARLYEXIT +#endif + +#if defined(_PSTL_MONOTONIC_PRESENT) +# define _PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC(PRM) _PSTL_PRAGMA(omp ordered simd monotonic(PRM)) +# define _PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC_2ARGS(PRM1, PRM2) _PSTL_PRAGMA(omp ordered simd monotonic(PRM1, PRM2)) +#else +# define _PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC(PRM) +# define _PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC_2ARGS(PRM1, PRM2) +#endif + +// Declaration of reduction functor, where +// NAME - the name of the functor +// OP - type of the callable object with the reduction operation +// omp_in - refers to the local partial result +// omp_out - refers to the final value of the combiner operator +// omp_priv - refers to the private copy of the initial value +// omp_orig - refers to the original variable to be reduced +#define _PSTL_PRAGMA_DECLARE_REDUCTION(NAME, OP) \ + _PSTL_PRAGMA(omp declare reduction(NAME:OP : omp_out(omp_in)) initializer(omp_priv = omp_orig)) + +#if defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1600 +# define _PSTL_PRAGMA_VECTOR_UNALIGNED _PSTL_PRAGMA(vector unaligned) +#else +# define _PSTL_PRAGMA_VECTOR_UNALIGNED +#endif + +// Check the user-defined macro to use non-temporal stores +#if defined(PSTL_USE_NONTEMPORAL_STORES) && (__INTEL_COMPILER >= 1600) +# define _PSTL_USE_NONTEMPORAL_STORES_IF_ALLOWED _PSTL_PRAGMA(vector nontemporal) +#else +# define _PSTL_USE_NONTEMPORAL_STORES_IF_ALLOWED +#endif + +#if defined(_MSC_VER) || defined(__INTEL_COMPILER) // the preprocessors don't type a message location +# define _PSTL_PRAGMA_LOCATION __FILE__ ":" _PSTL_STRING(__LINE__) ": [Parallel STL message]: " +#else +# define _PSTL_PRAGMA_LOCATION " [Parallel STL message]: " +#endif + +#define _PSTL_PRAGMA_MESSAGE_IMPL(x) _PSTL_PRAGMA(message(_PSTL_STRING_CONCAT(_PSTL_PRAGMA_LOCATION, x))) + +#if _PSTL_USAGE_WARNINGS +# define _PSTL_PRAGMA_MESSAGE(x) _PSTL_PRAGMA_MESSAGE_IMPL(x) +# define _PSTL_PRAGMA_MESSAGE_POLICIES(x) _PSTL_PRAGMA_MESSAGE_IMPL(x) +#else +# define _PSTL_PRAGMA_MESSAGE(x) +# define _PSTL_PRAGMA_MESSAGE_POLICIES(x) +#endif + +// broken macros +#if (defined(__GLIBCXX__) && __GLIBCXX__ < 20150716) || \ + (defined(_MSC_VER) && _MSC_VER < 1800) +# define _PSTL_CPP11_STD_ROTATE_BROKEN +#endif + +#if defined(__INTEL_COMPILER) && __INTEL_COMPILER == 1800 +# define _PSTL_ICC_18_OMP_SIMD_BROKEN +#endif + +#endif /* _PSTL_CONFIG_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@pstl@pstl_config.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@pstl@pstl_config.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..133c58bd9781cf57be8ea7e633bfe37f6cb2afc7 GIT binary patch literal 15726 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 Gu@3+OwKUcM literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ratio b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ratio new file mode 100644 index 0000000..9fe8b00 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ratio @@ -0,0 +1,653 @@ +// ratio -*- C++ -*- + +// Copyright (C) 2008-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/ratio + * This is a Standard C++ Library header. + * @ingroup ratio + */ + +#ifndef _GLIBCXX_RATIO +#define _GLIBCXX_RATIO 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus < 201103L +# include +#else + +#include +#include // intmax_t, uintmax_t + +#define __glibcxx_want_ratio +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup ratio Rational Arithmetic + * @ingroup utilities + * + * Compile time representation of finite rational numbers. + * @{ + */ + + /// @cond undocumented + + template + struct __static_sign + : integral_constant + { }; + + template + struct __static_abs + : integral_constant::value> + { }; + + template + struct __static_gcd + : __static_gcd<_Qn, (_Pn % _Qn)> + { }; + + template + struct __static_gcd<_Pn, 0> + : integral_constant::value> + { }; + + template + struct __static_gcd<0, _Qn> + : integral_constant::value> + { }; + + // Let c = 2^(half # of bits in an intmax_t) + // then we find a1, a0, b1, b0 s.t. N = a1*c + a0, M = b1*c + b0 + // The multiplication of N and M becomes, + // N * M = (a1 * b1)c^2 + (a0 * b1 + b0 * a1)c + a0 * b0 + // Multiplication is safe if each term and the sum of the terms + // is representable by intmax_t. + template + struct __safe_multiply + { + private: + static const uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); + + static const uintmax_t __a0 = __static_abs<_Pn>::value % __c; + static const uintmax_t __a1 = __static_abs<_Pn>::value / __c; + static const uintmax_t __b0 = __static_abs<_Qn>::value % __c; + static const uintmax_t __b1 = __static_abs<_Qn>::value / __c; + + static_assert(__a1 == 0 || __b1 == 0, + "overflow in multiplication"); + static_assert(__a0 * __b1 + __b0 * __a1 < (__c >> 1), + "overflow in multiplication"); + static_assert(__b0 * __a0 <= __INTMAX_MAX__, + "overflow in multiplication"); + static_assert((__a0 * __b1 + __b0 * __a1) * __c + <= __INTMAX_MAX__ - __b0 * __a0, + "overflow in multiplication"); + + public: + static const intmax_t value = _Pn * _Qn; + }; + + // Some double-precision utilities, where numbers are represented as + // __hi*2^(8*sizeof(uintmax_t)) + __lo. + template + struct __big_less + : integral_constant + { }; + + template + struct __big_add + { + static constexpr uintmax_t __lo = __lo1 + __lo2; + static constexpr uintmax_t __hi = (__hi1 + __hi2 + + (__lo1 + __lo2 < __lo1)); // carry + }; + + // Subtract a number from a bigger one. + template + struct __big_sub + { + static_assert(!__big_less<__hi1, __lo1, __hi2, __lo2>::value, + "Internal library error"); + static constexpr uintmax_t __lo = __lo1 - __lo2; + static constexpr uintmax_t __hi = (__hi1 - __hi2 - + (__lo1 < __lo2)); // carry + }; + + // Same principle as __safe_multiply. + template + struct __big_mul + { + private: + static constexpr uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); + static constexpr uintmax_t __x0 = __x % __c; + static constexpr uintmax_t __x1 = __x / __c; + static constexpr uintmax_t __y0 = __y % __c; + static constexpr uintmax_t __y1 = __y / __c; + static constexpr uintmax_t __x0y0 = __x0 * __y0; + static constexpr uintmax_t __x0y1 = __x0 * __y1; + static constexpr uintmax_t __x1y0 = __x1 * __y0; + static constexpr uintmax_t __x1y1 = __x1 * __y1; + static constexpr uintmax_t __mix = __x0y1 + __x1y0; // possible carry... + static constexpr uintmax_t __mix_lo = __mix * __c; + static constexpr uintmax_t __mix_hi + = __mix / __c + ((__mix < __x0y1) ? __c : 0); // ... added here + typedef __big_add<__mix_hi, __mix_lo, __x1y1, __x0y0> _Res; + public: + static constexpr uintmax_t __hi = _Res::__hi; + static constexpr uintmax_t __lo = _Res::__lo; + }; + + // Adapted from __udiv_qrnnd_c in longlong.h + // This version assumes that the high bit of __d is 1. + template + struct __big_div_impl + { + private: + static_assert(__d >= (uintmax_t(1) << (sizeof(intmax_t) * 8 - 1)), + "Internal library error"); + static_assert(__n1 < __d, "Internal library error"); + static constexpr uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); + static constexpr uintmax_t __d1 = __d / __c; + static constexpr uintmax_t __d0 = __d % __c; + + static constexpr uintmax_t __q1x = __n1 / __d1; + static constexpr uintmax_t __r1x = __n1 % __d1; + static constexpr uintmax_t __m = __q1x * __d0; + static constexpr uintmax_t __r1y = __r1x * __c + __n0 / __c; + static constexpr uintmax_t __r1z = __r1y + __d; + static constexpr uintmax_t __r1 + = ((__r1y < __m) ? ((__r1z >= __d) && (__r1z < __m)) + ? (__r1z + __d) : __r1z : __r1y) - __m; + static constexpr uintmax_t __q1 + = __q1x - ((__r1y < __m) + ? ((__r1z >= __d) && (__r1z < __m)) ? 2 : 1 : 0); + static constexpr uintmax_t __q0x = __r1 / __d1; + static constexpr uintmax_t __r0x = __r1 % __d1; + static constexpr uintmax_t __n = __q0x * __d0; + static constexpr uintmax_t __r0y = __r0x * __c + __n0 % __c; + static constexpr uintmax_t __r0z = __r0y + __d; + static constexpr uintmax_t __r0 + = ((__r0y < __n) ? ((__r0z >= __d) && (__r0z < __n)) + ? (__r0z + __d) : __r0z : __r0y) - __n; + static constexpr uintmax_t __q0 + = __q0x - ((__r0y < __n) ? ((__r0z >= __d) + && (__r0z < __n)) ? 2 : 1 : 0); + + public: + static constexpr uintmax_t __quot = __q1 * __c + __q0; + static constexpr uintmax_t __rem = __r0; + + private: + typedef __big_mul<__quot, __d> _Prod; + typedef __big_add<_Prod::__hi, _Prod::__lo, 0, __rem> _Sum; + static_assert(_Sum::__hi == __n1 && _Sum::__lo == __n0, + "Internal library error"); + }; + + template + struct __big_div + { + private: + static_assert(__d != 0, "Internal library error"); + static_assert(sizeof (uintmax_t) == sizeof (unsigned long long), + "This library calls __builtin_clzll on uintmax_t, which " + "is unsafe on your platform. Please complain to " + "http://gcc.gnu.org/bugzilla/"); + static constexpr int __shift = __builtin_clzll(__d); + static constexpr int __coshift_ = sizeof(uintmax_t) * 8 - __shift; + static constexpr int __coshift = (__shift != 0) ? __coshift_ : 0; + static constexpr uintmax_t __c1 = uintmax_t(1) << __shift; + static constexpr uintmax_t __c2 = uintmax_t(1) << __coshift; + static constexpr uintmax_t __new_d = __d * __c1; + static constexpr uintmax_t __new_n0 = __n0 * __c1; + static constexpr uintmax_t __n1_shifted = (__n1 % __d) * __c1; + static constexpr uintmax_t __n0_top = (__shift != 0) ? (__n0 / __c2) : 0; + static constexpr uintmax_t __new_n1 = __n1_shifted + __n0_top; + typedef __big_div_impl<__new_n1, __new_n0, __new_d> _Res; + + public: + static constexpr uintmax_t __quot_hi = __n1 / __d; + static constexpr uintmax_t __quot_lo = _Res::__quot; + static constexpr uintmax_t __rem = _Res::__rem / __c1; + + private: + typedef __big_mul<__quot_lo, __d> _P0; + typedef __big_mul<__quot_hi, __d> _P1; + typedef __big_add<_P0::__hi, _P0::__lo, _P1::__lo, __rem> _Sum; + // No overflow. + static_assert(_P1::__hi == 0, "Internal library error"); + static_assert(_Sum::__hi >= _P0::__hi, "Internal library error"); + // Matches the input data. + static_assert(_Sum::__hi == __n1 && _Sum::__lo == __n0, + "Internal library error"); + static_assert(__rem < __d, "Internal library error"); + }; + + /// @endcond + + /** + * @brief Provides compile-time rational arithmetic. + * + * This class template represents any finite rational number with a + * numerator and denominator representable by compile-time constants of + * type intmax_t. The ratio is simplified when instantiated. + * + * For example: + * @code + * std::ratio<7,-21>::num == -1; + * std::ratio<7,-21>::den == 3; + * @endcode + * + */ + template + struct ratio + { + static_assert(_Den != 0, "denominator cannot be zero"); + static_assert(_Num >= -__INTMAX_MAX__ && _Den >= -__INTMAX_MAX__, + "out of range"); + + // Note: sign(N) * abs(N) == N + static constexpr intmax_t num = + _Num * __static_sign<_Den>::value / __static_gcd<_Num, _Den>::value; + + static constexpr intmax_t den = + __static_abs<_Den>::value / __static_gcd<_Num, _Den>::value; + + typedef ratio type; + }; + +#if ! __cpp_inline_variables + template + constexpr intmax_t ratio<_Num, _Den>::num; + + template + constexpr intmax_t ratio<_Num, _Den>::den; +#endif + + /// @cond undocumented + + template + struct __is_ratio + : std::false_type + { }; + + template + struct __is_ratio> + : std::true_type + { }; + +#if __cpp_variable_templates + template + constexpr bool __is_ratio_v = false; + template + constexpr bool __is_ratio_v> = true; +#endif + + template + constexpr bool + __are_both_ratios() noexcept + { +#if __cpp_variable_templates && __cpp_if_constexpr + if constexpr (__is_ratio_v<_R1>) + if constexpr (__is_ratio_v<_R2>) + return true; + return false; +#else + return __and_<__is_ratio<_R1>, __is_ratio<_R2>>::value; +#endif + } + + template + struct __ratio_multiply + { + static_assert(std::__are_both_ratios<_R1, _R2>(), + "both template arguments must be a std::ratio"); + + private: + static const intmax_t __gcd1 = + __static_gcd<_R1::num, _R2::den>::value; + static const intmax_t __gcd2 = + __static_gcd<_R2::num, _R1::den>::value; + + public: + typedef ratio< + __safe_multiply<(_R1::num / __gcd1), + (_R2::num / __gcd2)>::value, + __safe_multiply<(_R1::den / __gcd2), + (_R2::den / __gcd1)>::value> type; + + static constexpr intmax_t num = type::num; + static constexpr intmax_t den = type::den; + }; + +#if ! __cpp_inline_variables + template + constexpr intmax_t __ratio_multiply<_R1, _R2>::num; + + template + constexpr intmax_t __ratio_multiply<_R1, _R2>::den; +#endif + + /// @endcond + + /// ratio_multiply + template + using ratio_multiply = typename __ratio_multiply<_R1, _R2>::type; + + /// @cond undocumented + + template + struct __ratio_divide + { + static_assert(_R2::num != 0, "division by 0"); + + typedef typename __ratio_multiply< + _R1, + ratio<_R2::den, _R2::num>>::type type; + + static constexpr intmax_t num = type::num; + static constexpr intmax_t den = type::den; + }; + +#if ! __cpp_inline_variables + template + constexpr intmax_t __ratio_divide<_R1, _R2>::num; + + template + constexpr intmax_t __ratio_divide<_R1, _R2>::den; +#endif + + /// @endcond + + /// ratio_divide + template + using ratio_divide = typename __ratio_divide<_R1, _R2>::type; + + /// ratio_equal + template + struct ratio_equal + : integral_constant + { + static_assert(std::__are_both_ratios<_R1, _R2>(), + "both template arguments must be a std::ratio"); + }; + + /// ratio_not_equal + template + struct ratio_not_equal + : integral_constant::value> + { }; + + /// @cond undocumented + + // Both numbers are positive. + template, + typename _Right = __big_mul<_R2::num,_R1::den> > + struct __ratio_less_impl_1 + : integral_constant::value> + { }; + + template::value + != __static_sign<_R2::num>::value)), + bool = (__static_sign<_R1::num>::value == -1 + && __static_sign<_R2::num>::value == -1)> + struct __ratio_less_impl + : __ratio_less_impl_1<_R1, _R2>::type + { }; + + template + struct __ratio_less_impl<_R1, _R2, true, false> + : integral_constant + { }; + + template + struct __ratio_less_impl<_R1, _R2, false, true> + : __ratio_less_impl_1, + ratio<-_R1::num, _R1::den> >::type + { }; + + /// @endcond + + /// ratio_less + template + struct ratio_less + : __ratio_less_impl<_R1, _R2>::type + { + static_assert(std::__are_both_ratios<_R1, _R2>(), + "both template arguments must be a std::ratio"); + }; + + /// ratio_less_equal + template + struct ratio_less_equal + : integral_constant::value> + { }; + + /// ratio_greater + template + struct ratio_greater + : integral_constant::value> + { }; + + /// ratio_greater_equal + template + struct ratio_greater_equal + : integral_constant::value> + { }; + +#if __cplusplus > 201402L + template + inline constexpr bool ratio_equal_v = ratio_equal<_R1, _R2>::value; + template + inline constexpr bool ratio_not_equal_v = ratio_not_equal<_R1, _R2>::value; + template + inline constexpr bool ratio_less_v = ratio_less<_R1, _R2>::value; + template + inline constexpr bool ratio_less_equal_v + = ratio_less_equal<_R1, _R2>::value; + template + inline constexpr bool ratio_greater_v = ratio_greater<_R1, _R2>::value; + template + inline constexpr bool ratio_greater_equal_v + = ratio_greater_equal<_R1, _R2>::value; +#endif // C++17 + + /// @cond undocumented + + template= 0), + bool = (_R2::num >= 0), + bool = ratio_less::value, _R1::den>, + ratio<__static_abs<_R2::num>::value, _R2::den> >::value> + struct __ratio_add_impl + { + private: + typedef typename __ratio_add_impl< + ratio<-_R1::num, _R1::den>, + ratio<-_R2::num, _R2::den> >::type __t; + public: + typedef ratio<-__t::num, __t::den> type; + }; + + // True addition of nonnegative numbers. + template + struct __ratio_add_impl<_R1, _R2, true, true, __b> + { + private: + static constexpr uintmax_t __g = __static_gcd<_R1::den, _R2::den>::value; + static constexpr uintmax_t __d2 = _R2::den / __g; + typedef __big_mul<_R1::den, __d2> __d; + typedef __big_mul<_R1::num, _R2::den / __g> __x; + typedef __big_mul<_R2::num, _R1::den / __g> __y; + typedef __big_add<__x::__hi, __x::__lo, __y::__hi, __y::__lo> __n; + static_assert(__n::__hi >= __x::__hi, "Internal library error"); + typedef __big_div<__n::__hi, __n::__lo, __g> __ng; + static constexpr uintmax_t __g2 = __static_gcd<__ng::__rem, __g>::value; + typedef __big_div<__n::__hi, __n::__lo, __g2> __n_final; + static_assert(__n_final::__rem == 0, "Internal library error"); + static_assert(__n_final::__quot_hi == 0 && + __n_final::__quot_lo <= __INTMAX_MAX__, "overflow in addition"); + typedef __big_mul<_R1::den / __g2, __d2> __d_final; + static_assert(__d_final::__hi == 0 && + __d_final::__lo <= __INTMAX_MAX__, "overflow in addition"); + public: + typedef ratio<__n_final::__quot_lo, __d_final::__lo> type; + }; + + template + struct __ratio_add_impl<_R1, _R2, false, true, true> + : __ratio_add_impl<_R2, _R1> + { }; + + // True subtraction of nonnegative numbers yielding a nonnegative result. + template + struct __ratio_add_impl<_R1, _R2, true, false, false> + { + private: + static constexpr uintmax_t __g = __static_gcd<_R1::den, _R2::den>::value; + static constexpr uintmax_t __d2 = _R2::den / __g; + typedef __big_mul<_R1::den, __d2> __d; + typedef __big_mul<_R1::num, _R2::den / __g> __x; + typedef __big_mul<-_R2::num, _R1::den / __g> __y; + typedef __big_sub<__x::__hi, __x::__lo, __y::__hi, __y::__lo> __n; + typedef __big_div<__n::__hi, __n::__lo, __g> __ng; + static constexpr uintmax_t __g2 = __static_gcd<__ng::__rem, __g>::value; + typedef __big_div<__n::__hi, __n::__lo, __g2> __n_final; + static_assert(__n_final::__rem == 0, "Internal library error"); + static_assert(__n_final::__quot_hi == 0 && + __n_final::__quot_lo <= __INTMAX_MAX__, "overflow in addition"); + typedef __big_mul<_R1::den / __g2, __d2> __d_final; + static_assert(__d_final::__hi == 0 && + __d_final::__lo <= __INTMAX_MAX__, "overflow in addition"); + public: + typedef ratio<__n_final::__quot_lo, __d_final::__lo> type; + }; + + template + struct __ratio_add + { + static_assert(std::__are_both_ratios<_R1, _R2>(), + "both template arguments must be a std::ratio"); + + typedef typename __ratio_add_impl<_R1, _R2>::type type; + static constexpr intmax_t num = type::num; + static constexpr intmax_t den = type::den; + }; + +#if ! __cpp_inline_variables + template + constexpr intmax_t __ratio_add<_R1, _R2>::num; + + template + constexpr intmax_t __ratio_add<_R1, _R2>::den; +#endif + + /// @endcond + + /// ratio_add + template + using ratio_add = typename __ratio_add<_R1, _R2>::type; + + /// @cond undocumented + + template + struct __ratio_subtract + { + typedef typename __ratio_add< + _R1, + ratio<-_R2::num, _R2::den>>::type type; + + static constexpr intmax_t num = type::num; + static constexpr intmax_t den = type::den; + }; + +#if ! __cpp_inline_variables + template + constexpr intmax_t __ratio_subtract<_R1, _R2>::num; + + template + constexpr intmax_t __ratio_subtract<_R1, _R2>::den; +#endif + + /// @endcond + + /// ratio_subtract + template + using ratio_subtract = typename __ratio_subtract<_R1, _R2>::type; + +#if __INTMAX_WIDTH__ >= 96 +# if __cpp_lib_ratio >= 202306L +# if __INTMAX_WIDTH__ >= 128 + using quecto = ratio< 1, 1000000000000000000000000000000>; +# endif + using ronto = ratio< 1, 1000000000000000000000000000>; +# endif + using yocto = ratio< 1, 1000000000000000000000000>; + using zepto = ratio< 1, 1000000000000000000000>; +#endif + using atto = ratio< 1, 1000000000000000000>; + using femto = ratio< 1, 1000000000000000>; + using pico = ratio< 1, 1000000000000>; + using nano = ratio< 1, 1000000000>; + using micro = ratio< 1, 1000000>; + using milli = ratio< 1, 1000>; + using centi = ratio< 1, 100>; + using deci = ratio< 1, 10>; + using deca = ratio< 10, 1>; + using hecto = ratio< 100, 1>; + using kilo = ratio< 1000, 1>; + using mega = ratio< 1000000, 1>; + using giga = ratio< 1000000000, 1>; + using tera = ratio< 1000000000000, 1>; + using peta = ratio< 1000000000000000, 1>; + using exa = ratio< 1000000000000000000, 1>; +#if __INTMAX_WIDTH__ >= 96 + using zetta = ratio< 1000000000000000000000, 1>; + using yotta = ratio<1000000000000000000000000, 1>; +# if __cpp_lib_ratio >= 202306L + using ronna = ratio<1000000000000000000000000000, 1>; +# if __INTMAX_WIDTH__ >= 128 + using quetta = ratio<1000000000000000000000000000000, 1>; +# endif +# endif +#endif + + /// @} group ratio +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // C++11 + +#endif //_GLIBCXX_RATIO diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ratio.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@ratio.blob new file mode 100644 index 0000000000000000000000000000000000000000..a0b5c53fc9676268c3410543c32a744200160907 GIT binary patch literal 61258 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 BVj=(l literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@sstream b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@sstream new file mode 100644 index 0000000..ad0c16a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@sstream @@ -0,0 +1,1257 @@ +// String based streams -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/sstream + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 27.7 String-based streams +// + +#ifndef _GLIBCXX_SSTREAM +#define _GLIBCXX_SSTREAM 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // iostream + +#include +#include +#include // allocator_traits, __allocator_like + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI +# define _GLIBCXX_LVAL_REF_QUAL & +# define _GLIBCXX_SSTREAM_ALWAYS_INLINE +#else +# define _GLIBCXX_LVAL_REF_QUAL +// For symbols that are not exported from libstdc++.so for the COW string ABI. +# define _GLIBCXX_SSTREAM_ALWAYS_INLINE [[__gnu__::__always_inline__]] +#endif + + + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + // [27.7.1] template class basic_stringbuf + /** + * @brief The actual work of input and output (for std::string). + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * @tparam _Alloc Allocator type, defaults to allocator<_CharT>. + * + * This class associates either or both of its input and output sequences + * with a sequence of characters, which can be initialized from, or made + * available as, a @c std::basic_string. (Paraphrased from [27.7.1]/1.) + * + * For this class, open modes (of type @c ios_base::openmode) have + * @c in set if the input sequence can be read, and @c out set if the + * output sequence can be written. + */ + template + class basic_stringbuf : public basic_streambuf<_CharT, _Traits> + { + struct __xfer_bufptrs; + +#if __cplusplus >= 201103L + using allocator_traits = std::allocator_traits<_Alloc>; + using _Noexcept_swap + = __or_; +#endif + + public: + // Types: + typedef _CharT char_type; + typedef _Traits traits_type; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 251. basic_stringbuf missing allocator_type + typedef _Alloc allocator_type; + typedef typename traits_type::int_type int_type; + typedef typename traits_type::pos_type pos_type; + typedef typename traits_type::off_type off_type; + + typedef basic_streambuf __streambuf_type; + typedef basic_string __string_type; + typedef typename __string_type::size_type __size_type; + + protected: + /// Place to stash in || out || in | out settings for current stringbuf. + ios_base::openmode _M_mode; + + // Data Members: + __string_type _M_string; + + public: + // Constructors: + + /** + * @brief Starts with an empty string buffer. + * + * The default constructor initializes the parent class using its + * own default ctor. + */ + basic_stringbuf() + : __streambuf_type(), _M_mode(ios_base::in | ios_base::out), _M_string() + { } + + /** + * @brief Starts with an empty string buffer. + * @param __mode Whether the buffer can read, or write, or both. + * + * The default constructor initializes the parent class using its + * own default ctor. + */ + explicit + basic_stringbuf(ios_base::openmode __mode) + : __streambuf_type(), _M_mode(__mode), _M_string() + { } + + /** + * @brief Starts with an existing string buffer. + * @param __str A string to copy as a starting buffer. + * @param __mode Whether the buffer can read, or write, or both. + * + * This constructor initializes the parent class using its + * own default ctor. + */ + explicit + basic_stringbuf(const __string_type& __str, + ios_base::openmode __mode = ios_base::in | ios_base::out) + : __streambuf_type(), _M_mode(), + _M_string(__str.data(), __str.size(), __str.get_allocator()) + { _M_stringbuf_init(__mode); } + +#if __cplusplus >= 201103L + basic_stringbuf(const basic_stringbuf&) = delete; + + basic_stringbuf(basic_stringbuf&& __rhs) + : basic_stringbuf(std::move(__rhs), __xfer_bufptrs(__rhs, this)) + { __rhs._M_sync(const_cast(__rhs._M_string.data()), 0, 0); } + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI + explicit + basic_stringbuf(const allocator_type& __a) + : basic_stringbuf(ios_base::in | std::ios_base::out, __a) + { } + + basic_stringbuf(ios_base::openmode __mode, + const allocator_type& __a) + : __streambuf_type(), _M_mode(__mode), _M_string(__a) + { } + + explicit + basic_stringbuf(__string_type&& __s, + ios_base::openmode __mode = ios_base::in + | ios_base::out) + : __streambuf_type(), _M_mode(__mode), _M_string(std::move(__s)) + { _M_stringbuf_init(__mode); } + + template + basic_stringbuf(const basic_string<_CharT, _Traits, _SAlloc>& __s, + const allocator_type& __a) + : basic_stringbuf(__s, ios_base::in | std::ios_base::out, __a) + { } + + template + basic_stringbuf(const basic_string<_CharT, _Traits, _SAlloc>& __s, + ios_base::openmode __mode, + const allocator_type& __a) + : __streambuf_type(), _M_mode(__mode), + _M_string(__s.data(), __s.size(), __a) + { _M_stringbuf_init(__mode); } + + template + explicit + basic_stringbuf(const basic_string<_CharT, _Traits, _SAlloc>& __s, + ios_base::openmode __mode = ios_base::in + | ios_base::out) + : basic_stringbuf(__s, __mode, allocator_type{}) + { } + + basic_stringbuf(basic_stringbuf&& __rhs, const allocator_type& __a) + : basic_stringbuf(std::move(__rhs), __a, __xfer_bufptrs(__rhs, this)) + { __rhs._M_sync(const_cast(__rhs._M_string.data()), 0, 0); } + + allocator_type get_allocator() const noexcept + { return _M_string.get_allocator(); } +#endif // C++20 + + // 27.8.2.2 Assign and swap: + + basic_stringbuf& + operator=(const basic_stringbuf&) = delete; + + basic_stringbuf& + operator=(basic_stringbuf&& __rhs) + { + __xfer_bufptrs __st{__rhs, this}; + const __streambuf_type& __base = __rhs; + __streambuf_type::operator=(__base); + this->pubimbue(__rhs.getloc()); + _M_mode = __rhs._M_mode; + _M_string = std::move(__rhs._M_string); + __rhs._M_sync(const_cast(__rhs._M_string.data()), 0, 0); + return *this; + } + + void + swap(basic_stringbuf& __rhs) noexcept(_Noexcept_swap::value) + { + __xfer_bufptrs __l_st{*this, std::__addressof(__rhs)}; + __xfer_bufptrs __r_st{__rhs, this}; + __streambuf_type& __base = __rhs; + __streambuf_type::swap(__base); + __rhs.pubimbue(this->pubimbue(__rhs.getloc())); + std::swap(_M_mode, __rhs._M_mode); + std::swap(_M_string, __rhs._M_string); // XXX not exception safe + } +#endif // C++11 + + // Getters and setters: + + /** + * @brief Copying out the string buffer. + * @return A copy of one of the underlying sequences. + * + * If the buffer is only created in input mode, the underlying + * character sequence is equal to the input sequence; otherwise, it + * is equal to the output sequence. [27.7.1.2]/1 + */ + _GLIBCXX_NODISCARD + __string_type + str() const _GLIBCXX_LVAL_REF_QUAL + { + __string_type __ret(_M_string.get_allocator()); + if (char_type* __hi = _M_high_mark()) + __ret.assign(this->pbase(), __hi); + else + __ret = _M_string; + return __ret; + } + +#if __cplusplus > 201703L +#if _GLIBCXX_USE_CXX11_ABI +#if __cpp_concepts + template<__allocator_like _SAlloc> + _GLIBCXX_NODISCARD + basic_string<_CharT, _Traits, _SAlloc> + str(const _SAlloc& __sa) const + { + auto __sv = view(); + return { __sv.data(), __sv.size(), __sa }; + } +#endif + + _GLIBCXX_NODISCARD + __string_type + str() && + { + if (char_type* __hi = _M_high_mark()) + { + // Set length to end of character sequence and add null terminator. + _M_string._M_set_length(_M_high_mark() - this->pbase()); + } + auto __str = std::move(_M_string); + _M_string.clear(); + _M_sync(_M_string.data(), 0, 0); + return __str; + } +#endif // cxx11 ABI + + _GLIBCXX_SSTREAM_ALWAYS_INLINE + basic_string_view + view() const noexcept + { + if (char_type* __hi = _M_high_mark()) + return { this->pbase(), __hi }; + else + return _M_string; + } +#endif // C++20 + + /** + * @brief Setting a new buffer. + * @param __s The string to use as a new sequence. + * + * Deallocates any previous stored sequence, then copies @a s to + * use as a new one. + */ + void + str(const __string_type& __s) + { + // Cannot use _M_string = __s, since v3 strings are COW + // (not always true now but assign() always works). + _M_string.assign(__s.data(), __s.size()); + _M_stringbuf_init(_M_mode); + } + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI +#if __cpp_concepts + template<__allocator_like _SAlloc> + requires (!is_same_v<_SAlloc, _Alloc>) + void + str(const basic_string<_CharT, _Traits, _SAlloc>& __s) + { + _M_string.assign(__s.data(), __s.size()); + _M_stringbuf_init(_M_mode); + } +#endif + + void + str(__string_type&& __s) + { + _M_string = std::move(__s); + _M_stringbuf_init(_M_mode); + } +#endif + + protected: + // Common initialization code goes here. + void + _M_stringbuf_init(ios_base::openmode __mode) + { + _M_mode = __mode; + __size_type __len = 0; + if (_M_mode & (ios_base::ate | ios_base::app)) + __len = _M_string.size(); + _M_sync(const_cast(_M_string.data()), 0, __len); + } + + virtual streamsize + showmanyc() + { + streamsize __ret = -1; + if (_M_mode & ios_base::in) + { + _M_update_egptr(); + __ret = this->egptr() - this->gptr(); + } + return __ret; + } + + virtual int_type + underflow(); + + virtual int_type + pbackfail(int_type __c = traits_type::eof()); + + virtual int_type + overflow(int_type __c = traits_type::eof()); + + /** + * @brief Manipulates the buffer. + * @param __s Pointer to a buffer area. + * @param __n Size of @a __s. + * @return @c this + * + * If no buffer has already been created, and both @a __s and @a __n are + * non-zero, then @c __s is used as a buffer; see + * https://gcc.gnu.org/onlinedocs/libstdc++/manual/streambufs.html#io.streambuf.buffering + * for more. + */ + virtual __streambuf_type* + setbuf(char_type* __s, streamsize __n) + { + if (__s && __n >= 0) + { + // This is implementation-defined behavior, and assumes + // that an external char_type array of length __n exists + // and has been pre-allocated. If this is not the case, + // things will quickly blow up. + + // Step 1: Destroy the current internal array. + _M_string.clear(); + + // Step 2: Use the external array. + _M_sync(__s, __n, 0); + } + return this; + } + + virtual pos_type + seekoff(off_type __off, ios_base::seekdir __way, + ios_base::openmode __mode = ios_base::in | ios_base::out); + + virtual pos_type + seekpos(pos_type __sp, + ios_base::openmode __mode = ios_base::in | ios_base::out); + + // Internal function for correctly updating the internal buffer + // for a particular _M_string, due to initialization or re-sizing + // of an existing _M_string. + void + _M_sync(char_type* __base, __size_type __i, __size_type __o); + + // Internal function for correctly updating egptr() to the actual + // string end. + void + _M_update_egptr() + { + if (char_type* __pptr = this->pptr()) + { + char_type* __egptr = this->egptr(); + if (!__egptr || __pptr > __egptr) + { + if (_M_mode & ios_base::in) + this->setg(this->eback(), this->gptr(), __pptr); + else + this->setg(__pptr, __pptr, __pptr); + } + } + } + + // Works around the issue with pbump, part of the protected + // interface of basic_streambuf, taking just an int. + void + _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off); + + private: + // Return a pointer to the end of the underlying character sequence. + // This might not be the same character as _M_string.end() because + // basic_stringbuf::overflow might have written to unused capacity + // in _M_string without updating its length. + __attribute__((__always_inline__)) + char_type* + _M_high_mark() const _GLIBCXX_NOEXCEPT + { + if (char_type* __pptr = this->pptr()) + { + char_type* __egptr = this->egptr(); + if (!__egptr || __pptr > __egptr) + return __pptr; // Underlying sequence is [pbase, pptr). + else + return __egptr; // Underlying sequence is [pbase, egptr). + } + return 0; // Underlying character sequence is just _M_string. + } + +#if __cplusplus >= 201103L +#if _GLIBCXX_USE_CXX11_ABI + // This type captures the state of the gptr / pptr pointers as offsets + // so they can be restored in another object after moving the string. + struct __xfer_bufptrs + { + __xfer_bufptrs(const basic_stringbuf& __from, basic_stringbuf* __to) + : _M_to{__to}, _M_goff{-1, -1, -1}, _M_poff{-1, -1, -1} + { + const _CharT* const __str = __from._M_string.data(); + const _CharT* __end = nullptr; + if (__from.eback()) + { + _M_goff[0] = __from.eback() - __str; + _M_goff[1] = __from.gptr() - __str; + _M_goff[2] = __from.egptr() - __str; + __end = __from.egptr(); + } + if (__from.pbase()) + { + _M_poff[0] = __from.pbase() - __str; + _M_poff[1] = __from.pptr() - __from.pbase(); + _M_poff[2] = __from.epptr() - __str; + if (!__end || __from.pptr() > __end) + __end = __from.pptr(); + } + + // Set _M_string length to the greater of the get and put areas. + if (__end) + { + // The const_cast avoids changing this constructor's signature, + // because it is exported from the dynamic library. + auto& __mut_from = const_cast(__from); + __mut_from._M_string._M_length(__end - __str); + } + } + + ~__xfer_bufptrs() + { + char_type* __str = const_cast(_M_to->_M_string.data()); + if (_M_goff[0] != -1) + _M_to->setg(__str+_M_goff[0], __str+_M_goff[1], __str+_M_goff[2]); + if (_M_poff[0] != -1) + _M_to->_M_pbump(__str+_M_poff[0], __str+_M_poff[2], _M_poff[1]); + } + + basic_stringbuf* _M_to; + off_type _M_goff[3]; + off_type _M_poff[3]; + }; +#else + // This type does nothing when using Copy-On-Write strings. + struct __xfer_bufptrs + { + __xfer_bufptrs(const basic_stringbuf&, basic_stringbuf*) { } + }; +#endif + + // The move constructor initializes an __xfer_bufptrs temporary then + // delegates to this constructor to performs moves during its lifetime. + basic_stringbuf(basic_stringbuf&& __rhs, __xfer_bufptrs&&) + : __streambuf_type(static_cast(__rhs)), + _M_mode(__rhs._M_mode), _M_string(std::move(__rhs._M_string)) + { } + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI + // The move constructor initializes an __xfer_bufptrs temporary then + // delegates to this constructor to performs moves during its lifetime. + basic_stringbuf(basic_stringbuf&& __rhs, const allocator_type& __a, + __xfer_bufptrs&&) + : __streambuf_type(static_cast(__rhs)), + _M_mode(__rhs._M_mode), _M_string(std::move(__rhs._M_string), __a) + { } +#endif +#endif // C++11 + }; + + + // [27.7.2] Template class basic_istringstream + /** + * @brief Controlling input for std::string. + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * @tparam _Alloc Allocator type, defaults to allocator<_CharT>. + * + * This class supports reading from objects of type std::basic_string, + * using the inherited functions from std::basic_istream. To control + * the associated sequence, an instance of std::basic_stringbuf is used, + * which this page refers to as @c sb. + */ + template + class basic_istringstream : public basic_istream<_CharT, _Traits> + { + public: + // Types: + typedef _CharT char_type; + typedef _Traits traits_type; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 251. basic_stringbuf missing allocator_type + typedef _Alloc allocator_type; + typedef typename traits_type::int_type int_type; + typedef typename traits_type::pos_type pos_type; + typedef typename traits_type::off_type off_type; + + // Non-standard types: + typedef basic_string<_CharT, _Traits, _Alloc> __string_type; + typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; + typedef basic_istream __istream_type; + + private: + __stringbuf_type _M_stringbuf; + + public: + // Constructors: + + /** + * @brief Default constructor starts with an empty string buffer. + * + * Initializes @c sb using @c in, and passes @c &sb to the base + * class initializer. Does not allocate any buffer. + * + * That's a lie. We initialize the base class with NULL, because the + * string class does its own memory management. + */ + basic_istringstream() + : __istream_type(), _M_stringbuf(ios_base::in) + { this->init(&_M_stringbuf); } + + /** + * @brief Starts with an empty string buffer. + * @param __mode Whether the buffer can read, or write, or both. + * + * @c ios_base::in is automatically included in @a __mode. + * + * Initializes @c sb using @c __mode|in, and passes @c &sb to the base + * class initializer. Does not allocate any buffer. + * + * That's a lie. We initialize the base class with NULL, because the + * string class does its own memory management. + */ + explicit + basic_istringstream(ios_base::openmode __mode) + : __istream_type(), _M_stringbuf(__mode | ios_base::in) + { this->init(&_M_stringbuf); } + + /** + * @brief Starts with an existing string buffer. + * @param __str A string to copy as a starting buffer. + * @param __mode Whether the buffer can read, or write, or both. + * + * @c ios_base::in is automatically included in @a mode. + * + * Initializes @c sb using @a str and @c mode|in, and passes @c &sb + * to the base class initializer. + * + * That's a lie. We initialize the base class with NULL, because the + * string class does its own memory management. + */ + explicit + basic_istringstream(const __string_type& __str, + ios_base::openmode __mode = ios_base::in) + : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in) + { this->init(&_M_stringbuf); } + + /** + * @brief The destructor does nothing. + * + * The buffer is deallocated by the stringbuf object, not the + * formatting stream. + */ + ~basic_istringstream() + { } + +#if __cplusplus >= 201103L + basic_istringstream(const basic_istringstream&) = delete; + + basic_istringstream(basic_istringstream&& __rhs) + : __istream_type(std::move(__rhs)), + _M_stringbuf(std::move(__rhs._M_stringbuf)) + { __istream_type::set_rdbuf(&_M_stringbuf); } + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI + basic_istringstream(ios_base::openmode __mode, const allocator_type& __a) + : __istream_type(), _M_stringbuf(__mode | ios_base::in, __a) + { this->init(std::__addressof(_M_stringbuf)); } + + explicit + basic_istringstream(__string_type&& __str, + ios_base::openmode __mode = ios_base::in) + : __istream_type(), _M_stringbuf(std::move(__str), __mode | ios_base::in) + { this->init(std::__addressof(_M_stringbuf)); } + + template + basic_istringstream(const basic_string<_CharT, _Traits, _SAlloc>& __str, + const allocator_type& __a) + : basic_istringstream(__str, ios_base::in, __a) + { } + + template + basic_istringstream(const basic_string<_CharT, _Traits, _SAlloc>& __str, + ios_base::openmode __mode, + const allocator_type& __a) + : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in, __a) + { this->init(std::__addressof(_M_stringbuf)); } + + template + explicit + basic_istringstream(const basic_string<_CharT, _Traits, _SAlloc>& __str, + ios_base::openmode __mode = ios_base::in) + : basic_istringstream(__str, __mode, allocator_type()) + { } +#endif // C++20 + + // 27.8.3.2 Assign and swap: + + basic_istringstream& + operator=(const basic_istringstream&) = delete; + + basic_istringstream& + operator=(basic_istringstream&& __rhs) + { + __istream_type::operator=(std::move(__rhs)); + _M_stringbuf = std::move(__rhs._M_stringbuf); + return *this; + } + + void + swap(basic_istringstream& __rhs) + { + __istream_type::swap(__rhs); + _M_stringbuf.swap(__rhs._M_stringbuf); + } +#endif // C++11 + + // Members: + /** + * @brief Accessing the underlying buffer. + * @return The current basic_stringbuf buffer. + * + * This hides both signatures of std::basic_ios::rdbuf(). + */ + _GLIBCXX_NODISCARD + __stringbuf_type* + rdbuf() const + { return const_cast<__stringbuf_type*>(&_M_stringbuf); } + + /** + * @brief Copying out the string buffer. + * @return @c rdbuf()->str() + */ + _GLIBCXX_NODISCARD + __string_type + str() const _GLIBCXX_LVAL_REF_QUAL + { return _M_stringbuf.str(); } + +#if __cplusplus > 201703L +#if _GLIBCXX_USE_CXX11_ABI +#if __cpp_concepts + template<__allocator_like _SAlloc> + _GLIBCXX_NODISCARD + basic_string<_CharT, _Traits, _SAlloc> + str(const _SAlloc& __sa) const + { return _M_stringbuf.str(__sa); } +#endif + + _GLIBCXX_NODISCARD + __string_type + str() && + { return std::move(_M_stringbuf).str(); } +#endif // cxx11 ABI + + _GLIBCXX_SSTREAM_ALWAYS_INLINE + basic_string_view + view() const noexcept + { return _M_stringbuf.view(); } +#endif // C++20 + + /** + * @brief Setting a new buffer. + * @param __s The string to use as a new sequence. + * + * Calls @c rdbuf()->str(s). + */ + void + str(const __string_type& __s) + { _M_stringbuf.str(__s); } + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI +#if __cpp_concepts + template<__allocator_like _SAlloc> + requires (!is_same_v<_SAlloc, _Alloc>) + void + str(const basic_string<_CharT, _Traits, _SAlloc>& __s) + { _M_stringbuf.str(__s); } +#endif + + void + str(__string_type&& __s) + { _M_stringbuf.str(std::move(__s)); } +#endif + }; + + + // [27.7.3] Template class basic_ostringstream + /** + * @brief Controlling output for std::string. + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * @tparam _Alloc Allocator type, defaults to allocator<_CharT>. + * + * This class supports writing to objects of type std::basic_string, + * using the inherited functions from std::basic_ostream. To control + * the associated sequence, an instance of std::basic_stringbuf is used, + * which this page refers to as @c sb. + */ + template + class basic_ostringstream : public basic_ostream<_CharT, _Traits> + { + public: + // Types: + typedef _CharT char_type; + typedef _Traits traits_type; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 251. basic_stringbuf missing allocator_type + typedef _Alloc allocator_type; + typedef typename traits_type::int_type int_type; + typedef typename traits_type::pos_type pos_type; + typedef typename traits_type::off_type off_type; + + // Non-standard types: + typedef basic_string<_CharT, _Traits, _Alloc> __string_type; + typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; + typedef basic_ostream __ostream_type; + + private: + __stringbuf_type _M_stringbuf; + + public: + // Constructors/destructor: + + /** + * @brief Default constructor starts with an empty string buffer. + * + * Initializes @c sb using @c mode|out, and passes @c &sb to the base + * class initializer. Does not allocate any buffer. + * + * That's a lie. We initialize the base class with NULL, because the + * string class does its own memory management. + */ + basic_ostringstream() + : __ostream_type(), _M_stringbuf(ios_base::out) + { this->init(&_M_stringbuf); } + + /** + * @brief Starts with an empty string buffer. + * @param __mode Whether the buffer can read, or write, or both. + * + * @c ios_base::out is automatically included in @a mode. + * + * Initializes @c sb using @c mode|out, and passes @c &sb to the base + * class initializer. Does not allocate any buffer. + * + * That's a lie. We initialize the base class with NULL, because the + * string class does its own memory management. + */ + explicit + basic_ostringstream(ios_base::openmode __mode) + : __ostream_type(), _M_stringbuf(__mode | ios_base::out) + { this->init(&_M_stringbuf); } + + /** + * @brief Starts with an existing string buffer. + * @param __str A string to copy as a starting buffer. + * @param __mode Whether the buffer can read, or write, or both. + * + * @c ios_base::out is automatically included in @a mode. + * + * Initializes @c sb using @a str and @c mode|out, and passes @c &sb + * to the base class initializer. + * + * That's a lie. We initialize the base class with NULL, because the + * string class does its own memory management. + */ + explicit + basic_ostringstream(const __string_type& __str, + ios_base::openmode __mode = ios_base::out) + : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out) + { this->init(&_M_stringbuf); } + + /** + * @brief The destructor does nothing. + * + * The buffer is deallocated by the stringbuf object, not the + * formatting stream. + */ + ~basic_ostringstream() + { } + +#if __cplusplus >= 201103L + basic_ostringstream(const basic_ostringstream&) = delete; + + basic_ostringstream(basic_ostringstream&& __rhs) + : __ostream_type(std::move(__rhs)), + _M_stringbuf(std::move(__rhs._M_stringbuf)) + { __ostream_type::set_rdbuf(&_M_stringbuf); } + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI + basic_ostringstream(ios_base::openmode __mode, const allocator_type& __a) + : __ostream_type(), _M_stringbuf(__mode | ios_base::out, __a) + { this->init(std::__addressof(_M_stringbuf)); } + + explicit + basic_ostringstream(__string_type&& __str, + ios_base::openmode __mode = ios_base::out) + : __ostream_type(), _M_stringbuf(std::move(__str), __mode | ios_base::out) + { this->init(std::__addressof(_M_stringbuf)); } + + template + basic_ostringstream(const basic_string<_CharT, _Traits, _SAlloc>& __str, + const allocator_type& __a) + : basic_ostringstream(__str, ios_base::out, __a) + { } + + template + basic_ostringstream(const basic_string<_CharT, _Traits, _SAlloc>& __str, + ios_base::openmode __mode, + const allocator_type& __a) + : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out, __a) + { this->init(std::__addressof(_M_stringbuf)); } + + template + explicit + basic_ostringstream(const basic_string<_CharT, _Traits, _SAlloc>& __str, + ios_base::openmode __mode = ios_base::out) + : basic_ostringstream(__str, __mode, allocator_type()) + { } +#endif // C++20 + + // 27.8.3.2 Assign and swap: + + basic_ostringstream& + operator=(const basic_ostringstream&) = delete; + + basic_ostringstream& + operator=(basic_ostringstream&& __rhs) + { + __ostream_type::operator=(std::move(__rhs)); + _M_stringbuf = std::move(__rhs._M_stringbuf); + return *this; + } + + void + swap(basic_ostringstream& __rhs) + { + __ostream_type::swap(__rhs); + _M_stringbuf.swap(__rhs._M_stringbuf); + } +#endif // C++11 + + // Members: + /** + * @brief Accessing the underlying buffer. + * @return The current basic_stringbuf buffer. + * + * This hides both signatures of std::basic_ios::rdbuf(). + */ + _GLIBCXX_NODISCARD + __stringbuf_type* + rdbuf() const + { return const_cast<__stringbuf_type*>(&_M_stringbuf); } + + /** + * @brief Copying out the string buffer. + * @return @c rdbuf()->str() + */ + _GLIBCXX_NODISCARD + __string_type + str() const _GLIBCXX_LVAL_REF_QUAL + { return _M_stringbuf.str(); } + +#if __cplusplus > 201703L +#if _GLIBCXX_USE_CXX11_ABI +#if __cpp_concepts + template<__allocator_like _SAlloc> + _GLIBCXX_NODISCARD + basic_string<_CharT, _Traits, _SAlloc> + str(const _SAlloc& __sa) const + { return _M_stringbuf.str(__sa); } +#endif + + _GLIBCXX_NODISCARD + __string_type + str() && + { return std::move(_M_stringbuf).str(); } +#endif // cxx11 ABI + + _GLIBCXX_SSTREAM_ALWAYS_INLINE + basic_string_view + view() const noexcept + { return _M_stringbuf.view(); } +#endif // C++20 + + /** + * @brief Setting a new buffer. + * @param __s The string to use as a new sequence. + * + * Calls @c rdbuf()->str(s). + */ + void + str(const __string_type& __s) + { _M_stringbuf.str(__s); } + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI +#if __cpp_concepts + template<__allocator_like _SAlloc> + requires (!is_same_v<_SAlloc, _Alloc>) + void + str(const basic_string<_CharT, _Traits, _SAlloc>& __s) + { _M_stringbuf.str(__s); } +#endif + + void + str(__string_type&& __s) + { _M_stringbuf.str(std::move(__s)); } +#endif + }; + + + // [27.7.4] Template class basic_stringstream + /** + * @brief Controlling input and output for std::string. + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * @tparam _Alloc Allocator type, defaults to allocator<_CharT>. + * + * This class supports reading from and writing to objects of type + * std::basic_string, using the inherited functions from + * std::basic_iostream. To control the associated sequence, an instance + * of std::basic_stringbuf is used, which this page refers to as @c sb. + */ + template + class basic_stringstream : public basic_iostream<_CharT, _Traits> + { + public: + // Types: + typedef _CharT char_type; + typedef _Traits traits_type; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 251. basic_stringbuf missing allocator_type + typedef _Alloc allocator_type; + typedef typename traits_type::int_type int_type; + typedef typename traits_type::pos_type pos_type; + typedef typename traits_type::off_type off_type; + + // Non-standard Types: + typedef basic_string<_CharT, _Traits, _Alloc> __string_type; + typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; + typedef basic_iostream __iostream_type; + + private: + __stringbuf_type _M_stringbuf; + + public: + // Constructors/destructors + + /** + * @brief Default constructor starts with an empty string buffer. + * + * Initializes @c sb using the mode @c in|out, and passes @c &sb + * to the base class initializer. Does not allocate any buffer. + * + * That's a lie. We initialize the base class with NULL, because the + * string class does its own memory management. + */ + basic_stringstream() + : __iostream_type(), _M_stringbuf(ios_base::out | ios_base::in) + { this->init(&_M_stringbuf); } + + /** + * @brief Starts with an empty string buffer. + * @param __m Whether the buffer can read, or write, or both. + * + * Initializes @c sb using the mode from @c __m, and passes @c &sb + * to the base class initializer. Does not allocate any buffer. + * + * That's a lie. We initialize the base class with NULL, because the + * string class does its own memory management. + */ + explicit + basic_stringstream(ios_base::openmode __m) + : __iostream_type(), _M_stringbuf(__m) + { this->init(&_M_stringbuf); } + + /** + * @brief Starts with an existing string buffer. + * @param __str A string to copy as a starting buffer. + * @param __m Whether the buffer can read, or write, or both. + * + * Initializes @c sb using @a __str and @c __m, and passes @c &sb + * to the base class initializer. + * + * That's a lie. We initialize the base class with NULL, because the + * string class does its own memory management. + */ + explicit + basic_stringstream(const __string_type& __str, + ios_base::openmode __m = ios_base::out | ios_base::in) + : __iostream_type(), _M_stringbuf(__str, __m) + { this->init(&_M_stringbuf); } + + /** + * @brief The destructor does nothing. + * + * The buffer is deallocated by the stringbuf object, not the + * formatting stream. + */ + ~basic_stringstream() + { } + +#if __cplusplus >= 201103L + basic_stringstream(const basic_stringstream&) = delete; + + basic_stringstream(basic_stringstream&& __rhs) + : __iostream_type(std::move(__rhs)), + _M_stringbuf(std::move(__rhs._M_stringbuf)) + { __iostream_type::set_rdbuf(&_M_stringbuf); } + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI + basic_stringstream(ios_base::openmode __mode, const allocator_type& __a) + : __iostream_type(), _M_stringbuf(__mode, __a) + { this->init(&_M_stringbuf); } + + explicit + basic_stringstream(__string_type&& __str, + ios_base::openmode __mode = ios_base::in + | ios_base::out) + : __iostream_type(), _M_stringbuf(std::move(__str), __mode) + { this->init(std::__addressof(_M_stringbuf)); } + + template + basic_stringstream(const basic_string<_CharT, _Traits, _SAlloc>& __str, + const allocator_type& __a) + : basic_stringstream(__str, ios_base::in | ios_base::out, __a) + { } + + template + basic_stringstream(const basic_string<_CharT, _Traits, _SAlloc>& __str, + ios_base::openmode __mode, + const allocator_type& __a) + : __iostream_type(), _M_stringbuf(__str, __mode, __a) + { this->init(std::__addressof(_M_stringbuf)); } + + template + explicit + basic_stringstream(const basic_string<_CharT, _Traits, _SAlloc>& __str, + ios_base::openmode __mode = ios_base::in + | ios_base::out) + : basic_stringstream(__str, __mode, allocator_type()) + { } +#endif // C++20 + + // 27.8.3.2 Assign and swap: + + basic_stringstream& + operator=(const basic_stringstream&) = delete; + + basic_stringstream& + operator=(basic_stringstream&& __rhs) + { + __iostream_type::operator=(std::move(__rhs)); + _M_stringbuf = std::move(__rhs._M_stringbuf); + return *this; + } + + void + swap(basic_stringstream& __rhs) + { + __iostream_type::swap(__rhs); + _M_stringbuf.swap(__rhs._M_stringbuf); + } +#endif // C++11 + + // Members: + /** + * @brief Accessing the underlying buffer. + * @return The current basic_stringbuf buffer. + * + * This hides both signatures of std::basic_ios::rdbuf(). + */ + _GLIBCXX_NODISCARD + __stringbuf_type* + rdbuf() const + { return const_cast<__stringbuf_type*>(&_M_stringbuf); } + + /** + * @brief Copying out the string buffer. + * @return @c rdbuf()->str() + */ + _GLIBCXX_NODISCARD + __string_type + str() const _GLIBCXX_LVAL_REF_QUAL + { return _M_stringbuf.str(); } + +#if __cplusplus > 201703L +#if _GLIBCXX_USE_CXX11_ABI +#if __cpp_concepts + template<__allocator_like _SAlloc> + _GLIBCXX_NODISCARD + basic_string<_CharT, _Traits, _SAlloc> + str(const _SAlloc& __sa) const + { return _M_stringbuf.str(__sa); } +#endif + + _GLIBCXX_NODISCARD + __string_type + str() && + { return std::move(_M_stringbuf).str(); } +#endif // cxx11 ABI + + _GLIBCXX_SSTREAM_ALWAYS_INLINE + basic_string_view + view() const noexcept + { return _M_stringbuf.view(); } +#endif // C++20 + + /** + * @brief Setting a new buffer. + * @param __s The string to use as a new sequence. + * + * Calls @c rdbuf()->str(s). + */ + void + str(const __string_type& __s) + { _M_stringbuf.str(__s); } + +#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI +#if __cpp_concepts + template<__allocator_like _SAlloc> + requires (!is_same_v<_SAlloc, _Alloc>) + void + str(const basic_string<_CharT, _Traits, _SAlloc>& __s) + { _M_stringbuf.str(__s); } +#endif + + void + str(__string_type&& __s) + { _M_stringbuf.str(std::move(__s)); } +#endif + }; + +#if __cplusplus >= 201103L + /// Swap specialization for stringbufs. + template + inline void + swap(basic_stringbuf<_CharT, _Traits, _Allocator>& __x, + basic_stringbuf<_CharT, _Traits, _Allocator>& __y) + noexcept(noexcept(__x.swap(__y))) + { __x.swap(__y); } + + /// Swap specialization for istringstreams. + template + inline void + swap(basic_istringstream<_CharT, _Traits, _Allocator>& __x, + basic_istringstream<_CharT, _Traits, _Allocator>& __y) + { __x.swap(__y); } + + /// Swap specialization for ostringstreams. + template + inline void + swap(basic_ostringstream<_CharT, _Traits, _Allocator>& __x, + basic_ostringstream<_CharT, _Traits, _Allocator>& __y) + { __x.swap(__y); } + + /// Swap specialization for stringstreams. + template + inline void + swap(basic_stringstream<_CharT, _Traits, _Allocator>& __x, + basic_stringstream<_CharT, _Traits, _Allocator>& __y) + { __x.swap(__y); } +#endif // C++11 + +_GLIBCXX_END_NAMESPACE_CXX11 +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#undef _GLIBCXX_SSTREAM_ALWAYS_INLINE +#undef _GLIBCXX_LVAL_REF_QUAL + +#include + +#endif /* _GLIBCXX_SSTREAM */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@sstream.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@sstream.blob new file mode 100644 index 0000000000000000000000000000000000000000..4f472bb679b70e110a55177d5dc60c8c467cd011 GIT binary patch literal 75773 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. + +/** @file include/stdexcept + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 19.1 Exception classes +// + +#ifndef _GLIBCXX_STDEXCEPT +#define _GLIBCXX_STDEXCEPT 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if _GLIBCXX_USE_DUAL_ABI +#if _GLIBCXX_USE_CXX11_ABI + // Emulates an old COW string when the new std::string is in use. + struct __cow_string + { + union { + const char* _M_p; + char _M_bytes[sizeof(const char*)]; + }; + + __cow_string(); + __cow_string(const std::string&); + __cow_string(const char*, size_t); + __cow_string(const __cow_string&) _GLIBCXX_NOTHROW; + __cow_string& operator=(const __cow_string&) _GLIBCXX_NOTHROW; + ~__cow_string(); +#if __cplusplus >= 201103L + __cow_string(__cow_string&&) noexcept; + __cow_string& operator=(__cow_string&&) noexcept; +#endif + }; + + typedef basic_string __sso_string; +#else // _GLIBCXX_USE_CXX11_ABI + typedef basic_string __cow_string; + + // Emulates a new SSO string when the old std::string is in use. + struct __sso_string + { + struct __str + { + const char* _M_p; + size_t _M_string_length; + char _M_local_buf[16]; + }; + + union { + __str _M_s; + char _M_bytes[sizeof(__str)]; + }; + + __sso_string() _GLIBCXX_NOTHROW; + __sso_string(const std::string&); + __sso_string(const char*, size_t); + __sso_string(const __sso_string&); + __sso_string& operator=(const __sso_string&); + ~__sso_string(); +#if __cplusplus >= 201103L + __sso_string(__sso_string&&) noexcept; + __sso_string& operator=(__sso_string&&) noexcept; +#endif + }; +#endif // _GLIBCXX_USE_CXX11_ABI +#else // _GLIBCXX_USE_DUAL_ABI + typedef basic_string __sso_string; + typedef basic_string __cow_string; +#endif + + /** + * @addtogroup exceptions + * @{ + */ + + /** Logic errors represent problems in the internal logic of a program; + * in theory, these are preventable, and even detectable before the + * program runs (e.g., violations of class invariants). + * @brief One of two subclasses of exception. + */ + class logic_error : public exception + { + __cow_string _M_msg; + + public: + /** Takes a character string describing the error. */ + explicit + logic_error(const string& __arg) _GLIBCXX_TXN_SAFE; + +#if __cplusplus >= 201103L + explicit + logic_error(const char*) _GLIBCXX_TXN_SAFE; + + logic_error(logic_error&&) noexcept; + logic_error& operator=(logic_error&&) noexcept; +#endif + +#if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS + logic_error(const logic_error&) _GLIBCXX_NOTHROW; + logic_error& operator=(const logic_error&) _GLIBCXX_NOTHROW; +#elif __cplusplus >= 201103L + logic_error(const logic_error&) = default; + logic_error& operator=(const logic_error&) = default; +#endif + + virtual ~logic_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; + + /** Returns a C-style character string describing the general cause of + * the current error (the same string passed to the ctor). */ + virtual const char* + what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; + +# ifdef _GLIBCXX_TM_TS_INTERNAL + friend void* + ::_txnal_logic_error_get_msg(void* e); +# endif + }; + + /** Thrown by the library, or by you, to report domain errors (domain in + * the mathematical sense). */ + class domain_error : public logic_error + { + public: + explicit domain_error(const string& __arg) _GLIBCXX_TXN_SAFE; +#if __cplusplus >= 201103L + explicit domain_error(const char*) _GLIBCXX_TXN_SAFE; + domain_error(const domain_error&) = default; + domain_error& operator=(const domain_error&) = default; + domain_error(domain_error&&) = default; + domain_error& operator=(domain_error&&) = default; +#endif + virtual ~domain_error() _GLIBCXX_NOTHROW; + }; + + /** Thrown to report invalid arguments to functions. */ + class invalid_argument : public logic_error + { + public: + explicit invalid_argument(const string& __arg) _GLIBCXX_TXN_SAFE; +#if __cplusplus >= 201103L + explicit invalid_argument(const char*) _GLIBCXX_TXN_SAFE; + invalid_argument(const invalid_argument&) = default; + invalid_argument& operator=(const invalid_argument&) = default; + invalid_argument(invalid_argument&&) = default; + invalid_argument& operator=(invalid_argument&&) = default; +#endif + virtual ~invalid_argument() _GLIBCXX_NOTHROW; + }; + + /** Thrown when an object is constructed that would exceed its maximum + * permitted size (e.g., a basic_string instance). */ + class length_error : public logic_error + { + public: + explicit length_error(const string& __arg) _GLIBCXX_TXN_SAFE; +#if __cplusplus >= 201103L + explicit length_error(const char*) _GLIBCXX_TXN_SAFE; + length_error(const length_error&) = default; + length_error& operator=(const length_error&) = default; + length_error(length_error&&) = default; + length_error& operator=(length_error&&) = default; +#endif + virtual ~length_error() _GLIBCXX_NOTHROW; + }; + + /** This represents an argument whose value is not within the expected + * range (e.g., boundary checks in basic_string). */ + class out_of_range : public logic_error + { + public: + explicit out_of_range(const string& __arg) _GLIBCXX_TXN_SAFE; +#if __cplusplus >= 201103L + explicit out_of_range(const char*) _GLIBCXX_TXN_SAFE; + out_of_range(const out_of_range&) = default; + out_of_range& operator=(const out_of_range&) = default; + out_of_range(out_of_range&&) = default; + out_of_range& operator=(out_of_range&&) = default; +#endif + virtual ~out_of_range() _GLIBCXX_NOTHROW; + }; + + /** Runtime errors represent problems outside the scope of a program; + * they cannot be easily predicted and can generally only be caught as + * the program executes. + * @brief One of two subclasses of exception. + */ + class runtime_error : public exception + { + __cow_string _M_msg; + + public: + /** Takes a character string describing the error. */ + explicit + runtime_error(const string& __arg) _GLIBCXX_TXN_SAFE; + +#if __cplusplus >= 201103L + explicit + runtime_error(const char*) _GLIBCXX_TXN_SAFE; + + runtime_error(runtime_error&&) noexcept; + runtime_error& operator=(runtime_error&&) noexcept; +#endif + +#if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS + runtime_error(const runtime_error&) _GLIBCXX_NOTHROW; + runtime_error& operator=(const runtime_error&) _GLIBCXX_NOTHROW; +#elif __cplusplus >= 201103L + runtime_error(const runtime_error&) = default; + runtime_error& operator=(const runtime_error&) = default; +#endif + + virtual ~runtime_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; + + /** Returns a C-style character string describing the general cause of + * the current error (the same string passed to the ctor). */ + virtual const char* + what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; + +# ifdef _GLIBCXX_TM_TS_INTERNAL + friend void* + ::_txnal_runtime_error_get_msg(void* e); +# endif + }; + + /** Thrown to indicate range errors in internal computations. */ + class range_error : public runtime_error + { + public: + explicit range_error(const string& __arg) _GLIBCXX_TXN_SAFE; +#if __cplusplus >= 201103L + explicit range_error(const char*) _GLIBCXX_TXN_SAFE; + range_error(const range_error&) = default; + range_error& operator=(const range_error&) = default; + range_error(range_error&&) = default; + range_error& operator=(range_error&&) = default; +#endif + virtual ~range_error() _GLIBCXX_NOTHROW; + }; + + /** Thrown to indicate arithmetic overflow. */ + class overflow_error : public runtime_error + { + public: + explicit overflow_error(const string& __arg) _GLIBCXX_TXN_SAFE; +#if __cplusplus >= 201103L + explicit overflow_error(const char*) _GLIBCXX_TXN_SAFE; + overflow_error(const overflow_error&) = default; + overflow_error& operator=(const overflow_error&) = default; + overflow_error(overflow_error&&) = default; + overflow_error& operator=(overflow_error&&) = default; +#endif + virtual ~overflow_error() _GLIBCXX_NOTHROW; + }; + + /** Thrown to indicate arithmetic underflow. */ + class underflow_error : public runtime_error + { + public: + explicit underflow_error(const string& __arg) _GLIBCXX_TXN_SAFE; +#if __cplusplus >= 201103L + explicit underflow_error(const char*) _GLIBCXX_TXN_SAFE; + underflow_error(const underflow_error&) = default; + underflow_error& operator=(const underflow_error&) = default; + underflow_error(underflow_error&&) = default; + underflow_error& operator=(underflow_error&&) = default; +#endif + virtual ~underflow_error() _GLIBCXX_NOTHROW; + }; + + /// @} group exceptions + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _GLIBCXX_STDEXCEPT */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@stdexcept.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@stdexcept.blob new file mode 100644 index 0000000000000000000000000000000000000000..0bf86714fdc54c4246ea698a87cf14a0634e3924 GIT binary patch literal 26079 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 h4v3~Das*&B@xgHbE=TP^. + +/** @file include/streambuf + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 27.5 Stream buffers +// + +#ifndef _GLIBXX_STREAMBUF +#define _GLIBXX_STREAMBUF 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // iostreams + +#include +#include +#include +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#define _IsUnused __attribute__ ((__unused__)) + + template + streamsize + __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*, + basic_streambuf<_CharT, _Traits>*, bool&); + + /** + * @brief The actual work of input and output (interface). + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * This is a base class. Derived stream buffers each control a + * pair of character sequences: one for input, and one for output. + * + * Section [27.5.1] of the standard describes the requirements and + * behavior of stream buffer classes. That section (three paragraphs) + * is reproduced here, for simplicity and accuracy. + * + * -# Stream buffers can impose various constraints on the sequences + * they control. Some constraints are: + * - The controlled input sequence can be not readable. + * - The controlled output sequence can be not writable. + * - The controlled sequences can be associated with the contents of + * other representations for character sequences, such as external + * files. + * - The controlled sequences can support operations @e directly to or + * from associated sequences. + * - The controlled sequences can impose limitations on how the + * program can read characters from a sequence, write characters to + * a sequence, put characters back into an input sequence, or alter + * the stream position. + * . + * -# Each sequence is characterized by three pointers which, if non-null, + * all point into the same @c charT array object. The array object + * represents, at any moment, a (sub)sequence of characters from the + * sequence. Operations performed on a sequence alter the values + * stored in these pointers, perform reads and writes directly to or + * from associated sequences, and alter the stream position and + * conversion state as needed to maintain this subsequence relationship. + * The three pointers are: + * - the beginning pointer, or lowest element address in the + * array (called @e xbeg here); + * - the next pointer, or next element address that is a + * current candidate for reading or writing (called @e xnext here); + * - the end pointer, or first element address beyond the + * end of the array (called @e xend here). + * . + * -# The following semantic constraints shall always apply for any set + * of three pointers for a sequence, using the pointer names given + * immediately above: + * - If @e xnext is not a null pointer, then @e xbeg and @e xend shall + * also be non-null pointers into the same @c charT array, as + * described above; otherwise, @e xbeg and @e xend shall also be null. + * - If @e xnext is not a null pointer and @e xnext < @e xend for an + * output sequence, then a write position is available. + * In this case, @e *xnext shall be assignable as the next element + * to write (to put, or to store a character value, into the sequence). + * - If @e xnext is not a null pointer and @e xbeg < @e xnext for an + * input sequence, then a putback position is available. + * In this case, @e xnext[-1] shall have a defined value and is the + * next (preceding) element to store a character that is put back + * into the input sequence. + * - If @e xnext is not a null pointer and @e xnext< @e xend for an + * input sequence, then a read position is available. + * In this case, @e *xnext shall have a defined value and is the + * next element to read (to get, or to obtain a character value, + * from the sequence). + */ + template + class basic_streambuf + { + public: + ///@{ + /** + * These are standard types. They permit a standardized way of + * referring to names of (or names dependent on) the template + * parameters, which are specific to the implementation. + */ + typedef _CharT char_type; + typedef _Traits traits_type; + typedef typename traits_type::int_type int_type; + typedef typename traits_type::pos_type pos_type; + typedef typename traits_type::off_type off_type; + ///@} + + ///@{ + /// This is a non-standard type. + typedef basic_streambuf __streambuf_type; + ///@} + + friend class basic_ios; + friend class basic_istream; + friend class basic_ostream; + friend class istreambuf_iterator; + friend class ostreambuf_iterator; + + friend streamsize + __copy_streambufs_eof<>(basic_streambuf*, basic_streambuf*, bool&); + + template + friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, + _CharT2*>::__type + __copy_move_a2(istreambuf_iterator<_CharT2>, + istreambuf_iterator<_CharT2>, _CharT2*); + + template + friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, + istreambuf_iterator<_CharT2> >::__type + find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, + const _CharT2&); + + template + friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, + void>::__type + advance(istreambuf_iterator<_CharT2>&, _Distance); + + friend void __istream_extract(istream&, char*, streamsize); + + template + friend basic_istream<_CharT2, _Traits2>& + operator>>(basic_istream<_CharT2, _Traits2>&, + basic_string<_CharT2, _Traits2, _Alloc>&); + + template + friend basic_istream<_CharT2, _Traits2>& + getline(basic_istream<_CharT2, _Traits2>&, + basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2); + + protected: + /* + * This is based on _IO_FILE, just reordered to be more consistent, + * and is intended to be the most minimal abstraction for an + * internal buffer. + * - get == input == read + * - put == output == write + */ + char_type* _M_in_beg; ///< Start of get area. + char_type* _M_in_cur; ///< Current read area. + char_type* _M_in_end; ///< End of get area. + char_type* _M_out_beg; ///< Start of put area. + char_type* _M_out_cur; ///< Current put area. + char_type* _M_out_end; ///< End of put area. + + /// Current locale setting. + locale _M_buf_locale; + + public: + /// Destructor deallocates no buffer space. + virtual + ~basic_streambuf() + { } + + // [27.5.2.2.1] locales + /** + * @brief Entry point for imbue(). + * @param __loc The new locale. + * @return The previous locale. + * + * Calls the derived imbue(__loc). + */ + locale + pubimbue(const locale& __loc) + { + locale __tmp(this->getloc()); + this->imbue(__loc); + _M_buf_locale = __loc; + return __tmp; + } + + /** + * @brief Locale access. + * @return The current locale in effect. + * + * If pubimbue(loc) has been called, then the most recent @c loc + * is returned. Otherwise the global locale in effect at the time + * of construction is returned. + */ + locale + getloc() const + { return _M_buf_locale; } + + // [27.5.2.2.2] buffer management and positioning + ///@{ + /** + * @brief Entry points for derived buffer functions. + * + * The public versions of @c pubfoo dispatch to the protected + * derived @c foo member functions, passing the arguments (if any) + * and returning the result unchanged. + */ + basic_streambuf* + pubsetbuf(char_type* __s, streamsize __n) + { return this->setbuf(__s, __n); } + + /** + * @brief Alters the stream position. + * @param __off Offset. + * @param __way Value for ios_base::seekdir. + * @param __mode Value for ios_base::openmode. + * + * Calls virtual seekoff function. + */ + pos_type + pubseekoff(off_type __off, ios_base::seekdir __way, + ios_base::openmode __mode = ios_base::in | ios_base::out) + { return this->seekoff(__off, __way, __mode); } + + /** + * @brief Alters the stream position. + * @param __sp Position + * @param __mode Value for ios_base::openmode. + * + * Calls virtual seekpos function. + */ + pos_type + pubseekpos(pos_type __sp, + ios_base::openmode __mode = ios_base::in | ios_base::out) + { return this->seekpos(__sp, __mode); } + + /** + * @brief Calls virtual sync function. + */ + int + pubsync() { return this->sync(); } + ///@} + + // [27.5.2.2.3] get area + /** + * @brief Looking ahead into the stream. + * @return The number of characters available. + * + * If a read position is available, returns the number of characters + * available for reading before the buffer must be refilled. + * Otherwise returns the derived @c showmanyc(). + */ + streamsize + in_avail() + { + const streamsize __ret = this->egptr() - this->gptr(); + return __ret ? __ret : this->showmanyc(); + } + + /** + * @brief Getting the next character. + * @return The next character, or eof. + * + * Calls @c sbumpc(), and if that function returns + * @c traits::eof(), so does this function. Otherwise, @c sgetc(). + */ + int_type + snextc() + { + int_type __ret = traits_type::eof(); + if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(), + __ret), true)) + __ret = this->sgetc(); + return __ret; + } + + /** + * @brief Getting the next character. + * @return The next character, or eof. + * + * If the input read position is available, returns that character + * and increments the read pointer, otherwise calls and returns + * @c uflow(). + */ + int_type + sbumpc() + { + int_type __ret; + if (__builtin_expect(this->gptr() < this->egptr(), true)) + { + __ret = traits_type::to_int_type(*this->gptr()); + this->gbump(1); + } + else + __ret = this->uflow(); + return __ret; + } + + /** + * @brief Getting the next character. + * @return The next character, or eof. + * + * If the input read position is available, returns that character, + * otherwise calls and returns @c underflow(). Does not move the + * read position after fetching the character. + */ + int_type + sgetc() + { + int_type __ret; + if (__builtin_expect(this->gptr() < this->egptr(), true)) + __ret = traits_type::to_int_type(*this->gptr()); + else + __ret = this->underflow(); + return __ret; + } + + /** + * @brief Entry point for xsgetn. + * @param __s A buffer area. + * @param __n A count. + * + * Returns xsgetn(__s,__n). The effect is to fill @a __s[0] through + * @a __s[__n-1] with characters from the input sequence, if possible. + */ + streamsize + sgetn(char_type* __s, streamsize __n) + { return this->xsgetn(__s, __n); } + + // [27.5.2.2.4] putback + /** + * @brief Pushing characters back into the input stream. + * @param __c The character to push back. + * @return The previous character, if possible. + * + * Similar to sungetc(), but @a __c is pushed onto the stream + * instead of the previous character. If successful, + * the next character fetched from the input stream will be @a + * __c. + */ + int_type + sputbackc(char_type __c) + { + int_type __ret; + const bool __testpos = this->eback() < this->gptr(); + if (__builtin_expect(!__testpos || + !traits_type::eq(__c, this->gptr()[-1]), false)) + __ret = this->pbackfail(traits_type::to_int_type(__c)); + else + { + this->gbump(-1); + __ret = traits_type::to_int_type(*this->gptr()); + } + return __ret; + } + + /** + * @brief Moving backwards in the input stream. + * @return The previous character, if possible. + * + * If a putback position is available, this function decrements + * the input pointer and returns that character. Otherwise, + * calls and returns pbackfail(). The effect is to @a unget + * the last character @a gotten. + */ + int_type + sungetc() + { + int_type __ret; + if (__builtin_expect(this->eback() < this->gptr(), true)) + { + this->gbump(-1); + __ret = traits_type::to_int_type(*this->gptr()); + } + else + __ret = this->pbackfail(); + return __ret; + } + + // [27.5.2.2.5] put area + /** + * @brief Entry point for all single-character output functions. + * @param __c A character to output. + * @return @a __c, if possible. + * + * One of two public output functions. + * + * If a write position is available for the output sequence (i.e., + * the buffer is not full), stores @a __c in that position, increments + * the position, and returns @c traits::to_int_type(__c). If a write + * position is not available, returns @c overflow(__c). + */ + int_type + sputc(char_type __c) + { + int_type __ret; + if (__builtin_expect(this->pptr() < this->epptr(), true)) + { + *this->pptr() = __c; + this->pbump(1); + __ret = traits_type::to_int_type(__c); + } + else + __ret = this->overflow(traits_type::to_int_type(__c)); + return __ret; + } + + /** + * @brief Entry point for all single-character output functions. + * @param __s A buffer read area. + * @param __n A count. + * + * One of two public output functions. + * + * + * Returns xsputn(__s,__n). The effect is to write @a __s[0] through + * @a __s[__n-1] to the output sequence, if possible. + */ + streamsize + sputn(const char_type* __s, streamsize __n) + { return this->xsputn(__s, __n); } + + protected: + /** + * @brief Base constructor. + * + * Only called from derived constructors, and sets up all the + * buffer data to zero, including the pointers described in the + * basic_streambuf class description. Note that, as a result, + * - the class starts with no read nor write positions available, + * - this is not an error + */ + basic_streambuf() + : _M_in_beg(0), _M_in_cur(0), _M_in_end(0), + _M_out_beg(0), _M_out_cur(0), _M_out_end(0), + _M_buf_locale(locale()) + { } + + // [27.5.2.3.1] get area access + ///@{ + /** + * @brief Access to the get area. + * + * These functions are only available to other protected functions, + * including derived classes. + * + * - eback() returns the beginning pointer for the input sequence + * - gptr() returns the next pointer for the input sequence + * - egptr() returns the end pointer for the input sequence + */ + char_type* + eback() const { return _M_in_beg; } + + char_type* + gptr() const { return _M_in_cur; } + + char_type* + egptr() const { return _M_in_end; } + ///@} + + /** + * @brief Moving the read position. + * @param __n The delta by which to move. + * + * This just advances the read position without returning any data. + */ + void + gbump(int __n) { _M_in_cur += __n; } + + /** + * @brief Setting the three read area pointers. + * @param __gbeg A pointer. + * @param __gnext A pointer. + * @param __gend A pointer. + * @post @a __gbeg == @c eback(), @a __gnext == @c gptr(), and + * @a __gend == @c egptr() + */ + void + setg(char_type* __gbeg, char_type* __gnext, char_type* __gend) + { + _M_in_beg = __gbeg; + _M_in_cur = __gnext; + _M_in_end = __gend; + } + + // [27.5.2.3.2] put area access + ///@{ + /** + * @brief Access to the put area. + * + * These functions are only available to other protected functions, + * including derived classes. + * + * - pbase() returns the beginning pointer for the output sequence + * - pptr() returns the next pointer for the output sequence + * - epptr() returns the end pointer for the output sequence + */ + char_type* + pbase() const { return _M_out_beg; } + + char_type* + pptr() const { return _M_out_cur; } + + char_type* + epptr() const { return _M_out_end; } + ///@} + + /** + * @brief Moving the write position. + * @param __n The delta by which to move. + * + * This just advances the write position without returning any data. + */ + void + pbump(int __n) { _M_out_cur += __n; } + + /** + * @brief Setting the three write area pointers. + * @param __pbeg A pointer. + * @param __pend A pointer. + * @post @a __pbeg == @c pbase(), @a __pbeg == @c pptr(), and + * @a __pend == @c epptr() + */ + void + setp(char_type* __pbeg, char_type* __pend) + { + _M_out_beg = _M_out_cur = __pbeg; + _M_out_end = __pend; + } + + // [27.5.2.4] virtual functions + // [27.5.2.4.1] locales + /** + * @brief Changes translations. + * @param __loc A new locale. + * + * Translations done during I/O which depend on the current + * locale are changed by this call. The standard adds, + * Between invocations of this function a class derived + * from streambuf can safely cache results of calls to locale + * functions and to members of facets so obtained. + * + * @note Base class version does nothing. + */ + virtual void + imbue(const locale& __loc _IsUnused) + { } + + // [27.5.2.4.2] buffer management and positioning + /** + * @brief Manipulates the buffer. + * + * Each derived class provides its own appropriate behavior. See + * the next-to-last paragraph of + * https://gcc.gnu.org/onlinedocs/libstdc++/manual/streambufs.html#io.streambuf.buffering + * for more on this function. + * + * @note Base class version does nothing, returns @c this. + */ + virtual basic_streambuf* + setbuf(char_type*, streamsize) + { return this; } + + /** + * @brief Alters the stream positions. + * + * Each derived class provides its own appropriate behavior. + * @note Base class version does nothing, returns a @c pos_type + * that represents an invalid stream position. + */ + virtual pos_type + seekoff(off_type, ios_base::seekdir, + ios_base::openmode /*__mode*/ = ios_base::in | ios_base::out) + { return pos_type(off_type(-1)); } + + /** + * @brief Alters the stream positions. + * + * Each derived class provides its own appropriate behavior. + * @note Base class version does nothing, returns a @c pos_type + * that represents an invalid stream position. + */ + virtual pos_type + seekpos(pos_type, + ios_base::openmode /*__mode*/ = ios_base::in | ios_base::out) + { return pos_type(off_type(-1)); } + + /** + * @brief Synchronizes the buffer arrays with the controlled sequences. + * @return -1 on failure. + * + * Each derived class provides its own appropriate behavior, + * including the definition of @a failure. + * @note Base class version does nothing, returns zero. + */ + virtual int + sync() { return 0; } + + // [27.5.2.4.3] get area + /** + * @brief Investigating the data available. + * @return An estimate of the number of characters available in the + * input sequence, or -1. + * + * If it returns a positive value, then successive calls to + * @c underflow() will not return @c traits::eof() until at + * least that number of characters have been supplied. If @c + * showmanyc() returns -1, then calls to @c underflow() or @c + * uflow() will fail. [27.5.2.4.3]/1 + * + * @note Base class version does nothing, returns zero. + * @note The standard adds that the intention is not only that the + * calls [to underflow or uflow] will not return @c eof() but + * that they will return immediately. + * @note The standard adds that the morphemes of @c showmanyc are + * @b es-how-many-see, not @b show-manic. + */ + virtual streamsize + showmanyc() { return 0; } + + /** + * @brief Multiple character extraction. + * @param __s A buffer area. + * @param __n Maximum number of characters to assign. + * @return The number of characters assigned. + * + * Fills @a __s[0] through @a __s[__n-1] with characters from the input + * sequence, as if by @c sbumpc(). Stops when either @a __n characters + * have been copied, or when @c traits::eof() would be copied. + * + * It is expected that derived classes provide a more efficient + * implementation by overriding this definition. + */ + virtual streamsize + xsgetn(char_type* __s, streamsize __n); + + /** + * @brief Fetches more data from the controlled sequence. + * @return The first character from the pending sequence. + * + * Informally, this function is called when the input buffer is + * exhausted (or does not exist, as buffering need not actually be + * done). If a buffer exists, it is @a refilled. In either case, the + * next available character is returned, or @c traits::eof() to + * indicate a null pending sequence. + * + * For a formal definition of the pending sequence, see a good text + * such as Langer & Kreft, or [27.5.2.4.3]/7-14. + * + * A functioning input streambuf can be created by overriding only + * this function (no buffer area will be used). For an example, see + * https://gcc.gnu.org/onlinedocs/libstdc++/manual/streambufs.html + * + * @note Base class version does nothing, returns eof(). + */ + virtual int_type + underflow() + { return traits_type::eof(); } + + /** + * @brief Fetches more data from the controlled sequence. + * @return The first character from the pending sequence. + * + * Informally, this function does the same thing as @c underflow(), + * and in fact is required to call that function. It also returns + * the new character, like @c underflow() does. However, this + * function also moves the read position forward by one. + */ + virtual int_type + uflow() + { + int_type __ret = traits_type::eof(); + const bool __testeof = traits_type::eq_int_type(this->underflow(), + __ret); + if (!__testeof) + { + __ret = traits_type::to_int_type(*this->gptr()); + this->gbump(1); + } + return __ret; + } + + // [27.5.2.4.4] putback + /** + * @brief Tries to back up the input sequence. + * @param __c The character to be inserted back into the sequence. + * @return eof() on failure, some other value on success + * @post The constraints of @c gptr(), @c eback(), and @c pptr() + * are the same as for @c underflow(). + * + * @note Base class version does nothing, returns eof(). + */ + virtual int_type + pbackfail(int_type __c _IsUnused = traits_type::eof()) + { return traits_type::eof(); } + + // Put area: + /** + * @brief Multiple character insertion. + * @param __s A buffer area. + * @param __n Maximum number of characters to write. + * @return The number of characters written. + * + * Writes @a __s[0] through @a __s[__n-1] to the output sequence, as if + * by @c sputc(). Stops when either @a n characters have been + * copied, or when @c sputc() would return @c traits::eof(). + * + * It is expected that derived classes provide a more efficient + * implementation by overriding this definition. + */ + virtual streamsize + xsputn(const char_type* __s, streamsize __n); + + /** + * @brief Consumes data from the buffer; writes to the + * controlled sequence. + * @param __c An additional character to consume. + * @return eof() to indicate failure, something else (usually + * @a __c, or not_eof()) + * + * Informally, this function is called when the output buffer + * is full (or does not exist, as buffering need not actually + * be done). If a buffer exists, it is @a consumed, with + * some effect on the controlled sequence. + * (Typically, the buffer is written out to the sequence + * verbatim.) In either case, the character @a c is also + * written out, if @a __c is not @c eof(). + * + * For a formal definition of this function, see a good text + * such as Langer & Kreft, or [27.5.2.4.5]/3-7. + * + * A functioning output streambuf can be created by overriding only + * this function (no buffer area will be used). + * + * @note Base class version does nothing, returns eof(). + */ + virtual int_type + overflow(int_type __c _IsUnused = traits_type::eof()) + { return traits_type::eof(); } + +#if _GLIBCXX_USE_DEPRECATED && __cplusplus <= 201402L + // Annex D.6 (removed in C++17) + public: + /** + * @brief Tosses a character. + * + * Advances the read pointer, ignoring the character that would have + * been read. + * + * See http://gcc.gnu.org/ml/libstdc++/2002-05/msg00168.html + */ + _GLIBCXX_DEPRECATED_SUGGEST("std::basic_streambuf::sbumpc") + void + stossc() + { + if (this->gptr() < this->egptr()) + this->gbump(1); + else + this->uflow(); + } +#endif + + // Also used by specializations for char and wchar_t in src. + void + __safe_gbump(streamsize __n) { _M_in_cur += __n; } + + void + __safe_pbump(streamsize __n) { _M_out_cur += __n; } + +#if __cplusplus < 201103L + private: +#else + protected: +#endif + basic_streambuf(const basic_streambuf&); + + basic_streambuf& + operator=(const basic_streambuf&); + +#if __cplusplus >= 201103L + void + swap(basic_streambuf& __sb) + { + std::swap(_M_in_beg, __sb._M_in_beg); + std::swap(_M_in_cur, __sb._M_in_cur); + std::swap(_M_in_end, __sb._M_in_end); + std::swap(_M_out_beg, __sb._M_out_beg); + std::swap(_M_out_cur, __sb._M_out_cur); + std::swap(_M_out_end, __sb._M_out_end); + std::swap(_M_buf_locale, __sb._M_buf_locale); + } +#endif + }; + +#if __cplusplus >= 201103L + template + std::basic_streambuf<_CharT, _Traits>:: + basic_streambuf(const basic_streambuf&) = default; + + template + std::basic_streambuf<_CharT, _Traits>& + std::basic_streambuf<_CharT, _Traits>:: + operator=(const basic_streambuf&) = default; +#endif + + // Explicit specialization declarations, defined in src/streambuf.cc. + template<> + streamsize + __copy_streambufs_eof(basic_streambuf* __sbin, + basic_streambuf* __sbout, bool& __ineof); +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + streamsize + __copy_streambufs_eof(basic_streambuf* __sbin, + basic_streambuf* __sbout, bool& __ineof); +#endif + +#undef _IsUnused + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#include + +#endif /* _GLIBCXX_STREAMBUF */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@streambuf.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@streambuf.blob new file mode 100644 index 0000000000000000000000000000000000000000..87dd9fa9330489fe45cf0900d848e69874d7fd8b GIT binary patch literal 52611 zcmdO5_$PB#_%ahCgMMyaiGERHW{Q46QGQlxa!Ij%N^yaHMq*KJeqLsBA`+{(C>g=i z%P1&dU{20S%uA=t4BhhlqU_APblsH9qSWM){Gv)*65Pb__aB3PX>pN$W?phmX-cYo za!F-Ds$K@eznE^}%cwHi+WLm3dPaJN`bn83#rlakIr+))B}IvuCB+~Opa4P909FMu zu2?@lJ~yejB(Wqlz67KcpV`GFDXA67sRbpFAVx7UCo?HCuOtVn5oxK3C8b5FV5i_S zzrw;S-poX|AXzsjGq1ElH$ATu;-CED_>|PN%shw@7`{nH^L}wjQD$CxT6qe{H5jVF zeov|_Ni8lXgq-9Y4DlN&(Db_DbECT1Re@=U}aVFx-{Nl9o6eQQc zvOsZVv3_z&Y8v*W1da(%kQVC~mlTyIm&Chy`nZAu0ACar6qn@agNXR#{JgZxbdY+C z&_yyjIX^!;Gc`UlKR&HAFS#T$Kd%@^)x{lJ~)Z%!kMfpYXiACw)ASGy1PJVJ?PHKE|PGWH};oMl1Sdy8K zB^r?eCO$r`AfJc;#9v5(4J=O1NCjtke6bByS(I8>npu=u9G{V2TmsR9;d8J;NMb6_ z%qt->?h1-hAthBxe0~AJAO#tpnU{twh|nVpmevw;;xiJ9Gl+_0upUT>O_ciLlAQQ5 za7BexIVcT-Brt*(DX8M(i!;-UQ_+J9YiSZ6UtE%slA0D@o}7^g%^cuz1yt$b*HN5V z1+A~(8el~PQotpbgR4v|2@pvU*zu4+%FNHhndLww4=B38af%}ZGILYSOmK%#X=YwY zo^EDJYF^bjB#N#&tr%ybODxXSO;62BEy_&R&&(^)&B=kd^pY8Y zrbKc@MPgEBd|G}{GLDQ=oR^Z8nFDT^teW}iB1)?O61aIOnTdHIAK(bL%7Ro-I|N#` zfa@0wmEabEenEb5W<@+a9xz-Fwy!+DCKQfGrz7iT0EL7KnuuxyH>(1SGdi^_BI zle0mok6^r_6sFjt6;hUfTa(}p8aT<~D<<#-A|xGwoQB;8Ihjexx*4g7DXB%e#U+VF z*lRyK3PBSAZVgpr#zS`Ingwu6eOrUQm)zl$w|VPI$VBMakf1CB7ic$;{0x zAtt_y67$ki;}esUp*bGIek2DcgBq6jlPTE$nR#XT+2Ar8pJ`yFAn%vvfeN$C#GK43 z94!|lH{guI+|=UY#PrnS_}tXoq|_pCS|DgWY``D`zpp@zhP={TP@@drAOP4$pfIWc zB_q7i1MZz+u@r0sxZZ;sL0TmS>AZu+vr>zS^@~!AOLIyf^%Yy68qWF(XQ+Zl8$kW- z;*!KX!nGL0`QV`^P#Yc6!y+y!3KENoQ{(eWaYr7clK>AFTpypCm|O&IU&6KFDi$GSS7v@Oj)oUfdQQgG^8tIQJTbE* zEhiDu=f_A;U?t!(0XB>hAD@+55T8_<7GIJG_92EIB&)&NA;n%iq>&Pzm!Fpj_98~k zDK1G#)`fJM;W0o-$}CPTDJ_5`%nkJf8dC6fY?00E#VGuQ2NB(I6w*>u*-{5)5?n=qrLF>#h*EI6D#5q zb28KOAnh=Wya_fIT7SkDmn0@<$LD6|>84cXCFW)(WAzuZ7LfD71sGYrhmAJp7lFsS z;9i0i9AKM3nH)5*Uy9uxu$r`-{KS$x-Q@h-Tu3_spK}n^X;FMmW-+#wC2|rbEnUH~ zAUICJBdcI%V1$ zJDB6(uw07nf-=Z}At+?g?cL|J_%ZG66kA#)uYaOf}DfTiej8aH`p*p5P=NA2y^t%Oe>C0 z!O?668%0!+3|0xT6x4GjII*9XS`JNaq?NO<@#@^f^t{Xx(83cq3sO_>Ye(x?fn5eo zVxT!LtYHF5EFgvGO$X$Zf*x+U`DNG(4s?ak5*cJMMvQ_iMQulvV9zP&hC)Yi;xqG# zQz7GW7-l1BfvScEISyZe8(ZL|BG4H?3=<))1rN*VLK-l-;Oq|a8b&&UC#JtP`{H}!z?}JH@^%!nN@;%rki17(*nGuq7K?V`&kFrE?k&U4mxiJb4 z8;nv1>>{vqW))N<8v~J%m2kCDe;L(*t?-fE(V(n_Bw&}c970CC`>V83&}X#ttoA7a6gThfhw?@ zKn+D$w;E(CMnXce6|NyUKMzur5TygO6eS+KmX0XppomQ^D2Y$bNQF$-U^oflLy%!) zg%LQZlQL3YnwMEvnu>GP2Q*l~4XxbLl2n2t@L&y)!v}LD`G?kx=TTQF!Y)WcdkqNq^?$HHjSCB~{S8@2E ztZP9J7t94^LAcc8%ir)B*AQH~p(`W9aLI!`07*}f4pIbOl}PnW6kdgx6+;Xz^`N8$ z3T8wd@^=>-F2!K?LfYA|1trYN45~bTxtSUM$}{u))nI1$tHsRa_5Y*ne?IM{8UZD# zxdl0iC8-KFb_x)UpfNs$;*u0AtN8fj{DMl*Qkm4m+@#X9;`r43G>y!>5(TaJ_~N9@ zJRJo%C%?2rMqfx)$+ASW|9vqS;Zjsi~~f>tr+DWs$( z=Oh+^*~K~vkU6Lnh0Ht!(Bf8zOF&*oPS#^!VEZq=D0_Kt^Rtitdl&NreY=qH>Hn)k zzvDejRd@WKb&a9WgggAi{}$uZi}Q<^dH-kUW!~nfT{Dq^hk=3VuRk-#Uw>w!zl+&C`3mgJ_KAY=_tfIf)G<6jeIp1&r{ zB7d1!82=hG^Zd1C=3`)BVEn&ZYr*!FYu2sjgGCQKP?`U#IKTyAX$>q0jXYG9FhLZR z(5OXK2@^z735|GEl`ugRmC$5?suCuMq7s^DP*uVNQB*>c6hbA-UziYF9Sa*PC>{S# z%I%)>x3dJ)LWeBOgG36J;0KpVXt88vm0tjvZnV_^x3&;j52rbr3@!yijDJ0uIsSSw zOM#=%jhW@IC$ksGK@4oH42*vbn0fvhFw2084Sg`%kAdO;;wzKlzdi1ng(oS+#}_B2 zrN$Q|mF5;`KngN&ks2SL2TD2;jDOXbdH$*~tAOoQ1+$C5NvF>E;i7xtZwo*UU|?YQ zZ^Ck|Q>ayT8)3`Raa*R$%=1?nYMBz4UBKX&Q=G3*TAZ4qkW`6QE*C4L5F#i=C)8Xz;ly&+KTQIM3H zt^>9PA(Wbz0tz4w#=pi)Jb#UuAbHD(iRZ656CZ1RYllhy$4b_VNdT+mneW!JA;@L7vo<^CZ4~NOk&^^B>`rK zFhm=f>wz{g8S5FvDioBKKmrJ|hKS3dnu`k-ppM{WMG7VP;2?#m)Z^j`$w)0uRe-H~ zDh3&#ke`=RsgPKfn3e5lwXpOTBJ}=lwXpXT#}lCP_M%U>5zgVDdAuigToX> zdtPcq2`rlN=!8ZGidIl$5wH_fI6%uRhi&KIpHNx!7#u^82BMV}gx1gmCCmJB4NV3H zDR52Az`zO8%J}ydqsHG`j3$3o92x)rlr2h+&Ys8yHUXndLleL#3qgkKI57Ub&dBrk zI-?di;z8`&j6#T<;*?mN3P~lP9#?*m9v7E_KPdi^6LWGvF;$eGs{oG~SWh*-s8|P_ z_lr|YiWN!=6cTfCKykyRkW`wMmRh8cl30=miukJ3qI^&b5VV~R6l0)Rf`(wRLP~0J za#3bdD!55kl99@VUMxeB0#scAXuYeRf`VUu2`E!1mgp!X7AqtwKvqWSa4G15TmaPq zUe{NwP@Y+mp^%ra09taVke6QsEe1eKJwT=vBT^|;e`c{lX0bwEeu+Y2o&tE<4^-;H zBIQ3UN}2zvIC4U2rv0`DroXH*P%O(VDk)9O!Dt|(#gdg(MR7rCNglKwLdwYT@x?mG zy1{jUS`ZHdLjW{mS|ReIZ)r|RWSwmA#K_R##zo1y5 zJR>zvAvF_RmN+CTZM*$SuAPo-53Q&U-%JWNeQlL2+ zWC3Kmrj-?_%c7~r#pPK7iv84z0!S%Ul95<~Nc)ieSD-?yEHfolAyFYWzbI89H7zYO zIWsk{gex<*ASX39HLnERUjfyc`DLj^MVTp(be{=I?`hx#9r<~Bpi zZ3%m%h6DBz0_1OEQyRFAIK{~G_Y@1KKX0igN@myRA zLD0$pnzKL|36y#CAn7$VEiE+}9I++&(EJasdXW<+7m=wmGfkl&zqmLPGz1Ka!v5ua zSNb>J5dLqa8nHI-pXf?>ME!@A3(S909H13KXWq>Q@0|N$u%e;>v9B{4HQYiZ{oc zlGGwd)d@*4AU|Y+%Rf*cyCx=Qpr&$I8ZTDJEGbsVFV9m*EGQ_-FDS|c4FV*kW+awn zf@%r{hdfYOtN^J)K>0%fI;*ablAj7LMl&+=(siIY4pdl!8c9%J!y7{2Y*v(7P?TDn znpaW`DtR;W$`W(HJ!{Y|V7PnrKvg6-Fd6>}GHU%5WV8Th2rrJU^%e#*(qSQmBR~sE zlhDIdAwIsi09(K+#K%LzSIAC;@h?9k&tHB<1#lJ0$H?X(~8ZVa72ilAIHBa*7pT2?y#6cryxIoEXb~&k#JylmCC!_P<8? z1(pZlVe}uC@Q~7?;TD0`6_2?8LsA5|^MRubNlyjUR^aV|ptK4a*1@c&z@*u1FE4i^N^dAItu7TK<{%gA*VN0b^njNcizY!VN}BSH;+;4ZyuxB|Ln*A+Y_Hz zoJ0!tgJ%{V|Ne8~d4j>7nHLXkL2GC-h&c%`{#9Y*`K!Vx15Sa;j68oe82R9>cOyOH zScUXdNb4QZM(_dcn$AmCNCd5V293f&8t)LRiK*1V4gfXbK~-ZKxT%$x0?&+~suHdO zk;g${hOIfl1y>7B=AhyqR52!{rh%$akS=J<=av?iC?usS6s3YV8UND#*F_eADOFKS1bL33R2%pbw-=N z>WqH>FL0lE=JNK$CZr?-b0u`V4cwzkttco`NGvVMhm>@%(G6W_s}eMc4__f>6YmLK zYwZIbovP4*wD%Qos0sqBs?=1_wF3{pf(Di~;^QmyAe~zUU4{7gN+?H@LB~u8R46lm z#!*477iidm#vA_&Zd)nyXYs!v4421y<`>8N7o>u#FjOzpXrM~Q$0zD2pbI4-#ta$k zJdhp0@|T4%;x7whlnUct0mg{G0$^4$Q^wz9rYsf4zxhlVfAc}C|91`k>(2lFTLr^$ z-~noISqKYO8)&c=rGl!rR4gG24l;Pa5>Qu(9%`(A-5K5fx-)u!LhWxXqubwDD7&7~ z=WjiuA6R?_qsQMFj9y^&W=6Nan;~l82^Lg%K?h2}uE%Ikq^3hU!{8JI858)x$n*CD zw8VZ7W(R>|6I{nK|5alI=LxWt?u=o7-5C?W>{!OIzp)VZ|64Z>dHgJnItHtoz#I2L z6$N%jl!BJ0r{#dVzDj;VjDNQ?@%-J+BnNJ~Y-8g2yMxICQMJ0ImLzAS7DJla;65e1 zTu#o>N)0ADkPCVq^?9LXqk@7byi1gvSey!Saw?Ysc#H#4;DV9{qOB;6x0;Fi&E1{!2LGZu#}0Oajd?%uAvFYMn`x=fC3K^ z@Q}JJsWeR?IWZ4ZX(Sh=f{yV(>wSR+q`1%`QzI`QHdq1bg(#GRnh8m%3ZNlRQ22vA zn5U3hkqGM7f!)ugkWo@nP;8~IpPrnom!4OumtT~wpATManUbGete=ya1lnDrt*xJ% zm{*#ZqYrmqv0g?=ZVne0$xUWR*A$c~!FiJDZvvyz-vmYzP`mfc?qA)QkXXfj{)2AN9$sk{W#`eKO8~J&tSw@eGi_{Ju zsCdc9EJo_L{m}XW8N`6KbYSrfaSFbU2%?e4pcW*=_;(@`&)e;8HvfR6>F_^JbQ%DuC*pVo>4i zkgR}Ig+fX#&~PQhD2zcZh0?r|%p8Tp5-#vcYXxv$8>>Iy1854xr3D2!nW-sy3JRWS z3J%F!#fXrH)*i(Qx`t3k!dwQj8rfy}MIf!Ekg6Wy&a}kL96fM7tAJ9%8_c6kia3M3>|v z!WT4z2=+iM#Qh+>h;Rm%%nC`RC9r`EaM+e)q*g*yLse$x=BB2A22OG+A$}*))w%ga z1sSQisl}iw6}gWCnqq-j>5!z5TCAIqU#<)4{^%B`rs{xO6b?xWphyFWW+p?dg;ybr zf1#ZXaJ9km;xA9p<*aUuY6EvO7_=YJCO*UvR1h1XwtO+AsNC4~*yR~{tZLVCsB>{U z5?*~|=B1<0jG(Mc0I$RVH;ECm4}|o9)>^>VV=zc4A@@KiYs@QWZu44_HtQ7J`MBn% zaa4WaAujaV4>UT0F|z=g-Tuz=T@Ey&@Qvq30KDilBChg7o*hIQ8HUUa!}{isS_R&4 zD~3!M!Ul6ey(!R{JNLBzTge*El7_OsG zkXQ^FkOmjliACw9pwakZ1&z!!g~Yr{O)k)6H6&MpT9BZk0Wx=_P@0#V0cwS&fCthJ zJuI{Sd-UXq|0Onmo~~IU#KQ=xwBQXCq^`Nj!80o*xADCICm(R199x2f$7N<-I(Y3e zdU~`|h>x#8T@Hj(9nx|c200DtB|KiabBjMVJY9unh90t70koP6G`h~fWyZz$SCfh7 zuO@U-Sp&=tL-gK!^UGiX4VoWHg%2HpI%=S%OfG2VJrB}ZOG(WsNd&dq%QG?|kq;W5 z05$wWK%KBG(5O&iN?BrFaw@2Nht23iD$e{o@Kj%ZX$iD~0@<6GR|%en1g}WoU8z~P za@|gL$V@up-))Ryf44CzfSaDqnJ2|wWof`xG+~QFa128x1VKANQXrijHSh{7*mw$f zx)4>Cb_K=1sM3ddTU?+$3`DaD`+7Wh62w`YASFM1YQT&4G#SJcv_SOGHgGDBxRm>7BfvNC2NGB}YlANgr%3JU(L$($wu*$tbF)MH>^{y!sH;OsZSSKt4qU610jbaaybUtPK(WZU;&42*wS8MXeh zGFtrKv!j*qXXFZ5q@un{X8ne%b9a3KjfUnW=B6sdgH~C`Cs$N}*1)FbfriQBGt+E9 z@g5KAt3nHTBRh~hv{esE9$-Gm6v((Iv`7ObJW$GrcgX~`WRp`h8Kx}&Ef!>eilVuiq}A_j*4Y;5l)FBcAHg5+yx%7WPlYL|gmoPru>;G_*3$h3oHF?>3ZN&-YX z$OvI5QtL^R!NpGmk!m*xY)}9>a=pMtP(c8j{vf)C2bmH=?zdxYxq#P1z?XVqSqTBn zap0v8NHa*tv(KO*AC%-p#9|0g<03r|qzlrBfYe)9J5vy)pt%b!1-DGl)E&l@Gi*u< zx*h`m{1X>^m=d}|0#s3gIt8FLeV|zn97`nPagt69HKtv5<-9??UMMhy`GF1Ot4|4cwU6SyY@T8Z^q?zIJo{$FQc_SI>s zz&`?`+{Ms%VGy$8Vf^dD$n)2QQ3BM`{_D)h^VgpdX{n++(o#jxSPx>n8Y88F7OsJc z7VuCmcswCBKMfo)knst~fCFe|4c^iMb$Q{V8_1J%iAV$ET;P$d%)I0x@HiKwc?C5F z)Ojw_Q2+-McnS{EPewGQi@Cr(e@H(c+|*J(89n3OPN_&C*tEufSSJ%aeFmNDfKR}n z2(FoVanXe3ipeN~hc2H8*cs*?jUxCYl1ZcQ!6qjZ!GP(T6vG{(tWgA~EvnW&SopXV zMG)3>M-jAt^H6JMwzV;eAgpzWA_(h;q6h|@sMs>^-P>s>g8O*eGsK>6<%bGd{B>t^ zK%Gy7&aA*Ea=&2+>|Nh@QtY_2r27*=kGAjM`Wz_la|9!>G z&0kj^gjZUOe@z*4{+cpYfE&4cw;f$?RI-E(H3Ohz5m+?=TO^G$m&m{-{n$W-KjU4w zyO4%7Y?>65NWo*ZxJGEvW}-M4|Gs79`TLd;vYht~m>mK#8`50o{;S3ao`?nc^R1-zj2IlV0JxY%-?#(6fnDy(c^C;V*r@l#u)XtjWG$# zp1~OLcLroe>+fvFsK2wJ;-{IS{+?z6tNG7!Q7I;I@ws?tuz-UOQUOE8E|W^rtgH%3 zlQMIYN>iazhETPjjzWI2CIg?90OL)bo8W2u8$9=sr|=D96(EX>5#!28{c6xuivq-C zP2@#w8CTL`=peVI0GrzPLF3Sa3Oakiv!g|yYgX2M7(**Z{J2PdP zC%*oh`(NSjqJ`D>Y&Nsr*0^o*|0HK@bLZ%`>Rfe-Y~ufr9x1; z_zz2WAT6Nc^gpb02Cbn4&uK9HKR7dYL-n7MT?Eq&WQjCn{+dC|iG%U43=_{^8R#-_ zX)qgU29xRUW=4y@o1tl9E2G5Utl&%1fTtc8Er~5BNkv1;`?9^g1LNyver&nifDq z){y0K&{_nZdUNuVH5D=vi@{4O!K2Th3BwZ5dP-2b$ptNcFG@{L%_{+w{yF){T%ei; z(k=pz93$3jfYhhwNOVA!gVSOOlaDap)D#t8hV;FlOpu z1f@ez9{#`d&^Om(i=Dm_s+&QzY_f(Xq;581_~- zd(lyV_U=L57^J?|R)MYHzSb6jZ5a#<@IWGztkP3UAgPLr@oy9(&)+EMx{63fp1(=d zPF0?u*qYx&D(kO%pqBII&f+&qbm>^1{5GIJyD1-^3Gzy{Z7SyI5bcqdW zqY&DvK~)J|5CC6@1FCt!nVAum&%veRg+mv9URcIB1Du~A*$%1Mf+m1j(Sfr$Vul3Q z;G3Ez0|RK!i3>BwUl(RIaF@r4ndPqwa~QZe$H~gT_*a*i=dUia7HFsd%8p`S_-}U8 z#A}+*!CCMDIW#wc+g8Pud7wm>>4`4-9p6r8VT&NdtkIUoOS`1&1heN&+v|XBdQz)>M1WR`CH8-0%|_~tpc-65N)~O$~^G>Q=s#7K*cVs37J?_lvoMf-UKdd zF&D#uw>Lr>WC{wph6?$43ZVJ-(xOyQTaVm@DLSClVaS`gz?g{^_z+jfcAR28Jw0&hgb(UN6@;QIDAlCu zlp1Ul8I~RhjNXF=y^)9Rk;mpiaw(Zb$U?B;dgu<2BqpA}Nzff2iA+3yQ-=Qz5a?(< zIDG`oHQOI!A#nvXuuk^yJhVBepoKO@51ms3mwbsvprLx`91&cDCc}bNGN7c(`2Uzi zebnk{_7$K7(Twv1=IMZ{xj6#!6Bro&!Wq7)Krpe^1Y4^Vae1gv32(A@|(AcZc`o}s$CVIz8=86sQ*0H85t zP~uZSOuzqP8I}1vi&5R%nJ&$}&z~EY64&F2es?Li+6O1LGy>p-i(x^-RbYP?P3TcUuZH>^A zkWxSkWAPSTgbu`_c732}1Z6xN+IWDDii0Z$Ax~YoMa)9YcrsUUYDqfk z#A7<<=@aRokt4|LJ#=(C9(1=9>_iGyCZ4~n(4j~cCZ4}s$SDo;L<(>Y0?k80w$y?S z?ML1g2(llv9}c=(9wpO)9fDI5bV>o*Nfw~tI#A;*J|1i=^uURv#N=$ysTAP3Nr;&c z8OZQFc%TZl(h#Z}WHv+%bTRC;wlDr4X%qUmNnqjk|E64*q!#Ia%7SEg zhX2vq)6SVs{un|aIQ-|vVWvznJ;ta5MT;uC-)u@{U zxwwKeb2D=ii$I1Hm*zpniF80KMvZlnVy=Wke>%VVguqPuFSmRlGMZ$h5R)5 za#r|wKHNUY0#60cG}wyaw9*_M_~LOyE>{4L&%h3K02MUI{)enuO-fa8NaTu-2OX)! z{J*Aeg<+xf?STKc@7=jjF}Y*q|8w_VSKM82Zh_KY=-wpMaU7T+Yn3q6osegD8Tqjsc1w$~X?pB3R=KMJ38O4ooG=I1Wq@)*?dD4r^{e1#SM; zGrIk++GBP+J6iD%R1iG*gj#OF%tV=cA~qUBXPEFD69n6m3|aL{%VUCI{(!b{ zAVVcMj|qa7deDs-T)GO7`VKY)1J(_y>R}Z#cj7;5 zyEF0p^<)x)N2p0G{7eB@v#yv6u{Q(ToU}7|rF1c9+hAUC4*0B-V&tk5JR$7}ZeBv> zGeNOmln7S~-r%T^QVO~+Ucpn}Ujee-HzgIc%Mdh51qx{BG$j|r1kjELP%W014mphs zJP!tH=|WHV0IisV@BPpL@2_!6Eh$e;%~JqfV3!PWB&ZGr>xB7KAyEN*)RY2r7Mu&b zw-i$G!nPEGj%mxOR7g%t&PauxGz8v|0kR#m9|s!ZTre|1r&oX*;*iDZV6~7Nxj?gc z`AH>-nR%%xkP4gFT`%DIlWn)1YY@dQ`G0KN;pyF}> zT_FTnCIQYTMTwc9gGN9DmdVh}51vAW79-$>FQ_vFS#AJp0w)%M&YenC0Qb%kAsZb~ z`(|Y9kOTV&9K(~iXUhBBJi!BrVWz*(N(~gtf9EkO{hbHd^!dMmSM`d^rt4`0VjAAk zWDv6BWBfank>~GJ=w!(hMxMV5kY^;JBL$$e0qV3BgVqHg#bgQS5Ef7eqzGwqHD)su zz1a(DkS2mol>?cJYegDrj!a2~twDoyQXxqRR+=I$I)n6aLG>GCiV=A-oC~~O0g@9T zE-nV0BbS^FPWPa_y`W_=kaZ8Brgup`s2vV&m_uv@Z?%M*4U$aHF9Dry1)5rCK498e z%P@6@&|m0=eAEUoOc13N2NQ%fF~BWDm>^067$%6)0EP*oG=O1(C=FnkAW8!mCWz7i zh6$oHfMJ3t4PclcN&^@sh|&OtR$!W23>cBsuG&=QJQw(x|895 ziPR*cQ=d){%m@XgC0II?T#SD=F!KD}0B!25XXN?22c<)43hq#X>YhYIj}m=F7LjLQ zAr53q26fvJX{#h3dZZOnAqVb`C!^;k|2!hj!tw+i8i2aj29(0#>jB^m66iTvup(AL zBU3L`57K9Z?%B!&pWmdAR+^Ke3EHWUUz7?x)h!uPJS2inQG|^4fQG~285dM=z}5vo zN>W%R1nmX}FHE7Z*%B$nBs_mvHwZRg`Sjwnn_`TD47%{h>}TRf+(33CWw+rVS*@` z6eft0NnwI0nG`07l1X8LD47%{h>}TRf+(33CWw+rp)2CxYwo~h5p-$Jf7t3Dupo53 z9I8s_zN!DP{bFF1yBL-J?qW3hKeegA<>eAfHc&dl?dli33?*zKI3S6m9(Eeqbz4Q|PS5+WoqTSL+nxWR_B}3OZy2*1AxD9w(a&Uf7+NUjjZzT~m{bOM#>lNuW6!;&Je* zJWv)U<1`X3(0Lj}okju;hZG&~JOCG>O$MoB;mt8ngkV3mMI)rLAQRN42A{c-3Y+H6 zECxqhNopRblmrDU$Ou@W#RWQTE-A4jGgnU&>p3V$vE`7c03K!oje~O`8wxIFAtf%X zv~fsQ07oNeo*aA%2&mM=cFYOV*)ZVqK@<`dNIl=gG*;hO*BoRM>hUJfSVZlNfHq@L z>3kCkP9kCaKW*YOnR{E5uRvO=jDMloAJkIS|8M+Rt;P6QN_{-!)O%207lx%k4936C z%uauunFClD|J#0GQTc9miUBei2a<(hxKg9P&dhc!jQ?*O{dh}Zz1R$x0tEfPWhT$b zsH6|)Ae}kzKnLs)J%#F81|Bg1m||8CgYPdhqtjnz#vm5PzbuSwe_0sCz%0AJER23& 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 eQaA&AS`pbeqK)TZHu%fI3>goB%;c81k6_ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string new file mode 100644 index 0000000..7186471 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string @@ -0,0 +1,130 @@ +// Components for manipulating sequences of characters -*- C++ -*- + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/string + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 21 Strings library +// + +#ifndef _GLIBCXX_STRING +#define _GLIBCXX_STRING 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // containers + +#include +#include +#include +#include +#include +#include // For operators >>, <<, and getline. +#include +#include +#include +#include // For less +#include +#include +#include +#include +#include +#include + +#define __glibcxx_want_algorithm_default_value_type +#define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_constexpr_char_traits +#define __glibcxx_want_constexpr_string +#define __glibcxx_want_containers_ranges +#define __glibcxx_want_erase_if +#define __glibcxx_want_nonmember_container_access +#define __glibcxx_want_string_resize_and_overwrite +#define __glibcxx_want_string_udls +#define __glibcxx_want_to_string +#include + +#if __cplusplus >= 201703L && _GLIBCXX_USE_CXX11_ABI +#include +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + namespace pmr { + template> + using basic_string = std::basic_string<_CharT, _Traits, + polymorphic_allocator<_CharT>>; + using string = basic_string; +#ifdef _GLIBCXX_USE_CHAR8_T + using u8string = basic_string; +#endif + using u16string = basic_string; + using u32string = basic_string; + using wstring = basic_string; + } // namespace pmr +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // C++17 + +#ifdef __cpp_lib_erase_if // C++ >= 20 && HOSTED +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + _GLIBCXX20_CONSTEXPR + inline typename basic_string<_CharT, _Traits, _Alloc>::size_type + erase_if(basic_string<_CharT, _Traits, _Alloc>& __cont, _Predicate __pred) + { + using namespace __gnu_cxx; + const auto __osz = __cont.size(); + const auto __end = __cont.end(); + auto __removed = std::__remove_if(__cont.begin(), __end, + __ops::__pred_iter(std::ref(__pred))); + __cont.erase(__removed, __end); + return __osz - __cont.size(); + } + + template + _GLIBCXX20_CONSTEXPR + inline typename basic_string<_CharT, _Traits, _Alloc>::size_type + erase(basic_string<_CharT, _Traits, _Alloc>& __cont, const _Up& __value) + { + using namespace __gnu_cxx; + const auto __osz = __cont.size(); + const auto __end = __cont.end(); + auto __removed = std::__remove_if(__cont.begin(), __end, + __ops::__iter_equals_val(__value)); + __cont.erase(__removed, __end); + return __osz - __cont.size(); + } +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // __cpp_lib_erase_if + +#endif /* _GLIBCXX_STRING */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string.blob new file mode 100644 index 0000000000000000000000000000000000000000..09628a5790df8549b2375caf410c305fa43ad8e3 GIT binary patch literal 15267 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

    >h||L_|&mqtWtk}fi@}s{mts~_c!>|u|KRq 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@type_traits b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@type_traits new file mode 100644 index 0000000..5340941 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@type_traits @@ -0,0 +1,4190 @@ +// C++11 -*- C++ -*- + +// Copyright (C) 2007-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/type_traits + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_TYPE_TRAITS +#define _GLIBCXX_TYPE_TRAITS 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus < 201103L +# include +#else + +#include + +#define __glibcxx_want_bool_constant +#define __glibcxx_want_bounded_array_traits +#define __glibcxx_want_common_reference +#define __glibcxx_want_has_unique_object_representations +#define __glibcxx_want_integral_constant_callable +#define __glibcxx_want_is_aggregate +#define __glibcxx_want_is_constant_evaluated +#define __glibcxx_want_is_final +#define __glibcxx_want_is_invocable +#define __glibcxx_want_is_layout_compatible +#define __glibcxx_want_is_nothrow_convertible +#define __glibcxx_want_is_null_pointer +#define __glibcxx_want_is_pointer_interconvertible +#define __glibcxx_want_is_scoped_enum +#define __glibcxx_want_is_swappable +#define __glibcxx_want_is_virtual_base_of +#define __glibcxx_want_logical_traits +#define __glibcxx_want_reference_from_temporary +#define __glibcxx_want_remove_cvref +#define __glibcxx_want_result_of_sfinae +#define __glibcxx_want_transformation_trait_aliases +#define __glibcxx_want_type_identity +#define __glibcxx_want_type_trait_variable_templates +#define __glibcxx_want_unwrap_ref +#define __glibcxx_want_void_t +#include + +extern "C++" +{ +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + class reference_wrapper; + + /** + * @defgroup metaprogramming Metaprogramming + * @ingroup utilities + * + * Template utilities for compile-time introspection and modification, + * including type classification traits, type property inspection traits + * and type transformation traits. + * + * @since C++11 + * + * @{ + */ + + /// integral_constant + template + struct integral_constant + { + static constexpr _Tp value = __v; + using value_type = _Tp; + using type = integral_constant<_Tp, __v>; + constexpr operator value_type() const noexcept { return value; } + +#ifdef __cpp_lib_integral_constant_callable // C++ >= 14 + constexpr value_type operator()() const noexcept { return value; } +#endif + }; + +#if ! __cpp_inline_variables + template + constexpr _Tp integral_constant<_Tp, __v>::value; +#endif + + /// @cond undocumented + /// bool_constant for C++11 + template + using __bool_constant = integral_constant; + /// @endcond + + /// The type used as a compile-time boolean with true value. + using true_type = __bool_constant; + + /// The type used as a compile-time boolean with false value. + using false_type = __bool_constant; + +#ifdef __cpp_lib_bool_constant // C++ >= 17 + /// Alias template for compile-time boolean constant types. + /// @since C++17 + template + using bool_constant = __bool_constant<__v>; +#endif + + // Metaprogramming helper types. + + // Primary template. + /// Define a member typedef `type` only if a boolean constant is true. + template + struct enable_if + { }; + + // Partial specialization for true. + template + struct enable_if + { using type = _Tp; }; + + // __enable_if_t (std::enable_if_t for C++11) + template + using __enable_if_t = typename enable_if<_Cond, _Tp>::type; + + template + struct __conditional + { + template + using type = _Tp; + }; + + template<> + struct __conditional + { + template + using type = _Up; + }; + + // More efficient version of std::conditional_t for internal use (and C++11) + template + using __conditional_t + = typename __conditional<_Cond>::template type<_If, _Else>; + + /// @cond undocumented + template + struct __type_identity + { using type = _Type; }; + + template + using __type_identity_t = typename __type_identity<_Tp>::type; + + namespace __detail + { + // A variadic alias template that resolves to its first argument. + template + using __first_t = _Tp; + + // These are deliberately not defined. + template + auto __or_fn(int) -> __first_t...>; + + template + auto __or_fn(...) -> true_type; + + template + auto __and_fn(int) -> __first_t...>; + + template + auto __and_fn(...) -> false_type; + } // namespace detail + + // Like C++17 std::dis/conjunction, but usable in C++11 and resolves + // to either true_type or false_type which allows for a more efficient + // implementation that avoids recursive class template instantiation. + template + struct __or_ + : decltype(__detail::__or_fn<_Bn...>(0)) + { }; + + template + struct __and_ + : decltype(__detail::__and_fn<_Bn...>(0)) + { }; + + template + struct __not_ + : __bool_constant + { }; + /// @endcond + +#ifdef __cpp_lib_logical_traits // C++ >= 17 + + /// @cond undocumented + template + inline constexpr bool __or_v = __or_<_Bn...>::value; + template + inline constexpr bool __and_v = __and_<_Bn...>::value; + + namespace __detail + { + template + struct __disjunction_impl + { using type = _B1; }; + + template + struct __disjunction_impl<__enable_if_t, _B1, _B2, _Bn...> + { using type = typename __disjunction_impl::type; }; + + template + struct __conjunction_impl + { using type = _B1; }; + + template + struct __conjunction_impl<__enable_if_t, _B1, _B2, _Bn...> + { using type = typename __conjunction_impl::type; }; + } // namespace __detail + /// @endcond + + template + struct conjunction + : __detail::__conjunction_impl::type + { }; + + template<> + struct conjunction<> + : true_type + { }; + + template + struct disjunction + : __detail::__disjunction_impl::type + { }; + + template<> + struct disjunction<> + : false_type + { }; + + template + struct negation + : __not_<_Pp>::type + { }; + + /** @ingroup variable_templates + * @{ + */ + template + inline constexpr bool conjunction_v = conjunction<_Bn...>::value; + + template + inline constexpr bool disjunction_v = disjunction<_Bn...>::value; + + template + inline constexpr bool negation_v = negation<_Pp>::value; + /// @} + +#endif // __cpp_lib_logical_traits + + // Forward declarations + template + struct is_reference; + template + struct is_function; + template + struct is_void; + template + struct remove_cv; + template + struct is_const; + + /// @cond undocumented + template + struct __is_array_unknown_bounds; + + // Helper functions that return false_type for incomplete classes, + // incomplete unions and arrays of known bound from those. + + template + constexpr true_type __is_complete_or_unbounded(__type_identity<_Tp>) + { return {}; } + + template + constexpr typename __or_< + is_reference<_NestedType>, + is_function<_NestedType>, + is_void<_NestedType>, + __is_array_unknown_bounds<_NestedType> + >::type __is_complete_or_unbounded(_TypeIdentity) + { return {}; } + + // __remove_cv_t (std::remove_cv_t for C++11). + template + using __remove_cv_t = typename remove_cv<_Tp>::type; + /// @endcond + + // Primary type categories. + + /// is_void + template + struct is_void + : public false_type { }; + + template<> + struct is_void + : public true_type { }; + + template<> + struct is_void + : public true_type { }; + + template<> + struct is_void + : public true_type { }; + + template<> + struct is_void + : public true_type { }; + + /// @cond undocumented + template + struct __is_integral_helper + : public false_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + // We want is_integral to be true (and make_signed/unsigned to work) + // even when libc doesn't provide working and related functions, + // so don't check _GLIBCXX_USE_WCHAR_T here. + template<> + struct __is_integral_helper + : public true_type { }; + +#ifdef _GLIBCXX_USE_CHAR8_T + template<> + struct __is_integral_helper + : public true_type { }; +#endif + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; + + // Conditionalizing on __STRICT_ANSI__ here will break any port that + // uses one of these types for size_t. +#if defined(__GLIBCXX_TYPE_INT_N_0) + __extension__ + template<> + struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_0> + : public true_type { }; + + __extension__ + template<> + struct __is_integral_helper + : public true_type { }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + __extension__ + template<> + struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_1> + : public true_type { }; + + __extension__ + template<> + struct __is_integral_helper + : public true_type { }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + __extension__ + template<> + struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_2> + : public true_type { }; + + __extension__ + template<> + struct __is_integral_helper + : public true_type { }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + __extension__ + template<> + struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_3> + : public true_type { }; + + __extension__ + template<> + struct __is_integral_helper + : public true_type { }; +#endif + /// @endcond + + /// is_integral + template + struct is_integral + : public __is_integral_helper<__remove_cv_t<_Tp>>::type + { }; + + /// @cond undocumented + template + struct __is_floating_point_helper + : public false_type { }; + + template<> + struct __is_floating_point_helper + : public true_type { }; + + template<> + struct __is_floating_point_helper + : public true_type { }; + + template<> + struct __is_floating_point_helper + : public true_type { }; + +#ifdef __STDCPP_FLOAT16_T__ + template<> + struct __is_floating_point_helper<_Float16> + : public true_type { }; +#endif + +#ifdef __STDCPP_FLOAT32_T__ + template<> + struct __is_floating_point_helper<_Float32> + : public true_type { }; +#endif + +#ifdef __STDCPP_FLOAT64_T__ + template<> + struct __is_floating_point_helper<_Float64> + : public true_type { }; +#endif + +#ifdef __STDCPP_FLOAT128_T__ + template<> + struct __is_floating_point_helper<_Float128> + : public true_type { }; +#endif + +#ifdef __STDCPP_BFLOAT16_T__ + template<> + struct __is_floating_point_helper<__gnu_cxx::__bfloat16_t> + : public true_type { }; +#endif + +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) + template<> + struct __is_floating_point_helper<__float128> + : public true_type { }; +#endif + /// @endcond + + /// is_floating_point + template + struct is_floating_point + : public __is_floating_point_helper<__remove_cv_t<_Tp>>::type + { }; + + /// is_array +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_array) + template + struct is_array + : public __bool_constant<__is_array(_Tp)> + { }; +#else + template + struct is_array + : public false_type { }; + + template + struct is_array<_Tp[_Size]> + : public true_type { }; + + template + struct is_array<_Tp[]> + : public true_type { }; +#endif + + /// is_pointer +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer) + template + struct is_pointer + : public __bool_constant<__is_pointer(_Tp)> + { }; +#else + template + struct is_pointer + : public false_type { }; + + template + struct is_pointer<_Tp*> + : public true_type { }; + + template + struct is_pointer<_Tp* const> + : public true_type { }; + + template + struct is_pointer<_Tp* volatile> + : public true_type { }; + + template + struct is_pointer<_Tp* const volatile> + : public true_type { }; +#endif + + /// is_lvalue_reference + template + struct is_lvalue_reference + : public false_type { }; + + template + struct is_lvalue_reference<_Tp&> + : public true_type { }; + + /// is_rvalue_reference + template + struct is_rvalue_reference + : public false_type { }; + + template + struct is_rvalue_reference<_Tp&&> + : public true_type { }; + + /// is_member_object_pointer +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_object_pointer) + template + struct is_member_object_pointer + : public __bool_constant<__is_member_object_pointer(_Tp)> + { }; +#else + template + struct __is_member_object_pointer_helper + : public false_type { }; + + template + struct __is_member_object_pointer_helper<_Tp _Cp::*> + : public __not_>::type { }; + + + template + struct is_member_object_pointer + : public __is_member_object_pointer_helper<__remove_cv_t<_Tp>>::type + { }; +#endif + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_function_pointer) + /// is_member_function_pointer + template + struct is_member_function_pointer + : public __bool_constant<__is_member_function_pointer(_Tp)> + { }; +#else + template + struct __is_member_function_pointer_helper + : public false_type { }; + + template + struct __is_member_function_pointer_helper<_Tp _Cp::*> + : public is_function<_Tp>::type { }; + + /// is_member_function_pointer + template + struct is_member_function_pointer + : public __is_member_function_pointer_helper<__remove_cv_t<_Tp>>::type + { }; +#endif + + /// is_enum + template + struct is_enum + : public __bool_constant<__is_enum(_Tp)> + { }; + + /// is_union + template + struct is_union + : public __bool_constant<__is_union(_Tp)> + { }; + + /// is_class + template + struct is_class + : public __bool_constant<__is_class(_Tp)> + { }; + + /// is_function +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_function) + template + struct is_function + : public __bool_constant<__is_function(_Tp)> + { }; +#else + template + struct is_function + : public __bool_constant::value> { }; + + template + struct is_function<_Tp&> + : public false_type { }; + + template + struct is_function<_Tp&&> + : public false_type { }; +#endif + +#ifdef __cpp_lib_is_null_pointer // C++ >= 11 + /// is_null_pointer (LWG 2247). + template + struct is_null_pointer + : public false_type { }; + + template<> + struct is_null_pointer + : public true_type { }; + + template<> + struct is_null_pointer + : public true_type { }; + + template<> + struct is_null_pointer + : public true_type { }; + + template<> + struct is_null_pointer + : public true_type { }; + + /// __is_nullptr_t (deprecated extension). + /// @deprecated Non-standard. Use `is_null_pointer` instead. + template + struct __is_nullptr_t + : public is_null_pointer<_Tp> + { } _GLIBCXX_DEPRECATED_SUGGEST("std::is_null_pointer"); +#endif // __cpp_lib_is_null_pointer + + // Composite type categories. + + /// is_reference +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_reference) + template + struct is_reference + : public __bool_constant<__is_reference(_Tp)> + { }; +#else + template + struct is_reference + : public false_type + { }; + + template + struct is_reference<_Tp&> + : public true_type + { }; + + template + struct is_reference<_Tp&&> + : public true_type + { }; +#endif + + /// is_arithmetic + template + struct is_arithmetic + : public __or_, is_floating_point<_Tp>>::type + { }; + + /// is_fundamental + template + struct is_fundamental + : public __or_, is_void<_Tp>, + is_null_pointer<_Tp>>::type + { }; + + /// is_object +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_object) + template + struct is_object + : public __bool_constant<__is_object(_Tp)> + { }; +#else + template + struct is_object + : public __not_<__or_, is_reference<_Tp>, + is_void<_Tp>>>::type + { }; +#endif + + template + struct is_member_pointer; + + /// is_scalar + template + struct is_scalar + : public __or_, is_enum<_Tp>, is_pointer<_Tp>, + is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type + { }; + + /// is_compound + template + struct is_compound + : public __bool_constant::value> { }; + + /// is_member_pointer +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_pointer) + template + struct is_member_pointer + : public __bool_constant<__is_member_pointer(_Tp)> + { }; +#else + /// @cond undocumented + template + struct __is_member_pointer_helper + : public false_type { }; + + template + struct __is_member_pointer_helper<_Tp _Cp::*> + : public true_type { }; + /// @endcond + + template + struct is_member_pointer + : public __is_member_pointer_helper<__remove_cv_t<_Tp>>::type + { }; +#endif + + template + struct is_same; + + /// @cond undocumented + template + using __is_one_of = __or_...>; + + // Check if a type is one of the signed integer types. + __extension__ + template + using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>, + signed char, signed short, signed int, signed long, + signed long long +#if defined(__GLIBCXX_TYPE_INT_N_0) + , signed __GLIBCXX_TYPE_INT_N_0 +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + , signed __GLIBCXX_TYPE_INT_N_1 +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + , signed __GLIBCXX_TYPE_INT_N_2 +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + , signed __GLIBCXX_TYPE_INT_N_3 +#endif + >; + + // Check if a type is one of the unsigned integer types. + __extension__ + template + using __is_unsigned_integer = __is_one_of<__remove_cv_t<_Tp>, + unsigned char, unsigned short, unsigned int, unsigned long, + unsigned long long +#if defined(__GLIBCXX_TYPE_INT_N_0) + , unsigned __GLIBCXX_TYPE_INT_N_0 +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + , unsigned __GLIBCXX_TYPE_INT_N_1 +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + , unsigned __GLIBCXX_TYPE_INT_N_2 +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + , unsigned __GLIBCXX_TYPE_INT_N_3 +#endif + >; + + // Check if a type is one of the signed or unsigned integer types. + template + using __is_standard_integer + = __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>; + + // __void_t (std::void_t for C++11) + template using __void_t = void; + /// @endcond + + // Type properties. + + /// is_const +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_const) + template + struct is_const + : public __bool_constant<__is_const(_Tp)> + { }; +#else + template + struct is_const + : public false_type { }; + + template + struct is_const<_Tp const> + : public true_type { }; +#endif + + /// is_volatile +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_volatile) + template + struct is_volatile + : public __bool_constant<__is_volatile(_Tp)> + { }; +#else + template + struct is_volatile + : public false_type { }; + + template + struct is_volatile<_Tp volatile> + : public true_type { }; +#endif + + /** is_trivial + * @deprecated Deprecated in C++26. + * Use a combination of one or more more specialized type traits instead, + * such as `is_trivially_default_constructible`, + * `is_trivially_copy_constructible`, `is_trivially_copy_assignable`, + * etc., depending on the exact check(s) needed. + */ + template + struct + _GLIBCXX26_DEPRECATED_SUGGEST("is_trivially_default_constructible && is_trivially_copyable") + is_trivial + : public __bool_constant<__is_trivial(_Tp)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_trivially_copyable + template + struct is_trivially_copyable + : public __bool_constant<__is_trivially_copyable(_Tp)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_standard_layout + template + struct is_standard_layout + : public __bool_constant<__is_standard_layout(_Tp)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /** is_pod + * @deprecated Deprecated in C++20. + * Use `is_standard_layout && is_trivial` instead. + */ + // Could use is_standard_layout && is_trivial instead of the builtin. + template + struct + _GLIBCXX20_DEPRECATED_SUGGEST("is_standard_layout && is_trivial") + is_pod + : public __bool_constant<__is_pod(_Tp)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /** is_literal_type + * @deprecated Deprecated in C++17, removed in C++20. + * The idea of a literal type isn't useful. + */ + template + struct + _GLIBCXX17_DEPRECATED + is_literal_type + : public __bool_constant<__is_literal_type(_Tp)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_empty + template + struct is_empty + : public __bool_constant<__is_empty(_Tp)> + { }; + + /// is_polymorphic + template + struct is_polymorphic + : public __bool_constant<__is_polymorphic(_Tp)> + { }; + +#ifdef __cpp_lib_is_final // C++ >= 14 + /// is_final + /// @since C++14 + template + struct is_final + : public __bool_constant<__is_final(_Tp)> + { }; +#endif + + /// is_abstract + template + struct is_abstract + : public __bool_constant<__is_abstract(_Tp)> + { }; + + /// @cond undocumented + template::value> + struct __is_signed_helper + : public false_type { }; + + template + struct __is_signed_helper<_Tp, true> + : public __bool_constant<_Tp(-1) < _Tp(0)> + { }; + /// @endcond + + /// is_signed + template + struct is_signed + : public __is_signed_helper<_Tp>::type + { }; + + /// is_unsigned + template + struct is_unsigned + : public __and_, __not_>>::type + { }; + + /// @cond undocumented + template + _Up + __declval(int); + + template + _Tp + __declval(long); + /// @endcond + + template + auto declval() noexcept -> decltype(__declval<_Tp>(0)); + + template + struct remove_all_extents; + + /// @cond undocumented + template + struct __is_array_known_bounds + : public false_type + { }; + + template + struct __is_array_known_bounds<_Tp[_Size]> + : public true_type + { }; + + template + struct __is_array_unknown_bounds + : public false_type + { }; + + template + struct __is_array_unknown_bounds<_Tp[]> + : public true_type + { }; + + // Destructible and constructible type properties. + + // In N3290 is_destructible does not say anything about function + // types and abstract types, see LWG 2049. This implementation + // describes function types as non-destructible and all complete + // object types as destructible, iff the explicit destructor + // call expression is wellformed. + struct __do_is_destructible_impl + { + template().~_Tp())> + static true_type __test(int); + + template + static false_type __test(...); + }; + + template + struct __is_destructible_impl + : public __do_is_destructible_impl + { + using type = decltype(__test<_Tp>(0)); + }; + + template, + __is_array_unknown_bounds<_Tp>, + is_function<_Tp>>::value, + bool = __or_, is_scalar<_Tp>>::value> + struct __is_destructible_safe; + + template + struct __is_destructible_safe<_Tp, false, false> + : public __is_destructible_impl::type>::type + { }; + + template + struct __is_destructible_safe<_Tp, true, false> + : public false_type { }; + + template + struct __is_destructible_safe<_Tp, false, true> + : public true_type { }; + /// @endcond + + /// is_destructible + template + struct is_destructible + : public __is_destructible_safe<_Tp>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @cond undocumented + + // is_nothrow_destructible requires that is_destructible is + // satisfied as well. We realize that by mimicing the + // implementation of is_destructible but refer to noexcept(expr) + // instead of decltype(expr). + struct __do_is_nt_destructible_impl + { + template + static __bool_constant().~_Tp())> + __test(int); + + template + static false_type __test(...); + }; + + template + struct __is_nt_destructible_impl + : public __do_is_nt_destructible_impl + { + using type = decltype(__test<_Tp>(0)); + }; + + template, + __is_array_unknown_bounds<_Tp>, + is_function<_Tp>>::value, + bool = __or_, is_scalar<_Tp>>::value> + struct __is_nt_destructible_safe; + + template + struct __is_nt_destructible_safe<_Tp, false, false> + : public __is_nt_destructible_impl::type>::type + { }; + + template + struct __is_nt_destructible_safe<_Tp, true, false> + : public false_type { }; + + template + struct __is_nt_destructible_safe<_Tp, false, true> + : public true_type { }; + /// @endcond + + /// is_nothrow_destructible + template + struct is_nothrow_destructible + : public __is_nt_destructible_safe<_Tp>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @cond undocumented + template + using __is_constructible_impl + = __bool_constant<__is_constructible(_Tp, _Args...)>; + /// @endcond + + /// is_constructible + template + struct is_constructible + : public __is_constructible_impl<_Tp, _Args...> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_default_constructible + template + struct is_default_constructible + : public __is_constructible_impl<_Tp> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @cond undocumented +#if _GLIBCXX_USE_BUILTIN_TRAIT(__add_lvalue_reference) + template + using __add_lval_ref_t = __add_lvalue_reference(_Tp); +#else + template + struct __add_lvalue_reference_helper + { using type = _Tp; }; + + template + struct __add_lvalue_reference_helper<_Tp, __void_t<_Tp&>> + { using type = _Tp&; }; + + template + using __add_lval_ref_t = typename __add_lvalue_reference_helper<_Tp>::type; +#endif + /// @endcond + + /// is_copy_constructible + template + struct is_copy_constructible + : public __is_constructible_impl<_Tp, __add_lval_ref_t> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @cond undocumented +#if _GLIBCXX_USE_BUILTIN_TRAIT(__add_rvalue_reference) + template + using __add_rval_ref_t = __add_rvalue_reference(_Tp); +#else + template + struct __add_rvalue_reference_helper + { using type = _Tp; }; + + template + struct __add_rvalue_reference_helper<_Tp, __void_t<_Tp&&>> + { using type = _Tp&&; }; + + template + using __add_rval_ref_t = typename __add_rvalue_reference_helper<_Tp>::type; +#endif + /// @endcond + + /// is_move_constructible + template + struct is_move_constructible + : public __is_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @cond undocumented + template + using __is_nothrow_constructible_impl + = __bool_constant<__is_nothrow_constructible(_Tp, _Args...)>; + /// @endcond + + /// is_nothrow_constructible + template + struct is_nothrow_constructible + : public __is_nothrow_constructible_impl<_Tp, _Args...> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_nothrow_default_constructible + template + struct is_nothrow_default_constructible + : public __is_nothrow_constructible_impl<_Tp> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_nothrow_copy_constructible + template + struct is_nothrow_copy_constructible + : public __is_nothrow_constructible_impl<_Tp, __add_lval_ref_t> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_nothrow_move_constructible + template + struct is_nothrow_move_constructible + : public __is_nothrow_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @cond undocumented + template + using __is_assignable_impl = __bool_constant<__is_assignable(_Tp, _Up)>; + /// @endcond + + /// is_assignable + template + struct is_assignable + : public __is_assignable_impl<_Tp, _Up> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_copy_assignable + template + struct is_copy_assignable + : public __is_assignable_impl<__add_lval_ref_t<_Tp>, + __add_lval_ref_t> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_move_assignable + template + struct is_move_assignable + : public __is_assignable_impl<__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @cond undocumented + template + using __is_nothrow_assignable_impl + = __bool_constant<__is_nothrow_assignable(_Tp, _Up)>; + /// @endcond + + /// is_nothrow_assignable + template + struct is_nothrow_assignable + : public __is_nothrow_assignable_impl<_Tp, _Up> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_nothrow_copy_assignable + template + struct is_nothrow_copy_assignable + : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>, + __add_lval_ref_t> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_nothrow_move_assignable + template + struct is_nothrow_move_assignable + : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>, + __add_rval_ref_t<_Tp>> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @cond undocumented + template + using __is_trivially_constructible_impl + = __bool_constant<__is_trivially_constructible(_Tp, _Args...)>; + /// @endcond + + /// is_trivially_constructible + template + struct is_trivially_constructible + : public __is_trivially_constructible_impl<_Tp, _Args...> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_trivially_default_constructible + template + struct is_trivially_default_constructible + : public __is_trivially_constructible_impl<_Tp> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + +#if __cpp_variable_templates && __cpp_concepts + template + constexpr bool __is_implicitly_default_constructible_v + = requires (void(&__f)(_Tp)) { __f({}); }; + + template + struct __is_implicitly_default_constructible + : __bool_constant<__is_implicitly_default_constructible_v<_Tp>> + { }; +#else + struct __do_is_implicitly_default_constructible_impl + { + template + static void __helper(const _Tp&); + + template + static true_type __test(const _Tp&, + decltype(__helper({}))* = 0); + + static false_type __test(...); + }; + + template + struct __is_implicitly_default_constructible_impl + : public __do_is_implicitly_default_constructible_impl + { + using type = decltype(__test(declval<_Tp>())); + }; + + template + struct __is_implicitly_default_constructible_safe + : public __is_implicitly_default_constructible_impl<_Tp>::type + { }; + + template + struct __is_implicitly_default_constructible + : public __and_<__is_constructible_impl<_Tp>, + __is_implicitly_default_constructible_safe<_Tp>>::type + { }; +#endif + + /// is_trivially_copy_constructible + template + struct is_trivially_copy_constructible + : public __is_trivially_constructible_impl<_Tp, __add_lval_ref_t> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_trivially_move_constructible + template + struct is_trivially_move_constructible + : public __is_trivially_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @cond undocumented + template + using __is_trivially_assignable_impl + = __bool_constant<__is_trivially_assignable(_Tp, _Up)>; + /// @endcond + + /// is_trivially_assignable + template + struct is_trivially_assignable + : public __is_trivially_assignable_impl<_Tp, _Up> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_trivially_copy_assignable + template + struct is_trivially_copy_assignable + : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>, + __add_lval_ref_t> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_trivially_move_assignable + template + struct is_trivially_move_assignable + : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>, + __add_rval_ref_t<_Tp>> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_trivially_destructible + template + struct is_trivially_destructible + : public __and_<__is_destructible_safe<_Tp>, + __bool_constant<__has_trivial_destructor(_Tp)>>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + + /// has_virtual_destructor + template + struct has_virtual_destructor + : public __bool_constant<__has_virtual_destructor(_Tp)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + + // type property queries. + + /// alignment_of + template + struct alignment_of + : public integral_constant + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// rank +#if _GLIBCXX_USE_BUILTIN_TRAIT(__array_rank) \ + && (!defined(__clang__) || __clang_major__ >= 20) // PR118559 + template + struct rank + : public integral_constant { }; +#else + template + struct rank + : public integral_constant { }; + + template + struct rank<_Tp[_Size]> + : public integral_constant::value> { }; + + template + struct rank<_Tp[]> + : public integral_constant::value> { }; +#endif + + /// extent + template + struct extent + : public integral_constant { }; + + template + struct extent<_Tp[_Size], 0> + : public integral_constant { }; + + template + struct extent<_Tp[_Size], _Uint> + : public extent<_Tp, _Uint - 1>::type { }; + + template + struct extent<_Tp[], 0> + : public integral_constant { }; + + template + struct extent<_Tp[], _Uint> + : public extent<_Tp, _Uint - 1>::type { }; + + + // Type relations. + + /// is_same +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_same) + template + struct is_same + : public __bool_constant<__is_same(_Tp, _Up)> + { }; +#else + template + struct is_same + : public false_type + { }; + + template + struct is_same<_Tp, _Tp> + : public true_type + { }; +#endif + + /// is_base_of + template + struct is_base_of + : public __bool_constant<__is_base_of(_Base, _Derived)> + { }; + +#ifdef __cpp_lib_is_virtual_base_of // C++ >= 26 + /// is_virtual_base_of + /// @since C++26 + template + struct is_virtual_base_of + : public bool_constant<__builtin_is_virtual_base_of(_Base, _Derived)> + { }; +#endif + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_convertible) + template + struct is_convertible + : public __bool_constant<__is_convertible(_From, _To)> + { }; +#else + template, is_function<_To>, + is_array<_To>>::value> + struct __is_convertible_helper + { + using type = typename is_void<_To>::type; + }; + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wctor-dtor-privacy" + template + class __is_convertible_helper<_From, _To, false> + { + template + static void __test_aux(_To1) noexcept; + + template(std::declval<_From1>()))> + static true_type + __test(int); + + template + static false_type + __test(...); + + public: + using type = decltype(__test<_From, _To>(0)); + }; +#pragma GCC diagnostic pop + + /// is_convertible + template + struct is_convertible + : public __is_convertible_helper<_From, _To>::type + { }; +#endif + + // helper trait for unique_ptr, shared_ptr, and span + template + using __is_array_convertible + = is_convertible<_FromElementType(*)[], _ToElementType(*)[]>; + +#ifdef __cpp_lib_is_nothrow_convertible // C++ >= 20 + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_nothrow_convertible) + /// is_nothrow_convertible_v + template + inline constexpr bool is_nothrow_convertible_v + = __is_nothrow_convertible(_From, _To); + + /// is_nothrow_convertible + template + struct is_nothrow_convertible + : public bool_constant> + { }; +#else + template, is_function<_To>, + is_array<_To>>::value> + struct __is_nt_convertible_helper + : is_void<_To> + { }; + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wctor-dtor-privacy" + template + class __is_nt_convertible_helper<_From, _To, false> + { + template + static void __test_aux(_To1) noexcept; + + template + static + __bool_constant(std::declval<_From1>()))> + __test(int); + + template + static false_type + __test(...); + + public: + using type = decltype(__test<_From, _To>(0)); + }; +#pragma GCC diagnostic pop + + /// is_nothrow_convertible + template + struct is_nothrow_convertible + : public __is_nt_convertible_helper<_From, _To>::type + { }; + + /// is_nothrow_convertible_v + template + inline constexpr bool is_nothrow_convertible_v + = is_nothrow_convertible<_From, _To>::value; +#endif +#endif // __cpp_lib_is_nothrow_convertible + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++14-extensions" // for variable templates + template + struct __is_nothrow_new_constructible_impl + : __bool_constant< + noexcept(::new(std::declval()) _Tp(std::declval<_Args>()...)) + > + { }; + + template + _GLIBCXX17_INLINE constexpr bool __is_nothrow_new_constructible + = __and_, + __is_nothrow_new_constructible_impl<_Tp, _Args...>>::value; +#pragma GCC diagnostic pop + + // Const-volatile modifications. + + /// remove_const + template + struct remove_const + { using type = _Tp; }; + + template + struct remove_const<_Tp const> + { using type = _Tp; }; + + /// remove_volatile + template + struct remove_volatile + { using type = _Tp; }; + + template + struct remove_volatile<_Tp volatile> + { using type = _Tp; }; + + /// remove_cv +#if _GLIBCXX_USE_BUILTIN_TRAIT(__remove_cv) + template + struct remove_cv + { using type = __remove_cv(_Tp); }; +#else + template + struct remove_cv + { using type = _Tp; }; + + template + struct remove_cv + { using type = _Tp; }; + + template + struct remove_cv + { using type = _Tp; }; + + template + struct remove_cv + { using type = _Tp; }; +#endif + + /// add_const + template + struct add_const + { using type = _Tp const; }; + + /// add_volatile + template + struct add_volatile + { using type = _Tp volatile; }; + + /// add_cv + template + struct add_cv + { using type = _Tp const volatile; }; + +#ifdef __cpp_lib_transformation_trait_aliases // C++ >= 14 + /// Alias template for remove_const + template + using remove_const_t = typename remove_const<_Tp>::type; + + /// Alias template for remove_volatile + template + using remove_volatile_t = typename remove_volatile<_Tp>::type; + + /// Alias template for remove_cv + template + using remove_cv_t = typename remove_cv<_Tp>::type; + + /// Alias template for add_const + template + using add_const_t = typename add_const<_Tp>::type; + + /// Alias template for add_volatile + template + using add_volatile_t = typename add_volatile<_Tp>::type; + + /// Alias template for add_cv + template + using add_cv_t = typename add_cv<_Tp>::type; +#endif + + // Reference transformations. + + /// remove_reference +#if _GLIBCXX_USE_BUILTIN_TRAIT(__remove_reference) + template + struct remove_reference + { using type = __remove_reference(_Tp); }; +#else + template + struct remove_reference + { using type = _Tp; }; + + template + struct remove_reference<_Tp&> + { using type = _Tp; }; + + template + struct remove_reference<_Tp&&> + { using type = _Tp; }; +#endif + + /// add_lvalue_reference + template + struct add_lvalue_reference + { using type = __add_lval_ref_t<_Tp>; }; + + /// add_rvalue_reference + template + struct add_rvalue_reference + { using type = __add_rval_ref_t<_Tp>; }; + +#if __cplusplus > 201103L + /// Alias template for remove_reference + template + using remove_reference_t = typename remove_reference<_Tp>::type; + + /// Alias template for add_lvalue_reference + template + using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type; + + /// Alias template for add_rvalue_reference + template + using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type; +#endif + + // Sign modifications. + + /// @cond undocumented + + // Utility for constructing identically cv-qualified types. + template + struct __cv_selector; + + template + struct __cv_selector<_Unqualified, false, false> + { using __type = _Unqualified; }; + + template + struct __cv_selector<_Unqualified, false, true> + { using __type = volatile _Unqualified; }; + + template + struct __cv_selector<_Unqualified, true, false> + { using __type = const _Unqualified; }; + + template + struct __cv_selector<_Unqualified, true, true> + { using __type = const volatile _Unqualified; }; + + template::value, + bool _IsVol = is_volatile<_Qualified>::value> + class __match_cv_qualifiers + { + using __match = __cv_selector<_Unqualified, _IsConst, _IsVol>; + + public: + using __type = typename __match::__type; + }; + + // Utility for finding the unsigned versions of signed integral types. + template + struct __make_unsigned + { using __type = _Tp; }; + + template<> + struct __make_unsigned + { using __type = unsigned char; }; + + template<> + struct __make_unsigned + { using __type = unsigned char; }; + + template<> + struct __make_unsigned + { using __type = unsigned short; }; + + template<> + struct __make_unsigned + { using __type = unsigned int; }; + + template<> + struct __make_unsigned + { using __type = unsigned long; }; + + template<> + struct __make_unsigned + { using __type = unsigned long long; }; + +#if defined(__GLIBCXX_TYPE_INT_N_0) + __extension__ + template<> + struct __make_unsigned<__GLIBCXX_TYPE_INT_N_0> + { using __type = unsigned __GLIBCXX_TYPE_INT_N_0; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + __extension__ + template<> + struct __make_unsigned<__GLIBCXX_TYPE_INT_N_1> + { using __type = unsigned __GLIBCXX_TYPE_INT_N_1; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + __extension__ + template<> + struct __make_unsigned<__GLIBCXX_TYPE_INT_N_2> + { using __type = unsigned __GLIBCXX_TYPE_INT_N_2; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + __extension__ + template<> + struct __make_unsigned<__GLIBCXX_TYPE_INT_N_3> + { using __type = unsigned __GLIBCXX_TYPE_INT_N_3; }; +#endif + + // Select between integral and enum: not possible to be both. + template::value, + bool _IsEnum = __is_enum(_Tp)> + class __make_unsigned_selector; + + template + class __make_unsigned_selector<_Tp, true, false> + { + using __unsigned_type + = typename __make_unsigned<__remove_cv_t<_Tp>>::__type; + + public: + using __type + = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; + }; + + class __make_unsigned_selector_base + { + protected: + template struct _List { }; + + template + struct _List<_Tp, _Up...> : _List<_Up...> + { static constexpr size_t __size = sizeof(_Tp); }; + + template + struct __select; + + template + struct __select<_Sz, _List<_Uint, _UInts...>, true> + { using __type = _Uint; }; + + template + struct __select<_Sz, _List<_Uint, _UInts...>, false> + : __select<_Sz, _List<_UInts...>> + { }; + }; + + // Choose unsigned integer type with the smallest rank and same size as _Tp + template + class __make_unsigned_selector<_Tp, false, true> + : __make_unsigned_selector_base + { + // With -fshort-enums, an enum may be as small as a char. + using _UInts = _List; + + using __unsigned_type = typename __select::__type; + + public: + using __type + = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; + }; + + // wchar_t, char8_t, char16_t and char32_t are integral types but are + // neither signed integer types nor unsigned integer types, so must be + // transformed to the unsigned integer type with the smallest rank. + // Use the partial specialization for enumeration types to do that. + template<> + struct __make_unsigned + { + using __type + = typename __make_unsigned_selector::__type; + }; + +#ifdef _GLIBCXX_USE_CHAR8_T + template<> + struct __make_unsigned + { + using __type + = typename __make_unsigned_selector::__type; + }; +#endif + + template<> + struct __make_unsigned + { + using __type + = typename __make_unsigned_selector::__type; + }; + + template<> + struct __make_unsigned + { + using __type + = typename __make_unsigned_selector::__type; + }; + /// @endcond + + // Given an integral/enum type, return the corresponding unsigned + // integer type. + // Primary template. + /// make_unsigned + template + struct make_unsigned + { using type = typename __make_unsigned_selector<_Tp>::__type; }; + + // Integral, but don't define. + template<> struct make_unsigned; + template<> struct make_unsigned; + template<> struct make_unsigned; + template<> struct make_unsigned; + + /// @cond undocumented + + // Utility for finding the signed versions of unsigned integral types. + template + struct __make_signed + { using __type = _Tp; }; + + template<> + struct __make_signed + { using __type = signed char; }; + + template<> + struct __make_signed + { using __type = signed char; }; + + template<> + struct __make_signed + { using __type = signed short; }; + + template<> + struct __make_signed + { using __type = signed int; }; + + template<> + struct __make_signed + { using __type = signed long; }; + + template<> + struct __make_signed + { using __type = signed long long; }; + +#if defined(__GLIBCXX_TYPE_INT_N_0) + __extension__ + template<> + struct __make_signed + { using __type = __GLIBCXX_TYPE_INT_N_0; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + __extension__ + template<> + struct __make_signed + { using __type = __GLIBCXX_TYPE_INT_N_1; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + __extension__ + template<> + struct __make_signed + { using __type = __GLIBCXX_TYPE_INT_N_2; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + __extension__ + template<> + struct __make_signed + { using __type = __GLIBCXX_TYPE_INT_N_3; }; +#endif + + // Select between integral and enum: not possible to be both. + template::value, + bool _IsEnum = __is_enum(_Tp)> + class __make_signed_selector; + + template + class __make_signed_selector<_Tp, true, false> + { + using __signed_type + = typename __make_signed<__remove_cv_t<_Tp>>::__type; + + public: + using __type + = typename __match_cv_qualifiers<_Tp, __signed_type>::__type; + }; + + // Choose signed integer type with the smallest rank and same size as _Tp + template + class __make_signed_selector<_Tp, false, true> + { + using __unsigned_type = typename __make_unsigned_selector<_Tp>::__type; + + public: + using __type = typename __make_signed_selector<__unsigned_type>::__type; + }; + + // wchar_t, char16_t and char32_t are integral types but are neither + // signed integer types nor unsigned integer types, so must be + // transformed to the signed integer type with the smallest rank. + // Use the partial specialization for enumeration types to do that. + template<> + struct __make_signed + { + using __type + = typename __make_signed_selector::__type; + }; + +#if defined(_GLIBCXX_USE_CHAR8_T) + template<> + struct __make_signed + { + using __type + = typename __make_signed_selector::__type; + }; +#endif + + template<> + struct __make_signed + { + using __type + = typename __make_signed_selector::__type; + }; + + template<> + struct __make_signed + { + using __type + = typename __make_signed_selector::__type; + }; + /// @endcond + + // Given an integral/enum type, return the corresponding signed + // integer type. + // Primary template. + /// make_signed + template + struct make_signed + { using type = typename __make_signed_selector<_Tp>::__type; }; + + // Integral, but don't define. + template<> struct make_signed; + template<> struct make_signed; + template<> struct make_signed; + template<> struct make_signed; + +#if __cplusplus > 201103L + /// Alias template for make_signed + template + using make_signed_t = typename make_signed<_Tp>::type; + + /// Alias template for make_unsigned + template + using make_unsigned_t = typename make_unsigned<_Tp>::type; +#endif + + // Array modifications. + + /// remove_extent +#if _GLIBCXX_USE_BUILTIN_TRAIT(__remove_extent) + template + struct remove_extent + { using type = __remove_extent(_Tp); }; +#else + template + struct remove_extent + { using type = _Tp; }; + + template + struct remove_extent<_Tp[_Size]> + { using type = _Tp; }; + + template + struct remove_extent<_Tp[]> + { using type = _Tp; }; +#endif + + /// remove_all_extents +#if _GLIBCXX_USE_BUILTIN_TRAIT(__remove_all_extents) + template + struct remove_all_extents + { using type = __remove_all_extents(_Tp); }; +#else + template + struct remove_all_extents + { using type = _Tp; }; + + template + struct remove_all_extents<_Tp[_Size]> + { using type = typename remove_all_extents<_Tp>::type; }; + + template + struct remove_all_extents<_Tp[]> + { using type = typename remove_all_extents<_Tp>::type; }; +#endif + +#if __cplusplus > 201103L + /// Alias template for remove_extent + template + using remove_extent_t = typename remove_extent<_Tp>::type; + + /// Alias template for remove_all_extents + template + using remove_all_extents_t = typename remove_all_extents<_Tp>::type; +#endif + + // Pointer modifications. + + /// remove_pointer +#if _GLIBCXX_USE_BUILTIN_TRAIT(__remove_pointer) + template + struct remove_pointer + { using type = __remove_pointer(_Tp); }; +#else + template + struct __remove_pointer_helper + { using type = _Tp; }; + + template + struct __remove_pointer_helper<_Tp, _Up*> + { using type = _Up; }; + + template + struct remove_pointer + : public __remove_pointer_helper<_Tp, __remove_cv_t<_Tp>> + { }; +#endif + + /// add_pointer +#if _GLIBCXX_USE_BUILTIN_TRAIT(__add_pointer) + template + struct add_pointer + { using type = __add_pointer(_Tp); }; +#else + template + struct __add_pointer_helper + { using type = _Tp; }; + + template + struct __add_pointer_helper<_Tp, __void_t<_Tp*>> + { using type = _Tp*; }; + + template + struct add_pointer + : public __add_pointer_helper<_Tp> + { }; + + template + struct add_pointer<_Tp&> + { using type = _Tp*; }; + + template + struct add_pointer<_Tp&&> + { using type = _Tp*; }; +#endif + +#if __cplusplus > 201103L + /// Alias template for remove_pointer + template + using remove_pointer_t = typename remove_pointer<_Tp>::type; + + /// Alias template for add_pointer + template + using add_pointer_t = typename add_pointer<_Tp>::type; +#endif + + /// @cond undocumented + + // Aligned to maximum fundamental alignment + struct __attribute__((__aligned__)) __aligned_storage_max_align_t + { }; + + constexpr size_t + __aligned_storage_default_alignment([[__maybe_unused__]] size_t __len) + { +#if _GLIBCXX_INLINE_VERSION + using _Max_align + = integral_constant; + + return __len > (_Max_align::value / 2) + ? _Max_align::value +# if _GLIBCXX_USE_BUILTIN_TRAIT(__builtin_clzg) + : 1 << (__SIZE_WIDTH__ - __builtin_clzg(__len - 1u)); +# else + : 1 << (__LLONG_WIDTH__ - __builtin_clzll(__len - 1ull)); +# endif +#else + // Returning a fixed value is incorrect, but kept for ABI compatibility. + // XXX GLIBCXX_ABI Deprecated + return alignof(__aligned_storage_max_align_t); +#endif + } + /// @endcond + + /** + * @brief Aligned storage + * + * The member typedef `type` is be a POD type suitable for use as + * uninitialized storage for any object whose size is at most `_Len` + * and whose alignment is a divisor of `_Align`. + * + * It is important to use the nested `type` as uninitialized storage, + * not the `std::aligned_storage` type itself which is an empty class + * with 1-byte alignment. So this is correct: + * + * `typename std::aligned_storage::type m_xobj;` + * + * This is wrong: + * + * `std::aligned_storage m_xobj;` + * + * In C++14 and later `std::aligned_storage_t` + * can be used to refer to the `type` member typedef. + * + * The default value of _Align is supposed to be the most stringent + * fundamental alignment requirement for any C++ object type whose size + * is no greater than `_Len` (see [basic.align] in the C++ standard). + * + * @bug In this implementation the default value for _Align is always the + * maximum fundamental alignment, i.e. `alignof(max_align_t)`, which is + * incorrect. It should be an alignment value no greater than `_Len`. + * + * @deprecated Deprecated in C++23. Uses can be replaced by an + * array `std::byte[_Len]` declared with `alignas(_Align)`. + */ + template + struct + _GLIBCXX23_DEPRECATED + aligned_storage + { + struct type + { + alignas(_Align) unsigned char __data[_Len]; + }; + }; + + template + struct __strictest_alignment + { + static const size_t _S_alignment = 0; + static const size_t _S_size = 0; + }; + + template + struct __strictest_alignment<_Tp, _Types...> + { + static const size_t _S_alignment = + alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment + ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment; + static const size_t _S_size = + sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size + ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size; + }; + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + /** + * @brief Provide aligned storage for types. + * + * [meta.trans.other] + * + * Provides aligned storage for any of the provided types of at + * least size _Len. + * + * @see aligned_storage + * + * @deprecated Deprecated in C++23. + */ + template + struct + _GLIBCXX23_DEPRECATED + aligned_union + { + private: + static_assert(sizeof...(_Types) != 0, "At least one type is required"); + + using __strictest = __strictest_alignment<_Types...>; + static const size_t _S_len = _Len > __strictest::_S_size + ? _Len : __strictest::_S_size; + public: + /// The value of the strictest alignment of _Types. + static const size_t alignment_value = __strictest::_S_alignment; + /// The storage. + using type = typename aligned_storage<_S_len, alignment_value>::type; + }; + + template + const size_t aligned_union<_Len, _Types...>::alignment_value; +#pragma GCC diagnostic pop + + /// @cond undocumented + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__decay) + template + struct decay + { using type = __decay(_Tp); }; +#else + // Decay trait for arrays and functions, used for perfect forwarding + // in make_pair, make_tuple, etc. + template + struct __decay_selector + : __conditional_t::value, // false for functions + remove_cv<_Up>, // N.B. DR 705. + add_pointer<_Up>> // function decays to pointer + { }; + + template + struct __decay_selector<_Up[_Nm]> + { using type = _Up*; }; + + template + struct __decay_selector<_Up[]> + { using type = _Up*; }; + + /// @endcond + + /// decay + template + struct decay + { using type = typename __decay_selector<_Tp>::type; }; + + template + struct decay<_Tp&> + { using type = typename __decay_selector<_Tp>::type; }; + + template + struct decay<_Tp&&> + { using type = typename __decay_selector<_Tp>::type; }; +#endif + + /// @cond undocumented + + // Helper which adds a reference to a type when given a reference_wrapper + template + struct __strip_reference_wrapper + { + using __type = _Tp; + }; + + template + struct __strip_reference_wrapper > + { + using __type = _Tp&; + }; + + // __decay_t (std::decay_t for C++11). + template + using __decay_t = typename decay<_Tp>::type; + + template + using __decay_and_strip = __strip_reference_wrapper<__decay_t<_Tp>>; + /// @endcond + + /// @cond undocumented + + // Helper for SFINAE constraints + template + using _Require = __enable_if_t<__and_<_Cond...>::value>; + + // __remove_cvref_t (std::remove_cvref_t for C++11). + template + using __remove_cvref_t + = typename remove_cv::type>::type; + /// @endcond + + // Primary template. + /// Define a member typedef @c type to one of two argument types. + template + struct conditional + { using type = _Iftrue; }; + + // Partial specialization for false. + template + struct conditional + { using type = _Iffalse; }; + + /// common_type + template + struct common_type; + + // Sfinae-friendly common_type implementation: + + /// @cond undocumented + + // For several sfinae-friendly trait implementations we transport both the + // result information (as the member type) and the failure information (no + // member type). This is very similar to std::enable_if, but we cannot use + // that, because we need to derive from them as an implementation detail. + + template + struct __success_type + { using type = _Tp; }; + + struct __failure_type + { }; + + struct __do_common_type_impl + { + template + using __cond_t + = decltype(true ? std::declval<_Tp>() : std::declval<_Up>()); + + // if decay_t() : declval())> + // denotes a valid type, let C denote that type. + template + static __success_type<__decay_t<__cond_t<_Tp, _Up>>> + _S_test(int); + +#if __cplusplus > 201703L + // Otherwise, if COND-RES(CREF(D1), CREF(D2)) denotes a type, + // let C denote the type decay_t. + template + static __success_type<__remove_cvref_t<__cond_t>> + _S_test_2(int); +#endif + + template + static __failure_type + _S_test_2(...); + + template + static decltype(_S_test_2<_Tp, _Up>(0)) + _S_test(...); + }; + + // If sizeof...(T) is zero, there shall be no member type. + template<> + struct common_type<> + { }; + + // If sizeof...(T) is one, the same type, if any, as common_type_t. + template + struct common_type<_Tp0> + : public common_type<_Tp0, _Tp0> + { }; + + // If sizeof...(T) is two, ... + template, typename _Dp2 = __decay_t<_Tp2>> + struct __common_type_impl + { + // If is_same_v is false or is_same_v is false, + // let C denote the same type, if any, as common_type_t. + using type = common_type<_Dp1, _Dp2>; + }; + + template + struct __common_type_impl<_Tp1, _Tp2, _Tp1, _Tp2> + : private __do_common_type_impl + { + // Otherwise, if decay_t() : declval())> + // denotes a valid type, let C denote that type. + using type = decltype(_S_test<_Tp1, _Tp2>(0)); + }; + + // If sizeof...(T) is two, ... + template + struct common_type<_Tp1, _Tp2> + : public __common_type_impl<_Tp1, _Tp2>::type + { }; + + template + struct __common_type_pack + { }; + + template + struct __common_type_fold; + + // If sizeof...(T) is greater than two, ... + template + struct common_type<_Tp1, _Tp2, _Rp...> + : public __common_type_fold, + __common_type_pack<_Rp...>> + { }; + + // Let C denote the same type, if any, as common_type_t. + // If there is such a type C, type shall denote the same type, if any, + // as common_type_t. + template + struct __common_type_fold<_CTp, __common_type_pack<_Rp...>, + __void_t> + : public common_type + { }; + + // Otherwise, there shall be no member type. + template + struct __common_type_fold<_CTp, _Rp, void> + { }; + + template + struct __underlying_type_impl + { + using type = __underlying_type(_Tp); + }; + + template + struct __underlying_type_impl<_Tp, false> + { }; + /// @endcond + + /// The underlying type of an enum. + template + struct underlying_type + : public __underlying_type_impl<_Tp> + { }; + + /// @cond undocumented + template + struct __declval_protector + { + static const bool __stop = false; + }; + /// @endcond + + /** Utility to simplify expressions used in unevaluated operands + * @since C++11 + * @ingroup utilities + */ + template + auto declval() noexcept -> decltype(__declval<_Tp>(0)) + { + static_assert(__declval_protector<_Tp>::__stop, + "declval() must not be used!"); + return __declval<_Tp>(0); + } + + /// result_of + template + struct result_of; + + // Sfinae-friendly result_of implementation: + + /// @cond undocumented + struct __invoke_memfun_ref { }; + struct __invoke_memfun_deref { }; + struct __invoke_memobj_ref { }; + struct __invoke_memobj_deref { }; + struct __invoke_other { }; + + // Associate a tag type with a specialization of __success_type. + template + struct __result_of_success : __success_type<_Tp> + { using __invoke_type = _Tag; }; + + // [func.require] paragraph 1 bullet 1: + struct __result_of_memfun_ref_impl + { + template + static __result_of_success().*std::declval<_Fp>())(std::declval<_Args>()...) + ), __invoke_memfun_ref> _S_test(int); + + template + static __failure_type _S_test(...); + }; + + template + struct __result_of_memfun_ref + : private __result_of_memfun_ref_impl + { + using type = decltype(_S_test<_MemPtr, _Arg, _Args...>(0)); + }; + + // [func.require] paragraph 1 bullet 2: + struct __result_of_memfun_deref_impl + { + template + static __result_of_success()).*std::declval<_Fp>())(std::declval<_Args>()...) + ), __invoke_memfun_deref> _S_test(int); + + template + static __failure_type _S_test(...); + }; + + template + struct __result_of_memfun_deref + : private __result_of_memfun_deref_impl + { + using type = decltype(_S_test<_MemPtr, _Arg, _Args...>(0)); + }; + + // [func.require] paragraph 1 bullet 3: + struct __result_of_memobj_ref_impl + { + template + static __result_of_success().*std::declval<_Fp>() + ), __invoke_memobj_ref> _S_test(int); + + template + static __failure_type _S_test(...); + }; + + template + struct __result_of_memobj_ref + : private __result_of_memobj_ref_impl + { + using type = decltype(_S_test<_MemPtr, _Arg>(0)); + }; + + // [func.require] paragraph 1 bullet 4: + struct __result_of_memobj_deref_impl + { + template + static __result_of_success()).*std::declval<_Fp>() + ), __invoke_memobj_deref> _S_test(int); + + template + static __failure_type _S_test(...); + }; + + template + struct __result_of_memobj_deref + : private __result_of_memobj_deref_impl + { + using type = decltype(_S_test<_MemPtr, _Arg>(0)); + }; + + template + struct __result_of_memobj; + + template + struct __result_of_memobj<_Res _Class::*, _Arg> + { + using _Argval = __remove_cvref_t<_Arg>; + using _MemPtr = _Res _Class::*; + using type = typename __conditional_t<__or_, + is_base_of<_Class, _Argval>>::value, + __result_of_memobj_ref<_MemPtr, _Arg>, + __result_of_memobj_deref<_MemPtr, _Arg> + >::type; + }; + + template + struct __result_of_memfun; + + template + struct __result_of_memfun<_Res _Class::*, _Arg, _Args...> + { + using _Argval = typename remove_reference<_Arg>::type; + using _MemPtr = _Res _Class::*; + using type = typename __conditional_t::value, + __result_of_memfun_ref<_MemPtr, _Arg, _Args...>, + __result_of_memfun_deref<_MemPtr, _Arg, _Args...> + >::type; + }; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2219. INVOKE-ing a pointer to member with a reference_wrapper + // as the object expression + + // Used by result_of, invoke etc. to unwrap a reference_wrapper. + template> + struct __inv_unwrap + { + using type = _Tp; + }; + + template + struct __inv_unwrap<_Tp, reference_wrapper<_Up>> + { + using type = _Up&; + }; + + template + struct __result_of_impl + { + using type = __failure_type; + }; + + template + struct __result_of_impl + : public __result_of_memobj<__decay_t<_MemPtr>, + typename __inv_unwrap<_Arg>::type> + { }; + + template + struct __result_of_impl + : public __result_of_memfun<__decay_t<_MemPtr>, + typename __inv_unwrap<_Arg>::type, _Args...> + { }; + + // [func.require] paragraph 1 bullet 5: + struct __result_of_other_impl + { + template + static __result_of_success()(std::declval<_Args>()...) + ), __invoke_other> _S_test(int); + + template + static __failure_type _S_test(...); + }; + + template + struct __result_of_impl + : private __result_of_other_impl + { + using type = decltype(_S_test<_Functor, _ArgTypes...>(0)); + }; + + // __invoke_result (std::invoke_result for C++11) + template + struct __invoke_result + : public __result_of_impl< + is_member_object_pointer< + typename remove_reference<_Functor>::type + >::value, + is_member_function_pointer< + typename remove_reference<_Functor>::type + >::value, + _Functor, _ArgTypes... + >::type + { }; + + // __invoke_result_t (std::invoke_result_t for C++11) + template + using __invoke_result_t = typename __invoke_result<_Fn, _Args...>::type; + /// @endcond + + template + struct result_of<_Functor(_ArgTypes...)> + : public __invoke_result<_Functor, _ArgTypes...> + { } _GLIBCXX17_DEPRECATED_SUGGEST("std::invoke_result"); + +#if __cplusplus >= 201402L +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + /// Alias template for aligned_storage + template + using aligned_storage_t _GLIBCXX23_DEPRECATED = typename aligned_storage<_Len, _Align>::type; + + template + using aligned_union_t _GLIBCXX23_DEPRECATED = typename aligned_union<_Len, _Types...>::type; +#pragma GCC diagnostic pop + + /// Alias template for decay + template + using decay_t = typename decay<_Tp>::type; + + /// Alias template for enable_if + template + using enable_if_t = typename enable_if<_Cond, _Tp>::type; + + /// Alias template for conditional + template + using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type; + + /// Alias template for common_type + template + using common_type_t = typename common_type<_Tp...>::type; + + /// Alias template for underlying_type + template + using underlying_type_t = typename underlying_type<_Tp>::type; + + /// Alias template for result_of + template + using result_of_t = typename result_of<_Tp>::type; +#endif // C++14 + +#ifdef __cpp_lib_void_t // C++ >= 17 || GNU++ >= 11 + /// A metafunction that always yields void, used for detecting valid types. + template using void_t = void; +#endif + + /// @cond undocumented + + // Detection idiom. + // Detect whether _Op<_Args...> is a valid type, use default _Def if not. + +#if __cpp_concepts + // Implementation of the detection idiom (negative case). + template class _Op, typename... _Args> + struct __detected_or + { + using type = _Def; + using __is_detected = false_type; + }; + + // Implementation of the detection idiom (positive case). + template class _Op, typename... _Args> + requires requires { typename _Op<_Args...>; } + struct __detected_or<_Def, _Op, _Args...> + { + using type = _Op<_Args...>; + using __is_detected = true_type; + }; +#else + /// Implementation of the detection idiom (negative case). + template class _Op, typename... _Args> + struct __detector + { + using type = _Default; + using __is_detected = false_type; + }; + + /// Implementation of the detection idiom (positive case). + template class _Op, + typename... _Args> + struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...> + { + using type = _Op<_Args...>; + using __is_detected = true_type; + }; + + template class _Op, + typename... _Args> + using __detected_or = __detector<_Default, void, _Op, _Args...>; +#endif // __cpp_concepts + + // _Op<_Args...> if that is a valid type, otherwise _Default. + template class _Op, + typename... _Args> + using __detected_or_t + = typename __detected_or<_Default, _Op, _Args...>::type; + + /** + * Use SFINAE to determine if the type _Tp has a publicly-accessible + * member type _NTYPE. + */ +#define _GLIBCXX_HAS_NESTED_TYPE(_NTYPE) \ + template> \ + struct __has_##_NTYPE \ + : false_type \ + { }; \ + template \ + struct __has_##_NTYPE<_Tp, __void_t> \ + : true_type \ + { }; + + template + struct __is_swappable; + + template + struct __is_nothrow_swappable; + + template + struct __is_tuple_like_impl : false_type + { }; + + // Internal type trait that allows us to sfinae-protect tuple_cat. + template + struct __is_tuple_like + : public __is_tuple_like_impl<__remove_cvref_t<_Tp>>::type + { }; + /// @endcond + + template + _GLIBCXX20_CONSTEXPR + inline + _Require<__not_<__is_tuple_like<_Tp>>, + is_move_constructible<_Tp>, + is_move_assignable<_Tp>> + swap(_Tp&, _Tp&) + noexcept(__and_, + is_nothrow_move_assignable<_Tp>>::value); + + template + _GLIBCXX20_CONSTEXPR + inline + __enable_if_t<__is_swappable<_Tp>::value> + swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) + noexcept(__is_nothrow_swappable<_Tp>::value); + + /// @cond undocumented + namespace __swappable_details { + using std::swap; + + struct __do_is_swappable_impl + { + template(), std::declval<_Tp&>()))> + static true_type __test(int); + + template + static false_type __test(...); + }; + + struct __do_is_nothrow_swappable_impl + { + template + static __bool_constant< + noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>())) + > __test(int); + + template + static false_type __test(...); + }; + + } // namespace __swappable_details + + template + struct __is_swappable_impl + : public __swappable_details::__do_is_swappable_impl + { + using type = decltype(__test<_Tp>(0)); + }; + + template + struct __is_nothrow_swappable_impl + : public __swappable_details::__do_is_nothrow_swappable_impl + { + using type = decltype(__test<_Tp>(0)); + }; + + template + struct __is_swappable + : public __is_swappable_impl<_Tp>::type + { }; + + template + struct __is_nothrow_swappable + : public __is_nothrow_swappable_impl<_Tp>::type + { }; + /// @endcond + +#ifdef __cpp_lib_is_swappable // C++ >= 17 || GNU++ >= 11 + /// Metafunctions used for detecting swappable types: p0185r1 + + /// is_swappable + template + struct is_swappable + : public __is_swappable_impl<_Tp>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_nothrow_swappable + template + struct is_nothrow_swappable + : public __is_nothrow_swappable_impl<_Tp>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + +#if __cplusplus >= 201402L + /// is_swappable_v + template + _GLIBCXX17_INLINE constexpr bool is_swappable_v = + is_swappable<_Tp>::value; + + /// is_nothrow_swappable_v + template + _GLIBCXX17_INLINE constexpr bool is_nothrow_swappable_v = + is_nothrow_swappable<_Tp>::value; +#endif // __cplusplus >= 201402L + + /// @cond undocumented + namespace __swappable_with_details { + using std::swap; + + struct __do_is_swappable_with_impl + { + template(), std::declval<_Up>())), + typename + = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))> + static true_type __test(int); + + template + static false_type __test(...); + }; + + struct __do_is_nothrow_swappable_with_impl + { + template + static __bool_constant< + noexcept(swap(std::declval<_Tp>(), std::declval<_Up>())) + && + noexcept(swap(std::declval<_Up>(), std::declval<_Tp>())) + > __test(int); + + template + static false_type __test(...); + }; + + } // namespace __swappable_with_details + + template + struct __is_swappable_with_impl + : public __swappable_with_details::__do_is_swappable_with_impl + { + using type = decltype(__test<_Tp, _Up>(0)); + }; + + // Optimization for the homogenous lvalue case, not required: + template + struct __is_swappable_with_impl<_Tp&, _Tp&> + : public __swappable_details::__do_is_swappable_impl + { + using type = decltype(__test<_Tp&>(0)); + }; + + template + struct __is_nothrow_swappable_with_impl + : public __swappable_with_details::__do_is_nothrow_swappable_with_impl + { + using type = decltype(__test<_Tp, _Up>(0)); + }; + + // Optimization for the homogenous lvalue case, not required: + template + struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&> + : public __swappable_details::__do_is_nothrow_swappable_impl + { + using type = decltype(__test<_Tp&>(0)); + }; + /// @endcond + + /// is_swappable_with + template + struct is_swappable_with + : public __is_swappable_with_impl<_Tp, _Up>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "first template argument must be a complete class or an unbounded array"); + static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}), + "second template argument must be a complete class or an unbounded array"); + }; + + /// is_nothrow_swappable_with + template + struct is_nothrow_swappable_with + : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "first template argument must be a complete class or an unbounded array"); + static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}), + "second template argument must be a complete class or an unbounded array"); + }; + +#if __cplusplus >= 201402L + /// is_swappable_with_v + template + _GLIBCXX17_INLINE constexpr bool is_swappable_with_v = + is_swappable_with<_Tp, _Up>::value; + + /// is_nothrow_swappable_with_v + template + _GLIBCXX17_INLINE constexpr bool is_nothrow_swappable_with_v = + is_nothrow_swappable_with<_Tp, _Up>::value; +#endif // __cplusplus >= 201402L + +#endif // __cpp_lib_is_swappable + + /// @cond undocumented + + // __is_invocable (std::is_invocable for C++11) + + // The primary template is used for invalid INVOKE expressions. + template::value, typename = void> + struct __is_invocable_impl + : false_type + { + using __nothrow_conv = false_type; // For is_nothrow_invocable_r + }; + + // Used for valid INVOKE and INVOKE expressions. + template + struct __is_invocable_impl<_Result, _Ret, + /* is_void<_Ret> = */ true, + __void_t> + : true_type + { + using __nothrow_conv = true_type; // For is_nothrow_invocable_r + }; + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wctor-dtor-privacy" + // Used for INVOKE expressions to check the implicit conversion to R. + template + struct __is_invocable_impl<_Result, _Ret, + /* is_void<_Ret> = */ false, + __void_t> + { + private: + // The type of the INVOKE expression. + using _Res_t = typename _Result::type; + + // Unlike declval, this doesn't add_rvalue_reference, so it respects + // guaranteed copy elision. + static _Res_t _S_get() noexcept; + + // Used to check if _Res_t can implicitly convert to _Tp. + template + static void _S_conv(__type_identity_t<_Tp>) noexcept; + + // This overload is viable if INVOKE(f, args...) can convert to _Tp. + template(_S_get())), + typename = decltype(_S_conv<_Tp>(_S_get())), +#if __has_builtin(__reference_converts_from_temporary) + bool _Dangle = __reference_converts_from_temporary(_Tp, _Res_t) +#else + bool _Dangle = false +#endif + > + static __bool_constant<_Nothrow && !_Dangle> + _S_test(int); + + template + static false_type + _S_test(...); + + public: + // For is_invocable_r + using type = decltype(_S_test<_Ret, /* Nothrow = */ true>(1)); + + // For is_nothrow_invocable_r + using __nothrow_conv = decltype(_S_test<_Ret>(1)); + }; +#pragma GCC diagnostic pop + + template + struct __is_invocable + : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type + { }; + + template + constexpr bool __call_is_nt(__invoke_memfun_ref) + { + using _Up = typename __inv_unwrap<_Tp>::type; + return noexcept((std::declval<_Up>().*std::declval<_Fn>())( + std::declval<_Args>()...)); + } + + template + constexpr bool __call_is_nt(__invoke_memfun_deref) + { + return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())( + std::declval<_Args>()...)); + } + + template + constexpr bool __call_is_nt(__invoke_memobj_ref) + { + using _Up = typename __inv_unwrap<_Tp>::type; + return noexcept(std::declval<_Up>().*std::declval<_Fn>()); + } + + template + constexpr bool __call_is_nt(__invoke_memobj_deref) + { + return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>()); + } + + template + constexpr bool __call_is_nt(__invoke_other) + { + return noexcept(std::declval<_Fn>()(std::declval<_Args>()...)); + } + + template + struct __call_is_nothrow + : __bool_constant< + std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{}) + > + { }; + + template + using __call_is_nothrow_ + = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>; + + // __is_nothrow_invocable (std::is_nothrow_invocable for C++11) + template + struct __is_nothrow_invocable + : __and_<__is_invocable<_Fn, _Args...>, + __call_is_nothrow_<_Fn, _Args...>>::type + { }; + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wctor-dtor-privacy" + struct __nonesuchbase {}; + struct __nonesuch : private __nonesuchbase { + ~__nonesuch() = delete; + __nonesuch(__nonesuch const&) = delete; + void operator=(__nonesuch const&) = delete; + }; +#pragma GCC diagnostic pop + /// @endcond + +#ifdef __cpp_lib_is_invocable // C++ >= 17 + /// std::invoke_result + template + struct invoke_result + : public __invoke_result<_Functor, _ArgTypes...> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Functor>{}), + "_Functor must be a complete class or an unbounded array"); + static_assert((std::__is_complete_or_unbounded( + __type_identity<_ArgTypes>{}) && ...), + "each argument type must be a complete class or an unbounded array"); + }; + + /// std::invoke_result_t + template + using invoke_result_t = typename invoke_result<_Fn, _Args...>::type; + + /// std::is_invocable + template + struct is_invocable +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_invocable) + : public __bool_constant<__is_invocable(_Fn, _ArgTypes...)> +#else + : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type +#endif + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), + "_Fn must be a complete class or an unbounded array"); + static_assert((std::__is_complete_or_unbounded( + __type_identity<_ArgTypes>{}) && ...), + "each argument type must be a complete class or an unbounded array"); + }; + + /// std::is_invocable_r + template + struct is_invocable_r + : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), + "_Fn must be a complete class or an unbounded array"); + static_assert((std::__is_complete_or_unbounded( + __type_identity<_ArgTypes>{}) && ...), + "each argument type must be a complete class or an unbounded array"); + static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}), + "_Ret must be a complete class or an unbounded array"); + }; + + /// std::is_nothrow_invocable + template + struct is_nothrow_invocable +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_nothrow_invocable) + : public __bool_constant<__is_nothrow_invocable(_Fn, _ArgTypes...)> +#else + : __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>, + __call_is_nothrow_<_Fn, _ArgTypes...>>::type +#endif + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), + "_Fn must be a complete class or an unbounded array"); + static_assert((std::__is_complete_or_unbounded( + __type_identity<_ArgTypes>{}) && ...), + "each argument type must be a complete class or an unbounded array"); + }; + + /// @cond undocumented + // This checks that the INVOKE expression is well-formed and that the + // conversion to R does not throw. It does *not* check whether the INVOKE + // expression itself can throw. That is done by __call_is_nothrow_ instead. + template + using __is_nt_invocable_impl + = typename __is_invocable_impl<_Result, _Ret>::__nothrow_conv; + /// @endcond + + /// std::is_nothrow_invocable_r + template + struct is_nothrow_invocable_r + : __and_<__is_nt_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>, + __call_is_nothrow_<_Fn, _ArgTypes...>>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), + "_Fn must be a complete class or an unbounded array"); + static_assert((std::__is_complete_or_unbounded( + __type_identity<_ArgTypes>{}) && ...), + "each argument type must be a complete class or an unbounded array"); + static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}), + "_Ret must be a complete class or an unbounded array"); + }; +#endif // __cpp_lib_is_invocable + +#if __cpp_lib_type_trait_variable_templates // C++ >= 17 + /** + * @defgroup variable_templates Variable templates for type traits + * @ingroup metaprogramming + * + * Each variable `is_xxx_v` is a boolean constant with the same value + * as the `value` member of the corresponding type trait `is_xxx`. + * + * @since C++17 unless noted otherwise. + */ + + /** + * @{ + * @ingroup variable_templates + */ +template + inline constexpr bool is_void_v = is_void<_Tp>::value; +template + inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value; +template + inline constexpr bool is_integral_v = is_integral<_Tp>::value; +template + inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value; + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_array) +template + inline constexpr bool is_array_v = __is_array(_Tp); +#else +template + inline constexpr bool is_array_v = false; +template + inline constexpr bool is_array_v<_Tp[]> = true; +template + inline constexpr bool is_array_v<_Tp[_Num]> = true; +#endif + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer) +template + inline constexpr bool is_pointer_v = __is_pointer(_Tp); +#else +template + inline constexpr bool is_pointer_v = false; +template + inline constexpr bool is_pointer_v<_Tp*> = true; +template + inline constexpr bool is_pointer_v<_Tp* const> = true; +template + inline constexpr bool is_pointer_v<_Tp* volatile> = true; +template + inline constexpr bool is_pointer_v<_Tp* const volatile> = true; +#endif + +template + inline constexpr bool is_lvalue_reference_v = false; +template + inline constexpr bool is_lvalue_reference_v<_Tp&> = true; +template + inline constexpr bool is_rvalue_reference_v = false; +template + inline constexpr bool is_rvalue_reference_v<_Tp&&> = true; + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_object_pointer) +template + inline constexpr bool is_member_object_pointer_v = + __is_member_object_pointer(_Tp); +#else +template + inline constexpr bool is_member_object_pointer_v = + is_member_object_pointer<_Tp>::value; +#endif + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_function_pointer) +template + inline constexpr bool is_member_function_pointer_v = + __is_member_function_pointer(_Tp); +#else +template + inline constexpr bool is_member_function_pointer_v = + is_member_function_pointer<_Tp>::value; +#endif + +template + inline constexpr bool is_enum_v = __is_enum(_Tp); +template + inline constexpr bool is_union_v = __is_union(_Tp); +template + inline constexpr bool is_class_v = __is_class(_Tp); +// is_function_v is defined below, after is_const_v. + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_reference) +template + inline constexpr bool is_reference_v = __is_reference(_Tp); +#else +template + inline constexpr bool is_reference_v = false; +template + inline constexpr bool is_reference_v<_Tp&> = true; +template + inline constexpr bool is_reference_v<_Tp&&> = true; +#endif + +template + inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value; +template + inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value; + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_object) +template + inline constexpr bool is_object_v = __is_object(_Tp); +#else +template + inline constexpr bool is_object_v = is_object<_Tp>::value; +#endif + +template + inline constexpr bool is_scalar_v = is_scalar<_Tp>::value; +template + inline constexpr bool is_compound_v = !is_fundamental_v<_Tp>; + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_pointer) +template + inline constexpr bool is_member_pointer_v = __is_member_pointer(_Tp); +#else +template + inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value; +#endif + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_const) +template + inline constexpr bool is_const_v = __is_const(_Tp); +#else +template + inline constexpr bool is_const_v = false; +template + inline constexpr bool is_const_v = true; +#endif + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_function) +template + inline constexpr bool is_function_v = __is_function(_Tp); +#else +template + inline constexpr bool is_function_v = !is_const_v; +template + inline constexpr bool is_function_v<_Tp&> = false; +template + inline constexpr bool is_function_v<_Tp&&> = false; +#endif + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_volatile) +template + inline constexpr bool is_volatile_v = __is_volatile(_Tp); +#else +template + inline constexpr bool is_volatile_v = false; +template + inline constexpr bool is_volatile_v = true; +#endif + +template + _GLIBCXX26_DEPRECATED_SUGGEST("is_trivially_default_constructible_v && is_trivially_copyable_v") + inline constexpr bool is_trivial_v = __is_trivial(_Tp); +template + inline constexpr bool is_trivially_copyable_v = __is_trivially_copyable(_Tp); +template + inline constexpr bool is_standard_layout_v = __is_standard_layout(_Tp); +template + _GLIBCXX20_DEPRECATED_SUGGEST("is_standard_layout_v && is_trivial_v") + inline constexpr bool is_pod_v = __is_pod(_Tp); +template + _GLIBCXX17_DEPRECATED + inline constexpr bool is_literal_type_v = __is_literal_type(_Tp); +template + inline constexpr bool is_empty_v = __is_empty(_Tp); +template + inline constexpr bool is_polymorphic_v = __is_polymorphic(_Tp); +template + inline constexpr bool is_abstract_v = __is_abstract(_Tp); +template + inline constexpr bool is_final_v = __is_final(_Tp); + +template + inline constexpr bool is_signed_v = is_signed<_Tp>::value; +template + inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value; + +template + inline constexpr bool is_constructible_v = __is_constructible(_Tp, _Args...); +template + inline constexpr bool is_default_constructible_v = __is_constructible(_Tp); +template + inline constexpr bool is_copy_constructible_v + = __is_constructible(_Tp, __add_lval_ref_t); +template + inline constexpr bool is_move_constructible_v + = __is_constructible(_Tp, __add_rval_ref_t<_Tp>); + +template + inline constexpr bool is_assignable_v = __is_assignable(_Tp, _Up); +template + inline constexpr bool is_copy_assignable_v + = __is_assignable(__add_lval_ref_t<_Tp>, __add_lval_ref_t); +template + inline constexpr bool is_move_assignable_v + = __is_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>); + +template + inline constexpr bool is_destructible_v = is_destructible<_Tp>::value; + +template + inline constexpr bool is_trivially_constructible_v + = __is_trivially_constructible(_Tp, _Args...); +template + inline constexpr bool is_trivially_default_constructible_v + = __is_trivially_constructible(_Tp); +template + inline constexpr bool is_trivially_copy_constructible_v + = __is_trivially_constructible(_Tp, __add_lval_ref_t); +template + inline constexpr bool is_trivially_move_constructible_v + = __is_trivially_constructible(_Tp, __add_rval_ref_t<_Tp>); + +template + inline constexpr bool is_trivially_assignable_v + = __is_trivially_assignable(_Tp, _Up); +template + inline constexpr bool is_trivially_copy_assignable_v + = __is_trivially_assignable(__add_lval_ref_t<_Tp>, + __add_lval_ref_t); +template + inline constexpr bool is_trivially_move_assignable_v + = __is_trivially_assignable(__add_lval_ref_t<_Tp>, + __add_rval_ref_t<_Tp>); + +#if __cpp_concepts +template + inline constexpr bool is_trivially_destructible_v = false; + +template + requires (!is_reference_v<_Tp>) && requires (_Tp& __t) { __t.~_Tp(); } + inline constexpr bool is_trivially_destructible_v<_Tp> + = __has_trivial_destructor(_Tp); +template + inline constexpr bool is_trivially_destructible_v<_Tp&> = true; +template + inline constexpr bool is_trivially_destructible_v<_Tp&&> = true; +template + inline constexpr bool is_trivially_destructible_v<_Tp[_Nm]> + = is_trivially_destructible_v<_Tp>; +#else +template + inline constexpr bool is_trivially_destructible_v = + is_trivially_destructible<_Tp>::value; +#endif + +template + inline constexpr bool is_nothrow_constructible_v + = __is_nothrow_constructible(_Tp, _Args...); +template + inline constexpr bool is_nothrow_default_constructible_v + = __is_nothrow_constructible(_Tp); +template + inline constexpr bool is_nothrow_copy_constructible_v + = __is_nothrow_constructible(_Tp, __add_lval_ref_t); +template + inline constexpr bool is_nothrow_move_constructible_v + = __is_nothrow_constructible(_Tp, __add_rval_ref_t<_Tp>); + +template + inline constexpr bool is_nothrow_assignable_v + = __is_nothrow_assignable(_Tp, _Up); +template + inline constexpr bool is_nothrow_copy_assignable_v + = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, + __add_lval_ref_t); +template + inline constexpr bool is_nothrow_move_assignable_v + = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>); + +template + inline constexpr bool is_nothrow_destructible_v = + is_nothrow_destructible<_Tp>::value; + +template + inline constexpr bool has_virtual_destructor_v + = __has_virtual_destructor(_Tp); + +template + inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value; + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__array_rank) \ + && (!defined(__clang__) || __clang_major__ >= 20) // PR118559 +template + inline constexpr size_t rank_v = __array_rank(_Tp); +#else +template + inline constexpr size_t rank_v = 0; +template + inline constexpr size_t rank_v<_Tp[_Size]> = 1 + rank_v<_Tp>; +template + inline constexpr size_t rank_v<_Tp[]> = 1 + rank_v<_Tp>; +#endif + +template + inline constexpr size_t extent_v = 0; +template + inline constexpr size_t extent_v<_Tp[_Size], 0> = _Size; +template + inline constexpr size_t extent_v<_Tp[_Size], _Idx> = extent_v<_Tp, _Idx - 1>; +template + inline constexpr size_t extent_v<_Tp[], 0> = 0; +template + inline constexpr size_t extent_v<_Tp[], _Idx> = extent_v<_Tp, _Idx - 1>; + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_same) +template + inline constexpr bool is_same_v = __is_same(_Tp, _Up); +#else +template + inline constexpr bool is_same_v = false; +template + inline constexpr bool is_same_v<_Tp, _Tp> = true; +#endif +template + inline constexpr bool is_base_of_v = __is_base_of(_Base, _Derived); +#ifdef __cpp_lib_is_virtual_base_of // C++ >= 26 +template + inline constexpr bool is_virtual_base_of_v = __builtin_is_virtual_base_of(_Base, _Derived); +#endif +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_convertible) +template + inline constexpr bool is_convertible_v = __is_convertible(_From, _To); +#else +template + inline constexpr bool is_convertible_v = is_convertible<_From, _To>::value; +#endif +template + inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value; +template + inline constexpr bool is_nothrow_invocable_v + = is_nothrow_invocable<_Fn, _Args...>::value; +template + inline constexpr bool is_invocable_r_v + = is_invocable_r<_Ret, _Fn, _Args...>::value; +template + inline constexpr bool is_nothrow_invocable_r_v + = is_nothrow_invocable_r<_Ret, _Fn, _Args...>::value; +/// @} +#endif // __cpp_lib_type_trait_variable_templates + +#ifdef __cpp_lib_has_unique_object_representations // C++ >= 17 && HAS_UNIQ_OBJ_REP + /// has_unique_object_representations + /// @since C++17 + template + struct has_unique_object_representations + : bool_constant<__has_unique_object_representations( + remove_cv_t> + )> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + +# if __cpp_lib_type_trait_variable_templates // C++ >= 17 + /// @ingroup variable_templates + template + inline constexpr bool has_unique_object_representations_v + = has_unique_object_representations<_Tp>::value; +# endif +#endif + +#ifdef __cpp_lib_is_aggregate // C++ >= 17 && builtin_is_aggregate + /// is_aggregate - true if the type is an aggregate. + /// @since C++17 + template + struct is_aggregate + : bool_constant<__is_aggregate(remove_cv_t<_Tp>)> + { }; + +# if __cpp_lib_type_trait_variable_templates // C++ >= 17 + /** is_aggregate_v - true if the type is an aggregate. + * @ingroup variable_templates + * @since C++17 + */ + template + inline constexpr bool is_aggregate_v = __is_aggregate(remove_cv_t<_Tp>); +# endif +#endif + + /** * Remove references and cv-qualifiers. + * @since C++20 + * @{ + */ +#ifdef __cpp_lib_remove_cvref // C++ >= 20 +# if _GLIBCXX_USE_BUILTIN_TRAIT(__remove_cvref) + template + struct remove_cvref + { using type = __remove_cvref(_Tp); }; +# else + template + struct remove_cvref + { using type = typename remove_cv<_Tp>::type; }; + + template + struct remove_cvref<_Tp&> + { using type = typename remove_cv<_Tp>::type; }; + + template + struct remove_cvref<_Tp&&> + { using type = typename remove_cv<_Tp>::type; }; +# endif + + template + using remove_cvref_t = typename remove_cvref<_Tp>::type; + /// @} +#endif // __cpp_lib_remove_cvref + +#ifdef __cpp_lib_type_identity // C++ >= 20 + /** * Identity metafunction. + * @since C++20 + * @{ + */ + template + struct type_identity { using type = _Tp; }; + + template + using type_identity_t = typename type_identity<_Tp>::type; + /// @} +#endif + +#ifdef __cpp_lib_unwrap_ref // C++ >= 20 + /** Unwrap a reference_wrapper + * @since C++20 + * @{ + */ + template + struct unwrap_reference { using type = _Tp; }; + + template + struct unwrap_reference> { using type = _Tp&; }; + + template + using unwrap_reference_t = typename unwrap_reference<_Tp>::type; + /// @} + + /** Decay type and if it's a reference_wrapper, unwrap it + * @since C++20 + * @{ + */ + template + struct unwrap_ref_decay { using type = unwrap_reference_t>; }; + + template + using unwrap_ref_decay_t = typename unwrap_ref_decay<_Tp>::type; + /// @} +#endif // __cpp_lib_unwrap_ref + +#ifdef __cpp_lib_bounded_array_traits // C++ >= 20 + /// True for a type that is an array of known bound. + /// @ingroup variable_templates + /// @since C++20 +# if _GLIBCXX_USE_BUILTIN_TRAIT(__is_bounded_array) + template + inline constexpr bool is_bounded_array_v = __is_bounded_array(_Tp); +# else + template + inline constexpr bool is_bounded_array_v = false; + + template + inline constexpr bool is_bounded_array_v<_Tp[_Size]> = true; +# endif + + /// True for a type that is an array of unknown bound. + /// @ingroup variable_templates + /// @since C++20 +# if _GLIBCXX_USE_BUILTIN_TRAIT(__is_unbounded_array) + template + inline constexpr bool is_unbounded_array_v = __is_unbounded_array(_Tp); +# else + template + inline constexpr bool is_unbounded_array_v = false; + + template + inline constexpr bool is_unbounded_array_v<_Tp[]> = true; +# endif + + /// True for a type that is an array of known bound. + /// @since C++20 + template + struct is_bounded_array + : public bool_constant> + { }; + + /// True for a type that is an array of unknown bound. + /// @since C++20 + template + struct is_unbounded_array + : public bool_constant> + { }; +#endif // __cpp_lib_bounded_array_traits + +#if __has_builtin(__is_layout_compatible) && __cplusplus >= 202002L + + /// @since C++20 + template + struct is_layout_compatible + : bool_constant<__is_layout_compatible(_Tp, _Up)> + { }; + + /// @ingroup variable_templates + /// @since C++20 + template + constexpr bool is_layout_compatible_v + = __is_layout_compatible(_Tp, _Up); + +#if __has_builtin(__builtin_is_corresponding_member) +# ifndef __cpp_lib_is_layout_compatible +# error "libstdc++ bug: is_corresponding_member and is_layout_compatible are provided but their FTM is not set" +# endif + + /// @since C++20 + template + constexpr bool + is_corresponding_member(_M1 _S1::*__m1, _M2 _S2::*__m2) noexcept + { return __builtin_is_corresponding_member(__m1, __m2); } +#endif +#endif + +#if __has_builtin(__is_pointer_interconvertible_base_of) \ + && __cplusplus >= 202002L + /// True if `_Derived` is standard-layout and has a base class of type `_Base` + /// @since C++20 + template + struct is_pointer_interconvertible_base_of + : bool_constant<__is_pointer_interconvertible_base_of(_Base, _Derived)> + { }; + + /// @ingroup variable_templates + /// @since C++20 + template + constexpr bool is_pointer_interconvertible_base_of_v + = __is_pointer_interconvertible_base_of(_Base, _Derived); + +#if __has_builtin(__builtin_is_pointer_interconvertible_with_class) +# ifndef __cpp_lib_is_pointer_interconvertible +# error "libstdc++ bug: is_pointer_interconvertible available but FTM is not set" +# endif + + /// True if `__mp` points to the first member of a standard-layout type + /// @returns true if `s.*__mp` is pointer-interconvertible with `s` + /// @since C++20 + template + constexpr bool + is_pointer_interconvertible_with_class(_Mem _Tp::*__mp) noexcept + { return __builtin_is_pointer_interconvertible_with_class(__mp); } +#endif +#endif + +#ifdef __cpp_lib_is_scoped_enum // C++ >= 23 + /// True if the type is a scoped enumeration type. + /// @since C++23 + +# if _GLIBCXX_USE_BUILTIN_TRAIT(__is_scoped_enum) + template + struct is_scoped_enum + : bool_constant<__is_scoped_enum(_Tp)> + { }; +# else + template + struct is_scoped_enum + : false_type + { }; + + template + requires __is_enum(_Tp) + && requires(remove_cv_t<_Tp> __t) { __t = __t; } // fails if incomplete + struct is_scoped_enum<_Tp> + : bool_constant + { }; +# endif + + /// @ingroup variable_templates + /// @since C++23 +# if _GLIBCXX_USE_BUILTIN_TRAIT(__is_scoped_enum) + template + inline constexpr bool is_scoped_enum_v = __is_scoped_enum(_Tp); +# else + template + inline constexpr bool is_scoped_enum_v = is_scoped_enum<_Tp>::value; +# endif +#endif + +#ifdef __cpp_lib_reference_from_temporary // C++ >= 23 && ref_{converts,constructs}_from_temp + /// True if _Tp is a reference type, a _Up value can be bound to _Tp in + /// direct-initialization, and a temporary object would be bound to + /// the reference, false otherwise. + /// @since C++23 + template + struct reference_constructs_from_temporary + : public bool_constant<__reference_constructs_from_temporary(_Tp, _Up)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}) + && std::__is_complete_or_unbounded(__type_identity<_Up>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// True if _Tp is a reference type, a _Up value can be bound to _Tp in + /// copy-initialization, and a temporary object would be bound to + /// the reference, false otherwise. + /// @since C++23 + template + struct reference_converts_from_temporary + : public bool_constant<__reference_converts_from_temporary(_Tp, _Up)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}) + && std::__is_complete_or_unbounded(__type_identity<_Up>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// @ingroup variable_templates + /// @since C++23 + template + inline constexpr bool reference_constructs_from_temporary_v + = reference_constructs_from_temporary<_Tp, _Up>::value; + + /// @ingroup variable_templates + /// @since C++23 + template + inline constexpr bool reference_converts_from_temporary_v + = reference_converts_from_temporary<_Tp, _Up>::value; +#endif // __cpp_lib_reference_from_temporary + +#ifdef __cpp_lib_is_constant_evaluated // C++ >= 20 && HAVE_IS_CONST_EVAL + /// Returns true only when called during constant evaluation. + /// @since C++20 + constexpr inline bool + is_constant_evaluated() noexcept + { +#if __cpp_if_consteval >= 202106L + if consteval { return true; } else { return false; } +#else + return __builtin_is_constant_evaluated(); +#endif + } +#endif + +#if __cplusplus >= 202002L + /// @cond undocumented + template + using __copy_cv = typename __match_cv_qualifiers<_From, _To>::__type; + + template + using __cond_res + = decltype(false ? declval<_Xp(&)()>()() : declval<_Yp(&)()>()()); + + template + struct __common_ref_impl + { }; + + // [meta.trans.other], COMMON-REF(A, B) + template + using __common_ref = typename __common_ref_impl<_Ap, _Bp>::type; + + // COND-RES(COPYCV(X, Y) &, COPYCV(Y, X) &) + template + using __condres_cvref + = __cond_res<__copy_cv<_Xp, _Yp>&, __copy_cv<_Yp, _Xp>&>; + + // If A and B are both lvalue reference types, ... + template + struct __common_ref_impl<_Xp&, _Yp&, __void_t<__condres_cvref<_Xp, _Yp>>> + : enable_if>, + __condres_cvref<_Xp, _Yp>> + { }; + + // let C be remove_reference_t&& + template + using __common_ref_C = remove_reference_t<__common_ref<_Xp&, _Yp&>>&&; + + // If A and B are both rvalue reference types, ... + template + struct __common_ref_impl<_Xp&&, _Yp&&, + _Require>, + is_convertible<_Yp&&, __common_ref_C<_Xp, _Yp>>>> + { using type = __common_ref_C<_Xp, _Yp>; }; + + // let D be COMMON-REF(const X&, Y&) + template + using __common_ref_D = __common_ref; + + // If A is an rvalue reference and B is an lvalue reference, ... + template + struct __common_ref_impl<_Xp&&, _Yp&, + _Require>>> + { using type = __common_ref_D<_Xp, _Yp>; }; + + // If A is an lvalue reference and B is an rvalue reference, ... + template + struct __common_ref_impl<_Xp&, _Yp&&> + : __common_ref_impl<_Yp&&, _Xp&> + { }; + /// @endcond + + template class _TQual, template class _UQual> + struct basic_common_reference + { }; + + /// @cond undocumented + template + struct __xref + { template using __type = __copy_cv<_Tp, _Up>; }; + + template + struct __xref<_Tp&> + { template using __type = __copy_cv<_Tp, _Up>&; }; + + template + struct __xref<_Tp&&> + { template using __type = __copy_cv<_Tp, _Up>&&; }; + + template + using __basic_common_ref + = typename basic_common_reference, + remove_cvref_t<_Tp2>, + __xref<_Tp1>::template __type, + __xref<_Tp2>::template __type>::type; + /// @endcond + + template + struct common_reference; + + template + using common_reference_t = typename common_reference<_Tp...>::type; + + // If sizeof...(T) is zero, there shall be no member type. + template<> + struct common_reference<> + { }; + + // If sizeof...(T) is one ... + template + struct common_reference<_Tp0> + { using type = _Tp0; }; + + /// @cond undocumented + template + struct __common_reference_impl + : __common_reference_impl<_Tp1, _Tp2, _Bullet + 1> + { }; + + // If sizeof...(T) is two ... + template + struct common_reference<_Tp1, _Tp2> + : __common_reference_impl<_Tp1, _Tp2> + { }; + + // If T1 and T2 are reference types and COMMON-REF(T1, T2) is well-formed, ... + template + requires is_reference_v<_Tp1> && is_reference_v<_Tp2> + && requires { typename __common_ref<_Tp1, _Tp2>; } +#if __cpp_lib_common_reference // C++ >= 20 + && is_convertible_v, + add_pointer_t<__common_ref<_Tp1, _Tp2>>> + && is_convertible_v, + add_pointer_t<__common_ref<_Tp1, _Tp2>>> +#endif + struct __common_reference_impl<_Tp1, _Tp2, 1> + { using type = __common_ref<_Tp1, _Tp2>; }; + + // Otherwise, if basic_common_reference<...>::type is well-formed, ... + template + requires requires { typename __basic_common_ref<_Tp1, _Tp2>; } + struct __common_reference_impl<_Tp1, _Tp2, 2> + { using type = __basic_common_ref<_Tp1, _Tp2>; }; + + // Otherwise, if COND-RES(T1, T2) is well-formed, ... + template + requires requires { typename __cond_res<_Tp1, _Tp2>; } + struct __common_reference_impl<_Tp1, _Tp2, 3> + { using type = __cond_res<_Tp1, _Tp2>; }; + + // Otherwise, if common_type_t is well-formed, ... + template + requires requires { typename common_type_t<_Tp1, _Tp2>; } + struct __common_reference_impl<_Tp1, _Tp2, 4> + { using type = common_type_t<_Tp1, _Tp2>; }; + + // Otherwise, there shall be no member type. + template + struct __common_reference_impl<_Tp1, _Tp2, 5> + { }; + + // Otherwise, if sizeof...(T) is greater than two, ... + template + struct common_reference<_Tp1, _Tp2, _Rest...> + : __common_type_fold, + __common_type_pack<_Rest...>> + { }; + + // Reuse __common_type_fold for common_reference + template + struct __common_type_fold, + __common_type_pack<_Rest...>, + void_t>> + : public common_reference, _Rest...> + { }; + /// @endcond + +#endif // C++20 + + /// @} group metaprogramming + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +} // extern "C++" + +#endif // C++11 + +#endif // _GLIBCXX_TYPE_TRAITS diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@type_traits.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@type_traits.blob new file mode 100644 index 0000000000000000000000000000000000000000..a7bd9af79cf1057d66c605dadd7fc52452ba10cf GIT binary patch literal 138780 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糚SsD3X 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. + +/** @file typeinfo + * This is a Standard C++ Library header. + */ + +#ifndef _TYPEINFO +#define _TYPEINFO + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#if __cplusplus >= 201103L +#include +#endif + +#define __glibcxx_want_constexpr_typeinfo +#include + +#pragma GCC visibility push(default) + +extern "C++" { + +namespace __cxxabiv1 +{ + class __class_type_info; +} // namespace __cxxabiv1 + +// Determine whether typeinfo names for the same type are merged (in which +// case comparison can just compare pointers) or not (in which case strings +// must be compared), and whether comparison is to be implemented inline or +// not. We used to do inline pointer comparison by default if weak symbols +// are available, but even with weak symbols sometimes names are not merged +// when objects are loaded with RTLD_LOCAL, so now we always use strcmp by +// default. For ABI compatibility, we do the strcmp inline if weak symbols +// are available, and out-of-line if not. Out-of-line pointer comparison +// is used where the object files are to be portable to multiple systems, +// some of which may not be able to use pointer comparison, but the +// particular system for which libstdc++ is being built can use pointer +// comparison; in particular for most ARM EABI systems, where the ABI +// specifies out-of-line comparison. The compiler's target configuration +// can override the defaults by defining __GXX_TYPEINFO_EQUALITY_INLINE to +// 1 or 0 to indicate whether or not comparison is inline, and +// __GXX_MERGED_TYPEINFO_NAMES to 1 or 0 to indicate whether or not pointer +// comparison can be used. + +#ifndef __GXX_MERGED_TYPEINFO_NAMES +// By default, typeinfo names are not merged. +#define __GXX_MERGED_TYPEINFO_NAMES 0 +#endif + +// By default follow the old inline rules to avoid ABI changes. +#ifndef __GXX_TYPEINFO_EQUALITY_INLINE +# if !__GXX_WEAK__ +# define __GXX_TYPEINFO_EQUALITY_INLINE 0 +# else +# define __GXX_TYPEINFO_EQUALITY_INLINE 1 +# endif +#endif + +namespace std +{ + /** + * @brief Part of RTTI. + * + * The @c type_info class describes type information generated by + * an implementation. + */ + class type_info + { + public: + /** Destructor first. Being the first non-inline virtual function, this + * controls in which translation unit the vtable is emitted. The + * compiler makes use of that information to know where to emit + * the runtime-mandated type_info structures in the new-abi. */ + virtual ~type_info(); + + /** Returns an @e implementation-defined byte string; this is not + * portable between compilers! */ + const char* name() const _GLIBCXX_NOEXCEPT + { return __name[0] == '*' ? __name + 1 : __name; } + + /** Returns true if `*this` precedes `__arg` in the implementation's + * collation order. */ + bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT; + + _GLIBCXX23_CONSTEXPR + bool operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT; + +#if __cpp_impl_three_way_comparison < 201907L + bool operator!=(const type_info& __arg) const _GLIBCXX_NOEXCEPT + { return !operator==(__arg); } +#endif + +#if __cplusplus >= 201103L + size_t hash_code() const noexcept + { +# if !__GXX_MERGED_TYPEINFO_NAMES + return _Hash_bytes(name(), __builtin_strlen(name()), + static_cast(0xc70f6907UL)); +# else + return reinterpret_cast(__name); +# endif + } +#endif // C++11 + + // Return true if this is a pointer type of some kind + virtual bool __is_pointer_p() const; + + // Return true if this is a function type + virtual bool __is_function_p() const; + + // Try and catch a thrown type. Store an adjusted pointer to the + // caught type in THR_OBJ. If THR_TYPE is not a pointer type, then + // THR_OBJ points to the thrown object. If THR_TYPE is a pointer + // type, then THR_OBJ is the pointer itself. OUTER indicates the + // number of outer pointers, and whether they were const + // qualified. + virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj, + unsigned __outer) const; + + // Internally used during catch matching + virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target, + void **__obj_ptr) const; + + protected: + const char *__name; + + explicit type_info(const char *__n): __name(__n) { } + + private: + // type_info objects cannot be copied. +#if __cplusplus >= 201103L + type_info& operator=(const type_info&) = delete; + type_info(const type_info&) = delete; +#else + type_info& operator=(const type_info&); + type_info(const type_info&); +#endif + +#if ! __GXX_TYPEINFO_EQUALITY_INLINE + bool __equal(const type_info&) const _GLIBCXX_NOEXCEPT; +#endif + }; + +#if __GXX_TYPEINFO_EQUALITY_INLINE + inline bool + type_info::before(const type_info& __arg) const _GLIBCXX_NOEXCEPT + { +#if !__GXX_MERGED_TYPEINFO_NAMES + // Even with the new abi, on systems that support dlopen + // we can run into cases where type_info names aren't merged, + // so we still need to do string comparison. + if (__name[0] != '*' || __arg.__name[0] != '*') + return __builtin_strcmp (__name, __arg.__name) < 0; +#else + // On some targets we can rely on type_info's NTBS being unique, + // and therefore address comparisons are sufficient. +#endif + + // In old abi, or when weak symbols are not supported, there can + // be multiple instances of a type_info object for one + // type. Uniqueness must use the __name value, not object address. + return __name < __arg.__name; + } +#endif + +#if __GXX_TYPEINFO_EQUALITY_INLINE || __cplusplus > 202002L +# if ! __GXX_TYPEINFO_EQUALITY_INLINE + [[__gnu__::__always_inline__]] +# endif + _GLIBCXX23_CONSTEXPR inline bool + type_info::operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT + { + if (std::__is_constant_evaluated()) + return this == &__arg; + + if (__name == __arg.__name) + return true; + +#if !__GXX_TYPEINFO_EQUALITY_INLINE + // ABI requires comparisons to be non-inline. + return __equal(__arg); +#elif !__GXX_MERGED_TYPEINFO_NAMES + // Need to do string comparison. + return __name[0] != '*' && __builtin_strcmp (__name, __arg.name()) == 0; +#else + return false; +#endif + } +#endif + + + /** + * @brief Thrown during incorrect typecasting. + * @ingroup exceptions + * + * If you attempt an invalid @c dynamic_cast expression, an instance of + * this class (or something derived from this class) is thrown. */ + class bad_cast : public exception + { + public: + bad_cast() _GLIBCXX_USE_NOEXCEPT { } + + // This declaration is not useless: + // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 + virtual ~bad_cast() _GLIBCXX_USE_NOEXCEPT; + + // See comment in eh_exception.cc. + virtual const char* what() const _GLIBCXX_USE_NOEXCEPT; + }; + + /** + * @brief Thrown when a NULL pointer in a @c typeid expression is used. + * @ingroup exceptions + */ + class bad_typeid : public exception + { + public: + bad_typeid () _GLIBCXX_USE_NOEXCEPT { } + + // This declaration is not useless: + // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 + virtual ~bad_typeid() _GLIBCXX_USE_NOEXCEPT; + + // See comment in eh_exception.cc. + virtual const char* what() const _GLIBCXX_USE_NOEXCEPT; + }; +} // namespace std + +} // extern "C++" + +#pragma GCC visibility pop + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@typeinfo.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@typeinfo.blob new file mode 100644 index 0000000000000000000000000000000000000000..1301fed58cce19d83049f9af04d7ed5de08be404 GIT binary patch literal 18774 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 -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file include/vector + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_VECTOR +#define _GLIBCXX_VECTOR 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // container + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef _GLIBCXX_EXPORT_TEMPLATE +# include +#endif + +#ifdef _GLIBCXX_DEBUG +# include +#endif + +#define __glibcxx_want_algorithm_default_value_type +#define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_constexpr_vector +#define __glibcxx_want_containers_ranges +#define __glibcxx_want_erase_if +#define __glibcxx_want_incomplete_container_elements +#define __glibcxx_want_nonmember_container_access +#include + +#if __cplusplus >= 201703L +#include +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + namespace pmr { + template + using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>; + } // namespace pmr +# ifdef _GLIBCXX_DEBUG + namespace _GLIBCXX_STD_C::pmr { + template + using vector + = _GLIBCXX_STD_C::vector<_Tp, std::pmr::polymorphic_allocator<_Tp>>; + } // namespace _GLIBCXX_STD_C::pmr +# endif +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // C++17 + +#ifdef __cpp_lib_erase_if // C++ >= 20 && HOSTED +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + _GLIBCXX20_CONSTEXPR + inline typename vector<_Tp, _Alloc>::size_type + erase_if(vector<_Tp, _Alloc>& __cont, _Predicate __pred) + { + using namespace __gnu_cxx; + _GLIBCXX_STD_C::vector<_Tp, _Alloc>& __ucont = __cont; + const auto __osz = __cont.size(); + const auto __end = __ucont.end(); + auto __removed = std::__remove_if(__ucont.begin(), __end, + __ops::__pred_iter(std::ref(__pred))); + if (__removed != __end) + { + __cont.erase(__niter_wrap(__cont.begin(), __removed), + __cont.end()); + return __osz - __cont.size(); + } + + return 0; + } + + template + _GLIBCXX20_CONSTEXPR + inline typename vector<_Tp, _Alloc>::size_type + erase(vector<_Tp, _Alloc>& __cont, const _Up& __value) + { + using namespace __gnu_cxx; + _GLIBCXX_STD_C::vector<_Tp, _Alloc>& __ucont = __cont; + const auto __osz = __cont.size(); + const auto __end = __ucont.end(); + auto __removed = std::__remove_if(__ucont.begin(), __end, + __ops::__iter_equals_val(__value)); + if (__removed != __end) + { + __cont.erase(__niter_wrap(__cont.begin(), __removed), + __cont.end()); + return __osz - __cont.size(); + } + + return 0; + } +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // __cpp_lib_erase_if + +#ifdef __glibcxx_format_ranges // C++ >= 20 && HOSTED +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + // Standard does not constrain accepted _CharT and declares it as formatter + // of Tp that statisfies is-vector-bool-reference, + template<__format::__char _CharT> + struct formatter<_GLIBCXX_STD_C::_Bit_reference, _CharT> + { + // Standard declares this as template accepting unconstrained + // ParseContext type. + constexpr typename basic_format_parse_context<_CharT>::iterator + parse(basic_format_parse_context<_CharT>& __pc) + { return _M_f.template _M_parse(__pc); } + + // Standard declares this as template accepting unconstrained + // FormatContext type. + template + typename basic_format_context<_Out, _CharT>::iterator + format(const _GLIBCXX_STD_C::_Bit_reference& __u, + basic_format_context<_Out, _CharT>& __fc) const + { return _M_f.format(static_cast(__u), __fc); } + + private: + __format::__formatter_int<_CharT> _M_f; + }; +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // __glibcxx_format_ranges + +#endif /* _GLIBCXX_VECTOR */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@vector.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@vector.blob new file mode 100644 index 0000000000000000000000000000000000000000..d03673baeb188107b46f63a51d7c8c831e73c9fc GIT binary patch literal 14382 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@atomic_word.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@atomic_word.h new file mode 100644 index 0000000..e52824b --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@atomic_word.h @@ -0,0 +1,40 @@ +// Low-level type for atomic operations -*- C++ -*- + +// Copyright (C) 2004-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file atomic_word.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _GLIBCXX_ATOMIC_WORD_H +#define _GLIBCXX_ATOMIC_WORD_H 1 + +typedef int _Atomic_word; + + +// This is a memory order acquire fence. +#define _GLIBCXX_READ_MEM_BARRIER __atomic_thread_fence (__ATOMIC_ACQUIRE) +// This is a memory order release fence. +#define _GLIBCXX_WRITE_MEM_BARRIER __atomic_thread_fence (__ATOMIC_RELEASE) + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@atomic_word.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@atomic_word.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ce22a5c6d540a795fe8d2675429be1bc21bdd0e4 GIT binary patch literal 11737 zcmdO5_$PB#_%Z_{gMMyaiGERHW{Q46QGQlxa!Ij%N^yaHMq*KJeqLsBA`+{(C>g=i z%P1&dU{20S%uA=t4BhhlqU_APblsH9qSWM){Gv)*65Pb__aB3PX>pN$W?phmX-cYo za!F-Ds$K@eznE^}%cwHi+WLm3dPaJN`bn83#rlakIr+))B}IvuCB+~Opa4P909FMu zu2?@lJ~yejB(Wqlz67KcpV`GFDXA67sRbpFAVx7UCo?HCuOtVn5oxK3C8b5FV5i_S zzrw;S-poX|AXzsjGq1ElH$ATu;-CED_>|PN%shw@7`{nHc)z%$C^a!RsWc6X6OojG z{a;*Cl$n>FR-OWKG=`yIB}tVfsm0}q1t1mpTn<*853yXYBsm$2?O-K|CHc9T$?@fx zDXH2gMY==tTEfaz;^pUOvcV3~ym7O)N^z&nqLOxVW;oBsDia zwWuh+2+4OjnMwNKoT6`J2v4ZRB`KMC;MA05&Ul%GBoE4lr6rj;#rkE5Mc{1s&uNb~ z&a|GHUz}E+g5(-lPARS|)=y4JO~anzz%c;|(qjGMlA_Y&l6W^yA6HNS;EUpd;*uPF z5D}l8pO==I4pNU1x=2PR=jUfnJSE2Puc7d#vt9*HK!WS{x6xD8DE^u_zrJqy%ls$xlwqNsUj= zNh~fVoN0>^OEUAZL?cqb#K)%<81yy`}ab|jPDtd5XEluL%i%U{cQq$tglQR;b znFCy|fa*s4I*K!^pw${&1FVQZ3b^EQaLtM(0U{{^J0229nfZA*vmB`80Yw)$PH}`l zW^SsP3GNUo&CDyw)6Gmt%`3?)sl=)d-Cgh;3Q~=cMA22J72`~FiN(3P>8W|CMVZO^ znRz9;IXMuQUNR%l;z+KjNKDF%Ps=Y##*tBq^HS0>bHMGFRWn~*L}@%g0yi%uGcgb3 z103O2S&#~9u0YEcaQ%Xz65MdmFUT*>tcZul1BUCt_Lb)srGOF$RvXd73{qysmu04w zOB3M;%YDrcu_Vx^@xm8?JnpCU{iF6E)Bo^oDrxq1KS{4M|18EH{H#O#A0xo#ZZdmKCn-6Q*-l+Dv?{0q;)?E za!S)P^NRJ0Gt=`DbK=3dFtH@R2txqUE}BuNhqGM-b`Lb0q$MV&;^+h*`5+lwwh|G% z(0rbmmst`Ij~1*!jbwUCYEo&sKBy^B1a1dmRS$M_D!2^DOD)D;eu5Gp?#M&3F&UC? z@OucP2y43ol$9avSA3}w>|oST#@_Nrc2|BLsQ*-q#bF@75mj!113(|rATl!{+~6oF zEyzj5Vj+^Vk}^y1E5O+^OV-xL(;P;!A~PSGr;!vO1t)SQ0#))@>TIy;;*7*1Nb@%y zmQ8UKdXQ#*QF%^&ayBUS5sX)q!W4V7Ldp_wYZBZ+11DL0#RR@Ugrp;o)3Ey>Co?Ho zHzPGMCACPmxFoR%d+i4fmE?j_-Qra23edwF)RY4^|1$HzH7|C{3raGIQWI0a2~Rh% zC>h+W#217)nYo!I#Kd<|VqSV`d}4AkG{*I41lZ(LZOSm>%#UiBa%FHju(eOe_ z&&jxYK434ECuWwUCkr3H|LxuKpwLkixGjn6DeEdn*kKu*AL zB9hl|rsw2>Qep=(L5-7~%p@$C6uFH`sKG#tqtZ(DkEqRdxO3RoH3H+He zH?blAmXn`YlBb)TpPLJ*<1vgvN+gJ?uqZw!vlv^e5IOmgmL_1?2OP%WQBkn7 zF(M1%HE_wK3+|WT4kl1_M@%0cH1Yr$!N!ulk^B#~x*)$89`4v32bR`P2DK(3@s2M{ z!Dd2whw(+J#rdU0$=F*bV1*E)q2(fKbpk8zk<`T#HFOPXK!Asc@HHQh;}v8>L26M> zejd0O2j_Uwird7L#DbF4B7GdH|p_ zf)QCr%5j#-pyCg!W{Bf5bHR~?FM=~6H3ShU3p#3wy*~l54?M^PY4>1{eI!3Y#(J>W zi#yjK=>{d=L?U{Ipjna}c-;rdyx>%dHPj$Ic#sr0$Vf{ykmh4)aV99;6%;W1o6(7u zVnE}oAnBaccu1!N(q;$Sh1?`V@+UZ4^HM=0_{0xcBt9{SO+M!5qVe zG?Q&wMd488VZ?t*jx&&c0e{_gb!>=Ru`1ta18e$ zS%Ne7fJ^E4%)Fe;Ja9h2@EX`Zkl+F(xa`anB1_D);&}9N0Q^;PUTF?^`Wbs23>nkW z%}GrxCYZ0lZq7?BN6dVI!Vtr2NZ|wWAhdABk{yv0f{lh27&w~eU?m^}K^YG`Jqd0D z#TO(NCFX)0f)SZu9Z(N~XAiKdLU#qUj)Be5VK0=>My28*Nd;UXAZIuD&@oXqrxnK+ zB$j|j5%2{n)LS|6NzihWKtCC*9(BeN@sK)1I(w zFdIn=R5dinarg?{*a9!}fX?1wm@4+rXj4fcxjF6-YGKffjlqG_TYz)=NjZt{mV3ayw z7lEZSt01ck;0EEZD)Q6Pic?GS(?Bl8s4kGa3~6A2XZ`R8BiJR-!URXLj$|xYb!L7s zxGe>814gieRe+k`x+(dkNsw7nxZhwc46q`w_w_+(g2;L`xu5_%GYYM)P^`xvYM=_X zpagve9_AWw%M5c23?_}_eNYZb&d*COEh`iBC+z-VH@^G1z3V*9k1CgLJk*VTuu3NXFrAO=)X``)R}sGJ)L$YAC|G z)gW6j5)zWFa1F`%d61%nC>@|>B=O*Na6~BwMQmz8NqllfDrBk!!$}Yyf(#=ojKE2q zlu`E5yv)MVRGcd|puqxeXyulcq!JuG2Wx;VMZujK(8C>4GNKN2VsCN5$5ilz4x~YZ zzf1yUGw{$A_5J>vKHf3J-`CSQKFHO_)iKyrlYxOzRY28+2}Dj~_z!Z%{|yc7{+9*T9EKYo z#Q5me)XMpACqSJY?jPh5 d@4>*ppo3vQiV99c1_nl10a+U+5a|Fh6#yB8!W94j literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++allocator.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++allocator.h new file mode 100644 index 0000000..7f69320 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++allocator.h @@ -0,0 +1,64 @@ +// Base to std::allocator -*- C++ -*- + +// Copyright (C) 2004-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/c++allocator.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _GLIBCXX_CXX_ALLOCATOR_H +#define _GLIBCXX_CXX_ALLOCATOR_H 1 + +#include + +#if __cplusplus >= 201103L +namespace std +{ + /** + * @brief An alias to the base class for std::allocator. + * + * Used to set the std::allocator base class to std::__new_allocator. + * + * @ingroup allocators + * @tparam _Tp Type of allocated object. + */ + template + using __allocator_base = __new_allocator<_Tp>; +} +#else +// Define __new_allocator as the base class to std::allocator. +# define __allocator_base __new_allocator +#endif + +#ifndef _GLIBCXX_SANITIZE_STD_ALLOCATOR +# if defined(__SANITIZE_ADDRESS__) +# define _GLIBCXX_SANITIZE_STD_ALLOCATOR 1 +# elif defined __has_feature +# if __has_feature(address_sanitizer) +# define _GLIBCXX_SANITIZE_STD_ALLOCATOR 1 +# endif +# endif +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++allocator.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++allocator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..df9861876a9942d04a836be23e2172614594f779 GIT binary patch literal 12913 zcmdO5_$PB#_%ahCgMMyaiGERHW{Q46QGQlxa!Ij%N^yaHMq*KJeqLsBA`+{(C>g=i z%P1&dU{20S%uA=t4BhhlqU_APblsH9qSWM){Gv)*65Pb__aB3PX>pN$W?phmX-cYo za!F-Ds$K@eznE^}%cwHi+WLm3dPaJN`bn83#rlakIr+))B}IvuCB+~Opa4P909FMu zu2?@lJ~yejB(Wqlz67KcpV`GFDXA67sRbpFAVx7UCo?HCuOtVn5oxK3C8b5FV5i_S zzrw;S-poX|AXzsjGq1ElH$ATu;-CED_>|PN%shw@7`{nHc)z%$C^a!RsWc6X6OojG z{a;*Cl$n>FR-OWKG=`yIB}tVfsm0}q1t1mpTn<*853yXYBsm$2?O-K|CHc9T$?@fx zDXH2gMY==tTEfaz;^pUOvcV3~ym7O)N^z&nqLOxVW;oBsDia zwWuh+2+4OjnMwNKoT6`J2v4ZRB`KMC;MA05&Ul%GBoE4lr6rj;#rkE5Mc{1s&uNb~ z&a|GHUz}E+g5(-lPARS|)=y4JO~anzz%c;|(qjGMlA_Y&l6W^yA6HNS;EUpd;*uPF z5D}l8pO==I4pNU1x=2PR=jUfnJSE2Puc7d#vt9*HK!WS{x6xD8DE^u_zrJqy%ls$xlwqNsUj= zNh~fVoN0>^OEUAZL?cqb#K)%<81yy`}ab|jPDtd5XEluL%i%U{cQq$tglQR;b znFCy|fa*s4I*K!^pw${&1FVQZ3b^EQaLtM(0U{{^J0229nfZA*vmB`80Yw)$PH}`l zW^SsP3GNUo&CDyw)6Gmt%`3?)sl=)d-Cgh;3Q~=cMA22J72`~FiN(3P>8W|CMVZO^ znRz9;IXMuQUNR%l;z+KjNKDF%Ps=Y##*tBq^HS0>bHMGFRWn~*L}@%g0yi%uGcgb3 z103O2S&#~9u0YEcaQ%Xz65MdmFUT*>tcZul1BUCt_Lb)srGOF$RvXd73{qysmu04w zOB3M;%YDrcu_Vx^@xm8?JnpCU{iF6E)Bo^oDrxq1KS{4M|18EH{H#O#A0xo#ZZdmKCn-6Q*-l+Dv?{0q;)?E za!S)P^NRJ0Gt=`DbK=3dFtH@R2txqUE}BuNhqGM-b`Lb0q$MV&;^+h*`5+lwwh|G% z(0rbmmst`Ij~1*!jbwUCYEo&sKBy^B1a1dmRS$M_D!2^DOD)D;eu5Gp?#M&3F&UC? z@OucP2y43ol$9avSA3}w>|oST#@_Nrc2|BLsQ*-q#bF@75mj!113(|rATl!{+~6oF zEyzj5Vj+^Vk}^y1E5O+^OV-xL(;P;!A~PSGr;!vO1t)SQ0#))@>TIy;;*7*1Nb@%y zmQ8UKdXQ#*QF%^&ayBUS5sX)q!W4V7Ldp_wYZBZ+11DL0#RR@Ugrp;o)3Ey>Co?Ho zHzPGMCACPmxFoR%d+i4fmE?j_-Qra23edwF)RY4^|1$HzH7|C{3raGIQWI0a2~Rh% zC>h+W#217)nYo!I#Kd<|VqSV`d}4AkG{*I41lZ(LZOSm>%#UiBa%FHju(eOe_ z&&jxYK434ECuWwUCkr3H|LxuKpwLkixGjn6DeEdn*kKu*AL zB9hl|rsw2>Qep=(L5-7~%p@$C6uFH`sKG#tqtZ((BV&lEmcf_}t7q-IU6_#N5neto}mQ0&+gM z03*xyu+irHBJg+@+)J>618fs0lY_?pOR?JnR+E;KpIDNoo1CAU3u!0da}J_9EsD>{ zEXLNdL{7q_r7Kt#1ji|OWEJde99{#LZo1&U4ep=@Rhh($1As;^Afw<|@(6lLD#$N} z#~pUZfu;46K`l~9+QAp5;8=k4Fyo6-i}Op1lCigNzzQKoL(5jwDhVa(A?o6Z8vX_~ zLcqgJ_?jTd@d|QDL26M>ejd0g0GAr171@a?i3KI8Mfy-0Qe1aULTg8W?18kuVbxG3 zC`OBl3sSM?FZ8HF^ddlM1S7JLl;bRBKt(84%@D_B=7J*&Uj%1DY8fI@7Ifqld!Gbi zA9$b)(ssfg`$&F*j2B_C7k92f(hW+!iA3}+K{G8m@cI*ydBLd9tiUEz$f~0d&;~^azNV^|w7jm->$)DhG%}WK%0uVp!k({5B znp}ph`~w>Y_CIKJ2Xh=8mP^rHPzD(=1ceN~bP6^eR0}8Or03)886z1EYHVcYVRI?8 z>H^t_5k9bKU0qOq!!cxtWC_mP11_cGGxKsX^T7E8!)svwK!OXD;IcDQh%7PFisRA8 z67W~&d8IkvDQxWZIAmN%Hzzf*m|(sFyE!kl95H(a3PTL9A%zdfgV4eiOLjz32sRp8 zVBl!tgOz{`1Z6z%6eqYH61*8zY>42P4(8Db^zYKf9fvyl*B7-c(h*6NGsO^Xn z>^TM9Q0OR5d}dy8Dr8&^!)zoiP}R^N$Kfk*V+*`g1UdtVVIst};9)skNCQR}oZUfQ z!$@Zk#o$%}bio6t#3rVJl$oEKn3q|A-?fn8eJ}~K9>c9jz6ZMmF+PDUGeVLs$RHy9 zQI-fUvN2R6H%8%MgHh^$T?CfStb(jmfE$Frs>n}ED^4xRPXoCWqq;!yGNge8o;k!H zj9`~Q3lkj0I+C$q)tULl;I!#$FCP8Li;eLa)Fu;ny-q#1E2_oy& z?*XnLa`oysDUcjf)eyue3)y%Ei=qxFgKxI^Zd`>2D`MyyBNZ~!g5e}^Co&Oa7(Vae zY%GFPDJg^OrFof!rKva11dsNB zA{HZ86_=#sWF~>6@cAkk>~|zzVYL@BvkNi{!y0hZKngRQEBe4{Anwrx=QNN>AXhOu zpe#v24;S>NJhK6VF^?I8C4(h{wEzRle~OdWWc?-i5bbD=02$(tnU`LaUs|95*I3M@;7|hY zgeZW5ML{8?vLICWRO;fq z&B2gJuBb4yw6p+=qv%LUElJGGQ9w1kEU_pvF|P!qnv;{0Q(s@fSzFuCoU0buO+~3W zphaCEMaaS>MTRI&EyzhsPR+>A0S&i<)gpXVl$xGe0qQY8=GxF?L4Jg|O`#Um=8_^K zuv#RKq@*Ti<|ab?jU)_Nl?+mhsW80sLth({<_sD(!gHs$%b1v#k|M5~837l}0. + +/** @file bits/c++config.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{version} + */ + +#ifndef _GLIBCXX_CXX_CONFIG_H +#define _GLIBCXX_CXX_CONFIG_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wvariadic-macros" +#if __cplusplus +#pragma GCC diagnostic ignored "-Wc++11-extensions" +#pragma GCC diagnostic ignored "-Wc++23-extensions" // bf16 +#endif + +// The major release number for the GCC release the C++ library belongs to. +#define _GLIBCXX_RELEASE 15 + +// The datestamp of the C++ library in compressed ISO date format. +#undef __GLIBCXX__ /* The testsuite defines it to 99999999 to block PCH. */ +#define __GLIBCXX__ 20260209 + +// Macros for various attributes. +// _GLIBCXX_PURE +// _GLIBCXX_CONST +// _GLIBCXX_NORETURN +// _GLIBCXX_NOTHROW +// _GLIBCXX_VISIBILITY +#ifndef _GLIBCXX_PURE +# define _GLIBCXX_PURE __attribute__ ((__pure__)) +#endif + +#ifndef _GLIBCXX_CONST +# define _GLIBCXX_CONST __attribute__ ((__const__)) +#endif + +#ifndef _GLIBCXX_NORETURN +# define _GLIBCXX_NORETURN __attribute__ ((__noreturn__)) +#endif + +// See below for C++ +#ifndef _GLIBCXX_NOTHROW +# ifndef __cplusplus +# define _GLIBCXX_NOTHROW __attribute__((__nothrow__)) +# endif +#endif + +// Macros for visibility attributes. +// _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY +// _GLIBCXX_VISIBILITY +# define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 1 + +#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY +# define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V))) +#else +// If this is not supplied by the OS-specific or CPU-specific +// headers included below, it will be defined to an empty default. +# define _GLIBCXX_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY(V) +#endif + +// Macros for deprecated attributes. +// _GLIBCXX_USE_DEPRECATED +// _GLIBCXX_DEPRECATED +// _GLIBCXX_DEPRECATED_SUGGEST( string-literal ) +// _GLIBCXX11_DEPRECATED +// _GLIBCXX11_DEPRECATED_SUGGEST( string-literal ) +// _GLIBCXX14_DEPRECATED +// _GLIBCXX14_DEPRECATED_SUGGEST( string-literal ) +// _GLIBCXX17_DEPRECATED +// _GLIBCXX17_DEPRECATED_SUGGEST( string-literal ) +// _GLIBCXX20_DEPRECATED +// _GLIBCXX20_DEPRECATED_SUGGEST( string-literal ) +// _GLIBCXX23_DEPRECATED +// _GLIBCXX23_DEPRECATED_SUGGEST( string-literal ) +// _GLIBCXX26_DEPRECATED +// _GLIBCXX26_DEPRECATED_SUGGEST( string-literal ) +#ifndef _GLIBCXX_USE_DEPRECATED +# define _GLIBCXX_USE_DEPRECATED 1 +#endif + +#if defined(__DEPRECATED) +# define _GLIBCXX_DEPRECATED __attribute__ ((__deprecated__)) +# define _GLIBCXX_DEPRECATED_SUGGEST(ALT) \ + __attribute__ ((__deprecated__ ("use '" ALT "' instead"))) +#else +# define _GLIBCXX_DEPRECATED +# define _GLIBCXX_DEPRECATED_SUGGEST(ALT) +#endif + +#if defined(__DEPRECATED) && (__cplusplus >= 201103L) +# define _GLIBCXX11_DEPRECATED _GLIBCXX_DEPRECATED +# define _GLIBCXX11_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT) +#else +# define _GLIBCXX11_DEPRECATED +# define _GLIBCXX11_DEPRECATED_SUGGEST(ALT) +#endif + +#if defined(__DEPRECATED) && (__cplusplus >= 201402L) +# define _GLIBCXX14_DEPRECATED _GLIBCXX_DEPRECATED +# define _GLIBCXX14_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT) +#else +# define _GLIBCXX14_DEPRECATED +# define _GLIBCXX14_DEPRECATED_SUGGEST(ALT) +#endif + +#if defined(__DEPRECATED) && (__cplusplus >= 201703L) +# define _GLIBCXX17_DEPRECATED [[__deprecated__]] +# define _GLIBCXX17_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT) +#else +# define _GLIBCXX17_DEPRECATED +# define _GLIBCXX17_DEPRECATED_SUGGEST(ALT) +#endif + +#if defined(__DEPRECATED) && (__cplusplus >= 202002L) +# define _GLIBCXX20_DEPRECATED [[__deprecated__]] +# define _GLIBCXX20_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT) +#else +# define _GLIBCXX20_DEPRECATED +# define _GLIBCXX20_DEPRECATED_SUGGEST(ALT) +#endif + +#if defined(__DEPRECATED) && (__cplusplus >= 202100L) +# define _GLIBCXX23_DEPRECATED [[__deprecated__]] +# define _GLIBCXX23_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT) +#else +# define _GLIBCXX23_DEPRECATED +# define _GLIBCXX23_DEPRECATED_SUGGEST(ALT) +#endif + +#if defined(__DEPRECATED) && (__cplusplus >= 202400L) +# define _GLIBCXX26_DEPRECATED [[__deprecated__]] +# define _GLIBCXX26_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT) +#else +# define _GLIBCXX26_DEPRECATED +# define _GLIBCXX26_DEPRECATED_SUGGEST(ALT) +#endif + +// Macros for ABI tag attributes. +#ifndef _GLIBCXX_ABI_TAG_CXX11 +# define _GLIBCXX_ABI_TAG_CXX11 __attribute ((__abi_tag__ ("cxx11"))) +#endif + +// Macro to warn about unused results. +#if __cplusplus >= 201103L +# define _GLIBCXX_NODISCARD [[__nodiscard__]] +#else +# define _GLIBCXX_NODISCARD +#endif + + + +#if __cplusplus + +// Macro for constexpr, to support in mixed 03/0x mode. +#ifndef _GLIBCXX_CONSTEXPR +# if __cplusplus >= 201103L +# define _GLIBCXX_CONSTEXPR constexpr +# define _GLIBCXX_USE_CONSTEXPR constexpr +# else +# define _GLIBCXX_CONSTEXPR +# define _GLIBCXX_USE_CONSTEXPR const +# endif +#endif + +#ifndef _GLIBCXX14_CONSTEXPR +# if __cplusplus >= 201402L +# define _GLIBCXX14_CONSTEXPR constexpr +# else +# define _GLIBCXX14_CONSTEXPR +# endif +#endif + +#ifndef _GLIBCXX17_CONSTEXPR +# if __cplusplus >= 201703L +# define _GLIBCXX17_CONSTEXPR constexpr +# else +# define _GLIBCXX17_CONSTEXPR +# endif +#endif + +#ifndef _GLIBCXX20_CONSTEXPR +# if __cplusplus >= 202002L +# define _GLIBCXX20_CONSTEXPR constexpr +# else +# define _GLIBCXX20_CONSTEXPR +# endif +#endif + +#ifndef _GLIBCXX23_CONSTEXPR +# if __cplusplus >= 202100L +# define _GLIBCXX23_CONSTEXPR constexpr +# else +# define _GLIBCXX23_CONSTEXPR +# endif +#endif + +#ifndef _GLIBCXX26_CONSTEXPR +# if __cplusplus >= 202400L +# define _GLIBCXX26_CONSTEXPR constexpr +# else +# define _GLIBCXX26_CONSTEXPR +# endif +#endif + +#ifndef _GLIBCXX17_INLINE +# if __cplusplus >= 201703L +# define _GLIBCXX17_INLINE inline +# else +# define _GLIBCXX17_INLINE +# endif +#endif + +// Macro for noexcept, to support in mixed 03/0x mode. +#ifndef _GLIBCXX_NOEXCEPT +# if __cplusplus >= 201103L +# define _GLIBCXX_NOEXCEPT noexcept +# define _GLIBCXX_NOEXCEPT_IF(...) noexcept(__VA_ARGS__) +# define _GLIBCXX_USE_NOEXCEPT noexcept +# define _GLIBCXX_THROW(_EXC) +# else +# define _GLIBCXX_NOEXCEPT +# define _GLIBCXX_NOEXCEPT_IF(...) +# define _GLIBCXX_USE_NOEXCEPT throw() +# define _GLIBCXX_THROW(_EXC) throw(_EXC) +# endif +#endif + +#ifndef _GLIBCXX_NOTHROW +# define _GLIBCXX_NOTHROW _GLIBCXX_USE_NOEXCEPT +#endif + +#ifndef _GLIBCXX_THROW_OR_ABORT +# if __cpp_exceptions +# define _GLIBCXX_THROW_OR_ABORT(_EXC) (throw (_EXC)) +# else +# define _GLIBCXX_THROW_OR_ABORT(_EXC) (__builtin_abort(), (void)(_EXC)) +# endif +#endif + +#if __cpp_noexcept_function_type +#define _GLIBCXX_NOEXCEPT_PARM , bool _NE +#define _GLIBCXX_NOEXCEPT_QUAL noexcept (_NE) +#else +#define _GLIBCXX_NOEXCEPT_PARM +#define _GLIBCXX_NOEXCEPT_QUAL +#endif + +// Macro for extern template, ie controlling template linkage via use +// of extern keyword on template declaration. As documented in the g++ +// manual, it inhibits all implicit instantiations and is used +// throughout the library to avoid multiple weak definitions for +// required types that are already explicitly instantiated in the +// library binary. This substantially reduces the binary size of +// resulting executables. +// Special case: _GLIBCXX_EXTERN_TEMPLATE == -1 disallows extern +// templates only in basic_string, thus activating its debug-mode +// checks even at -O0. +# define _GLIBCXX_EXTERN_TEMPLATE 1 + +/* + Outline of libstdc++ namespaces. + + namespace std + { + namespace __debug { } + namespace __parallel { } + namespace __cxx1998 { } + + namespace __detail { + namespace __variant { } // C++17 + } + + namespace rel_ops { } + + namespace tr1 + { + namespace placeholders { } + namespace regex_constants { } + namespace __detail { } + } + + namespace tr2 { } + + namespace decimal { } + + namespace chrono { } // C++11 + namespace placeholders { } // C++11 + namespace regex_constants { } // C++11 + namespace this_thread { } // C++11 + inline namespace literals { // C++14 + inline namespace chrono_literals { } // C++14 + inline namespace complex_literals { } // C++14 + inline namespace string_literals { } // C++14 + inline namespace string_view_literals { } // C++17 + } + } + + namespace abi { } + + namespace __gnu_cxx + { + namespace __detail { } + } + + For full details see: + http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html +*/ +namespace std +{ + typedef __SIZE_TYPE__ size_t; + typedef __PTRDIFF_TYPE__ ptrdiff_t; + +#if __cplusplus >= 201103L + typedef decltype(nullptr) nullptr_t; +#endif + +#pragma GCC visibility push(default) + // This allows the library to terminate without including all of + // and without making the declaration of std::terminate visible to users. + extern "C++" __attribute__ ((__noreturn__, __always_inline__)) + inline void __terminate() _GLIBCXX_USE_NOEXCEPT + { + void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__,__cold__)); + terminate(); + } +#pragma GCC visibility pop +} + +# define _GLIBCXX_USE_DUAL_ABI 1 + +#if ! _GLIBCXX_USE_DUAL_ABI +// Ignore any pre-defined value of _GLIBCXX_USE_CXX11_ABI +# undef _GLIBCXX_USE_CXX11_ABI +#endif + +#ifndef _GLIBCXX_USE_CXX11_ABI +# define _GLIBCXX_USE_CXX11_ABI 1 +#endif + +#if _GLIBCXX_USE_CXX11_ABI +namespace std +{ + inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } +} +namespace __gnu_cxx +{ + inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } +} +# define _GLIBCXX_NAMESPACE_CXX11 __cxx11:: +# define _GLIBCXX_BEGIN_NAMESPACE_CXX11 namespace __cxx11 { +# define _GLIBCXX_END_NAMESPACE_CXX11 } +# define _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_ABI_TAG_CXX11 +#else +# define _GLIBCXX_NAMESPACE_CXX11 +# define _GLIBCXX_BEGIN_NAMESPACE_CXX11 +# define _GLIBCXX_END_NAMESPACE_CXX11 +# define _GLIBCXX_DEFAULT_ABI_TAG +#endif + +// Non-zero if inline namespaces are used for versioning the entire library. +# define _GLIBCXX_INLINE_VERSION 0 + +#if _GLIBCXX_INLINE_VERSION +// Inline namespace for symbol versioning of (nearly) everything in std. +# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __8 { +# define _GLIBCXX_END_NAMESPACE_VERSION } +// Unused when everything in std is versioned anyway. +# define _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(X) +# define _GLIBCXX_END_INLINE_ABI_NAMESPACE(X) + +namespace std +{ +inline _GLIBCXX_BEGIN_NAMESPACE_VERSION +#if __cplusplus >= 201402L + inline namespace literals { + inline namespace chrono_literals { } + inline namespace complex_literals { } + inline namespace string_literals { } +#if __cplusplus > 201402L + inline namespace string_view_literals { } +#endif // C++17 + } +#endif // C++14 +_GLIBCXX_END_NAMESPACE_VERSION +} + +namespace __gnu_cxx +{ +inline _GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_END_NAMESPACE_VERSION +} + +#else +// Unused. +# define _GLIBCXX_BEGIN_NAMESPACE_VERSION +# define _GLIBCXX_END_NAMESPACE_VERSION +// Used to version individual components, e.g. std::_V2::error_category. +# define _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(X) inline namespace X { +# define _GLIBCXX_END_INLINE_ABI_NAMESPACE(X) } // inline namespace X +#endif + +// In the case that we don't have a hosted environment, we can't provide the +// debugging mode. Instead, we do our best and downgrade to assertions. +#if defined(_GLIBCXX_DEBUG) && !__STDC_HOSTED__ +#undef _GLIBCXX_DEBUG +#define _GLIBCXX_ASSERTIONS 1 +#endif + +// Inline namespaces for special modes: debug, parallel. +#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL) +namespace std +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Non-inline namespace for components replaced by alternates in active mode. + namespace __cxx1998 + { +# if _GLIBCXX_USE_CXX11_ABI + inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } +# endif + } + +_GLIBCXX_END_NAMESPACE_VERSION + + // Inline namespace for debug mode. +# ifdef _GLIBCXX_DEBUG + inline namespace __debug { } +# endif + + // Inline namespaces for parallel mode. +# ifdef _GLIBCXX_PARALLEL + inline namespace __parallel { } +# endif +} + +// Check for invalid usage and unsupported mixed-mode use. +# if defined(_GLIBCXX_DEBUG) && defined(_GLIBCXX_PARALLEL) +# error illegal use of multiple inlined namespaces +# endif + +// Check for invalid use due to lack for weak symbols. +# if __NO_INLINE__ && !__GXX_WEAK__ +# warning currently using inlined namespace mode which may fail \ + without inlining due to lack of weak symbols +# endif +#endif + +// Macros for namespace scope. Either namespace std:: or the name +// of some nested namespace within it corresponding to the active mode. +// _GLIBCXX_STD_A +// _GLIBCXX_STD_C +// +// Macros for opening/closing conditional namespaces. +// _GLIBCXX_BEGIN_NAMESPACE_ALGO +// _GLIBCXX_END_NAMESPACE_ALGO +// _GLIBCXX_BEGIN_NAMESPACE_CONTAINER +// _GLIBCXX_END_NAMESPACE_CONTAINER +#if defined(_GLIBCXX_DEBUG) +# define _GLIBCXX_STD_C __cxx1998 +# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER \ + namespace _GLIBCXX_STD_C { +# define _GLIBCXX_END_NAMESPACE_CONTAINER } +#else +# define _GLIBCXX_STD_C std +# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER +# define _GLIBCXX_END_NAMESPACE_CONTAINER +#endif + +#ifdef _GLIBCXX_PARALLEL +# define _GLIBCXX_STD_A __cxx1998 +# define _GLIBCXX_BEGIN_NAMESPACE_ALGO \ + namespace _GLIBCXX_STD_A { +# define _GLIBCXX_END_NAMESPACE_ALGO } +#else +# define _GLIBCXX_STD_A std +# define _GLIBCXX_BEGIN_NAMESPACE_ALGO +# define _GLIBCXX_END_NAMESPACE_ALGO +#endif + +// GLIBCXX_ABI Deprecated +// Define if compatibility should be provided for -mlong-double-64. +#undef _GLIBCXX_LONG_DOUBLE_COMPAT + +// Use an alternate macro to test for clang, so as to provide an easy +// workaround for systems (such as vxworks) whose headers require +// __clang__ to be defined, even when compiling with GCC. +#if !defined _GLIBCXX_CLANG && defined __clang__ +# define _GLIBCXX_CLANG __clang__ +// Turn -D_GLIBCXX_CLANG=0 into -U_GLIBCXX_CLANG, so that +// _GLIBCXX_CLANG can be tested as defined, just like __clang__. +#elif !_GLIBCXX_CLANG +# undef _GLIBCXX_CLANG +#endif + +// Define if compatibility should be provided for alternative 128-bit long +// double formats. Not possible for Clang until __ibm128 is supported. +#ifndef _GLIBCXX_CLANG +#undef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT +#endif + +// Inline namespaces for long double 128 modes. +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ +namespace std +{ + // Namespaces for 128-bit IEEE long double format on 64-bit POWER LE. + inline namespace __gnu_cxx_ieee128 { } + inline namespace __gnu_cxx11_ieee128 { } +} +# define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ieee128:: +# define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ieee128 { +# define _GLIBCXX_END_NAMESPACE_LDBL } +# define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 __gnu_cxx11_ieee128:: +# define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 namespace __gnu_cxx11_ieee128 { +# define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 } + +#else // _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && IEEE128 + +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ +namespace std +{ + inline namespace __gnu_cxx_ldbl128 { } +} +# define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ldbl128:: +# define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ldbl128 { +# define _GLIBCXX_END_NAMESPACE_LDBL } +#else +# define _GLIBCXX_NAMESPACE_LDBL +# define _GLIBCXX_BEGIN_NAMESPACE_LDBL +# define _GLIBCXX_END_NAMESPACE_LDBL +#endif + +#if _GLIBCXX_USE_CXX11_ABI +# define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_NAMESPACE_CXX11 +# define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_BEGIN_NAMESPACE_CXX11 +# define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_END_NAMESPACE_CXX11 +#else +# define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_NAMESPACE_LDBL +# define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_BEGIN_NAMESPACE_LDBL +# define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_END_NAMESPACE_LDBL +#endif + +#endif // _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && IEEE128 + +namespace std +{ +#pragma GCC visibility push(default) + // Internal version of std::is_constant_evaluated(). + // This can be used without checking if the compiler supports the feature. + // The macro _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED can be used to check if + // the compiler support is present to make this function work as expected. + __attribute__((__always_inline__)) + _GLIBCXX_CONSTEXPR inline bool + __is_constant_evaluated() _GLIBCXX_NOEXCEPT + { +#if __cpp_if_consteval >= 202106L +# define _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED 1 + if consteval { return true; } else { return false; } +#elif __cplusplus >= 201103L && __has_builtin(__builtin_is_constant_evaluated) +# define _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED 1 + return __builtin_is_constant_evaluated(); +#else + return false; +#endif + } +#pragma GCC visibility pop +} + +#ifndef _GLIBCXX_ASSERTIONS +# if defined(_GLIBCXX_DEBUG) +// Debug Mode implies checking assertions. +# define _GLIBCXX_ASSERTIONS 1 +# elif ! defined(__OPTIMIZE__) && ! defined(_GLIBCXX_NO_ASSERTIONS) +// Enable assertions for unoptimized builds. +# define _GLIBCXX_ASSERTIONS 1 +# endif +#endif + +// Disable std::string explicit instantiation declarations in order to assert. +#ifdef _GLIBCXX_ASSERTIONS +# undef _GLIBCXX_EXTERN_TEMPLATE +# define _GLIBCXX_EXTERN_TEMPLATE -1 +#endif + +#define _GLIBCXX_VERBOSE_ASSERT 1 + +// Assert. +#ifdef _GLIBCXX_VERBOSE_ASSERT +namespace std +{ +#pragma GCC visibility push(default) + // Don't use because this should be unaffected by NDEBUG. + extern "C++" _GLIBCXX_NORETURN __attribute__((__cold__)) + void + __glibcxx_assert_fail /* Called when a precondition violation is detected. */ + (const char* __file, int __line, const char* __function, + const char* __condition) + _GLIBCXX_NOEXCEPT; +#pragma GCC visibility pop +} +# define _GLIBCXX_ASSERT_FAIL(_Condition) \ + std::__glibcxx_assert_fail(__FILE__, __LINE__, __PRETTY_FUNCTION__, \ + #_Condition) +#else // ! VERBOSE_ASSERT +# define _GLIBCXX_ASSERT_FAIL(_Condition) __builtin_abort() +#endif + +#if defined(_GLIBCXX_ASSERTIONS) +// When _GLIBCXX_ASSERTIONS is defined we enable runtime assertion checks. +// These checks will also be done during constant evaluation. +# define __glibcxx_assert(cond) \ + do { \ + if (__builtin_expect(!bool(cond), false)) \ + _GLIBCXX_ASSERT_FAIL(cond); \ + } while (false) +#elif _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED +// _GLIBCXX_ASSERTIONS is not defined, so assertions checks are only enabled +// during constant evaluation. This ensures we diagnose undefined behaviour +// in constant expressions. +namespace std +{ + __attribute__((__always_inline__,__visibility__("default"))) + inline void + __glibcxx_assert_fail() + { } +} +# define __glibcxx_assert(cond) \ + do { \ + if (std::__is_constant_evaluated() && !bool(cond)) \ + std::__glibcxx_assert_fail(); \ + } while (false) +#else +// _GLIBCXX_ASSERTIONS is not defined and __is_constant_evaluated() doesn't +// work so don't check any assertions. +# define __glibcxx_assert(cond) +#endif + +// Macro indicating that TSAN is in use. +#if __SANITIZE_THREAD__ +# define _GLIBCXX_TSAN 1 +#elif defined __has_feature +# if __has_feature(thread_sanitizer) +# define _GLIBCXX_TSAN 1 +# endif +#endif + +// Macros for race detectors. +// _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) and +// _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) should be used to explain +// atomic (lock-free) synchronization to race detectors: +// the race detector will infer a happens-before arc from the former to the +// latter when they share the same argument pointer. +// +// The most frequent use case for these macros (and the only case in the +// current implementation of the library) is atomic reference counting: +// void _M_remove_reference() +// { +// _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount); +// if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, -1) <= 0) +// { +// _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount); +// _M_destroy(__a); +// } +// } +// The annotations in this example tell the race detector that all memory +// accesses occurred when the refcount was positive do not race with +// memory accesses which occurred after the refcount became zero. +#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE +# define _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) +#endif +#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER +# define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) +#endif + +// Macros for C linkage: define extern "C" linkage only when using C++. +# define _GLIBCXX_BEGIN_EXTERN_C extern "C" { +# define _GLIBCXX_END_EXTERN_C } + +# define _GLIBCXX_USE_ALLOCATOR_NEW 1 + +#ifdef __SIZEOF_INT128__ +#if ! defined __GLIBCXX_TYPE_INT_N_0 && ! defined __STRICT_ANSI__ +// If __int128 is supported, we expect __GLIBCXX_TYPE_INT_N_0 to be defined +// unless the compiler is in strict mode. If it's not defined and the strict +// macro is not defined, something is wrong. +#warning "__STRICT_ANSI__ seems to have been undefined; this is not supported" +#endif +#endif + +#else // !__cplusplus +# define _GLIBCXX_BEGIN_EXTERN_C +# define _GLIBCXX_END_EXTERN_C +#endif + + +// First includes. + +// Pick up any OS-specific definitions. +#include + +// Pick up any CPU-specific definitions. +#include + +// If platform uses neither visibility nor psuedo-visibility, +// specify empty default for namespace annotation macros. +#ifndef _GLIBCXX_PSEUDO_VISIBILITY +# define _GLIBCXX_PSEUDO_VISIBILITY(V) +#endif + +// Certain function definitions that are meant to be overridable from +// user code are decorated with this macro. For some targets, this +// macro causes these definitions to be weak. +#ifndef _GLIBCXX_WEAK_DEFINITION +# define _GLIBCXX_WEAK_DEFINITION +#endif + +// By default, we assume that __GXX_WEAK__ also means that there is support +// for declaring functions as weak while not defining such functions. This +// allows for referring to functions provided by other libraries (e.g., +// libitm) without depending on them if the respective features are not used. +#ifndef _GLIBCXX_USE_WEAK_REF +# define _GLIBCXX_USE_WEAK_REF __GXX_WEAK__ +#endif + +// Conditionally enable annotations for the Transactional Memory TS on C++11. +// Most of the following conditions are due to limitations in the current +// implementation. +#if __cplusplus >= 201103L && _GLIBCXX_USE_CXX11_ABI \ + && _GLIBCXX_USE_DUAL_ABI && __cpp_transactional_memory >= 201500L \ + && !_GLIBCXX_FULLY_DYNAMIC_STRING && _GLIBCXX_USE_WEAK_REF \ + && _GLIBCXX_USE_ALLOCATOR_NEW +#define _GLIBCXX_TXN_SAFE transaction_safe +#define _GLIBCXX_TXN_SAFE_DYN transaction_safe_dynamic +#else +#define _GLIBCXX_TXN_SAFE +#define _GLIBCXX_TXN_SAFE_DYN +#endif + +#if __cplusplus > 201402L +// In C++17 mathematical special functions are in namespace std. +# define _GLIBCXX_USE_STD_SPEC_FUNCS 1 +#elif __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0 +// For C++11 and C++14 they are in namespace std when requested. +# define _GLIBCXX_USE_STD_SPEC_FUNCS 1 +#endif + +// The remainder of the prewritten config is automatic; all the +// user hooks are listed above. + +// Create a boolean flag to be used to determine if --fast-math is set. +#ifdef __FAST_MATH__ +# define _GLIBCXX_FAST_MATH 1 +#else +# define _GLIBCXX_FAST_MATH 0 +#endif + +// This marks string literals in header files to be extracted for eventual +// translation. It is primarily used for messages in thrown exceptions; see +// src/functexcept.cc. We use __N because the more traditional _N is used +// for something else under certain OSes (see BADNAMES). +#define __N(msgid) (msgid) + +// For example, is known to #define min and max as macros... +#undef min +#undef max + +// N.B. these _GLIBCXX_USE_C99_XXX macros are defined unconditionally +// so they should be tested with #if not with #ifdef. +#if __cplusplus >= 201103L +# ifndef _GLIBCXX_USE_C99_MATH +# define _GLIBCXX_USE_C99_MATH _GLIBCXX11_USE_C99_MATH +# endif +# ifndef _GLIBCXX_USE_C99_COMPLEX +# define _GLIBCXX_USE_C99_COMPLEX _GLIBCXX11_USE_C99_COMPLEX +# endif +# ifndef _GLIBCXX_USE_C99_STDIO +# define _GLIBCXX_USE_C99_STDIO _GLIBCXX11_USE_C99_STDIO +# endif +# ifndef _GLIBCXX_USE_C99_STDLIB +# define _GLIBCXX_USE_C99_STDLIB _GLIBCXX11_USE_C99_STDLIB +# endif +# ifndef _GLIBCXX_USE_C99_WCHAR +# define _GLIBCXX_USE_C99_WCHAR _GLIBCXX11_USE_C99_WCHAR +# endif +#else +# ifndef _GLIBCXX_USE_C99_MATH +# define _GLIBCXX_USE_C99_MATH _GLIBCXX98_USE_C99_MATH +# endif +# ifndef _GLIBCXX_USE_C99_COMPLEX +# define _GLIBCXX_USE_C99_COMPLEX _GLIBCXX98_USE_C99_COMPLEX +# endif +# ifndef _GLIBCXX_USE_C99_STDIO +# define _GLIBCXX_USE_C99_STDIO _GLIBCXX98_USE_C99_STDIO +# endif +# ifndef _GLIBCXX_USE_C99_STDLIB +# define _GLIBCXX_USE_C99_STDLIB _GLIBCXX98_USE_C99_STDLIB +# endif +# ifndef _GLIBCXX_USE_C99_WCHAR +# define _GLIBCXX_USE_C99_WCHAR _GLIBCXX98_USE_C99_WCHAR +# endif +#endif + +// Unless explicitly specified, enable char8_t extensions only if the core +// language char8_t feature macro is defined. +#ifndef _GLIBCXX_USE_CHAR8_T +# ifdef __cpp_char8_t +# define _GLIBCXX_USE_CHAR8_T 1 +# endif +#endif +#ifdef _GLIBCXX_USE_CHAR8_T +# define __cpp_lib_char8_t 201907L +#endif + +/* Define if __float128 is supported on this host. */ +#if defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__) +/* For powerpc64 don't use __float128 when it's the same type as long double. */ +# if !(defined(_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT) && defined(__LONG_DOUBLE_IEEE128__)) +# define _GLIBCXX_USE_FLOAT128 1 +# endif +#endif + +#if __FLT_MANT_DIG__ == 24 \ + && __FLT_MIN_EXP__ == -125 \ + && __FLT_MAX_EXP__ == 128 +// Define if float has the IEEE binary32 format. +# define _GLIBCXX_FLOAT_IS_IEEE_BINARY32 1 +#endif + +#if __DBL_MANT_DIG__ == 53 \ + && __DBL_MIN_EXP__ == -1021 \ + && __DBL_MAX_EXP__ == 1024 +// Define if double has the IEEE binary64 format. +# define _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 1 +#elif __FLT_MANT_DIG__ == 24 \ + && __FLT_MIN_EXP__ == -125 \ + && __FLT_MAX_EXP__ == 128 +// Define if double has the IEEE binary32 format. +# define _GLIBCXX_DOUBLE_IS_IEEE_BINARY32 1 +#endif + +#if __LDBL_MANT_DIG__ == 113 \ + && __LDBL_MIN_EXP__ == -16381 \ + && __LDBL_MAX_EXP__ == 16384 +// Define if long double has the IEEE binary128 format. +# define _GLIBCXX_LDOUBLE_IS_IEEE_BINARY128 1 +#elif __LDBL_MANT_DIG__ == 53 \ + && __LDBL_MIN_EXP__ == -1021 \ + && __LDBL_MAX_EXP__ == 1024 +// Define if long double has the IEEE binary64 format. +# define _GLIBCXX_LDOUBLE_IS_IEEE_BINARY64 1 +#elif __LDBL_MANT_DIG__ == 24 \ + && __LDBL_MIN_EXP__ == -125 \ + && __LDBL_MAX_EXP__ == 128 +// Define if long double has the IEEE binary32 format. +# define _GLIBCXX_LDOUBLE_IS_IEEE_BINARY32 1 +#endif + +#if defined __cplusplus && defined __BFLT16_DIG__ +namespace __gnu_cxx +{ + typedef __decltype(0.0bf16) __bfloat16_t; +} +#endif + +#ifdef __has_builtin +# ifdef __is_identifier +// Intel and older Clang require !__is_identifier for some built-ins: +# define _GLIBCXX_HAS_BUILTIN(B) (__has_builtin(B) || ! __is_identifier(B)) +# else +# define _GLIBCXX_HAS_BUILTIN(B) __has_builtin(B) +# endif +#endif + +#if _GLIBCXX_HAS_BUILTIN(__has_unique_object_representations) +# define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1 +#endif + +#if _GLIBCXX_HAS_BUILTIN(__is_aggregate) +# define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1 +#endif + +#if _GLIBCXX_HAS_BUILTIN(__builtin_launder) +# define _GLIBCXX_HAVE_BUILTIN_LAUNDER 1 +#endif + +// Returns 1 if _GLIBCXX_DO_NOT_USE_BUILTIN_TRAITS is not defined and the +// compiler has a corresponding built-in type trait, 0 otherwise. +// _GLIBCXX_DO_NOT_USE_BUILTIN_TRAITS can be defined to disable the use of +// built-in traits. +#ifndef _GLIBCXX_DO_NOT_USE_BUILTIN_TRAITS +# define _GLIBCXX_USE_BUILTIN_TRAIT(BT) _GLIBCXX_HAS_BUILTIN(BT) +#else +# define _GLIBCXX_USE_BUILTIN_TRAIT(BT) 0 +#endif + +// Mark code that should be ignored by the compiler, but seen by Doxygen. +#define _GLIBCXX_DOXYGEN_ONLY(X) + +// PSTL configuration + +#if __cplusplus >= 201703L +// This header is not installed for freestanding: +#if __has_include() +// Preserved here so we have some idea which version of upstream we've pulled in +// #define PSTL_VERSION 9000 + +// For now this defaults to being based on the presence of Thread Building Blocks +# ifndef _GLIBCXX_USE_TBB_PAR_BACKEND +# define _GLIBCXX_USE_TBB_PAR_BACKEND __has_include() +# endif +// This section will need some rework when a new (default) backend type is added +# if _GLIBCXX_USE_TBB_PAR_BACKEND +# define _PSTL_PAR_BACKEND_TBB +# else +# define _PSTL_PAR_BACKEND_SERIAL +# endif + +# define _PSTL_ASSERT(_Condition) __glibcxx_assert(_Condition) +# define _PSTL_ASSERT_MSG(_Condition, _Message) __glibcxx_assert(_Condition) + +#include +#endif // __has_include +#endif // C++17 + +#pragma GCC diagnostic pop + +// End of prewritten config; the settings discovered at configure time follow. +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the `acosf' function. */ +#define _GLIBCXX_HAVE_ACOSF 1 + +/* Define to 1 if you have the `acosl' function. */ +#define _GLIBCXX_HAVE_ACOSL 1 + +/* Define to 1 if you have the `aligned_alloc' function. */ +#define _GLIBCXX_HAVE_ALIGNED_ALLOC 1 + +/* Define if arc4random is available in . */ +#define _GLIBCXX_HAVE_ARC4RANDOM 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_ARPA_INET_H 1 + +/* Define to 1 if you have the `asinf' function. */ +#define _GLIBCXX_HAVE_ASINF 1 + +/* Define to 1 if you have the `asinl' function. */ +#define _GLIBCXX_HAVE_ASINL 1 + +/* Define to 1 if the target assembler supports .symver directive. */ +#define _GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE 1 + +/* Define to 1 if you have the `atan2f' function. */ +#define _GLIBCXX_HAVE_ATAN2F 1 + +/* Define to 1 if you have the `atan2l' function. */ +#define _GLIBCXX_HAVE_ATAN2L 1 + +/* Define to 1 if you have the `atanf' function. */ +#define _GLIBCXX_HAVE_ATANF 1 + +/* Define to 1 if you have the `atanl' function. */ +#define _GLIBCXX_HAVE_ATANL 1 + +/* Defined if shared_ptr reference counting should use atomic operations. */ +#define _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY 1 + +/* Define to 1 if you have the `at_quick_exit' function. */ +#define _GLIBCXX_HAVE_AT_QUICK_EXIT 1 + +/* Define if C99 float_t and double_t in should be imported in + in namespace std for C++11. */ +#define _GLIBCXX_HAVE_C99_FLT_EVAL_TYPES 1 + +/* Define to 1 if the target assembler supports thread-local storage. */ +/* #undef _GLIBCXX_HAVE_CC_TLS */ + +/* Define to 1 if you have the `ceilf' function. */ +#define _GLIBCXX_HAVE_CEILF 1 + +/* Define to 1 if you have the `ceill' function. */ +#define _GLIBCXX_HAVE_CEILL 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_COMPLEX_H 1 + +/* Define to 1 if you have the `cosf' function. */ +#define _GLIBCXX_HAVE_COSF 1 + +/* Define to 1 if you have the `coshf' function. */ +#define _GLIBCXX_HAVE_COSHF 1 + +/* Define to 1 if you have the `coshl' function. */ +#define _GLIBCXX_HAVE_COSHL 1 + +/* Define to 1 if you have the `cosl' function. */ +#define _GLIBCXX_HAVE_COSL 1 + +/* Define to 1 if you have the declaration of `strnlen', and to 0 if you + don't. */ +#define _GLIBCXX_HAVE_DECL_STRNLEN 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_DIRENT_H 1 + +/* Define if dirfd is available in . */ +#define _GLIBCXX_HAVE_DIRFD 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_ENDIAN_H 1 + +/* Define to 1 if GCC 4.6 supported std::exception_ptr for the target */ +#define _GLIBCXX_HAVE_EXCEPTION_PTR_SINCE_GCC46 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_EXECINFO_H 1 + +/* Define to 1 if you have the `expf' function. */ +#define _GLIBCXX_HAVE_EXPF 1 + +/* Define to 1 if you have the `expl' function. */ +#define _GLIBCXX_HAVE_EXPL 1 + +/* Define to 1 if you have the `fabsf' function. */ +#define _GLIBCXX_HAVE_FABSF 1 + +/* Define to 1 if you have the `fabsl' function. */ +#define _GLIBCXX_HAVE_FABSL 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_FCNTL_H 1 + +/* Define if fdopendir is available in . */ +#define _GLIBCXX_HAVE_FDOPENDIR 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_FENV_H 1 + +/* Define to 1 if you have the `finite' function. */ +#define _GLIBCXX_HAVE_FINITE 1 + +/* Define to 1 if you have the `finitef' function. */ +#define _GLIBCXX_HAVE_FINITEF 1 + +/* Define to 1 if you have the `finitel' function. */ +#define _GLIBCXX_HAVE_FINITEL 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_FLOAT_H 1 + +/* Define to 1 if you have the `floorf' function. */ +#define _GLIBCXX_HAVE_FLOORF 1 + +/* Define to 1 if you have the `floorl' function. */ +#define _GLIBCXX_HAVE_FLOORL 1 + +/* Define to 1 if you have the `fmodf' function. */ +#define _GLIBCXX_HAVE_FMODF 1 + +/* Define to 1 if you have the `fmodl' function. */ +#define _GLIBCXX_HAVE_FMODL 1 + +/* Define to 1 if you have the `fpclass' function. */ +/* #undef _GLIBCXX_HAVE_FPCLASS */ + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_FP_H */ + +/* Define to 1 if you have the `frexpf' function. */ +#define _GLIBCXX_HAVE_FREXPF 1 + +/* Define to 1 if you have the `frexpl' function. */ +#define _GLIBCXX_HAVE_FREXPL 1 + +/* Define if getentropy is available in . */ +#define _GLIBCXX_HAVE_GETENTROPY 1 + +/* Define if _Unwind_GetIPInfo is available. */ +#define _GLIBCXX_HAVE_GETIPINFO 1 + +/* Define if gets is available in before C++14. */ +#define _GLIBCXX_HAVE_GETS 1 + +/* Define to 1 if you have the `hypot' function. */ +#define _GLIBCXX_HAVE_HYPOT 1 + +/* Define to 1 if you have the `hypotf' function. */ +#define _GLIBCXX_HAVE_HYPOTF 1 + +/* Define to 1 if you have the `hypotl' function. */ +#define _GLIBCXX_HAVE_HYPOTL 1 + +/* Define if you have the iconv() function and it works. */ +#define _GLIBCXX_HAVE_ICONV 1 + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_IEEEFP_H */ + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `isinf' function. */ +/* #undef _GLIBCXX_HAVE_ISINF */ + +/* Define to 1 if you have the `isinff' function. */ +#define _GLIBCXX_HAVE_ISINFF 1 + +/* Define to 1 if you have the `isinfl' function. */ +#define _GLIBCXX_HAVE_ISINFL 1 + +/* Define to 1 if you have the `isnan' function. */ +/* #undef _GLIBCXX_HAVE_ISNAN */ + +/* Define to 1 if you have the `isnanf' function. */ +#define _GLIBCXX_HAVE_ISNANF 1 + +/* Define to 1 if you have the `isnanl' function. */ +#define _GLIBCXX_HAVE_ISNANL 1 + +/* Defined if iswblank exists. */ +#define _GLIBCXX_HAVE_ISWBLANK 1 + +/* Define if LC_MESSAGES is available in . */ +#define _GLIBCXX_HAVE_LC_MESSAGES 1 + +/* Define to 1 if you have the `ldexpf' function. */ +#define _GLIBCXX_HAVE_LDEXPF 1 + +/* Define to 1 if you have the `ldexpl' function. */ +#define _GLIBCXX_HAVE_LDEXPL 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_LIBINTL_H 1 + +/* Only used in build directory testsuite_hooks.h. */ +#define _GLIBCXX_HAVE_LIMIT_AS 1 + +/* Only used in build directory testsuite_hooks.h. */ +#define _GLIBCXX_HAVE_LIMIT_DATA 1 + +/* Only used in build directory testsuite_hooks.h. */ +#define _GLIBCXX_HAVE_LIMIT_FSIZE 1 + +/* Only used in build directory testsuite_hooks.h. */ +#define _GLIBCXX_HAVE_LIMIT_RSS 1 + +/* Only used in build directory testsuite_hooks.h. */ +#define _GLIBCXX_HAVE_LIMIT_VMEM 0 + +/* Define if link is available in . */ +#define _GLIBCXX_HAVE_LINK 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_LINK_H 1 + +/* Define if futex syscall is available. */ +#define _GLIBCXX_HAVE_LINUX_FUTEX 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_LINUX_RANDOM_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_LINUX_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_LOCALE_H 1 + +/* Define to 1 if you have the `log10f' function. */ +#define _GLIBCXX_HAVE_LOG10F 1 + +/* Define to 1 if you have the `log10l' function. */ +#define _GLIBCXX_HAVE_LOG10L 1 + +/* Define to 1 if you have the `logf' function. */ +#define _GLIBCXX_HAVE_LOGF 1 + +/* Define to 1 if you have the `logl' function. */ +#define _GLIBCXX_HAVE_LOGL 1 + +/* Define if lseek is available in . */ +#define _GLIBCXX_HAVE_LSEEK 1 + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_MACHINE_ENDIAN_H */ + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_MACHINE_PARAM_H */ + +/* Define if mbstate_t exists in wchar.h. */ +#define _GLIBCXX_HAVE_MBSTATE_T 1 + +/* Define to 1 if you have the `memalign' function. */ +#define _GLIBCXX_HAVE_MEMALIGN 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `modf' function. */ +#define _GLIBCXX_HAVE_MODF 1 + +/* Define to 1 if you have the `modff' function. */ +#define _GLIBCXX_HAVE_MODFF 1 + +/* Define to 1 if you have the `modfl' function. */ +#define _GLIBCXX_HAVE_MODFL 1 + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_NAN_H */ + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_NETDB_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_NETINET_TCP_H 1 + +/* Define if defines obsolete isinf function. */ +/* #undef _GLIBCXX_HAVE_OBSOLETE_ISINF */ + +/* Define if defines obsolete isnan function. */ +/* #undef _GLIBCXX_HAVE_OBSOLETE_ISNAN */ + +/* Define if openat is available in . */ +#define _GLIBCXX_HAVE_OPENAT 1 + +/* Define if O_NONBLOCK is defined in */ +#define _GLIBCXX_HAVE_O_NONBLOCK 1 + +/* Define if poll is available in . */ +#define _GLIBCXX_HAVE_POLL 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_POLL_H 1 + +/* Define to 1 if you have the `posix_memalign' function. */ +#define _GLIBCXX_HAVE_POSIX_MEMALIGN 1 + +/* Define to 1 if POSIX Semaphores with sem_timedwait are available in + . */ +#define _GLIBCXX_HAVE_POSIX_SEMAPHORE 1 + +/* Define to 1 if you have the `powf' function. */ +#define _GLIBCXX_HAVE_POWF 1 + +/* Define to 1 if you have the `powl' function. */ +#define _GLIBCXX_HAVE_POWL 1 + +/* Define to 1 if you have the `qfpclass' function. */ +/* #undef _GLIBCXX_HAVE_QFPCLASS */ + +/* Define to 1 if you have the `quick_exit' function. */ +#define _GLIBCXX_HAVE_QUICK_EXIT 1 + +/* Define if readlink is available in . */ +#define _GLIBCXX_HAVE_READLINK 1 + +/* Define to 1 if you have the `secure_getenv' function. */ +#define _GLIBCXX_HAVE_SECURE_GETENV 1 + +/* Define to 1 if you have the `setenv' function. */ +#define _GLIBCXX_HAVE_SETENV 1 + +/* Define to 1 if you have the `sincos' function. */ +#define _GLIBCXX_HAVE_SINCOS 1 + +/* Define to 1 if you have the `sincosf' function. */ +#define _GLIBCXX_HAVE_SINCOSF 1 + +/* Define to 1 if you have the `sincosl' function. */ +#define _GLIBCXX_HAVE_SINCOSL 1 + +/* Define to 1 if you have the `sinf' function. */ +#define _GLIBCXX_HAVE_SINF 1 + +/* Define to 1 if you have the `sinhf' function. */ +#define _GLIBCXX_HAVE_SINHF 1 + +/* Define to 1 if you have the `sinhl' function. */ +#define _GLIBCXX_HAVE_SINHL 1 + +/* Define to 1 if you have the `sinl' function. */ +#define _GLIBCXX_HAVE_SINL 1 + +/* Defined if sleep exists. */ +/* #undef _GLIBCXX_HAVE_SLEEP */ + +/* Define to 1 if you have the `sockatmark' function. */ +#define _GLIBCXX_HAVE_SOCKATMARK 1 + +/* Define to 1 if you have the `sqrtf' function. */ +#define _GLIBCXX_HAVE_SQRTF 1 + +/* Define to 1 if you have the `sqrtl' function. */ +#define _GLIBCXX_HAVE_SQRTL 1 + +/* Define if the header is supported. */ +#define _GLIBCXX_HAVE_STACKTRACE 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_STDALIGN_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_STDLIB_H 1 + +/* Define if strerror_l is available in . */ +#define _GLIBCXX_HAVE_STRERROR_L 1 + +/* Define if strerror_r is available in . */ +#define _GLIBCXX_HAVE_STRERROR_R 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_STRING_H 1 + +/* Define to 1 if you have the `strtof' function. */ +#define _GLIBCXX_HAVE_STRTOF 1 + +/* Define to 1 if you have the `strtold' function. */ +#define _GLIBCXX_HAVE_STRTOLD 1 + +/* Define to 1 if `d_type' is a member of `struct dirent'. */ +#define _GLIBCXX_HAVE_STRUCT_DIRENT_D_TYPE 1 + +/* Define if strxfrm_l is available in . */ +#define _GLIBCXX_HAVE_STRXFRM_L 1 + +/* Define if symlink is available in . */ +#define _GLIBCXX_HAVE_SYMLINK 1 + +/* Define to 1 if the target runtime linker supports binding the same symbol + to different versions. */ +#define _GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT 1 + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_SYS_FILIO_H */ + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_IPC_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_SYS_ISA_DEFS_H */ + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_SYS_MACHINE_H */ + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_RESOURCE_H 1 + +/* Define to 1 if you have a suitable header file */ +#define _GLIBCXX_HAVE_SYS_SDT_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_SEM_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_STATVFS_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_SYSINFO_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_SYS_UIO_H 1 + +/* Define if S_IFREG is available in . */ +/* #undef _GLIBCXX_HAVE_S_IFREG */ + +/* Define if S_ISREG is available in . */ +#define _GLIBCXX_HAVE_S_ISREG 1 + +/* Define to 1 if you have the `tanf' function. */ +#define _GLIBCXX_HAVE_TANF 1 + +/* Define to 1 if you have the `tanhf' function. */ +#define _GLIBCXX_HAVE_TANHF 1 + +/* Define to 1 if you have the `tanhl' function. */ +#define _GLIBCXX_HAVE_TANHL 1 + +/* Define to 1 if you have the `tanl' function. */ +#define _GLIBCXX_HAVE_TANL 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_TGMATH_H 1 + +/* Define to 1 if you have the `timespec_get' function. */ +#define _GLIBCXX_HAVE_TIMESPEC_GET 1 + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_TLHELP32_H */ + +/* Define to 1 if the target supports thread-local storage. */ +#define _GLIBCXX_HAVE_TLS 1 + +/* Define if truncate is available in . */ +#define _GLIBCXX_HAVE_TRUNCATE 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_UCHAR_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_UNISTD_H 1 + +/* Define if unlinkat is available in . */ +#define _GLIBCXX_HAVE_UNLINKAT 1 + +/* Define to 1 if you have the `uselocale' function. */ +#define _GLIBCXX_HAVE_USELOCALE 1 + +/* Defined if usleep exists. */ +/* #undef _GLIBCXX_HAVE_USLEEP */ + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_UTIME_H 1 + +/* Defined if vfwscanf exists. */ +#define _GLIBCXX_HAVE_VFWSCANF 1 + +/* Defined if vswscanf exists. */ +#define _GLIBCXX_HAVE_VSWSCANF 1 + +/* Defined if vwscanf exists. */ +#define _GLIBCXX_HAVE_VWSCANF 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_WCHAR_H 1 + +/* Defined if wcstof exists. */ +#define _GLIBCXX_HAVE_WCSTOF 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_WCTYPE_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_WINDOWS_H */ + +/* Define if writev is available in . */ +#define _GLIBCXX_HAVE_WRITEV 1 + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_XLOCALE_H */ + +/* Define to 1 if you have the `_aligned_malloc' function. */ +/* #undef _GLIBCXX_HAVE__ALIGNED_MALLOC */ + +/* Define to 1 if you have the `_wfopen' function. */ +/* #undef _GLIBCXX_HAVE__WFOPEN */ + +/* Define to 1 if you have the `__cxa_thread_atexit' function. */ +/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT */ + +/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */ +#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1 + +/* Define as const if the declaration of iconv() needs const. */ +#define _GLIBCXX_ICONV_CONST + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define _GLIBCXX_LT_OBJDIR ".libs/" + +/* Name of package */ +/* #undef _GLIBCXX_PACKAGE */ + +/* Define to the address where bug reports for this package should be sent. */ +#define _GLIBCXX_PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define _GLIBCXX_PACKAGE_NAME "package-unused" + +/* Define to the full name and version of this package. */ +#define _GLIBCXX_PACKAGE_STRING "package-unused version-unused" + +/* Define to the one symbol short name of this package. */ +#define _GLIBCXX_PACKAGE_TARNAME "libstdc++" + +/* Define to the home page for this package. */ +#define _GLIBCXX_PACKAGE_URL "" + +/* Define to the version of this package. */ +#define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused" + +/* Define to 1 if you have the ANSI C header files. */ +#define _GLIBCXX_STDC_HEADERS 1 + +/* Version number of package */ +/* #undef _GLIBCXX_VERSION */ + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _GLIBCXX_DARWIN_USE_64_BIT_INODE +# define _GLIBCXX_DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _GLIBCXX_FILE_OFFSET_BITS */ + +/* Define if C99 functions in should be used in for + C++11. Using compiler builtins for these functions requires corresponding + C99 library functions to be present. */ +#define _GLIBCXX11_USE_C99_COMPLEX 1 + +/* Define if C99 generic macros in should be imported in in + namespace std for C++11. */ +#define _GLIBCXX11_USE_C99_MATH 1 + +/* Define if C99 functions or macros in should be imported in + in namespace std for C++11. */ +#define _GLIBCXX11_USE_C99_STDIO 1 + +/* Define if C99 functions or macros in should be imported in + in namespace std for C++11. */ +#define _GLIBCXX11_USE_C99_STDLIB 1 + +/* Define if C99 functions or macros in should be imported in + in namespace std for C++11. */ +#define _GLIBCXX11_USE_C99_WCHAR 1 + +/* Define if C99 functions in should be used in for + C++98. Using compiler builtins for these functions requires corresponding + C99 library functions to be present. */ +#define _GLIBCXX98_USE_C99_COMPLEX 1 + +/* Define if C99 functions or macros in should be imported in + in namespace std for C++98. */ +#define _GLIBCXX98_USE_C99_MATH 1 + +/* Define if C99 functions or macros in should be imported in + in namespace std for C++98. */ +#define _GLIBCXX98_USE_C99_STDIO 1 + +/* Define if C99 functions or macros in should be imported in + in namespace std for C++98. */ +#define _GLIBCXX98_USE_C99_STDLIB 1 + +/* Define if C99 functions or macros in should be imported in + in namespace std for C++98. */ +#define _GLIBCXX98_USE_C99_WCHAR 1 + +/* Define if the compiler supports C++11 atomics. */ +#define _GLIBCXX_ATOMIC_BUILTINS 1 + +/* Define if global objects can be aligned to + std::hardware_destructive_interference_size. */ +#define _GLIBCXX_CAN_ALIGNAS_DESTRUCTIVE_SIZE 1 + +/* Define to use concept checking code from the boost libraries. */ +/* #undef _GLIBCXX_CONCEPT_CHECKS */ + +/* Define to 1 if a fully dynamic basic_string is wanted, 0 to disable, + undefined for platform defaults */ +#define _GLIBCXX_FULLY_DYNAMIC_STRING 0 + +/* Define if gthreads library is available. */ +#define _GLIBCXX_HAS_GTHREADS 1 + +/* Define to 1 if a full hosted library is built, or 0 if freestanding. */ +#define _GLIBCXX_HOSTED __STDC_HOSTED__ + +/* Define if compatibility should be provided for alternative 128-bit long + double formats. */ + +/* Define if compatibility should be provided for -mlong-double-64. */ + +/* Define to the letter to which size_t is mangled. */ +#define _GLIBCXX_MANGLE_SIZE_T m + +/* Define if C99 llrint and llround functions are missing from . */ +/* #undef _GLIBCXX_NO_C99_ROUNDING_FUNCS */ + +/* Defined if no way to sleep is available. */ +/* #undef _GLIBCXX_NO_SLEEP */ + +/* Define if ptrdiff_t is int. */ +/* #undef _GLIBCXX_PTRDIFF_T_IS_INT */ + +/* Define if using setrlimit to set resource limits during "make check" */ +#define _GLIBCXX_RES_LIMITS 1 + +/* Define if size_t is unsigned int. */ +/* #undef _GLIBCXX_SIZE_T_IS_UINT */ + +/* Define if static tzdata should be compiled into the library. */ +#define _GLIBCXX_STATIC_TZDATA 1 + +/* Define to the value of the EOF integer constant. */ +#define _GLIBCXX_STDIO_EOF -1 + +/* Define to the value of the SEEK_CUR integer constant. */ +#define _GLIBCXX_STDIO_SEEK_CUR 1 + +/* Define to the value of the SEEK_END integer constant. */ +#define _GLIBCXX_STDIO_SEEK_END 2 + +/* Define to use symbol versioning in the shared library. */ +#define _GLIBCXX_SYMVER 1 + +/* Define to use darwin versioning in the shared library. */ +/* #undef _GLIBCXX_SYMVER_DARWIN */ + +/* Define to use GNU versioning in the shared library. */ +#define _GLIBCXX_SYMVER_GNU 1 + +/* Define to use GNU namespace versioning in the shared library. */ +/* #undef _GLIBCXX_SYMVER_GNU_NAMESPACE */ + +/* Define to use Sun versioning in the shared library. */ +/* #undef _GLIBCXX_SYMVER_SUN */ + +/* Define if C11 functions in should be imported into namespace std + in . */ +#define _GLIBCXX_USE_C11_UCHAR_CXX11 1 + +/* Define if C99 functions or macros from , , , + , and can be used or exposed. */ +#define _GLIBCXX_USE_C99 1 + +/* Define if C99 inverse trig functions in should be used in + . Using compiler builtins for these functions requires + corresponding C99 library functions to be present. */ +#define _GLIBCXX_USE_C99_COMPLEX_ARC 1 + +/* Define if C99 functions in should be used in . + Using compiler builtins for these functions requires corresponding C99 + library functions to be present. */ +#define _GLIBCXX_USE_C99_COMPLEX_TR1 1 + +/* Define if C99 functions in should be imported in in + namespace std for C++11. */ +#define _GLIBCXX_USE_C99_CTYPE 1 + +/* Define if C99 functions in should be imported in in + namespace std::tr1. */ +#define _GLIBCXX_USE_C99_CTYPE_TR1 1 + +/* Define if C99 functions in should be imported in in + namespace std for C++11. */ +#define _GLIBCXX_USE_C99_FENV 1 + +/* Define if C99 functions in should be imported in in + namespace std::tr1. */ +#define _GLIBCXX_USE_C99_FENV_TR1 1 + +/* Define if C99 functions in should be imported in + in namespace std in C++11. */ +#define _GLIBCXX_USE_C99_INTTYPES 1 + +/* Define if C99 functions in should be imported in + in namespace std::tr1. */ +#define _GLIBCXX_USE_C99_INTTYPES_TR1 1 + +/* Define if wchar_t C99 functions in should be imported in + in namespace std in C++11. */ +#define _GLIBCXX_USE_C99_INTTYPES_WCHAR_T 1 + +/* Define if wchar_t C99 functions in should be imported in + in namespace std::tr1. */ +#define _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 1 + +/* Define if C99 functions in should be imported in in + namespace std for C++11. */ +#define _GLIBCXX_USE_C99_MATH_FUNCS 1 + +/* Define if C99 functions or macros in should be imported in + in namespace std::tr1. */ +#define _GLIBCXX_USE_C99_MATH_TR1 1 + +/* Define if C99 types in should be imported in in + namespace std for C++11. */ +#define _GLIBCXX_USE_C99_STDINT 1 + +/* Define if C99 types in should be imported in in + namespace std::tr1. */ +#define _GLIBCXX_USE_C99_STDINT_TR1 1 + +/* Define if usable chdir is available in . */ +#define _GLIBCXX_USE_CHDIR 1 + +/* Define if usable chmod is available in . */ +#define _GLIBCXX_USE_CHMOD 1 + +/* Defined if clock_gettime syscall has monotonic and realtime clock support. + */ +/* #undef _GLIBCXX_USE_CLOCK_GETTIME_SYSCALL */ + +/* Defined if clock_gettime has monotonic clock support. */ +#define _GLIBCXX_USE_CLOCK_MONOTONIC 1 + +/* Defined if clock_gettime has realtime clock support. */ +#define _GLIBCXX_USE_CLOCK_REALTIME 1 + +/* Define if copy_file_range is available in . */ +/* #undef _GLIBCXX_USE_COPY_FILE_RANGE */ + +/* Define if ISO/IEC TR 24733 decimal floating point types are supported on + this host. */ +#define _GLIBCXX_USE_DECIMAL_FLOAT 1 + +/* Define if /dev/random and /dev/urandom are available for + std::random_device. */ +#define _GLIBCXX_USE_DEV_RANDOM 1 + +/* Define if fchmod is available in . */ +#define _GLIBCXX_USE_FCHMOD 1 + +/* Define if fchmodat is available in . */ +#define _GLIBCXX_USE_FCHMODAT 1 + +/* Define if fseeko and ftello are available. */ +#define _GLIBCXX_USE_FSEEKO_FTELLO 1 + +/* Define if usable getcwd is available in . */ +#define _GLIBCXX_USE_GETCWD 1 + +/* Defined if gettimeofday is available. */ +#define _GLIBCXX_USE_GETTIMEOFDAY 1 + +/* Define if get_nprocs is available in . */ +#define _GLIBCXX_USE_GET_NPROCS 1 + +/* Define if init_priority should be used for iostream initialization. */ +#define _GLIBCXX_USE_INIT_PRIORITY_ATTRIBUTE 1 + +/* Define if LFS support is available. */ +#define _GLIBCXX_USE_LFS 1 + +/* Define if code specialized for long long should be used. */ +#define _GLIBCXX_USE_LONG_LONG 1 + +/* Define if lstat is available in . */ +#define _GLIBCXX_USE_LSTAT 1 + +/* Define if usable mkdir is available in . */ +#define _GLIBCXX_USE_MKDIR 1 + +/* Defined if nanosleep is available. */ +#define _GLIBCXX_USE_NANOSLEEP 1 + +/* Define if NLS translations are to be used. */ +#define _GLIBCXX_USE_NLS 1 + +/* Define if nl_langinfo_l should be used for std::text_encoding. */ +#define _GLIBCXX_USE_NL_LANGINFO_L 1 + +/* Define if pthreads_num_processors_np is available in . */ +/* #undef _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP */ + +/* Define if pthread_cond_clockwait is available in . */ +#define _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT 1 + +/* Define if pthread_mutex_clocklock is available in . */ +#define _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK (_GLIBCXX_TSAN==0) + +/* Define if pthread_rwlock_clockrdlock and pthread_rwlock_clockwrlock are + available in . */ +#define _GLIBCXX_USE_PTHREAD_RWLOCK_CLOCKLOCK 1 + +/* Define if POSIX read/write locks are available in . */ +#define _GLIBCXX_USE_PTHREAD_RWLOCK_T 1 + +/* Define if /dev/random and /dev/urandom are available for the random_device + of TR1 (Chapter 5.1). */ +#define _GLIBCXX_USE_RANDOM_TR1 1 + +/* Define if usable realpath is available in . */ +#define _GLIBCXX_USE_REALPATH 1 + +/* Defined if sched_yield is available. */ +#define _GLIBCXX_USE_SCHED_YIELD 1 + +/* Define if _SC_NPROCESSORS_ONLN is available in . */ +#define _GLIBCXX_USE_SC_NPROCESSORS_ONLN 1 + +/* Define if _SC_NPROC_ONLN is available in . */ +/* #undef _GLIBCXX_USE_SC_NPROC_ONLN */ + +/* Define if sendfile is available in . */ +#define _GLIBCXX_USE_SENDFILE 1 + +/* Define to restrict std::__basic_file<> to stdio APIs. */ +/* #undef _GLIBCXX_USE_STDIO_PURE */ + +/* Define if struct tm has a tm_zone member. */ +#define _GLIBCXX_USE_STRUCT_TM_TM_ZONE 1 + +/* Define if struct stat has timespec members. */ +#define _GLIBCXX_USE_ST_MTIM 1 + +/* Define if sysctl(), CTL_HW and HW_NCPU are available in . */ +/* #undef _GLIBCXX_USE_SYSCTL_HW_NCPU */ + +/* Define if obsolescent tmpnam is available in . */ +#define _GLIBCXX_USE_TMPNAM 1 + +/* Define if c8rtomb and mbrtoc8 functions in should be imported + into namespace std in for C++20. */ +#define _GLIBCXX_USE_UCHAR_C8RTOMB_MBRTOC8_CXX20 1 + +/* Define if c8rtomb and mbrtoc8 functions in should be imported + into namespace std in for -fchar8_t. */ +#define _GLIBCXX_USE_UCHAR_C8RTOMB_MBRTOC8_FCHAR8_T 1 + +/* Define if utime is available in . */ +#define _GLIBCXX_USE_UTIME 1 + +/* Define if utimensat and UTIME_OMIT are available in and + AT_FDCWD in . */ +#define _GLIBCXX_USE_UTIMENSAT 1 + +/* Define if code specialized for wchar_t should be used. */ +#define _GLIBCXX_USE_WCHAR_T 1 + +/* Defined if Sleep exists. */ +/* #undef _GLIBCXX_USE_WIN32_SLEEP */ + +/* Define if _get_osfhandle should be used for filebuf::native_handle(). */ +/* #undef _GLIBCXX_USE__GET_OSFHANDLE */ + +/* Define to 1 if a verbose library is built, or 0 otherwise. */ +#define _GLIBCXX_VERBOSE 1 + +/* Defined if as can handle rdrand. */ +#define _GLIBCXX_X86_RDRAND 1 + +/* Defined if as can handle rdseed. */ +#define _GLIBCXX_X86_RDSEED 1 + +/* Define if a directory should be searched for tzdata files. */ +#define _GLIBCXX_ZONEINFO_DIR "/usr/share/zoneinfo" + +/* Define to 1 if mutex_timedlock is available. */ +#define _GTHREAD_USE_MUTEX_TIMEDLOCK 1 + +/* Define for large files, on AIX-style hosts. */ +/* #undef _GLIBCXX_LARGE_FILES */ + +/* Define if all C++11 floating point overloads are available in . */ +#if __cplusplus >= 201103L +/* #undef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP */ +#endif + +/* Define if all C++11 integral type overloads are available in . */ +#if __cplusplus >= 201103L +/* #undef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT */ +#endif + +#endif // _GLIBCXX_CXX_CONFIG_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++config.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++config.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..45296a4e681434af4a4d26042a3197e72b61805f GIT binary patch literal 51216 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. + +/** @file bits/c++locale.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.8 Standard locale categories. +// + +// Written by Benjamin Kosnik + +#ifndef _GLIBCXX_CXX_LOCALE_H +#define _GLIBCXX_CXX_LOCALE_H 1 + +#pragma GCC system_header + +#include + +#define _GLIBCXX_C_LOCALE_GNU 1 + +#define _GLIBCXX_NUM_CATEGORIES 6 + +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + extern "C" __typeof(uselocale) __uselocale; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + typedef __locale_t __c_locale; + +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ +namespace __gnu_cxx_ieee128 { +#endif + + // Convert numeric value of type double and long double to string and + // return length of string. If vsnprintf is available use it, otherwise + // fall back to the unsafe vsprintf which, in general, can be dangerous + // and should be avoided. + inline int + __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)), + char* __out, + const int __size __attribute__ ((__unused__)), + const char* __fmt, ...) + { +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + __c_locale __old = __gnu_cxx::__uselocale(__cloc); +#else + char* __old = std::setlocale(LC_NUMERIC, 0); + char* __sav = 0; + if (__builtin_strcmp(__old, "C")) + { + const size_t __len = __builtin_strlen(__old) + 1; + __sav = new char[__len]; + __builtin_memcpy(__sav, __old, __len); + std::setlocale(LC_NUMERIC, "C"); + } +#endif + + __builtin_va_list __args; + __builtin_va_start(__args, __fmt); + +#if _GLIBCXX_USE_C99_STDIO + const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); +#else + const int __ret = __builtin_vsprintf(__out, __fmt, __args); +#endif + + __builtin_va_end(__args); + +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + __gnu_cxx::__uselocale(__old); +#else + if (__sav) + { + std::setlocale(LC_NUMERIC, __sav); + delete [] __sav; + } +#endif + return __ret; + } + +#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ + && defined __LONG_DOUBLE_IEEE128__ +} // namespace __gnu_cxx_ieee128 +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++locale.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@c++locale.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..fccbab89dc50606ed2dbd24592b57160989810b1 GIT binary patch literal 14458 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. + +/** @file bits/cpu_defines.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iosfwd} + */ + +#ifndef _GLIBCXX_CPU_DEFINES +#define _GLIBCXX_CPU_DEFINES 1 + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@cpu_defines.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@cpu_defines.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..9eb33f8426478b7af45b3ea2d0f788a662397eeb GIT binary patch literal 11408 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. + +/** @file bits/ctype_base.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.1 Locales +// + +// Information as gleaned from /usr/include/ctype.h + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// @brief Base class for ctype. + struct ctype_base + { + // Non-standard typedefs. + typedef const int* __to_type; + + // NB: Offsets into ctype::_M_table force a particular size + // on the mask type. Because of this, we don't use an enum. + typedef unsigned short mask; + static const mask upper = _ISupper; + static const mask lower = _ISlower; + static const mask alpha = _ISalpha; + static const mask digit = _ISdigit; + static const mask xdigit = _ISxdigit; + static const mask space = _ISspace; + static const mask print = _ISprint; + static const mask graph = _ISalpha | _ISdigit | _ISpunct; + static const mask cntrl = _IScntrl; + static const mask punct = _ISpunct; + static const mask alnum = _ISalpha | _ISdigit; +#if __cplusplus >= 201103L + static const mask blank = _ISblank; +#endif + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_base.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_base.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7992c154bcbe6e61397769f004031a759715b104 GIT binary patch literal 15486 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 PF;8J(v3Bw? literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_inline.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_inline.h new file mode 100644 index 0000000..3a33155 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_inline.h @@ -0,0 +1,76 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2000-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/ctype_inline.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.1 Locales +// + +// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*) +// functions go in ctype.cc + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + bool + ctype:: + is(mask __m, char __c) const + { return _M_table[static_cast(__c)] & __m; } + + const char* + ctype:: + is(const char* __low, const char* __high, mask* __vec) const + { + while (__low < __high) + *__vec++ = _M_table[static_cast(*__low++)]; + return __high; + } + + const char* + ctype:: + scan_is(mask __m, const char* __low, const char* __high) const + { + while (__low < __high + && !(_M_table[static_cast(*__low)] & __m)) + ++__low; + return __low; + } + + const char* + ctype:: + scan_not(mask __m, const char* __low, const char* __high) const + { + while (__low < __high + && (_M_table[static_cast(*__low)] & __m) != 0) + ++__low; + return __low; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_inline.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@ctype_inline.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f22d677d9ff2882f536aa80056c36457b0fa228d GIT binary patch literal 15264 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. + +/** @file bits/error_constants.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{system_error} + */ + +#ifndef _GLIBCXX_ERROR_CONSTANTS +#define _GLIBCXX_ERROR_CONSTANTS 1 + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + enum class errc + { + address_family_not_supported = EAFNOSUPPORT, + address_in_use = EADDRINUSE, + address_not_available = EADDRNOTAVAIL, + already_connected = EISCONN, + argument_list_too_long = E2BIG, + argument_out_of_domain = EDOM, + bad_address = EFAULT, + bad_file_descriptor = EBADF, + +#ifdef EBADMSG + bad_message = EBADMSG, +#endif + + broken_pipe = EPIPE, + connection_aborted = ECONNABORTED, + connection_already_in_progress = EALREADY, + connection_refused = ECONNREFUSED, + connection_reset = ECONNRESET, + cross_device_link = EXDEV, + destination_address_required = EDESTADDRREQ, + device_or_resource_busy = EBUSY, + directory_not_empty = ENOTEMPTY, + executable_format_error = ENOEXEC, + file_exists = EEXIST, + file_too_large = EFBIG, + filename_too_long = ENAMETOOLONG, + function_not_supported = ENOSYS, + host_unreachable = EHOSTUNREACH, + +#ifdef EIDRM + identifier_removed = EIDRM, +#endif + + illegal_byte_sequence = EILSEQ, + inappropriate_io_control_operation = ENOTTY, + interrupted = EINTR, + invalid_argument = EINVAL, + invalid_seek = ESPIPE, + io_error = EIO, + is_a_directory = EISDIR, + message_size = EMSGSIZE, + network_down = ENETDOWN, + network_reset = ENETRESET, + network_unreachable = ENETUNREACH, + no_buffer_space = ENOBUFS, + no_child_process = ECHILD, + +#ifdef ENOLINK + no_link = ENOLINK, +#endif + + no_lock_available = ENOLCK, + +#ifdef ENODATA + no_message_available = ENODATA, +#endif + + no_message = ENOMSG, + no_protocol_option = ENOPROTOOPT, + no_space_on_device = ENOSPC, + +#ifdef ENOSR + no_stream_resources = ENOSR, +#endif + + no_such_device_or_address = ENXIO, + no_such_device = ENODEV, + no_such_file_or_directory = ENOENT, + no_such_process = ESRCH, + not_a_directory = ENOTDIR, + not_a_socket = ENOTSOCK, + +#ifdef ENOSTR + not_a_stream = ENOSTR, +#endif + + not_connected = ENOTCONN, + not_enough_memory = ENOMEM, + +#ifdef ENOTSUP + not_supported = ENOTSUP, +#endif + +#ifdef ECANCELED + operation_canceled = ECANCELED, +#endif + + operation_in_progress = EINPROGRESS, + operation_not_permitted = EPERM, + operation_not_supported = EOPNOTSUPP, + operation_would_block = EWOULDBLOCK, + +#ifdef EOWNERDEAD + owner_dead = EOWNERDEAD, +#endif + + permission_denied = EACCES, + +#ifdef EPROTO + protocol_error = EPROTO, +#endif + + protocol_not_supported = EPROTONOSUPPORT, + read_only_file_system = EROFS, + resource_deadlock_would_occur = EDEADLK, + resource_unavailable_try_again = EAGAIN, + result_out_of_range = ERANGE, + +#ifdef ENOTRECOVERABLE + state_not_recoverable = ENOTRECOVERABLE, +#endif + +#ifdef ETIME + stream_timeout = ETIME, +#endif + +#ifdef ETXTBSY + text_file_busy = ETXTBSY, +#endif + + timed_out = ETIMEDOUT, + too_many_files_open_in_system = ENFILE, + too_many_files_open = EMFILE, + too_many_links = EMLINK, + too_many_symbolic_link_levels = ELOOP, + +#ifdef EOVERFLOW + value_too_large = EOVERFLOW, +#elif defined __AVR__ + value_too_large = 999, +#endif + + wrong_protocol_type = EPROTOTYPE + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@error_constants.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@error_constants.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6797ee0543f1242d17d9ce7525e6e0dafdd51de6 GIT binary patch literal 21925 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. */ + +#ifndef _GLIBCXX_GCC_GTHR_POSIX_H +#define _GLIBCXX_GCC_GTHR_POSIX_H + +/* POSIX threads specific definitions. + Easy, since the interface is just one-to-one mapping. */ + +#define __GTHREADS 1 +#define __GTHREADS_CXX0X 1 + +#include + +#if ((defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)) \ + || !defined(_GTHREAD_USE_MUTEX_TIMEDLOCK)) +# include +# if defined(_POSIX_TIMEOUTS) && _POSIX_TIMEOUTS >= 0 +# define _GTHREAD_USE_MUTEX_TIMEDLOCK 1 +# else +# define _GTHREAD_USE_MUTEX_TIMEDLOCK 0 +# endif +#endif + +#ifdef __has_attribute +# if __has_attribute(__always_inline__) +# define __GTHREAD_ALWAYS_INLINE __attribute__((__always_inline__)) +# endif +#endif +#ifndef __GTHREAD_ALWAYS_INLINE +# define __GTHREAD_ALWAYS_INLINE +#endif + +#ifdef __cplusplus +# define __GTHREAD_INLINE inline __GTHREAD_ALWAYS_INLINE +#else +# define __GTHREAD_INLINE static inline +#endif + +typedef pthread_t __gthread_t; +typedef pthread_key_t __gthread_key_t; +typedef pthread_once_t __gthread_once_t; +typedef pthread_mutex_t __gthread_mutex_t; +#ifndef __cplusplus +typedef pthread_rwlock_t __gthread_rwlock_t; +#endif +typedef pthread_mutex_t __gthread_recursive_mutex_t; +typedef pthread_cond_t __gthread_cond_t; +typedef struct timespec __gthread_time_t; + +/* POSIX like conditional variables are supported. Please look at comments + in gthr.h for details. */ +#define __GTHREAD_HAS_COND 1 + +#define __GTHREAD_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER +#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function +#ifndef __cplusplus +#define __GTHREAD_RWLOCK_INIT PTHREAD_RWLOCK_INITIALIZER +#endif +#define __GTHREAD_ONCE_INIT PTHREAD_ONCE_INIT +#if defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER) +#define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER +#elif defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) +#define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +#else +#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function +#endif +#define __GTHREAD_COND_INIT PTHREAD_COND_INITIALIZER +#define __GTHREAD_TIME_INIT {0,0} + +#ifdef _GTHREAD_USE_MUTEX_INIT_FUNC +# undef __GTHREAD_MUTEX_INIT +#endif +#ifdef _GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC +# undef __GTHREAD_RECURSIVE_MUTEX_INIT +# undef __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION +# define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function +#endif +#ifdef _GTHREAD_USE_COND_INIT_FUNC +# undef __GTHREAD_COND_INIT +# define __GTHREAD_COND_INIT_FUNCTION __gthread_cond_init_function +#endif + +#if __GXX_WEAK__ && _GLIBCXX_GTHREAD_USE_WEAK +# ifndef __gthrw_pragma +# define __gthrw_pragma(pragma) +# endif +# define __gthrw2(name,name2,type) \ + static __typeof(type) name \ + __attribute__ ((__weakref__(#name2), __copy__ (type))); \ + __gthrw_pragma(weak type) +# define __gthrw_(name) __gthrw_ ## name +#else +# define __gthrw2(name,name2,type) +# define __gthrw_(name) name +#endif + +/* Typically, __gthrw_foo is a weak reference to symbol foo. */ +#define __gthrw(name) __gthrw2(__gthrw_ ## name,name,name) + +__gthrw(pthread_once) +__gthrw(pthread_getspecific) +__gthrw(pthread_setspecific) + +__gthrw(pthread_create) +__gthrw(pthread_join) +__gthrw(pthread_equal) +__gthrw(pthread_self) +__gthrw(pthread_detach) +#ifndef __BIONIC__ +__gthrw(pthread_cancel) +#endif +__gthrw(sched_yield) + +__gthrw(pthread_mutex_lock) +__gthrw(pthread_mutex_trylock) +#if _GTHREAD_USE_MUTEX_TIMEDLOCK +__gthrw(pthread_mutex_timedlock) +#endif +__gthrw(pthread_mutex_unlock) +__gthrw(pthread_mutex_init) +__gthrw(pthread_mutex_destroy) + +__gthrw(pthread_cond_init) +__gthrw(pthread_cond_broadcast) +__gthrw(pthread_cond_signal) +__gthrw(pthread_cond_wait) +__gthrw(pthread_cond_timedwait) +__gthrw(pthread_cond_destroy) + +__gthrw(pthread_key_create) +__gthrw(pthread_key_delete) +__gthrw(pthread_mutexattr_init) +__gthrw(pthread_mutexattr_settype) +__gthrw(pthread_mutexattr_destroy) + +#ifndef __cplusplus +__gthrw(pthread_rwlock_rdlock) +__gthrw(pthread_rwlock_tryrdlock) +__gthrw(pthread_rwlock_wrlock) +__gthrw(pthread_rwlock_trywrlock) +__gthrw(pthread_rwlock_unlock) +#endif + +#if defined(_LIBOBJC) || defined(_LIBOBJC_WEAK) +/* Objective-C. */ +__gthrw(pthread_exit) +#ifdef _POSIX_PRIORITY_SCHEDULING +#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +__gthrw(sched_get_priority_max) +__gthrw(sched_get_priority_min) +#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ +#endif /* _POSIX_PRIORITY_SCHEDULING */ +__gthrw(pthread_attr_destroy) +__gthrw(pthread_attr_init) +__gthrw(pthread_attr_setdetachstate) +#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +__gthrw(pthread_getschedparam) +__gthrw(pthread_setschedparam) +#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ +#endif /* _LIBOBJC || _LIBOBJC_WEAK */ + +#if __GXX_WEAK__ && _GLIBCXX_GTHREAD_USE_WEAK + +/* On Solaris 2.6 up to 9, the libc exposes a POSIX threads interface even if + -pthreads is not specified. The functions are dummies and most return an + error value. However pthread_once returns 0 without invoking the routine + it is passed so we cannot pretend that the interface is active if -pthreads + is not specified. On Solaris 2.5.1, the interface is not exposed at all so + we need to play the usual game with weak symbols. On Solaris 10 and up, a + working interface is always exposed. On FreeBSD 6 and later, libc also + exposes a dummy POSIX threads interface, similar to what Solaris 2.6 up + to 9 does. FreeBSD >= 700014 even provides a pthread_cancel stub in libc, + which means the alternate __gthread_active_p below cannot be used there. */ + +#if defined(__FreeBSD__) || (defined(__sun) && defined(__svr4__)) + +#pragma GCC visibility push(hidden) +__GTHREAD_INLINE volatile int * +__gthread_active (void) +{ + static volatile int __gthread_active_var = -1; + return &__gthread_active_var; +} +#pragma GCC visibility pop + +__GTHREAD_INLINE void +__gthread_trigger (void) +{ + *__gthread_active () = 1; +} + +#pragma GCC visibility push(hidden) +__GTHREAD_INLINE int +__gthread_active_p (void) +{ + static pthread_mutex_t __gthread_active_mutex = PTHREAD_MUTEX_INITIALIZER; + static pthread_once_t __gthread_active_once = PTHREAD_ONCE_INIT; + + /* Avoid reading __gthread_active twice on the main code path. */ + int __gthread_active_latest_value = *__gthread_active (); + + /* This test is not protected to avoid taking a lock on the main code + path so every update of __gthread_active in a threaded program must + be atomic with regard to the result of the test. */ + if (__builtin_expect (__gthread_active_latest_value < 0, 0)) + { + if (__gthrw_(pthread_once)) + { + /* If this really is a threaded program, then we must ensure that + __gthread_active has been set to 1 before exiting this block. */ + __gthrw_(pthread_mutex_lock) (&__gthread_active_mutex); + __gthrw_(pthread_once) (&__gthread_active_once, __gthread_trigger); + __gthrw_(pthread_mutex_unlock) (&__gthread_active_mutex); + } + + /* Make sure we'll never enter this block again. */ + if (*__gthread_active () < 0) + *__gthread_active () = 0; + + __gthread_active_latest_value = *__gthread_active (); + } + + return __gthread_active_latest_value != 0; +} +#pragma GCC visibility pop + +#else /* neither FreeBSD nor Solaris */ + +/* For a program to be multi-threaded the only thing that it certainly must + be using is pthread_create. However, there may be other libraries that + intercept pthread_create with their own definitions to wrap pthreads + functionality for some purpose. In those cases, pthread_create being + defined might not necessarily mean that libpthread is actually linked + in. + + For the GNU C library, we can use a known internal name. This is always + available in the ABI, but no other library would define it. That is + ideal, since any public pthread function might be intercepted just as + pthread_create might be. __pthread_key_create is an "internal" + implementation symbol, but it is part of the public exported ABI. Also, + it's among the symbols that the static libpthread.a always links in + whenever pthread_create is used, so there is no danger of a false + negative result in any statically-linked, multi-threaded program. + + For others, we choose pthread_cancel as a function that seems unlikely + to be redefined by an interceptor library. The bionic (Android) C + library does not provide pthread_cancel, so we do use pthread_create + there (and interceptor libraries lose). */ + +#ifdef __GLIBC__ +__gthrw2(__gthrw_(__pthread_key_create), + __pthread_key_create, + pthread_key_create) +# define GTHR_ACTIVE_PROXY __gthrw_(__pthread_key_create) +#elif defined (__BIONIC__) +# define GTHR_ACTIVE_PROXY __gthrw_(pthread_create) +#else +# define GTHR_ACTIVE_PROXY __gthrw_(pthread_cancel) +#endif + +#pragma GCC visibility push(hidden) +__GTHREAD_INLINE int +__gthread_active_p (void) +{ + static void *const __gthread_active_ptr + = __extension__ (void *) >HR_ACTIVE_PROXY; + return __gthread_active_ptr != 0; +} +#pragma GCC visibility pop + +#endif /* FreeBSD or Solaris */ + +#else /* not __GXX_WEAK__ */ + +/* Similar to Solaris, HP-UX 11 for PA-RISC provides stubs for pthread + calls in shared flavors of the HP-UX C library. Most of the stubs + have no functionality. The details are described in the "libc cumulative + patch" for each subversion of HP-UX 11. There are two special interfaces + provided for checking whether an application is linked to a shared pthread + library or not. However, these interfaces aren't available in early + libpthread libraries. We also need a test that works for archive + libraries. We can't use pthread_once as some libc versions call the + init function. We also can't use pthread_create or pthread_attr_init + as these create a thread and thereby prevent changing the default stack + size. The function pthread_default_stacksize_np is available in both + the archive and shared versions of libpthread. It can be used to + determine the default pthread stack size. There is a stub in some + shared libc versions which returns a zero size if pthreads are not + active. We provide an equivalent stub to handle cases where libc + doesn't provide one. */ + +#if defined(__hppa__) && defined(__hpux__) + +#pragma GCC visibility push(hidden) +__GTHREAD_INLINE volatile int * +__gthread_active (void) +{ + static volatile int __gthread_active_var = -1; + return &__gthread_active_var; +} +#pragma GCC visibility pop + +__GTHREAD_INLINE int +__gthread_active_p (void) +{ + /* Avoid reading __gthread_active twice on the main code path. */ + int __gthread_active_latest_value = *__gthread_active (); + size_t __s; + + if (__builtin_expect (__gthread_active_latest_value < 0, 0)) + { + pthread_default_stacksize_np (0, &__s); + *__gthread_active () = __s ? 1 : 0; + __gthread_active_latest_value = *__gthread_active (); + } + + return __gthread_active_latest_value != 0; +} + +#else /* not hppa-hpux */ + +__GTHREAD_INLINE int +__gthread_active_p (void) +{ + return 1; +} + +#endif /* hppa-hpux */ + +#endif /* __GXX_WEAK__ */ + +#ifdef _LIBOBJC + +/* This is the config.h file in libobjc/ */ +#include + +#ifdef HAVE_SCHED_H +# include +#endif + +/* Key structure for maintaining thread specific storage */ +static pthread_key_t _objc_thread_storage; +static pthread_attr_t _objc_thread_attribs; + +/* Thread local storage for a single thread */ +static void *thread_local_storage = NULL; + +/* Backend initialization functions */ + +/* Initialize the threads subsystem. */ +static inline int +__gthread_objc_init_thread_system (void) +{ + if (__gthread_active_p ()) + { + /* Initialize the thread storage key. */ + if (__gthrw_(pthread_key_create) (&_objc_thread_storage, NULL) == 0) + { + /* The normal default detach state for threads is + * PTHREAD_CREATE_JOINABLE which causes threads to not die + * when you think they should. */ + if (__gthrw_(pthread_attr_init) (&_objc_thread_attribs) == 0 + && __gthrw_(pthread_attr_setdetachstate) (&_objc_thread_attribs, + PTHREAD_CREATE_DETACHED) == 0) + return 0; + } + } + + return -1; +} + +/* Close the threads subsystem. */ +static inline int +__gthread_objc_close_thread_system (void) +{ + if (__gthread_active_p () + && __gthrw_(pthread_key_delete) (_objc_thread_storage) == 0 + && __gthrw_(pthread_attr_destroy) (&_objc_thread_attribs) == 0) + return 0; + + return -1; +} + +/* Backend thread functions */ + +/* Create a new thread of execution. */ +static inline objc_thread_t +__gthread_objc_thread_detach (void (*func)(void *), void *arg) +{ + objc_thread_t thread_id; + pthread_t new_thread_handle; + + if (!__gthread_active_p ()) + return NULL; + + if (!(__gthrw_(pthread_create) (&new_thread_handle, &_objc_thread_attribs, + (void *) func, arg))) + thread_id = (objc_thread_t) new_thread_handle; + else + thread_id = NULL; + + return thread_id; +} + +/* Set the current thread's priority. */ +static inline int +__gthread_objc_thread_set_priority (int priority) +{ + if (!__gthread_active_p ()) + return -1; + else + { +#ifdef _POSIX_PRIORITY_SCHEDULING +#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING + pthread_t thread_id = __gthrw_(pthread_self) (); + int policy; + struct sched_param params; + int priority_min, priority_max; + + if (__gthrw_(pthread_getschedparam) (thread_id, &policy, ¶ms) == 0) + { + if ((priority_max = __gthrw_(sched_get_priority_max) (policy)) == -1) + return -1; + + if ((priority_min = __gthrw_(sched_get_priority_min) (policy)) == -1) + return -1; + + if (priority > priority_max) + priority = priority_max; + else if (priority < priority_min) + priority = priority_min; + params.sched_priority = priority; + + /* + * The solaris 7 and several other man pages incorrectly state that + * this should be a pointer to policy but pthread.h is universally + * at odds with this. + */ + if (__gthrw_(pthread_setschedparam) (thread_id, policy, ¶ms) == 0) + return 0; + } +#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ +#endif /* _POSIX_PRIORITY_SCHEDULING */ + return -1; + } +} + +/* Return the current thread's priority. */ +static inline int +__gthread_objc_thread_get_priority (void) +{ +#ifdef _POSIX_PRIORITY_SCHEDULING +#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING + if (__gthread_active_p ()) + { + int policy; + struct sched_param params; + + if (__gthrw_(pthread_getschedparam) (__gthrw_(pthread_self) (), &policy, ¶ms) == 0) + return params.sched_priority; + else + return -1; + } + else +#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ +#endif /* _POSIX_PRIORITY_SCHEDULING */ + return OBJC_THREAD_INTERACTIVE_PRIORITY; +} + +/* Yield our process time to another thread. */ +static inline void +__gthread_objc_thread_yield (void) +{ + if (__gthread_active_p ()) + __gthrw_(sched_yield) (); +} + +/* Terminate the current thread. */ +static inline int +__gthread_objc_thread_exit (void) +{ + if (__gthread_active_p ()) + /* exit the thread */ + __gthrw_(pthread_exit) (&__objc_thread_exit_status); + + /* Failed if we reached here */ + return -1; +} + +/* Returns an integer value which uniquely describes a thread. */ +static inline objc_thread_t +__gthread_objc_thread_id (void) +{ + if (__gthread_active_p ()) + return (objc_thread_t) __gthrw_(pthread_self) (); + else + return (objc_thread_t) 1; +} + +/* Sets the thread's local storage pointer. */ +static inline int +__gthread_objc_thread_set_data (void *value) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_setspecific) (_objc_thread_storage, value); + else + { + thread_local_storage = value; + return 0; + } +} + +/* Returns the thread's local storage pointer. */ +static inline void * +__gthread_objc_thread_get_data (void) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_getspecific) (_objc_thread_storage); + else + return thread_local_storage; +} + +/* Backend mutex functions */ + +/* Allocate a mutex. */ +static inline int +__gthread_objc_mutex_allocate (objc_mutex_t mutex) +{ + if (__gthread_active_p ()) + { + mutex->backend = objc_malloc (sizeof (pthread_mutex_t)); + + if (__gthrw_(pthread_mutex_init) ((pthread_mutex_t *) mutex->backend, NULL)) + { + objc_free (mutex->backend); + mutex->backend = NULL; + return -1; + } + } + + return 0; +} + +/* Deallocate a mutex. */ +static inline int +__gthread_objc_mutex_deallocate (objc_mutex_t mutex) +{ + if (__gthread_active_p ()) + { + int count; + + /* + * Posix Threads specifically require that the thread be unlocked + * for __gthrw_(pthread_mutex_destroy) to work. + */ + + do + { + count = __gthrw_(pthread_mutex_unlock) ((pthread_mutex_t *) mutex->backend); + if (count < 0) + return -1; + } + while (count); + + if (__gthrw_(pthread_mutex_destroy) ((pthread_mutex_t *) mutex->backend)) + return -1; + + objc_free (mutex->backend); + mutex->backend = NULL; + } + return 0; +} + +/* Grab a lock on a mutex. */ +static inline int +__gthread_objc_mutex_lock (objc_mutex_t mutex) +{ + if (__gthread_active_p () + && __gthrw_(pthread_mutex_lock) ((pthread_mutex_t *) mutex->backend) != 0) + { + return -1; + } + + return 0; +} + +/* Try to grab a lock on a mutex. */ +static inline int +__gthread_objc_mutex_trylock (objc_mutex_t mutex) +{ + if (__gthread_active_p () + && __gthrw_(pthread_mutex_trylock) ((pthread_mutex_t *) mutex->backend) != 0) + { + return -1; + } + + return 0; +} + +/* Unlock the mutex */ +static inline int +__gthread_objc_mutex_unlock (objc_mutex_t mutex) +{ + if (__gthread_active_p () + && __gthrw_(pthread_mutex_unlock) ((pthread_mutex_t *) mutex->backend) != 0) + { + return -1; + } + + return 0; +} + +/* Backend condition mutex functions */ + +/* Allocate a condition. */ +static inline int +__gthread_objc_condition_allocate (objc_condition_t condition) +{ + if (__gthread_active_p ()) + { + condition->backend = objc_malloc (sizeof (pthread_cond_t)); + + if (__gthrw_(pthread_cond_init) ((pthread_cond_t *) condition->backend, NULL)) + { + objc_free (condition->backend); + condition->backend = NULL; + return -1; + } + } + + return 0; +} + +/* Deallocate a condition. */ +static inline int +__gthread_objc_condition_deallocate (objc_condition_t condition) +{ + if (__gthread_active_p ()) + { + if (__gthrw_(pthread_cond_destroy) ((pthread_cond_t *) condition->backend)) + return -1; + + objc_free (condition->backend); + condition->backend = NULL; + } + return 0; +} + +/* Wait on the condition */ +static inline int +__gthread_objc_condition_wait (objc_condition_t condition, objc_mutex_t mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_cond_wait) ((pthread_cond_t *) condition->backend, + (pthread_mutex_t *) mutex->backend); + else + return 0; +} + +/* Wake up all threads waiting on this condition. */ +static inline int +__gthread_objc_condition_broadcast (objc_condition_t condition) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_cond_broadcast) ((pthread_cond_t *) condition->backend); + else + return 0; +} + +/* Wake up one thread waiting on this condition. */ +static inline int +__gthread_objc_condition_signal (objc_condition_t condition) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_cond_signal) ((pthread_cond_t *) condition->backend); + else + return 0; +} + +#else /* _LIBOBJC */ + +__GTHREAD_INLINE int +__gthread_create (__gthread_t *__threadid, void *(*__func) (void*), + void *__args) +{ + return __gthrw_(pthread_create) (__threadid, NULL, __func, __args); +} + +__GTHREAD_INLINE int +__gthread_join (__gthread_t __threadid, void **__value_ptr) +{ + return __gthrw_(pthread_join) (__threadid, __value_ptr); +} + +__GTHREAD_INLINE int +__gthread_detach (__gthread_t __threadid) +{ + return __gthrw_(pthread_detach) (__threadid); +} + +__GTHREAD_INLINE int +__gthread_equal (__gthread_t __t1, __gthread_t __t2) +{ + return __gthrw_(pthread_equal) (__t1, __t2); +} + +__GTHREAD_INLINE __gthread_t +__gthread_self (void) +{ + return __gthrw_(pthread_self) (); +} + +__GTHREAD_INLINE int +__gthread_yield (void) +{ + return __gthrw_(sched_yield) (); +} + +__GTHREAD_INLINE int +__gthread_once (__gthread_once_t *__once, void (*__func) (void)) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_once) (__once, __func); + else + return -1; +} + +__GTHREAD_INLINE int +__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) +{ + return __gthrw_(pthread_key_create) (__key, __dtor); +} + +__GTHREAD_INLINE int +__gthread_key_delete (__gthread_key_t __key) +{ + return __gthrw_(pthread_key_delete) (__key); +} + +__GTHREAD_INLINE void * +__gthread_getspecific (__gthread_key_t __key) +{ + return __gthrw_(pthread_getspecific) (__key); +} + +__GTHREAD_INLINE int +__gthread_setspecific (__gthread_key_t __key, const void *__ptr) +{ + return __gthrw_(pthread_setspecific) (__key, __ptr); +} + +__GTHREAD_INLINE void +__gthread_mutex_init_function (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + __gthrw_(pthread_mutex_init) (__mutex, NULL); +} + +__GTHREAD_INLINE int +__gthread_mutex_destroy (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_destroy) (__mutex); + else + return 0; +} + +__GTHREAD_INLINE int +__gthread_mutex_lock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_lock) (__mutex); + else + return 0; +} + +__GTHREAD_INLINE int +__gthread_mutex_trylock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_trylock) (__mutex); + else + return 0; +} + +#if _GTHREAD_USE_MUTEX_TIMEDLOCK +__GTHREAD_INLINE int +__gthread_mutex_timedlock (__gthread_mutex_t *__mutex, + const __gthread_time_t *__abs_timeout) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_timedlock) (__mutex, __abs_timeout); + else + return 0; +} +#endif + +__GTHREAD_INLINE int +__gthread_mutex_unlock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_unlock) (__mutex); + else + return 0; +} + +#if !defined( PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) \ + || defined(_GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC) +__GTHREAD_INLINE int +__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + { + pthread_mutexattr_t __attr; + int __r; + + __r = __gthrw_(pthread_mutexattr_init) (&__attr); + if (!__r) + __r = __gthrw_(pthread_mutexattr_settype) (&__attr, + PTHREAD_MUTEX_RECURSIVE); + if (!__r) + __r = __gthrw_(pthread_mutex_init) (__mutex, &__attr); + if (!__r) + __r = __gthrw_(pthread_mutexattr_destroy) (&__attr); + return __r; + } + return 0; +} +#endif + +__GTHREAD_INLINE int +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_lock (__mutex); +} + +__GTHREAD_INLINE int +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_trylock (__mutex); +} + +#if _GTHREAD_USE_MUTEX_TIMEDLOCK +__GTHREAD_INLINE int +__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, + const __gthread_time_t *__abs_timeout) +{ + return __gthread_mutex_timedlock (__mutex, __abs_timeout); +} +#endif + +__GTHREAD_INLINE int +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_unlock (__mutex); +} + +__GTHREAD_INLINE int +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_destroy (__mutex); +} + +#ifdef _GTHREAD_USE_COND_INIT_FUNC +__GTHREAD_INLINE void +__gthread_cond_init_function (__gthread_cond_t *__cond) +{ + if (__gthread_active_p ()) + __gthrw_(pthread_cond_init) (__cond, NULL); +} +#endif + +__GTHREAD_INLINE int +__gthread_cond_broadcast (__gthread_cond_t *__cond) +{ + return __gthrw_(pthread_cond_broadcast) (__cond); +} + +__GTHREAD_INLINE int +__gthread_cond_signal (__gthread_cond_t *__cond) +{ + return __gthrw_(pthread_cond_signal) (__cond); +} + +__GTHREAD_INLINE int +__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) +{ + return __gthrw_(pthread_cond_wait) (__cond, __mutex); +} + +__GTHREAD_INLINE int +__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, + const __gthread_time_t *__abs_timeout) +{ + return __gthrw_(pthread_cond_timedwait) (__cond, __mutex, __abs_timeout); +} + +__GTHREAD_INLINE int +__gthread_cond_wait_recursive (__gthread_cond_t *__cond, + __gthread_recursive_mutex_t *__mutex) +{ + return __gthread_cond_wait (__cond, __mutex); +} + +__GTHREAD_INLINE int +__gthread_cond_destroy (__gthread_cond_t* __cond) +{ + return __gthrw_(pthread_cond_destroy) (__cond); +} + +#ifndef __cplusplus +__GTHREAD_INLINE int +__gthread_rwlock_rdlock (__gthread_rwlock_t *__rwlock) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_rwlock_rdlock) (__rwlock); + else + return 0; +} + +__GTHREAD_INLINE int +__gthread_rwlock_tryrdlock (__gthread_rwlock_t *__rwlock) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_rwlock_tryrdlock) (__rwlock); + else + return 0; +} + +__GTHREAD_INLINE int +__gthread_rwlock_wrlock (__gthread_rwlock_t *__rwlock) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_rwlock_wrlock) (__rwlock); + else + return 0; +} + +__GTHREAD_INLINE int +__gthread_rwlock_trywrlock (__gthread_rwlock_t *__rwlock) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_rwlock_trywrlock) (__rwlock); + else + return 0; +} + +__GTHREAD_INLINE int +__gthread_rwlock_unlock (__gthread_rwlock_t *__rwlock) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_rwlock_unlock) (__rwlock); + else + return 0; +} +#endif + +#endif /* _LIBOBJC */ + +#undef __GTHREAD_INLINE +#undef __GTHREAD_ALWAYS_INLINE + +#endif /* ! _GLIBCXX_GCC_GTHR_POSIX_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@gthr-default.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@gthr-default.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3eb64f47db45ceeffbe3a75170f3feacf80ea3b6 GIT binary patch literal 26325 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. */ + +#ifndef _GLIBCXX_GCC_GTHR_H +#define _GLIBCXX_GCC_GTHR_H + +#ifndef _GLIBCXX_HIDE_EXPORTS +#pragma GCC visibility push(default) +#endif + +/* If this file is compiled with threads support, it must + #define __GTHREADS 1 + to indicate that threads support is present. Also it has define + function + int __gthread_active_p () + that returns 1 if thread system is active, 0 if not. + + The threads interface must define the following types: + __gthread_key_t + __gthread_once_t + __gthread_mutex_t + __gthread_recursive_mutex_t + + The threads interface must define the following macros: + + __GTHREAD_ONCE_INIT + to initialize __gthread_once_t + __GTHREAD_MUTEX_INIT + to initialize __gthread_mutex_t to get a fast + non-recursive mutex. + __GTHREAD_MUTEX_INIT_FUNCTION + to initialize __gthread_mutex_t to get a fast + non-recursive mutex. + Define this to a function which looks like this: + void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *) + Some systems can't initialize a mutex without a + function call. Don't define __GTHREAD_MUTEX_INIT in this case. + __GTHREAD_RECURSIVE_MUTEX_INIT + __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION + as above, but for a recursive mutex. + + The threads interface must define the following static functions: + + int __gthread_once (__gthread_once_t *once, void (*func) ()) + + int __gthread_key_create (__gthread_key_t *keyp, void (*dtor) (void *)) + int __gthread_key_delete (__gthread_key_t key) + + void *__gthread_getspecific (__gthread_key_t key) + int __gthread_setspecific (__gthread_key_t key, const void *ptr) + + int __gthread_mutex_destroy (__gthread_mutex_t *mutex); + int __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex); + + int __gthread_mutex_lock (__gthread_mutex_t *mutex); + int __gthread_mutex_trylock (__gthread_mutex_t *mutex); + int __gthread_mutex_unlock (__gthread_mutex_t *mutex); + + int __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex); + int __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex); + int __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex); + + The following are supported in POSIX threads only. They are required to + fix a deadlock in static initialization inside libsupc++. The header file + gthr-posix.h defines a symbol __GTHREAD_HAS_COND to signify that these extra + features are supported. + + Types: + __gthread_cond_t + + Macros: + __GTHREAD_COND_INIT + __GTHREAD_COND_INIT_FUNCTION + + Interface: + int __gthread_cond_broadcast (__gthread_cond_t *cond); + int __gthread_cond_wait (__gthread_cond_t *cond, __gthread_mutex_t *mutex); + int __gthread_cond_wait_recursive (__gthread_cond_t *cond, + __gthread_recursive_mutex_t *mutex); + + All functions returning int should return zero on success or the error + number. If the operation is not supported, -1 is returned. + + If the following are also defined, you should + #define __GTHREADS_CXX0X 1 + to enable the c++0x thread library. + + Types: + __gthread_t + __gthread_time_t + + Interface: + int __gthread_create (__gthread_t *thread, void *(*func) (void*), + void *args); + int __gthread_join (__gthread_t thread, void **value_ptr); + int __gthread_detach (__gthread_t thread); + int __gthread_equal (__gthread_t t1, __gthread_t t2); + __gthread_t __gthread_self (void); + int __gthread_yield (void); + + int __gthread_mutex_timedlock (__gthread_mutex_t *m, + const __gthread_time_t *abs_timeout); + int __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *m, + const __gthread_time_t *abs_time); + + int __gthread_cond_signal (__gthread_cond_t *cond); + int __gthread_cond_timedwait (__gthread_cond_t *cond, + __gthread_mutex_t *mutex, + const __gthread_time_t *abs_timeout); + +*/ + +#if __GXX_WEAK__ +/* The pe-coff weak support isn't fully compatible to ELF's weak. + For static libraries it might would work, but as we need to deal + with shared versions too, we disable it for mingw-targets. */ +#ifdef __MINGW32__ +#undef _GLIBCXX_GTHREAD_USE_WEAK +#define _GLIBCXX_GTHREAD_USE_WEAK 0 +#endif + +#ifdef _GLIBCXX___GLIBC_PREREQ +#if _GLIBCXX___GLIBC_PREREQ(2, 34) && !defined(_GLIBCXX___gnu_GLIBCXX__hurd_GLIBCXX___) +/* glibc 2.34 and later has all pthread_* APIs inside of libc, + no need to link separately with -lpthread. */ +#undef _GLIBCXX_GTHREAD_USE_WEAK +#define _GLIBCXX_GTHREAD_USE_WEAK 0 +#endif +#endif + +#ifndef _GLIBCXX_GTHREAD_USE_WEAK +#define _GLIBCXX_GTHREAD_USE_WEAK 1 +#endif +#endif +#include + +#ifndef _GLIBCXX_HIDE_EXPORTS +#pragma GCC visibility pop +#endif + +#endif /* ! _GLIBCXX_GCC_GTHR_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@gthr.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@gthr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..9ab4b848d36b00da4fa645364ae8095aedc3d480 GIT binary patch literal 11518 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. + +/** @file bits/messages_members.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.2.7.1.2 messages functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Non-virtual member functions. + template + messages<_CharT>::messages(size_t __refs) + : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), + _M_name_messages(_S_get_c_name()) + { } + + template + messages<_CharT>::messages(__c_locale __cloc, const char* __s, + size_t __refs) + : facet(__refs), _M_c_locale_messages(0), _M_name_messages(0) + { + if (__builtin_strcmp(__s, _S_get_c_name()) != 0) + { + const size_t __len = __builtin_strlen(__s) + 1; + char* __tmp = new char[__len]; + __builtin_memcpy(__tmp, __s, __len); + _M_name_messages = __tmp; + } + else + _M_name_messages = _S_get_c_name(); + + // Last to avoid leaking memory if new throws. + _M_c_locale_messages = _S_clone_c_locale(__cloc); + } + + template + typename messages<_CharT>::catalog + messages<_CharT>::open(const basic_string& __s, const locale& __loc, + const char* __dir) const + { + bindtextdomain(__s.c_str(), __dir); + return this->do_open(__s, __loc); + } + + // Virtual member functions. + template + messages<_CharT>::~messages() + { + if (_M_name_messages != _S_get_c_name()) + delete [] _M_name_messages; + _S_destroy_c_locale(_M_c_locale_messages); + } + + template + typename messages<_CharT>::catalog + messages<_CharT>::do_open(const basic_string& __s, + const locale&) const + { + // No error checking is done, assume the catalog exists and can + // be used. + textdomain(__s.c_str()); + return 0; + } + + template + void + messages<_CharT>::do_close(catalog) const + { } + + // messages_byname + template + messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs) + : messages<_CharT>(__refs) + { + if (this->_M_name_messages != locale::facet::_S_get_c_name()) + { + delete [] this->_M_name_messages; + if (__builtin_strcmp(__s, locale::facet::_S_get_c_name()) != 0) + { + const size_t __len = __builtin_strlen(__s) + 1; + char* __tmp = new char[__len]; + __builtin_memcpy(__tmp, __s, __len); + this->_M_name_messages = __tmp; + } + else + this->_M_name_messages = locale::facet::_S_get_c_name(); + } + + if (__builtin_strcmp(__s, "C") != 0 + && __builtin_strcmp(__s, "POSIX") != 0) + { + this->_S_destroy_c_locale(this->_M_c_locale_messages); + this->_S_create_c_locale(this->_M_c_locale_messages, __s); + } + } + + //Specializations. + template<> + typename messages::catalog + messages::do_open(const basic_string&, + const locale&) const; + + template<> + void + messages::do_close(catalog) const; + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + typename messages::catalog + messages::do_open(const basic_string&, + const locale&) const; + + template<> + void + messages::do_close(catalog) const; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@messages_members.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@messages_members.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..48738b920ec2b2f6b9dde7b0e31c4f07965986f0 GIT binary patch literal 20235 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@os_defines.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@os_defines.h new file mode 100644 index 0000000..d55cc58 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@os_defines.h @@ -0,0 +1,90 @@ +// Specific definitions for GNU/Linux -*- C++ -*- + +// Copyright (C) 2000-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/os_defines.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iosfwd} + */ + +#ifndef _GLIBCXX_OS_DEFINES +#define _GLIBCXX_OS_DEFINES 1 + +// System-specific #define, typedefs, corrections, etc, go here. This +// file will come before all others. + +// This keeps isalnum, et al from being propagated as macros. +#define __NO_CTYPE 1 + +#include + +// Provide a declaration for the possibly deprecated gets function, as +// glibc 2.15 and later does not declare gets for ISO C11 when +// __GNU_SOURCE is defined. +#if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE) +# undef _GLIBCXX_HAVE_GETS +#endif + +// Glibc 2.23 removed the obsolete isinf and isnan declarations. Check the +// version dynamically in case it has changed since libstdc++ was configured. +#define _GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC __GLIBC_PREREQ(2,23) + +// Glibc 2.26 on i?86/x86-64/ia64/ppc64le added *f128 support. +// Glibc 2.27 added it also on many other arches but those have IEEE quad +// long double. +#if __GLIBC_PREREQ(2, 26) \ + && (defined(__i386__) || defined(__x86_64__) || defined (__ia64__) \ + || (defined(__powerpc__) && defined(_ARCH_PWR8) \ + && defined(__LITTLE_ENDIAN__) && (_CALL_ELF == 2) \ + && defined(__FLOAT128__))) +# define _GLIBCXX_HAVE_FLOAT128_MATH 1 +#endif + +// Enable __cxa_thread_atexit to rely on a (presumably libc-provided) +// __cxa_thread_atexit_impl, if it happens to be defined, even if +// configure couldn't find it during the build. +#define _GLIBCXX_MAY_HAVE___CXA_THREAD_ATEXIT_IMPL 1 + +#ifdef __linux__ +// The following libpthread properties only apply to Linux, not GNU/Hurd. + +# if __GLIBC_PREREQ(2, 27) +// Since glibc 2.27 pthread_self() is usable without linking to libpthread. +# define _GLIBCXX_NATIVE_THREAD_ID pthread_self() +# else +// Before then it was in libc.so.6 but not libc.a, and always returns 0, +// which breaks the invariant this_thread::get_id() != thread::id{}. +// So only use it if we know the libpthread version is available. +// Otherwise use (__gthread_t)1 as the ID of the main (and only) thread. +# define _GLIBCXX_NATIVE_THREAD_ID \ + (__gthread_active_p() ? __gthread_self() : (__gthread_t)1) +# endif + +# if __GLIBC_PREREQ(2, 34) +// Since glibc 2.34 all pthreads functions are usable without linking to +// libpthread. +# define _GLIBCXX_GTHREAD_USE_WEAK 0 +# endif +#endif // __linux__ + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@os_defines.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@os_defines.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..de088c9a9836892262fa3693867f914c950a4713 GIT binary patch literal 12104 zcmdO5_$PB#_%Z_{gMMyaiGERHW{Q46QGQlxa!Ij%N^yaHMq*KJeqLsBA`+{(C>g=i z%P1&dU{20S%uA=t4BhhlqU_APblsH9qSWM){Gv)*65Pb__aB3PX>pN$W?phmX-cYo za!F-Ds$K@eznE^}%cwHi+WLm3dPaJN`bn83#rlakIr+))B}IvuCB+~Opa4P909FMu zu2?@lJ~yejB(Wqlz67KcpV`GFDXA67sRbpFAVx7UCo?HCuOtVn5oxK3C8b5FV5i_W zzbG{^H>orYi}}fDUMwyt%FIhoD^CI0h~0lll_jag<%tC#75J87Kc_v~I1_4SesNlP3X*GJ$-KC-SU))>H4S@m0mlR=NQ?E0ONvU9OXA%; zeOy5SfG>&*ic50zK}39VeqLH;I!HZ6=pq@NoS&banHry&AD>p5mt2yWpI3|{dmw2l z$;?eH!l4X3=D;~Lu_QGmzMur0iZEP*uA{ItAEX?T?yW&qWq%x#G-U? zkP@^hCqFqcCpA7fC$YE~l4k5l8`-Tn?@lu_QnwMPSE6 z0x2^;4`-GGl{}#60>>$i5Xj6;H8a5-LZz8`C3(7;DXDoSnI)B2)uFo!oa=2ZcYJL0T3B-2-V2C6%V(2r#g7;Bkau8It$l*^ZPfiZuuzfeN=2!w<;mAM8`zq{L!y zn#E9x3UW%*GxLh|i!;;n5_96gxiGOLzX(GB(k_}&r-!p$ z1a=QJo1`Tsr{ZYABl#d1T(%MsywH4}nU`4-504hCL5*a3N@`MRx<05WPy}uVVO0-y zbSk(E$V)B8UVefSAnwRRvN0KwZ}58vqzG%f1C*5^?N@xM66|2qP{!W!M|M|!9;owE zjKyIfzY$e#fdfDv(jYQ3A>807DJ{rJ#bP0nvyw7P@GGdWFpD=c(Je^U1?M1LP*DN) zf3mhVp5`!;6`A?iJdLCPY#bywkuwpflE+eKgH;!2Bo;xMzwxkailfkjH1mtfbMlk3 zL8*^myrLAQ*rOF368hlQB)EeHPO|ul34DPF@i@q7*nNPc4qmP0dY8Edr+ng4V+Z3^MTh3e;%GE6oKp%J2;WfPDlCqY6+m z!W%u{-We84!A5}VJ-891Rbr6NJ7~-*wWwIXD7CmWrvy@8vGu9ptgmo}DtNR3)ZZ>H zNz5Z$i$Rf>j;7+XKn<@wth~Md0=&TpO-p5mI(#<`?5=cp;_dWL!NTu$RgcGfUEP z5+Qwlj06Q%0xlC^!zl6bS-A!ANu_D=C5d1kV(3A#8mt{s?8QSGDe-yvd6{4@V&t6S zl9Xg!NT(Sd1C*r9;?$DT0!YH#P*0#C1#id3XO^TEftq9>Ctx@c$!j>%b8Ou~{$k=v+*8VtlZD!nA5NH--lEfJhou~-PH=-|ZyzA6qJsi0D|ATg8hm{ekN zc6nk^ihfdNUJ9-<6I{Q70vumj!X4nC^ohH1fD}Anmlvg`l@~!qd*ShmKXc|LR>UXf zWTxjq+F=-Z6KpKB{){g!Nlea;&&|x!O{vUF%*{;3>Mvw1Am@V%FtU6P8*R=n0*`mW zy#y;bz&3$0IcV^{6uUiOHEB8di6wcu$@#gtkahw-=OC)nqWGN5Vr(r-983;WcpSrVH-d;0|g~l}XGv0BH0AG763*kD#Zdg8X85++lYdSXw_B)FOqX z9eiO5js-{$GrlObIKQ+g8G8!{tPo-}v}{GKl2D=^qAs4O;crkQ1U$@yuL*)2uOOEc zq!#7m=YgvNaH&CBk)4>5SWuE$qz|Pb#dX&tv~~o@9!UEeRt;r>Vzj8ZAQgN5LXRp$ zF9MWCFd_>{InH7RRD@#H3~^j$E;zFAMQ|phmLVc#K}TM(_emi3fd|SUZ71xpkK`xF zco7zRapxK&-Js-~NJQ@vG}Dp;uRkG~7o7UAh8koP03-ztGSX5FqzPJDoC!*I1qBTM zW^|&Z7|<9kNIEAq9@4RawEMw!Avf!g{0R=%yj0LE0P({f$@wX%$z|BeKd^CN|AR(% zFvr1RxfI<6Wsm_wP{`m*r(okjwQyoidOpscF_Ph+#ztlyHkU%HE|85F;RBnK)dl4@ z97Bdkmf*}i;8Hq1GcPAI51dahyax6UB)C8cE;}=Y$PzQHI39g00e^L#SDFK!f5u*q zL&k-4b5awF3Fa%XoAXl35wmBYFvRd0Quu&82rXQ(WJe^0V56Z02972^SP95LP{spK zae~`X@db%RiMb$$U_>TZ2h@Y$83?SZ&|LwoV_@@q*b61Jk*#=0QUO;8$k`1vrUV{- zCd%ft;`oBZ67Wa_zCeX~DkpO;z=O>U%>v#{~%+{E;}%o5Pz5;zM|Q}1g>>sWzZ z22En1IWDYW0!l0(h3HKOhmM{(ja z^NLd;<8l~gBWZ!Eh6XtfUx6E2;H4ta89)pZA+7}v%jrTIFuLIE4)PjCI)f+%w+f&O z9zZ2FF%6{5{M^L6%mVzbg$(b5Ns#pzZbkAv*d>VZ32d1Wl5{}^5$TVzL~xOfp&Gd{ z3J)8MQU~lJuyke>WTgV!ApBKDep*^_YDs#RKXUMpwHsNTmx>IVUDB0q>;Q2$|1@5dC8?kMX7mceIfiVC@3jP$xKUw_!J}J zz~KQZqw?c(GKtIo#U&~6iAmVIp-3(Un+*0kfi-oI&Ne7aF=7kJINYr%ZEbKrjhKNd zu$w>)MOe2QWGhBOLb4UEAvr$}Qj`#-1GE$+9=w*0DCMAtO)V&iPtHh%OxIvI3F1SL zVPu67IH{8|QeT>vSy-BibJYhlSilXf+|rU%f+O%?4Upw5xKjgqxI;=t)WK5hEiU+& z3ck>RG>Gt*NuX>79^Oh#0gdaXL6$3GL1!q@~Ng!7- z`k<_9f%TB|G8h;=83Oni7&!hr1U5^u#w_%VclYsha*l|IcMtIha&>fx4-IyW4|jF+ zW?*12QihBYE8tY5V8Fn@7%CF##snh082&RdFfjZ-(5YI5zc&H7Y zE?CV*SEK;#^u-sa=A>z8GB7ZDh3m>lhjD;TYx`A0O`= z;Rv(PF~l{(GbG;AH^7I1fguFLR|It_7&0(0Itnn+a literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@time_members.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@time_members.h new file mode 100644 index 0000000..81bd03a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@time_members.h @@ -0,0 +1,89 @@ +// std::time_get, std::time_put implementation, GNU version -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/time_members.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.2.5.1.2 - time_get functions +// ISO C++ 14882: 22.2.5.3.2 - time_put functions +// + +// Written by Benjamin Kosnik + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + __timepunct<_CharT>::__timepunct(size_t __refs) + : facet(__refs), _M_data(0), _M_c_locale_timepunct(0), + _M_name_timepunct(_S_get_c_name()) + { _M_initialize_timepunct(); } + + template + __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) + : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(0), + _M_name_timepunct(_S_get_c_name()) + { _M_initialize_timepunct(); } + + template + __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s, + size_t __refs) + : facet(__refs), _M_data(0), _M_c_locale_timepunct(0), + _M_name_timepunct(0) + { + if (__builtin_strcmp(__s, _S_get_c_name()) != 0) + { + const size_t __len = __builtin_strlen(__s) + 1; + char* __tmp = new char[__len]; + __builtin_memcpy(__tmp, __s, __len); + _M_name_timepunct = __tmp; + } + else + _M_name_timepunct = _S_get_c_name(); + + __try + { _M_initialize_timepunct(__cloc); } + __catch(...) + { + if (_M_name_timepunct != _S_get_c_name()) + delete [] _M_name_timepunct; + __throw_exception_again; + } + } + + template + __timepunct<_CharT>::~__timepunct() + { + if (_M_name_timepunct != _S_get_c_name()) + delete [] _M_name_timepunct; + delete _M_data; + _S_destroy_c_locale(_M_c_locale_timepunct); + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@time_members.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@x86_64-pc-linux-gnu@bits@time_members.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5fc6c00ac004568c4a9022699f05e8dd7912c765 GIT binary patch literal 15556 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. */ + +/* + * ISO C99 Standard 7.4: Character handling + */ + +#ifndef _CTYPE_H +#define _CTYPE_H 1 + +#include +#include + +__BEGIN_DECLS + +#ifndef _ISbit +/* These are all the characteristics of characters. + If there get to be more than 16 distinct characteristics, + many things must be changed that use `unsigned short int's. + + The characteristics are stored always in network byte order (big + endian). We define the bit value interpretations here dependent on the + machine's byte order. */ + +# include +# if __BYTE_ORDER == __BIG_ENDIAN +# define _ISbit(bit) (1 << (bit)) +# else /* __BYTE_ORDER == __LITTLE_ENDIAN */ +# define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8)) +# endif + +enum +{ + _ISupper = _ISbit (0), /* UPPERCASE. */ + _ISlower = _ISbit (1), /* lowercase. */ + _ISalpha = _ISbit (2), /* Alphabetic. */ + _ISdigit = _ISbit (3), /* Numeric. */ + _ISxdigit = _ISbit (4), /* Hexadecimal numeric. */ + _ISspace = _ISbit (5), /* Whitespace. */ + _ISprint = _ISbit (6), /* Printing. */ + _ISgraph = _ISbit (7), /* Graphical. */ + _ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */ + _IScntrl = _ISbit (9), /* Control character. */ + _ISpunct = _ISbit (10), /* Punctuation. */ + _ISalnum = _ISbit (11) /* Alphanumeric. */ +}; +#endif /* ! _ISbit */ + +/* These are defined in ctype-info.c. + The declarations here must match those in localeinfo.h. + + In the thread-specific locale model (see `uselocale' in ) + we cannot use global variables for these as was done in the past. + Instead, the following accessor functions return the address of + each variable, which is local to the current thread if multithreaded. + + These point into arrays of 384, so they can be indexed by any `unsigned + char' value [0,255]; by EOF (-1); or by any `signed char' value + [-128,-1). ISO C requires that the ctype functions work for `unsigned + char' values and for EOF; we also support negative `signed char' values + for broken old programs. The case conversion arrays are of `int's + rather than `unsigned char's because tolower (EOF) must be EOF, which + doesn't fit into an `unsigned char'. But today more important is that + the arrays are also used for multi-byte character sets. */ +extern const unsigned short int **__ctype_b_loc (void) + __THROW __attribute__ ((__const__)); +extern const __int32_t **__ctype_tolower_loc (void) + __THROW __attribute__ ((__const__)); +extern const __int32_t **__ctype_toupper_loc (void) + __THROW __attribute__ ((__const__)); + + +#ifndef __cplusplus +# define __isctype(c, type) \ + ((*__ctype_b_loc ())[(int) (c)] & (unsigned short int) type) +#elif defined __USE_EXTERN_INLINES +# define __isctype_f(type) \ + __extern_inline int \ + is##type (int __c) __THROW \ + { \ + return (*__ctype_b_loc ())[(int) (__c)] & (unsigned short int) _IS##type; \ + } +#endif + +#define __isascii(c) (((c) & ~0x7f) == 0) /* If C is a 7 bit value. */ +#define __toascii(c) ((c) & 0x7f) /* Mask off high bits. */ + +#define __exctype(name) extern int name (int) __THROW + +/* The following names are all functions: + int isCHARACTERISTIC(int c); + which return nonzero iff C has CHARACTERISTIC. + For the meaning of the characteristic names, see the `enum' above. */ +__exctype (isalnum); +__exctype (isalpha); +__exctype (iscntrl); +__exctype (isdigit); +__exctype (islower); +__exctype (isgraph); +__exctype (isprint); +__exctype (ispunct); +__exctype (isspace); +__exctype (isupper); +__exctype (isxdigit); + + +/* Return the lowercase version of C. */ +extern int tolower (int __c) __THROW; + +/* Return the uppercase version of C. */ +extern int toupper (int __c) __THROW; + + +/* ISO C99 introduced one new function. */ +#ifdef __USE_ISOC99 +__exctype (isblank); +#endif + +#ifdef __USE_GNU +/* Test C for a set of character classes according to MASK. */ +extern int isctype (int __c, int __mask) __THROW; +#endif + +#if defined __USE_MISC || defined __USE_XOPEN + +/* Return nonzero iff C is in the ASCII set + (i.e., is no more than 7 bits wide). */ +extern int isascii (int __c) __THROW; + +/* Return the part of C that is in the ASCII set + (i.e., the low-order 7 bits of C). */ +extern int toascii (int __c) __THROW; + +/* These are the same as `toupper' and `tolower' except that they do not + check the argument for being in the range of a `char'. */ +__exctype (_toupper); +__exctype (_tolower); +#endif /* Use X/Open or use misc. */ + +/* This code is needed for the optimized mapping functions. */ +#define __tobody(c, f, a, args) \ + (__extension__ \ + ({ int __res; \ + if (sizeof (c) > 1) \ + { \ + if (__builtin_constant_p (c)) \ + { \ + int __c = (c); \ + __res = __c < -128 || __c > 255 ? __c : (a)[__c]; \ + } \ + else \ + __res = f args; \ + } \ + else \ + __res = (a)[(int) (c)]; \ + __res; })) + +#if !defined __NO_CTYPE +# ifdef __isctype_f +__isctype_f (alnum) +__isctype_f (alpha) +__isctype_f (cntrl) +__isctype_f (digit) +__isctype_f (lower) +__isctype_f (graph) +__isctype_f (print) +__isctype_f (punct) +__isctype_f (space) +__isctype_f (upper) +__isctype_f (xdigit) +# ifdef __USE_ISOC99 +__isctype_f (blank) +# endif +# elif defined __isctype +# define isalnum(c) __isctype((c), _ISalnum) +# define isalpha(c) __isctype((c), _ISalpha) +# define iscntrl(c) __isctype((c), _IScntrl) +# define isdigit(c) __isctype((c), _ISdigit) +# define islower(c) __isctype((c), _ISlower) +# define isgraph(c) __isctype((c), _ISgraph) +# define isprint(c) __isctype((c), _ISprint) +# define ispunct(c) __isctype((c), _ISpunct) +# define isspace(c) __isctype((c), _ISspace) +# define isupper(c) __isctype((c), _ISupper) +# define isxdigit(c) __isctype((c), _ISxdigit) +# ifdef __USE_ISOC99 +# define isblank(c) __isctype((c), _ISblank) +# endif +# endif + +# ifdef __USE_EXTERN_INLINES +__extern_inline int +__NTH (tolower (int __c)) +{ + return __c >= -128 && __c < 256 ? (*__ctype_tolower_loc ())[__c] : __c; +} + +__extern_inline int +__NTH (toupper (int __c)) +{ + return __c >= -128 && __c < 256 ? (*__ctype_toupper_loc ())[__c] : __c; +} +# endif + +# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus +# define tolower(c) __tobody (c, tolower, *__ctype_tolower_loc (), (c)) +# define toupper(c) __tobody (c, toupper, *__ctype_toupper_loc (), (c)) +# endif /* Optimizing gcc */ + +# if defined __USE_MISC || defined __USE_XOPEN +# define isascii(c) __isascii (c) +# define toascii(c) __toascii (c) + +# define _tolower(c) ((int) (*__ctype_tolower_loc ())[(int) (c)]) +# define _toupper(c) ((int) (*__ctype_toupper_loc ())[(int) (c)]) +# endif + +#endif /* Not __NO_CTYPE. */ + + +#ifdef __USE_XOPEN2K8 +/* POSIX.1-2008 extended locale interface (see locale.h). */ +# include + +/* These definitions are similar to the ones above but all functions + take as an argument a handle for the locale which shall be used. */ +# define __isctype_l(c, type, locale) \ + ((locale)->__ctype_b[(int) (c)] & (unsigned short int) type) + +# define __exctype_l(name) \ + extern int name (int, locale_t) __THROW + +/* The following names are all functions: + int isCHARACTERISTIC(int c, locale_t *locale); + which return nonzero iff C has CHARACTERISTIC. + For the meaning of the characteristic names, see the `enum' above. */ +__exctype_l (isalnum_l); +__exctype_l (isalpha_l); +__exctype_l (iscntrl_l); +__exctype_l (isdigit_l); +__exctype_l (islower_l); +__exctype_l (isgraph_l); +__exctype_l (isprint_l); +__exctype_l (ispunct_l); +__exctype_l (isspace_l); +__exctype_l (isupper_l); +__exctype_l (isxdigit_l); + +__exctype_l (isblank_l); + + +/* Return the lowercase version of C in locale L. */ +extern int __tolower_l (int __c, locale_t __l) __THROW; +extern int tolower_l (int __c, locale_t __l) __THROW; + +/* Return the uppercase version of C. */ +extern int __toupper_l (int __c, locale_t __l) __THROW; +extern int toupper_l (int __c, locale_t __l) __THROW; + +# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus +# define __tolower_l(c, locale) \ + __tobody (c, __tolower_l, (locale)->__ctype_tolower, (c, locale)) +# define __toupper_l(c, locale) \ + __tobody (c, __toupper_l, (locale)->__ctype_toupper, (c, locale)) +# define tolower_l(c, locale) __tolower_l ((c), (locale)) +# define toupper_l(c, locale) __toupper_l ((c), (locale)) +# endif /* Optimizing gcc */ + + +# ifndef __NO_CTYPE +# define __isalnum_l(c,l) __isctype_l((c), _ISalnum, (l)) +# define __isalpha_l(c,l) __isctype_l((c), _ISalpha, (l)) +# define __iscntrl_l(c,l) __isctype_l((c), _IScntrl, (l)) +# define __isdigit_l(c,l) __isctype_l((c), _ISdigit, (l)) +# define __islower_l(c,l) __isctype_l((c), _ISlower, (l)) +# define __isgraph_l(c,l) __isctype_l((c), _ISgraph, (l)) +# define __isprint_l(c,l) __isctype_l((c), _ISprint, (l)) +# define __ispunct_l(c,l) __isctype_l((c), _ISpunct, (l)) +# define __isspace_l(c,l) __isctype_l((c), _ISspace, (l)) +# define __isupper_l(c,l) __isctype_l((c), _ISupper, (l)) +# define __isxdigit_l(c,l) __isctype_l((c), _ISxdigit, (l)) + +# define __isblank_l(c,l) __isctype_l((c), _ISblank, (l)) + +# ifdef __USE_MISC +# define __isascii_l(c,l) ((l), __isascii (c)) +# define __toascii_l(c,l) ((l), __toascii (c)) +# endif + +# define isalnum_l(c,l) __isalnum_l ((c), (l)) +# define isalpha_l(c,l) __isalpha_l ((c), (l)) +# define iscntrl_l(c,l) __iscntrl_l ((c), (l)) +# define isdigit_l(c,l) __isdigit_l ((c), (l)) +# define islower_l(c,l) __islower_l ((c), (l)) +# define isgraph_l(c,l) __isgraph_l ((c), (l)) +# define isprint_l(c,l) __isprint_l ((c), (l)) +# define ispunct_l(c,l) __ispunct_l ((c), (l)) +# define isspace_l(c,l) __isspace_l ((c), (l)) +# define isupper_l(c,l) __isupper_l ((c), (l)) +# define isxdigit_l(c,l) __isxdigit_l ((c), (l)) + +# define isblank_l(c,l) __isblank_l ((c), (l)) + +# ifdef __USE_MISC +# define isascii_l(c,l) __isascii_l ((c), (l)) +# define toascii_l(c,l) __toascii_l ((c), (l)) +# endif + +# endif /* Not __NO_CTYPE. */ + +#endif /* Use POSIX 2008. */ + +__END_DECLS + +#endif /* ctype.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@ctype.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@ctype.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b1cc86dfd92833023836c783bbf049bc4c82654d GIT binary patch literal 20207 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 Tu2c}^o)wD~*j6hRD>PdHq@WvD literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@endian.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@endian.h new file mode 100644 index 0000000..5b73254 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@endian.h @@ -0,0 +1,72 @@ +/* Copyright (C) 1992-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ENDIAN_H +#define _ENDIAN_H 1 + +#include + +/* Get the definitions of __*_ENDIAN, __BYTE_ORDER, and __FLOAT_WORD_ORDER. */ +#include + +#ifdef __USE_MISC +# define LITTLE_ENDIAN __LITTLE_ENDIAN +# define BIG_ENDIAN __BIG_ENDIAN +# define PDP_ENDIAN __PDP_ENDIAN +# define BYTE_ORDER __BYTE_ORDER +#endif + +#if defined __USE_MISC && !defined __ASSEMBLER__ +/* Conversion interfaces. */ +# include +# include + +# if __BYTE_ORDER == __LITTLE_ENDIAN +# define htobe16(x) __bswap_16 (x) +# define htole16(x) __uint16_identity (x) +# define be16toh(x) __bswap_16 (x) +# define le16toh(x) __uint16_identity (x) + +# define htobe32(x) __bswap_32 (x) +# define htole32(x) __uint32_identity (x) +# define be32toh(x) __bswap_32 (x) +# define le32toh(x) __uint32_identity (x) + +# define htobe64(x) __bswap_64 (x) +# define htole64(x) __uint64_identity (x) +# define be64toh(x) __bswap_64 (x) +# define le64toh(x) __uint64_identity (x) + +# else +# define htobe16(x) __uint16_identity (x) +# define htole16(x) __bswap_16 (x) +# define be16toh(x) __uint16_identity (x) +# define le16toh(x) __bswap_16 (x) + +# define htobe32(x) __uint32_identity (x) +# define htole32(x) __bswap_32 (x) +# define be32toh(x) __uint32_identity (x) +# define le32toh(x) __bswap_32 (x) + +# define htobe64(x) __uint64_identity (x) +# define htole64(x) __bswap_64 (x) +# define be64toh(x) __uint64_identity (x) +# define le64toh(x) __bswap_64 (x) +# endif +#endif + +#endif /* endian.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@endian.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@endian.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..d22811a4e0d8c287820d4aa8f2e907a5ea31f198 GIT binary patch literal 12813 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 D4&wMP literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@errno.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@errno.h new file mode 100644 index 0000000..f7828f0 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@errno.h @@ -0,0 +1,55 @@ +/* Copyright (C) 1991-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.5 Errors + */ + +#ifndef _ERRNO_H +#define _ERRNO_H 1 + +#include + +/* The system-specific definitions of the E* constants, as macros. */ +#include + +/* When included from assembly language, this header only provides the + E* constants. */ +#ifndef __ASSEMBLER__ + +__BEGIN_DECLS + +/* The error code set by various library functions. */ +extern int *__errno_location (void) __THROW __attribute_const__; +# define errno (*__errno_location ()) + +# ifdef __USE_GNU + +/* The full and simple forms of the name with which the program was + invoked. These variables are set up automatically at startup based on + the value of argv[0]. */ +extern char *program_invocation_name; +extern char *program_invocation_short_name; + +#include + +# endif /* __USE_GNU */ + +__END_DECLS + +#endif /* !__ASSEMBLER__ */ +#endif /* errno.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@errno.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..609c9d05826678ec84c038855590d56e2ab0971c GIT binary patch literal 12125 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features-time64.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features-time64.h new file mode 100644 index 0000000..4c1136f --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features-time64.h @@ -0,0 +1,42 @@ +/* Features part to handle 64-bit time_t support. + Copyright (C) 2021-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* We need to know the word size in order to check the time size. */ +#include +#include + +#if defined _TIME_BITS +# if _TIME_BITS == 64 +# if ! defined (_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64 +# error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64" +# endif +# define __USE_TIME_BITS64 1 +# elif _TIME_BITS == 32 +# if __TIMESIZE > 32 +# error "_TIME_BITS=32 is not compatible with __TIMESIZE > 32" +# endif +# else +# error Invalid _TIME_BITS value (can only be 32 or 64-bit) +# endif +#elif __TIMESIZE == 64 +# define __USE_TIME_BITS64 1 +#endif + +#if defined __USE_TIME_BITS64 && __TIMESIZE == 32 +# define __USE_TIME64_REDIRECTS 1 +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features-time64.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features-time64.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6bd94d8b3ffac3bd847b1ece263c298e34564a65 GIT binary patch literal 11541 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. */ + +#ifndef _FEATURES_H +#define _FEATURES_H 1 + +/* These are defined by the user (or the compiler) + to specify the desired environment: + + __STRICT_ANSI__ ISO Standard C. + _ISOC99_SOURCE Extensions to ISO C89 from ISO C99. + _ISOC11_SOURCE Extensions to ISO C99 from ISO C11. + _ISOC23_SOURCE Extensions to ISO C99 from ISO C23. + _ISOC2X_SOURCE Old name for _ISOC23_SOURCE. + _ISOC2Y_SOURCE Extensions to ISO C23 from ISO C2Y. + __STDC_WANT_LIB_EXT2__ + Extensions to ISO C99 from TR 27431-2:2010. + __STDC_WANT_IEC_60559_BFP_EXT__ + Extensions to ISO C11 from TS 18661-1:2014. + __STDC_WANT_IEC_60559_FUNCS_EXT__ + Extensions to ISO C11 from TS 18661-4:2015. + __STDC_WANT_IEC_60559_TYPES_EXT__ + Extensions to ISO C11 from TS 18661-3:2015. + __STDC_WANT_IEC_60559_EXT__ + ISO C23 interfaces defined only in Annex F. + + _POSIX_SOURCE IEEE Std 1003.1. + _POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2; + if >=199309L, add IEEE Std 1003.1b-1993; + if >=199506L, add IEEE Std 1003.1c-1995; + if >=200112L, all of IEEE 1003.1-2004 + if >=200809L, all of IEEE 1003.1-2008 + if >=202405L, all of IEEE 1003.1-2024 + _XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if + Single Unix conformance is wanted, to 600 for the + sixth revision, to 700 for the seventh revision, + to 800 for the eighth revision. + _XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions. + _LARGEFILE_SOURCE Some more functions for correct standard I/O. + _LARGEFILE64_SOURCE Additional functionality from LFS for large files. + _FILE_OFFSET_BITS=N Select default filesystem interface. + _ATFILE_SOURCE Additional *at interfaces. + _DYNAMIC_STACK_SIZE_SOURCE Select correct (but non compile-time constant) + MINSIGSTKSZ, SIGSTKSZ and PTHREAD_STACK_MIN. + _GNU_SOURCE All of the above, plus GNU extensions. + _DEFAULT_SOURCE The default set of features (taking precedence over + __STRICT_ANSI__). + + _FORTIFY_SOURCE Add security hardening to many library functions. + Set to 1, 2 or 3; 3 performs stricter checks than 2, which + performs stricter checks than 1. + + _REENTRANT, _THREAD_SAFE + Obsolete; equivalent to _POSIX_C_SOURCE=199506L. + + The `-ansi' switch to the GNU C compiler, and standards conformance + options such as `-std=c99', define __STRICT_ANSI__. If none of + these are defined, or if _DEFAULT_SOURCE is defined, the default is + to have _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to + 202405L, as well as enabling miscellaneous functions from BSD and + SVID. If more than one of these are defined, they accumulate. For + example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE together + give you ISO C, 1003.1, and 1003.2, but nothing else. + + These are defined by this file and are used by the + header files to decide what to declare or define: + + __GLIBC_USE (F) Define things from feature set F. This is defined + to 1 or 0; the subsequent macros are either defined + or undefined, and those tests should be moved to + __GLIBC_USE. + __USE_ISOC11 Define ISO C11 things. + __USE_ISOC99 Define ISO C99 things. + __USE_ISOC95 Define ISO C90 AMD1 (C95) things. + __USE_ISOCXX11 Define ISO C++11 things. + __USE_POSIX Define IEEE Std 1003.1 things. + __USE_POSIX2 Define IEEE Std 1003.2 things. + __USE_POSIX199309 Define IEEE Std 1003.1, and .1b things. + __USE_POSIX199506 Define IEEE Std 1003.1, .1b, .1c and .1i things. + __USE_XOPEN Define XPG things. + __USE_XOPEN_EXTENDED Define X/Open Unix things. + __USE_UNIX98 Define Single Unix V2 things. + __USE_XOPEN2K Define XPG6 things. + __USE_XOPEN2KXSI Define XPG6 XSI things. + __USE_XOPEN2K8 Define XPG7 things. + __USE_XOPEN2K8XSI Define XPG7 XSI things. + __USE_XOPEN2K24 Define XPG8 things. + __USE_XOPEN2K24XSI Define XPG8 XSI things. + __USE_LARGEFILE Define correct standard I/O things. + __USE_LARGEFILE64 Define LFS things with separate names. + __USE_FILE_OFFSET64 Define 64bit interface as default. + __USE_MISC Define things from 4.3BSD or System V Unix. + __USE_ATFILE Define *at interfaces and AT_* constants for them. + __USE_DYNAMIC_STACK_SIZE Define correct (but non compile-time constant) + MINSIGSTKSZ, SIGSTKSZ and PTHREAD_STACK_MIN. + __USE_GNU Define GNU extensions. + __USE_FORTIFY_LEVEL Additional security measures used, according to level. + + The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are + defined by this file unconditionally. `__GNU_LIBRARY__' is provided + only for compatibility. All new code should use the other symbols + to test for features. + + All macros listed above as possibly being defined by this file are + explicitly undefined if they are not explicitly defined. + Feature-test macros that are not defined by the user or compiler + but are implied by the other feature-test macros defined (or by the + lack of any definitions) are defined by the file. + + ISO C feature test macros depend on the definition of the macro + when an affected header is included, not when the first system + header is included, and so they are handled in + , which does not have a multiple include + guard. Feature test macros that can be handled from the first + system header included are handled here. */ + + +/* Undefine everything, so we get a clean slate. */ +#undef __USE_ISOC11 +#undef __USE_ISOC99 +#undef __USE_ISOC95 +#undef __USE_ISOCXX11 +#undef __USE_POSIX +#undef __USE_POSIX2 +#undef __USE_POSIX199309 +#undef __USE_POSIX199506 +#undef __USE_XOPEN +#undef __USE_XOPEN_EXTENDED +#undef __USE_UNIX98 +#undef __USE_XOPEN2K +#undef __USE_XOPEN2KXSI +#undef __USE_XOPEN2K8 +#undef __USE_XOPEN2K8XSI +#undef __USE_XOPEN2K24 +#undef __USE_XOPEN2K24XSI +#undef __USE_LARGEFILE +#undef __USE_LARGEFILE64 +#undef __USE_FILE_OFFSET64 +#undef __USE_MISC +#undef __USE_ATFILE +#undef __USE_DYNAMIC_STACK_SIZE +#undef __USE_GNU +#undef __USE_FORTIFY_LEVEL +#undef __KERNEL_STRICT_NAMES +#undef __GLIBC_USE_ISOC23 +#undef __GLIBC_USE_ISOC2Y +#undef __GLIBC_USE_DEPRECATED_GETS +#undef __GLIBC_USE_DEPRECATED_SCANF +#undef __GLIBC_USE_C23_STRTOL + +/* Suppress kernel-name space pollution unless user explicitly asks + for it. */ +#ifndef _LOOSE_KERNEL_NAMES +# define __KERNEL_STRICT_NAMES +#endif + +/* Convenience macro to test the version of gcc. + Use like this: + #if __GNUC_PREREQ (2,8) + ... code requiring gcc 2.8 or later ... + #endif + Note: only works for GCC 2.0 and later, because __GNUC_MINOR__ was + added in 2.0. */ +#if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +#else +# define __GNUC_PREREQ(maj, min) 0 +#endif + +/* Similarly for clang. Features added to GCC after version 4.2 may + or may not also be available in clang, and clang's definitions of + __GNUC(_MINOR)__ are fixed at 4 and 2 respectively. Not all such + features can be queried via __has_extension/__has_feature. */ +#if defined __clang_major__ && defined __clang_minor__ +# define __glibc_clang_prereq(maj, min) \ + ((__clang_major__ << 16) + __clang_minor__ >= ((maj) << 16) + (min)) +#else +# define __glibc_clang_prereq(maj, min) 0 +#endif + +/* Whether to use feature set F. */ +#define __GLIBC_USE(F) __GLIBC_USE_ ## F + +/* _BSD_SOURCE and _SVID_SOURCE are deprecated aliases for + _DEFAULT_SOURCE. If _DEFAULT_SOURCE is present we do not + issue a warning; the expectation is that the source is being + transitioned to use the new macro. */ +#if (defined _BSD_SOURCE || defined _SVID_SOURCE) \ + && !defined _DEFAULT_SOURCE +# warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" +# undef _DEFAULT_SOURCE +# define _DEFAULT_SOURCE 1 +#endif + +/* Remap the old name _ISOC2X_SOURCE to _ISOC23_SOURCE. */ +#ifdef _ISOC2X_SOURCE +# undef _ISOC2X_SOURCE +# undef _ISOC23_SOURCE +# define _ISOC23_SOURCE 1 +#endif + +/* If _GNU_SOURCE was defined by the user, turn on all the other features. */ +#ifdef _GNU_SOURCE +# undef _ISOC95_SOURCE +# define _ISOC95_SOURCE 1 +# undef _ISOC99_SOURCE +# define _ISOC99_SOURCE 1 +# undef _ISOC11_SOURCE +# define _ISOC11_SOURCE 1 +# undef _ISOC23_SOURCE +# define _ISOC23_SOURCE 1 +# undef _ISOC2Y_SOURCE +# define _ISOC2Y_SOURCE 1 +# undef _POSIX_SOURCE +# define _POSIX_SOURCE 1 +# undef _POSIX_C_SOURCE +# define _POSIX_C_SOURCE 202405L +# undef _XOPEN_SOURCE +# define _XOPEN_SOURCE 800 +# undef _XOPEN_SOURCE_EXTENDED +# define _XOPEN_SOURCE_EXTENDED 1 +# undef _LARGEFILE64_SOURCE +# define _LARGEFILE64_SOURCE 1 +# undef _DEFAULT_SOURCE +# define _DEFAULT_SOURCE 1 +# undef _ATFILE_SOURCE +# define _ATFILE_SOURCE 1 +# undef _DYNAMIC_STACK_SIZE_SOURCE +# define _DYNAMIC_STACK_SIZE_SOURCE 1 +#endif + +/* If nothing (other than _GNU_SOURCE and _DEFAULT_SOURCE) is defined, + define _DEFAULT_SOURCE. */ +#if (defined _DEFAULT_SOURCE \ + || (!defined __STRICT_ANSI__ \ + && !defined _ISOC99_SOURCE && !defined _ISOC11_SOURCE \ + && !defined _ISOC23_SOURCE && !defined _ISOC2Y_SOURCE \ + && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE \ + && !defined _XOPEN_SOURCE)) +# undef _DEFAULT_SOURCE +# define _DEFAULT_SOURCE 1 +#endif + +/* This is to enable the ISO C2Y extension. */ +#if (defined _ISOC2Y_SOURCE \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ > 202311L)) +# define __GLIBC_USE_ISOC2Y 1 +#else +# define __GLIBC_USE_ISOC2Y 0 +#endif + +/* This is to enable the ISO C23 extension. */ +#if (defined _ISOC23_SOURCE || defined _ISOC2Y_SOURCE \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L)) +# define __GLIBC_USE_ISOC23 1 +#else +# define __GLIBC_USE_ISOC23 0 +#endif + +/* This is to enable the ISO C11 extension. */ +#if (defined _ISOC11_SOURCE || defined _ISOC23_SOURCE \ + || defined _ISOC2Y_SOURCE \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L)) +# define __USE_ISOC11 1 +#endif + +/* This is to enable the ISO C99 extension. */ +#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \ + || defined _ISOC23_SOURCE || defined _ISOC2Y_SOURCE \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) +# define __USE_ISOC99 1 +#endif + +/* This is to enable the ISO C90 Amendment 1:1995 extension. */ +#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \ + || defined _ISOC23_SOURCE || defined _ISOC2Y_SOURCE \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199409L)) +# define __USE_ISOC95 1 +#endif + +#ifdef __cplusplus +/* This is to enable compatibility for ISO C++17. */ +# if __cplusplus >= 201703L +# define __USE_ISOC11 1 +# endif +/* This is to enable compatibility for ISO C++11. + Check the temporary macro for now, too. */ +# if __cplusplus >= 201103L || defined __GXX_EXPERIMENTAL_CXX0X__ +# define __USE_ISOCXX11 1 +# define __USE_ISOC99 1 +# endif +#endif + +/* If none of the ANSI/POSIX macros are defined, or if _DEFAULT_SOURCE + is defined, use POSIX.1-2024 (or another version depending on + _XOPEN_SOURCE). */ +#ifdef _DEFAULT_SOURCE +# if !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE +# define __USE_POSIX_IMPLICITLY 1 +# endif +# undef _POSIX_SOURCE +# define _POSIX_SOURCE 1 +# undef _POSIX_C_SOURCE +# define _POSIX_C_SOURCE 202405L +#endif + +#if ((!defined __STRICT_ANSI__ \ + || (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500)) \ + && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE) +# define _POSIX_SOURCE 1 +# if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500 +# define _POSIX_C_SOURCE 2 +# elif defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 600 +# define _POSIX_C_SOURCE 199506L +# elif defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 700 +# define _POSIX_C_SOURCE 200112L +# elif defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 800 +# define _POSIX_C_SOURCE 200809L +# else +# define _POSIX_C_SOURCE 202405L +# endif +# define __USE_POSIX_IMPLICITLY 1 +#endif + +/* Some C libraries once required _REENTRANT and/or _THREAD_SAFE to be + defined in all multithreaded code. GNU libc has not required this + for many years. We now treat them as compatibility synonyms for + _POSIX_C_SOURCE=199506L, which is the earliest level of POSIX with + comprehensive support for multithreaded code. Using them never + lowers the selected level of POSIX conformance, only raises it. */ +#if ((!defined _POSIX_C_SOURCE || (_POSIX_C_SOURCE - 0) < 199506L) \ + && (defined _REENTRANT || defined _THREAD_SAFE)) +# define _POSIX_SOURCE 1 +# undef _POSIX_C_SOURCE +# define _POSIX_C_SOURCE 199506L +#endif + +#if (defined _POSIX_SOURCE \ + || (defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 1) \ + || defined _XOPEN_SOURCE) +# define __USE_POSIX 1 +#endif + +#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 2 || defined _XOPEN_SOURCE +# define __USE_POSIX2 1 +#endif + +#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 199309L +# define __USE_POSIX199309 1 +#endif + +#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 199506L +# define __USE_POSIX199506 1 +#endif + +#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 200112L +# define __USE_XOPEN2K 1 +# undef __USE_ISOC95 +# define __USE_ISOC95 1 +# undef __USE_ISOC99 +# define __USE_ISOC99 1 +#endif + +#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 200809L +# define __USE_XOPEN2K8 1 +# undef _ATFILE_SOURCE +# define _ATFILE_SOURCE 1 +#endif + +#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 202405L +# define __USE_XOPEN2K24 1 +#endif + +#ifdef _XOPEN_SOURCE +# define __USE_XOPEN 1 +# if (_XOPEN_SOURCE - 0) >= 500 +# define __USE_XOPEN_EXTENDED 1 +# define __USE_UNIX98 1 +# undef _LARGEFILE_SOURCE +# define _LARGEFILE_SOURCE 1 +# if (_XOPEN_SOURCE - 0) >= 600 +# if (_XOPEN_SOURCE - 0) >= 700 +# define __USE_XOPEN2K8 1 +# define __USE_XOPEN2K8XSI 1 +# if (_XOPEN_SOURCE - 0) >= 800 +# define __USE_XOPEN2K24 1 +# define __USE_XOPEN2K24XSI 1 +# endif +# endif +# define __USE_XOPEN2K 1 +# define __USE_XOPEN2KXSI 1 +# undef __USE_ISOC95 +# define __USE_ISOC95 1 +# undef __USE_ISOC99 +# define __USE_ISOC99 1 +# endif +# else +# ifdef _XOPEN_SOURCE_EXTENDED +# define __USE_XOPEN_EXTENDED 1 +# endif +# endif +#endif + +#ifdef _LARGEFILE_SOURCE +# define __USE_LARGEFILE 1 +#endif + +#ifdef _LARGEFILE64_SOURCE +# define __USE_LARGEFILE64 1 +#endif + +#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64 +# define __USE_FILE_OFFSET64 1 +#endif + +#include + +#if defined _DEFAULT_SOURCE +# define __USE_MISC 1 +#endif + +#ifdef _ATFILE_SOURCE +# define __USE_ATFILE 1 +#endif + +#ifdef _DYNAMIC_STACK_SIZE_SOURCE +# define __USE_DYNAMIC_STACK_SIZE 1 +#endif + +#ifdef _GNU_SOURCE +# define __USE_GNU 1 +#endif + +#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 +# if !defined __OPTIMIZE__ || __OPTIMIZE__ <= 0 +# warning _FORTIFY_SOURCE requires compiling with optimization (-O) +# elif !__GNUC_PREREQ (4, 1) +# warning _FORTIFY_SOURCE requires GCC 4.1 or later +# elif _FORTIFY_SOURCE > 2 && (__glibc_clang_prereq (9, 0) \ + || __GNUC_PREREQ (12, 0)) + +# if _FORTIFY_SOURCE > 3 +# warning _FORTIFY_SOURCE > 3 is treated like 3 on this platform +# endif +# define __USE_FORTIFY_LEVEL 3 +# elif _FORTIFY_SOURCE > 1 +# if _FORTIFY_SOURCE > 2 +# warning _FORTIFY_SOURCE > 2 is treated like 2 on this platform +# endif +# define __USE_FORTIFY_LEVEL 2 +# else +# define __USE_FORTIFY_LEVEL 1 +# endif +#endif +#ifndef __USE_FORTIFY_LEVEL +# define __USE_FORTIFY_LEVEL 0 +#endif + +/* The function 'gets' existed in C89, but is impossible to use + safely. It has been removed from ISO C11 and ISO C++14. Note: for + compatibility with various implementations of , this test + must consider only the value of __cplusplus when compiling C++. */ +#if defined __cplusplus ? __cplusplus >= 201402L : defined __USE_ISOC11 +# define __GLIBC_USE_DEPRECATED_GETS 0 +#else +# define __GLIBC_USE_DEPRECATED_GETS 1 +#endif + +/* GNU formerly extended the scanf functions with modified format + specifiers %as, %aS, and %a[...] that allocate a buffer for the + input using malloc. This extension conflicts with ISO C99, which + defines %a as a standalone format specifier that reads a floating- + point number; moreover, POSIX.1-2008 provides the same feature + using the modifier letter 'm' instead (%ms, %mS, %m[...]). + + We now follow C99 unless GNU extensions are active and the compiler + is specifically in C89 or C++98 mode (strict or not). For + instance, with GCC, -std=gnu11 will have C99-compliant scanf with + or without -D_GNU_SOURCE, but -std=c89 -D_GNU_SOURCE will have the + old extension. */ +#if (defined __USE_GNU \ + && (defined __cplusplus \ + ? (__cplusplus < 201103L && !defined __GXX_EXPERIMENTAL_CXX0X__) \ + : (!defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L))) +# define __GLIBC_USE_DEPRECATED_SCANF 1 +#else +# define __GLIBC_USE_DEPRECATED_SCANF 0 +#endif + +/* ISO C23 added support for a 0b or 0B prefix on binary constants as + inputs to strtol-family functions (base 0 or 2). This macro is + used to condition redirection in headers to allow that redirection + to be disabled when building those functions, despite _GNU_SOURCE + being defined. */ +#if __GLIBC_USE (ISOC23) +# define __GLIBC_USE_C23_STRTOL 1 +#else +# define __GLIBC_USE_C23_STRTOL 0 +#endif + +/* Get definitions of __STDC_* predefined macros, if the compiler has + not preincluded this header automatically. */ +#include + +/* This macro indicates that the installed library is the GNU C Library. + For historic reasons the value now is 6 and this will stay from now + on. The use of this variable is deprecated. Use __GLIBC__ and + __GLIBC_MINOR__ now (see below) when you want to test for a specific + GNU C library version and use the values in to get + the sonames of the shared libraries. */ +#undef __GNU_LIBRARY__ +#define __GNU_LIBRARY__ 6 + +/* Major and minor version number of the GNU C library package. Use + these macros to test for features in specific releases. */ +#define __GLIBC__ 2 +#define __GLIBC_MINOR__ 43 + +#define __GLIBC_PREREQ(maj, min) \ + ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min)) + +/* This is here only because every header file already includes this one. */ +#ifndef __ASSEMBLER__ +# ifndef _SYS_CDEFS_H +# include +# endif + +/* If we don't have __REDIRECT, prototypes will be missing if + __USE_FILE_OFFSET64 but not __USE_LARGEFILE[64]. */ +# if defined __USE_FILE_OFFSET64 && !defined __REDIRECT +# define __USE_LARGEFILE 1 +# define __USE_LARGEFILE64 1 +# endif + +#endif /* !ASSEMBLER */ + +/* Decide whether we can define 'extern inline' functions in headers. */ +#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \ + && !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__ \ + && defined __extern_inline && !(defined __clang__ && defined _LIBC) +# define __USE_EXTERN_INLINES 1 +#endif + + +/* This is here only because every header file already includes this one. + Get the definitions of all the appropriate `__stub_FUNCTION' symbols. + contains `#define __stub_FUNCTION' when FUNCTION is a stub + that will always return failure (and set errno to ENOSYS). */ +#include + + +#endif /* features.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@features.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..988f5ac376bb627f63747614abe61f2511ed77b9 GIT binary patch literal 16604 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs-64.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs-64.h new file mode 100644 index 0000000..b745721 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs-64.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. + It defines a symbol `__stub_FUNCTION' for each function + in the C library which is a stub, meaning it will fail + every time called, usually setting errno to ENOSYS. */ + +#ifdef _LIBC + #error Applications may not define the macro _LIBC +#endif + +#define __stub___compat_bdflush +#define __stub_chflags +#define __stub_fchflags +#define __stub_gtty +#define __stub_revoke +#define __stub_setlogin +#define __stub_sigreturn +#define __stub_stty diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs-64.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs-64.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..12e36701ef8cb6802c24752e97b2f0f7daf0ff10 GIT binary patch literal 11921 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs.h new file mode 100644 index 0000000..70a1ba0 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs.h @@ -0,0 +1,14 @@ +/* This file is automatically generated. + This file selects the right generated file of `__stub_FUNCTION' macros + based on the architecture being compiled for. */ + + +#if !defined __x86_64__ +# include +#endif +#if defined __x86_64__ && defined __LP64__ +# include +#endif +#if defined __x86_64__ && defined __ILP32__ +# include +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@gnu@stubs.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..0384b13fa02d7f3c2334b8814044e7293afc4d1e GIT binary patch literal 11401 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@libintl.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@libintl.h new file mode 100644 index 0000000..bd6ff4f --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@libintl.h @@ -0,0 +1,123 @@ +/* Message catalogs for internationalization. + Copyright (C) 1995-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + This file is derived from the file libgettext.h in the GNU gettext package. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _LIBINTL_H +#define _LIBINTL_H 1 + +#include + +/* We define an additional symbol to signal that we use the GNU + implementation of gettext. */ +#define __USE_GNU_GETTEXT 1 + +/* Provide information about the supported file formats. Returns the + maximum minor revision number supported for a given major revision. */ +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \ + ((major) == 0 ? 1 : -1) + +__BEGIN_DECLS + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +extern char *gettext (const char *__msgid) + __THROW __attribute_format_arg__ (1); + +/* Look up MSGID in the DOMAINNAME message catalog for the current + LC_MESSAGES locale. */ +extern char *dgettext (const char *__domainname, const char *__msgid) + __THROW __attribute_format_arg__ (2); +extern char *__dgettext (const char *__domainname, const char *__msgid) + __THROW __attribute_format_arg__ (2); + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +extern char *dcgettext (const char *__domainname, + const char *__msgid, int __category) + __THROW __attribute_format_arg__ (2); +extern char *__dcgettext (const char *__domainname, + const char *__msgid, int __category) + __THROW __attribute_format_arg__ (2); + + +/* Similar to `gettext' but select the plural form corresponding to the + number N. */ +extern char *ngettext (const char *__msgid1, const char *__msgid2, + unsigned long int __n) + __THROW __attribute_format_arg__ (1) __attribute_format_arg__ (2); + +/* Similar to `dgettext' but select the plural form corresponding to the + number N. */ +extern char *dngettext (const char *__domainname, const char *__msgid1, + const char *__msgid2, unsigned long int __n) + __THROW __attribute_format_arg__ (2) __attribute_format_arg__ (3); + +/* Similar to `dcgettext' but select the plural form corresponding to the + number N. */ +extern char *dcngettext (const char *__domainname, const char *__msgid1, + const char *__msgid2, unsigned long int __n, + int __category) + __THROW __attribute_format_arg__ (2) __attribute_format_arg__ (3); + + +/* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ +extern char *textdomain (const char *__domainname) __THROW; + +/* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ +extern char *bindtextdomain (const char *__domainname, + const char *__dirname) __THROW; + +/* Specify the character encoding in which the messages from the + DOMAINNAME message catalog will be returned. */ +extern char *bind_textdomain_codeset (const char *__domainname, + const char *__codeset) __THROW; + + +/* Optimized version of the function above. */ +#if defined __OPTIMIZE__ && !defined __cplusplus + +/* We need NULL for `gettext'. */ +# define __need_NULL +# include + +/* We need LC_MESSAGES for `dgettext'. */ +# include + +/* These must be macros. Inlined functions are useless because the + `__builtin_constant_p' predicate in dcgettext would always return + false. */ + +# define gettext(msgid) dgettext (NULL, msgid) + +# define dgettext(domainname, msgid) \ + dcgettext (domainname, msgid, LC_MESSAGES) + +# define ngettext(msgid1, msgid2, n) dngettext (NULL, msgid1, msgid2, n) + +# define dngettext(domainname, msgid1, msgid2, n) \ + dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES) + +#endif /* Optimizing. */ + +__END_DECLS + +#endif /* libintl.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@libintl.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@libintl.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..580f0a2267ffd1ffca3698cc234cb655dce15e02 GIT binary patch literal 16140 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 Z6-= diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@errno.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..94c76fc994343109dc17b4905d453a5ca4ebfa4c GIT binary patch literal 11388 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 + +/* + * This allows for 1024 file descriptors: if NR_OPEN is ever grown + * beyond that you'll have to change this too. But 1024 fd's seem to be + * enough even for such "real" unices like OSF/1, so hopefully this is + * one limit that doesn't have to be changed [again]. + * + * Note that POSIX wants the FD_CLEAR(fd,fdsetp) defines to be in + * (and thus ) - but this is a more logical + * place for them. Solved by having dummy defines in . + */ + +/* + * This macro may have been defined in . But we always + * use the one here. + */ +#undef __FD_SETSIZE +#define __FD_SETSIZE 1024 + +typedef struct { + unsigned long fds_bits[__FD_SETSIZE / (8 * sizeof(long))]; +} __kernel_fd_set; + +/* Type of a signal handler. */ +typedef void (*__kernel_sighandler_t)(int); + +/* Type of a SYSV IPC key. */ +typedef int __kernel_key_t; +typedef int __kernel_mqd_t; + +#include + +#endif /* _LINUX_POSIX_TYPES_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@posix_types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@posix_types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..54f4f09fac1cb029392db6855408578469efbd4e GIT binary patch literal 12071 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 E05Vh{egFUf literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@sched@types.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@sched@types.h new file mode 100644 index 0000000..90606bc --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@sched@types.h @@ -0,0 +1,121 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _LINUX_SCHED_TYPES_H +#define _LINUX_SCHED_TYPES_H + +#include + +#define SCHED_ATTR_SIZE_VER0 48 /* sizeof first published struct */ +#define SCHED_ATTR_SIZE_VER1 56 /* add: util_{min,max} */ + +/* + * Extended scheduling parameters data structure. + * + * This is needed because the original struct sched_param can not be + * altered without introducing ABI issues with legacy applications + * (e.g., in sched_getparam()). + * + * However, the possibility of specifying more than just a priority for + * the tasks may be useful for a wide variety of application fields, e.g., + * multimedia, streaming, automation and control, and many others. + * + * This variant (sched_attr) allows to define additional attributes to + * improve the scheduler knowledge about task requirements. + * + * Scheduling Class Attributes + * =========================== + * + * A subset of sched_attr attributes specifies the + * scheduling policy and relative POSIX attributes: + * + * @size size of the structure, for fwd/bwd compat. + * + * @sched_policy task's scheduling policy + * @sched_nice task's nice value (SCHED_NORMAL/BATCH) + * @sched_priority task's static priority (SCHED_FIFO/RR) + * + * Certain more advanced scheduling features can be controlled by a + * predefined set of flags via the attribute: + * + * @sched_flags for customizing the scheduler behaviour + * + * Sporadic Time-Constrained Task Attributes + * ========================================= + * + * A subset of sched_attr attributes allows to describe a so-called + * sporadic time-constrained task. + * + * In such a model a task is specified by: + * - the activation period or minimum instance inter-arrival time; + * - the maximum (or average, depending on the actual scheduling + * discipline) computation time of all instances, a.k.a. runtime; + * - the deadline (relative to the actual activation time) of each + * instance. + * Very briefly, a periodic (sporadic) task asks for the execution of + * some specific computation --which is typically called an instance-- + * (at most) every period. Moreover, each instance typically lasts no more + * than the runtime and must be completed by time instant t equal to + * the instance activation time + the deadline. + * + * This is reflected by the following fields of the sched_attr structure: + * + * @sched_deadline representative of the task's deadline in nanoseconds + * @sched_runtime representative of the task's runtime in nanoseconds + * @sched_period representative of the task's period in nanoseconds + * + * Given this task model, there are a multiplicity of scheduling algorithms + * and policies, that can be used to ensure all the tasks will make their + * timing constraints. + * + * As of now, the SCHED_DEADLINE policy (sched_dl scheduling class) is the + * only user of this new interface. More information about the algorithm + * available in the scheduling class file or in Documentation/. + * + * Task Utilization Attributes + * =========================== + * + * A subset of sched_attr attributes allows to specify the utilization + * expected for a task. These attributes allow to inform the scheduler about + * the utilization boundaries within which it should schedule the task. These + * boundaries are valuable hints to support scheduler decisions on both task + * placement and frequency selection. + * + * @sched_util_min represents the minimum utilization + * @sched_util_max represents the maximum utilization + * + * Utilization is a value in the range [0..SCHED_CAPACITY_SCALE]. It + * represents the percentage of CPU time used by a task when running at the + * maximum frequency on the highest capacity CPU of the system. For example, a + * 20% utilization task is a task running for 2ms every 10ms at maximum + * frequency. + * + * A task with a min utilization value bigger than 0 is more likely scheduled + * on a CPU with a capacity big enough to fit the specified value. + * A task with a max utilization value smaller than 1024 is more likely + * scheduled on a CPU with no more capacity than the specified value. + * + * A task utilization boundary can be reset by setting the attribute to -1. + */ +struct sched_attr { + __u32 size; + + __u32 sched_policy; + __u64 sched_flags; + + /* SCHED_NORMAL, SCHED_BATCH */ + __s32 sched_nice; + + /* SCHED_FIFO, SCHED_RR */ + __u32 sched_priority; + + /* SCHED_DEADLINE */ + __u64 sched_runtime; + __u64 sched_deadline; + __u64 sched_period; + + /* Utilization hints */ + __u32 sched_util_min; + __u32 sched_util_max; + +}; + +#endif /* _LINUX_SCHED_TYPES_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@sched@types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@sched@types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..efe4a3c115f802373de4d7d28dabb98dee239d86 GIT binary patch literal 16563 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 OBa;A=9ut^^m;wM*C^Z29 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@types.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@types.h new file mode 100644 index 0000000..2518741 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@types.h @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _LINUX_TYPES_H +#define _LINUX_TYPES_H + +#include + +#ifndef __ASSEMBLY__ + +#include + +#ifdef __SIZEOF_INT128__ +typedef __signed__ __int128 __s128 __attribute__((aligned(16))); +typedef unsigned __int128 __u128 __attribute__((aligned(16))); +#endif + +/* + * Below are truly Linux-specific types that should never collide with + * any application/library that wants linux/types.h. + */ + +/* sparse defines __CHECKER__; see Documentation/dev-tools/sparse.rst */ +#ifdef __CHECKER__ +#define __bitwise __attribute__((bitwise)) +#else +#define __bitwise +#endif + +/* The kernel doesn't use this legacy form, but user space does */ +#define __bitwise__ __bitwise + +typedef __u16 __bitwise __le16; +typedef __u16 __bitwise __be16; +typedef __u32 __bitwise __le32; +typedef __u32 __bitwise __be32; +typedef __u64 __bitwise __le64; +typedef __u64 __bitwise __be64; + +typedef __u16 __bitwise __sum16; +typedef __u32 __bitwise __wsum; + +/* + * aligned_u64 should be used in defining kernel<->userspace ABIs to avoid + * common 32/64-bit compat problems. + * 64-bit values align to 4-byte boundaries on x86_32 (and possibly other + * architectures) and to 8-byte boundaries on 64-bit architectures. The new + * aligned_64 type enforces 8-byte alignment so that structs containing + * aligned_64 values have the same alignment on 32-bit and 64-bit architectures. + * No conversions are necessary between 32-bit user-space and a 64-bit kernel. + */ +#define __aligned_u64 __u64 __attribute__((aligned(8))) +#define __aligned_s64 __s64 __attribute__((aligned(8))) +#define __aligned_be64 __be64 __attribute__((aligned(8))) +#define __aligned_le64 __le64 __attribute__((aligned(8))) + +typedef unsigned __bitwise __poll_t; + +#endif /* __ASSEMBLY__ */ +#endif /* _LINUX_TYPES_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@linux@types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..774196c2e3e15fce6919135a4c4ae7cd34ced5bc GIT binary patch literal 13015 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 F003=TIJy7; literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@locale.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@locale.h new file mode 100644 index 0000000..51950ec --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@locale.h @@ -0,0 +1,197 @@ +/* Copyright (C) 1991-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.11 Localization + */ + +#ifndef _LOCALE_H +#define _LOCALE_H 1 + +#include + +#define __need_NULL +#include +#include + +__BEGIN_DECLS + +/* These are the possibilities for the first argument to setlocale. + The code assumes that the lowest LC_* symbol has the value zero. */ +#define LC_CTYPE __LC_CTYPE +#define LC_NUMERIC __LC_NUMERIC +#define LC_TIME __LC_TIME +#define LC_COLLATE __LC_COLLATE +#define LC_MONETARY __LC_MONETARY +#define LC_MESSAGES __LC_MESSAGES +#define LC_ALL __LC_ALL +#define LC_PAPER __LC_PAPER +#define LC_NAME __LC_NAME +#define LC_ADDRESS __LC_ADDRESS +#define LC_TELEPHONE __LC_TELEPHONE +#define LC_MEASUREMENT __LC_MEASUREMENT +#define LC_IDENTIFICATION __LC_IDENTIFICATION + + +/* Structure giving information about numeric and monetary notation. */ +struct lconv +{ + /* Numeric (non-monetary) information. */ + + char *decimal_point; /* Decimal point character. */ + char *thousands_sep; /* Thousands separator. */ + /* Each element is the number of digits in each group; + elements with higher indices are farther left. + An element with value CHAR_MAX means that no further grouping is done. + An element with value 0 means that the previous element is used + for all groups farther left. */ + char *grouping; + + /* Monetary information. */ + + /* First three chars are a currency symbol from ISO 4217. + Fourth char is the separator. Fifth char is '\0'. */ + char *int_curr_symbol; + char *currency_symbol; /* Local currency symbol. */ + char *mon_decimal_point; /* Decimal point character. */ + char *mon_thousands_sep; /* Thousands separator. */ + char *mon_grouping; /* Like `grouping' element (above). */ + char *positive_sign; /* Sign for positive values. */ + char *negative_sign; /* Sign for negative values. */ + char int_frac_digits; /* Int'l fractional digits. */ + char frac_digits; /* Local fractional digits. */ + /* 1 if currency_symbol precedes a positive value, 0 if succeeds. */ + char p_cs_precedes; + /* 1 iff a space separates currency_symbol from a positive value. */ + char p_sep_by_space; + /* 1 if currency_symbol precedes a negative value, 0 if succeeds. */ + char n_cs_precedes; + /* 1 iff a space separates currency_symbol from a negative value. */ + char n_sep_by_space; + /* Positive and negative sign positions: + 0 Parentheses surround the quantity and currency_symbol. + 1 The sign string precedes the quantity and currency_symbol. + 2 The sign string follows the quantity and currency_symbol. + 3 The sign string immediately precedes the currency_symbol. + 4 The sign string immediately follows the currency_symbol. */ + char p_sign_posn; + char n_sign_posn; +#ifdef __USE_ISOC99 + /* 1 if int_curr_symbol precedes a positive value, 0 if succeeds. */ + char int_p_cs_precedes; + /* 1 iff a space separates int_curr_symbol from a positive value. */ + char int_p_sep_by_space; + /* 1 if int_curr_symbol precedes a negative value, 0 if succeeds. */ + char int_n_cs_precedes; + /* 1 iff a space separates int_curr_symbol from a negative value. */ + char int_n_sep_by_space; + /* Positive and negative sign positions: + 0 Parentheses surround the quantity and int_curr_symbol. + 1 The sign string precedes the quantity and int_curr_symbol. + 2 The sign string follows the quantity and int_curr_symbol. + 3 The sign string immediately precedes the int_curr_symbol. + 4 The sign string immediately follows the int_curr_symbol. */ + char int_p_sign_posn; + char int_n_sign_posn; +#else + char __int_p_cs_precedes; + char __int_p_sep_by_space; + char __int_n_cs_precedes; + char __int_n_sep_by_space; + char __int_p_sign_posn; + char __int_n_sign_posn; +#endif +}; + + +/* Set and/or return the current locale. */ +extern char *setlocale (int __category, const char *__locale) __THROW; + +/* Return the numeric/monetary information for the current locale. */ +extern struct lconv *localeconv (void) __THROW; + + +#ifdef __USE_XOPEN2K8 +/* POSIX.1-2008 extends the locale interface with functions for + explicit creation and manipulation of 'locale_t' objects + representing locale contexts, and a set of parallel + locale-sensitive text processing functions that take a locale_t + argument. This enables applications to work with data from + multiple locales simultaneously and thread-safely. */ +# include + +/* Return a reference to a data structure representing a set of locale + datasets. Unlike for the CATEGORY parameter for `setlocale' the + CATEGORY_MASK parameter here uses a single bit for each category, + made by OR'ing together LC_*_MASK bits above. */ +extern locale_t newlocale (int __category_mask, const char *__locale, + locale_t __base) __THROW; + +/* These are the bits that can be set in the CATEGORY_MASK argument to + `newlocale'. In the GNU implementation, LC_FOO_MASK has the value + of (1 << LC_FOO), but this is not a part of the interface that + callers can assume will be true. */ +# define LC_CTYPE_MASK (1 << __LC_CTYPE) +# define LC_NUMERIC_MASK (1 << __LC_NUMERIC) +# define LC_TIME_MASK (1 << __LC_TIME) +# define LC_COLLATE_MASK (1 << __LC_COLLATE) +# define LC_MONETARY_MASK (1 << __LC_MONETARY) +# define LC_MESSAGES_MASK (1 << __LC_MESSAGES) +# define LC_PAPER_MASK (1 << __LC_PAPER) +# define LC_NAME_MASK (1 << __LC_NAME) +# define LC_ADDRESS_MASK (1 << __LC_ADDRESS) +# define LC_TELEPHONE_MASK (1 << __LC_TELEPHONE) +# define LC_MEASUREMENT_MASK (1 << __LC_MEASUREMENT) +# define LC_IDENTIFICATION_MASK (1 << __LC_IDENTIFICATION) +# define LC_ALL_MASK (LC_CTYPE_MASK \ + | LC_NUMERIC_MASK \ + | LC_TIME_MASK \ + | LC_COLLATE_MASK \ + | LC_MONETARY_MASK \ + | LC_MESSAGES_MASK \ + | LC_PAPER_MASK \ + | LC_NAME_MASK \ + | LC_ADDRESS_MASK \ + | LC_TELEPHONE_MASK \ + | LC_MEASUREMENT_MASK \ + | LC_IDENTIFICATION_MASK \ + ) + +/* Return a duplicate of the set of locale in DATASET. All usage + counters are increased if necessary. */ +extern locale_t duplocale (locale_t __dataset) __THROW; + +/* Free the data associated with a locale dataset previously returned + by a call to `setlocale_r'. */ +extern void freelocale (locale_t __dataset) __THROW; + +/* Switch the current thread's locale to DATASET. + If DATASET is null, instead just return the current setting. + The special value LC_GLOBAL_LOCALE is the initial setting + for all threads and can also be installed any time, meaning + the thread uses the global settings controlled by `setlocale'. */ +extern locale_t uselocale (locale_t __dataset) __THROW; + +/* This value can be passed to `uselocale' and may be returned by it. + Passing this value to any other function has undefined behavior. */ +# define LC_GLOBAL_LOCALE ((locale_t) -1L) + +#endif + +__END_DECLS + +#endif /* locale.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@locale.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@locale.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3eda26d21be7b6c1aa7436b372ddbcf1f24314e2 GIT binary patch literal 20270 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. */ + +#ifndef _PTHREAD_H +#define _PTHREAD_H 1 + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#ifdef __USE_MISC +# include +#endif + +/* Detach state. */ +enum +{ + PTHREAD_CREATE_JOINABLE, +#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE + PTHREAD_CREATE_DETACHED +#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED +}; + + +/* Mutex types. */ +enum +{ + PTHREAD_MUTEX_TIMED_NP, + PTHREAD_MUTEX_RECURSIVE_NP, + PTHREAD_MUTEX_ERRORCHECK_NP, + PTHREAD_MUTEX_ADAPTIVE_NP +#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 + , + PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, + PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, + PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, + PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL +#endif +#ifdef __USE_GNU + /* For compatibility. */ + , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP +#endif +}; + + +#ifdef __USE_XOPEN2K +/* Robust mutex or not flags. */ +enum +{ + PTHREAD_MUTEX_STALLED, + PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, + PTHREAD_MUTEX_ROBUST, + PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST +}; +#endif + + +#if defined __USE_POSIX199506 || defined __USE_UNIX98 +/* Mutex protocols. */ +enum +{ + PTHREAD_PRIO_NONE, + PTHREAD_PRIO_INHERIT, + PTHREAD_PRIO_PROTECT +}; +#endif + + +#define PTHREAD_MUTEX_INITIALIZER \ + { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_TIMED_NP) } } +#ifdef __USE_GNU +# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ + { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_RECURSIVE_NP) } } +# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ + { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_ERRORCHECK_NP) } } +# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ + { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_ADAPTIVE_NP) } } +#endif + + +/* Read-write lock types. */ +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +enum +{ + PTHREAD_RWLOCK_PREFER_READER_NP, + PTHREAD_RWLOCK_PREFER_WRITER_NP, + PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, + PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP +}; + + +/* Read-write lock initializers. */ +# define PTHREAD_RWLOCK_INITIALIZER \ + { { __PTHREAD_RWLOCK_INITIALIZER (PTHREAD_RWLOCK_DEFAULT_NP) } } +# ifdef __USE_GNU +# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ + { { __PTHREAD_RWLOCK_INITIALIZER (PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP) } } +# endif +#endif /* Unix98 or XOpen2K */ + + +/* Scheduler inheritance. */ +enum +{ + PTHREAD_INHERIT_SCHED, +#define PTHREAD_INHERIT_SCHED PTHREAD_INHERIT_SCHED + PTHREAD_EXPLICIT_SCHED +#define PTHREAD_EXPLICIT_SCHED PTHREAD_EXPLICIT_SCHED +}; + + +/* Scope handling. */ +enum +{ + PTHREAD_SCOPE_SYSTEM, +#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_SYSTEM + PTHREAD_SCOPE_PROCESS +#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS +}; + + +/* Process shared or private flag. */ +enum +{ + PTHREAD_PROCESS_PRIVATE, +#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE + PTHREAD_PROCESS_SHARED +#define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED +}; + + + +/* Conditional variable handling. */ +#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, 0, 0, {0, 0}, 0, 0 } } + + +/* Cleanup buffers */ +struct _pthread_cleanup_buffer +{ + void (*__routine) (void *); /* Function to call. */ + void *__arg; /* Its argument. */ + int __canceltype; /* Saved cancellation type. */ + struct _pthread_cleanup_buffer *__prev; /* Chaining of cleanup functions. */ +}; + +/* Cancellation */ +enum +{ + PTHREAD_CANCEL_ENABLE, +#define PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE + PTHREAD_CANCEL_DISABLE +#define PTHREAD_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE +}; +enum +{ + PTHREAD_CANCEL_DEFERRED, +#define PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED + PTHREAD_CANCEL_ASYNCHRONOUS +#define PTHREAD_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS +}; +#define PTHREAD_CANCELED ((void *) -1) + + +/* Single execution handling. */ +#define PTHREAD_ONCE_INIT 0 + + +#ifdef __USE_XOPEN2K +/* Value returned by 'pthread_barrier_wait' for one of the threads after + the required number of threads have called this function. + -1 is distinct from 0 and all errno constants */ +# define PTHREAD_BARRIER_SERIAL_THREAD -1 +#endif + + +__BEGIN_DECLS + +/* Create a new thread, starting with execution of START-ROUTINE + getting passed ARG. Creation attributed come from ATTR. The new + handle is stored in *NEWTHREAD. */ +extern int pthread_create (pthread_t *__restrict __newthread, + const pthread_attr_t *__restrict __attr, + void *(*__start_routine) (void *), + void *__restrict __arg) __THROWNL __nonnull ((1, 3)); + +/* Terminate calling thread. + + The registered cleanup handlers are called via exception handling + so we cannot mark this function with __THROW.*/ +extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); + +/* Make calling thread wait for termination of the thread TH. The + exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN + is not NULL. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int pthread_join (pthread_t __th, void **__thread_return); + +#ifdef __USE_GNU +/* Check whether thread TH has terminated. If yes return the status of + the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL. */ +extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW; + +# ifndef __USE_TIME64_REDIRECTS +/* Make calling thread wait for termination of the thread TH, but only + until TIMEOUT. The exit status of the thread is stored in + *THREAD_RETURN, if THREAD_RETURN is not NULL. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, + const struct timespec *__abstime); + +/* Make calling thread wait for termination of the thread TH, but only + until TIMEOUT measured against the clock specified by CLOCKID. The + exit status of the thread is stored in *THREAD_RETURN, if + THREAD_RETURN is not NULL. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int pthread_clockjoin_np (pthread_t __th, void **__thread_return, + clockid_t __clockid, + const struct timespec *__abstime); +# else +# ifdef __REDIRECT +extern int __REDIRECT (pthread_timedjoin_np, + (pthread_t __th, void **__thread_return, + const struct timespec *__abstime), + __pthread_timedjoin_np64); + +extern int __REDIRECT (pthread_clockjoin_np, + (pthread_t __th, void **__thread_return, + clockid_t __clockid, + const struct timespec *__abstime), + __pthread_clockjoin_np64); +# else +# define pthread_timedjoin_np __pthread_timedjoin_np64 +# define pthread_clockjoin_np __pthread_clockjoin_np64 +# endif +# endif +#endif + +/* Indicate that the thread TH is never to be joined with PTHREAD_JOIN. + The resources of TH will therefore be freed immediately when it + terminates, instead of waiting for another thread to perform PTHREAD_JOIN + on it. */ +extern int pthread_detach (pthread_t __th) __THROW; + + +/* Obtain the identifier of the current thread. */ +extern pthread_t pthread_self (void) __THROW __attribute__ ((__const__)); + +/* Compare two thread identifiers. */ +extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) + __THROW __attribute__ ((__const__)); + + +/* Thread attribute handling. */ + +/* Initialize thread attribute *ATTR with default attributes + (detachstate is PTHREAD_JOINABLE, scheduling policy is SCHED_OTHER, + no user-provided stack). */ +extern int pthread_attr_init (pthread_attr_t *__attr) __THROW __nonnull ((1)); + +/* Destroy thread attribute *ATTR. */ +extern int pthread_attr_destroy (pthread_attr_t *__attr) + __THROW __nonnull ((1)); + +/* Get detach state attribute. */ +extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, + int *__detachstate) + __THROW __nonnull ((1, 2)); + +/* Set detach state attribute. */ +extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, + int __detachstate) + __THROW __nonnull ((1)); + + +/* Get the size of the guard area created for stack overflow protection. */ +extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, + size_t *__guardsize) + __THROW __nonnull ((1, 2)); + +/* Set the size of the guard area created for stack overflow protection. */ +extern int pthread_attr_setguardsize (pthread_attr_t *__attr, + size_t __guardsize) + __THROW __nonnull ((1)); + + +/* Return in *PARAM the scheduling parameters of *ATTR. */ +extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, + struct sched_param *__restrict __param) + __THROW __nonnull ((1, 2)); + +/* Set scheduling parameters (priority, etc) in *ATTR according to PARAM. */ +extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, + const struct sched_param *__restrict + __param) __THROW __nonnull ((1, 2)); + +/* Return in *POLICY the scheduling policy of *ATTR. */ +extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict + __attr, int *__restrict __policy) + __THROW __nonnull ((1, 2)); + +/* Set scheduling policy in *ATTR according to POLICY. */ +extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) + __THROW __nonnull ((1)); + +/* Return in *INHERIT the scheduling inheritance mode of *ATTR. */ +extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict + __attr, int *__restrict __inherit) + __THROW __nonnull ((1, 2)); + +/* Set scheduling inheritance mode in *ATTR according to INHERIT. */ +extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, + int __inherit) + __THROW __nonnull ((1)); + + +/* Return in *SCOPE the scheduling contention scope of *ATTR. */ +extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, + int *__restrict __scope) + __THROW __nonnull ((1, 2)); + +/* Set scheduling contention scope in *ATTR according to SCOPE. */ +extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) + __THROW __nonnull ((1)); + +/* Return the previously set address for the stack. */ +extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict + __attr, void **__restrict __stackaddr) + __THROW __nonnull ((1, 2)) __attribute_deprecated__; + +/* Set the starting address of the stack of the thread to be created. + Depending on whether the stack grows up or down the value must either + be higher or lower than all the address in the memory block. The + minimal size of the block must be PTHREAD_STACK_MIN. */ +extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, + void *__stackaddr) + __THROW __nonnull ((1)) __attribute_deprecated__; + +/* Return the currently used minimal stack size. */ +extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict + __attr, size_t *__restrict __stacksize) + __THROW __nonnull ((1, 2)); + +/* Add information about the minimum stack size needed for the thread + to be started. This size must never be less than PTHREAD_STACK_MIN + and must also not exceed the system limits. */ +extern int pthread_attr_setstacksize (pthread_attr_t *__attr, + size_t __stacksize) + __THROW __nonnull ((1)); + +#ifdef __USE_XOPEN2K +/* Return the previously set address for the stack. */ +extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, + void **__restrict __stackaddr, + size_t *__restrict __stacksize) + __THROW __nonnull ((1, 2, 3)); + +/* The following two interfaces are intended to replace the last two. They + require setting the address as well as the size since only setting the + address will make the implementation on some architectures impossible. */ +extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, + size_t __stacksize) __THROW __nonnull ((1)); +#endif + +#ifdef __USE_GNU +/* Thread created with attribute ATTR will be limited to run only on + the processors represented in CPUSET. */ +extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, + size_t __cpusetsize, + const cpu_set_t *__cpuset) + __THROW __nonnull ((1, 3)); + +/* Get bit set in CPUSET representing the processors threads created with + ATTR can run on. */ +extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, + size_t __cpusetsize, + cpu_set_t *__cpuset) + __THROW __nonnull ((1, 3)); + +/* Get the default attributes used by pthread_create in this process. */ +extern int pthread_getattr_default_np (pthread_attr_t *__attr) + __THROW __nonnull ((1)); + +/* Store *SIGMASK as the signal mask for the new thread in *ATTR. */ +extern int pthread_attr_setsigmask_np (pthread_attr_t *__attr, + const __sigset_t *sigmask); + +/* Store the signal mask of *ATTR in *SIGMASK. If there is no signal + mask stored, return PTHREAD_ATTR_NOSIGMASK_NP. Return zero on + success. */ +extern int pthread_attr_getsigmask_np (const pthread_attr_t *__attr, + __sigset_t *sigmask); + +/* Special return value from pthread_attr_getsigmask_np if the signal + mask has not been set. */ +#define PTHREAD_ATTR_NO_SIGMASK_NP (-1) + +/* Set the default attributes to be used by pthread_create in this + process. */ +extern int pthread_setattr_default_np (const pthread_attr_t *__attr) + __THROW __nonnull ((1)); + +/* Initialize thread attribute *ATTR with attributes corresponding to the + already running thread TH. It shall be called on uninitialized ATTR + and destroyed with pthread_attr_destroy when no longer needed. */ +extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) + __THROW __nonnull ((2)); +#endif + + +/* Functions for scheduling control. */ + +/* Set the scheduling parameters for TARGET_THREAD according to POLICY + and *PARAM. */ +extern int pthread_setschedparam (pthread_t __target_thread, int __policy, + const struct sched_param *__param) + __THROW __nonnull ((3)); + +/* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */ +extern int pthread_getschedparam (pthread_t __target_thread, + int *__restrict __policy, + struct sched_param *__restrict __param) + __THROW __nonnull ((2, 3)); + +/* Set the scheduling priority for TARGET_THREAD. */ +extern int pthread_setschedprio (pthread_t __target_thread, int __prio) + __THROW; + + +#ifdef __USE_GNU +/* Get thread name visible in the kernel and its interfaces. */ +extern int pthread_getname_np (pthread_t __target_thread, char *__buf, + size_t __buflen) + __THROW __nonnull ((2)); + +/* Set thread name visible in the kernel and its interfaces. */ +extern int pthread_setname_np (pthread_t __target_thread, const char *__name) + __THROW __nonnull ((2)); +#endif + + +#ifdef __USE_UNIX98 +/* Determine level of concurrency. */ +extern int pthread_getconcurrency (void) __THROW; + +/* Set new concurrency level to LEVEL. */ +extern int pthread_setconcurrency (int __level) __THROW; +#endif + +#ifdef __USE_GNU +extern int pthread_yield (void) __THROW; +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (pthread_yield, (void), sched_yield) + __attribute_deprecated_msg__ ("\ +pthread_yield is deprecated, use sched_yield instead"); +# else +# define pthread_yield sched_yield +# endif + + +/* Limit specified thread TH to run only on the processors represented + in CPUSET. */ +extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, + const cpu_set_t *__cpuset) + __THROW __nonnull ((3)); + +/* Get bit set in CPUSET representing the processors TH can run on. */ +extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, + cpu_set_t *__cpuset) + __THROW __nonnull ((3)); +#endif + + +/* Functions for handling initialization. */ + +/* Guarantee that the initialization function INIT_ROUTINE will be called + only once, even if pthread_once is executed several times with the + same ONCE_CONTROL argument. ONCE_CONTROL must point to a static or + extern variable initialized to PTHREAD_ONCE_INIT. + + The initialization functions might throw exception which is why + this function is not marked with __THROW. */ +extern int pthread_once (pthread_once_t *__once_control, + void (*__init_routine) (void)) __nonnull ((1, 2)); + + +/* Functions for handling cancellation. + + Note that these functions are explicitly not marked to not throw an + exception in C++ code. If cancellation is implemented by unwinding + this is necessary to have the compiler generate the unwind information. */ + +/* Set cancellability state of current thread to STATE, returning old + state in *OLDSTATE if OLDSTATE is not NULL. */ +extern int pthread_setcancelstate (int __state, int *__oldstate); + +/* Set cancellation state of current thread to TYPE, returning the old + type in *OLDTYPE if OLDTYPE is not NULL. */ +extern int pthread_setcanceltype (int __type, int *__oldtype); + +/* Cancel THREAD immediately or at the next possibility. */ +extern int pthread_cancel (pthread_t __th); + +/* Test for pending cancellation for the current thread and terminate + the thread as per pthread_exit(PTHREAD_CANCELED) if it has been + cancelled. */ +extern void pthread_testcancel (void); + + +/* Cancellation handling with integration into exception handling. */ + +struct __cancel_jmp_buf_tag +{ + __jmp_buf __cancel_jmp_buf; + int __mask_was_saved; +}; + +typedef struct +{ + struct __cancel_jmp_buf_tag __cancel_jmp_buf[1]; + void *__pad[4]; +} __pthread_unwind_buf_t __attribute__ ((__aligned__)); + +/* No special attributes by default. */ +#ifndef __cleanup_fct_attribute +# define __cleanup_fct_attribute +#endif + + +/* Structure to hold the cleanup handler information. */ +struct __pthread_cleanup_frame +{ + void (*__cancel_routine) (void *); + void *__cancel_arg; + int __do_it; + int __cancel_type; +}; + +#if defined __GNUC__ && defined __EXCEPTIONS +# ifdef __cplusplus +/* Class to handle cancellation handler invocation. */ +class __pthread_cleanup_class +{ + void (*__cancel_routine) (void *); + void *__cancel_arg; + int __do_it; + int __cancel_type; + + public: + __pthread_cleanup_class (void (*__fct) (void *), void *__arg) + : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } + ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } + void __setdoit (int __newval) { __do_it = __newval; } + void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, + &__cancel_type); } + void __restore () const { pthread_setcanceltype (__cancel_type, 0); } +}; + +/* Install a cleanup handler: ROUTINE will be called with arguments ARG + when the thread is canceled or calls pthread_exit. ROUTINE will also + be called with arguments ARG when the matching pthread_cleanup_pop + is executed with non-zero EXECUTE argument. + + pthread_cleanup_push and pthread_cleanup_pop are macros and must always + be used in matching pairs at the same nesting level of braces. */ +# define pthread_cleanup_push(routine, arg) \ + do { \ + __pthread_cleanup_class __clframe (routine, arg) + +/* Remove a cleanup handler installed by the matching pthread_cleanup_push. + If EXECUTE is non-zero, the handler function is called. */ +# define pthread_cleanup_pop(execute) \ + __clframe.__setdoit (execute); \ + } while (0) + +# ifdef __USE_GNU +/* Install a cleanup handler as pthread_cleanup_push does, but also + saves the current cancellation type and sets it to deferred + cancellation. */ +# define pthread_cleanup_push_defer_np(routine, arg) \ + do { \ + __pthread_cleanup_class __clframe (routine, arg); \ + __clframe.__defer () + +/* Remove a cleanup handler as pthread_cleanup_pop does, but also + restores the cancellation type that was in effect when the matching + pthread_cleanup_push_defer was called. */ +# define pthread_cleanup_pop_restore_np(execute) \ + __clframe.__restore (); \ + __clframe.__setdoit (execute); \ + } while (0) +# endif +# else +/* Function called to call the cleanup handler. As an extern inline + function the compiler is free to decide inlining the change when + needed or fall back on the copy which must exist somewhere + else. */ +__extern_inline void +__pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame) +{ + if (__frame->__do_it) + __frame->__cancel_routine (__frame->__cancel_arg); +} + +/* Install a cleanup handler: ROUTINE will be called with arguments ARG + when the thread is canceled or calls pthread_exit. ROUTINE will also + be called with arguments ARG when the matching pthread_cleanup_pop + is executed with non-zero EXECUTE argument. + + pthread_cleanup_push and pthread_cleanup_pop are macros and must always + be used in matching pairs at the same nesting level of braces. */ +# define pthread_cleanup_push(routine, arg) \ + do { \ + struct __pthread_cleanup_frame __clframe \ + __attribute__ ((__cleanup__ (__pthread_cleanup_routine))) \ + = { .__cancel_routine = (routine), .__cancel_arg = (arg), \ + .__do_it = 1 }; + +/* Remove a cleanup handler installed by the matching pthread_cleanup_push. + If EXECUTE is non-zero, the handler function is called. */ +# define pthread_cleanup_pop(execute) \ + __clframe.__do_it = (execute); \ + } while (0) + +# ifdef __USE_GNU +/* Install a cleanup handler as pthread_cleanup_push does, but also + saves the current cancellation type and sets it to deferred + cancellation. */ +# define pthread_cleanup_push_defer_np(routine, arg) \ + do { \ + struct __pthread_cleanup_frame __clframe \ + __attribute__ ((__cleanup__ (__pthread_cleanup_routine))) \ + = { .__cancel_routine = (routine), .__cancel_arg = (arg), \ + .__do_it = 1 }; \ + (void) pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, \ + &__clframe.__cancel_type) + +/* Remove a cleanup handler as pthread_cleanup_pop does, but also + restores the cancellation type that was in effect when the matching + pthread_cleanup_push_defer was called. */ +# define pthread_cleanup_pop_restore_np(execute) \ + (void) pthread_setcanceltype (__clframe.__cancel_type, NULL); \ + __clframe.__do_it = (execute); \ + } while (0) +# endif +# endif +#else +/* Install a cleanup handler: ROUTINE will be called with arguments ARG + when the thread is canceled or calls pthread_exit. ROUTINE will also + be called with arguments ARG when the matching pthread_cleanup_pop + is executed with non-zero EXECUTE argument. + + pthread_cleanup_push and pthread_cleanup_pop are macros and must always + be used in matching pairs at the same nesting level of braces. */ +# define pthread_cleanup_push(routine, arg) \ + do { \ + __pthread_unwind_buf_t __cancel_buf; \ + void (*__cancel_routine) (void *) = (routine); \ + void *__cancel_arg = (arg); \ + int __not_first_call = __sigsetjmp_cancel (__cancel_buf.__cancel_jmp_buf, \ + 0); \ + if (__glibc_unlikely (__not_first_call)) \ + { \ + __cancel_routine (__cancel_arg); \ + __pthread_unwind_next (&__cancel_buf); \ + /* NOTREACHED */ \ + } \ + \ + __pthread_register_cancel (&__cancel_buf); \ + do { +extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf) + __cleanup_fct_attribute; + +/* Remove a cleanup handler installed by the matching pthread_cleanup_push. + If EXECUTE is non-zero, the handler function is called. */ +# define pthread_cleanup_pop(execute) \ + do { } while (0);/* Empty to allow label before pthread_cleanup_pop. */\ + } while (0); \ + __pthread_unregister_cancel (&__cancel_buf); \ + if (execute) \ + __cancel_routine (__cancel_arg); \ + } while (0) +extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf) + __cleanup_fct_attribute; + +# ifdef __USE_GNU +/* Install a cleanup handler as pthread_cleanup_push does, but also + saves the current cancellation type and sets it to deferred + cancellation. */ +# define pthread_cleanup_push_defer_np(routine, arg) \ + do { \ + __pthread_unwind_buf_t __cancel_buf; \ + void (*__cancel_routine) (void *) = (routine); \ + void *__cancel_arg = (arg); \ + int __not_first_call = __sigsetjmp_cancel (__cancel_buf.__cancel_jmp_buf, \ + 0); \ + if (__glibc_unlikely (__not_first_call)) \ + { \ + __cancel_routine (__cancel_arg); \ + __pthread_unwind_next (&__cancel_buf); \ + /* NOTREACHED */ \ + } \ + \ + __pthread_register_cancel_defer (&__cancel_buf); \ + do { +extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf) + __cleanup_fct_attribute; + +/* Remove a cleanup handler as pthread_cleanup_pop does, but also + restores the cancellation type that was in effect when the matching + pthread_cleanup_push_defer was called. */ +# define pthread_cleanup_pop_restore_np(execute) \ + do { } while (0);/* Empty to allow label before pthread_cleanup_pop. */\ + } while (0); \ + __pthread_unregister_cancel_restore (&__cancel_buf); \ + if (execute) \ + __cancel_routine (__cancel_arg); \ + } while (0) +extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf) + __cleanup_fct_attribute; +# endif + +/* Internal interface to initiate cleanup. */ +extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf) + __cleanup_fct_attribute __attribute__ ((__noreturn__)) +# ifndef SHARED + __attribute__ ((__weak__)) +# endif + ; +#endif + +/* Function used in the macros. Calling __sigsetjmp, with its first + argument declared as an array, results in a -Wstringop-overflow + warning from GCC 11 because struct pthread_unwind_buf is smaller + than jmp_buf. The calls from the macros have __SAVEMASK set to 0, + so nothing beyond the common prefix is used and this warning is a + false positive. Use an alias with its first argument declared to + use the type in the macros if possible to avoid this warning. */ +#if __GNUC_PREREQ (11, 0) +extern int __REDIRECT_NTHNL (__sigsetjmp_cancel, + (struct __cancel_jmp_buf_tag __env[1], + int __savemask), + __sigsetjmp) __attribute_returns_twice__; +#else +# define __sigsetjmp_cancel(env, savemask) \ + __sigsetjmp ((struct __jmp_buf_tag *) (void *) (env), (savemask)) +extern int __sigsetjmp (struct __jmp_buf_tag __env[1], + int __savemask) __THROWNL; +#endif + + +/* Mutex handling. */ + +/* Initialize a mutex. */ +extern int pthread_mutex_init (pthread_mutex_t *__mutex, + const pthread_mutexattr_t *__mutexattr) + __THROW __nonnull ((1)); + +/* Destroy a mutex. */ +extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) + __THROW __nonnull ((1)); + +/* Try locking a mutex. */ +extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) + __THROWNL __nonnull ((1)); + +/* Lock a mutex. */ +extern int pthread_mutex_lock (pthread_mutex_t *__mutex) + __THROWNL __nonnull ((1)); + +#ifdef __USE_XOPEN2K +/* Wait until lock becomes available, or specified time passes. */ +# ifndef __USE_TIME64_REDIRECTS +extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 2)); +# else +# ifdef __REDIRECT_NTHNL +extern int __REDIRECT_NTHNL (pthread_mutex_timedlock, + (pthread_mutex_t *__restrict __mutex, + const struct timespec *__restrict __abstime), + __pthread_mutex_timedlock64) __nonnull ((1, 2)); +# else +# define pthread_mutex_timedlock __pthread_mutex_timedlock64 +# endif +# endif +#endif + +#ifdef __USE_GNU +# ifndef __USE_TIME64_REDIRECTS +extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex, + clockid_t __clockid, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 3)); +# else +# ifdef __REDIRECT_NTHNL +extern int __REDIRECT_NTHNL (pthread_mutex_clocklock, + (pthread_mutex_t *__restrict __mutex, + clockid_t __clockid, + const struct timespec *__restrict __abstime), + __pthread_mutex_clocklock64) __nonnull ((1, 3)); +# else +# define pthread_mutex_clocklock __pthread_mutex_clocklock64 +# endif +# endif +#endif + +/* Unlock a mutex. */ +extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) + __THROWNL __nonnull ((1)); + + +/* Get the priority ceiling of MUTEX. */ +extern int pthread_mutex_getprioceiling (const pthread_mutex_t * + __restrict __mutex, + int *__restrict __prioceiling) + __THROW __nonnull ((1, 2)); + +/* Set the priority ceiling of MUTEX to PRIOCEILING, return old + priority ceiling value in *OLD_CEILING. */ +extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, + int __prioceiling, + int *__restrict __old_ceiling) + __THROW __nonnull ((1, 3)); + + +#ifdef __USE_XOPEN2K8 +/* Declare the state protected by MUTEX as consistent. */ +extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) + __THROW __nonnull ((1)); +# ifdef __USE_GNU +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (pthread_mutex_consistent_np, (pthread_mutex_t *), + pthread_mutex_consistent) __nonnull ((1)) + __attribute_deprecated_msg__ ("\ +pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent"); +# else +# define pthread_mutex_consistent_np pthread_mutex_consistent +# endif +# endif +#endif + + +/* Functions for handling mutex attributes. */ + +/* Initialize mutex attribute object ATTR with default attributes + (kind is PTHREAD_MUTEX_TIMED_NP). */ +extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) + __THROW __nonnull ((1)); + +/* Destroy mutex attribute object ATTR. */ +extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) + __THROW __nonnull ((1)); + +/* Get the process-shared flag of the mutex attribute ATTR. */ +extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * + __restrict __attr, + int *__restrict __pshared) + __THROW __nonnull ((1, 2)); + +/* Set the process-shared flag of the mutex attribute ATTR. */ +extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, + int __pshared) + __THROW __nonnull ((1)); + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 +/* Return in *KIND the mutex kind attribute in *ATTR. */ +extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict + __attr, int *__restrict __kind) + __THROW __nonnull ((1, 2)); + +/* Set the mutex kind attribute in *ATTR to KIND (either PTHREAD_MUTEX_NORMAL, + PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_ERRORCHECK, or + PTHREAD_MUTEX_DEFAULT). */ +extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) + __THROW __nonnull ((1)); +#endif + +/* Return in *PROTOCOL the mutex protocol attribute in *ATTR. */ +extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * + __restrict __attr, + int *__restrict __protocol) + __THROW __nonnull ((1, 2)); + +/* Set the mutex protocol attribute in *ATTR to PROTOCOL (either + PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT, or PTHREAD_PRIO_PROTECT). */ +extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, + int __protocol) + __THROW __nonnull ((1)); + +/* Return in *PRIOCEILING the mutex prioceiling attribute in *ATTR. */ +extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * + __restrict __attr, + int *__restrict __prioceiling) + __THROW __nonnull ((1, 2)); + +/* Set the mutex prioceiling attribute in *ATTR to PRIOCEILING. */ +extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, + int __prioceiling) + __THROW __nonnull ((1)); + +#ifdef __USE_XOPEN2K +/* Get the robustness flag of the mutex attribute ATTR. */ +extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, + int *__robustness) + __THROW __nonnull ((1, 2)); +# ifdef __USE_GNU +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (pthread_mutexattr_getrobust_np, + (pthread_mutexattr_t *, int *), + pthread_mutexattr_getrobust) __nonnull ((1)) + __attribute_deprecated_msg__ ("\ +pthread_mutexattr_getrobust_np is deprecated, use pthread_mutexattr_getrobust"); +# else +# define pthread_mutexattr_getrobust_np pthread_mutexattr_getrobust +# endif +# endif + +/* Set the robustness flag of the mutex attribute ATTR. */ +extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, + int __robustness) + __THROW __nonnull ((1)); +# ifdef __USE_GNU +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (pthread_mutexattr_setrobust_np, + (pthread_mutexattr_t *, int), + pthread_mutexattr_setrobust) __nonnull ((1)) + __attribute_deprecated_msg__ ("\ +pthread_mutexattr_setrobust_np is deprecated, use pthread_mutexattr_setrobust"); +# else +# define pthread_mutexattr_setrobust_np pthread_mutexattr_setrobust +# endif +# endif +#endif + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +/* Functions for handling read-write locks. */ + +/* Initialize read-write lock RWLOCK using attributes ATTR, or use + the default values if later is NULL. */ +extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, + const pthread_rwlockattr_t *__restrict + __attr) __THROW __nonnull ((1)); + +/* Destroy read-write lock RWLOCK. */ +extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) + __THROW __nonnull ((1)); + +/* Acquire read lock for RWLOCK. */ +extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) + __THROWNL __nonnull ((1)); + +/* Try to acquire read lock for RWLOCK. */ +extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) + __THROWNL __nonnull ((1)); + +# ifdef __USE_XOPEN2K +/* Try to acquire read lock for RWLOCK or return after specified time. */ +# ifndef __USE_TIME64_REDIRECTS +extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 2)); +# else +# ifdef __REDIRECT_NTHNL +extern int __REDIRECT_NTHNL (pthread_rwlock_timedrdlock, + (pthread_rwlock_t *__restrict __rwlock, + const struct timespec *__restrict __abstime), + __pthread_rwlock_timedrdlock64) + __nonnull ((1, 2)); +# else +# define pthread_rwlock_timedrdlock __pthread_rwlock_timedrdlock64 +# endif +# endif +# endif + +# ifdef __USE_GNU +# ifndef __USE_TIME64_REDIRECTS +extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock, + clockid_t __clockid, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 3)); +# else +# ifdef __REDIRECT_NTHNL +extern int __REDIRECT_NTHNL (pthread_rwlock_clockrdlock, + (pthread_rwlock_t *__restrict __rwlock, + clockid_t __clockid, + const struct timespec *__restrict __abstime), + __pthread_rwlock_clockrdlock64) + __nonnull ((1, 3)); +# else +# define pthread_rwlock_clockrdlock __pthread_rwlock_clockrdlock64 +# endif +# endif +# endif + +/* Acquire write lock for RWLOCK. */ +extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) + __THROWNL __nonnull ((1)); + +/* Try to acquire write lock for RWLOCK. */ +extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) + __THROWNL __nonnull ((1)); + +# ifdef __USE_XOPEN2K +/* Try to acquire write lock for RWLOCK or return after specified time. */ +# ifndef __USE_TIME64_REDIRECTS +extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 2)); +# else +# ifdef __REDIRECT_NTHNL +extern int __REDIRECT_NTHNL (pthread_rwlock_timedwrlock, + (pthread_rwlock_t *__restrict __rwlock, + const struct timespec *__restrict __abstime), + __pthread_rwlock_timedwrlock64) + __nonnull ((1, 2)); +# else +# define pthread_rwlock_timedwrlock __pthread_rwlock_timedwrlock64 +# endif +# endif +# endif + +# ifdef __USE_GNU +# ifndef __USE_TIME64_REDIRECTS +extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock, + clockid_t __clockid, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 3)); + +# else +# ifdef __REDIRECT_NTHNL +extern int __REDIRECT_NTHNL (pthread_rwlock_clockwrlock, + (pthread_rwlock_t *__restrict __rwlock, + clockid_t __clockid, + const struct timespec *__restrict __abstime), + __pthread_rwlock_clockwrlock64) + __nonnull ((1, 3)); +# else +# define pthread_rwlock_clockwrlock __pthread_rwlock_clockwrlock64 +# endif +# endif +# endif + +/* Unlock RWLOCK. */ +extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) + __THROWNL __nonnull ((1)); + + +/* Functions for handling read-write lock attributes. */ + +/* Initialize attribute object ATTR with default values. */ +extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) + __THROW __nonnull ((1)); + +/* Destroy attribute object ATTR. */ +extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) + __THROW __nonnull ((1)); + +/* Return current setting of process-shared attribute of ATTR in PSHARED. */ +extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * + __restrict __attr, + int *__restrict __pshared) + __THROW __nonnull ((1, 2)); + +/* Set process-shared attribute of ATTR to PSHARED. */ +extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, + int __pshared) + __THROW __nonnull ((1)); + +/* Return current setting of reader/writer preference. */ +extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * + __restrict __attr, + int *__restrict __pref) + __THROW __nonnull ((1, 2)); + +/* Set reader/write preference. */ +extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, + int __pref) __THROW __nonnull ((1)); +#endif + + +/* Functions for handling conditional variables. */ + +/* Initialize condition variable COND using attributes ATTR, or use + the default values if later is NULL. */ +extern int pthread_cond_init (pthread_cond_t *__restrict __cond, + const pthread_condattr_t *__restrict __cond_attr) + __THROW __nonnull ((1)); + +/* Destroy condition variable COND. */ +extern int pthread_cond_destroy (pthread_cond_t *__cond) + __THROW __nonnull ((1)); + +/* Wake up one thread waiting for condition variable COND. */ +extern int pthread_cond_signal (pthread_cond_t *__cond) + __THROWNL __nonnull ((1)); + +/* Wake up all threads waiting for condition variables COND. */ +extern int pthread_cond_broadcast (pthread_cond_t *__cond) + __THROWNL __nonnull ((1)); + +/* Wait for condition variable COND to be signaled or broadcast. + MUTEX is assumed to be locked before. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, + pthread_mutex_t *__restrict __mutex) + __nonnull ((1, 2)); + +/* Wait for condition variable COND to be signaled or broadcast until + ABSTIME. MUTEX is assumed to be locked before. ABSTIME is an + absolute time specification; zero is the beginning of the epoch + (00:00:00 GMT, January 1, 1970). + + This function is a cancellation point and therefore not marked with + __THROW. */ +# ifndef __USE_TIME64_REDIRECTS +extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, + pthread_mutex_t *__restrict __mutex, + const struct timespec *__restrict __abstime) + __nonnull ((1, 2, 3)); +# else +# ifdef __REDIRECT +extern int __REDIRECT (pthread_cond_timedwait, + (pthread_cond_t *__restrict __cond, + pthread_mutex_t *__restrict __mutex, + const struct timespec *__restrict __abstime), + __pthread_cond_timedwait64) + __nonnull ((1, 2, 3)); +# else +# define pthread_cond_timedwait __pthread_cond_timedwait64 +# endif +# endif + +# ifdef __USE_GNU +/* Wait for condition variable COND to be signaled or broadcast until + ABSTIME measured by the specified clock. MUTEX is assumed to be + locked before. CLOCK is the clock to use. ABSTIME is an absolute + time specification against CLOCK's epoch. + + This function is a cancellation point and therefore not marked with + __THROW. */ +# ifndef __USE_TIME64_REDIRECTS +extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond, + pthread_mutex_t *__restrict __mutex, + __clockid_t __clock_id, + const struct timespec *__restrict __abstime) + __nonnull ((1, 2, 4)); +# else +# ifdef __REDIRECT +extern int __REDIRECT (pthread_cond_clockwait, + (pthread_cond_t *__restrict __cond, + pthread_mutex_t *__restrict __mutex, + __clockid_t __clock_id, + const struct timespec *__restrict __abstime), + __pthread_cond_clockwait64) + __nonnull ((1, 2, 4)); +# else +# define pthread_cond_clockwait __pthread_cond_clockwait64 +# endif +# endif +# endif + +/* Functions for handling condition variable attributes. */ + +/* Initialize condition variable attribute ATTR. */ +extern int pthread_condattr_init (pthread_condattr_t *__attr) + __THROW __nonnull ((1)); + +/* Destroy condition variable attribute ATTR. */ +extern int pthread_condattr_destroy (pthread_condattr_t *__attr) + __THROW __nonnull ((1)); + +/* Get the process-shared flag of the condition variable attribute ATTR. */ +extern int pthread_condattr_getpshared (const pthread_condattr_t * + __restrict __attr, + int *__restrict __pshared) + __THROW __nonnull ((1, 2)); + +/* Set the process-shared flag of the condition variable attribute ATTR. */ +extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, + int __pshared) __THROW __nonnull ((1)); + +#ifdef __USE_XOPEN2K +/* Get the clock selected for the condition variable attribute ATTR. */ +extern int pthread_condattr_getclock (const pthread_condattr_t * + __restrict __attr, + __clockid_t *__restrict __clock_id) + __THROW __nonnull ((1, 2)); + +/* Set the clock selected for the condition variable attribute ATTR. */ +extern int pthread_condattr_setclock (pthread_condattr_t *__attr, + __clockid_t __clock_id) + __THROW __nonnull ((1)); +#endif + + +#ifdef __USE_XOPEN2K +/* Functions to handle spinlocks. */ + +/* Initialize the spinlock LOCK. If PSHARED is nonzero the spinlock can + be shared between different processes. */ +extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) + __THROW __nonnull ((1)); + +/* Destroy the spinlock LOCK. */ +extern int pthread_spin_destroy (pthread_spinlock_t *__lock) + __THROW __nonnull ((1)); + +/* Wait until spinlock LOCK is retrieved. */ +extern int pthread_spin_lock (pthread_spinlock_t *__lock) + __THROWNL __nonnull ((1)); + +/* Try to lock spinlock LOCK. */ +extern int pthread_spin_trylock (pthread_spinlock_t *__lock) + __THROWNL __nonnull ((1)); + +/* Release spinlock LOCK. */ +extern int pthread_spin_unlock (pthread_spinlock_t *__lock) + __THROWNL __nonnull ((1)); + + +/* Functions to handle barriers. */ + +/* Initialize BARRIER with the attributes in ATTR. The barrier is + opened when COUNT waiters arrived. */ +extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, + const pthread_barrierattr_t *__restrict + __attr, unsigned int __count) + __THROW __nonnull ((1)); + +/* Destroy a previously dynamically initialized barrier BARRIER. */ +extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) + __THROW __nonnull ((1)); + +/* Wait on barrier BARRIER. */ +extern int pthread_barrier_wait (pthread_barrier_t *__barrier) + __THROWNL __nonnull ((1)); + + +/* Initialize barrier attribute ATTR. */ +extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) + __THROW __nonnull ((1)); + +/* Destroy previously dynamically initialized barrier attribute ATTR. */ +extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) + __THROW __nonnull ((1)); + +/* Get the process-shared flag of the barrier attribute ATTR. */ +extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * + __restrict __attr, + int *__restrict __pshared) + __THROW __nonnull ((1, 2)); + +/* Set the process-shared flag of the barrier attribute ATTR. */ +extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, + int __pshared) + __THROW __nonnull ((1)); +#endif + + +/* Functions for handling thread-specific data. */ + +/* Create a key value identifying a location in the thread-specific + data area. Each thread maintains a distinct thread-specific data + area. DESTR_FUNCTION, if non-NULL, is called with the value + associated to that key when the key is destroyed. + DESTR_FUNCTION is not called if the value associated is NULL when + the key is destroyed. */ +extern int pthread_key_create (pthread_key_t *__key, + void (*__destr_function) (void *)) + __THROW __nonnull ((1)); + +/* Destroy KEY. */ +extern int pthread_key_delete (pthread_key_t __key) __THROW; + +/* Return current value of the thread-specific data slot identified by KEY. */ +extern void *pthread_getspecific (pthread_key_t __key) __THROW; + +/* Store POINTER in the thread-specific data slot identified by KEY. */ +extern int pthread_setspecific (pthread_key_t __key, + const void *__pointer) + __THROW __attr_access_none (2); + + +#ifdef __USE_XOPEN2K +/* Get ID of CPU-time clock for thread THREAD_ID. */ +extern int pthread_getcpuclockid (pthread_t __thread_id, + __clockid_t *__clock_id) + __THROW __nonnull ((2)); +#endif + +#ifdef __USE_GNU +/* Return the Linux TID for THREAD_ID. Returns -1 on failure. */ +extern pid_t pthread_gettid_np (pthread_t __thread_id); +#endif + + +/* Install handlers to be called when a new process is created with FORK. + The PREPARE handler is called in the parent process just before performing + FORK. The PARENT handler is called in the parent process just after FORK. + The CHILD handler is called in the child process. Each of the three + handlers can be NULL, meaning that no handler needs to be called at that + point. + PTHREAD_ATFORK can be called several times, in which case the PREPARE + handlers are called in LIFO order (last added with PTHREAD_ATFORK, + first called before FORK), and the PARENT and CHILD handlers are called + in FIFO (first added, first called). */ + +extern int pthread_atfork (void (*__prepare) (void), + void (*__parent) (void), + void (*__child) (void)) __THROW; + + +#ifdef __USE_EXTERN_INLINES +/* Optimizations. */ +__extern_inline int +__NTH (pthread_equal (pthread_t __thread1, pthread_t __thread2)) +{ + return __thread1 == __thread2; +} +#endif + +__END_DECLS + +#endif /* pthread.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@pthread.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@pthread.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..19b654929c71a36459943bf6646a6749801b1e9a GIT binary patch literal 76006 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sched.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sched.h new file mode 100644 index 0000000..8f7d9db --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sched.h @@ -0,0 +1,140 @@ +/* Definitions for POSIX 1003.1b-1993 (aka POSIX.4) scheduling interface. + Copyright (C) 1996-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SCHED_H +#define _SCHED_H 1 + +#include + +/* Get type definitions. */ +#include + +#define __need_size_t +#define __need_NULL +#include + +#include +#include +#ifndef __USE_XOPEN2K +# include +#endif + +#ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +#endif + +/* Get system specific constant and data structure definitions. */ +#include +#include + +/* Backward compatibility. */ +#define sched_priority sched_priority +#define __sched_priority sched_priority + + +__BEGIN_DECLS + +/* Set scheduling parameters for a process. */ +extern int sched_setparam (__pid_t __pid, const struct sched_param *__param) + __THROW; + +/* Retrieve scheduling parameters for a particular process. */ +extern int sched_getparam (__pid_t __pid, struct sched_param *__param) __THROW; + +/* Set scheduling algorithm and/or parameters for a process. */ +extern int sched_setscheduler (__pid_t __pid, int __policy, + const struct sched_param *__param) __THROW; + +/* Retrieve scheduling algorithm for a particular purpose. */ +extern int sched_getscheduler (__pid_t __pid) __THROW; + +/* Yield the processor. */ +extern int sched_yield (void) __THROW; + +/* Get maximum priority value for a scheduler. */ +extern int sched_get_priority_max (int __algorithm) __THROW; + +/* Get minimum priority value for a scheduler. */ +extern int sched_get_priority_min (int __algorithm) __THROW; + +/* Get the SCHED_RR interval for the named process. */ +#ifndef __USE_TIME64_REDIRECTS +extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW; +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (sched_rr_get_interval, + (__pid_t __pid, struct timespec *__t), + __sched_rr_get_interval64); +# else +# define sched_rr_get_interval __sched_rr_get_interval64 +# endif +#endif + +#ifdef __USE_GNU +/* Access macros for `cpu_set'. */ +# define CPU_SETSIZE __CPU_SETSIZE +# define CPU_SET(cpu, cpusetp) __CPU_SET_S (cpu, sizeof (cpu_set_t), cpusetp) +# define CPU_CLR(cpu, cpusetp) __CPU_CLR_S (cpu, sizeof (cpu_set_t), cpusetp) +# define CPU_ISSET(cpu, cpusetp) __CPU_ISSET_S (cpu, sizeof (cpu_set_t), \ + cpusetp) +# define CPU_ZERO(cpusetp) __CPU_ZERO_S (sizeof (cpu_set_t), cpusetp) +# define CPU_COUNT(cpusetp) __CPU_COUNT_S (sizeof (cpu_set_t), cpusetp) + +# define CPU_SET_S(cpu, setsize, cpusetp) __CPU_SET_S (cpu, setsize, cpusetp) +# define CPU_CLR_S(cpu, setsize, cpusetp) __CPU_CLR_S (cpu, setsize, cpusetp) +# define CPU_ISSET_S(cpu, setsize, cpusetp) __CPU_ISSET_S (cpu, setsize, \ + cpusetp) +# define CPU_ZERO_S(setsize, cpusetp) __CPU_ZERO_S (setsize, cpusetp) +# define CPU_COUNT_S(setsize, cpusetp) __CPU_COUNT_S (setsize, cpusetp) + +# define CPU_EQUAL(cpusetp1, cpusetp2) \ + __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2) +# define CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ + __CPU_EQUAL_S (setsize, cpusetp1, cpusetp2) + +# define CPU_AND(destset, srcset1, srcset2) \ + __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, &) +# define CPU_OR(destset, srcset1, srcset2) \ + __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |) +# define CPU_XOR(destset, srcset1, srcset2) \ + __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, ^) +# define CPU_AND_S(setsize, destset, srcset1, srcset2) \ + __CPU_OP_S (setsize, destset, srcset1, srcset2, &) +# define CPU_OR_S(setsize, destset, srcset1, srcset2) \ + __CPU_OP_S (setsize, destset, srcset1, srcset2, |) +# define CPU_XOR_S(setsize, destset, srcset1, srcset2) \ + __CPU_OP_S (setsize, destset, srcset1, srcset2, ^) + +# define CPU_ALLOC_SIZE(count) __CPU_ALLOC_SIZE (count) +# define CPU_ALLOC(count) __CPU_ALLOC (count) +# define CPU_FREE(cpuset) __CPU_FREE (cpuset) + + +/* Set the CPU affinity for a task */ +extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize, + const cpu_set_t *__cpuset) __THROW; + +/* Get the CPU affinity for a task */ +extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize, + cpu_set_t *__cpuset) __THROW; +#endif + +__END_DECLS + +#endif /* sched.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sched.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sched.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..bdfc87310642f82fec02cef0e5edba0a1b931173 GIT binary patch literal 18074 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%0A&CYa z53oc4&%a2H7&9zaS_1L*fDM8JHN&ass$aD-$YHVqz>4 zDu?9+SZ@Mbel~S81=swhW~PXm->+%^=XZav-vznXH89lC2b`QxDi)|P!Y9zQWC*Vn zP)ca1as|BV85kI|g|ao67_)_PqM$MSpiA^^_Wwr_u%Z=2Ga4}%NjWh7Uu@^PO5=0! zc4+2<=UGG@iz=g_fF*zH3FzrCG3p8E!Sc7CnDE??bRpaL_`KBAlz6{TA0Gw=2Ds-@ zgc+p;q}7~>geXQpXmWy_2Wja*G-3u8D8Z!( zrKvG7rU|7@g4!sQdpg2pk=tjO*~qyECI-s);5r!Aw1L}@S(S>XSrac5uf)U{FBIPc zwd}sH`T1$a&sdS;x#c?r;4GJQ6a401t{=kb7icw%A3+X$4p7tv0QQj;8keFea|Gx2iyXa0_w;wf9j9e~=h7eql|0kPx`WElw=~rPNxX zS|ujNTA^B433yznQo660XBx;%aBm4*q`=D~Bw<8^AyO@(Y6o?+Kutqz^?JHcx&{+t yx={KwXbRc%bc6dZ?H9fv)4`n)^rQ+Fg!WCKIT9>{)L*F)s!?HLtP!e#`UC)(#`19h literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sndfile.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sndfile.h new file mode 100644 index 0000000..ed99208 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sndfile.h @@ -0,0 +1,885 @@ +/* +** Copyright (C) 1999-2016 Erik de Castro Lopo +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU Lesser General Public License as published by +** the Free Software Foundation; either version 2.1 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Lesser General Public License for more details. +** +** You should have received a copy of the GNU Lesser General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +/* +** sndfile.h -- system-wide definitions +** +** API documentation is in the doc/ directory of the source code tarball +** and at http://libsndfile.github.io/libsndfile/api.html. +*/ + +#ifndef SNDFILE_H +#define SNDFILE_H + +/* This is the version 1.0.X header file. */ +#define SNDFILE_1 + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* The following file types can be read and written. +** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise +** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and +** SF_FORMAT_SUBMASK can be used to separate the major and minor file +** types. +*/ + +enum +{ /* Major formats. */ + SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian default). */ + SF_FORMAT_AIFF = 0x020000, /* Apple/SGI AIFF format (big endian). */ + SF_FORMAT_AU = 0x030000, /* Sun/NeXT AU format (big endian). */ + SF_FORMAT_RAW = 0x040000, /* RAW PCM data. */ + SF_FORMAT_PAF = 0x050000, /* Ensoniq PARIS file format. */ + SF_FORMAT_SVX = 0x060000, /* Amiga IFF / SVX8 / SV16 format. */ + SF_FORMAT_NIST = 0x070000, /* Sphere NIST format. */ + SF_FORMAT_VOC = 0x080000, /* VOC files. */ + SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */ + SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */ + SF_FORMAT_MAT4 = 0x0C0000, /* Matlab (tm) V4.2 / GNU Octave 2.0 */ + SF_FORMAT_MAT5 = 0x0D0000, /* Matlab (tm) V5.0 / GNU Octave 2.1 */ + SF_FORMAT_PVF = 0x0E0000, /* Portable Voice Format */ + SF_FORMAT_XI = 0x0F0000, /* Fasttracker 2 Extended Instrument */ + SF_FORMAT_HTK = 0x100000, /* HMM Tool Kit format */ + SF_FORMAT_SDS = 0x110000, /* Midi Sample Dump Standard */ + SF_FORMAT_AVR = 0x120000, /* Audio Visual Research */ + SF_FORMAT_WAVEX = 0x130000, /* MS WAVE with WAVEFORMATEX */ + SF_FORMAT_SD2 = 0x160000, /* Sound Designer 2 */ + SF_FORMAT_FLAC = 0x170000, /* FLAC lossless file format */ + SF_FORMAT_CAF = 0x180000, /* Core Audio File format */ + SF_FORMAT_WVE = 0x190000, /* Psion WVE format */ + SF_FORMAT_OGG = 0x200000, /* Xiph OGG container */ + SF_FORMAT_MPC2K = 0x210000, /* Akai MPC 2000 sampler */ + SF_FORMAT_RF64 = 0x220000, /* RF64 WAV file */ + SF_FORMAT_MPEG = 0x230000, /* MPEG-1/2 audio stream */ + + /* Subtypes from here on. */ + + SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */ + SF_FORMAT_PCM_16 = 0x0002, /* Signed 16 bit data */ + SF_FORMAT_PCM_24 = 0x0003, /* Signed 24 bit data */ + SF_FORMAT_PCM_32 = 0x0004, /* Signed 32 bit data */ + + SF_FORMAT_PCM_U8 = 0x0005, /* Unsigned 8 bit data (WAV and RAW only) */ + + SF_FORMAT_FLOAT = 0x0006, /* 32 bit float data */ + SF_FORMAT_DOUBLE = 0x0007, /* 64 bit float data */ + + SF_FORMAT_ULAW = 0x0010, /* U-Law encoded. */ + SF_FORMAT_ALAW = 0x0011, /* A-Law encoded. */ + SF_FORMAT_IMA_ADPCM = 0x0012, /* IMA ADPCM. */ + SF_FORMAT_MS_ADPCM = 0x0013, /* Microsoft ADPCM. */ + + SF_FORMAT_GSM610 = 0x0020, /* GSM 6.10 encoding. */ + SF_FORMAT_VOX_ADPCM = 0x0021, /* OKI / Dialogix ADPCM */ + + SF_FORMAT_NMS_ADPCM_16 = 0x0022, /* 16kbs NMS G721-variant encoding. */ + SF_FORMAT_NMS_ADPCM_24 = 0x0023, /* 24kbs NMS G721-variant encoding. */ + SF_FORMAT_NMS_ADPCM_32 = 0x0024, /* 32kbs NMS G721-variant encoding. */ + + SF_FORMAT_G721_32 = 0x0030, /* 32kbs G721 ADPCM encoding. */ + SF_FORMAT_G723_24 = 0x0031, /* 24kbs G723 ADPCM encoding. */ + SF_FORMAT_G723_40 = 0x0032, /* 40kbs G723 ADPCM encoding. */ + + SF_FORMAT_DWVW_12 = 0x0040, /* 12 bit Delta Width Variable Word encoding. */ + SF_FORMAT_DWVW_16 = 0x0041, /* 16 bit Delta Width Variable Word encoding. */ + SF_FORMAT_DWVW_24 = 0x0042, /* 24 bit Delta Width Variable Word encoding. */ + SF_FORMAT_DWVW_N = 0x0043, /* N bit Delta Width Variable Word encoding. */ + + SF_FORMAT_DPCM_8 = 0x0050, /* 8 bit differential PCM (XI only) */ + SF_FORMAT_DPCM_16 = 0x0051, /* 16 bit differential PCM (XI only) */ + + SF_FORMAT_VORBIS = 0x0060, /* Xiph Vorbis encoding. */ + SF_FORMAT_OPUS = 0x0064, /* Xiph/Skype Opus encoding. */ + + SF_FORMAT_ALAC_16 = 0x0070, /* Apple Lossless Audio Codec (16 bit). */ + SF_FORMAT_ALAC_20 = 0x0071, /* Apple Lossless Audio Codec (20 bit). */ + SF_FORMAT_ALAC_24 = 0x0072, /* Apple Lossless Audio Codec (24 bit). */ + SF_FORMAT_ALAC_32 = 0x0073, /* Apple Lossless Audio Codec (32 bit). */ + + SF_FORMAT_MPEG_LAYER_I = 0x0080, /* MPEG-1 Audio Layer I */ + SF_FORMAT_MPEG_LAYER_II = 0x0081, /* MPEG-1 Audio Layer II */ + SF_FORMAT_MPEG_LAYER_III = 0x0082, /* MPEG-2 Audio Layer III */ + + /* Endian-ness options. */ + + SF_ENDIAN_FILE = 0x00000000, /* Default file endian-ness. */ + SF_ENDIAN_LITTLE = 0x10000000, /* Force little endian-ness. */ + SF_ENDIAN_BIG = 0x20000000, /* Force big endian-ness. */ + SF_ENDIAN_CPU = 0x30000000, /* Force CPU endian-ness. */ + + SF_FORMAT_SUBMASK = 0x0000FFFF, + SF_FORMAT_TYPEMASK = 0x0FFF0000, + SF_FORMAT_ENDMASK = 0x30000000 +} ; + +/* +** The following are the valid command numbers for the sf_command() +** interface. The use of these commands is documented in the file +** command.html in the doc directory of the source code distribution. +*/ + +enum +{ SFC_GET_LIB_VERSION = 0x1000, + SFC_GET_LOG_INFO = 0x1001, + SFC_GET_CURRENT_SF_INFO = 0x1002, + + + SFC_GET_NORM_DOUBLE = 0x1010, + SFC_GET_NORM_FLOAT = 0x1011, + SFC_SET_NORM_DOUBLE = 0x1012, + SFC_SET_NORM_FLOAT = 0x1013, + SFC_SET_SCALE_FLOAT_INT_READ = 0x1014, + SFC_SET_SCALE_INT_FLOAT_WRITE = 0x1015, + + SFC_GET_SIMPLE_FORMAT_COUNT = 0x1020, + SFC_GET_SIMPLE_FORMAT = 0x1021, + + SFC_GET_FORMAT_INFO = 0x1028, + + SFC_GET_FORMAT_MAJOR_COUNT = 0x1030, + SFC_GET_FORMAT_MAJOR = 0x1031, + SFC_GET_FORMAT_SUBTYPE_COUNT = 0x1032, + SFC_GET_FORMAT_SUBTYPE = 0x1033, + + SFC_CALC_SIGNAL_MAX = 0x1040, + SFC_CALC_NORM_SIGNAL_MAX = 0x1041, + SFC_CALC_MAX_ALL_CHANNELS = 0x1042, + SFC_CALC_NORM_MAX_ALL_CHANNELS = 0x1043, + SFC_GET_SIGNAL_MAX = 0x1044, + SFC_GET_MAX_ALL_CHANNELS = 0x1045, + + SFC_SET_ADD_PEAK_CHUNK = 0x1050, + + SFC_UPDATE_HEADER_NOW = 0x1060, + SFC_SET_UPDATE_HEADER_AUTO = 0x1061, + + SFC_FILE_TRUNCATE = 0x1080, + + SFC_SET_RAW_START_OFFSET = 0x1090, + + /* Commands reserved for dithering, which is not implemented. */ + SFC_SET_DITHER_ON_WRITE = 0x10A0, + SFC_SET_DITHER_ON_READ = 0x10A1, + + SFC_GET_DITHER_INFO_COUNT = 0x10A2, + SFC_GET_DITHER_INFO = 0x10A3, + + SFC_GET_EMBED_FILE_INFO = 0x10B0, + + SFC_SET_CLIPPING = 0x10C0, + SFC_GET_CLIPPING = 0x10C1, + + SFC_GET_CUE_COUNT = 0x10CD, + SFC_GET_CUE = 0x10CE, + SFC_SET_CUE = 0x10CF, + + SFC_GET_INSTRUMENT = 0x10D0, + SFC_SET_INSTRUMENT = 0x10D1, + + SFC_GET_LOOP_INFO = 0x10E0, + + SFC_GET_BROADCAST_INFO = 0x10F0, + SFC_SET_BROADCAST_INFO = 0x10F1, + + SFC_GET_CHANNEL_MAP_INFO = 0x1100, + SFC_SET_CHANNEL_MAP_INFO = 0x1101, + + SFC_RAW_DATA_NEEDS_ENDSWAP = 0x1110, + + /* Support for Wavex Ambisonics Format */ + SFC_WAVEX_SET_AMBISONIC = 0x1200, + SFC_WAVEX_GET_AMBISONIC = 0x1201, + + /* + ** RF64 files can be set so that on-close, writable files that have less + ** than 4GB of data in them are converted to RIFF/WAV, as per EBU + ** recommendations. + */ + SFC_RF64_AUTO_DOWNGRADE = 0x1210, + + SFC_SET_VBR_ENCODING_QUALITY = 0x1300, + SFC_SET_COMPRESSION_LEVEL = 0x1301, + + /* Ogg format commands */ + SFC_SET_OGG_PAGE_LATENCY_MS = 0x1302, + SFC_SET_OGG_PAGE_LATENCY = 0x1303, + SFC_GET_OGG_STREAM_SERIALNO = 0x1306, + + SFC_GET_BITRATE_MODE = 0x1304, + SFC_SET_BITRATE_MODE = 0x1305, + + /* Cart Chunk support */ + SFC_SET_CART_INFO = 0x1400, + SFC_GET_CART_INFO = 0x1401, + + /* Opus files original samplerate metadata */ + SFC_SET_ORIGINAL_SAMPLERATE = 0x1500, + SFC_GET_ORIGINAL_SAMPLERATE = 0x1501, + + /* Following commands for testing only. */ + SFC_TEST_IEEE_FLOAT_REPLACE = 0x6001, + + /* + ** These SFC_SET_ADD_* values are deprecated and will disappear at some + ** time in the future. They are guaranteed to be here up to and + ** including version 1.0.8 to avoid breakage of existing software. + ** They currently do nothing and will continue to do nothing. + */ + SFC_SET_ADD_HEADER_PAD_CHUNK = 0x1051, + + SFC_SET_ADD_DITHER_ON_WRITE = 0x1070, + SFC_SET_ADD_DITHER_ON_READ = 0x1071 +} ; + + +/* +** String types that can be set and read from files. Not all file types +** support this and even the file types which support one, may not support +** all string types. +*/ + +enum +{ SF_STR_TITLE = 0x01, + SF_STR_COPYRIGHT = 0x02, + SF_STR_SOFTWARE = 0x03, + SF_STR_ARTIST = 0x04, + SF_STR_COMMENT = 0x05, + SF_STR_DATE = 0x06, + SF_STR_ALBUM = 0x07, + SF_STR_LICENSE = 0x08, + SF_STR_TRACKNUMBER = 0x09, + SF_STR_GENRE = 0x10 +} ; + +/* +** Use the following as the start and end index when doing metadata +** transcoding. +*/ + +#define SF_STR_FIRST SF_STR_TITLE +#define SF_STR_LAST SF_STR_GENRE + +enum +{ /* True and false */ + SF_FALSE = 0, + SF_TRUE = 1, + + /* Modes for opening files. */ + SFM_READ = 0x10, + SFM_WRITE = 0x20, + SFM_RDWR = 0x30, + + SF_AMBISONIC_NONE = 0x40, + SF_AMBISONIC_B_FORMAT = 0x41 +} ; + +/* Public error values. These are guaranteed to remain unchanged for the duration +** of the library major version number. +** There are also a large number of private error numbers which are internal to +** the library which can change at any time. +*/ + +enum +{ SF_ERR_NO_ERROR = 0, + SF_ERR_UNRECOGNISED_FORMAT = 1, + SF_ERR_SYSTEM = 2, + SF_ERR_MALFORMED_FILE = 3, + SF_ERR_UNSUPPORTED_ENCODING = 4 +} ; + + +/* Channel map values (used with SFC_SET/GET_CHANNEL_MAP). +*/ + +enum +{ SF_CHANNEL_MAP_INVALID = 0, + SF_CHANNEL_MAP_MONO = 1, + SF_CHANNEL_MAP_LEFT, /* Apple calls this 'Left' */ + SF_CHANNEL_MAP_RIGHT, /* Apple calls this 'Right' */ + SF_CHANNEL_MAP_CENTER, /* Apple calls this 'Center' */ + SF_CHANNEL_MAP_FRONT_LEFT, + SF_CHANNEL_MAP_FRONT_RIGHT, + SF_CHANNEL_MAP_FRONT_CENTER, + SF_CHANNEL_MAP_REAR_CENTER, /* Apple calls this 'Center Surround', Msft calls this 'Back Center' */ + SF_CHANNEL_MAP_REAR_LEFT, /* Apple calls this 'Left Surround', Msft calls this 'Back Left' */ + SF_CHANNEL_MAP_REAR_RIGHT, /* Apple calls this 'Right Surround', Msft calls this 'Back Right' */ + SF_CHANNEL_MAP_LFE, /* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency' */ + SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER, /* Apple calls this 'Left Center' */ + SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER, /* Apple calls this 'Right Center */ + SF_CHANNEL_MAP_SIDE_LEFT, /* Apple calls this 'Left Surround Direct' */ + SF_CHANNEL_MAP_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct' */ + SF_CHANNEL_MAP_TOP_CENTER, /* Apple calls this 'Top Center Surround' */ + SF_CHANNEL_MAP_TOP_FRONT_LEFT, /* Apple calls this 'Vertical Height Left' */ + SF_CHANNEL_MAP_TOP_FRONT_RIGHT, /* Apple calls this 'Vertical Height Right' */ + SF_CHANNEL_MAP_TOP_FRONT_CENTER, /* Apple calls this 'Vertical Height Center' */ + SF_CHANNEL_MAP_TOP_REAR_LEFT, /* Apple and MS call this 'Top Back Left' */ + SF_CHANNEL_MAP_TOP_REAR_RIGHT, /* Apple and MS call this 'Top Back Right' */ + SF_CHANNEL_MAP_TOP_REAR_CENTER, /* Apple and MS call this 'Top Back Center' */ + + SF_CHANNEL_MAP_AMBISONIC_B_W, + SF_CHANNEL_MAP_AMBISONIC_B_X, + SF_CHANNEL_MAP_AMBISONIC_B_Y, + SF_CHANNEL_MAP_AMBISONIC_B_Z, + + SF_CHANNEL_MAP_MAX +} ; + +/* Bitrate mode values (for use with SFC_GET/SET_BITRATE_MODE) +*/ +enum +{ SF_BITRATE_MODE_CONSTANT = 0, + SF_BITRATE_MODE_AVERAGE, + SF_BITRATE_MODE_VARIABLE +} ; + + +/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */ + +typedef struct sf_private_tag SNDFILE ; + +/* The following typedef is system specific and is defined when libsndfile is +** compiled. sf_count_t will be a 64 bit value when the underlying OS allows +** 64 bit file offsets. +** On windows, we need to allow the same header file to be compiler by both GCC +** and the Microsoft compiler. +*/ + +typedef int64_t sf_count_t ; +#ifndef SF_COUNT_MAX +#define SF_COUNT_MAX INT64_MAX +#endif + + +/* A pointer to a SF_INFO structure is passed to sf_open () and filled in. +** On write, the SF_INFO structure is filled in by the user and passed into +** sf_open (). +*/ + +struct SF_INFO +{ sf_count_t frames ; /* Used to be called samples. Changed to avoid confusion. */ + int samplerate ; + int channels ; + int format ; + int sections ; + int seekable ; +} ; + +typedef struct SF_INFO SF_INFO ; + +/* The SF_FORMAT_INFO struct is used to retrieve information about the sound +** file formats libsndfile supports using the sf_command () interface. +** +** Using this interface will allow applications to support new file formats +** and encoding types when libsndfile is upgraded, without requiring +** re-compilation of the application. +** +** Please consult the libsndfile documentation (particularly the information +** on the sf_command () interface) for examples of its use. +*/ + +typedef struct +{ int format ; + const char *name ; + const char *extension ; +} SF_FORMAT_INFO ; + +/* +** Enums and typedefs for adding dither on read and write. +** Reserved for future implementation. +*/ + +enum +{ SFD_DEFAULT_LEVEL = 0, + SFD_CUSTOM_LEVEL = 0x40000000, + + SFD_NO_DITHER = 500, + SFD_WHITE = 501, + SFD_TRIANGULAR_PDF = 502 +} ; + +typedef struct +{ int type ; + double level ; + const char *name ; +} SF_DITHER_INFO ; + +/* Struct used to retrieve information about a file embedded within a +** larger file. See SFC_GET_EMBED_FILE_INFO. +*/ + +typedef struct +{ sf_count_t offset ; + sf_count_t length ; +} SF_EMBED_FILE_INFO ; + +/* +** Struct used to retrieve cue marker information from a file +*/ + +typedef struct +{ int32_t indx ; + uint32_t position ; + int32_t fcc_chunk ; + int32_t chunk_start ; + int32_t block_start ; + uint32_t sample_offset ; + char name [256] ; +} SF_CUE_POINT ; + +#define SF_CUES_VAR(count) \ + struct \ + { uint32_t cue_count ; \ + SF_CUE_POINT cue_points [count] ; \ + } + +typedef SF_CUES_VAR (100) SF_CUES ; + +/* +** Structs used to retrieve music sample information from a file. +*/ + +enum +{ /* + ** The loop mode field in SF_INSTRUMENT will be one of the following. + */ + SF_LOOP_NONE = 800, + SF_LOOP_FORWARD, + SF_LOOP_BACKWARD, + SF_LOOP_ALTERNATING +} ; + +typedef struct +{ int gain ; + char basenote, detune ; + char velocity_lo, velocity_hi ; + char key_lo, key_hi ; + int loop_count ; + + struct + { int mode ; + uint32_t start ; + uint32_t end ; + uint32_t count ; + } loops [16] ; /* make variable in a sensible way */ +} SF_INSTRUMENT ; + + + +/* Struct used to retrieve loop information from a file.*/ +typedef struct +{ + short time_sig_num ; /* any positive integer > 0 */ + short time_sig_den ; /* any positive power of 2 > 0 */ + int loop_mode ; /* see SF_LOOP enum */ + + int num_beats ; /* this is NOT the amount of quarter notes !!!*/ + /* a full bar of 4/4 is 4 beats */ + /* a full bar of 7/8 is 7 beats */ + + float bpm ; /* suggestion, as it can be calculated using other fields:*/ + /* file's length, file's sampleRate and our time_sig_den*/ + /* -> bpms are always the amount of _quarter notes_ per minute */ + + int root_key ; /* MIDI note, or -1 for None */ + int future [6] ; +} SF_LOOP_INFO ; + + +/* Struct used to retrieve broadcast (EBU) information from a file. +** Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE. +*/ +#define SF_BROADCAST_INFO_VAR(coding_hist_size) \ + struct \ + { char description [256] ; \ + char originator [32] ; \ + char originator_reference [32] ; \ + char origination_date [10] ; \ + char origination_time [8] ; \ + uint32_t time_reference_low ; \ + uint32_t time_reference_high ; \ + short version ; \ + char umid [64] ; \ + int16_t loudness_value ; \ + int16_t loudness_range ; \ + int16_t max_true_peak_level ; \ + int16_t max_momentary_loudness ; \ + int16_t max_shortterm_loudness ; \ + char reserved [180] ; \ + uint32_t coding_history_size ; \ + char coding_history [coding_hist_size] ; \ + } + +/* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */ +typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ; + +struct SF_CART_TIMER +{ char usage [4] ; + int32_t value ; +} ; + +typedef struct SF_CART_TIMER SF_CART_TIMER ; + +#define SF_CART_INFO_VAR(p_tag_text_size) \ + struct \ + { char version [4] ; \ + char title [64] ; \ + char artist [64] ; \ + char cut_id [64] ; \ + char client_id [64] ; \ + char category [64] ; \ + char classification [64] ; \ + char out_cue [64] ; \ + char start_date [10] ; \ + char start_time [8] ; \ + char end_date [10] ; \ + char end_time [8] ; \ + char producer_app_id [64] ; \ + char producer_app_version [64] ; \ + char user_def [64] ; \ + int32_t level_reference ; \ + SF_CART_TIMER post_timers [8] ; \ + char reserved [276] ; \ + char url [1024] ; \ + uint32_t tag_text_size ; \ + char tag_text [p_tag_text_size] ; \ + } + +typedef SF_CART_INFO_VAR (256) SF_CART_INFO ; + +/* Virtual I/O functionality. */ + +typedef sf_count_t (*sf_vio_get_filelen) (void *user_data) ; +typedef sf_count_t (*sf_vio_seek) (sf_count_t offset, int whence, void *user_data) ; +typedef sf_count_t (*sf_vio_read) (void *ptr, sf_count_t count, void *user_data) ; +typedef sf_count_t (*sf_vio_write) (const void *ptr, sf_count_t count, void *user_data) ; +typedef sf_count_t (*sf_vio_tell) (void *user_data) ; + +struct SF_VIRTUAL_IO +{ sf_vio_get_filelen get_filelen ; + sf_vio_seek seek ; + sf_vio_read read ; + sf_vio_write write ; + sf_vio_tell tell ; +} ; + +typedef struct SF_VIRTUAL_IO SF_VIRTUAL_IO ; + + +/* Open the specified file for read, write or both. On error, this will +** return a NULL pointer. To find the error number, pass a NULL SNDFILE +** to sf_strerror (). +** All calls to sf_open() should be matched with a call to sf_close(). +*/ + +SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ; + + +/* Use the existing file descriptor to create a SNDFILE object. If close_desc +** is TRUE, the file descriptor will be closed when sf_close() is called. If +** it is FALSE, the descriptor will not be closed. +** When passed a descriptor like this, the library will assume that the start +** of file header is at the current file offset. This allows sound files within +** larger container files to be read and/or written. +** On error, this will return a NULL pointer. To find the error number, pass a +** NULL SNDFILE to sf_strerror (). +** All calls to sf_open_fd() should be matched with a call to sf_close(). + +*/ + +SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ; + +SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ; + + +/* sf_error () returns a error number which can be translated to a text +** string using sf_error_number(). +*/ + +int sf_error (SNDFILE *sndfile) ; + + +/* sf_strerror () returns to the caller a pointer to the current error message for +** the given SNDFILE. +*/ + +const char* sf_strerror (SNDFILE *sndfile) ; + + +/* sf_error_number () allows the retrieval of the error string for each internal +** error number. +** +*/ + +const char* sf_error_number (int errnum) ; + + +/* The following two error functions are deprecated but they will remain in the +** library for the foreseeable future. The function sf_strerror() should be used +** in their place. +*/ + +int sf_perror (SNDFILE *sndfile) ; +int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ; + + +/* Allow the caller to retrieve information from or change aspects of the +** library behaviour. +*/ + +int sf_command (SNDFILE *sndfile, int command, void *data, int datasize) ; + + +/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ + +int sf_format_check (const SF_INFO *info) ; + + +/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses +** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as +** stdio.h function fseek (). +** An offset of zero with whence set to SEEK_SET will position the +** read / write pointer to the first data sample. +** On success sf_seek returns the current position in (multi-channel) +** samples from the start of the file. +** Please see the libsndfile documentation for moving the read pointer +** separately from the write pointer on files open in mode SFM_RDWR. +** On error all of these functions return -1. +*/ + +enum +{ SF_SEEK_SET = SEEK_SET, + SF_SEEK_CUR = SEEK_CUR, + SF_SEEK_END = SEEK_END +} ; + +sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ; + + +/* Functions for retrieving and setting string data within sound files. +** Not all file types support this features; AIFF and WAV do. For both +** functions, the str_type parameter must be one of the SF_STR_* values +** defined above. +** On error, sf_set_string() returns non-zero while sf_get_string() +** returns NULL. +*/ + +int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ; + +const char* sf_get_string (SNDFILE *sndfile, int str_type) ; + + +/* Return the library version string. */ + +const char * sf_version_string (void) ; + +/* Return the current byterate at this point in the file. The byte rate in this +** case is the number of bytes per second of audio data. For instance, for a +** stereo, 18 bit PCM encoded file with an 16kHz sample rate, the byte rate +** would be 2 (stereo) * 2 (two bytes per sample) * 16000 => 64000 bytes/sec. +** For some file formats the returned value will be accurate and exact, for some +** it will be a close approximation, for some it will be the average bitrate for +** the whole file and for some it will be a time varying value that was accurate +** when the file was most recently read or written. +** To get the bitrate, multiple this value by 8. +** Returns -1 for unknown. +*/ +int sf_current_byterate (SNDFILE *sndfile) ; + +/* Functions for reading/writing the waveform data of a sound file. +*/ + +sf_count_t sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ; +sf_count_t sf_write_raw (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ; + + +/* Functions for reading and writing the data chunk in terms of frames. +** The number of items actually read/written = frames * number of channels. +** sf_xxxx_raw read/writes the raw data bytes from/to the file +** sf_xxxx_short passes data in the native short format +** sf_xxxx_int passes data in the native int format +** sf_xxxx_float passes data in the native float format +** sf_xxxx_double passes data in the native double format +** All of these read/write function return number of frames read/written. +*/ + +sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; +sf_count_t sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ; + +sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; +sf_count_t sf_writef_int (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ; + +sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; +sf_count_t sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ; + +sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; +sf_count_t sf_writef_double (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ; + + +/* Functions for reading and writing the data chunk in terms of items. +** Otherwise similar to above. +** All of these read/write function return number of items read/written. +*/ + +sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ; +sf_count_t sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t items) ; + +sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ; +sf_count_t sf_write_int (SNDFILE *sndfile, const int *ptr, sf_count_t items) ; + +sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ; +sf_count_t sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t items) ; + +sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ; +sf_count_t sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ; + + +/* Close the SNDFILE and clean up all memory allocations associated with this +** file. +** Returns 0 on success, or an error number. +*/ + +int sf_close (SNDFILE *sndfile) ; + + +/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file +** to force the writing of data to disk. If the file is opened SFM_READ +** no action is taken. +*/ + +void sf_write_sync (SNDFILE *sndfile) ; + + + +/* The function sf_wchar_open() is Windows Only! +** Open a file passing in a Windows Unicode filename. Otherwise, this is +** the same as sf_open(). +*/ + +#ifdef _WIN32 +SNDFILE* sf_wchar_open (const wchar_t *wpath, int mode, SF_INFO *sfinfo) ; +#endif + + + + +/* Getting and setting of chunks from within a sound file. +** +** These functions allow the getting and setting of chunks within a sound file +** (for those formats which allow it). +** +** These functions fail safely. Specifically, they will not allow you to overwrite +** existing chunks or add extra versions of format specific reserved chunks but +** should allow you to retrieve any and all chunks (may not be implemented for +** all chunks or all file formats). +*/ + +struct SF_CHUNK_INFO +{ char id [64] ; /* The chunk identifier. */ + unsigned id_size ; /* The size of the chunk identifier. */ + unsigned datalen ; /* The size of that data. */ + void *data ; /* Pointer to the data. */ +} ; + +typedef struct SF_CHUNK_INFO SF_CHUNK_INFO ; + +/* Set the specified chunk info (must be done before any audio data is written +** to the file). This will fail for format specific reserved chunks. +** The chunk_info->data pointer must be valid until the file is closed. +** Returns SF_ERR_NO_ERROR on success or non-zero on failure. +*/ +int sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ; + +/* +** An opaque structure to an iterator over the all chunks of a given id +*/ +typedef struct SF_CHUNK_ITERATOR SF_CHUNK_ITERATOR ; + +/* Get an iterator for all chunks matching chunk_info. +** The iterator will point to the first chunk matching chunk_info. +** Chunks are matching, if (chunk_info->id) matches the first +** (chunk_info->id_size) bytes of a chunk found in the SNDFILE* handle. +** If chunk_info is NULL, an iterator to all chunks in the SNDFILE* handle +** is returned. +** The values of chunk_info->datalen and chunk_info->data are ignored. +** If no matching chunks are found in the sndfile, NULL is returned. +** The returned iterator will stay valid until one of the following occurs: +** a) The sndfile is closed. +** b) A new chunk is added using sf_set_chunk(). +** c) Another chunk iterator function is called on the same SNDFILE* handle +** that causes the iterator to be modified. +** The memory for the iterator belongs to the SNDFILE* handle and is freed when +** sf_close() is called. +*/ +SF_CHUNK_ITERATOR * +sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ; + +/* Iterate through chunks by incrementing the iterator. +** Increments the iterator and returns a handle to the new one. +** After this call, iterator will no longer be valid, and you must use the +** newly returned handle from now on. +** The returned handle can be used to access the next chunk matching +** the criteria as defined in sf_get_chunk_iterator(). +** If iterator points to the last chunk, this will free all resources +** associated with iterator and return NULL. +** The returned iterator will stay valid until sf_get_chunk_iterator_next +** is called again, the sndfile is closed or a new chunk us added. +*/ +SF_CHUNK_ITERATOR * +sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator) ; + + +/* Get the size of the specified chunk. +** If the specified chunk exists, the size will be returned in the +** datalen field of the SF_CHUNK_INFO struct. +** Additionally, the id of the chunk will be copied to the id +** field of the SF_CHUNK_INFO struct and it's id_size field will +** be updated accordingly. +** If the chunk doesn't exist chunk_info->datalen will be zero, and the +** id and id_size fields will be undefined. +** The function will return SF_ERR_NO_ERROR on success or non-zero on +** failure. +*/ +int +sf_get_chunk_size (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ; + +/* Get the specified chunk data. +** If the specified chunk exists, up to chunk_info->datalen bytes of +** the chunk data will be copied into the chunk_info->data buffer +** (allocated by the caller) and the chunk_info->datalen field +** updated to reflect the size of the data. The id and id_size +** field will be updated according to the retrieved chunk +** If the chunk doesn't exist chunk_info->datalen will be zero, and the +** id and id_size fields will be undefined. +** The function will return SF_ERR_NO_ERROR on success or non-zero on +** failure. +*/ +int +sf_get_chunk_data (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ; + + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* SNDFILE_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sndfile.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sndfile.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f5fff240cd7c311029b3fbd8860f391c54c30128 GIT binary patch literal 69335 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ξv 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 mfI61gZm7(G-boo>1nLAc2r-P!U6!Nam={@ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdc-predef.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdc-predef.h new file mode 100644 index 0000000..fcf528c --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdc-predef.h @@ -0,0 +1,64 @@ +/* Copyright (C) 1991-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _STDC_PREDEF_H +#define _STDC_PREDEF_H 1 + +/* This header is separate from features.h so that the compiler can + include it implicitly at the start of every compilation. It must + not itself include or any other header that includes + because the implicit include comes before any feature + test macros that may be defined in a source file before it first + explicitly includes a system header. GCC knows the name of this + header in order to preinclude it. */ + +/* glibc's intent is to support the IEC 559 math functionality, real + and complex. If the GCC (4.9 and later) predefined macros + specifying compiler intent are available, use them to determine + whether the overall intent is to support these features; otherwise, + presume an older compiler has intent to support these features and + define these macros by default. */ + +#ifdef __GCC_IEC_559 +# if __GCC_IEC_559 > 0 +# define __STDC_IEC_559__ 1 +# define __STDC_IEC_60559_BFP__ 201404L +# endif +#else +# define __STDC_IEC_559__ 1 +# define __STDC_IEC_60559_BFP__ 201404L +#endif + +#ifdef __GCC_IEC_559_COMPLEX +# if __GCC_IEC_559_COMPLEX > 0 +# define __STDC_IEC_559_COMPLEX__ 1 +# define __STDC_IEC_60559_COMPLEX__ 201404L +# endif +#else +# define __STDC_IEC_559_COMPLEX__ 1 +# define __STDC_IEC_60559_COMPLEX__ 201404L +#endif + +/* wchar_t uses Unicode 10.0.0. Version 10.0 of the Unicode Standard is + synchronized with ISO/IEC 10646:2017, fifth edition, plus + the following additions from Amendment 1 to the fifth edition: + - 56 emoji characters + - 285 hentaigana + - 3 additional Zanabazar Square characters */ +#define __STDC_ISO_10646__ 201706L + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdc-predef.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdc-predef.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..81a7586329553fda9ffc7de18030a48a71d7d338 GIT binary patch literal 11883 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdint.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdint.h new file mode 100644 index 0000000..ed0ca63 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdint.h @@ -0,0 +1,314 @@ +/* Copyright (C) 1997-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99: 7.18 Integer types + */ + +#ifndef _STDINT_H +#define _STDINT_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include +#include +#include +#include + +#if __GLIBC_USE (ISOC23) +# define __STDC_VERSION_STDINT_H__ 202311L +#endif + +/* Exact integral types. */ + +/* Signed. */ +#include + +/* Unsigned. */ +#include + + +/* Small types. */ +#include + + +/* Fast types. */ + +/* Signed. */ +typedef signed char int_fast8_t; +#if __WORDSIZE == 64 +typedef long int int_fast16_t; +typedef long int int_fast32_t; +typedef long int int_fast64_t; +#else +typedef int int_fast16_t; +typedef int int_fast32_t; +__extension__ +typedef long long int int_fast64_t; +#endif + +/* Unsigned. */ +typedef unsigned char uint_fast8_t; +#if __WORDSIZE == 64 +typedef unsigned long int uint_fast16_t; +typedef unsigned long int uint_fast32_t; +typedef unsigned long int uint_fast64_t; +#else +typedef unsigned int uint_fast16_t; +typedef unsigned int uint_fast32_t; +__extension__ +typedef unsigned long long int uint_fast64_t; +#endif + + +/* Types for `void *' pointers. */ +#if __WORDSIZE == 64 +# ifndef __intptr_t_defined +typedef long int intptr_t; +# define __intptr_t_defined +# endif +typedef unsigned long int uintptr_t; +#else +# ifndef __intptr_t_defined +typedef int intptr_t; +# define __intptr_t_defined +# endif +typedef unsigned int uintptr_t; +#endif + + +/* Largest integral types. */ +typedef __intmax_t intmax_t; +typedef __uintmax_t uintmax_t; + + +# undef __INT64_C +# undef __UINT64_C +# if __WORDSIZE == 64 +# define __INT64_C(c) c ## L +# define __UINT64_C(c) c ## UL +# else +# define __INT64_C(c) c ## LL +# define __UINT64_C(c) c ## ULL +# endif + +/* Limits of integral types. */ + +/* Minimum of signed integral types. */ +# define INT8_MIN (-128) +# define INT16_MIN (-32767-1) +# define INT32_MIN (-2147483647-1) +# define INT64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of signed integral types. */ +# define INT8_MAX (127) +# define INT16_MAX (32767) +# define INT32_MAX (2147483647) +# define INT64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of unsigned integral types. */ +# define UINT8_MAX (255) +# define UINT16_MAX (65535) +# define UINT32_MAX (4294967295U) +# define UINT64_MAX (__UINT64_C(18446744073709551615)) + + +/* Minimum of signed integral types having a minimum size. */ +# define INT_LEAST8_MIN (-128) +# define INT_LEAST16_MIN (-32767-1) +# define INT_LEAST32_MIN (-2147483647-1) +# define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of signed integral types having a minimum size. */ +# define INT_LEAST8_MAX (127) +# define INT_LEAST16_MAX (32767) +# define INT_LEAST32_MAX (2147483647) +# define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of unsigned integral types having a minimum size. */ +# define UINT_LEAST8_MAX (255) +# define UINT_LEAST16_MAX (65535) +# define UINT_LEAST32_MAX (4294967295U) +# define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) + + +/* Minimum of fast signed integral types having a minimum size. */ +# define INT_FAST8_MIN (-128) +# if __WORDSIZE == 64 +# define INT_FAST16_MIN (-9223372036854775807L-1) +# define INT_FAST32_MIN (-9223372036854775807L-1) +# else +# define INT_FAST16_MIN (-2147483647-1) +# define INT_FAST32_MIN (-2147483647-1) +# endif +# define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of fast signed integral types having a minimum size. */ +# define INT_FAST8_MAX (127) +# if __WORDSIZE == 64 +# define INT_FAST16_MAX (9223372036854775807L) +# define INT_FAST32_MAX (9223372036854775807L) +# else +# define INT_FAST16_MAX (2147483647) +# define INT_FAST32_MAX (2147483647) +# endif +# define INT_FAST64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of fast unsigned integral types having a minimum size. */ +# define UINT_FAST8_MAX (255) +# if __WORDSIZE == 64 +# define UINT_FAST16_MAX (18446744073709551615UL) +# define UINT_FAST32_MAX (18446744073709551615UL) +# else +# define UINT_FAST16_MAX (4294967295U) +# define UINT_FAST32_MAX (4294967295U) +# endif +# define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) + + +/* Values to test for integral types holding `void *' pointer. */ +# if __WORDSIZE == 64 +# define INTPTR_MIN (-9223372036854775807L-1) +# define INTPTR_MAX (9223372036854775807L) +# define UINTPTR_MAX (18446744073709551615UL) +# else +# define INTPTR_MIN (-2147483647-1) +# define INTPTR_MAX (2147483647) +# define UINTPTR_MAX (4294967295U) +# endif + + +/* Minimum for largest signed integral type. */ +# define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum for largest signed integral type. */ +# define INTMAX_MAX (__INT64_C(9223372036854775807)) + +/* Maximum for largest unsigned integral type. */ +# define UINTMAX_MAX (__UINT64_C(18446744073709551615)) + + +/* Limits of other integer types. */ + +/* Limits of `ptrdiff_t' type. */ +# if __WORDSIZE == 64 +# define PTRDIFF_MIN (-9223372036854775807L-1) +# define PTRDIFF_MAX (9223372036854775807L) +# else +# if __WORDSIZE32_PTRDIFF_LONG +# define PTRDIFF_MIN (-2147483647L-1) +# define PTRDIFF_MAX (2147483647L) +# else +# define PTRDIFF_MIN (-2147483647-1) +# define PTRDIFF_MAX (2147483647) +# endif +# endif + +/* Limits of `sig_atomic_t'. */ +# define SIG_ATOMIC_MIN (-2147483647-1) +# define SIG_ATOMIC_MAX (2147483647) + +/* Limit of `size_t' type. */ +# if __WORDSIZE == 64 +# define SIZE_MAX (18446744073709551615UL) +# else +# if __WORDSIZE32_SIZE_ULONG +# define SIZE_MAX (4294967295UL) +# else +# define SIZE_MAX (4294967295U) +# endif +# endif + +/* Limits of `wchar_t'. */ +# ifndef WCHAR_MIN +/* These constants might also be defined in . */ +# define WCHAR_MIN __WCHAR_MIN +# define WCHAR_MAX __WCHAR_MAX +# endif + +/* Limits of `wint_t'. */ +# define WINT_MIN (0u) +# define WINT_MAX (4294967295u) + +/* Signed. */ +# define INT8_C(c) c +# define INT16_C(c) c +# define INT32_C(c) c +# if __WORDSIZE == 64 +# define INT64_C(c) c ## L +# else +# define INT64_C(c) c ## LL +# endif + +/* Unsigned. */ +# define UINT8_C(c) c +# define UINT16_C(c) c +# define UINT32_C(c) c ## U +# if __WORDSIZE == 64 +# define UINT64_C(c) c ## UL +# else +# define UINT64_C(c) c ## ULL +# endif + +/* Maximal type. */ +# if __WORDSIZE == 64 +# define INTMAX_C(c) c ## L +# define UINTMAX_C(c) c ## UL +# else +# define INTMAX_C(c) c ## LL +# define UINTMAX_C(c) c ## ULL +# endif + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C23) + +# define INT8_WIDTH 8 +# define UINT8_WIDTH 8 +# define INT16_WIDTH 16 +# define UINT16_WIDTH 16 +# define INT32_WIDTH 32 +# define UINT32_WIDTH 32 +# define INT64_WIDTH 64 +# define UINT64_WIDTH 64 + +# define INT_LEAST8_WIDTH 8 +# define UINT_LEAST8_WIDTH 8 +# define INT_LEAST16_WIDTH 16 +# define UINT_LEAST16_WIDTH 16 +# define INT_LEAST32_WIDTH 32 +# define UINT_LEAST32_WIDTH 32 +# define INT_LEAST64_WIDTH 64 +# define UINT_LEAST64_WIDTH 64 + +# define INT_FAST8_WIDTH 8 +# define UINT_FAST8_WIDTH 8 +# define INT_FAST16_WIDTH __WORDSIZE +# define UINT_FAST16_WIDTH __WORDSIZE +# define INT_FAST32_WIDTH __WORDSIZE +# define UINT_FAST32_WIDTH __WORDSIZE +# define INT_FAST64_WIDTH 64 +# define UINT_FAST64_WIDTH 64 + +# define INTPTR_WIDTH __WORDSIZE +# define UINTPTR_WIDTH __WORDSIZE + +# define INTMAX_WIDTH 64 +# define UINTMAX_WIDTH 64 + +# define PTRDIFF_WIDTH __WORDSIZE +# define SIG_ATOMIC_WIDTH 32 +# define SIZE_WIDTH __WORDSIZE +# define WCHAR_WIDTH 32 +# define WINT_WIDTH 32 + +#endif + +#endif /* stdint.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdint.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdint.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c1f51ec1fc29ce52a8c341954f80c12b2cd2c853 GIT binary patch literal 20915 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. */ + +/* + * ISO C99 Standard: 7.19 Input/output + */ + +#ifndef _STDIO_H +#define _STDIO_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +__BEGIN_DECLS + +#if __GLIBC_USE (ISOC23) +# define __STDC_VERSION_STDIO_H__ 202311L +#endif + +#define __need_size_t +#define __need_NULL +#include + +#define __need___va_list +#include + +#include +#include +#include +#include +#include +#include + +#ifdef __USE_MISC +# include +#endif + +#if defined __USE_XOPEN || defined __USE_XOPEN2K8 +# ifdef __GNUC__ +# ifndef _VA_LIST_DEFINED +typedef __gnuc_va_list va_list; +# define _VA_LIST_DEFINED +# endif +# else +# include +# endif +#endif + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +# ifndef __off_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __off_t off_t; +# else +typedef __off64_t off_t; +# endif +# define __off_t_defined +# endif +# if defined __USE_LARGEFILE64 && !defined __off64_t_defined +typedef __off64_t off64_t; +# define __off64_t_defined +# endif +#endif + +#ifdef __USE_XOPEN2K8 +# ifndef __ssize_t_defined +typedef __ssize_t ssize_t; +# define __ssize_t_defined +# endif +#endif + +/* The type of the second argument to `fgetpos' and `fsetpos'. */ +#ifndef __USE_FILE_OFFSET64 +typedef __fpos_t fpos_t; +#else +typedef __fpos64_t fpos_t; +#endif +#ifdef __USE_LARGEFILE64 +typedef __fpos64_t fpos64_t; +#endif + +/* The possibilities for the third argument to `setvbuf'. */ +#define _IOFBF 0 /* Fully buffered. */ +#define _IOLBF 1 /* Line buffered. */ +#define _IONBF 2 /* No buffering. */ + + +/* Default buffer size. */ +#define BUFSIZ 8192 + + +/* The value returned by fgetc and similar functions to indicate the + end of the file. */ +#define EOF (-1) + + +/* The possibilities for the third argument to `fseek'. + These values should not be changed. */ +#define SEEK_SET 0 /* Seek from beginning of file. */ +#define SEEK_CUR 1 /* Seek from current position. */ +#define SEEK_END 2 /* Seek from end of file. */ +#ifdef __USE_GNU +# define SEEK_DATA 3 /* Seek to next data. */ +# define SEEK_HOLE 4 /* Seek to next hole. */ +#endif + + +#if defined __USE_MISC || defined __USE_XOPEN +/* Default path prefix for `tempnam' and `tmpnam'. */ +# define P_tmpdir "/tmp" +#endif + +#define L_tmpnam 20 +#define TMP_MAX 238328 + +/* Get the values: + FILENAME_MAX Maximum length of a filename. */ +#include + +#ifdef __USE_POSIX +# define L_ctermid 9 +# if !defined __USE_XOPEN2K || defined __USE_GNU +# define L_cuserid 9 +# endif +#endif + +#undef FOPEN_MAX +#define FOPEN_MAX 16 + + +#if __GLIBC_USE (ISOC23) +/* Maximum length of printf output for a NaN. */ +# define _PRINTF_NAN_LEN_MAX 4 +#endif + + +/* Standard streams. */ +extern FILE *stdin; /* Standard input stream. */ +extern FILE *stdout; /* Standard output stream. */ +extern FILE *stderr; /* Standard error output stream. */ +/* C89/C99 say they're macros. Make them happy. */ +#define stdin stdin +#define stdout stdout +#define stderr stderr + +/* Remove file FILENAME. */ +extern int remove (const char *__filename) __THROW; +/* Rename file OLD to NEW. */ +extern int rename (const char *__old, const char *__new) __THROW; + +#ifdef __USE_ATFILE +/* Rename file OLD relative to OLDFD to NEW relative to NEWFD. */ +extern int renameat (int __oldfd, const char *__old, int __newfd, + const char *__new) __THROW; +#endif + +#ifdef __USE_GNU +/* Flags for renameat2. */ +# define RENAME_NOREPLACE (1 << 0) +# define AT_RENAME_NOREPLACE 0x0001 +# define RENAME_EXCHANGE (1 << 1) +# define AT_RENAME_EXCHANGE 0x0002 +# define RENAME_WHITEOUT (1 << 2) +# define AT_RENAME_WHITEOUT 0x0004 + +/* Rename file OLD relative to OLDFD to NEW relative to NEWFD, with + additional flags. */ +extern int renameat2 (int __oldfd, const char *__old, int __newfd, + const char *__new, unsigned int __flags) __THROW; +#endif + +/* Close STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fclose (FILE *__stream) __nonnull ((1)); + +#undef __attr_dealloc_fclose +#define __attr_dealloc_fclose __attr_dealloc (fclose, 1) + +/* Create a temporary file and open it read/write. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +#ifndef __USE_FILE_OFFSET64 +extern FILE *tmpfile (void) + __attribute_malloc__ __attr_dealloc_fclose __wur; +#else +# ifdef __REDIRECT +extern FILE *__REDIRECT (tmpfile, (void), tmpfile64) + __attribute_malloc__ __attr_dealloc_fclose __wur; +# else +# define tmpfile tmpfile64 +# endif +#endif + +#ifdef __USE_LARGEFILE64 +extern FILE *tmpfile64 (void) + __attribute_malloc__ __attr_dealloc_fclose __wur; +#endif + +/* Generate a temporary filename. */ +extern char *tmpnam (char[L_tmpnam]) __THROW __wur; + +#ifdef __USE_MISC +/* This is the reentrant variant of `tmpnam'. The only difference is + that it does not allow S to be NULL. */ +extern char *tmpnam_r (char __s[L_tmpnam]) __THROW __wur; +#endif + + +#if defined __USE_MISC || defined __USE_XOPEN +/* Generate a unique temporary filename using up to five characters of PFX + if it is not NULL. The directory to put this file in is searched for + as follows: First the environment variable "TMPDIR" is checked. + If it contains the name of a writable directory, that directory is used. + If not and if DIR is not NULL, that value is checked. If that fails, + P_tmpdir is tried and finally "/tmp". The storage for the filename + is allocated by `malloc'. */ +extern char *tempnam (const char *__dir, const char *__pfx) + __THROW __attribute_malloc__ __wur __attr_dealloc_free; +#endif + +/* Flush STREAM, or all streams if STREAM is NULL. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fflush (FILE *__stream); + +#ifdef __USE_MISC +/* Faster versions when locking is not required. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fflush_unlocked (FILE *__stream); +#endif + +#ifdef __USE_GNU +/* Close all streams. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fcloseall (void); +#endif + + +#ifndef __USE_FILE_OFFSET64 +/* Open a file and create a new stream for it. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern FILE *fopen (const char *__restrict __filename, + const char *__restrict __modes) + __attribute_malloc__ __attr_dealloc_fclose __wur; +/* Open a file, replacing an existing stream with it. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern FILE *freopen (const char *__restrict __filename, + const char *__restrict __modes, + FILE *__restrict __stream) __wur __nonnull ((3)); +#else +# ifdef __REDIRECT +extern FILE *__REDIRECT (fopen, (const char *__restrict __filename, + const char *__restrict __modes), fopen64) + __attribute_malloc__ __attr_dealloc_fclose __wur; +extern FILE *__REDIRECT (freopen, (const char *__restrict __filename, + const char *__restrict __modes, + FILE *__restrict __stream), freopen64) + __wur __nonnull ((3)); +# else +# define fopen fopen64 +# define freopen freopen64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern FILE *fopen64 (const char *__restrict __filename, + const char *__restrict __modes) + __attribute_malloc__ __attr_dealloc_fclose __wur; +extern FILE *freopen64 (const char *__restrict __filename, + const char *__restrict __modes, + FILE *__restrict __stream) __wur __nonnull ((3)); +#endif + +#ifdef __USE_POSIX +/* Create a new stream that refers to an existing system file descriptor. */ +extern FILE *fdopen (int __fd, const char *__modes) __THROW + __attribute_malloc__ __attr_dealloc_fclose __wur; +#endif + +#ifdef __USE_MISC +/* Create a new stream that refers to the given magic cookie, + and uses the given functions for input and output. */ +extern FILE *fopencookie (void *__restrict __magic_cookie, + const char *__restrict __modes, + cookie_io_functions_t __io_funcs) __THROW + __attribute_malloc__ __attr_dealloc_fclose __wur; +#endif + +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) +/* Create a new stream that refers to a memory buffer. */ +extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) + __THROW __attribute_malloc__ __attr_dealloc_fclose __wur; + +/* Open a stream that writes into a malloc'd buffer that is expanded as + necessary. *BUFLOC and *SIZELOC are updated with the buffer's location + and the number of characters written on fflush or fclose. */ +extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW + __attribute_malloc__ __attr_dealloc_fclose __wur; + +#ifdef _WCHAR_H +/* Like OPEN_MEMSTREAM, but the stream is wide oriented and produces + a wide character string. Declared here only to add attribute malloc + and only if has been previously #included. */ +extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) __THROW + __attribute_malloc__ __attr_dealloc_fclose; +# endif +#endif + +/* If BUF is NULL, make STREAM unbuffered. + Else make it use buffer BUF, of size BUFSIZ. */ +extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW + __nonnull ((1)); +/* Make STREAM use buffering mode MODE. + If BUF is not NULL, use N bytes of it for buffering; + else allocate an internal buffer N bytes long. */ +extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, + int __modes, size_t __n) __THROW __nonnull ((1)); + +#ifdef __USE_MISC +/* If BUF is NULL, make STREAM unbuffered. + Else make it use SIZE bytes of BUF for buffering. */ +extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, + size_t __size) __THROW __nonnull ((1)); + +/* Make STREAM line-buffered. */ +extern void setlinebuf (FILE *__stream) __THROW __nonnull ((1)); +#endif + + +/* Write formatted output to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fprintf (FILE *__restrict __stream, + const char *__restrict __format, ...) __nonnull ((1)); +/* Write formatted output to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int printf (const char *__restrict __format, ...); +/* Write formatted output to S. */ +extern int sprintf (char *__restrict __s, + const char *__restrict __format, ...) __THROWNL; + +/* Write formatted output to S from argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, + __gnuc_va_list __arg) __nonnull ((1)); +/* Write formatted output to stdout from argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); +/* Write formatted output to S from argument list ARG. */ +extern int vsprintf (char *__restrict __s, const char *__restrict __format, + __gnuc_va_list __arg) __THROWNL; + +#if defined __USE_ISOC99 || defined __USE_UNIX98 +/* Maximum chars of output to write in MAXLEN. */ +extern int snprintf (char *__restrict __s, size_t __maxlen, + const char *__restrict __format, ...) + __THROWNL __attribute__ ((__format__ (__printf__, 3, 4))); + +extern int vsnprintf (char *__restrict __s, size_t __maxlen, + const char *__restrict __format, __gnuc_va_list __arg) + __THROWNL __attribute__ ((__format__ (__printf__, 3, 0))); +#endif + +#if defined (__USE_MISC) || __GLIBC_USE (LIB_EXT2) +/* Write formatted output to a string dynamically allocated with `malloc'. + Store the address of the string in *PTR. */ +extern int vasprintf (char **__restrict __ptr, const char *__restrict __f, + __gnuc_va_list __arg) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))) __wur; +extern int __asprintf (char **__restrict __ptr, + const char *__restrict __fmt, ...) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur; +extern int asprintf (char **__restrict __ptr, + const char *__restrict __fmt, ...) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur; +#endif + +#ifdef __USE_XOPEN2K8 +/* Write formatted output to a file descriptor. */ +extern int vdprintf (int __fd, const char *__restrict __fmt, + __gnuc_va_list __arg) + __attribute__ ((__format__ (__printf__, 2, 0))); +extern int dprintf (int __fd, const char *__restrict __fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +#endif + + +/* Read formatted input from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fscanf (FILE *__restrict __stream, + const char *__restrict __format, ...) __wur __nonnull ((1)); +/* Read formatted input from stdin. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int scanf (const char *__restrict __format, ...) __wur; +/* Read formatted input from S. */ +extern int sscanf (const char *__restrict __s, + const char *__restrict __format, ...) __THROW; + +/* For historical reasons, the C99-compliant versions of the scanf + functions are at alternative names. When __LDBL_COMPAT or + __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI are in effect, this is handled in + bits/stdio-ldbl.h. */ +#include +#if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern int __REDIRECT (fscanf, (FILE *__restrict __stream, + const char *__restrict __format, ...), + __isoc23_fscanf) __wur __nonnull ((1)); +extern int __REDIRECT (scanf, (const char *__restrict __format, ...), + __isoc23_scanf) __wur; +extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, + const char *__restrict __format, ...), + __isoc23_sscanf); +# else +extern int __isoc23_fscanf (FILE *__restrict __stream, + const char *__restrict __format, ...) __wur + __nonnull ((1)); +extern int __isoc23_scanf (const char *__restrict __format, ...) __wur; +extern int __isoc23_sscanf (const char *__restrict __s, + const char *__restrict __format, ...) __THROW; +# define fscanf __isoc23_fscanf +# define scanf __isoc23_scanf +# define sscanf __isoc23_sscanf +# endif +# else +# ifdef __REDIRECT +extern int __REDIRECT (fscanf, (FILE *__restrict __stream, + const char *__restrict __format, ...), + __isoc99_fscanf) __wur __nonnull ((1)); +extern int __REDIRECT (scanf, (const char *__restrict __format, ...), + __isoc99_scanf) __wur; +extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, + const char *__restrict __format, ...), + __isoc99_sscanf); +# else +extern int __isoc99_fscanf (FILE *__restrict __stream, + const char *__restrict __format, ...) __wur + __nonnull ((1)); +extern int __isoc99_scanf (const char *__restrict __format, ...) __wur; +extern int __isoc99_sscanf (const char *__restrict __s, + const char *__restrict __format, ...) __THROW; +# define fscanf __isoc99_fscanf +# define scanf __isoc99_scanf +# define sscanf __isoc99_sscanf +# endif +# endif +#endif + +#ifdef __USE_ISOC99 +/* Read formatted input from S into argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, + __gnuc_va_list __arg) + __attribute__ ((__format__ (__scanf__, 2, 0))) __wur __nonnull ((1)); + +/* Read formatted input from stdin into argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) + __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; + +/* Read formatted input from S into argument list ARG. */ +extern int vsscanf (const char *__restrict __s, + const char *__restrict __format, __gnuc_va_list __arg) + __THROW __attribute__ ((__format__ (__scanf__, 2, 0))); + +/* Same redirection as above for the v*scanf family. */ +# if !__GLIBC_USE (DEPRECATED_SCANF) +# if __GLIBC_USE (C23_STRTOL) +# if defined __REDIRECT && !defined __LDBL_COMPAT \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +extern int __REDIRECT (vfscanf, + (FILE *__restrict __s, + const char *__restrict __format, __gnuc_va_list __arg), + __isoc23_vfscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))) __wur __nonnull ((1)); +extern int __REDIRECT (vscanf, (const char *__restrict __format, + __gnuc_va_list __arg), __isoc23_vscanf) + __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; +extern int __REDIRECT_NTH (vsscanf, + (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg), __isoc23_vsscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))); +# elif !defined __REDIRECT +extern int __isoc23_vfscanf (FILE *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __wur __nonnull ((1)); +extern int __isoc23_vscanf (const char *__restrict __format, + __gnuc_va_list __arg) __wur; +extern int __isoc23_vsscanf (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfscanf __isoc23_vfscanf +# define vscanf __isoc23_vscanf +# define vsscanf __isoc23_vsscanf +# endif +# else +# if defined __REDIRECT && !defined __LDBL_COMPAT \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +extern int __REDIRECT (vfscanf, + (FILE *__restrict __s, + const char *__restrict __format, __gnuc_va_list __arg), + __isoc99_vfscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))) __wur __nonnull ((1)); +extern int __REDIRECT (vscanf, (const char *__restrict __format, + __gnuc_va_list __arg), __isoc99_vscanf) + __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; +extern int __REDIRECT_NTH (vsscanf, + (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg), __isoc99_vsscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))); +# elif !defined __REDIRECT +extern int __isoc99_vfscanf (FILE *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __wur __nonnull ((1)); +extern int __isoc99_vscanf (const char *__restrict __format, + __gnuc_va_list __arg) __wur; +extern int __isoc99_vsscanf (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfscanf __isoc99_vfscanf +# define vscanf __isoc99_vscanf +# define vsscanf __isoc99_vsscanf +# endif +# endif +# endif +#endif /* Use ISO C9x. */ + + +/* Read a character from STREAM. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern int fgetc (FILE *__stream) __nonnull ((1)); +extern int getc (FILE *__stream) __nonnull ((1)); + +/* Read a character from stdin. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int getchar (void); + +#ifdef __USE_POSIX199506 +/* These are defined in POSIX.1:1996. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern int getc_unlocked (FILE *__stream) __nonnull ((1)); +extern int getchar_unlocked (void); +#endif /* Use POSIX. */ + +#ifdef __USE_MISC +/* Faster version when locking is not necessary. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fgetc_unlocked (FILE *__stream) __nonnull ((1)); +#endif /* Use MISC. */ + + +/* Write a character to STREAM. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern int fputc (int __c, FILE *__stream) __nonnull ((2)); +extern int putc (int __c, FILE *__stream) __nonnull ((2)); + +/* Write a character to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int putchar (int __c); + +#ifdef __USE_MISC +/* Faster version when locking is not necessary. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fputc_unlocked (int __c, FILE *__stream) __nonnull ((2)); +#endif /* Use MISC. */ + +#ifdef __USE_POSIX199506 +/* These are defined in POSIX.1:1996. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern int putc_unlocked (int __c, FILE *__stream) __nonnull ((2)); +extern int putchar_unlocked (int __c); +#endif /* Use POSIX. */ + + +#if defined __USE_MISC \ + || (defined __USE_XOPEN && !defined __USE_XOPEN2K) +/* Get a word (int) from STREAM. */ +extern int getw (FILE *__stream) __nonnull ((1)); + +/* Write a word (int) to STREAM. */ +extern int putw (int __w, FILE *__stream) __nonnull ((2)); +#endif + + +/* Get a newline-terminated string of finite length from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) + __wur __fortified_attr_access (__write_only__, 1, 2) __nonnull ((3)); + +#if __GLIBC_USE (DEPRECATED_GETS) +/* Get a newline-terminated string from stdin, removing the newline. + + This function is impossible to use safely. It has been officially + removed from ISO C11 and ISO C++14, and we have also removed it + from the _GNU_SOURCE feature list. It remains available when + explicitly using an old ISO C, Unix, or POSIX standard. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern char *gets (char *__s) __wur __attribute_deprecated__; +#endif + +#ifdef __USE_GNU +/* This function does the same as `fgets' but does not lock the stream. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern char *fgets_unlocked (char *__restrict __s, int __n, + FILE *__restrict __stream) __wur + __fortified_attr_access (__write_only__, 1, 2) __nonnull ((3)); +#endif + + +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) +/* Read up to (and including) a DELIMITER from STREAM into *LINEPTR + (and null-terminate it). *LINEPTR is a pointer returned from malloc (or + NULL), pointing to *N characters of space. It is realloc'd as + necessary. Returns the number of characters read (not including the + null terminator), or -1 on error or EOF. */ +extern __ssize_t __getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) __wur __nonnull ((4)); +extern __ssize_t getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) __wur __nonnull ((4)); + +/* Like `getdelim', but reads up to a newline. */ +extern __ssize_t getline (char **__restrict __lineptr, + size_t *__restrict __n, + FILE *__restrict __stream) __wur __nonnull ((3)); +#endif + + +/* Write a string to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fputs (const char *__restrict __s, FILE *__restrict __stream) + __nonnull ((2)); + +/* Write a string, followed by a newline, to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int puts (const char *__s); + + +/* Push a character back onto the input buffer of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int ungetc (int __c, FILE *__stream) __nonnull ((2)); + + +/* Read chunks of generic data from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern size_t fread (void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream) __wur + __nonnull((4)); +/* Write chunks of generic data to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern size_t fwrite (const void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __s) __nonnull((4)); + +#ifdef __USE_GNU +/* This function does the same as `fputs' but does not lock the stream. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fputs_unlocked (const char *__restrict __s, + FILE *__restrict __stream) __nonnull ((2)); +#endif + +#ifdef __USE_MISC +/* Faster versions when locking is not necessary. + + These functions are not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation they are cancellation points and + therefore not marked with __THROW. */ +extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream) __wur + __nonnull ((4)); +extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream) + __nonnull ((4)); +#endif + + +/* Seek to a certain position on STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fseek (FILE *__stream, long int __off, int __whence) + __nonnull ((1)); +/* Return the current position of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern long int ftell (FILE *__stream) __wur __nonnull ((1)); +/* Rewind to the beginning of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void rewind (FILE *__stream) __nonnull ((1)); + +/* The Single Unix Specification, Version 2, specifies an alternative, + more adequate interface for the two functions above which deal with + file offset. `long int' is not the right type. These definitions + are originally defined in the Large File Support API. */ + +#if defined __USE_LARGEFILE || defined __USE_XOPEN2K +# ifndef __USE_FILE_OFFSET64 +/* Seek to a certain position on STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fseeko (FILE *__stream, __off_t __off, int __whence) + __nonnull ((1)); +/* Return the current position of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern __off_t ftello (FILE *__stream) __wur __nonnull ((1)); +# else +# ifdef __REDIRECT +extern int __REDIRECT (fseeko, + (FILE *__stream, __off64_t __off, int __whence), + fseeko64) __nonnull ((1)); +extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64) + __nonnull ((1)); +# else +# define fseeko fseeko64 +# define ftello ftello64 +# endif +# endif +#endif + +#ifndef __USE_FILE_OFFSET64 +/* Get STREAM's position. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) + __nonnull ((1)); +/* Set STREAM's position. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fsetpos (FILE *__stream, const fpos_t *__pos) __nonnull ((1)); +#else +# ifdef __REDIRECT +extern int __REDIRECT (fgetpos, (FILE *__restrict __stream, + fpos_t *__restrict __pos), fgetpos64) + __nonnull ((1)); +extern int __REDIRECT (fsetpos, + (FILE *__stream, const fpos_t *__pos), fsetpos64) + __nonnull ((1)); +# else +# define fgetpos fgetpos64 +# define fsetpos fsetpos64 +# endif +#endif + +#ifdef __USE_LARGEFILE64 +extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) + __nonnull ((1)); +extern __off64_t ftello64 (FILE *__stream) __wur __nonnull ((1)); +extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos) + __nonnull ((1)); +extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos) __nonnull ((1)); +#endif + +/* Clear the error and EOF indicators for STREAM. */ +extern void clearerr (FILE *__stream) __THROW __nonnull ((1)); +/* Return the EOF indicator for STREAM. */ +extern int feof (FILE *__stream) __THROW __wur __nonnull ((1)); +/* Return the error indicator for STREAM. */ +extern int ferror (FILE *__stream) __THROW __wur __nonnull ((1)); + +#ifdef __USE_MISC +/* Faster versions when locking is not required. */ +extern void clearerr_unlocked (FILE *__stream) __THROW __nonnull ((1)); +extern int feof_unlocked (FILE *__stream) __THROW __wur __nonnull ((1)); +extern int ferror_unlocked (FILE *__stream) __THROW __wur __nonnull ((1)); +#endif + + +/* Print a message describing the meaning of the value of errno. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void perror (const char *__s) __COLD; + + +#ifdef __USE_POSIX +/* Return the system file descriptor for STREAM. */ +extern int fileno (FILE *__stream) __THROW __wur __nonnull ((1)); +#endif /* Use POSIX. */ + +#ifdef __USE_MISC +/* Faster version when locking is not required. */ +extern int fileno_unlocked (FILE *__stream) __THROW __wur __nonnull ((1)); +#endif + + +#ifdef __USE_POSIX2 +/* Close a stream opened by popen and return the status of its child. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int pclose (FILE *__stream) __nonnull ((1)); + +/* Create a new stream connected to a pipe running the given command. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern FILE *popen (const char *__command, const char *__modes) + __attribute_malloc__ __attr_dealloc (pclose, 1) __wur; + +#endif + + +#ifdef __USE_POSIX +/* Return the name of the controlling terminal. */ +extern char *ctermid (char *__s) __THROW + __attr_access ((__write_only__, 1)); +#endif /* Use POSIX. */ + + +#if (defined __USE_XOPEN && !defined __USE_XOPEN2K) || defined __USE_GNU +/* Return the name of the current user. */ +extern char *cuserid (char *__s) + __attr_access ((__write_only__, 1)); +#endif /* Use X/Open, but not issue 6. */ + + +#ifdef __USE_GNU +struct obstack; /* See . */ + +/* Write formatted output to an obstack. */ +extern int obstack_printf (struct obstack *__restrict __obstack, + const char *__restrict __format, ...) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))); +extern int obstack_vprintf (struct obstack *__restrict __obstack, + const char *__restrict __format, + __gnuc_va_list __args) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))); +#endif /* Use GNU. */ + + +#ifdef __USE_POSIX199506 +/* These are defined in POSIX.1:1996. */ + +/* Acquire ownership of STREAM. */ +extern void flockfile (FILE *__stream) __THROW __nonnull ((1)); + +/* Try to acquire ownership of STREAM but do not block if it is not + possible. */ +extern int ftrylockfile (FILE *__stream) __THROW __wur __nonnull ((1)); + +/* Relinquish the ownership granted for STREAM. */ +extern void funlockfile (FILE *__stream) __THROW __nonnull ((1)); +#endif /* POSIX */ + +#if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __USE_GNU +/* X/Open Issues 1-5 required getopt to be declared in this + header. It was removed in Issue 6. GNU follows Issue 6. */ +# include +#endif + +/* Slow-path routines used by the optimized inline functions in + bits/stdio.h. */ +extern int __uflow (FILE *); +extern int __overflow (FILE *, int); + +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Declare all functions from bits/stdio2-decl.h first. */ +# include +#endif + +/* The following headers provide asm redirections. These redirections must + appear before the first usage of these functions, e.g. in bits/stdio.h. */ +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# include +#endif + +/* If we are compiling with optimizing read this file. It contains + several optimizing inline functions and macros. */ +#ifdef __USE_EXTERN_INLINES +# include +#endif +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Now include the function definitions and redirects too. */ +# include +#endif + +__END_DECLS + +#endif /* included. */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdio.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdio.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..87f2581ddb6657c9996cbeb1030621df89923404 GIT binary patch literal 56443 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

      -&IT% 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 TpV{JXKeUt3&#VJtL$m+@(-wv+ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdlib.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdlib.h new file mode 100644 index 0000000..1c67d8e --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdlib.h @@ -0,0 +1,1216 @@ +/* Copyright (C) 1991-2026 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.20 General utilities + */ + +#ifndef _STDLIB_H + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +/* Get size_t, wchar_t and NULL from . */ +#define __need_size_t +#define __need_wchar_t +#define __need_NULL +#include + +__BEGIN_DECLS + +#define _STDLIB_H 1 + +#if __GLIBC_USE (ISOC23) +# define __STDC_VERSION_STDLIB_H__ 202311L +#endif + +#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H +/* XPG requires a few symbols from being defined. */ +# include +# include + +/* Define the macros also would define this way. */ +# define WEXITSTATUS(status) __WEXITSTATUS (status) +# define WTERMSIG(status) __WTERMSIG (status) +# define WSTOPSIG(status) __WSTOPSIG (status) +# define WIFEXITED(status) __WIFEXITED (status) +# define WIFSIGNALED(status) __WIFSIGNALED (status) +# define WIFSTOPPED(status) __WIFSTOPPED (status) +# ifdef __WIFCONTINUED +# define WIFCONTINUED(status) __WIFCONTINUED (status) +# endif +#endif /* X/Open or XPG7 and not included. */ + +/* _FloatN API tests for enablement. */ +#include + +/* Returned by `div'. */ +typedef struct + { + int quot; /* Quotient. */ + int rem; /* Remainder. */ + } div_t; + +/* Returned by `ldiv'. */ +#ifndef __ldiv_t_defined +typedef struct + { + long int quot; /* Quotient. */ + long int rem; /* Remainder. */ + } ldiv_t; +# define __ldiv_t_defined 1 +#endif + +#if defined __USE_ISOC99 && !defined __lldiv_t_defined +/* Returned by `lldiv'. */ +__extension__ typedef struct + { + long long int quot; /* Quotient. */ + long long int rem; /* Remainder. */ + } lldiv_t; +# define __lldiv_t_defined 1 +#endif + + +/* The largest number rand will return (same as INT_MAX). */ +#define RAND_MAX 2147483647 + + +/* We define these the same for all machines. + Changes from this to the outside world should be done in `_exit'. */ +#define EXIT_FAILURE 1 /* Failing exit status. */ +#define EXIT_SUCCESS 0 /* Successful exit status. */ + + +/* Maximum length of a multibyte character in the current locale. */ +#define MB_CUR_MAX (__ctype_get_mb_cur_max ()) +extern size_t __ctype_get_mb_cur_max (void) __THROW __wur; + + +/* Convert a string to a floating-point number. */ +extern double atof (const char *__nptr) + __THROW __attribute_pure__ __nonnull ((1)) __wur; +/* Convert a string to an integer. */ +extern int atoi (const char *__nptr) + __THROW __attribute_pure__ __nonnull ((1)) __wur; +/* Convert a string to a long integer. */ +extern long int atol (const char *__nptr) + __THROW __attribute_pure__ __nonnull ((1)) __wur; + +#ifdef __USE_ISOC99 +/* Convert a string to a long long integer. */ +__extension__ extern long long int atoll (const char *__nptr) + __THROW __attribute_pure__ __nonnull ((1)) __wur; +#endif + +/* Convert a string to a floating-point number. */ +extern double strtod (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); + +#ifdef __USE_ISOC99 +/* Likewise for `float' and `long double' sizes of floating-point numbers. */ +extern float strtof (const char *__restrict __nptr, + char **__restrict __endptr) __THROW __nonnull ((1)); + +extern long double strtold (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +/* Likewise for '_FloatN' and '_FloatNx'. */ + +#if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float16 strtof16 (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float32 strtof32 (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float64 strtof64 (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float128 strtof128 (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float32x strtof32x (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float64x strtof64x (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float128x strtof128x (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +/* Convert a string to a long integer. */ +extern long int strtol (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +/* Convert a string to an unsigned long integer. */ +extern unsigned long int strtoul (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); + +#ifdef __USE_MISC +/* Convert a string to a quadword integer. */ +__extension__ +extern long long int strtoq (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +/* Convert a string to an unsigned quadword integer. */ +__extension__ +extern unsigned long long int strtouq (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +#endif /* Use misc. */ + +#ifdef __USE_ISOC99 +/* Convert a string to a quadword integer. */ +__extension__ +extern long long int strtoll (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +/* Convert a string to an unsigned quadword integer. */ +__extension__ +extern unsigned long long int strtoull (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +#endif /* ISO C99 or use MISC. */ + +/* Versions of the above functions that handle '0b' and '0B' prefixes + in base 0 or 2. */ +#if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern long int __REDIRECT_NTH (strtol, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtol) + __nonnull ((1)); +extern unsigned long int __REDIRECT_NTH (strtoul, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoul) + __nonnull ((1)); +# ifdef __USE_MISC +__extension__ +extern long long int __REDIRECT_NTH (strtoq, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoll) + __nonnull ((1)); +__extension__ +extern unsigned long long int __REDIRECT_NTH (strtouq, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoull) + __nonnull ((1)); +# endif +__extension__ +extern long long int __REDIRECT_NTH (strtoll, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoll) + __nonnull ((1)); +__extension__ +extern unsigned long long int __REDIRECT_NTH (strtoull, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoull) + __nonnull ((1)); +# else +extern long int __isoc23_strtol (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +extern unsigned long int __isoc23_strtoul (const char *__restrict __nptr, + char **__restrict __endptr, + int __base) + __THROW __nonnull ((1)); +__extension__ +extern long long int __isoc23_strtoll (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +__extension__ +extern unsigned long long int __isoc23_strtoull (const char *__restrict __nptr, + char **__restrict __endptr, + int __base) + __THROW __nonnull ((1)); +# define strtol __isoc23_strtol +# define strtoul __isoc23_strtoul +# ifdef __USE_MISC +# define strtoq __isoc23_strtoll +# define strtouq __isoc23_strtoull +# endif +# define strtoll __isoc23_strtoll +# define strtoull __isoc23_strtoull +# endif +#endif + +/* Convert a floating-point number to a string. */ +#if __GLIBC_USE (IEC_60559_BFP_EXT_C23) +extern int strfromd (char *__dest, size_t __size, const char *__format, + double __f) + __THROW __nonnull ((3)); + +extern int strfromf (char *__dest, size_t __size, const char *__format, + float __f) + __THROW __nonnull ((3)); + +extern int strfroml (char *__dest, size_t __size, const char *__format, + long double __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf16 (char *__dest, size_t __size, const char * __format, + _Float16 __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf32 (char *__dest, size_t __size, const char * __format, + _Float32 __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf64 (char *__dest, size_t __size, const char * __format, + _Float64 __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf128 (char *__dest, size_t __size, const char * __format, + _Float128 __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf32x (char *__dest, size_t __size, const char * __format, + _Float32x __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf64x (char *__dest, size_t __size, const char * __format, + _Float64x __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf128x (char *__dest, size_t __size, const char * __format, + _Float128x __f) + __THROW __nonnull ((3)); +#endif + + +#ifdef __USE_GNU +/* Parallel versions of the functions above which take the locale to + use as an additional parameter. These are GNU extensions inspired + by the POSIX.1-2008 extended locale API. */ +# include + +extern long int strtol_l (const char *__restrict __nptr, + char **__restrict __endptr, int __base, + locale_t __loc) __THROW __nonnull ((1, 4)); + +extern unsigned long int strtoul_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); + +__extension__ +extern long long int strtoll_l (const char *__restrict __nptr, + char **__restrict __endptr, int __base, + locale_t __loc) + __THROW __nonnull ((1, 4)); + +__extension__ +extern unsigned long long int strtoull_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); + +/* Versions of the above functions that handle '0b' and '0B' prefixes + in base 0 or 2. */ +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern long int __REDIRECT_NTH (strtol_l, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_strtol_l) + __nonnull ((1, 4)); +extern unsigned long int __REDIRECT_NTH (strtoul_l, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_strtoul_l) + __nonnull ((1, 4)); +__extension__ +extern long long int __REDIRECT_NTH (strtoll_l, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, + locale_t __loc), + __isoc23_strtoll_l) + __nonnull ((1, 4)); +__extension__ +extern unsigned long long int __REDIRECT_NTH (strtoull_l, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_strtoull_l) + __nonnull ((1, 4)); +# else +extern long int __isoc23_strtol_l (const char *__restrict __nptr, + char **__restrict __endptr, int __base, + locale_t __loc) __THROW __nonnull ((1, 4)); +extern unsigned long int __isoc23_strtoul_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); +__extension__ +extern long long int __isoc23_strtoll_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); +__extension__ +extern unsigned long long int __isoc23_strtoull_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); +# define strtol_l __isoc23_strtol_l +# define strtoul_l __isoc23_strtoul_l +# define strtoll_l __isoc23_strtoll_l +# define strtoull_l __isoc23_strtoull_l +# endif +# endif + +extern double strtod_l (const char *__restrict __nptr, + char **__restrict __endptr, locale_t __loc) + __THROW __nonnull ((1, 3)); + +extern float strtof_l (const char *__restrict __nptr, + char **__restrict __endptr, locale_t __loc) + __THROW __nonnull ((1, 3)); + +extern long double strtold_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); + +# if __HAVE_FLOAT16 +extern _Float16 strtof16_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT32 +extern _Float32 strtof32_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT64 +extern _Float64 strtof64_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT128 +extern _Float128 strtof128_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT32X +extern _Float32x strtof32x_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT64X +extern _Float64x strtof64x_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT128X +extern _Float128x strtof128x_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif +#endif /* GNU */ + + +#ifdef __USE_EXTERN_INLINES +__extern_inline int +__NTH (atoi (const char *__nptr)) +{ + return (int) strtol (__nptr, (char **) NULL, 10); +} +__extern_inline long int +__NTH (atol (const char *__nptr)) +{ + return strtol (__nptr, (char **) NULL, 10); +} + +# ifdef __USE_ISOC99 +__extension__ __extern_inline long long int +__NTH (atoll (const char *__nptr)) +{ + return strtoll (__nptr, (char **) NULL, 10); +} +# endif +#endif /* Optimizing and Inlining. */ + + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +/* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant + digit first. Returns a pointer to static storage overwritten by the + next call. */ +extern char *l64a (long int __n) __THROW __wur; + +/* Read a number from a string S in base 64 as above. */ +extern long int a64l (const char *__s) + __THROW __attribute_pure__ __nonnull ((1)) __wur; + +#endif /* Use misc || extended X/Open. */ + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +# include /* we need int32_t... */ + +/* These are the functions that actually do things. The `random', `srandom', + `initstate' and `setstate' functions are those from BSD Unices. + The `rand' and `srand' functions are required by the ANSI standard. + We provide both interfaces to the same random number generator. */ +/* Return a random long integer between 0 and 2^31-1 inclusive. */ +extern long int random (void) __THROW; + +/* Seed the random number generator with the given number. */ +extern void srandom (unsigned int __seed) __THROW; + +/* Initialize the random number generator to use state buffer STATEBUF, + of length STATELEN, and seed it with SEED. Optimal lengths are 8, 16, + 32, 64, 128 and 256, the bigger the better; values less than 8 will + cause an error and values greater than 256 will be rounded down. */ +extern char *initstate (unsigned int __seed, char *__statebuf, + size_t __statelen) __THROW __nonnull ((2)); + +/* Switch the random number generator to state buffer STATEBUF, + which should have been previously initialized by `initstate'. */ +extern char *setstate (char *__statebuf) __THROW __nonnull ((1)); + + +# ifdef __USE_MISC +/* Reentrant versions of the `random' family of functions. + These functions all use the following data structure to contain + state, rather than global state variables. */ + +struct random_data + { + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ + }; + +extern int random_r (struct random_data *__restrict __buf, + int32_t *__restrict __result) __THROW __nonnull ((1, 2)); + +extern int srandom_r (unsigned int __seed, struct random_data *__buf) + __THROW __nonnull ((2)); + +extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, + size_t __statelen, + struct random_data *__restrict __buf) + __THROW __nonnull ((2, 4)); + +extern int setstate_r (char *__restrict __statebuf, + struct random_data *__restrict __buf) + __THROW __nonnull ((1, 2)); +# endif /* Use misc. */ +#endif /* Use extended X/Open || misc. */ + + +/* Return a random integer between 0 and RAND_MAX inclusive. */ +extern int rand (void) __THROW; +/* Seed the random number generator with the given number. */ +extern void srand (unsigned int __seed) __THROW; + +#ifdef __USE_POSIX199506 +/* Reentrant interface according to POSIX.1. */ +extern int rand_r (unsigned int *__seed) __THROW; +#endif + + +#if defined __USE_MISC || defined __USE_XOPEN +/* System V style 48-bit random number generator functions. */ + +/* Return non-negative, double-precision floating-point value in [0.0,1.0). */ +extern double drand48 (void) __THROW; +extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1)); + +/* Return non-negative, long integer in [0,2^31). */ +extern long int lrand48 (void) __THROW; +extern long int nrand48 (unsigned short int __xsubi[3]) + __THROW __nonnull ((1)); + +/* Return signed, long integers in [-2^31,2^31). */ +extern long int mrand48 (void) __THROW; +extern long int jrand48 (unsigned short int __xsubi[3]) + __THROW __nonnull ((1)); + +/* Seed random number generator. */ +extern void srand48 (long int __seedval) __THROW; +extern unsigned short int *seed48 (unsigned short int __seed16v[3]) + __THROW __nonnull ((1)); +extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1)); + +# ifdef __USE_MISC +/* Data structure for communication with thread safe versions. This + type is to be regarded as opaque. It's only exported because users + have to allocate objects of this type. */ +struct drand48_data + { + unsigned short int __x[3]; /* Current state. */ + unsigned short int __old_x[3]; /* Old state. */ + unsigned short int __c; /* Additive const. in congruential formula. */ + unsigned short int __init; /* Flag for initializing. */ + __extension__ unsigned long long int __a; /* Factor in congruential + formula. */ + }; + +/* Return non-negative, double-precision floating-point value in [0.0,1.0). */ +extern int drand48_r (struct drand48_data *__restrict __buffer, + double *__restrict __result) __THROW __nonnull ((1, 2)); +extern int erand48_r (unsigned short int __xsubi[3], + struct drand48_data *__restrict __buffer, + double *__restrict __result) __THROW __nonnull ((1, 2)); + +/* Return non-negative, long integer in [0,2^31). */ +extern int lrand48_r (struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __THROW __nonnull ((1, 2)); +extern int nrand48_r (unsigned short int __xsubi[3], + struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __THROW __nonnull ((1, 2)); + +/* Return signed, long integers in [-2^31,2^31). */ +extern int mrand48_r (struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __THROW __nonnull ((1, 2)); +extern int jrand48_r (unsigned short int __xsubi[3], + struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __THROW __nonnull ((1, 2)); + +/* Seed random number generator. */ +extern int srand48_r (long int __seedval, struct drand48_data *__buffer) + __THROW __nonnull ((2)); + +extern int seed48_r (unsigned short int __seed16v[3], + struct drand48_data *__buffer) __THROW __nonnull ((1, 2)); + +extern int lcong48_r (unsigned short int __param[7], + struct drand48_data *__buffer) + __THROW __nonnull ((1, 2)); + +/* Return a random integer between zero and 2**32-1 (inclusive). */ +extern __uint32_t arc4random (void) + __THROW __wur; + +/* Fill the buffer with random data. */ +extern void arc4random_buf (void *__buf, size_t __size) + __THROW __nonnull ((1)); + +/* Return a random number between zero (inclusive) and the specified + limit (exclusive). */ +extern __uint32_t arc4random_uniform (__uint32_t __upper_bound) + __THROW __wur; +# endif /* Use misc. */ +#endif /* Use misc or X/Open. */ + +/* Allocate SIZE bytes of memory. */ +extern void *malloc (size_t __size) __THROW __attribute_malloc__ + __attribute_alloc_size__ ((1)) __wur; +/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */ +extern void *calloc (size_t __nmemb, size_t __size) + __THROW __attribute_malloc__ __attribute_alloc_size__ ((1, 2)) __wur; + +/* Re-allocate the previously allocated block + in PTR, making the new block SIZE bytes long. */ +/* __attribute_malloc__ is not used, because if realloc returns + the same pointer that was passed to it, aliasing needs to be allowed + between objects pointed by the old and new pointers. */ +extern void *realloc (void *__ptr, size_t __size) + __THROW __attribute_warn_unused_result__ __attribute_alloc_size__ ((2)); + +/* Free a block allocated by `malloc', `realloc' or `calloc'. */ +extern void free (void *__ptr) __THROW; + +#if __GLIBC_USE(ISOC23) +/* Free a block allocated by `malloc', `realloc' or `calloc' but not + `aligned_alloc', `memalign', `posix_memalign', `valloc' or + `pvalloc'. SIZE must be equal to the original requested size + provided to `malloc', `realloc' or `calloc'. For `calloc' SIZE is + NMEMB elements * SIZE bytes. It is forbidden to call `free_sized' + for allocations which the caller did not directly allocate but + must still deallocate, such as `strdup' or `strndup'. Instead + continue using `free` for these cases. */ +extern void free_sized (void *__ptr, size_t __size) __THROW; + +/* Free a block allocated by `aligned_alloc', `memalign' or + `posix_memalign'. ALIGNMENT and SIZE must be the same as the values + provided to `aligned_alloc', `memalign' or `posix_memalign'. */ +extern void free_aligned_sized (void *__ptr, size_t __alignment, size_t __size) + __THROW; +#endif + +#ifdef __USE_MISC +/* Re-allocate the previously allocated block in PTR, making the new + block large enough for NMEMB elements of SIZE bytes each. */ +/* __attribute_malloc__ is not used, because if reallocarray returns + the same pointer that was passed to it, aliasing needs to be allowed + between objects pointed by the old and new pointers. */ +extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) + __THROW __attribute_warn_unused_result__ + __attribute_alloc_size__ ((2, 3)) + __attr_dealloc_free; + +/* Add reallocarray as its own deallocator. */ +extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) + __THROW __attr_dealloc (reallocarray, 1); +#endif + +#ifdef __USE_MISC +# include +#endif /* Use misc. */ + +#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \ + || defined __USE_MISC +/* Allocate SIZE bytes on a page boundary. The storage cannot be freed. */ +extern void *valloc (size_t __size) __THROW __attribute_malloc__ + __attribute_alloc_size__ ((1)) __wur; +#endif + +#ifdef __USE_XOPEN2K +/* Allocate memory of SIZE bytes with an alignment of ALIGNMENT. */ +extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) + __THROW __nonnull ((1)) __wur; +#endif + +#ifdef __USE_ISOC11 +/* ISO C variant of aligned allocation. */ +extern void *aligned_alloc (size_t __alignment, size_t __size) + __THROW __attribute_malloc__ __attribute_alloc_align__ ((1)) + __attribute_alloc_size__ ((2)) __wur; +#endif + +/* Abort execution and generate a core-dump. */ +extern void abort (void) __THROW __attribute__ ((__noreturn__)) __COLD; + + +/* Register a function to be called when `exit' is called. */ +extern int atexit (void (*__func) (void)) __THROW __nonnull ((1)); + +#if defined __USE_ISOC11 || defined __USE_ISOCXX11 +/* Register a function to be called when `quick_exit' is called. */ +# ifdef __cplusplus +extern "C++" int at_quick_exit (void (*__func) (void)) + __THROW __asm ("at_quick_exit") __nonnull ((1)); +# else +extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1)); +# endif +#endif + +#ifdef __USE_MISC +/* Register a function to be called with the status + given to `exit' and the given argument. */ +extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) + __THROW __nonnull ((1)); +#endif + +/* Call all functions registered with `atexit' and `on_exit', + in the reverse of the order in which they were registered, + perform stdio cleanup, and terminate program execution with STATUS. */ +extern void exit (int __status) __THROW __attribute__ ((__noreturn__)); + +#if defined __USE_ISOC11 || defined __USE_ISOCXX11 +/* Call all functions registered with `at_quick_exit' in the reverse + of the order in which they were registered and terminate program + execution with STATUS. */ +extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__)); +#endif + +#ifdef __USE_ISOC99 +/* Terminate the program with STATUS without calling any of the + functions registered with `atexit' or `on_exit'. */ +extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__)); +#endif + + +/* Return the value of envariable NAME, or NULL if it doesn't exist. */ +extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur; + +#ifdef __USE_GNU +/* This function is similar to the above but returns NULL if the + programs is running with SUID or SGID enabled. */ +extern char *secure_getenv (const char *__name) + __THROW __nonnull ((1)) __wur; +#endif + +#if defined __USE_MISC || defined __USE_XOPEN +/* The SVID says this is in , but this seems a better place. */ +/* Put STRING, which is of the form "NAME=VALUE", in the environment. + If there is no `=', remove NAME from the environment. */ +extern int putenv (char *__string) __THROW __nonnull ((1)); +#endif + +#ifdef __USE_XOPEN2K +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +extern int setenv (const char *__name, const char *__value, int __replace) + __THROW __nonnull ((2)); + +/* Remove the variable NAME from the environment. */ +extern int unsetenv (const char *__name) __THROW __nonnull ((1)); +#endif + +#ifdef __USE_MISC +/* The `clearenv' was planned to be added to POSIX.1 but probably + never made it. Nevertheless the POSIX.9 standard (POSIX bindings + for Fortran 77) requires this function. */ +extern int clearenv (void) __THROW; +#endif + + +#if defined __USE_MISC \ + || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) +/* Generate a unique temporary file name from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + Always returns TEMPLATE, it's either a temporary file name or a null + string if it cannot get a unique file name. */ +extern char *mktemp (char *__template) __THROW __nonnull ((1)); +#endif + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* Generate a unique temporary file name from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the filename unique. + Returns a file descriptor open on the file for reading and writing, + or -1 if it cannot create a uniquely-named file. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +# ifndef __USE_FILE_OFFSET64 +extern int mkstemp (char *__template) __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (mkstemp, (char *__template), mkstemp64) + __nonnull ((1)) __wur; +# else +# define mkstemp mkstemp64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int mkstemp64 (char *__template) __nonnull ((1)) __wur; +# endif +#endif + +#ifdef __USE_MISC +/* Similar to mkstemp, but the template can have a suffix after the + XXXXXX. The length of the suffix is specified in the second + parameter. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +# ifndef __USE_FILE_OFFSET64 +extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen), + mkstemps64) __nonnull ((1)) __wur; +# else +# define mkstemps mkstemps64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int mkstemps64 (char *__template, int __suffixlen) + __nonnull ((1)) __wur; +# endif +#endif + +#ifdef __USE_XOPEN2K8 +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur; +#endif + +#ifdef __USE_GNU +/* Generate a unique temporary file name from TEMPLATE similar to + mkstemp. But allow the caller to pass additional flags which are + used in the open call to create the file.. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +# ifndef __USE_FILE_OFFSET64 +extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64) + __nonnull ((1)) __wur; +# else +# define mkostemp mkostemp64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur; +# endif + +/* Similar to mkostemp, but the template can have a suffix after the + XXXXXX. The length of the suffix is specified in the second + parameter. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +# ifndef __USE_FILE_OFFSET64 +extern int mkostemps (char *__template, int __suffixlen, int __flags) + __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen, + int __flags), mkostemps64) + __nonnull ((1)) __wur; +# else +# define mkostemps mkostemps64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int mkostemps64 (char *__template, int __suffixlen, int __flags) + __nonnull ((1)) __wur; +# endif +#endif + + +/* Execute the given line as a shell command. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int system (const char *__command) __wur; + + +#ifdef __USE_GNU +/* Return a malloc'd string containing the canonical absolute name of the + existing named file. */ +extern char *canonicalize_file_name (const char *__name) + __THROW __nonnull ((1)) __attribute_malloc__ + __attr_dealloc_free __wur; +#endif + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +/* Return the canonical absolute name of file NAME. If RESOLVED is + null, the result is malloc'd; otherwise, if the canonical name is + PATH_MAX chars or more, returns null with `errno' set to + ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars, + returns the name in RESOLVED. */ +extern char *realpath (const char *__restrict __name, + char *__restrict __resolved) __THROW __wur; +#endif + + +/* Shorthand for type of comparison functions. */ +#ifndef __COMPAR_FN_T +# define __COMPAR_FN_T +typedef int (*__compar_fn_t) (const void *, const void *); + +# ifdef __USE_GNU +typedef __compar_fn_t comparison_fn_t; +# endif +#endif +#ifdef __USE_GNU +typedef int (*__compar_d_fn_t) (const void *, const void *, void *); +#endif + +/* Do a binary search for KEY in BASE, which consists of NMEMB elements + of SIZE bytes each, using COMPAR to perform the comparisons. */ +extern void *bsearch (const void *__key, const void *__base, + size_t __nmemb, size_t __size, __compar_fn_t __compar) + __nonnull ((1, 2, 5)) __wur; + +#ifdef __USE_EXTERN_INLINES +# include +#endif + +#if __GLIBC_USE (ISOC23) && defined __glibc_const_generic && !defined _LIBC +# define bsearch(KEY, BASE, NMEMB, SIZE, COMPAR) \ + __glibc_const_generic (BASE, const void *, \ + bsearch (KEY, BASE, NMEMB, SIZE, COMPAR)) +#endif + +/* Sort NMEMB elements of BASE, of SIZE bytes each, + using COMPAR to perform the comparisons. */ +extern void qsort (void *__base, size_t __nmemb, size_t __size, + __compar_fn_t __compar) __nonnull ((1, 4)); +#ifdef __USE_GNU +extern void qsort_r (void *__base, size_t __nmemb, size_t __size, + __compar_d_fn_t __compar, void *__arg) + __nonnull ((1, 4)); +#endif + + +/* Return the absolute value of X. */ +extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur; +extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur; + +#ifdef __USE_ISOC99 +__extension__ extern long long int llabs (long long int __x) + __THROW __attribute__ ((__const__)) __wur; +#endif + +#if __GLIBC_USE (ISOC2Y) +extern unsigned int uabs (int __x) __THROW __attribute__ ((__const__)) __wur; +extern unsigned long int ulabs (long int __x) __THROW __attribute__ ((__const__)) __wur; +__extension__ extern unsigned long long int ullabs (long long int __x) + __THROW __attribute__ ((__const__)) __wur; +#endif + +/* Return the `div_t', `ldiv_t' or `lldiv_t' representation + of the value of NUMER over DENOM. */ +/* GCC may have built-ins for these someday. */ +extern div_t div (int __numer, int __denom) + __THROW __attribute__ ((__const__)) __wur; +extern ldiv_t ldiv (long int __numer, long int __denom) + __THROW __attribute__ ((__const__)) __wur; + +#ifdef __USE_ISOC99 +__extension__ extern lldiv_t lldiv (long long int __numer, + long long int __denom) + __THROW __attribute__ ((__const__)) __wur; +#endif + + +#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \ + || defined __USE_MISC +/* Convert floating point numbers to strings. The returned values are + valid only until another call to the same function. */ + +/* Convert VALUE to a string with NDIGIT digits and return a pointer to + this. Set *DECPT with the position of the decimal character and *SIGN + with the sign of the number. */ +extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur; + +/* Convert VALUE to a string rounded to NDIGIT decimal digits. Set *DECPT + with the position of the decimal character and *SIGN with the sign of + the number. */ +extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur; + +/* If possible convert VALUE to a string with NDIGIT significant digits. + Otherwise use exponential representation. The resulting string will + be written to BUF. */ +extern char *gcvt (double __value, int __ndigit, char *__buf) + __THROW __nonnull ((3)) __wur; +#endif + +#ifdef __USE_MISC +/* Long double versions of above functions. */ +extern char *qecvt (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign) + __THROW __nonnull ((3, 4)) __wur; +extern char *qfcvt (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign) + __THROW __nonnull ((3, 4)) __wur; +extern char *qgcvt (long double __value, int __ndigit, char *__buf) + __THROW __nonnull ((3)) __wur; + + +/* Reentrant version of the functions above which provide their own + buffers. */ +extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign, char *__restrict __buf, + size_t __len) __THROW __nonnull ((3, 4, 5)); +extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign, char *__restrict __buf, + size_t __len) __THROW __nonnull ((3, 4, 5)); + +extern int qecvt_r (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign, + char *__restrict __buf, size_t __len) + __THROW __nonnull ((3, 4, 5)); +extern int qfcvt_r (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign, + char *__restrict __buf, size_t __len) + __THROW __nonnull ((3, 4, 5)); +#endif /* misc */ + + +/* Return the length of the multibyte character + in S, which is no longer than N. */ +extern int mblen (const char *__s, size_t __n) __THROW; +/* Return the length of the given multibyte character, + putting its `wchar_t' representation in *PWC. */ +extern int mbtowc (wchar_t *__restrict __pwc, + const char *__restrict __s, size_t __n) __THROW; +/* Put the multibyte character represented + by WCHAR in S, returning its length. */ +extern int wctomb (char *__s, wchar_t __wchar) __THROW; + + +/* Convert a multibyte string to a wide char string. */ +extern size_t mbstowcs (wchar_t *__restrict __pwcs, + const char *__restrict __s, size_t __n) __THROW + __attr_access ((__read_only__, 2)); +/* Convert a wide char string to multibyte string. */ +extern size_t wcstombs (char *__restrict __s, + const wchar_t *__restrict __pwcs, size_t __n) + __THROW + __fortified_attr_access (__write_only__, 1, 3) + __attr_access ((__read_only__, 2)); + +#ifdef __USE_MISC +/* Determine whether the string value of RESPONSE matches the affirmation + or negative response expression as specified by the LC_MESSAGES category + in the program's current locale. Returns 1 if affirmative, 0 if + negative, and -1 if not matching. */ +extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur; +#endif + + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* Parse comma separated suboption from *OPTIONP and match against + strings in TOKENS. If found return index and set *VALUEP to + optional value introduced by an equal sign. If the suboption is + not part of TOKENS return in *VALUEP beginning of unknown + suboption. On exit *OPTIONP is set to the beginning of the next + token or at the terminating NUL character. */ +extern int getsubopt (char **__restrict __optionp, + char *const *__restrict __tokens, + char **__restrict __valuep) + __THROW __nonnull ((1, 2, 3)) __wur; +#endif + + +/* X/Open pseudo terminal handling. */ + +#ifdef __USE_XOPEN2KXSI +/* Return a master pseudo-terminal handle. */ +extern int posix_openpt (int __oflag) __wur; +#endif + +#ifdef __USE_XOPEN_EXTENDED +/* The next four functions all take a master pseudo-tty fd and + perform an operation on the associated slave: */ + +/* Chown the slave to the calling user. */ +extern int grantpt (int __fd) __THROW; + +/* Release an internal lock so the slave can be opened. + Call after grantpt(). */ +extern int unlockpt (int __fd) __THROW; + +/* Return the pathname of the pseudo terminal slave associated with + the master FD is open on, or NULL on errors. + The returned storage is good until the next call to this function. */ +extern char *ptsname (int __fd) __THROW __wur; +#endif + +#ifdef __USE_GNU +/* Store at most BUFLEN characters of the pathname of the slave pseudo + terminal associated with the master FD is open on in BUF. + Return 0 on success, otherwise an error number. */ +extern int ptsname_r (int __fd, char *__buf, size_t __buflen) + __THROW __nonnull ((2)) __fortified_attr_access (__write_only__, 2, 3); + +/* Open a master pseudo terminal and return its file descriptor. */ +extern int getpt (void); +#endif + +#ifdef __USE_MISC +/* Put the 1 minute, 5 minute and 15 minute load averages into the first + NELEM elements of LOADAVG. Return the number written (never more than + three, but may be less than NELEM), or -1 if an error occurred. */ +extern int getloadavg (double __loadavg[], int __nelem) + __THROW __nonnull ((1)); +#endif + +#if defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K +/* Return the index into the active-logins file (utmp) for + the controlling terminal. */ +extern int ttyslot (void) __THROW; +#endif + +#if __GLIBC_USE (ISOC23) +# ifndef __cplusplus +# include + +/* Call function __FUNC exactly once, even if invoked from several threads. + All calls must be made with the same __FLAGS object. */ +extern void call_once (once_flag *__flag, void (*__func)(void)); +# endif /* !__cplusplus */ + +/* Return the alignment of P. */ +extern size_t memalignment (const void *__p); +#endif + +#include + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +# include +#endif + +#include +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# include +#endif + +__END_DECLS + +#endif /* stdlib.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdlib.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@stdlib.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1fad3c94df2610145ca6dabf282af0d1e90d9bdb GIT binary patch literal 75749 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 IHZ*Gh0AeKKm;e9( literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@cdefs.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@cdefs.h new file mode 100644 index 0000000..8d27f26 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@cdefs.h @@ -0,0 +1,898 @@ +/* Copyright (C) 1992-2026 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_CDEFS_H +#define _SYS_CDEFS_H 1 + +/* We are almost always included from features.h. */ +#ifndef _FEATURES_H +# include +#endif + +/* The GNU libc does not support any K&R compilers or the traditional mode + of ISO C compilers anymore. Check for some of the combinations not + supported anymore. */ +#if defined __GNUC__ && !defined __STDC__ && !defined __cplusplus +# error "You need a ISO C or C++ conforming compiler to use the glibc headers" +#endif + +/* Some user header file might have defined this before. */ +#undef __P +#undef __PMT + +/* Compilers that lack __has_attribute may object to + #if defined __has_attribute && __has_attribute (...) + even though they do not need to evaluate the right-hand side of the &&. + Similarly for __has_builtin, etc. */ +#if (defined __has_attribute \ + && (!defined __clang_minor__ \ + || 3 < __clang_major__ + (5 <= __clang_minor__))) +# define __glibc_has_attribute(attr) __has_attribute (attr) +#else +# define __glibc_has_attribute(attr) 0 +#endif +#ifdef __has_builtin +# define __glibc_has_builtin(name) __has_builtin (name) +#else +# define __glibc_has_builtin(name) 0 +#endif +#ifdef __has_extension +# define __glibc_has_extension(ext) __has_extension (ext) +#else +# define __glibc_has_extension(ext) 0 +#endif + +#if defined __GNUC__ || defined __clang__ + +/* All functions, except those with callbacks or those that + synchronize memory, are leaf functions. */ +# if __GNUC_PREREQ (4, 6) && !defined _LIBC +# define __LEAF , __leaf__ +# define __LEAF_ATTR __attribute__ ((__leaf__)) +# else +# define __LEAF +# define __LEAF_ATTR +# endif + +/* GCC can always grok prototypes. For C++ programs we add throw() + to help it optimize the function calls. But this only works with + gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions + as non-throwing using a function attribute since programs can use + the -fexceptions options for C code as well. */ +# if !defined __cplusplus \ + && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__)) +# define __THROW __attribute__ ((__nothrow__ __LEAF)) +# define __THROWNL __attribute__ ((__nothrow__)) +# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct +# define __NTHNL(fct) __attribute__ ((__nothrow__)) fct +# else +# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4) +# if __cplusplus >= 201103L +# define __THROW noexcept (true) +# else +# define __THROW throw () +# endif +# define __THROWNL __THROW +# define __NTH(fct) __LEAF_ATTR fct __THROW +# define __NTHNL(fct) fct __THROW +# else +# define __THROW +# define __THROWNL +# define __NTH(fct) fct +# define __NTHNL(fct) fct +# endif +# endif + +# if __GNUC_PREREQ (4, 3) || __glibc_has_attribute (__cold__) +# define __COLD __attribute__ ((__cold__)) +# else +# define __COLD +# endif + +#else /* Not GCC or clang. */ + +# if (defined __cplusplus \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) +# define __inline inline +# else +# define __inline /* No inline functions. */ +# endif + +# define __THROW +# define __THROWNL +# define __NTH(fct) fct +# define __COLD + +#endif /* GCC || clang. */ + +/* These two macros are not used in glibc anymore. They are kept here + only because some other projects expect the macros to be defined. */ +#define __P(args) args +#define __PMT(args) args + +/* For these things, GCC behaves the ANSI way normally, + and the non-ANSI way under -traditional. */ + +#define __CONCAT(x,y) x ## y +#define __STRING(x) #x + +/* This is not a typedef so `const __ptr_t' does the right thing. */ +#define __ptr_t void * + + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + + +/* The overloadable attribute was added on clang 2.6. */ +#if defined __clang_major__ \ + && (__clang_major__ + (__clang_minor__ >= 6) > 2) +# define __attribute_overloadable__ __attribute__((__overloadable__)) +#else +# define __attribute_overloadable__ +#endif + +/* Fortify support. */ +#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) +#define __bos0(ptr) __builtin_object_size (ptr, 0) + +/* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */ +#if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \ + || __GNUC_PREREQ (12, 0)) +# define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0) +# define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1) +#else +# define __glibc_objsize0(__o) __bos0 (__o) +# define __glibc_objsize(__o) __bos (__o) +#endif + +#if __USE_FORTIFY_LEVEL > 0 +/* Compile time conditions to choose between the regular, _chk and _chk_warn + variants. These conditions should get evaluated to constant and optimized + away. */ + +#define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s)) +#define __glibc_unsigned_or_positive(__l) \ + ((__typeof (__l)) 0 < (__typeof (__l)) -1 \ + || (__builtin_constant_p (__l) && (__l) > 0)) + +/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ + condition can be folded to a constant and if it is true, or unknown (-1) */ +#define __glibc_safe_or_unknown_len(__l, __s, __osz) \ + ((__builtin_constant_p (__osz) && (__osz) == (__SIZE_TYPE__) -1) \ + || (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + (__s), (__osz))) \ + && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz)))) + +/* Conversely, we know at compile time that the length is unsafe if the + __L * __S <= __OBJSZ condition can be folded to a constant and if it is + false. */ +#define __glibc_unsafe_len(__l, __s, __osz) \ + (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + __s, __osz)) \ + && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) + +/* To correctly instrument the fortify wrapper clang requires the + pass_object_size attribute, and the attribute has the restriction that the + argument needs to be 'const'. Furthermore, to make it usable with C + interfaces, clang provides the overload attribute, which provides a C++ + like function overload support. The overloaded fortify wrapper with the + pass_object_size attribute has precedence over the default symbol. + + Also, clang does not support __va_arg_pack, so variadic functions are + expanded to issue va_arg implementations. The error function must not have + bodies (address takes are expanded to nonfortified calls), and with + __fortify_function compiler might still create a body with the C++ + mangling name (due to the overload attribute). In this case, the function + is defined with __fortify_function_error_function macro instead. + + The argument size check is also done with a clang-only attribute, + __attribute__ ((__diagnose_if__ (...))), different than gcc which calls + symbol_chk_warn alias with uses __warnattr attribute. + + The pass_object_size was added on clang 4.0, __diagnose_if__ on 5.0, + and pass_dynamic_object_size on 9.0. */ +#if defined __clang_major__ && __clang_major__ >= 5 +# define __fortify_use_clang 1 + +# define __fortify_function_error_function static __attribute__((__unused__)) + +# define __fortify_clang_pass_object_size_n(n) \ + __attribute__ ((__pass_object_size__ (n))) +# define __fortify_clang_pass_object_size0 \ + __fortify_clang_pass_object_size_n (0) +# define __fortify_clang_pass_object_size \ + __fortify_clang_pass_object_size_n (__USE_FORTIFY_LEVEL > 1) + +# if __clang_major__ >= 9 +# define __fortify_clang_pass_dynamic_object_size_n(n) \ + __attribute__ ((__pass_dynamic_object_size__ (n))) +# define __fortify_clang_pass_dynamic_object_size0 \ + __fortify_clang_pass_dynamic_object_size_n (0) +# define __fortify_clang_pass_dynamic_object_size \ + __fortify_clang_pass_dynamic_object_size_n (1) +# else +# define __fortify_clang_pass_dynamic_object_size_n(n) +# define __fortify_clang_pass_dynamic_object_size0 +# define __fortify_clang_pass_dynamic_object_size +# endif + +# define __fortify_clang_bos_static_lt_impl(bos_val, n, s) \ + ((bos_val) != -1ULL && (n) > (bos_val) / (s)) +# define __fortify_clang_bos_static_lt2(__n, __e, __s) \ + __fortify_clang_bos_static_lt_impl (__bos (__e), __n, __s) +# define __fortify_clang_bos_static_lt(__n, __e) \ + __fortify_clang_bos_static_lt2 (__n, __e, 1) +# define __fortify_clang_bos0_static_lt2(__n, __e, __s) \ + __fortify_clang_bos_static_lt_impl (__bos0 (__e), __n, __s) +# define __fortify_clang_bos0_static_lt(__n, __e) \ + __fortify_clang_bos0_static_lt2 (__n, __e, 1) + +# define __fortify_clang_bosn_args(bos_fn, n, buf, div, complaint) \ + (__fortify_clang_bos_static_lt_impl (bos_fn (buf), n, div)), (complaint), \ + "warning" + +# define __fortify_clang_warning(__c, __msg) \ + __attribute__ ((__diagnose_if__ ((__c), (__msg), "warning"))) +# define __fortify_clang_error(__c, __msg) \ + __attribute__ ((__diagnose_if__ ((__c), (__msg), "error"))) +# define __fortify_clang_warning_only_if_bos0_lt(n, buf, complaint) \ + __attribute__ ((__diagnose_if__ \ + (__fortify_clang_bosn_args (__bos0, n, buf, 1, complaint)))) +# define __fortify_clang_warning_only_if_bos0_lt2(n, buf, div, complaint) \ + __attribute__ ((__diagnose_if__ \ + (__fortify_clang_bosn_args (__bos0, n, buf, div, complaint)))) +# define __fortify_clang_warning_only_if_bos_lt(n, buf, complaint) \ + __attribute__ ((__diagnose_if__ \ + (__fortify_clang_bosn_args (__bos, n, buf, 1, complaint)))) +# define __fortify_clang_warning_only_if_bos_lt2(n, buf, div, complaint) \ + __attribute__ ((__diagnose_if__ \ + (__fortify_clang_bosn_args (__bos, n, buf, div, complaint)))) + +# define __fortify_clang_prefer_this_overload \ + __attribute__ ((enable_if (1, ""))) +# define __fortify_clang_unavailable(__msg) \ + __attribute__ ((unavailable(__msg))) + +# if __USE_FORTIFY_LEVEL == 3 +# define __fortify_clang_overload_arg(__type, __attr, __name) \ + __type __attr const __fortify_clang_pass_dynamic_object_size __name +# define __fortify_clang_overload_arg0(__type, __attr, __name) \ + __type __attr const __fortify_clang_pass_dynamic_object_size0 __name +# else +# define __fortify_clang_overload_arg(__type, __attr, __name) \ + __type __attr const __fortify_clang_pass_object_size __name +# define __fortify_clang_overload_arg0(__type, __attr, __name) \ + __type __attr const __fortify_clang_pass_object_size0 __name +# endif + +# define __fortify_clang_mul_may_overflow(size, n) \ + ((size | n) >= (((size_t)1) << (8 * sizeof (size_t) / 2))) + +# define __fortify_clang_size_too_small(__bos, __dest, __len) \ + (__bos (__dest) != (size_t) -1 && __bos (__dest) < __len) +# define __fortify_clang_warn_if_src_too_large(__dest, __src) \ + __fortify_clang_warning (__fortify_clang_size_too_small (__glibc_objsize, \ + __dest, \ + __builtin_strlen (__src) + 1), \ + "destination buffer will always be overflown by source") +# define __fortify_clang_warn_if_dest_too_small(__dest, __len) \ + __fortify_clang_warning (__fortify_clang_size_too_small (__glibc_objsize, \ + __dest, \ + __len), \ + "function called with bigger length than the destination buffer") +# define __fortify_clang_warn_if_dest_too_small0(__dest, __len) \ + __fortify_clang_warning (__fortify_clang_size_too_small (__glibc_objsize0, \ + __dest, \ + __len), \ + "function called with bigger length than the destination buffer") +#else +# define __fortify_use_clang 0 +# define __fortify_clang_warning(__c, __msg) +# define __fortify_clang_warning_only_if_bos0_lt(__n, __buf, __complaint) +# define __fortify_clang_warning_only_if_bos0_lt2(__n, __buf, __div, complaint) +# define __fortify_clang_warning_only_if_bos_lt(__n, __buf, __complaint) +# define __fortify_clang_warning_only_if_bos_lt2(__n, __buf, div, __complaint) +# define __fortify_clang_overload_arg(__type, __attr, __name) \ + __type __attr __name +# define __fortify_clang_overload_arg0(__type, __attr, __name) \ + __fortify_clang_overload_arg (__type, __attr, __name) +# define __fortify_clang_warn_if_src_too_large(__dest, __src) +# define __fortify_clang_warn_if_dest_too_small(__dest, __len) +# define __fortify_clang_warn_if_dest_too_small0(__dest, __len) +#endif + + +/* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be + declared. */ + +#if !__fortify_use_clang +# define __glibc_fortify(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \ + : __ ## f ## _chk (__VA_ARGS__, __osz))) +#else +# define __glibc_fortify(f, __l, __s, __osz, ...) \ + (__osz == (__SIZE_TYPE__) -1) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : __ ## f ## _chk (__VA_ARGS__, __osz) +#endif + +/* Fortify function f, where object size argument passed to f is the number of + elements and not total size. */ + +#if !__fortify_use_clang +# define __glibc_fortify_n(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \ + : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) +# else +# define __glibc_fortify_n(f, __l, __s, __osz, ...) \ + (__osz == (__SIZE_TYPE__) -1) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)) +#endif + +#endif /* __USE_FORTIFY_LEVEL > 0 */ + +#if __GNUC_PREREQ (4,3) +# define __warnattr(msg) __attribute__((__warning__ (msg))) +# define __errordecl(name, msg) \ + extern void name (void) __attribute__((__error__ (msg))) +#else +# define __warnattr(msg) +# define __errordecl(name, msg) extern void name (void) +#endif + +/* Support for flexible arrays. + Headers that should use flexible arrays only if they're "real" + (e.g. only if they won't affect sizeof()) should test + #if __glibc_c99_flexarr_available. */ +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif __GNUC_PREREQ (2,97) || defined __clang__ +/* GCC 2.97 and clang support C99 flexible array members as an extension, + even when in C89 mode or compiling C++ (any version). */ +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif defined __GNUC__ +/* Pre-2.97 GCC did not support C99 flexible arrays but did have + an equivalent extension with slightly different notation. */ +# define __flexarr [0] +# define __glibc_c99_flexarr_available 1 +#else +/* Some other non-C99 compiler. Approximate with [1]. */ +# define __flexarr [1] +# define __glibc_c99_flexarr_available 0 +#endif + + +/* __asm__ ("xyz") is used throughout the headers to rename functions + at the assembly language level. This is wrapped by the __REDIRECT + macro, in order to support compilers that can do this some other + way. When compilers don't support asm-names at all, we have to do + preprocessor tricks instead (which don't have exactly the right + semantics, but it's the best we can do). + + Example: + int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ + +#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4) + +# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) +# ifdef __cplusplus +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __THROW __asm__ (__ASMNAME (#alias)) +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __THROWNL __asm__ (__ASMNAME (#alias)) +# else +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROW +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROWNL +# endif +# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) +# define __ASMNAME2(prefix, cname) __STRING (prefix) cname + +#ifndef __REDIRECT_FORTIFY +#define __REDIRECT_FORTIFY __REDIRECT +#endif + +#ifndef __REDIRECT_FORTIFY_NTH +#define __REDIRECT_FORTIFY_NTH __REDIRECT_NTH +#endif + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __REDIRECT(name, proto, alias) name proto; \ + _Pragma("let " #name " = " #alias) +*/ +#endif + +/* GCC, clang, and compatible compilers have various useful declarations + that can be made with the '__attribute__' syntax. All of the ways we use + this do fine if they are omitted for compilers that don't understand it. */ +#if !(defined __GNUC__ || defined __clang__ || defined __TINYC__) +# define __attribute__(xyz) /* Ignore */ +#endif + +/* At some point during the gcc 2.96 development the `malloc' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__) +# define __attribute_malloc__ __attribute__ ((__malloc__)) +#else +# define __attribute_malloc__ /* Ignore */ +#endif + +/* Tell the compiler which arguments to an allocation function + indicate the size of the allocation. */ +#if __GNUC_PREREQ (4, 3) +# define __attribute_alloc_size__(params) \ + __attribute__ ((__alloc_size__ params)) +#else +# define __attribute_alloc_size__(params) /* Ignore. */ +#endif + +/* Tell the compiler which argument to an allocation function + indicates the alignment of the allocation. */ +#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__) +# define __attribute_alloc_align__(param) \ + __attribute__ ((__alloc_align__ param)) +#else +# define __attribute_alloc_align__(param) /* Ignore. */ +#endif + +/* At some point during the gcc 2.96 development the `pure' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__) +# define __attribute_pure__ __attribute__ ((__pure__)) +#else +# define __attribute_pure__ /* Ignore */ +#endif + +/* This declaration tells the compiler that the value is constant. */ +#if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__) +# define __attribute_const__ __attribute__ ((__const__)) +#else +# define __attribute_const__ /* Ignore */ +#endif + +#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__) +# define __attribute_maybe_unused__ __attribute__ ((__unused__)) +#else +# define __attribute_maybe_unused__ /* Ignore */ +#endif + +/* At some point during the gcc 3.1 development the `used' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__) +# define __attribute_used__ __attribute__ ((__used__)) +# define __attribute_noinline__ __attribute__ ((__noinline__)) +#else +# define __attribute_used__ __attribute__ ((__unused__)) +# define __attribute_noinline__ /* Ignore */ +#endif + +/* Since version 3.2, gcc allows marking deprecated functions. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__) +# define __attribute_deprecated__ __attribute__ ((__deprecated__)) +#else +# define __attribute_deprecated__ /* Ignore */ +#endif + +/* Since version 4.5, gcc also allows one to specify the message printed + when a deprecated function is used. clang claims to be gcc 4.2, but + may also support this feature. */ +#if __GNUC_PREREQ (4,5) \ + || __glibc_has_extension (__attribute_deprecated_with_message__) +# define __attribute_deprecated_msg__(msg) \ + __attribute__ ((__deprecated__ (msg))) +#else +# define __attribute_deprecated_msg__(msg) __attribute_deprecated__ +#endif + +/* At some point during the gcc 2.8 development the `format_arg' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. + If several `format_arg' attributes are given for the same function, in + gcc-3.0 and older, all but the last one are ignored. In newer gccs, + all designated arguments are considered. */ +#if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__) +# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) +#else +# define __attribute_format_arg__(x) /* Ignore */ +#endif + +/* At some point during the gcc 2.97 development the `strfmon' format + attribute for functions was introduced. We don't want to use it + unconditionally (although this would be possible) since it + generates warnings. */ +#if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__) +# define __attribute_format_strfmon__(a,b) \ + __attribute__ ((__format__ (__strfmon__, a, b))) +#else +# define __attribute_format_strfmon__(a,b) /* Ignore */ +#endif + +/* The nonnull function attribute marks pointer parameters that + must not be NULL. This has the name __nonnull in glibc, + and __attribute_nonnull__ in files shared with Gnulib to avoid + collision with a different __nonnull in DragonFlyBSD 5.9. */ +#ifndef __attribute_nonnull__ +# if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__) +# define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params)) +# else +# define __attribute_nonnull__(params) +# endif +#endif +#ifndef __nonnull +# define __nonnull(params) __attribute_nonnull__ (params) +#endif + +/* The returns_nonnull function attribute marks the return type of the function + as always being non-null. */ +#ifndef __returns_nonnull +# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__) +# define __returns_nonnull __attribute__ ((__returns_nonnull__)) +# else +# define __returns_nonnull +# endif +#endif + +/* If fortification mode, we warn about unused results of certain + function calls which can lead to problems. */ +#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__) +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 +# define __wur __attribute_warn_unused_result__ +# endif +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif +#ifndef __wur +# define __wur /* Ignore */ +#endif + +/* Forces a function to be always inlined. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__) +/* The Linux kernel defines __always_inline in stddef.h (283d7573), and + it conflicts with this definition. Therefore undefine it first to + allow either header to be included first. */ +# undef __always_inline +# define __always_inline __inline __attribute__ ((__always_inline__)) +#else +# undef __always_inline +# define __always_inline __inline +#endif + +/* Associate error messages with the source location of the call site rather + than with the source location inside the function. */ +#if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__) +# define __attribute_artificial__ __attribute__ ((__artificial__)) +#else +# define __attribute_artificial__ /* Ignore */ +#endif + +/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline + semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ or + __GNUC_GNU_INLINE__ is not a good enough check for gcc because gcc versions + older than 4.3 may define these macros and still not guarantee GNU inlining + semantics. + + clang++ identifies itself as gcc-4.2, but has support for GNU inlining + semantics, that can be checked for by using the __GNUC_STDC_INLINE__ and + __GNUC_GNU_INLINE__ macro definitions. */ +#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ + || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ + || defined __GNUC_GNU_INLINE__))) +# if defined __GNUC_STDC_INLINE__ || defined __cplusplus +# define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) +# define __extern_always_inline \ + extern __always_inline __attribute__ ((__gnu_inline__)) +# else +# define __extern_inline extern __inline +# define __extern_always_inline extern __always_inline +# endif +#endif + +#ifdef __extern_always_inline +# define __fortify_function __extern_always_inline __attribute_artificial__ +#endif + +/* GCC 4.3 and above allow passing all anonymous arguments of an + __extern_always_inline function to some other vararg function. */ +#if __GNUC_PREREQ (4,3) +# define __va_arg_pack() __builtin_va_arg_pack () +# define __va_arg_pack_len() __builtin_va_arg_pack_len () +#endif + +/* It is possible to compile containing GCC extensions even if GCC is + run in pedantic mode if the uses are carefully marked using the + `__extension__' keyword. But this is not generally available before + version 2.8. */ +#if !(__GNUC_PREREQ (2,8) || defined __clang__) +# define __extension__ /* Ignore */ +#endif + +/* __restrict is known in EGCS 1.2 and above, and in clang. + It works also in C++ mode (outside of arrays), but only when spelled + as '__restrict', not 'restrict'. */ +#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3) +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict restrict +# else +# define __restrict /* Ignore */ +# endif +#endif + +/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is + array_name[restrict] + GCC 3.1 and clang support this. + This syntax is not usable in C++ mode. */ +#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus +# define __restrict_arr __restrict +#else +# ifdef __GNUC__ +# define __restrict_arr /* Not supported in old GCC. */ +# else +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict_arr restrict +# else +/* Some other non-C99 compiler. */ +# define __restrict_arr /* Not supported. */ +# endif +# endif +#endif + +#if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect) +# define __glibc_unlikely(cond) __builtin_expect ((cond), 0) +# define __glibc_likely(cond) __builtin_expect ((cond), 1) +#else +# define __glibc_unlikely(cond) (cond) +# define __glibc_likely(cond) (cond) +#endif + +#if (!defined _Noreturn \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && !(__GNUC_PREREQ (4,7) \ + || (3 < __clang_major__ + (5 <= __clang_minor__)))) +# if __GNUC_PREREQ (2,8) +# define _Noreturn __attribute__ ((__noreturn__)) +# else +# define _Noreturn +# endif +#endif + +#if __GNUC_PREREQ (8, 0) +/* Describes a char array whose address can safely be passed as the first + argument to strncpy and strncat, as the char array is not necessarily + a NUL-terminated string. */ +# define __attribute_nonstring__ __attribute__ ((__nonstring__)) +#else +# define __attribute_nonstring__ +#endif + +/* Undefine (also defined in libc-symbols.h). */ +#undef __attribute_copy__ +#if __GNUC_PREREQ (9, 0) +/* Copies attributes from the declaration or type referenced by + the argument. */ +# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) +#else +# define __attribute_copy__(arg) +#endif + +#if (!defined _Static_assert && !defined __cplusplus \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \ + || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ + extern int (*__Static_assert_function (void)) \ + [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + +/* Gnulib avoids including these, as they don't work on non-glibc or + older glibc platforms. */ +#ifndef __GNULIB_CDEFS +# include +# include +#endif + +#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# ifdef __REDIRECT + +/* Alias name defined automatically. */ +# define __LDBL_REDIR(name, proto) ... unused__ldbl_redir +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); +# define __REDIRECT_LDBL(name, proto, alias) \ + name proto __asm (__ASMNAME ("__" #alias "ieee128")) + +/* Alias name defined automatically, with leading underscores. */ +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name \ + __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined manually. */ +# define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); + +# define __LDBL_REDIR1_NTH(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) + +/* Unused. */ +# define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth + +# else +_Static_assert (0, "IEEE 128-bits long double requires redirection on this platform"); +# endif +#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH +# define __LDBL_COMPAT 1 +# ifdef __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) +# define __LDBL_REDIR(name, proto) \ + __LDBL_REDIR1 (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) +# define __LDBL_REDIR_NTH(name, proto) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name)); +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); +# define __REDIRECT_LDBL(name, proto, alias) \ + __LDBL_REDIR1 (name, proto, __nldbl_##alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) +# endif +#endif +#if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \ + || !defined __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) name proto +# define __LDBL_REDIR(name, proto) name proto +# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW +# define __LDBL_REDIR_NTH(name, proto) name proto __THROW +# define __LDBL_REDIR2_DECL(name) +# define __LDBL_REDIR_DECL(name) +# ifdef __REDIRECT +# define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# endif +#endif + +/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is + intended for use in preprocessor macros. + + Note: MESSAGE must be a _single_ string; concatenation of string + literals is not supported. */ +#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) +# define __glibc_macro_warning1(message) _Pragma (#message) +# define __glibc_macro_warning(message) \ + __glibc_macro_warning1 (GCC warning message) +#else +# define __glibc_macro_warning(msg) +#endif + +/* Generic selection (ISO C11) is a C-only feature, available in GCC + since version 4.9. Previous versions do not provide generic + selection, even though they might set __STDC_VERSION__ to 201112L, + when in -std=c11 mode. Thus, we must check for !defined __GNUC__ + when testing __STDC_VERSION__ for generic selection support. + On the other hand, Clang also defines __GNUC__, so a clang-specific + check is required to enable the use of generic selection. */ +#if !defined __cplusplus \ + && (__GNUC_PREREQ (4, 9) \ + || __glibc_has_extension (c_generic_selections) \ + || (!defined __GNUC__ && defined __STDC_VERSION__ \ + && __STDC_VERSION__ >= 201112L)) +# define __HAVE_GENERIC_SELECTION 1 +#else +# define __HAVE_GENERIC_SELECTION 0 +#endif + +#if __HAVE_GENERIC_SELECTION +/* If PTR is a pointer to const, return CALL cast to type CTYPE, + otherwise return CALL. Pointers to types with non-const qualifiers + are not valid. This should not be defined for C++, as macros are + not an appropriate way of implementing such qualifier-generic + operations for C++. */ +# define __glibc_const_generic(PTR, CTYPE, CALL) \ + _Generic (0 ? (PTR) : (void *) 1, \ + const void *: (CTYPE) (CALL), \ + default: CALL) +#endif + +#if __GNUC_PREREQ (10, 0) +/* Designates a 1-based positional argument ref-index of pointer type + that can be used to access size-index elements of the pointed-to + array according to access mode, or at least one element when + size-index is not provided: + access (access-mode, [, ]) */ +# define __attr_access(x) __attribute__ ((__access__ x)) +/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may + use the access attribute to get object sizes from function definition + arguments, so we can't use them on functions we fortify. Drop the access + attribute for such functions. */ +# if __USE_FORTIFY_LEVEL == 3 +# define __fortified_attr_access(a, o, s) +# else +# define __fortified_attr_access(a, o, s) __attr_access ((a, o, s)) +# endif +# if __GNUC_PREREQ (11, 0) +# define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) +# else +# define __attr_access_none(argno) +# endif +#else +# define __fortified_attr_access(a, o, s) +# define __attr_access(x) +# define __attr_access_none(argno) +#endif + +#if __GNUC_PREREQ (11, 0) +/* Designates dealloc as a function to call to deallocate objects + allocated by the declared function. */ +# define __attr_dealloc(dealloc, argno) \ + __attribute__ ((__malloc__ (dealloc, argno))) +# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1) +#else +# define __attr_dealloc(dealloc, argno) +# define __attr_dealloc_free +#endif + +/* Specify that a function such as setjmp or vfork may return + twice. */ +#if __GNUC_PREREQ (4, 1) +# define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) +#else +# define __attribute_returns_twice__ /* Ignore. */ +#endif + +/* Mark struct types as aliasable. Restricted to compilers that + support forward declarations of structs in the presence of the + attribute. */ +#if __GNUC_PREREQ (7, 1) || defined __clang__ +# define __attribute_struct_may_alias__ __attribute__ ((__may_alias__)) +#else +# define __attribute_struct_may_alias__ +#endif + +#endif /* sys/cdefs.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@cdefs.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@cdefs.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ece80084f57a4f2f07d78dbe950c546a03d535b3 GIT binary patch literal 21184 zcmdO5_!rYHe3^lfK|eRIM87C8Gey6kC_gJTxujS>rMN&pBe5tqKQA*m5s6h?l#Jl% zWfT-JFem3E=A~0+hHiO&QFdltx^7BlQEGBYeo>_@32tKe`;S4tw75t=GcP%(G$mC( zxuminRWAeLKU5iQZGA&iJtI9s{iMv2V*SLNoc!eYlA^@Sl46hsnX|%|Q8a*6fs8BG zkB`qyDlSPZNsTW7DFuZciqd3+*~KL(sTIko1tkpsFigzJOv=nF$-!zwT54iRX;CWJ zDfrBZA)`|(O7uZ7g)chMeU_Y2l%JOmG8w~Lm`W3ilJoP*2q`YEEG|jS zjZZBq$}d9lT~20_J~*f78yUhAYH>+QW*#^-WtlTxCLzg#vSDdSW=^qwSz-}58~$_J zqm7z$kvx!@Uz}E+g5(-lP63BCDA0=aOEPm)i*O`uBxS`VMWx9l@ot_zuAq>>7uN;F zB{}*aB0f1kFD)}2q#h%fk&I5x&(F?GjnB-FPbgR^mBNoq=b zK?yjWU|55$qp&m|q#Tm6u{sQ0M`>|taXi$b{G#~8qI7UJC1_JlesW??YJ74|VsSCy zY+008l9`V`qT=Jz3i5G<3^+I-5sJUG0xK*|&PWAkYJAZMR#}uCDx}CtiO(+}7^EQMGxO501rd6L!4gqoPJBjUaRyP54AuiF zx`|R>T#^%C2ClKNDhK5$kOW5XA_Y}^d~s%aaVmOnVJ$D>^HS0y`cONSXP0II~=FWihxs2FEFm5Xj6; zH8a5-LZz8`C3(7;DXDoSnI)B2)uFo!oa=2O|)y!8HQCbm@z|Bj^Ow0rM z07tl07Nmk2B+#-2T!Ub!1UC)z3-XIIE8;=f1{@C#`R17NcK`y|EHHc3jNgt#D!xKoxg8h?}Se%(0 z4>2920mDSFs^Zj=tX%9Z7Ept#xTG|xSQirM7#>M1&ecyXDuT2f2)YN--bpG=!x3O$ z=fL9#!!jiA!LuDHSrls!KmrwRDTW`A(?8g!x=D$};53V&6v=&HpX8?I<`-2Ww--t4 zU=-w(rf23A>lbIH=OyOEgL7eGNq!NA0HozJqfQTJ%LnWpXf{bpOisno%t!J;GPrCd zB6y+sJTot|Bpx0uSc4kL^pw=3(sX@LQ=kakz`?2>?C4Z*8IYG+49>S0X#$i0aYr7K zjmeOFgWp3SMOfP%psWmOp<=iI$qulCQ9~Jf+a5_za(*7Dhg6KkVIaQ|Rc?U;Kp)Z| zGBY9E;3z3A$VtUwA(FF_GE49)z}fdo*4D<;&PB2!Gas9$krW^WCvqkNRq|NsY_RI$ zjKm^H^EV!rO>q=@koJ2~c}{+EHYoKGj8~Mx6nnHn$`WvE5>e&jD<<#-A|xGwoQB;8 zIhjexx*4g7DXB%e#U+VF*lRyK3PBSAZVgpr#zS`Ingwu6eOrUQm)zl$w|V zPI$VBMakf1CB7ic$;{0xAtt_y67$ki;}esUp*bGIek2DcgBq6jlPTE$nR#XT+2Ar8 zpJ`yFAn%vvfeN$C#GK4394!|lH{guI+|=UY#PrnS_}tXoq|_pC@kP*j*pNU5eqVta z4SA)xphg+KZa&yYpfIWcB_q7i1MZz+u@r0sxZZ;sL0TmS>7IiIwo;3V^@~!AOLIyf z^%Yy68qWF(XQ+b56F?p5;*!KX!nGL0`QR}qP#Yc6!y+y!3KENoQ{(eWaYr7clK>AF zTpypCm|O&IU&6KFDi$GSS7v@O zj)oUfdQQgG^8tIQJTbE*EhiDu=f_A;U?t!(K_5Ck5+9$HTM(aAnigM@2=*a{9we*5 z+9AbWJfx8lpO>GP3HBmJ&M7WQN!EpQn&B}(Ny;ovEh#O4B+L!<1R7HCc5HlRNooB?a8UZh-8euB9?Js1X7lX2RD5L5^3DOA1npa`N-QRROrvAg#zwOi3&#NiEWc(vaf1YZ6*J0%Q-Q z{SB*zGC?s~R9ujXJ%6D`6`~gbN+TGNg`^y3F#{?>v1*1mE;AP#S@Ip07wcP zWTd4UNE5WQI1`la3JMth&FDl+F`zM8kaSLJJfvd-Y4?NeLT=U}`4b$jd8wdT0OE%| zlJiqilgqG`e_-Rl{s)cjV2*>saw)nC${+)Vppe0rPQk{50z5G%Js)S!7|C!@VVoncjv+%NOK|2Ma48+1nU|B92hJxLUIY6F5?r7Jmz|kHWQmzp z9FIPhfWJD=E6o8%^2IjM=o1oIWx&3UQih}knx7-D!0DSSX4gchz?vLlj0 zu+h*014k1dtOR5rDC2?WF2U`n_=3cu#9WX=Fd`GI1L{HW3{{b)T174oz;Pm9wz%>fFTiyv!2N z3KTdCQd941N9$ODT?S2JpgAtAVFF4lAcg2n2jrB39&Wk$W!MW2bcN6o8Dud=jDjph zZAX+~&nf7JLPv4pGxLg5A>(owW+Q2Vs)hzR4qt&ATj0eY&>27s6Cthz56kI78Zf%x z><;o8MmmEi2Db{JJ#|otO-utRGe0*mFS7u@Yazq?U=n0KhFg(*4|WM+d;(i$gd|;% zK}7naED>B}W2i=MjKaePqtpSr2rQjh1zD*8Hwb@Kk)M`UoLZ8f268Dzb%Eq%NCOKz zbBI3}!7hOoCOC?9BxAvj0}H|G4lL9#mMmYEF;(7Ym5wk zZ!q%wz0b(-_aP(C-)D>re_t^2{C&g7@b?`f&);v141a$z^8EeB$nckeiRUjT6T@F_ zCZ4~dObma;nRxyxFfsg9V&eI$&BX9mmx=GM1rx(xD<;0bPD~7cU6}a(x-v2Rb!X!F z8_dM;H;jqrZwwQ|-#8|ozXePTe~X#;{?;%t{H8 z{Jp}&^Y<L%<$KPndh$;GsE9_X0E@f%nX0C znYsR!Ff;ruW9Io=%gpe%o|%V%A^QK3XL25F4NG@0AOXg|OBwzCE@iB6VEkWm(NkeJ z=Qhpw_{5TuqRgbyl2p(F9MD?P+{8-Iz;I%5d^`gKgN-s|GD-ozN)+jM1r3e(cqDT) zH5nKf|JE=I{jFj4V}h~z82&RdFfjc8GyiPBUd<8~hz;>6so*k_fq_8=)oz%K22_QP zLSj*RUOw3D9A=@vIm~)YjDI04Kd9Nyb{qVtaSLyRnhlw+1x?qaGB7ZxpqY;(tAQ{& ziCN@t60-#p<6j8N4Qh1py(L%YdAxWR4_Z4`l9`s7ngR|?=%g?M1A`vI{IvWcOeGqL zItuwZ3dLX_BruEoO<;CnV*CqXg+Q$-dbYUc-%>aE`1o|tR61lfExtUlC@(WF-H?HS zK?h+AHWeDs30_Tw_<*9s^xQ-R4P}@RC|1;%h5o8B+c7czg|Nz?_O7a&#)>-p9qshk=1X4PhyUv_@WHZmNz#K~a85zK%j-PG(}Ura}ytf&!{h z3fRiPKiizaf?O`b zEc91|S&NDBFN75ZHNR$o;t{bvM>k~iL7~aOz@UK54v-u!dlcg1Lp*}~!$J0mF$?__ zV>V)9{0m_fLG2UV?vtQ@J?$~FeW0Wwh0QWUWSijeh3YY3W}&~r%sNbre<7?as6{iB zPXF(^AR&lU$}lkfz01V$_b!v41LI#oX1l+F%qW)jM$1bLyc76iOB&B&dnc1m1m8by>$sRB{ zjpY2i6iv?f_@vUzoRZAE_|%Gm)Z`Kc4Tyw}f&nEo)Jg|#EBj1_ z5I$rNCFd7Zg8hP&8WDbh$bw21u)(L8g#Mml0wqQW%K>WeuXTETGp>~!Kn_zzLpQ?& z2gd&zp0@eZ9Ohg=wzMd*B74LQ^xK#{^1^e75pp&!H~^f!pffQj)hgw+MLx~a!%i$sD_ zZhU-sX%Pbh0~f-hU;)Ozo=if2J(*;f;4G-lsoH-fTS8;r#m6V*7o+M-$}iR^C@IoZ zK;+2$B+&M@c+ecD0!U6rAwE7d*frkGKPbf0Ei&H6HO$pV!A`*tl%eJb%#mVZoFgy? z)~;v`Qq$~XsE&gb3K@yT;KZ5-TDr`@z@UY2HKb%fQJ|4pQ37%cil72ml!1ZKOvucJ z2}DAQT&BNlOniUYm@FI^|C%v#{54}Xa$x+wy7Qac+pfR&pe42+sGbr+SPCx2{d_o~ z(hLlYkz$b=Od!$%8eA3YR!M~H37-k`0(dD6tn$a^1r!B{svlDOLVSs$#85%Q-Pu_I z+MG~8ZWyRD3;k7RwqauY3u0+7$3We5@xg6=?~Ty`$O%8c3^ZSwn39;311W+`5Z**2 zeNN2o`G2}J5Z z^*_$H%a2I$-i2H=Gc9mhkmbPmSC!f9uPSq#1LOZi|Bu8;UTJ&+2_Qss5UKVBg$Yzb zqXLw8|0Xhv{7nQmU?D6MsFiB$=k^@fdrJq|N@nc2(N($a1_e&GgB0_7#JAa1lr`7KqSm>yBN)yW;^%K zijVhj40DZlclC1(@^p?5cJ*;}4)OH&V_;xFD$lU1Q7{0tO01cM{#t`uvJjRV*ei^G z?U*_K+A&)=F#iA1<#TpdajZ^!aAa`2vx}=+aJ&afdkaaN(~yCIQCL7&g9${!TxIENa39_jMo=;1v7!9;49TdyJrZ9m2{1d!OO|4yV&``p;6F zkgdzh&jXDsf@=$;;s}&HAnt)H&;U<>6@yA7ge;_^1y`d0RRc~?T1+B;wU|KddI)O< z*cps}4VcXS8Zdzx6E`%YZs|CRhk?S-$Ay7`fd@GReOx$^T?(-(IX@=_S~;YOq$)5m zri!G7femK(FR5_#V$-xWf8#-|S8!Q}l=}QaJp6n#(vnLw71EMRklL`(V$mv0jL~Az zkW|9(zyD!=gxfQ|?TD%wZXQxw8D6zR31+_3l>!7DJUSd&|$Xv`G8`uI5$3C zK_foiG1%A7(brW$LmARj0SDe(Mv=dB8BLfN|AJWa7-4aEsPp3Xi#JZ`BIia9Z3S&R z2gcy6;0_1IsRC2=92oyjXN>qeow3Y;@ox{4&EFoTCD|CxjYjiuJy*I>QLO7IdP(53^_jw+-hiI7!*H^5M8aF7q-9ed<9 z1t^1-GYS1I2e&*StZC2~^jmhvO_kLkFFrmkC$%E62voHr)mKnK&gfW>A@z(xf9n}l zm>B;;SXxj+Y}uxFFg*VA8&+k(8{$a4c}PVBk%6?f@ifE1mHXe7OhSKGGJ!hy5LOA) zy7F_aQlgycbHS+&wLb6*@c^ed&iHsAS4X#a$B>X9wA2?R7Nx+%7$p`3>!~qB+%IC= z%=soBv{;68Sp^+)9G7piXrAAR^p}(TcpbQIPHG%!Y@V}KIQl57~`h4V~ z3_QF9Zd8KHU8GtKwA#^n&a;$0+po93!YP4q*jB?eVcSy!mY940~jIauX|) zQsYbWN{drdz&2rR6rrj@$+wU)7iIvYc6rSx^!GKR8x!MS2&)0=fO}?hiVoGVt^_x% z4Nwd7r2Jw7Q1cm-1fVG<94N&J;a#g!1(tv zqs8CLVAfqmi@$fltS5|Sf1fZWI57Tw#c1~T6`1vz(d_SMFzXMa+2224mN1jqUtv&v z_g9w5;;$?d$UIFZi@%y+mKl@PUo%hv{MVkz?5{mooiCHwUtcgQiplJ66o~bob&jV+ z=$c2@P~#VT90h2UR0ENQK|Y40pe zI{ikjZ5TuNLR1_W|CfI_sIN1&C5mh%aRn`nwcdTSHhKV1F|Goyl17cP3+(1LNO0j81>&FoH_`7_HN%Hkal! zU~gHVjyOXqEz}VR@K`TI0+bez2PZ&$c(VjjykU;{xhefmr!Wu+;G|8D{ zErZohvYazMO@HaQ8aX^5#S?gv6dWW*h@t`!Bq)j?SsXT)k5B}ONff1!z6d0wt}qJy zy~60i#P}D)y2=Q1)U1963+6MH_VJM8S5i`wb5KJHyb>5B49+|{3ZP~NY#0&TlLci3 z1q~1roU@7;h5i;XYA`YWg|Hwk8ixO#Z|dwzlI!`9Qx4PL>5N8yr!zV^fLc6Uf0r{! zIWYcjz9{39HGf7fayX@=78Io>gU>6;EryI$TVM++bamiXkwOd?Cziy7q&8jwtPm1Z z>`X#`*_phU82^G;989nxm}TyzQ0w^m2Z&w~YD)~(AA$xH>f8%Bl)yqDm*DOA%w!b$ zI}_Z1gRtg7lcl%xG8X3u$8!k#K@Bw2IXajdKr&d}fwM8*wliHFOZAS3My=BA(7_5B=pyTDTs;j zFNo#H1nUtu79Wf%7BSj_6llOoOTqv+m%YpH44kO3k z97ZJv#=kX;Jb!B#)xhmYj=zV%Vy756{+oX(A-_KyyA4ZP9f50qOCXT+cM(c^jF;{%&M4aA5qqi;3g!F0hWHOdNlYf?4O8#QvTK%c?SS{8eQJxzvaEW{$trAlCmSPN9k)JPslUJ_Dnfhglk^ zl#KuVd~U?A4X~8Nz`%es`UXi|8WozH$`uR@jLibg3QQmpGIq!KcNwGG-(`$p4vhaV zUt1KK|21|la`pwU&jROIq&a3pRRfjAl0Ts`kSzI>QRweeM$n`^gjE17Fs=$~wChc8 zEQ^m1U|?WiLzD>ts6)p!0ySbxj5Pu^5JxloPvTj|ef*^WbWj)4z=wD2unrbNWU)9D zA^~yd7e=AKU%-Qf5Eg8piGT4&RR!MNNsy3%t$c`2D@p||TtEvMG-<}axy(X;bHPg% zpe(5GYj3Tsp86u|GQ?DfC(`nZauY$L9FUp~Yi}4?jYb8iv4MyXNZpUDLP4WK6XH7& zCZWF~;HfJJYZBBQ{U4nV_sa-xKz0XmjfgtdjIaw?4VHjKmWDXsFQd@kzu@jVgaw;B z^Zm)8qgcRl9N7U-FBF#)rRC=5fm0yXY93vkMxssGJw zg#OBbD|`@3o(b0PuAB6~bIoOgNoegr18g(e(1xG^QcKVP-V|IawA6@+ajDQ!SgmyW yM~{m>Gv5r*5Eo?T7}`lg?Y_WfgQ1dGf*VZ*bX@qaIg`*|b0*MG41@(8p#T6%w>uF4 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@select.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@select.h new file mode 100644 index 0000000..fdc3c89 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@select.h @@ -0,0 +1,155 @@ +/* `fd_set' type and related macros, and `select'/`pselect' declarations. + Copyright (C) 1996-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* POSIX 1003.1g: 6.2 Select from File Descriptor Sets */ + +#ifndef _SYS_SELECT_H +#define _SYS_SELECT_H 1 + +#include + +/* Get definition of needed basic types. */ +#include + +/* Get __FD_* definitions. */ +#include + +/* Get sigset_t. */ +#include + +/* Get definition of timer specification structures. */ +#include +#include +#ifdef __USE_XOPEN2K +# include +#endif + +#ifndef __suseconds_t_defined +typedef __suseconds_t suseconds_t; +# define __suseconds_t_defined +#endif + + +/* The fd_set member is required to be an array of longs. */ +typedef long int __fd_mask; + +/* Some versions of define this macros. */ +#undef __NFDBITS +/* It's easier to assume 8-bit bytes than to get CHAR_BIT. */ +#define __NFDBITS (8 * (int) sizeof (__fd_mask)) +#define __FD_ELT(d) ((d) / __NFDBITS) +#define __FD_MASK(d) ((__fd_mask) (1UL << ((d) % __NFDBITS))) + +/* fd_set for select and pselect. */ +typedef struct + { + /* XPG4.2 requires this member name. Otherwise avoid the name + from the global namespace. */ +#ifdef __USE_XOPEN + __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS]; +# define __FDS_BITS(set) ((set)->fds_bits) +#else + __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS]; +# define __FDS_BITS(set) ((set)->__fds_bits) +#endif + } fd_set; + +/* Maximum number of file descriptors in `fd_set'. */ +#define FD_SETSIZE __FD_SETSIZE + +#ifdef __USE_MISC +/* Sometimes the fd_set member is assumed to have this type. */ +typedef __fd_mask fd_mask; + +/* Number of bits per word of `fd_set' (some code assumes this is 32). */ +# define NFDBITS __NFDBITS +#endif + + +/* Access macros for `fd_set'. */ +#define FD_SET(fd, fdsetp) __FD_SET (fd, fdsetp) +#define FD_CLR(fd, fdsetp) __FD_CLR (fd, fdsetp) +#define FD_ISSET(fd, fdsetp) __FD_ISSET (fd, fdsetp) +#define FD_ZERO(fdsetp) __FD_ZERO (fdsetp) + + +__BEGIN_DECLS + +/* Check the first NFDS descriptors each in READFDS (if not NULL) for read + readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS + (if not NULL) for exceptional conditions. If TIMEOUT is not NULL, time out + after waiting the interval specified therein. Returns the number of ready + descriptors, or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +#ifndef __USE_TIME64_REDIRECTS +extern int select (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + struct timeval *__restrict __timeout); +#else +# ifdef __REDIRECT +extern int __REDIRECT (select, + (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + struct timeval *__restrict __timeout), + __select64); +# else +# define select __select64 +# endif +#endif + +#ifdef __USE_XOPEN2K +/* Same as above only that the TIMEOUT value is given with higher + resolution and a sigmask which is been set temporarily. This version + should be used. + + This function is a cancellation point and therefore not marked with + __THROW. */ +# ifndef __USE_TIME64_REDIRECTS +extern int pselect (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + const struct timespec *__restrict __timeout, + const __sigset_t *__restrict __sigmask); +# else +# ifdef __REDIRECT +extern int __REDIRECT (pselect, + (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + const struct timespec *__restrict __timeout, + const __sigset_t *__restrict __sigmask), + __pselect64); +# else +# define pselect __pselect64 +# endif +# endif +#endif + + +/* Define some inlines helping to catch common problems. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __GNUC__ +# include +#endif + +__END_DECLS + +#endif /* sys/select.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@select.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@select.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c1d79c4515fd3582bb92faeea573d61048eedbe9 GIT binary patch literal 14876 zcmdO5_!rYHe3^-nkwL$-xJW-UFFB_)B~`z;vRJ=3H77N>L@$FuKR2&LzbG*?MZcgZ zKPxr4q*yZc1iR zYH~?_QKc;jZesZR57l$YC6xuKdKnO}qj)=6TU+1IRL@AyP(LZNq*y;OCnrBSzN9EI zv!ocLLFTORWfToyRUqSv_2c7nlZs0cOH$)OVFnIX6s1UJ7nh`@RwSnulra3mFfk`H zDKoDm2V@&4W>AbsOHC{(ElLGD1w#_a{0a-Rcrz2-f@IyC%)HVH-SoUth=1~n<5N=8 zGV>rtVAzdhL~%(`YGQ6uX&M$MA}Is=zqq6*GcP@@JO$)v3`4<6k}6A5i^~%WKq~OL z9IQAWV!2*Paxxa%!AcTK@^dqjE}kqb*wGV{QxDa)Mk zG6_i@lnqNuGINUc%My#g+3=s!9&Oa5i{ydK{Nl9o6eQOm7X!&DscG0#95^OGL0YU| zTvAk;ToUi*>Ej9t0DMtgP+XFu4V9+`rNybm z@lcEMi{cZD(!oJW(59UH?h1-hAq84We0~AJ zAO#tpnU{twh|nVpmevw;;xiJ9Gl+_0upUUkPL%rMlAQQ5aD9eVIVcT-Brt*(DX8M( zi!;-UQ_+J9YiSZ6UtE%slA0D@o}7^g%^cuz1yu3l*HN5V1+CWL8el~PQotpbgKJhS z2@pvU*zu4+%FNHhndLwY5Kwf1;}k~-Wag%tncxng(#*V)Jl)Kc)Vz|+l1i-V(A@>k zp&->5NfcdmS~1Qk?N?K+Pxc#zf=BtY+4FpKw=A~pN=7D^GBit$rQbElXXxRd;UocdH8xHyf`Nf$P z@$h)Sa6Q<*^8BI{Py)efBf9?}WoCR?W@#(EKp?*H40SerWO^0 z>IIMsFk%hj6G+krDZuaqlCfa_BqbJSCdWfe2Wh}C5v-~>wInMSdwT}d+$t_9O)A!f zL^_5?5{q;7Q;UiqEenF~fwYE_O4D!z7}z=RIKr?D$$Ri@M@kmO8U&C)gXg<%(%Pfh9M+?@VMlwAmHK{aRAJh~m z0=I*(ss}qd6IUAJv2*xW)VTwIk zA!P};H3{yZfs-u0Vgg?vLede)Y1n;`lbMvPn~|EBl3Ju&T#{IXz4il#N^(J|ZgDDh z1?b@oYRZ9|f0_Bpi#;q*Y>&&O2z>E48RtzbLi1G^YeoU$OP6;jFK4hAMcp0o30vE=kNIT#G@R4<4Zc zwb3CxEaIY~AhD=8H9oHtcjQ4j3Gi@1E|rKXh^K}LJw@ryrm<|bCeC+1|P=Rw+G7%S5figL0{J#{t zJzzCyIr)htdAiB@xw(*b0zT&;s?(zQoXlcuElcDiOj^2vWkGP9f=5=t&c@+2aOtKC z?%UuFYEYF)%s2pO^a3&pjwO$vr=)`XVtCwPcN|z+KN-{_g`^#PVG51~NDniw(2-Z{eG-U$;DIto+X;K@Bl!t3UWCP7+_?rxHz@fg64AQ^ z&9vme>rY7L1*cN1p#~WR07-#^jI>k(X@Zs(XM)mQK>@?R8J%b;1~f(slFmtuhjeTp z?S8Ob$jv$=e}cm`FBLQkK>V;ra(+r`av8Sr4{RLR|De$w%yDp70gdj0GRS}-C}i-Z zQ?T)%S~xK$Js)S!7|C!@VVoncjv+%NOK|2Ma48+1nU|B9 z2hJxLUIY6F5?r7Jmz|kHWQmzp9FIPhfWJD=E6o8%^2IjM=o1oIWx&3UQi zh}knx7-D!0DSSX4gchz?vLlj0u+h*014k1dtOR5rDC2>rIKl0x_=3cu#9WX=Fd`GI z1L{HW3{{ zv7eV(4oz;Pm9wz%>fFTiyv!2N;u|;%Qd941N9$ODT?S2JpgAtAVFF4lAcg2n2jrB3 z9&Wk$W!MW2bcN6o8Dud=jDjphZAX+~&nf7JLPv4pGxLg5A>(owW+Q2Vs)hzR4qt&A zTi~T4&>27s6Cthz56kI78Zf%x><;o8MmmEi2Db{J3m!lvHZcvP%>3NMyvzdpu7wQm zgGrF}7;Z)KJ=i6P@d<315t4L41`+9xvP5u^jiDO3F$xbGj8X^eBCvF36=bCX+#vi_ zMSfaZacW6^8px#>)diB5Aq_0>%pv|@1iJ)UnBXYZk&Fea&de_cx1~UCzzBA*3Q+S~ zHzmI`2{Q8v_ZzH*0agU|zCI{T5LvG#7ZiYJSE1DviuL$I4OGDvl%UVz!(4;pKTsA( z&d*COEh!HY{$;uDjw_cM`P3^p0; zHv;SKAiZf&pkYJ@l5x13OWNAtjuT73Z=JXt01=Qn{ri zsRW1E!5SdzRdA;U^l*n1eW;_M*qc=FK@)tT18MQ#FLXfJ3_O07ngSZQO@pjQ#E1@b zmx4N3=v5Q$T$xyu9v>f{o>!V2UzP|S69PpnM%FAYNy*7f0!iWXRWjJ`NWQ{qFJ%4~ zWEO@s;HZHVc{tbofz?3VqYKWiAd^6@V%I}ixB}|}>18mOph$oX09&G$!C-|c1)nW& zz?1`PL+%*5;Zg%m=Af>K2QC$mJRA>F2&pH1h)@Y_8L(c?Gz`*wZsmk>)dwRIM5PT>J261|9|m#yYV&6-LH7hNdV6hX1S1UJ8wh+!TxyQ1lKb zq!21g%t7-wG=M-J=K*<~^*?vRVR^k=_NV_draRNu9L@}EdQ_dd7I0r z&#%t^um1DolArzgQm}th#Zr|R8B-ZDLKql0{|hO<>f68aIiXu$=x0h}g4x*;~e zyw8{+k)g)I_<#B0(0ww+OCw=^j*m}Ei3g=8PzC_e3@R#o48i%isi5F4Rw&6x1<8Q2 z2Bdyc$ShV!EG{n1O-)fK$ydloEK5}=$;d2L0GX)A!04mmW5mSh!{B2Ca>V}$4OeG8 zt;iAl1NPZ}rG=*w?2o_Nk(igC2McdV&SPL;P+@>D71HvH6d*}YAu%rnmRkHVl0g5Tu z5-g1Hqy-8)R16PEnBPE6Wd(TjF-S=XF@#`?Ea<9WaBL-|DkSD9Bo-AVRx0GDDS(V9 z)?;8aP%((h3@1sAVy{IAu^%6JuatY%pr@0GZRk z)8O$R7V!{sV6lMJ9MIB`w3K27H8qfH>eA{eK&I3=)K#FF0?RsRxeV1+pj?t)TEbvv z1~M(fAtMN6S_W4}5ImPc+ypC-u(}D|Z|MfuPu$lv_kr>p}L>L$t z(+tvFK*pqTrMaLP11mAH8iN`{sVS*tAX8H9Qp?axNpsgSbk;PS15P$jf^i1J3^4~r zcpZe*1~iA(8`XpTThCLE?%$izvgfUqJLtv7`?ctFfa%yL)JC0%&q9KTSaco;Nf#85kH%1x%HgKx6{Le?|rdaC&xN{C}xr+V&|-A{*l4-CTm> zq2`Mq%!i3;6sMMGDrkTyUAwfD;&@P#31qN?kb@c%ql1t`2-si-cvTC@6-cQEccstZ z;sQ!OjRB2Gppb6lX-tCGBaq~C^sJr6hdoX=;)5fD*(ZpBfq@6686u*QmI7)A6{nUIXmWxA1f)y> zS(Jf+F;pN_h6zMM!ja+sJ+FR7-z|G8-CW|MT!Z`>7#R4Fj0Fj4q@_U2gcu4E0+|XH zV_;wm7YLVQ0+C@*cLt^QGZio#zX*1MuVb(`YLvUV#DfGiQZzX=kRn+@!!XoG!Nx{G zLnB2~K^2iUG{Nz2E?}<2#Aq&HUIn#fP4Kt7rW0OVL?kP?yP-myobdF;z`*D)SwP}7*fj(c zt?(qoz`z(H5F*0_B4LRIR;j@Arh*1iQ$W+o3YN2?4b5U1M2rMLIaS792jp~n4*LXn zEyw|C-u&0iuxYdqwDbn26jz@R1_lNJSmJ|;LDETzrh-0Fl3-w9G!rmWU;>d|(6D>O zmBi*?+8z7!AjBn9VQT_z{D6P5S9To`$3oJ+wA|3BA|f`rWm6b IqNE%c0soKgE&u=k literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@single_threaded.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@single_threaded.h new file mode 100644 index 0000000..ddbdd25 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@single_threaded.h @@ -0,0 +1,33 @@ +/* Support for single-thread optimizations. + Copyright (C) 2020-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SINGLE_THREADED_H +#define _SYS_SINGLE_THREADED_H + +#include + +__BEGIN_DECLS + +/* If this variable is non-zero, then the current thread is the only + thread in the process image. If it is zero, the process might be + multi-threaded. */ +extern char __libc_single_threaded; + +__END_DECLS + +#endif /* _SYS_SINGLE_THREADED_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@single_threaded.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@single_threaded.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a0d978fb0e65446063a53598de8aa4865124175f GIT binary patch literal 11764 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@types.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@types.h new file mode 100644 index 0000000..2b52476 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@types.h @@ -0,0 +1,232 @@ +/* Copyright (C) 1991-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 2.6 Primitive System Data Types + */ + +#ifndef _SYS_TYPES_H +#define _SYS_TYPES_H 1 + +#include + +__BEGIN_DECLS + +#include + +#ifdef __USE_MISC +# ifndef __u_char_defined +typedef __u_char u_char; +typedef __u_short u_short; +typedef __u_int u_int; +typedef __u_long u_long; +typedef __quad_t quad_t; +typedef __u_quad_t u_quad_t; +typedef __fsid_t fsid_t; +# define __u_char_defined +# endif +typedef __loff_t loff_t; +#endif + +#ifndef __ino_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __ino_t ino_t; +# else +typedef __ino64_t ino_t; +# endif +# define __ino_t_defined +#endif +#if defined __USE_LARGEFILE64 && !defined __ino64_t_defined +typedef __ino64_t ino64_t; +# define __ino64_t_defined +#endif + +#ifndef __dev_t_defined +typedef __dev_t dev_t; +# define __dev_t_defined +#endif + +#ifndef __gid_t_defined +typedef __gid_t gid_t; +# define __gid_t_defined +#endif + +#ifndef __mode_t_defined +typedef __mode_t mode_t; +# define __mode_t_defined +#endif + +#ifndef __nlink_t_defined +typedef __nlink_t nlink_t; +# define __nlink_t_defined +#endif + +#ifndef __uid_t_defined +typedef __uid_t uid_t; +# define __uid_t_defined +#endif + +#ifndef __off_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __off_t off_t; +# else +typedef __off64_t off_t; +# endif +# define __off_t_defined +#endif +#if defined __USE_LARGEFILE64 && !defined __off64_t_defined +typedef __off64_t off64_t; +# define __off64_t_defined +#endif + +#ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +#endif + +#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) \ + && !defined __id_t_defined +typedef __id_t id_t; +# define __id_t_defined +#endif + +#ifndef __ssize_t_defined +typedef __ssize_t ssize_t; +# define __ssize_t_defined +#endif + +#ifdef __USE_MISC +# ifndef __daddr_t_defined +typedef __daddr_t daddr_t; +typedef __caddr_t caddr_t; +# define __daddr_t_defined +# endif +#endif + +#if (defined __USE_MISC || defined __USE_XOPEN) && !defined __key_t_defined +typedef __key_t key_t; +# define __key_t_defined +#endif + +#if defined __USE_XOPEN || defined __USE_XOPEN2K8 +# include +#endif +#include +#include +#include + +#ifdef __USE_XOPEN +# ifndef __useconds_t_defined +typedef __useconds_t useconds_t; +# define __useconds_t_defined +# endif +# ifndef __suseconds_t_defined +typedef __suseconds_t suseconds_t; +# define __suseconds_t_defined +# endif +#endif + +#define __need_size_t +#include + +#ifdef __USE_MISC +/* Old compatibility names for C types. */ +typedef unsigned long int ulong; +typedef unsigned short int ushort; +typedef unsigned int uint; +#endif + +/* These size-specific names are used by some of the inet code. */ + +#include + +/* These were defined by ISO C without the first `_'. */ +typedef __uint8_t u_int8_t; +typedef __uint16_t u_int16_t; +typedef __uint32_t u_int32_t; +typedef __uint64_t u_int64_t; + +#if __GNUC_PREREQ (2, 7) +typedef int register_t __attribute__ ((__mode__ (__word__))); +#else +typedef int register_t; +#endif + +/* Some code from BIND tests this macro to see if the types above are + defined. */ +#define __BIT_TYPES_DEFINED__ 1 + + +#ifdef __USE_MISC +/* In BSD is expected to define BYTE_ORDER. */ +# include + +/* It also defines `fd_set' and the FD_* macros for `select'. */ +# include +#endif /* Use misc. */ + + +#if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) \ + && !defined __blksize_t_defined +typedef __blksize_t blksize_t; +# define __blksize_t_defined +#endif + +/* Types from the Large File Support interface. */ +#ifndef __USE_FILE_OFFSET64 +# ifndef __blkcnt_t_defined +typedef __blkcnt_t blkcnt_t; /* Type to count number of disk blocks. */ +# define __blkcnt_t_defined +# endif +# ifndef __fsblkcnt_t_defined +typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks. */ +# define __fsblkcnt_t_defined +# endif +# ifndef __fsfilcnt_t_defined +typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes. */ +# define __fsfilcnt_t_defined +# endif +#else +# ifndef __blkcnt_t_defined +typedef __blkcnt64_t blkcnt_t; /* Type to count number of disk blocks. */ +# define __blkcnt_t_defined +# endif +# ifndef __fsblkcnt_t_defined +typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks. */ +# define __fsblkcnt_t_defined +# endif +# ifndef __fsfilcnt_t_defined +typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes. */ +# define __fsfilcnt_t_defined +# endif +#endif + +#ifdef __USE_LARGEFILE64 +typedef __blkcnt64_t blkcnt64_t; /* Type to count number of disk blocks. */ +typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks. */ +typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes. */ +#endif + + +/* Now add the thread types. */ +#if defined __USE_POSIX199506 || defined __USE_UNIX98 +# include +#endif + +__END_DECLS + +#endif /* sys/types.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@sys@types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6dc33c94de78cd7c276869fdd60677ed93b9e703 GIT binary patch literal 18153 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@time.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@time.h new file mode 100644 index 0000000..ae7becc --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@time.h @@ -0,0 +1,463 @@ +/* Copyright (C) 1991-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.23 Date and time + */ + +#ifndef _TIME_H +#define _TIME_H 1 + +#include + +#define __need_size_t +#define __need_NULL +#include + +#if __GLIBC_USE (ISOC23) +# define __STDC_VERSION_TIME_H__ 202311L +#endif + +/* This defines CLOCKS_PER_SEC, which is the number of processor clock + ticks per second, and possibly a number of other constants. */ +#include + +/* Many of the typedefs and structs whose official home is this header + may also need to be defined by other headers. */ +#include +#include +#include + +#if defined __USE_POSIX199309 || defined __USE_ISOC11 +# include +#endif + +#ifdef __USE_POSIX199309 +# include +# include +# include +struct sigevent; +#endif + +#ifdef __USE_XOPEN2K +# ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +# endif +#endif + +#ifdef __USE_XOPEN2K8 +# include +#endif + +#ifdef __USE_ISOC11 +/* Time base values for timespec_get. */ +# define TIME_UTC 1 +#endif +#if __GLIBC_USE (ISOC23) +# define TIME_MONOTONIC 2 +# define TIME_ACTIVE 3 +# define TIME_THREAD_ACTIVE 4 +#endif + +__BEGIN_DECLS + +/* Time used by the program so far (user time + system time). + The result / CLOCKS_PER_SEC is program time in seconds. */ +extern clock_t clock (void) __THROW; + +#ifndef __USE_TIME64_REDIRECTS +/* Return the current time and put it in *TIMER if TIMER is not NULL. */ +extern time_t time (time_t *__timer) __THROW; + +/* Return the difference between TIME1 and TIME0. */ +extern double difftime (time_t __time1, time_t __time0); + +/* Return the `time_t' representation of TP and normalize TP. */ +extern time_t mktime (struct tm *__tp) __THROW; +#else +# ifdef __REDIRECT_NTH +extern time_t __REDIRECT_NTH (time, (time_t *__timer), __time64); +extern double __REDIRECT_NTH (difftime, (time_t __time1, time_t __time0), + __difftime64); +extern time_t __REDIRECT_NTH (mktime, (struct tm *__tp), __mktime64); +# else +# define time __time64 +# define difftime __difftime64 +# define mktime __mktime64 +# endif +#endif + +/* Format TP into S according to FORMAT. + Write no more than MAXSIZE characters and return the number + of characters written, or 0 if it would exceed MAXSIZE. */ +extern size_t strftime (char *__restrict __s, size_t __maxsize, + const char *__restrict __format, + const struct tm *__restrict __tp) + __THROW __nonnull((1, 3, 4)); + +#ifdef __USE_XOPEN +/* Parse S according to FORMAT and store binary time information in TP. + The return value is a pointer to the first unparsed character in S. */ +extern char *strptime (const char *__restrict __s, + const char *__restrict __fmt, struct tm *__tp) + __THROW; +#endif + +#ifdef __USE_XOPEN2K8 +/* Similar to the two functions above but take the information from + the provided locale and not the global locale. */ + +extern size_t strftime_l (char *__restrict __s, size_t __maxsize, + const char *__restrict __format, + const struct tm *__restrict __tp, + locale_t __loc) __THROW; +#endif + +#ifdef __USE_GNU +extern char *strptime_l (const char *__restrict __s, + const char *__restrict __fmt, struct tm *__tp, + locale_t __loc) __THROW; +#endif + + +#ifndef __USE_TIME64_REDIRECTS +/* Return the `struct tm' representation of *TIMER + in Universal Coordinated Time (aka Greenwich Mean Time). */ +extern struct tm *gmtime (const time_t *__timer) __THROW; + +/* Return the `struct tm' representation + of *TIMER in the local timezone. */ +extern struct tm *localtime (const time_t *__timer) __THROW; + +#else +# ifdef __REDIRECT_NTH +extern struct tm*__REDIRECT_NTH (gmtime, (const time_t *__timer), __gmtime64); +extern struct tm *__REDIRECT_NTH (localtime, (const time_t *__timer), + __localtime64); +# else +# define gmtime __gmtime64 +# define localtime __localtime64 +# endif +#endif + + +#if defined __USE_POSIX || __GLIBC_USE (ISOC23) +# ifndef __USE_TIME64_REDIRECTS +/* Return the `struct tm' representation of *TIMER in UTC, + using *TP to store the result. */ +extern struct tm *gmtime_r (const time_t *__restrict __timer, + struct tm *__restrict __tp) __THROW; + +/* Return the `struct tm' representation of *TIMER in local time, + using *TP to store the result. */ +extern struct tm *localtime_r (const time_t *__restrict __timer, + struct tm *__restrict __tp) __THROW; +# else +# ifdef __REDIRECT_NTH +extern struct tm*__REDIRECT_NTH (gmtime_r, (const time_t *__restrict __timer, + struct tm *__restrict __tp), + __gmtime64_r); + +extern struct tm*__REDIRECT_NTH (localtime_r, (const time_t *__restrict __t, + struct tm *__restrict __tp), + __localtime64_r); +# else +# define gmtime_r __gmtime64_r +# define localtime_r __localtime_r +# endif +# endif +#endif /* POSIX || C23 */ + +/* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n" + that is the representation of TP in this format. */ +extern char *asctime (const struct tm *__tp) __THROW; + +/* Equivalent to `asctime (localtime (timer))'. */ +#ifndef __USE_TIME64_REDIRECTS +extern char *ctime (const time_t *__timer) __THROW; +#else +# ifdef __REDIRECT_NTH +extern char *__REDIRECT_NTH (ctime, (const time_t *__timer), __ctime64); +# else +# define ctime __ctime64 +# endif +#endif + +#ifdef __USE_POSIX +/* Reentrant versions of the above functions. */ + +/* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n" + that is the representation of TP in this format. */ +extern char *asctime_r (const struct tm *__restrict __tp, + char *__restrict __buf) __THROW; + +/* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'. */ +#ifndef __USE_TIME64_REDIRECTS +extern char *ctime_r (const time_t *__restrict __timer, + char *__restrict __buf) __THROW; +#else +# ifdef __REDIRECT_NTH +extern char *__REDIRECT_NTH (ctime_r, (const time_t *__restrict __timer, + char *__restrict __buf), __ctime64_r); +# else +# define ctime_r __ctime64_r +# endif +#endif + +#endif /* POSIX */ + + +/* Defined in localtime.c. */ +extern char *__tzname[2]; /* Current time zone abbreviations. */ +extern int __daylight; /* If daylight-saving time is ever in use. */ +extern long int __timezone; /* Seconds west of UTC. */ + + +#ifdef __USE_POSIX +/* Same as above. */ +extern char *tzname[2]; + +/* Set time conversion information from the TZ environment variable. + If TZ is not defined, a locale-dependent default is used. */ +extern void tzset (void) __THROW; +#endif + +#if defined __USE_MISC || defined __USE_XOPEN +extern int daylight; +extern long int timezone; +#endif + + +/* Nonzero if YEAR is a leap year (every 4 years, + except every 100th isn't, and every 400th is). */ +#define __isleap(year) \ + ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) + + +#if defined __USE_MISC || __GLIBC_USE (ISOC23) +# ifndef __USE_TIME64_REDIRECTS +/* Like `mktime', but for TP represents Universal Time, not local time. */ +extern time_t timegm (struct tm *__tp) __THROW; +# else +# ifdef __REDIRECT_NTH +extern time_t __REDIRECT_NTH (timegm, (struct tm *__tp), __timegm64); +# else +# define timegm __timegm64 +# endif +# endif +#endif + + +#ifdef __USE_MISC +/* Miscellaneous functions many Unices inherited from the public domain + localtime package. These are included only for compatibility. */ + +#ifndef __USE_TIME64_REDIRECTS +/* Another name for `mktime'. */ +extern time_t timelocal (struct tm *__tp) __THROW; +#else +# ifdef __REDIRECT_NTH +extern time_t __REDIRECT_NTH (timelocal, (struct tm *__tp), __mktime64); +# endif +#endif + +/* Return the number of days in YEAR. */ +extern int dysize (int __year) __THROW __attribute__ ((__const__)); +#endif + + +#ifdef __USE_POSIX199309 +# ifndef __USE_TIME64_REDIRECTS +/* Pause execution for a number of nanoseconds. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int nanosleep (const struct timespec *__requested_time, + struct timespec *__remaining); + +/* Get resolution of clock CLOCK_ID. */ +extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW; + +/* Get current value of clock CLOCK_ID and store it in TP. */ +extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) + __THROW __nonnull((2)); + +/* Set clock CLOCK_ID to value TP. */ +extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) + __THROW __nonnull((2)); +# else +# ifdef __REDIRECT +extern int __REDIRECT (nanosleep, (const struct timespec *__requested_time, + struct timespec *__remaining), + __nanosleep64); +extern int __REDIRECT_NTH (clock_getres, (clockid_t __clock_id, + struct timespec *__res), + __clock_getres64); +extern int __REDIRECT_NTH (clock_gettime, (clockid_t __clock_id, struct + timespec *__tp), __clock_gettime64) + __nonnull((2)); +extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct + timespec *__tp), __clock_settime64) + __nonnull((2)); +# else +# define nanosleep __nanosleep64 +# define clock_getres __clock_getres64 +# define clock_gettime __clock_gettime64 +# define clock_settime __clock_settime64 +# endif +# endif + + +# ifdef __USE_XOPEN2K +/* High-resolution sleep with the specified clock. + + This function is a cancellation point and therefore not marked with + __THROW. */ +# ifndef __USE_TIME64_REDIRECTS +extern int clock_nanosleep (clockid_t __clock_id, int __flags, + const struct timespec *__req, + struct timespec *__rem); +# else +# ifdef __REDIRECT +extern int __REDIRECT (clock_nanosleep, (clockid_t __clock_id, int __flags, + const struct timespec *__req, + struct timespec *__rem), + __clock_nanosleep_time64); +# else +# define clock_nanosleep __clock_nanosleep_time64 +# endif +# endif + +/* Return clock ID for CPU-time clock. */ +extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __THROW; +# endif + + +/* Create new per-process timer using CLOCK_ID. */ +extern int timer_create (clockid_t __clock_id, + struct sigevent *__restrict __evp, + timer_t *__restrict __timerid) __THROW; + +/* Delete timer TIMERID. */ +extern int timer_delete (timer_t __timerid) __THROW; + +/* Set timer TIMERID to VALUE, returning old value in OVALUE. */ +# ifndef __USE_TIME64_REDIRECTS +extern int timer_settime (timer_t __timerid, int __flags, + const struct itimerspec *__restrict __value, + struct itimerspec *__restrict __ovalue) __THROW; + +/* Get current value of timer TIMERID and store it in VALUE. */ +extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) + __THROW; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (timer_settime, (timer_t __timerid, int __flags, + const struct itimerspec *__restrict __value, + struct itimerspec *__restrict __ovalue), + __timer_settime64); + +extern int __REDIRECT_NTH (timer_gettime, (timer_t __timerid, + struct itimerspec *__value), + __timer_gettime64); +# else +# define timer_settime __timer_settime64 +# define timer_gettime __timer_gettime64 +# endif +# endif + +/* Get expiration overrun for timer TIMERID. */ +extern int timer_getoverrun (timer_t __timerid) __THROW; +#endif + + +#ifdef __USE_ISOC11 +# ifndef __USE_TIME64_REDIRECTS +/* Set TS to calendar time based in time base BASE. */ +extern int timespec_get (struct timespec *__ts, int __base) + __THROW __nonnull ((1)); +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (timespec_get, (struct timespec *__ts, int __base), + __timespec_get64) __nonnull ((1)); +# else +# define timespec_get __timespec_get64 +# endif +# endif +#endif + + +#if __GLIBC_USE (ISOC23) +# ifndef __USE_TIME64_REDIRECTS +/* Set TS to resolution of time base BASE. */ +extern int timespec_getres (struct timespec *__ts, int __base) + __THROW; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (timespec_getres, (struct timespec *__ts, + int __base), + __timespec_getres64); +# else +# define timespec_getres __timespec_getres64 +# endif +# endif +#endif + + +#ifdef __USE_XOPEN_EXTENDED +/* Set to one of the following values to indicate an error. + 1 the DATEMSK environment variable is null or undefined, + 2 the template file cannot be opened for reading, + 3 failed to get file status information, + 4 the template file is not a regular file, + 5 an error is encountered while reading the template file, + 6 memory allication failed (not enough memory available), + 7 there is no line in the template that matches the input, + 8 invalid input specification Example: February 31 or a time is + specified that can not be represented in a time_t (representing + the time in seconds since 00:00:00 UTC, January 1, 1970) */ +extern int getdate_err; + +/* Parse the given string as a date specification and return a value + representing the value. The templates from the file identified by + the environment variable DATEMSK are used. In case of an error + `getdate_err' is set. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct tm *getdate (const char *__string); +#endif + +#ifdef __USE_GNU +/* Since `getdate' is not reentrant because of the use of `getdate_err' + and the static buffer to return the result in, we provide a thread-safe + variant. The functionality is the same. The result is returned in + the buffer pointed to by RESBUFP and in case of an error the return + value is != 0 with the same values as given above for `getdate_err'. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int getdate_r (const char *__restrict __string, + struct tm *__restrict __resbufp); +#endif + +__END_DECLS + +#endif /* time.h. */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@time.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@time.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4122c0b15eb2010135c92a8c48b6d6c7be906221 GIT binary patch literal 28096 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. */ + +/* + * ISO C99 Standard: 7.24 + * Extended multibyte and wide character utilities + */ + +#ifndef _WCHAR_H +#define _WCHAR_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +/* Gather machine dependent type support. */ +#include + +#define __need_size_t +#define __need_wchar_t +#define __need_NULL +#include + +#define __need___va_list +#include + +#if defined __USE_XOPEN2K || defined __USE_XOPEN2K8 +# ifdef __GNUC__ +# ifndef _VA_LIST_DEFINED +typedef __gnuc_va_list va_list; +# define _VA_LIST_DEFINED +# endif +# else +# include +# endif +#endif + +#include +#include +#include +#include + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +# include +#endif +#ifdef __USE_XOPEN2K8 +# include +#endif + +#if __GLIBC_USE (ISOC23) +# define __STDC_VERSION_WCHAR_H__ 202311L +#endif + +/* Tell the caller that we provide correct C++ prototypes. */ +#if defined __cplusplus && __GNUC_PREREQ (4, 4) +# define __CORRECT_ISO_CPP_WCHAR_H_PROTO +#endif + +#ifndef WCHAR_MIN +/* These constants might also be defined in . */ +# define WCHAR_MIN __WCHAR_MIN +# define WCHAR_MAX __WCHAR_MAX +#endif + +#ifndef WEOF +# define WEOF (0xffffffffu) +#endif + +/* All versions of XPG prior to the publication of ISO C99 required + the bulk of 's declarations to appear in this header + (because did not exist prior to C99). In POSIX.1-2001 + those declarations were marked as XSI extensions; in -2008 they + were additionally marked as obsolescent. _GNU_SOURCE mode + anticipates the removal of these declarations in the next revision + of POSIX. */ +#if (defined __USE_XOPEN && !defined __USE_GNU \ + && !(defined __USE_XOPEN2K && !defined __USE_XOPEN2KXSI)) +# include +#endif + +__BEGIN_DECLS + +/* This incomplete type is defined in but needed here because + of `wcsftime'. */ +struct tm; + + +/* Copy SRC to DEST. */ +extern wchar_t *wcscpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src) + __THROW __nonnull ((1, 2)); + +/* Copy no more than N wide-characters of SRC to DEST. */ +extern wchar_t *wcsncpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); + +#ifdef __USE_MISC +/* Copy at most N - 1 characters from SRC to DEST. */ +extern size_t wcslcpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)) __attr_access ((__write_only__, 1, 3)); + +/* Append SRC to DEST, possibly with truncation to keep the total size + below N. */ +extern size_t wcslcat (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)) __attr_access ((__read_write__, 1, 3)); +#endif + +/* Append SRC onto DEST. */ +extern wchar_t *wcscat (wchar_t *__restrict __dest, + const wchar_t *__restrict __src) + __THROW __nonnull ((1, 2)); +/* Append no more than N wide-characters of SRC onto DEST. */ +extern wchar_t *wcsncat (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); + +/* Compare S1 and S2. */ +extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Compare N wide-characters of S1 and S2. */ +extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +#ifdef __USE_XOPEN2K8 +/* Compare S1 and S2, ignoring case. */ +extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) __THROW; + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2, + size_t __n) __THROW; + +/* Similar to the two functions above but take the information from + the provided locale and not the global locale. */ +extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2, + locale_t __loc) __THROW; + +extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2, + size_t __n, locale_t __loc) __THROW; +#endif + +/* Compare S1 and S2, both interpreted as appropriate to the + LC_COLLATE category of the current locale. */ +extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) __THROW; +/* Transform S2 into array pointed to by S1 such that if wcscmp is + applied to two transformed strings the result is the as applying + `wcscoll' to the original strings. */ +extern size_t wcsxfrm (wchar_t *__restrict __s1, + const wchar_t *__restrict __s2, size_t __n) __THROW; + +#ifdef __USE_XOPEN2K8 +/* Similar to the two functions above but take the information from + the provided locale and not the global locale. */ + +/* Compare S1 and S2, both interpreted as appropriate to the + LC_COLLATE category of the given locale. */ +extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2, + locale_t __loc) __THROW; + +/* Transform S2 into array pointed to by S1 such that if wcscmp is + applied to two transformed strings the result is the as applying + `wcscoll' to the original strings. */ +extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2, + size_t __n, locale_t __loc) __THROW; + +/* Duplicate S, returning an identical malloc'd string. */ +extern wchar_t *wcsdup (const wchar_t *__s) __THROW + __attribute_malloc__ __attr_dealloc_free; +#endif + +/* Find the first occurrence of WC in WCS. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc) + __THROW __asm ("wcschr") __attribute_pure__; +extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) + __THROW __asm ("wcschr") __attribute_pure__; +#else +extern wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) + __THROW __attribute_pure__; +# if __GLIBC_USE (ISOC23) && defined __glibc_const_generic && !defined _LIBC +# define wcschr(WCS, WC) \ + __glibc_const_generic (WCS, const wchar_t *, wcschr (WCS, WC)) +# endif +#endif +/* Find the last occurrence of WC in WCS. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc) + __THROW __asm ("wcsrchr") __attribute_pure__; +extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) + __THROW __asm ("wcsrchr") __attribute_pure__; +#else +extern wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) + __THROW __attribute_pure__; +# if __GLIBC_USE (ISOC23) && defined __glibc_const_generic && !defined _LIBC +# define wcsrchr(WCS, WC) \ + __glibc_const_generic (WCS, const wchar_t *, wcsrchr (WCS, WC)) +# endif +#endif + +#ifdef __USE_GNU +/* This function is similar to `wcschr'. But it returns a pointer to + the closing NUL wide character in case C is not found in S. */ +extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc) + __THROW __attribute_pure__; +#endif + +/* Return the length of the initial segmet of WCS which + consists entirely of wide characters not in REJECT. */ +extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject) + __THROW __attribute_pure__; +/* Return the length of the initial segmet of WCS which + consists entirely of wide characters in ACCEPT. */ +extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept) + __THROW __attribute_pure__; +/* Find the first occurrence in WCS of any character in ACCEPT. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept) + __THROW __asm ("wcspbrk") __attribute_pure__; +extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs, + const wchar_t *__accept) + __THROW __asm ("wcspbrk") __attribute_pure__; +#else +extern wchar_t *wcspbrk (const wchar_t *__wcs, const wchar_t *__accept) + __THROW __attribute_pure__; +# if __GLIBC_USE (ISOC23) && defined __glibc_const_generic && !defined _LIBC +# define wcspbrk(WCS, ACCEPT) \ + __glibc_const_generic (WCS, const wchar_t *, wcspbrk (WCS, ACCEPT)) +# endif +#endif +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle) + __THROW __asm ("wcsstr") __attribute_pure__; +extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack, + const wchar_t *__needle) + __THROW __asm ("wcsstr") __attribute_pure__; +#else +extern wchar_t *wcsstr (const wchar_t *__haystack, const wchar_t *__needle) + __THROW __attribute_pure__; +# if __GLIBC_USE (ISOC23) && defined __glibc_const_generic && !defined _LIBC +# define wcsstr(HAYSTACK, NEEDLE) \ + __glibc_const_generic (HAYSTACK, const wchar_t *, \ + wcsstr (HAYSTACK, NEEDLE)) +# endif +#endif + +/* Divide WCS into tokens separated by characters in DELIM. */ +extern wchar_t *wcstok (wchar_t *__restrict __s, + const wchar_t *__restrict __delim, + wchar_t **__restrict __ptr) __THROW; + +/* Return the number of wide characters in S. */ +extern size_t wcslen (const wchar_t *__s) __THROW __attribute_pure__; + +#ifdef __USE_XOPEN +/* Another name for `wcsstr' from XPG4. */ +# ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle) + __THROW __asm ("wcswcs") __attribute_pure__; +extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack, + const wchar_t *__needle) + __THROW __asm ("wcswcs") __attribute_pure__; +# else +extern wchar_t *wcswcs (const wchar_t *__haystack, const wchar_t *__needle) + __THROW __attribute_pure__; +# endif +#endif + +#ifdef __USE_XOPEN2K8 +/* Return the number of wide characters in S, but at most MAXLEN. */ +extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen) + __THROW __attribute_pure__; +#endif + + +/* Search N wide characters of S for C. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n) + __THROW __asm ("wmemchr") __attribute_pure__; +extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, + size_t __n) + __THROW __asm ("wmemchr") __attribute_pure__; +#else +extern wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, size_t __n) + __THROW __attribute_pure__; +# if __GLIBC_USE (ISOC23) && defined __glibc_const_generic && !defined _LIBC +# define wmemchr(S, C, N) \ + __glibc_const_generic (S, const wchar_t *, wmemchr (S, C, N)) +# endif +#endif + +/* Compare N wide characters of S1 and S2. */ +extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) + __THROW __attribute_pure__; + +/* Copy N wide characters of SRC to DEST. */ +extern wchar_t *wmemcpy (wchar_t *__restrict __s1, + const wchar_t *__restrict __s2, size_t __n) __THROW; + +/* Copy N wide characters of SRC to DEST, guaranteeing + correct behavior for overlapping strings. */ +extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) + __THROW; + +/* Set N wide characters of S to C. */ +extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) __THROW; + +#ifdef __USE_GNU +/* Copy N wide characters of SRC to DEST and return pointer to following + wide character. */ +extern wchar_t *wmempcpy (wchar_t *__restrict __s1, + const wchar_t *__restrict __s2, size_t __n) + __THROW; +#endif + + +/* Determine whether C constitutes a valid (one-byte) multibyte + character. */ +extern wint_t btowc (int __c) __THROW; + +/* Determine whether C corresponds to a member of the extended + character set whose multibyte representation is a single byte. */ +extern int wctob (wint_t __c) __THROW; + +/* Determine whether PS points to an object representing the initial + state. */ +extern int mbsinit (const mbstate_t *__ps) __THROW __attribute_pure__; + +/* Write wide character representation of multibyte character pointed + to by S to PWC. */ +extern size_t mbrtowc (wchar_t *__restrict __pwc, + const char *__restrict __s, size_t __n, + mbstate_t *__restrict __p) __THROW; + +/* Write multibyte representation of wide character WC to S. */ +extern size_t wcrtomb (char *__restrict __s, wchar_t __wc, + mbstate_t *__restrict __ps) __THROW; + +/* Return number of bytes in multibyte character pointed to by S. */ +extern size_t __mbrlen (const char *__restrict __s, size_t __n, + mbstate_t *__restrict __ps) __THROW; +extern size_t mbrlen (const char *__restrict __s, size_t __n, + mbstate_t *__restrict __ps) __THROW; + +#ifdef __USE_EXTERN_INLINES +/* Define inline function as optimization. */ + +/* We can use the BTOWC and WCTOB optimizations since we know that all + locales must use ASCII encoding for the values in the ASCII range + and because the wchar_t encoding is always ISO 10646. */ +extern wint_t __btowc_alias (int __c) __asm ("btowc"); +__extern_inline wint_t +__NTH (btowc (int __c)) +{ return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f' + ? (wint_t) __c : __btowc_alias (__c)); } + +extern int __wctob_alias (wint_t __c) __asm ("wctob"); +__extern_inline int +__NTH (wctob (wint_t __wc)) +{ return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f' + ? (int) __wc : __wctob_alias (__wc)); } + +__extern_inline size_t +__NTH (mbrlen (const char *__restrict __s, size_t __n, + mbstate_t *__restrict __ps)) +{ return (__ps != NULL + ? mbrtowc (NULL, __s, __n, __ps) : __mbrlen (__s, __n, NULL)); } +#endif + +/* Write wide character representation of multibyte character string + SRC to DST. */ +extern size_t mbsrtowcs (wchar_t *__restrict __dst, + const char **__restrict __src, size_t __len, + mbstate_t *__restrict __ps) __THROW; + +/* Write multibyte character representation of wide character string + SRC to DST. */ +extern size_t wcsrtombs (char *__restrict __dst, + const wchar_t **__restrict __src, size_t __len, + mbstate_t *__restrict __ps) __THROW; + + +#ifdef __USE_XOPEN2K8 +/* Write wide character representation of at most NMC bytes of the + multibyte character string SRC to DST. */ +extern size_t mbsnrtowcs (wchar_t *__restrict __dst, + const char **__restrict __src, size_t __nmc, + size_t __len, mbstate_t *__restrict __ps) __THROW; + +/* Write multibyte character representation of at most NWC characters + from the wide character string SRC to DST. */ +extern size_t wcsnrtombs (char *__restrict __dst, + const wchar_t **__restrict __src, + size_t __nwc, size_t __len, + mbstate_t *__restrict __ps) __THROW; +#endif /* use POSIX 2008 */ + + +/* The following functions are extensions found in X/Open CAE. */ +#ifdef __USE_XOPEN +/* Determine number of column positions required for C. */ +extern int wcwidth (wchar_t __c) __THROW; + +/* Determine number of column positions required for first N wide + characters (or fewer if S ends before this) in S. */ +extern int wcswidth (const wchar_t *__s, size_t __n) __THROW; +#endif /* Use X/Open. */ + + +/* Convert initial portion of the wide string NPTR to `double' + representation. */ +extern double wcstod (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; + +#ifdef __USE_ISOC99 +/* Likewise for `float' and `long double' sizes of floating-point numbers. */ +extern float wcstof (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +extern long double wcstold (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +#endif /* C99 */ + +#if __GLIBC_USE (IEC_60559_TYPES_EXT) && __GLIBC_USE (ISOC23) +/* Likewise for `_FloatN' and `_FloatNx' when support is enabled. */ + +# if __HAVE_FLOAT16 +extern _Float16 wcstof16 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT32 +extern _Float32 wcstof32 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT64 +extern _Float64 wcstof64 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT128 +extern _Float128 wcstof128 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT32X +extern _Float32x wcstof32x (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT64X +extern _Float64x wcstof64x (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT128X +extern _Float128x wcstof128x (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif +#endif /* __GLIBC_USE (IEC_60559_TYPES_EXT) && __GLIBC_USE (ISOC23) */ + + +/* Convert initial portion of wide string NPTR to `long int' + representation. */ +extern long int wcstol (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) __THROW; + +/* Convert initial portion of wide string NPTR to `unsigned long int' + representation. */ +extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) + __THROW; + +#ifdef __USE_ISOC99 +/* Convert initial portion of wide string NPTR to `long long int' + representation. */ +__extension__ +extern long long int wcstoll (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) + __THROW; + +/* Convert initial portion of wide string NPTR to `unsigned long long int' + representation. */ +__extension__ +extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) __THROW; +#endif /* ISO C99. */ + +#ifdef __USE_GNU +/* Convert initial portion of wide string NPTR to `long long int' + representation. */ +__extension__ +extern long long int wcstoq (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) + __THROW; + +/* Convert initial portion of wide string NPTR to `unsigned long long int' + representation. */ +__extension__ +extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) __THROW; +#endif /* Use GNU. */ + +/* Versions of the above functions that handle '0b' and '0B' prefixes + in base 0 or 2. */ +#if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern long int __REDIRECT_NTH (wcstol, (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstol); +extern unsigned long int __REDIRECT_NTH (wcstoul, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoul); +__extension__ +extern long long int __REDIRECT_NTH (wcstoll, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoll); +__extension__ +extern unsigned long long int __REDIRECT_NTH (wcstoull, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoull); +# ifdef __USE_GNU +__extension__ +extern long long int __REDIRECT_NTH (wcstoq, (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoll); +__extension__ +extern unsigned long long int __REDIRECT_NTH (wcstouq, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoull); +# endif +# else +extern long int __isoc23_wcstol (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) + __THROW; +extern unsigned long int __isoc23_wcstoul (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) + __THROW; +__extension__ +extern long long int __isoc23_wcstoll (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) + __THROW; +__extension__ +extern unsigned long long int __isoc23_wcstoull (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) + __THROW; +# define wcstol __isoc23_wcstol +# define wcstoul __isoc23_wcstoul +# define wcstoll __isoc23_wcstoll +# define wcstoull __isoc23_wcstoull +# ifdef __USE_GNU +# define wcstoq __isoc23_wcstoll +# define wcstouq __isoc23_wcstoull +# endif +# endif +#endif + +#ifdef __USE_GNU +/* Parallel versions of the functions above which take the locale to + use as an additional parameter. These are GNU extensions inspired + by the POSIX.1-2008 extended locale API. */ +extern long int wcstol_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base, + locale_t __loc) __THROW; + +extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) __THROW; + +__extension__ +extern long long int wcstoll_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) __THROW; + +__extension__ +extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) + __THROW; + +/* Versions of the above functions that handle '0b' and '0B' prefixes + in base 0 or 2. */ +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern long int __REDIRECT_NTH (wcstol_l, (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_wcstol_l); +extern unsigned long int __REDIRECT_NTH (wcstoul_l, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_wcstoul_l); +__extension__ +extern long long int __REDIRECT_NTH (wcstoll_l, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_wcstoll_l); +__extension__ +extern unsigned long long int __REDIRECT_NTH (wcstoull_l, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_wcstoull_l); +# else +extern long int __isoc23_wcstol_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base, + locale_t __loc) __THROW; +extern unsigned long int __isoc23_wcstoul_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) + __THROW; +__extension__ +extern long long int __isoc23_wcstoll_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) + __THROW; +__extension__ +extern unsigned long long int __isoc23_wcstoull_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) + __THROW; +# define wcstol_l __isoc23_wcstol_l +# define wcstoul_l __isoc23_wcstoul_l +# define wcstoll_l __isoc23_wcstoll_l +# define wcstoull_l __isoc23_wcstoull_l +# endif +# endif + +extern double wcstod_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, locale_t __loc) + __THROW; + +extern float wcstof_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, locale_t __loc) + __THROW; + +extern long double wcstold_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; + +# if __HAVE_FLOAT16 +extern _Float16 wcstof16_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT32 +extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT64 +extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT128 +extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT32X +extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT64X +extern _Float64x wcstof64x_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT128X +extern _Float128x wcstof128x_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif +#endif /* use GNU */ + + +#ifdef __USE_XOPEN2K8 +/* Copy SRC to DEST, returning the address of the terminating L'\0' in + DEST. */ +extern wchar_t *wcpcpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src) __THROW; + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +extern wchar_t *wcpncpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW; +#endif + + +/* Wide character I/O functions. */ + +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) +# ifndef __attr_dealloc_fclose +# if defined __has_builtin +# if __has_builtin (__builtin_fclose) +/* If the attribute macro hasn't been defined yet (by ) and + fclose is a built-in, use it. */ +# define __attr_dealloc_fclose __attr_dealloc (__builtin_fclose, 1) +# endif +# endif +# endif +# ifndef __attr_dealloc_fclose +# define __attr_dealloc_fclose /* empty */ +# endif + +/* Like OPEN_MEMSTREAM, but the stream is wide oriented and produces + a wide character string. */ +extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) __THROW + __attribute_malloc__ __attr_dealloc_fclose; +#endif + +#if defined __USE_ISOC95 || defined __USE_UNIX98 + +/* Select orientation for stream. */ +extern int fwide (__FILE *__fp, int __mode) __THROW; + + +/* Write formatted output to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fwprintf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...) + /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */; +/* Write formatted output to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int wprintf (const wchar_t *__restrict __format, ...) + /* __attribute__ ((__format__ (__wprintf__, 1, 2))) */; +/* Write formatted output of at most N characters to S. */ +extern int swprintf (wchar_t *__restrict __s, size_t __n, + const wchar_t *__restrict __format, ...) + __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */; + +/* Write formatted output to S from argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vfwprintf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */; +/* Write formatted output to stdout from argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vwprintf (const wchar_t *__restrict __format, + __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wprintf__, 1, 0))) */; +/* Write formatted output of at most N character to S from argument + list ARG. */ +extern int vswprintf (wchar_t *__restrict __s, size_t __n, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) + __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */; + + +/* Read formatted input from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fwscanf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +/* Read formatted input from stdin. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int wscanf (const wchar_t *__restrict __format, ...) + /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */; +/* Read formatted input from S. */ +extern int swscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, ...) + __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; + +/* For historical reasons, the C99-compliant versions of the scanf + functions are at alternative names. When __LDBL_COMPAT or + __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI are in effect, this is handled in + bits/wchar-ldbl.h. */ +# if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...), + __isoc23_fwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +extern int __REDIRECT (wscanf, (const wchar_t *__restrict __format, ...), + __isoc23_wscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */; +extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + ...), __isoc23_swscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +# else +extern int __isoc23_fwscanf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...); +extern int __isoc23_wscanf (const wchar_t *__restrict __format, ...); +extern int __isoc23_swscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, ...) + __THROW; +# define fwscanf __isoc23_fwscanf +# define wscanf __isoc23_wscanf +# define swscanf __isoc23_swscanf +# endif +# else +# ifdef __REDIRECT +extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...), + __isoc99_fwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +extern int __REDIRECT (wscanf, (const wchar_t *__restrict __format, ...), + __isoc99_wscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */; +extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + ...), __isoc99_swscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +# else +extern int __isoc99_fwscanf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...); +extern int __isoc99_wscanf (const wchar_t *__restrict __format, ...); +extern int __isoc99_swscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, ...) + __THROW; +# define fwscanf __isoc99_fwscanf +# define wscanf __isoc99_wscanf +# define swscanf __isoc99_swscanf +# endif +# endif +# endif + +#endif /* Use ISO C95, C99 and Unix98. */ + +#ifdef __USE_ISOC99 +/* Read formatted input from S into argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vfwscanf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +/* Read formatted input from stdin into argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vwscanf (const wchar_t *__restrict __format, + __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */; +/* Read formatted input from S into argument list ARG. */ +extern int vswscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) + __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; + +/* Same redirection as above for the v*wscanf family. */ +# if !__GLIBC_USE (DEPRECATED_SCANF) \ + && (!defined __LDBL_COMPAT || !defined __REDIRECT) \ + && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc23_vfwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +extern int __REDIRECT (vwscanf, (const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc23_vwscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */; +extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc23_vswscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +# else +extern int __isoc23_vfwscanf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc23_vwscanf (const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc23_vswscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfwscanf __isoc23_vfwscanf +# define vwscanf __isoc23_vwscanf +# define vswscanf __isoc23_vswscanf +# endif +# else +# ifdef __REDIRECT +extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc99_vfwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +extern int __REDIRECT (vwscanf, (const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc99_vwscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */; +extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc99_vswscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +# else +extern int __isoc99_vfwscanf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc99_vwscanf (const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc99_vswscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfwscanf __isoc99_vfwscanf +# define vwscanf __isoc99_vwscanf +# define vswscanf __isoc99_vswscanf +# endif +# endif +# endif + +#endif /* Use ISO C99. */ + + +/* Read a character from STREAM. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern wint_t fgetwc (__FILE *__stream); +extern wint_t getwc (__FILE *__stream); + +/* Read a character from stdin. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern wint_t getwchar (void); + + +/* Write a character to STREAM. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern wint_t fputwc (wchar_t __wc, __FILE *__stream); +extern wint_t putwc (wchar_t __wc, __FILE *__stream); + +/* Write a character to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern wint_t putwchar (wchar_t __wc); + + +/* Get a newline-terminated wide character string of finite length + from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, + __FILE *__restrict __stream); + +/* Write a string to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fputws (const wchar_t *__restrict __ws, + __FILE *__restrict __stream); + + +/* Push a character back onto the input buffer of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern wint_t ungetwc (wint_t __wc, __FILE *__stream); + + +#ifdef __USE_GNU +/* These are defined to be equivalent to the `char' functions defined + in POSIX.1:1996. + + These functions are not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation they are cancellation points and + therefore not marked with __THROW. */ +extern wint_t getwc_unlocked (__FILE *__stream); +extern wint_t getwchar_unlocked (void); + +/* This is the wide character version of a GNU extension. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern wint_t fgetwc_unlocked (__FILE *__stream); + +/* Faster version when locking is not necessary. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream); + +/* These are defined to be equivalent to the `char' functions defined + in POSIX.1:1996. + + These functions are not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation they are cancellation points and + therefore not marked with __THROW. */ +extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream); +extern wint_t putwchar_unlocked (wchar_t __wc); + + +/* This function does the same as `fgetws' but does not lock the stream. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n, + __FILE *__restrict __stream); + +/* This function does the same as `fputws' but does not lock the stream. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fputws_unlocked (const wchar_t *__restrict __ws, + __FILE *__restrict __stream); +#endif + + +/* Format TP into S according to FORMAT. + Write no more than MAXSIZE wide characters and return the number + of wide characters written, or 0 if it would exceed MAXSIZE. */ +extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize, + const wchar_t *__restrict __format, + const struct tm *__restrict __tp) __THROW; + +# ifdef __USE_GNU +/* Similar to `wcsftime' but takes the information from + the provided locale and not the global locale. */ +extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, + const wchar_t *__restrict __format, + const struct tm *__restrict __tp, + locale_t __loc) __THROW; +# endif + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Declare all functions from bits/wchar2-decl.h first. */ +# include +#endif + +/* The following headers provide asm redirections. These redirections must + appear before the first usage of these functions, e.g. in bits/wchar.h. */ +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# include +#endif + +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Now include the function definitions and redirects too. */ +# include +#endif + +__END_DECLS + +#endif /* wchar.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wchar.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wchar.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..351be688be9822d3471cf1fafa40cefba57e8e9d GIT binary patch literal 64916 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wctype.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wctype.h new file mode 100644 index 0000000..51c4641 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wctype.h @@ -0,0 +1,148 @@ +/* Copyright (C) 1996-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.25 + * Wide character classification and mapping utilities + */ + +#ifndef _WCTYPE_H +#define _WCTYPE_H 1 + +#include +#include +#include + +/* Constant expression of type `wint_t' whose value does not correspond + to any member of the extended character set. */ +#ifndef WEOF +# define WEOF (0xffffffffu) +#endif + +/* Some definitions from this header also appear in in + Unix98 mode. */ +#include + +/* + * Extensible wide-character mapping functions: 7.15.3.2. + */ + +__BEGIN_DECLS + +/* Scalar type that can hold values which represent locale-specific + character mappings. */ +typedef const __int32_t *wctrans_t; + +/* Construct value that describes a mapping between wide characters + identified by the string argument PROPERTY. */ +extern wctrans_t wctrans (const char *__property) __THROW; + +/* Map the wide character WC using the mapping described by DESC. */ +extern wint_t towctrans (wint_t __wc, wctrans_t __desc) __THROW; + +# ifdef __USE_XOPEN2K8 +/* POSIX.1-2008 extended locale interface (see locale.h). */ +# include + +/* Test for any wide character for which `iswalpha' or `iswdigit' is + true. */ +extern int iswalnum_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character for which `iswupper' or 'iswlower' is + true, or any wide character that is one of a locale-specific set of + wide-characters for which none of `iswcntrl', `iswdigit', + `iswpunct', or `iswspace' is true. */ +extern int iswalpha_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any control wide character. */ +extern int iswcntrl_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a decimal-digit + character. */ +extern int iswdigit_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character for which `iswprint' is true and + `iswspace' is false. */ +extern int iswgraph_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a lowercase letter + or is one of a locale-specific set of wide characters for which + none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true. */ +extern int iswlower_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any printing wide character. */ +extern int iswprint_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any printing wide character that is one of a + locale-specific et of wide characters for which neither `iswspace' + nor `iswalnum' is true. */ +extern int iswpunct_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a locale-specific + set of wide characters for which none of `iswalnum', `iswgraph', or + `iswpunct' is true. */ +extern int iswspace_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to an uppercase letter + or is one of a locale-specific set of wide character for which none + of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true. */ +extern int iswupper_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a hexadecimal-digit + character equivalent to that performed be the functions described + in the previous subclause. */ +extern int iswxdigit_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a standard blank + wide character or a locale-specific set of wide characters for + which `iswalnum' is false. */ +extern int iswblank_l (wint_t __wc, locale_t __locale) __THROW; + +/* Construct value that describes a class of wide characters identified + by the string argument PROPERTY. */ +extern wctype_t wctype_l (const char *__property, locale_t __locale) + __THROW; + +/* Determine whether the wide-character WC has the property described by + DESC. */ +extern int iswctype_l (wint_t __wc, wctype_t __desc, locale_t __locale) + __THROW; + +/* + * Wide-character case-mapping functions. + */ + +/* Converts an uppercase letter to the corresponding lowercase letter. */ +extern wint_t towlower_l (wint_t __wc, locale_t __locale) __THROW; + +/* Converts an lowercase letter to the corresponding uppercase letter. */ +extern wint_t towupper_l (wint_t __wc, locale_t __locale) __THROW; + +/* Construct value that describes a mapping between wide characters + identified by the string argument PROPERTY. */ +extern wctrans_t wctrans_l (const char *__property, locale_t __locale) + __THROW; + +/* Map the wide character WC using the mapping described by DESC. */ +extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc, + locale_t __locale) __THROW; + +# endif /* Use POSIX 2008. */ + +__END_DECLS + +#endif /* wctype.h */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wctype.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@wctype.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..30cc8e3c2a1b192635cd5768e01e436be6c8660a GIT binary patch literal 19733 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stdarg___gnuc_va_list.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stdarg___gnuc_va_list.h new file mode 100644 index 0000000..2a0a7e8 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stdarg___gnuc_va_list.h @@ -0,0 +1,13 @@ +/*===---- __stdarg___gnuc_va_list.h - Definition of __gnuc_va_list ---------=== + * + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __GNUC_VA_LIST +#define __GNUC_VA_LIST +typedef __builtin_va_list __gnuc_va_list; +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stdarg___gnuc_va_list.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stdarg___gnuc_va_list.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..24b6b4a17f181e99a2cfe314795b6d306e0e9514 GIT binary patch literal 11517 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 O32^B!fk}q{AX5PF9(yJL literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_header_macro.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_header_macro.h new file mode 100644 index 0000000..db5fb3c --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_header_macro.h @@ -0,0 +1,12 @@ +/*===---- __stddef_header_macro.h ------------------------------------------=== + * + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __STDDEF_H +#define __STDDEF_H +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_header_macro.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_header_macro.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5a3c62a68c397999c3c167c9aa79de44303bde07 GIT binary patch literal 11399 zcmdO5_?KnQc$tBbK|eRIM87C8Gey6kC_gJTxujS>rMN&pBe5tqKQA*m5s6h?l#Jl% zWfT-JFem3E=A~0+hHiO&QFdltx^7BlQEGBYeo>_@32tKe`;S4tw75t=GcP%(G$mC( zxuminRWF0#Ure{~WmFk$ZGA&iJtI9s{iMv2V*SLNoc!eYlA^@Sl46hsnX_mbz^XvT z73;^x=Oz`GB$lMcmw=SwGrPDXCAA_swV;IIABKrJnMs*>B{^7)NJ~vDDJ@C`I|ZNl z6&7akW+u7?$+|h2d8HM)>3O9P|Ku0Pr=+H3=0S|Wusa#y{o<0M)WqDR(ljhiL{bL! ze{o4sW?p()c?!tU7>0tCBvqEA7MCX$fK=dfIaqN%#B#lozNZ)ZF;g zqN4mFB;Vy^Ch3E7ioTH{JfRksq-5rSQxhmBl91#<*|4-EGpAU;EU^fj4gWdq(Z-q9 zGxLkn%2SYB1IsDJmBsqWDXD4LQye%ZKtWopUtCgDnp_g^=IP@K3IKdjTu@w+qYonD zlk@Y^GSfloF+vx~=;ZwT?99~o%>4MY(!Au7%>2A!961b0Q%PoSY7q`)=rIS*W)-wrgKK~l5l8`-Tn?^Tu_QnwMPSE60x2^;4`-GGl{}#60>>$i5Xj6; zH8a5-LZz8`C3(7;DXDoSnI)B2)uFo!oa=2(gRny7;Zu`3sjjyjRIA=sYS)0dI97Dj97#C1d{YY3NSo@WGvV}Nr}ao$?*`= zK^ibj1gk1eEy>Eo-kt$9w~9+jlZtgAk&fY!#Nu52)S@Ct%YvYLAg!UK(li_a26hfS zjxa1k@*X_fk&;ER1_2~c;g(|f0XhAHeX5(3SPV|H7)p`c2lh#BYHof}C30($wC+bi zPHB2(Ua@|0W_n&?PCPglCYIzEVF*ClMKkL3aJGxU?tx~Lw8Z389Gw6pA0&gzRw9BI zn$I)yGE3s&(SkLokxWlXO)5>-2Q>wX!0jNc>cNgq1(yMNsm0jKPf!BH9eGGLCPVTK zeh+~ZVQqJSvNELoiZ4}y9gG^v*jxU{?#j;t^`DBdI1J=BqRK6B0O&&+L}n(08yqF2 z1v#l$EJSivQf3K$1vqNGl3Y-#Tbznr0eX0YnsVUgUuHhI=EZJ#K}kkYYGMjF;prw8 zC4-xl_<}GeGdHt@nD{PA%u7#=PfSjR=6DSIksO>1YFOe=reObP=9T4VgUf7urh%1$ zykD9JD$Ftyb26)Nv|NzffHMknQ;Ule(^HG%b5nDZQj5T8fuQxU0fP+uz5+EG@=9|- zjWT?L0AL@1!l(k2jPOPexOaxdQm_%=dJk>{X_XkH^9~yJN-ZkZFG?*g%_)J@S8RQ1 zIO{8%p$Z;t0QI+vOA_-4*J2RogGZ=9ZFEQvi@2yLNGvK&jn6B^9eI#W0z6!h%O$YA z#i==|$*8#wYv-i6Bqgy3JbHkyPl7W@(n~UmbW>8(62T#hB@U5NE7)C-k}Na77)LV< zNqsV|eh}E8^2E%Nw46l92mnU%0xJQR5U@d&`1q{cg7~D;wD^)luzxZ1AXyF84k-lV zAx)O}y!^aOaDy5n9~GCRBR#cmH+OjID`?occ&hSFqdz zj#KauDcIRKyaq0qbithz+(8Yh`-th#gN7j>!`WE!6M9N2$S;P+9d^forS+3RO-o4H z!560BSb%gDAi$&DB1tsbs>f(tS#|E_~z~e>u+7ig|3UWz7 zYEe#p9=H?-ml~v%wuvc;1tqCP`cN8D(soTkYY>3!fi$FHHAp5XMvICIQnBYR^r%8~ z2S8~ABeIZ`<1A)CwJTQ55XWWaf+GuG1ZP4j2qIDzbO;rD=K^9Mc*G0R2*MuwNPdD0 z{9v&ccdkLw4NAU=M068DQzkj^st=NR!Kn{xs6o2(ASrN=k(O#8ZOPK&Oi;QjC}8+E zqZ2K~fCgJZ(mAQ|kRA%80S~qdxqXJ@PjI;ArGkd@i66g6&QD2AF2h#-fsF(EA2dvZ zIiL;8rRXjwgN*!vLIz(t1se~lg%fkq^Ko`@kqig56EgF#xfEJ;fo#MGAK3h?E-1g@ z82dxA1ZVC6m(uZ>c{!PR;CzDNHL!mm!39ci*_kOsmY8Y9@#upB_^b20(j4$yH1>KN zGQgvolbTpeFkgY)oR?aTm<9udA%@qG!UyC*XyJ+_J0d9r8x1WmaJ0_BNNnECCNG;0si!w{qf>pyeikPBU0N>hvYZIryw7##wZO4TA&`$PkP$M-R=k;`kIC z&1SGsL>0+kl@LooU0{MU^m(b}(Bwv1ISU(j&P`0u%PavcG=Z}qHTAxBv_28oWzZxB znykVaCZNOuQi$GkKu#&>;g*|UhP~iGR|qYUK^9}gD9BROc0>vGoPusBbT}qHGp{%m zGQfsmHj);oYG{z-@D;eR1zz(3oyx;75#n0#_?j-H0iz4f?jWyWq%(+OaH{~iasgCg z6VpJ-%+F2C%Phd}TF5v(m;_mm;Z`KygI$6cTELbWAxRfx5Rv{UO9U6$7^;yQqwui7 zD0RRt0!wFBL6#iA4Z>el?=05!jLQ}RobAXBJtzrk7>x0q+k@aeFK>>K06k1)OSdTx{ zKox933Ho$A%r)Sa8Rmc(Od84ipd6B%pO;)(RFs;B))&I>f`XEwl+3g=h)*#h4jdk! zGAchlCzH7RUtE$BpO}Qb8;ay&u*qPr6Ifpd>1>0-6eG5fjKkfU($)s|(})>k0=o&+ zP=s}>LAGKfBqUqm8j|z#AVmpLIzVem;=zmJh*A!U*wliO_~eXK$h-@NlOR3>8AetZ zfs;BZL++({nT4gPIG1lgg9Y5s$}KHPB{-B0)&N=eE-r|Cfso)D8 zNP`G}nFPva;Nh**6wr`t8f4ueMs%RN6x0VpueosN%EY4d`1ttrywc?OvPAHZ5h!9Y zvSx8fN={}HND7~?lEHpQ@)cHlA@jT-voNdyM-8Mz#JRo?tOnv9U2t{raJcR9w#2Zy-0xVpuAFfcHPC_^R|6p%$3xdgaWn7|~%e?|rd1^{XqS#JOU literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_max_align_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_max_align_t.h new file mode 100644 index 0000000..512606a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_max_align_t.h @@ -0,0 +1,27 @@ +/*===---- __stddef_max_align_t.h - Definition of max_align_t ---------------=== + * + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __CLANG_MAX_ALIGN_T_DEFINED +#define __CLANG_MAX_ALIGN_T_DEFINED + +#if defined(_MSC_VER) +typedef double max_align_t; +#elif defined(__APPLE__) +typedef long double max_align_t; +#else +// Define 'max_align_t' to match the GCC definition. +typedef struct { + long long __clang_max_align_nonce1 + __attribute__((__aligned__(__alignof__(long long)))); + long double __clang_max_align_nonce2 + __attribute__((__aligned__(__alignof__(long double)))); +} max_align_t; +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_max_align_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_max_align_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2f640936771679aef8f6ccce0e9328bc1807814d GIT binary patch literal 11933 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_nullptr_t.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_nullptr_t.h new file mode 100644 index 0000000..7f3fbe6 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_nullptr_t.h @@ -0,0 +1,29 @@ +/*===---- __stddef_nullptr_t.h - Definition of nullptr_t -------------------=== + * + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + *===-----------------------------------------------------------------------=== + */ + +/* + * When -fbuiltin-headers-in-system-modules is set this is a non-modular header + * and needs to behave as if it was textual. + */ +#if !defined(_NULLPTR_T) || \ + (__has_feature(modules) && !__building_module(_Builtin_stddef)) +#define _NULLPTR_T + +#ifdef __cplusplus +#if defined(_MSC_EXTENSIONS) && defined(_NATIVE_NULLPTR_SUPPORTED) +namespace std { +typedef decltype(nullptr) nullptr_t; +} +using ::std::nullptr_t; +#endif +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +typedef typeof(nullptr) nullptr_t; +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_nullptr_t.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@__stddef_nullptr_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b8d6ce5cabe7f216afec2ce834e42f6e4b38479e GIT binary patch literal 11466 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdarg.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdarg.h new file mode 100644 index 0000000..6203d7a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdarg.h @@ -0,0 +1,75 @@ +/*===---- stdarg.h - Variable argument handling ----------------------------=== + * + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + *===-----------------------------------------------------------------------=== + */ + +/* + * This header is designed to be included multiple times. If any of the __need_ + * macros are defined, then only that subset of interfaces are provided. This + * can be useful for POSIX headers that need to not expose all of stdarg.h, but + * need to use some of its interfaces. Otherwise this header provides all of + * the expected interfaces. + * + * When clang modules are enabled, this header is a textual header to support + * the multiple include behavior. As such, it doesn't directly declare anything + * so that it doesn't add duplicate declarations to all of its includers' + * modules. + */ +#if defined(__MVS__) && __has_include_next() +#undef __need___va_list +#undef __need_va_list +#undef __need_va_arg +#undef __need___va_copy +#undef __need_va_copy +#include <__stdarg_header_macro.h> +#include_next + +#else +#if !defined(__need___va_list) && !defined(__need_va_list) && \ + !defined(__need_va_arg) && !defined(__need___va_copy) && \ + !defined(__need_va_copy) +#define __need___va_list +#define __need_va_list +#define __need_va_arg +#define __need___va_copy +/* GCC always defines __va_copy, but does not define va_copy unless in c99 mode + * or -ansi is not specified, since it was not part of C90. + */ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) || \ + !defined(__STRICT_ANSI__) +#define __need_va_copy +#endif +#include <__stdarg_header_macro.h> +#endif + +#ifdef __need___va_list +#include <__stdarg___gnuc_va_list.h> +#undef __need___va_list +#endif /* defined(__need___va_list) */ + +#ifdef __need_va_list +#include <__stdarg_va_list.h> +#undef __need_va_list +#endif /* defined(__need_va_list) */ + +#ifdef __need_va_arg +#include <__stdarg_va_arg.h> +#undef __need_va_arg +#endif /* defined(__need_va_arg) */ + +#ifdef __need___va_copy +#include <__stdarg___va_copy.h> +#undef __need___va_copy +#endif /* defined(__need___va_copy) */ + +#ifdef __need_va_copy +#include <__stdarg_va_copy.h> +#undef __need_va_copy +#endif /* defined(__need_va_copy) */ + +#endif /* __MVS__ */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdarg.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdarg.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5f72d57dca511b8733fb28b7fd6b13151dd4bd84 GIT binary patch literal 11487 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stddef.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stddef.h new file mode 100644 index 0000000..99b275a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stddef.h @@ -0,0 +1,139 @@ +/*===---- stddef.h - Basic type definitions --------------------------------=== + * + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + *===-----------------------------------------------------------------------=== + */ + +/* + * This header is designed to be included multiple times. If any of the __need_ + * macros are defined, then only that subset of interfaces are provided. This + * can be useful for POSIX headers that need to not expose all of stddef.h, but + * need to use some of its interfaces. Otherwise this header provides all of + * the expected interfaces. + * + * When clang modules are enabled, this header is a textual header to support + * the multiple include behavior. As such, it doesn't directly declare anything + * so that it doesn't add duplicate declarations to all of its includers' + * modules. + */ +#if defined(__MVS__) && __has_include_next() +#undef __need_ptrdiff_t +#undef __need_size_t +#undef __need_rsize_t +#undef __need_wchar_t +#undef __need_NULL +#undef __need_nullptr_t +#undef __need_unreachable +#undef __need_max_align_t +#undef __need_offsetof +#undef __need_wint_t +#include <__stddef_header_macro.h> +#include_next + +#else + +#if !defined(__need_ptrdiff_t) && !defined(__need_size_t) && \ + !defined(__need_rsize_t) && !defined(__need_wchar_t) && \ + !defined(__need_NULL) && !defined(__need_nullptr_t) && \ + !defined(__need_unreachable) && !defined(__need_max_align_t) && \ + !defined(__need_offsetof) && !defined(__need_wint_t) +#define __need_ptrdiff_t +#define __need_size_t +/* ISO9899:2011 7.20 (C11 Annex K): Define rsize_t if __STDC_WANT_LIB_EXT1__ is + * enabled. */ +#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 +#define __need_rsize_t +#endif +#define __need_wchar_t +#if !defined(__STDDEF_H) || __has_feature(modules) +/* + * __stddef_null.h is special when building without modules: if __need_NULL is + * set, then it will unconditionally redefine NULL. To avoid stepping on client + * definitions of NULL, __need_NULL should only be set the first time this + * header is included, that is when __STDDEF_H is not defined. However, when + * building with modules, this header is a textual header and needs to + * unconditionally include __stdef_null.h to support multiple submodules + * exporting _Builtin_stddef.null. Take module SM with submodules A and B, whose + * headers both include stddef.h When SM.A builds, __STDDEF_H will be defined. + * When SM.B builds, the definition from SM.A will leak when building without + * local submodule visibility. stddef.h wouldn't include __stddef_null.h, and + * SM.B wouldn't import _Builtin_stddef.null, and SM.B's `export *` wouldn't + * export NULL as expected. When building with modules, always include + * __stddef_null.h so that everything works as expected. + */ +#define __need_NULL +#endif +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || \ + defined(__cplusplus) +#define __need_nullptr_t +#endif +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +#define __need_unreachable +#endif +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +#define __need_max_align_t +#endif +#define __need_offsetof +/* wint_t is provided by and not . It's here + * for compatibility, but must be explicitly requested. Therefore + * __need_wint_t is intentionally not defined here. */ +#include <__stddef_header_macro.h> +#endif + +#if defined(__need_ptrdiff_t) +#include <__stddef_ptrdiff_t.h> +#undef __need_ptrdiff_t +#endif /* defined(__need_ptrdiff_t) */ + +#if defined(__need_size_t) +#include <__stddef_size_t.h> +#undef __need_size_t +#endif /*defined(__need_size_t) */ + +#if defined(__need_rsize_t) +#include <__stddef_rsize_t.h> +#undef __need_rsize_t +#endif /* defined(__need_rsize_t) */ + +#if defined(__need_wchar_t) +#include <__stddef_wchar_t.h> +#undef __need_wchar_t +#endif /* defined(__need_wchar_t) */ + +#if defined(__need_NULL) +#include <__stddef_null.h> +#undef __need_NULL +#endif /* defined(__need_NULL) */ + +#if defined(__need_nullptr_t) +#include <__stddef_nullptr_t.h> +#undef __need_nullptr_t +#endif /* defined(__need_nullptr_t) */ + +#if defined(__need_unreachable) +#include <__stddef_unreachable.h> +#undef __need_unreachable +#endif /* defined(__need_unreachable) */ + +#if defined(__need_max_align_t) +#include <__stddef_max_align_t.h> +#undef __need_max_align_t +#endif /* defined(__need_max_align_t) */ + +#if defined(__need_offsetof) +#include <__stddef_offsetof.h> +#undef __need_offsetof +#endif /* defined(__need_offsetof) */ + +/* Some C libraries expect to see a wint_t here. Others (notably MinGW) will use +__WINT_TYPE__ directly; accommodate both by requiring __need_wint_t */ +#if defined(__need_wint_t) +#include <__stddef_wint_t.h> +#undef __need_wint_t +#endif /* __need_wint_t */ + +#endif /* __MVS__ */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stddef.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stddef.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..494ca1191b12d134304e0fd4ecc9fd3a8371610f GIT binary patch literal 11566 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 +#include_next +#else + +/* If we're hosted, fall back to the system's stdint.h, which might have + * additional definitions. + */ +#if __STDC_HOSTED__ && __has_include_next() + +// C99 7.18.3 Limits of other integer types +// +// Footnote 219, 220: C++ implementations should define these macros only when +// __STDC_LIMIT_MACROS is defined before is included. +// +// Footnote 222: C++ implementations should define these macros only when +// __STDC_CONSTANT_MACROS is defined before is included. +// +// C++11 [cstdint.syn]p2: +// +// The macros defined by are provided unconditionally. In particular, +// the symbols __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS (mentioned in +// footnotes 219, 220, and 222 in the C standard) play no role in C++. +// +// C11 removed the problematic footnotes. +// +// Work around this inconsistency by always defining those macros in C++ mode, +// so that a C library implementation which follows the C99 standard can be +// used in C++. +# ifdef __cplusplus +# if !defined(__STDC_LIMIT_MACROS) +# define __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS_DEFINED_BY_CLANG +# endif +# if !defined(__STDC_CONSTANT_MACROS) +# define __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG +# endif +# endif + +# include_next + +# ifdef __STDC_LIMIT_MACROS_DEFINED_BY_CLANG +# undef __STDC_LIMIT_MACROS +# undef __STDC_LIMIT_MACROS_DEFINED_BY_CLANG +# endif +# ifdef __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG +# undef __STDC_CONSTANT_MACROS +# undef __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG +# endif + +#else + +/* C99 7.18.1.1 Exact-width integer types. + * C99 7.18.1.2 Minimum-width integer types. + * C99 7.18.1.3 Fastest minimum-width integer types. + * + * The standard requires that exact-width type be defined for 8-, 16-, 32-, and + * 64-bit types if they are implemented. Other exact width types are optional. + * This implementation defines an exact-width types for every integer width + * that is represented in the standard integer types. + * + * The standard also requires minimum-width types be defined for 8-, 16-, 32-, + * and 64-bit widths regardless of whether there are corresponding exact-width + * types. + * + * To accommodate targets that are missing types that are exactly 8, 16, 32, or + * 64 bits wide, this implementation takes an approach of cascading + * redefinitions, redefining __int_leastN_t to successively smaller exact-width + * types. It is therefore important that the types are defined in order of + * descending widths. + * + * We currently assume that the minimum-width types and the fastest + * minimum-width types are the same. This is allowed by the standard, but is + * suboptimal. + * + * In violation of the standard, some targets do not implement a type that is + * wide enough to represent all of the required widths (8-, 16-, 32-, 64-bit). + * To accommodate these targets, a required minimum-width type is only + * defined if there exists an exact-width type of equal or greater width. + */ + +#ifdef __INT64_TYPE__ +# ifndef __int8_t_defined /* glibc sys/types.h also defines int64_t*/ +typedef __INT64_TYPE__ int64_t; +# endif /* __int8_t_defined */ +typedef __UINT64_TYPE__ uint64_t; +# undef __int_least64_t +# define __int_least64_t int64_t +# undef __uint_least64_t +# define __uint_least64_t uint64_t +# undef __int_least32_t +# define __int_least32_t int64_t +# undef __uint_least32_t +# define __uint_least32_t uint64_t +# undef __int_least16_t +# define __int_least16_t int64_t +# undef __uint_least16_t +# define __uint_least16_t uint64_t +# undef __int_least8_t +# define __int_least8_t int64_t +# undef __uint_least8_t +# define __uint_least8_t uint64_t +#endif /* __INT64_TYPE__ */ + +#ifdef __int_least64_t +typedef __int_least64_t int_least64_t; +typedef __uint_least64_t uint_least64_t; +typedef __int_least64_t int_fast64_t; +typedef __uint_least64_t uint_fast64_t; +#endif /* __int_least64_t */ + +#ifdef __INT56_TYPE__ +typedef __INT56_TYPE__ int56_t; +typedef __UINT56_TYPE__ uint56_t; +typedef int56_t int_least56_t; +typedef uint56_t uint_least56_t; +typedef int56_t int_fast56_t; +typedef uint56_t uint_fast56_t; +# undef __int_least32_t +# define __int_least32_t int56_t +# undef __uint_least32_t +# define __uint_least32_t uint56_t +# undef __int_least16_t +# define __int_least16_t int56_t +# undef __uint_least16_t +# define __uint_least16_t uint56_t +# undef __int_least8_t +# define __int_least8_t int56_t +# undef __uint_least8_t +# define __uint_least8_t uint56_t +#endif /* __INT56_TYPE__ */ + + +#ifdef __INT48_TYPE__ +typedef __INT48_TYPE__ int48_t; +typedef __UINT48_TYPE__ uint48_t; +typedef int48_t int_least48_t; +typedef uint48_t uint_least48_t; +typedef int48_t int_fast48_t; +typedef uint48_t uint_fast48_t; +# undef __int_least32_t +# define __int_least32_t int48_t +# undef __uint_least32_t +# define __uint_least32_t uint48_t +# undef __int_least16_t +# define __int_least16_t int48_t +# undef __uint_least16_t +# define __uint_least16_t uint48_t +# undef __int_least8_t +# define __int_least8_t int48_t +# undef __uint_least8_t +# define __uint_least8_t uint48_t +#endif /* __INT48_TYPE__ */ + + +#ifdef __INT40_TYPE__ +typedef __INT40_TYPE__ int40_t; +typedef __UINT40_TYPE__ uint40_t; +typedef int40_t int_least40_t; +typedef uint40_t uint_least40_t; +typedef int40_t int_fast40_t; +typedef uint40_t uint_fast40_t; +# undef __int_least32_t +# define __int_least32_t int40_t +# undef __uint_least32_t +# define __uint_least32_t uint40_t +# undef __int_least16_t +# define __int_least16_t int40_t +# undef __uint_least16_t +# define __uint_least16_t uint40_t +# undef __int_least8_t +# define __int_least8_t int40_t +# undef __uint_least8_t +# define __uint_least8_t uint40_t +#endif /* __INT40_TYPE__ */ + + +#ifdef __INT32_TYPE__ + +# ifndef __int8_t_defined /* glibc sys/types.h also defines int32_t*/ +typedef __INT32_TYPE__ int32_t; +# endif /* __int8_t_defined */ + +# ifndef __uint32_t_defined /* more glibc compatibility */ +# define __uint32_t_defined +typedef __UINT32_TYPE__ uint32_t; +# endif /* __uint32_t_defined */ + +# undef __int_least32_t +# define __int_least32_t int32_t +# undef __uint_least32_t +# define __uint_least32_t uint32_t +# undef __int_least16_t +# define __int_least16_t int32_t +# undef __uint_least16_t +# define __uint_least16_t uint32_t +# undef __int_least8_t +# define __int_least8_t int32_t +# undef __uint_least8_t +# define __uint_least8_t uint32_t +#endif /* __INT32_TYPE__ */ + +#ifdef __int_least32_t +typedef __int_least32_t int_least32_t; +typedef __uint_least32_t uint_least32_t; +typedef __int_least32_t int_fast32_t; +typedef __uint_least32_t uint_fast32_t; +#endif /* __int_least32_t */ + +#ifdef __INT24_TYPE__ +typedef __INT24_TYPE__ int24_t; +typedef __UINT24_TYPE__ uint24_t; +typedef int24_t int_least24_t; +typedef uint24_t uint_least24_t; +typedef int24_t int_fast24_t; +typedef uint24_t uint_fast24_t; +# undef __int_least16_t +# define __int_least16_t int24_t +# undef __uint_least16_t +# define __uint_least16_t uint24_t +# undef __int_least8_t +# define __int_least8_t int24_t +# undef __uint_least8_t +# define __uint_least8_t uint24_t +#endif /* __INT24_TYPE__ */ + +#ifdef __INT16_TYPE__ +#ifndef __int8_t_defined /* glibc sys/types.h also defines int16_t*/ +typedef __INT16_TYPE__ int16_t; +#endif /* __int8_t_defined */ +typedef __UINT16_TYPE__ uint16_t; +# undef __int_least16_t +# define __int_least16_t int16_t +# undef __uint_least16_t +# define __uint_least16_t uint16_t +# undef __int_least8_t +# define __int_least8_t int16_t +# undef __uint_least8_t +# define __uint_least8_t uint16_t +#endif /* __INT16_TYPE__ */ + +#ifdef __int_least16_t +typedef __int_least16_t int_least16_t; +typedef __uint_least16_t uint_least16_t; +typedef __int_least16_t int_fast16_t; +typedef __uint_least16_t uint_fast16_t; +#endif /* __int_least16_t */ + + +#ifdef __INT8_TYPE__ +#ifndef __int8_t_defined /* glibc sys/types.h also defines int8_t*/ +typedef __INT8_TYPE__ int8_t; +#endif /* __int8_t_defined */ +typedef __UINT8_TYPE__ uint8_t; +# undef __int_least8_t +# define __int_least8_t int8_t +# undef __uint_least8_t +# define __uint_least8_t uint8_t +#endif /* __INT8_TYPE__ */ + +#ifdef __int_least8_t +typedef __int_least8_t int_least8_t; +typedef __uint_least8_t uint_least8_t; +typedef __int_least8_t int_fast8_t; +typedef __uint_least8_t uint_fast8_t; +#endif /* __int_least8_t */ + +/* prevent glibc sys/types.h from defining conflicting types */ +#ifndef __int8_t_defined +# define __int8_t_defined +#endif /* __int8_t_defined */ + +/* C99 7.18.1.4 Integer types capable of holding object pointers. + */ +#define __stdint_join3(a,b,c) a ## b ## c + +#ifndef _INTPTR_T +#ifndef __intptr_t_defined +typedef __INTPTR_TYPE__ intptr_t; +#define __intptr_t_defined +#define _INTPTR_T +#endif +#endif + +#ifndef _UINTPTR_T +typedef __UINTPTR_TYPE__ uintptr_t; +#define _UINTPTR_T +#endif + +/* C99 7.18.1.5 Greatest-width integer types. + */ +typedef __INTMAX_TYPE__ intmax_t; +typedef __UINTMAX_TYPE__ uintmax_t; + +/* C99 7.18.4 Macros for minimum-width integer constants. + * + * The standard requires that integer constant macros be defined for all the + * minimum-width types defined above. As 8-, 16-, 32-, and 64-bit minimum-width + * types are required, the corresponding integer constant macros are defined + * here. This implementation also defines minimum-width types for every other + * integer width that the target implements, so corresponding macros are + * defined below, too. + * + * Note that C++ should not check __STDC_CONSTANT_MACROS here, contrary to the + * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]). + */ + +#ifdef __int_least64_t +#define INT64_C(v) __INT64_C(v) +#define UINT64_C(v) __UINT64_C(v) +#endif /* __int_least64_t */ + + +#ifdef __INT56_TYPE__ +#define INT56_C(v) __INT56_C(v) +#define UINT56_C(v) __UINT56_C(v) +#endif /* __INT56_TYPE__ */ + + +#ifdef __INT48_TYPE__ +#define INT48_C(v) __INT48_C(v) +#define UINT48_C(v) __UINT48_C(v) +#endif /* __INT48_TYPE__ */ + + +#ifdef __INT40_TYPE__ +#define INT40_C(v) __INT40_C(v) +#define UINT40_C(v) __UINT40_C(v) +#endif /* __INT40_TYPE__ */ + + +#ifdef __int_least32_t +#define INT32_C(v) __INT32_C(v) +#define UINT32_C(v) __UINT32_C(v) +#endif /* __int_least32_t */ + + +#ifdef __INT24_TYPE__ +#define INT24_C(v) __INT24_C(v) +#define UINT24_C(v) __UINT24_C(v) +#endif /* __INT24_TYPE__ */ + + +#ifdef __int_least16_t +#define INT16_C(v) __INT16_C(v) +#define UINT16_C(v) __UINT16_C(v) +#endif /* __int_least16_t */ + + +#ifdef __int_least8_t +#define INT8_C(v) __INT8_C(v) +#define UINT8_C(v) __UINT8_C(v) +#endif /* __int_least8_t */ + + +/* C99 7.18.2.1 Limits of exact-width integer types. + * C99 7.18.2.2 Limits of minimum-width integer types. + * C99 7.18.2.3 Limits of fastest minimum-width integer types. + * + * The presence of limit macros are completely optional in C99. This + * implementation defines limits for all of the types (exact- and + * minimum-width) that it defines above, using the limits of the minimum-width + * type for any types that do not have exact-width representations. + * + * As in the type definitions, this section takes an approach of + * successive-shrinking to determine which limits to use for the standard (8, + * 16, 32, 64) bit widths when they don't have exact representations. It is + * therefore important that the definitions be kept in order of decending + * widths. + * + * Note that C++ should not check __STDC_LIMIT_MACROS here, contrary to the + * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]). + */ + +#ifdef __INT64_TYPE__ +# define INT64_MAX INT64_C( 9223372036854775807) +# define INT64_MIN (-INT64_C( 9223372036854775807)-1) +# define UINT64_MAX UINT64_C(18446744073709551615) + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT64_WIDTH 64 +# define INT64_WIDTH UINT64_WIDTH + +# define __UINT_LEAST64_WIDTH UINT64_WIDTH +# undef __UINT_LEAST32_WIDTH +# define __UINT_LEAST32_WIDTH UINT64_WIDTH +# undef __UINT_LEAST16_WIDTH +# define __UINT_LEAST16_WIDTH UINT64_WIDTH +# undef __UINT_LEAST8_MAX +# define __UINT_LEAST8_MAX UINT64_MAX +#endif /* __STDC_VERSION__ */ + +# define __INT_LEAST64_MIN INT64_MIN +# define __INT_LEAST64_MAX INT64_MAX +# define __UINT_LEAST64_MAX UINT64_MAX +# undef __INT_LEAST32_MIN +# define __INT_LEAST32_MIN INT64_MIN +# undef __INT_LEAST32_MAX +# define __INT_LEAST32_MAX INT64_MAX +# undef __UINT_LEAST32_MAX +# define __UINT_LEAST32_MAX UINT64_MAX +# undef __INT_LEAST16_MIN +# define __INT_LEAST16_MIN INT64_MIN +# undef __INT_LEAST16_MAX +# define __INT_LEAST16_MAX INT64_MAX +# undef __UINT_LEAST16_MAX +# define __UINT_LEAST16_MAX UINT64_MAX +# undef __INT_LEAST8_MIN +# define __INT_LEAST8_MIN INT64_MIN +# undef __INT_LEAST8_MAX +# define __INT_LEAST8_MAX INT64_MAX +# undef __UINT_LEAST8_MAX +# define __UINT_LEAST8_MAX UINT64_MAX +#endif /* __INT64_TYPE__ */ + +#ifdef __INT_LEAST64_MIN +# define INT_LEAST64_MIN __INT_LEAST64_MIN +# define INT_LEAST64_MAX __INT_LEAST64_MAX +# define UINT_LEAST64_MAX __UINT_LEAST64_MAX +# define INT_FAST64_MIN __INT_LEAST64_MIN +# define INT_FAST64_MAX __INT_LEAST64_MAX +# define UINT_FAST64_MAX __UINT_LEAST64_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT_LEAST64_WIDTH __UINT_LEAST64_WIDTH +# define INT_LEAST64_WIDTH UINT_LEAST64_WIDTH +# define UINT_FAST64_WIDTH __UINT_LEAST64_WIDTH +# define INT_FAST64_WIDTH UINT_FAST64_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT_LEAST64_MIN */ + + +#ifdef __INT56_TYPE__ +# define INT56_MAX INT56_C(36028797018963967) +# define INT56_MIN (-INT56_C(36028797018963967)-1) +# define UINT56_MAX UINT56_C(72057594037927935) +# define INT_LEAST56_MIN INT56_MIN +# define INT_LEAST56_MAX INT56_MAX +# define UINT_LEAST56_MAX UINT56_MAX +# define INT_FAST56_MIN INT56_MIN +# define INT_FAST56_MAX INT56_MAX +# define UINT_FAST56_MAX UINT56_MAX + +# undef __INT_LEAST32_MIN +# define __INT_LEAST32_MIN INT56_MIN +# undef __INT_LEAST32_MAX +# define __INT_LEAST32_MAX INT56_MAX +# undef __UINT_LEAST32_MAX +# define __UINT_LEAST32_MAX UINT56_MAX +# undef __INT_LEAST16_MIN +# define __INT_LEAST16_MIN INT56_MIN +# undef __INT_LEAST16_MAX +# define __INT_LEAST16_MAX INT56_MAX +# undef __UINT_LEAST16_MAX +# define __UINT_LEAST16_MAX UINT56_MAX +# undef __INT_LEAST8_MIN +# define __INT_LEAST8_MIN INT56_MIN +# undef __INT_LEAST8_MAX +# define __INT_LEAST8_MAX INT56_MAX +# undef __UINT_LEAST8_MAX +# define __UINT_LEAST8_MAX UINT56_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT56_WIDTH 56 +# define INT56_WIDTH UINT56_WIDTH +# define UINT_LEAST56_WIDTH UINT56_WIDTH +# define INT_LEAST56_WIDTH UINT_LEAST56_WIDTH +# define UINT_FAST56_WIDTH UINT56_WIDTH +# define INT_FAST56_WIDTH UINT_FAST56_WIDTH +# undef __UINT_LEAST32_WIDTH +# define __UINT_LEAST32_WIDTH UINT56_WIDTH +# undef __UINT_LEAST16_WIDTH +# define __UINT_LEAST16_WIDTH UINT56_WIDTH +# undef __UINT_LEAST8_WIDTH +# define __UINT_LEAST8_WIDTH UINT56_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT56_TYPE__ */ + + +#ifdef __INT48_TYPE__ +# define INT48_MAX INT48_C(140737488355327) +# define INT48_MIN (-INT48_C(140737488355327)-1) +# define UINT48_MAX UINT48_C(281474976710655) +# define INT_LEAST48_MIN INT48_MIN +# define INT_LEAST48_MAX INT48_MAX +# define UINT_LEAST48_MAX UINT48_MAX +# define INT_FAST48_MIN INT48_MIN +# define INT_FAST48_MAX INT48_MAX +# define UINT_FAST48_MAX UINT48_MAX + +# undef __INT_LEAST32_MIN +# define __INT_LEAST32_MIN INT48_MIN +# undef __INT_LEAST32_MAX +# define __INT_LEAST32_MAX INT48_MAX +# undef __UINT_LEAST32_MAX +# define __UINT_LEAST32_MAX UINT48_MAX +# undef __INT_LEAST16_MIN +# define __INT_LEAST16_MIN INT48_MIN +# undef __INT_LEAST16_MAX +# define __INT_LEAST16_MAX INT48_MAX +# undef __UINT_LEAST16_MAX +# define __UINT_LEAST16_MAX UINT48_MAX +# undef __INT_LEAST8_MIN +# define __INT_LEAST8_MIN INT48_MIN +# undef __INT_LEAST8_MAX +# define __INT_LEAST8_MAX INT48_MAX +# undef __UINT_LEAST8_MAX +# define __UINT_LEAST8_MAX UINT48_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +#define UINT48_WIDTH 48 +#define INT48_WIDTH UINT48_WIDTH +#define UINT_LEAST48_WIDTH UINT48_WIDTH +#define INT_LEAST48_WIDTH UINT_LEAST48_WIDTH +#define UINT_FAST48_WIDTH UINT48_WIDTH +#define INT_FAST48_WIDTH UINT_FAST48_WIDTH +#undef __UINT_LEAST32_WIDTH +#define __UINT_LEAST32_WIDTH UINT48_WIDTH +# undef __UINT_LEAST16_WIDTH +#define __UINT_LEAST16_WIDTH UINT48_WIDTH +# undef __UINT_LEAST8_WIDTH +#define __UINT_LEAST8_WIDTH UINT48_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT48_TYPE__ */ + + +#ifdef __INT40_TYPE__ +# define INT40_MAX INT40_C(549755813887) +# define INT40_MIN (-INT40_C(549755813887)-1) +# define UINT40_MAX UINT40_C(1099511627775) +# define INT_LEAST40_MIN INT40_MIN +# define INT_LEAST40_MAX INT40_MAX +# define UINT_LEAST40_MAX UINT40_MAX +# define INT_FAST40_MIN INT40_MIN +# define INT_FAST40_MAX INT40_MAX +# define UINT_FAST40_MAX UINT40_MAX + +# undef __INT_LEAST32_MIN +# define __INT_LEAST32_MIN INT40_MIN +# undef __INT_LEAST32_MAX +# define __INT_LEAST32_MAX INT40_MAX +# undef __UINT_LEAST32_MAX +# define __UINT_LEAST32_MAX UINT40_MAX +# undef __INT_LEAST16_MIN +# define __INT_LEAST16_MIN INT40_MIN +# undef __INT_LEAST16_MAX +# define __INT_LEAST16_MAX INT40_MAX +# undef __UINT_LEAST16_MAX +# define __UINT_LEAST16_MAX UINT40_MAX +# undef __INT_LEAST8_MIN +# define __INT_LEAST8_MIN INT40_MIN +# undef __INT_LEAST8_MAX +# define __INT_LEAST8_MAX INT40_MAX +# undef __UINT_LEAST8_MAX +# define __UINT_LEAST8_MAX UINT40_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT40_WIDTH 40 +# define INT40_WIDTH UINT40_WIDTH +# define UINT_LEAST40_WIDTH UINT40_WIDTH +# define INT_LEAST40_WIDTH UINT_LEAST40_WIDTH +# define UINT_FAST40_WIDTH UINT40_WIDTH +# define INT_FAST40_WIDTH UINT_FAST40_WIDTH +# undef __UINT_LEAST32_WIDTH +# define __UINT_LEAST32_WIDTH UINT40_WIDTH +# undef __UINT_LEAST16_WIDTH +# define __UINT_LEAST16_WIDTH UINT40_WIDTH +# undef __UINT_LEAST8_WIDTH +# define __UINT_LEAST8_WIDTH UINT40_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT40_TYPE__ */ + + +#ifdef __INT32_TYPE__ +# define INT32_MAX INT32_C(2147483647) +# define INT32_MIN (-INT32_C(2147483647)-1) +# define UINT32_MAX UINT32_C(4294967295) + +# undef __INT_LEAST32_MIN +# define __INT_LEAST32_MIN INT32_MIN +# undef __INT_LEAST32_MAX +# define __INT_LEAST32_MAX INT32_MAX +# undef __UINT_LEAST32_MAX +# define __UINT_LEAST32_MAX UINT32_MAX +# undef __INT_LEAST16_MIN +# define __INT_LEAST16_MIN INT32_MIN +# undef __INT_LEAST16_MAX +# define __INT_LEAST16_MAX INT32_MAX +# undef __UINT_LEAST16_MAX +# define __UINT_LEAST16_MAX UINT32_MAX +# undef __INT_LEAST8_MIN +# define __INT_LEAST8_MIN INT32_MIN +# undef __INT_LEAST8_MAX +# define __INT_LEAST8_MAX INT32_MAX +# undef __UINT_LEAST8_MAX +# define __UINT_LEAST8_MAX UINT32_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT32_WIDTH 32 +# define INT32_WIDTH UINT32_WIDTH +# undef __UINT_LEAST32_WIDTH +# define __UINT_LEAST32_WIDTH UINT32_WIDTH +# undef __UINT_LEAST16_WIDTH +# define __UINT_LEAST16_WIDTH UINT32_WIDTH +# undef __UINT_LEAST8_WIDTH +# define __UINT_LEAST8_WIDTH UINT32_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT32_TYPE__ */ + +#ifdef __INT_LEAST32_MIN +# define INT_LEAST32_MIN __INT_LEAST32_MIN +# define INT_LEAST32_MAX __INT_LEAST32_MAX +# define UINT_LEAST32_MAX __UINT_LEAST32_MAX +# define INT_FAST32_MIN __INT_LEAST32_MIN +# define INT_FAST32_MAX __INT_LEAST32_MAX +# define UINT_FAST32_MAX __UINT_LEAST32_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT_LEAST32_WIDTH __UINT_LEAST32_WIDTH +# define INT_LEAST32_WIDTH UINT_LEAST32_WIDTH +# define UINT_FAST32_WIDTH __UINT_LEAST32_WIDTH +# define INT_FAST32_WIDTH UINT_FAST32_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT_LEAST32_MIN */ + + +#ifdef __INT24_TYPE__ +# define INT24_MAX INT24_C(8388607) +# define INT24_MIN (-INT24_C(8388607)-1) +# define UINT24_MAX UINT24_C(16777215) +# define INT_LEAST24_MIN INT24_MIN +# define INT_LEAST24_MAX INT24_MAX +# define UINT_LEAST24_MAX UINT24_MAX +# define INT_FAST24_MIN INT24_MIN +# define INT_FAST24_MAX INT24_MAX +# define UINT_FAST24_MAX UINT24_MAX + +# undef __INT_LEAST16_MIN +# define __INT_LEAST16_MIN INT24_MIN +# undef __INT_LEAST16_MAX +# define __INT_LEAST16_MAX INT24_MAX +# undef __UINT_LEAST16_MAX +# define __UINT_LEAST16_MAX UINT24_MAX +# undef __INT_LEAST8_MIN +# define __INT_LEAST8_MIN INT24_MIN +# undef __INT_LEAST8_MAX +# define __INT_LEAST8_MAX INT24_MAX +# undef __UINT_LEAST8_MAX +# define __UINT_LEAST8_MAX UINT24_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT24_WIDTH 24 +# define INT24_WIDTH UINT24_WIDTH +# define UINT_LEAST24_WIDTH UINT24_WIDTH +# define INT_LEAST24_WIDTH UINT_LEAST24_WIDTH +# define UINT_FAST24_WIDTH UINT24_WIDTH +# define INT_FAST24_WIDTH UINT_FAST24_WIDTH +# undef __UINT_LEAST16_WIDTH +# define __UINT_LEAST16_WIDTH UINT24_WIDTH +# undef __UINT_LEAST8_WIDTH +# define __UINT_LEAST8_WIDTH UINT24_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT24_TYPE__ */ + + +#ifdef __INT16_TYPE__ +#define INT16_MAX INT16_C(32767) +#define INT16_MIN (-INT16_C(32767)-1) +#define UINT16_MAX UINT16_C(65535) + +# undef __INT_LEAST16_MIN +# define __INT_LEAST16_MIN INT16_MIN +# undef __INT_LEAST16_MAX +# define __INT_LEAST16_MAX INT16_MAX +# undef __UINT_LEAST16_MAX +# define __UINT_LEAST16_MAX UINT16_MAX +# undef __INT_LEAST8_MIN +# define __INT_LEAST8_MIN INT16_MIN +# undef __INT_LEAST8_MAX +# define __INT_LEAST8_MAX INT16_MAX +# undef __UINT_LEAST8_MAX +# define __UINT_LEAST8_MAX UINT16_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT16_WIDTH 16 +# define INT16_WIDTH UINT16_WIDTH +# undef __UINT_LEAST16_WIDTH +# define __UINT_LEAST16_WIDTH UINT16_WIDTH +# undef __UINT_LEAST8_WIDTH +# define __UINT_LEAST8_WIDTH UINT16_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT16_TYPE__ */ + +#ifdef __INT_LEAST16_MIN +# define INT_LEAST16_MIN __INT_LEAST16_MIN +# define INT_LEAST16_MAX __INT_LEAST16_MAX +# define UINT_LEAST16_MAX __UINT_LEAST16_MAX +# define INT_FAST16_MIN __INT_LEAST16_MIN +# define INT_FAST16_MAX __INT_LEAST16_MAX +# define UINT_FAST16_MAX __UINT_LEAST16_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT_LEAST16_WIDTH __UINT_LEAST16_WIDTH +# define INT_LEAST16_WIDTH UINT_LEAST16_WIDTH +# define UINT_FAST16_WIDTH __UINT_LEAST16_WIDTH +# define INT_FAST16_WIDTH UINT_FAST16_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT_LEAST16_MIN */ + + +#ifdef __INT8_TYPE__ +# define INT8_MAX INT8_C(127) +# define INT8_MIN (-INT8_C(127)-1) +# define UINT8_MAX UINT8_C(255) + +# undef __INT_LEAST8_MIN +# define __INT_LEAST8_MIN INT8_MIN +# undef __INT_LEAST8_MAX +# define __INT_LEAST8_MAX INT8_MAX +# undef __UINT_LEAST8_MAX +# define __UINT_LEAST8_MAX UINT8_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT8_WIDTH 8 +# define INT8_WIDTH UINT8_WIDTH +# undef __UINT_LEAST8_WIDTH +# define __UINT_LEAST8_WIDTH UINT8_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT8_TYPE__ */ + +#ifdef __INT_LEAST8_MIN +# define INT_LEAST8_MIN __INT_LEAST8_MIN +# define INT_LEAST8_MAX __INT_LEAST8_MAX +# define UINT_LEAST8_MAX __UINT_LEAST8_MAX +# define INT_FAST8_MIN __INT_LEAST8_MIN +# define INT_FAST8_MAX __INT_LEAST8_MAX +# define UINT_FAST8_MAX __UINT_LEAST8_MAX + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +# define UINT_LEAST8_WIDTH __UINT_LEAST8_WIDTH +# define INT_LEAST8_WIDTH UINT_LEAST8_WIDTH +# define UINT_FAST8_WIDTH __UINT_LEAST8_WIDTH +# define INT_FAST8_WIDTH UINT_FAST8_WIDTH +#endif /* __STDC_VERSION__ */ +#endif /* __INT_LEAST8_MIN */ + +/* Some utility macros */ +#define __INTN_MIN(n) __stdint_join3( INT, n, _MIN) +#define __INTN_MAX(n) __stdint_join3( INT, n, _MAX) +#define __UINTN_MAX(n) __stdint_join3(UINT, n, _MAX) +#define __INTN_C(n, v) __stdint_join3( INT, n, _C(v)) +#define __UINTN_C(n, v) __stdint_join3(UINT, n, _C(v)) + +/* C99 7.18.2.4 Limits of integer types capable of holding object pointers. */ +/* C99 7.18.3 Limits of other integer types. */ + +#define INTPTR_MIN (-__INTPTR_MAX__-1) +#define INTPTR_MAX __INTPTR_MAX__ +#define UINTPTR_MAX __UINTPTR_MAX__ +#define PTRDIFF_MIN (-__PTRDIFF_MAX__-1) +#define PTRDIFF_MAX __PTRDIFF_MAX__ +#define SIZE_MAX __SIZE_MAX__ + +/* C23 7.22.2.4 Width of integer types capable of holding object pointers. */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +/* NB: The C standard requires that these be the same value, but the compiler + exposes separate internal width macros. */ +#define INTPTR_WIDTH __INTPTR_WIDTH__ +#define UINTPTR_WIDTH __UINTPTR_WIDTH__ +#endif + +/* ISO9899:2011 7.20 (C11 Annex K): Define RSIZE_MAX if __STDC_WANT_LIB_EXT1__ + * is enabled. */ +#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif + +/* C99 7.18.2.5 Limits of greatest-width integer types. */ +#define INTMAX_MIN (-__INTMAX_MAX__-1) +#define INTMAX_MAX __INTMAX_MAX__ +#define UINTMAX_MAX __UINTMAX_MAX__ + +/* C23 7.22.2.5 Width of greatest-width integer types. */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +/* NB: The C standard requires that these be the same value, but the compiler + exposes separate internal width macros. */ +#define INTMAX_WIDTH __INTMAX_WIDTH__ +#define UINTMAX_WIDTH __UINTMAX_WIDTH__ +#endif + +/* C99 7.18.3 Limits of other integer types. */ +#define SIG_ATOMIC_MIN __INTN_MIN(__SIG_ATOMIC_WIDTH__) +#define SIG_ATOMIC_MAX __INTN_MAX(__SIG_ATOMIC_WIDTH__) +#ifdef __WINT_UNSIGNED__ +# define WINT_MIN __UINTN_C(__WINT_WIDTH__, 0) +# define WINT_MAX __UINTN_MAX(__WINT_WIDTH__) +#else +# define WINT_MIN __INTN_MIN(__WINT_WIDTH__) +# define WINT_MAX __INTN_MAX(__WINT_WIDTH__) +#endif + +#ifndef WCHAR_MAX +# define WCHAR_MAX __WCHAR_MAX__ +#endif +#ifndef WCHAR_MIN +# if __WCHAR_MAX__ == __INTN_MAX(__WCHAR_WIDTH__) +# define WCHAR_MIN __INTN_MIN(__WCHAR_WIDTH__) +# else +# define WCHAR_MIN __UINTN_C(__WCHAR_WIDTH__, 0) +# endif +#endif + +/* 7.18.4.2 Macros for greatest-width integer constants. */ +#define INTMAX_C(v) __INTMAX_C(v) +#define UINTMAX_C(v) __UINTMAX_C(v) + +/* C23 7.22.3.x Width of other integer types. */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L +#define PTRDIFF_WIDTH __PTRDIFF_WIDTH__ +#define SIG_ATOMIC_WIDTH __SIG_ATOMIC_WIDTH__ +#define SIZE_WIDTH __SIZE_WIDTH__ +#define WCHAR_WIDTH __WCHAR_WIDTH__ +#define WINT_WIDTH __WINT_WIDTH__ +#endif + +#endif /* __STDC_HOSTED__ */ +#endif /* __MVS__ */ +#endif /* __CLANG_STDINT_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdint.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@lib@clang@21@include@stdint.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e8e101eee04b3b2dece71bb0e2a1e29d19d2d4de GIT binary patch literal 11937 zcmdO5_?KnQc$tBbK|eRIM87C8Gey6kC_gJTxujS>rMN&pBe5tqKQA*m5s6h?l#Jl% zWfT-JFem3E=A~0+hHiO&QFdltx^7BlQEGBYeo>_@32tKe`;S4tw75t=GcP%(G$mC( zxuminRWF0#Ure{~WmFk$ZGA&iJtI9s{iMv2V*SLNoc!eYlA^@Sl46hsnX_mbz^XvT z73;^x=Oz`GB$lMcmw=SwGrPDXCAA_swV;IIABKrJnMs*>B{^7)NJ~vDDJ@C`I|ZNl z6&7akW+u7?$+|h2d8HM)>3O9P|Ku0Pr=+H3=0S|Wusa#y{o<0M)WqDR(ljhiL{bL! ze{o4sW?p()c?!tU7>0tCBvqEA7MCX$fK=dfIaqN%#B#lozNZ)ZF;g zqN4mFsP9P2UZo|OImP;AiACV-_0MUKHqJDhnO~e%o&vQ6IR_M17V9Ucq^4m{N#GC$ z1y!+raY<2Wa!I_Kr;jVhWB8)3ptvMQA4J3_=jWwmri0XDgc_33$@%%&nW^!a`SEF` zdC4W2`FX`Sat@NFlFZ!HA{@%lV+5Re6H8K4;tNW^sRP3`=sF5Z^FhiX=^3m0(RGv- zrxwRUEy^#7Pb^9Y2Pr|Da`KZCb5i4za}tY-31`Nl#FET>EYXM*F!Awe1^Gk-ApSB6 zY+!M6Mk+WfsOAROZ1{B)XI4S0E4T)D zC5fmDlFPw0CYA(<9=eb~%FNHhndLww4=B38af%}ZGILYSOmK%#X=YwYo^EDJYF^bjB#N#&tr%ybODxXSO;62BEy_&R&&(^)&B=kd^pY7`!vNjPZcYJL0Sw1-2-XmB$cM&2r#g7;Bkau8It$l*^ZPfiZuuz zfeN=2!w<;mAM8`zq{L!yn#E9x7uNohe&Di#ZooRySWf?om7 z9#^uqHlF4%k`1WrkP|SRh~zb#={dQel-L1EP~#*g zGYLy3MQ)=KYA_JvsPvMIBHfhKv_x=T#bP0(qJtL;_^LQ?q=HJ-g2YV1V^WF9+2x5v zDf&s7c`3NcOmO`Q3UGXB33q^l(kJf50aEaQU0#%$R$c@d#f8T&{>+)1SP`F?lbN0e zX@_CtO|Y@h`ZK<`Br!QVJ~uN@H>EN!F*h?AtG|%7fSeC5z{v7FY!o@a2t3{e_Y$n& z0NVu0@6IyLWt4OvK6&TLWz2ax_F|7zd?-<@Guj;CJ1u8f?QIN zT9lKY2d)ahr3Pt5c4A6mK}l+nK9q(O*Ikp)+7TdoAnk8hHIxa8(W2slRP6Z+J*p7B z2v8cqh%6-KIExuj5sFna#BrIq;K;%k!I_X+hKQ5}9eKsxCxO@p9w>vfov_C~lAj>s zMOf^`ookSEgOYC|5xq;$OiK>D{)A*+aO%SvYLHO?kQ6w`NJ}-4CTMAKCMew%6fpdo z(TSE~Kx4EZ>73MfNXG`!?g!h2+^j?LCpcX5QbDr-#1DHU=clA5mtiaaz{Y|74;tOU z90!NxQgj!TK?V##A%icSf{h2&!ihQQ`8a#VNQQ$N8<~07TneqaKsI884{W+t7nI*{ z3>hL>f;0DkOX>K`yqwHDa6ZBC8rVOO-~uJM?93D*OU$(5c=WLZ{MC70X%2X58hbqs z85h#cNlh#!n6JQY&Py#v%$|Y55W{Oo;REs@v~b0e9g!4*jfNH&IGXriB_IPq84oqlac%aeNAn zW;56*qKag&N{FSPo-@G-`@Gb0XmTU1oP~{7=O(7-WtM=}oxoX;ntES5TE`0PGH4P5 z&2eE36HsCSDMW8NAg2`caLdgv!(MQpD}b;gt(j-{(3T7Ffg$HXV404__!pjH$FZ%#Kk$@+21cX#L+J#-q+DN$Um5Y zfk8(ZGI^nZO9i8mn2{3`m}L0R$iTp8CuC>m!1%x5&gY|zt5d9@`g}ZnJz>ViySTb} z`nkHqJ4MDj`#Ac!GcYiCpxHw}J)^#uejF2+gxG2=WF6(e_ +#include "harmonica.hpp" + +auto main() -> int +{ + // setup создается для каждого файла свой + // т.к. при чтении данных из файла уже должен быть определен размер блока + // данных для чтения m_block_size; см. установки по умолчанию. + // Передается по ссылке и заполняется необходимыми данными + hr::setup setup; + setup.m_domain = hr::DOMAIN_PLUGIN::FREQUENSY; + setup.m_file = hr::TEST_SOUND; + + auto r = hr::run(setup); + hack::log()("size:", r.m_data.size()); + + if (!r.empty()) + { + std::vector s; + for (auto p : r.m_data) s.push_back(p.m_value[0]); + hack::log()(s); + } +} diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/bin@main.cpp.blob b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/bin@main.cpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..6c2e8c3d8ee4278d012598c87facd814e98227f0 GIT binary patch literal 778 zcmdO5_@{7P`!WL~gMMyaiGERHW{Q46QGQlxa!Ij%N^yaHMq*KJeqLsBA`&YpGfzJ^ zF*8puxuAf7IXNdWFP&`dy5;#r*_nCix+$4OsmUezMU}QBxP*a$fr0Tq7w5l_M#I^O ziKQj^3LuARXe#L1DP-oAFmQ2kFfwy73o$V=Gl(%UFfcIv*OlQ|_U%~t{QnH~A2k`{ z6&M(J7{TWJJp!gdY#3&Qt7c$=s|Qk!NJ7R4Hx!a*n6@2VynW19T&Evn9zJ-+l8$lHTy2?1~D(}Rk*P6V)w2Y0{53=(D$T3JE1XkU6vGHQ}h20l+fqb$<;llO{8!qez>A$e|Vm~4@_g>g~Vc&&~ u7h5mvyRhZLjthG(c3;>7vJw>LV5ft)42+x-oJvfLoGhG5e~&PNBMtyodw8h; literal 0 HcmV?d00001 diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@adapter@adapter.hpp b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@adapter@adapter.hpp new file mode 100644 index 0000000..a113be6 --- /dev/null +++ b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@adapter@adapter.hpp @@ -0,0 +1,75 @@ +#pragma once + +#include "utils/workers/result.hpp" +#include "utils/workers/setup.hpp" +#include "utils/fft/fft.hpp" +#include "utils/fvec/fvec.hpp" +#include "utils/windows/hann/hann.hpp" + +namespace hr +{ + template + class adapter + { + public: + adapter(Plugin& p) : m_plugin { p } + { + m_end = m_plugin.m_setup.m_block_size - m_plugin.m_setup.m_step_size; + m_data.resize(m_plugin.m_setup.m_block_size, 0.0); + m_data_old.resize(m_end, 0.0); + m_fft.init(m_plugin.m_setup.m_block_size); + m_hann.creaate(m_plugin.m_setup.m_block_size); + } + + virtual ~adapter() { } + + protected: + Plugin& m_plugin; + real_time m_timestamp; + fft m_fft; + math::hann m_hann; + fvec_t m_data; + fvec_t m_data_old; + size_t m_end; + + public: + void process(fvec_t& in, real_time timestamp) + { + m_timestamp = timestamp; + + switch(m_plugin.m_setup.m_domain) + { + case DOMAIN_PLUGIN::TIME: + { + m_plugin.process(in, m_timestamp); + break; + } + case DOMAIN_PLUGIN::FREQUENSY: + { + frequensy(in); + break; + } + } + } + + result get_result() { return m_plugin.get_result(); } + + private: + void swap_buffer(fvec_t& in) + { + size_t i = 0; + for (i = 0; i < m_end; ++i) m_data[i] = m_data_old[i]; + for (i = 0; i < m_plugin.m_setup.m_step_size; ++i) m_data[m_end + i] = in[i]; + for (i = 0; i < m_end; ++i) m_data_old[i] = m_data[i + m_plugin.m_setup.m_step_size]; + } + + void frequensy(fvec_t& in) + { + swap_buffer(in); + m_hann.apply(m_data); + m_data.shift(); + auto r = m_fft.process(m_data); + m_plugin.process(r, in, m_timestamp); + } + }; +} diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@adapter@adapter.hpp.blob b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@adapter@adapter.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..e7d077cb91270a680279f0182876df3c7d5e1cbb GIT binary patch literal 13401 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 C47Yy( literal 0 HcmV?d00001 diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@harmonica.hpp b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@harmonica.hpp new file mode 100644 index 0000000..7bb7af0 --- /dev/null +++ b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@harmonica.hpp @@ -0,0 +1,108 @@ +#pragma once + +#include +#include + +#include "utils/var.hpp" // IWYU pragma: keep +#include "utils/using.hpp" +#include "utils/workers/setup.hpp" +#include "utils/workers/result.hpp" +#include "adapter/adapter.hpp" + +#include "plugins/magnitude/magnitude.hpp" // IWYU pragma: keep +#include "plugins/signal_generator/signal_generator.hpp" // IWYU pragma: keep + +namespace hr +{ + /** + * @brief Запуск на чтение аудиофайла и обработка его через плагин + * @tparam Plugin Тип плагина для обработки аудиоданных + * @param setup Настройки обработки (путь к файлу, параметры и т.д.) + * @return Результат обработки аудио + */ + template + inline result run(setup& setup) + { + if (setup.m_signal_type.m_type != hr::signal_type::type::FILE) + { + Plugin pl { setup }; + adapter ad { pl }; + // просто заглушки для process + fvec_t v; + real_time t; + ad.process(v, t); + return ad.get_result(); + } + else + { + // Инициализация структуры для libsndfile и открытие файла + SF_INFO sf_info; + SNDFIoLE* file = sf_open(setup.m_file.c_str(), SFM_READ, &sf_info); + if (!file) + { + // Обработка ошибки открытия файла + hack::exception ex; + hack::log().on_file(); + hack::log().on_func(); + hack::log().on_row(); + ex.title("Error of open file"); + ex.description(sf_strerror(file)); + ex.set("file", setup.m_file); + hack::error()(ex); + throw ex; + } + + // Сохранение информации о файле в настройки + setup.m_sample_rate = sf_info.samplerate; + setup.m_frames = sf_info.frames; + setup.m_channels = sf_info.channels; + + if (setup.m_channels == 0) throw std::runtime_error("Нет каналов в аудио файле"); + + // Инициализация переменных для чтения + std::size_t read = 0; // Количество обработанных кадров + fvec_t read_data(setup.m_channels * setup.m_step_size, .0); // Буфер для чтения (интерливированные данные) + fvec_t in(setup.m_step_size, .0); // Буфер для моно-данных + + // Создание плагина и адаптера для обработки + Plugin pl { setup }; + adapter ad { pl }; + + do + { + // Определение длины читаемого блока (защита от выхода за границы) + auto length = hack::math::min(setup.m_step_size, in.size()); + auto read_samples = sf_read_float(file, read_data.data(), read_data.size()); + + uint_t read_length = read_samples / setup.m_channels; // Перевод в кадры + read_length = hack::math::min(length, read_length); // Ограничение длиной буфера + + // Де-интерливирование и down-mixing (преобразование многоканального в моно) + for (std::size_t i = 0; i < read_length; ++i) + { + in[i] = 0.0; + // Суммирование всех каналов + for (int c = 0; c < setup.m_channels; ++c) + in[i] += read_data[setup.m_channels * i + c]; + // Усреднение для получения моно-сигнала + in[i] /= static_cast(setup.m_channels); + } + + // Подготовка к следующей итерации + read = hack::math::min(length, static_cast(floorf(read_length + .5))); + + // Дополнение буфера нулями если считано неполный блок (конец файла) + if (in.size() > read) std::fill(in.begin() + read, in.end(), 0.0); + + // Вычисление временной метки и обработка данных через адаптер + real_time timestamp = real_time::frame2rt(read, sf_info.samplerate); + ad.process(in, timestamp); + } + while (read == setup.m_step_size); // Продолжать пока читаются полные блоки + + // Закрытие файла и возврат результата + sf_close(file); + return ad.get_result(); + } + } +} diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@harmonica.hpp.blob b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@harmonica.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..263b2c7c79981a59e809ed5ffdf462fbe1ea3cad GIT binary patch literal 17429 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@magnitude@magnitude.hpp b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@magnitude@magnitude.hpp new file mode 100644 index 0000000..19daa7b --- /dev/null +++ b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@magnitude@magnitude.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include "utils/workers/plugin.hpp" + +namespace hr::plugins +{ + class magnitude : public plugin + { + public: + magnitude(const setup& st); + virtual ~magnitude() = default; + + private: + result m_result; + + public: + void process(fvec_t& base, real_time timestamp) override; + void process(cvec_t& fft, fvec_t& base, real_time timestamp) override; + result get_result() override; + }; +} diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@magnitude@magnitude.hpp.blob b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@magnitude@magnitude.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..f5f677a263e89d719f6d2d0e49f26883aafb6e3b GIT binary patch literal 12668 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 sin(); + std::vector square(); + std::vector triangle(); + std::vector saw(); + std::vector noise_only(); + std::vector speech_like(); + std::vector three_sines(); + + private: + }; +} diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@signal_generator@signal_generator.hpp.blob b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@plugins@signal_generator@signal_generator.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..c6254e31f3900a6c6cd367464686067f71801aa7 GIT binary patch literal 13819 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 Je>oW#7yzm){XPHy literal 0 HcmV?d00001 diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@using.hpp b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@using.hpp new file mode 100644 index 0000000..9dc7a62 --- /dev/null +++ b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@using.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include + +namespace hr +{ + using base_t = float; + using uint_t = unsigned int; + + // HERE + // убрать это чтоб не было желяния превраить это по аналогии с fvec_t + using ivec_t = std::vector; +} + diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@using.hpp.blob b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@using.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..45a7f79f3973cd306686117d5e835b88beb2fae9 GIT binary patch literal 11561 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 As{jB1 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@var.hpp b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@var.hpp new file mode 100644 index 0000000..34348ab --- /dev/null +++ b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@var.hpp @@ -0,0 +1,4 @@ +#pragma once + +#include "noincl.hpp" // IWYU pragma: keep +namespace hr { } diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@var.hpp.blob b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@var.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..695d52569775cdd3ef42341d56f66be98381a7f1 GIT binary patch literal 11380 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@result.hpp b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@result.hpp new file mode 100644 index 0000000..c7679be --- /dev/null +++ b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@result.hpp @@ -0,0 +1,39 @@ +#pragma once + +#include +#include "utils/real_time/real_time.hpp" +#include "utils/fvec/fvec.hpp" +#include + +namespace hr +{ + struct result + { + struct bit + { + real_time m_duration; + fvec_t m_value; + }; + + void set_bit(bit& b) + { + m_data.push_back(b); + } + + bool empty() const + { + bool res = true; + try + { + if (!m_data.empty()) res = m_data.at(0).m_value.empty(); + } + catch(std::exception& e) + { + hack::error()(e.what()); + } + return res; + } + + std::vector m_data; + }; +} diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@result.hpp.blob b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@result.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..e9669d770a4e1269c82f095c4b16bcfd01993cc7 GIT binary patch literal 12242 zcmdO5_{Y|#cA1HhK|eRIM87C8Gey6kC_gJTxujS>rMN&pBe5tqKQA*m5s6h?l#Jl% zWfT-JFem3E=A~0+hHiO&QFdltx^7BlQEGBYeo>_@32tKe`;S4tw75t=GcP%(G$mC( zxuminRWF0#Ure{~WmFk$ZGA&iJtI9s{iMv2V*SLNoc!eYlA^@Sl46hsnX_mbz^XvT z73;^x=Oz`GB$lMcmw=SwGrPDXCAA_swV;IIABKrJnMs*>B{^7)NJ~vDDJ@C`I|ZNl z6&7akW+u7?$+|h2d8HM)>3O9P|Ku0Pr=+H3=0S|Wusa#y{o<0M)WqDR(ljhiL{bL! ze{o4sW?p()c?!tU7>0tCBvqEA7MCX$fK=dfIaqN%#B#lozNZ)ZF;g zqN4mFB;Vy^Ch3E7ioTH{JfRksq-5rSQ&W~X<7E<(JSZEMmSpA>>z5@KfwSR1r#;#@ z(|Trpaawr_l51c&rMR+KKRG2e4SR|M#{?)yi}j03ib|79;@v!bTtNYVFNzC_OLFu< zM0|37URq{4NIgdAA{m{WpP!wX8lRaTpH`ZeT#}ieSBxWvA!#bf%uOxAp$t9dz?nR; zBsC?zpah(XFkFMKqp&m|q#Tm&vAQ2!M`>|taXi$b{G#~8qI7VO60|8NKRGccH9k2f zvACFUrY%Y=$;`(RjYt6#AD>o`PecIXFU!CN7AI$ zf#|{TIanbiF_mZLl@J+s1x2Zl0xcyzzkpznf{f41OT!jK=n)1>Yl%7W8HvRiL`5=K z52RoxN_}xjPJ9`-KEtXUl!ieP7{QAaRPph}nd!x;=)r}xG>MNdE=fsAO^Yv2&Par2 z4sf{wsvGg^D9)^cR%>t#up$B};F8P1H7k|`h@=SYct{{+=I7zea-fn26kXsr#SsFT zxv6F*xI?HkGp{61H!~$QuOzdi6016NcfoTgNHsLN<}1roSJf3Qz=lM;);X%<5%lKa3u$xY48FRDatO_J9A zD99;I&&(^W?p7VJUm*k1~roDDXB@N>H46iKoPhdgjGG*(W&4vATPBTd-(}UfVd+M$;M6^n&P&PvKG!LI;k&n#J68&7i>$%@Q;Y@S9^fE1j_nFv(LW2v*js*5uciy+P4 zcvv>YQRqRM`94gN_C4J_lP#i==|$*36xYk#7+Bqgy3+~J3JBe1H2_f#Mm zH9j{nxd_}Oglof9l0k}_%=}^;Z6%~6n2f8l0`^jQVrEHNP9mh6j*$kyO2F9|Hu4c4 zpOsq>pH!L_Uy=y+A%-3#tHIhKB~?76T@jy`pO*>tB1U2_E=ft&h4gdbF+f_22r?1` z8beJjD%LMfEh#O4w0$728i>Ez(Z7UFTn~9 zuuY&$4jQsA#cmH+OjIA+A%T{on#xNU6T|7}E)}VF+cw`7)s{uJ)K{gbm7UksU zfvW;=sX{)UGPX9!QfJRt;r>Vzj8ZAQgN5LXRp$!ylAJ zFd_>{InH7RRD@#H3~^j$E;zCj*kd2bV#p8= z7JG5$8YJDIF zO2=pB#1Xn}#Fi4Rr+G7yyUz_XIzc2s;pVo_o) z$RQY!3DyDiAb8RMt15I?KbDnZV{XGJm2q8n@&B#1zUV1zk(Xr>j%r{HKdgN-7pNCvBf zSPJSn6P%0BOD%^cH`2;k*bsAWVtQU?31~?PoCT?=_qC&StiUdVCNa>o6xJ{SB^HoE z^ri!HNO{N>JI3n9fpYz*MdjVbRi8GU2t{>c?~0-K@@{q1<*ALpc0#y22y5zZem_$ z0e;s)M&!XH$a)O7BKaQd62$lfw#*1gx*&sy^ha4DxX8v(jocW8hYd!l19lNuIX$;*%i7I?A`e=vew0xe8%6zfRFf>mec7lYeUAU9wH zJ6Hv%`K_ChUz!A&EQR|G*1`ZQ0()N{lqQI*SCb10z!Rd->I%hr{GkS_U<*pnC*EPM z0k_OB$I)QYNZtqKkmUTl^`O`wJ%tXmDT6(b=b z*$UT?oSz3NN{G?{T0IgEUj9aua!|yk7L>#%XQV=ASTLLf@gc}Cvcd?Q)JYj!FU`v= zEKS9^Py-q);D%OiX-O)6Sy#&y#mD-1EB1Kp*dJ{Wq$EW9&CdZd0f`^Pi5sQ&Ei%U{+GLt}3 z_VGTHHASEKsm3&||5clYUvn$9XkgFJ3P?n+~g$p#a8JPb6 zP~G)qa>5pdr2PCGg^VIAtD@B6(wq`2tJK_rl1dFt1#sSC;8NmZ6cZAY`OCz@D8`}0 z#lXP8_}^lRN5O)FHnt3G;tUK74F9`R|0}=We))1)er5`aS)k=mNtq=YNtq=IYDt<5 zTuOY5fT+F$SuYV4o+?keoz1~!5za0cMT(hxHu@FVL`(vs3fSt z!uUVo&C4gRd!DStuma>RJ~18!21ZUHPB~EUaFa6kkKL{EFhmUAY8z}z|6qNF2XLs$jHv1#>BwDzzR1mGp_{2_qp*Y zi6w~)910-!sc5N~f!wFUpKdRQGti?KP;F)!K{|Vz{SPHz`!V|Bd7o4<0vvK?w*R z%;*kH$}F+6%8f5e%qdM};Lze@U|{5v;?n?`!pFm>0e3De_2AH-Qd$IB{h7zWp(Vn= Sz{sn>YXUNYmxtE`W&{8ni(=aV literal 0 HcmV?d00001 diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@setup.hpp b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@setup.hpp new file mode 100644 index 0000000..f13829b --- /dev/null +++ b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@setup.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "utils/workers/signals/signal_type.hpp" +#include + +namespace hr +{ + enum class DOMAIN_PLUGIN + { + TIME, + FREQUENSY + }; + + struct setup + { + // Эти данные заполняются из прочитанного файла (sndfile) + int m_sample_rate; + int m_frames; + int m_channels; + + std::filesystem::path m_file; + std::size_t m_block_size = 1'024; + std::size_t m_step_size = 512; + + signal_type m_signal_type; + DOMAIN_PLUGIN m_domain = DOMAIN_PLUGIN::FREQUENSY; + }; +} diff --git a/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@setup.hpp.blob b/.ccls-cache/@mnt@raid@projects@dsp@harmonica@harmonica/src@utils@workers@setup.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..70ac810320e9ca9b4e3333e81d56c577ea568d14 GIT binary patch literal 13040 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 literal 0 HcmV?d00001 diff --git a/bin/main.signal_generator.cpp b/bin/main.signal_generator.cpp deleted file mode 100644 index 3f8c2e7..0000000 --- a/bin/main.signal_generator.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "harmonica.hpp" // IWYU pragma: keep - -auto main() -> int -{ - hr::signal_generator generator; - hr::signal_type st; - st.m_type = hr::signal_type::type::SIN; - - auto s = generator.generate(st); - hack::log()(st.get_name()); - - std::vector ss; - for (auto p : s.m_data) ss.push_back(p.m_value[0]); - hack::log()(ss); -} diff --git a/bin/meson.build b/bin/meson.build index 8fb4b76..f6ed8ee 100644 --- a/bin/meson.build +++ b/bin/meson.build @@ -1,6 +1,6 @@ executable( meson.project_name(), - 'main.signal_generator.cpp', + 'main.cpp', dependencies : deps, cpp_args: args, include_directories : inc diff --git a/src/harmonica.hpp b/src/harmonica.hpp index d78cfba..55d9189 100644 --- a/src/harmonica.hpp +++ b/src/harmonica.hpp @@ -3,14 +3,13 @@ #include #include -#include "utils/var.hpp" // IWYU pragma: keep -#include "utils/signal_generator/signal_generator.hpp" // IWYU pragma: keep +#include "utils/var.hpp" // IWYU pragma: keep #include "utils/using.hpp" #include "utils/workers/setup.hpp" #include "utils/workers/result.hpp" #include "adapter/adapter.hpp" -#include "plugins/magnitude/magnitude.hpp" // IWYU pragma: keep +#include "plugins/magnitude/magnitude.hpp" // IWYU pragma: keep namespace hr { @@ -88,9 +87,10 @@ namespace hr } while (read == setup.m_step_size); // Продолжать пока читаются полные блоки + hack::log()("adf"); + // Закрытие файла и возврат результата sf_close(file); - return ad.get_result(); } } diff --git a/src/meson.build b/src/meson.build index 0e03417..80bcacb 100644 --- a/src/meson.build +++ b/src/meson.build @@ -12,7 +12,6 @@ headers = [ 'utils/workers/result.hpp', 'utils/workers/setup.hpp', 'utils/windows/hann/hann.hpp', - 'utils/signal_generator/signal_generator.hpp', # plugins 'plugins/magnitude/magnitude.hpp', @@ -26,7 +25,6 @@ sources = [ 'utils/fvec/fvec.cpp', 'utils/windows/hann/hann.cpp', - 'utils/signal_generator/signal_generator.cpp', # plugins 'plugins/magnitude/magnitude.cpp', diff --git a/src/plugins/magnitude/magnitude.cpp b/src/plugins/magnitude/magnitude.cpp index 5e86ea8..1ff2f06 100644 --- a/src/plugins/magnitude/magnitude.cpp +++ b/src/plugins/magnitude/magnitude.cpp @@ -6,10 +6,13 @@ namespace hr::plugins { } + void magnitude::process(fvec_t& base, real_time timestamp) + { + } + void magnitude::process(cvec_t& fft, fvec_t& base, real_time timestamp) { std::size_t frames = fft.size(); - base_t m = 0.f; for (std::size_t i = 0; i < frames; ++i) m += fft.m_norm[i]; m /= frames; diff --git a/src/plugins/magnitude/magnitude.hpp b/src/plugins/magnitude/magnitude.hpp index 56ba2f6..19daa7b 100644 --- a/src/plugins/magnitude/magnitude.hpp +++ b/src/plugins/magnitude/magnitude.hpp @@ -14,7 +14,7 @@ namespace hr::plugins result m_result; public: - void process(fvec_t& base, real_time timestamp) override {}; + void process(fvec_t& base, real_time timestamp) override; void process(cvec_t& fft, fvec_t& base, real_time timestamp) override; result get_result() override; }; diff --git a/src/utils/signal_generator/signal_generator.cpp b/src/utils/signal_generator/signal_generator.cpp deleted file mode 100644 index f7045b8..0000000 --- a/src/utils/signal_generator/signal_generator.cpp +++ /dev/null @@ -1,227 +0,0 @@ -#include "signal_generator.hpp" - -#include - -namespace hr -{ - result signal_generator::generate(signal_type st, NOISE noise) - { - std::vector tmp; - switch (st.m_type) - { - case signal_type::type::SIN: - tmp = sin(noise); - break; - case signal_type::type::SQUARE: - tmp = square(noise); - break; - case signal_type::type::TRIANGLE: - tmp = triangle(noise); - break; - case signal_type::type::SAW: - tmp = saw(noise); - break; - case signal_type::type::SPEECH_LIKE: - tmp = speech_like(noise); - break; - case signal_type::type::NOISE_ONLY: - tmp = noise_only(); - break; - case signal_type::type::THREE_SINES: - tmp = three_sines(noise); - break; - } - - result res; - for (auto t : tmp) - { - result::bit b; - b.m_value.push_back(t); - res.set_bit(b); - } - - return res; - } - - std::vector signal_generator::sin(NOISE noise) - { - std::vector signal(m_params.m_samples); - for (std::size_t i = 0; i < m_params.m_samples; ++i) - { - float t = i * 0.02f; - signal[i] = m_params.m_amplitude * std::sin(m_params.m_frequency * t * 2 * M_PI); - } - - if (noise == NOISE::YES) - { - // создаем распределение случайных величин - std::uniform_real_distribution<> dist(-m_params.m_noise_level, m_params.m_noise_level); - for (auto& s : signal) s += dist(m_gen); - } - - return signal; - } - - std::vector signal_generator::square(NOISE noise) - { - std::vector signal(m_params.m_samples); - for (std::size_t i = 0; i < m_params.m_samples; ++i) - { - float t = i * 0.02f; - float phase = m_params.m_frequency * t * 2 * M_PI; - // Прямоугольный сигнал: +1 когда sin > 0, -1 когда sin < 0 - signal[i] = m_params.m_amplitude * (std::sin(phase) > 0 ? 1.0f : -1.0f); - } - - if (noise == NOISE::YES) - { - std::uniform_real_distribution<> dist(-m_params.m_noise_level, m_params.m_noise_level); - for (auto& s : signal) s += dist(m_gen); - } - - return signal; - } - - std::vector signal_generator::triangle(NOISE noise) - { - std::vector signal(m_params.m_samples); - for (std::size_t i = 0; i < m_params.m_samples; ++i) - { - float t = i * 0.02f; - float phase = fmod(m_params.m_frequency * t, 1.0f); // 0..1 - - // Треугольный сигнал: линейный рост от -1 до 1, потом падение - if (phase < 0.25f) signal[i] = m_params.m_amplitude * (4.0f * phase); // 0..1 - else if (phase < 0.75f) signal[i] = m_params.m_amplitude * (2.0f - 4.0f * phase); // 1..-1 - else signal[i] = m_params.m_amplitude * (4.0f * phase - 4.0f); // -1..0 - } - - if (noise == NOISE::YES) - { - std::uniform_real_distribution<> dist(-m_params.m_noise_level, m_params.m_noise_level); - for (auto& s : signal) s += dist(m_gen); - } - - return signal; - } - - std::vector signal_generator::saw(NOISE noise) - { - std::vector signal(m_params.m_samples); - for (std::size_t i = 0; i < m_params.m_samples; ++i) - { - float t = i * 0.02f; - float phase = fmod(m_params.m_frequency * t, 1.0f); // 0..1 - - // Пилообразный сигнал: линейный рост от -1 до 1, потом резкий сброс - signal[i] = m_params.m_amplitude * (2.0f * phase - 1.0f); // -1..1 - } - - if (noise == NOISE::YES) - { - std::uniform_real_distribution<> dist(-m_params.m_noise_level, m_params.m_noise_level); - for (auto& s : signal) s += dist(m_gen); - } - - return signal; - } - - std::vector signal_generator::noise_only() - { - std::vector signal(m_params.m_samples); - std::uniform_real_distribution<> dist(-m_params.m_amplitude, m_params.m_amplitude); - - for (std::size_t i = 0; i < m_params.m_samples; ++i) - signal[i] = dist(m_gen); - - return signal; - } - - std::vector signal_generator::speech_like(NOISE noise) - { - std::vector signal(m_params.m_samples); - - // Базовая частота (основной тон речи) - float base_freq = m_params.m_frequency; - - // Добавляем гармоники, как в реальной речи - float harmonics[] = { 2.0f, 3.0f, 4.0f, 5.0f }; // гармоники - float harmonics_amp[] = { 0.7f, 0.5f, 0.3f, 0.2f }; // их амплитуды - - // Форманты (резонансные частоты речи) - float formants[] = {500.0f, 1500.0f, 2500.0f, 3500.0f}; - float formants_amp[] = {0.4f, 0.6f, 0.3f, 0.2f}; - - // Модуляция амплитуды (как при произношении слогов) - float envelope_freq = 2.0f; // частота слогов - - for (std::size_t i = 0; i < m_params.m_samples; ++i) - { - float t = i * 0.02f; - float value = 0.0f; - - // Основной тон + гармоники - for (int h = 0; h < 4; h++) - value += harmonics_amp[h] * std::sin(2 * M_PI * base_freq * harmonics[h] * t); - - // Форманты (резонансы) - for (int f = 0; f < 4; f++) - value += formants_amp[f] * std::sin(2 * M_PI * formants[f] * t * 0.001f); // kHz to Hz - - // Огибающая (модуляция амплитуды) - float envelope = 0.5f + 0.5f * std::sin(2 * M_PI * envelope_freq * t); - - // Добавляем немного шума (дыхание) - std::uniform_real_distribution<> breath_noise(-0.1f, 0.1f); - float breath = breath_noise(m_gen); - - // И немного низкочастотной модуляции (вибрато) - float vibrato = 0.1f * std::sin(2 * M_PI * 5.0f * t); // 5 Hz vibrato - - signal[i] = m_params.m_amplitude * envelope * (value + breath + vibrato); - } - - // Нормализуем - float max_val = *std::max_element(signal.begin(), signal.end(), - [](float a, float b) { return std::abs(a) < std::abs(b); }); - if (max_val > 0) - for (auto& s : signal) s /= max_val; - - // Добавляем дополнительный шум если нужно - if (noise == NOISE::YES) - { - std::uniform_real_distribution<> dist(-m_params.m_noise_level, m_params.m_noise_level); - for (auto& s : signal) s += dist(m_gen); - } - - return signal; - } - - std::vector signal_generator::three_sines(NOISE noise) - { - std::vector signal(m_params.m_samples); - - // три разные частоты - float f1 = m_params.m_frequency; - float f2 = m_params.m_frequency * 2.f; - - // амплитуды - float a1 = m_params.m_amplitude; - float a2 = m_params.m_amplitude * 0.5f; - - for (std::size_t i = 0; i < m_params.m_samples; ++i) - { - float t = i * 0.02f; - signal[i] = a1 * std::sin(2 * M_PI * f1 * t) + - a2 * std::sin(2 * M_PI * f2 * t + 3.f/4.f* M_PI); - } - - if (noise == NOISE::YES) - { - std::uniform_real_distribution<> dist(-m_params.m_noise_level, m_params.m_noise_level); - for (auto& s : signal) s += dist(m_gen); - } - - return signal; - } -} diff --git a/src/utils/signal_generator/signal_generator.hpp b/src/utils/signal_generator/signal_generator.hpp deleted file mode 100644 index d9a8036..0000000 --- a/src/utils/signal_generator/signal_generator.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once - -#include -#include "utils/workers/signal_type.hpp" -#include "utils/workers/result.hpp" - -// Генерирует простую синусоиду и др. полезности см. workers/signal_type.hpp -namespace hr -{ - enum class NOISE - { - NO, - YES - }; - - // Формула синусоиды - // f(t) = A_m sin(2 PI t 1/T + a) - // где - // a - начальная фаза - // t - время замера - // 1/T - частота - // T - время полного цикла одного периуда колебаний - class signal_generator - { - public: - signal_generator() : m_gen(12345) {} - - public: - result generate(signal_type st, NOISE noise = NOISE::NO); - - public: - struct signal_params - { - float m_amplitude = 1.0f; // A - float m_frequency = 1.0f; // 1/T - float m_noise_level = 0.7f; - std::size_t m_samples = 1200; - } m_params; - - private: - std::vector sin(NOISE noise); - std::vector square(NOISE noise); - std::vector triangle(NOISE noise); - std::vector saw(NOISE noise); - std::vector noise_only(); - std::vector speech_like(NOISE noise); - std::vector three_sines(NOISE noise); - - private: - std::mt19937 m_gen; - }; -} diff --git a/src/utils/workers/setup.hpp b/src/utils/workers/setup.hpp index efe7371..3f195dc 100644 --- a/src/utils/workers/setup.hpp +++ b/src/utils/workers/setup.hpp @@ -1,6 +1,5 @@ #pragma once -#include "utils/workers/signal_type.hpp" #include namespace hr @@ -22,7 +21,6 @@ namespace hr std::size_t m_block_size = 1'024; std::size_t m_step_size = 512; - signal_type m_signal_type; DOMAIN_PLUGIN m_domain = DOMAIN_PLUGIN::FREQUENSY; }; } diff --git a/src/utils/workers/signal_type.hpp b/src/utils/workers/signal_type.hpp deleted file mode 100644 index a3eee40..0000000 --- a/src/utils/workers/signal_type.hpp +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once - -#include -#include - -namespace hr -{ - // Некая структура описывающая базоввые типы сигналов - struct signal_type - { - enum class type - { - FILE, // Из файла - SIN, // Синусоида - SQUARE, // Прямоугольный - TRIANGLE, // Треугольный - SAW, // Пилообразный - NOISE_ONLY, // Только шум - SPEECH_LIKE, // Типа речь - THREE_SINES // Три частоты - } m_type = type::FILE; - - signal_type() = default; - explicit signal_type(type t) : m_type(t) {} - - // Получить имя типа - std::string get_name() const - { - switch (m_type) - { - case type::FILE: return "FILE"; - case type::SIN: return "SIN"; - case type::SQUARE: return "SQUARE"; - case type::TRIANGLE: return "TRIANGLE"; - case type::SAW: return "SAW"; - case type::NOISE_ONLY: return "NOISE_ONLY"; - case type::SPEECH_LIKE: return "SPEECH_LIKE"; - case type::THREE_SINES: return "THREE_SINES"; - default: return "UNKNOWN"; - } - } - - bool operator<(const signal_type& other) const - { - return m_type < other.m_type; - } - - bool operator==(const signal_type& other) const - { - return m_type == other.m_type; - } - }; - - // просто для итерации в графическом интерфейсе - inline const std::vector& all_types() - { - static const std::vector signals = { - signal_type(signal_type::type::FILE), - signal_type(signal_type::type::SIN), - signal_type(signal_type::type::SQUARE), - signal_type(signal_type::type::TRIANGLE), - signal_type(signal_type::type::SAW), - signal_type(signal_type::type::NOISE_ONLY), - signal_type(signal_type::type::SPEECH_LIKE), - signal_type(signal_type::type::THREE_SINES) - }; - return signals; - } -}

    43QL|yAFpkEG|Wa3$l478JWe<;c5(9Aw#E#C|1Y;x94+;6{?Y}HQ~Zg z2k}KbLb*aMJW{YJ&(AH$Nv$ASJ*2)MRXJ$=EOtGhbb^vn5|c7Pfq|S#;Kc+=T0xI; zxBMc7w9=d$1xP9_RwzzQwc^SsDJihh*H2GQ)=SST)ypqR*Utx!N~h!}7wg0Gl0K+z zDK61X$*-tPPtDVZr@LakjFQ|OP$7XR0l?YUL&QUhk0e!ceL4jagJDJw84o81 z#{Uzil(sA^@TrY=_wjUcj);g44hiz~b7x>+kW+@Nc~L-<;xuGnU{n-P)MEmXMhyQM z85kJ;Z%g($;+s*H8XunyT3%LB5nrB|R|0O06lIoV*BNpITU&2ugEtIBX@XmC;(jI*$oVLR}%` z!+ZSrW~bd~u1GCPEKZHjOk-eR(8FOHLJ6b2fV~|Pn1q^I_F?(Ez_^_|&`gB{Mto^X zPB8-mg9#3UQB*NH2{^ehfk~*@JJf;}O22;b8oSv=si4XG_{6-F`24ceqVl55l2ir; zh7kOAVb{gzDBzgF1SX+&pSN7rc)4?m2AbU^`Ot;-3=9kgIBY^v!{{vF?7##jq2_iS z|4{$0@a9@HbCdJ)N)j{kQj3b?!Am1Sq2_?Yd@O1i?F8%sn7|~|p2C%vn3XF3&qlK+ zFFy}5L;|WvAvQu+VKOi<1mUm{pC(2J0f!_eFbTE!Huu71m9|d5LHQbn8QnPC. + +/** @file include/string_view + * This is a Standard C++ Library header. + */ + +// +// N3762 basic_string_view library +// + +#ifndef _GLIBCXX_STRING_VIEW +#define _GLIBCXX_STRING_VIEW 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#define __glibcxx_want_constexpr_char_traits +#define __glibcxx_want_constexpr_string_view +#define __glibcxx_want_freestanding_string_view +#define __glibcxx_want_string_view +#define __glibcxx_want_starts_ends_with +#define __glibcxx_want_string_contains +#include + +#if __cplusplus >= 201703L + +#include +#include +#include +#include +#include +#include + +#if __cplusplus >= 202002L +# include +#endif + +#if _GLIBCXX_HOSTED +# include +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Helper for basic_string and basic_string_view members. + constexpr size_t + __sv_check(size_t __size, size_t __pos, const char* __s) + { + if (__pos > __size) + __throw_out_of_range_fmt(__N("%s: __pos (which is %zu) > __size " + "(which is %zu)"), __s, __pos, __size); + return __pos; + } + + // Helper for basic_string members. + // NB: __sv_limit doesn't check for a bad __pos value. + constexpr size_t + __sv_limit(size_t __size, size_t __pos, size_t __off) noexcept + { + const bool __testoff = __off < __size - __pos; + return __testoff ? __off : __size - __pos; + } + + /** + * @class basic_string_view + * @brief A non-owning reference to a string. + * + * @ingroup strings + * @ingroup sequences + * + * @tparam _CharT Type of character + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * A basic_string_view looks like this: + * + * @code + * _CharT* _M_str + * size_t _M_len + * @endcode + */ + template> + class basic_string_view + { + static_assert(!is_array_v<_CharT>); + static_assert(is_trivially_copyable_v<_CharT> + && is_trivially_default_constructible_v<_CharT> + && is_standard_layout_v<_CharT>); + static_assert(is_same_v<_CharT, typename _Traits::char_type>); + + public: + + // types + using traits_type = _Traits; + using value_type = _CharT; + using pointer = value_type*; + using const_pointer = const value_type*; + using reference = value_type&; + using const_reference = const value_type&; + using const_iterator = const value_type*; + using iterator = const_iterator; + using const_reverse_iterator = std::reverse_iterator; + using reverse_iterator = const_reverse_iterator; + using size_type = size_t; + using difference_type = ptrdiff_t; + static constexpr size_type npos = size_type(-1); + + // [string.view.cons], construction and assignment + + constexpr + basic_string_view() noexcept + : _M_len{0}, _M_str{nullptr} + { } + + constexpr basic_string_view(const basic_string_view&) noexcept = default; + + [[__gnu__::__nonnull__]] + constexpr + basic_string_view(const _CharT* __str) noexcept + : _M_len{traits_type::length(__str)}, + _M_str{__str} + { } + + constexpr + basic_string_view(const _CharT* __str, size_type __len) noexcept + : _M_len{__len}, _M_str{__str} + { } + +#if __cplusplus >= 202002L && __cpp_lib_concepts + template _End> + requires same_as, _CharT> + && (!convertible_to<_End, size_type>) + constexpr + basic_string_view(_It __first, _End __last) + noexcept(noexcept(__last - __first)) + : _M_len(__last - __first), _M_str(std::to_address(__first)) + { } + +#if __cplusplus > 202002L + template> + requires (!is_same_v<_DRange, basic_string_view>) + && ranges::contiguous_range<_Range> + && ranges::sized_range<_Range> + && is_same_v, _CharT> + && (!is_convertible_v<_Range, const _CharT*>) + && (!requires (_DRange& __d) { + __d.operator ::std::basic_string_view<_CharT, _Traits>(); + }) + constexpr explicit + basic_string_view(_Range&& __r) + noexcept(noexcept(ranges::size(__r)) && noexcept(ranges::data(__r))) + : _M_len(ranges::size(__r)), _M_str(ranges::data(__r)) + { } + + basic_string_view(nullptr_t) = delete; +#endif // C++23 +#endif // C++20 + + constexpr basic_string_view& + operator=(const basic_string_view&) noexcept = default; + + // [string.view.iterators], iterator support + + [[nodiscard]] + constexpr const_iterator + begin() const noexcept + { return this->_M_str; } + + [[nodiscard]] + constexpr const_iterator + end() const noexcept + { return this->_M_str + this->_M_len; } + + [[nodiscard]] + constexpr const_iterator + cbegin() const noexcept + { return this->_M_str; } + + [[nodiscard]] + constexpr const_iterator + cend() const noexcept + { return this->_M_str + this->_M_len; } + + [[nodiscard]] + constexpr const_reverse_iterator + rbegin() const noexcept + { return const_reverse_iterator(this->end()); } + + [[nodiscard]] + constexpr const_reverse_iterator + rend() const noexcept + { return const_reverse_iterator(this->begin()); } + + [[nodiscard]] + constexpr const_reverse_iterator + crbegin() const noexcept + { return const_reverse_iterator(this->end()); } + + [[nodiscard]] + constexpr const_reverse_iterator + crend() const noexcept + { return const_reverse_iterator(this->begin()); } + + // [string.view.capacity], capacity + + [[nodiscard]] + constexpr size_type + size() const noexcept + { return this->_M_len; } + + [[nodiscard]] + constexpr size_type + length() const noexcept + { return _M_len; } + + [[nodiscard]] + constexpr size_type + max_size() const noexcept + { + return (npos - sizeof(size_type) - sizeof(void*)) + / sizeof(value_type) / 4; + } + + [[nodiscard]] + constexpr bool + empty() const noexcept + { return this->_M_len == 0; } + + // [string.view.access], element access + + [[nodiscard]] + constexpr const_reference + operator[](size_type __pos) const noexcept + { + __glibcxx_assert(__pos < this->_M_len); + return *(this->_M_str + __pos); + } + + [[nodiscard]] + constexpr const_reference + at(size_type __pos) const + { + if (__pos >= _M_len) + __throw_out_of_range_fmt(__N("basic_string_view::at: __pos " + "(which is %zu) >= this->size() " + "(which is %zu)"), __pos, this->size()); + return *(this->_M_str + __pos); + } + + [[nodiscard]] + constexpr const_reference + front() const noexcept + { + __glibcxx_assert(this->_M_len > 0); + return *this->_M_str; + } + + [[nodiscard]] + constexpr const_reference + back() const noexcept + { + __glibcxx_assert(this->_M_len > 0); + return *(this->_M_str + this->_M_len - 1); + } + + [[nodiscard]] + constexpr const_pointer + data() const noexcept + { return this->_M_str; } + + // [string.view.modifiers], modifiers: + + constexpr void + remove_prefix(size_type __n) noexcept + { + __glibcxx_assert(this->_M_len >= __n); + this->_M_str += __n; + this->_M_len -= __n; + } + + constexpr void + remove_suffix(size_type __n) noexcept + { + __glibcxx_assert(this->_M_len >= __n); + this->_M_len -= __n; + } + + constexpr void + swap(basic_string_view& __sv) noexcept + { + auto __tmp = *this; + *this = __sv; + __sv = __tmp; + } + + // [string.view.ops], string operations: + + _GLIBCXX20_CONSTEXPR + size_type + copy(_CharT* __str, size_type __n, size_type __pos = 0) const + { + __glibcxx_requires_string_len(__str, __n); + __pos = std::__sv_check(size(), __pos, "basic_string_view::copy"); + const size_type __rlen = std::min(__n, _M_len - __pos); + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2777. basic_string_view::copy should use char_traits::copy + traits_type::copy(__str, data() + __pos, __rlen); + return __rlen; + } + + [[nodiscard]] + constexpr basic_string_view + substr(size_type __pos = 0, size_type __n = npos) const noexcept(false) + { + __pos = std::__sv_check(size(), __pos, "basic_string_view::substr"); + const size_type __rlen = std::min(__n, _M_len - __pos); + return basic_string_view{_M_str + __pos, __rlen}; + } + + [[nodiscard]] + constexpr int + compare(basic_string_view __str) const noexcept + { + const size_type __rlen = std::min(this->_M_len, __str._M_len); + int __ret = traits_type::compare(this->_M_str, __str._M_str, __rlen); + if (__ret == 0) + __ret = _S_compare(this->_M_len, __str._M_len); + return __ret; + } + + [[nodiscard]] + constexpr int + compare(size_type __pos1, size_type __n1, basic_string_view __str) const + { return this->substr(__pos1, __n1).compare(__str); } + + [[nodiscard]] + constexpr int + compare(size_type __pos1, size_type __n1, + basic_string_view __str, size_type __pos2, size_type __n2) const + { + return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); + } + + [[nodiscard, __gnu__::__nonnull__]] + constexpr int + compare(const _CharT* __str) const noexcept + { return this->compare(basic_string_view{__str}); } + + [[nodiscard, __gnu__::__nonnull__]] + constexpr int + compare(size_type __pos1, size_type __n1, const _CharT* __str) const + { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); } + + [[nodiscard]] + constexpr int + compare(size_type __pos1, size_type __n1, + const _CharT* __str, size_type __n2) const noexcept(false) + { + return this->substr(__pos1, __n1) + .compare(basic_string_view(__str, __n2)); + } + +#ifdef __cpp_lib_starts_ends_with // C++ >= 20 + [[nodiscard]] + constexpr bool + starts_with(basic_string_view __x) const noexcept + { + return _M_len >= __x._M_len + && traits_type::compare(_M_str, __x._M_str, __x._M_len) == 0; + } + + [[nodiscard]] + constexpr bool + starts_with(_CharT __x) const noexcept + { return !this->empty() && traits_type::eq(this->front(), __x); } + + [[nodiscard, __gnu__::__nonnull__]] + constexpr bool + starts_with(const _CharT* __x) const noexcept + { return this->starts_with(basic_string_view(__x)); } + + [[nodiscard]] + constexpr bool + ends_with(basic_string_view __x) const noexcept + { + const auto __len = this->size(); + const auto __xlen = __x.size(); + return __len >= __xlen + && traits_type::compare(end() - __xlen, __x.data(), __xlen) == 0; + } + + [[nodiscard]] + constexpr bool + ends_with(_CharT __x) const noexcept + { return !this->empty() && traits_type::eq(this->back(), __x); } + + [[nodiscard, __gnu__::__nonnull__]] + constexpr bool + ends_with(const _CharT* __x) const noexcept + { return this->ends_with(basic_string_view(__x)); } +#endif // __cpp_lib_starts_ends_with + +#if __cplusplus > 202002L +#if _GLIBCXX_HOSTED && !defined(__cpp_lib_string_contains) + // This FTM is not freestanding as it also implies matching + // support, and is omitted from the freestanding subset. +# error "libstdc++ bug: string_contains not defined when it should be" +#endif // HOSTED + [[nodiscard]] + constexpr bool + contains(basic_string_view __x) const noexcept + { return this->find(__x) != npos; } + + [[nodiscard]] + constexpr bool + contains(_CharT __x) const noexcept + { return this->find(__x) != npos; } + + [[nodiscard, __gnu__::__nonnull__]] + constexpr bool + contains(const _CharT* __x) const noexcept + { return this->find(__x) != npos; } +#endif // C++23 + + // [string.view.find], searching + + [[nodiscard]] + constexpr size_type + find(basic_string_view __str, size_type __pos = 0) const noexcept + { return this->find(__str._M_str, __pos, __str._M_len); } + + [[nodiscard]] + constexpr size_type + find(_CharT __c, size_type __pos = 0) const noexcept; + + [[nodiscard]] + constexpr size_type + find(const _CharT* __str, size_type __pos, size_type __n) const noexcept; + + [[nodiscard, __gnu__::__nonnull__]] + constexpr size_type + find(const _CharT* __str, size_type __pos = 0) const noexcept + { return this->find(__str, __pos, traits_type::length(__str)); } + + [[nodiscard]] + constexpr size_type + rfind(basic_string_view __str, size_type __pos = npos) const noexcept + { return this->rfind(__str._M_str, __pos, __str._M_len); } + + [[nodiscard]] + constexpr size_type + rfind(_CharT __c, size_type __pos = npos) const noexcept; + + [[nodiscard]] + constexpr size_type + rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept; + + [[nodiscard, __gnu__::__nonnull__]] + constexpr size_type + rfind(const _CharT* __str, size_type __pos = npos) const noexcept + { return this->rfind(__str, __pos, traits_type::length(__str)); } + + [[nodiscard]] + constexpr size_type + find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept + { return this->find_first_of(__str._M_str, __pos, __str._M_len); } + + [[nodiscard]] + constexpr size_type + find_first_of(_CharT __c, size_type __pos = 0) const noexcept + { return this->find(__c, __pos); } + + [[nodiscard]] + constexpr size_type + find_first_of(const _CharT* __str, size_type __pos, + size_type __n) const noexcept; + + [[nodiscard, __gnu__::__nonnull__]] + constexpr size_type + find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept + { return this->find_first_of(__str, __pos, traits_type::length(__str)); } + + [[nodiscard]] + constexpr size_type + find_last_of(basic_string_view __str, + size_type __pos = npos) const noexcept + { return this->find_last_of(__str._M_str, __pos, __str._M_len); } + + [[nodiscard]] + constexpr size_type + find_last_of(_CharT __c, size_type __pos=npos) const noexcept + { return this->rfind(__c, __pos); } + + [[nodiscard]] + constexpr size_type + find_last_of(const _CharT* __str, size_type __pos, + size_type __n) const noexcept; + + [[nodiscard, __gnu__::__nonnull__]] + constexpr size_type + find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept + { return this->find_last_of(__str, __pos, traits_type::length(__str)); } + + [[nodiscard]] + constexpr size_type + find_first_not_of(basic_string_view __str, + size_type __pos = 0) const noexcept + { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); } + + [[nodiscard]] + constexpr size_type + find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept; + + [[nodiscard]] + constexpr size_type + find_first_not_of(const _CharT* __str, + size_type __pos, size_type __n) const noexcept; + + [[nodiscard, __gnu__::__nonnull__]] + constexpr size_type + find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept + { + return this->find_first_not_of(__str, __pos, + traits_type::length(__str)); + } + + [[nodiscard]] + constexpr size_type + find_last_not_of(basic_string_view __str, + size_type __pos = npos) const noexcept + { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); } + + [[nodiscard]] + constexpr size_type + find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept; + + [[nodiscard]] + constexpr size_type + find_last_not_of(const _CharT* __str, + size_type __pos, size_type __n) const noexcept; + + [[nodiscard, __gnu__::__nonnull__]] + constexpr size_type + find_last_not_of(const _CharT* __str, + size_type __pos = npos) const noexcept + { + return this->find_last_not_of(__str, __pos, + traits_type::length(__str)); + } + + private: + + static constexpr int + _S_compare(size_type __n1, size_type __n2) noexcept + { + using __limits = __gnu_cxx::__int_traits; + const difference_type __diff = __n1 - __n2; + if (__diff > __limits::__max) + return __limits::__max; + if (__diff < __limits::__min) + return __limits::__min; + return static_cast(__diff); + } + + size_t _M_len; + const _CharT* _M_str; + }; + +#if __cplusplus > 201703L && __cpp_lib_concepts && __cpp_deduction_guides + template _End> + basic_string_view(_It, _End) -> basic_string_view>; + +#if __cplusplus > 202002L + template + basic_string_view(_Range&&) + -> basic_string_view>; +#endif +#endif + + // [string.view.comparison], non-member basic_string_view comparison function + + // Several of these functions use type_identity_t to create a non-deduced + // context, so that only one argument participates in template argument + // deduction and the other argument gets implicitly converted to the deduced + // type (see N3766). + +#if __cpp_lib_three_way_comparison + template + [[nodiscard]] + constexpr bool + operator==(basic_string_view<_CharT, _Traits> __x, + type_identity_t> __y) + noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template + [[nodiscard]] + constexpr auto + operator<=>(basic_string_view<_CharT, _Traits> __x, + __type_identity_t> __y) + noexcept + -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0)) + { return __detail::__char_traits_cmp_cat<_Traits>(__x.compare(__y)); } +#else + template + [[nodiscard]] + constexpr bool + operator==(basic_string_view<_CharT, _Traits> __x, + __type_identity_t> __y) + noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template + [[nodiscard]] + constexpr bool + operator==(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template + [[nodiscard]] + constexpr bool + operator==(__type_identity_t> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template + [[nodiscard]] + constexpr bool + operator!=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return !(__x == __y); } + + template + [[nodiscard]] + constexpr bool + operator!=(basic_string_view<_CharT, _Traits> __x, + __type_identity_t> __y) + noexcept + { return !(__x == __y); } + + template + [[nodiscard]] + constexpr bool + operator!=(__type_identity_t> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return !(__x == __y); } + + template + [[nodiscard]] + constexpr bool + operator< (basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) < 0; } + + template + [[nodiscard]] + constexpr bool + operator< (basic_string_view<_CharT, _Traits> __x, + __type_identity_t> __y) + noexcept + { return __x.compare(__y) < 0; } + + template + [[nodiscard]] + constexpr bool + operator< (__type_identity_t> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) < 0; } + + template + [[nodiscard]] + constexpr bool + operator> (basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) > 0; } + + template + [[nodiscard]] + constexpr bool + operator> (basic_string_view<_CharT, _Traits> __x, + __type_identity_t> __y) + noexcept + { return __x.compare(__y) > 0; } + + template + [[nodiscard]] + constexpr bool + operator> (__type_identity_t> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) > 0; } + + template + [[nodiscard]] + constexpr bool + operator<=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) <= 0; } + + template + [[nodiscard]] + constexpr bool + operator<=(basic_string_view<_CharT, _Traits> __x, + __type_identity_t> __y) + noexcept + { return __x.compare(__y) <= 0; } + + template + [[nodiscard]] + constexpr bool + operator<=(__type_identity_t> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) <= 0; } + + template + [[nodiscard]] + constexpr bool + operator>=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) >= 0; } + + template + [[nodiscard]] + constexpr bool + operator>=(basic_string_view<_CharT, _Traits> __x, + __type_identity_t> __y) + noexcept + { return __x.compare(__y) >= 0; } + + template + [[nodiscard]] + constexpr bool + operator>=(__type_identity_t> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) >= 0; } +#endif // three-way comparison + +#if _GLIBCXX_HOSTED + // [string.view.io], Inserters and extractors + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, + basic_string_view<_CharT,_Traits> __str) + { return __ostream_insert(__os, __str.data(), __str.size()); } +#endif // HOSTED + + // basic_string_view typedef names + + using string_view = basic_string_view; + using wstring_view = basic_string_view; +#ifdef _GLIBCXX_USE_CHAR8_T + using u8string_view = basic_string_view; +#endif + using u16string_view = basic_string_view; + using u32string_view = basic_string_view; + + // [string.view.hash], hash support: + + template + struct hash; + + template<> + struct hash + : public __hash_base + { + [[nodiscard]] + size_t + operator()(const string_view& __str) const noexcept + { return std::_Hash_impl::hash(__str.data(), __str.length()); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; + + template<> + struct hash + : public __hash_base + { + [[nodiscard]] + size_t + operator()(const wstring_view& __s) const noexcept + { return std::_Hash_impl::hash(__s.data(), + __s.length() * sizeof(wchar_t)); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; + +#ifdef _GLIBCXX_USE_CHAR8_T + template<> + struct hash + : public __hash_base + { + [[nodiscard]] + size_t + operator()(const u8string_view& __str) const noexcept + { return std::_Hash_impl::hash(__str.data(), __str.length()); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; +#endif + + template<> + struct hash + : public __hash_base + { + [[nodiscard]] + size_t + operator()(const u16string_view& __s) const noexcept + { return std::_Hash_impl::hash(__s.data(), + __s.length() * sizeof(char16_t)); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; + + template<> + struct hash + : public __hash_base + { + [[nodiscard]] + size_t + operator()(const u32string_view& __s) const noexcept + { return std::_Hash_impl::hash(__s.data(), + __s.length() * sizeof(char32_t)); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; + + inline namespace literals + { + inline namespace string_view_literals + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wliteral-suffix" + inline constexpr basic_string_view + operator""sv(const char* __str, size_t __len) noexcept + { return basic_string_view{__str, __len}; } + + inline constexpr basic_string_view + operator""sv(const wchar_t* __str, size_t __len) noexcept + { return basic_string_view{__str, __len}; } + +#ifdef _GLIBCXX_USE_CHAR8_T + inline constexpr basic_string_view + operator""sv(const char8_t* __str, size_t __len) noexcept + { return basic_string_view{__str, __len}; } +#endif + + inline constexpr basic_string_view + operator""sv(const char16_t* __str, size_t __len) noexcept + { return basic_string_view{__str, __len}; } + + inline constexpr basic_string_view + operator""sv(const char32_t* __str, size_t __len) noexcept + { return basic_string_view{__str, __len}; } + +#pragma GCC diagnostic pop + } // namespace string_literals + } // namespace literals + +#if __cpp_lib_concepts + namespace ranges + { + // Opt-in to borrowed_range concept + template + inline constexpr bool + enable_borrowed_range> = true; + + // Opt-in to view concept + template + inline constexpr bool + enable_view> = true; + } +#endif +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#include + +#endif // __cplusplus <= 201402L + +#endif // _GLIBCXX_EXPERIMENTAL_STRING_VIEW diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string_view.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@string_view.blob new file mode 100644 index 0000000000000000000000000000000000000000..e6809989ec1a1095f1e3db13b54b689c6ef81262 GIT binary patch literal 66594 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 -*- C++ -*- + +// Copyright (C) 2007-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/system_error + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_SYSTEM_ERROR +#define _GLIBCXX_SYSTEM_ERROR 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include // OS-dependent + +#if __cplusplus < 201103L +# include +#else + +#include +#include +#include +#include +#if __cplusplus > 201703L +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** @addtogroup diagnostics + * @{ + */ + + class error_code; + class error_condition; + class system_error; + + /// is_error_code_enum + template + struct is_error_code_enum : public false_type { }; + + /// is_error_condition_enum + template + struct is_error_condition_enum : public false_type { }; + + template<> + struct is_error_condition_enum + : public true_type { }; + +#if __cplusplus > 201402L + template + inline constexpr bool is_error_code_enum_v = + is_error_code_enum<_Tp>::value; + template + inline constexpr bool is_error_condition_enum_v = + is_error_condition_enum<_Tp>::value; +#endif // C++17 + /// @} + +_GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2) + + /** @addtogroup diagnostics + * @{ + */ + + /** Abstract base class for types defining a category of error codes. + * + * An error category defines a context that gives meaning to the integer + * stored in an `error_code` or `error_condition` object. For example, + * the standard `errno` constants such a `EINVAL` and `ENOMEM` are + * associated with the "generic" category and other OS-specific error + * numbers are associated with the "system" category, but a user-defined + * category might give different meanings to the same numerical values. + * + * A user-defined category can override the `equivalent` member functions + * to define correspondence between errors in different categories. + * For example, a category for errors from disk I/O could consider some + * of its error numbers equivalent to ENOSPC and ENOENT in the generic + * category. + * + * @headerfile system_error + * @since C++11 + */ + class error_category + { + public: + constexpr error_category() noexcept = default; + + virtual ~error_category(); + + error_category(const error_category&) = delete; + error_category& operator=(const error_category&) = delete; + + /// A string that identifies the error category. + virtual const char* + name() const noexcept = 0; + + // We need two different virtual functions here, one returning a + // COW string and one returning an SSO string. Their positions in the + // vtable must be consistent for dynamic dispatch to work, but which one + // the name "message()" finds depends on which ABI the caller is using. +#if _GLIBCXX_USE_CXX11_ABI + private: + _GLIBCXX_DEFAULT_ABI_TAG + virtual __cow_string + _M_message(int) const; + + public: + /// A description of the error condition corresponding to the number. + _GLIBCXX_DEFAULT_ABI_TAG + virtual string + message(int) const = 0; +#else + virtual string + message(int) const = 0; + + private: + virtual __sso_string + _M_message(int) const; +#endif + + public: + /// Return an error_condition corresponding to `i` in this category. + virtual error_condition + default_error_condition(int __i) const noexcept; + + /// Test whether `cond` corresponds to `i` for this category. + virtual bool + equivalent(int __i, const error_condition& __cond) const noexcept; + + /// Test whether `code` corresponds to `i` for this category. + virtual bool + equivalent(const error_code& __code, int __i) const noexcept; + + /// An error_category only compares equal to itself. + [[__nodiscard__]] + bool + operator==(const error_category& __other) const noexcept + { return this == &__other; } + + /// Ordered comparison that defines a total order for error categories. +#if __cpp_lib_three_way_comparison + [[nodiscard]] + strong_ordering + operator<=>(const error_category& __rhs) const noexcept + { return std::compare_three_way()(this, &__rhs); } +#else + bool + operator<(const error_category& __other) const noexcept + { return less()(this, &__other); } + + bool + operator!=(const error_category& __other) const noexcept + { return this != &__other; } +#endif + }; + + // DR 890. + + /// Error category for `errno` error codes. + [[__nodiscard__, __gnu__::__const__]] + const error_category& + generic_category() noexcept; + + /// Error category for other error codes defined by the OS. + [[__nodiscard__, __gnu__::__const__]] + const error_category& + system_category() noexcept; + + /// @} + +_GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) + + /** @addtogroup diagnostics + * @{ + */ + +namespace __adl_only +{ + void make_error_code() = delete; + void make_error_condition() = delete; +} + + /** Class error_code + * + * This class is a value type storing an integer error number and a + * category that gives meaning to the error number. Typically this is done + * close the the point where the error happens, to capture the original + * error value. + * + * An `error_code` object can be used to store the original error value + * emitted by some subsystem, with a category relevant to the subsystem. + * For example, errors from POSIX library functions can be represented by + * an `errno` value and the "generic" category, but errors from an HTTP + * library might be represented by an HTTP response status code (e.g. 404) + * and a custom category defined by the library. + * + * @headerfile system_error + * @since C++11 + */ + class error_code + { + template + using _Check + = __enable_if_t::value>; + + public: + error_code() noexcept + : _M_value(0), _M_cat(&system_category()) { } + + error_code(int __v, const error_category& __cat) noexcept + : _M_value(__v), _M_cat(&__cat) { } + + /// Initialize with a user-defined type, by calling make_error_code. + template> + error_code(_ErrorCodeEnum __e) noexcept + { + using __adl_only::make_error_code; + *this = make_error_code(__e); + } + + error_code(const error_code&) = default; + error_code& operator=(const error_code&) = default; + + void + assign(int __v, const error_category& __cat) noexcept + { + _M_value = __v; + _M_cat = &__cat; + } + + void + clear() noexcept + { assign(0, system_category()); } + + /// The error value. + [[__nodiscard__]] + int + value() const noexcept { return _M_value; } + + /// The error category that this error belongs to. + [[__nodiscard__]] + const error_category& + category() const noexcept { return *_M_cat; } + + /// An `error_condition` for this error's category and value. + error_condition + default_error_condition() const noexcept; + + /// The category's description of the value. + _GLIBCXX_DEFAULT_ABI_TAG + string + message() const + { return category().message(value()); } + + /// Test whether `value()` is non-zero. + [[__nodiscard__]] + explicit operator bool() const noexcept + { return _M_value != 0; } + + // DR 804. + private: + int _M_value; + const error_category* _M_cat; + }; + + // C++11 19.5.2.5 non-member functions + + /** Create an `error_code` representing a standard `errc` condition. + * + * The `std::errc` constants correspond to `errno` macros and so use the + * generic category. + * + * @relates error_code + * @since C++11 + */ + [[__nodiscard__]] + inline error_code + make_error_code(errc __e) noexcept + { return error_code(static_cast(__e), generic_category()); } + + /** Ordered comparison for std::error_code. + * + * This defines a total order by comparing the categories, and then + * if they are equal comparing the values. + * + * @relates error_code + * @since C++11 + */ +#if __cpp_lib_three_way_comparison + [[nodiscard]] + inline strong_ordering + operator<=>(const error_code& __lhs, const error_code& __rhs) noexcept + { + if (auto __c = __lhs.category() <=> __rhs.category(); __c != 0) + return __c; + return __lhs.value() <=> __rhs.value(); + } +#else + inline bool + operator<(const error_code& __lhs, const error_code& __rhs) noexcept + { + return (__lhs.category() < __rhs.category() + || (__lhs.category() == __rhs.category() + && __lhs.value() < __rhs.value())); + } +#endif + + /** Write a std::error_code to an ostream. + * + * @relates error_code + * @since C++11 + */ + template + basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e) + { return (__os << __e.category().name() << ':' << __e.value()); } + + /** Class error_condition + * + * This class represents error conditions that may be visible at an API + * boundary. Different `error_code` values that can occur within a library + * or module might map to the same `error_condition`. + * + * An `error_condition` represents something that the program can test for, + * and subsequently take appropriate action. + * + * @headerfile system_error + * @since C++11 + */ + class error_condition + { + template + using _Check + = __enable_if_t::value>; + + public: + /// Initialize with a zero (no error) value and the generic category. + error_condition() noexcept + : _M_value(0), _M_cat(&generic_category()) { } + + /// Initialize with the specified value and category. + error_condition(int __v, const error_category& __cat) noexcept + : _M_value(__v), _M_cat(&__cat) { } + + /// Initialize with a user-defined type, by calling make_error_condition. + template> + error_condition(_ErrorConditionEnum __e) noexcept + { + using __adl_only::make_error_condition; + *this = make_error_condition(__e); + } + + error_condition(const error_condition&) = default; + error_condition& operator=(const error_condition&) = default; + + /// Set the value and category. + void + assign(int __v, const error_category& __cat) noexcept + { + _M_value = __v; + _M_cat = &__cat; + } + + /// Reset the value and category to the default-constructed state. + void + clear() noexcept + { assign(0, generic_category()); } + + // C++11 19.5.3.4 observers + + /// The error value. + [[__nodiscard__]] + int + value() const noexcept { return _M_value; } + + /// The error category that this error belongs to. + [[__nodiscard__]] + const error_category& + category() const noexcept { return *_M_cat; } + + /// The category's description of the value. + _GLIBCXX_DEFAULT_ABI_TAG + string + message() const + { return category().message(value()); } + + /// Test whether `value()` is non-zero. + [[__nodiscard__]] + explicit operator bool() const noexcept + { return _M_value != 0; } + + // DR 804. + private: + int _M_value; + const error_category* _M_cat; + }; + + // C++11 19.5.3.5 non-member functions + + /** Create an `error_condition` representing a standard `errc` condition. + * + * The `std::errc` constants correspond to `errno` macros and so use the + * generic category. + * + * @relates error_condition + * @since C++11 + */ + [[__nodiscard__]] + inline error_condition + make_error_condition(errc __e) noexcept + { return error_condition(static_cast(__e), generic_category()); } + + // C++11 19.5.4 Comparison operators + + /** Equality comparison for std::error_code. + * + * Returns true only if they have the same category and the same value. + * + * @relates error_condition + * @since C++11 + */ + [[__nodiscard__]] + inline bool + operator==(const error_code& __lhs, const error_code& __rhs) noexcept + { + return __lhs.category() == __rhs.category() + && __lhs.value() == __rhs.value(); + } + + /** Equality comparison for std::error_code and std::error_condition. + * + * Uses each category's `equivalent` member function to check whether + * the values correspond to an equivalent error in that category. + * + * @relates error_condition + * @since C++11 + */ + [[__nodiscard__]] + inline bool + operator==(const error_code& __lhs, const error_condition& __rhs) noexcept + { + return __lhs.category().equivalent(__lhs.value(), __rhs) + || __rhs.category().equivalent(__lhs, __rhs.value()); + } + + /** Equality comparison for std::error_condition. + * + * Returns true only if they have the same category and the same value. + * + * @relates error_condition + * @since C++11 + */ + [[__nodiscard__]] + inline bool + operator==(const error_condition& __lhs, + const error_condition& __rhs) noexcept + { + return __lhs.category() == __rhs.category() + && __lhs.value() == __rhs.value(); + } + + /** Ordered comparison for std::error_condition. + * + * This defines a total order by comparing the categories, and then + * if they are equal comparing the values. + * + * @relates error_condition + * @since C++11 + */ +#if __cpp_lib_three_way_comparison + [[nodiscard]] + inline strong_ordering + operator<=>(const error_condition& __lhs, + const error_condition& __rhs) noexcept + { + if (auto __c = __lhs.category() <=> __rhs.category(); __c != 0) + return __c; + return __lhs.value() <=> __rhs.value(); + } +#else + inline bool + operator<(const error_condition& __lhs, + const error_condition& __rhs) noexcept + { + return (__lhs.category() < __rhs.category() + || (__lhs.category() == __rhs.category() + && __lhs.value() < __rhs.value())); + } + + /// @relates error_condition + inline bool + operator==(const error_condition& __lhs, const error_code& __rhs) noexcept + { + return (__rhs.category().equivalent(__rhs.value(), __lhs) + || __lhs.category().equivalent(__rhs, __lhs.value())); + } + + /// @relates error_code + inline bool + operator!=(const error_code& __lhs, const error_code& __rhs) noexcept + { return !(__lhs == __rhs); } + + /// @relates error_code + inline bool + operator!=(const error_code& __lhs, const error_condition& __rhs) noexcept + { return !(__lhs == __rhs); } + + /// @relates error_condition + inline bool + operator!=(const error_condition& __lhs, const error_code& __rhs) noexcept + { return !(__lhs == __rhs); } + + /// @relates error_condition + inline bool + operator!=(const error_condition& __lhs, + const error_condition& __rhs) noexcept + { return !(__lhs == __rhs); } +#endif // three_way_comparison + /// @} + + /** + * @brief An exception type that includes an `error_code` value. + * + * Typically used to report errors from the operating system and other + * low-level APIs. + * + * @headerfile system_error + * @since C++11 + * @ingroup exceptions + */ + class system_error : public std::runtime_error + { + private: + error_code _M_code; + + public: + system_error(error_code __ec = error_code()) + : runtime_error(__ec.message()), _M_code(__ec) { } + + system_error(error_code __ec, const string& __what) + : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { } + + system_error(error_code __ec, const char* __what) + : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { } + + system_error(int __v, const error_category& __ecat, const char* __what) + : system_error(error_code(__v, __ecat), __what) { } + + system_error(int __v, const error_category& __ecat) + : runtime_error(error_code(__v, __ecat).message()), + _M_code(__v, __ecat) { } + + system_error(int __v, const error_category& __ecat, const string& __what) + : runtime_error(__what + (": " + error_code(__v, __ecat).message())), + _M_code(__v, __ecat) { } + +#if __cplusplus >= 201103L + system_error (const system_error &) = default; + system_error &operator= (const system_error &) = default; +#endif + + virtual ~system_error() noexcept; + + const error_code& + code() const noexcept { return _M_code; } + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#ifndef _GLIBCXX_COMPATIBILITY_CXX0X + // DR 1182. + /// std::hash specialization for error_code. + /// @relates error_code + template<> + struct hash + : public __hash_base + { + size_t + operator()(const error_code& __e) const noexcept + { + const size_t __tmp = std::_Hash_impl::hash(__e.value()); + return std::_Hash_impl::__hash_combine(&__e.category(), __tmp); + } + }; +#endif // _GLIBCXX_COMPATIBILITY_CXX0X + +#if __cplusplus >= 201703L + // DR 2686. + /// std::hash specialization for error_condition. + /// @relates error_condition + template<> + struct hash + : public __hash_base + { + size_t + operator()(const error_condition& __e) const noexcept + { + const size_t __tmp = std::_Hash_impl::hash(__e.value()); + return std::_Hash_impl::__hash_combine(&__e.category(), __tmp); + } + }; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // C++11 + +#endif // _GLIBCXX_SYSTEM_ERROR diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@system_error.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@system_error.blob new file mode 100644 index 0000000000000000000000000000000000000000..c03099955a56ae249766bdf10d5d67ee0b78f603 GIT binary patch literal 39383 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 D&7r2Q literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@tuple b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@tuple new file mode 100644 index 0000000..2e69af1 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@tuple @@ -0,0 +1,3034 @@ +// -*- C++ -*- + +// Copyright (C) 2007-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/tuple + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_TUPLE +#define _GLIBCXX_TUPLE 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus < 201103L +# include +#else + +#include // for std::pair +#include // for std::allocator_arg_t +#include // for std::tuple_size etc. +#include // for std::__invoke +#if __cplusplus > 201703L +# include +# include // for std::ranges::subrange +#endif + +#define __glibcxx_want_constexpr_tuple +#define __glibcxx_want_tuple_element_t +#define __glibcxx_want_tuples_by_type +#define __glibcxx_want_apply +#define __glibcxx_want_make_from_tuple +#define __glibcxx_want_ranges_zip +#define __glibcxx_want_tuple_like +#define __glibcxx_want_constrained_equality +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup utilities + * @{ + */ + + template + class tuple; + + /// @cond undocumented + template + struct __is_empty_non_tuple : is_empty<_Tp> { }; + + // Using EBO for elements that are tuples causes ambiguous base errors. + template + struct __is_empty_non_tuple> : false_type { }; + + // Use the Empty Base-class Optimization for empty, non-final types. + template + using __empty_not_final + = __conditional_t<__is_final(_Tp), false_type, + __is_empty_non_tuple<_Tp>>; + + template::value> + struct _Head_base; + +#if __has_cpp_attribute(__no_unique_address__) + template + struct _Head_base<_Idx, _Head, true> + { + constexpr _Head_base() + : _M_head_impl() { } + + constexpr _Head_base(const _Head& __h) + : _M_head_impl(__h) { } + + constexpr _Head_base(const _Head_base&) = default; + constexpr _Head_base(_Head_base&&) = default; + + template + constexpr _Head_base(_UHead&& __h) + : _M_head_impl(std::forward<_UHead>(__h)) { } + + _GLIBCXX20_CONSTEXPR + _Head_base(allocator_arg_t, __uses_alloc0) + : _M_head_impl() { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) + : _M_head_impl(allocator_arg, *__a._M_a) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) + : _M_head_impl(*__a._M_a) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(__uses_alloc0, _UHead&& __uhead) + : _M_head_impl(std::forward<_UHead>(__uhead)) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) + : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) + : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } + + static constexpr _Head& + _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } + + static constexpr const _Head& + _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } + + [[__no_unique_address__]] _Head _M_head_impl; + }; +#else + template + struct _Head_base<_Idx, _Head, true> + : public _Head + { + constexpr _Head_base() + : _Head() { } + + constexpr _Head_base(const _Head& __h) + : _Head(__h) { } + + constexpr _Head_base(const _Head_base&) = default; + constexpr _Head_base(_Head_base&&) = default; + + template + constexpr _Head_base(_UHead&& __h) + : _Head(std::forward<_UHead>(__h)) { } + + _GLIBCXX20_CONSTEXPR + _Head_base(allocator_arg_t, __uses_alloc0) + : _Head() { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) + : _Head(allocator_arg, *__a._M_a) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) + : _Head(*__a._M_a) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(__uses_alloc0, _UHead&& __uhead) + : _Head(std::forward<_UHead>(__uhead)) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) + : _Head(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) + : _Head(std::forward<_UHead>(__uhead), *__a._M_a) { } + + static constexpr _Head& + _M_head(_Head_base& __b) noexcept { return __b; } + + static constexpr const _Head& + _M_head(const _Head_base& __b) noexcept { return __b; } + }; +#endif + + template + struct _Head_base<_Idx, _Head, false> + { + constexpr _Head_base() + : _M_head_impl() { } + + constexpr _Head_base(const _Head& __h) + : _M_head_impl(__h) { } + + constexpr _Head_base(const _Head_base&) = default; + constexpr _Head_base(_Head_base&&) = default; + + template + constexpr _Head_base(_UHead&& __h) + : _M_head_impl(std::forward<_UHead>(__h)) { } + + _GLIBCXX20_CONSTEXPR + _Head_base(allocator_arg_t, __uses_alloc0) + : _M_head_impl() { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) + : _M_head_impl(allocator_arg, *__a._M_a) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) + : _M_head_impl(*__a._M_a) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(__uses_alloc0, _UHead&& __uhead) + : _M_head_impl(std::forward<_UHead>(__uhead)) { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) + : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) + : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } + + static constexpr _Head& + _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } + + static constexpr const _Head& + _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } + + _Head _M_head_impl; + }; + +#if __cpp_lib_tuple_like // >= C++23 + struct __tuple_like_tag_t { explicit __tuple_like_tag_t() = default; }; + + // This forward declaration is used by the operator<=> overload for + // tuple-like types. + template + constexpr _Cat + __tuple_cmp(const _Tp& __t, const _Up& __u, _IndexSeq); +#endif // C++23 + + /** + * Contains the actual implementation of the @c tuple template, stored + * as a recursive inheritance hierarchy from the first element (most + * derived class) to the last (least derived class). The @c Idx + * parameter gives the 0-based index of the element stored at this + * point in the hierarchy; we use it to implement a constant-time + * get() operation. + */ + template + struct _Tuple_impl; + + /** + * Recursive tuple implementation. Here we store the @c Head element + * and derive from a @c Tuple_impl containing the remaining elements + * (which contains the @c Tail). + */ + template + struct _Tuple_impl<_Idx, _Head, _Tail...> + : public _Tuple_impl<_Idx + 1, _Tail...>, + private _Head_base<_Idx, _Head> + { + template friend struct _Tuple_impl; + + typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited; + typedef _Head_base<_Idx, _Head> _Base; + + static constexpr _Head& + _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } + + static constexpr const _Head& + _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } + + static constexpr _Inherited& + _M_tail(_Tuple_impl& __t) noexcept { return __t; } + + static constexpr const _Inherited& + _M_tail(const _Tuple_impl& __t) noexcept { return __t; } + + constexpr _Tuple_impl() + : _Inherited(), _Base() { } + + explicit constexpr + _Tuple_impl(const _Head& __head, const _Tail&... __tail) + : _Inherited(__tail...), _Base(__head) + { } + + template> + explicit constexpr + _Tuple_impl(_UHead&& __head, _UTail&&... __tail) + : _Inherited(std::forward<_UTail>(__tail)...), + _Base(std::forward<_UHead>(__head)) + { } + + constexpr _Tuple_impl(const _Tuple_impl&) = default; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2729. Missing SFINAE on std::pair::operator= + _Tuple_impl& operator=(const _Tuple_impl&) = delete; + + _Tuple_impl(_Tuple_impl&&) = default; + + template + constexpr + _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in) + : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)), + _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) + { } + + template + constexpr + _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) + : _Inherited(std::move + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), + _Base(std::forward<_UHead> + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) + { } + +#if __cpp_lib_ranges_zip // >= C++23 + template + constexpr + _Tuple_impl(_Tuple_impl<_Idx, _UElements...>& __in) + : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)), + _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) + { } + + template + constexpr + _Tuple_impl(const _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) + : _Inherited(std::move + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), + _Base(std::forward + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) + { } +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template + constexpr + _Tuple_impl(__tuple_like_tag_t, _UTuple&& __u, index_sequence<_Is...>) + : _Tuple_impl(std::get<_Is>(std::forward<_UTuple>(__u))...) + { } +#endif // C++23 + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) + : _Inherited(__tag, __a), + _Base(__tag, __use_alloc<_Head>(__a)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + const _Head& __head, const _Tail&... __tail) + : _Inherited(__tag, __a, __tail...), + _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) + { } + + template> + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + _UHead&& __head, _UTail&&... __tail) + : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...), + _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), + std::forward<_UHead>(__head)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + const _Tuple_impl& __in) + : _Inherited(__tag, __a, _M_tail(__in)), + _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + _Tuple_impl&& __in) + : _Inherited(__tag, __a, std::move(_M_tail(__in))), + _Base(__use_alloc<_Head, _Alloc, _Head>(__a), + std::forward<_Head>(_M_head(__in))) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + const _Tuple_impl<_Idx, _UHead, _UTails...>& __in) + : _Inherited(__tag, __a, + _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)), + _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), + _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) + : _Inherited(__tag, __a, std::move + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), + _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), + std::forward<_UHead> + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) + { } + +#if __cpp_lib_ranges_zip // >= C++23 + template + constexpr + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + _Tuple_impl<_Idx, _UHead, _UTails...>& __in) + : _Inherited(__tag, __a, + _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)), + _Base(__use_alloc<_Head, _Alloc, _UHead&>(__a), + _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)) + { } + + template + constexpr + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + const _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) + : _Inherited(__tag, __a, std::move + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), + _Base(__use_alloc<_Head, _Alloc, const _UHead>(__a), + std::forward + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) + { } +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template + constexpr + _Tuple_impl(__tuple_like_tag_t, allocator_arg_t __tag, const _Alloc& __a, + _UTuple&& __u, index_sequence<_Is...>) + : _Tuple_impl(__tag, __a, std::get<_Is>(std::forward<_UTuple>(__u))...) + { } +#endif // C++23 + + template + _GLIBCXX20_CONSTEXPR + void + _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in) + { + _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in); + _M_tail(*this)._M_assign( + _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)); + } + + template + _GLIBCXX20_CONSTEXPR + void + _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) + { + _M_head(*this) = std::forward<_UHead> + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)); + _M_tail(*this)._M_assign( + std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))); + } + +#if __cpp_lib_ranges_zip // >= C++23 + template + constexpr void + _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in) const + { + _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in); + _M_tail(*this)._M_assign( + _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)); + } + + template + constexpr void + _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) const + { + _M_head(*this) = std::forward<_UHead> + (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)); + _M_tail(*this)._M_assign( + std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))); + } +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template + constexpr void + _M_assign(__tuple_like_tag_t __tag, _UTuple&& __u) + { + _M_head(*this) = std::get<_Idx>(std::forward<_UTuple>(__u)); + _M_tail(*this)._M_assign(__tag, std::forward<_UTuple>(__u)); + } + + template + constexpr void + _M_assign(__tuple_like_tag_t __tag, _UTuple&& __u) const + { + _M_head(*this) = std::get<_Idx>(std::forward<_UTuple>(__u)); + _M_tail(*this)._M_assign(__tag, std::forward<_UTuple>(__u)); + } +#endif // C++23 + + protected: + _GLIBCXX20_CONSTEXPR + void + _M_swap(_Tuple_impl& __in) + { + using std::swap; + swap(_M_head(*this), _M_head(__in)); + _Inherited::_M_swap(_M_tail(__in)); + } + +#if __cpp_lib_ranges_zip // >= C++23 + constexpr void + _M_swap(const _Tuple_impl& __in) const + { + using std::swap; + swap(_M_head(*this), _M_head(__in)); + _Inherited::_M_swap(_M_tail(__in)); + } +#endif // C++23 + }; + + // Basis case of inheritance recursion. + template + struct _Tuple_impl<_Idx, _Head> + : private _Head_base<_Idx, _Head> + { + template friend struct _Tuple_impl; + + typedef _Head_base<_Idx, _Head> _Base; + + static constexpr _Head& + _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } + + static constexpr const _Head& + _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } + + constexpr + _Tuple_impl() + : _Base() { } + + explicit constexpr + _Tuple_impl(const _Head& __head) + : _Base(__head) + { } + + template + explicit constexpr + _Tuple_impl(_UHead&& __head) + : _Base(std::forward<_UHead>(__head)) + { } + + constexpr _Tuple_impl(const _Tuple_impl&) = default; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2729. Missing SFINAE on std::pair::operator= + _Tuple_impl& operator=(const _Tuple_impl&) = delete; + +#if _GLIBCXX_INLINE_VERSION + _Tuple_impl(_Tuple_impl&&) = default; +#else + constexpr + _Tuple_impl(_Tuple_impl&& __in) + noexcept(is_nothrow_move_constructible<_Head>::value) + : _Base(static_cast<_Base&&>(__in)) + { } +#endif + + template + constexpr + _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in) + : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) + { } + + template + constexpr + _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in) + : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) + { } + +#if __cpp_lib_ranges_zip // >= C++23 + template + constexpr + _Tuple_impl(_Tuple_impl<_Idx, _UHead>& __in) + : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) + { } + + template + constexpr + _Tuple_impl(const _Tuple_impl<_Idx, _UHead>&& __in) + : _Base(std::forward(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) + { } +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template + constexpr + _Tuple_impl(__tuple_like_tag_t, _UTuple&& __u, index_sequence<0>) + : _Tuple_impl(std::get<0>(std::forward<_UTuple>(__u))) + { } +#endif // C++23 + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) + : _Base(__tag, __use_alloc<_Head>(__a)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t, const _Alloc& __a, + const _Head& __head) + : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), __head) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t, const _Alloc& __a, + _UHead&& __head) + : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), + std::forward<_UHead>(__head)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t, const _Alloc& __a, + const _Tuple_impl& __in) + : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), _M_head(__in)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t, const _Alloc& __a, + _Tuple_impl&& __in) + : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), + std::forward<_Head>(_M_head(__in))) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t, const _Alloc& __a, + const _Tuple_impl<_Idx, _UHead>& __in) + : _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), + _Tuple_impl<_Idx, _UHead>::_M_head(__in)) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t, const _Alloc& __a, + _Tuple_impl<_Idx, _UHead>&& __in) + : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), + std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) + { } + +#if __cpp_lib_ranges_zip // >= C++23 + template + constexpr + _Tuple_impl(allocator_arg_t, const _Alloc& __a, + _Tuple_impl<_Idx, _UHead>& __in) + : _Base(__use_alloc<_Head, _Alloc, _UHead&>(__a), + _Tuple_impl<_Idx, _UHead>::_M_head(__in)) + { } + + template + constexpr + _Tuple_impl(allocator_arg_t, const _Alloc& __a, + const _Tuple_impl<_Idx, _UHead>&& __in) + : _Base(__use_alloc<_Head, _Alloc, const _UHead>(__a), + std::forward(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) + { } +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template + constexpr + _Tuple_impl(__tuple_like_tag_t, allocator_arg_t __tag, const _Alloc& __a, + _UTuple&& __u, index_sequence<0>) + : _Tuple_impl(__tag, __a, std::get<0>(std::forward<_UTuple>(__u))) + { } +#endif // C++23 + + template + _GLIBCXX20_CONSTEXPR + void + _M_assign(const _Tuple_impl<_Idx, _UHead>& __in) + { + _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in); + } + + template + _GLIBCXX20_CONSTEXPR + void + _M_assign(_Tuple_impl<_Idx, _UHead>&& __in) + { + _M_head(*this) + = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)); + } + +#if __cpp_lib_ranges_zip // >= C++23 + template + constexpr void + _M_assign(const _Tuple_impl<_Idx, _UHead>& __in) const + { + _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in); + } + + template + constexpr void + _M_assign(_Tuple_impl<_Idx, _UHead>&& __in) const + { + _M_head(*this) + = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)); + } +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template + constexpr void + _M_assign(__tuple_like_tag_t, _UTuple&& __u) + { _M_head(*this) = std::get<_Idx>(std::forward<_UTuple>(__u)); } + + template + constexpr void + _M_assign(__tuple_like_tag_t, _UTuple&& __u) const + { _M_head(*this) = std::get<_Idx>(std::forward<_UTuple>(__u)); } +#endif // C++23 + + protected: + _GLIBCXX20_CONSTEXPR + void + _M_swap(_Tuple_impl& __in) + { + using std::swap; + swap(_M_head(*this), _M_head(__in)); + } + +#if __cpp_lib_ranges_zip // >= C++23 + constexpr void + _M_swap(const _Tuple_impl& __in) const + { + using std::swap; + swap(_M_head(*this), _M_head(__in)); + } +#endif // C++23 + }; + + // Concept utility functions, reused in conditionally-explicit + // constructors. + template + struct _TupleConstraints + { + template + using __constructible = __and_...>; + + template + using __convertible = __and_...>; + + // Constraint for a non-explicit constructor. + // True iff each Ti in _Types... can be constructed from Ui in _UTypes... + // and every Ui is implicitly convertible to Ti. + template + static constexpr bool __is_implicitly_constructible() + { + return __and_<__constructible<_UTypes...>, + __convertible<_UTypes...> + >::value; + } + + // Constraint for a non-explicit constructor. + // True iff each Ti in _Types... can be constructed from Ui in _UTypes... + // but not every Ui is implicitly convertible to Ti. + template + static constexpr bool __is_explicitly_constructible() + { + return __and_<__constructible<_UTypes...>, + __not_<__convertible<_UTypes...>> + >::value; + } + + static constexpr bool __is_implicitly_default_constructible() + { + return __and_... + >::value; + } + + static constexpr bool __is_explicitly_default_constructible() + { + return __and_..., + __not_<__and_< + std::__is_implicitly_default_constructible<_Types>...> + >>::value; + } + }; + + // Partial specialization used when a required precondition isn't met, + // e.g. when sizeof...(_Types) != sizeof...(_UTypes). + template + struct _TupleConstraints + { + template + static constexpr bool __is_implicitly_constructible() + { return false; } + + template + static constexpr bool __is_explicitly_constructible() + { return false; } + }; + /// @endcond + + /// Primary class template, tuple + template + class tuple : public _Tuple_impl<0, _Elements...> + { + using _Inherited = _Tuple_impl<0, _Elements...>; + +#if __cpp_concepts && __cpp_consteval && __cpp_conditional_explicit // >= C++20 + template + static consteval bool + __constructible() + { + if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) + return __and_v...>; + else + return false; + } + + template + static consteval bool + __nothrow_constructible() + { + if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) + return __and_v...>; + else + return false; + } + + template + static consteval bool + __convertible() + { + if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) + return __and_v...>; + else + return false; + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3121. tuple constructor constraints for UTypes&&... overloads + template + static consteval bool + __disambiguating_constraint() + { + if constexpr (sizeof...(_Elements) != sizeof...(_UTypes)) + return false; + else if constexpr (sizeof...(_Elements) == 1) + { + using _U0 = typename _Nth_type<0, _UTypes...>::type; + return !is_same_v, tuple>; + } + else if constexpr (sizeof...(_Elements) < 4) + { + using _U0 = typename _Nth_type<0, _UTypes...>::type; + if constexpr (!is_same_v, allocator_arg_t>) + return true; + else + { + using _T0 = typename _Nth_type<0, _Elements...>::type; + return is_same_v, allocator_arg_t>; + } + } + return true; + } + + // Return true iff sizeof...(Types) == 1 && tuple_size_v == 1 + // and the single element in Types can be initialized from TUPLE, + // or is the same type as tuple_element_t<0, TUPLE>. + template + static consteval bool + __use_other_ctor() + { + if constexpr (sizeof...(_Elements) != 1) + return false; + else if constexpr (is_same_v, tuple>) + return true; // Should use a copy/move constructor instead. + else + { + using _Tp = typename _Nth_type<0, _Elements...>::type; + if constexpr (is_convertible_v<_Tuple, _Tp>) + return true; + else if constexpr (is_constructible_v<_Tp, _Tuple>) + return true; + } + return false; + } + + template + static consteval bool + __dangles() + { +#if __has_builtin(__reference_constructs_from_temporary) + return (__reference_constructs_from_temporary(_Elements, _Up&&) + || ...); +#else + return false; +#endif + } + +#if __cpp_lib_tuple_like // >= C++23 + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4045. tuple can create dangling references from tuple-like + template + static consteval bool + __dangles_from_tuple_like() + { + return [](index_sequence<_Is...>) { + return __dangles(std::declval<_UTuple>()))...>(); + }(index_sequence_for<_Elements...>{}); + } + + template + static consteval bool + __constructible_from_tuple_like() + { + return [](index_sequence<_Is...>) { + return __constructible(std::declval<_UTuple>()))...>(); + }(index_sequence_for<_Elements...>{}); + } + + template + static consteval bool + __convertible_from_tuple_like() + { + return [](index_sequence<_Is...>) { + return __convertible(std::declval<_UTuple>()))...>(); + }(index_sequence_for<_Elements...>{}); + } +#endif // C++23 + + public: + constexpr + explicit(!(__is_implicitly_default_constructible_v<_Elements> && ...)) + tuple() + noexcept((is_nothrow_default_constructible_v<_Elements> && ...)) + requires (is_default_constructible_v<_Elements> && ...) + : _Inherited() + { } + + // Defined as a template to work around PR libstdc++/116440. + template + constexpr explicit(!__convertible()) + tuple(const _Elements&... __elements) + noexcept(__nothrow_constructible()) + requires (__constructible()) + : _Inherited(__elements...) + { } + + template + requires (__disambiguating_constraint<_UTypes...>()) + && (__constructible<_UTypes...>()) + && (!__dangles<_UTypes...>()) + constexpr explicit(!__convertible<_UTypes...>()) + tuple(_UTypes&&... __u) + noexcept(__nothrow_constructible<_UTypes...>()) + : _Inherited(std::forward<_UTypes>(__u)...) + { } + + template + requires (__disambiguating_constraint<_UTypes...>()) + && (__constructible<_UTypes...>()) + && (__dangles<_UTypes...>()) + tuple(_UTypes&&...) = delete; + + constexpr tuple(const tuple&) = default; + + constexpr tuple(tuple&&) = default; + + template + requires (__constructible()) + && (!__use_other_ctor&>()) + && (!__dangles()) + constexpr explicit(!__convertible()) + tuple(const tuple<_UTypes...>& __u) + noexcept(__nothrow_constructible()) + : _Inherited(static_cast&>(__u)) + { } + + template + requires (__constructible()) + && (!__use_other_ctor&>()) + && (__dangles()) + tuple(const tuple<_UTypes...>&) = delete; + + template + requires (__constructible<_UTypes...>()) + && (!__use_other_ctor>()) + && (!__dangles<_UTypes...>()) + constexpr explicit(!__convertible<_UTypes...>()) + tuple(tuple<_UTypes...>&& __u) + noexcept(__nothrow_constructible<_UTypes...>()) + : _Inherited(static_cast<_Tuple_impl<0, _UTypes...>&&>(__u)) + { } + + template + requires (__constructible<_UTypes...>()) + && (!__use_other_ctor>()) + && (__dangles<_UTypes...>()) + tuple(tuple<_UTypes...>&&) = delete; + +#if __cpp_lib_ranges_zip // >= C++23 + template + requires (__constructible<_UTypes&...>()) + && (!__use_other_ctor&>()) + && (!__dangles<_UTypes&...>()) + constexpr explicit(!__convertible<_UTypes&...>()) + tuple(tuple<_UTypes...>& __u) + noexcept(__nothrow_constructible<_UTypes&...>()) + : _Inherited(static_cast<_Tuple_impl<0, _UTypes...>&>(__u)) + { } + + template + requires (__constructible<_UTypes&...>()) + && (!__use_other_ctor&>()) + && (__dangles<_UTypes&...>()) + tuple(tuple<_UTypes...>&) = delete; + + template + requires (__constructible()) + && (!__use_other_ctor>()) + && (!__dangles()) + constexpr explicit(!__convertible()) + tuple(const tuple<_UTypes...>&& __u) + noexcept(__nothrow_constructible()) + : _Inherited(static_cast&&>(__u)) + { } + + template + requires (__constructible()) + && (!__use_other_ctor>()) + && (__dangles()) + tuple(const tuple<_UTypes...>&&) = delete; +#endif // C++23 + + template + requires (sizeof...(_Elements) == 2) + && (__constructible()) + && (!__dangles()) + constexpr explicit(!__convertible()) + tuple(const pair<_U1, _U2>& __u) + noexcept(__nothrow_constructible()) + : _Inherited(__u.first, __u.second) + { } + + template + requires (sizeof...(_Elements) == 2) + && (__constructible()) + && (__dangles()) + tuple(const pair<_U1, _U2>&) = delete; + + template + requires (sizeof...(_Elements) == 2) + && (__constructible<_U1, _U2>()) + && (!__dangles<_U1, _U2>()) + constexpr explicit(!__convertible<_U1, _U2>()) + tuple(pair<_U1, _U2>&& __u) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(std::forward<_U1>(__u.first), + std::forward<_U2>(__u.second)) + { } + + template + requires (sizeof...(_Elements) == 2) + && (__constructible<_U1, _U2>()) + && (__dangles<_U1, _U2>()) + tuple(pair<_U1, _U2>&&) = delete; + +#if __cpp_lib_ranges_zip // >= C++23 + template + requires (sizeof...(_Elements) == 2) + && (__constructible<_U1&, _U2&>()) + && (!__dangles<_U1&, _U2&>()) + constexpr explicit(!__convertible<_U1&, _U2&>()) + tuple(pair<_U1, _U2>& __u) + noexcept(__nothrow_constructible<_U1&, _U2&>()) + : _Inherited(__u.first, __u.second) + { } + + template + requires (sizeof...(_Elements) == 2) + && (__constructible<_U1&, _U2&>()) + && (__dangles<_U1&, _U2&>()) + tuple(pair<_U1, _U2>&) = delete; + + template + requires (sizeof...(_Elements) == 2) + && (__constructible()) + && (!__dangles()) + constexpr explicit(!__convertible()) + tuple(const pair<_U1, _U2>&& __u) + noexcept(__nothrow_constructible()) + : _Inherited(std::forward(__u.first), + std::forward(__u.second)) + { } + + template + requires (sizeof...(_Elements) == 2) + && (__constructible()) + && (__dangles()) + tuple(const pair<_U1, _U2>&&) = delete; +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template<__eligible_tuple_like _UTuple> + requires (__constructible_from_tuple_like<_UTuple>()) + && (!__use_other_ctor<_UTuple>()) + && (!__dangles_from_tuple_like<_UTuple>()) + constexpr explicit(!__convertible_from_tuple_like<_UTuple>()) + tuple(_UTuple&& __u) + : _Inherited(__tuple_like_tag_t{}, + std::forward<_UTuple>(__u), + index_sequence_for<_Elements...>{}) + { } + + template<__eligible_tuple_like _UTuple> + requires (__constructible_from_tuple_like<_UTuple>()) + && (!__use_other_ctor<_UTuple>()) + && (__dangles_from_tuple_like<_UTuple>()) + tuple(_UTuple&&) = delete; +#endif // C++23 + + // Allocator-extended constructors. + + template + constexpr + explicit(!(__is_implicitly_default_constructible_v<_Elements> && ...)) + tuple(allocator_arg_t __tag, const _Alloc& __a) + requires (is_default_constructible_v<_Elements> && ...) + : _Inherited(__tag, __a) + { } + + template + constexpr explicit(!__convertible()) + tuple(allocator_arg_t __tag, const _Alloc& __a, + const _Elements&... __elements) + requires (__constructible()) + : _Inherited(__tag, __a, __elements...) + { } + + template + requires (__disambiguating_constraint<_UTypes...>()) + && (__constructible<_UTypes...>()) + && (!__dangles<_UTypes...>()) + constexpr explicit(!__convertible<_UTypes...>()) + tuple(allocator_arg_t __tag, const _Alloc& __a, _UTypes&&... __u) + : _Inherited(__tag, __a, std::forward<_UTypes>(__u)...) + { } + + template + requires (__disambiguating_constraint<_UTypes...>()) + && (__constructible<_UTypes...>()) + && (__dangles<_UTypes...>()) + tuple(allocator_arg_t, const _Alloc&, _UTypes&&...) = delete; + + template + constexpr + tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __u) + : _Inherited(__tag, __a, static_cast(__u)) + { } + + template + requires (__constructible<_Elements...>()) + constexpr + tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __u) + : _Inherited(__tag, __a, static_cast<_Inherited&&>(__u)) + { } + + template + requires (__constructible()) + && (!__use_other_ctor&>()) + && (!__dangles()) + constexpr explicit(!__convertible()) + tuple(allocator_arg_t __tag, const _Alloc& __a, + const tuple<_UTypes...>& __u) + : _Inherited(__tag, __a, + static_cast&>(__u)) + { } + + template + requires (__constructible()) + && (!__use_other_ctor&>()) + && (__dangles()) + tuple(allocator_arg_t, const _Alloc&, const tuple<_UTypes...>&) = delete; + + template + requires (__constructible<_UTypes...>()) + && (!__use_other_ctor>()) + && (!__dangles<_UTypes...>()) + constexpr explicit(!__use_other_ctor>()) + tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_UTypes...>&& __u) + : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _UTypes...>&&>(__u)) + { } + + template + requires (__constructible<_UTypes...>()) + && (!__use_other_ctor>()) + && (__dangles<_UTypes...>()) + tuple(allocator_arg_t, const _Alloc&, tuple<_UTypes...>&&) = delete; + +#if __cpp_lib_ranges_zip // >= C++23 + template + requires (__constructible<_UTypes&...>()) + && (!__use_other_ctor&>()) + && (!__dangles<_UTypes&...>()) + constexpr explicit(!__convertible<_UTypes&...>()) + tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_UTypes...>& __u) + : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _UTypes...>&>(__u)) + { } + + template + requires (__constructible<_UTypes&...>()) + && (!__use_other_ctor&>()) + && (__dangles<_UTypes&...>()) + tuple(allocator_arg_t, const _Alloc&, tuple<_UTypes...>&) = delete; + + template + requires (__constructible()) + && (!__use_other_ctor>()) + && (!__dangles()) + constexpr explicit(!__convertible()) + tuple(allocator_arg_t __tag, const _Alloc& __a, + const tuple<_UTypes...>&& __u) + : _Inherited(__tag, __a, + static_cast&&>(__u)) + { } + + template + requires (__constructible()) + && (!__use_other_ctor>()) + && (__dangles()) + tuple(allocator_arg_t, const _Alloc&, const tuple<_UTypes...>&&) = delete; +#endif // C++23 + + template + requires (sizeof...(_Elements) == 2) + && (__constructible()) + && (!__dangles()) + constexpr explicit(!__convertible()) + tuple(allocator_arg_t __tag, const _Alloc& __a, + const pair<_U1, _U2>& __u) + noexcept(__nothrow_constructible()) + : _Inherited(__tag, __a, __u.first, __u.second) + { } + + template + requires (sizeof...(_Elements) == 2) + && (__constructible()) + && (__dangles()) + tuple(allocator_arg_t, const _Alloc&, const pair<_U1, _U2>&) = delete; + + template + requires (sizeof...(_Elements) == 2) + && (__constructible<_U1, _U2>()) + && (!__dangles<_U1, _U2>()) + constexpr explicit(!__convertible<_U1, _U2>()) + tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __u) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(__tag, __a, std::move(__u.first), std::move(__u.second)) + { } + + template + requires (sizeof...(_Elements) == 2) + && (__constructible<_U1, _U2>()) + && (__dangles<_U1, _U2>()) + tuple(allocator_arg_t, const _Alloc&, pair<_U1, _U2>&&) = delete; + +#if __cpp_lib_ranges_zip // >= C++23 + template + requires (sizeof...(_Elements) == 2) + && (__constructible<_U1&, _U2&>()) + && (!__dangles<_U1&, _U2&>()) + constexpr explicit(!__convertible<_U1&, _U2&>()) + tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>& __u) + noexcept(__nothrow_constructible<_U1&, _U2&>()) + : _Inherited(__tag, __a, __u.first, __u.second) + { } + + template + requires (sizeof...(_Elements) == 2) + && (__constructible<_U1&, _U2&>()) + && (__dangles<_U1&, _U2&>()) + tuple(allocator_arg_t, const _Alloc&, pair<_U1, _U2>&) = delete; + + template + requires (sizeof...(_Elements) == 2) + && (__constructible()) + && (!__dangles()) + constexpr explicit(!__convertible()) + tuple(allocator_arg_t __tag, const _Alloc& __a, + const pair<_U1, _U2>&& __u) + noexcept(__nothrow_constructible()) + : _Inherited(__tag, __a, std::move(__u.first), std::move(__u.second)) + { } + + template + requires (sizeof...(_Elements) == 2) + && (__constructible()) + && (__dangles()) + tuple(allocator_arg_t, const _Alloc&, const pair<_U1, _U2>&&) = delete; +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template _UTuple> + requires (__constructible_from_tuple_like<_UTuple>()) + && (!__use_other_ctor<_UTuple>()) + && (!__dangles_from_tuple_like<_UTuple>()) + constexpr explicit(!__convertible_from_tuple_like<_UTuple>()) + tuple(allocator_arg_t __tag, const _Alloc& __a, _UTuple&& __u) + : _Inherited(__tuple_like_tag_t{}, + __tag, __a, std::forward<_UTuple>(__u), + index_sequence_for<_Elements...>{}) + { } + + template _UTuple> + requires (__constructible_from_tuple_like<_UTuple>()) + && (!__use_other_ctor<_UTuple>()) + && (__dangles_from_tuple_like<_UTuple>()) + tuple(allocator_arg_t, const _Alloc&, _UTuple&&) = delete; +#endif // C++23 + +#else // !(concepts && conditional_explicit) + + template + using _TCC = _TupleConstraints<_Cond, _Elements...>; + + // Constraint for non-explicit default constructor + template + using _ImplicitDefaultCtor = __enable_if_t< + _TCC<_Dummy>::__is_implicitly_default_constructible(), + bool>; + + // Constraint for explicit default constructor + template + using _ExplicitDefaultCtor = __enable_if_t< + _TCC<_Dummy>::__is_explicitly_default_constructible(), + bool>; + + // Constraint for non-explicit constructors + template + using _ImplicitCtor = __enable_if_t< + _TCC<_Cond>::template __is_implicitly_constructible<_Args...>(), + bool>; + + // Constraint for non-explicit constructors + template + using _ExplicitCtor = __enable_if_t< + _TCC<_Cond>::template __is_explicitly_constructible<_Args...>(), + bool>; + + // Condition for noexcept-specifier of a constructor. + template + static constexpr bool __nothrow_constructible() + { + return + __and_...>::value; + } + + // Constraint for tuple(_UTypes&&...) where sizeof...(_UTypes) == 1. + template + static constexpr bool __valid_args() + { + return sizeof...(_Elements) == 1 + && !is_same>::value; + } + + // Constraint for tuple(_UTypes&&...) where sizeof...(_UTypes) > 1. + template + static constexpr bool __valid_args() + { return (sizeof...(_Tail) + 2) == sizeof...(_Elements); } + + /* Constraint for constructors with a tuple parameter ensures + * that the constructor is only viable when it would not interfere with + * tuple(UTypes&&...) or tuple(const tuple&) or tuple(tuple&&). + * Such constructors are only viable if: + * either sizeof...(Types) != 1, + * or (when Types... expands to T and UTypes... expands to U) + * is_convertible_v, is_constructible_v, + * and is_same_v are all false. + */ + template> + struct _UseOtherCtor + : false_type + { }; + // If TUPLE is convertible to the single element in *this, + // then TUPLE should match tuple(UTypes&&...) instead. + template + struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Up>> + : __or_, is_constructible<_Tp, _Tuple>>::type + { }; + // If TUPLE and *this each have a single element of the same type, + // then TUPLE should match a copy/move constructor instead. + template + struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Tp>> + : true_type + { }; + + // Return true iff sizeof...(Types) == 1 && tuple_size_v == 1 + // and the single element in Types can be initialized from TUPLE, + // or is the same type as tuple_element_t<0, TUPLE>. + template + static constexpr bool __use_other_ctor() + { return _UseOtherCtor<_Tuple>::value; } + + /// @cond undocumented +#undef __glibcxx_no_dangling_refs +#if __has_builtin(__reference_constructs_from_temporary) \ + && defined _GLIBCXX_DEBUG + // Error if construction from U... would create a dangling ref. +# if __cpp_fold_expressions +# define __glibcxx_dangling_refs(U) \ + (__reference_constructs_from_temporary(_Elements, U) || ...) +# else +# define __glibcxx_dangling_refs(U) \ + __or_<__bool_constant<__reference_constructs_from_temporary(_Elements, U) \ + >...>::value +# endif +# define __glibcxx_no_dangling_refs(U) \ + static_assert(!__glibcxx_dangling_refs(U), \ + "std::tuple constructor creates a dangling reference") +#else +# define __glibcxx_no_dangling_refs(U) +#endif + /// @endcond + + public: + template::value> = true> + constexpr + tuple() + noexcept(__and_...>::value) + : _Inherited() { } + + template::value> = false> + explicit constexpr + tuple() + noexcept(__and_...>::value) + : _Inherited() { } + + template= 1), + _ImplicitCtor<_NotEmpty, const _Elements&...> = true> + constexpr + tuple(const _Elements&... __elements) + noexcept(__nothrow_constructible()) + : _Inherited(__elements...) { } + + template= 1), + _ExplicitCtor<_NotEmpty, const _Elements&...> = false> + explicit constexpr + tuple(const _Elements&... __elements) + noexcept(__nothrow_constructible()) + : _Inherited(__elements...) { } + + template(), + _ImplicitCtor<_Valid, _UElements...> = true> + constexpr + tuple(_UElements&&... __elements) + noexcept(__nothrow_constructible<_UElements...>()) + : _Inherited(std::forward<_UElements>(__elements)...) + { __glibcxx_no_dangling_refs(_UElements&&); } + + template(), + _ExplicitCtor<_Valid, _UElements...> = false> + explicit constexpr + tuple(_UElements&&... __elements) + noexcept(__nothrow_constructible<_UElements...>()) + : _Inherited(std::forward<_UElements>(__elements)...) + { __glibcxx_no_dangling_refs(_UElements&&); } + + constexpr tuple(const tuple&) = default; + + constexpr tuple(tuple&&) = default; + + template&>(), + _ImplicitCtor<_Valid, const _UElements&...> = true> + constexpr + tuple(const tuple<_UElements...>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(static_cast&>(__in)) + { __glibcxx_no_dangling_refs(const _UElements&); } + + template&>(), + _ExplicitCtor<_Valid, const _UElements&...> = false> + explicit constexpr + tuple(const tuple<_UElements...>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(static_cast&>(__in)) + { __glibcxx_no_dangling_refs(const _UElements&); } + + template&&>(), + _ImplicitCtor<_Valid, _UElements...> = true> + constexpr + tuple(tuple<_UElements...>&& __in) + noexcept(__nothrow_constructible<_UElements...>()) + : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) + { __glibcxx_no_dangling_refs(_UElements&&); } + + template&&>(), + _ExplicitCtor<_Valid, _UElements...> = false> + explicit constexpr + tuple(tuple<_UElements...>&& __in) + noexcept(__nothrow_constructible<_UElements...>()) + : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) + { __glibcxx_no_dangling_refs(_UElements&&); } + + // Allocator-extended constructors. + + template::value> = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a) + : _Inherited(__tag, __a) { } + + template::value> = false> + _GLIBCXX20_CONSTEXPR + explicit + tuple(allocator_arg_t __tag, const _Alloc& __a) + : _Inherited(__tag, __a) { } + + template= 1), + _ImplicitCtor<_NotEmpty, const _Elements&...> = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const _Elements&... __elements) + : _Inherited(__tag, __a, __elements...) { } + + template= 1), + _ExplicitCtor<_NotEmpty, const _Elements&...> = false> + _GLIBCXX20_CONSTEXPR + explicit + tuple(allocator_arg_t __tag, const _Alloc& __a, + const _Elements&... __elements) + : _Inherited(__tag, __a, __elements...) { } + + template(), + _ImplicitCtor<_Valid, _UElements...> = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + _UElements&&... __elements) + : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) + { __glibcxx_no_dangling_refs(_UElements&&); } + + template(), + _ExplicitCtor<_Valid, _UElements...> = false> + _GLIBCXX20_CONSTEXPR + explicit + tuple(allocator_arg_t __tag, const _Alloc& __a, + _UElements&&... __elements) + : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) + { __glibcxx_no_dangling_refs(_UElements&&); } + + template + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) + : _Inherited(__tag, __a, static_cast(__in)) { } + + template + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) + : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } + + template&>(), + _ImplicitCtor<_Valid, const _UElements&...> = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const tuple<_UElements...>& __in) + : _Inherited(__tag, __a, + static_cast&>(__in)) + { __glibcxx_no_dangling_refs(const _UElements&); } + + template&>(), + _ExplicitCtor<_Valid, const _UElements&...> = false> + _GLIBCXX20_CONSTEXPR + explicit + tuple(allocator_arg_t __tag, const _Alloc& __a, + const tuple<_UElements...>& __in) + : _Inherited(__tag, __a, + static_cast&>(__in)) + { __glibcxx_no_dangling_refs(const _UElements&); } + + template&&>(), + _ImplicitCtor<_Valid, _UElements...> = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + tuple<_UElements...>&& __in) + : _Inherited(__tag, __a, + static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) + { __glibcxx_no_dangling_refs(_UElements&&); } + + template&&>(), + _ExplicitCtor<_Valid, _UElements...> = false> + _GLIBCXX20_CONSTEXPR + explicit + tuple(allocator_arg_t __tag, const _Alloc& __a, + tuple<_UElements...>&& __in) + : _Inherited(__tag, __a, + static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) + { __glibcxx_no_dangling_refs(_UElements&&); } +#endif // concepts && conditional_explicit + + // tuple assignment + +#if __cpp_concepts && __cpp_consteval // >= C++20 + private: + template + static consteval bool + __assignable() + { + if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) + return __and_v...>; + else + return false; + } + + template + static consteval bool + __nothrow_assignable() + { + if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) + return __and_v...>; + else + return false; + } + +#if __cpp_lib_ranges_zip // >= C++23 + template + static consteval bool + __const_assignable() + { + if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) + return __and_v...>; + else + return false; + } +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template + static consteval bool + __assignable_from_tuple_like() + { + return [](index_sequence<_Is...>) { + return __assignable(std::declval<_UTuple>()))...>(); + }(index_sequence_for<_Elements...>{}); + } + + template + static consteval bool + __const_assignable_from_tuple_like() + { + return [](index_sequence<_Is...>) { + return __const_assignable(std::declval<_UTuple>()))...>(); + }(index_sequence_for<_Elements...>{}); + } +#endif // C++23 + + public: + + tuple& operator=(const tuple& __u) = delete; + + constexpr tuple& + operator=(const tuple& __u) + noexcept(__nothrow_assignable()) + requires (__assignable()) + { + this->_M_assign(__u); + return *this; + } + + constexpr tuple& + operator=(tuple&& __u) + noexcept(__nothrow_assignable<_Elements...>()) + requires (__assignable<_Elements...>()) + { + this->_M_assign(std::move(__u)); + return *this; + } + + template + requires (__assignable()) + constexpr tuple& + operator=(const tuple<_UTypes...>& __u) + noexcept(__nothrow_assignable()) + { + this->_M_assign(__u); + return *this; + } + + template + requires (__assignable<_UTypes...>()) + constexpr tuple& + operator=(tuple<_UTypes...>&& __u) + noexcept(__nothrow_assignable<_UTypes...>()) + { + this->_M_assign(std::move(__u)); + return *this; + } + +#if __cpp_lib_ranges_zip // >= C++23 + constexpr const tuple& + operator=(const tuple& __u) const + requires (__const_assignable()) + { + this->_M_assign(__u); + return *this; + } + + constexpr const tuple& + operator=(tuple&& __u) const + requires (__const_assignable<_Elements...>()) + { + this->_M_assign(std::move(__u)); + return *this; + } + + template + constexpr const tuple& + operator=(const tuple<_UTypes...>& __u) const + requires (__const_assignable()) + { + this->_M_assign(__u); + return *this; + } + + template + constexpr const tuple& + operator=(tuple<_UTypes...>&& __u) const + requires (__const_assignable<_UTypes...>()) + { + this->_M_assign(std::move(__u)); + return *this; + } +#endif // C++23 + + template + requires (__assignable()) + constexpr tuple& + operator=(const pair<_U1, _U2>& __u) + noexcept(__nothrow_assignable()) + { + this->_M_head(*this) = __u.first; + this->_M_tail(*this)._M_head(*this) = __u.second; + return *this; + } + + template + requires (__assignable<_U1, _U2>()) + constexpr tuple& + operator=(pair<_U1, _U2>&& __u) + noexcept(__nothrow_assignable<_U1, _U2>()) + { + this->_M_head(*this) = std::forward<_U1>(__u.first); + this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__u.second); + return *this; + } + +#if __cpp_lib_ranges_zip // >= C++23 + template + requires (__const_assignable()) + constexpr const tuple& + operator=(const pair<_U1, _U2>& __u) const + { + this->_M_head(*this) = __u.first; + this->_M_tail(*this)._M_head(*this) = __u.second; + return *this; + } + + template + requires (__const_assignable<_U1, _U2>()) + constexpr const tuple& + operator=(pair<_U1, _U2>&& __u) const + { + this->_M_head(*this) = std::forward<_U1>(__u.first); + this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__u.second); + return *this; + } +#endif // C++23 + +#if __cpp_lib_tuple_like // >= C++23 + template<__eligible_tuple_like _UTuple> + requires (__assignable_from_tuple_like<_UTuple>()) + constexpr tuple& + operator=(_UTuple&& __u) + { + this->_M_assign(__tuple_like_tag_t{}, std::forward<_UTuple>(__u)); + return *this; + } + + template<__eligible_tuple_like _UTuple> + requires (__const_assignable_from_tuple_like<_UTuple>()) + constexpr const tuple& + operator=(_UTuple&& __u) const + { + this->_M_assign(__tuple_like_tag_t{}, std::forward<_UTuple>(__u)); + return *this; + } + + template<__tuple_like _UTuple> + requires (!__is_tuple_v<_UTuple>) + friend constexpr bool + operator== [[nodiscard]] (const tuple& __t, const _UTuple& __u) + { + static_assert(sizeof...(_Elements) == tuple_size_v<_UTuple>, + "tuple objects can only be compared if they have equal sizes."); + return [&](index_sequence<_Is...>) { + return (bool(std::get<_Is>(__t) == std::get<_Is>(__u)) + && ...); + }(index_sequence_for<_Elements...>{}); + } + + template<__tuple_like _UTuple, + typename = make_index_sequence>> + struct __tuple_like_common_comparison_category; + + template<__tuple_like _UTuple, size_t... _Is> + requires requires + { typename void_t<__detail::__synth3way_t<_Elements, tuple_element_t<_Is, _UTuple>>...>; } + struct __tuple_like_common_comparison_category<_UTuple, index_sequence<_Is...>> + { + using type = common_comparison_category_t + <__detail::__synth3way_t<_Elements, tuple_element_t<_Is, _UTuple>>...>; + }; + + template<__tuple_like _UTuple> + requires (!__is_tuple_v<_UTuple>) + friend constexpr typename __tuple_like_common_comparison_category<_UTuple>::type + operator<=>(const tuple& __t, const _UTuple& __u) + { + using _Cat = typename __tuple_like_common_comparison_category<_UTuple>::type; + return std::__tuple_cmp<_Cat>(__t, __u, index_sequence_for<_Elements...>()); + } +#endif // C++23 + +#else // ! (concepts && consteval) + + private: + template + static constexpr + __enable_if_t + __assignable() + { return __and_...>::value; } + + // Condition for noexcept-specifier of an assignment operator. + template + static constexpr bool __nothrow_assignable() + { + return + __and_...>::value; + } + + public: + + _GLIBCXX20_CONSTEXPR + tuple& + operator=(__conditional_t<__assignable(), + const tuple&, + const __nonesuch&> __in) + noexcept(__nothrow_assignable()) + { + this->_M_assign(__in); + return *this; + } + + _GLIBCXX20_CONSTEXPR + tuple& + operator=(__conditional_t<__assignable<_Elements...>(), + tuple&&, + __nonesuch&&> __in) + noexcept(__nothrow_assignable<_Elements...>()) + { + this->_M_assign(std::move(__in)); + return *this; + } + + template + _GLIBCXX20_CONSTEXPR + __enable_if_t<__assignable(), tuple&> + operator=(const tuple<_UElements...>& __in) + noexcept(__nothrow_assignable()) + { + this->_M_assign(__in); + return *this; + } + + template + _GLIBCXX20_CONSTEXPR + __enable_if_t<__assignable<_UElements...>(), tuple&> + operator=(tuple<_UElements...>&& __in) + noexcept(__nothrow_assignable<_UElements...>()) + { + this->_M_assign(std::move(__in)); + return *this; + } +#endif // concepts && consteval + + // tuple swap + _GLIBCXX20_CONSTEXPR + void + swap(tuple& __in) + noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value) + { _Inherited::_M_swap(__in); } + +#if __cpp_lib_ranges_zip // >= C++23 + // As an extension, we constrain the const swap member function in order + // to continue accepting explicit instantiation of tuples whose elements + // are not all const swappable. Without this constraint, such an + // explicit instantiation would also instantiate the ill-formed body of + // this function and yield a hard error. This constraint shouldn't + // affect the behavior of valid programs. + constexpr void + swap(const tuple& __in) const + noexcept(__and_v<__is_nothrow_swappable...>) + requires (is_swappable_v && ...) + { _Inherited::_M_swap(__in); } +#endif // C++23 + }; + +#if __cpp_deduction_guides >= 201606 + template + tuple(_UTypes...) -> tuple<_UTypes...>; + template + tuple(pair<_T1, _T2>) -> tuple<_T1, _T2>; + template + tuple(allocator_arg_t, _Alloc, _UTypes...) -> tuple<_UTypes...>; + template + tuple(allocator_arg_t, _Alloc, pair<_T1, _T2>) -> tuple<_T1, _T2>; + template + tuple(allocator_arg_t, _Alloc, tuple<_UTypes...>) -> tuple<_UTypes...>; +#endif + + // Explicit specialization, zero-element tuple. + template<> + class tuple<> + { + public: + _GLIBCXX20_CONSTEXPR + void swap(tuple&) noexcept { /* no-op */ } +#if __cpp_lib_ranges_zip // >= C++23 + constexpr void swap(const tuple&) const noexcept { /* no-op */ } +#endif + // We need the default since we're going to define no-op + // allocator constructors. + tuple() = default; + // No-op allocator constructors. + template + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t, const _Alloc&) noexcept { } + template + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t, const _Alloc&, const tuple&) noexcept { } + }; + +#if !(__cpp_concepts && __cpp_consteval && __cpp_conditional_explicit) // !C++20 + /// Partial specialization, 2-element tuple. + /// Includes construction and assignment from a pair. + template + class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2> + { + typedef _Tuple_impl<0, _T1, _T2> _Inherited; + + // Constraint for non-explicit default constructor + template + using _ImplicitDefaultCtor = __enable_if_t< + _TupleConstraints<_Dummy, _U1, _U2>:: + __is_implicitly_default_constructible(), + bool>; + + // Constraint for explicit default constructor + template + using _ExplicitDefaultCtor = __enable_if_t< + _TupleConstraints<_Dummy, _U1, _U2>:: + __is_explicitly_default_constructible(), + bool>; + + template + using _TCC = _TupleConstraints<_Dummy, _T1, _T2>; + + // Constraint for non-explicit constructors + template + using _ImplicitCtor = __enable_if_t< + _TCC<_Cond>::template __is_implicitly_constructible<_U1, _U2>(), + bool>; + + // Constraint for non-explicit constructors + template + using _ExplicitCtor = __enable_if_t< + _TCC<_Cond>::template __is_explicitly_constructible<_U1, _U2>(), + bool>; + + template + static constexpr bool __assignable() + { + return __and_, + is_assignable<_T2&, _U2>>::value; + } + + template + static constexpr bool __nothrow_assignable() + { + return __and_, + is_nothrow_assignable<_T2&, _U2>>::value; + } + + template + static constexpr bool __nothrow_constructible() + { + return __and_, + is_nothrow_constructible<_T2, _U2>>::value; + } + + static constexpr bool __nothrow_default_constructible() + { + return __and_, + is_nothrow_default_constructible<_T2>>::value; + } + + template + static constexpr bool __is_alloc_arg() + { return is_same<__remove_cvref_t<_U1>, allocator_arg_t>::value; } + + /// @cond undocumented +#undef __glibcxx_no_dangling_refs + // Error if construction from _U1 and _U2 would create a dangling ref. +#if __has_builtin(__reference_constructs_from_temporary) \ + && defined _GLIBCXX_DEBUG +# define __glibcxx_no_dangling_refs(_U1, _U2) \ + static_assert(!__reference_constructs_from_temporary(_T1, _U1) \ + && !__reference_constructs_from_temporary(_T2, _U2), \ + "std::tuple constructor creates a dangling reference") +#else +# define __glibcxx_no_dangling_refs(_U1, _U2) +#endif + /// @endcond + + public: + template = true> + constexpr + tuple() + noexcept(__nothrow_default_constructible()) + : _Inherited() { } + + template = false> + explicit constexpr + tuple() + noexcept(__nothrow_default_constructible()) + : _Inherited() { } + + template = true> + constexpr + tuple(const _T1& __a1, const _T2& __a2) + noexcept(__nothrow_constructible()) + : _Inherited(__a1, __a2) { } + + template = false> + explicit constexpr + tuple(const _T1& __a1, const _T2& __a2) + noexcept(__nothrow_constructible()) + : _Inherited(__a1, __a2) { } + + template(), _U1, _U2> = true> + constexpr + tuple(_U1&& __a1, _U2&& __a2) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template(), _U1, _U2> = false> + explicit constexpr + tuple(_U1&& __a1, _U2&& __a2) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + constexpr tuple(const tuple&) = default; + + constexpr tuple(tuple&&) = default; + + template = true> + constexpr + tuple(const tuple<_U1, _U2>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(static_cast&>(__in)) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + + template = false> + explicit constexpr + tuple(const tuple<_U1, _U2>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(static_cast&>(__in)) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + + template = true> + constexpr + tuple(tuple<_U1, _U2>&& __in) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template = false> + explicit constexpr + tuple(tuple<_U1, _U2>&& __in) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template = true> + constexpr + tuple(const pair<_U1, _U2>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(__in.first, __in.second) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + + template = false> + explicit constexpr + tuple(const pair<_U1, _U2>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(__in.first, __in.second) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + + template = true> + constexpr + tuple(pair<_U1, _U2>&& __in) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(std::forward<_U1>(__in.first), + std::forward<_U2>(__in.second)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template = false> + explicit constexpr + tuple(pair<_U1, _U2>&& __in) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(std::forward<_U1>(__in.first), + std::forward<_U2>(__in.second)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + // Allocator-extended constructors. + + template::value, _T1, _T2> = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a) + : _Inherited(__tag, __a) { } + + template::value, _T1, _T2> = false> + _GLIBCXX20_CONSTEXPR + explicit + tuple(allocator_arg_t __tag, const _Alloc& __a) + : _Inherited(__tag, __a) { } + + template = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const _T1& __a1, const _T2& __a2) + : _Inherited(__tag, __a, __a1, __a2) { } + + template = false> + explicit + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const _T1& __a1, const _T2& __a2) + : _Inherited(__tag, __a, __a1, __a2) { } + + template = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2) + : _Inherited(__tag, __a, std::forward<_U1>(__a1), + std::forward<_U2>(__a2)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template = false> + explicit + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + _U1&& __a1, _U2&& __a2) + : _Inherited(__tag, __a, std::forward<_U1>(__a1), + std::forward<_U2>(__a2)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) + : _Inherited(__tag, __a, static_cast(__in)) { } + + template + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) + : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } + + template = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const tuple<_U1, _U2>& __in) + : _Inherited(__tag, __a, + static_cast&>(__in)) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + + template = false> + explicit + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const tuple<_U1, _U2>& __in) + : _Inherited(__tag, __a, + static_cast&>(__in)) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + + template = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in) + : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template = false> + explicit + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in) + : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const pair<_U1, _U2>& __in) + : _Inherited(__tag, __a, __in.first, __in.second) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + + template = false> + explicit + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const pair<_U1, _U2>& __in) + : _Inherited(__tag, __a, __in.first, __in.second) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + + template = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in) + : _Inherited(__tag, __a, std::forward<_U1>(__in.first), + std::forward<_U2>(__in.second)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template = false> + explicit + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in) + : _Inherited(__tag, __a, std::forward<_U1>(__in.first), + std::forward<_U2>(__in.second)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + // Tuple assignment. + + _GLIBCXX20_CONSTEXPR + tuple& + operator=(__conditional_t<__assignable(), + const tuple&, + const __nonesuch&> __in) + noexcept(__nothrow_assignable()) + { + this->_M_assign(__in); + return *this; + } + + _GLIBCXX20_CONSTEXPR + tuple& + operator=(__conditional_t<__assignable<_T1, _T2>(), + tuple&&, + __nonesuch&&> __in) + noexcept(__nothrow_assignable<_T1, _T2>()) + { + this->_M_assign(std::move(__in)); + return *this; + } + + template + _GLIBCXX20_CONSTEXPR + __enable_if_t<__assignable(), tuple&> + operator=(const tuple<_U1, _U2>& __in) + noexcept(__nothrow_assignable()) + { + this->_M_assign(__in); + return *this; + } + + template + _GLIBCXX20_CONSTEXPR + __enable_if_t<__assignable<_U1, _U2>(), tuple&> + operator=(tuple<_U1, _U2>&& __in) + noexcept(__nothrow_assignable<_U1, _U2>()) + { + this->_M_assign(std::move(__in)); + return *this; + } + + template + _GLIBCXX20_CONSTEXPR + __enable_if_t<__assignable(), tuple&> + operator=(const pair<_U1, _U2>& __in) + noexcept(__nothrow_assignable()) + { + this->_M_head(*this) = __in.first; + this->_M_tail(*this)._M_head(*this) = __in.second; + return *this; + } + + template + _GLIBCXX20_CONSTEXPR + __enable_if_t<__assignable<_U1, _U2>(), tuple&> + operator=(pair<_U1, _U2>&& __in) + noexcept(__nothrow_assignable<_U1, _U2>()) + { + this->_M_head(*this) = std::forward<_U1>(__in.first); + this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second); + return *this; + } + + _GLIBCXX20_CONSTEXPR + void + swap(tuple& __in) + noexcept(__and_<__is_nothrow_swappable<_T1>, + __is_nothrow_swappable<_T2>>::value) + { _Inherited::_M_swap(__in); } + }; +#endif // concepts && conditional_explicit + + /// class tuple_size + template + struct tuple_size> + : public integral_constant { }; + +#if __cplusplus >= 201703L + template + inline constexpr size_t tuple_size_v> + = sizeof...(_Types); + + template + inline constexpr size_t tuple_size_v> + = sizeof...(_Types); +#endif + + /// Trait to get the Ith element type from a tuple. + template + struct tuple_element<__i, tuple<_Types...>> + { + static_assert(__i < sizeof...(_Types), "tuple index must be in range"); + + using type = typename _Nth_type<__i, _Types...>::type; + }; + + template + constexpr _Head& + __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept + { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } + + template + constexpr const _Head& + __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept + { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } + + // Deleted overload to improve diagnostics for invalid indices + template + __enable_if_t<(__i >= sizeof...(_Types))> + __get_helper(const tuple<_Types...>&) = delete; + + /// Return a reference to the ith element of a tuple. + template + constexpr __tuple_element_t<__i, tuple<_Elements...>>& + get(tuple<_Elements...>& __t) noexcept + { return std::__get_helper<__i>(__t); } + + /// Return a const reference to the ith element of a const tuple. + template + constexpr const __tuple_element_t<__i, tuple<_Elements...>>& + get(const tuple<_Elements...>& __t) noexcept + { return std::__get_helper<__i>(__t); } + + /// Return an rvalue reference to the ith element of a tuple rvalue. + template + constexpr __tuple_element_t<__i, tuple<_Elements...>>&& + get(tuple<_Elements...>&& __t) noexcept + { + typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; + return std::forward<__element_type>(std::__get_helper<__i>(__t)); + } + + /// Return a const rvalue reference to the ith element of a const tuple rvalue. + template + constexpr const __tuple_element_t<__i, tuple<_Elements...>>&& + get(const tuple<_Elements...>&& __t) noexcept + { + typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; + return std::forward(std::__get_helper<__i>(__t)); + } + + /// @cond undocumented + // Deleted overload chosen for invalid indices. + template + constexpr __enable_if_t<(__i >= sizeof...(_Elements))> + get(const tuple<_Elements...>&) = delete; + /// @endcond + +#ifdef __cpp_lib_tuples_by_type // C++ >= 14 + /// Return a reference to the unique element of type _Tp of a tuple. + template + constexpr _Tp& + get(tuple<_Types...>& __t) noexcept + { + constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); + static_assert(__idx < sizeof...(_Types), + "the type T in std::get must occur exactly once in the tuple"); + return std::__get_helper<__idx>(__t); + } + + /// Return a reference to the unique element of type _Tp of a tuple rvalue. + template + constexpr _Tp&& + get(tuple<_Types...>&& __t) noexcept + { + constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); + static_assert(__idx < sizeof...(_Types), + "the type T in std::get must occur exactly once in the tuple"); + return std::forward<_Tp>(std::__get_helper<__idx>(__t)); + } + + /// Return a const reference to the unique element of type _Tp of a tuple. + template + constexpr const _Tp& + get(const tuple<_Types...>& __t) noexcept + { + constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); + static_assert(__idx < sizeof...(_Types), + "the type T in std::get must occur exactly once in the tuple"); + return std::__get_helper<__idx>(__t); + } + + /// Return a const reference to the unique element of type _Tp of + /// a const tuple rvalue. + template + constexpr const _Tp&& + get(const tuple<_Types...>&& __t) noexcept + { + constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); + static_assert(__idx < sizeof...(_Types), + "the type T in std::get must occur exactly once in the tuple"); + return std::forward(std::__get_helper<__idx>(__t)); + } +#endif + +#if __cpp_lib_three_way_comparison + template + requires (sizeof...(_Tps) == sizeof...(_Ups)) + && (requires (const _Tps& __t, const _Ups& __u) { + { __t == __u } -> __detail::__boolean_testable; + } && ...) + constexpr bool + operator== [[nodiscard]] (const tuple<_Tps...>& __t, + const tuple<_Ups...>& __u) + { + return [&](index_sequence<_Inds...>) { + // Fold == over the tuples until non-equal elements are found. + return (bool(std::get<_Inds>(__t) == std::get<_Inds>(__u)) && ...); + }(index_sequence_for<_Tps...>{}); + } + + template + [[nodiscard]] + constexpr _Cat + __tuple_cmp(const _Tp& __t, const _Up& __u, _IndexSeq __indices) + { + _Cat __c = _Cat::equivalent; + + // Set __c to the comparison result of two corresponding elements. + // Return true they are equivalent. + auto __cmp = [&](integral_constant) { + __c = __detail::__synth3way(std::get<_Ind>(__t), std::get<_Ind>(__u)); + return __c == 0; + }; + + [&](index_sequence<_Inds...>) { + // Fold __cmp over the tuples until non-equivalent elements are found. + (void)(__cmp(integral_constant{}) && ...); + }(__indices); + + return __c; + } + + template + requires (sizeof...(_Tps) == sizeof...(_Ups)) + && (requires { typename __detail::__synth3way_t<_Tps, _Ups>; } && ...) + constexpr + common_comparison_category_t<__detail::__synth3way_t<_Tps, _Ups>...> + operator<=> [[nodiscard]] (const tuple<_Tps...>& __t, + const tuple<_Ups...>& __u) + { + using _Cat + = common_comparison_category_t<__detail::__synth3way_t<_Tps, _Ups>...>; + return std::__tuple_cmp<_Cat>(__t, __u, index_sequence_for<_Tps...>()); + } +#else + + // This class performs the comparison operations on tuples + template + struct __tuple_compare + { + static constexpr bool + __eq(const _Tp& __t, const _Up& __u) + { + return bool(std::get<__i>(__t) == std::get<__i>(__u)) + && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u); + } + + static constexpr bool + __less(const _Tp& __t, const _Up& __u) + { + return bool(std::get<__i>(__t) < std::get<__i>(__u)) + || (!bool(std::get<__i>(__u) < std::get<__i>(__t)) + && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u)); + } + }; + + template + struct __tuple_compare<_Tp, _Up, __size, __size> + { + static constexpr bool + __eq(const _Tp&, const _Up&) { return true; } + + static constexpr bool + __less(const _Tp&, const _Up&) { return false; } + }; + + template + _GLIBCXX_NODISCARD + constexpr bool + operator==(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { + static_assert(sizeof...(_TElements) == sizeof...(_UElements), + "tuple objects can only be compared if they have equal sizes."); + using __compare = __tuple_compare, + tuple<_UElements...>, + 0, sizeof...(_TElements)>; + return __compare::__eq(__t, __u); + } + + template + _GLIBCXX_NODISCARD + constexpr bool + operator<(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { + static_assert(sizeof...(_TElements) == sizeof...(_UElements), + "tuple objects can only be compared if they have equal sizes."); + using __compare = __tuple_compare, + tuple<_UElements...>, + 0, sizeof...(_TElements)>; + return __compare::__less(__t, __u); + } + + template + _GLIBCXX_NODISCARD + constexpr bool + operator!=(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return !(__t == __u); } + + template + _GLIBCXX_NODISCARD + constexpr bool + operator>(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return __u < __t; } + + template + _GLIBCXX_NODISCARD + constexpr bool + operator<=(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return !(__u < __t); } + + template + _GLIBCXX_NODISCARD + constexpr bool + operator>=(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return !(__t < __u); } +#endif // three_way_comparison + + // NB: DR 705. + /// Create a tuple containing copies of the arguments + template + constexpr tuple::__type...> + make_tuple(_Elements&&... __args) + { + typedef tuple::__type...> + __result_type; + return __result_type(std::forward<_Elements>(__args)...); + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2275. Why is forward_as_tuple not constexpr? + /// Create a tuple of lvalue or rvalue references to the arguments + template + constexpr tuple<_Elements&&...> + forward_as_tuple(_Elements&&... __args) noexcept + { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); } + + /// @cond undocumented + template + struct __make_tuple_impl; + + template + struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm> + : __make_tuple_impl<_Idx + 1, + tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>, + _Tuple, _Nm> + { }; + + template + struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm> + { + typedef tuple<_Tp...> __type; + }; + + template + struct __do_make_tuple + : __make_tuple_impl<0, tuple<>, _Tuple, tuple_size<_Tuple>::value> + { }; + + // Returns the std::tuple equivalent of a tuple-like type. + template + struct __make_tuple + : public __do_make_tuple<__remove_cvref_t<_Tuple>> + { }; + + // Combines several std::tuple's into a single one. + template + struct __combine_tuples; + + template<> + struct __combine_tuples<> + { + typedef tuple<> __type; + }; + + template + struct __combine_tuples> + { + typedef tuple<_Ts...> __type; + }; + + template + struct __combine_tuples, tuple<_T2s...>, _Rem...> + { + typedef typename __combine_tuples, + _Rem...>::__type __type; + }; + + // Computes the result type of tuple_cat given a set of tuple-like types. + template + struct __tuple_cat_result + { + typedef typename __combine_tuples + ::__type...>::__type __type; + }; + + // Helper to determine the index set for the first tuple-like + // type of a given set. + template + struct __make_1st_indices; + + template<> + struct __make_1st_indices<> + { + typedef _Index_tuple<> __type; + }; + + template + struct __make_1st_indices<_Tp, _Tpls...> + { + typedef typename _Build_index_tuple::type>::value>::__type __type; + }; + + // Performs the actual concatenation by step-wise expanding tuple-like + // objects into the elements, which are finally forwarded into the + // result tuple. + template + struct __tuple_concater; + + template + struct __tuple_concater<_Ret, _Index_tuple<_Is...>, _Tp, _Tpls...> + { + template + static constexpr _Ret + _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us) + { + typedef typename __make_1st_indices<_Tpls...>::__type __idx; + typedef __tuple_concater<_Ret, __idx, _Tpls...> __next; + return __next::_S_do(std::forward<_Tpls>(__tps)..., + std::forward<_Us>(__us)..., + std::get<_Is>(std::forward<_Tp>(__tp))...); + } + }; + + template + struct __tuple_concater<_Ret, _Index_tuple<>> + { + template + static constexpr _Ret + _S_do(_Us&&... __us) + { + return _Ret(std::forward<_Us>(__us)...); + } + }; + + template + struct __is_tuple_like_impl> : true_type + { }; + /// @endcond + + /// Create a `tuple` containing all elements from multiple tuple-like objects +#if __cpp_lib_tuple_like // >= C++23 + template<__tuple_like... _Tpls> +#else + template...>::value>::type> +#endif + constexpr auto + tuple_cat(_Tpls&&... __tpls) + -> typename __tuple_cat_result<_Tpls...>::__type + { + typedef typename __tuple_cat_result<_Tpls...>::__type __ret; + typedef typename __make_1st_indices<_Tpls...>::__type __idx; + typedef __tuple_concater<__ret, __idx, _Tpls...> __concater; + return __concater::_S_do(std::forward<_Tpls>(__tpls)...); + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2301. Why is tie not constexpr? + /// Return a tuple of lvalue references bound to the arguments + template + constexpr tuple<_Elements&...> + tie(_Elements&... __args) noexcept + { return tuple<_Elements&...>(__args...); } + + /// Exchange the values of two tuples + template + _GLIBCXX20_CONSTEXPR + inline +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + // Constrained free swap overload, see p0185r1 + typename enable_if<__and_<__is_swappable<_Elements>...>::value + >::type +#else + void +#endif + swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y) + noexcept(noexcept(__x.swap(__y))) + { __x.swap(__y); } + +#if __cpp_lib_ranges_zip // >= C++23 + template + requires (is_swappable_v && ...) + constexpr void + swap(const tuple<_Elements...>& __x, const tuple<_Elements...>& __y) + noexcept(noexcept(__x.swap(__y))) + { __x.swap(__y); } +#endif // C++23 + +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + /// Exchange the values of two const tuples (if const elements can be swapped) + template + _GLIBCXX20_CONSTEXPR + typename enable_if...>::value>::type + swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete; +#endif + + /// Partial specialization for tuples + template + struct uses_allocator, _Alloc> : true_type { }; + + // See stl_pair.h... + /** "piecewise construction" using a tuple of arguments for each member. + * + * @param __first Arguments for the first member of the pair. + * @param __second Arguments for the second member of the pair. + * + * The elements of each tuple will be used as the constructor arguments + * for the data members of the pair. + */ + template + template + _GLIBCXX20_CONSTEXPR + inline + pair<_T1, _T2>:: + pair(piecewise_construct_t, + tuple<_Args1...> __first, tuple<_Args2...> __second) + : pair(__first, __second, + typename _Build_index_tuple::__type(), + typename _Build_index_tuple::__type()) + { } + + template + template + _GLIBCXX20_CONSTEXPR inline + pair<_T1, _T2>:: + pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2, + _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>) + : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...), + second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...) + { } + +#if defined(__cpp_lib_apply) || defined(__cpp_lib_make_from_tuple) // C++ >= 17 + // Unpack a std::tuple into a type trait and use its value. + // For cv std::tuple<_Up> the result is _Trait<_Tp, cv _Up...>::value. + // For cv std::tuple<_Up>& the result is _Trait<_Tp, cv _Up&...>::value. + // Otherwise the result is false (because we don't know if std::get throws). + template class _Trait, typename _Tp, typename _Tuple> + inline constexpr bool __unpack_std_tuple = false; + + template class _Trait, typename _Tp, typename... _Up> + inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>> + = _Trait<_Tp, _Up...>::value; + + template class _Trait, typename _Tp, typename... _Up> + inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>&> + = _Trait<_Tp, _Up&...>::value; + + template class _Trait, typename _Tp, typename... _Up> + inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>> + = _Trait<_Tp, const _Up...>::value; + + template class _Trait, typename _Tp, typename... _Up> + inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>&> + = _Trait<_Tp, const _Up&...>::value; +#endif + +#ifdef __cpp_lib_apply // C++ >= 17 + template + constexpr decltype(auto) + __apply_impl(_Fn&& __f, _Tuple&& __t, index_sequence<_Idx...>) + { + return std::__invoke(std::forward<_Fn>(__f), + std::get<_Idx>(std::forward<_Tuple>(__t))...); + } + +#if __cpp_lib_tuple_like // >= C++23 + template +#else + template +#endif + constexpr decltype(auto) + apply(_Fn&& __f, _Tuple&& __t) + noexcept(__unpack_std_tuple) + { + using _Indices + = make_index_sequence>>; + return std::__apply_impl(std::forward<_Fn>(__f), + std::forward<_Tuple>(__t), + _Indices{}); + } +#endif + +#ifdef __cpp_lib_make_from_tuple // C++ >= 17 + template + constexpr _Tp + __make_from_tuple_impl(_Tuple&& __t, index_sequence<_Idx...>) + { return _Tp(std::get<_Idx>(std::forward<_Tuple>(__t))...); } + +#if __cpp_lib_tuple_like // >= C++23 + template +#else + template +#endif + constexpr _Tp + make_from_tuple(_Tuple&& __t) + noexcept(__unpack_std_tuple) + { + constexpr size_t __n = tuple_size_v>; +#if __has_builtin(__reference_constructs_from_temporary) + if constexpr (__n == 1) + { + using _Elt = decltype(std::get<0>(std::declval<_Tuple>())); + static_assert(!__reference_constructs_from_temporary(_Tp, _Elt)); + } +#endif + return __make_from_tuple_impl<_Tp>(std::forward<_Tuple>(__t), + make_index_sequence<__n>{}); + } +#endif + +#if __cpp_lib_tuple_like // >= C++23 + template<__tuple_like _TTuple, __tuple_like _UTuple, + template class _TQual, template class _UQual, + typename = make_index_sequence>> + struct __tuple_like_common_reference; + + template<__tuple_like _TTuple, __tuple_like _UTuple, + template class _TQual, template class _UQual, + size_t... _Is> + requires requires + { typename tuple>, + _UQual>>...>; } + struct __tuple_like_common_reference<_TTuple, _UTuple, _TQual, _UQual, index_sequence<_Is...>> + { + using type = tuple>, + _UQual>>...>; + }; + + template<__tuple_like _TTuple, __tuple_like _UTuple, + template class _TQual, template class _UQual> + requires (__is_tuple_v<_TTuple> || __is_tuple_v<_UTuple>) + && is_same_v<_TTuple, decay_t<_TTuple>> + && is_same_v<_UTuple, decay_t<_UTuple>> + && (tuple_size_v<_TTuple> == tuple_size_v<_UTuple>) + && requires { typename __tuple_like_common_reference<_TTuple, _UTuple, _TQual, _UQual>::type; } + struct basic_common_reference<_TTuple, _UTuple, _TQual, _UQual> + { + using type = typename __tuple_like_common_reference<_TTuple, _UTuple, _TQual, _UQual>::type; + }; + + template<__tuple_like _TTuple, __tuple_like _UTuple, + typename = make_index_sequence>> + struct __tuple_like_common_type; + + template<__tuple_like _TTuple, __tuple_like _UTuple, size_t... _Is> + requires requires + { typename tuple, + tuple_element_t<_Is, _UTuple>>...>; } + struct __tuple_like_common_type<_TTuple, _UTuple, index_sequence<_Is...>> + { + using type = tuple, + tuple_element_t<_Is, _UTuple>>...>; + }; + + template<__tuple_like _TTuple, __tuple_like _UTuple> + requires (__is_tuple_v<_TTuple> || __is_tuple_v<_UTuple>) + && is_same_v<_TTuple, decay_t<_TTuple>> + && is_same_v<_UTuple, decay_t<_UTuple>> + && (tuple_size_v<_TTuple> == tuple_size_v<_UTuple>) + && requires { typename __tuple_like_common_type<_TTuple, _UTuple>::type; } + struct common_type<_TTuple, _UTuple> + { + using type = typename __tuple_like_common_type<_TTuple, _UTuple>::type; + }; +#endif // C++23 + + /// @} + +#undef __glibcxx_no_dangling_refs + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif // _GLIBCXX_TUPLE diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@tuple.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@tuple.blob new file mode 100644 index 0000000000000000000000000000000000000000..b9539e036e2a5f609c0ad3d23571dea8f73c7422 GIT binary patch literal 139017 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. + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996-1998 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_algobase.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{algorithm} + */ + +#ifndef _STL_ALGOBASE_H +#define _STL_ALGOBASE_H 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // For std::swap +#include +#if __cplusplus >= 201103L +# include +#endif +#if __cplusplus >= 201402L +# include // std::__bit_width +#endif +#if __cplusplus >= 202002L +# include +# include // std::to_address +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /* + * A constexpr wrapper for __builtin_memcmp. + * @param __num The number of elements of type _Tp (not bytes). + */ + template + _GLIBCXX14_CONSTEXPR + inline int + __memcmp(const _Tp* __first1, const _Up* __first2, size_t __num) + { +#if __cplusplus >= 201103L + static_assert(sizeof(_Tp) == sizeof(_Up), "can be compared with memcmp"); +#endif +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + { + for(; __num > 0; ++__first1, ++__first2, --__num) + if (*__first1 != *__first2) + return *__first1 < *__first2 ? -1 : 1; + return 0; + } + else +#endif + return __builtin_memcmp(__first1, __first2, sizeof(_Tp) * __num); + } + +#if __cplusplus < 201103L + // See http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html: in a + // nutshell, we are partially implementing the resolution of DR 187, + // when it's safe, i.e., the value_types are equal. + template + struct __iter_swap + { + template + static void + iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) + { + typedef typename iterator_traits<_ForwardIterator1>::value_type + _ValueType1; + _ValueType1 __tmp = *__a; + *__a = *__b; + *__b = __tmp; + } + }; + + template<> + struct __iter_swap + { + template + static void + iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) + { + swap(*__a, *__b); + } + }; +#endif // C++03 + + /** + * @brief Swaps the contents of two iterators. + * @ingroup mutating_algorithms + * @param __a An iterator. + * @param __b Another iterator. + * @return Nothing. + * + * This function swaps the values pointed to by two iterators, not the + * iterators themselves. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator1>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator2>) + +#if __cplusplus < 201103L + typedef typename iterator_traits<_ForwardIterator1>::value_type + _ValueType1; + typedef typename iterator_traits<_ForwardIterator2>::value_type + _ValueType2; + + __glibcxx_function_requires(_ConvertibleConcept<_ValueType1, + _ValueType2>) + __glibcxx_function_requires(_ConvertibleConcept<_ValueType2, + _ValueType1>) + + typedef typename iterator_traits<_ForwardIterator1>::reference + _ReferenceType1; + typedef typename iterator_traits<_ForwardIterator2>::reference + _ReferenceType2; + std::__iter_swap<__are_same<_ValueType1, _ValueType2>::__value + && __are_same<_ValueType1&, _ReferenceType1>::__value + && __are_same<_ValueType2&, _ReferenceType2>::__value>:: + iter_swap(__a, __b); +#else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 187. iter_swap underspecified + swap(*__a, *__b); +#endif + } + + /** + * @brief Swap the elements of two sequences. + * @ingroup mutating_algorithms + * @param __first1 A forward iterator. + * @param __last1 A forward iterator. + * @param __first2 A forward iterator. + * @return An iterator equal to @p first2+(last1-first1). + * + * Swaps each element in the range @p [first1,last1) with the + * corresponding element in the range @p [first2,(last1-first1)). + * The ranges must not overlap. + */ + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator2 + swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator1>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator2>) + __glibcxx_requires_valid_range(__first1, __last1); + + for (; __first1 != __last1; ++__first1, (void)++__first2) + std::iter_swap(__first1, __first2); + return __first2; + } + + /** + * @brief This does what you think it does. + * @ingroup sorting_algorithms + * @param __a A thing of arbitrary type. + * @param __b Another thing of arbitrary type. + * @return The lesser of the parameters. + * + * This is the simple classic generic implementation. It will work on + * temporary expressions, since they are only evaluated once, unlike a + * preprocessor macro. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR + inline const _Tp& + min(const _Tp& __a, const _Tp& __b) + { + // concept requirements + __glibcxx_function_requires(_LessThanComparableConcept<_Tp>) + //return __b < __a ? __b : __a; + if (__b < __a) + return __b; + return __a; + } + + /** + * @brief This does what you think it does. + * @ingroup sorting_algorithms + * @param __a A thing of arbitrary type. + * @param __b Another thing of arbitrary type. + * @return The greater of the parameters. + * + * This is the simple classic generic implementation. It will work on + * temporary expressions, since they are only evaluated once, unlike a + * preprocessor macro. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR + inline const _Tp& + max(const _Tp& __a, const _Tp& __b) + { + // concept requirements + __glibcxx_function_requires(_LessThanComparableConcept<_Tp>) + //return __a < __b ? __b : __a; + if (__a < __b) + return __b; + return __a; + } + + /** + * @brief This does what you think it does. + * @ingroup sorting_algorithms + * @param __a A thing of arbitrary type. + * @param __b Another thing of arbitrary type. + * @param __comp A @link comparison_functors comparison functor@endlink. + * @return The lesser of the parameters. + * + * This will work on temporary expressions, since they are only evaluated + * once, unlike a preprocessor macro. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR + inline const _Tp& + min(const _Tp& __a, const _Tp& __b, _Compare __comp) + { + //return __comp(__b, __a) ? __b : __a; + if (__comp(__b, __a)) + return __b; + return __a; + } + + /** + * @brief This does what you think it does. + * @ingroup sorting_algorithms + * @param __a A thing of arbitrary type. + * @param __b Another thing of arbitrary type. + * @param __comp A @link comparison_functors comparison functor@endlink. + * @return The greater of the parameters. + * + * This will work on temporary expressions, since they are only evaluated + * once, unlike a preprocessor macro. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR + inline const _Tp& + max(const _Tp& __a, const _Tp& __b, _Compare __comp) + { + //return __comp(__a, __b) ? __b : __a; + if (__comp(__a, __b)) + return __b; + return __a; + } + +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER + + template + struct _Deque_iterator; + + struct _Bit_iterator; + +_GLIBCXX_END_NAMESPACE_CONTAINER + +#if _GLIBCXX_HOSTED + // Helpers for streambuf iterators (either istream or ostream). + // NB: avoid including , relatively large. + template + struct char_traits; + + template + class istreambuf_iterator; + + template + class ostreambuf_iterator; + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type + __copy_move_a2(_CharT*, _CharT*, + ostreambuf_iterator<_CharT, char_traits<_CharT> >); + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type + __copy_move_a2(const _CharT*, const _CharT*, + ostreambuf_iterator<_CharT, char_traits<_CharT> >); + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + _CharT*>::__type + __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >, + istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*); + + template + typename __gnu_cxx::__enable_if< + __is_char<_CharT>::__value, + _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type + __copy_move_a2( + istreambuf_iterator<_CharT, char_traits<_CharT> >, + istreambuf_iterator<_CharT, char_traits<_CharT> >, + _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*>); +#endif // HOSTED + +#if __cpp_lib_concepts + template + concept __memcpyable_iterators + = contiguous_iterator<_OutIter> && contiguous_iterator<_InIter> + && sized_sentinel_for<_Sent, _InIter> + && requires (_OutIter __o, _InIter __i) { + requires !!__memcpyable::__value; + }; +#endif + +#if __cplusplus < 201103L + // Used by __copy_move_a2, __copy_n_a and __copy_move_backward_a2 to + // get raw pointers so that calls to __builtin_memmove will compile, + // because C++98 can't use 'if constexpr' so statements that use memmove + // with pointer arguments need to also compile for arbitrary iterator types. + template __attribute__((__always_inline__)) + inline void* __ptr_or_null(_Iter) { return 0; } + template __attribute__((__always_inline__)) + inline void* __ptr_or_null(_Tp* __p) { return (void*)__p; } +# define _GLIBCXX_TO_ADDR(P) std::__ptr_or_null(P) + // Used to advance output iterators (std::advance requires InputIterator). + template __attribute__((__always_inline__)) + inline void __ptr_advance(_Iter&, ptrdiff_t) { } + template __attribute__((__always_inline__)) + inline void __ptr_advance(_Tp*& __p, ptrdiff_t __n) { __p += __n; } +# define _GLIBCXX_ADVANCE(P, N) std::__ptr_advance(P, N) +#else + // For C++11 mode the __builtin_memmove calls are guarded by 'if constexpr' + // so we know the iterators used with memmove are guaranteed to be pointers. +# define _GLIBCXX_TO_ADDR(P) P +# define _GLIBCXX_ADVANCE(P, N) P += N +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + template + __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR + inline void + __assign_one(_OutIter& __out, _InIter& __in) + { +#if __cplusplus >= 201103L + if constexpr (_IsMove) + *__out = std::move(*__in); + else +#endif + *__out = *__in; + } + + template + _GLIBCXX20_CONSTEXPR + inline _OutIter + __copy_move_a2(_InIter __first, _Sent __last, _OutIter __result) + { + typedef __decltype(*__first) _InRef; + typedef __decltype(*__result) _OutRef; + if _GLIBCXX_CONSTEXPR (!__is_trivially_assignable(_OutRef, _InRef)) + { } /* Skip the optimizations and use the loop at the end. */ + else if (std::__is_constant_evaluated()) + { } /* Skip the optimizations and use the loop at the end. */ + else if _GLIBCXX_CONSTEXPR (__memcpyable<_OutIter, _InIter>::__value) + { + ptrdiff_t __n = std::distance(__first, __last); + if (__builtin_expect(__n > 1, true)) + { + __builtin_memmove(_GLIBCXX_TO_ADDR(__result), + _GLIBCXX_TO_ADDR(__first), + __n * sizeof(*__first)); + _GLIBCXX_ADVANCE(__result, __n); + } + else if (__n == 1) + { + std::__assign_one<_IsMove>(__result, __first); + ++__result; + } + return __result; + } +#if __cpp_lib_concepts + else if constexpr (__memcpyable_iterators<_OutIter, _InIter, _Sent>) + { + if (auto __n = __last - __first; __n > 1) [[likely]] + { + void* __dest = std::to_address(__result); + const void* __src = std::to_address(__first); + size_t __nbytes = __n * sizeof(iter_value_t<_InIter>); + // Advance the iterators and convert to pointers first. + // This gives the iterators a chance to do bounds checking. + (void) std::to_address(__result += __n); + (void) std::to_address(__first += __n); + __builtin_memmove(__dest, __src, __nbytes); + } + else if (__n == 1) + { + std::__assign_one<_IsMove>(__result, __first); + ++__result; + } + return __result; + } +#endif + + for (; __first != __last; ++__result, (void)++__first) + std::__assign_one<_IsMove>(__result, __first); + return __result; + } +#pragma GCC diagnostic pop + + template + _OI + __copy_move_a1(_GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>, + _OI); + + template + _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*> + __copy_move_a1(_GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr>, + _GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr>, + _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*>); + + template + typename __gnu_cxx::__enable_if< + __is_random_access_iter<_II>::__value, + _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type + __copy_move_a1(_II, _II, _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>); + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _OI + __copy_move_a1(_II __first, _II __last, _OI __result) + { return std::__copy_move_a2<_IsMove>(__first, __last, __result); } + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _OI + __copy_move_a(_II __first, _II __last, _OI __result) + { + return std::__niter_wrap(__result, + std::__copy_move_a1<_IsMove>(std::__niter_base(__first), + std::__niter_base(__last), + std::__niter_base(__result))); + } + + template + _GLIBCXX20_CONSTEXPR + _OI + __copy_move_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + _OI); + + template + _GLIBCXX20_CONSTEXPR + __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> + __copy_move_a(_II, _II, + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); + + template + _GLIBCXX20_CONSTEXPR + ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> + __copy_move_a(const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, + const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, + const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // for if-constexpr + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __copy_n_a(_InputIterator __first, _Size __n, _OutputIterator __result, + bool) + { + typedef __decltype(*__first) _InRef; + typedef __decltype(*__result) _OutRef; + if _GLIBCXX_CONSTEXPR (!__is_trivially_assignable(_OutRef, _InRef)) + { } /* Skip the optimizations and use the loop at the end. */ +#ifdef __cpp_lib_is_constant_evaluated + else if (std::is_constant_evaluated()) + { } /* Skip the optimizations and use the loop at the end. */ +#endif + else if _GLIBCXX_CONSTEXPR (__memcpyable<_OutputIterator, + _InputIterator>::__value) + { + if (__builtin_expect(__n > 1, true)) + { + __builtin_memmove(_GLIBCXX_TO_ADDR(__result), + _GLIBCXX_TO_ADDR(__first), + __n * sizeof(*__first)); + _GLIBCXX_ADVANCE(__result, __n); + } + else if (__n == 1) + *__result++ = *__first; + return __result; + } +#if __cpp_lib_concepts + else if constexpr (__memcpyable_iterators<_OutputIterator, + _InputIterator>) + { + if (__n > 1) [[likely]] + { + void* __dest = std::to_address(__result); + const void* __src = std::to_address(__first); + size_t __nbytes = __n * sizeof(iter_value_t<_InputIterator>); + // Advance the iterators and convert to pointers first. + // This gives the iterators a chance to do bounds checking. + (void) std::to_address(__result += __n); + (void) std::to_address(__first += __n); + __builtin_memmove(__dest, __src, __nbytes); + } + else if (__n == 1) + *__result++ = *__first; + return __result; + } +#endif + + if (__n > 0) + { + while (true) + { + *__result = *__first; + ++__result; + if (--__n > 0) + ++__first; + else + break; + } + } + return __result; + } +#pragma GCC diagnostic pop + +#if _GLIBCXX_HOSTED + template + typename __gnu_cxx::__enable_if< + __is_char<_CharT>::__value, _CharT*>::__type + __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, + _Size, _CharT*, bool); + + template + typename __gnu_cxx::__enable_if< + __is_char<_CharT>::__value, + _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type + __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, _Size, + _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*>, + bool); +#endif + + /** + * @brief Copies the range [first,last) into result. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @return result + (last - first) + * + * This inline function will boil down to a call to @c memmove whenever + * possible. Failing that, if random access iterators are passed, then the + * loop count will be known (and therefore a candidate for compiler + * optimizations such as unrolling). Result may not be contained within + * [first,last); the copy_backward function should be used instead. + * + * Note that the end of the output range is permitted to be contained + * within [first,last). + */ + template + _GLIBCXX20_CONSTEXPR + inline _OI + copy(_II __first, _II __last, _OI __result) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_II>) + __glibcxx_function_requires(_OutputIteratorConcept<_OI, + typename iterator_traits<_II>::reference>) + __glibcxx_requires_can_increment_range(__first, __last, __result); + + return std::__copy_move_a<__is_move_iterator<_II>::__value> + (std::__miter_base(__first), std::__miter_base(__last), __result); + } + +#if __cplusplus >= 201103L + /** + * @brief Moves the range [first,last) into result. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @return result + (last - first) + * + * This inline function will boil down to a call to @c memmove whenever + * possible. Failing that, if random access iterators are passed, then the + * loop count will be known (and therefore a candidate for compiler + * optimizations such as unrolling). Result may not be contained within + * [first,last); the move_backward function should be used instead. + * + * Note that the end of the output range is permitted to be contained + * within [first,last). + */ + template + _GLIBCXX20_CONSTEXPR + inline _OI + move(_II __first, _II __last, _OI __result) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_II>) + __glibcxx_function_requires(_OutputIteratorConcept<_OI, + typename iterator_traits<_II>::value_type&&>) + __glibcxx_requires_can_increment_range(__first, __last, __result); + + return std::__copy_move_a(std::__miter_base(__first), + std::__miter_base(__last), __result); + } + +#define _GLIBCXX_MOVE3(_Tp, _Up, _Vp) std::move(_Tp, _Up, _Vp) +#else +#define _GLIBCXX_MOVE3(_Tp, _Up, _Vp) std::copy(_Tp, _Up, _Vp) +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + template + _GLIBCXX20_CONSTEXPR + inline _BI2 + __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) + { + typedef __decltype(*__first) _InRef; + typedef __decltype(*__result) _OutRef; + if _GLIBCXX_CONSTEXPR (!__is_trivially_assignable(_OutRef, _InRef)) + { } /* Skip the optimizations and use the loop at the end. */ +#ifdef __cpp_lib_is_constant_evaluated + else if (std::is_constant_evaluated()) + { } /* Skip the optimizations and use the loop at the end. */ +#endif + else if _GLIBCXX_CONSTEXPR (__memcpyable<_BI2, _BI1>::__value) + { + ptrdiff_t __n = std::distance(__first, __last); + std::advance(__result, -__n); + if (__builtin_expect(__n > 1, true)) + { + __builtin_memmove(_GLIBCXX_TO_ADDR(__result), + _GLIBCXX_TO_ADDR(__first), + __n * sizeof(*__first)); + } + else if (__n == 1) + std::__assign_one<_IsMove>(__result, __first); + return __result; + } +#if __cpp_lib_concepts + else if constexpr (__memcpyable_iterators<_BI2, _BI1>) + { + if (auto __n = __last - __first; __n > 1) [[likely]] + { + const void* __src = std::to_address(__first); + // Advance the iterators and convert to pointers first. + // This gives the iterators a chance to do bounds checking. + (void) std::to_address(__result -= __n); + (void) std::to_address(__first += __n); + void* __dest = std::to_address(__result); + size_t __nbytes = __n * sizeof(iter_value_t<_BI1>); + __builtin_memmove(__dest, __src, __nbytes); + } + else if (__n == 1) + { + --__result; + std::__assign_one<_IsMove>(__result, __first); + } + return __result; + } +#endif + + while (__first != __last) + { + --__last; + --__result; + std::__assign_one<_IsMove>(__result, __last); + } + return __result; + } +#pragma GCC diagnostic pop + +#undef _GLIBCXX_TO_ADDR +#undef _GLIBCXX_ADVANCE + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _BI2 + __copy_move_backward_a1(_BI1 __first, _BI1 __last, _BI2 __result) + { return std::__copy_move_backward_a2<_IsMove>(__first, __last, __result); } + + template + _OI + __copy_move_backward_a1(_GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>, + _OI); + + template + _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*> + __copy_move_backward_a1( + _GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr>, + _GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr>, + _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*>); + + template + typename __gnu_cxx::__enable_if< + __is_random_access_iter<_II>::__value, + _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type + __copy_move_backward_a1(_II, _II, + _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>); + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _OI + __copy_move_backward_a(_II __first, _II __last, _OI __result) + { + return std::__niter_wrap(__result, + std::__copy_move_backward_a1<_IsMove> + (std::__niter_base(__first), std::__niter_base(__last), + std::__niter_base(__result))); + } + + template + _GLIBCXX20_CONSTEXPR + _OI + __copy_move_backward_a( + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + _OI); + + template + _GLIBCXX20_CONSTEXPR + __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> + __copy_move_backward_a(_II, _II, + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); + + template + _GLIBCXX20_CONSTEXPR + ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> + __copy_move_backward_a( + const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, + const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, + const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); + + /** + * @brief Copies the range [first,last) into result. + * @ingroup mutating_algorithms + * @param __first A bidirectional iterator. + * @param __last A bidirectional iterator. + * @param __result A bidirectional iterator. + * @return result - (last - first) + * + * The function has the same effect as copy, but starts at the end of the + * range and works its way to the start, returning the start of the result. + * This inline function will boil down to a call to @c memmove whenever + * possible. Failing that, if random access iterators are passed, then the + * loop count will be known (and therefore a candidate for compiler + * optimizations such as unrolling). + * + * Result may not be in the range (first,last]. Use copy instead. Note + * that the start of the output range may overlap [first,last). + */ + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _BI2 + copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept<_BI1>) + __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<_BI2>) + __glibcxx_function_requires(_OutputIteratorConcept<_BI2, + typename iterator_traits<_BI1>::reference>) + __glibcxx_requires_can_decrement_range(__first, __last, __result); + + return std::__copy_move_backward_a<__is_move_iterator<_BI1>::__value> + (std::__miter_base(__first), std::__miter_base(__last), __result); + } + +#if __cplusplus >= 201103L + /** + * @brief Moves the range [first,last) into result. + * @ingroup mutating_algorithms + * @param __first A bidirectional iterator. + * @param __last A bidirectional iterator. + * @param __result A bidirectional iterator. + * @return result - (last - first) + * + * The function has the same effect as move, but starts at the end of the + * range and works its way to the start, returning the start of the result. + * This inline function will boil down to a call to @c memmove whenever + * possible. Failing that, if random access iterators are passed, then the + * loop count will be known (and therefore a candidate for compiler + * optimizations such as unrolling). + * + * Result may not be in the range (first,last]. Use move instead. Note + * that the start of the output range may overlap [first,last). + */ + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _BI2 + move_backward(_BI1 __first, _BI1 __last, _BI2 __result) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept<_BI1>) + __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<_BI2>) + __glibcxx_function_requires(_OutputIteratorConcept<_BI2, + typename iterator_traits<_BI1>::value_type&&>) + __glibcxx_requires_can_decrement_range(__first, __last, __result); + + return std::__copy_move_backward_a(std::__miter_base(__first), + std::__miter_base(__last), + __result); + } + +#define _GLIBCXX_MOVE_BACKWARD3(_Tp, _Up, _Vp) std::move_backward(_Tp, _Up, _Vp) +#else +#define _GLIBCXX_MOVE_BACKWARD3(_Tp, _Up, _Vp) std::copy_backward(_Tp, _Up, _Vp) +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + template + _GLIBCXX20_CONSTEXPR + inline void + __fill_a1(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __value) + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + // We can optimize this loop by moving the load from __value outside + // the loop, but only if we know that making that copy is trivial, + // and the assignment in the loop is also trivial (so that the identity + // of the operand doesn't matter). + const bool __load_outside_loop = +#if __has_builtin(__is_trivially_constructible) \ + && __has_builtin(__is_trivially_assignable) + __is_trivially_constructible(_Tp, const _Tp&) + && __is_trivially_assignable(__decltype(*__first), const _Tp&) +#else + __is_trivially_copyable(_Tp) + && __is_same(_Tp, __typeof__(*__first)) +#endif + && sizeof(_Tp) <= sizeof(long long); +#pragma GCC diagnostic pop + + // When the condition is true, we use a copy of __value, + // otherwise we just use another reference. + typedef typename __gnu_cxx::__conditional_type<__load_outside_loop, + const _Tp, + const _Tp&>::__type _Up; + _Up __val(__value); + for (; __first != __last; ++__first) + *__first = __val; + } +#pragma GCC diagnostic pop + + // Specialization: for char types we can use memset. + template + _GLIBCXX20_CONSTEXPR + inline typename + __gnu_cxx::__enable_if<__is_byte<_Up>::__value + && (__are_same<_Up, _Tp>::__value // for std::byte + || __memcpyable_integer<_Tp>::__width), + void>::__type + __fill_a1(_Up* __first, _Up* __last, const _Tp& __x) + { + // This hoists the load out of the loop and also ensures that we don't + // use memset for cases where the assignment would be ill-formed. + const _Up __val = __x; +#if __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + { + for (; __first != __last; ++__first) + *__first = __val; + return; + } +#endif + if (const size_t __len = __last - __first) + __builtin_memset(__first, static_cast(__val), __len); + } + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline void + __fill_a1(::__gnu_cxx::__normal_iterator<_Ite, _Cont> __first, + ::__gnu_cxx::__normal_iterator<_Ite, _Cont> __last, + const _Tp& __value) + { std::__fill_a1(__first.base(), __last.base(), __value); } + + template + void + __fill_a1(const _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>&, + const _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>&, + const _VTp&); + + _GLIBCXX20_CONSTEXPR + void + __fill_a1(_GLIBCXX_STD_C::_Bit_iterator, _GLIBCXX_STD_C::_Bit_iterator, + const bool&); + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline void + __fill_a(_FIte __first, _FIte __last, const _Tp& __value) + { std::__fill_a1(__first, __last, __value); } + + template + _GLIBCXX20_CONSTEXPR + void + __fill_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + const _Tp&); + + /** + * @brief Fills the range [first,last) with copies of value. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __value A reference-to-const of arbitrary type. + * @return Nothing. + * + * This function fills a range with copies of the same value. For char + * types filling contiguous areas of memory, this becomes an inline call + * to @c memset or @c wmemset. + */ + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline void + fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_requires_valid_range(__first, __last); + + std::__fill_a(__first, __last, __value); + } + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + // Used by fill_n, generate_n, etc. to convert _Size to an integral type: + inline _GLIBCXX_CONSTEXPR int + __size_to_integer(int __n) { return __n; } + inline _GLIBCXX_CONSTEXPR unsigned + __size_to_integer(unsigned __n) { return __n; } + inline _GLIBCXX_CONSTEXPR long + __size_to_integer(long __n) { return __n; } + inline _GLIBCXX_CONSTEXPR unsigned long + __size_to_integer(unsigned long __n) { return __n; } + inline _GLIBCXX_CONSTEXPR long long + __size_to_integer(long long __n) { return __n; } + inline _GLIBCXX_CONSTEXPR unsigned long long + __size_to_integer(unsigned long long __n) { return __n; } + +#if defined(__GLIBCXX_TYPE_INT_N_0) + __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_0 + __size_to_integer(__GLIBCXX_TYPE_INT_N_0 __n) { return __n; } + __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_0 + __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_0 __n) { return __n; } +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_1 + __size_to_integer(__GLIBCXX_TYPE_INT_N_1 __n) { return __n; } + __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_1 + __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_1 __n) { return __n; } +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_2 + __size_to_integer(__GLIBCXX_TYPE_INT_N_2 __n) { return __n; } + __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_2 + __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_2 __n) { return __n; } +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_3 + __size_to_integer(__GLIBCXX_TYPE_INT_N_3 __n) { return __n; } + __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_3 + __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_3 __n) { return __n; } +#endif + + inline _GLIBCXX_CONSTEXPR long long + __size_to_integer(float __n) { return (long long)__n; } + inline _GLIBCXX_CONSTEXPR long long + __size_to_integer(double __n) { return (long long)__n; } + inline _GLIBCXX_CONSTEXPR long long + __size_to_integer(long double __n) { return (long long)__n; } +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) + __extension__ inline _GLIBCXX_CONSTEXPR long long + __size_to_integer(__float128 __n) { return (long long)__n; } +#endif +#pragma GCC diagnostic pop + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" +#pragma GCC diagnostic ignored "-Wlong-long" + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) + { + // See std::__fill_a1 for explanation of this condition. + const bool __load_outside_loop = +#if __has_builtin(__is_trivially_constructible) \ + && __has_builtin(__is_trivially_assignable) + __is_trivially_constructible(_Tp, const _Tp&) + && __is_trivially_assignable(__decltype(*__first), const _Tp&) +#else + __is_trivially_copyable(_Tp) + && __is_same(_Tp, __typeof__(*__first)) +#endif + && sizeof(_Tp) <= sizeof(long long); + + // When the condition is true, we use a copy of __value, + // otherwise we just use another reference. + typedef typename __gnu_cxx::__conditional_type<__load_outside_loop, + const _Tp, + const _Tp&>::__type _Up; + _Up __val(__value); + for (; __n > 0; --__n, (void) ++__first) + *__first = __val; + return __first; + } +#pragma GCC diagnostic pop + + template + _GLIBCXX20_CONSTEXPR + ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> + __fill_n_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>& __first, + _Size __n, const _Tp& __value, + std::input_iterator_tag); + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, + std::output_iterator_tag) + { +#if __cplusplus >= 201103L + static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); +#endif + return __fill_n_a1(__first, __n, __value); + } + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, + std::input_iterator_tag) + { +#if __cplusplus >= 201103L + static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); +#endif + return __fill_n_a1(__first, __n, __value); + } + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, + std::random_access_iterator_tag) + { +#if __cplusplus >= 201103L + static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); +#endif + if (__n <= 0) + return __first; + + __glibcxx_requires_can_increment(__first, __n); + + std::__fill_a(__first, __first + __n, __value); + return __first + __n; + } + + /** + * @brief Fills the range [first,first+n) with copies of value. + * @ingroup mutating_algorithms + * @param __first An output iterator. + * @param __n The count of copies to perform. + * @param __value A reference-to-const of arbitrary type. + * @return The iterator at first+n. + * + * This function fills a range with copies of the same value. For char + * types filling contiguous areas of memory, this becomes an inline call + * to @c memset or @c wmemset. + * + * If @p __n is negative, the function does nothing. + */ + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 865. More algorithms that throw away information + // DR 426. search_n(), fill_n(), and generate_n() with negative n + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _OI + fill_n(_OI __first, _Size __n, const _Tp& __value) + { + // concept requirements + __glibcxx_function_requires(_OutputIteratorConcept<_OI, const _Tp&>) + + return std::__fill_n_a(__first, std::__size_to_integer(__n), __value, + std::__iterator_category(__first)); + } + + template + struct __equal + { + template + _GLIBCXX20_CONSTEXPR + static bool + equal(_II1 __first1, _II1 __last1, _II2 __first2) + { + for (; __first1 != __last1; ++__first1, (void) ++__first2) + if (!(*__first1 == *__first2)) + return false; + return true; + } + }; + + template<> + struct __equal + { + template + _GLIBCXX20_CONSTEXPR + static bool + equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) + { + if (const size_t __len = (__last1 - __first1)) + return !std::__memcmp(__first1, __first2, __len); + return true; + } + }; + + template + typename __gnu_cxx::__enable_if< + __is_random_access_iter<_II>::__value, bool>::__type + __equal_aux1(_GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>, + _II); + + template + bool + __equal_aux1(_GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); + + template + typename __gnu_cxx::__enable_if< + __is_random_access_iter<_II>::__value, bool>::__type + __equal_aux1(_II, _II, + _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>); + + template + _GLIBCXX20_CONSTEXPR + inline bool + __equal_aux1(_II1 __first1, _II1 __last1, _II2 __first2) + { + typedef typename iterator_traits<_II1>::value_type _ValueType1; + const bool __simple = ((__is_integer<_ValueType1>::__value +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer) + || __is_pointer(_ValueType1) +#endif +#if __glibcxx_byte && __glibcxx_type_trait_variable_templates + // bits/cpp_type_traits.h declares std::byte + || is_same_v<_ValueType1, byte> +#endif + ) && __memcmpable<_II1, _II2>::__value); + return std::__equal<__simple>::equal(__first1, __last1, __first2); + } + + template + __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline bool + __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2) + { + return std::__equal_aux1(std::__niter_base(__first1), + std::__niter_base(__last1), + std::__niter_base(__first2)); + } + + template + _GLIBCXX20_CONSTEXPR + bool + __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, + const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, + _II2); + + template + _GLIBCXX20_CONSTEXPR + bool + __equal_aux(_II1, _II1, + const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); + + template + _GLIBCXX20_CONSTEXPR + bool + __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, + const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, + const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); + + template + struct __lc_rai + { + template + _GLIBCXX20_CONSTEXPR + static _II1 + __newlast1(_II1, _II1 __last1, _II2, _II2) + { return __last1; } + + template + _GLIBCXX20_CONSTEXPR + static bool + __cnd2(_II __first, _II __last) + { return __first != __last; } + }; + + template<> + struct __lc_rai + { + template + _GLIBCXX20_CONSTEXPR + static _RAI1 + __newlast1(_RAI1 __first1, _RAI1 __last1, + _RAI2 __first2, _RAI2 __last2) + { + const typename iterator_traits<_RAI1>::difference_type + __diff1 = __last1 - __first1; + const typename iterator_traits<_RAI2>::difference_type + __diff2 = __last2 - __first2; + return __diff2 < __diff1 ? __first1 + __diff2 : __last1; + } + + template + static _GLIBCXX20_CONSTEXPR bool + __cnd2(_RAI, _RAI) + { return true; } + }; + + template + _GLIBCXX20_CONSTEXPR + bool + __lexicographical_compare_impl(_II1 __first1, _II1 __last1, + _II2 __first2, _II2 __last2, + _Compare __comp) + { + typedef typename iterator_traits<_II1>::iterator_category _Category1; + typedef typename iterator_traits<_II2>::iterator_category _Category2; + typedef std::__lc_rai<_Category1, _Category2> __rai_type; + + __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2); + for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); + ++__first1, (void)++__first2) + { + if (__comp(__first1, __first2)) + return true; + if (__comp(__first2, __first1)) + return false; + } + return __first1 == __last1 && __first2 != __last2; + } + + template + struct __lexicographical_compare + { + template + _GLIBCXX20_CONSTEXPR + static bool + __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) + { + using __gnu_cxx::__ops::__iter_less_iter; + return std::__lexicographical_compare_impl(__first1, __last1, + __first2, __last2, + __iter_less_iter()); + } + + template + _GLIBCXX20_CONSTEXPR + static int + __3way(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) + { + while (__first1 != __last1) + { + if (__first2 == __last2) + return +1; + if (*__first1 < *__first2) + return -1; + if (*__first2 < *__first1) + return +1; + ++__first1; + ++__first2; + } + return int(__first2 == __last2) - 1; + } + }; + + template<> + struct __lexicographical_compare + { + template + _GLIBCXX20_CONSTEXPR + static bool + __lc(const _Tp* __first1, const _Tp* __last1, + const _Up* __first2, const _Up* __last2) + { return __3way(__first1, __last1, __first2, __last2) < 0; } + + template + _GLIBCXX20_CONSTEXPR + static ptrdiff_t + __3way(const _Tp* __first1, const _Tp* __last1, + const _Up* __first2, const _Up* __last2) + { + const size_t __len1 = __last1 - __first1; + const size_t __len2 = __last2 - __first2; + if (const size_t __len = std::min(__len1, __len2)) + if (int __result = std::__memcmp(__first1, __first2, __len)) + return __result; + return ptrdiff_t(__len1 - __len2); + } + }; + + template + _GLIBCXX20_CONSTEXPR + inline bool + __lexicographical_compare_aux1(_II1 __first1, _II1 __last1, + _II2 __first2, _II2 __last2) + { + typedef typename iterator_traits<_II1>::value_type _ValueType1; + typedef typename iterator_traits<_II2>::value_type _ValueType2; +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer) + const bool __simple = + (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value + && __is_pointer(_II1) && __is_pointer(_II2) +#if __cplusplus > 201703L && __glibcxx_concepts + // For C++20 iterator_traits::value_type is non-volatile + // so __is_byte could be true, but we can't use memcmp with + // volatile data. + && !is_volatile_v>> + && !is_volatile_v>> +#endif + ); +#else + const bool __simple = false; +#endif + + return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, + __first2, __last2); + } + + template + bool + __lexicographical_compare_aux1( + _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, + _Tp2*, _Tp2*); + + template + bool + __lexicographical_compare_aux1(_Tp1*, _Tp1*, + _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); + + template + bool + __lexicographical_compare_aux1( + _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>, + _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); + + template + _GLIBCXX20_CONSTEXPR + inline bool + __lexicographical_compare_aux(_II1 __first1, _II1 __last1, + _II2 __first2, _II2 __last2) + { + return std::__lexicographical_compare_aux1(std::__niter_base(__first1), + std::__niter_base(__last1), + std::__niter_base(__first2), + std::__niter_base(__last2)); + } + + template + _GLIBCXX20_CONSTEXPR + bool + __lexicographical_compare_aux( + const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, + const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, + _II2, _II2); + + template + _GLIBCXX20_CONSTEXPR + bool + __lexicographical_compare_aux( + _II1, _II1, + const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&, + const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&); + + template + _GLIBCXX20_CONSTEXPR + bool + __lexicographical_compare_aux( + const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, + const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, + const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&, + const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&); + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __lower_bound(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val, _Compare __comp) + { + typedef typename iterator_traits<_ForwardIterator>::difference_type + _DistanceType; + + _DistanceType __len = std::distance(__first, __last); + + while (__len > 0) + { + _DistanceType __half = __len >> 1; + _ForwardIterator __middle = __first; + std::advance(__middle, __half); + if (__comp(__middle, __val)) + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } + else + __len = __half; + } + return __first; + } + + /** + * @brief Finds the first position in which @a val could be inserted + * without changing the ordering. + * @param __first An iterator. + * @param __last Another iterator. + * @param __val The search term. + * @return An iterator pointing to the first element not less + * than @a val, or end() if every element is less than + * @a val. + * @ingroup binary_search_algorithms + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + lower_bound(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_ForwardIterator>::value_type, _Tp>) + __glibcxx_requires_partitioned_lower(__first, __last, __val); + + return std::__lower_bound(__first, __last, __val, + __gnu_cxx::__ops::__iter_less_val()); + } + + /// This is a helper function for the sort routines and for random.tcc. + // Precondition: __n > 0. + template + inline _GLIBCXX_CONSTEXPR _Tp + __lg(_Tp __n) + { +#if __cplusplus >= 201402L + return std::__bit_width(make_unsigned_t<_Tp>(__n)) - 1; +#else +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" + // Use +__n so it promotes to at least int. + return (sizeof(+__n) * __CHAR_BIT__ - 1) + - (sizeof(+__n) == sizeof(long long) + ? __builtin_clzll(+__n) + : (sizeof(+__n) == sizeof(long) + ? __builtin_clzl(+__n) + : __builtin_clz(+__n))); +#pragma GCC diagnostic pop +#endif + } + +_GLIBCXX_BEGIN_NAMESPACE_ALGO + + /** + * @brief Tests a range for element-wise equality. + * @ingroup non_mutating_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @return A boolean true or false. + * + * This compares the elements of two ranges using @c == and returns true or + * false depending on whether all of the corresponding elements of the + * ranges are equal. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline bool + equal(_II1 __first1, _II1 __last1, _II2 __first2) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_II1>) + __glibcxx_function_requires(_InputIteratorConcept<_II2>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_II1>::value_type, + typename iterator_traits<_II2>::value_type>) + __glibcxx_requires_can_increment_range(__first1, __last1, __first2); + + return std::__equal_aux(__first1, __last1, __first2); + } + + /** + * @brief Tests a range for element-wise equality. + * @ingroup non_mutating_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __binary_pred A binary predicate @link functors + * functor@endlink. + * @return A boolean true or false. + * + * This compares the elements of two ranges using the binary_pred + * parameter, and returns true or + * false depending on whether all of the corresponding elements of the + * ranges are equal. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline bool + equal(_IIter1 __first1, _IIter1 __last1, + _IIter2 __first2, _BinaryPredicate __binary_pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_IIter1>) + __glibcxx_function_requires(_InputIteratorConcept<_IIter2>) + __glibcxx_requires_valid_range(__first1, __last1); + + for (; __first1 != __last1; ++__first1, (void)++__first2) + if (!bool(__binary_pred(*__first1, *__first2))) + return false; + return true; + } + +#if __cplusplus >= 201103L +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr + + // 4-iterator version of std::equal for use in C++11. + template + _GLIBCXX20_CONSTEXPR + inline bool + __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) + { + using _RATag = random_access_iterator_tag; + using _Cat1 = typename iterator_traits<_II1>::iterator_category; + using _Cat2 = typename iterator_traits<_II2>::iterator_category; + using _RAIters = __and_, is_same<_Cat2, _RATag>>; + if constexpr (_RAIters::value) + { + if ((__last1 - __first1) != (__last2 - __first2)) + return false; + return _GLIBCXX_STD_A::equal(__first1, __last1, __first2); + } + else + { + for (; __first1 != __last1 && __first2 != __last2; + ++__first1, (void)++__first2) + if (!(*__first1 == *__first2)) + return false; + return __first1 == __last1 && __first2 == __last2; + } + } + + // 4-iterator version of std::equal for use in C++11. + template + _GLIBCXX20_CONSTEXPR + inline bool + __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, + _BinaryPredicate __binary_pred) + { + using _RATag = random_access_iterator_tag; + using _Cat1 = typename iterator_traits<_II1>::iterator_category; + using _Cat2 = typename iterator_traits<_II2>::iterator_category; + using _RAIters = __and_, is_same<_Cat2, _RATag>>; + if constexpr (_RAIters::value) + { + if ((__last1 - __first1) != (__last2 - __first2)) + return false; + return _GLIBCXX_STD_A::equal(__first1, __last1, __first2, + __binary_pred); + } + else + { + for (; __first1 != __last1 && __first2 != __last2; + ++__first1, (void)++__first2) + if (!bool(__binary_pred(*__first1, *__first2))) + return false; + return __first1 == __last1 && __first2 == __last2; + } + } +#pragma GCC diagnostic pop +#endif // C++11 + +#ifdef __glibcxx_robust_nonmodifying_seq_ops // C++ >= 14 + /** + * @brief Tests a range for element-wise equality. + * @ingroup non_mutating_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __last2 An input iterator. + * @return A boolean true or false. + * + * This compares the elements of two ranges using @c == and returns true or + * false depending on whether all of the corresponding elements of the + * ranges are equal. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline bool + equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_II1>) + __glibcxx_function_requires(_InputIteratorConcept<_II2>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_II1>::value_type, + typename iterator_traits<_II2>::value_type>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + return _GLIBCXX_STD_A::__equal4(__first1, __last1, __first2, __last2); + } + + /** + * @brief Tests a range for element-wise equality. + * @ingroup non_mutating_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __last2 An input iterator. + * @param __binary_pred A binary predicate @link functors + * functor@endlink. + * @return A boolean true or false. + * + * This compares the elements of two ranges using the binary_pred + * parameter, and returns true or + * false depending on whether all of the corresponding elements of the + * ranges are equal. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline bool + equal(_IIter1 __first1, _IIter1 __last1, + _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_IIter1>) + __glibcxx_function_requires(_InputIteratorConcept<_IIter2>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + return _GLIBCXX_STD_A::__equal4(__first1, __last1, __first2, __last2, + __binary_pred); + } +#endif // __glibcxx_robust_nonmodifying_seq_ops + + /** + * @brief Performs @b dictionary comparison on ranges. + * @ingroup sorting_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __last2 An input iterator. + * @return A boolean true or false. + * + * Returns true if the sequence of elements defined by the range + * [first1,last1) is lexicographically less than the sequence of elements + * defined by the range [first2,last2). Returns false otherwise. + * (Quoted from [25.3.8]/1.) If the iterators are all character pointers, + * then this is an inline call to @c memcmp. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline bool + lexicographical_compare(_II1 __first1, _II1 __last1, + _II2 __first2, _II2 __last2) + { +#ifdef _GLIBCXX_CONCEPT_CHECKS + // concept requirements + typedef typename iterator_traits<_II1>::value_type _ValueType1; + typedef typename iterator_traits<_II2>::value_type _ValueType2; +#endif + __glibcxx_function_requires(_InputIteratorConcept<_II1>) + __glibcxx_function_requires(_InputIteratorConcept<_II2>) + __glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>) + __glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + return std::__lexicographical_compare_aux(__first1, __last1, + __first2, __last2); + } + + /** + * @brief Performs @b dictionary comparison on ranges. + * @ingroup sorting_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __last2 An input iterator. + * @param __comp A @link comparison_functors comparison functor@endlink. + * @return A boolean true or false. + * + * The same as the four-parameter @c lexicographical_compare, but uses the + * comp parameter instead of @c <. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline bool + lexicographical_compare(_II1 __first1, _II1 __last1, + _II2 __first2, _II2 __last2, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_II1>) + __glibcxx_function_requires(_InputIteratorConcept<_II2>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + return std::__lexicographical_compare_impl + (__first1, __last1, __first2, __last2, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + +#if __cpp_lib_three_way_comparison + // Both iterators refer to contiguous ranges of unsigned narrow characters, + // or std::byte, or big-endian unsigned integers, suitable for comparison + // using memcmp. + template + concept __memcmp_ordered_with + = (__is_memcmp_ordered_with, + iter_value_t<_Iter2>>::__value) + && contiguous_iterator<_Iter1> && contiguous_iterator<_Iter2>; + + // Return a struct with two members, initialized to the smaller of x and y + // (or x if they compare equal) and the result of the comparison x <=> y. + template + constexpr auto + __min_cmp(_Tp __x, _Tp __y) + { + struct _Res { + _Tp _M_min; + decltype(__x <=> __y) _M_cmp; + }; + auto __c = __x <=> __y; + if (__c > 0) + return _Res{__y, __c}; + return _Res{__x, __c}; + } + + /** + * @brief Performs dictionary comparison on ranges. + * @ingroup sorting_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __last2 An input iterator. + * @param __comp A @link comparison_functors comparison functor@endlink. + * @return The comparison category that `__comp(*__first1, *__first2)` + * returns. + */ + template + [[nodiscard]] constexpr auto + lexicographical_compare_three_way(_InputIter1 __first1, + _InputIter1 __last1, + _InputIter2 __first2, + _InputIter2 __last2, + _Comp __comp) + -> decltype(__comp(*__first1, *__first2)) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIter1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIter2>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + using _Cat = decltype(__comp(*__first1, *__first2)); + static_assert(same_as, _Cat>); + + if (!std::__is_constant_evaluated()) + if constexpr (same_as<_Comp, __detail::_Synth3way> + || same_as<_Comp, compare_three_way>) + if constexpr (__memcmp_ordered_with<_InputIter1, _InputIter2>) + { + const auto [__len, __lencmp] = _GLIBCXX_STD_A:: + __min_cmp(__last1 - __first1, __last2 - __first2); + if (__len) + { + const auto __blen = __len * sizeof(*__first1); + const auto __c + = __builtin_memcmp(&*__first1, &*__first2, __blen) <=> 0; + if (__c != 0) + return __c; + } + return __lencmp; + } + + while (__first1 != __last1) + { + if (__first2 == __last2) + return strong_ordering::greater; + if (auto __cmp = __comp(*__first1, *__first2); __cmp != 0) + return __cmp; + ++__first1; + ++__first2; + } + return (__first2 == __last2) <=> true; // See PR 94006 + } + + template + constexpr auto + lexicographical_compare_three_way(_InputIter1 __first1, + _InputIter1 __last1, + _InputIter2 __first2, + _InputIter2 __last2) + { + return _GLIBCXX_STD_A:: + lexicographical_compare_three_way(__first1, __last1, __first2, __last2, + compare_three_way{}); + } +#endif // three_way_comparison + + template + _GLIBCXX20_CONSTEXPR + pair<_InputIterator1, _InputIterator2> + __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _BinaryPredicate __binary_pred) + { + while (__first1 != __last1 && __binary_pred(__first1, __first2)) + { + ++__first1; + ++__first2; + } + return pair<_InputIterator1, _InputIterator2>(__first1, __first2); + } + + /** + * @brief Finds the places in ranges which don't match. + * @ingroup non_mutating_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @return A pair of iterators pointing to the first mismatch. + * + * This compares the elements of two ranges using @c == and returns a pair + * of iterators. The first iterator points into the first range, the + * second iterator points into the second range, and the elements pointed + * to by the iterators are not equal. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline pair<_InputIterator1, _InputIterator2> + mismatch(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_requires_valid_range(__first1, __last1); + + return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, + __gnu_cxx::__ops::__iter_equal_to_iter()); + } + + /** + * @brief Finds the places in ranges which don't match. + * @ingroup non_mutating_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __binary_pred A binary predicate @link functors + * functor@endlink. + * @return A pair of iterators pointing to the first mismatch. + * + * This compares the elements of two ranges using the binary_pred + * parameter, and returns a pair + * of iterators. The first iterator points into the first range, the + * second iterator points into the second range, and the elements pointed + * to by the iterators are not equal. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline pair<_InputIterator1, _InputIterator2> + mismatch(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _BinaryPredicate __binary_pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_requires_valid_range(__first1, __last1); + + return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, + __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); + } + +#if __glibcxx_robust_nonmodifying_seq_ops // C++ >= 14 + template + _GLIBCXX20_CONSTEXPR + pair<_InputIterator1, _InputIterator2> + __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _BinaryPredicate __binary_pred) + { + while (__first1 != __last1 && __first2 != __last2 + && __binary_pred(__first1, __first2)) + { + ++__first1; + ++__first2; + } + return pair<_InputIterator1, _InputIterator2>(__first1, __first2); + } + + /** + * @brief Finds the places in ranges which don't match. + * @ingroup non_mutating_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __last2 An input iterator. + * @return A pair of iterators pointing to the first mismatch. + * + * This compares the elements of two ranges using @c == and returns a pair + * of iterators. The first iterator points into the first range, the + * second iterator points into the second range, and the elements pointed + * to by the iterators are not equal. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline pair<_InputIterator1, _InputIterator2> + mismatch(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, __last2, + __gnu_cxx::__ops::__iter_equal_to_iter()); + } + + /** + * @brief Finds the places in ranges which don't match. + * @ingroup non_mutating_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __last2 An input iterator. + * @param __binary_pred A binary predicate @link functors + * functor@endlink. + * @return A pair of iterators pointing to the first mismatch. + * + * This compares the elements of two ranges using the binary_pred + * parameter, and returns a pair + * of iterators. The first iterator points into the first range, the + * second iterator points into the second range, and the elements pointed + * to by the iterators are not equal. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline pair<_InputIterator1, _InputIterator2> + mismatch(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _BinaryPredicate __binary_pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, __last2, + __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); + } +#endif + +_GLIBCXX_END_NAMESPACE_ALGO + + // Implementation of std::find_if, also used in std::remove_if and others. + template + _GLIBCXX20_CONSTEXPR + inline _Iterator + __find_if(_Iterator __first, _Iterator __last, _Predicate __pred) + { +#pragma GCC unroll 4 + while (__first != __last && !__pred(__first)) + ++__first; + return __first; + } + + template + _GLIBCXX20_CONSTEXPR + typename iterator_traits<_InputIterator>::difference_type + __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) + { + typename iterator_traits<_InputIterator>::difference_type __n = 0; + for (; __first != __last; ++__first) + if (__pred(__first)) + ++__n; + return __n; + } + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __remove_if(_ForwardIterator __first, _ForwardIterator __last, + _Predicate __pred) + { + __first = std::__find_if(__first, __last, __pred); + if (__first == __last) + return __first; + _ForwardIterator __result = __first; + ++__first; + for (; __first != __last; ++__first) + if (!__pred(__first)) + { + *__result = _GLIBCXX_MOVE(*__first); + ++__result; + } + return __result; + } + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator1 + __search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _ForwardIterator2 __last2, + _BinaryPredicate __predicate) + { + // Test for empty ranges + if (__first1 == __last1 || __first2 == __last2) + return __first1; + + // Test for a pattern of length 1. + _ForwardIterator2 __p1(__first2); + if (++__p1 == __last2) + return std::__find_if(__first1, __last1, + __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); + + // General case. + _ForwardIterator1 __current = __first1; + + for (;;) + { + __first1 = + std::__find_if(__first1, __last1, + __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); + + if (__first1 == __last1) + return __last1; + + _ForwardIterator2 __p = __p1; + __current = __first1; + if (++__current == __last1) + return __last1; + + while (__predicate(__current, __p)) + { + if (++__p == __last2) + return __first1; + if (++__current == __last1) + return __last1; + } + ++__first1; + } + return __first1; + } + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + bool + __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _BinaryPredicate __pred) + { + // Efficiently compare identical prefixes: O(N) if sequences + // have the same elements in the same order. + for (; __first1 != __last1; ++__first1, (void)++__first2) + if (!__pred(__first1, __first2)) + break; + + if (__first1 == __last1) + return true; + + // Establish __last2 assuming equal ranges by iterating over the + // rest of the list. + _ForwardIterator2 __last2 = __first2; + std::advance(__last2, std::distance(__first1, __last1)); + for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan) + { + if (__scan != std::__find_if(__first1, __scan, + __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))) + continue; // We've seen this one before. + + auto __matches + = std::__count_if(__first2, __last2, + __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)); + if (0 == __matches || + std::__count_if(__scan, __last1, + __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)) + != __matches) + return false; + } + return true; + } + + /** + * @brief Checks whether a permutation of the second sequence is equal + * to the first sequence. + * @ingroup non_mutating_algorithms + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @return true if there exists a permutation of the elements in the range + * [__first2, __first2 + (__last1 - __first1)), beginning with + * ForwardIterator2 begin, such that equal(__first1, __last1, begin) + * returns true; otherwise, returns false. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>) + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_ForwardIterator1>::value_type, + typename iterator_traits<_ForwardIterator2>::value_type>) + __glibcxx_requires_valid_range(__first1, __last1); + + return std::__is_permutation(__first1, __last1, __first2, + __gnu_cxx::__ops::__iter_equal_to_iter()); + } +#endif // C++11 + +_GLIBCXX_BEGIN_NAMESPACE_ALGO + + /** + * @brief Search a sequence for a matching sub-sequence using a predicate. + * @ingroup non_mutating_algorithms + * @param __first1 A forward iterator. + * @param __last1 A forward iterator. + * @param __first2 A forward iterator. + * @param __last2 A forward iterator. + * @param __predicate A binary predicate. + * @return The first iterator @c i in the range + * @p [__first1,__last1-(__last2-__first2)) such that + * @p __predicate(*(i+N),*(__first2+N)) is true for each @c N in the range + * @p [0,__last2-__first2), or @p __last1 if no such iterator exists. + * + * Searches the range @p [__first1,__last1) for a sub-sequence that + * compares equal value-by-value with the sequence given by @p + * [__first2,__last2), using @p __predicate to determine equality, + * and returns an iterator to the first element of the + * sub-sequence, or @p __last1 if no such iterator exists. + * + * @see search(_ForwardIter1, _ForwardIter1, _ForwardIter2, _ForwardIter2) + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator1 + search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _ForwardIterator2 __last2, + _BinaryPredicate __predicate) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>) + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>) + __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate, + typename iterator_traits<_ForwardIterator1>::value_type, + typename iterator_traits<_ForwardIterator2>::value_type>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + return std::__search(__first1, __last1, __first2, __last2, + __gnu_cxx::__ops::__iter_comp_iter(__predicate)); + } + +_GLIBCXX_END_NAMESPACE_ALGO +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +// NB: This file is included within many other C++ includes, as a way +// of getting the base algorithms. So, make sure that parallel bits +// come in too if requested. +#ifdef _GLIBCXX_PARALLEL +# include +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_algobase.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_algobase.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..28117746e3a2d2413f564a7ad327f6b7fec855af GIT binary patch literal 139927 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 specialization -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996-1999 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_bvector.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{vector} + */ + +#ifndef _STL_BVECTOR_H +#define _STL_BVECTOR_H 1 + +#ifndef _GLIBCXX_ALWAYS_INLINE +#define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__)) +#endif + +#if __cplusplus >= 201103L +#include +#include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + typedef unsigned long _Bit_type; + enum { _S_word_bit = int(__CHAR_BIT__ * sizeof(_Bit_type)) }; + + __attribute__((__nonnull__)) + _GLIBCXX20_CONSTEXPR + void + __fill_bvector_n(_Bit_type*, size_t, bool) _GLIBCXX_NOEXCEPT; + +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER + + struct _Bit_reference + { + private: + template friend class vector; + friend struct _Bit_iterator; + friend struct _Bit_const_iterator; + + _GLIBCXX20_CONSTEXPR + _Bit_reference() _GLIBCXX_NOEXCEPT : _M_p(0), _M_mask(0) { } + + _Bit_type * _M_p; + _Bit_type _M_mask; + + _GLIBCXX20_CONSTEXPR + _Bit_reference(_Bit_type * __x, _Bit_type __y) + : _M_p(__x), _M_mask(__y) { } + + public: +#if __cplusplus >= 201103L + _Bit_reference(const _Bit_reference&) = default; +#endif + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + operator bool() const _GLIBCXX_NOEXCEPT + { return !!(*_M_p & _M_mask); } + + _GLIBCXX20_CONSTEXPR + _Bit_reference& + operator=(bool __x) _GLIBCXX_NOEXCEPT + { + if (__x) + *_M_p |= _M_mask; + else + *_M_p &= ~_M_mask; + return *this; + } + +#if __cplusplus > 202002L + constexpr const _Bit_reference& + operator=(bool __x) const noexcept + { + if (__x) + *_M_p |= _M_mask; + else + *_M_p &= ~_M_mask; + return *this; + } +#endif // C++23 + + _GLIBCXX20_CONSTEXPR + _Bit_reference& + operator=(const _Bit_reference& __x) _GLIBCXX_NOEXCEPT + { return *this = bool(__x); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + bool + operator==(const _Bit_reference& __x) const + { return bool(*this) == bool(__x); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + bool + operator<(const _Bit_reference& __x) const + { return !bool(*this) && bool(__x); } + + _GLIBCXX20_CONSTEXPR + void + flip() _GLIBCXX_NOEXCEPT + { *_M_p ^= _M_mask; } + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + friend void + swap(_Bit_reference __x, _Bit_reference __y) noexcept + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } + + _GLIBCXX20_CONSTEXPR + friend void + swap(_Bit_reference __x, bool& __y) noexcept + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } + + _GLIBCXX20_CONSTEXPR + friend void + swap(bool& __x, _Bit_reference __y) noexcept + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } +#endif + }; + +// Ignore warnings about std::iterator. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + struct _Bit_iterator_base + : public std::iterator + { + _Bit_type * _M_p; + unsigned int _M_offset; + + _GLIBCXX20_CONSTEXPR _GLIBCXX_ALWAYS_INLINE + void + _M_assume_normalized() const + { +#if __has_attribute(__assume__) && !defined(_GLIBCXX_CLANG) + unsigned int __ofst = _M_offset; + __attribute__ ((__assume__ (__ofst < unsigned(_S_word_bit)))); +#endif + } + + _GLIBCXX20_CONSTEXPR + _Bit_iterator_base(_Bit_type * __x, unsigned int __y) + : _M_p(__x), _M_offset(__y) { } + + _GLIBCXX20_CONSTEXPR + void + _M_bump_up() + { + _M_assume_normalized(); + if (_M_offset++ == int(_S_word_bit) - 1) + { + _M_offset = 0; + ++_M_p; + } + } + + _GLIBCXX20_CONSTEXPR + void + _M_bump_down() + { + _M_assume_normalized(); + if (_M_offset-- == 0) + { + _M_offset = int(_S_word_bit) - 1; + --_M_p; + } + } + + _GLIBCXX20_CONSTEXPR + void + _M_incr(ptrdiff_t __i) + { + _M_assume_normalized(); + difference_type __n = __i + _M_offset; + _M_p += __n / int(_S_word_bit); + __n = __n % int(_S_word_bit); + if (__n < 0) + { + __n += int(_S_word_bit); + --_M_p; + } + _M_offset = static_cast(__n); + } + + _GLIBCXX_NODISCARD + friend _GLIBCXX20_CONSTEXPR bool + operator==(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { + __x._M_assume_normalized(); + __y._M_assume_normalized(); + return __x._M_p == __y._M_p && __x._M_offset == __y._M_offset; + } + +#if __cpp_lib_three_way_comparison + [[nodiscard]] + friend constexpr strong_ordering + operator<=>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + noexcept + { + __x._M_assume_normalized(); + __y._M_assume_normalized(); + if (const auto __cmp = __x._M_p <=> __y._M_p; __cmp != 0) + return __cmp; + return __x._M_offset <=> __y._M_offset; + } +#else + _GLIBCXX_NODISCARD + friend bool + operator<(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { + __x._M_assume_normalized(); + __y._M_assume_normalized(); + return __x._M_p < __y._M_p + || (__x._M_p == __y._M_p && __x._M_offset < __y._M_offset); + } + + _GLIBCXX_NODISCARD + friend bool + operator!=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { return !(__x == __y); } + + _GLIBCXX_NODISCARD + friend bool + operator>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { return __y < __x; } + + _GLIBCXX_NODISCARD + friend bool + operator<=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { return !(__y < __x); } + + _GLIBCXX_NODISCARD + friend bool + operator>=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { return !(__x < __y); } +#endif // three-way comparison + + friend _GLIBCXX20_CONSTEXPR ptrdiff_t + operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { + __x._M_assume_normalized(); + __y._M_assume_normalized(); + return (int(_S_word_bit) * (__x._M_p - __y._M_p) + + __x._M_offset - __y._M_offset); + } + }; +#pragma GCC diagnostic pop + + struct _Bit_iterator : public _Bit_iterator_base + { + typedef _Bit_reference reference; +#if __cplusplus > 201703L + typedef void pointer; +#else + typedef _Bit_reference* pointer; +#endif + typedef _Bit_iterator iterator; + + _GLIBCXX20_CONSTEXPR + _Bit_iterator() : _Bit_iterator_base(0, 0) { } + + _GLIBCXX20_CONSTEXPR + _Bit_iterator(_Bit_type * __x, unsigned int __y) + : _Bit_iterator_base(__x, __y) { } + + _GLIBCXX20_CONSTEXPR + iterator + _M_const_cast() const + { return *this; } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + operator*() const + { + _M_assume_normalized(); + return reference(_M_p, 1UL << _M_offset); + } + + _GLIBCXX20_CONSTEXPR + iterator& + operator++() + { + _M_bump_up(); + return *this; + } + + _GLIBCXX20_CONSTEXPR + iterator + operator++(int) + { + iterator __tmp = *this; + _M_bump_up(); + return __tmp; + } + + _GLIBCXX20_CONSTEXPR + iterator& + operator--() + { + _M_bump_down(); + return *this; + } + + _GLIBCXX20_CONSTEXPR + iterator + operator--(int) + { + iterator __tmp = *this; + _M_bump_down(); + return __tmp; + } + + _GLIBCXX20_CONSTEXPR + iterator& + operator+=(difference_type __i) + { + _M_incr(__i); + return *this; + } + + _GLIBCXX20_CONSTEXPR + iterator& + operator-=(difference_type __i) + { + *this += -__i; + return *this; + } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + operator[](difference_type __i) const + { return *(*this + __i); } + + _GLIBCXX_NODISCARD + friend _GLIBCXX20_CONSTEXPR iterator + operator+(const iterator& __x, difference_type __n) + { + iterator __tmp = __x; + __tmp += __n; + return __tmp; + } + + _GLIBCXX_NODISCARD + friend _GLIBCXX20_CONSTEXPR iterator + operator+(difference_type __n, const iterator& __x) + { return __x + __n; } + + _GLIBCXX_NODISCARD + friend _GLIBCXX20_CONSTEXPR iterator + operator-(const iterator& __x, difference_type __n) + { + iterator __tmp = __x; + __tmp -= __n; + return __tmp; + } + }; + + struct _Bit_const_iterator : public _Bit_iterator_base + { + typedef bool reference; + typedef bool const_reference; +#if __cplusplus > 201703L + typedef void pointer; +#else + typedef const bool* pointer; +#endif + typedef _Bit_const_iterator const_iterator; + + _GLIBCXX20_CONSTEXPR + _Bit_const_iterator() : _Bit_iterator_base(0, 0) { } + + _GLIBCXX20_CONSTEXPR + _Bit_const_iterator(_Bit_type * __x, unsigned int __y) + : _Bit_iterator_base(__x, __y) { } + + _GLIBCXX20_CONSTEXPR + _Bit_const_iterator(const _Bit_iterator& __x) + : _Bit_iterator_base(__x._M_p, __x._M_offset) { } + + _GLIBCXX20_CONSTEXPR + _Bit_iterator + _M_const_cast() const + { return _Bit_iterator(_M_p, _M_offset); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + operator*() const + { + _M_assume_normalized(); + return _Bit_reference(_M_p, 1UL << _M_offset); + } + + _GLIBCXX20_CONSTEXPR + const_iterator& + operator++() + { + _M_bump_up(); + return *this; + } + + _GLIBCXX20_CONSTEXPR + const_iterator + operator++(int) + { + const_iterator __tmp = *this; + _M_bump_up(); + return __tmp; + } + + _GLIBCXX20_CONSTEXPR + const_iterator& + operator--() + { + _M_bump_down(); + return *this; + } + + _GLIBCXX20_CONSTEXPR + const_iterator + operator--(int) + { + const_iterator __tmp = *this; + _M_bump_down(); + return __tmp; + } + + _GLIBCXX20_CONSTEXPR + const_iterator& + operator+=(difference_type __i) + { + _M_incr(__i); + return *this; + } + + _GLIBCXX20_CONSTEXPR + const_iterator& + operator-=(difference_type __i) + { + *this += -__i; + return *this; + } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + operator[](difference_type __i) const + { return *(*this + __i); } + + _GLIBCXX_NODISCARD + friend _GLIBCXX20_CONSTEXPR const_iterator + operator+(const const_iterator& __x, difference_type __n) + { + const_iterator __tmp = __x; + __tmp += __n; + return __tmp; + } + + _GLIBCXX_NODISCARD + friend _GLIBCXX20_CONSTEXPR const_iterator + operator-(const const_iterator& __x, difference_type __n) + { + const_iterator __tmp = __x; + __tmp -= __n; + return __tmp; + } + + _GLIBCXX_NODISCARD + friend _GLIBCXX20_CONSTEXPR const_iterator + operator+(difference_type __n, const const_iterator& __x) + { return __x + __n; } + }; + + template + struct _Bvector_base + { + typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template + rebind<_Bit_type>::other _Bit_alloc_type; + typedef typename __gnu_cxx::__alloc_traits<_Bit_alloc_type> + _Bit_alloc_traits; + typedef typename _Bit_alloc_traits::pointer _Bit_pointer; + + struct _Bvector_impl_data + { +#if !_GLIBCXX_INLINE_VERSION + _Bit_iterator _M_start; +#else + // We don't need the offset field for the start, it's always zero. + struct { + _Bit_type* _M_p; + // Allow assignment from iterators (assume offset is zero): + _GLIBCXX20_CONSTEXPR + void operator=(_Bit_iterator __it) { _M_p = __it._M_p; } + } _M_start; +#endif + _Bit_iterator _M_finish; + _Bit_pointer _M_end_of_storage; + + _GLIBCXX20_CONSTEXPR + _Bvector_impl_data() _GLIBCXX_NOEXCEPT + : _M_start(), _M_finish(), _M_end_of_storage() + { } + +#if __cplusplus >= 201103L + _Bvector_impl_data(const _Bvector_impl_data&) = default; + + _Bvector_impl_data& + operator=(const _Bvector_impl_data&) = default; + + _GLIBCXX20_CONSTEXPR + _Bvector_impl_data(_Bvector_impl_data&& __x) noexcept + : _Bvector_impl_data(__x) + { __x._M_reset(); } + + _GLIBCXX20_CONSTEXPR + void + _M_move_data(_Bvector_impl_data&& __x) noexcept + { + *this = __x; + __x._M_reset(); + } +#endif + + _GLIBCXX20_CONSTEXPR + void + _M_reset() _GLIBCXX_NOEXCEPT + { *this = _Bvector_impl_data(); } + + _GLIBCXX20_CONSTEXPR + void + _M_swap_data(_Bvector_impl_data& __x) _GLIBCXX_NOEXCEPT + { + // Do not use std::swap(_M_start, __x._M_start), etc as it loses + // information used by TBAA. + std::swap(*this, __x); + } + }; + + struct _Bvector_impl + : public _Bit_alloc_type, public _Bvector_impl_data + { + _GLIBCXX20_CONSTEXPR + _Bvector_impl() _GLIBCXX_NOEXCEPT_IF( + is_nothrow_default_constructible<_Bit_alloc_type>::value) +#if __cpp_concepts && __glibcxx_type_trait_variable_templates + requires is_default_constructible_v<_Bit_alloc_type> +#endif + : _Bit_alloc_type() + { } + + _GLIBCXX20_CONSTEXPR + _Bvector_impl(const _Bit_alloc_type& __a) _GLIBCXX_NOEXCEPT + : _Bit_alloc_type(__a) + { } + +#if __cplusplus >= 201103L + // Not defaulted, to enforce noexcept(true) even when + // !is_nothrow_move_constructible<_Bit_alloc_type>. + _GLIBCXX20_CONSTEXPR + _Bvector_impl(_Bvector_impl&& __x) noexcept + : _Bit_alloc_type(std::move(__x)), _Bvector_impl_data(std::move(__x)) + { } + + _GLIBCXX20_CONSTEXPR + _Bvector_impl(_Bit_alloc_type&& __a, _Bvector_impl&& __x) noexcept + : _Bit_alloc_type(std::move(__a)), _Bvector_impl_data(std::move(__x)) + { } +#endif + + _GLIBCXX20_CONSTEXPR + _Bit_type* + _M_end_addr() const _GLIBCXX_NOEXCEPT + { + if (this->_M_end_of_storage) + return std::__addressof(this->_M_end_of_storage[-1]) + 1; + return 0; + } + }; + + public: + typedef _Alloc allocator_type; + + _GLIBCXX20_CONSTEXPR + _Bit_alloc_type& + _M_get_Bit_allocator() _GLIBCXX_NOEXCEPT + { return this->_M_impl; } + + _GLIBCXX20_CONSTEXPR + const _Bit_alloc_type& + _M_get_Bit_allocator() const _GLIBCXX_NOEXCEPT + { return this->_M_impl; } + + _GLIBCXX20_CONSTEXPR + allocator_type + get_allocator() const _GLIBCXX_NOEXCEPT + { return allocator_type(_M_get_Bit_allocator()); } + +#if __cplusplus >= 201103L + _Bvector_base() = default; +#else + _Bvector_base() { } +#endif + + _GLIBCXX20_CONSTEXPR + _Bvector_base(const allocator_type& __a) + : _M_impl(_Bit_alloc_type(__a)) { } + +#if __cplusplus >= 201103L + _Bvector_base(_Bvector_base&&) = default; + + _GLIBCXX20_CONSTEXPR + _Bvector_base(_Bvector_base&& __x, const allocator_type& __a) noexcept + : _M_impl(_Bit_alloc_type(__a), std::move(__x._M_impl)) + { } +#endif + + _GLIBCXX20_CONSTEXPR + ~_Bvector_base() + { this->_M_deallocate(); } + + protected: + _Bvector_impl _M_impl; + + _GLIBCXX20_CONSTEXPR + _Bit_pointer + _M_allocate(size_t __n) + { + _Bit_pointer __p = _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); +#if __cpp_lib_is_constant_evaluated && __cpp_constexpr_dynamic_alloc + if (std::is_constant_evaluated()) + { + __n = _S_nword(__n); + for (size_t __i = 0; __i < __n; ++__i) + std::construct_at(std::to_address(__p) + __i); + } +#endif + return __p; + } + + _GLIBCXX20_CONSTEXPR + void + _M_deallocate() + { + if (_M_impl._M_start._M_p) + { + const size_t __n = _M_impl._M_end_addr() - _M_impl._M_start._M_p; + _Bit_alloc_traits::deallocate(_M_impl, + _M_impl._M_end_of_storage - __n, + __n); + _M_impl._M_reset(); + } + } + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + void + _M_move_data(_Bvector_base&& __x) noexcept + { _M_impl._M_move_data(std::move(__x._M_impl)); } +#endif + + _GLIBCXX_CONSTEXPR + static size_t + _S_nword(size_t __n) + { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); } + }; + + /** + * @brief A specialization of vector for booleans which offers fixed time + * access to individual elements in any order. + * + * @ingroup sequences + * @headerfile vector + * @since C++98 + * + * @tparam _Alloc Allocator type. + * + * Note that vector does not actually meet the requirements for being + * a container. This is because the reference and pointer types are not + * really references and pointers to bool. See DR96 for details. @see + * vector for function documentation. + * + * In some terminology a %vector can be described as a dynamic + * C-style array, it offers fast and efficient access to individual + * elements in any order and saves the user from worrying about + * memory and size allocation. Subscripting ( @c [] ) access is + * also provided as with C-style arrays. + */ + template + class vector : protected _Bvector_base<_Alloc> + { + typedef _Bvector_base<_Alloc> _Base; + typedef typename _Base::_Bit_pointer _Bit_pointer; + typedef typename _Base::_Bit_alloc_traits _Bit_alloc_traits; + +#if __cplusplus >= 201103L + friend struct std::hash; +# if __cplusplus > 201703L // || defined __STRICT_ANSI__ + static_assert(is_same::value, + "std::vector must have the same value_type as its allocator"); +# endif +#endif + + public: + typedef bool value_type; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef _Bit_reference reference; + typedef bool const_reference; + typedef _Bit_reference* pointer; + typedef const bool* const_pointer; + typedef _Bit_iterator iterator; + typedef _Bit_const_iterator const_iterator; + typedef std::reverse_iterator const_reverse_iterator; + typedef std::reverse_iterator reverse_iterator; + typedef _Alloc allocator_type; + + _GLIBCXX20_CONSTEXPR + allocator_type + get_allocator() const + { return _Base::get_allocator(); } + + protected: + using _Base::_M_allocate; + using _Base::_M_deallocate; + using _Base::_S_nword; + using _Base::_M_get_Bit_allocator; + + public: +#if __cplusplus >= 201103L + vector() = default; +#else + vector() { } +#endif + + _GLIBCXX20_CONSTEXPR + explicit + vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT + : _Base(__a) { } + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + explicit + vector(size_type __n, const allocator_type& __a = allocator_type()) + : vector(__n, false, __a) + { } + + _GLIBCXX20_CONSTEXPR + vector(size_type __n, const bool& __value, + const allocator_type& __a = allocator_type()) +#else + explicit + vector(size_type __n, const bool& __value = bool(), + const allocator_type& __a = allocator_type()) +#endif + : _Base(__a) + { + _M_initialize(__n); + _M_initialize_value(__value); + } + + _GLIBCXX20_CONSTEXPR + vector(const vector& __x) + : _Base(_Bit_alloc_traits::_S_select_on_copy(__x._M_get_Bit_allocator())) + { + const_iterator __xbegin = __x.begin(), __xend = __x.end(); + _M_initialize(__x.size()); + _M_copy_aligned(__xbegin, __xend, begin()); + } + +#if __cplusplus >= 201103L + vector(vector&&) = default; + + private: + _GLIBCXX20_CONSTEXPR + vector(vector&& __x, const allocator_type& __a, true_type) noexcept + : _Base(std::move(__x), __a) + { } + + _GLIBCXX20_CONSTEXPR + vector(vector&& __x, const allocator_type& __a, false_type) + : _Base(__a) + { + if (__x.get_allocator() == __a) + this->_M_move_data(std::move(__x)); + else + { + _M_initialize(__x.size()); + _M_copy_aligned(__x.begin(), __x.end(), begin()); + __x.clear(); + } + } + + public: + _GLIBCXX20_CONSTEXPR + vector(vector&& __x, const __type_identity_t& __a) + noexcept(_Bit_alloc_traits::_S_always_equal()) + : vector(std::move(__x), __a, + typename _Bit_alloc_traits::is_always_equal{}) + { } + + _GLIBCXX20_CONSTEXPR + vector(const vector& __x, const __type_identity_t& __a) + : _Base(__a) + { + _M_initialize(__x.size()); + _M_copy_aligned(__x.begin(), __x.end(), begin()); + } + + _GLIBCXX20_CONSTEXPR + vector(initializer_list __l, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { + _M_initialize_range(__l.begin(), __l.end(), + random_access_iterator_tag()); + } +#endif + +#if __cplusplus >= 201103L + template> + _GLIBCXX20_CONSTEXPR + vector(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { + _M_initialize_range(__first, __last, + std::__iterator_category(__first)); + } +#else + template + vector(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { + // Check whether it's an integral type. If so, it's not an iterator. + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_initialize_dispatch(__first, __last, _Integral()); + } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Construct a vector from a range. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + */ + template<__detail::__container_compatible_range _Rg> + constexpr + vector(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc()) + : _Base(__a) + { + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + _M_initialize(size_type(ranges::distance(__rg))); + ranges::copy(__rg, begin()); + } + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + for (; __first != __last; ++__first) + emplace_back(*__first); + } + } +#endif + + _GLIBCXX20_CONSTEXPR + ~vector() _GLIBCXX_NOEXCEPT { } + + _GLIBCXX20_CONSTEXPR + vector& + operator=(const vector& __x) + { + if (&__x == this) + return *this; +#if __cplusplus >= 201103L + if (_Bit_alloc_traits::_S_propagate_on_copy_assign()) + { + if (this->_M_get_Bit_allocator() != __x._M_get_Bit_allocator()) + { + this->_M_deallocate(); + std::__alloc_on_copy(_M_get_Bit_allocator(), + __x._M_get_Bit_allocator()); + _M_initialize(__x.size()); + } + else + std::__alloc_on_copy(_M_get_Bit_allocator(), + __x._M_get_Bit_allocator()); + } +#endif + if (__x.size() > capacity()) + { + this->_M_deallocate(); + _M_initialize(__x.size()); + } + this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), + begin()); + return *this; + } + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + vector& + operator=(vector&& __x) noexcept(_Bit_alloc_traits::_S_nothrow_move()) + { + if (_Bit_alloc_traits::_S_propagate_on_move_assign() + || this->_M_get_Bit_allocator() == __x._M_get_Bit_allocator()) + { + this->_M_deallocate(); + this->_M_move_data(std::move(__x)); + std::__alloc_on_move(_M_get_Bit_allocator(), + __x._M_get_Bit_allocator()); + } + else + { + if (__x.size() > capacity()) + { + this->_M_deallocate(); + _M_initialize(__x.size()); + } + this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), + begin()); + __x.clear(); + } + return *this; + } + + _GLIBCXX20_CONSTEXPR + vector& + operator=(initializer_list __l) + { + this->assign(__l.begin(), __l.end()); + return *this; + } +#endif + + // assign(), a generalized assignment member function. Two + // versions: one that takes a count, and one that takes a range. + // The range version is a member template, so we dispatch on whether + // or not the type is an integer. + _GLIBCXX20_CONSTEXPR + void + assign(size_type __n, const bool& __x) + { _M_fill_assign(__n, __x); } + +#if __cplusplus >= 201103L + template> + _GLIBCXX20_CONSTEXPR + void + assign(_InputIterator __first, _InputIterator __last) + { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } +#else + template + void + assign(_InputIterator __first, _InputIterator __last) + { + // Check whether it's an integral type. If so, it's not an iterator. + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_assign_dispatch(__first, __last, _Integral()); + } +#endif + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + void + assign(initializer_list __l) + { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Assign a range to the vector. + * @param __rg A range of values that are convertible to `value_type`. + * @pre `__rg` and `*this` do not overlap. + * @since C++23 + */ + template<__detail::__container_compatible_range _Rg> + constexpr void + assign_range(_Rg&& __rg) + { + static_assert(assignable_from>); + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + if (auto __n = size_type(ranges::distance(__rg))) + { + reserve(__n); + this->_M_impl._M_finish + = ranges::copy(std::forward<_Rg>(__rg), begin()).out; + } + else + clear(); + } + else + { + clear(); + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + for (; __first != __last; ++__first) + emplace_back(*__first); + } + } +#endif + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + iterator + begin() _GLIBCXX_NOEXCEPT + { return iterator(this->_M_impl._M_start._M_p, 0); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_iterator + begin() const _GLIBCXX_NOEXCEPT + { return const_iterator(this->_M_impl._M_start._M_p, 0); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + iterator + end() _GLIBCXX_NOEXCEPT + { return this->_M_impl._M_finish; } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_iterator + end() const _GLIBCXX_NOEXCEPT + { return this->_M_impl._M_finish; } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reverse_iterator + rbegin() _GLIBCXX_NOEXCEPT + { return reverse_iterator(end()); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reverse_iterator + rbegin() const _GLIBCXX_NOEXCEPT + { return const_reverse_iterator(end()); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reverse_iterator + rend() _GLIBCXX_NOEXCEPT + { return reverse_iterator(begin()); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reverse_iterator + rend() const _GLIBCXX_NOEXCEPT + { return const_reverse_iterator(begin()); } + +#if __cplusplus >= 201103L + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR + const_iterator + cbegin() const noexcept + { return const_iterator(this->_M_impl._M_start._M_p, 0); } + + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR + const_iterator + cend() const noexcept + { return this->_M_impl._M_finish; } + + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR + const_reverse_iterator + crbegin() const noexcept + { return const_reverse_iterator(end()); } + + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR + const_reverse_iterator + crend() const noexcept + { return const_reverse_iterator(begin()); } +#endif + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + size() const _GLIBCXX_NOEXCEPT + { return size_type(end() - begin()); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + max_size() const _GLIBCXX_NOEXCEPT + { + const size_type __isize = + __gnu_cxx::__numeric_traits::__max + - int(_S_word_bit) + 1; + const size_type __asize + = _Bit_alloc_traits::max_size(_M_get_Bit_allocator()); + return (__asize <= __isize / int(_S_word_bit) + ? __asize * int(_S_word_bit) : __isize); + } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + capacity() const _GLIBCXX_NOEXCEPT + { return size_type(const_iterator(this->_M_impl._M_end_addr(), 0) + - begin()); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + bool + empty() const _GLIBCXX_NOEXCEPT + { return begin() == end(); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + operator[](size_type __n) + { + __glibcxx_requires_subscript(__n); + return _Bit_reference (this->_M_impl._M_start._M_p + + __n / int(_S_word_bit), + 1UL << __n % int(_S_word_bit)); + } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + operator[](size_type __n) const + { + __glibcxx_requires_subscript(__n); + return _Bit_reference (this->_M_impl._M_start._M_p + + __n / int(_S_word_bit), + 1UL << __n % int(_S_word_bit)); + } + + protected: + _GLIBCXX20_CONSTEXPR + void + _M_range_check(size_type __n) const + { + if (__n >= this->size()) + __throw_out_of_range_fmt(__N("vector::_M_range_check: __n " + "(which is %zu) >= this->size() " + "(which is %zu)"), + __n, this->size()); + } + + public: + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + at(size_type __n) + { + _M_range_check(__n); + return (*this)[__n]; + } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + at(size_type __n) const + { + _M_range_check(__n); + return (*this)[__n]; + } + + _GLIBCXX20_CONSTEXPR + void + reserve(size_type __n) + { + if (__n > max_size()) + __throw_length_error(__N("vector::reserve")); + if (capacity() < __n) + _M_reallocate(__n); + } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + front() + { + __glibcxx_requires_nonempty(); + return *begin(); + } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + front() const + { + __glibcxx_requires_nonempty(); + return *begin(); + } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + back() + { + __glibcxx_requires_nonempty(); + return *(end() - 1); + } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + back() const + { + __glibcxx_requires_nonempty(); + return *(end() - 1); + } + + _GLIBCXX20_CONSTEXPR + void + push_back(bool __x) + { + if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) + *this->_M_impl._M_finish++ = __x; + else + _M_insert_aux(end(), __x); + } + + _GLIBCXX20_CONSTEXPR + void + swap(vector& __x) _GLIBCXX_NOEXCEPT + { +#if __cplusplus >= 201103L + __glibcxx_assert(_Bit_alloc_traits::propagate_on_container_swap::value + || _M_get_Bit_allocator() == __x._M_get_Bit_allocator()); +#endif + this->_M_impl._M_swap_data(__x._M_impl); + _Bit_alloc_traits::_S_on_swap(_M_get_Bit_allocator(), + __x._M_get_Bit_allocator()); + } + + // [23.2.5]/1, third-to-last entry in synopsis listing + _GLIBCXX20_CONSTEXPR + static void + swap(reference __x, reference __y) _GLIBCXX_NOEXCEPT + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } + + _GLIBCXX20_CONSTEXPR + iterator +#if __cplusplus >= 201103L + insert(const_iterator __position, const bool& __x) +#else + insert(iterator __position, const bool& __x) +#endif + { + const difference_type __n = __position - begin(); + if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr() + && __position == end()) + *this->_M_impl._M_finish++ = __x; + else + _M_insert_aux(__position._M_const_cast(), __x); + return begin() + __n; + } + +#if _GLIBCXX_USE_DEPRECATED + _GLIBCXX_DEPRECATED_SUGGEST("insert(position, false)") + iterator + insert(const_iterator __position) + { return this->insert(__position._M_const_cast(), false); } +#endif + +#if __cplusplus >= 201103L + template> + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __position, + _InputIterator __first, _InputIterator __last) + { + difference_type __offset = __position - cbegin(); + _M_insert_range(__position._M_const_cast(), + __first, __last, + std::__iterator_category(__first)); + return begin() + __offset; + } +#else + template + void + insert(iterator __position, + _InputIterator __first, _InputIterator __last) + { + // Check whether it's an integral type. If so, it's not an iterator. + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_insert_dispatch(__position, __first, __last, _Integral()); + } +#endif + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __position, size_type __n, const bool& __x) + { + difference_type __offset = __position - cbegin(); + _M_fill_insert(__position._M_const_cast(), __n, __x); + return begin() + __offset; + } +#else + void + insert(iterator __position, size_type __n, const bool& __x) + { _M_fill_insert(__position, __n, __x); } +#endif + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __p, initializer_list __l) + { return this->insert(__p, __l.begin(), __l.end()); } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Insert a range into the vector. + * @param __rg A range of values that are convertible to `bool`. + * @return An iterator that points to the first new element inserted, + * or to `__pos` if `__rg` is an empty range. + * @pre `__rg` and `*this` do not overlap. + * @since C++23 + */ + template<__detail::__container_compatible_range _Rg> + constexpr iterator + insert_range(const_iterator __pos, _Rg&& __rg) + { + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + if (auto __n = size_type(ranges::distance(__rg))) + { + if (capacity() - size() >= __n) + { + std::copy_backward(__pos._M_const_cast(), end(), + this->_M_impl._M_finish + + difference_type(__n)); + ranges::copy(__rg, __pos._M_const_cast()); + this->_M_impl._M_finish += difference_type(__n); + return __pos._M_const_cast(); + } + else + { + const size_type __len = + _M_check_len(__n, "vector::insert_range"); + const iterator __begin = begin(), __end = end(); + _Bit_pointer __q = this->_M_allocate(__len); + iterator __start(std::__addressof(*__q), 0); + iterator __i = _M_copy_aligned(__begin, + __pos._M_const_cast(), + __start); + iterator __j = ranges::copy(__rg, __i).out; + iterator __finish = std::copy(__pos._M_const_cast(), + __end, __j); + this->_M_deallocate(); + this->_M_impl._M_end_of_storage = __q + _S_nword(__len); + this->_M_impl._M_start = __start; + this->_M_impl._M_finish = __finish; + return __i; + } + } + else + return __pos._M_const_cast(); + } + else + return insert_range(__pos, + vector(from_range, __rg, get_allocator())); + } + + /** + * @brief Append a range at the end of the vector. + * @since C++23 + */ + template<__detail::__container_compatible_range _Rg> + constexpr void + append_range(_Rg&& __rg) + { + // N.B. __rg may overlap with *this, so we must copy from __rg before + // existing elements or iterators referring to *this are invalidated. + // e.g. in v.append_range(views::concat(v, foo)) rg overlaps v. + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + const auto __n = size_type(ranges::distance(__rg)); + + // If there is no existing storage, there are no iterators that + // can be referring to our storage, so it's safe to allocate now. + if (capacity() == 0) + reserve(__n); + + const auto __sz = size(); + const auto __capacity = capacity(); + if ((__capacity - __sz) >= __n) + { + this->_M_impl._M_finish + = ranges::copy(std::forward<_Rg>(__rg), end()).out; + return; + } + + vector __tmp(get_allocator()); + __tmp.reserve(_M_check_len(__n, "vector::append_range")); + __tmp._M_impl._M_finish + = _M_copy_aligned(cbegin(), cend(), __tmp.begin()); + __tmp._M_impl._M_finish + = ranges::copy(std::forward<_Rg>(__rg), __tmp.end()).out; + swap(__tmp); + } + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + + // Fill up to the end of current capacity. + for (auto __free = capacity() - size(); + __first != __last && __free > 0; + ++__first, (void) --__free) + emplace_back(*__first); + + if (__first == __last) + return; + + // Copy the rest of the range to a new vector. + ranges::subrange __rest(std::move(__first), __last); + vector __tmp(from_range, __rest, get_allocator()); + insert(end(), __tmp.begin(), __tmp.end()); + } + } +#endif // containers_ranges + + _GLIBCXX20_CONSTEXPR + void + pop_back() + { --this->_M_impl._M_finish; } + + _GLIBCXX20_CONSTEXPR + iterator +#if __cplusplus >= 201103L + erase(const_iterator __position) +#else + erase(iterator __position) +#endif + { return _M_erase(__position._M_const_cast()); } + + _GLIBCXX20_CONSTEXPR + iterator +#if __cplusplus >= 201103L + erase(const_iterator __first, const_iterator __last) +#else + erase(iterator __first, iterator __last) +#endif + { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); } + + _GLIBCXX20_CONSTEXPR + void + resize(size_type __new_size, bool __x = bool()) + { + if (__new_size < size()) + _M_erase_at_end(begin() + difference_type(__new_size)); + else + insert(end(), __new_size - size(), __x); + } + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + void + shrink_to_fit() + { _M_shrink_to_fit(); } +#endif + + _GLIBCXX20_CONSTEXPR + void + flip() _GLIBCXX_NOEXCEPT + { + _Bit_type * const __end = this->_M_impl._M_end_addr(); + for (_Bit_type * __p = this->_M_impl._M_start._M_p; __p != __end; ++__p) + *__p = ~*__p; + } + + _GLIBCXX20_CONSTEXPR + void + clear() _GLIBCXX_NOEXCEPT + { _M_erase_at_end(begin()); } + +#if __cplusplus >= 201103L + template +#if __cplusplus > 201402L + _GLIBCXX20_CONSTEXPR + reference +#else + void +#endif + emplace_back(_Args&&... __args) + { + push_back(bool(std::forward<_Args>(__args)...)); +#if __cplusplus > 201402L + return back(); +#endif + } + + template + _GLIBCXX20_CONSTEXPR + iterator + emplace(const_iterator __pos, _Args&&... __args) + { return insert(__pos, bool(std::forward<_Args>(__args)...)); } +#endif + + protected: + // Precondition: __first._M_offset == 0 && __result._M_offset == 0. + _GLIBCXX20_CONSTEXPR + iterator + _M_copy_aligned(const_iterator __first, const_iterator __last, + iterator __result) + { + _Bit_type* __q = std::copy(__first._M_p, __last._M_p, __result._M_p); + return std::copy(const_iterator(__last._M_p, 0), __last, + iterator(__q, 0)); + } + + _GLIBCXX20_CONSTEXPR + void + _M_initialize(size_type __n) + { + if (__n) + { + _Bit_pointer __q = this->_M_allocate(__n); + this->_M_impl._M_end_of_storage = __q + _S_nword(__n); + iterator __start = iterator(std::__addressof(*__q), 0); + this->_M_impl._M_start = __start; + this->_M_impl._M_finish = __start + difference_type(__n); + } + } + + _GLIBCXX20_CONSTEXPR + void + _M_initialize_value(bool __x) _GLIBCXX_NOEXCEPT + { + if (_Bit_type* __p = this->_M_impl._M_start._M_p) + __fill_bvector_n(__p, this->_M_impl._M_end_addr() - __p, __x); + } + + _GLIBCXX20_CONSTEXPR + void + _M_reallocate(size_type __n); + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + bool + _M_shrink_to_fit(); +#endif + +#if __cplusplus < 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 438. Ambiguity in the "do the right thing" clause + template + void + _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) + { + _M_initialize(static_cast(__n)); + _M_initialize_value(__x); + } + + template + void + _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, + __false_type) + { _M_initialize_range(__first, __last, + std::__iterator_category(__first)); } +#endif + + template + _GLIBCXX20_CONSTEXPR + void + _M_initialize_range(_InputIterator __first, _InputIterator __last, + std::input_iterator_tag) + { + for (; __first != __last; ++__first) + push_back(*__first); + } + + template + _GLIBCXX20_CONSTEXPR + void + _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last, + std::forward_iterator_tag) + { + const size_type __n = std::distance(__first, __last); + _M_initialize(__n); + std::copy(__first, __last, begin()); + } + +#if __cplusplus < 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 438. Ambiguity in the "do the right thing" clause + template + void + _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) + { _M_fill_assign(__n, __val); } + + template + void + _M_assign_dispatch(_InputIterator __first, _InputIterator __last, + __false_type) + { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } +#endif + + _GLIBCXX20_CONSTEXPR + void + _M_fill_assign(size_t __n, bool __x) + { + if (__n > size()) + { + _M_initialize_value(__x); + insert(end(), __n - size(), __x); + } + else + { + _M_erase_at_end(begin() + __n); + _M_initialize_value(__x); + } + } + + template + _GLIBCXX20_CONSTEXPR + void + _M_assign_aux(_InputIterator __first, _InputIterator __last, + std::input_iterator_tag) + { + iterator __cur = begin(); + for (; __first != __last && __cur != end(); ++__cur, (void)++__first) + *__cur = *__first; + if (__first == __last) + _M_erase_at_end(__cur); + else + insert(end(), __first, __last); + } + + template + _GLIBCXX20_CONSTEXPR + void + _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, + std::forward_iterator_tag) + { + const size_type __len = std::distance(__first, __last); + if (__len < size()) + _M_erase_at_end(std::copy(__first, __last, begin())); + else + { + _ForwardIterator __mid = __first; + std::advance(__mid, size()); + std::copy(__first, __mid, begin()); + insert(end(), __mid, __last); + } + } + +#if __cplusplus < 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 438. Ambiguity in the "do the right thing" clause + template + void + _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x, + __true_type) + { _M_fill_insert(__pos, __n, __x); } + + template + void + _M_insert_dispatch(iterator __pos, + _InputIterator __first, _InputIterator __last, + __false_type) + { _M_insert_range(__pos, __first, __last, + std::__iterator_category(__first)); } +#endif + + _GLIBCXX20_CONSTEXPR + void + _M_fill_insert(iterator __position, size_type __n, bool __x); + + template + _GLIBCXX20_CONSTEXPR + void + _M_insert_range(iterator __pos, _InputIterator __first, + _InputIterator __last, std::input_iterator_tag) + { + for (; __first != __last; ++__first) + { + __pos = insert(__pos, *__first); + ++__pos; + } + } + + template + _GLIBCXX20_CONSTEXPR + void + _M_insert_range(iterator __position, _ForwardIterator __first, + _ForwardIterator __last, std::forward_iterator_tag); + + _GLIBCXX20_CONSTEXPR + void + _M_insert_aux(iterator __position, bool __x); + + _GLIBCXX20_CONSTEXPR + size_type + _M_check_len(size_type __n, const char* __s) const + { + if (max_size() - size() < __n) + __throw_length_error(__N(__s)); + + const size_type __len = size() + std::max(size(), __n); + return (__len < size() || __len > max_size()) ? max_size() : __len; + } + + _GLIBCXX20_CONSTEXPR + void + _M_erase_at_end(iterator __pos) + { this->_M_impl._M_finish = __pos; } + + _GLIBCXX20_CONSTEXPR + iterator + _M_erase(iterator __pos); + + _GLIBCXX20_CONSTEXPR + iterator + _M_erase(iterator __first, iterator __last); + + protected: + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 464. Suggestion for new member functions in standard containers. + // N.B. DR 464 says nothing about vector but we need something + // here due to the using-declaration in __gnu_debug::vector. + // vector class. +#if __cplusplus >= 201103L + void data() = delete; +#else + void data() { } +#endif + }; + +_GLIBCXX_END_NAMESPACE_CONTAINER + + // Fill a partial word. + _GLIBCXX20_CONSTEXPR + inline void + __fill_bvector(_Bit_type* __v, unsigned int __first, unsigned int __last, + bool __x) _GLIBCXX_NOEXCEPT + { + const _Bit_type __fmask = ~0ul << __first; + const _Bit_type __lmask = ~0ul >> (_S_word_bit - __last); + const _Bit_type __mask = __fmask & __lmask; + + if (__x) + *__v |= __mask; + else + *__v &= ~__mask; + } + + // Fill N full words, as if using memset, but usable in constant expressions. + __attribute__((__nonnull__)) + _GLIBCXX20_CONSTEXPR + inline void + __fill_bvector_n(_Bit_type* __p, size_t __n, bool __x) _GLIBCXX_NOEXCEPT + { +#if __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + { + for (size_t __i = 0; __i < __n; ++__i) + __p[__i] = __x ? ~0ul : 0ul; + return; + } +#endif + __builtin_memset(__p, __x ? ~0 : 0, __n * sizeof(_Bit_type)); + } + + + _GLIBCXX20_CONSTEXPR + inline void + __fill_a1(_GLIBCXX_STD_C::_Bit_iterator __first, + _GLIBCXX_STD_C::_Bit_iterator __last, const bool& __x) + { + if (__first._M_p != __last._M_p) + { + _Bit_type* __first_p = __first._M_p; + if (__first._M_offset != 0) + __fill_bvector(__first_p++, __first._M_offset, _S_word_bit, __x); + + __fill_bvector_n(__first_p, __last._M_p - __first_p, __x); + + if (__last._M_offset != 0) + __fill_bvector(__last._M_p, 0, __last._M_offset, __x); + } + else if (__first._M_offset != __last._M_offset) + __fill_bvector(__first._M_p, __first._M_offset, __last._M_offset, __x); + } + +#if __cplusplus >= 201103L + // DR 1182. + /// std::hash specialization for vector. + template + struct hash<_GLIBCXX_STD_C::vector> + : public __hash_base> + { + size_t + operator()(const _GLIBCXX_STD_C::vector&) const noexcept; + }; +#endif // C++11 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_bvector.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_bvector.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2a401b11d20d90a1b49156fd3ac9df6286768034 GIT binary patch literal 100206 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. + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996,1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_construct.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _STL_CONSTRUCT_H +#define _STL_CONSTRUCT_H 1 + +#include +#include +#include // for iterator_traits +#include // for advance + +/* This file provides the C++17 functions std::destroy_at, std::destroy, and + * std::destroy_n, and the C++20 function std::construct_at. + * It also provides std::_Construct, std::_Destroy,and std::_Destroy_n functions + * which are defined in all standard modes and so can be used in C++98-14 code. + * The _Destroy functions will dispatch to destroy_at during constant + * evaluation, because calls to that function are intercepted by the compiler + * to allow use in constant expressions. + */ + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if __glibcxx_raw_memory_algorithms // >= C++17 + template + _GLIBCXX20_CONSTEXPR inline void + destroy_at(_Tp* __location) + { + if constexpr (__cplusplus > 201703L && is_array_v<_Tp>) + { + for (auto& __x : *__location) + std::destroy_at(std::__addressof(__x)); + } + else + __location->~_Tp(); + } + +#if __cpp_constexpr_dynamic_alloc // >= C++20 + template + requires (!is_unbounded_array_v<_Tp>) + && requires { ::new((void*)0) _Tp(std::declval<_Args>()...); } + constexpr _Tp* + construct_at(_Tp* __location, _Args&&... __args) + noexcept(noexcept(::new((void*)0) _Tp(std::declval<_Args>()...))) + { + void* __loc = __location; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3436. std::construct_at should support arrays + if constexpr (is_array_v<_Tp>) + { + static_assert(sizeof...(_Args) == 0, "std::construct_at for array " + "types must not use any arguments to initialize the " + "array"); + return ::new(__loc) _Tp[1](); + } + else + return ::new(__loc) _Tp(std::forward<_Args>(__args)...); + } +#endif // C++20 +#endif// C++17 + + /** + * Constructs an object in existing memory by invoking an allocated + * object's constructor with an initializer. + */ +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + inline void + _Construct(_Tp* __p, _Args&&... __args) + { +#if __cpp_constexpr_dynamic_alloc // >= C++20 + if (std::__is_constant_evaluated()) + { + // Allow std::_Construct to be used in constant expressions. + std::construct_at(__p, std::forward<_Args>(__args)...); + return; + } +#endif + ::new(static_cast(__p)) _Tp(std::forward<_Args>(__args)...); + } +#else + template + inline void + _Construct(_T1* __p, const _T2& __value) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 402. wrong new expression in [some_]allocator::construct + ::new(static_cast(__p)) _T1(__value); + } +#endif + + template + _GLIBCXX26_CONSTEXPR + inline void + _Construct_novalue(_T1* __p) + { ::new(static_cast(__p)) _T1; } + + template + _GLIBCXX20_CONSTEXPR void + _Destroy(_ForwardIterator __first, _ForwardIterator __last); + + /** + * Destroy the object pointed to by a pointer type. + */ + template + _GLIBCXX14_CONSTEXPR inline void + _Destroy(_Tp* __pointer) + { +#if __cpp_constexpr_dynamic_alloc // >= C++20 + std::destroy_at(__pointer); +#else + __pointer->~_Tp(); +#endif + } + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // for if-constexpr + +#if __cplusplus < 201103L + template + struct _Destroy_aux + { + template + static _GLIBCXX20_CONSTEXPR void + __destroy(_ForwardIterator __first, _ForwardIterator __last) + { + for (; __first != __last; ++__first) + std::_Destroy(std::__addressof(*__first)); + } + + template + static _GLIBCXX20_CONSTEXPR _ForwardIterator + __destroy_n(_ForwardIterator __first, _Size __count) + { + for (; __count > 0; (void)++__first, --__count) + std::_Destroy(std::__addressof(*__first)); + return __first; + } + }; + + template<> + struct _Destroy_aux + { + template + static void + __destroy(_ForwardIterator, _ForwardIterator) { } + + template + static _ForwardIterator + __destroy_n(_ForwardIterator __first, _Size __count) + { + std::advance(__first, __count); + return __first; + } + }; +#endif + + /** + * Destroy a range of objects. If the value_type of the object has + * a trivial destructor, the compiler should optimize all of this + * away, otherwise the objects' destructors must be invoked. + */ + template + _GLIBCXX20_CONSTEXPR inline void + _Destroy(_ForwardIterator __first, _ForwardIterator __last) + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _Value_type; +#if __cplusplus >= 201103L + if constexpr (!is_trivially_destructible<_Value_type>::value) + for (; __first != __last; ++__first) + std::_Destroy(std::__addressof(*__first)); +#if __cpp_constexpr_dynamic_alloc // >= C++20 + else if (std::__is_constant_evaluated()) + for (; __first != __last; ++__first) + std::destroy_at(std::__addressof(*__first)); +#endif +#else + std::_Destroy_aux<__has_trivial_destructor(_Value_type)>:: + __destroy(__first, __last); +#endif + } + + /** + * Destroy a range of objects. If the value_type of the object has + * a trivial destructor, the compiler should optimize all of this + * away, otherwise the objects' destructors must be invoked. + */ + template + _GLIBCXX20_CONSTEXPR inline _ForwardIterator + _Destroy_n(_ForwardIterator __first, _Size __count) + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _Value_type; +#if __cplusplus >= 201103L + if constexpr (!is_trivially_destructible<_Value_type>::value) + for (; __count > 0; (void)++__first, --__count) + std::_Destroy(std::__addressof(*__first)); +#if __cpp_constexpr_dynamic_alloc // >= C++20 + else if (std::__is_constant_evaluated()) + for (; __count > 0; (void)++__first, --__count) + std::destroy_at(std::__addressof(*__first)); +#endif + else + std::advance(__first, __count); + return __first; +#else + return std::_Destroy_aux<__has_trivial_destructor(_Value_type)>:: + __destroy_n(__first, __count); +#endif + } +#pragma GCC diagnostic pop + +#if __glibcxx_raw_memory_algorithms // >= C++17 + template + _GLIBCXX20_CONSTEXPR inline void + destroy(_ForwardIterator __first, _ForwardIterator __last) + { + std::_Destroy(__first, __last); + } + + template + _GLIBCXX20_CONSTEXPR inline _ForwardIterator + destroy_n(_ForwardIterator __first, _Size __count) + { + return std::_Destroy_n(__first, __count); + } +#endif // C++17 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif /* _STL_CONSTRUCT_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_construct.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_construct.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..37860faaf28974c8a91afa8d1c568a7c9db2409b GIT binary patch literal 19471 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. + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996-1998 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_function.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{functional} + */ + +#ifndef _STL_FUNCTION_H +#define _STL_FUNCTION_H 1 + +#if __cplusplus > 201103L +#include +#endif +#if __cplusplus >= 202002L +#include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // 20.3.1 base classes + /** @defgroup functors Function Objects + * @ingroup utilities + * + * Function objects, or _functors_, are objects with an `operator()` + * defined and accessible. They can be passed as arguments to algorithm + * templates and used in place of a function pointer. Not only is the + * resulting expressiveness of the library increased, but the generated + * code can be more efficient than what you might write by hand. When we + * refer to _functors_, then, generally we include function pointers in + * the description as well. + * + * Often, functors are only created as temporaries passed to algorithm + * calls, rather than being created as named variables. + * + * Two examples taken from the standard itself follow. To perform a + * by-element addition of two vectors `a` and `b` containing `double`, + * and put the result in `a`, use + * \code + * transform (a.begin(), a.end(), b.begin(), a.begin(), plus()); + * \endcode + * To negate every element in `a`, use + * \code + * transform(a.begin(), a.end(), a.begin(), negate()); + * \endcode + * The addition and negation functions will usually be inlined directly. + * + * An _adaptable function object_ is one which provides nested typedefs + * `result_type` and either `argument_type` (for a unary function) or + * `first_argument_type` and `second_argument_type` (for a binary function). + * Those typedefs are used by function object adaptors such as `bind2nd`. + * The standard library provides two class templates, `unary_function` and + * `binary_function`, which define those typedefs and so can be used as + * base classes of adaptable function objects. + * + * Since C++11 the use of function object adaptors has been superseded by + * more powerful tools such as lambda expressions, `function<>`, and more + * powerful type deduction (using `auto` and `decltype`). The helpers for + * defining adaptable function objects are deprecated since C++11, and no + * longer part of the standard library since C++17. However, they are still + * defined and used by libstdc++ after C++17, as a conforming extension. + * + * @{ + */ + + /** + * Helper for defining adaptable unary function objects. + * @deprecated Deprecated in C++11, no longer in the standard since C++17. + */ + template + struct unary_function + { + /// @c argument_type is the type of the argument + typedef _Arg argument_type; + + /// @c result_type is the return type + typedef _Result result_type; + } _GLIBCXX11_DEPRECATED; + + /** + * Helper for defining adaptable binary function objects. + * @deprecated Deprecated in C++11, no longer in the standard since C++17. + */ + template + struct binary_function + { + /// @c first_argument_type is the type of the first argument + typedef _Arg1 first_argument_type; + + /// @c second_argument_type is the type of the second argument + typedef _Arg2 second_argument_type; + + /// @c result_type is the return type + typedef _Result result_type; + } _GLIBCXX11_DEPRECATED; + /** @} */ + + // 20.3.2 arithmetic + + /** @defgroup arithmetic_functors Arithmetic Function Object Classes + * @ingroup functors + * + * The library provides function objects for basic arithmetic operations. + * See the documentation for @link functors function objects @endlink + * for examples of their use. + * + * @{ + */ + +#if __glibcxx_transparent_operators // C++ >= 14 + struct __is_transparent; // undefined + + template + struct plus; + + template + struct minus; + + template + struct multiplies; + + template + struct divides; + + template + struct modulus; + + template + struct negate; +#endif + +// Ignore warnings about unary_function and binary_function. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + /// One of the @link arithmetic_functors math functors@endlink. + template + struct plus : public binary_function<_Tp, _Tp, _Tp> + { + /// Returns the sum + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x, const _Tp& __y) const + { return __x + __y; } + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template + struct minus : public binary_function<_Tp, _Tp, _Tp> + { + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x, const _Tp& __y) const + { return __x - __y; } + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template + struct multiplies : public binary_function<_Tp, _Tp, _Tp> + { + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x, const _Tp& __y) const + { return __x * __y; } + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template + struct divides : public binary_function<_Tp, _Tp, _Tp> + { + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x, const _Tp& __y) const + { return __x / __y; } + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template + struct modulus : public binary_function<_Tp, _Tp, _Tp> + { + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x, const _Tp& __y) const + { return __x % __y; } + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template + struct negate : public unary_function<_Tp, _Tp> + { + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x) const + { return -__x; } + }; +#pragma GCC diagnostic pop + +#ifdef __glibcxx_transparent_operators // C++ >= 14 + template<> + struct plus + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) + std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template<> + struct minus + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) - std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template<> + struct multiplies + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) * std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template<> + struct divides + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) / std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template<> + struct modulus + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) % std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + /// One of the @link arithmetic_functors math functors@endlink. + template<> + struct negate + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t) const + noexcept(noexcept(-std::forward<_Tp>(__t))) + -> decltype(-std::forward<_Tp>(__t)) + { return -std::forward<_Tp>(__t); } + + typedef __is_transparent is_transparent; + }; +#endif + /** @} */ + + // 20.3.3 comparisons + /** @defgroup comparison_functors Comparison Classes + * @ingroup functors + * + * The library provides six wrapper functors for all the basic comparisons + * in C++, like @c <. + * + * @{ + */ +#if __glibcxx_transparent_operators // C++ >= 14 + template + struct equal_to; + + template + struct not_equal_to; + + template + struct greater; + + template + struct less; + + template + struct greater_equal; + + template + struct less_equal; +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + /// One of the @link comparison_functors comparison functors@endlink. + template + struct equal_to : public binary_function<_Tp, _Tp, bool> + { + _GLIBCXX14_CONSTEXPR + bool + operator()(const _Tp& __x, const _Tp& __y) const + { return __x == __y; } + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template + struct not_equal_to : public binary_function<_Tp, _Tp, bool> + { + _GLIBCXX14_CONSTEXPR + bool + operator()(const _Tp& __x, const _Tp& __y) const + { return __x != __y; } + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template + struct greater : public binary_function<_Tp, _Tp, bool> + { + _GLIBCXX14_CONSTEXPR + bool + operator()(const _Tp& __x, const _Tp& __y) const + { return __x > __y; } + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template + struct less : public binary_function<_Tp, _Tp, bool> + { + _GLIBCXX14_CONSTEXPR + bool + operator()(const _Tp& __x, const _Tp& __y) const + { return __x < __y; } + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template + struct greater_equal : public binary_function<_Tp, _Tp, bool> + { + _GLIBCXX14_CONSTEXPR + bool + operator()(const _Tp& __x, const _Tp& __y) const + { return __x >= __y; } + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template + struct less_equal : public binary_function<_Tp, _Tp, bool> + { + _GLIBCXX14_CONSTEXPR + bool + operator()(const _Tp& __x, const _Tp& __y) const + { return __x <= __y; } + }; + + // Partial specialization of std::greater for pointers. + template + struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool> + { + _GLIBCXX14_CONSTEXPR bool + operator()(_Tp* __x, _Tp* __y) const _GLIBCXX_NOTHROW + { +#if __cplusplus >= 201402L + if (std::__is_constant_evaluated()) + return __x > __y; +#endif + return (__UINTPTR_TYPE__)__x > (__UINTPTR_TYPE__)__y; + } + }; + + // Partial specialization of std::less for pointers. + template + struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool> + { + _GLIBCXX14_CONSTEXPR bool + operator()(_Tp* __x, _Tp* __y) const _GLIBCXX_NOTHROW + { +#if __cplusplus >= 201402L + if (std::__is_constant_evaluated()) + return __x < __y; +#endif + return (__UINTPTR_TYPE__)__x < (__UINTPTR_TYPE__)__y; + } + }; + + // Partial specialization of std::greater_equal for pointers. + template + struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> + { + _GLIBCXX14_CONSTEXPR bool + operator()(_Tp* __x, _Tp* __y) const _GLIBCXX_NOTHROW + { +#if __cplusplus >= 201402L + if (std::__is_constant_evaluated()) + return __x >= __y; +#endif + return (__UINTPTR_TYPE__)__x >= (__UINTPTR_TYPE__)__y; + } + }; + + // Partial specialization of std::less_equal for pointers. + template + struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> + { + _GLIBCXX14_CONSTEXPR bool + operator()(_Tp* __x, _Tp* __y) const _GLIBCXX_NOTHROW + { +#if __cplusplus >= 201402L + if (std::__is_constant_evaluated()) + return __x <= __y; +#endif + return (__UINTPTR_TYPE__)__x <= (__UINTPTR_TYPE__)__y; + } + }; +#pragma GCC diagnostic pop + +#ifdef __glibcxx_transparent_operators // C++ >= 14 + /// One of the @link comparison_functors comparison functors@endlink. + template<> + struct equal_to + { + template + constexpr auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template<> + struct not_equal_to + { + template + constexpr auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template<> + struct greater + { + template + constexpr auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u)) + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr + if constexpr (__ptr_cmp<_Tp, _Up>) + return greater{}( + static_cast(std::forward<_Tp>(__t)), + static_cast(std::forward<_Up>(__u))); + else + return std::forward<_Tp>(__t) > std::forward<_Up>(__u); +#pragma GCC diagnostic pop + } + + template + constexpr bool + operator()(_Tp* __t, _Up* __u) const noexcept + { return greater>{}(__t, __u); } + + typedef __is_transparent is_transparent; + + private: +#if __cplusplus >= 202002L + template + static constexpr bool __ptr_cmp = requires + { + requires + ! requires + { operator>(std::declval<_Tp>(), std::declval<_Up>()); } + && ! requires + { std::declval<_Tp>().operator>(std::declval<_Up>()); } + && __detail::__not_overloaded_spaceship<_Tp, _Up> + && is_convertible_v<_Tp, const volatile void*> + && is_convertible_v<_Up, const volatile void*>; + }; +#else + // True if there is no viable operator> member function. + template + struct __not_overloaded2 : true_type { }; + + // False if we can call T.operator>(U) + template + struct __not_overloaded2<_Tp, _Up, __void_t< + decltype(std::declval<_Tp>().operator>(std::declval<_Up>()))>> + : false_type { }; + + // True if there is no overloaded operator> for these operands. + template + struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; + + // False if we can call operator>(T,U) + template + struct __not_overloaded<_Tp, _Up, __void_t< + decltype(operator>(std::declval<_Tp>(), std::declval<_Up>()))>> + : false_type { }; + + template + static constexpr bool __ptr_cmp = __and_< + __not_overloaded<_Tp, _Up>, + is_convertible<_Tp, const volatile void*>, + is_convertible<_Up, const volatile void*>>::value; +#endif + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template<> + struct less + { + template + constexpr auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u)) + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr + if constexpr (__ptr_cmp<_Tp, _Up>) + return less{}( + static_cast(std::forward<_Tp>(__t)), + static_cast(std::forward<_Up>(__u))); + else + return std::forward<_Tp>(__t) < std::forward<_Up>(__u); +#pragma GCC diagnostic pop + } + + template + constexpr bool + operator()(_Tp* __t, _Up* __u) const noexcept + { return less>{}(__t, __u); } + + typedef __is_transparent is_transparent; + + private: +#if __cplusplus >= 202002L + template + static constexpr bool __ptr_cmp = requires + { + requires + ! requires + { operator<(std::declval<_Tp>(), std::declval<_Up>()); } + && ! requires + { std::declval<_Tp>().operator<(std::declval<_Up>()); } + && __detail::__not_overloaded_spaceship<_Tp, _Up> + && is_convertible_v<_Tp, const volatile void*> + && is_convertible_v<_Up, const volatile void*>; + }; +#else + // True if there is no viable operator< member function. + template + struct __not_overloaded2 : true_type { }; + + // False if we can call T.operator<(U) + template + struct __not_overloaded2<_Tp, _Up, __void_t< + decltype(std::declval<_Tp>().operator<(std::declval<_Up>()))>> + : false_type { }; + + // True if there is no overloaded operator< for these operands. + template + struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; + + // False if we can call operator<(T,U) + template + struct __not_overloaded<_Tp, _Up, __void_t< + decltype(operator<(std::declval<_Tp>(), std::declval<_Up>()))>> + : false_type { }; + + template + static constexpr bool __ptr_cmp = __and_< + __not_overloaded<_Tp, _Up>, + is_convertible<_Tp, const volatile void*>, + is_convertible<_Up, const volatile void*>>::value; +#endif + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template<> + struct greater_equal + { + template + constexpr auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)) + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr + if constexpr (__ptr_cmp<_Tp, _Up>) + return greater_equal{}( + static_cast(std::forward<_Tp>(__t)), + static_cast(std::forward<_Up>(__u))); + else + return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); +#pragma GCC diagnostic pop + } + + template + constexpr bool + operator()(_Tp* __t, _Up* __u) const noexcept + { return greater_equal>{}(__t, __u); } + + typedef __is_transparent is_transparent; + + private: +#if __cplusplus >= 202002L + template + static constexpr bool __ptr_cmp = requires + { + requires + ! requires + { operator>=(std::declval<_Tp>(), std::declval<_Up>()); } + && ! requires + { std::declval<_Tp>().operator>=(std::declval<_Up>()); } + && __detail::__not_overloaded_spaceship<_Tp, _Up> + && is_convertible_v<_Tp, const volatile void*> + && is_convertible_v<_Up, const volatile void*>; + }; +#else + // True if there is no viable operator>= member function. + template + struct __not_overloaded2 : true_type { }; + + // False if we can call T.operator>=(U) + template + struct __not_overloaded2<_Tp, _Up, __void_t< + decltype(std::declval<_Tp>().operator>=(std::declval<_Up>()))>> + : false_type { }; + + // True if there is no overloaded operator>= for these operands. + template + struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; + + // False if we can call operator>=(T,U) + template + struct __not_overloaded<_Tp, _Up, __void_t< + decltype(operator>=(std::declval<_Tp>(), std::declval<_Up>()))>> + : false_type { }; + + template + static constexpr bool __ptr_cmp = __and_< + __not_overloaded<_Tp, _Up>, + is_convertible<_Tp, const volatile void*>, + is_convertible<_Up, const volatile void*>>::value; +#endif + }; + + /// One of the @link comparison_functors comparison functors@endlink. + template<> + struct less_equal + { + template + constexpr auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)) + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr + if constexpr (__ptr_cmp<_Tp, _Up>) + return less_equal{}( + static_cast(std::forward<_Tp>(__t)), + static_cast(std::forward<_Up>(__u))); + else + return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); +#pragma GCC diagnostic pop + } + + template + constexpr bool + operator()(_Tp* __t, _Up* __u) const noexcept + { return less_equal>{}(__t, __u); } + + typedef __is_transparent is_transparent; + + private: +#if __cplusplus >= 202002L + template + static constexpr bool __ptr_cmp = requires + { + requires + ! requires + { operator<=(std::declval<_Tp>(), std::declval<_Up>()); } + && ! requires + { std::declval<_Tp>().operator<=(std::declval<_Up>()); } + && __detail::__not_overloaded_spaceship<_Tp, _Up> + && is_convertible_v<_Tp, const volatile void*> + && is_convertible_v<_Up, const volatile void*>; + }; +#else + // True if there is no viable operator<= member function. + template + struct __not_overloaded2 : true_type { }; + + // False if we can call T.operator<=(U) + template + struct __not_overloaded2<_Tp, _Up, __void_t< + decltype(std::declval<_Tp>().operator<=(std::declval<_Up>()))>> + : false_type { }; + + // True if there is no overloaded operator<= for these operands. + template + struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; + + // False if we can call operator<=(T,U) + template + struct __not_overloaded<_Tp, _Up, __void_t< + decltype(operator<=(std::declval<_Tp>(), std::declval<_Up>()))>> + : false_type { }; + + template + static constexpr bool __ptr_cmp = __and_< + __not_overloaded<_Tp, _Up>, + is_convertible<_Tp, const volatile void*>, + is_convertible<_Up, const volatile void*>>::value; +#endif + }; +#endif // __glibcxx_transparent_operators + /** @} */ + + // 20.3.4 logical operations + /** @defgroup logical_functors Boolean Operations Classes + * @ingroup functors + * + * The library provides function objects for the logical operations: + * `&&`, `||`, and `!`. + * + * @{ + */ +#ifdef __glibcxx_transparent_operators // C++ >= 14 + template + struct logical_and; + + template + struct logical_or; + + template + struct logical_not; +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + /// One of the @link logical_functors Boolean operations functors@endlink. + template + struct logical_and : public binary_function<_Tp, _Tp, bool> + { + _GLIBCXX14_CONSTEXPR + bool + operator()(const _Tp& __x, const _Tp& __y) const + { return __x && __y; } + }; + + /// One of the @link logical_functors Boolean operations functors@endlink. + template + struct logical_or : public binary_function<_Tp, _Tp, bool> + { + _GLIBCXX14_CONSTEXPR + bool + operator()(const _Tp& __x, const _Tp& __y) const + { return __x || __y; } + }; + + /// One of the @link logical_functors Boolean operations functors@endlink. + template + struct logical_not : public unary_function<_Tp, bool> + { + _GLIBCXX14_CONSTEXPR + bool + operator()(const _Tp& __x) const + { return !__x; } + }; +#pragma GCC diagnostic pop + +#ifdef __glibcxx_transparent_operators // C++ >= 14 + /// One of the @link logical_functors Boolean operations functors@endlink. + template<> + struct logical_and + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) && std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + /// One of the @link logical_functors Boolean operations functors@endlink. + template<> + struct logical_or + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) || std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + /// One of the @link logical_functors Boolean operations functors@endlink. + template<> + struct logical_not + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t) const + noexcept(noexcept(!std::forward<_Tp>(__t))) + -> decltype(!std::forward<_Tp>(__t)) + { return !std::forward<_Tp>(__t); } + + typedef __is_transparent is_transparent; + }; +#endif // __glibcxx_transparent_operators + /** @} */ + +#ifdef __glibcxx_transparent_operators // C++ >= 14 + template + struct bit_and; + + template + struct bit_or; + + template + struct bit_xor; + + template + struct bit_not; +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 660. Missing Bitwise Operations. + template + struct bit_and : public binary_function<_Tp, _Tp, _Tp> + { + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x, const _Tp& __y) const + { return __x & __y; } + }; + + template + struct bit_or : public binary_function<_Tp, _Tp, _Tp> + { + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x, const _Tp& __y) const + { return __x | __y; } + }; + + template + struct bit_xor : public binary_function<_Tp, _Tp, _Tp> + { + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x, const _Tp& __y) const + { return __x ^ __y; } + }; + + template + struct bit_not : public unary_function<_Tp, _Tp> + { + _GLIBCXX14_CONSTEXPR + _Tp + operator()(const _Tp& __x) const + { return ~__x; } + }; +#pragma GCC diagnostic pop + +#ifdef __glibcxx_transparent_operators // C++ >= 14 + template <> + struct bit_and + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) & std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + template <> + struct bit_or + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) | std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + template <> + struct bit_xor + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))) + -> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)) + { return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); } + + typedef __is_transparent is_transparent; + }; + + template <> + struct bit_not + { + template + _GLIBCXX14_CONSTEXPR + auto + operator()(_Tp&& __t) const + noexcept(noexcept(~std::forward<_Tp>(__t))) + -> decltype(~std::forward<_Tp>(__t)) + { return ~std::forward<_Tp>(__t); } + + typedef __is_transparent is_transparent; + }; +#endif // C++14 + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + // 20.3.5 negators + /** @defgroup negators Negators + * @ingroup functors + * + * The function templates `not1` and `not2` are function object adaptors, + * which each take a predicate functor and wrap it in an instance of + * `unary_negate` or `binary_negate`, respectively. Those classes are + * functors whose `operator()` evaluates the wrapped predicate function + * and then returns the negation of the result. + * + * For example, given a vector of integers and a trivial predicate, + * \code + * struct IntGreaterThanThree + * : public std::unary_function + * { + * bool operator() (int x) const { return x > 3; } + * }; + * + * std::find_if (v.begin(), v.end(), not1(IntGreaterThanThree())); + * \endcode + * The call to `find_if` will locate the first index (i) of `v` for which + * `!(v[i] > 3)` is true. + * + * The not1/unary_negate combination works on predicates taking a single + * argument. The not2/binary_negate combination works on predicates taking + * two arguments. + * + * @deprecated Deprecated in C++17, no longer in the standard since C++20. + * Use `not_fn` instead. + * + * @{ + */ + /// One of the @link negators negation functors@endlink. + template + class _GLIBCXX17_DEPRECATED unary_negate + : public unary_function + { + protected: + _Predicate _M_pred; + + public: + _GLIBCXX14_CONSTEXPR + explicit + unary_negate(const _Predicate& __x) : _M_pred(__x) { } + + _GLIBCXX14_CONSTEXPR + bool + operator()(const typename _Predicate::argument_type& __x) const + { return !_M_pred(__x); } + }; + + /// One of the @link negators negation functors@endlink. + template + _GLIBCXX17_DEPRECATED_SUGGEST("std::not_fn") + _GLIBCXX14_CONSTEXPR + inline unary_negate<_Predicate> + not1(const _Predicate& __pred) + { return unary_negate<_Predicate>(__pred); } + + /// One of the @link negators negation functors@endlink. + template + class _GLIBCXX17_DEPRECATED binary_negate + : public binary_function + { + protected: + _Predicate _M_pred; + + public: + _GLIBCXX14_CONSTEXPR + explicit + binary_negate(const _Predicate& __x) : _M_pred(__x) { } + + _GLIBCXX14_CONSTEXPR + bool + operator()(const typename _Predicate::first_argument_type& __x, + const typename _Predicate::second_argument_type& __y) const + { return !_M_pred(__x, __y); } + }; + + /// One of the @link negators negation functors@endlink. + template + _GLIBCXX17_DEPRECATED_SUGGEST("std::not_fn") + _GLIBCXX14_CONSTEXPR + inline binary_negate<_Predicate> + not2(const _Predicate& __pred) + { return binary_negate<_Predicate>(__pred); } + /** @} */ + + // 20.3.7 adaptors pointers functions + /** @defgroup pointer_adaptors Adaptors for pointers to functions + * @ingroup functors + * + * The advantage of function objects over pointers to functions is that + * the objects in the standard library declare nested typedefs describing + * their argument and result types with uniform names (e.g., `result_type` + * from the base classes `unary_function` and `binary_function`). + * Sometimes those typedefs are required, not just optional. + * + * Adaptors are provided to turn pointers to unary (single-argument) and + * binary (double-argument) functions into function objects. The + * long-winded functor `pointer_to_unary_function` is constructed with a + * function pointer `f`, and its `operator()` called with argument `x` + * returns `f(x)`. The functor `pointer_to_binary_function` does the same + * thing, but with a double-argument `f` and `operator()`. + * + * The function `ptr_fun` takes a pointer-to-function `f` and constructs + * an instance of the appropriate functor. + * + * @deprecated Deprecated in C++11, no longer in the standard since C++17. + * + * @{ + */ + /// One of the @link pointer_adaptors adaptors for function pointers@endlink. + template + class pointer_to_unary_function : public unary_function<_Arg, _Result> + { + protected: + _Result (*_M_ptr)(_Arg); + + public: + pointer_to_unary_function() { } + + explicit + pointer_to_unary_function(_Result (*__x)(_Arg)) + : _M_ptr(__x) { } + + _Result + operator()(_Arg __x) const + { return _M_ptr(__x); } + } _GLIBCXX11_DEPRECATED; + + /// One of the @link pointer_adaptors adaptors for function pointers@endlink. + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::function") + inline pointer_to_unary_function<_Arg, _Result> + ptr_fun(_Result (*__x)(_Arg)) + { return pointer_to_unary_function<_Arg, _Result>(__x); } + + /// One of the @link pointer_adaptors adaptors for function pointers@endlink. + template + class pointer_to_binary_function + : public binary_function<_Arg1, _Arg2, _Result> + { + protected: + _Result (*_M_ptr)(_Arg1, _Arg2); + + public: + pointer_to_binary_function() { } + + explicit + pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2)) + : _M_ptr(__x) { } + + _Result + operator()(_Arg1 __x, _Arg2 __y) const + { return _M_ptr(__x, __y); } + } _GLIBCXX11_DEPRECATED; + + /// One of the @link pointer_adaptors adaptors for function pointers@endlink. + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::function") + inline pointer_to_binary_function<_Arg1, _Arg2, _Result> + ptr_fun(_Result (*__x)(_Arg1, _Arg2)) + { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); } + /** @} */ + + template + struct _Identity + : public unary_function<_Tp, _Tp> + { + _Tp& + operator()(_Tp& __x) const + { return __x; } + + const _Tp& + operator()(const _Tp& __x) const + { return __x; } + }; + + // Partial specialization, avoids confusing errors in e.g. std::set. + template struct _Identity : _Identity<_Tp> { }; + + template + struct _Select1st + : public unary_function<_Pair, typename _Pair::first_type> + { + typename _Pair::first_type& + operator()(_Pair& __x) const + { return __x.first; } + + const typename _Pair::first_type& + operator()(const _Pair& __x) const + { return __x.first; } + +#if __cplusplus >= 201103L + template + typename _Pair2::first_type& + operator()(_Pair2& __x) const + { return __x.first; } + + template + const typename _Pair2::first_type& + operator()(const _Pair2& __x) const + { return __x.first; } +#endif + }; + + template + struct _Select2nd + : public unary_function<_Pair, typename _Pair::second_type> + { + typename _Pair::second_type& + operator()(_Pair& __x) const + { return __x.second; } + + const typename _Pair::second_type& + operator()(const _Pair& __x) const + { return __x.second; } + }; + + // 20.3.8 adaptors pointers members + /** @defgroup ptrmem_adaptors Adaptors for pointers to members + * @ingroup functors + * + * There are a total of 8 = 2^3 function objects in this family. + * (1) Member functions taking no arguments vs member functions taking + * one argument. + * (2) Call through pointer vs call through reference. + * (3) Const vs non-const member function. + * + * All of this complexity is in the function objects themselves. You can + * ignore it by using the helper function `mem_fun` and `mem_fun_ref`, + * which create whichever type of adaptor is appropriate. + * + * @deprecated Deprecated in C++11, no longer in the standard since C++17. + * Use `mem_fn` instead. + * + * @{ + */ + /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink. + template + class mem_fun_t : public unary_function<_Tp*, _Ret> + { + public: + explicit + mem_fun_t(_Ret (_Tp::*__pf)()) + : _M_f(__pf) { } + + _Ret + operator()(_Tp* __p) const + { return (__p->*_M_f)(); } + + private: + _Ret (_Tp::*_M_f)(); + } _GLIBCXX11_DEPRECATED; + + /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink. + template + class const_mem_fun_t : public unary_function + { + public: + explicit + const_mem_fun_t(_Ret (_Tp::*__pf)() const) + : _M_f(__pf) { } + + _Ret + operator()(const _Tp* __p) const + { return (__p->*_M_f)(); } + + private: + _Ret (_Tp::*_M_f)() const; + } _GLIBCXX11_DEPRECATED; + + /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink. + template + class mem_fun_ref_t : public unary_function<_Tp, _Ret> + { + public: + explicit + mem_fun_ref_t(_Ret (_Tp::*__pf)()) + : _M_f(__pf) { } + + _Ret + operator()(_Tp& __r) const + { return (__r.*_M_f)(); } + + private: + _Ret (_Tp::*_M_f)(); + } _GLIBCXX11_DEPRECATED; + + /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink. + template + class const_mem_fun_ref_t : public unary_function<_Tp, _Ret> + { + public: + explicit + const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) + : _M_f(__pf) { } + + _Ret + operator()(const _Tp& __r) const + { return (__r.*_M_f)(); } + + private: + _Ret (_Tp::*_M_f)() const; + } _GLIBCXX11_DEPRECATED; + + /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink. + template + class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret> + { + public: + explicit + mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) + : _M_f(__pf) { } + + _Ret + operator()(_Tp* __p, _Arg __x) const + { return (__p->*_M_f)(__x); } + + private: + _Ret (_Tp::*_M_f)(_Arg); + } _GLIBCXX11_DEPRECATED; + + /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink. + template + class const_mem_fun1_t : public binary_function + { + public: + explicit + const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) + : _M_f(__pf) { } + + _Ret + operator()(const _Tp* __p, _Arg __x) const + { return (__p->*_M_f)(__x); } + + private: + _Ret (_Tp::*_M_f)(_Arg) const; + } _GLIBCXX11_DEPRECATED; + + /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink. + template + class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> + { + public: + explicit + mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) + : _M_f(__pf) { } + + _Ret + operator()(_Tp& __r, _Arg __x) const + { return (__r.*_M_f)(__x); } + + private: + _Ret (_Tp::*_M_f)(_Arg); + } _GLIBCXX11_DEPRECATED; + + /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink. + template + class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> + { + public: + explicit + const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) + : _M_f(__pf) { } + + _Ret + operator()(const _Tp& __r, _Arg __x) const + { return (__r.*_M_f)(__x); } + + private: + _Ret (_Tp::*_M_f)(_Arg) const; + } _GLIBCXX11_DEPRECATED; + + // Mem_fun adaptor helper functions. There are only two: + // mem_fun and mem_fun_ref. + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn") + inline mem_fun_t<_Ret, _Tp> + mem_fun(_Ret (_Tp::*__f)()) + { return mem_fun_t<_Ret, _Tp>(__f); } + + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn") + inline const_mem_fun_t<_Ret, _Tp> + mem_fun(_Ret (_Tp::*__f)() const) + { return const_mem_fun_t<_Ret, _Tp>(__f); } + + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn") + inline mem_fun_ref_t<_Ret, _Tp> + mem_fun_ref(_Ret (_Tp::*__f)()) + { return mem_fun_ref_t<_Ret, _Tp>(__f); } + + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn") + inline const_mem_fun_ref_t<_Ret, _Tp> + mem_fun_ref(_Ret (_Tp::*__f)() const) + { return const_mem_fun_ref_t<_Ret, _Tp>(__f); } + + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn") + inline mem_fun1_t<_Ret, _Tp, _Arg> + mem_fun(_Ret (_Tp::*__f)(_Arg)) + { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); } + + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn") + inline const_mem_fun1_t<_Ret, _Tp, _Arg> + mem_fun(_Ret (_Tp::*__f)(_Arg) const) + { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); } + + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn") + inline mem_fun1_ref_t<_Ret, _Tp, _Arg> + mem_fun_ref(_Ret (_Tp::*__f)(_Arg)) + { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } + + template + _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn") + inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg> + mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const) + { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } +#pragma GCC diagnostic pop + + /** @} */ + +#ifdef __glibcxx_transparent_operators // C++ >= 14 + template> + struct __has_is_transparent + { }; + + template + struct __has_is_transparent<_Func, _SfinaeType, + __void_t> + { typedef void type; }; + + template + using __has_is_transparent_t + = typename __has_is_transparent<_Func, _SfinaeType>::type; + +#if __cpp_concepts + template + concept __transparent_comparator + = requires { typename _Func::is_transparent; }; +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#if (__cplusplus < 201103L) || _GLIBCXX_USE_DEPRECATED +# include +#endif + +#endif /* _STL_FUNCTION_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_function.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_function.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f6269a2e8e663eaa07b71017d38a2fdb9309215b GIT binary patch literal 92550 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. + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996-1998 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_iterator.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iterator} + * + * This file implements reverse_iterator, back_insert_iterator, + * front_insert_iterator, insert_iterator, __normal_iterator, and their + * supporting functions and overloaded operators. + */ + +#ifndef _STL_ITERATOR_H +#define _STL_ITERATOR_H 1 + +#include +#include +#include +#include +#include + +#if __cplusplus >= 201103L +# include +#endif + +#if __cplusplus >= 202002L +# include +# include +# include +# include +# include +#endif + +#if __glibcxx_tuple_like // >= C++23 +# include // for tuple_element_t +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup iterators + * @{ + */ + +#ifdef __glibcxx_concepts + /// @cond undocumented + namespace __detail + { + // Weaken iterator_category _Cat to _Limit if it is derived from that, + // otherwise use _Otherwise. + template + using __clamp_iter_cat + = __conditional_t, _Limit, _Otherwise>; + } + /// @endcond +#endif + +// Ignore warnings about std::iterator. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + // 24.4.1 Reverse iterators + /** + * Bidirectional and random access iterators have corresponding reverse + * %iterator adaptors that iterate through the data structure in the + * opposite direction. They have the same signatures as the corresponding + * iterators. The fundamental relation between a reverse %iterator and its + * corresponding %iterator @c i is established by the identity: + * @code + * &*(reverse_iterator(i)) == &*(i - 1) + * @endcode + * + * This mapping is dictated by the fact that while there is always a + * pointer past the end of an array, there might not be a valid pointer + * before the beginning of an array. [24.4.1]/1,2 + * + * Reverse iterators can be tricky and surprising at first. Their + * semantics make sense, however, and the trickiness is a side effect of + * the requirement that the iterators must be safe. + */ + template + class reverse_iterator + : public iterator::iterator_category, + typename iterator_traits<_Iterator>::value_type, + typename iterator_traits<_Iterator>::difference_type, + typename iterator_traits<_Iterator>::pointer, + typename iterator_traits<_Iterator>::reference> + { + template + friend class reverse_iterator; + +#ifdef __glibcxx_concepts + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3435. three_way_comparable_with, [...]> + template + static constexpr bool __convertible = !is_same_v<_Iter, _Iterator> + && convertible_to; +#endif + + protected: + _Iterator current; + + typedef iterator_traits<_Iterator> __traits_type; + + public: + typedef _Iterator iterator_type; + typedef typename __traits_type::pointer pointer; +#ifndef __glibcxx_concepts + typedef typename __traits_type::difference_type difference_type; + typedef typename __traits_type::reference reference; +#else + using iterator_concept + = __conditional_t, + random_access_iterator_tag, + bidirectional_iterator_tag>; + using iterator_category + = __detail::__clamp_iter_cat; + using value_type = iter_value_t<_Iterator>; + using difference_type = iter_difference_t<_Iterator>; + using reference = iter_reference_t<_Iterator>; +#endif + + /** + * The default constructor value-initializes member @p current. + * If it is a pointer, that means it is zero-initialized. + */ + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 235 No specification of default ctor for reverse_iterator + // 1012. reverse_iterator default ctor should value initialize + _GLIBCXX17_CONSTEXPR + reverse_iterator() + _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator())) + : current() + { } + + /** + * This %iterator will move in the opposite direction that @p x does. + */ + explicit _GLIBCXX17_CONSTEXPR + reverse_iterator(iterator_type __x) + _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(__x))) + : current(__x) + { } + + /** + * The copy constructor is normal. + */ + _GLIBCXX17_CONSTEXPR + reverse_iterator(const reverse_iterator& __x) + _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(__x.current))) + : current(__x.current) + { } + +#if __cplusplus >= 201103L + reverse_iterator& operator=(const reverse_iterator&) = default; +#endif + + /** + * A %reverse_iterator across other types can be copied if the + * underlying %iterator can be converted to the type of @c current. + */ + template +#ifdef __glibcxx_concepts + requires __convertible<_Iter> +#endif + _GLIBCXX17_CONSTEXPR + reverse_iterator(const reverse_iterator<_Iter>& __x) + _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(__x.current))) + : current(__x.current) + { } + +#if __cplusplus >= 201103L + template +# ifdef __glibcxx_concepts + requires __convertible<_Iter> + && assignable_from<_Iterator&, const _Iter&> +# endif + _GLIBCXX17_CONSTEXPR + reverse_iterator& + operator=(const reverse_iterator<_Iter>& __x) + _GLIBCXX_NOEXCEPT_IF(noexcept(current = __x.current)) + { + current = __x.current; + return *this; + } +#endif // C++11 + + /** + * @return @c current, the %iterator used for underlying work. + */ + _GLIBCXX_NODISCARD + _GLIBCXX17_CONSTEXPR iterator_type + base() const + _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(current))) + { return current; } + + /** + * @return A reference to the value at @c --current + * + * This requires that @c --current is dereferenceable. + * + * @warning This implementation requires that for an iterator of the + * underlying iterator type, @c x, a reference obtained by + * @c *x remains valid after @c x has been modified or + * destroyed. This is a bug: http://gcc.gnu.org/PR51823 + */ + _GLIBCXX_NODISCARD + _GLIBCXX17_CONSTEXPR reference + operator*() const + { + _Iterator __tmp = current; + return *--__tmp; + } + + /** + * @return A pointer to the value at @c --current + * + * This requires that @c --current is dereferenceable. + */ + _GLIBCXX_NODISCARD + _GLIBCXX17_CONSTEXPR pointer + operator->() const +#ifdef __glibcxx_concepts + requires is_pointer_v<_Iterator> + || requires(const _Iterator __i) { __i.operator->(); } +#endif + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 1052. operator-> should also support smart pointers + _Iterator __tmp = current; + --__tmp; + return _S_to_pointer(__tmp); + } + + /** + * @return @c *this + * + * Decrements the underlying iterator. + */ + _GLIBCXX17_CONSTEXPR reverse_iterator& + operator++() + { + --current; + return *this; + } + + /** + * @return The original value of @c *this + * + * Decrements the underlying iterator. + */ + _GLIBCXX17_CONSTEXPR reverse_iterator + operator++(int) + { + reverse_iterator __tmp = *this; + --current; + return __tmp; + } + + /** + * @return @c *this + * + * Increments the underlying iterator. + */ + _GLIBCXX17_CONSTEXPR reverse_iterator& + operator--() + { + ++current; + return *this; + } + + /** + * @return A reverse_iterator with the previous value of @c *this + * + * Increments the underlying iterator. + */ + _GLIBCXX17_CONSTEXPR reverse_iterator + operator--(int) + { + reverse_iterator __tmp = *this; + ++current; + return __tmp; + } + + /** + * @return A reverse_iterator that refers to @c current - @a __n + * + * The underlying iterator must be a Random Access Iterator. + */ + _GLIBCXX_NODISCARD + _GLIBCXX17_CONSTEXPR reverse_iterator + operator+(difference_type __n) const + { return reverse_iterator(current - __n); } + + /** + * @return *this + * + * Moves the underlying iterator backwards @a __n steps. + * The underlying iterator must be a Random Access Iterator. + */ + _GLIBCXX17_CONSTEXPR reverse_iterator& + operator+=(difference_type __n) + { + current -= __n; + return *this; + } + + /** + * @return A reverse_iterator that refers to @c current - @a __n + * + * The underlying iterator must be a Random Access Iterator. + */ + _GLIBCXX_NODISCARD + _GLIBCXX17_CONSTEXPR reverse_iterator + operator-(difference_type __n) const + { return reverse_iterator(current + __n); } + + /** + * @return *this + * + * Moves the underlying iterator forwards @a __n steps. + * The underlying iterator must be a Random Access Iterator. + */ + _GLIBCXX17_CONSTEXPR reverse_iterator& + operator-=(difference_type __n) + { + current += __n; + return *this; + } + + /** + * @return The value at @c current - @a __n - 1 + * + * The underlying iterator must be a Random Access Iterator. + */ + _GLIBCXX_NODISCARD + _GLIBCXX17_CONSTEXPR reference + operator[](difference_type __n) const + { return *(*this + __n); } + +#ifdef __glibcxx_ranges + [[nodiscard]] + friend constexpr iter_rvalue_reference_t<_Iterator> + iter_move(const reverse_iterator& __i) + noexcept(is_nothrow_copy_constructible_v<_Iterator> + && noexcept(ranges::iter_move(--std::declval<_Iterator&>()))) + { + auto __tmp = __i.base(); + return ranges::iter_move(--__tmp); + } + + template _Iter2> + friend constexpr void + iter_swap(const reverse_iterator& __x, + const reverse_iterator<_Iter2>& __y) + noexcept(is_nothrow_copy_constructible_v<_Iterator> + && is_nothrow_copy_constructible_v<_Iter2> + && noexcept(ranges::iter_swap(--std::declval<_Iterator&>(), + --std::declval<_Iter2&>()))) + { + auto __xtmp = __x.base(); + auto __ytmp = __y.base(); + ranges::iter_swap(--__xtmp, --__ytmp); + } +#endif // ranges + + private: + template + static _GLIBCXX17_CONSTEXPR _Tp* + _S_to_pointer(_Tp* __p) + { return __p; } + + template + static _GLIBCXX17_CONSTEXPR pointer + _S_to_pointer(_Tp __t) + { return __t.operator->(); } + }; + + ///@{ + /** + * @param __x A %reverse_iterator. + * @param __y A %reverse_iterator. + * @return A simple bool. + * + * Reverse iterators forward comparisons to their underlying base() + * iterators. + * + */ +#ifndef __glibcxx_concepts + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator==(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return __x.base() == __y.base(); } + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator<(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return __y.base() < __x.base(); } + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator!=(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return !(__x == __y); } + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator>(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return __y < __x; } + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator<=(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return !(__y < __x); } + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator>=(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return !(__x < __y); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 280. Comparison of reverse_iterator to const reverse_iterator. + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator==(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return __x.base() == __y.base(); } + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator<(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return __x.base() > __y.base(); } + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator!=(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return __x.base() != __y.base(); } + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator>(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return __x.base() < __y.base(); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator<=(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return __x.base() >= __y.base(); } + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR bool + operator>=(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return __x.base() <= __y.base(); } +#else // C++20 + template + [[nodiscard]] + constexpr bool + operator==(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + requires requires { { __x.base() == __y.base() } -> convertible_to; } + { return __x.base() == __y.base(); } + + template + [[nodiscard]] + constexpr bool + operator!=(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + requires requires { { __x.base() != __y.base() } -> convertible_to; } + { return __x.base() != __y.base(); } + + template + [[nodiscard]] + constexpr bool + operator<(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + requires requires { { __x.base() > __y.base() } -> convertible_to; } + { return __x.base() > __y.base(); } + + template + [[nodiscard]] + constexpr bool + operator>(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + requires requires { { __x.base() < __y.base() } -> convertible_to; } + { return __x.base() < __y.base(); } + + template + [[nodiscard]] + constexpr bool + operator<=(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + requires requires { { __x.base() >= __y.base() } -> convertible_to; } + { return __x.base() >= __y.base(); } + + template + [[nodiscard]] + constexpr bool + operator>=(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + requires requires { { __x.base() <= __y.base() } -> convertible_to; } + { return __x.base() <= __y.base(); } + + template _IteratorR> + [[nodiscard]] + constexpr compare_three_way_result_t<_IteratorL, _IteratorR> + operator<=>(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return __y.base() <=> __x.base(); } + + // Additional, non-standard overloads to avoid ambiguities with greedy, + // unconstrained overloads in associated namespaces. + + template + [[nodiscard]] + constexpr bool + operator==(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + requires requires { { __x.base() == __y.base() } -> convertible_to; } + { return __x.base() == __y.base(); } + + template + [[nodiscard]] + constexpr compare_three_way_result_t<_Iterator, _Iterator> + operator<=>(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return __y.base() <=> __x.base(); } +#endif // C++20 + ///@} + +#if __cplusplus < 201103L + template + inline typename reverse_iterator<_Iterator>::difference_type + operator-(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return __y.base() - __x.base(); } + + template + inline typename reverse_iterator<_IteratorL>::difference_type + operator-(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return __y.base() - __x.base(); } +#else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 685. reverse_iterator/move_iterator difference has invalid signatures + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR auto + operator-(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + -> decltype(__y.base() - __x.base()) + { return __y.base() - __x.base(); } +#endif + + template + _GLIBCXX_NODISCARD + inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator> + operator+(typename reverse_iterator<_Iterator>::difference_type __n, + const reverse_iterator<_Iterator>& __x) + { return reverse_iterator<_Iterator>(__x.base() - __n); } + +#if __cplusplus >= 201103L + // Same as C++14 make_reverse_iterator but used in C++11 mode too. + template + inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator> + __make_reverse_iterator(_Iterator __i) + { return reverse_iterator<_Iterator>(__i); } + +# ifdef __glibcxx_make_reverse_iterator // C++ >= 14 + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 2285. make_reverse_iterator + /// Generator function for reverse_iterator. + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator> + make_reverse_iterator(_Iterator __i) + { return reverse_iterator<_Iterator>(__i); } + +# ifdef __glibcxx_ranges + template + requires (!sized_sentinel_for<_Iterator1, _Iterator2>) + inline constexpr bool + disable_sized_sentinel_for, + reverse_iterator<_Iterator2>> = true; +# endif // C++20 +# endif // __glibcxx_make_reverse_iterator + + template + struct __is_move_iterator > + : __is_move_iterator<_Iterator> + { }; +#endif // C++11 + + // 24.4.2.2.1 back_insert_iterator + /** + * @brief Turns assignment into insertion. + * + * These are output iterators, constructed from a container-of-T. + * Assigning a T to the iterator appends it to the container using + * push_back. + * + * Tip: Using the back_inserter function to create these iterators can + * save typing. + */ + template + class back_insert_iterator + : public iterator + { + protected: + _Container* container; + + public: + /// A nested typedef for the type of whatever container you used. + typedef _Container container_type; +#ifdef __glibcxx_ranges + using difference_type = ptrdiff_t; +#endif + + /// The only way to create this %iterator is with a container. + explicit _GLIBCXX20_CONSTEXPR + back_insert_iterator(_Container& __x) + : container(std::__addressof(__x)) { } + + /** + * @param __value An instance of whatever type + * container_type::const_reference is; presumably a + * reference-to-const T for container. + * @return This %iterator, for chained operations. + * + * This kind of %iterator doesn't really have a @a position in the + * container (you can think of the position as being permanently at + * the end, if you like). Assigning a value to the %iterator will + * always append the value to the end of the container. + */ +#if __cplusplus < 201103L + back_insert_iterator& + operator=(typename _Container::const_reference __value) + { + container->push_back(__value); + return *this; + } +#else + _GLIBCXX20_CONSTEXPR + back_insert_iterator& + operator=(const typename _Container::value_type& __value) + { + container->push_back(__value); + return *this; + } + + _GLIBCXX20_CONSTEXPR + back_insert_iterator& + operator=(typename _Container::value_type&& __value) + { + container->push_back(std::move(__value)); + return *this; + } +#endif + + /// Simply returns *this. + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + back_insert_iterator& + operator*() + { return *this; } + + /// Simply returns *this. (This %iterator does not @a move.) + _GLIBCXX20_CONSTEXPR + back_insert_iterator& + operator++() + { return *this; } + + /// Simply returns *this. (This %iterator does not @a move.) + _GLIBCXX20_CONSTEXPR + back_insert_iterator + operator++(int) + { return *this; } + }; + + /** + * @param __x A container of arbitrary type. + * @return An instance of back_insert_iterator working on @p __x. + * + * This wrapper function helps in creating back_insert_iterator instances. + * Typing the name of the %iterator requires knowing the precise full + * type of the container, which can be tedious and impedes generic + * programming. Using this function lets you take advantage of automatic + * template parameter deduction, making the compiler match the correct + * types for you. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline back_insert_iterator<_Container> + back_inserter(_Container& __x) + { return back_insert_iterator<_Container>(__x); } + + /** + * @brief Turns assignment into insertion. + * + * These are output iterators, constructed from a container-of-T. + * Assigning a T to the iterator prepends it to the container using + * push_front. + * + * Tip: Using the front_inserter function to create these iterators can + * save typing. + */ + template + class front_insert_iterator + : public iterator + { + protected: + _Container* container; + + public: + /// A nested typedef for the type of whatever container you used. + typedef _Container container_type; +#ifdef __glibcxx_ranges + using difference_type = ptrdiff_t; +#endif + + /// The only way to create this %iterator is with a container. + explicit _GLIBCXX20_CONSTEXPR + front_insert_iterator(_Container& __x) + : container(std::__addressof(__x)) { } + + /** + * @param __value An instance of whatever type + * container_type::const_reference is; presumably a + * reference-to-const T for container. + * @return This %iterator, for chained operations. + * + * This kind of %iterator doesn't really have a @a position in the + * container (you can think of the position as being permanently at + * the front, if you like). Assigning a value to the %iterator will + * always prepend the value to the front of the container. + */ +#if __cplusplus < 201103L + front_insert_iterator& + operator=(typename _Container::const_reference __value) + { + container->push_front(__value); + return *this; + } +#else + _GLIBCXX20_CONSTEXPR + front_insert_iterator& + operator=(const typename _Container::value_type& __value) + { + container->push_front(__value); + return *this; + } + + _GLIBCXX20_CONSTEXPR + front_insert_iterator& + operator=(typename _Container::value_type&& __value) + { + container->push_front(std::move(__value)); + return *this; + } +#endif + + /// Simply returns *this. + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + front_insert_iterator& + operator*() + { return *this; } + + /// Simply returns *this. (This %iterator does not @a move.) + _GLIBCXX20_CONSTEXPR + front_insert_iterator& + operator++() + { return *this; } + + /// Simply returns *this. (This %iterator does not @a move.) + _GLIBCXX20_CONSTEXPR + front_insert_iterator + operator++(int) + { return *this; } + }; + + /** + * @param __x A container of arbitrary type. + * @return An instance of front_insert_iterator working on @p x. + * + * This wrapper function helps in creating front_insert_iterator instances. + * Typing the name of the %iterator requires knowing the precise full + * type of the container, which can be tedious and impedes generic + * programming. Using this function lets you take advantage of automatic + * template parameter deduction, making the compiler match the correct + * types for you. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline front_insert_iterator<_Container> + front_inserter(_Container& __x) + { return front_insert_iterator<_Container>(__x); } + + /** + * @brief Turns assignment into insertion. + * + * These are output iterators, constructed from a container-of-T. + * Assigning a T to the iterator inserts it in the container at the + * %iterator's position, rather than overwriting the value at that + * position. + * + * (Sequences will actually insert a @e copy of the value before the + * %iterator's position.) + * + * Tip: Using the inserter function to create these iterators can + * save typing. + */ + template + class insert_iterator + : public iterator + { +#ifdef __glibcxx_ranges + using _Iter = std::__detail::__range_iter_t<_Container>; +#else + typedef typename _Container::iterator _Iter; +#endif + protected: + _Container* container; + _Iter iter; + + public: + /// A nested typedef for the type of whatever container you used. + typedef _Container container_type; + +#ifdef __glibcxx_ranges + using difference_type = ptrdiff_t; +#endif + + /** + * The only way to create this %iterator is with a container and an + * initial position (a normal %iterator into the container). + */ + _GLIBCXX20_CONSTEXPR + insert_iterator(_Container& __x, _Iter __i) + : container(std::__addressof(__x)), iter(__i) {} + + /** + * @param __value An instance of whatever type + * container_type::const_reference is; presumably a + * reference-to-const T for container. + * @return This %iterator, for chained operations. + * + * This kind of %iterator maintains its own position in the + * container. Assigning a value to the %iterator will insert the + * value into the container at the place before the %iterator. + * + * The position is maintained such that subsequent assignments will + * insert values immediately after one another. For example, + * @code + * // vector v contains A and Z + * + * insert_iterator i (v, ++v.begin()); + * i = 1; + * i = 2; + * i = 3; + * + * // vector v contains A, 1, 2, 3, and Z + * @endcode + */ +#if __cplusplus < 201103L + insert_iterator& + operator=(typename _Container::const_reference __value) + { + iter = container->insert(iter, __value); + ++iter; + return *this; + } +#else + _GLIBCXX20_CONSTEXPR + insert_iterator& + operator=(const typename _Container::value_type& __value) + { + iter = container->insert(iter, __value); + ++iter; + return *this; + } + + _GLIBCXX20_CONSTEXPR + insert_iterator& + operator=(typename _Container::value_type&& __value) + { + iter = container->insert(iter, std::move(__value)); + ++iter; + return *this; + } +#endif + + /// Simply returns *this. + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + insert_iterator& + operator*() + { return *this; } + + /// Simply returns *this. (This %iterator does not @a move.) + _GLIBCXX20_CONSTEXPR + insert_iterator& + operator++() + { return *this; } + + /// Simply returns *this. (This %iterator does not @a move.) + _GLIBCXX20_CONSTEXPR + insert_iterator& + operator++(int) + { return *this; } + }; + +#pragma GCC diagnostic pop + + /** + * @param __x A container of arbitrary type. + * @param __i An iterator into the container. + * @return An instance of insert_iterator working on @p __x. + * + * This wrapper function helps in creating insert_iterator instances. + * Typing the name of the %iterator requires knowing the precise full + * type of the container, which can be tedious and impedes generic + * programming. Using this function lets you take advantage of automatic + * template parameter deduction, making the compiler match the correct + * types for you. + */ +#ifdef __glibcxx_ranges + template + [[nodiscard]] + constexpr insert_iterator<_Container> + inserter(_Container& __x, std::__detail::__range_iter_t<_Container> __i) + { return insert_iterator<_Container>(__x, __i); } +#else + template + _GLIBCXX_NODISCARD + inline insert_iterator<_Container> + inserter(_Container& __x, typename _Container::iterator __i) + { return insert_iterator<_Container>(__x, __i); } +#endif + + /// @} group iterators + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // This iterator adapter is @a normal in the sense that it does not + // change the semantics of any of the operators of its iterator + // parameter. Its primary purpose is to convert an iterator that is + // not a class, e.g. a pointer, into an iterator that is a class. + // The _Container parameter exists solely so that different containers + // using this template can instantiate different types, even if the + // _Iterator parameter is the same. + template + class __normal_iterator + { + protected: + _Iterator _M_current; + + typedef std::iterator_traits<_Iterator> __traits_type; + +#if __cplusplus >= 201103L && ! defined __glibcxx_concepts + template + using __convertible_from + = std::__enable_if_t::value>; +#endif + + public: + typedef _Iterator iterator_type; + typedef typename __traits_type::iterator_category iterator_category; + typedef typename __traits_type::value_type value_type; + typedef typename __traits_type::difference_type difference_type; + typedef typename __traits_type::reference reference; + typedef typename __traits_type::pointer pointer; + +#ifdef __glibcxx_ranges + using iterator_concept = std::__detail::__iter_concept<_Iterator>; +#endif + + __attribute__((__always_inline__)) + _GLIBCXX_CONSTEXPR + __normal_iterator() _GLIBCXX_NOEXCEPT + : _M_current() { } + + __attribute__((__always_inline__)) + explicit _GLIBCXX_CONSTEXPR + __normal_iterator(const _Iterator& __i) _GLIBCXX_NOEXCEPT + : _M_current(__i) { } + + // Allow iterator to const_iterator conversion +#if __cplusplus >= 201103L +# ifdef __glibcxx_concepts + template requires std::is_convertible_v<_Iter, _Iterator> +# else + template> +# endif + [[__gnu__::__always_inline__]] + constexpr + __normal_iterator(const __normal_iterator<_Iter, _Container>& __i) + noexcept +#else + // N.B. _Container::pointer is not actually in container requirements, + // but is present in std::vector and std::basic_string. + template + __attribute__((__always_inline__)) + __normal_iterator(const __normal_iterator<_Iter, + typename __enable_if< + (std::__are_same<_Iter, typename _Container::pointer>::__value), + _Container>::__type>& __i) +#endif + : _M_current(__i.base()) { } + + // Forward iterator requirements + + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + _GLIBCXX_CONSTEXPR + reference + operator*() const _GLIBCXX_NOEXCEPT + { return *_M_current; } + + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + _GLIBCXX_CONSTEXPR + pointer + operator->() const _GLIBCXX_NOEXCEPT + { return _M_current; } + + __attribute__((__always_inline__)) + _GLIBCXX14_CONSTEXPR + __normal_iterator& + operator++() _GLIBCXX_NOEXCEPT + { + ++_M_current; + return *this; + } + + __attribute__((__always_inline__)) + _GLIBCXX14_CONSTEXPR + __normal_iterator + operator++(int) _GLIBCXX_NOEXCEPT + { return __normal_iterator(_M_current++); } + + // Bidirectional iterator requirements + + __attribute__((__always_inline__)) + _GLIBCXX14_CONSTEXPR + __normal_iterator& + operator--() _GLIBCXX_NOEXCEPT + { + --_M_current; + return *this; + } + + __attribute__((__always_inline__)) + _GLIBCXX14_CONSTEXPR + __normal_iterator + operator--(int) _GLIBCXX_NOEXCEPT + { return __normal_iterator(_M_current--); } + + // Random access iterator requirements + + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + _GLIBCXX_CONSTEXPR + reference + operator[](difference_type __n) const _GLIBCXX_NOEXCEPT + { return _M_current[__n]; } + + __attribute__((__always_inline__)) + _GLIBCXX14_CONSTEXPR + __normal_iterator& + operator+=(difference_type __n) _GLIBCXX_NOEXCEPT + { _M_current += __n; return *this; } + + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + _GLIBCXX_CONSTEXPR + __normal_iterator + operator+(difference_type __n) const _GLIBCXX_NOEXCEPT + { return __normal_iterator(_M_current + __n); } + + __attribute__((__always_inline__)) + _GLIBCXX14_CONSTEXPR + __normal_iterator& + operator-=(difference_type __n) _GLIBCXX_NOEXCEPT + { _M_current -= __n; return *this; } + + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + _GLIBCXX_CONSTEXPR + __normal_iterator + operator-(difference_type __n) const _GLIBCXX_NOEXCEPT + { return __normal_iterator(_M_current - __n); } + + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + _GLIBCXX_CONSTEXPR + const _Iterator& + base() const _GLIBCXX_NOEXCEPT + { return _M_current; } + }; + + // Note: In what follows, the left- and right-hand-side iterators are + // allowed to vary in types (conceptually in cv-qualification) so that + // comparison between cv-qualified and non-cv-qualified iterators be + // valid. However, the greedy and unfriendly operators in std::rel_ops + // will make overload resolution ambiguous (when in scope) if we don't + // provide overloads whose operands are of the same type. Can someone + // remind me what generic programming is about? -- Gaby + +#ifdef __cpp_lib_three_way_comparison + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr bool + operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + noexcept(noexcept(__lhs.base() == __rhs.base())) + requires requires { + { __lhs.base() == __rhs.base() } -> std::convertible_to; + } + { return __lhs.base() == __rhs.base(); } + + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr std::__detail::__synth3way_t<_IteratorR, _IteratorL> + operator<=>(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base()))) + { return std::__detail::__synth3way(__lhs.base(), __rhs.base()); } + + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr bool + operator==(const __normal_iterator<_Iterator, _Container>& __lhs, + const __normal_iterator<_Iterator, _Container>& __rhs) + noexcept(noexcept(__lhs.base() == __rhs.base())) + requires requires { + { __lhs.base() == __rhs.base() } -> std::convertible_to; + } + { return __lhs.base() == __rhs.base(); } + + template + [[nodiscard, __gnu__::__always_inline__]] + constexpr std::__detail::__synth3way_t<_Iterator> + operator<=>(const __normal_iterator<_Iterator, _Container>& __lhs, + const __normal_iterator<_Iterator, _Container>& __rhs) + noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base()))) + { return std::__detail::__synth3way(__lhs.base(), __rhs.base()); } +#else + // Forward iterator requirements + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() == __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator==(const __normal_iterator<_Iterator, _Container>& __lhs, + const __normal_iterator<_Iterator, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() == __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() != __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator!=(const __normal_iterator<_Iterator, _Container>& __lhs, + const __normal_iterator<_Iterator, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() != __rhs.base(); } + + // Random access iterator requirements + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() < __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR + inline bool + operator<(const __normal_iterator<_Iterator, _Container>& __lhs, + const __normal_iterator<_Iterator, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() < __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() > __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator>(const __normal_iterator<_Iterator, _Container>& __lhs, + const __normal_iterator<_Iterator, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() > __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() <= __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator<=(const __normal_iterator<_Iterator, _Container>& __lhs, + const __normal_iterator<_Iterator, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() <= __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() >= __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline bool + operator>=(const __normal_iterator<_Iterator, _Container>& __lhs, + const __normal_iterator<_Iterator, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() >= __rhs.base(); } +#endif // three-way comparison + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // According to the resolution of DR179 not only the various comparison + // operators but also operator- must accept mixed iterator/const_iterator + // parameters. + template +#if __cplusplus >= 201103L + // DR 685. + [[__nodiscard__, __gnu__::__always_inline__]] + constexpr auto + operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept + -> decltype(__lhs.base() - __rhs.base()) +#else + inline typename __normal_iterator<_IteratorL, _Container>::difference_type + operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) +#endif + { return __lhs.base() - __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline typename __normal_iterator<_Iterator, _Container>::difference_type + operator-(const __normal_iterator<_Iterator, _Container>& __lhs, + const __normal_iterator<_Iterator, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() - __rhs.base(); } + + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR + inline __normal_iterator<_Iterator, _Container> + operator+(typename __normal_iterator<_Iterator, _Container>::difference_type + __n, const __normal_iterator<_Iterator, _Container>& __i) + _GLIBCXX_NOEXCEPT + { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace __gnu_cxx + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if __cplusplus >= 201103L + /** + * @addtogroup iterators + * @{ + */ + +#ifdef __glibcxx_ranges + /// A sentinel adaptor for use with std::move_iterator. + template + class move_sentinel + { + public: + constexpr + move_sentinel() + noexcept(is_nothrow_default_constructible_v<_Sent>) + : _M_last() { } + + constexpr explicit + move_sentinel(_Sent __s) + noexcept(is_nothrow_move_constructible_v<_Sent>) + : _M_last(std::move(__s)) { } + + template requires convertible_to + constexpr + move_sentinel(const move_sentinel<_S2>& __s) + noexcept(is_nothrow_constructible_v<_Sent, const _S2&>) + : _M_last(__s.base()) + { } + + template requires assignable_from<_Sent&, const _S2&> + constexpr move_sentinel& + operator=(const move_sentinel<_S2>& __s) + noexcept(is_nothrow_assignable_v<_Sent, const _S2&>) + { + _M_last = __s.base(); + return *this; + } + + [[nodiscard]] + constexpr _Sent + base() const + noexcept(is_nothrow_copy_constructible_v<_Sent>) + { return _M_last; } + + private: + _Sent _M_last; + }; + + /// @cond undocumented + namespace __detail + { + template + struct __move_iter_cat + { }; + + template + requires requires { typename __iter_category_t<_Iterator>; } + struct __move_iter_cat<_Iterator> + { + using iterator_category + = __clamp_iter_cat<__iter_category_t<_Iterator>, + random_access_iterator_tag>; + }; + } + /// @endcond +#endif // ranges + + // 24.4.3 Move iterators + /** @brief An iterator adaptor that yields an rvalue reference. + * + * Class template move_iterator is an iterator adapter with the same + * behavior as the underlying iterator except that its dereference + * operator implicitly converts the value returned by the underlying + * iterator's dereference operator to an rvalue reference. Some + * generic algorithms can be called with move iterators to replace + * copying with moving. + */ + template + class move_iterator +#ifdef __glibcxx_ranges + : public __detail::__move_iter_cat<_Iterator> +#endif + { + _Iterator _M_current; + + using __traits_type = iterator_traits<_Iterator>; +#ifndef __glibcxx_ranges + using __base_ref = typename __traits_type::reference; +#endif + + template + friend class move_iterator; + +#ifdef __glibcxx_concepts // C++20 && concepts + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3435. three_way_comparable_with, [...]> + template + static constexpr bool __convertible = !is_same_v<_Iter2, _Iterator> + && convertible_to; +#endif + +#ifdef __glibcxx_ranges + static auto + _S_iter_concept() + { + if constexpr (random_access_iterator<_Iterator>) + return random_access_iterator_tag{}; + else if constexpr (bidirectional_iterator<_Iterator>) + return bidirectional_iterator_tag{}; + else if constexpr (forward_iterator<_Iterator>) + return forward_iterator_tag{}; + else + return input_iterator_tag{}; + } +#endif + + public: + using iterator_type = _Iterator; + +#ifdef __glibcxx_move_iterator_concept // C++ >= 20 && lib_concepts + using iterator_concept = decltype(_S_iter_concept()); + + // iterator_category defined in __move_iter_cat + using value_type = iter_value_t<_Iterator>; + using difference_type = iter_difference_t<_Iterator>; + using pointer = _Iterator; + using reference = iter_rvalue_reference_t<_Iterator>; +#else + typedef typename __traits_type::iterator_category iterator_category; + typedef typename __traits_type::value_type value_type; + typedef typename __traits_type::difference_type difference_type; + // NB: DR 680. + typedef _Iterator pointer; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2106. move_iterator wrapping iterators returning prvalues + using reference + = __conditional_t::value, + typename remove_reference<__base_ref>::type&&, + __base_ref>; +#endif + + _GLIBCXX17_CONSTEXPR + move_iterator() + : _M_current() { } + + explicit _GLIBCXX17_CONSTEXPR + move_iterator(iterator_type __i) + : _M_current(std::move(__i)) { } + + template +#ifdef __glibcxx_concepts + requires __convertible<_Iter> +#endif + _GLIBCXX17_CONSTEXPR + move_iterator(const move_iterator<_Iter>& __i) + : _M_current(__i._M_current) { } + + template +#ifdef __glibcxx_concepts + requires __convertible<_Iter> + && assignable_from<_Iterator&, const _Iter&> +#endif + _GLIBCXX17_CONSTEXPR + move_iterator& operator=(const move_iterator<_Iter>& __i) + { + _M_current = __i._M_current; + return *this; + } + +#if __cplusplus <= 201703L + [[__nodiscard__]] + _GLIBCXX17_CONSTEXPR iterator_type + base() const + { return _M_current; } +#else + [[nodiscard]] + constexpr const iterator_type& + base() const & noexcept + { return _M_current; } + + [[nodiscard]] + constexpr iterator_type + base() && + { return std::move(_M_current); } +#endif + + [[__nodiscard__]] + _GLIBCXX17_CONSTEXPR reference + operator*() const +#ifdef __glibcxx_ranges + { return ranges::iter_move(_M_current); } +#else + { return static_cast(*_M_current); } +#endif + + [[__nodiscard__]] + _GLIBCXX17_CONSTEXPR pointer + operator->() const + { return _M_current; } + + _GLIBCXX17_CONSTEXPR move_iterator& + operator++() + { + ++_M_current; + return *this; + } + + _GLIBCXX17_CONSTEXPR move_iterator + operator++(int) + { + move_iterator __tmp = *this; + ++_M_current; + return __tmp; + } + +#ifdef __glibcxx_concepts + constexpr void + operator++(int) requires (!forward_iterator<_Iterator>) + { ++_M_current; } +#endif + + _GLIBCXX17_CONSTEXPR move_iterator& + operator--() + { + --_M_current; + return *this; + } + + _GLIBCXX17_CONSTEXPR move_iterator + operator--(int) + { + move_iterator __tmp = *this; + --_M_current; + return __tmp; + } + + [[__nodiscard__]] + _GLIBCXX17_CONSTEXPR move_iterator + operator+(difference_type __n) const + { return move_iterator(_M_current + __n); } + + _GLIBCXX17_CONSTEXPR move_iterator& + operator+=(difference_type __n) + { + _M_current += __n; + return *this; + } + + [[__nodiscard__]] + _GLIBCXX17_CONSTEXPR move_iterator + operator-(difference_type __n) const + { return move_iterator(_M_current - __n); } + + _GLIBCXX17_CONSTEXPR move_iterator& + operator-=(difference_type __n) + { + _M_current -= __n; + return *this; + } + + [[__nodiscard__]] + _GLIBCXX17_CONSTEXPR reference + operator[](difference_type __n) const +#ifdef __glibcxx_ranges + { return ranges::iter_move(_M_current + __n); } +#else + { return std::move(_M_current[__n]); } +#endif + +#ifdef __glibcxx_ranges + template _Sent> + [[nodiscard]] + friend constexpr bool + operator==(const move_iterator& __x, const move_sentinel<_Sent>& __y) + { return __x.base() == __y.base(); } + + template _Sent> + [[nodiscard]] + friend constexpr iter_difference_t<_Iterator> + operator-(const move_sentinel<_Sent>& __x, const move_iterator& __y) + { return __x.base() - __y.base(); } + + template _Sent> + [[nodiscard]] + friend constexpr iter_difference_t<_Iterator> + operator-(const move_iterator& __x, const move_sentinel<_Sent>& __y) + { return __x.base() - __y.base(); } + + [[nodiscard]] + friend constexpr iter_rvalue_reference_t<_Iterator> + iter_move(const move_iterator& __i) + noexcept(noexcept(ranges::iter_move(__i._M_current))) + { return ranges::iter_move(__i._M_current); } + + template _Iter2> + friend constexpr void + iter_swap(const move_iterator& __x, const move_iterator<_Iter2>& __y) + noexcept(noexcept(ranges::iter_swap(__x._M_current, __y._M_current))) + { return ranges::iter_swap(__x._M_current, __y._M_current); } +#endif // C++20 + }; + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator==(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#ifdef __glibcxx_concepts + requires requires { { __x.base() == __y.base() } -> convertible_to; } +#endif + { return __x.base() == __y.base(); } + +#ifdef __cpp_lib_three_way_comparison + template _IteratorR> + [[__nodiscard__]] + constexpr compare_three_way_result_t<_IteratorL, _IteratorR> + operator<=>(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) + { return __x.base() <=> __y.base(); } +#else + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator!=(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) + { return !(__x == __y); } +#endif + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator<(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#ifdef __glibcxx_concepts + requires requires { { __x.base() < __y.base() } -> convertible_to; } +#endif + { return __x.base() < __y.base(); } + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator<=(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#ifdef __glibcxx_concepts + requires requires { { __y.base() < __x.base() } -> convertible_to; } +#endif + { return !(__y < __x); } + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator>(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#ifdef __glibcxx_concepts + requires requires { { __y.base() < __x.base() } -> convertible_to; } +#endif + { return __y < __x; } + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator>=(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#ifdef __glibcxx_concepts + requires requires { { __x.base() < __y.base() } -> convertible_to; } +#endif + { return !(__x < __y); } + + // Note: See __normal_iterator operators note from Gaby to understand + // why we have these extra overloads for some move_iterator operators. + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator==(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + // N.B. No contraints, x.base() == y.base() is always well-formed. + { return __x.base() == __y.base(); } + +#ifdef __cpp_lib_three_way_comparison + template + [[__nodiscard__]] + constexpr compare_three_way_result_t<_Iterator> + operator<=>(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return __x.base() <=> __y.base(); } +#else + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator!=(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return !(__x == __y); } + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator<(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return __x.base() < __y.base(); } + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator<=(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return !(__y < __x); } + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator>(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return __y < __x; } + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR bool + operator>=(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return !(__x < __y); } +#endif // ! C++20 + + // DR 685. + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR auto + operator-(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) + -> decltype(__x.base() - __y.base()) + { return __x.base() - __y.base(); } + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator> + operator+(typename move_iterator<_Iterator>::difference_type __n, + const move_iterator<_Iterator>& __x) +#ifdef __glibcxx_concepts + requires requires { { __x.base() + __n } -> same_as<_Iterator>; } +#endif + { return __x + __n; } + + template + [[__nodiscard__]] + inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator> + make_move_iterator(_Iterator __i) + { return move_iterator<_Iterator>(std::move(__i)); } + + template::value_type>::value, + _Iterator, move_iterator<_Iterator>>> + [[__nodiscard__]] + constexpr _ReturnType + __make_move_if_noexcept_iterator(_Iterator __i) + { return _ReturnType(__i); } + + // Overload for pointers that matches std::move_if_noexcept more closely, + // returning a constant iterator when we don't want to move. + template::value, + const _Tp*, move_iterator<_Tp*>>> + [[__nodiscard__]] + constexpr _ReturnType + __make_move_if_noexcept_iterator(_Tp* __i) + { return _ReturnType(__i); } + + template + struct __is_move_iterator > + { + enum { __value = 1 }; + typedef __true_type __type; + }; + +#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter) +#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) \ + std::__make_move_if_noexcept_iterator(_Iter) +#else +#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) (_Iter) +#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) (_Iter) +#endif // C++11 + +#ifdef __glibcxx_ranges + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3736. move_iterator missing disable_sized_sentinel_for specialization + template + requires (!sized_sentinel_for<_Iterator1, _Iterator2>) + inline constexpr bool + disable_sized_sentinel_for, + move_iterator<_Iterator2>> = true; + + // [iterators.common] Common iterators + + /// @cond undocumented + namespace __detail + { + template + concept __common_iter_has_arrow = indirectly_readable + && (requires(const _It& __it) { __it.operator->(); } + || is_reference_v> + || constructible_from, iter_reference_t<_It>>); + + template + concept __common_iter_use_postfix_proxy + = (!requires (_It& __i) { { *__i++ } -> __can_reference; }) + && constructible_from, iter_reference_t<_It>> + && move_constructible>; + } // namespace __detail + /// @endcond + + /// An iterator/sentinel adaptor for representing a non-common range. + template _Sent> + requires (!same_as<_It, _Sent>) && copyable<_It> + class common_iterator + { + template + static constexpr bool + _S_noexcept1() + { + if constexpr (is_trivially_default_constructible_v<_Tp>) + return is_nothrow_assignable_v<_Tp&, _Up>; + else + return is_nothrow_constructible_v<_Tp, _Up>; + } + + template + static constexpr bool + _S_noexcept() + { return _S_noexcept1<_It, _It2>() && _S_noexcept1<_Sent, _Sent2>(); } + + class __arrow_proxy + { + iter_value_t<_It> _M_keep; + + constexpr + __arrow_proxy(iter_reference_t<_It>&& __x) + : _M_keep(std::move(__x)) { } + + friend class common_iterator; + + public: + constexpr const iter_value_t<_It>* + operator->() const noexcept + { return std::__addressof(_M_keep); } + }; + + class __postfix_proxy + { + iter_value_t<_It> _M_keep; + + constexpr + __postfix_proxy(iter_reference_t<_It>&& __x) + : _M_keep(std::forward>(__x)) { } + + friend class common_iterator; + + public: + constexpr const iter_value_t<_It>& + operator*() const noexcept + { return _M_keep; } + }; + + public: + constexpr + common_iterator() + noexcept(is_nothrow_default_constructible_v<_It>) + requires default_initializable<_It> + : _M_it(), _M_index(0) + { } + + constexpr + common_iterator(_It __i) + noexcept(is_nothrow_move_constructible_v<_It>) + : _M_it(std::move(__i)), _M_index(0) + { } + + constexpr + common_iterator(_Sent __s) + noexcept(is_nothrow_move_constructible_v<_Sent>) + : _M_sent(std::move(__s)), _M_index(1) + { } + + template + requires convertible_to + && convertible_to + constexpr + common_iterator(const common_iterator<_It2, _Sent2>& __x) + noexcept(_S_noexcept()) + : _M_valueless(), _M_index(__x._M_index) + { + __glibcxx_assert(__x._M_has_value()); + if (_M_index == 0) + { + if constexpr (is_trivially_default_constructible_v<_It>) + _M_it = std::move(__x._M_it); + else + std::construct_at(std::__addressof(_M_it), __x._M_it); + } + else if (_M_index == 1) + { + if constexpr (is_trivially_default_constructible_v<_Sent>) + _M_sent = std::move(__x._M_sent); + else + std::construct_at(std::__addressof(_M_sent), __x._M_sent); + } + } + + common_iterator(const common_iterator&) = default; + + constexpr + common_iterator(const common_iterator& __x) + noexcept(_S_noexcept()) + requires (!is_trivially_copyable_v<_It> || !is_trivially_copyable_v<_Sent>) + : _M_valueless(), _M_index(__x._M_index) + { + if (_M_index == 0) + { + if constexpr (is_trivially_default_constructible_v<_It>) + _M_it = __x._M_it; + else + std::construct_at(std::__addressof(_M_it), __x._M_it); + } + else if (_M_index == 1) + { + if constexpr (is_trivially_default_constructible_v<_Sent>) + _M_sent = __x._M_sent; + else + std::construct_at(std::__addressof(_M_sent), __x._M_sent); + } + } + + common_iterator(common_iterator&&) = default; + + constexpr + common_iterator(common_iterator&& __x) + noexcept(_S_noexcept<_It, _Sent>()) + requires (!is_trivially_copyable_v<_It> || !is_trivially_copyable_v<_Sent>) + : _M_valueless(), _M_index(__x._M_index) + { + if (_M_index == 0) + { + if constexpr (is_trivially_default_constructible_v<_It>) + _M_it = std::move(__x._M_it); + else + std::construct_at(std::__addressof(_M_it), std::move(__x._M_it)); + } + else if (_M_index == 1) + { + if constexpr (is_trivially_default_constructible_v<_Sent>) + _M_sent = std::move(__x._M_sent); + else + std::construct_at(std::__addressof(_M_sent), + std::move(__x._M_sent)); + } + } + + constexpr common_iterator& + operator=(const common_iterator&) = default; + + constexpr common_iterator& + operator=(const common_iterator& __x) + noexcept(is_nothrow_copy_assignable_v<_It> + && is_nothrow_copy_assignable_v<_Sent> + && is_nothrow_copy_constructible_v<_It> + && is_nothrow_copy_constructible_v<_Sent>) + requires (!is_trivially_copy_assignable_v<_It> + || !is_trivially_copy_assignable_v<_Sent>) + { + _M_assign(__x); + return *this; + } + + constexpr common_iterator& + operator=(common_iterator&&) = default; + + constexpr common_iterator& + operator=(common_iterator&& __x) + noexcept(is_nothrow_move_assignable_v<_It> + && is_nothrow_move_assignable_v<_Sent> + && is_nothrow_move_constructible_v<_It> + && is_nothrow_move_constructible_v<_Sent>) + requires (!is_trivially_move_assignable_v<_It> + || !is_trivially_move_assignable_v<_Sent>) + { + _M_assign(std::move(__x)); + return *this; + } + + template + requires convertible_to + && convertible_to + && assignable_from<_It&, const _It2&> + && assignable_from<_Sent&, const _Sent2&> + constexpr common_iterator& + operator=(const common_iterator<_It2, _Sent2>& __x) + noexcept(is_nothrow_constructible_v<_It, const _It2&> + && is_nothrow_constructible_v<_Sent, const _Sent2&> + && is_nothrow_assignable_v<_It&, const _It2&> + && is_nothrow_assignable_v<_Sent&, const _Sent2&>) + { + __glibcxx_assert(__x._M_has_value()); + _M_assign(__x); + return *this; + } + +#if __cpp_concepts >= 202002L // Constrained special member functions + ~common_iterator() = default; + + constexpr + ~common_iterator() + requires (!is_trivially_destructible_v<_It> + || !is_trivially_destructible_v<_Sent>) +#else + constexpr + ~common_iterator() +#endif + { + if (_M_index == 0) + _M_it.~_It(); + else if (_M_index == 1) + _M_sent.~_Sent(); + } + + [[nodiscard]] + constexpr decltype(auto) + operator*() + { + __glibcxx_assert(_M_index == 0); + return *_M_it; + } + + [[nodiscard]] + constexpr decltype(auto) + operator*() const requires __detail::__dereferenceable + { + __glibcxx_assert(_M_index == 0); + return *_M_it; + } + + [[nodiscard]] + constexpr auto + operator->() const requires __detail::__common_iter_has_arrow<_It> + { + __glibcxx_assert(_M_index == 0); + if constexpr (is_pointer_v<_It> || requires { _M_it.operator->(); }) + return _M_it; + else if constexpr (is_reference_v>) + { + auto&& __tmp = *_M_it; + return std::__addressof(__tmp); + } + else + return __arrow_proxy{*_M_it}; + } + + constexpr common_iterator& + operator++() + { + __glibcxx_assert(_M_index == 0); + ++_M_it; + return *this; + } + + constexpr decltype(auto) + operator++(int) + { + __glibcxx_assert(_M_index == 0); + if constexpr (forward_iterator<_It>) + { + common_iterator __tmp = *this; + ++*this; + return __tmp; + } + else if constexpr (!__detail::__common_iter_use_postfix_proxy<_It>) + return _M_it++; + else + { + __postfix_proxy __p(**this); + ++*this; + return __p; + } + } + + template _Sent2> + requires sentinel_for<_Sent, _It2> + friend constexpr bool + operator== [[nodiscard]] (const common_iterator& __x, + const common_iterator<_It2, _Sent2>& __y) + { + switch(__x._M_index << 2 | __y._M_index) + { + case 0b0000: + case 0b0101: + return true; + case 0b0001: + return __x._M_it == __y._M_sent; + case 0b0100: + return __x._M_sent == __y._M_it; + default: + __glibcxx_assert(__x._M_has_value()); + __glibcxx_assert(__y._M_has_value()); + __builtin_unreachable(); + } + } + + template _Sent2> + requires sentinel_for<_Sent, _It2> && equality_comparable_with<_It, _It2> + friend constexpr bool + operator== [[nodiscard]] (const common_iterator& __x, + const common_iterator<_It2, _Sent2>& __y) + { + switch(__x._M_index << 2 | __y._M_index) + { + case 0b0101: + return true; + case 0b0000: + return __x._M_it == __y._M_it; + case 0b0001: + return __x._M_it == __y._M_sent; + case 0b0100: + return __x._M_sent == __y._M_it; + default: + __glibcxx_assert(__x._M_has_value()); + __glibcxx_assert(__y._M_has_value()); + __builtin_unreachable(); + } + } + + template _It2, sized_sentinel_for<_It> _Sent2> + requires sized_sentinel_for<_Sent, _It2> + friend constexpr iter_difference_t<_It2> + operator- [[nodiscard]] (const common_iterator& __x, + const common_iterator<_It2, _Sent2>& __y) + { + switch(__x._M_index << 2 | __y._M_index) + { + case 0b0101: + return 0; + case 0b0000: + return __x._M_it - __y._M_it; + case 0b0001: + return __x._M_it - __y._M_sent; + case 0b0100: + return __x._M_sent - __y._M_it; + default: + __glibcxx_assert(__x._M_has_value()); + __glibcxx_assert(__y._M_has_value()); + __builtin_unreachable(); + } + } + + [[nodiscard]] + friend constexpr iter_rvalue_reference_t<_It> + iter_move(const common_iterator& __i) + noexcept(noexcept(ranges::iter_move(std::declval()))) + requires input_iterator<_It> + { + __glibcxx_assert(__i._M_index == 0); + return ranges::iter_move(__i._M_it); + } + + template _It2, typename _Sent2> + friend constexpr void + iter_swap(const common_iterator& __x, + const common_iterator<_It2, _Sent2>& __y) + noexcept(noexcept(ranges::iter_swap(std::declval(), + std::declval()))) + { + __glibcxx_assert(__x._M_index == 0); + __glibcxx_assert(__y._M_index == 0); + return ranges::iter_swap(__x._M_it, __y._M_it); + } + + private: + template _Sent2> + requires (!same_as<_It2, _Sent2>) && copyable<_It2> + friend class common_iterator; + + constexpr bool + _M_has_value() const noexcept { return _M_index != _S_valueless; } + + template + constexpr void + _M_assign(_CIt&& __x) + { + if (_M_index == __x._M_index) + { + if (_M_index == 0) + _M_it = std::forward<_CIt>(__x)._M_it; + else if (_M_index == 1) + _M_sent = std::forward<_CIt>(__x)._M_sent; + } + else + { + if (_M_index == 0) + _M_it.~_It(); + else if (_M_index == 1) + _M_sent.~_Sent(); + _M_index = _S_valueless; + + if (__x._M_index == 0) + std::construct_at(std::__addressof(_M_it), + std::forward<_CIt>(__x)._M_it); + else if (__x._M_index == 1) + std::construct_at(std::__addressof(_M_sent), + std::forward<_CIt>(__x)._M_sent); + _M_index = __x._M_index; + } + } + + union + { + _It _M_it; + _Sent _M_sent; + unsigned char _M_valueless; + }; + unsigned char _M_index; // 0 == _M_it, 1 == _M_sent, 2 == valueless + + static constexpr unsigned char _S_valueless{2}; + }; + + template + struct incrementable_traits> + { + using difference_type = iter_difference_t<_It>; + }; + + template + struct iterator_traits> + { + private: + template + struct __ptr + { + using type = void; + }; + + template + requires __detail::__common_iter_has_arrow<_Iter> + struct __ptr<_Iter> + { + using _CIter = common_iterator<_Iter, _Sent>; + using type = decltype(std::declval().operator->()); + }; + + static auto + _S_iter_cat() + { + if constexpr (requires { requires derived_from<__iter_category_t<_It>, + forward_iterator_tag>; }) + return forward_iterator_tag{}; + else + return input_iterator_tag{}; + } + + public: + using iterator_concept = __conditional_t, + forward_iterator_tag, + input_iterator_tag>; + using iterator_category = decltype(_S_iter_cat()); + using value_type = iter_value_t<_It>; + using difference_type = iter_difference_t<_It>; + using pointer = typename __ptr<_It>::type; + using reference = iter_reference_t<_It>; + }; + + // [iterators.counted] Counted iterators + + /// @cond undocumented + namespace __detail + { + template + struct __counted_iter_value_type + { }; + + template + struct __counted_iter_value_type<_It> + { using value_type = iter_value_t<_It>; }; + + template + struct __counted_iter_concept + { }; + + template + requires requires { typename _It::iterator_concept; } + struct __counted_iter_concept<_It> + { using iterator_concept = typename _It::iterator_concept; }; + + template + struct __counted_iter_cat + { }; + + template + requires requires { typename _It::iterator_category; } + struct __counted_iter_cat<_It> + { using iterator_category = typename _It::iterator_category; }; + } + /// @endcond + + /// An iterator adaptor that keeps track of the distance to the end. + template + class counted_iterator + : public __detail::__counted_iter_value_type<_It>, + public __detail::__counted_iter_concept<_It>, + public __detail::__counted_iter_cat<_It> + { + public: + using iterator_type = _It; + // value_type defined in __counted_iter_value_type + using difference_type = iter_difference_t<_It>; + // iterator_concept defined in __counted_iter_concept + // iterator_category defined in __counted_iter_cat + + constexpr counted_iterator() requires default_initializable<_It> = default; + + constexpr + counted_iterator(_It __i, iter_difference_t<_It> __n) + : _M_current(std::move(__i)), _M_length(__n) + { __glibcxx_assert(__n >= 0); } + + template + requires convertible_to + constexpr + counted_iterator(const counted_iterator<_It2>& __x) + : _M_current(__x._M_current), _M_length(__x._M_length) + { } + + template + requires assignable_from<_It&, const _It2&> + constexpr counted_iterator& + operator=(const counted_iterator<_It2>& __x) + { + _M_current = __x._M_current; + _M_length = __x._M_length; + return *this; + } + + [[nodiscard]] + constexpr const _It& + base() const & noexcept + { return _M_current; } + + [[nodiscard]] + constexpr _It + base() && + noexcept(is_nothrow_move_constructible_v<_It>) + { return std::move(_M_current); } + + [[nodiscard]] + constexpr iter_difference_t<_It> + count() const noexcept { return _M_length; } + + [[nodiscard]] + constexpr decltype(auto) + operator*() + noexcept(noexcept(*_M_current)) + { + __glibcxx_assert( _M_length > 0 ); + return *_M_current; + } + + [[nodiscard]] + constexpr decltype(auto) + operator*() const + noexcept(noexcept(*_M_current)) + requires __detail::__dereferenceable + { + __glibcxx_assert( _M_length > 0 ); + return *_M_current; + } + + [[nodiscard]] + constexpr auto + operator->() const noexcept + requires contiguous_iterator<_It> + { return std::to_address(_M_current); } + + constexpr counted_iterator& + operator++() + { + __glibcxx_assert(_M_length > 0); + ++_M_current; + --_M_length; + return *this; + } + + constexpr decltype(auto) + operator++(int) + { + __glibcxx_assert(_M_length > 0); + --_M_length; + __try + { + return _M_current++; + } __catch(...) { + ++_M_length; + __throw_exception_again; + } + } + + constexpr counted_iterator + operator++(int) requires forward_iterator<_It> + { + auto __tmp = *this; + ++*this; + return __tmp; + } + + constexpr counted_iterator& + operator--() requires bidirectional_iterator<_It> + { + --_M_current; + ++_M_length; + return *this; + } + + constexpr counted_iterator + operator--(int) requires bidirectional_iterator<_It> + { + auto __tmp = *this; + --*this; + return __tmp; + } + + [[nodiscard]] + constexpr counted_iterator + operator+(iter_difference_t<_It> __n) const + requires random_access_iterator<_It> + { return counted_iterator(_M_current + __n, _M_length - __n); } + + [[nodiscard]] + friend constexpr counted_iterator + operator+(iter_difference_t<_It> __n, const counted_iterator& __x) + requires random_access_iterator<_It> + { return __x + __n; } + + constexpr counted_iterator& + operator+=(iter_difference_t<_It> __n) + requires random_access_iterator<_It> + { + __glibcxx_assert(__n <= _M_length); + _M_current += __n; + _M_length -= __n; + return *this; + } + + [[nodiscard]] + constexpr counted_iterator + operator-(iter_difference_t<_It> __n) const + requires random_access_iterator<_It> + { return counted_iterator(_M_current - __n, _M_length + __n); } + + template _It2> + [[nodiscard]] + friend constexpr iter_difference_t<_It2> + operator-(const counted_iterator& __x, + const counted_iterator<_It2>& __y) + { return __y._M_length - __x._M_length; } + + [[nodiscard]] + friend constexpr iter_difference_t<_It> + operator-(const counted_iterator& __x, default_sentinel_t) + { return -__x._M_length; } + + [[nodiscard]] + friend constexpr iter_difference_t<_It> + operator-(default_sentinel_t, const counted_iterator& __y) + { return __y._M_length; } + + constexpr counted_iterator& + operator-=(iter_difference_t<_It> __n) + requires random_access_iterator<_It> + { + __glibcxx_assert(-__n <= _M_length); + _M_current -= __n; + _M_length += __n; + return *this; + } + + [[nodiscard]] + constexpr decltype(auto) + operator[](iter_difference_t<_It> __n) const + noexcept(noexcept(_M_current[__n])) + requires random_access_iterator<_It> + { + __glibcxx_assert(__n < _M_length); + return _M_current[__n]; + } + + template _It2> + [[nodiscard]] + friend constexpr bool + operator==(const counted_iterator& __x, + const counted_iterator<_It2>& __y) + { return __x._M_length == __y._M_length; } + + [[nodiscard]] + friend constexpr bool + operator==(const counted_iterator& __x, default_sentinel_t) + { return __x._M_length == 0; } + + template _It2> + [[nodiscard]] + friend constexpr strong_ordering + operator<=>(const counted_iterator& __x, + const counted_iterator<_It2>& __y) + { return __y._M_length <=> __x._M_length; } + + [[nodiscard]] + friend constexpr iter_rvalue_reference_t<_It> + iter_move(const counted_iterator& __i) + noexcept(noexcept(ranges::iter_move(__i._M_current))) + requires input_iterator<_It> + { + __glibcxx_assert( __i._M_length > 0 ); + return ranges::iter_move(__i._M_current); + } + + template _It2> + friend constexpr void + iter_swap(const counted_iterator& __x, + const counted_iterator<_It2>& __y) + noexcept(noexcept(ranges::iter_swap(__x._M_current, __y._M_current))) + { + __glibcxx_assert( __x._M_length > 0 && __y._M_length > 0 ); + ranges::iter_swap(__x._M_current, __y._M_current); + } + + private: + template friend class counted_iterator; + + _It _M_current = _It(); + iter_difference_t<_It> _M_length = 0; + }; + + template + requires same_as<__detail::__iter_traits<_It>, iterator_traits<_It>> + struct iterator_traits> : iterator_traits<_It> + { + using pointer = __conditional_t, + add_pointer_t>, + void>; + }; + +#ifdef __glibcxx_ranges_as_const // >= C++23 + template + using iter_const_reference_t + = common_reference_t&&, iter_reference_t<_It>>; + + template class basic_const_iterator; + + namespace __detail + { + template + concept __constant_iterator = input_iterator<_It> + && same_as, iter_reference_t<_It>>; + + template + inline constexpr bool __is_const_iterator = false; + + template + inline constexpr bool __is_const_iterator> = true; + + template + concept __not_a_const_iterator = !__is_const_iterator<_Tp>; + + template + using __iter_const_rvalue_reference_t + = common_reference_t&&, iter_rvalue_reference_t<_It>>; + + template + struct __basic_const_iterator_iter_cat + { }; + + template + struct __basic_const_iterator_iter_cat<_It> + { using iterator_category = __iter_category_t<_It>; }; + } // namespace detail + + template + using const_iterator + = __conditional_t<__detail::__constant_iterator<_It>, _It, basic_const_iterator<_It>>; + + namespace __detail + { + template + struct __const_sentinel + { using type = _Sent; }; + + template + struct __const_sentinel<_Sent> + { using type = const_iterator<_Sent>; }; + } // namespace __detail + + template + using const_sentinel = typename __detail::__const_sentinel<_Sent>::type; + + template + class basic_const_iterator + : public __detail::__basic_const_iterator_iter_cat<_It> + { + _It _M_current = _It(); + using __reference = iter_const_reference_t<_It>; + using __rvalue_reference = __detail::__iter_const_rvalue_reference_t<_It>; + + static auto + _S_iter_concept() + { + if constexpr (contiguous_iterator<_It>) + return contiguous_iterator_tag{}; + else if constexpr (random_access_iterator<_It>) + return random_access_iterator_tag{}; + else if constexpr (bidirectional_iterator<_It>) + return bidirectional_iterator_tag{}; + else if constexpr (forward_iterator<_It>) + return forward_iterator_tag{}; + else + return input_iterator_tag{}; + } + + template friend class basic_const_iterator; + + public: + using iterator_concept = decltype(_S_iter_concept()); + using value_type = iter_value_t<_It>; + using difference_type = iter_difference_t<_It>; + + basic_const_iterator() requires default_initializable<_It> = default; + + constexpr + basic_const_iterator(_It __current) + noexcept(is_nothrow_move_constructible_v<_It>) + : _M_current(std::move(__current)) + { } + + template _It2> + constexpr + basic_const_iterator(basic_const_iterator<_It2> __current) + noexcept(is_nothrow_constructible_v<_It, _It2>) + : _M_current(std::move(__current._M_current)) + { } + + template<__detail::__different_from _Tp> + requires convertible_to<_Tp, _It> + constexpr + basic_const_iterator(_Tp&& __current) + noexcept(is_nothrow_constructible_v<_It, _Tp>) + : _M_current(std::forward<_Tp>(__current)) + { } + + constexpr const _It& + base() const & noexcept + { return _M_current; } + + constexpr _It + base() && + noexcept(is_nothrow_move_constructible_v<_It>) + { return std::move(_M_current); } + + constexpr __reference + operator*() const + noexcept(noexcept(static_cast<__reference>(*_M_current))) + { return static_cast<__reference>(*_M_current); } + + constexpr const auto* + operator->() const + noexcept(contiguous_iterator<_It> || noexcept(*_M_current)) + requires is_lvalue_reference_v> + && same_as>, value_type> + { + if constexpr (contiguous_iterator<_It>) + return std::to_address(_M_current); + else + return std::__addressof(*_M_current); + } + + constexpr basic_const_iterator& + operator++() + noexcept(noexcept(++_M_current)) + { + ++_M_current; + return *this; + } + + constexpr void + operator++(int) + noexcept(noexcept(++_M_current)) + { ++_M_current; } + + constexpr basic_const_iterator + operator++(int) + noexcept(noexcept(++*this) && is_nothrow_copy_constructible_v) + requires forward_iterator<_It> + { + auto __tmp = *this; + ++*this; + return __tmp; + } + + constexpr basic_const_iterator& + operator--() + noexcept(noexcept(--_M_current)) + requires bidirectional_iterator<_It> + { + --_M_current; + return *this; + } + + constexpr basic_const_iterator + operator--(int) + noexcept(noexcept(--*this) && is_nothrow_copy_constructible_v) + requires bidirectional_iterator<_It> + { + auto __tmp = *this; + --*this; + return __tmp; + } + + constexpr basic_const_iterator& + operator+=(difference_type __n) + noexcept(noexcept(_M_current += __n)) + requires random_access_iterator<_It> + { + _M_current += __n; + return *this; + } + + constexpr basic_const_iterator& + operator-=(difference_type __n) + noexcept(noexcept(_M_current -= __n)) + requires random_access_iterator<_It> + { + _M_current -= __n; + return *this; + } + + constexpr __reference + operator[](difference_type __n) const + noexcept(noexcept(static_cast<__reference>(_M_current[__n]))) + requires random_access_iterator<_It> + { return static_cast<__reference>(_M_current[__n]); } + + template _Sent> + constexpr bool + operator==(const _Sent& __s) const + noexcept(noexcept(_M_current == __s)) + { return _M_current == __s; } + + template<__detail::__not_a_const_iterator _CIt> + requires __detail::__constant_iterator<_CIt> && convertible_to<_It, _CIt> + constexpr + operator _CIt() const& + { return _M_current; } + + template<__detail::__not_a_const_iterator _CIt> + requires __detail::__constant_iterator<_CIt> && convertible_to<_It, _CIt> + constexpr + operator _CIt() && + { return std::move(_M_current); } + + constexpr bool + operator<(const basic_const_iterator& __y) const + noexcept(noexcept(_M_current < __y._M_current)) + requires random_access_iterator<_It> + { return _M_current < __y._M_current; } + + constexpr bool + operator>(const basic_const_iterator& __y) const + noexcept(noexcept(_M_current > __y._M_current)) + requires random_access_iterator<_It> + { return _M_current > __y._M_current; } + + constexpr bool + operator<=(const basic_const_iterator& __y) const + noexcept(noexcept(_M_current <= __y._M_current)) + requires random_access_iterator<_It> + { return _M_current <= __y._M_current; } + + constexpr bool + operator>=(const basic_const_iterator& __y) const + noexcept(noexcept(_M_current >= __y._M_current)) + requires random_access_iterator<_It> + { return _M_current >= __y._M_current; } + + constexpr auto + operator<=>(const basic_const_iterator& __y) const + noexcept(noexcept(_M_current <=> __y._M_current)) + requires random_access_iterator<_It> && three_way_comparable<_It> + { return _M_current <=> __y._M_current; } + + template<__detail::__different_from _It2> + constexpr bool + operator<(const _It2& __y) const + noexcept(noexcept(_M_current < __y)) + requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> + { return _M_current < __y; } + + template<__detail::__different_from _It2> + constexpr bool + operator>(const _It2& __y) const + noexcept(noexcept(_M_current > __y)) + requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> + { return _M_current > __y; } + + template<__detail::__different_from _It2> + constexpr bool + operator<=(const _It2& __y) const + noexcept(noexcept(_M_current <= __y)) + requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> + { return _M_current <= __y; } + + template<__detail::__different_from _It2> + constexpr bool + operator>=(const _It2& __y) const + noexcept(noexcept(_M_current >= __y)) + requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> + { return _M_current >= __y; } + + template<__detail::__different_from _It2> + constexpr auto + operator<=>(const _It2& __y) const + noexcept(noexcept(_M_current <=> __y)) + requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> + && three_way_comparable_with<_It, _It2> + { return _M_current <=> __y; } + + template<__detail::__not_a_const_iterator _It2, same_as<_It> _It3> + friend constexpr bool + operator<(const _It2& __x, const basic_const_iterator<_It3>& __y) + noexcept(noexcept(__x < __y._M_current)) + requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> + { return __x < __y._M_current; } + + template<__detail::__not_a_const_iterator _It2, same_as<_It> _It3> + friend constexpr bool + operator>(const _It2& __x, const basic_const_iterator<_It3>& __y) + noexcept(noexcept(__x > __y._M_current)) + requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> + { return __x > __y._M_current; } + + template<__detail::__not_a_const_iterator _It2, same_as<_It> _It3> + friend constexpr bool + operator<=(const _It2& __x, const basic_const_iterator<_It3>& __y) + noexcept(noexcept(__x <= __y._M_current)) + requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> + { return __x <= __y._M_current; } + + template<__detail::__not_a_const_iterator _It2, same_as<_It> _It3> + friend constexpr bool + operator>=(const _It2& __x, const basic_const_iterator<_It3>& __y) + noexcept(noexcept(__x >= __y._M_current)) + requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> + { return __x >= __y._M_current; } + + friend constexpr basic_const_iterator + operator+(const basic_const_iterator& __i, difference_type __n) + noexcept(noexcept(basic_const_iterator(__i._M_current + __n))) + requires random_access_iterator<_It> + { return basic_const_iterator(__i._M_current + __n); } + + friend constexpr basic_const_iterator + operator+(difference_type __n, const basic_const_iterator& __i) + noexcept(noexcept(basic_const_iterator(__i._M_current + __n))) + requires random_access_iterator<_It> + { return basic_const_iterator(__i._M_current + __n); } + + friend constexpr basic_const_iterator + operator-(const basic_const_iterator& __i, difference_type __n) + noexcept(noexcept(basic_const_iterator(__i._M_current - __n))) + requires random_access_iterator<_It> + { return basic_const_iterator(__i._M_current - __n); } + + template _Sent> + constexpr difference_type + operator-(const _Sent& __y) const + noexcept(noexcept(_M_current - __y)) + { return _M_current - __y; } + + template<__detail::__not_a_const_iterator _Sent, same_as<_It> _It2> + requires sized_sentinel_for<_Sent, _It> + friend constexpr difference_type + operator-(const _Sent& __x, const basic_const_iterator<_It2>& __y) + noexcept(noexcept(__x - __y._M_current)) + { return __x - __y._M_current; } + + friend constexpr __rvalue_reference + iter_move(const basic_const_iterator& __i) + noexcept(noexcept(static_cast<__rvalue_reference>(ranges::iter_move(__i._M_current)))) + { return static_cast<__rvalue_reference>(ranges::iter_move(__i._M_current)); } + }; + + template _Up> + requires input_iterator> + struct common_type, _Up> + { using type = basic_const_iterator>; }; + + template _Up> + requires input_iterator> + struct common_type<_Up, basic_const_iterator<_Tp>> + { using type = basic_const_iterator>; }; + + template _Up> + requires input_iterator> + struct common_type, basic_const_iterator<_Up>> + { using type = basic_const_iterator>; }; + + template + constexpr const_iterator<_It> + make_const_iterator(_It __it) + noexcept(is_nothrow_convertible_v<_It, const_iterator<_It>>) + { return __it; } + + template + constexpr const_sentinel<_Sent> + make_const_sentinel(_Sent __s) + noexcept(is_nothrow_convertible_v<_Sent, const_sentinel<_Sent>>) + { return __s; } +#endif // C++23 ranges_as_const +#endif // C++20 ranges + + /// @} group iterators + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +namespace __gnu_debug +{ + template + class _Safe_iterator; +} + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + /// @cond undocumented + + // Unwrap a __normal_iterator to get the underlying iterator + // (usually a pointer). See uses in std::copy, std::fill, etc. + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _Iterator + __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it) + _GLIBCXX_NOEXCEPT_IF(std::is_nothrow_copy_constructible<_Iterator>::value) + { return __it.base(); } + + // Fallback implementation used for iterators that can't be unwrapped. + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _Iterator + __niter_base(_Iterator __it) + _GLIBCXX_NOEXCEPT_IF(std::is_nothrow_copy_constructible<_Iterator>::value) + { return __it; } + + // Overload for _Safe_iterator needs to be declared before uses of + // std::__niter_base because we call it qualified so isn't found by ADL. +#if __cplusplus < 201103L + template + _Ite + __niter_base(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, + std::random_access_iterator_tag>&); + + template + _Ite + __niter_base(const ::__gnu_debug::_Safe_iterator< + ::__gnu_cxx::__normal_iterator<_Ite, _Cont>, _Seq, + std::random_access_iterator_tag>&); +#else + template + _GLIBCXX20_CONSTEXPR + decltype(std::__niter_base(std::declval<_Ite>())) + __niter_base(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, + std::random_access_iterator_tag>&) + noexcept(std::is_nothrow_copy_constructible<_Ite>::value); +#endif + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + inline auto + __niter_base(reverse_iterator<_Iterator> __it) + -> decltype(__make_reverse_iterator(__niter_base(__it.base()))) + { return __make_reverse_iterator(__niter_base(__it.base())); } + + template + _GLIBCXX20_CONSTEXPR + inline auto + __niter_base(move_iterator<_Iterator> __it) + -> decltype(make_move_iterator(__niter_base(__it.base()))) + { return make_move_iterator(__niter_base(__it.base())); } + + template + _GLIBCXX20_CONSTEXPR + inline auto + __miter_base(reverse_iterator<_Iterator> __it) + -> decltype(__make_reverse_iterator(__miter_base(__it.base()))) + { return __make_reverse_iterator(__miter_base(__it.base())); } + + template + _GLIBCXX20_CONSTEXPR + inline auto + __miter_base(move_iterator<_Iterator> __it) + -> decltype(__miter_base(__it.base())) + { return __miter_base(__it.base()); } +#endif + + // Reverse the __niter_base transformation to get a __normal_iterator + // back again (this assumes that __normal_iterator is only used to wrap + // random access iterators, like pointers). + // All overloads of std::__niter_base must be declared before this. + template + _GLIBCXX_NODISCARD + _GLIBCXX20_CONSTEXPR + inline _From + __niter_wrap(_From __from, _To __res) + { return __from + (std::__niter_base(__res) - std::__niter_base(__from)); } + + // No need to wrap, iterator already has the right type. + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + _GLIBCXX20_CONSTEXPR + inline _Iterator + __niter_wrap(const _Iterator&, _Iterator __res) + { return __res; } + + /// @endcond + +#if __cpp_deduction_guides >= 201606 + // These helper traits are used for deduction guides + // of associative containers. + template + using __iter_key_t = remove_const_t< +#ifdef __glibcxx_tuple_like // >= C++23 + tuple_element_t<0, typename iterator_traits<_InputIterator>::value_type>>; +#else + typename iterator_traits<_InputIterator>::value_type::first_type>; +#endif + + template + using __iter_val_t +#ifdef __glibcxx_tuple_like // >= C++23 + = tuple_element_t<1, typename iterator_traits<_InputIterator>::value_type>; +#else + = typename iterator_traits<_InputIterator>::value_type::second_type; +#endif + + template + struct pair; + + template + using __iter_to_alloc_t + = pair, __iter_val_t<_InputIterator>>; +#endif // __cpp_deduction_guides + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#ifdef _GLIBCXX_DEBUG +# include +#endif + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..dbe038a78519edcdb2182c5960e7ad472cdf3209 GIT binary patch literal 88030 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%0A_QuhyCSdj{~v)=N|p)F~>9#Y5fH$X^WV8P8WL@ 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. + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996-1998 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_iterator_base_funcs.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iterator} + * + * This file contains all of the general iterator-related utility + * functions, such as distance() and advance(). + */ + +#ifndef _STL_ITERATOR_BASE_FUNCS_H +#define _STL_ITERATOR_BASE_FUNCS_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER + // Forward declaration for the overloads of __distance. + template struct _List_iterator; + template struct _List_const_iterator; +_GLIBCXX_END_NAMESPACE_CONTAINER + + template + inline _GLIBCXX14_CONSTEXPR + typename iterator_traits<_InputIterator>::difference_type + __distance(_InputIterator __first, _InputIterator __last, + input_iterator_tag) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + + typename iterator_traits<_InputIterator>::difference_type __n = 0; + while (__first != __last) + { + ++__first; + ++__n; + } + return __n; + } + + template + __attribute__((__always_inline__)) + inline _GLIBCXX14_CONSTEXPR + typename iterator_traits<_RandomAccessIterator>::difference_type + __distance(_RandomAccessIterator __first, _RandomAccessIterator __last, + random_access_iterator_tag) + { + // concept requirements + __glibcxx_function_requires(_RandomAccessIteratorConcept< + _RandomAccessIterator>) + return __last - __first; + } + +#if _GLIBCXX_USE_CXX11_ABI + // Forward declaration because of the qualified call in distance. + template + ptrdiff_t + __distance(_GLIBCXX_STD_C::_List_iterator<_Tp>, + _GLIBCXX_STD_C::_List_iterator<_Tp>, + input_iterator_tag); + + template + ptrdiff_t + __distance(_GLIBCXX_STD_C::_List_const_iterator<_Tp>, + _GLIBCXX_STD_C::_List_const_iterator<_Tp>, + input_iterator_tag); +#endif + +#if __cplusplus >= 201103L + // Give better error if std::distance called with a non-Cpp17InputIterator. + template + void + __distance(_OutputIterator, _OutputIterator, output_iterator_tag) = delete; +#endif + + /** + * @brief A generalization of pointer arithmetic. + * @param __first An input iterator. + * @param __last An input iterator. + * @return The distance between them. + * + * Returns @c n such that __first + n == __last. This requires + * that @p __last must be reachable from @p __first. Note that @c + * n may be negative. + * + * For random access iterators, this uses their @c + and @c - operations + * and are constant time. For other %iterator classes they are linear time. + */ + template + _GLIBCXX_NODISCARD __attribute__((__always_inline__)) + inline _GLIBCXX17_CONSTEXPR + typename iterator_traits<_InputIterator>::difference_type + distance(_InputIterator __first, _InputIterator __last) + { + // concept requirements -- taken care of in __distance + return std::__distance(__first, __last, + std::__iterator_category(__first)); + } + + template + inline _GLIBCXX14_CONSTEXPR void + __advance(_InputIterator& __i, _Distance __n, input_iterator_tag) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_assert(__n >= 0); + while (__n--) + ++__i; + } + + template + inline _GLIBCXX14_CONSTEXPR void + __advance(_BidirectionalIterator& __i, _Distance __n, + bidirectional_iterator_tag) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) + if (__n > 0) + while (__n--) + ++__i; + else + while (__n++) + --__i; + } + + template + inline _GLIBCXX14_CONSTEXPR void + __advance(_RandomAccessIterator& __i, _Distance __n, + random_access_iterator_tag) + { + // concept requirements + __glibcxx_function_requires(_RandomAccessIteratorConcept< + _RandomAccessIterator>) + if (__builtin_constant_p(__n) && __n == 1) + ++__i; + else if (__builtin_constant_p(__n) && __n == -1) + --__i; + else + __i += __n; + } + +#if __cplusplus >= 201103L + // Give better error if std::advance called with a non-Cpp17InputIterator. + template + void + __advance(_OutputIterator&, _Distance, output_iterator_tag) = delete; +#endif + + /** + * @brief A generalization of pointer arithmetic. + * @param __i An input iterator. + * @param __n The @a delta by which to change @p __i. + * @return Nothing. + * + * This increments @p i by @p n. For bidirectional and random access + * iterators, @p __n may be negative, in which case @p __i is decremented. + * + * For random access iterators, this uses their @c + and @c - operations + * and are constant time. For other %iterator classes they are linear time. + */ + template + __attribute__((__always_inline__)) + inline _GLIBCXX17_CONSTEXPR void + advance(_InputIterator& __i, _Distance __n) + { + // concept requirements -- taken care of in __advance + typename iterator_traits<_InputIterator>::difference_type __d = __n; + std::__advance(__i, __d, std::__iterator_category(__i)); + } + +#if __cplusplus >= 201103L + + template + _GLIBCXX_NODISCARD [[__gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR _InputIterator + next(_InputIterator __x, typename + iterator_traits<_InputIterator>::difference_type __n = 1) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + std::advance(__x, __n); + return __x; + } + + template + _GLIBCXX_NODISCARD [[__gnu__::__always_inline__]] + inline _GLIBCXX17_CONSTEXPR _BidirectionalIterator + prev(_BidirectionalIterator __x, typename + iterator_traits<_BidirectionalIterator>::difference_type __n = 1) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) + std::advance(__x, -__n); + return __x; + } + +#endif // C++11 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _STL_ITERATOR_BASE_FUNCS_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_funcs.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_funcs.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..eef2a41f3244103a6c95873ab3abf72c27a7ed11 GIT binary patch literal 21822 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 F2msgViShsd literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_types.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_types.h new file mode 100644 index 0000000..a67d7bd --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_types.h @@ -0,0 +1,289 @@ +// Types used in iterator implementation -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996-1998 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_iterator_base_types.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iterator} + * + * This file contains all of the general iterator-related utility types, + * such as iterator_traits and struct iterator. + */ + +#ifndef _STL_ITERATOR_BASE_TYPES_H +#define _STL_ITERATOR_BASE_TYPES_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include + +#if __cplusplus >= 201103L +# include // For __void_t, is_convertible +#endif + +#if __cplusplus > 201703L && __cpp_concepts >= 201907L +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup iterators Iterators + * Abstractions for uniform iterating through various underlying types. + */ + ///@{ + + /** + * @defgroup iterator_tags Iterator Tags + * These are empty types, used to distinguish different iterators. The + * distinction is not made by what they contain, but simply by what they + * are. Different underlying algorithms can then be used based on the + * different operations supported by different iterator types. + */ + ///@{ + /// Marking input iterators. + struct input_iterator_tag { }; + + /// Marking output iterators. + struct output_iterator_tag { }; + + /// Forward iterators support a superset of input iterator operations. + struct forward_iterator_tag : public input_iterator_tag { }; + + /// Bidirectional iterators support a superset of forward iterator + /// operations. + struct bidirectional_iterator_tag : public forward_iterator_tag { }; + + /// Random-access iterators support a superset of bidirectional + /// iterator operations. + struct random_access_iterator_tag : public bidirectional_iterator_tag { }; + +#if __cplusplus > 201703L + /// Contiguous iterators point to objects stored contiguously in memory. + struct contiguous_iterator_tag : public random_access_iterator_tag { }; +#endif + ///@} + + /** + * @brief Common %iterator class. + * + * This class does nothing but define nested typedefs. %Iterator classes + * can inherit from this class to save some work. The typedefs are then + * used in specializations and overloading. + * + * In particular, there are no default implementations of requirements + * such as @c operator++ and the like. (How could there be?) + */ + template + struct _GLIBCXX17_DEPRECATED iterator + { + /// One of the @link iterator_tags tag types@endlink. + typedef _Category iterator_category; + /// The type "pointed to" by the iterator. + typedef _Tp value_type; + /// Distance between iterators is represented as this type. + typedef _Distance difference_type; + /// This type represents a pointer-to-value_type. + typedef _Pointer pointer; + /// This type represents a reference-to-value_type. + typedef _Reference reference; + }; + + /** + * @brief Traits class for iterators. + * + * This class does nothing but define nested typedefs. The general + * version simply @a forwards the nested typedefs from the Iterator + * argument. Specialized versions for pointers and pointers-to-const + * provide tighter, more correct semantics. + */ + template + struct iterator_traits; + +#if __cplusplus >= 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2408. SFINAE-friendly common_type/iterator_traits is missing in C++14 + template> + struct __iterator_traits { }; + +#if ! __cpp_lib_concepts + + template + struct __iterator_traits<_Iterator, + __void_t> + { + typedef typename _Iterator::iterator_category iterator_category; + typedef typename _Iterator::value_type value_type; + typedef typename _Iterator::difference_type difference_type; + typedef typename _Iterator::pointer pointer; + typedef typename _Iterator::reference reference; + }; +#endif // ! concepts + + template + struct iterator_traits + : public __iterator_traits<_Iterator> { }; + +#else // ! C++11 + template + struct iterator_traits + { + typedef typename _Iterator::iterator_category iterator_category; + typedef typename _Iterator::value_type value_type; + typedef typename _Iterator::difference_type difference_type; + typedef typename _Iterator::pointer pointer; + typedef typename _Iterator::reference reference; + }; +#endif // C++11 + +#if __cplusplus > 201703L + /// Partial specialization for object pointer types. + template +#if __cpp_concepts >= 201907L + requires is_object_v<_Tp> +#endif + struct iterator_traits<_Tp*> + { + using iterator_concept = contiguous_iterator_tag; + using iterator_category = random_access_iterator_tag; + using value_type = remove_cv_t<_Tp>; + using difference_type = ptrdiff_t; + using pointer = _Tp*; + using reference = _Tp&; + }; +#else + /// Partial specialization for pointer types. + template + struct iterator_traits<_Tp*> + { + typedef random_access_iterator_tag iterator_category; + typedef _Tp value_type; + typedef ptrdiff_t difference_type; + typedef _Tp* pointer; + typedef _Tp& reference; + }; + + /// Partial specialization for const pointer types. + template + struct iterator_traits + { + typedef random_access_iterator_tag iterator_category; + typedef _Tp value_type; + typedef ptrdiff_t difference_type; + typedef const _Tp* pointer; + typedef const _Tp& reference; + }; +#endif + + /** + * This function is not a part of the C++ standard but is syntactic + * sugar for internal library use only. + */ + template + __attribute__((__always_inline__)) + inline _GLIBCXX_CONSTEXPR + typename iterator_traits<_Iter>::iterator_category + __iterator_category(const _Iter&) + { return typename iterator_traits<_Iter>::iterator_category(); } + + ///@} + +#if __cplusplus >= 201103L + template + using __iter_category_t + = typename iterator_traits<_Iter>::iterator_category; + + template + using _RequireInputIter = + __enable_if_t, + input_iterator_tag>::value>; + +#if __cpp_concepts + template + concept __has_input_iter_cat + = is_convertible_v<__iter_category_t<_InIter>, input_iterator_tag>; +#endif + + template> + struct __is_random_access_iter + : is_base_of + { + typedef is_base_of _Base; + enum { __value = _Base::value }; + }; +#else + template, + typename _Cat = typename _Traits::iterator_category> + struct __is_random_access_iter + { enum { __value = __is_base_of(random_access_iterator_tag, _Cat) }; }; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#if __glibcxx_algorithm_default_value_type // C++ >= 26 +# define _GLIBCXX26_DEF_VAL_T(T) = T +# define _GLIBCXX26_ALGO_DEF_VAL_T(_Iterator) \ + = typename iterator_traits<_Iterator>::value_type +#else +# define _GLIBCXX26_DEF_VAL_T(T) +# define _GLIBCXX26_ALGO_DEF_VAL_T(_Iterator) +#endif + +#endif /* _STL_ITERATOR_BASE_TYPES_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_types.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_iterator_base_types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7952e96074ac8ac68ae0bde7bc59fb497c89379b GIT binary patch literal 19416 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. + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996,1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_pair.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{utility} + */ + +#ifndef _STL_PAIR_H +#define _STL_PAIR_H 1 + +#if __cplusplus >= 201103L +# include // for std::__decay_and_strip +# include // for std::move / std::forward, and std::swap +# include // for std::tuple_element, std::tuple_size +#endif +#if __cplusplus >= 202002L +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup utilities + * @{ + */ + +#if __cplusplus >= 201103L + /// Tag type for piecewise construction of std::pair objects. + struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; + + /// Tag for piecewise construction of std::pair objects. + _GLIBCXX17_INLINE constexpr piecewise_construct_t piecewise_construct = + piecewise_construct_t(); + + /// @cond undocumented + + // Forward declarations. + template + struct pair; + + template + class tuple; + + // Declarations of std::array and its std::get overloads, so that + // std::tuple_cat can use them if is included before . + // We also declare the other std::get overloads here so that they're + // visible to the P2165R4 tuple-like constructors of pair and tuple. + template + struct array; + + template + struct _Index_tuple; + + template + class complex; + + template + constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& + get(pair<_Tp1, _Tp2>& __in) noexcept; + + template + constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& + get(pair<_Tp1, _Tp2>&& __in) noexcept; + + template + constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& + get(const pair<_Tp1, _Tp2>& __in) noexcept; + + template + constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& + get(const pair<_Tp1, _Tp2>&& __in) noexcept; + + template + constexpr __tuple_element_t<__i, tuple<_Elements...>>& + get(tuple<_Elements...>& __t) noexcept; + + template + constexpr const __tuple_element_t<__i, tuple<_Elements...>>& + get(const tuple<_Elements...>& __t) noexcept; + + template + constexpr __tuple_element_t<__i, tuple<_Elements...>>&& + get(tuple<_Elements...>&& __t) noexcept; + + template + constexpr const __tuple_element_t<__i, tuple<_Elements...>>&& + get(const tuple<_Elements...>&& __t) noexcept; + + template + constexpr _Tp& + get(array<_Tp, _Nm>&) noexcept; + + template + constexpr _Tp&& + get(array<_Tp, _Nm>&&) noexcept; + + template + constexpr const _Tp& + get(const array<_Tp, _Nm>&) noexcept; + + template + constexpr const _Tp&& + get(const array<_Tp, _Nm>&&) noexcept; + +#if __glibcxx_tuple_like >= 202311 // >= C++26 + template + constexpr _Tp& + get(complex<_Tp>&) noexcept; + template + constexpr _Tp&& + get(complex<_Tp>&&) noexcept; + template + constexpr const _Tp& + get(const complex<_Tp>&) noexcept; + template + constexpr const _Tp&& + get(const complex<_Tp>&&) noexcept; +#endif + +#if ! __cpp_lib_concepts + // Concept utility functions, reused in conditionally-explicit + // constructors. + // See PR 70437, don't look at is_constructible or + // is_convertible if the types are the same to + // avoid querying those properties for incomplete types. + template + struct _PCC + { + template + static constexpr bool _ConstructiblePair() + { + return __and_, + is_constructible<_T2, const _U2&>>::value; + } + + template + static constexpr bool _ImplicitlyConvertiblePair() + { + return __and_, + is_convertible>::value; + } + + template + static constexpr bool _MoveConstructiblePair() + { + return __and_, + is_constructible<_T2, _U2&&>>::value; + } + + template + static constexpr bool _ImplicitlyMoveConvertiblePair() + { + return __and_, + is_convertible<_U2&&, _T2>>::value; + } + }; + + template + struct _PCC + { + template + static constexpr bool _ConstructiblePair() + { + return false; + } + + template + static constexpr bool _ImplicitlyConvertiblePair() + { + return false; + } + + template + static constexpr bool _MoveConstructiblePair() + { + return false; + } + + template + static constexpr bool _ImplicitlyMoveConvertiblePair() + { + return false; + } + }; +#endif // lib concepts +#endif // C++11 + +#if __glibcxx_tuple_like // >= C++23 + template + inline constexpr bool __is_tuple_v = false; + + template + inline constexpr bool __is_tuple_v> = true; + + // TODO: Reuse __is_tuple_like from ? + template + inline constexpr bool __is_tuple_like_v = false; + + template + inline constexpr bool __is_tuple_like_v> = true; + + template + inline constexpr bool __is_tuple_like_v> = true; + + template + inline constexpr bool __is_tuple_like_v> = true; + + // __is_tuple_like_v is defined in . + + template + concept __tuple_like = __is_tuple_like_v>; + + template + concept __pair_like = __tuple_like<_Tp> && tuple_size_v> == 2; + + template + concept __eligible_tuple_like + = __detail::__different_from<_Tp, _Tuple> && __tuple_like<_Tp> + && (tuple_size_v> == tuple_size_v<_Tuple>) + && !ranges::__detail::__is_subrange>; + + template + concept __eligible_pair_like + = __detail::__different_from<_Tp, _Pair> && __pair_like<_Tp> + && !ranges::__detail::__is_subrange>; +#endif // C++23 + + template class __pair_base + { +#if __cplusplus >= 201103L && ! __cpp_lib_concepts + template friend struct pair; + __pair_base() = default; + ~__pair_base() = default; + __pair_base(const __pair_base&) = default; + __pair_base& operator=(const __pair_base&) = delete; +#endif // C++11 + }; + + /// @endcond + + /** + * @brief Struct holding two objects of arbitrary type. + * + * @tparam _T1 Type of first object. + * @tparam _T2 Type of second object. + * + * + * + * @headerfile utility + */ + template + struct pair + : public __pair_base<_T1, _T2> + { + typedef _T1 first_type; ///< The type of the `first` member + typedef _T2 second_type; ///< The type of the `second` member + + _T1 first; ///< The first member + _T2 second; ///< The second member + +#if __cplusplus >= 201103L + constexpr pair(const pair&) = default; ///< Copy constructor + constexpr pair(pair&&) = default; ///< Move constructor + + template + _GLIBCXX20_CONSTEXPR + pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>); + + /// Swap the first members and then the second members. + _GLIBCXX20_CONSTEXPR void + swap(pair& __p) + noexcept(__and_<__is_nothrow_swappable<_T1>, + __is_nothrow_swappable<_T2>>::value) + { + using std::swap; + swap(first, __p.first); + swap(second, __p.second); + } + +#if __glibcxx_ranges_zip // >= C++23 + // As an extension, we constrain the const swap member function in order + // to continue accepting explicit instantiation of pairs whose elements + // are not all const swappable. Without this constraint, such an + // explicit instantiation would also instantiate the ill-formed body of + // this function and yield a hard error. This constraint shouldn't + // affect the behavior of valid programs. + constexpr void + swap(const pair& __p) const + noexcept(__and_v<__is_nothrow_swappable, + __is_nothrow_swappable>) + requires is_swappable_v && is_swappable_v + { + using std::swap; + swap(first, __p.first); + swap(second, __p.second); + } +#endif // C++23 + + private: + template + _GLIBCXX20_CONSTEXPR + pair(tuple<_Args1...>&, tuple<_Args2...>&, + _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>); + public: + +#if __cpp_lib_concepts + // C++20 implementation using concepts, explicit(bool), fully constexpr. + + /// Default constructor + constexpr + explicit(__not_<__and_<__is_implicitly_default_constructible<_T1>, + __is_implicitly_default_constructible<_T2>>>()) + pair() + noexcept(is_nothrow_default_constructible_v<_T1> + && is_nothrow_default_constructible_v<_T2>) + requires is_default_constructible_v<_T1> + && is_default_constructible_v<_T2> + : first(), second() + { } + + private: + + /// @cond undocumented + template + static constexpr bool + _S_constructible() + { + if constexpr (is_constructible_v<_T1, _U1>) + return is_constructible_v<_T2, _U2>; + return false; + } + + template + static constexpr bool + _S_nothrow_constructible() + { + if constexpr (is_nothrow_constructible_v<_T1, _U1>) + return is_nothrow_constructible_v<_T2, _U2>; + return false; + } + + template + static constexpr bool + _S_convertible() + { + if constexpr (is_convertible_v<_U1, _T1>) + return is_convertible_v<_U2, _T2>; + return false; + } + + // True if construction from _U1 and _U2 would create a dangling ref. + template + static constexpr bool + _S_dangles() + { +#if __has_builtin(__reference_constructs_from_temporary) + if constexpr (__reference_constructs_from_temporary(_T1, _U1&&)) + return true; + else + return __reference_constructs_from_temporary(_T2, _U2&&); +#else + return false; +#endif + } + +#if __glibcxx_tuple_like // >= C++23 + template + static constexpr bool + _S_constructible_from_pair_like() + { + return _S_constructible(std::declval<_UPair>())), + decltype(std::get<1>(std::declval<_UPair>()))>(); + } + + template + static constexpr bool + _S_convertible_from_pair_like() + { + return _S_convertible(std::declval<_UPair>())), + decltype(std::get<1>(std::declval<_UPair>()))>(); + } + + template + static constexpr bool + _S_dangles_from_pair_like() + { + return _S_dangles(std::declval<_UPair>())), + decltype(std::get<1>(std::declval<_UPair>()))>(); + } +#endif // C++23 + /// @endcond + + public: + + /// Constructor accepting lvalues of `first_type` and `second_type` + constexpr explicit(!_S_convertible()) + pair(const type_identity_t<_T1>& __x, const _T2& __y) + noexcept(_S_nothrow_constructible()) + requires (_S_constructible()) + : first(__x), second(__y) + { } + + /// Constructor accepting two values of arbitrary types +#if __cplusplus > 202002L + template +#else + template +#endif + requires (_S_constructible<_U1, _U2>()) && (!_S_dangles<_U1, _U2>()) + constexpr explicit(!_S_convertible<_U1, _U2>()) + pair(_U1&& __x, _U2&& __y) + noexcept(_S_nothrow_constructible<_U1, _U2>()) + : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) + { } + +#if __cplusplus > 202002L + template +#else + template +#endif + requires (_S_constructible<_U1, _U2>()) && (_S_dangles<_U1, _U2>()) + constexpr explicit(!_S_convertible<_U1, _U2>()) + pair(_U1&&, _U2&&) = delete; + + /// Converting constructor from a const `pair` lvalue + template + requires (_S_constructible()) + && (!_S_dangles<_U1, _U2>()) + constexpr explicit(!_S_convertible()) + pair(const pair<_U1, _U2>& __p) + noexcept(_S_nothrow_constructible()) + : first(__p.first), second(__p.second) + { } + + template + requires (_S_constructible()) + && (_S_dangles()) + constexpr explicit(!_S_convertible()) + pair(const pair<_U1, _U2>&) = delete; + + /// Converting constructor from a non-const `pair` rvalue + template + requires (_S_constructible<_U1, _U2>()) && (!_S_dangles<_U1, _U2>()) + constexpr explicit(!_S_convertible<_U1, _U2>()) + pair(pair<_U1, _U2>&& __p) + noexcept(_S_nothrow_constructible<_U1, _U2>()) + : first(std::forward<_U1>(__p.first)), + second(std::forward<_U2>(__p.second)) + { } + + template + requires (_S_constructible<_U1, _U2>()) && (_S_dangles<_U1, _U2>()) + constexpr explicit(!_S_convertible<_U1, _U2>()) + pair(pair<_U1, _U2>&&) = delete; + +#if __glibcxx_ranges_zip // >= C++23 + /// Converting constructor from a non-const `pair` lvalue + template + requires (_S_constructible<_U1&, _U2&>()) && (!_S_dangles<_U1&, _U2&>()) + constexpr explicit(!_S_convertible<_U1&, _U2&>()) + pair(pair<_U1, _U2>& __p) + noexcept(_S_nothrow_constructible<_U1&, _U2&>()) + : first(__p.first), second(__p.second) + { } + + template + requires (_S_constructible<_U1&, _U2&>()) && (_S_dangles<_U1&, _U2&>()) + constexpr explicit(!_S_convertible<_U1&, _U2&>()) + pair(pair<_U1, _U2>&) = delete; + + /// Converting constructor from a const `pair` rvalue + template + requires (_S_constructible()) + && (!_S_dangles()) + constexpr explicit(!_S_convertible()) + pair(const pair<_U1, _U2>&& __p) + noexcept(_S_nothrow_constructible()) + : first(std::forward(__p.first)), + second(std::forward(__p.second)) + { } + + template + requires (_S_constructible()) + && (_S_dangles()) + constexpr explicit(!_S_convertible()) + pair(const pair<_U1, _U2>&&) = delete; +#endif // C++23 + +#if __glibcxx_tuple_like // >= C++23 + template<__eligible_pair_like _UPair> + requires (_S_constructible_from_pair_like<_UPair>()) + && (!_S_dangles_from_pair_like<_UPair>()) + constexpr explicit(!_S_convertible_from_pair_like<_UPair>()) + pair(_UPair&& __p) + : first(std::get<0>(std::forward<_UPair>(__p))), + second(std::get<1>(std::forward<_UPair>(__p))) + { } + + template<__eligible_pair_like _UPair> + requires (_S_constructible_from_pair_like<_UPair>()) + && (_S_dangles_from_pair_like<_UPair>()) + constexpr explicit(!_S_convertible_from_pair_like<_UPair>()) + pair(_UPair&&) = delete; +#endif // C++23 + + private: + /// @cond undocumented + template + static constexpr bool + _S_assignable() + { + if constexpr (is_assignable_v<_T1&, _U1>) + return is_assignable_v<_T2&, _U2>; + return false; + } + + template + static constexpr bool + _S_const_assignable() + { + if constexpr (is_assignable_v) + return is_assignable_v; + return false; + } + + template + static constexpr bool + _S_nothrow_assignable() + { + if constexpr (is_nothrow_assignable_v<_T1&, _U1>) + return is_nothrow_assignable_v<_T2&, _U2>; + return false; + } + +#if __glibcxx_tuple_like // >= C++23 + template + static constexpr bool + _S_assignable_from_tuple_like() + { + return _S_assignable(std::declval<_UPair>())), + decltype(std::get<1>(std::declval<_UPair>()))>(); + } + + template + static constexpr bool + _S_const_assignable_from_tuple_like() + { + return _S_const_assignable(std::declval<_UPair>())), + decltype(std::get<1>(std::declval<_UPair>()))>(); + } +#endif // C++23 + /// @endcond + + public: + + pair& operator=(const pair&) = delete; + + /// Copy assignment operator + constexpr pair& + operator=(const pair& __p) + noexcept(_S_nothrow_assignable()) + requires (_S_assignable()) + { + first = __p.first; + second = __p.second; + return *this; + } + + /// Move assignment operator + constexpr pair& + operator=(pair&& __p) + noexcept(_S_nothrow_assignable<_T1, _T2>()) + requires (_S_assignable<_T1, _T2>()) + { + first = std::forward(__p.first); + second = std::forward(__p.second); + return *this; + } + + /// Converting assignment from a const `pair` lvalue + template + constexpr pair& + operator=(const pair<_U1, _U2>& __p) + noexcept(_S_nothrow_assignable()) + requires (_S_assignable()) + { + first = __p.first; + second = __p.second; + return *this; + } + + /// Converting assignment from a non-const `pair` rvalue + template + constexpr pair& + operator=(pair<_U1, _U2>&& __p) + noexcept(_S_nothrow_assignable<_U1, _U2>()) + requires (_S_assignable<_U1, _U2>()) + { + first = std::forward<_U1>(__p.first); + second = std::forward<_U2>(__p.second); + return *this; + } + +#if __glibcxx_ranges_zip // >= C++23 + /// Copy assignment operator (const) + constexpr const pair& + operator=(const pair& __p) const + requires (_S_const_assignable()) + { + first = __p.first; + second = __p.second; + return *this; + } + + /// Move assignment operator (const) + constexpr const pair& + operator=(pair&& __p) const + requires (_S_const_assignable()) + { + first = std::forward(__p.first); + second = std::forward(__p.second); + return *this; + } + + /// Converting assignment from a const `pair` lvalue + template + constexpr const pair& + operator=(const pair<_U1, _U2>& __p) const + requires (_S_const_assignable()) + { + first = __p.first; + second = __p.second; + return *this; + } + + /// Converting assignment from a non-const `pair` rvalue + template + constexpr const pair& + operator=(pair<_U1, _U2>&& __p) const + requires (_S_const_assignable<_U1, _U2>()) + { + first = std::forward<_U1>(__p.first); + second = std::forward<_U2>(__p.second); + return *this; + } +#endif // C++23 + +#if __glibcxx_tuple_like // >= C++23 + template<__eligible_pair_like _UPair> + requires (_S_assignable_from_tuple_like<_UPair>()) + constexpr pair& + operator=(_UPair&& __p) + { + first = std::get<0>(std::forward<_UPair>(__p)); + second = std::get<1>(std::forward<_UPair>(__p)); + return *this; + } + + template<__eligible_pair_like _UPair> + requires (_S_const_assignable_from_tuple_like<_UPair>()) + constexpr const pair& + operator=(_UPair&& __p) const + { + first = std::get<0>(std::forward<_UPair>(__p)); + second = std::get<1>(std::forward<_UPair>(__p)); + return *this; + } +#endif // C++23 + +#else // !__cpp_lib_concepts + // C++11/14/17 implementation using enable_if, partially constexpr. + + /// @cond undocumented + // Error if construction from _U1 and _U2 would create a dangling ref. +#if __has_builtin(__reference_constructs_from_temporary) \ + && defined _GLIBCXX_DEBUG +# define __glibcxx_no_dangling_refs(_U1, _U2) \ + static_assert(!__reference_constructs_from_temporary(_T1, _U1) \ + && !__reference_constructs_from_temporary(_T2, _U2), \ + "std::pair constructor creates a dangling reference") +#else +# define __glibcxx_no_dangling_refs(_U1, _U2) +#endif + /// @endcond + + /** The default constructor creates @c first and @c second using their + * respective default constructors. */ + template , + __is_implicitly_default_constructible<_U2>> + ::value, bool>::type = true> + constexpr pair() + : first(), second() { } + + template , + is_default_constructible<_U2>, + __not_< + __and_<__is_implicitly_default_constructible<_U1>, + __is_implicitly_default_constructible<_U2>>>> + ::value, bool>::type = false> + explicit constexpr pair() + : first(), second() { } + + // Shortcut for constraining the templates that don't take pairs. + /// @cond undocumented + using _PCCP = _PCC; + /// @endcond + + /// Construct from two const lvalues, allowing implicit conversions. + template() + && _PCCP::template + _ImplicitlyConvertiblePair<_U1, _U2>(), + bool>::type=true> + constexpr pair(const _T1& __a, const _T2& __b) + : first(__a), second(__b) { } + + /// Construct from two const lvalues, disallowing implicit conversions. + template() + && !_PCCP::template + _ImplicitlyConvertiblePair<_U1, _U2>(), + bool>::type=false> + explicit constexpr pair(const _T1& __a, const _T2& __b) + : first(__a), second(__b) { } + + // Shortcut for constraining the templates that take pairs. + /// @cond undocumented + template + using _PCCFP = _PCC::value + || !is_same<_T2, _U2>::value, + _T1, _T2>; + /// @endcond + + template::template + _ConstructiblePair<_U1, _U2>() + && _PCCFP<_U1, _U2>::template + _ImplicitlyConvertiblePair<_U1, _U2>(), + bool>::type=true> + constexpr pair(const pair<_U1, _U2>& __p) + : first(__p.first), second(__p.second) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + + template::template + _ConstructiblePair<_U1, _U2>() + && !_PCCFP<_U1, _U2>::template + _ImplicitlyConvertiblePair<_U1, _U2>(), + bool>::type=false> + explicit constexpr pair(const pair<_U1, _U2>& __p) + : first(__p.first), second(__p.second) + { __glibcxx_no_dangling_refs(const _U1&, const _U2&); } + +#if _GLIBCXX_USE_DEPRECATED +#if defined(__DEPRECATED) +# define _GLIBCXX_DEPRECATED_PAIR_CTOR \ + __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " \ + "initialize std::pair of move-only " \ + "type and pointer"))) +#else +# define _GLIBCXX_DEPRECATED_PAIR_CTOR +#endif + + private: + /// @cond undocumented + + // A type which can be constructed from literal zero, but not nullptr + struct __zero_as_null_pointer_constant + { + __zero_as_null_pointer_constant(int __zero_as_null_pointer_constant::*) + { } + template::value>> + __zero_as_null_pointer_constant(_Tp) = delete; + }; + /// @endcond + public: + + // Deprecated extensions to DR 811. + // These allow construction from an rvalue and a literal zero, + // in cases where the standard says the zero should be deduced as int + template>, + is_pointer<_T2>, + is_constructible<_T1, _U1>, + __not_>, + is_convertible<_U1, _T1>>::value, + bool> = true> + _GLIBCXX_DEPRECATED_PAIR_CTOR + constexpr + pair(_U1&& __x, __zero_as_null_pointer_constant, ...) + : first(std::forward<_U1>(__x)), second(nullptr) + { __glibcxx_no_dangling_refs(_U1&&, std::nullptr_t); } + + template>, + is_pointer<_T2>, + is_constructible<_T1, _U1>, + __not_>, + __not_>>::value, + bool> = false> + _GLIBCXX_DEPRECATED_PAIR_CTOR + explicit constexpr + pair(_U1&& __x, __zero_as_null_pointer_constant, ...) + : first(std::forward<_U1>(__x)), second(nullptr) + { __glibcxx_no_dangling_refs(_U1&&, std::nullptr_t); } + + template, + __not_>, + is_constructible<_T2, _U2>, + __not_>, + is_convertible<_U2, _T2>>::value, + bool> = true> + _GLIBCXX_DEPRECATED_PAIR_CTOR + constexpr + pair(__zero_as_null_pointer_constant, _U2&& __y, ...) + : first(nullptr), second(std::forward<_U2>(__y)) + { __glibcxx_no_dangling_refs(std::nullptr_t, _U2&&); } + + template, + __not_>, + is_constructible<_T2, _U2>, + __not_>, + __not_>>::value, + bool> = false> + _GLIBCXX_DEPRECATED_PAIR_CTOR + explicit constexpr + pair(__zero_as_null_pointer_constant, _U2&& __y, ...) + : first(nullptr), second(std::forward<_U2>(__y)) + { __glibcxx_no_dangling_refs(std::nullptr_t, _U2&&); } +#undef _GLIBCXX_DEPRECATED_PAIR_CTOR +#endif + + template() + && _PCCP::template + _ImplicitlyMoveConvertiblePair<_U1, _U2>(), + bool>::type=true> + constexpr pair(_U1&& __x, _U2&& __y) + : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template() + && !_PCCP::template + _ImplicitlyMoveConvertiblePair<_U1, _U2>(), + bool>::type=false> + explicit constexpr pair(_U1&& __x, _U2&& __y) + : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + + template::template + _MoveConstructiblePair<_U1, _U2>() + && _PCCFP<_U1, _U2>::template + _ImplicitlyMoveConvertiblePair<_U1, _U2>(), + bool>::type=true> + constexpr pair(pair<_U1, _U2>&& __p) + : first(std::forward<_U1>(__p.first)), + second(std::forward<_U2>(__p.second)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + + template::template + _MoveConstructiblePair<_U1, _U2>() + && !_PCCFP<_U1, _U2>::template + _ImplicitlyMoveConvertiblePair<_U1, _U2>(), + bool>::type=false> + explicit constexpr pair(pair<_U1, _U2>&& __p) + : first(std::forward<_U1>(__p.first)), + second(std::forward<_U2>(__p.second)) + { __glibcxx_no_dangling_refs(_U1&&, _U2&&); } + +#undef __glibcxx_no_dangling_refs + + pair& + operator=(__conditional_t<__and_, + is_copy_assignable<_T2>>::value, + const pair&, const __nonesuch&> __p) + { + first = __p.first; + second = __p.second; + return *this; + } + + pair& + operator=(__conditional_t<__and_, + is_move_assignable<_T2>>::value, + pair&&, __nonesuch&&> __p) + noexcept(__and_, + is_nothrow_move_assignable<_T2>>::value) + { + first = std::forward(__p.first); + second = std::forward(__p.second); + return *this; + } + + template + typename enable_if<__and_, + is_assignable<_T2&, const _U2&>>::value, + pair&>::type + operator=(const pair<_U1, _U2>& __p) + { + first = __p.first; + second = __p.second; + return *this; + } + + template + typename enable_if<__and_, + is_assignable<_T2&, _U2&&>>::value, + pair&>::type + operator=(pair<_U1, _U2>&& __p) + { + first = std::forward<_U1>(__p.first); + second = std::forward<_U2>(__p.second); + return *this; + } +#endif // lib concepts +#else + // C++03 implementation + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 265. std::pair::pair() effects overly restrictive + /** The default constructor creates @c first and @c second using their + * respective default constructors. */ + pair() : first(), second() { } + + /// Two objects may be passed to a `pair` constructor to be copied. + pair(const _T1& __a, const _T2& __b) + : first(__a), second(__b) { } + + /// Templated constructor to convert from other pairs. + template + pair(const pair<_U1, _U2>& __p) + : first(__p.first), second(__p.second) + { +#if __has_builtin(__reference_constructs_from_temporary) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-local-typedefs" + typedef int _DanglingCheck1[ + __reference_constructs_from_temporary(_T1, const _U1&) ? -1 : 1 + ]; + typedef int _DanglingCheck2[ + __reference_constructs_from_temporary(_T2, const _U2&) ? -1 : 1 + ]; +#pragma GCC diagnostic pop +#endif + } +#endif // C++11 + }; + + /// @relates pair @{ + +#if __cpp_deduction_guides >= 201606 + template pair(_T1, _T2) -> pair<_T1, _T2>; +#endif + +#if __cpp_lib_three_way_comparison + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3865. Sorting a range of pairs + + /// Two pairs are equal iff their members are equal. + template + [[nodiscard]] + constexpr bool + operator==(const pair<_T1, _T2>& __x, const pair<_U1, _U2>& __y) + requires requires { + { __x.first == __y.first } -> __detail::__boolean_testable; + { __x.second == __y.second } -> __detail::__boolean_testable; + } + { return __x.first == __y.first && __x.second == __y.second; } + + /** Defines a lexicographical order for pairs. + * + * For two pairs of comparable types, `P` is ordered before `Q` if + * `P.first` is less than `Q.first`, or if `P.first` and `Q.first` + * are equivalent (neither is less than the other) and `P.second` is + * less than `Q.second`. + */ + template + [[nodiscard]] + constexpr common_comparison_category_t<__detail::__synth3way_t<_T1, _U1>, + __detail::__synth3way_t<_T2, _U2>> + operator<=>(const pair<_T1, _T2>& __x, const pair<_U1, _U2>& __y) + { + if (auto __c = __detail::__synth3way(__x.first, __y.first); __c != 0) + return __c; + return __detail::__synth3way(__x.second, __y.second); + } +#else + /// Two pairs of the same type are equal iff their members are equal. + template + _GLIBCXX_NODISCARD + inline _GLIBCXX_CONSTEXPR bool + operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) + { return __x.first == __y.first && __x.second == __y.second; } + + /** Defines a lexicographical order for pairs. + * + * For two pairs of the same type, `P` is ordered before `Q` if + * `P.first` is less than `Q.first`, or if `P.first` and `Q.first` + * are equivalent (neither is less than the other) and `P.second` is less + * than `Q.second`. + */ + template + _GLIBCXX_NODISCARD + inline _GLIBCXX_CONSTEXPR bool + operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) + { return __x.first < __y.first + || (!(__y.first < __x.first) && __x.second < __y.second); } + + /// Uses @c operator== to find the result. + template + _GLIBCXX_NODISCARD + inline _GLIBCXX_CONSTEXPR bool + operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) + { return !(__x == __y); } + + /// Uses @c operator< to find the result. + template + _GLIBCXX_NODISCARD + inline _GLIBCXX_CONSTEXPR bool + operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) + { return __y < __x; } + + /// Uses @c operator< to find the result. + template + _GLIBCXX_NODISCARD + inline _GLIBCXX_CONSTEXPR bool + operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) + { return !(__y < __x); } + + /// Uses @c operator< to find the result. + template + _GLIBCXX_NODISCARD + inline _GLIBCXX_CONSTEXPR bool + operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) + { return !(__x < __y); } +#endif // !(three_way_comparison && concepts) + +#if __cplusplus >= 201103L + /** Swap overload for pairs. Calls std::pair::swap(). + * + * @note This std::swap overload is not declared in C++03 mode, + * which has performance implications, e.g. see https://gcc.gnu.org/PR38466 + */ + template + _GLIBCXX20_CONSTEXPR inline +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + // Constrained free swap overload, see p0185r1 + typename enable_if<__and_<__is_swappable<_T1>, + __is_swappable<_T2>>::value>::type +#else + void +#endif + swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y) + noexcept(noexcept(__x.swap(__y))) + { __x.swap(__y); } + +#if __glibcxx_ranges_zip // >= C++23 + template + requires is_swappable_v && is_swappable_v + constexpr void + swap(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) + noexcept(noexcept(__x.swap(__y))) + { __x.swap(__y); } +#endif // C++23 + +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + template + typename enable_if, + __is_swappable<_T2>>::value>::type + swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete; +#endif +#endif // __cplusplus >= 201103L + + /// @} relates pair + + /** + * @brief A convenience wrapper for creating a pair from two objects. + * @param __x The first object. + * @param __y The second object. + * @return A newly-constructed pair<> object of the appropriate type. + * + * The C++98 standard says the objects are passed by reference-to-const, + * but C++03 says they are passed by value (this was LWG issue #181). + * + * Since C++11 they have been passed by forwarding reference and then + * forwarded to the new members of the pair. To create a pair with a + * member of reference type, pass a `reference_wrapper` to this function. + */ + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 181. make_pair() unintended behavior +#if __cplusplus >= 201103L + // NB: DR 706. + template + constexpr pair::__type, + typename __decay_and_strip<_T2>::__type> + make_pair(_T1&& __x, _T2&& __y) + { + typedef typename __decay_and_strip<_T1>::__type __ds_type1; + typedef typename __decay_and_strip<_T2>::__type __ds_type2; + typedef pair<__ds_type1, __ds_type2> __pair_type; + return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y)); + } +#else + template + inline pair<_T1, _T2> + make_pair(_T1 __x, _T2 __y) + { return pair<_T1, _T2>(__x, __y); } +#endif + + /// @} + +#if __cplusplus >= 201103L + // Various functions which give std::pair a tuple-like interface. + + /// @cond undocumented + template + struct __is_tuple_like_impl> : true_type + { }; + /// @endcond + + /// Partial specialization for std::pair + template + struct tuple_size> + : public integral_constant { }; + + /// Partial specialization for std::pair + template + struct tuple_element<0, pair<_Tp1, _Tp2>> + { typedef _Tp1 type; }; + + /// Partial specialization for std::pair + template + struct tuple_element<1, pair<_Tp1, _Tp2>> + { typedef _Tp2 type; }; + +#if __cplusplus >= 201703L + template + inline constexpr size_t tuple_size_v> = 2; + + template + inline constexpr size_t tuple_size_v> = 2; +#endif + +#if __cplusplus >= 201103L +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++14-extensions" // variable templates +#pragma GCC diagnostic ignored "-Wc++17-extensions" // inline variables + template + inline constexpr bool __is_pair = false; + + template + inline constexpr bool __is_pair> = true; +#pragma GCC diagnostic pop +#endif + + /// @cond undocumented + template + struct __pair_get; + + template<> + struct __pair_get<0> + { + template + static constexpr _Tp1& + __get(pair<_Tp1, _Tp2>& __pair) noexcept + { return __pair.first; } + + template + static constexpr _Tp1&& + __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward<_Tp1>(__pair.first); } + + template + static constexpr const _Tp1& + __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept + { return __pair.first; } + + template + static constexpr const _Tp1&& + __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward(__pair.first); } + }; + + template<> + struct __pair_get<1> + { + template + static constexpr _Tp2& + __get(pair<_Tp1, _Tp2>& __pair) noexcept + { return __pair.second; } + + template + static constexpr _Tp2&& + __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward<_Tp2>(__pair.second); } + + template + static constexpr const _Tp2& + __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept + { return __pair.second; } + + template + static constexpr const _Tp2&& + __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward(__pair.second); } + }; + /// @endcond + + /** @{ + * std::get overloads for accessing members of std::pair + */ + + template + constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& + get(pair<_Tp1, _Tp2>& __in) noexcept + { return __pair_get<_Int>::__get(__in); } + + template + constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& + get(pair<_Tp1, _Tp2>&& __in) noexcept + { return __pair_get<_Int>::__move_get(std::move(__in)); } + + template + constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& + get(const pair<_Tp1, _Tp2>& __in) noexcept + { return __pair_get<_Int>::__const_get(__in); } + + template + constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& + get(const pair<_Tp1, _Tp2>&& __in) noexcept + { return __pair_get<_Int>::__const_move_get(std::move(__in)); } + + +#ifdef __glibcxx_tuples_by_type // C++ >= 14 + template + constexpr _Tp& + get(pair<_Tp, _Up>& __p) noexcept + { return __p.first; } + + template + constexpr const _Tp& + get(const pair<_Tp, _Up>& __p) noexcept + { return __p.first; } + + template + constexpr _Tp&& + get(pair<_Tp, _Up>&& __p) noexcept + { return std::forward<_Tp>(__p.first); } + + template + constexpr const _Tp&& + get(const pair<_Tp, _Up>&& __p) noexcept + { return std::forward(__p.first); } + + template + constexpr _Tp& + get(pair<_Up, _Tp>& __p) noexcept + { return __p.second; } + + template + constexpr const _Tp& + get(const pair<_Up, _Tp>& __p) noexcept + { return __p.second; } + + template + constexpr _Tp&& + get(pair<_Up, _Tp>&& __p) noexcept + { return std::forward<_Tp>(__p.second); } + + template + constexpr const _Tp&& + get(const pair<_Up, _Tp>&& __p) noexcept + { return std::forward(__p.second); } +#endif // __glibcxx_tuples_by_type + + +#if __glibcxx_ranges_zip // >= C++23 + template class _TQual, template class _UQual> + requires requires { typename pair, _UQual<_U1>>, + common_reference_t<_TQual<_T2>, _UQual<_U2>>>; } + struct basic_common_reference, pair<_U1, _U2>, _TQual, _UQual> + { + using type = pair, _UQual<_U1>>, + common_reference_t<_TQual<_T2>, _UQual<_U2>>>; + }; + + template + requires requires { typename pair, common_type_t<_T2, _U2>>; } + struct common_type, pair<_U1, _U2>> + { using type = pair, common_type_t<_T2, _U2>>; }; +#endif // C++23 + + /// @} +#endif // C++11 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif /* _STL_PAIR_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_pair.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_pair.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..d1946b17dc3225434911af647776201c3b33d1ce GIT binary patch literal 48200 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. + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996,1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_uninitialized.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _STL_UNINITIALIZED_H +#define _STL_UNINITIALIZED_H 1 + +#if __cplusplus >= 201103L +# include +# include // to_address +# include // pair +# include // fill, fill_n +#endif + +#include // __is_pointer +#include // distance, advance +#include // __niter_base +#include // __alloc_traits + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** @addtogroup memory + * @{ + */ + + /// @cond undocumented + + template + struct _UninitDestroyGuard + { + _GLIBCXX20_CONSTEXPR + explicit + _UninitDestroyGuard(_ForwardIterator& __first, _Alloc& __a) + : _M_first(__first), _M_cur(__builtin_addressof(__first)), _M_alloc(__a) + { } + + _GLIBCXX20_CONSTEXPR + ~_UninitDestroyGuard() + { + if (__builtin_expect(_M_cur != 0, 0)) + std::_Destroy(_M_first, *_M_cur, _M_alloc); + } + + _GLIBCXX20_CONSTEXPR + void release() { _M_cur = 0; } + + private: + _ForwardIterator const _M_first; + _ForwardIterator* _M_cur; + _Alloc& _M_alloc; + + _UninitDestroyGuard(const _UninitDestroyGuard&); + }; + + template + struct _UninitDestroyGuard<_ForwardIterator, void> + { + _GLIBCXX20_CONSTEXPR + explicit + _UninitDestroyGuard(_ForwardIterator& __first) + : _M_first(__first), _M_cur(__builtin_addressof(__first)) + { } + + _GLIBCXX20_CONSTEXPR + ~_UninitDestroyGuard() + { + if (__builtin_expect(_M_cur != 0, 0)) + std::_Destroy(_M_first, *_M_cur); + } + + _GLIBCXX20_CONSTEXPR + void release() { _M_cur = 0; } + + _ForwardIterator const _M_first; + _ForwardIterator* _M_cur; + + private: + _UninitDestroyGuard(const _UninitDestroyGuard&); + }; + + // This is the default implementation of std::uninitialized_copy. + // This can be used with C++20 iterators and non-common ranges. + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __do_uninit_copy(_InputIterator __first, _Sentinel __last, + _ForwardIterator __result) + { + _UninitDestroyGuard<_ForwardIterator> __guard(__result); + for (; __first != __last; ++__first, (void)++__result) + std::_Construct(std::__addressof(*__result), *__first); + __guard.release(); + return __result; + } + +#if __cplusplus < 201103L + + // True if we can unwrap _Iter to get a pointer by using std::__niter_base. + template + struct __unwrappable_niter + { enum { __value = false }; }; + + template + struct __unwrappable_niter<_Iter, _Tp*> + { enum { __value = true }; }; + + // Use template specialization for C++98 when 'if constexpr' can't be used. + template + struct __uninitialized_copy + { + template + static _ForwardIterator + __uninit_copy(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result) + { return std::__do_uninit_copy(__first, __last, __result); } + }; + + template<> + struct __uninitialized_copy + { + // Overload for generic iterators. + template + static _ForwardIterator + __uninit_copy(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result) + { + if (__unwrappable_niter<_InputIterator>::__value + && __unwrappable_niter<_ForwardIterator>::__value) + { + __uninit_copy(std::__niter_base(__first), + std::__niter_base(__last), + std::__niter_base(__result)); + std::advance(__result, std::distance(__first, __last)); + return __result; + } + else + return std::__do_uninit_copy(__first, __last, __result); + } + + // Overload for pointers. + template + static _Up* + __uninit_copy(_Tp* __first, _Tp* __last, _Up* __result) + { + // Ensure that we don't successfully memcpy in cases that should be + // ill-formed because is_constructible<_Up, _Tp&> is false. + typedef __typeof__(static_cast<_Up>(*__first)) __check + __attribute__((__unused__)); + + const ptrdiff_t __n = __last - __first; + if (__builtin_expect(__n > 0, true)) + { + __builtin_memcpy(__result, __first, __n * sizeof(_Tp)); + __result += __n; + } + return __result; + } + }; +#endif + /// @endcond + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + /** + * @brief Copies the range [first,last) into result. + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result A forward iterator. + * @return __result + (__last - __first) + * + * Like std::copy, but does not require an initialized output range. + */ + template + _GLIBCXX26_CONSTEXPR + inline _ForwardIterator + uninitialized_copy(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result) + { + // We can use memcpy to copy the ranges under these conditions: + // + // _ForwardIterator and _InputIterator are both contiguous iterators, + // so that we can turn them into pointers to pass to memcpy. + // Before C++20 we can't detect all contiguous iterators, so we only + // handle built-in pointers and __normal_iterator types. + // + // The value types of both iterators are trivially-copyable types, + // so that memcpy is not undefined and can begin the lifetime of + // new objects in the output range. + // + // Finally, memcpy from the source type, S, to the destination type, D, + // must give the same value as initialization of D from S would give. + // We require is_trivially_constructible to be true, but that is + // not sufficient. Some cases of trivial initialization are not just a + // bitwise copy, even when sizeof(D) == sizeof(S), + // e.g. bit_cast(1.0f) != 1u because the corresponding bits + // of the value representations do not have the same meaning. + // We cannot tell when this condition is true in general, + // so we rely on the __memcpyable trait. + +#if __cplusplus >= 201103L + using _Dest = decltype(std::__niter_base(__result)); + using _Src = decltype(std::__niter_base(__first)); + using _ValT = typename iterator_traits<_ForwardIterator>::value_type; + +#if __glibcxx_raw_memory_algorithms >= 202411L // >= C++26 + if consteval { + return std::__do_uninit_copy(__first, __last, __result); + } +#endif + if constexpr (!__is_trivially_constructible(_ValT, decltype(*__first))) + return std::__do_uninit_copy(__first, __last, __result); + else if constexpr (__memcpyable<_Dest, _Src>::__value) + { + ptrdiff_t __n = __last - __first; + if (__n > 0) [[__likely__]] + { + using _ValT = typename remove_pointer<_Src>::type; + __builtin_memcpy(std::__niter_base(__result), + std::__niter_base(__first), + __n * sizeof(_ValT)); + __result += __n; + } + return __result; + } +#if __cpp_lib_concepts + else if constexpr (contiguous_iterator<_ForwardIterator> + && contiguous_iterator<_InputIterator>) + { + using _DestPtr = decltype(std::to_address(__result)); + using _SrcPtr = decltype(std::to_address(__first)); + if constexpr (__memcpyable<_DestPtr, _SrcPtr>::__value) + { + if (auto __n = __last - __first; __n > 0) [[likely]] + { + void* __dest = std::to_address(__result); + const void* __src = std::to_address(__first); + size_t __nbytes = __n * sizeof(remove_pointer_t<_DestPtr>); + __builtin_memcpy(__dest, __src, __nbytes); + __result += __n; + } + return __result; + } + else + return std::__do_uninit_copy(__first, __last, __result); + } +#endif + else + return std::__do_uninit_copy(__first, __last, __result); +#else // C++98 + typedef typename iterator_traits<_InputIterator>::value_type + _ValueType1; + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType2; + + const bool __can_memcpy + = __memcpyable<_ValueType1*, _ValueType2*>::__value + && __is_trivially_constructible(_ValueType2, __decltype(*__first)); + + return __uninitialized_copy<__can_memcpy>:: + __uninit_copy(__first, __last, __result); +#endif + } +#pragma GCC diagnostic pop + + /// @cond undocumented + + // This is the default implementation of std::uninitialized_fill. + template + _GLIBCXX20_CONSTEXPR void + __do_uninit_fill(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x) + { + _UninitDestroyGuard<_ForwardIterator> __guard(__first); + for (; __first != __last; ++__first) + std::_Construct(std::__addressof(*__first), __x); + __guard.release(); + } + +#if __cplusplus < 201103L + // Use template specialization for C++98 when 'if constexpr' can't be used. + template + struct __uninitialized_fill + { + template + static void + __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x) + { std::__do_uninit_fill(__first, __last, __x); } + }; + + template<> + struct __uninitialized_fill + { + // Overload for generic iterators. + template + static void + __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x) + { + if (__unwrappable_niter<_ForwardIterator>::__value) + __uninit_fill(std::__niter_base(__first), + std::__niter_base(__last), + __x); + else + std::__do_uninit_fill(__first, __last, __x); + } + + // Overload for pointers. + template + static void + __uninit_fill(_Up* __first, _Up* __last, const _Tp& __x) + { + // Ensure that we don't successfully memset in cases that should be + // ill-formed because is_constructible<_Up, const _Tp&> is false. + typedef __typeof__(static_cast<_Up>(__x)) __check + __attribute__((__unused__)); + + if (__first != __last) + __builtin_memset(__first, (unsigned char)__x, __last - __first); + } + }; +#endif + /// @endcond + + /** + * @brief Copies the value x into the range [first,last). + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __x The source value. + * @return Nothing. + * + * Like std::fill, but does not require an initialized output range. + */ + template + _GLIBCXX26_CONSTEXPR + inline void + uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x) + { + // We would like to use memset to optimize this loop when possible. + // As for std::uninitialized_copy, the optimization requires + // contiguous iterators and trivially copyable value types, + // with the additional requirement that sizeof(_Tp) == 1 because + // memset only writes single bytes. + + // FIXME: We could additionally enable this for 1-byte enums. + // Maybe any 1-byte Val if is_trivially_constructible? + + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + +#if __cplusplus >= 201103L +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" +#if __glibcxx_raw_memory_algorithms >= 202411L // >= C++26 + if consteval { + return std::__do_uninit_fill(__first, __last, __x); + } +#endif + if constexpr (__is_byte<_ValueType>::__value) + if constexpr (is_same<_ValueType, _Tp>::value + || is_integral<_Tp>::value) + { + using _BasePtr = decltype(std::__niter_base(__first)); + if constexpr (is_pointer<_BasePtr>::value) + { + void* __dest = std::__niter_base(__first); + ptrdiff_t __n = __last - __first; + if (__n > 0) [[__likely__]] + __builtin_memset(__dest, (unsigned char)__x, __n); + return; + } +#if __cpp_lib_concepts + else if constexpr (contiguous_iterator<_ForwardIterator>) + { + auto __dest = std::to_address(__first); + auto __n = __last - __first; + if (__n > 0) [[__likely__]] + __builtin_memset(__dest, (unsigned char)__x, __n); + return; + } +#endif + } + std::__do_uninit_fill(__first, __last, __x); +#pragma GCC diagnostic pop +#else // C++98 + const bool __can_memset = __is_byte<_ValueType>::__value + && __is_integer<_Tp>::__value; + + __uninitialized_fill<__can_memset>::__uninit_fill(__first, __last, __x); +#endif + } + + /// @cond undocumented + + // This is the default implementation of std::uninitialized_fill_n. + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __do_uninit_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) + { + _UninitDestroyGuard<_ForwardIterator> __guard(__first); +#if __cplusplus >= 201103L +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + if constexpr (is_integral<_Size>::value) + // Loop will never terminate if __n is negative. + __glibcxx_assert(__n >= 0); + else if constexpr (is_floating_point<_Size>::value) + // Loop will never terminate if __n is not an integer. + __glibcxx_assert(__n >= 0 && static_cast(__n) == __n); +#pragma GCC diagnostic pop +#endif + for (; __n--; ++__first) + std::_Construct(std::__addressof(*__first), __x); + __guard.release(); + return __first; + } + +#if __cplusplus < 201103L + // Use template specialization for C++98 when 'if constexpr' can't be used. + template + struct __uninitialized_fill_n + { + template + static _ForwardIterator + __uninit_fill_n(_ForwardIterator __first, _Size __n, + const _Tp& __x) + { return std::__do_uninit_fill_n(__first, __n, __x); } + }; + + template<> + struct __uninitialized_fill_n + { + // Overload for generic iterators. + template + static _ForwardIterator + __uninit_fill_n(_ForwardIterator __first, _Size __n, + const _Tp& __x) + { + if (__unwrappable_niter<_ForwardIterator>::__value) + { + _ForwardIterator __last = __first; + std::advance(__last, __n); + __uninitialized_fill::__uninit_fill(__first, __last, __x); + return __last; + } + else + return std::__do_uninit_fill_n(__first, __n, __x); + } + }; +#endif + /// @endcond + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 1339. uninitialized_fill_n should return the end of its range + /** + * @brief Copies the value x into the range [first,first+n). + * @param __first A forward iterator. + * @param __n The number of copies to make. + * @param __x The source value. + * @return __first + __n. + * + * Like std::fill_n, but does not require an initialized output range. + */ + template + _GLIBCXX26_CONSTEXPR + inline _ForwardIterator + uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) + { + // See uninitialized_fill conditions. We also require _Size to be + // an integer. The standard only requires _Size to be decrementable + // and contextually convertible to bool, so don't assume first+n works. + + // FIXME: We could additionally enable this for 1-byte enums. + + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + +#if __cplusplus >= 201103L +#if __glibcxx_raw_memory_algorithms >= 202411L // >= C++26 + if consteval { + return std::__do_uninit_fill_n(__first, __n, __x); + } +#endif + if constexpr (__is_byte<_ValueType>::__value) + if constexpr (is_integral<_Tp>::value) + if constexpr (is_integral<_Size>::value) + { + using _BasePtr = decltype(std::__niter_base(__first)); + if constexpr (is_pointer<_BasePtr>::value) + { + void* __dest = std::__niter_base(__first); + if (__n > 0) [[__likely__]] + { + __builtin_memset(__dest, (unsigned char)__x, __n); + __first += __n; + } + return __first; + } +#if __cpp_lib_concepts + else if constexpr (contiguous_iterator<_ForwardIterator>) + { + auto __dest = std::to_address(__first); + if (__n > 0) [[__likely__]] + { + __builtin_memset(__dest, (unsigned char)__x, __n); + __first += __n; + } + return __first; + } +#endif + } + return std::__do_uninit_fill_n(__first, __n, __x); +#else // C++98 + const bool __can_memset = __is_byte<_ValueType>::__value + && __is_integer<_Tp>::__value + && __is_integer<_Size>::__value; + + return __uninitialized_fill_n<__can_memset>:: + __uninit_fill_n(__first, __n, __x); +#endif + } +#pragma GCC diagnostic pop + + /// @cond undocumented + + // Extensions: versions of uninitialized_copy, uninitialized_fill, + // and uninitialized_fill_n that take an allocator parameter. + // We dispatch back to the standard versions when we're given the + // default allocator. For nondefault allocators we do not use + // any of the POD optimizations. + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __uninitialized_copy_a(_InputIterator __first, _Sentinel __last, + _ForwardIterator __result, _Allocator& __alloc) + { + _UninitDestroyGuard<_ForwardIterator, _Allocator> + __guard(__result, __alloc); + + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __first != __last; ++__first, (void)++__result) + __traits::construct(__alloc, std::__addressof(*__result), *__first); + __guard.release(); + return __result; + } + +#if _GLIBCXX_HOSTED + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + __uninitialized_copy_a(_InputIterator __first, _Sentinel __last, + _ForwardIterator __result, allocator<_Tp>&) + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return std::__do_uninit_copy(std::move(__first), __last, __result); +#endif + +#ifdef __glibcxx_ranges + if constexpr (!is_same_v<_InputIterator, _Sentinel>) + { + // Convert to a common range if possible, to benefit from memcpy + // optimizations that std::uninitialized_copy might use. + if constexpr (sized_sentinel_for<_Sentinel, _InputIterator> + && random_access_iterator<_InputIterator>) + return std::uninitialized_copy(__first, + __first + (__last - __first), + __result); + else // Just use default implementation. + return std::__do_uninit_copy(std::move(__first), __last, __result); + } + else + return std::uninitialized_copy(std::move(__first), __last, __result); +#else + return std::uninitialized_copy(__first, __last, __result); +#endif + } +#endif + + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + __uninitialized_move_a(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result, _Allocator& __alloc) + { + return std::__uninitialized_copy_a(_GLIBCXX_MAKE_MOVE_ITERATOR(__first), + _GLIBCXX_MAKE_MOVE_ITERATOR(__last), + __result, __alloc); + } + + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + __uninitialized_move_if_noexcept_a(_InputIterator __first, + _InputIterator __last, + _ForwardIterator __result, + _Allocator& __alloc) + { + return std::__uninitialized_copy_a + (_GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(__first), + _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(__last), __result, __alloc); + } + + template + _GLIBCXX20_CONSTEXPR + void + __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x, _Allocator& __alloc) + { + _UninitDestroyGuard<_ForwardIterator, _Allocator> + __guard(__first, __alloc); + + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __first != __last; ++__first) + __traits::construct(__alloc, std::__addressof(*__first), __x); + + __guard.release(); + } + +#if _GLIBCXX_HOSTED + template + _GLIBCXX20_CONSTEXPR + inline void + __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x, allocator<_Tp2>&) + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return std::__do_uninit_fill(__first, __last, __x); +#endif + std::uninitialized_fill(__first, __last, __x); + } +#endif + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, + const _Tp& __x, _Allocator& __alloc) + { + _UninitDestroyGuard<_ForwardIterator, _Allocator> + __guard(__first, __alloc); + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __n > 0; --__n, (void) ++__first) + __traits::construct(__alloc, std::__addressof(*__first), __x); + __guard.release(); + return __first; + } + +#if _GLIBCXX_HOSTED + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, + const _Tp& __x, allocator<_Tp2>&) + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return std::__do_uninit_fill_n(__first, __n, __x); +#endif + return std::uninitialized_fill_n(__first, __n, __x); + } +#endif + + // Extensions: __uninitialized_copy_move, __uninitialized_move_copy, + // __uninitialized_fill_move, __uninitialized_move_fill. + // All of these algorithms take a user-supplied allocator, which is used + // for construction and destruction. + + // __uninitialized_copy_move + // Copies [first1, last1) into [result, result + (last1 - first1)), and + // move [first2, last2) into + // [result, result + (last1 - first1) + (last2 - first2)). + template + inline _ForwardIterator + __uninitialized_copy_move(_InputIterator1 __first1, + _InputIterator1 __last1, + _InputIterator2 __first2, + _InputIterator2 __last2, + _ForwardIterator __result, + _Allocator& __alloc) + { + _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1, + __result, __alloc); + _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__result, + __alloc); + __result = __mid; // Everything up to __mid is now guarded. + __result = std::__uninitialized_move_a(__first2, __last2, __mid, __alloc); + __guard.release(); + return __result; + } + + // __uninitialized_move_copy + // Moves [first1, last1) into [result, result + (last1 - first1)), and + // copies [first2, last2) into + // [result, result + (last1 - first1) + (last2 - first2)). + template + inline _ForwardIterator + __uninitialized_move_copy(_InputIterator1 __first1, + _InputIterator1 __last1, + _InputIterator2 __first2, + _InputIterator2 __last2, + _ForwardIterator __result, + _Allocator& __alloc) + { + _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1, + __result, __alloc); + _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__result, + __alloc); + __result = __mid; // Everything up to __mid is now guarded. + __result = std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc); + __guard.release(); + return __result; + } + + // __uninitialized_fill_move + // Fills [result, mid) with x, and moves [first, last) into + // [mid, mid + (last - first)). + template + inline _ForwardIterator + __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid, + const _Tp& __x, _InputIterator __first, + _InputIterator __last, _Allocator& __alloc) + { + std::__uninitialized_fill_a(__result, __mid, __x, __alloc); + _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__result, + __alloc); + __result = __mid; // Everything up to __mid is now guarded. + __result = std::__uninitialized_move_a(__first, __last, __mid, __alloc); + __guard.release(); + return __result; + } + + // __uninitialized_move_fill + // Moves [first1, last1) into [first2, first2 + (last1 - first1)), and + // fills [first2 + (last1 - first1), last2) with x. + template + inline void + __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1, + _ForwardIterator __first2, + _ForwardIterator __last2, const _Tp& __x, + _Allocator& __alloc) + { + _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1, + __first2, + __alloc); + _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__first2, + __alloc); + __first2 = __mid2; // Everything up to __mid2 is now guarded. + std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc); + __guard.release(); + } + + /// @endcond + +#if __cplusplus >= 201103L + /// @cond undocumented + + // Extensions: __uninitialized_default, __uninitialized_default_n, + // __uninitialized_default_a, __uninitialized_default_n_a. + + template + struct __uninitialized_default_1 + { + template + _GLIBCXX26_CONSTEXPR + static void + __uninit_default(_ForwardIterator __first, _ForwardIterator __last) + { + _UninitDestroyGuard<_ForwardIterator> __guard(__first); + for (; __first != __last; ++__first) + std::_Construct(std::__addressof(*__first)); + __guard.release(); + } + }; + + template<> + struct __uninitialized_default_1 + { + template + _GLIBCXX26_CONSTEXPR + static void + __uninit_default(_ForwardIterator __first, _ForwardIterator __last) + { + if (__first == __last) + return; + + typename iterator_traits<_ForwardIterator>::value_type* __val + = std::__addressof(*__first); + std::_Construct(__val); + if (++__first != __last) + std::fill(__first, __last, *__val); + } + }; + + template + struct __uninitialized_default_n_1 + { + template + _GLIBCXX20_CONSTEXPR + static _ForwardIterator + __uninit_default_n(_ForwardIterator __first, _Size __n) + { + _UninitDestroyGuard<_ForwardIterator> __guard(__first); + for (; __n > 0; --__n, (void) ++__first) + std::_Construct(std::__addressof(*__first)); + __guard.release(); + return __first; + } + }; + + template<> + struct __uninitialized_default_n_1 + { + template + _GLIBCXX20_CONSTEXPR + static _ForwardIterator + __uninit_default_n(_ForwardIterator __first, _Size __n) + { + if (__n > 0) + { + typename iterator_traits<_ForwardIterator>::value_type* __val + = std::__addressof(*__first); + std::_Construct(__val); + ++__first; + __first = std::fill_n(__first, __n - 1, *__val); + } + return __first; + } + }; + + // __uninitialized_default + // Fills [first, last) with value-initialized value_types. + template + _GLIBCXX20_CONSTEXPR + inline void + __uninitialized_default(_ForwardIterator __first, + _ForwardIterator __last) + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return __uninitialized_default_1:: + __uninit_default(__first, __last); +#endif + + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + // trivial types can have deleted assignment + const bool __assignable = is_copy_assignable<_ValueType>::value; + + std::__uninitialized_default_1<__is_trivial(_ValueType) + && __assignable>:: + __uninit_default(__first, __last); + } + + // __uninitialized_default_n + // Fills [first, first + n) with value-initialized value_types. + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + __uninitialized_default_n(_ForwardIterator __first, _Size __n) + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return __uninitialized_default_n_1:: + __uninit_default_n(__first, __n); +#endif + + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + // See uninitialized_fill_n for the conditions for using std::fill_n. + constexpr bool __can_fill + = __and_, is_copy_assignable<_ValueType>>::value; + + return __uninitialized_default_n_1<__is_trivial(_ValueType) + && __can_fill>:: + __uninit_default_n(__first, __n); + } + + + // __uninitialized_default_a + // Fills [first, last) with value_types constructed by the allocator + // alloc, with no arguments passed to the construct call. + template + void + __uninitialized_default_a(_ForwardIterator __first, + _ForwardIterator __last, + _Allocator& __alloc) + { + _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__first, + __alloc); + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __first != __last; ++__first) + __traits::construct(__alloc, std::__addressof(*__first)); + __guard.release(); + } + +#if _GLIBCXX_HOSTED + template + inline void + __uninitialized_default_a(_ForwardIterator __first, + _ForwardIterator __last, + allocator<_Tp>&) + { std::__uninitialized_default(__first, __last); } +#endif + + // __uninitialized_default_n_a + // Fills [first, first + n) with value_types constructed by the allocator + // alloc, with no arguments passed to the construct call. + template + _GLIBCXX20_CONSTEXPR _ForwardIterator + __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, + _Allocator& __alloc) + { + _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__first, + __alloc); + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __n > 0; --__n, (void) ++__first) + __traits::construct(__alloc, std::__addressof(*__first)); + __guard.release(); + return __first; + } + +#if _GLIBCXX_HOSTED + // __uninitialized_default_n_a specialization for std::allocator, + // which ignores the allocator and value-initializes the elements. + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, + allocator<_Tp>&) + { return std::__uninitialized_default_n(__first, __n); } +#endif + + template + struct __uninitialized_default_novalue_1 + { + template + _GLIBCXX26_CONSTEXPR + static void + __uninit_default_novalue(_ForwardIterator __first, + _ForwardIterator __last) + { + _UninitDestroyGuard<_ForwardIterator> __guard(__first); + for (; __first != __last; ++__first) + std::_Construct_novalue(std::__addressof(*__first)); + __guard.release(); + } + }; + + template<> + struct __uninitialized_default_novalue_1 + { + template + _GLIBCXX26_CONSTEXPR + static void + __uninit_default_novalue(_ForwardIterator, _ForwardIterator) + { + } + }; + + template + struct __uninitialized_default_novalue_n_1 + { + template + _GLIBCXX26_CONSTEXPR + static _ForwardIterator + __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) + { + _UninitDestroyGuard<_ForwardIterator> __guard(__first); + for (; __n > 0; --__n, (void) ++__first) + std::_Construct_novalue(std::__addressof(*__first)); + __guard.release(); + return __first; + } + }; + + template<> + struct __uninitialized_default_novalue_n_1 + { + template + _GLIBCXX26_CONSTEXPR + static _ForwardIterator + __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) + { return std::next(__first, __n); } + }; + + // __uninitialized_default_novalue + // Fills [first, last) with default-initialized value_types. + template + _GLIBCXX26_CONSTEXPR + inline void + __uninitialized_default_novalue(_ForwardIterator __first, + _ForwardIterator __last) + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + + std::__uninitialized_default_novalue_1< + is_trivially_default_constructible<_ValueType>::value>:: + __uninit_default_novalue(__first, __last); + } + + // __uninitialized_default_novalue_n + // Fills [first, first + n) with default-initialized value_types. + template + _GLIBCXX26_CONSTEXPR + inline _ForwardIterator + __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n) + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + + return __uninitialized_default_novalue_n_1< + is_trivially_default_constructible<_ValueType>::value>:: + __uninit_default_novalue_n(__first, __n); + } + + template + _GLIBCXX26_CONSTEXPR + _ForwardIterator + __uninitialized_copy_n(_InputIterator __first, _Size __n, + _ForwardIterator __result, input_iterator_tag) + { + _UninitDestroyGuard<_ForwardIterator> __guard(__result); + for (; __n > 0; --__n, (void) ++__first, ++__result) + std::_Construct(std::__addressof(*__result), *__first); + __guard.release(); + return __result; + } + + template + _GLIBCXX26_CONSTEXPR + inline _ForwardIterator + __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n, + _ForwardIterator __result, + random_access_iterator_tag) + { return std::uninitialized_copy(__first, __first + __n, __result); } + + template + _GLIBCXX26_CONSTEXPR + pair<_InputIterator, _ForwardIterator> + __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, + _ForwardIterator __result, input_iterator_tag) + { + _UninitDestroyGuard<_ForwardIterator> __guard(__result); + for (; __n > 0; --__n, (void) ++__first, ++__result) + std::_Construct(std::__addressof(*__result), *__first); + __guard.release(); + return {__first, __result}; + } + + template + _GLIBCXX26_CONSTEXPR + inline pair<_RandomAccessIterator, _ForwardIterator> + __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n, + _ForwardIterator __result, + random_access_iterator_tag) + { + auto __second_res = uninitialized_copy(__first, __first + __n, __result); + auto __first_res = std::next(__first, __n); + return {__first_res, __second_res}; + } + + /// @endcond + + /** + * @brief Copies the range [first,first+n) into result. + * @param __first An input iterator. + * @param __n The number of elements to copy. + * @param __result An output iterator. + * @return __result + __n + * @since C++11 + * + * Like copy_n(), but does not require an initialized output range. + */ + template + _GLIBCXX26_CONSTEXPR + inline _ForwardIterator + uninitialized_copy_n(_InputIterator __first, _Size __n, + _ForwardIterator __result) + { return std::__uninitialized_copy_n(__first, __n, __result, + std::__iterator_category(__first)); } + + /// @cond undocumented + template + _GLIBCXX26_CONSTEXPR + inline pair<_InputIterator, _ForwardIterator> + __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, + _ForwardIterator __result) + { + return + std::__uninitialized_copy_n_pair(__first, __n, __result, + std::__iterator_category(__first)); + } + /// @endcond +#endif + +#ifdef __glibcxx_raw_memory_algorithms // C++ >= 17 + /** + * @brief Default-initializes objects in the range [first,last). + * @param __first A forward iterator. + * @param __last A forward iterator. + * @since C++17 + */ + template + _GLIBCXX26_CONSTEXPR + inline void + uninitialized_default_construct(_ForwardIterator __first, + _ForwardIterator __last) + { + std::__uninitialized_default_novalue(__first, __last); + } + + /** + * @brief Default-initializes objects in the range [first,first+count). + * @param __first A forward iterator. + * @param __count The number of objects to construct. + * @return __first + __count + * @since C++17 + */ + template + _GLIBCXX26_CONSTEXPR + inline _ForwardIterator + uninitialized_default_construct_n(_ForwardIterator __first, _Size __count) + { + return std::__uninitialized_default_novalue_n(__first, __count); + } + + /** + * @brief Value-initializes objects in the range [first,last). + * @param __first A forward iterator. + * @param __last A forward iterator. + * @since C++17 + */ + template + _GLIBCXX26_CONSTEXPR + inline void + uninitialized_value_construct(_ForwardIterator __first, + _ForwardIterator __last) + { + return std::__uninitialized_default(__first, __last); + } + + /** + * @brief Value-initializes objects in the range [first,first+count). + * @param __first A forward iterator. + * @param __count The number of objects to construct. + * @return __result + __count + * @since C++17 + */ + template + _GLIBCXX26_CONSTEXPR + inline _ForwardIterator + uninitialized_value_construct_n(_ForwardIterator __first, _Size __count) + { + return std::__uninitialized_default_n(__first, __count); + } + + /** + * @brief Move-construct from the range [first,last) into result. + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @return __result + (__first - __last) + * @since C++17 + */ + template + _GLIBCXX26_CONSTEXPR + inline _ForwardIterator + uninitialized_move(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result) + { + return std::uninitialized_copy + (_GLIBCXX_MAKE_MOVE_ITERATOR(__first), + _GLIBCXX_MAKE_MOVE_ITERATOR(__last), __result); + } + + /** + * @brief Move-construct from the range [first,first+count) into result. + * @param __first An input iterator. + * @param __count The number of objects to initialize. + * @param __result An output iterator. + * @return __result + __count + * @since C++17 + */ + template + _GLIBCXX26_CONSTEXPR + inline pair<_InputIterator, _ForwardIterator> + uninitialized_move_n(_InputIterator __first, _Size __count, + _ForwardIterator __result) + { + auto __res = std::__uninitialized_copy_n_pair + (_GLIBCXX_MAKE_MOVE_ITERATOR(__first), + __count, __result); + return {__res.first.base(), __res.second}; + } +#endif // __glibcxx_raw_memory_algorithms + +#if __cplusplus >= 201103L + /// @cond undocumented + + template + _GLIBCXX20_CONSTEXPR + inline void + __relocate_object_a(_Tp* __restrict __dest, _Up* __restrict __orig, + _Allocator& __alloc) + noexcept(noexcept(std::allocator_traits<_Allocator>::construct(__alloc, + __dest, std::move(*__orig))) + && noexcept(std::allocator_traits<_Allocator>::destroy( + __alloc, std::__addressof(*__orig)))) + { + typedef std::allocator_traits<_Allocator> __traits; + __traits::construct(__alloc, __dest, std::move(*__orig)); + __traits::destroy(__alloc, std::__addressof(*__orig)); + } + + // This class may be specialized for specific types. + // Also known as is_trivially_relocatable. + template + struct __is_bitwise_relocatable + : __bool_constant<__is_trivial(_Tp)> + { }; + + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + __relocate_a_1(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result, _Allocator& __alloc) + noexcept(noexcept(std::__relocate_object_a(std::addressof(*__result), + std::addressof(*__first), + __alloc))) + { + typedef typename iterator_traits<_InputIterator>::value_type + _ValueType; + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType2; + static_assert(std::is_same<_ValueType, _ValueType2>::value, + "relocation is only possible for values of the same type"); + _ForwardIterator __cur = __result; + for (; __first != __last; ++__first, (void)++__cur) + std::__relocate_object_a(std::__addressof(*__cur), + std::__addressof(*__first), __alloc); + return __cur; + } + +#if _GLIBCXX_HOSTED + template + _GLIBCXX20_CONSTEXPR + inline __enable_if_t::value, _Tp*> + __relocate_a_1(_Tp* __first, _Tp* __last, + _Tp* __result, + [[__maybe_unused__]] allocator<_Up>& __alloc) noexcept + { + ptrdiff_t __count = __last - __first; + if (__count > 0) + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + { + // Can't use memcpy. Wrap the pointer so that __relocate_a_1 + // resolves to the non-trivial overload above. + __gnu_cxx::__normal_iterator<_Tp*, void> __out(__result); + __out = std::__relocate_a_1(__first, __last, __out, __alloc); + return __out.base(); + } +#endif + __builtin_memcpy(__result, __first, __count * sizeof(_Tp)); + } + return __result + __count; + } +#endif + + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + __relocate_a(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result, _Allocator& __alloc) + noexcept(noexcept(__relocate_a_1(std::__niter_base(__first), + std::__niter_base(__last), + std::__niter_base(__result), __alloc))) + { + return std::__relocate_a_1(std::__niter_base(__first), + std::__niter_base(__last), + std::__niter_base(__result), __alloc); + } + + /// @endcond +#endif // C++11 + + /// @} group memory + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _STL_UNINITIALIZED_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_uninitialized.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_uninitialized.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..98d0a7ea9651f17c6e00aeeb20bc02f28b2ff90c GIT binary patch literal 85922 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 X&~YNjskt`)(N_SO{hh_^#KH&wJ?75G literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_vector.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_vector.h new file mode 100644 index 0000000..b74274a --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_vector.h @@ -0,0 +1,2438 @@ +// Vector implementation -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/** @file bits/stl_vector.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{vector} + */ + +#ifndef _STL_VECTOR_H +#define _STL_VECTOR_H 1 + +#include +#include +#include +#if __cplusplus >= 201103L +#include +#endif +#if __cplusplus >= 202002L +# include +#endif +#if __glibcxx_concepts // C++ >= C++20 +# include // ranges::distance +#endif +#if __glibcxx_containers_ranges // C++ >= 23 +# include // ranges::copy +# include // ranges::subrange +#endif + +#include + +#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR +extern "C" void +__sanitizer_annotate_contiguous_container(const void*, const void*, + const void*, const void*); +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER + + /// See bits/stl_deque.h's _Deque_base for an explanation. + template + struct _Vector_base + { + typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template + rebind<_Tp>::other _Tp_alloc_type; + typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer + pointer; + + struct _Vector_impl_data + { + pointer _M_start; + pointer _M_finish; + pointer _M_end_of_storage; + + _GLIBCXX20_CONSTEXPR + _Vector_impl_data() _GLIBCXX_NOEXCEPT + : _M_start(), _M_finish(), _M_end_of_storage() + { } + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + _Vector_impl_data(_Vector_impl_data&& __x) noexcept + : _M_start(__x._M_start), _M_finish(__x._M_finish), + _M_end_of_storage(__x._M_end_of_storage) + { __x._M_start = __x._M_finish = __x._M_end_of_storage = pointer(); } +#endif + + _GLIBCXX20_CONSTEXPR + void + _M_copy_data(_Vector_impl_data const& __x) _GLIBCXX_NOEXCEPT + { + _M_start = __x._M_start; + _M_finish = __x._M_finish; + _M_end_of_storage = __x._M_end_of_storage; + } + + _GLIBCXX20_CONSTEXPR + void + _M_swap_data(_Vector_impl_data& __x) _GLIBCXX_NOEXCEPT + { + // Do not use std::swap(_M_start, __x._M_start), etc as it loses + // information used by TBAA. + _Vector_impl_data __tmp; + __tmp._M_copy_data(*this); + _M_copy_data(__x); + __x._M_copy_data(__tmp); + } + }; + + struct _Vector_impl + : public _Tp_alloc_type, public _Vector_impl_data + { + _GLIBCXX20_CONSTEXPR + _Vector_impl() _GLIBCXX_NOEXCEPT_IF( + is_nothrow_default_constructible<_Tp_alloc_type>::value) +#if __cpp_lib_concepts + requires is_default_constructible_v<_Tp_alloc_type> +#endif + : _Tp_alloc_type() + { } + + _GLIBCXX20_CONSTEXPR + _Vector_impl(_Tp_alloc_type const& __a) _GLIBCXX_NOEXCEPT + : _Tp_alloc_type(__a) + { } + +#if __cplusplus >= 201103L + // Not defaulted, to enforce noexcept(true) even when + // !is_nothrow_move_constructible<_Tp_alloc_type>. + _GLIBCXX20_CONSTEXPR + _Vector_impl(_Vector_impl&& __x) noexcept + : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x)) + { } + + _GLIBCXX20_CONSTEXPR + _Vector_impl(_Tp_alloc_type&& __a) noexcept + : _Tp_alloc_type(std::move(__a)) + { } + + _GLIBCXX20_CONSTEXPR + _Vector_impl(_Tp_alloc_type&& __a, _Vector_impl&& __rv) noexcept + : _Tp_alloc_type(std::move(__a)), _Vector_impl_data(std::move(__rv)) + { } +#endif + +#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR + template + struct _Asan + { + typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type> + ::size_type size_type; + + static _GLIBCXX20_CONSTEXPR void + _S_shrink(_Vector_impl&, size_type) { } + static _GLIBCXX20_CONSTEXPR void + _S_on_dealloc(_Vector_impl&) { } + + typedef _Vector_impl& _Reinit; + + struct _Grow + { + _GLIBCXX20_CONSTEXPR _Grow(_Vector_impl&, size_type) { } + _GLIBCXX20_CONSTEXPR void _M_grew(size_type) { } + }; + }; + + // Enable ASan annotations for memory obtained from std::allocator. + template + struct _Asan > + { + typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type> + ::size_type size_type; + + // Adjust ASan annotation for [_M_start, _M_end_of_storage) to + // mark end of valid region as __curr instead of __prev. + static _GLIBCXX20_CONSTEXPR void + _S_adjust(_Vector_impl& __impl, pointer __prev, pointer __curr) + { +#if __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return; +#endif + __sanitizer_annotate_contiguous_container(__impl._M_start, + __impl._M_end_of_storage, __prev, __curr); + } + + static _GLIBCXX20_CONSTEXPR void + _S_grow(_Vector_impl& __impl, size_type __n) + { _S_adjust(__impl, __impl._M_finish, __impl._M_finish + __n); } + + static _GLIBCXX20_CONSTEXPR void + _S_shrink(_Vector_impl& __impl, size_type __n) + { _S_adjust(__impl, __impl._M_finish + __n, __impl._M_finish); } + + static _GLIBCXX20_CONSTEXPR void + _S_on_dealloc(_Vector_impl& __impl) + { + if (__impl._M_start) + _S_adjust(__impl, __impl._M_finish, __impl._M_end_of_storage); + } + + // Used on reallocation to tell ASan unused capacity is invalid. + struct _Reinit + { + explicit _GLIBCXX20_CONSTEXPR + _Reinit(_Vector_impl& __impl) : _M_impl(__impl) + { + // Mark unused capacity as valid again before deallocating it. + _S_on_dealloc(_M_impl); + } + + _GLIBCXX20_CONSTEXPR + ~_Reinit() + { + // Mark unused capacity as invalid after reallocation. + if (_M_impl._M_start) + _S_adjust(_M_impl, _M_impl._M_end_of_storage, + _M_impl._M_finish); + } + + _Vector_impl& _M_impl; + +#if __cplusplus >= 201103L + _Reinit(const _Reinit&) = delete; + _Reinit& operator=(const _Reinit&) = delete; +#endif + }; + + // Tell ASan when unused capacity is initialized to be valid. + struct _Grow + { + _GLIBCXX20_CONSTEXPR + _Grow(_Vector_impl& __impl, size_type __n) + : _M_impl(__impl), _M_n(__n) + { _S_grow(_M_impl, __n); } + + _GLIBCXX20_CONSTEXPR + ~_Grow() { if (_M_n) _S_shrink(_M_impl, _M_n); } + + _GLIBCXX20_CONSTEXPR + void _M_grew(size_type __n) { _M_n -= __n; } + +#if __cplusplus >= 201103L + _Grow(const _Grow&) = delete; + _Grow& operator=(const _Grow&) = delete; +#endif + private: + _Vector_impl& _M_impl; + size_type _M_n; + }; + }; + +#define _GLIBCXX_ASAN_ANNOTATE_REINIT \ + typename _Base::_Vector_impl::template _Asan<>::_Reinit const \ + __attribute__((__unused__)) __reinit_guard(this->_M_impl) +#define _GLIBCXX_ASAN_ANNOTATE_GROW(n) \ + typename _Base::_Vector_impl::template _Asan<>::_Grow \ + __attribute__((__unused__)) __grow_guard(this->_M_impl, (n)) +#define _GLIBCXX_ASAN_ANNOTATE_GREW(n) __grow_guard._M_grew(n) +#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n) \ + _Base::_Vector_impl::template _Asan<>::_S_shrink(this->_M_impl, n) +#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC \ + _Base::_Vector_impl::template _Asan<>::_S_on_dealloc(this->_M_impl) +#else // ! (_GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR) +#define _GLIBCXX_ASAN_ANNOTATE_REINIT +#define _GLIBCXX_ASAN_ANNOTATE_GROW(n) +#define _GLIBCXX_ASAN_ANNOTATE_GREW(n) +#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n) +#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC +#endif // _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR + }; + + public: + typedef _Alloc allocator_type; + + _GLIBCXX20_CONSTEXPR + _Tp_alloc_type& + _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT + { return this->_M_impl; } + + _GLIBCXX20_CONSTEXPR + const _Tp_alloc_type& + _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT + { return this->_M_impl; } + + _GLIBCXX20_CONSTEXPR + allocator_type + get_allocator() const _GLIBCXX_NOEXCEPT + { return allocator_type(_M_get_Tp_allocator()); } + +#if __cplusplus >= 201103L + _Vector_base() = default; +#else + _Vector_base() { } +#endif + + _GLIBCXX20_CONSTEXPR + _Vector_base(const allocator_type& __a) _GLIBCXX_NOEXCEPT + : _M_impl(__a) { } + + // Kept for ABI compatibility. +#if !_GLIBCXX_INLINE_VERSION + _GLIBCXX20_CONSTEXPR + _Vector_base(size_t __n) + : _M_impl() + { _M_create_storage(__n); } +#endif + + _GLIBCXX20_CONSTEXPR + _Vector_base(size_t __n, const allocator_type& __a) + : _M_impl(__a) + { _M_create_storage(__n); } + +#if __cplusplus >= 201103L + _Vector_base(_Vector_base&&) = default; + + // Kept for ABI compatibility. +# if !_GLIBCXX_INLINE_VERSION + _GLIBCXX20_CONSTEXPR + _Vector_base(_Tp_alloc_type&& __a) noexcept + : _M_impl(std::move(__a)) { } + + _GLIBCXX20_CONSTEXPR + _Vector_base(_Vector_base&& __x, const allocator_type& __a) + : _M_impl(__a) + { + if (__x.get_allocator() == __a) + this->_M_impl._M_swap_data(__x._M_impl); + else + { + size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start; + _M_create_storage(__n); + } + } +# endif + + _GLIBCXX20_CONSTEXPR + _Vector_base(const allocator_type& __a, _Vector_base&& __x) + : _M_impl(_Tp_alloc_type(__a), std::move(__x._M_impl)) + { } +#endif + + _GLIBCXX20_CONSTEXPR + ~_Vector_base() _GLIBCXX_NOEXCEPT + { + _M_deallocate(_M_impl._M_start, + _M_impl._M_end_of_storage - _M_impl._M_start); + } + + public: + _Vector_impl _M_impl; + + _GLIBCXX20_CONSTEXPR + pointer + _M_allocate(size_t __n) + { + typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; + return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer(); + } + + _GLIBCXX20_CONSTEXPR + void + _M_deallocate(pointer __p, size_t __n) + { + typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; + if (__p) + _Tr::deallocate(_M_impl, __p, __n); + } + + protected: + + _GLIBCXX20_CONSTEXPR + void + _M_create_storage(size_t __n) + { + this->_M_impl._M_start = this->_M_allocate(__n); + this->_M_impl._M_finish = this->_M_impl._M_start; + this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; + } + +#if __glibcxx_containers_ranges // C++ >= 23 + // Called by insert_range, and indirectly by assign_range, append_range. + // Initializes new elements in storage at __ptr and updates __ptr to + // point after the last new element. + // Provides strong exception safety guarantee. + // Requires [ptr, ptr+distance(rg)) is a valid range. + template + constexpr void + _M_append_range_to(_Rg&& __rg, pointer& __ptr) + { + __ptr = std::__uninitialized_copy_a(ranges::begin(__rg), + ranges::end(__rg), + __ptr, _M_get_Tp_allocator()); + } + + // Called by assign_range, append_range, insert_range. + // Requires capacity() >= size()+distance(rg). + template + constexpr void + _M_append_range(_Rg&& __rg) + { _M_append_range_to(std::forward<_Rg>(__rg), _M_impl._M_finish); } +#endif + }; + + /** + * @brief A standard container which offers fixed time access to + * individual elements in any order. + * + * @ingroup sequences + * @headerfile vector + * @since C++98 + * + * @tparam _Tp Type of element. + * @tparam _Alloc Allocator type, defaults to allocator<_Tp>. + * + * Meets the requirements of a container, a + * reversible container, and a + * sequence, including the + * optional sequence requirements with the + * %exception of @c push_front and @c pop_front. + * + * In some terminology a %vector can be described as a dynamic + * C-style array, it offers fast and efficient access to individual + * elements in any order and saves the user from worrying about + * memory and size allocation. Subscripting ( @c [] ) access is + * also provided as with C-style arrays. + */ + template > + class vector : protected _Vector_base<_Tp, _Alloc> + { +#ifdef _GLIBCXX_CONCEPT_CHECKS + // Concept requirements. + typedef typename _Alloc::value_type _Alloc_value_type; +# if __cplusplus < 201103L + __glibcxx_class_requires(_Tp, _SGIAssignableConcept) +# endif + __glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept) +#endif + +#if __cplusplus >= 201103L + static_assert(is_same::type, _Tp>::value, + "std::vector must have a non-const, non-volatile value_type"); +# if __cplusplus > 201703L || defined __STRICT_ANSI__ + static_assert(is_same::value, + "std::vector must have the same value_type as its allocator"); +# endif +#endif + + typedef _Vector_base<_Tp, _Alloc> _Base; + typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; + typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits; + + public: + typedef _Tp value_type; + typedef typename _Base::pointer pointer; + typedef typename _Alloc_traits::const_pointer const_pointer; + typedef typename _Alloc_traits::reference reference; + typedef typename _Alloc_traits::const_reference const_reference; + typedef __gnu_cxx::__normal_iterator iterator; + typedef __gnu_cxx::__normal_iterator + const_iterator; + typedef std::reverse_iterator const_reverse_iterator; + typedef std::reverse_iterator reverse_iterator; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef _Alloc allocator_type; + + private: +#if __cplusplus >= 201103L + static constexpr bool + _S_nothrow_relocate(true_type) + { + return noexcept(std::__relocate_a(std::declval(), + std::declval(), + std::declval(), + std::declval<_Tp_alloc_type&>())); + } + + static constexpr bool + _S_nothrow_relocate(false_type) + { return false; } + + static constexpr bool + _S_use_relocate() + { + // Instantiating std::__relocate_a might cause an error outside the + // immediate context (in __relocate_object_a's noexcept-specifier), + // so only do it if we know the type can be move-inserted into *this. + return _S_nothrow_relocate(__is_move_insertable<_Tp_alloc_type>{}); + } + + static pointer + _S_do_relocate(pointer __first, pointer __last, pointer __result, + _Tp_alloc_type& __alloc, true_type) noexcept + { + return std::__relocate_a(__first, __last, __result, __alloc); + } + + static pointer + _S_do_relocate(pointer, pointer, pointer __result, + _Tp_alloc_type&, false_type) noexcept + { return __result; } + + static _GLIBCXX20_CONSTEXPR pointer + _S_relocate(pointer __first, pointer __last, pointer __result, + _Tp_alloc_type& __alloc) noexcept + { +#if __cpp_if_constexpr + // All callers have already checked _S_use_relocate() so just do it. + return std::__relocate_a(__first, __last, __result, __alloc); +#else + using __do_it = __bool_constant<_S_use_relocate()>; + return _S_do_relocate(__first, __last, __result, __alloc, __do_it{}); +#endif + } +#endif // C++11 + + protected: + using _Base::_M_allocate; + using _Base::_M_deallocate; + using _Base::_M_impl; + using _Base::_M_get_Tp_allocator; + + public: + // [23.2.4.1] construct/copy/destroy + // (assign() and get_allocator() are also listed in this section) + + /** + * @brief Creates a %vector with no elements. + */ +#if __cplusplus >= 201103L + vector() = default; +#else + vector() { } +#endif + + /** + * @brief Creates a %vector with no elements. + * @param __a An allocator object. + */ + explicit + _GLIBCXX20_CONSTEXPR + vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT + : _Base(__a) { } + +#if __cplusplus >= 201103L + /** + * @brief Creates a %vector with default constructed elements. + * @param __n The number of elements to initially create. + * @param __a An allocator. + * + * This constructor fills the %vector with @a __n default + * constructed elements. + */ + explicit + _GLIBCXX20_CONSTEXPR + vector(size_type __n, const allocator_type& __a = allocator_type()) + : _Base(_S_check_init_len(__n, __a), __a) + { _M_default_initialize(__n); } + + /** + * @brief Creates a %vector with copies of an exemplar element. + * @param __n The number of elements to initially create. + * @param __value An element to copy. + * @param __a An allocator. + * + * This constructor fills the %vector with @a __n copies of @a __value. + */ + _GLIBCXX20_CONSTEXPR + vector(size_type __n, const value_type& __value, + const allocator_type& __a = allocator_type()) + : _Base(_S_check_init_len(__n, __a), __a) + { _M_fill_initialize(__n, __value); } +#else + /** + * @brief Creates a %vector with copies of an exemplar element. + * @param __n The number of elements to initially create. + * @param __value An element to copy. + * @param __a An allocator. + * + * This constructor fills the %vector with @a __n copies of @a __value. + */ + explicit + vector(size_type __n, const value_type& __value = value_type(), + const allocator_type& __a = allocator_type()) + : _Base(_S_check_init_len(__n, __a), __a) + { _M_fill_initialize(__n, __value); } +#endif + + /** + * @brief %Vector copy constructor. + * @param __x A %vector of identical element and allocator types. + * + * All the elements of @a __x are copied, but any unused capacity in + * @a __x will not be copied + * (i.e. capacity() == size() in the new %vector). + * + * The newly-created %vector uses a copy of the allocator object used + * by @a __x (unless the allocator traits dictate a different object). + */ + _GLIBCXX20_CONSTEXPR + vector(const vector& __x) + : _Base(__x.size(), + _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator())) + { + this->_M_impl._M_finish = + std::__uninitialized_copy_a(__x.begin(), __x.end(), + this->_M_impl._M_start, + _M_get_Tp_allocator()); + } + +#if __cplusplus >= 201103L + /** + * @brief %Vector move constructor. + * + * The newly-created %vector contains the exact contents of the + * moved instance. + * The contents of the moved instance are a valid, but unspecified + * %vector. + */ + vector(vector&&) noexcept = default; + + /// Copy constructor with alternative allocator + _GLIBCXX20_CONSTEXPR + vector(const vector& __x, const __type_identity_t& __a) + : _Base(__x.size(), __a) + { + this->_M_impl._M_finish = + std::__uninitialized_copy_a(__x.begin(), __x.end(), + this->_M_impl._M_start, + _M_get_Tp_allocator()); + } + + private: + _GLIBCXX20_CONSTEXPR + vector(vector&& __rv, const allocator_type& __m, true_type) noexcept + : _Base(__m, std::move(__rv)) + { } + + _GLIBCXX20_CONSTEXPR + vector(vector&& __rv, const allocator_type& __m, false_type) + : _Base(__m) + { + if (__rv.get_allocator() == __m) + this->_M_impl._M_swap_data(__rv._M_impl); + else if (!__rv.empty()) + { + this->_M_create_storage(__rv.size()); + this->_M_impl._M_finish = + std::__uninitialized_move_a(__rv.begin(), __rv.end(), + this->_M_impl._M_start, + _M_get_Tp_allocator()); + __rv.clear(); + } + } + + public: + /// Move constructor with alternative allocator + _GLIBCXX20_CONSTEXPR + vector(vector&& __rv, const __type_identity_t& __m) + noexcept( noexcept( + vector(std::declval(), std::declval(), + std::declval())) ) + : vector(std::move(__rv), __m, typename _Alloc_traits::is_always_equal{}) + { } + + /** + * @brief Builds a %vector from an initializer list. + * @param __l An initializer_list. + * @param __a An allocator. + * + * Create a %vector consisting of copies of the elements in the + * initializer_list @a __l. + * + * This will call the element type's copy constructor N times + * (where N is @a __l.size()) and do no memory reallocation. + */ + _GLIBCXX20_CONSTEXPR + vector(initializer_list __l, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { + _M_range_initialize_n(__l.begin(), __l.end(), __l.size()); + } +#endif + + /** + * @brief Builds a %vector from a range. + * @param __first An input iterator. + * @param __last An input iterator. + * @param __a An allocator. + * + * Create a %vector consisting of copies of the elements from + * [first,last). + * + * If the iterators are forward, bidirectional, or + * random-access, then this will call the elements' copy + * constructor N times (where N is distance(first,last)) and do + * no memory reallocation. But if only input iterators are + * used, then this will do at most 2N calls to the copy + * constructor, and logN memory reallocations. + */ +#if __cplusplus >= 201103L + template> + _GLIBCXX20_CONSTEXPR + vector(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { +#if __glibcxx_concepts // C++ >= C++20 + if constexpr (sized_sentinel_for<_InputIterator, _InputIterator> + || forward_iterator<_InputIterator>) + { + const auto __n + = static_cast(ranges::distance(__first, __last)); + _M_range_initialize_n(__first, __last, __n); + return; + } + else +#endif + _M_range_initialize(__first, __last, + std::__iterator_category(__first)); + } +#else + template + vector(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { + // Check whether it's an integral type. If so, it's not an iterator. + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_initialize_dispatch(__first, __last, _Integral()); + } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Construct a vector from a range. + * @param __rg A range of values that are convertible to `bool`. + * @since C++23 + */ + template<__detail::__container_compatible_range<_Tp> _Rg> + constexpr + vector(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc()) + : vector(__a) + { + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + const auto __n = static_cast(ranges::distance(__rg)); + _M_range_initialize_n(ranges::begin(__rg), ranges::end(__rg), + __n); + } + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + for (; __first != __last; ++__first) + emplace_back(*__first); + } + } +#endif + + /** + * The dtor only erases the elements, and note that if the + * elements themselves are pointers, the pointed-to memory is + * not touched in any way. Managing the pointer is the user's + * responsibility. + */ + _GLIBCXX20_CONSTEXPR + ~vector() _GLIBCXX_NOEXCEPT + { + std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, + _M_get_Tp_allocator()); + _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC; + } + + /** + * @brief %Vector assignment operator. + * @param __x A %vector of identical element and allocator types. + * + * All the elements of @a __x are copied, but any unused capacity in + * @a __x will not be copied. + * + * Whether the allocator is copied depends on the allocator traits. + */ + _GLIBCXX20_CONSTEXPR + vector& + operator=(const vector& __x); + +#if __cplusplus >= 201103L + /** + * @brief %Vector move assignment operator. + * @param __x A %vector of identical element and allocator types. + * + * The contents of @a __x are moved into this %vector (without copying, + * if the allocators permit it). + * Afterwards @a __x is a valid, but unspecified %vector. + * + * Whether the allocator is moved depends on the allocator traits. + */ + _GLIBCXX20_CONSTEXPR + vector& + operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) + { + constexpr bool __move_storage = + _Alloc_traits::_S_propagate_on_move_assign() + || _Alloc_traits::_S_always_equal(); + _M_move_assign(std::move(__x), __bool_constant<__move_storage>()); + return *this; + } + + /** + * @brief %Vector list assignment operator. + * @param __l An initializer_list. + * + * This function fills a %vector with copies of the elements in the + * initializer list @a __l. + * + * Note that the assignment completely changes the %vector and + * that the resulting %vector's size is the same as the number + * of elements assigned. + */ + _GLIBCXX20_CONSTEXPR + vector& + operator=(initializer_list __l) + { + this->_M_assign_aux(__l.begin(), __l.end(), + random_access_iterator_tag()); + return *this; + } +#endif + + /** + * @brief Assigns a given value to a %vector. + * @param __n Number of elements to be assigned. + * @param __val Value to be assigned. + * + * This function fills a %vector with @a __n copies of the given + * value. Note that the assignment completely changes the + * %vector and that the resulting %vector's size is the same as + * the number of elements assigned. + */ + _GLIBCXX20_CONSTEXPR + void + assign(size_type __n, const value_type& __val) + { _M_fill_assign(__n, __val); } + + /** + * @brief Assigns a range to a %vector. + * @param __first An input iterator. + * @param __last An input iterator. + * + * This function fills a %vector with copies of the elements in the + * range [__first,__last). + * + * Note that the assignment completely changes the %vector and + * that the resulting %vector's size is the same as the number + * of elements assigned. + */ +#if __cplusplus >= 201103L + template> + _GLIBCXX20_CONSTEXPR + void + assign(_InputIterator __first, _InputIterator __last) + { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } +#else + template + void + assign(_InputIterator __first, _InputIterator __last) + { + // Check whether it's an integral type. If so, it's not an iterator. + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_assign_dispatch(__first, __last, _Integral()); + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Assigns an initializer list to a %vector. + * @param __l An initializer_list. + * + * This function fills a %vector with copies of the elements in the + * initializer list @a __l. + * + * Note that the assignment completely changes the %vector and + * that the resulting %vector's size is the same as the number + * of elements assigned. + */ + _GLIBCXX20_CONSTEXPR + void + assign(initializer_list __l) + { + this->_M_assign_aux(__l.begin(), __l.end(), + random_access_iterator_tag()); + } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Assign a range to the vector. + * @param __rg A range of values that are convertible to `value_type`. + * @pre `__rg` and `*this` do not overlap. + * @since C++23 + */ + template<__detail::__container_compatible_range<_Tp> _Rg> + constexpr void + assign_range(_Rg&& __rg) + { + static_assert(assignable_from<_Tp&, ranges::range_reference_t<_Rg>>); + + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + const auto __n = size_type(ranges::distance(__rg)); + if (__n <= size()) + { + auto __res = ranges::copy(__rg, this->_M_impl._M_start); + _M_erase_at_end(__res.out); + return; + } + + reserve(__n); + auto __first = ranges::copy_n(ranges::begin(__rg), size(), + this->_M_impl._M_start).in; + [[maybe_unused]] const auto __diff = __n - size(); + _GLIBCXX_ASAN_ANNOTATE_GROW(__diff); + _Base::_M_append_range(ranges::subrange(std::move(__first), + ranges::end(__rg))); + _GLIBCXX_ASAN_ANNOTATE_GREW(__diff); + } + else // input_range<_Rg> && !sized_range<_Rg> + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + pointer __ptr = this->_M_impl._M_start; + pointer const __end = this->_M_impl._M_finish; + + while (__ptr < __end && __first != __last) + { + *__ptr = *__first; + ++__ptr; + ++__first; + } + + if (__first == __last) + _M_erase_at_end(__ptr); + else + { + do + emplace_back(*__first); + while (++__first != __last); + } + } + } +#endif // containers_ranges + + /// Get a copy of the memory allocation object. + using _Base::get_allocator; + + // iterators + /** + * Returns a read/write iterator that points to the first + * element in the %vector. Iteration is done in ordinary + * element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + iterator + begin() _GLIBCXX_NOEXCEPT + { return iterator(this->_M_impl._M_start); } + + /** + * Returns a read-only (constant) iterator that points to the + * first element in the %vector. Iteration is done in ordinary + * element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_iterator + begin() const _GLIBCXX_NOEXCEPT + { return const_iterator(this->_M_impl._M_start); } + + /** + * Returns a read/write iterator that points one past the last + * element in the %vector. Iteration is done in ordinary + * element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + iterator + end() _GLIBCXX_NOEXCEPT + { return iterator(this->_M_impl._M_finish); } + + /** + * Returns a read-only (constant) iterator that points one past + * the last element in the %vector. Iteration is done in + * ordinary element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_iterator + end() const _GLIBCXX_NOEXCEPT + { return const_iterator(this->_M_impl._M_finish); } + + /** + * Returns a read/write reverse iterator that points to the + * last element in the %vector. Iteration is done in reverse + * element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reverse_iterator + rbegin() _GLIBCXX_NOEXCEPT + { return reverse_iterator(end()); } + + /** + * Returns a read-only (constant) reverse iterator that points + * to the last element in the %vector. Iteration is done in + * reverse element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reverse_iterator + rbegin() const _GLIBCXX_NOEXCEPT + { return const_reverse_iterator(end()); } + + /** + * Returns a read/write reverse iterator that points to one + * before the first element in the %vector. Iteration is done + * in reverse element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reverse_iterator + rend() _GLIBCXX_NOEXCEPT + { return reverse_iterator(begin()); } + + /** + * Returns a read-only (constant) reverse iterator that points + * to one before the first element in the %vector. Iteration + * is done in reverse element order. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reverse_iterator + rend() const _GLIBCXX_NOEXCEPT + { return const_reverse_iterator(begin()); } + +#if __cplusplus >= 201103L + /** + * Returns a read-only (constant) iterator that points to the + * first element in the %vector. Iteration is done in ordinary + * element order. + */ + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR + const_iterator + cbegin() const noexcept + { return const_iterator(this->_M_impl._M_start); } + + /** + * Returns a read-only (constant) iterator that points one past + * the last element in the %vector. Iteration is done in + * ordinary element order. + */ + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR + const_iterator + cend() const noexcept + { return const_iterator(this->_M_impl._M_finish); } + + /** + * Returns a read-only (constant) reverse iterator that points + * to the last element in the %vector. Iteration is done in + * reverse element order. + */ + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR + const_reverse_iterator + crbegin() const noexcept + { return const_reverse_iterator(end()); } + + /** + * Returns a read-only (constant) reverse iterator that points + * to one before the first element in the %vector. Iteration + * is done in reverse element order. + */ + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR + const_reverse_iterator + crend() const noexcept + { return const_reverse_iterator(begin()); } +#endif + + // [23.2.4.2] capacity + /** Returns the number of elements in the %vector. */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + size() const _GLIBCXX_NOEXCEPT + { + ptrdiff_t __dif = this->_M_impl._M_finish - this->_M_impl._M_start; + if (__dif < 0) + __builtin_unreachable (); + return size_type(__dif); + } + + /** Returns the size() of the largest possible %vector. */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + max_size() const _GLIBCXX_NOEXCEPT + { return _S_max_size(_M_get_Tp_allocator()); } + +#if __cplusplus >= 201103L + /** + * @brief Resizes the %vector to the specified number of elements. + * @param __new_size Number of elements the %vector should contain. + * + * This function will %resize the %vector to the specified + * number of elements. If the number is smaller than the + * %vector's current size the %vector is truncated, otherwise + * default constructed elements are appended. + */ + _GLIBCXX20_CONSTEXPR + void + resize(size_type __new_size) + { + if (__new_size > size()) + _M_default_append(__new_size - size()); + else if (__new_size < size()) + _M_erase_at_end(this->_M_impl._M_start + __new_size); + } + + /** + * @brief Resizes the %vector to the specified number of elements. + * @param __new_size Number of elements the %vector should contain. + * @param __x Data with which new elements should be populated. + * + * This function will %resize the %vector to the specified + * number of elements. If the number is smaller than the + * %vector's current size the %vector is truncated, otherwise + * the %vector is extended and new elements are populated with + * given data. + */ + _GLIBCXX20_CONSTEXPR + void + resize(size_type __new_size, const value_type& __x) + { + if (__new_size > size()) + _M_fill_append(__new_size - size(), __x); + else if (__new_size < size()) + _M_erase_at_end(this->_M_impl._M_start + __new_size); + } +#else + /** + * @brief Resizes the %vector to the specified number of elements. + * @param __new_size Number of elements the %vector should contain. + * @param __x Data with which new elements should be populated. + * + * This function will %resize the %vector to the specified + * number of elements. If the number is smaller than the + * %vector's current size the %vector is truncated, otherwise + * the %vector is extended and new elements are populated with + * given data. + */ + _GLIBCXX20_CONSTEXPR + void + resize(size_type __new_size, value_type __x = value_type()) + { + if (__new_size > size()) + _M_fill_append(__new_size - size(), __x); + else if (__new_size < size()) + _M_erase_at_end(this->_M_impl._M_start + __new_size); + } +#endif + +#if __cplusplus >= 201103L + /** A non-binding request to reduce capacity() to size(). */ + _GLIBCXX20_CONSTEXPR + void + shrink_to_fit() + { _M_shrink_to_fit(); } +#endif + + /** + * Returns the total number of elements that the %vector can + * hold before needing to allocate more memory. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + size_type + capacity() const _GLIBCXX_NOEXCEPT + { + ptrdiff_t __dif = this->_M_impl._M_end_of_storage + - this->_M_impl._M_start; + if (__dif < 0) + __builtin_unreachable (); + return size_type(__dif); + } + + /** + * Returns true if the %vector is empty. (Thus begin() would + * equal end().) + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + bool + empty() const _GLIBCXX_NOEXCEPT + { return begin() == end(); } + + /** + * @brief Attempt to preallocate enough memory for specified number of + * elements. + * @param __n Number of elements required. + * @throw std::length_error If @a n exceeds @c max_size(). + * + * This function attempts to reserve enough memory for the + * %vector to hold the specified number of elements. If the + * number requested is more than max_size(), length_error is + * thrown. + * + * The advantage of this function is that if optimal code is a + * necessity and the user can determine the number of elements + * that will be required, the user can reserve the memory in + * %advance, and thus prevent a possible reallocation of memory + * and copying of %vector data. + */ + _GLIBCXX20_CONSTEXPR + void + reserve(size_type __n); + + // element access + /** + * @brief Subscript access to the data contained in the %vector. + * @param __n The index of the element for which data should be + * accessed. + * @return Read/write reference to data. + * + * This operator allows for easy, array-style, data access. + * Note that data access with this operator is unchecked and + * out_of_range lookups are not defined. (For checked lookups + * see at().) + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + operator[](size_type __n) _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_subscript(__n); + return *(this->_M_impl._M_start + __n); + } + + /** + * @brief Subscript access to the data contained in the %vector. + * @param __n The index of the element for which data should be + * accessed. + * @return Read-only (constant) reference to data. + * + * This operator allows for easy, array-style, data access. + * Note that data access with this operator is unchecked and + * out_of_range lookups are not defined. (For checked lookups + * see at().) + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + operator[](size_type __n) const _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_subscript(__n); + return *(this->_M_impl._M_start + __n); + } + + protected: + /// Safety check used only from at(). + _GLIBCXX20_CONSTEXPR + void + _M_range_check(size_type __n) const + { + if (__n >= this->size()) + __throw_out_of_range_fmt(__N("vector::_M_range_check: __n " + "(which is %zu) >= this->size() " + "(which is %zu)"), + __n, this->size()); + } + + public: + /** + * @brief Provides access to the data contained in the %vector. + * @param __n The index of the element for which data should be + * accessed. + * @return Read/write reference to data. + * @throw std::out_of_range If @a __n is an invalid index. + * + * This function provides for safer data access. The parameter + * is first checked that it is in the range of the vector. The + * function throws out_of_range if the check fails. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + at(size_type __n) + { + _M_range_check(__n); + return (*this)[__n]; + } + + /** + * @brief Provides access to the data contained in the %vector. + * @param __n The index of the element for which data should be + * accessed. + * @return Read-only (constant) reference to data. + * @throw std::out_of_range If @a __n is an invalid index. + * + * This function provides for safer data access. The parameter + * is first checked that it is in the range of the vector. The + * function throws out_of_range if the check fails. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + at(size_type __n) const + { + _M_range_check(__n); + return (*this)[__n]; + } + + /** + * Returns a read/write reference to the data at the first + * element of the %vector. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + front() _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_nonempty(); + return *begin(); + } + + /** + * Returns a read-only (constant) reference to the data at the first + * element of the %vector. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + front() const _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_nonempty(); + return *begin(); + } + + /** + * Returns a read/write reference to the data at the last + * element of the %vector. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + reference + back() _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_nonempty(); + return *(end() - 1); + } + + /** + * Returns a read-only (constant) reference to the data at the + * last element of the %vector. + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const_reference + back() const _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_nonempty(); + return *(end() - 1); + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 464. Suggestion for new member functions in standard containers. + // data access + /** + * Returns a pointer such that [data(), data() + size()) is a valid + * range. For a non-empty %vector, data() == &front(). + */ + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + _Tp* + data() _GLIBCXX_NOEXCEPT + { return _M_data_ptr(this->_M_impl._M_start); } + + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + const _Tp* + data() const _GLIBCXX_NOEXCEPT + { return _M_data_ptr(this->_M_impl._M_start); } + + // [23.2.4.3] modifiers + /** + * @brief Add data to the end of the %vector. + * @param __x Data to be added. + * + * This is a typical stack operation. The function creates an + * element at the end of the %vector and assigns the given data + * to it. Due to the nature of a %vector this operation can be + * done in constant time if the %vector has preallocated space + * available. + */ + _GLIBCXX20_CONSTEXPR + void + push_back(const value_type& __x) + { + if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(1); + _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, + __x); + ++this->_M_impl._M_finish; + _GLIBCXX_ASAN_ANNOTATE_GREW(1); + } + else + _M_realloc_append(__x); + } + +#if __cplusplus >= 201103L + _GLIBCXX20_CONSTEXPR + void + push_back(value_type&& __x) + { emplace_back(std::move(__x)); } + + template +#if __cplusplus > 201402L + _GLIBCXX20_CONSTEXPR + reference +#else + void +#endif + emplace_back(_Args&&... __args); +#endif + + /** + * @brief Removes last element. + * + * This is a typical stack operation. It shrinks the %vector by one. + * + * Note that no data is returned, and if the last element's + * data is needed, it should be retrieved before pop_back() is + * called. + */ + _GLIBCXX20_CONSTEXPR + void + pop_back() _GLIBCXX_NOEXCEPT + { + __glibcxx_requires_nonempty(); + --this->_M_impl._M_finish; + _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); + _GLIBCXX_ASAN_ANNOTATE_SHRINK(1); + } + +#if __cplusplus >= 201103L + /** + * @brief Inserts an object in %vector before specified iterator. + * @param __position A const_iterator into the %vector. + * @param __args Arguments. + * @return An iterator that points to the inserted data. + * + * This function will insert an object of type T constructed + * with T(std::forward(args)...) before the specified location. + * Note that this kind of operation could be expensive for a %vector + * and if it is frequently used the user should consider using + * std::list. + */ + template + _GLIBCXX20_CONSTEXPR + iterator + emplace(const_iterator __position, _Args&&... __args) + { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); } + + /** + * @brief Inserts given value into %vector before specified iterator. + * @param __position A const_iterator into the %vector. + * @param __x Data to be inserted. + * @return An iterator that points to the inserted data. + * + * This function will insert a copy of the given value before + * the specified location. Note that this kind of operation + * could be expensive for a %vector and if it is frequently + * used the user should consider using std::list. + */ + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __position, const value_type& __x); +#else + /** + * @brief Inserts given value into %vector before specified iterator. + * @param __position An iterator into the %vector. + * @param __x Data to be inserted. + * @return An iterator that points to the inserted data. + * + * This function will insert a copy of the given value before + * the specified location. Note that this kind of operation + * could be expensive for a %vector and if it is frequently + * used the user should consider using std::list. + */ + iterator + insert(iterator __position, const value_type& __x); +#endif + +#if __cplusplus >= 201103L + /** + * @brief Inserts given rvalue into %vector before specified iterator. + * @param __position A const_iterator into the %vector. + * @param __x Data to be inserted. + * @return An iterator that points to the inserted data. + * + * This function will insert a copy of the given rvalue before + * the specified location. Note that this kind of operation + * could be expensive for a %vector and if it is frequently + * used the user should consider using std::list. + */ + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __position, value_type&& __x) + { return _M_insert_rval(__position, std::move(__x)); } + + /** + * @brief Inserts an initializer_list into the %vector. + * @param __position An iterator into the %vector. + * @param __l An initializer_list. + * + * This function will insert copies of the data in the + * initializer_list @a l into the %vector before the location + * specified by @a position. + * + * Note that this kind of operation could be expensive for a + * %vector and if it is frequently used the user should + * consider using std::list. + */ + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __position, initializer_list __l) + { + auto __offset = __position - cbegin(); + _M_range_insert(begin() + __offset, __l.begin(), __l.end(), + std::random_access_iterator_tag()); + return begin() + __offset; + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Inserts a number of copies of given data into the %vector. + * @param __position A const_iterator into the %vector. + * @param __n Number of elements to be inserted. + * @param __x Data to be inserted. + * @return An iterator that points to the inserted data. + * + * This function will insert a specified number of copies of + * the given data before the location specified by @a position. + * + * Note that this kind of operation could be expensive for a + * %vector and if it is frequently used the user should + * consider using std::list. + */ + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __position, size_type __n, const value_type& __x) + { + difference_type __offset = __position - cbegin(); + _M_fill_insert(begin() + __offset, __n, __x); + return begin() + __offset; + } +#else + /** + * @brief Inserts a number of copies of given data into the %vector. + * @param __position An iterator into the %vector. + * @param __n Number of elements to be inserted. + * @param __x Data to be inserted. + * + * This function will insert a specified number of copies of + * the given data before the location specified by @a position. + * + * Note that this kind of operation could be expensive for a + * %vector and if it is frequently used the user should + * consider using std::list. + */ + void + insert(iterator __position, size_type __n, const value_type& __x) + { _M_fill_insert(__position, __n, __x); } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Inserts a range into the %vector. + * @param __position A const_iterator into the %vector. + * @param __first An input iterator. + * @param __last An input iterator. + * @return An iterator that points to the inserted data. + * + * This function will insert copies of the data in the range + * [__first,__last) into the %vector before the location specified + * by @a pos. + * + * Note that this kind of operation could be expensive for a + * %vector and if it is frequently used the user should + * consider using std::list. + */ + template> + _GLIBCXX20_CONSTEXPR + iterator + insert(const_iterator __position, _InputIterator __first, + _InputIterator __last) + { + difference_type __offset = __position - cbegin(); + _M_range_insert(begin() + __offset, __first, __last, + std::__iterator_category(__first)); + return begin() + __offset; + } +#else + /** + * @brief Inserts a range into the %vector. + * @param __position An iterator into the %vector. + * @param __first An input iterator. + * @param __last An input iterator. + * + * This function will insert copies of the data in the range + * [__first,__last) into the %vector before the location specified + * by @a pos. + * + * Note that this kind of operation could be expensive for a + * %vector and if it is frequently used the user should + * consider using std::list. + */ + template + void + insert(iterator __position, _InputIterator __first, + _InputIterator __last) + { + // Check whether it's an integral type. If so, it's not an iterator. + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_insert_dispatch(__position, __first, __last, _Integral()); + } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Insert a range into the vector. + * @param __rg A range of values that are convertible to `value_type`. + * @return An iterator that points to the first new element inserted, + * or to `__pos` if `__rg` is an empty range. + * @pre `__rg` and `*this` do not overlap. + * @since C++23 + */ + template<__detail::__container_compatible_range<_Tp> _Rg> + constexpr iterator + insert_range(const_iterator __pos, _Rg&& __rg); + + /** + * @brief Append a range at the end of the vector. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + */ + template<__detail::__container_compatible_range<_Tp> _Rg> + constexpr void + append_range(_Rg&& __rg) + { + // N.B. __rg may overlap with *this, so we must copy from __rg before + // existing elements or iterators referring to *this are invalidated. + // e.g. in v.append_range(views::concat(v, foo)) rg overlaps v. + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + const auto __n = size_type(ranges::distance(__rg)); + + // If there is no existing storage, there are no iterators that + // can be referring to our storage, so it's safe to allocate now. + if (capacity() == 0) + reserve(__n); + + const auto __sz = size(); + const auto __capacity = capacity(); + if ((__capacity - __sz) >= __n) + { + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + _Base::_M_append_range(__rg); + _GLIBCXX_ASAN_ANNOTATE_GREW(__n); + return; + } + + const size_type __len = _M_check_len(__n, "vector::append_range"); + + pointer __old_start = this->_M_impl._M_start; + pointer __old_finish = this->_M_impl._M_finish; + + allocator_type& __a = _M_get_Tp_allocator(); + const pointer __start = this->_M_allocate(__len); + const pointer __mid = __start + __sz; + const pointer __back = __mid + __n; + _Guard_alloc __guard(__start, __len, *this); + std::__uninitialized_copy_a(ranges::begin(__rg), + ranges::end(__rg), + __mid, __a); + + if constexpr (_S_use_relocate()) + _S_relocate(__old_start, __old_finish, __start, __a); + else + { + // RAII type to destroy initialized elements. + struct _Guard_elts + { + pointer _M_first, _M_last; // Elements to destroy + _Tp_alloc_type& _M_alloc; + + constexpr + _Guard_elts(pointer __f, pointer __l, _Tp_alloc_type& __a) + : _M_first(__f), _M_last(__l), _M_alloc(__a) + { } + + constexpr + ~_Guard_elts() + { std::_Destroy(_M_first, _M_last, _M_alloc); } + + _Guard_elts(_Guard_elts&&) = delete; + }; + _Guard_elts __guard_elts{__mid, __back, __a}; + + std::__uninitialized_move_a(__old_start, __old_finish, + __start, __a); + + // Let old elements get destroyed by __guard_elts: + __guard_elts._M_first = __old_start; + __guard_elts._M_last = __old_finish; + } + + // Now give ownership of old storage to __guard: + __guard._M_storage = __old_start; + __guard._M_len = __capacity; + // Finally, take ownership of new storage: + this->_M_impl._M_start = __start; + this->_M_impl._M_finish = __back; + this->_M_impl._M_end_of_storage = __start + __len; + } + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + + // Fill up to the end of current capacity. + for (auto __free = capacity() - size(); + __first != __last && __free > 0; + ++__first, (void) --__free) + emplace_back(*__first); + + if (__first == __last) + return; + + // Copy the rest of the range to a new vector. + vector __tmp(_M_get_Tp_allocator()); + for (; __first != __last; ++__first) + __tmp.emplace_back(*__first); + reserve(_M_check_len(__tmp.size(), "vector::append_range")); + ranges::subrange __r(std::make_move_iterator(__tmp.begin()), + std::make_move_iterator(__tmp.end())); + append_range(__r); // This will take the fast path above. + } + } +#endif // containers_ranges + + /** + * @brief Remove element at given position. + * @param __position Iterator pointing to element to be erased. + * @return An iterator pointing to the next element (or end()). + * + * This function will erase the element at the given position and thus + * shorten the %vector by one. + * + * Note This operation could be expensive and if it is + * frequently used the user should consider using std::list. + * The user is also cautioned that this function only erases + * the element, and that if the element is itself a pointer, + * the pointed-to memory is not touched in any way. Managing + * the pointer is the user's responsibility. + */ + _GLIBCXX20_CONSTEXPR + iterator +#if __cplusplus >= 201103L + erase(const_iterator __position) + { return _M_erase(begin() + (__position - cbegin())); } +#else + erase(iterator __position) + { return _M_erase(__position); } +#endif + + /** + * @brief Remove a range of elements. + * @param __first Iterator pointing to the first element to be erased. + * @param __last Iterator pointing to one past the last element to be + * erased. + * @return An iterator pointing to the element pointed to by @a __last + * prior to erasing (or end()). + * + * This function will erase the elements in the range + * [__first,__last) and shorten the %vector accordingly. + * + * Note This operation could be expensive and if it is + * frequently used the user should consider using std::list. + * The user is also cautioned that this function only erases + * the elements, and that if the elements themselves are + * pointers, the pointed-to memory is not touched in any way. + * Managing the pointer is the user's responsibility. + */ + _GLIBCXX20_CONSTEXPR + iterator +#if __cplusplus >= 201103L + erase(const_iterator __first, const_iterator __last) + { + const auto __beg = begin(); + const auto __cbeg = cbegin(); + return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg)); + } +#else + erase(iterator __first, iterator __last) + { return _M_erase(__first, __last); } +#endif + + /** + * @brief Swaps data with another %vector. + * @param __x A %vector of the same element and allocator types. + * + * This exchanges the elements between two vectors in constant time. + * (Three pointers, so it should be quite fast.) + * Note that the global std::swap() function is specialized such that + * std::swap(v1,v2) will feed to this function. + * + * Whether the allocators are swapped depends on the allocator traits. + */ + _GLIBCXX20_CONSTEXPR + void + swap(vector& __x) _GLIBCXX_NOEXCEPT + { +#if __cplusplus >= 201103L + __glibcxx_assert(_Alloc_traits::propagate_on_container_swap::value + || _M_get_Tp_allocator() == __x._M_get_Tp_allocator()); +#endif + this->_M_impl._M_swap_data(__x._M_impl); + _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), + __x._M_get_Tp_allocator()); + } + + /** + * Erases all the elements. Note that this function only erases the + * elements, and that if the elements themselves are pointers, the + * pointed-to memory is not touched in any way. Managing the pointer is + * the user's responsibility. + */ + _GLIBCXX20_CONSTEXPR + void + clear() _GLIBCXX_NOEXCEPT + { _M_erase_at_end(this->_M_impl._M_start); } + + private: + // RAII guard for allocated storage. + struct _Guard_alloc + { + pointer _M_storage; // Storage to deallocate + size_type _M_len; + _Base& _M_vect; + + _GLIBCXX20_CONSTEXPR + _Guard_alloc(pointer __s, size_type __l, _Base& __vect) + : _M_storage(__s), _M_len(__l), _M_vect(__vect) + { } + + _GLIBCXX20_CONSTEXPR + ~_Guard_alloc() + { + if (_M_storage) + _M_vect._M_deallocate(_M_storage, _M_len); + } + + _GLIBCXX20_CONSTEXPR + pointer + _M_release() + { + pointer __res = _M_storage; + _M_storage = pointer(); + return __res; + } + + private: + _Guard_alloc(const _Guard_alloc&); + }; + + protected: + /** + * Memory expansion handler. Uses the member allocation function to + * obtain @a n bytes of memory, and then copies [first,last) into it. + */ + template + _GLIBCXX20_CONSTEXPR + pointer + _M_allocate_and_copy(size_type __n, + _ForwardIterator __first, _ForwardIterator __last) + { + _Guard_alloc __guard(this->_M_allocate(__n), __n, *this); + std::__uninitialized_copy_a + (__first, __last, __guard._M_storage, _M_get_Tp_allocator()); + return __guard._M_release(); + } + + + // Internal constructor functions follow. + + // Called by the range constructor to implement [23.1.1]/9 + +#if __cplusplus < 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 438. Ambiguity in the "do the right thing" clause + template + void + _M_initialize_dispatch(_Integer __int_n, _Integer __value, __true_type) + { + const size_type __n = static_cast(__int_n); + pointer __start = + _M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator())); + this->_M_impl._M_start = __start; + this->_M_impl._M_end_of_storage = __start + __n; + _M_fill_initialize(__n, __value); + } + + // Called by the range constructor to implement [23.1.1]/9 + template + void + _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, + __false_type) + { + _M_range_initialize(__first, __last, + std::__iterator_category(__first)); + } +#endif + + // Called by the second initialize_dispatch above + template + _GLIBCXX20_CONSTEXPR + void + _M_range_initialize(_InputIterator __first, _InputIterator __last, + std::input_iterator_tag) + { + __try { + for (; __first != __last; ++__first) +#if __cplusplus >= 201103L + emplace_back(*__first); +#else + push_back(*__first); +#endif + } __catch(...) { + clear(); + __throw_exception_again; + } + } + + // Called by the second initialize_dispatch above + template + _GLIBCXX20_CONSTEXPR + void + _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, + std::forward_iterator_tag) + { + _M_range_initialize_n(__first, __last, + std::distance(__first, __last)); + } + + template + _GLIBCXX20_CONSTEXPR + void + _M_range_initialize_n(_Iterator __first, _Sentinel __last, + size_type __n) + { + pointer __start = + this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator())); + this->_M_impl._M_start = this->_M_impl._M_finish = __start; + this->_M_impl._M_end_of_storage = __start + __n; + this->_M_impl._M_finish + = std::__uninitialized_copy_a(_GLIBCXX_MOVE(__first), __last, + __start, _M_get_Tp_allocator()); + } + + // Called by the first initialize_dispatch above and by the + // vector(n,value,a) constructor. + _GLIBCXX20_CONSTEXPR + void + _M_fill_initialize(size_type __n, const value_type& __value) + { + this->_M_impl._M_finish = + std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value, + _M_get_Tp_allocator()); + } + +#if __cplusplus >= 201103L + // Called by the vector(n) constructor. + _GLIBCXX20_CONSTEXPR + void + _M_default_initialize(size_type __n) + { + this->_M_impl._M_finish = + std::__uninitialized_default_n_a(this->_M_impl._M_start, __n, + _M_get_Tp_allocator()); + } +#endif + + // Internal assign functions follow. The *_aux functions do the actual + // assignment work for the range versions. + + // Called by the range assign to implement [23.1.1]/9 + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 438. Ambiguity in the "do the right thing" clause + template + _GLIBCXX20_CONSTEXPR + void + _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) + { _M_fill_assign(__n, __val); } + + // Called by the range assign to implement [23.1.1]/9 + template + _GLIBCXX20_CONSTEXPR + void + _M_assign_dispatch(_InputIterator __first, _InputIterator __last, + __false_type) + { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } + + // Called by the second assign_dispatch above + template + _GLIBCXX20_CONSTEXPR + void + _M_assign_aux(_InputIterator __first, _InputIterator __last, + std::input_iterator_tag); + + // Called by the second assign_dispatch above + template + _GLIBCXX20_CONSTEXPR + void + _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, + std::forward_iterator_tag); + + // Called by assign(n,t), and the range assign when it turns out + // to be the same thing. + _GLIBCXX20_CONSTEXPR + void + _M_fill_assign(size_type __n, const value_type& __val); + + // Internal insert functions follow. + + // Called by the range insert to implement [23.1.1]/9 + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 438. Ambiguity in the "do the right thing" clause + template + _GLIBCXX20_CONSTEXPR + void + _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, + __true_type) + { _M_fill_insert(__pos, __n, __val); } + + // Called by the range insert to implement [23.1.1]/9 + template + _GLIBCXX20_CONSTEXPR + void + _M_insert_dispatch(iterator __pos, _InputIterator __first, + _InputIterator __last, __false_type) + { + _M_range_insert(__pos, __first, __last, + std::__iterator_category(__first)); + } + + // Called by the second insert_dispatch above + template + _GLIBCXX20_CONSTEXPR + void + _M_range_insert(iterator __pos, _InputIterator __first, + _InputIterator __last, std::input_iterator_tag); + + // Called by the second insert_dispatch above + template + _GLIBCXX20_CONSTEXPR + void + _M_range_insert(iterator __pos, _ForwardIterator __first, + _ForwardIterator __last, std::forward_iterator_tag); + + // Called by insert(p,n,x), and the range insert when it turns out to be + // the same thing. + _GLIBCXX20_CONSTEXPR + void + _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); + + // Called by resize(n,x), and the _M_fill_insert(end(), n, x) + _GLIBCXX20_CONSTEXPR + void + _M_fill_append(size_type __n, const value_type& __x); + +#if __cplusplus >= 201103L + // Called by resize(n). + _GLIBCXX20_CONSTEXPR + void + _M_default_append(size_type __n); + + _GLIBCXX20_CONSTEXPR + bool + _M_shrink_to_fit(); +#endif + +#if __cplusplus < 201103L + // Called by insert(p,x) + void + _M_insert_aux(iterator __position, const value_type& __x); + + void + _M_realloc_insert(iterator __position, const value_type& __x); + + void + _M_realloc_append(const value_type& __x); +#else + // A value_type object constructed with _Alloc_traits::construct() + // and destroyed with _Alloc_traits::destroy(). + struct _Temporary_value + { + template + _GLIBCXX20_CONSTEXPR explicit + _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec) + { + _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(), + std::forward<_Args>(__args)...); + } + + _GLIBCXX20_CONSTEXPR + ~_Temporary_value() + { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); } + + _GLIBCXX20_CONSTEXPR value_type& + _M_val() noexcept { return _M_storage._M_val; } + + private: + _GLIBCXX20_CONSTEXPR _Tp* + _M_ptr() noexcept { return std::__addressof(_M_storage._M_val); } + + union _Storage + { + constexpr _Storage() : _M_byte() { } + _GLIBCXX20_CONSTEXPR ~_Storage() { } + _Storage& operator=(const _Storage&) = delete; + unsigned char _M_byte; + _Tp _M_val; + }; + + vector* _M_this; + _Storage _M_storage; + }; + + // Called by insert(p,x) and other functions when insertion needs to + // reallocate or move existing elements. _Arg is either _Tp& or _Tp. + template + _GLIBCXX20_CONSTEXPR + void + _M_insert_aux(iterator __position, _Arg&& __arg); + + template + _GLIBCXX20_CONSTEXPR + void + _M_realloc_insert(iterator __position, _Args&&... __args); + + template + _GLIBCXX20_CONSTEXPR + void + _M_realloc_append(_Args&&... __args); + + // Either move-construct at the end, or forward to _M_insert_aux. + _GLIBCXX20_CONSTEXPR + iterator + _M_insert_rval(const_iterator __position, value_type&& __v); + + // Try to emplace at the end, otherwise forward to _M_insert_aux. + template + _GLIBCXX20_CONSTEXPR + iterator + _M_emplace_aux(const_iterator __position, _Args&&... __args); + + // Emplacing an rvalue of the correct type can use _M_insert_rval. + _GLIBCXX20_CONSTEXPR + iterator + _M_emplace_aux(const_iterator __position, value_type&& __v) + { return _M_insert_rval(__position, std::move(__v)); } +#endif + + // Called by _M_fill_insert, _M_insert_aux etc. + _GLIBCXX20_CONSTEXPR + size_type + _M_check_len(size_type __n, const char* __s) const + { + if (max_size() - size() < __n) + __throw_length_error(__N(__s)); + + const size_type __len = size() + (std::max)(size(), __n); + return (__len < size() || __len > max_size()) ? max_size() : __len; + } + + // Called by constructors to check initial size. + static _GLIBCXX20_CONSTEXPR size_type + _S_check_init_len(size_type __n, const allocator_type& __a) + { + if (__n > _S_max_size(_Tp_alloc_type(__a))) + __throw_length_error( + __N("cannot create std::vector larger than max_size()")); + return __n; + } + + static _GLIBCXX20_CONSTEXPR size_type + _S_max_size(const _Tp_alloc_type& __a) _GLIBCXX_NOEXCEPT + { + // std::distance(begin(), end()) cannot be greater than PTRDIFF_MAX, + // and realistically we can't store more than PTRDIFF_MAX/sizeof(T) + // (even if std::allocator_traits::max_size says we can). + const size_t __diffmax + = __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); + const size_t __allocmax = _Alloc_traits::max_size(__a); + return (std::min)(__diffmax, __allocmax); + } + + // Internal erase functions follow. + + // Called by erase(q1,q2), clear(), resize(), _M_fill_assign, + // _M_assign_aux. + _GLIBCXX20_CONSTEXPR + void + _M_erase_at_end(pointer __pos) _GLIBCXX_NOEXCEPT + { + if (size_type __n = this->_M_impl._M_finish - __pos) + { + std::_Destroy(__pos, this->_M_impl._M_finish, + _M_get_Tp_allocator()); + this->_M_impl._M_finish = __pos; + _GLIBCXX_ASAN_ANNOTATE_SHRINK(__n); + } + } + + _GLIBCXX20_CONSTEXPR + iterator + _M_erase(iterator __position); + + _GLIBCXX20_CONSTEXPR + iterator + _M_erase(iterator __first, iterator __last); + +#if __cplusplus >= 201103L + private: + // Constant-time move assignment when source object's memory can be + // moved, either because the source's allocator will move too + // or because the allocators are equal. + _GLIBCXX20_CONSTEXPR + void + _M_move_assign(vector&& __x, true_type) noexcept + { + vector __tmp(get_allocator()); + this->_M_impl._M_swap_data(__x._M_impl); + __tmp._M_impl._M_swap_data(__x._M_impl); + std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); + } + + // Do move assignment when it might not be possible to move source + // object's memory, resulting in a linear-time operation. + _GLIBCXX20_CONSTEXPR + void + _M_move_assign(vector&& __x, false_type) + { + if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) + _M_move_assign(std::move(__x), true_type()); + else + { + // The rvalue's allocator cannot be moved and is not equal, + // so we need to individually move each element. + this->_M_assign_aux(std::make_move_iterator(__x.begin()), + std::make_move_iterator(__x.end()), + std::random_access_iterator_tag()); + __x.clear(); + } + } +#endif + + template + _GLIBCXX20_CONSTEXPR + _Up* + _M_data_ptr(_Up* __ptr) const _GLIBCXX_NOEXCEPT + { return __ptr; } + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + typename std::pointer_traits<_Ptr>::element_type* + _M_data_ptr(_Ptr __ptr) const + { return empty() ? nullptr : std::__to_address(__ptr); } +#else + template + value_type* + _M_data_ptr(_Ptr __ptr) const + { return empty() ? (value_type*)0 : __ptr.operator->(); } +#endif + }; + +#if __cpp_deduction_guides >= 201606 + template::value_type, + typename _Allocator = allocator<_ValT>, + typename = _RequireInputIter<_InputIterator>, + typename = _RequireAllocator<_Allocator>> + vector(_InputIterator, _InputIterator, _Allocator = _Allocator()) + -> vector<_ValT, _Allocator>; + +#if __glibcxx_containers_ranges // C++ >= 23 + template>> + vector(from_range_t, _Rg&&, _Alloc = _Alloc()) + -> vector, _Alloc>; +#endif +#endif + + /** + * @brief Vector equality comparison. + * @param __x A %vector. + * @param __y A %vector of the same type as @a __x. + * @return True iff the size and elements of the vectors are equal. + * + * This is an equivalence relation. It is linear in the size of the + * vectors. Vectors are considered equivalent if their sizes are equal, + * and if corresponding elements compare equal. + */ + template + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR + inline bool + operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { return (__x.size() == __y.size() + && std::equal(__x.begin(), __x.end(), __y.begin())); } + +#if __cpp_lib_three_way_comparison // >= C++20 + /** + * @brief Vector ordering relation. + * @param __x A `vector`. + * @param __y A `vector` of the same type as `__x`. + * @return A value indicating whether `__x` is less than, equal to, + * greater than, or incomparable with `__y`. + * + * See `std::lexicographical_compare_three_way()` for how the determination + * is made. This operator is used to synthesize relational operators like + * `<` and `>=` etc. + */ + template + [[nodiscard]] + constexpr __detail::__synth3way_t<_Tp> + operator<=>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { + return std::lexicographical_compare_three_way(__x.begin(), __x.end(), + __y.begin(), __y.end(), + __detail::__synth3way); + } +#else + /** + * @brief Vector ordering relation. + * @param __x A %vector. + * @param __y A %vector of the same type as @a __x. + * @return True iff @a __x is lexicographically less than @a __y. + * + * This is a total ordering relation. It is linear in the size of the + * vectors. The elements must be comparable with @c <. + * + * See std::lexicographical_compare() for how the determination is made. + */ + template + _GLIBCXX_NODISCARD inline bool + operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { return std::lexicographical_compare(__x.begin(), __x.end(), + __y.begin(), __y.end()); } + + /// Based on operator== + template + _GLIBCXX_NODISCARD inline bool + operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { return !(__x == __y); } + + /// Based on operator< + template + _GLIBCXX_NODISCARD inline bool + operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { return __y < __x; } + + /// Based on operator< + template + _GLIBCXX_NODISCARD inline bool + operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { return !(__y < __x); } + + /// Based on operator< + template + _GLIBCXX_NODISCARD inline bool + operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { return !(__x < __y); } +#endif // three-way comparison + + /// See std::vector::swap(). + template + _GLIBCXX20_CONSTEXPR + inline void + swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y) + _GLIBCXX_NOEXCEPT_IF(noexcept(__x.swap(__y))) + { __x.swap(__y); } + +_GLIBCXX_END_NAMESPACE_CONTAINER + +#if __cplusplus >= 201703L + namespace __detail::__variant + { + template struct _Never_valueless_alt; // see + + // Provide the strong exception-safety guarantee when emplacing a + // vector into a variant, but only if move assignment cannot throw. + template + struct _Never_valueless_alt<_GLIBCXX_STD_C::vector<_Tp, _Alloc>> + : std::is_nothrow_move_assignable<_GLIBCXX_STD_C::vector<_Tp, _Alloc>> + { }; + } // namespace __detail::__variant +#endif // C++17 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif /* _STL_VECTOR_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_vector.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stl_vector.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4126ead87e650361047005855d99867a43445d00 GIT binary patch literal 110246 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%0Dx{=>cI+g9=1xJI#ZoHs5_2Uvv~QOB7%U3UpZ- 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 l!!FYVdl279jWV0XUuEb>jWYP!O7xK$RW^&is%$. + +/** @file bits/streambuf.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{streambuf} + */ + +// +// ISO C++ 14882: 27.5 Stream buffers +// + +#ifndef _STREAMBUF_TCC +#define _STREAMBUF_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + streamsize + basic_streambuf<_CharT, _Traits>:: + xsgetn(char_type* __s, streamsize __n) + { + streamsize __ret = 0; + while (__ret < __n) + { + const streamsize __buf_len = this->egptr() - this->gptr(); + if (__buf_len) + { + const streamsize __remaining = __n - __ret; + const streamsize __len = std::min(__buf_len, __remaining); + traits_type::copy(__s, this->gptr(), __len); + __ret += __len; + __s += __len; + this->__safe_gbump(__len); + } + + if (__ret < __n) + { + const int_type __c = this->uflow(); + if (!traits_type::eq_int_type(__c, traits_type::eof())) + { + traits_type::assign(*__s++, traits_type::to_char_type(__c)); + ++__ret; + } + else + break; + } + } + return __ret; + } + + template + streamsize + basic_streambuf<_CharT, _Traits>:: + xsputn(const char_type* __s, streamsize __n) + { + streamsize __ret = 0; + while (__ret < __n) + { + const streamsize __buf_len = this->epptr() - this->pptr(); + if (__buf_len) + { + const streamsize __remaining = __n - __ret; + const streamsize __len = std::min(__buf_len, __remaining); + traits_type::copy(this->pptr(), __s, __len); + __ret += __len; + __s += __len; + this->__safe_pbump(__len); + } + + if (__ret < __n) + { + int_type __c = this->overflow(traits_type::to_int_type(*__s)); + if (!traits_type::eq_int_type(__c, traits_type::eof())) + { + ++__ret; + ++__s; + } + else + break; + } + } + return __ret; + } + + // Conceivably, this could be used to implement buffer-to-buffer + // copies, if this was ever desired in an un-ambiguous way by the + // standard. + template + streamsize + __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin, + basic_streambuf<_CharT, _Traits>* __sbout, + bool& __ineof) + { + streamsize __ret = 0; + __ineof = true; + typename _Traits::int_type __c = __sbin->sgetc(); + while (!_Traits::eq_int_type(__c, _Traits::eof())) + { + __c = __sbout->sputc(_Traits::to_char_type(__c)); + if (_Traits::eq_int_type(__c, _Traits::eof())) + { + __ineof = false; + break; + } + ++__ret; + __c = __sbin->snextc(); + } + return __ret; + } + + template + inline streamsize + __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin, + basic_streambuf<_CharT, _Traits>* __sbout) + { + bool __ineof; + return __copy_streambufs_eof(__sbin, __sbout, __ineof); + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class basic_streambuf; + + extern template + streamsize + __copy_streambufs(basic_streambuf*, + basic_streambuf*); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class basic_streambuf; + + extern template + streamsize + __copy_streambufs(basic_streambuf*, + basic_streambuf*); +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#pragma GCC diagnostic pop +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..c7822edb8392f3531df7749c9b1e8e5d50312229 GIT binary patch literal 19942 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 K@ni|fFaiK8yQNhC literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf_iterator.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf_iterator.h new file mode 100644 index 0000000..d426e55 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf_iterator.h @@ -0,0 +1,522 @@ +// Streambuf iterators + +// Copyright (C) 1997-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/streambuf_iterator.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iterator} + */ + +#ifndef _STREAMBUF_ITERATOR_H +#define _STREAMBUF_ITERATOR_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup iterators + * @{ + */ + +// Ignore warnings about std::iterator. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + // 24.5.3 Template class istreambuf_iterator + /// Provides input iterator semantics for streambufs. + template + class istreambuf_iterator + : public iterator + { + public: + // Types: + ///@{ + /// Public typedefs +#if __cplusplus < 201103L + typedef _CharT& reference; // Changed to _CharT by LWG 445 +#elif __cplusplus > 201703L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3188. istreambuf_iterator::pointer should not be unspecified + using pointer = void; +#endif + + typedef _CharT char_type; + typedef _Traits traits_type; + typedef typename _Traits::int_type int_type; + typedef basic_streambuf<_CharT, _Traits> streambuf_type; + typedef basic_istream<_CharT, _Traits> istream_type; + ///@} + + template + friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, + ostreambuf_iterator<_CharT2> >::__type + copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, + ostreambuf_iterator<_CharT2>); + + template + friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, + _CharT2*>::__type + __copy_move_a2(istreambuf_iterator<_CharT2>, + istreambuf_iterator<_CharT2>, _CharT2*); + + template + friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, + _CharT2*>::__type + __copy_n_a(istreambuf_iterator<_CharT2>, _Size, _CharT2*, bool); + + template + friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, + istreambuf_iterator<_CharT2> >::__type + find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, + const _CharT2&); + + template + friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, + void>::__type + advance(istreambuf_iterator<_CharT2>&, _Distance); + + private: + // 24.5.3 istreambuf_iterator + // p 1 + // If the end of stream is reached (streambuf_type::sgetc() + // returns traits_type::eof()), the iterator becomes equal to + // the "end of stream" iterator value. + // NB: This implementation assumes the "end of stream" value + // is EOF, or -1. + mutable streambuf_type* _M_sbuf; + int_type _M_c; + + public: + /// Construct end of input stream iterator. + _GLIBCXX_CONSTEXPR istreambuf_iterator() _GLIBCXX_USE_NOEXCEPT + : _M_sbuf(0), _M_c(traits_type::eof()) { } + +#if __cplusplus > 201703L && __cpp_lib_concepts + constexpr istreambuf_iterator(default_sentinel_t) noexcept + : istreambuf_iterator() { } +#endif + +#if __cplusplus >= 201103L + istreambuf_iterator(const istreambuf_iterator&) noexcept = default; + + ~istreambuf_iterator() = default; +#endif + + /// Construct start of input stream iterator. + istreambuf_iterator(istream_type& __s) _GLIBCXX_USE_NOEXCEPT + : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { } + + /// Construct start of streambuf iterator. + istreambuf_iterator(streambuf_type* __s) _GLIBCXX_USE_NOEXCEPT + : _M_sbuf(__s), _M_c(traits_type::eof()) { } + +#if __cplusplus >= 201103L + istreambuf_iterator& + operator=(const istreambuf_iterator&) noexcept = default; +#endif + + /// Return the current character pointed to by iterator. This returns + /// streambuf.sgetc(). It cannot be assigned. NB: The result of + /// operator*() on an end of stream is undefined. + _GLIBCXX_NODISCARD + char_type + operator*() const + { + int_type __c = _M_get(); + +#ifdef _GLIBCXX_DEBUG_PEDANTIC + // Dereferencing a past-the-end istreambuf_iterator is a + // libstdc++ extension + __glibcxx_requires_cond(!_S_is_eof(__c), + _M_message(__gnu_debug::__msg_deref_istreambuf) + ._M_iterator(*this)); +#endif + return traits_type::to_char_type(__c); + } + + /// Advance the iterator. Calls streambuf.sbumpc(). + istreambuf_iterator& + operator++() + { + __glibcxx_requires_cond(_M_sbuf && + (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())), + _M_message(__gnu_debug::__msg_inc_istreambuf) + ._M_iterator(*this)); + + _M_sbuf->sbumpc(); + _M_c = traits_type::eof(); + return *this; + } + + /// Advance the iterator. Calls streambuf.sbumpc(). + istreambuf_iterator + operator++(int) + { + __glibcxx_requires_cond(_M_sbuf && + (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())), + _M_message(__gnu_debug::__msg_inc_istreambuf) + ._M_iterator(*this)); + + istreambuf_iterator __old = *this; + __old._M_c = _M_sbuf->sbumpc(); + _M_c = traits_type::eof(); + return __old; + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 110 istreambuf_iterator::equal not const + // NB: there is also number 111 (NAD) relevant to this function. + /// Return true both iterators are end or both are not end. + _GLIBCXX_NODISCARD + bool + equal(const istreambuf_iterator& __b) const + { return _M_at_eof() == __b._M_at_eof(); } + + private: + int_type + _M_get() const + { + int_type __ret = _M_c; + if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->sgetc())) + _M_sbuf = 0; + return __ret; + } + + bool + _M_at_eof() const + { return _S_is_eof(_M_get()); } + + static bool + _S_is_eof(int_type __c) + { + const int_type __eof = traits_type::eof(); + return traits_type::eq_int_type(__c, __eof); + } + +#if __cplusplus > 201703L && __cpp_lib_concepts + [[nodiscard]] + friend bool + operator==(const istreambuf_iterator& __i, default_sentinel_t) + { return __i._M_at_eof(); } +#endif + }; + + template + _GLIBCXX_NODISCARD + inline bool + operator==(const istreambuf_iterator<_CharT, _Traits>& __a, + const istreambuf_iterator<_CharT, _Traits>& __b) + { return __a.equal(__b); } + +#if __cpp_impl_three_way_comparison < 201907L + template + _GLIBCXX_NODISCARD + inline bool + operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, + const istreambuf_iterator<_CharT, _Traits>& __b) + { return !__a.equal(__b); } +#endif + + /// Provides output iterator semantics for streambufs. + template + class ostreambuf_iterator + : public iterator + { + public: + // Types: + ///@{ + /// Public typedefs +#if __cplusplus > 201703L + using difference_type = ptrdiff_t; +#endif + typedef _CharT char_type; + typedef _Traits traits_type; + typedef basic_streambuf<_CharT, _Traits> streambuf_type; + typedef basic_ostream<_CharT, _Traits> ostream_type; + ///@} + + template + friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, + ostreambuf_iterator<_CharT2> >::__type + copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, + ostreambuf_iterator<_CharT2>); + + private: + streambuf_type* _M_sbuf; + bool _M_failed; + + public: + +#if __cplusplus > 201703L + constexpr + ostreambuf_iterator() noexcept + : _M_sbuf(nullptr), _M_failed(true) { } +#endif + + /// Construct output iterator from ostream. + ostreambuf_iterator(ostream_type& __s) _GLIBCXX_USE_NOEXCEPT + : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { } + + /// Construct output iterator from streambuf. + ostreambuf_iterator(streambuf_type* __s) _GLIBCXX_USE_NOEXCEPT + : _M_sbuf(__s), _M_failed(!_M_sbuf) { } + + /// Write character to streambuf. Calls streambuf.sputc(). + ostreambuf_iterator& + operator=(_CharT __c) + { + if (!_M_failed && + _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof())) + _M_failed = true; + return *this; + } + + /// Return *this. + _GLIBCXX_NODISCARD + ostreambuf_iterator& + operator*() + { return *this; } + + /// Return *this. + ostreambuf_iterator& + operator++(int) + { return *this; } + + /// Return *this. + ostreambuf_iterator& + operator++() + { return *this; } + + /// Return true if previous operator=() failed. + _GLIBCXX_NODISCARD + bool + failed() const _GLIBCXX_USE_NOEXCEPT + { return _M_failed; } + + ostreambuf_iterator& + _M_put(const _CharT* __ws, streamsize __len) + { + if (__builtin_expect(!_M_failed, true) + && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len, + false)) + _M_failed = true; + return *this; + } + }; +#pragma GCC diagnostic pop + + // Overloads for streambuf iterators. + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + ostreambuf_iterator<_CharT> >::__type + copy(istreambuf_iterator<_CharT> __first, + istreambuf_iterator<_CharT> __last, + ostreambuf_iterator<_CharT> __result) + { + if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed) + { + bool __ineof; + __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof); + if (!__ineof) + __result._M_failed = true; + } + return __result; + } + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + ostreambuf_iterator<_CharT> >::__type + __copy_move_a2(_CharT* __first, _CharT* __last, + ostreambuf_iterator<_CharT> __result) + { + const streamsize __num = __last - __first; + if (__num > 0) + __result._M_put(__first, __num); + return __result; + } + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + ostreambuf_iterator<_CharT> >::__type + __copy_move_a2(const _CharT* __first, const _CharT* __last, + ostreambuf_iterator<_CharT> __result) + { + const streamsize __num = __last - __first; + if (__num > 0) + __result._M_put(__first, __num); + return __result; + } + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + _CharT*>::__type + __copy_move_a2(istreambuf_iterator<_CharT> __first, + istreambuf_iterator<_CharT> __last, _CharT* __result) + { + typedef istreambuf_iterator<_CharT> __is_iterator_type; + typedef typename __is_iterator_type::traits_type traits_type; + typedef typename __is_iterator_type::streambuf_type streambuf_type; + typedef typename traits_type::int_type int_type; + + if (__first._M_sbuf && !__last._M_sbuf) + { + streambuf_type* __sb = __first._M_sbuf; + int_type __c = __sb->sgetc(); + while (!traits_type::eq_int_type(__c, traits_type::eof())) + { + const streamsize __n = __sb->egptr() - __sb->gptr(); + if (__n > 1) + { + traits_type::copy(__result, __sb->gptr(), __n); + __sb->__safe_gbump(__n); + __result += __n; + __c = __sb->underflow(); + } + else + { + *__result++ = traits_type::to_char_type(__c); + __c = __sb->snextc(); + } + } + } + return __result; + } + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + _CharT*>::__type + __copy_n_a(istreambuf_iterator<_CharT> __it, _Size __n, _CharT* __result, + bool __strict __attribute__((__unused__))) + { + if (__n == 0) + return __result; + + __glibcxx_requires_cond(__it._M_sbuf, + _M_message(__gnu_debug::__msg_inc_istreambuf) + ._M_iterator(__it)); + _CharT* __beg = __result; + __result += __it._M_sbuf->sgetn(__beg, __n); + __glibcxx_requires_cond(!__strict || __result - __beg == __n, + _M_message(__gnu_debug::__msg_inc_istreambuf) + ._M_iterator(__it)); + return __result; + } + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + istreambuf_iterator<_CharT> >::__type + find(istreambuf_iterator<_CharT> __first, + istreambuf_iterator<_CharT> __last, const _CharT& __val) + { + typedef istreambuf_iterator<_CharT> __is_iterator_type; + typedef typename __is_iterator_type::traits_type traits_type; + typedef typename __is_iterator_type::streambuf_type streambuf_type; + typedef typename traits_type::int_type int_type; + const int_type __eof = traits_type::eof(); + + if (__first._M_sbuf && !__last._M_sbuf) + { + const int_type __ival = traits_type::to_int_type(__val); + streambuf_type* __sb = __first._M_sbuf; + int_type __c = __sb->sgetc(); + while (!traits_type::eq_int_type(__c, __eof) + && !traits_type::eq_int_type(__c, __ival)) + { + streamsize __n = __sb->egptr() - __sb->gptr(); + if (__n > 1) + { + const _CharT* __p = traits_type::find(__sb->gptr(), + __n, __val); + if (__p) + __n = __p - __sb->gptr(); + __sb->__safe_gbump(__n); + __c = __sb->sgetc(); + } + else + __c = __sb->snextc(); + } + + __first._M_c = __eof; + } + + return __first; + } + + template + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, + void>::__type + advance(istreambuf_iterator<_CharT>& __i, _Distance __n) + { + if (__n == 0) + return; + + __glibcxx_assert(__n > 0); + __glibcxx_requires_cond(!__i._M_at_eof(), + _M_message(__gnu_debug::__msg_inc_istreambuf) + ._M_iterator(__i)); + + typedef istreambuf_iterator<_CharT> __is_iterator_type; + typedef typename __is_iterator_type::traits_type traits_type; + typedef typename __is_iterator_type::streambuf_type streambuf_type; + typedef typename traits_type::int_type int_type; + const int_type __eof = traits_type::eof(); + + streambuf_type* __sb = __i._M_sbuf; + while (__n > 0) + { + streamsize __size = __sb->egptr() - __sb->gptr(); + if (__size > __n) + { + __sb->__safe_gbump(__n); + break; + } + + __sb->__safe_gbump(__size); + __n -= __size; + if (traits_type::eq_int_type(__sb->underflow(), __eof)) + { + __glibcxx_requires_cond(__n == 0, + _M_message(__gnu_debug::__msg_inc_istreambuf) + ._M_iterator(__i)); + break; + } + } + + __i._M_c = __eof; + } + +/// @} group iterators + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf_iterator.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@streambuf_iterator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..aecc959aae54c8098f3afe279b3b1f9c70a7215e GIT binary patch literal 42680 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. + +/** @file include/bits/string_view.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{string_view} + */ + +// +// N3762 basic_string_view library +// + +#ifndef _GLIBCXX_STRING_VIEW_TCC +#define _GLIBCXX_STRING_VIEW_TCC 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#if __cplusplus >= 201703L + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find(const _CharT* __str, size_type __pos, size_type __n) const noexcept + { + __glibcxx_requires_string_len(__str, __n); + + if (__n == 0) + return __pos <= _M_len ? __pos : npos; + if (__pos >= _M_len) + return npos; + + const _CharT __elem0 = __str[0]; + const _CharT* __first = _M_str + __pos; + const _CharT* const __last = _M_str + _M_len; + size_type __len = _M_len - __pos; + + while (__len >= __n) + { + // Find the first occurrence of __elem0: + __first = traits_type::find(__first, __len - __n + 1, __elem0); + if (!__first) + return npos; + // Compare the full strings from the first occurrence of __elem0. + // We already know that __first[0] == __s[0] but compare them again + // anyway because __s is probably aligned, which helps memcmp. + if (traits_type::compare(__first, __str, __n) == 0) + return __first - _M_str; + __len = __last - ++__first; + } + return npos; + } + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find(_CharT __c, size_type __pos) const noexcept + { + size_type __ret = npos; + if (__pos < this->_M_len) + { + const size_type __n = this->_M_len - __pos; + const _CharT* __p = traits_type::find(this->_M_str + __pos, __n, __c); + if (__p) + __ret = __p - this->_M_str; + } + return __ret; + } + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept + { + __glibcxx_requires_string_len(__str, __n); + + if (__n <= this->_M_len) + { + __pos = std::min(size_type(this->_M_len - __n), __pos); + do + { + if (traits_type::compare(this->_M_str + __pos, __str, __n) == 0) + return __pos; + } + while (__pos-- > 0); + } + return npos; + } + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + rfind(_CharT __c, size_type __pos) const noexcept + { + size_type __size = this->_M_len; + if (__size > 0) + { + if (--__size > __pos) + __size = __pos; + for (++__size; __size-- > 0; ) + if (traits_type::eq(this->_M_str[__size], __c)) + return __size; + } + return npos; + } + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_of(const _CharT* __str, size_type __pos, + size_type __n) const noexcept + { + __glibcxx_requires_string_len(__str, __n); + for (; __n && __pos < this->_M_len; ++__pos) + { + const _CharT* __p = traits_type::find(__str, __n, + this->_M_str[__pos]); + if (__p) + return __pos; + } + return npos; + } + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_of(const _CharT* __str, size_type __pos, + size_type __n) const noexcept + { + __glibcxx_requires_string_len(__str, __n); + size_type __size = this->size(); + if (__size && __n) + { + if (--__size > __pos) + __size = __pos; + do + { + if (traits_type::find(__str, __n, this->_M_str[__size])) + return __size; + } + while (__size-- != 0); + } + return npos; + } + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_not_of(const _CharT* __str, size_type __pos, + size_type __n) const noexcept + { + __glibcxx_requires_string_len(__str, __n); + for (; __pos < this->_M_len; ++__pos) + if (!traits_type::find(__str, __n, this->_M_str[__pos])) + return __pos; + return npos; + } + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_not_of(_CharT __c, size_type __pos) const noexcept + { + for (; __pos < this->_M_len; ++__pos) + if (!traits_type::eq(this->_M_str[__pos], __c)) + return __pos; + return npos; + } + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_not_of(const _CharT* __str, size_type __pos, + size_type __n) const noexcept + { + __glibcxx_requires_string_len(__str, __n); + size_type __size = this->_M_len; + if (__size) + { + if (--__size > __pos) + __size = __pos; + do + { + if (!traits_type::find(__str, __n, this->_M_str[__size])) + return __size; + } + while (__size--); + } + return npos; + } + + template + constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_not_of(_CharT __c, size_type __pos) const noexcept + { + size_type __size = this->_M_len; + if (__size) + { + if (--__size > __pos) + __size = __pos; + do + { + if (!traits_type::eq(this->_M_str[__size], __c)) + return __size; + } + while (__size--); + } + return npos; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // __cplusplus <= 201402L + +#endif // _GLIBCXX_STRING_VIEW_TCC diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@string_view.tcc.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@string_view.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..371e82fd97c101655625a11e8d21986ea8b95e15 GIT binary patch literal 23460 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stringfwd.h b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stringfwd.h new file mode 100644 index 0000000..21fe7a3 --- /dev/null +++ b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stringfwd.h @@ -0,0 +1,102 @@ +// Forward declarations -*- C++ -*- + +// Copyright (C) 2001-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/stringfwd.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{string} + */ + +// +// ISO C++ 14882: 21 Strings library +// + +#ifndef _STRINGFWD_H +#define _STRINGFWD_H 1 + +#ifdef _GLIBCXX_SYSHDR +#pragma GCC system_header +#endif + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup strings Strings + * + * @{ + */ + + template + struct char_traits; + + template<> struct char_traits; + + template<> struct char_traits; + +#ifdef _GLIBCXX_USE_CHAR8_T + template<> struct char_traits; +#endif + +#if __cplusplus >= 201103L + template<> struct char_traits; + template<> struct char_traits; +#endif + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + template, + typename _Alloc = allocator<_CharT> > + class basic_string; + +_GLIBCXX_END_NAMESPACE_CXX11 + + /// A string of @c char + typedef basic_string string; + + /// A string of @c wchar_t + typedef basic_string wstring; + +#ifdef _GLIBCXX_USE_CHAR8_T + /// A string of @c char8_t + typedef basic_string u8string; +#endif + +#if __cplusplus >= 201103L + /// A string of @c char16_t + typedef basic_string u16string; + + /// A string of @c char32_t + typedef basic_string u32string; +#endif + + /** @} */ + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // _STRINGFWD_H diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stringfwd.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@stringfwd.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e4c7023d5d6e6f07e6587bce24046345635c9ee7 GIT binary patch literal 14074 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 y. + +/** @file bits/unique_ptr.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _UNIQUE_PTR_H +#define _UNIQUE_PTR_H 1 + +#include +#include +#include +#include +#include +#include +#if __cplusplus >= 202002L +# include +# if _GLIBCXX_HOSTED +# include +# endif +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup pointer_abstractions + * @{ + */ + +#if _GLIBCXX_USE_DEPRECATED +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + template class auto_ptr; +#pragma GCC diagnostic pop +#endif + + /** Primary template of default_delete, used by unique_ptr for single objects + * + * @headerfile memory + * @since C++11 + */ + template + struct default_delete + { + /// Default constructor + constexpr default_delete() noexcept = default; + + /** @brief Converting constructor. + * + * Allows conversion from a deleter for objects of another type, `_Up`, + * only if `_Up*` is convertible to `_Tp*`. + */ + template>> + _GLIBCXX23_CONSTEXPR + default_delete(const default_delete<_Up>&) noexcept { } + + /// Calls `delete __ptr` + _GLIBCXX23_CONSTEXPR + void + operator()(_Tp* __ptr) const + { + static_assert(!is_void<_Tp>::value, + "can't delete pointer to incomplete type"); + static_assert(sizeof(_Tp)>0, + "can't delete pointer to incomplete type"); + delete __ptr; + } + }; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 740 - omit specialization for array objects with a compile time length + + /** Specialization of default_delete for arrays, used by `unique_ptr` + * + * @headerfile memory + * @since C++11 + */ + template + struct default_delete<_Tp[]> + { + public: + /// Default constructor + constexpr default_delete() noexcept = default; + + /** @brief Converting constructor. + * + * Allows conversion from a deleter for arrays of another type, such as + * a const-qualified version of `_Tp`. + * + * Conversions from types derived from `_Tp` are not allowed because + * it is undefined to `delete[]` an array of derived types through a + * pointer to the base type. + */ + template>> + _GLIBCXX23_CONSTEXPR + default_delete(const default_delete<_Up[]>&) noexcept { } + + /// Calls `delete[] __ptr` + template + _GLIBCXX23_CONSTEXPR + typename enable_if::value>::type + operator()(_Up* __ptr) const + { + static_assert(sizeof(_Tp)>0, + "can't delete pointer to incomplete type"); + delete [] __ptr; + } + }; + + /// @cond undocumented + + // Manages the pointer and deleter of a unique_ptr + template + class __uniq_ptr_impl + { + template + struct _Ptr + { + using type = _Up*; + }; + + template + struct + _Ptr<_Up, _Ep, __void_t::type::pointer>> + { + using type = typename remove_reference<_Ep>::type::pointer; + }; + + public: + using _DeleterConstraint = enable_if< + __and_<__not_>, + is_default_constructible<_Dp>>::value>; + + using pointer = typename _Ptr<_Tp, _Dp>::type; + + static_assert( !is_rvalue_reference<_Dp>::value, + "unique_ptr's deleter type must be a function object type" + " or an lvalue reference type" ); + + __uniq_ptr_impl() = default; + _GLIBCXX23_CONSTEXPR + __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; } + + template + _GLIBCXX23_CONSTEXPR + __uniq_ptr_impl(pointer __p, _Del&& __d) + : _M_t(__p, std::forward<_Del>(__d)) { } + + _GLIBCXX23_CONSTEXPR + __uniq_ptr_impl(__uniq_ptr_impl&& __u) noexcept + : _M_t(std::move(__u._M_t)) + { __u._M_ptr() = nullptr; } + + _GLIBCXX23_CONSTEXPR + __uniq_ptr_impl& operator=(__uniq_ptr_impl&& __u) noexcept + { + reset(__u.release()); + _M_deleter() = std::forward<_Dp>(__u._M_deleter()); + return *this; + } + + _GLIBCXX23_CONSTEXPR + pointer& _M_ptr() noexcept { return std::get<0>(_M_t); } + _GLIBCXX23_CONSTEXPR + pointer _M_ptr() const noexcept { return std::get<0>(_M_t); } + _GLIBCXX23_CONSTEXPR + _Dp& _M_deleter() noexcept { return std::get<1>(_M_t); } + _GLIBCXX23_CONSTEXPR + const _Dp& _M_deleter() const noexcept { return std::get<1>(_M_t); } + + _GLIBCXX23_CONSTEXPR + void reset(pointer __p) noexcept + { + const pointer __old_p = _M_ptr(); + _M_ptr() = __p; + if (__old_p) + _M_deleter()(__old_p); + } + + _GLIBCXX23_CONSTEXPR + pointer release() noexcept + { + pointer __p = _M_ptr(); + _M_ptr() = nullptr; + return __p; + } + + _GLIBCXX23_CONSTEXPR + void + swap(__uniq_ptr_impl& __rhs) noexcept + { + using std::swap; + swap(this->_M_ptr(), __rhs._M_ptr()); + swap(this->_M_deleter(), __rhs._M_deleter()); + } + + private: + tuple _M_t; + }; + + // Defines move construction + assignment as either defaulted or deleted. + template ::value, + bool = is_move_assignable<_Dp>::value> + struct __uniq_ptr_data : __uniq_ptr_impl<_Tp, _Dp> + { + using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; + __uniq_ptr_data(__uniq_ptr_data&&) = default; + __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default; + }; + + template + struct __uniq_ptr_data<_Tp, _Dp, true, false> : __uniq_ptr_impl<_Tp, _Dp> + { + using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; + __uniq_ptr_data(__uniq_ptr_data&&) = default; + __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete; + }; + + template + struct __uniq_ptr_data<_Tp, _Dp, false, true> : __uniq_ptr_impl<_Tp, _Dp> + { + using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; + __uniq_ptr_data(__uniq_ptr_data&&) = delete; + __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default; + }; + + template + struct __uniq_ptr_data<_Tp, _Dp, false, false> : __uniq_ptr_impl<_Tp, _Dp> + { + using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; + __uniq_ptr_data(__uniq_ptr_data&&) = delete; + __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete; + }; + /// @endcond + + // 20.7.1.2 unique_ptr for single objects. + + /// A move-only smart pointer that manages unique ownership of a resource. + /// @headerfile memory + /// @since C++11 + template > + class unique_ptr + { + template + using _DeleterConstraint = + typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; + + __uniq_ptr_data<_Tp, _Dp> _M_t; + + public: + using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; + using element_type = _Tp; + using deleter_type = _Dp; + + private: + // helper template for detecting a safe conversion from another + // unique_ptr + template + using __safe_conversion_up = __and_< + is_convertible::pointer, pointer>, + __not_> + >; + + public: + // Constructors. + + /// Default constructor, creates a unique_ptr that owns nothing. + template> + constexpr unique_ptr() noexcept + : _M_t() + { } + + /** Takes ownership of a pointer. + * + * @param __p A pointer to an object of @c element_type + * + * The deleter will be value-initialized. + */ + template> + _GLIBCXX23_CONSTEXPR + explicit + unique_ptr(pointer __p) noexcept + : _M_t(__p) + { } + + /** Takes ownership of a pointer. + * + * @param __p A pointer to an object of @c element_type + * @param __d A reference to a deleter. + * + * The deleter will be initialized with @p __d + */ + template>> + _GLIBCXX23_CONSTEXPR + unique_ptr(pointer __p, const deleter_type& __d) noexcept + : _M_t(__p, __d) { } + + /** Takes ownership of a pointer. + * + * @param __p A pointer to an object of @c element_type + * @param __d An rvalue reference to a (non-reference) deleter. + * + * The deleter will be initialized with @p std::move(__d) + */ + template>> + _GLIBCXX23_CONSTEXPR + unique_ptr(pointer __p, + __enable_if_t::value, + _Del&&> __d) noexcept + : _M_t(__p, std::move(__d)) + { } + + template::type> + _GLIBCXX23_CONSTEXPR + unique_ptr(pointer, + __enable_if_t::value, + _DelUnref&&>) = delete; + + /// Creates a unique_ptr that owns nothing. + template> + constexpr unique_ptr(nullptr_t) noexcept + : _M_t() + { } + + // Move constructors. + + /// Move constructor. + unique_ptr(unique_ptr&&) = default; + + /** @brief Converting constructor from another type + * + * Requires that the pointer owned by @p __u is convertible to the + * type of pointer owned by this object, @p __u does not own an array, + * and @p __u has a compatible deleter type. + */ + template, + __conditional_t::value, + is_same<_Ep, _Dp>, + is_convertible<_Ep, _Dp>>>> + _GLIBCXX23_CONSTEXPR + unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept + : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) + { } + +#if _GLIBCXX_USE_DEPRECATED +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + /// Converting constructor from @c auto_ptr + template, + is_same<_Dp, default_delete<_Tp>>>> + unique_ptr(auto_ptr<_Up>&& __u) noexcept; +#pragma GCC diagnostic pop +#endif + + /// Destructor, invokes the deleter if the stored pointer is not null. +#if __cplusplus > 202002L && __cpp_constexpr_dynamic_alloc + constexpr +#endif + ~unique_ptr() noexcept + { + static_assert(__is_invocable::value, + "unique_ptr's deleter must be invocable with a pointer"); + auto& __ptr = _M_t._M_ptr(); + if (__ptr != nullptr) + get_deleter()(std::move(__ptr)); + __ptr = pointer(); + } + + // Assignment. + + /** @brief Move assignment operator. + * + * Invokes the deleter if this object owns a pointer. + */ + unique_ptr& operator=(unique_ptr&&) = default; + + /** @brief Assignment from another type. + * + * @param __u The object to transfer ownership from, which owns a + * convertible pointer to a non-array object. + * + * Invokes the deleter if this object owns a pointer. + */ + template + _GLIBCXX23_CONSTEXPR + typename enable_if< __and_< + __safe_conversion_up<_Up, _Ep>, + is_assignable + >::value, + unique_ptr&>::type + operator=(unique_ptr<_Up, _Ep>&& __u) noexcept + { + reset(__u.release()); + get_deleter() = std::forward<_Ep>(__u.get_deleter()); + return *this; + } + + /// Reset the %unique_ptr to empty, invoking the deleter if necessary. + _GLIBCXX23_CONSTEXPR + unique_ptr& + operator=(nullptr_t) noexcept + { + reset(); + return *this; + } + + // Observers. + + /// Dereference the stored pointer. + _GLIBCXX23_CONSTEXPR + typename add_lvalue_reference::type + operator*() const noexcept(noexcept(*std::declval())) + { +#if _GLIBCXX_USE_BUILTIN_TRAIT(__reference_converts_from_temporary) + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4148. unique_ptr::operator* should not allow dangling references + using _ResT = typename add_lvalue_reference::type; + using _DerefT = decltype(*get()); + static_assert(!__reference_converts_from_temporary(_ResT, _DerefT), + "operator* must not return a dangling reference"); +#endif + __glibcxx_assert(get() != pointer()); + return *get(); + } + + /// Return the stored pointer. + _GLIBCXX23_CONSTEXPR + pointer + operator->() const noexcept + { + _GLIBCXX_DEBUG_PEDASSERT(get() != pointer()); + return get(); + } + + /// Return the stored pointer. + _GLIBCXX23_CONSTEXPR + pointer + get() const noexcept + { return _M_t._M_ptr(); } + + /// Return a reference to the stored deleter. + _GLIBCXX23_CONSTEXPR + deleter_type& + get_deleter() noexcept + { return _M_t._M_deleter(); } + + /// Return a reference to the stored deleter. + _GLIBCXX23_CONSTEXPR + const deleter_type& + get_deleter() const noexcept + { return _M_t._M_deleter(); } + + /// Return @c true if the stored pointer is not null. + _GLIBCXX23_CONSTEXPR + explicit operator bool() const noexcept + { return get() == pointer() ? false : true; } + + // Modifiers. + + /// Release ownership of any stored pointer. + _GLIBCXX23_CONSTEXPR + pointer + release() noexcept + { return _M_t.release(); } + + /** @brief Replace the stored pointer. + * + * @param __p The new pointer to store. + * + * The deleter will be invoked if a pointer is already owned. + */ + _GLIBCXX23_CONSTEXPR + void + reset(pointer __p = pointer()) noexcept + { + static_assert(__is_invocable::value, + "unique_ptr's deleter must be invocable with a pointer"); + _M_t.reset(std::move(__p)); + } + + /// Exchange the pointer and deleter with another object. + _GLIBCXX23_CONSTEXPR + void + swap(unique_ptr& __u) noexcept + { + static_assert(__is_swappable<_Dp>::value, "deleter must be swappable"); + _M_t.swap(__u._M_t); + } + + // Disable copy from lvalue. + unique_ptr(const unique_ptr&) = delete; + unique_ptr& operator=(const unique_ptr&) = delete; + + private: +#ifdef __glibcxx_out_ptr + template + friend class out_ptr_t; + template + friend class inout_ptr_t; +#endif + }; + + // 20.7.1.3 unique_ptr for array objects with a runtime length + // [unique.ptr.runtime] + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 740 - omit specialization for array objects with a compile time length + + /// A move-only smart pointer that manages unique ownership of an array. + /// @headerfile memory + /// @since C++11 + template + class unique_ptr<_Tp[], _Dp> + { + template + using _DeleterConstraint = + typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; + + __uniq_ptr_data<_Tp, _Dp> _M_t; + + // like is_base_of<_Tp, _Up> but false if unqualified types are the same + template + using __is_derived_Tp + = __and_< is_base_of<_Tp, _Up>, + __not_, __remove_cv_t<_Up>>> >; + + public: + using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; + using element_type = _Tp; + using deleter_type = _Dp; + + // helper template for detecting a safe conversion from another + // unique_ptr + template, + typename _UP_pointer = typename _UPtr::pointer, + typename _UP_element_type = typename _UPtr::element_type> + using __safe_conversion_up = __and_< + is_array<_Up>, + is_same, + is_same<_UP_pointer, _UP_element_type*>, + is_convertible<_UP_element_type(*)[], element_type(*)[]> + >; + + // helper template for detecting a safe conversion from a raw pointer + template + using __safe_conversion_raw = __and_< + __or_<__or_, + is_same<_Up, nullptr_t>>, + __and_, + is_same, + is_convertible< + typename remove_pointer<_Up>::type(*)[], + element_type(*)[]> + > + > + >; + + // Constructors. + + /// Default constructor, creates a unique_ptr that owns nothing. + template> + constexpr unique_ptr() noexcept + : _M_t() + { } + + /** Takes ownership of a pointer. + * + * @param __p A pointer to an array of a type safely convertible + * to an array of @c element_type + * + * The deleter will be value-initialized. + */ + template, + typename = typename enable_if< + __safe_conversion_raw<_Up>::value, bool>::type> + _GLIBCXX23_CONSTEXPR + explicit + unique_ptr(_Up __p) noexcept + : _M_t(__p) + { } + + /** Takes ownership of a pointer. + * + * @param __p A pointer to an array of a type safely convertible + * to an array of @c element_type + * @param __d A reference to a deleter. + * + * The deleter will be initialized with @p __d + */ + template, + is_copy_constructible<_Del>>> + _GLIBCXX23_CONSTEXPR + unique_ptr(_Up __p, const deleter_type& __d) noexcept + : _M_t(__p, __d) { } + + /** Takes ownership of a pointer. + * + * @param __p A pointer to an array of a type safely convertible + * to an array of @c element_type + * @param __d A reference to a deleter. + * + * The deleter will be initialized with @p std::move(__d) + */ + template, + is_move_constructible<_Del>>> + _GLIBCXX23_CONSTEXPR + unique_ptr(_Up __p, + __enable_if_t::value, + _Del&&> __d) noexcept + : _M_t(std::move(__p), std::move(__d)) + { } + + template::type, + typename = _Require<__safe_conversion_raw<_Up>>> + unique_ptr(_Up, + __enable_if_t::value, + _DelUnref&&>) = delete; + + /// Move constructor. + unique_ptr(unique_ptr&&) = default; + + /// Creates a unique_ptr that owns nothing. + template> + constexpr unique_ptr(nullptr_t) noexcept + : _M_t() + { } + + template, + __conditional_t::value, + is_same<_Ep, _Dp>, + is_convertible<_Ep, _Dp>>>> + _GLIBCXX23_CONSTEXPR + unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept + : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) + { } + + /// Destructor, invokes the deleter if the stored pointer is not null. +#if __cplusplus > 202002L && __cpp_constexpr_dynamic_alloc + constexpr +#endif + ~unique_ptr() + { + auto& __ptr = _M_t._M_ptr(); + if (__ptr != nullptr) + get_deleter()(__ptr); + __ptr = pointer(); + } + + // Assignment. + + /** @brief Move assignment operator. + * + * Invokes the deleter if this object owns a pointer. + */ + unique_ptr& + operator=(unique_ptr&&) = default; + + /** @brief Assignment from another type. + * + * @param __u The object to transfer ownership from, which owns a + * convertible pointer to an array object. + * + * Invokes the deleter if this object owns a pointer. + */ + template + _GLIBCXX23_CONSTEXPR + typename + enable_if<__and_<__safe_conversion_up<_Up, _Ep>, + is_assignable + >::value, + unique_ptr&>::type + operator=(unique_ptr<_Up, _Ep>&& __u) noexcept + { + reset(__u.release()); + get_deleter() = std::forward<_Ep>(__u.get_deleter()); + return *this; + } + + /// Reset the %unique_ptr to empty, invoking the deleter if necessary. + _GLIBCXX23_CONSTEXPR + unique_ptr& + operator=(nullptr_t) noexcept + { + reset(); + return *this; + } + + // Observers. + + /// Access an element of owned array. + _GLIBCXX23_CONSTEXPR + typename std::add_lvalue_reference::type + operator[](size_t __i) const + { + __glibcxx_assert(get() != pointer()); + return get()[__i]; + } + + /// Return the stored pointer. + _GLIBCXX23_CONSTEXPR + pointer + get() const noexcept + { return _M_t._M_ptr(); } + + /// Return a reference to the stored deleter. + _GLIBCXX23_CONSTEXPR + deleter_type& + get_deleter() noexcept + { return _M_t._M_deleter(); } + + /// Return a reference to the stored deleter. + _GLIBCXX23_CONSTEXPR + const deleter_type& + get_deleter() const noexcept + { return _M_t._M_deleter(); } + + /// Return @c true if the stored pointer is not null. + _GLIBCXX23_CONSTEXPR + explicit operator bool() const noexcept + { return get() == pointer() ? false : true; } + + // Modifiers. + + /// Release ownership of any stored pointer. + _GLIBCXX23_CONSTEXPR + pointer + release() noexcept + { return _M_t.release(); } + + /** @brief Replace the stored pointer. + * + * @param __p The new pointer to store. + * + * The deleter will be invoked if a pointer is already owned. + */ + template , + __and_, + is_pointer<_Up>, + is_convertible< + typename remove_pointer<_Up>::type(*)[], + element_type(*)[] + > + > + > + >> + _GLIBCXX23_CONSTEXPR + void + reset(_Up __p) noexcept + { _M_t.reset(std::move(__p)); } + + _GLIBCXX23_CONSTEXPR + void reset(nullptr_t = nullptr) noexcept + { reset(pointer()); } + + /// Exchange the pointer and deleter with another object. + _GLIBCXX23_CONSTEXPR + void + swap(unique_ptr& __u) noexcept + { + static_assert(__is_swappable<_Dp>::value, "deleter must be swappable"); + _M_t.swap(__u._M_t); + } + + // Disable copy from lvalue. + unique_ptr(const unique_ptr&) = delete; + unique_ptr& operator=(const unique_ptr&) = delete; + + private: +#ifdef __glibcxx_out_ptr + template friend class out_ptr_t; + template friend class inout_ptr_t; +#endif + }; + + /// @{ + /// @relates unique_ptr + + /// Swap overload for unique_ptr + template + inline +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + // Constrained free swap overload, see p0185r1 + _GLIBCXX23_CONSTEXPR + typename enable_if<__is_swappable<_Dp>::value>::type +#else + void +#endif + swap(unique_ptr<_Tp, _Dp>& __x, + unique_ptr<_Tp, _Dp>& __y) noexcept + { __x.swap(__y); } + +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + template + typename enable_if::value>::type + swap(unique_ptr<_Tp, _Dp>&, + unique_ptr<_Tp, _Dp>&) = delete; +#endif + + /// Equality operator for unique_ptr objects, compares the owned pointers + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator==(const unique_ptr<_Tp, _Dp>& __x, + const unique_ptr<_Up, _Ep>& __y) + { return __x.get() == __y.get(); } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept + { return !__x; } + +#ifndef __cpp_lib_three_way_comparison + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD + inline bool + operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept + { return !__x; } + + /// Inequality operator for unique_ptr objects, compares the owned pointers + template + _GLIBCXX_NODISCARD + inline bool + operator!=(const unique_ptr<_Tp, _Dp>& __x, + const unique_ptr<_Up, _Ep>& __y) + { return __x.get() != __y.get(); } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD + inline bool + operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept + { return (bool)__x; } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD + inline bool + operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept + { return (bool)__x; } +#endif // three way comparison + + /// Relational operator for unique_ptr objects, compares the owned pointers + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator<(const unique_ptr<_Tp, _Dp>& __x, + const unique_ptr<_Up, _Ep>& __y) + { + typedef typename + std::common_type::pointer, + typename unique_ptr<_Up, _Ep>::pointer>::type _CT; + return std::less<_CT>()(__x.get(), __y.get()); + } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) + { + return std::less::pointer>()(__x.get(), + nullptr); + } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) + { + return std::less::pointer>()(nullptr, + __x.get()); + } + + /// Relational operator for unique_ptr objects, compares the owned pointers + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator<=(const unique_ptr<_Tp, _Dp>& __x, + const unique_ptr<_Up, _Ep>& __y) + { return !(__y < __x); } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) + { return !(nullptr < __x); } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) + { return !(__x < nullptr); } + + /// Relational operator for unique_ptr objects, compares the owned pointers + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator>(const unique_ptr<_Tp, _Dp>& __x, + const unique_ptr<_Up, _Ep>& __y) + { return (__y < __x); } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) + { + return std::less::pointer>()(nullptr, + __x.get()); + } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) + { + return std::less::pointer>()(__x.get(), + nullptr); + } + + /// Relational operator for unique_ptr objects, compares the owned pointers + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator>=(const unique_ptr<_Tp, _Dp>& __x, + const unique_ptr<_Up, _Ep>& __y) + { return !(__x < __y); } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR + inline bool + operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) + { return !(__x < nullptr); } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD inline bool + operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) + { return !(nullptr < __x); } + +#ifdef __cpp_lib_three_way_comparison + template + requires three_way_comparable_with::pointer, + typename unique_ptr<_Up, _Ep>::pointer> + _GLIBCXX23_CONSTEXPR + inline + compare_three_way_result_t::pointer, + typename unique_ptr<_Up, _Ep>::pointer> + operator<=>(const unique_ptr<_Tp, _Dp>& __x, + const unique_ptr<_Up, _Ep>& __y) + { return compare_three_way()(__x.get(), __y.get()); } + + template + requires three_way_comparable::pointer> + _GLIBCXX23_CONSTEXPR + inline + compare_three_way_result_t::pointer> + operator<=>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) + { + using pointer = typename unique_ptr<_Tp, _Dp>::pointer; + return compare_three_way()(__x.get(), static_cast(nullptr)); + } +#endif + /// @} relates unique_ptr + + /// @cond undocumented + template + struct __uniq_ptr_hash + : public __hash_base +#if ! _GLIBCXX_INLINE_VERSION + , private __hash_empty_base<_Ptr> +#endif + { + size_t + operator()(const _Up& __u) const + noexcept(noexcept(std::declval>()(std::declval<_Ptr>()))) + { return hash<_Ptr>()(__u.get()); } + }; + + template + using __uniq_ptr_hash_base + = __conditional_t<__is_hash_enabled_for, + __uniq_ptr_hash<_Up>, + __hash_not_enabled>; + /// @endcond + + /// std::hash specialization for unique_ptr. + template + struct hash> + : public __uniq_ptr_hash_base> + { }; + +#ifdef __glibcxx_make_unique // C++ >= 14 && HOSTED + /// @cond undocumented +namespace __detail +{ + template + struct _MakeUniq + { typedef unique_ptr<_Tp> __single_object; }; + + template + struct _MakeUniq<_Tp[]> + { typedef unique_ptr<_Tp[]> __array; }; + + template + struct _MakeUniq<_Tp[_Bound]> + { struct __invalid_type { }; }; + + template + using __unique_ptr_t = typename _MakeUniq<_Tp>::__single_object; + template + using __unique_ptr_array_t = typename _MakeUniq<_Tp>::__array; + template + using __invalid_make_unique_t = typename _MakeUniq<_Tp>::__invalid_type; +} + /// @endcond + + /** Create an object owned by a `unique_ptr`. + * @tparam _Tp A non-array object type. + * @param __args Constructor arguments for the new object. + * @returns A `unique_ptr<_Tp>` that owns the new object. + * @since C++14 + * @relates unique_ptr + */ + template + _GLIBCXX23_CONSTEXPR + inline __detail::__unique_ptr_t<_Tp> + make_unique(_Args&&... __args) + { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); } + + /** Create an array owned by a `unique_ptr`. + * @tparam _Tp An array type of unknown bound, such as `U[]`. + * @param __num The number of elements of type `U` in the new array. + * @returns A `unique_ptr` that owns the new array. + * @since C++14 + * @relates unique_ptr + * + * The array elements are value-initialized. + */ + template + _GLIBCXX23_CONSTEXPR + inline __detail::__unique_ptr_array_t<_Tp> + make_unique(size_t __num) + { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]()); } + + /** Disable std::make_unique for arrays of known bound. + * @tparam _Tp An array type of known bound, such as `U[N]`. + * @since C++14 + * @relates unique_ptr + */ + template + __detail::__invalid_make_unique_t<_Tp> + make_unique(_Args&&...) = delete; + +#if __cplusplus > 201703L + /** Create a default-initialied object owned by a `unique_ptr`. + * @tparam _Tp A non-array object type. + * @returns A `unique_ptr<_Tp>` that owns the new object. + * @since C++20 + * @relates unique_ptr + */ + template + _GLIBCXX23_CONSTEXPR + inline __detail::__unique_ptr_t<_Tp> + make_unique_for_overwrite() + { return unique_ptr<_Tp>(new _Tp); } + + /** Create a default-initialized array owned by a `unique_ptr`. + * @tparam _Tp An array type of unknown bound, such as `U[]`. + * @param __num The number of elements of type `U` in the new array. + * @returns A `unique_ptr` that owns the new array. + * @since C++20 + * @relates unique_ptr + */ + template + _GLIBCXX23_CONSTEXPR + inline __detail::__unique_ptr_array_t<_Tp> + make_unique_for_overwrite(size_t __num) + { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]); } + + /** Disable std::make_unique_for_overwrite for arrays of known bound. + * @tparam _Tp An array type of known bound, such as `U[N]`. + * @since C++20 + * @relates unique_ptr + */ + template + __detail::__invalid_make_unique_t<_Tp> + make_unique_for_overwrite(_Args&&...) = delete; +#endif // C++20 + +#endif // C++14 && HOSTED + +#if __cplusplus > 201703L && __cpp_concepts && _GLIBCXX_HOSTED + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2948. unique_ptr does not define operator<< for stream output + /// Stream output operator for unique_ptr + /// @relates unique_ptr + /// @since C++20 + template + inline basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, + const unique_ptr<_Tp, _Dp>& __p) + requires requires { __os << __p.get(); } + { + __os << __p.get(); + return __os; + } +#endif // C++20 && HOSTED + +#if __cpp_variable_templates + template + constexpr bool __is_unique_ptr = false; + template + constexpr bool __is_unique_ptr> = true; +#endif + + /// @} group pointer_abstractions + +#if __cplusplus >= 201703L + namespace __detail::__variant + { + template struct _Never_valueless_alt; // see + + // Provide the strong exception-safety guarantee when emplacing a + // unique_ptr into a variant. + template + struct _Never_valueless_alt> + : std::true_type + { }; + } // namespace __detail::__variant +#endif // C++17 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _UNIQUE_PTR_H */ diff --git a/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@unique_ptr.h.blob b/.ccls-cache/@@mnt@raid@projects@dsp@harmonica@harmonica/@usr@include@c++@15.2.1@bits@unique_ptr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e14ec286cecf8d5e773252cb4a614fac908c5145 GIT binary patch literal 66140 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