From 62e01561b2926a93a222a3caed583a5cac08f9ff Mon Sep 17 00:00:00 2001 From: ado Date: Wed, 24 Feb 2021 22:08:11 +0100 Subject: [PATCH] try ubuntu icc pipeline --- .../@@home@ado@git@ssp/@usr@include@alloca.h | 40 + .../@usr@include@alloca.h.blob | Bin 0 -> 12933 bytes .../@usr@include@asm-generic@errno-base.h | 40 + ...@usr@include@asm-generic@errno-base.h.blob | Bin 0 -> 14228 bytes .../@usr@include@asm-generic@errno.h | 123 + .../@usr@include@asm-generic@errno.h.blob | Bin 0 -> 18370 bytes .../@@home@ado@git@ssp/@usr@include@assert.h | 144 + .../@usr@include@assert.h.blob | Bin 0 -> 14624 bytes .../@usr@include@c++@10@algorithm | 86 + .../@usr@include@c++@10@algorithm.blob | Bin 0 -> 12497 bytes .../@usr@include@c++@10@array | 451 ++ .../@usr@include@c++@10@array.blob | Bin 0 -> 31716 bytes .../@usr@include@c++@10@backward@auto_ptr.h | 337 + ...sr@include@c++@10@backward@auto_ptr.h.blob | Bin 0 -> 24328 bytes .../@usr@include@c++@10@backward@binders.h | 182 + ...usr@include@c++@10@backward@binders.h.blob | Bin 0 -> 19555 bytes .../@usr@include@c++@10@bits@algorithmfwd.h | 967 +++ ...sr@include@c++@10@bits@algorithmfwd.h.blob | Bin 0 -> 58864 bytes .../@usr@include@c++@10@bits@alloc_traits.h | 743 ++ ...sr@include@c++@10@bits@alloc_traits.h.blob | Bin 0 -> 37487 bytes .../@usr@include@c++@10@bits@allocated_ptr.h | 104 + ...r@include@c++@10@bits@allocated_ptr.h.blob | Bin 0 -> 16561 bytes .../@usr@include@c++@10@bits@allocator.h | 323 + .../@usr@include@c++@10@bits@allocator.h.blob | Bin 0 -> 24263 bytes .../@usr@include@c++@10@bits@atomic_base.h | 1703 ++++ ...usr@include@c++@10@bits@atomic_base.h.blob | Bin 0 -> 60615 bytes ...lude@c++@10@bits@atomic_lockfree_defines.h | 66 + ...c++@10@bits@atomic_lockfree_defines.h.blob | Bin 0 -> 13524 bytes .../@usr@include@c++@10@bits@basic_ios.h | 518 ++ .../@usr@include@c++@10@bits@basic_ios.h.blob | Bin 0 -> 32132 bytes .../@usr@include@c++@10@bits@basic_ios.tcc | 188 + ...usr@include@c++@10@bits@basic_ios.tcc.blob | Bin 0 -> 22013 bytes .../@usr@include@c++@10@bits@basic_string.h | 6951 +++++++++++++++++ ...sr@include@c++@10@bits@basic_string.h.blob | Bin 0 -> 197388 bytes .../@usr@include@c++@10@bits@basic_string.tcc | 1657 ++++ ...@include@c++@10@bits@basic_string.tcc.blob | Bin 0 -> 77255 bytes .../@usr@include@c++@10@bits@char_traits.h | 950 +++ ...usr@include@c++@10@bits@char_traits.h.blob | Bin 0 -> 59001 bytes .../@usr@include@c++@10@bits@charconv.h | 106 + .../@usr@include@c++@10@bits@charconv.h.blob | Bin 0 -> 16110 bytes .../@usr@include@c++@10@bits@codecvt.h | 840 ++ .../@usr@include@c++@10@bits@codecvt.h.blob | Bin 0 -> 65156 bytes .../@usr@include@c++@10@bits@concept_check.h | 81 + ...r@include@c++@10@bits@concept_check.h.blob | Bin 0 -> 12919 bytes ...@usr@include@c++@10@bits@cpp_type_traits.h | 551 ++ ...include@c++@10@bits@cpp_type_traits.h.blob | Bin 0 -> 36444 bytes .../@usr@include@c++@10@bits@cxxabi_forced.h | 60 + ...r@include@c++@10@bits@cxxabi_forced.h.blob | Bin 0 -> 12873 bytes ...nclude@c++@10@bits@cxxabi_init_exception.h | 80 + ...e@c++@10@bits@cxxabi_init_exception.h.blob | Bin 0 -> 14631 bytes .../@usr@include@c++@10@bits@exception.h | 84 + .../@usr@include@c++@10@bits@exception.h.blob | Bin 0 -> 14665 bytes ...sr@include@c++@10@bits@exception_defines.h | 45 + ...clude@c++@10@bits@exception_defines.h.blob | Bin 0 -> 12582 bytes .../@usr@include@c++@10@bits@exception_ptr.h | 224 + ...r@include@c++@10@bits@exception_ptr.h.blob | Bin 0 -> 19462 bytes .../@usr@include@c++@10@bits@fstream.tcc | 1102 +++ .../@usr@include@c++@10@bits@fstream.tcc.blob | Bin 0 -> 54275 bytes .../@usr@include@c++@10@bits@functexcept.h | 115 + ...usr@include@c++@10@bits@functexcept.h.blob | Bin 0 -> 15443 bytes ...@usr@include@c++@10@bits@functional_hash.h | 289 + ...include@c++@10@bits@functional_hash.h.blob | Bin 0 -> 27191 bytes .../@usr@include@c++@10@bits@hash_bytes.h | 59 + ...@usr@include@c++@10@bits@hash_bytes.h.blob | Bin 0 -> 14651 bytes .../@usr@include@c++@10@bits@invoke.h | 163 + .../@usr@include@c++@10@bits@invoke.h.blob | Bin 0 -> 19427 bytes .../@usr@include@c++@10@bits@ios_base.h | 1109 +++ .../@usr@include@c++@10@bits@ios_base.h.blob | Bin 0 -> 66685 bytes .../@usr@include@c++@10@bits@istream.tcc | 1100 +++ .../@usr@include@c++@10@bits@istream.tcc.blob | Bin 0 -> 66229 bytes ...sr@include@c++@10@bits@iterator_concepts.h | 934 +++ ...clude@c++@10@bits@iterator_concepts.h.blob | Bin 0 -> 12446 bytes .../@usr@include@c++@10@bits@locale_classes.h | 855 ++ ...@include@c++@10@bits@locale_classes.h.blob | Bin 0 -> 47671 bytes ...usr@include@c++@10@bits@locale_classes.tcc | 298 + ...nclude@c++@10@bits@locale_classes.tcc.blob | Bin 0 -> 25331 bytes .../@usr@include@c++@10@bits@locale_conv.h | 618 ++ ...usr@include@c++@10@bits@locale_conv.h.blob | Bin 0 -> 45408 bytes .../@usr@include@c++@10@bits@locale_facets.h | 2657 +++++++ ...r@include@c++@10@bits@locale_facets.h.blob | Bin 0 -> 152552 bytes ...@usr@include@c++@10@bits@locale_facets.tcc | 1377 ++++ ...include@c++@10@bits@locale_facets.tcc.blob | Bin 0 -> 73889 bytes ...@include@c++@10@bits@locale_facets_nonio.h | 2017 +++++ ...ude@c++@10@bits@locale_facets_nonio.h.blob | Bin 0 -> 108999 bytes ...nclude@c++@10@bits@locale_facets_nonio.tcc | 1504 ++++ ...e@c++@10@bits@locale_facets_nonio.tcc.blob | Bin 0 -> 89034 bytes .../@usr@include@c++@10@bits@localefwd.h | 214 + .../@usr@include@c++@10@bits@localefwd.h.blob | Bin 0 -> 21224 bytes .../@usr@include@c++@10@bits@memoryfwd.h | 82 + .../@usr@include@c++@10@bits@memoryfwd.h.blob | Bin 0 -> 13837 bytes .../@usr@include@c++@10@bits@move.h | 224 + .../@usr@include@c++@10@bits@move.h.blob | Bin 0 -> 20468 bytes ...usr@include@c++@10@bits@nested_exception.h | 171 + ...nclude@c++@10@bits@nested_exception.h.blob | Bin 0 -> 18848 bytes .../@usr@include@c++@10@bits@ostream.tcc | 407 + .../@usr@include@c++@10@bits@ostream.tcc.blob | Bin 0 -> 31439 bytes .../@usr@include@c++@10@bits@ostream_insert.h | 129 + ...@include@c++@10@bits@ostream_insert.h.blob | Bin 0 -> 17220 bytes .../@usr@include@c++@10@bits@postypes.h | 253 + .../@usr@include@c++@10@bits@postypes.h.blob | Bin 0 -> 20406 bytes .../@usr@include@c++@10@bits@predefined_ops.h | 405 + ...@include@c++@10@bits@predefined_ops.h.blob | Bin 0 -> 31502 bytes .../@usr@include@c++@10@bits@ptr_traits.h | 215 + ...@usr@include@c++@10@bits@ptr_traits.h.blob | Bin 0 -> 19697 bytes .../@usr@include@c++@10@bits@quoted_string.h | 182 + ...r@include@c++@10@bits@quoted_string.h.blob | Bin 0 -> 19174 bytes .../@usr@include@c++@10@bits@range_access.h | 1158 +++ ...sr@include@c++@10@bits@range_access.h.blob | Bin 0 -> 22745 bytes .../@usr@include@c++@10@bits@range_cmp.h | 195 + .../@usr@include@c++@10@bits@range_cmp.h.blob | Bin 0 -> 12357 bytes ...include@c++@10@bits@ranges_uninitialized.h | 574 ++ ...de@c++@10@bits@ranges_uninitialized.h.blob | Bin 0 -> 12370 bytes .../@usr@include@c++@10@bits@refwrap.h | 401 + .../@usr@include@c++@10@bits@refwrap.h.blob | Bin 0 -> 29602 bytes .../@usr@include@c++@10@bits@shared_ptr.h | 918 +++ ...@usr@include@c++@10@bits@shared_ptr.h.blob | Bin 0 -> 48325 bytes ...sr@include@c++@10@bits@shared_ptr_atomic.h | 336 + ...clude@c++@10@bits@shared_ptr_atomic.h.blob | Bin 0 -> 29705 bytes ...@usr@include@c++@10@bits@shared_ptr_base.h | 1898 +++++ ...include@c++@10@bits@shared_ptr_base.h.blob | Bin 0 -> 106690 bytes .../@usr@include@c++@10@bits@sstream.tcc | 307 + .../@usr@include@c++@10@bits@sstream.tcc.blob | Bin 0 -> 29183 bytes .../@usr@include@c++@10@bits@std_abs.h | 111 + .../@usr@include@c++@10@bits@std_abs.h.blob | Bin 0 -> 15005 bytes .../@usr@include@c++@10@bits@std_function.h | 741 ++ ...sr@include@c++@10@bits@std_function.h.blob | Bin 0 -> 41923 bytes .../@usr@include@c++@10@bits@stl_algo.h | 5889 ++++++++++++++ .../@usr@include@c++@10@bits@stl_algo.h.blob | Bin 0 -> 198989 bytes .../@usr@include@c++@10@bits@stl_algobase.h | 2070 +++++ ...sr@include@c++@10@bits@stl_algobase.h.blob | Bin 0 -> 114209 bytes .../@usr@include@c++@10@bits@stl_bvector.h | 1363 ++++ ...usr@include@c++@10@bits@stl_bvector.h.blob | Bin 0 -> 81234 bytes .../@usr@include@c++@10@bits@stl_construct.h | 256 + ...r@include@c++@10@bits@stl_construct.h.blob | Bin 0 -> 18324 bytes .../@usr@include@c++@10@bits@stl_function.h | 1395 ++++ ...sr@include@c++@10@bits@stl_function.h.blob | Bin 0 -> 83442 bytes .../@usr@include@c++@10@bits@stl_heap.h | 583 ++ .../@usr@include@c++@10@bits@stl_heap.h.blob | Bin 0 -> 33758 bytes .../@usr@include@c++@10@bits@stl_iterator.h | 2237 ++++++ ...sr@include@c++@10@bits@stl_iterator.h.blob | Bin 0 -> 80019 bytes ...lude@c++@10@bits@stl_iterator_base_funcs.h | 239 + ...c++@10@bits@stl_iterator_base_funcs.h.blob | Bin 0 -> 20652 bytes ...lude@c++@10@bits@stl_iterator_base_types.h | 271 + ...c++@10@bits@stl_iterator_base_types.h.blob | Bin 0 -> 20066 bytes .../@usr@include@c++@10@bits@stl_pair.h | 586 ++ .../@usr@include@c++@10@bits@stl_pair.h.blob | Bin 0 -> 34867 bytes ...include@c++@10@bits@stl_raw_storage_iter.h | 123 + ...de@c++@10@bits@stl_raw_storage_iter.h.blob | Bin 0 -> 15430 bytes .../@usr@include@c++@10@bits@stl_relops.h | 133 + ...@usr@include@c++@10@bits@stl_relops.h.blob | Bin 0 -> 15492 bytes .../@usr@include@c++@10@bits@stl_tempbuf.h | 284 + ...usr@include@c++@10@bits@stl_tempbuf.h.blob | Bin 0 -> 22654 bytes ...sr@include@c++@10@bits@stl_uninitialized.h | 1041 +++ ...clude@c++@10@bits@stl_uninitialized.h.blob | Bin 0 -> 62357 bytes .../@usr@include@c++@10@bits@stl_vector.h | 1985 +++++ ...@usr@include@c++@10@bits@stl_vector.h.blob | Bin 0 -> 85889 bytes .../@usr@include@c++@10@bits@streambuf.tcc | 175 + ...usr@include@c++@10@bits@streambuf.tcc.blob | Bin 0 -> 18858 bytes ...r@include@c++@10@bits@streambuf_iterator.h | 507 ++ ...lude@c++@10@bits@streambuf_iterator.h.blob | Bin 0 -> 31045 bytes .../@usr@include@c++@10@bits@stringfwd.h | 104 + .../@usr@include@c++@10@bits@stringfwd.h.blob | Bin 0 -> 14989 bytes ...usr@include@c++@10@bits@uniform_int_dist.h | 395 + ...nclude@c++@10@bits@uniform_int_dist.h.blob | Bin 0 -> 29622 bytes .../@usr@include@c++@10@bits@unique_ptr.h | 1011 +++ ...@usr@include@c++@10@bits@unique_ptr.h.blob | Bin 0 -> 49059 bytes .../@usr@include@c++@10@bits@uses_allocator.h | 195 + ...@include@c++@10@bits@uses_allocator.h.blob | Bin 0 -> 22886 bytes .../@usr@include@c++@10@bits@vector.tcc | 1008 +++ .../@usr@include@c++@10@bits@vector.tcc.blob | Bin 0 -> 54298 bytes .../@usr@include@c++@10@cassert | 44 + .../@usr@include@c++@10@cassert.blob | Bin 0 -> 12346 bytes .../@usr@include@c++@10@cctype | 94 + .../@usr@include@c++@10@cctype.blob | Bin 0 -> 14281 bytes .../@usr@include@c++@10@cerrno | 52 + .../@usr@include@c++@10@cerrno.blob | Bin 0 -> 12422 bytes .../@usr@include@c++@10@cfloat | 56 + .../@usr@include@c++@10@cfloat.blob | Bin 0 -> 12483 bytes .../@usr@include@c++@10@cinttypes | 81 + .../@usr@include@c++@10@cinttypes.blob | Bin 0 -> 14478 bytes .../@usr@include@c++@10@clocale | 58 + .../@usr@include@c++@10@clocale.blob | Bin 0 -> 13587 bytes .../@usr@include@c++@10@cmath | 1932 +++++ .../@usr@include@c++@10@cmath.blob | Bin 0 -> 84789 bytes .../@usr@include@c++@10@concepts | 367 + .../@usr@include@c++@10@concepts.blob | Bin 0 -> 12377 bytes .../@usr@include@c++@10@cstdint | 91 + .../@usr@include@c++@10@cstdint.blob | Bin 0 -> 15872 bytes .../@usr@include@c++@10@cstdio | 194 + .../@usr@include@c++@10@cstdio.blob | Bin 0 -> 18049 bytes .../@usr@include@c++@10@cstdlib | 261 + .../@usr@include@c++@10@cstdlib.blob | Bin 0 -> 18429 bytes .../@usr@include@c++@10@cstring | 126 + .../@usr@include@c++@10@cstring.blob | Bin 0 -> 16167 bytes .../@usr@include@c++@10@ctime | 84 + .../@usr@include@c++@10@ctime.blob | Bin 0 -> 14434 bytes .../@usr@include@c++@10@cwchar | 306 + .../@usr@include@c++@10@cwchar.blob | Bin 0 -> 22440 bytes .../@usr@include@c++@10@cwctype | 110 + .../@usr@include@c++@10@cwctype.blob | Bin 0 -> 15097 bytes .../@usr@include@c++@10@debug@assertions.h | 68 + ...usr@include@c++@10@debug@assertions.h.blob | Bin 0 -> 12963 bytes .../@usr@include@c++@10@debug@debug.h | 137 + .../@usr@include@c++@10@debug@debug.h.blob | Bin 0 -> 16396 bytes .../@usr@include@c++@10@exception | 151 + .../@usr@include@c++@10@exception.blob | Bin 0 -> 17198 bytes .../@usr@include@c++@10@ext@aligned_buffer.h | 125 + ...r@include@c++@10@ext@aligned_buffer.h.blob | Bin 0 -> 16057 bytes .../@usr@include@c++@10@ext@alloc_traits.h | 171 + ...usr@include@c++@10@ext@alloc_traits.h.blob | Bin 0 -> 18189 bytes .../@usr@include@c++@10@ext@atomicity.h | 116 + .../@usr@include@c++@10@ext@atomicity.h.blob | Bin 0 -> 14873 bytes .../@usr@include@c++@10@ext@concurrence.h | 315 + ...@usr@include@c++@10@ext@concurrence.h.blob | Bin 0 -> 21974 bytes .../@usr@include@c++@10@ext@new_allocator.h | 198 + ...sr@include@c++@10@ext@new_allocator.h.blob | Bin 0 -> 18862 bytes .../@usr@include@c++@10@ext@numeric_traits.h | 194 + ...r@include@c++@10@ext@numeric_traits.h.blob | Bin 0 -> 18794 bytes ...sr@include@c++@10@ext@string_conversions.h | 123 + ...clude@c++@10@ext@string_conversions.h.blob | Bin 0 -> 17610 bytes .../@usr@include@c++@10@ext@type_traits.h | 221 + ...@usr@include@c++@10@ext@type_traits.h.blob | Bin 0 -> 21270 bytes .../@usr@include@c++@10@filesystem | 53 + .../@usr@include@c++@10@filesystem.blob | Bin 0 -> 12377 bytes .../@usr@include@c++@10@fstream | 1295 +++ .../@usr@include@c++@10@fstream.blob | Bin 0 -> 59668 bytes .../@usr@include@c++@10@functional | 1280 +++ .../@usr@include@c++@10@functional.blob | Bin 0 -> 58839 bytes .../@usr@include@c++@10@initializer_list | 109 + .../@usr@include@c++@10@initializer_list.blob | Bin 0 -> 16543 bytes .../@usr@include@c++@10@iomanip | 540 ++ .../@usr@include@c++@10@iomanip.blob | Bin 0 -> 41084 bytes .../@usr@include@c++@10@ios | 46 + .../@usr@include@c++@10@ios.blob | Bin 0 -> 12581 bytes .../@usr@include@c++@10@iosfwd | 215 + .../@usr@include@c++@10@iosfwd.blob | Bin 0 -> 20915 bytes .../@usr@include@c++@10@iostream | 79 + .../@usr@include@c++@10@iostream.blob | Bin 0 -> 14595 bytes .../@usr@include@c++@10@istream | 993 +++ .../@usr@include@c++@10@istream.blob | Bin 0 -> 51179 bytes .../@usr@include@c++@10@limits | 1897 +++++ .../@usr@include@c++@10@limits.blob | Bin 0 -> 154887 bytes .../@usr@include@c++@10@locale | 46 + .../@usr@include@c++@10@locale.blob | Bin 0 -> 12580 bytes .../@usr@include@c++@10@memory | 429 + .../@usr@include@c++@10@memory.blob | Bin 0 -> 17627 bytes .../@usr@include@c++@10@new | 232 + .../@usr@include@c++@10@new.blob | Bin 0 -> 17879 bytes .../@usr@include@c++@10@optional | 1293 +++ .../@usr@include@c++@10@optional.blob | Bin 0 -> 12377 bytes .../@usr@include@c++@10@ostream | 786 ++ .../@usr@include@c++@10@ostream.blob | Bin 0 -> 40198 bytes .../@usr@include@c++@10@sstream | 881 +++ .../@usr@include@c++@10@sstream.blob | Bin 0 -> 57265 bytes .../@usr@include@c++@10@stdexcept | 307 + .../@usr@include@c++@10@stdexcept.blob | Bin 0 -> 27428 bytes .../@usr@include@c++@10@streambuf | 862 ++ .../@usr@include@c++@10@streambuf.blob | Bin 0 -> 45492 bytes .../@usr@include@c++@10@string | 147 + .../@usr@include@c++@10@string.blob | Bin 0 -> 13111 bytes .../@usr@include@c++@10@system_error | 513 ++ .../@usr@include@c++@10@system_error.blob | Bin 0 -> 36021 bytes .../@usr@include@c++@10@tuple | 1764 +++++ .../@usr@include@c++@10@tuple.blob | Bin 0 -> 121792 bytes .../@usr@include@c++@10@type_traits | 3460 ++++++++ .../@usr@include@c++@10@type_traits.blob | Bin 0 -> 132641 bytes .../@usr@include@c++@10@typeinfo | 225 + .../@usr@include@c++@10@typeinfo.blob | Bin 0 -> 19223 bytes .../@usr@include@c++@10@utility | 478 ++ .../@usr@include@c++@10@utility.blob | Bin 0 -> 27954 bytes .../@usr@include@c++@10@variant | 1800 +++++ .../@usr@include@c++@10@variant.blob | Bin 0 -> 12376 bytes .../@usr@include@c++@10@vector | 129 + .../@usr@include@c++@10@vector.blob | Bin 0 -> 12721 bytes .../@@home@ado@git@ssp/@usr@include@ctype.h | 329 + .../@usr@include@ctype.h.blob | Bin 0 -> 20877 bytes .../@@home@ado@git@ssp/@usr@include@endian.h | 72 + .../@usr@include@endian.h.blob | Bin 0 -> 13771 bytes .../@@home@ado@git@ssp/@usr@include@errno.h | 55 + .../@usr@include@errno.h.blob | Bin 0 -> 13059 bytes .../@usr@include@features.h | 488 ++ .../@usr@include@features.h.blob | Bin 0 -> 16795 bytes .../@usr@include@inttypes.h | 434 + .../@usr@include@inttypes.h.blob | Bin 0 -> 26652 bytes .../@@home@ado@git@ssp/@usr@include@libintl.h | 123 + .../@usr@include@libintl.h.blob | Bin 0 -> 16954 bytes .../@usr@include@linux@errno.h | 1 + .../@usr@include@linux@errno.h.blob | Bin 0 -> 12312 bytes .../@@home@ado@git@ssp/@usr@include@locale.h | 197 + .../@usr@include@locale.h.blob | Bin 0 -> 20842 bytes .../@@home@ado@git@ssp/@usr@include@math.h | 1341 ++++ .../@usr@include@math.h.blob | Bin 0 -> 38701 bytes .../@@home@ado@git@ssp/@usr@include@pthread.h | 1173 +++ .../@usr@include@pthread.h.blob | Bin 0 -> 75457 bytes .../@@home@ado@git@ssp/@usr@include@sched.h | 131 + .../@usr@include@sched.h.blob | Bin 0 -> 19028 bytes .../@usr@include@stdc-predef.h | 60 + .../@usr@include@stdc-predef.h.blob | Bin 0 -> 12597 bytes .../@@home@ado@git@ssp/@usr@include@stdint.h | 319 + .../@usr@include@stdint.h.blob | Bin 0 -> 23140 bytes .../@@home@ado@git@ssp/@usr@include@stdio.h | 875 +++ .../@usr@include@stdio.h.blob | Bin 0 -> 55381 bytes .../@@home@ado@git@ssp/@usr@include@stdlib.h | 1025 +++ .../@usr@include@stdlib.h.blob | Bin 0 -> 67117 bytes .../@@home@ado@git@ssp/@usr@include@string.h | 501 ++ .../@usr@include@string.h.blob | Bin 0 -> 33083 bytes .../@@home@ado@git@ssp/@usr@include@strings.h | 148 + .../@usr@include@strings.h.blob | Bin 0 -> 16483 bytes .../@@home@ado@git@ssp/@usr@include@time.h | 303 + .../@usr@include@time.h.blob | Bin 0 -> 27930 bytes .../@@home@ado@git@ssp/@usr@include@wchar.h | 858 ++ .../@usr@include@wchar.h.blob | Bin 0 -> 59640 bytes .../@@home@ado@git@ssp/@usr@include@wctype.h | 148 + .../@usr@include@wctype.h.blob | Bin 0 -> 20528 bytes .../@usr@include@x86_64-linux-gnu@asm@errno.h | 1 + ...@include@x86_64-linux-gnu@asm@errno.h.blob | Bin 0 -> 12288 bytes ...r@include@x86_64-linux-gnu@bits@byteswap.h | 79 + ...lude@x86_64-linux-gnu@bits@byteswap.h.blob | Bin 0 -> 13738 bytes ...sr@include@x86_64-linux-gnu@bits@cpu-set.h | 124 + ...clude@x86_64-linux-gnu@bits@cpu-set.h.blob | Bin 0 -> 15050 bytes ...usr@include@x86_64-linux-gnu@bits@endian.h | 49 + ...nclude@x86_64-linux-gnu@bits@endian.h.blob | Bin 0 -> 12798 bytes ...include@x86_64-linux-gnu@bits@endianness.h | 11 + ...de@x86_64-linux-gnu@bits@endianness.h.blob | Bin 0 -> 12438 bytes ...@usr@include@x86_64-linux-gnu@bits@errno.h | 53 + ...include@x86_64-linux-gnu@bits@errno.h.blob | Bin 0 -> 12467 bytes ...lude@x86_64-linux-gnu@bits@floatn-common.h | 329 + ...x86_64-linux-gnu@bits@floatn-common.h.blob | Bin 0 -> 16564 bytes ...usr@include@x86_64-linux-gnu@bits@floatn.h | 122 + ...nclude@x86_64-linux-gnu@bits@floatn.h.blob | Bin 0 -> 12811 bytes ...de@x86_64-linux-gnu@bits@flt-eval-method.h | 33 + ...6_64-linux-gnu@bits@flt-eval-method.h.blob | Bin 0 -> 12395 bytes ...sr@include@x86_64-linux-gnu@bits@fp-fast.h | 39 + ...clude@x86_64-linux-gnu@bits@fp-fast.h.blob | Bin 0 -> 12267 bytes ...sr@include@x86_64-linux-gnu@bits@fp-logb.h | 24 + ...clude@x86_64-linux-gnu@bits@fp-logb.h.blob | Bin 0 -> 12411 bytes ...nclude@x86_64-linux-gnu@bits@iscanonical.h | 54 + ...e@x86_64-linux-gnu@bits@iscanonical.h.blob | Bin 0 -> 13266 bytes ...@x86_64-linux-gnu@bits@libc-header-start.h | 86 + ...64-linux-gnu@bits@libc-header-start.h.blob | Bin 0 -> 12978 bytes ...6_64-linux-gnu@bits@libm-simd-decl-stubs.h | 101 + ...linux-gnu@bits@libm-simd-decl-stubs.h.blob | Bin 0 -> 16936 bytes ...usr@include@x86_64-linux-gnu@bits@locale.h | 40 + ...nclude@x86_64-linux-gnu@bits@locale.h.blob | Bin 0 -> 13210 bytes ...nclude@x86_64-linux-gnu@bits@long-double.h | 21 + ...e@x86_64-linux-gnu@bits@long-double.h.blob | Bin 0 -> 12343 bytes ...nclude@x86_64-linux-gnu@bits@math-vector.h | 63 + ...e@x86_64-linux-gnu@bits@math-vector.h.blob | Bin 0 -> 12314 bytes ...inux-gnu@bits@mathcalls-helper-functions.h | 43 + ...gnu@bits@mathcalls-helper-functions.h.blob | Bin 0 -> 13623 bytes ...e@x86_64-linux-gnu@bits@mathcalls-narrow.h | 33 + ..._64-linux-gnu@bits@mathcalls-narrow.h.blob | Bin 0 -> 13054 bytes ...@include@x86_64-linux-gnu@bits@mathcalls.h | 401 + ...ude@x86_64-linux-gnu@bits@mathcalls.h.blob | Bin 0 -> 40755 bytes ...@x86_64-linux-gnu@bits@pthreadtypes-arch.h | 55 + ...64-linux-gnu@bits@pthreadtypes-arch.h.blob | Bin 0 -> 13417 bytes ...clude@x86_64-linux-gnu@bits@pthreadtypes.h | 121 + ...@x86_64-linux-gnu@bits@pthreadtypes.h.blob | Bin 0 -> 17397 bytes ...@usr@include@x86_64-linux-gnu@bits@sched.h | 100 + ...include@x86_64-linux-gnu@bits@sched.h.blob | Bin 0 -> 16036 bytes ...usr@include@x86_64-linux-gnu@bits@select.h | 63 + ...nclude@x86_64-linux-gnu@bits@select.h.blob | Bin 0 -> 12884 bytes ...usr@include@x86_64-linux-gnu@bits@setjmp.h | 40 + ...nclude@x86_64-linux-gnu@bits@setjmp.h.blob | Bin 0 -> 12468 bytes ...nclude@x86_64-linux-gnu@bits@stdint-intn.h | 29 + ...e@x86_64-linux-gnu@bits@stdint-intn.h.blob | Bin 0 -> 12875 bytes ...clude@x86_64-linux-gnu@bits@stdint-uintn.h | 29 + ...@x86_64-linux-gnu@bits@stdint-uintn.h.blob | Bin 0 -> 12917 bytes ...@include@x86_64-linux-gnu@bits@stdio_lim.h | 39 + ...ude@x86_64-linux-gnu@bits@stdio_lim.h.blob | Bin 0 -> 12699 bytes ...clude@x86_64-linux-gnu@bits@stdlib-float.h | 29 + ...@x86_64-linux-gnu@bits@stdlib-float.h.blob | Bin 0 -> 12254 bytes ...clude@x86_64-linux-gnu@bits@struct_mutex.h | 63 + ...@x86_64-linux-gnu@bits@struct_mutex.h.blob | Bin 0 -> 13648 bytes ...lude@x86_64-linux-gnu@bits@struct_rwlock.h | 65 + ...x86_64-linux-gnu@bits@struct_rwlock.h.blob | Bin 0 -> 14060 bytes ...nclude@x86_64-linux-gnu@bits@sys_errlist.h | 32 + ...e@x86_64-linux-gnu@bits@sys_errlist.h.blob | Bin 0 -> 12532 bytes ...86_64-linux-gnu@bits@thread-shared-types.h | 119 + ...-linux-gnu@bits@thread-shared-types.h.blob | Bin 0 -> 15085 bytes .../@usr@include@x86_64-linux-gnu@bits@time.h | 83 + ...@include@x86_64-linux-gnu@bits@time.h.blob | Bin 0 -> 13941 bytes ...usr@include@x86_64-linux-gnu@bits@time64.h | 36 + ...nclude@x86_64-linux-gnu@bits@time64.h.blob | Bin 0 -> 12443 bytes ...r@include@x86_64-linux-gnu@bits@timesize.h | 25 + ...lude@x86_64-linux-gnu@bits@timesize.h.blob | Bin 0 -> 12353 bytes ...@usr@include@x86_64-linux-gnu@bits@timex.h | 110 + ...include@x86_64-linux-gnu@bits@timex.h.blob | Bin 0 -> 17937 bytes ...@usr@include@x86_64-linux-gnu@bits@types.h | 227 + ...include@x86_64-linux-gnu@bits@types.h.blob | Bin 0 -> 19711 bytes ...include@x86_64-linux-gnu@bits@types@FILE.h | 9 + ...de@x86_64-linux-gnu@bits@types@FILE.h.blob | Bin 0 -> 12516 bytes ...clude@x86_64-linux-gnu@bits@types@__FILE.h | 7 + ...@x86_64-linux-gnu@bits@types@__FILE.h.blob | Bin 0 -> 12453 bytes ...e@x86_64-linux-gnu@bits@types@__fpos64_t.h | 16 + ..._64-linux-gnu@bits@types@__fpos64_t.h.blob | Bin 0 -> 13278 bytes ...ude@x86_64-linux-gnu@bits@types@__fpos_t.h | 16 + ...86_64-linux-gnu@bits@types@__fpos_t.h.blob | Bin 0 -> 13224 bytes ...e@x86_64-linux-gnu@bits@types@__locale_t.h | 44 + ..._64-linux-gnu@bits@types@__locale_t.h.blob | Bin 0 -> 13374 bytes ...@x86_64-linux-gnu@bits@types@__mbstate_t.h | 23 + ...64-linux-gnu@bits@types@__mbstate_t.h.blob | Bin 0 -> 13034 bytes ...e@x86_64-linux-gnu@bits@types@__sigset_t.h | 10 + ..._64-linux-gnu@bits@types@__sigset_t.h.blob | Bin 0 -> 12660 bytes ...lude@x86_64-linux-gnu@bits@types@clock_t.h | 9 + ...x86_64-linux-gnu@bits@types@clock_t.h.blob | Bin 0 -> 12510 bytes ...de@x86_64-linux-gnu@bits@types@clockid_t.h | 9 + ...6_64-linux-gnu@bits@types@clockid_t.h.blob | Bin 0 -> 12540 bytes ...nux-gnu@bits@types@cookie_io_functions_t.h | 63 + ...nu@bits@types@cookie_io_functions_t.h.blob | Bin 0 -> 14902 bytes ...lude@x86_64-linux-gnu@bits@types@error_t.h | 24 + ...x86_64-linux-gnu@bits@types@error_t.h.blob | Bin 0 -> 12377 bytes ...ude@x86_64-linux-gnu@bits@types@locale_t.h | 26 + ...86_64-linux-gnu@bits@types@locale_t.h.blob | Bin 0 -> 12567 bytes ...de@x86_64-linux-gnu@bits@types@mbstate_t.h | 8 + ...6_64-linux-gnu@bits@types@mbstate_t.h.blob | Bin 0 -> 12559 bytes ...ude@x86_64-linux-gnu@bits@types@sigset_t.h | 9 + ...86_64-linux-gnu@bits@types@sigset_t.h.blob | Bin 0 -> 12610 bytes ...@x86_64-linux-gnu@bits@types@struct_FILE.h | 120 + ...64-linux-gnu@bits@types@struct_FILE.h.blob | Bin 0 -> 16936 bytes ...4-linux-gnu@bits@types@struct_itimerspec.h | 14 + ...ux-gnu@bits@types@struct_itimerspec.h.blob | Bin 0 -> 12790 bytes ...-linux-gnu@bits@types@struct_sched_param.h | 28 + ...x-gnu@bits@types@struct_sched_param.h.blob | Bin 0 -> 12550 bytes ..._64-linux-gnu@bits@types@struct_timespec.h | 28 + ...inux-gnu@bits@types@struct_timespec.h.blob | Bin 0 -> 12979 bytes ...6_64-linux-gnu@bits@types@struct_timeval.h | 13 + ...linux-gnu@bits@types@struct_timeval.h.blob | Bin 0 -> 12812 bytes ...de@x86_64-linux-gnu@bits@types@struct_tm.h | 28 + ...6_64-linux-gnu@bits@types@struct_tm.h.blob | Bin 0 -> 13492 bytes ...clude@x86_64-linux-gnu@bits@types@time_t.h | 9 + ...@x86_64-linux-gnu@bits@types@time_t.h.blob | Bin 0 -> 12505 bytes ...lude@x86_64-linux-gnu@bits@types@timer_t.h | 9 + ...x86_64-linux-gnu@bits@types@timer_t.h.blob | Bin 0 -> 12527 bytes ...clude@x86_64-linux-gnu@bits@types@wint_t.h | 23 + ...@x86_64-linux-gnu@bits@types@wint_t.h.blob | Bin 0 -> 12472 bytes ...@include@x86_64-linux-gnu@bits@typesizes.h | 100 + ...ude@x86_64-linux-gnu@bits@typesizes.h.blob | Bin 0 -> 16044 bytes ...ude@x86_64-linux-gnu@bits@uintn-identity.h | 50 + ...86_64-linux-gnu@bits@uintn-identity.h.blob | Bin 0 -> 13287 bytes ...@include@x86_64-linux-gnu@bits@waitflags.h | 59 + ...ude@x86_64-linux-gnu@bits@waitflags.h.blob | Bin 0 -> 13271 bytes ...include@x86_64-linux-gnu@bits@waitstatus.h | 59 + ...de@x86_64-linux-gnu@bits@waitstatus.h.blob | Bin 0 -> 13379 bytes ...@usr@include@x86_64-linux-gnu@bits@wchar.h | 49 + ...include@x86_64-linux-gnu@bits@wchar.h.blob | Bin 0 -> 12486 bytes ...clude@x86_64-linux-gnu@bits@wctype-wchar.h | 173 + ...@x86_64-linux-gnu@bits@wctype-wchar.h.blob | Bin 0 -> 21802 bytes ...r@include@x86_64-linux-gnu@bits@wordsize.h | 17 + ...lude@x86_64-linux-gnu@bits@wordsize.h.blob | Bin 0 -> 12495 bytes ...x86_64-linux-gnu@c++@10@bits@atomic_word.h | 40 + ...4-linux-gnu@c++@10@bits@atomic_word.h.blob | Bin 0 -> 12651 bytes ...@x86_64-linux-gnu@c++@10@bits@basic_file.h | 135 + ...64-linux-gnu@c++@10@bits@basic_file.h.blob | Bin 0 -> 18962 bytes ...86_64-linux-gnu@c++@10@bits@c++allocator.h | 59 + ...-linux-gnu@c++@10@bits@c++allocator.h.blob | Bin 0 -> 13869 bytes ...e@x86_64-linux-gnu@c++@10@bits@c++config.h | 2094 +++++ ..._64-linux-gnu@c++@10@bits@c++config.h.blob | Bin 0 -> 45526 bytes ...clude@x86_64-linux-gnu@c++@10@bits@c++io.h | 50 + ...@x86_64-linux-gnu@c++@10@bits@c++io.h.blob | Bin 0 -> 13830 bytes ...e@x86_64-linux-gnu@c++@10@bits@c++locale.h | 114 + ..._64-linux-gnu@c++@10@bits@c++locale.h.blob | Bin 0 -> 15360 bytes ...x86_64-linux-gnu@c++@10@bits@cpu_defines.h | 33 + ...4-linux-gnu@c++@10@bits@cpu_defines.h.blob | Bin 0 -> 12322 bytes ...@x86_64-linux-gnu@c++@10@bits@ctype_base.h | 66 + ...64-linux-gnu@c++@10@bits@ctype_base.h.blob | Bin 0 -> 16782 bytes ...86_64-linux-gnu@c++@10@bits@ctype_inline.h | 76 + ...-linux-gnu@c++@10@bits@ctype_inline.h.blob | Bin 0 -> 16324 bytes ...64-linux-gnu@c++@10@bits@error_constants.h | 178 + ...nux-gnu@c++@10@bits@error_constants.h.blob | Bin 0 -> 22824 bytes ...86_64-linux-gnu@c++@10@bits@gthr-default.h | 890 +++ ...-linux-gnu@c++@10@bits@gthr-default.h.blob | Bin 0 -> 30147 bytes ...nclude@x86_64-linux-gnu@c++@10@bits@gthr.h | 154 + ...e@x86_64-linux-gnu@c++@10@bits@gthr.h.blob | Bin 0 -> 12509 bytes ...4-linux-gnu@c++@10@bits@messages_members.h | 151 + ...ux-gnu@c++@10@bits@messages_members.h.blob | Bin 0 -> 17880 bytes ...@x86_64-linux-gnu@c++@10@bits@os_defines.h | 64 + ...64-linux-gnu@c++@10@bits@os_defines.h.blob | Bin 0 -> 12698 bytes ...86_64-linux-gnu@c++@10@bits@time_members.h | 89 + ...-linux-gnu@c++@10@bits@time_members.h.blob | Bin 0 -> 16382 bytes ...sr@include@x86_64-linux-gnu@gnu@stubs-64.h | 19 + ...clude@x86_64-linux-gnu@gnu@stubs-64.h.blob | Bin 0 -> 12939 bytes .../@usr@include@x86_64-linux-gnu@gnu@stubs.h | 14 + ...@include@x86_64-linux-gnu@gnu@stubs.h.blob | Bin 0 -> 12308 bytes .../@usr@include@x86_64-linux-gnu@sys@cdefs.h | 517 ++ ...@include@x86_64-linux-gnu@sys@cdefs.h.blob | Bin 0 -> 19402 bytes ...@usr@include@x86_64-linux-gnu@sys@select.h | 128 + ...include@x86_64-linux-gnu@sys@select.h.blob | Bin 0 -> 16503 bytes .../@usr@include@x86_64-linux-gnu@sys@types.h | 232 + ...@include@x86_64-linux-gnu@sys@types.h.blob | Bin 0 -> 19747 bytes ...lang@11.0.1@include@__stddef_max_align_t.h | 27 + ...11.0.1@include@__stddef_max_align_t.h.blob | Bin 0 -> 12816 bytes ...b@llvm-11@lib@clang@11.0.1@include@float.h | 152 + ...m-11@lib@clang@11.0.1@include@float.h.blob | Bin 0 -> 15650 bytes ...lvm-11@lib@clang@11.0.1@include@inttypes.h | 97 + ...1@lib@clang@11.0.1@include@inttypes.h.blob | Bin 0 -> 12352 bytes ...@llvm-11@lib@clang@11.0.1@include@stdarg.h | 35 + ...-11@lib@clang@11.0.1@include@stdarg.h.blob | Bin 0 -> 13105 bytes ...@llvm-11@lib@clang@11.0.1@include@stddef.h | 121 + ...-11@lib@clang@11.0.1@include@stddef.h.blob | Bin 0 -> 12601 bytes ...@llvm-11@lib@clang@11.0.1@include@stdint.h | 693 ++ ...-11@lib@clang@11.0.1@include@stdint.h.blob | Bin 0 -> 12818 bytes ...sr@local@include@fast_float@ascii_number.h | 284 + ...cal@include@fast_float@ascii_number.h.blob | Bin 0 -> 23187 bytes ...cal@include@fast_float@decimal_to_binary.h | 174 + ...nclude@fast_float@decimal_to_binary.h.blob | Bin 0 -> 19015 bytes ...@usr@local@include@fast_float@fast_float.h | 45 + ...local@include@fast_float@fast_float.h.blob | Bin 0 -> 15195 bytes ...@usr@local@include@fast_float@fast_table.h | 689 ++ ...local@include@fast_float@fast_table.h.blob | Bin 0 -> 13600 bytes ...sr@local@include@fast_float@float_common.h | 340 + ...cal@include@fast_float@float_common.h.blob | Bin 0 -> 22329 bytes ...sr@local@include@fast_float@parse_number.h | 136 + ...cal@include@fast_float@parse_number.h.blob | Bin 0 -> 20966 bytes ...ude@fast_float@simple_decimal_conversion.h | 360 + ...ast_float@simple_decimal_conversion.h.blob | Bin 0 -> 24844 bytes .../@usr@local@include@ss@common.hpp | 76 + .../@usr@local@include@ss@common.hpp.blob | Bin 0 -> 13720 bytes .../@usr@local@include@ss@converter.hpp | 384 + .../@usr@local@include@ss@converter.hpp.blob | Bin 0 -> 27407 bytes .../@usr@local@include@ss@extract.hpp | 319 + .../@usr@local@include@ss@extract.hpp.blob | Bin 0 -> 12614 bytes .../@usr@local@include@ss@function_traits.hpp | 80 + ...@local@include@ss@function_traits.hpp.blob | Bin 0 -> 15344 bytes .../@usr@local@include@ss@parser.hpp | 546 ++ .../@usr@local@include@ss@parser.hpp.blob | Bin 0 -> 17323 bytes .../@usr@local@include@ss@restrictions.hpp | 127 + ...usr@local@include@ss@restrictions.hpp.blob | Bin 0 -> 16666 bytes .../@usr@local@include@ss@setup.hpp | 244 + .../@usr@local@include@ss@setup.hpp.blob | Bin 0 -> 20570 bytes .../@usr@local@include@ss@splitter.hpp | 451 ++ .../@usr@local@include@ss@splitter.hpp.blob | Bin 0 -> 21821 bytes .../@usr@local@include@ss@type_traits.hpp | 401 + ...@usr@local@include@ss@type_traits.hpp.blob | Bin 0 -> 27007 bytes .../@home@ado@git@ssp/test@test_helpers.hpp | 48 + .../test@test_helpers.hpp.blob | Bin 0 -> 14022 bytes .../@home@ado@git@ssp/test@test_parser.cpp | 737 ++ .../test@test_parser.cpp.blob | Bin 0 -> 19450 bytes .github/workflows/ubuntu-latest-icc.yml | 22 +- script/ci_setup_icc.sh | 2 - test/test_parser.cpp | 3 + 541 files changed, 112438 insertions(+), 8 deletions(-) create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@alloca.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@alloca.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@asm-generic@errno-base.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@asm-generic@errno-base.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@asm-generic@errno.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@asm-generic@errno.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@assert.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@assert.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@algorithm create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@algorithm.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@array create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@array.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@backward@auto_ptr.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@backward@auto_ptr.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@backward@binders.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@backward@binders.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@algorithmfwd.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@algorithmfwd.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@alloc_traits.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@alloc_traits.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocated_ptr.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocated_ptr.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocator.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocator.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_base.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_base.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_lockfree_defines.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_lockfree_defines.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@char_traits.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@char_traits.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@charconv.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@charconv.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@codecvt.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@codecvt.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@concept_check.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@concept_check.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cpp_type_traits.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cpp_type_traits.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cxxabi_forced.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cxxabi_forced.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cxxabi_init_exception.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cxxabi_init_exception.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception_defines.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception_defines.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception_ptr.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception_ptr.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@fstream.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@fstream.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functexcept.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functexcept.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functional_hash.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functional_hash.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@hash_bytes.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@hash_bytes.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@invoke.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@invoke.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ios_base.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ios_base.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@istream.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@istream.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@iterator_concepts.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@iterator_concepts.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_conv.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_conv.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@localefwd.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@localefwd.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@memoryfwd.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@memoryfwd.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@move.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@move.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@nested_exception.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@nested_exception.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream_insert.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream_insert.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@postypes.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@postypes.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@predefined_ops.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@predefined_ops.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ptr_traits.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ptr_traits.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@quoted_string.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@quoted_string.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_access.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_access.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_cmp.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_cmp.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ranges_uninitialized.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ranges_uninitialized.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@refwrap.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@refwrap.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_atomic.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_atomic.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_base.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_base.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@sstream.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@sstream.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_abs.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_abs.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_function.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_function.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algo.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algo.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algobase.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algobase.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_bvector.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_bvector.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_construct.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_construct.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_function.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_function.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_heap.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_heap.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_funcs.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_funcs.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_types.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_types.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_pair.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_pair.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_raw_storage_iter.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_raw_storage_iter.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_relops.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_relops.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_tempbuf.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_tempbuf.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_uninitialized.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_uninitialized.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_vector.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_vector.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf_iterator.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf_iterator.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stringfwd.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stringfwd.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uniform_int_dist.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uniform_int_dist.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@unique_ptr.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@unique_ptr.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uses_allocator.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uses_allocator.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@vector.tcc create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@vector.tcc.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cassert create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cassert.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cctype create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cctype.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cerrno create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cerrno.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cfloat create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cfloat.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cinttypes create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cinttypes.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@clocale create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@clocale.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cmath create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cmath.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@concepts create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@concepts.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdint create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdint.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdio create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdio.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdlib create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdlib.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstring create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstring.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ctime create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ctime.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwchar create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwchar.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwctype create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwctype.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@assertions.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@assertions.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@debug.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@debug.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@exception create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@exception.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@aligned_buffer.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@aligned_buffer.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@alloc_traits.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@alloc_traits.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@atomicity.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@atomicity.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@concurrence.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@concurrence.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@new_allocator.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@new_allocator.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@numeric_traits.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@numeric_traits.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@string_conversions.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@string_conversions.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@type_traits.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@type_traits.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@filesystem create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@filesystem.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@fstream create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@fstream.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@functional create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@functional.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@initializer_list create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@initializer_list.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iomanip create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iomanip.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ios create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ios.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iosfwd create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iosfwd.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iostream create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iostream.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@istream create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@istream.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@limits create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@limits.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@locale create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@locale.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@memory create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@memory.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@new create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@new.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@optional create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@optional.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ostream create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ostream.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@sstream create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@sstream.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@stdexcept create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@stdexcept.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@streambuf create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@streambuf.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@string create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@string.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@system_error create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@system_error.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@tuple create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@tuple.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@type_traits create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@type_traits.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@typeinfo create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@typeinfo.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@utility create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@utility.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@variant create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@variant.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@vector create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@vector.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@ctype.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@ctype.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@endian.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@endian.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@errno.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@errno.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@features.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@features.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@inttypes.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@inttypes.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@libintl.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@libintl.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@linux@errno.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@linux@errno.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@locale.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@locale.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@math.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@math.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@pthread.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@pthread.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@sched.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@sched.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@stdc-predef.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@stdc-predef.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@stdint.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@stdint.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@stdio.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@stdio.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@stdlib.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@stdlib.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@string.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@string.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@strings.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@strings.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@time.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@time.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@wchar.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@wchar.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@wctype.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@wctype.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@asm@errno.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@asm@errno.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@byteswap.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@byteswap.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@cpu-set.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@cpu-set.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endian.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endian.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endianness.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endianness.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@errno.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@errno.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn-common.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn-common.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@flt-eval-method.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@flt-eval-method.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-fast.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-fast.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-logb.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-logb.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@iscanonical.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@iscanonical.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libc-header-start.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libc-header-start.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libm-simd-decl-stubs.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libm-simd-decl-stubs.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@locale.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@locale.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@long-double.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@long-double.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@math-vector.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@math-vector.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-helper-functions.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-helper-functions.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-narrow.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-narrow.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes-arch.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes-arch.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sched.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sched.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@select.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@select.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@setjmp.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@setjmp.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-intn.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-intn.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-uintn.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-uintn.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdio_lim.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdio_lim.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdlib-float.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdlib-float.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_mutex.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_mutex.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_rwlock.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_rwlock.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sys_errlist.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sys_errlist.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@thread-shared-types.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@thread-shared-types.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time64.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time64.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timesize.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timesize.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timex.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timex.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@FILE.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@FILE.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__FILE.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__FILE.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos64_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos64_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__locale_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__locale_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__mbstate_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__mbstate_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__sigset_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__sigset_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clock_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clock_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clockid_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clockid_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@cookie_io_functions_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@cookie_io_functions_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@error_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@error_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@locale_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@locale_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@mbstate_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@mbstate_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@sigset_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@sigset_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_FILE.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_FILE.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_itimerspec.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_itimerspec.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_sched_param.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_sched_param.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timespec.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timespec.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timeval.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timeval.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_tm.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_tm.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@time_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@time_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@timer_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@timer_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@wint_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@wint_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@typesizes.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@typesizes.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@uintn-identity.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@uintn-identity.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitflags.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitflags.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitstatus.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitstatus.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wchar.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wchar.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wctype-wchar.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wctype-wchar.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wordsize.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wordsize.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@atomic_word.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@atomic_word.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@basic_file.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@basic_file.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++allocator.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++allocator.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++config.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++config.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++io.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++io.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++locale.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++locale.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@cpu_defines.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@cpu_defines.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_base.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_base.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_inline.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_inline.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@error_constants.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@error_constants.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr-default.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr-default.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@messages_members.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@messages_members.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@os_defines.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@os_defines.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@time_members.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@time_members.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@gnu@stubs-64.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@gnu@stubs-64.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@gnu@stubs.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@gnu@stubs.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@cdefs.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@cdefs.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@select.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@select.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@types.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@types.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@__stddef_max_align_t.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@__stddef_max_align_t.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@float.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@float.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@inttypes.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@inttypes.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdarg.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdarg.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stddef.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stddef.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdint.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdint.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@ascii_number.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@ascii_number.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@decimal_to_binary.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@decimal_to_binary.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_float.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_float.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_table.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_table.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@float_common.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@float_common.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@parse_number.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@parse_number.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@simple_decimal_conversion.h create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@simple_decimal_conversion.h.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@common.hpp create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@common.hpp.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@converter.hpp create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@converter.hpp.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@extract.hpp create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@extract.hpp.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@function_traits.hpp create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@function_traits.hpp.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@parser.hpp create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@parser.hpp.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@restrictions.hpp create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@restrictions.hpp.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@setup.hpp create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@setup.hpp.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@splitter.hpp create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@splitter.hpp.blob create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@type_traits.hpp create mode 100644 .ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@type_traits.hpp.blob create mode 100644 .ccls-cache/@home@ado@git@ssp/test@test_helpers.hpp create mode 100644 .ccls-cache/@home@ado@git@ssp/test@test_helpers.hpp.blob create mode 100644 .ccls-cache/@home@ado@git@ssp/test@test_parser.cpp create mode 100644 .ccls-cache/@home@ado@git@ssp/test@test_parser.cpp.blob diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@alloca.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@alloca.h new file mode 100644 index 0000000..bd44688 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@alloca.h @@ -0,0 +1,40 @@ +/* Copyright (C) 1992-2020 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 definitions. */ +#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/@@home@ado@git@ssp/@usr@include@alloca.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@alloca.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f00623fa220b26aad3b65d89e775d760100d4615 GIT binary patch literal 12933 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 ee#Cuq + +#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/@@home@ado@git@ssp/@usr@include@asm-generic@errno.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@asm-generic@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..010825805f1cca2fed33b60c3bcc837d73dd6f68 GIT binary patch literal 18370 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 N`&mDN1JDVM{|75`6|VpQ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@assert.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@assert.h new file mode 100644 index 0000000..ae9831b --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@assert.h @@ -0,0 +1,144 @@ +/* Copyright (C) 1991-2020 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.2 Diagnostics + */ + +#ifdef _ASSERT_H + +# undef _ASSERT_H +# undef assert +# undef __ASSERT_VOID_CAST + +# ifdef __USE_GNU +# undef assert_perror +# endif + +#endif /* assert.h */ + +#define _ASSERT_H 1 +#include + +#if defined __cplusplus && __GNUC_PREREQ (2,95) +# define __ASSERT_VOID_CAST static_cast +#else +# define __ASSERT_VOID_CAST (void) +#endif + +/* void assert (int expression); + + If NDEBUG is defined, do nothing. + If not, and EXPRESSION is zero, print an error message and abort. */ + +#ifdef NDEBUG + +# define assert(expr) (__ASSERT_VOID_CAST (0)) + +/* void assert_perror (int errnum); + + If NDEBUG is defined, do nothing. If not, and ERRNUM is not zero, print an + error message with the error text for ERRNUM and abort. + (This is a GNU extension.) */ + +# ifdef __USE_GNU +# define assert_perror(errnum) (__ASSERT_VOID_CAST (0)) +# endif + +#else /* Not NDEBUG. */ + +#ifndef _ASSERT_H_DECLS +#define _ASSERT_H_DECLS +__BEGIN_DECLS + +/* This prints an "Assertion failed" message and aborts. */ +extern void __assert_fail (const char *__assertion, const char *__file, + unsigned int __line, const char *__function) + __THROW __attribute__ ((__noreturn__)); + +/* Likewise, but prints the error text for ERRNUM. */ +extern void __assert_perror_fail (int __errnum, const char *__file, + unsigned int __line, const char *__function) + __THROW __attribute__ ((__noreturn__)); + + +/* The following is not at all used here but needed for standard + compliance. */ +extern void __assert (const char *__assertion, const char *__file, int __line) + __THROW __attribute__ ((__noreturn__)); + + +__END_DECLS +#endif /* Not _ASSERT_H_DECLS */ + +/* When possible, define assert so that it does not add extra + parentheses around EXPR. Otherwise, those added parentheses would + suppress warnings we'd expect to be detected by gcc's -Wparentheses. */ +# if defined __cplusplus +# define assert(expr) \ + (static_cast (expr) \ + ? void (0) \ + : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION)) +# elif !defined __GNUC__ || defined __STRICT_ANSI__ +# define assert(expr) \ + ((expr) \ + ? __ASSERT_VOID_CAST (0) \ + : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION)) +# else +/* The first occurrence of EXPR is not evaluated due to the sizeof, + but will trigger any pedantic warnings masked by the __extension__ + for the second occurrence. The ternary operator is required to + support function pointers and bit fields in this context, and to + suppress the evaluation of variable length arrays. */ +# define assert(expr) \ + ((void) sizeof ((expr) ? 1 : 0), __extension__ ({ \ + if (expr) \ + ; /* empty */ \ + else \ + __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION); \ + })) +# endif + +# ifdef __USE_GNU +# define assert_perror(errnum) \ + (!(errnum) \ + ? __ASSERT_VOID_CAST (0) \ + : __assert_perror_fail ((errnum), __FILE__, __LINE__, __ASSERT_FUNCTION)) +# endif + +/* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__' + which contains the name of the function currently being defined. + This is broken in G++ before version 2.6. + C9x has a similar variable called __func__, but prefer the GCC one since + it demangles C++ function names. */ +# if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4) +# define __ASSERT_FUNCTION __extension__ __PRETTY_FUNCTION__ +# else +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __ASSERT_FUNCTION __func__ +# else +# define __ASSERT_FUNCTION ((const char *) 0) +# endif +# endif + +#endif /* NDEBUG. */ + + +#if defined __USE_ISOC11 && !defined __cplusplus +# undef static_assert +# define static_assert _Static_assert +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@assert.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@assert.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..40268e8e39b474d255cbf06c91170074b48ac360 GIT binary patch literal 14624 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 -*- C++ -*- + +// Copyright (C) 2001-2020 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,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 include/algorithm + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_ALGORITHM +#define _GLIBCXX_ALGORITHM 1 + +#pragma GCC system_header + +#include // UK-300. +#include +#include +#if __cplusplus > 201703L +# include +#endif + +#if __cplusplus > 201402L +// Parallel STL algorithms +# if _PSTL_EXECUTION_POLICIES_DEFINED +// If has already been included, pull in implementations +# include +# else +// Otherwise just pull in forward declarations +# include +# define _PSTL_ALGORITHM_FORWARD_DECLARED 1 +# endif + +// Feature test macro for parallel algorithms +# define __cpp_lib_parallel_algorithm 201603L +#endif // C++17 + +#ifdef _GLIBCXX_PARALLEL +# include +#endif + +#endif /* _GLIBCXX_ALGORITHM */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@algorithm.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@algorithm.blob new file mode 100644 index 0000000000000000000000000000000000000000..d0dff33928833f1be666e2f9472d48f9e330681f GIT binary patch literal 12497 zcmbVSy{{xk5#RGA7C0cV5Kb&hCgN#s{G`*_iBI+c_MLRdd<7OstGBmzw|VpB>7KXy zE+By%i2w*7AmQII5g8IONDz{clJIdyRdvr?&ztJmS)X*PCrx*C^{>9G`Wvg~U;Wd+ zK40Bg<@>tSx!lzG&bZv#CU@F8`Voz6t#0qBrdi!pg{*cSGPCs zPtRHX?@M>`&bGO!RMBm8ethqNcyK=}Ow}E;UDf4l<7{3^w^y<#Y_``$quXrTRmz#V zviJ6@=l}ipKR#bT#N9O7<{v$I`fYZTy12+M-^qK*vheVX2rHy9+FjJZ*TDT&S|_$e zEnQByiK;8tfF3aUSm-~DXccB{Dp!oC^(bt$bX}{@xt-Mopv+R^F|}@EYEhVy-Ghj; z9|BAy7V8Qji(S2zmQX=;8r_jUd3^)wb&w59pWkwjpau>=SqO=}vANplEx$b6;hNNv z6SG$Zx?@+F&pIs{M^apPL%AI>G2rq7E^71?b+<0Y_SIVizss969M>r) ztlH}h`YSk^^9nH(WVTv>L$lVK*$Lz}qIV2Pd$M@KUVIq*ZEAK~yb6rSC}C=wz%5?u z0bY081#81qw^Hc^IszJ10voXDYTIfpz=lk<2%!R?H@uO=tgF3jL1V93JSH%b34$q= znKk7m+h|o})^%&%t|!|^2VY!31OayqHnZ$-bRuWFRZ>Z$e@;{~&l0|VbOAt4xE4Jj z%fB-vZ#yv&^Z{${_*f!gt??ShXnIVH$CDI}3yC1Yra+Zarj!Nxt!v#{a5l)vBtG_> z)b<1y;Gws5TMF=+Vgrn`_nN2%X_ogNLX>L^E?V&MGjO8NSF|q8jkmP)cRI4HulZOR z0}I)fK;GuW9k1^L@#yMcHhEE8m)YfIj(=13mS0}pd*|NeARZwg=zx)nQXV0en_cBW z_~RR|k3)G6f{#(rCCB2n5O?dcM43Xy`1}{Yy_NOM$>D$!T~6#n z2mrsh^-0&nPsgAI9Z$H>IYxz;WRVjTM&d {*g86Try{F>~;@SErFk`)C+ldUQ@C zmRn1~o*{Inzei-4MYF8dc6pQl7ltv~wc^a2aa*`dU&|sZwcFPlL?xvPl|C?6h`}v& z3FXN4Kx8I5GP!KzDi%2kTHosJq4hcL=UEfSXyPwTx}fR&*#P7 zeB&W*;%a=v9l;`rs3h)j^Nbpk5pVn@D_L|TZ zUb5Km$X@FAEd8)-R#38Sp27nIg>ctByyxHjp42C%nfDN%zD# z#ac$~0(pQ0v2MY^2-Fc)VDY99GJKFfxjM8i1XS+o>f~xwc6$KDA-pG?2U&&|P6T0}PadW{ z(Ed~6)~T{Iv7EZJ3K?8#3M2jV{R`+l^T}Pj7WD}<(1XG%6nHe1HITAua#bm`$m!JH z>424CmB^Bd51+R~>VNxe2r11bLZbl5In?;r5dM~TVB*ar`gGKGz&Lz{2s@$G@{#F!Bp`gR(AarQ8bJqv-@305b*H(T`4$`j7tn-4kUg zY4_N7@eNjKZzb}GQ%ZGBUCPP;1F0AkVguLxnS&afGW5h#T?9mnAX=z9ICt0VM%{vJ?7|F|3v zuqJXr9}AHHlO|R&F&iOxBr?_mHqF_q@Z1@zBvv*snq+r{lgZ&xybMUCOc92JAPxqc zh!9LVv4ZEIT$Fu5?~i;8GW_}*{~UWfU2Tk<9f<`186GDP#kl*3W-5rcvt3!$vv>9Z z7Z;!hTSIx}fbSwiAo&P+$0Q#OS5Rb53`_lYZ=vZ04Wdsr>8I^MW1NmgmOk6v@#T&FqTnz zHV^lm*of0x(j{tMi-%z?Uv~2%9UhL1@a+$o?7;^o>G5K$qpF56)-{POrI}#A-lk4m z&v$c_4<{*N1jJyX%bUe9&(vPvx`atQ=u|RnZyMKJ<4(0~%{9r4)V%F#t9+j4x>tF(&{!B{xSyy8` z_Q@}+1pFm?JH=8nVWshnP}N{`J}AcWuin4^c_K;Jj1zY2F%b*@( zFi2-n7ZnE>hO1L2Ad%Mk%5K@+XhXV_67vk%#>s{gk;B=XpqGUwbs_E}6LETLG0tkn z0RcKE5XL$v_}EI0M+9B%Y{QB84iBzy?sAfGoSV-)0OHw5C!{gXh{;|@^Xi!=!Tt>{ z;Dum(>!lUl|yM)kBt+3bi~HoJ%Cf{4s8(x~{Ky{pTqM{s6x#vw0c*?_Q4{WQQaAWc0{= z^xhf#LG-ly*~x_f<=uy?4_BpaZ|H%&@e+RaF{cT9NpfU5-^y^!f VtJR%%zw++=SMc|})r&i@{{K;^Ew=yw literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@array b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@array new file mode 100644 index 0000000..3bb6f48 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@array @@ -0,0 +1,451 @@ +// -*- C++ -*- + +// Copyright (C) 2007-2020 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/array + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_ARRAY +#define _GLIBCXX_ARRAY 1 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER + + template + struct __array_traits + { + typedef _Tp _Type[_Nm]; + typedef __is_swappable<_Tp> _Is_swappable; + typedef __is_nothrow_swappable<_Tp> _Is_nothrow_swappable; + + static constexpr _Tp& + _S_ref(const _Type& __t, std::size_t __n) noexcept + { return const_cast<_Tp&>(__t[__n]); } + + static constexpr _Tp* + _S_ptr(const _Type& __t) noexcept + { return const_cast<_Tp*>(__t); } + }; + + template + struct __array_traits<_Tp, 0> + { + struct _Type { }; + typedef true_type _Is_swappable; + typedef true_type _Is_nothrow_swappable; + + static constexpr _Tp& + _S_ref(const _Type&, std::size_t) noexcept + { return *static_cast<_Tp*>(nullptr); } + + static constexpr _Tp* + _S_ptr(const _Type&) noexcept + { return nullptr; } + }; + + /** + * @brief A standard container for storing a fixed size sequence of elements. + * + * @ingroup sequences + * + * Meets the requirements of a container, a + * reversible container, and a + * sequence. + * + * Sets support random access iterators. + * + * @tparam Tp Type of element. Required to be a complete type. + * @tparam Nm Number of elements. + */ + template + struct array + { + typedef _Tp value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + typedef value_type* iterator; + typedef const value_type* const_iterator; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; + + // Support for zero-sized arrays mandatory. + typedef _GLIBCXX_STD_C::__array_traits<_Tp, _Nm> _AT_Type; + typename _AT_Type::_Type _M_elems; + + // No explicit construct/copy/destroy for aggregate type. + + // DR 776. + _GLIBCXX20_CONSTEXPR void + fill(const value_type& __u) + { std::fill_n(begin(), size(), __u); } + + _GLIBCXX20_CONSTEXPR void + swap(array& __other) + noexcept(_AT_Type::_Is_nothrow_swappable::value) + { std::swap_ranges(begin(), end(), __other.begin()); } + + // Iterators. + _GLIBCXX17_CONSTEXPR iterator + begin() noexcept + { return iterator(data()); } + + _GLIBCXX17_CONSTEXPR const_iterator + begin() const noexcept + { return const_iterator(data()); } + + _GLIBCXX17_CONSTEXPR iterator + end() noexcept + { return iterator(data() + _Nm); } + + _GLIBCXX17_CONSTEXPR const_iterator + end() const noexcept + { return const_iterator(data() + _Nm); } + + _GLIBCXX17_CONSTEXPR reverse_iterator + rbegin() noexcept + { return reverse_iterator(end()); } + + _GLIBCXX17_CONSTEXPR const_reverse_iterator + rbegin() const noexcept + { return const_reverse_iterator(end()); } + + _GLIBCXX17_CONSTEXPR reverse_iterator + rend() noexcept + { return reverse_iterator(begin()); } + + _GLIBCXX17_CONSTEXPR const_reverse_iterator + rend() const noexcept + { return const_reverse_iterator(begin()); } + + _GLIBCXX17_CONSTEXPR const_iterator + cbegin() const noexcept + { return const_iterator(data()); } + + _GLIBCXX17_CONSTEXPR const_iterator + cend() const noexcept + { return const_iterator(data() + _Nm); } + + _GLIBCXX17_CONSTEXPR const_reverse_iterator + crbegin() const noexcept + { return const_reverse_iterator(end()); } + + _GLIBCXX17_CONSTEXPR const_reverse_iterator + crend() const noexcept + { return const_reverse_iterator(begin()); } + + // Capacity. + constexpr size_type + size() const noexcept { return _Nm; } + + constexpr size_type + max_size() const noexcept { return _Nm; } + + _GLIBCXX_NODISCARD constexpr bool + empty() const noexcept { return size() == 0; } + + // Element access. + _GLIBCXX17_CONSTEXPR reference + operator[](size_type __n) noexcept + { return _AT_Type::_S_ref(_M_elems, __n); } + + constexpr const_reference + operator[](size_type __n) const noexcept + { return _AT_Type::_S_ref(_M_elems, __n); } + + _GLIBCXX17_CONSTEXPR reference + at(size_type __n) + { + if (__n >= _Nm) + std::__throw_out_of_range_fmt(__N("array::at: __n (which is %zu) " + ">= _Nm (which is %zu)"), + __n, _Nm); + return _AT_Type::_S_ref(_M_elems, __n); + } + + constexpr const_reference + at(size_type __n) const + { + // Result of conditional expression must be an lvalue so use + // boolean ? lvalue : (throw-expr, lvalue) + return __n < _Nm ? _AT_Type::_S_ref(_M_elems, __n) + : (std::__throw_out_of_range_fmt(__N("array::at: __n (which is %zu) " + ">= _Nm (which is %zu)"), + __n, _Nm), + _AT_Type::_S_ref(_M_elems, 0)); + } + + _GLIBCXX17_CONSTEXPR reference + front() noexcept + { return *begin(); } + + constexpr const_reference + front() const noexcept + { return _AT_Type::_S_ref(_M_elems, 0); } + + _GLIBCXX17_CONSTEXPR reference + back() noexcept + { return _Nm ? *(end() - 1) : *end(); } + + constexpr const_reference + back() const noexcept + { + return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1) + : _AT_Type::_S_ref(_M_elems, 0); + } + + _GLIBCXX17_CONSTEXPR pointer + data() noexcept + { return _AT_Type::_S_ptr(_M_elems); } + + _GLIBCXX17_CONSTEXPR const_pointer + data() const noexcept + { return _AT_Type::_S_ptr(_M_elems); } + }; + +#if __cpp_deduction_guides >= 201606 + template + array(_Tp, _Up...) + -> array && ...), _Tp>, + 1 + sizeof...(_Up)>; +#endif + + // Array comparisons. + template + _GLIBCXX20_CONSTEXPR + inline bool + operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) + { return std::equal(__one.begin(), __one.end(), __two.begin()); } + +#if __cpp_lib_three_way_comparison && __cpp_lib_concepts + template + constexpr __detail::__synth3way_t<_Tp> + operator<=>(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) + { +#ifdef __cpp_lib_is_constant_evaluated + if constexpr (_Nm && __is_memcmp_ordered<_Tp>::__value) + if (!std::is_constant_evaluated()) + { + constexpr size_t __n = _Nm * sizeof(_Tp); + return __builtin_memcmp(__a.data(), __b.data(), __n) <=> 0; + } +#endif + + for (size_t __i = 0; __i < _Nm; ++__i) + { + auto __c = __detail::__synth3way(__a[__i], __b[__i]); + if (__c != 0) + return __c; + } + return strong_ordering::equal; + } +#else + template + _GLIBCXX20_CONSTEXPR + inline bool + operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) + { return !(__one == __two); } + + template + _GLIBCXX20_CONSTEXPR + inline bool + operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) + { + return std::lexicographical_compare(__a.begin(), __a.end(), + __b.begin(), __b.end()); + } + + template + _GLIBCXX20_CONSTEXPR + inline bool + operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) + { return __two < __one; } + + template + _GLIBCXX20_CONSTEXPR + inline bool + operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) + { return !(__one > __two); } + + template + _GLIBCXX20_CONSTEXPR + inline bool + operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) + { return !(__one < __two); } +#endif // three_way_comparison && concepts + + // Specialized algorithms. + template + _GLIBCXX20_CONSTEXPR + inline +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + // Constrained free swap overload, see p0185r1 + typename enable_if< + _GLIBCXX_STD_C::__array_traits<_Tp, _Nm>::_Is_swappable::value + >::type +#else + void +#endif + swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two) + noexcept(noexcept(__one.swap(__two))) + { __one.swap(__two); } + +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + template + typename enable_if< + !_GLIBCXX_STD_C::__array_traits<_Tp, _Nm>::_Is_swappable::value>::type + swap(array<_Tp, _Nm>&, array<_Tp, _Nm>&) = delete; +#endif + + template + constexpr _Tp& + get(array<_Tp, _Nm>& __arr) noexcept + { + static_assert(_Int < _Nm, "array index is within bounds"); + return _GLIBCXX_STD_C::__array_traits<_Tp, _Nm>:: + _S_ref(__arr._M_elems, _Int); + } + + template + constexpr _Tp&& + get(array<_Tp, _Nm>&& __arr) noexcept + { + static_assert(_Int < _Nm, "array index is within bounds"); + return std::move(_GLIBCXX_STD_C::get<_Int>(__arr)); + } + + template + constexpr const _Tp& + get(const array<_Tp, _Nm>& __arr) noexcept + { + static_assert(_Int < _Nm, "array index is within bounds"); + return _GLIBCXX_STD_C::__array_traits<_Tp, _Nm>:: + _S_ref(__arr._M_elems, _Int); + } + + template + constexpr const _Tp&& + get(const array<_Tp, _Nm>&& __arr) noexcept + { + static_assert(_Int < _Nm, "array index is within bounds"); + return std::move(_GLIBCXX_STD_C::get<_Int>(__arr)); + } + +#if __cplusplus > 201703L +#define __cpp_lib_to_array 201907L + + template + constexpr array, sizeof...(_Idx)> + __to_array(_Tp (&__a)[sizeof...(_Idx)], index_sequence<_Idx...>) + { + if constexpr (_Move) + return {{std::move(__a[_Idx])...}}; + else + return {{__a[_Idx]...}}; + } + + template + constexpr array, _Nm> + to_array(_Tp (&__a)[_Nm]) + noexcept(is_nothrow_constructible_v<_Tp, _Tp&>) + { + static_assert(!is_array_v<_Tp>); + static_assert(is_constructible_v<_Tp, _Tp&>); + if constexpr (is_constructible_v<_Tp, _Tp&>) + return _GLIBCXX_STD_C::__to_array(__a, make_index_sequence<_Nm>{}); + __builtin_unreachable(); // FIXME: see PR c++/91388 + } + + template + constexpr array, _Nm> + to_array(_Tp (&&__a)[_Nm]) + noexcept(is_nothrow_move_constructible_v<_Tp>) + { + static_assert(!is_array_v<_Tp>); + static_assert(is_move_constructible_v<_Tp>); + if constexpr (is_move_constructible_v<_Tp>) + return _GLIBCXX_STD_C::__to_array<1>(__a, make_index_sequence<_Nm>{}); + __builtin_unreachable(); // FIXME: see PR c++/91388 + } +#endif // C++20 + +_GLIBCXX_END_NAMESPACE_CONTAINER +} // namespace std + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Tuple interface to class template array. + + /// tuple_size + template + struct tuple_size; + + /// Partial specialization for std::array + template + struct tuple_size<_GLIBCXX_STD_C::array<_Tp, _Nm>> + : public integral_constant { }; + + /// tuple_element + template + struct tuple_element; + + /// Partial specialization for std::array + template + struct tuple_element<_Int, _GLIBCXX_STD_C::array<_Tp, _Nm>> + { + static_assert(_Int < _Nm, "index is out of bounds"); + typedef _Tp type; + }; + + template + struct __is_tuple_like_impl<_GLIBCXX_STD_C::array<_Tp, _Nm>> : true_type + { }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#ifdef _GLIBCXX_DEBUG +# include +#endif + +#endif // C++11 + +#endif // _GLIBCXX_ARRAY diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@array.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@array.blob new file mode 100644 index 0000000000000000000000000000000000000000..e1eb5f494e3b3c17345343218484e16b6cf10a4b GIT binary patch literal 31716 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. + +/** @file backward/auto_ptr.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _BACKWARD_AUTO_PTR_H +#define _BACKWARD_AUTO_PTR_H 1 + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * A wrapper class to provide auto_ptr with reference semantics. + * For example, an auto_ptr can be assigned (or constructed from) + * the result of a function which returns an auto_ptr by value. + * + * All the auto_ptr_ref stuff should happen behind the scenes. + */ + template + struct auto_ptr_ref + { + _Tp1* _M_ptr; + + explicit + auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { } + } _GLIBCXX_DEPRECATED; + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + + /** + * @brief A simple smart pointer providing strict ownership semantics. + * + * The Standard says: + *
+   *  An @c auto_ptr owns the object it holds a pointer to.  Copying
+   *  an @c auto_ptr copies the pointer and transfers ownership to the
+   *  destination.  If more than one @c auto_ptr owns the same object
+   *  at the same time the behavior of the program is undefined.
+   *
+   *  The uses of @c auto_ptr include providing temporary
+   *  exception-safety for dynamically allocated memory, passing
+   *  ownership of dynamically allocated memory to a function, and
+   *  returning dynamically allocated memory from a function.  @c
+   *  auto_ptr does not meet the CopyConstructible and Assignable
+   *  requirements for Standard Library container elements and thus
+   *  instantiating a Standard Library container with an @c auto_ptr
+   *  results in undefined behavior.
+   *  
+ * Quoted from [20.4.5]/3. + * + * Good examples of what can and cannot be done with auto_ptr can + * be found in the libstdc++ testsuite. + * + * _GLIBCXX_RESOLVE_LIB_DEFECTS + * 127. auto_ptr<> conversion issues + * These resolutions have all been incorporated. + */ + template + class auto_ptr + { + private: + _Tp* _M_ptr; + + public: + /// The pointed-to type. + typedef _Tp element_type; + + /** + * @brief An %auto_ptr is usually constructed from a raw pointer. + * @param __p A pointer (defaults to NULL). + * + * This object now @e owns the object pointed to by @a __p. + */ + explicit + auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } + + /** + * @brief An %auto_ptr can be constructed from another %auto_ptr. + * @param __a Another %auto_ptr of the same type. + * + * This object now @e owns the object previously owned by @a __a, + * which has given up ownership. + */ + auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } + + /** + * @brief An %auto_ptr can be constructed from another %auto_ptr. + * @param __a Another %auto_ptr of a different but related type. + * + * A pointer-to-Tp1 must be convertible to a + * pointer-to-Tp/element_type. + * + * This object now @e owns the object previously owned by @a __a, + * which has given up ownership. + */ + template + auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } + + /** + * @brief %auto_ptr assignment operator. + * @param __a Another %auto_ptr of the same type. + * + * This object now @e owns the object previously owned by @a __a, + * which has given up ownership. The object that this one @e + * used to own and track has been deleted. + */ + auto_ptr& + operator=(auto_ptr& __a) throw() + { + reset(__a.release()); + return *this; + } + + /** + * @brief %auto_ptr assignment operator. + * @param __a Another %auto_ptr of a different but related type. + * + * A pointer-to-Tp1 must be convertible to a pointer-to-Tp/element_type. + * + * This object now @e owns the object previously owned by @a __a, + * which has given up ownership. The object that this one @e + * used to own and track has been deleted. + */ + template + auto_ptr& + operator=(auto_ptr<_Tp1>& __a) throw() + { + reset(__a.release()); + return *this; + } + + /** + * When the %auto_ptr goes out of scope, the object it owns is + * deleted. If it no longer owns anything (i.e., @c get() is + * @c NULL), then this has no effect. + * + * The C++ standard says there is supposed to be an empty throw + * specification here, but omitting it is standard conforming. Its + * presence can be detected only if _Tp::~_Tp() throws, but this is + * prohibited. [17.4.3.6]/2 + */ + ~auto_ptr() { delete _M_ptr; } + + /** + * @brief Smart pointer dereferencing. + * + * If this %auto_ptr no longer owns anything, then this + * operation will crash. (For a smart pointer, no longer owns + * anything is the same as being a null pointer, and you know + * what happens when you dereference one of those...) + */ + element_type& + operator*() const throw() + { + __glibcxx_assert(_M_ptr != 0); + return *_M_ptr; + } + + /** + * @brief Smart pointer dereferencing. + * + * This returns the pointer itself, which the language then will + * automatically cause to be dereferenced. + */ + element_type* + operator->() const throw() + { + __glibcxx_assert(_M_ptr != 0); + return _M_ptr; + } + + /** + * @brief Bypassing the smart pointer. + * @return The raw pointer being managed. + * + * You can get a copy of the pointer that this object owns, for + * situations such as passing to a function which only accepts + * a raw pointer. + * + * @note This %auto_ptr still owns the memory. + */ + element_type* + get() const throw() { return _M_ptr; } + + /** + * @brief Bypassing the smart pointer. + * @return The raw pointer being managed. + * + * You can get a copy of the pointer that this object owns, for + * situations such as passing to a function which only accepts + * a raw pointer. + * + * @note This %auto_ptr no longer owns the memory. When this object + * goes out of scope, nothing will happen. + */ + element_type* + release() throw() + { + element_type* __tmp = _M_ptr; + _M_ptr = 0; + return __tmp; + } + + /** + * @brief Forcibly deletes the managed object. + * @param __p A pointer (defaults to NULL). + * + * This object now @e owns the object pointed to by @a __p. The + * previous object has been deleted. + */ + void + reset(element_type* __p = 0) throw() + { + if (__p != _M_ptr) + { + delete _M_ptr; + _M_ptr = __p; + } + } + + /** + * @brief Automatic conversions + * + * These operations are supposed to convert an %auto_ptr into and from + * an auto_ptr_ref automatically as needed. This would allow + * constructs such as + * @code + * auto_ptr func_returning_auto_ptr(.....); + * ... + * auto_ptr ptr = func_returning_auto_ptr(.....); + * @endcode + * + * But it doesn't work, and won't be fixed. For further details see + * http://cplusplus.github.io/LWG/lwg-closed.html#463 + */ + auto_ptr(auto_ptr_ref __ref) throw() + : _M_ptr(__ref._M_ptr) { } + + auto_ptr& + operator=(auto_ptr_ref __ref) throw() + { + if (__ref._M_ptr != this->get()) + { + delete _M_ptr; + _M_ptr = __ref._M_ptr; + } + return *this; + } + + template + operator auto_ptr_ref<_Tp1>() throw() + { return auto_ptr_ref<_Tp1>(this->release()); } + + template + operator auto_ptr<_Tp1>() throw() + { return auto_ptr<_Tp1>(this->release()); } + } _GLIBCXX_DEPRECATED; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 541. shared_ptr template assignment and void + template<> + class auto_ptr + { + public: + typedef void element_type; + } _GLIBCXX_DEPRECATED; + +#if __cplusplus >= 201103L + template<_Lock_policy _Lp> + template + inline + __shared_count<_Lp>::__shared_count(std::auto_ptr<_Tp>&& __r) + : _M_pi(new _Sp_counted_ptr<_Tp*, _Lp>(__r.get())) + { __r.release(); } + + template + template + inline + __shared_ptr<_Tp, _Lp>::__shared_ptr(std::auto_ptr<_Tp1>&& __r) + : _M_ptr(__r.get()), _M_refcount() + { + __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) + static_assert( sizeof(_Tp1) > 0, "incomplete type" ); + _Tp1* __tmp = __r.get(); + _M_refcount = __shared_count<_Lp>(std::move(__r)); + _M_enable_shared_from_this_with(__tmp); + } + + template + template + inline + shared_ptr<_Tp>::shared_ptr(std::auto_ptr<_Tp1>&& __r) + : __shared_ptr<_Tp>(std::move(__r)) { } + + template + template + inline + unique_ptr<_Tp, _Dp>::unique_ptr(auto_ptr<_Up>&& __u) noexcept + : _M_t(__u.release(), deleter_type()) { } +#endif + +#pragma GCC diagnostic pop + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _BACKWARD_AUTO_PTR_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@backward@auto_ptr.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@backward@auto_ptr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..868e378b634c28a2621d8883f04188e9ceba9e53 GIT binary patch literal 24328 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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 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); } + } _GLIBCXX_DEPRECATED; + + /// One of the @link binders binder functors@endlink. + template + 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); } + } _GLIBCXX_DEPRECATED; + + /// One of the @link binders binder functors@endlink. + template + 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/@@home@ado@git@ssp/@usr@include@c++@10@backward@binders.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@backward@binders.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7d2257de9d9039041cc4c89f715d9d5b3490a4c4 GIT binary patch literal 19555 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@algorithmfwd.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@algorithmfwd.h new file mode 100644 index 0000000..799d9d5 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@algorithmfwd.h @@ -0,0 +1,967 @@ +// Forward declarations -*- C++ -*- + +// Copyright (C) 2007-2020 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/algorithmfwd.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{algorithm} + */ + +#ifndef _GLIBCXX_ALGORITHMFWD_H +#define _GLIBCXX_ALGORITHMFWD_H 1 + +#pragma GCC system_header + +#include +#include +#include +#if __cplusplus >= 201103L +#include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /* + adjacent_find + all_of (C++11) + any_of (C++11) + binary_search + clamp (C++17) + copy + copy_backward + copy_if (C++11) + copy_n (C++11) + count + count_if + equal + equal_range + fill + fill_n + find + find_end + find_first_of + find_if + find_if_not (C++11) + for_each + generate + generate_n + includes + inplace_merge + is_heap (C++11) + is_heap_until (C++11) + is_partitioned (C++11) + is_sorted (C++11) + is_sorted_until (C++11) + iter_swap + lexicographical_compare + lower_bound + make_heap + max + max_element + merge + min + min_element + minmax (C++11) + minmax_element (C++11) + mismatch + next_permutation + none_of (C++11) + nth_element + partial_sort + partial_sort_copy + partition + partition_copy (C++11) + partition_point (C++11) + pop_heap + prev_permutation + push_heap + random_shuffle + remove + remove_copy + remove_copy_if + remove_if + replace + replace_copy + replace_copy_if + replace_if + reverse + reverse_copy + rotate + rotate_copy + search + search_n + set_difference + set_intersection + set_symmetric_difference + set_union + shuffle (C++11) + sort + sort_heap + stable_partition + stable_sort + swap + swap_ranges + transform + unique + unique_copy + upper_bound + */ + + /** + * @defgroup algorithms Algorithms + * + * Components for performing algorithmic operations. Includes + * non-modifying sequence, modifying (mutating) sequence, sorting, + * searching, merge, partition, heap, set, minima, maxima, and + * permutation operations. + */ + + /** + * @defgroup mutating_algorithms Mutating + * @ingroup algorithms + */ + + /** + * @defgroup non_mutating_algorithms Non-Mutating + * @ingroup algorithms + */ + + /** + * @defgroup sorting_algorithms Sorting + * @ingroup algorithms + */ + + /** + * @defgroup set_algorithms Set Operations + * @ingroup sorting_algorithms + * + * These algorithms are common set operations performed on sequences + * that are already sorted. The number of comparisons will be + * linear. + */ + + /** + * @defgroup binary_search_algorithms Binary Search + * @ingroup sorting_algorithms + * + * These algorithms are variations of a classic binary search, and + * all assume that the sequence being searched is already sorted. + * + * The number of comparisons will be logarithmic (and as few as + * possible). The number of steps through the sequence will be + * logarithmic for random-access iterators (e.g., pointers), and + * linear otherwise. + * + * The LWG has passed Defect Report 270, which notes: The + * proposed resolution reinterprets binary search. Instead of + * thinking about searching for a value in a sorted range, we view + * that as an important special case of a more general algorithm: + * searching for the partition point in a partitioned range. We + * also add a guarantee that the old wording did not: we ensure that + * the upper bound is no earlier than the lower bound, that the pair + * returned by equal_range is a valid range, and that the first part + * of that pair is the lower bound. + * + * The actual effect of the first sentence is that a comparison + * functor passed by the user doesn't necessarily need to induce a + * strict weak ordering relation. Rather, it partitions the range. + */ + + // adjacent_find + +#if __cplusplus > 201703L +# define __cpp_lib_constexpr_algorithms 201806L +#endif + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + bool + all_of(_IIter, _IIter, _Predicate); + + template + _GLIBCXX20_CONSTEXPR + bool + any_of(_IIter, _IIter, _Predicate); +#endif + + template + _GLIBCXX20_CONSTEXPR + bool + binary_search(_FIter, _FIter, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + bool + binary_search(_FIter, _FIter, const _Tp&, _Compare); + +#if __cplusplus > 201402L + template + _GLIBCXX14_CONSTEXPR + const _Tp& + clamp(const _Tp&, const _Tp&, const _Tp&); + + template + _GLIBCXX14_CONSTEXPR + const _Tp& + clamp(const _Tp&, const _Tp&, const _Tp&, _Compare); +#endif + + template + _GLIBCXX20_CONSTEXPR + _OIter + copy(_IIter, _IIter, _OIter); + + template + _GLIBCXX20_CONSTEXPR + _BIter2 + copy_backward(_BIter1, _BIter1, _BIter2); + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + _OIter + copy_if(_IIter, _IIter, _OIter, _Predicate); + + template + _GLIBCXX20_CONSTEXPR + _OIter + copy_n(_IIter, _Size, _OIter); +#endif + + // count + // count_if + + template + _GLIBCXX20_CONSTEXPR + pair<_FIter, _FIter> + equal_range(_FIter, _FIter, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + pair<_FIter, _FIter> + equal_range(_FIter, _FIter, const _Tp&, _Compare); + + template + _GLIBCXX20_CONSTEXPR + void + fill(_FIter, _FIter, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + _OIter + fill_n(_OIter, _Size, const _Tp&); + + // find + + template + _GLIBCXX20_CONSTEXPR + _FIter1 + find_end(_FIter1, _FIter1, _FIter2, _FIter2); + + template + _GLIBCXX20_CONSTEXPR + _FIter1 + find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); + + // find_first_of + // find_if + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + _IIter + find_if_not(_IIter, _IIter, _Predicate); +#endif + + // for_each + // generate + // generate_n + + template + _GLIBCXX20_CONSTEXPR + bool + includes(_IIter1, _IIter1, _IIter2, _IIter2); + + template + _GLIBCXX20_CONSTEXPR + bool + includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); + + template + void + inplace_merge(_BIter, _BIter, _BIter); + + template + void + inplace_merge(_BIter, _BIter, _BIter, _Compare); + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + bool + is_heap(_RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + bool + is_heap(_RAIter, _RAIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + _RAIter + is_heap_until(_RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + _RAIter + is_heap_until(_RAIter, _RAIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + bool + is_partitioned(_IIter, _IIter, _Predicate); + + template + _GLIBCXX20_CONSTEXPR + bool + is_permutation(_FIter1, _FIter1, _FIter2); + + template + _GLIBCXX20_CONSTEXPR + bool + is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate); + + template + _GLIBCXX20_CONSTEXPR + bool + is_sorted(_FIter, _FIter); + + template + _GLIBCXX20_CONSTEXPR + bool + is_sorted(_FIter, _FIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + _FIter + is_sorted_until(_FIter, _FIter); + + template + _GLIBCXX20_CONSTEXPR + _FIter + is_sorted_until(_FIter, _FIter, _Compare); +#endif + + template + _GLIBCXX20_CONSTEXPR + void + iter_swap(_FIter1, _FIter2); + + template + _GLIBCXX20_CONSTEXPR + _FIter + lower_bound(_FIter, _FIter, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + _FIter + lower_bound(_FIter, _FIter, const _Tp&, _Compare); + + template + _GLIBCXX20_CONSTEXPR + void + make_heap(_RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + void + make_heap(_RAIter, _RAIter, _Compare); + + template + _GLIBCXX14_CONSTEXPR + const _Tp& + max(const _Tp&, const _Tp&); + + template + _GLIBCXX14_CONSTEXPR + const _Tp& + max(const _Tp&, const _Tp&, _Compare); + + // max_element + // merge + + template + _GLIBCXX14_CONSTEXPR + const _Tp& + min(const _Tp&, const _Tp&); + + template + _GLIBCXX14_CONSTEXPR + const _Tp& + min(const _Tp&, const _Tp&, _Compare); + + // min_element + +#if __cplusplus >= 201103L + template + _GLIBCXX14_CONSTEXPR + pair + minmax(const _Tp&, const _Tp&); + + template + _GLIBCXX14_CONSTEXPR + pair + minmax(const _Tp&, const _Tp&, _Compare); + + template + _GLIBCXX14_CONSTEXPR + pair<_FIter, _FIter> + minmax_element(_FIter, _FIter); + + template + _GLIBCXX14_CONSTEXPR + pair<_FIter, _FIter> + minmax_element(_FIter, _FIter, _Compare); + + template + _GLIBCXX14_CONSTEXPR + _Tp + min(initializer_list<_Tp>); + + template + _GLIBCXX14_CONSTEXPR + _Tp + min(initializer_list<_Tp>, _Compare); + + template + _GLIBCXX14_CONSTEXPR + _Tp + max(initializer_list<_Tp>); + + template + _GLIBCXX14_CONSTEXPR + _Tp + max(initializer_list<_Tp>, _Compare); + + template + _GLIBCXX14_CONSTEXPR + pair<_Tp, _Tp> + minmax(initializer_list<_Tp>); + + template + _GLIBCXX14_CONSTEXPR + pair<_Tp, _Tp> + minmax(initializer_list<_Tp>, _Compare); +#endif + + // mismatch + + template + _GLIBCXX20_CONSTEXPR + bool + next_permutation(_BIter, _BIter); + + template + _GLIBCXX20_CONSTEXPR + bool + next_permutation(_BIter, _BIter, _Compare); + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + bool + none_of(_IIter, _IIter, _Predicate); +#endif + + // nth_element + // partial_sort + + template + _GLIBCXX20_CONSTEXPR + _RAIter + partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + _RAIter + partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare); + + // partition + +#if __cplusplus >= 201103L + template + _GLIBCXX20_CONSTEXPR + pair<_OIter1, _OIter2> + partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate); + + template + _GLIBCXX20_CONSTEXPR + _FIter + partition_point(_FIter, _FIter, _Predicate); +#endif + + template + _GLIBCXX20_CONSTEXPR + void + pop_heap(_RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + void + pop_heap(_RAIter, _RAIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + bool + prev_permutation(_BIter, _BIter); + + template + _GLIBCXX20_CONSTEXPR + bool + prev_permutation(_BIter, _BIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + void + push_heap(_RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + void + push_heap(_RAIter, _RAIter, _Compare); + + // random_shuffle + + template + _GLIBCXX20_CONSTEXPR + _FIter + remove(_FIter, _FIter, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + _FIter + remove_if(_FIter, _FIter, _Predicate); + + template + _GLIBCXX20_CONSTEXPR + _OIter + remove_copy(_IIter, _IIter, _OIter, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + _OIter + remove_copy_if(_IIter, _IIter, _OIter, _Predicate); + + // replace + + template + _GLIBCXX20_CONSTEXPR + _OIter + replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + _OIter + replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&); + + // replace_if + + template + _GLIBCXX20_CONSTEXPR + void + reverse(_BIter, _BIter); + + template + _GLIBCXX20_CONSTEXPR + _OIter + reverse_copy(_BIter, _BIter, _OIter); + + inline namespace _V2 + { + template + _GLIBCXX20_CONSTEXPR + _FIter + rotate(_FIter, _FIter, _FIter); + } + + template + _GLIBCXX20_CONSTEXPR + _OIter + rotate_copy(_FIter, _FIter, _FIter, _OIter); + + // search + // search_n + // set_difference + // set_intersection + // set_symmetric_difference + // set_union + +#if (__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99_STDINT_TR1) + template + void + shuffle(_RAIter, _RAIter, _UGenerator&&); +#endif + + template + _GLIBCXX20_CONSTEXPR + void + sort_heap(_RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + void + sort_heap(_RAIter, _RAIter, _Compare); + + template + _BIter + stable_partition(_BIter, _BIter, _Predicate); + +#if __cplusplus < 201103L + // For C++11 swap() is declared in . + + template + _GLIBCXX20_CONSTEXPR + inline void + swap(_Tp& __a, _Tp& __b); + + template + _GLIBCXX20_CONSTEXPR + inline void + swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]); +#endif + + template + _GLIBCXX20_CONSTEXPR + _FIter2 + swap_ranges(_FIter1, _FIter1, _FIter2); + + // transform + + template + _GLIBCXX20_CONSTEXPR + _FIter + unique(_FIter, _FIter); + + template + _GLIBCXX20_CONSTEXPR + _FIter + unique(_FIter, _FIter, _BinaryPredicate); + + // unique_copy + + template + _GLIBCXX20_CONSTEXPR + _FIter + upper_bound(_FIter, _FIter, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + _FIter + upper_bound(_FIter, _FIter, const _Tp&, _Compare); + +_GLIBCXX_BEGIN_NAMESPACE_ALGO + + template + _GLIBCXX20_CONSTEXPR + _FIter + adjacent_find(_FIter, _FIter); + + template + _GLIBCXX20_CONSTEXPR + _FIter + adjacent_find(_FIter, _FIter, _BinaryPredicate); + + template + _GLIBCXX20_CONSTEXPR + typename iterator_traits<_IIter>::difference_type + count(_IIter, _IIter, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + typename iterator_traits<_IIter>::difference_type + count_if(_IIter, _IIter, _Predicate); + + template + _GLIBCXX20_CONSTEXPR + bool + equal(_IIter1, _IIter1, _IIter2); + + template + _GLIBCXX20_CONSTEXPR + bool + equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate); + + template + _GLIBCXX20_CONSTEXPR + _IIter + find(_IIter, _IIter, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + _FIter1 + find_first_of(_FIter1, _FIter1, _FIter2, _FIter2); + + template + _GLIBCXX20_CONSTEXPR + _FIter1 + find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); + + template + _GLIBCXX20_CONSTEXPR + _IIter + find_if(_IIter, _IIter, _Predicate); + + template + _GLIBCXX20_CONSTEXPR + _Funct + for_each(_IIter, _IIter, _Funct); + + template + _GLIBCXX20_CONSTEXPR + void + generate(_FIter, _FIter, _Generator); + + template + _GLIBCXX20_CONSTEXPR + _OIter + generate_n(_OIter, _Size, _Generator); + + template + _GLIBCXX20_CONSTEXPR + bool + lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2); + + template + _GLIBCXX20_CONSTEXPR + bool + lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); + + template + _GLIBCXX14_CONSTEXPR + _FIter + max_element(_FIter, _FIter); + + template + _GLIBCXX14_CONSTEXPR + _FIter + max_element(_FIter, _FIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + _OIter + merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); + + template + _GLIBCXX20_CONSTEXPR + _OIter + merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); + + template + _GLIBCXX14_CONSTEXPR + _FIter + min_element(_FIter, _FIter); + + template + _GLIBCXX14_CONSTEXPR + _FIter + min_element(_FIter, _FIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + pair<_IIter1, _IIter2> + mismatch(_IIter1, _IIter1, _IIter2); + + template + _GLIBCXX20_CONSTEXPR + pair<_IIter1, _IIter2> + mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate); + + template + _GLIBCXX20_CONSTEXPR + void + nth_element(_RAIter, _RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + void + nth_element(_RAIter, _RAIter, _RAIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + void + partial_sort(_RAIter, _RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + void + partial_sort(_RAIter, _RAIter, _RAIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + _BIter + partition(_BIter, _BIter, _Predicate); + + template + void + random_shuffle(_RAIter, _RAIter); + + template + void + random_shuffle(_RAIter, _RAIter, +#if __cplusplus >= 201103L + _Generator&&); +#else + _Generator&); +#endif + + template + _GLIBCXX20_CONSTEXPR + void + replace(_FIter, _FIter, const _Tp&, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + void + replace_if(_FIter, _FIter, _Predicate, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + _FIter1 + search(_FIter1, _FIter1, _FIter2, _FIter2); + + template + _GLIBCXX20_CONSTEXPR + _FIter1 + search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); + + template + _GLIBCXX20_CONSTEXPR + _FIter + search_n(_FIter, _FIter, _Size, const _Tp&); + + template + _GLIBCXX20_CONSTEXPR + _FIter + search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate); + + template + _GLIBCXX20_CONSTEXPR + _OIter + set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); + + template + _GLIBCXX20_CONSTEXPR + _OIter + set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + _OIter + set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); + + template + _GLIBCXX20_CONSTEXPR + _OIter + set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + _OIter + set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); + + template + _GLIBCXX20_CONSTEXPR + _OIter + set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, + _OIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + _OIter + set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); + + template + _GLIBCXX20_CONSTEXPR + _OIter + set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + void + sort(_RAIter, _RAIter); + + template + _GLIBCXX20_CONSTEXPR + void + sort(_RAIter, _RAIter, _Compare); + + template + void + stable_sort(_RAIter, _RAIter); + + template + void + stable_sort(_RAIter, _RAIter, _Compare); + + template + _GLIBCXX20_CONSTEXPR + _OIter + transform(_IIter, _IIter, _OIter, _UnaryOperation); + + template + _GLIBCXX20_CONSTEXPR + _OIter + transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation); + + template + _GLIBCXX20_CONSTEXPR + _OIter + unique_copy(_IIter, _IIter, _OIter); + + template + _GLIBCXX20_CONSTEXPR + _OIter + unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate); + +_GLIBCXX_END_NAMESPACE_ALGO +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#ifdef _GLIBCXX_PARALLEL +# include +#endif + +#endif + diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@algorithmfwd.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@algorithmfwd.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..98fd7c537001b80a650e89535e67cc7d2d6cd7d2 GIT binary patch literal 58864 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@alloc_traits.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@alloc_traits.h new file mode 100644 index 0000000..86d8ed2 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@alloc_traits.h @@ -0,0 +1,743 @@ +// Allocator traits -*- C++ -*- + +// Copyright (C) 2011-2020 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/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 +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if __cplusplus >= 201103L +#define __cpp_lib_allocator_traits_is_always_equal 201411 + + struct __allocator_traits_base + { + template + struct __rebind : __replace_first_arg<_Tp, _Up> { }; + + template + struct __rebind<_Tp, _Up, + __void_t::other>> + { using type = typename _Tp::template rebind<_Up>::other; }; + + 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 = typename _Tp::is_always_equal; + }; + + template + using __alloc_rebind + = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type; + + /** + * @brief Uniform interface to all allocator types. + * @ingroup allocators + */ + 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 + = __detected_or_t::type, __equal, _Alloc>; + + template + using rebind_alloc = __alloc_rebind<_Alloc, _Tp>; + template + using rebind_traits = allocator_traits>; + + private: + template + static constexpr auto + _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int) + -> decltype(__a.allocate(__n, __hint)) + { return __a.allocate(__n, __hint); } + + template + static constexpr pointer + _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...) + { return __a.allocate(__n); } + + template + struct __construct_helper + { + template()->construct( + std::declval<_Tp*>(), std::declval<_Args>()...))> + static true_type __test(int); + + template + static false_type __test(...); + + using type = decltype(__test<_Alloc>(0)); + }; + + template + using __has_construct + = typename __construct_helper<_Tp, _Args...>::type; + + template + static _GLIBCXX14_CONSTEXPR _Require<__has_construct<_Tp, _Args...>> + _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args) + noexcept(noexcept(__a.construct(__p, std::forward<_Args>(__args)...))) + { __a.construct(__p, std::forward<_Args>(__args)...); } + + template + static _GLIBCXX14_CONSTEXPR + _Require<__and_<__not_<__has_construct<_Tp, _Args...>>, + is_constructible<_Tp, _Args...>>> + _S_construct(_Alloc&, _Tp* __p, _Args&&... __args) + noexcept(std::is_nothrow_constructible<_Tp, _Args...>::value) + { +#if __cplusplus <= 201703L + ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); +#else + std::construct_at(__p, std::forward<_Args>(__args)...); +#endif + } + + template + static _GLIBCXX14_CONSTEXPR auto + _S_destroy(_Alloc2& __a, _Tp* __p, int) + noexcept(noexcept(__a.destroy(__p))) + -> decltype(__a.destroy(__p)) + { __a.destroy(__p); } + + template + static _GLIBCXX14_CONSTEXPR void + _S_destroy(_Alloc2&, _Tp* __p, ...) + noexcept(std::is_nothrow_destructible<_Tp>::value) + { std::_Destroy(__p); } + + template + static constexpr auto + _S_max_size(_Alloc2& __a, int) + -> decltype(__a.max_size()) + { return __a.max_size(); } + + template + static constexpr size_type + _S_max_size(_Alloc2&, ...) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2466. allocator_traits::max_size() default behavior is incorrect + return __gnu_cxx::__numeric_traits::__max + / sizeof(value_type); + } + + template + static constexpr auto + _S_select(_Alloc2& __a, int) + -> decltype(__a.select_on_container_copy_construction()) + { return __a.select_on_container_copy_construction(); } + + template + static constexpr _Alloc2 + _S_select(_Alloc2& __a, ...) + { return __a; } + + public: + + /** + * @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) + { return _S_allocate(__a, __n, __hint, 0); } + + /** + * @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 @a _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 + static _GLIBCXX20_CONSTEXPR auto + construct(_Alloc& __a, _Tp* __p, _Args&&... __args) + noexcept(noexcept(_S_construct(__a, __p, + std::forward<_Args>(__args)...))) + -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...)) + { _S_construct(__a, __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(noexcept(_S_destroy(__a, __p, 0))) + { _S_destroy(__a, __p, 0); } + + /** + * @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 + { return _S_max_size(__a, 0); } + + /** + * @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) + { return _S_select(__rhs, 0); } + }; + +#if __cplusplus > 201703L +# define __cpp_lib_constexpr_dynamic_alloc 201907L +#endif + + /// Partial specialization for std::allocator. + 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) + */ + _GLIBCXX_NODISCARD 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) + */ + _GLIBCXX_NODISCARD static _GLIBCXX20_CONSTEXPR pointer + allocate(allocator_type& __a, size_type __n, 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) + */ + 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 + static _GLIBCXX20_CONSTEXPR void + construct(allocator_type& __a __attribute__((__unused__)), _Up* __p, + _Args&&... __args) + noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) + { +#if __cplusplus <= 201703L + __a.construct(__p, std::forward<_Args>(__args)...); +#else + std::construct_at(__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 + 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() + */ + 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 + */ + static _GLIBCXX20_CONSTEXPR allocator_type + select_on_container_copy_construction(const allocator_type& __rhs) + { return __rhs; } + }; + +#if __cplusplus < 201703L + template + inline void + __do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type) + { __one = __two; } + + template + inline void + __do_alloc_on_copy(_Alloc&, const _Alloc&, false_type) + { } +#endif + + template + _GLIBCXX14_CONSTEXPR inline void + __alloc_on_copy(_Alloc& __one, const _Alloc& __two) + { + typedef allocator_traits<_Alloc> __traits; + typedef typename __traits::propagate_on_container_copy_assignment __pocca; +#if __cplusplus >= 201703L + if constexpr (__pocca::value) + __one = __two; +#else + __do_alloc_on_copy(__one, __two, __pocca()); +#endif + } + + template + constexpr _Alloc + __alloc_on_copy(const _Alloc& __a) + { + typedef allocator_traits<_Alloc> __traits; + return __traits::select_on_container_copy_construction(__a); + } + +#if __cplusplus < 201703L + template + inline void __do_alloc_on_move(_Alloc& __one, _Alloc& __two, true_type) + { __one = std::move(__two); } + + template + inline void __do_alloc_on_move(_Alloc&, _Alloc&, false_type) + { } +#endif + + template + _GLIBCXX14_CONSTEXPR inline void + __alloc_on_move(_Alloc& __one, _Alloc& __two) + { + typedef allocator_traits<_Alloc> __traits; + typedef typename __traits::propagate_on_container_move_assignment __pocma; +#if __cplusplus >= 201703L + if constexpr (__pocma::value) + __one = std::move(__two); +#else + __do_alloc_on_move(__one, __two, __pocma()); +#endif + } + +#if __cplusplus < 201703L + template + inline void __do_alloc_on_swap(_Alloc& __one, _Alloc& __two, true_type) + { + using std::swap; + swap(__one, __two); + } + + template + inline void __do_alloc_on_swap(_Alloc&, _Alloc&, false_type) + { } +#endif + + template + _GLIBCXX14_CONSTEXPR inline void + __alloc_on_swap(_Alloc& __one, _Alloc& __two) + { + typedef allocator_traits<_Alloc> __traits; + typedef typename __traits::propagate_on_container_swap __pocs; +#if __cplusplus >= 201703L + if constexpr (__pocs::value) + { + using std::swap; + swap(__one, __two); + } +#else + __do_alloc_on_swap(__one, __two, __pocs()); +#endif + } + + 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 + { }; + + // std::allocator<_Tp> just requires CopyConstructible + template + struct __is_copy_insertable> + : is_copy_constructible<_Tp> + { }; + + // 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 + { }; + + // std::allocator<_Tp> just requires MoveConstructible + template + struct __is_move_insertable> + : is_move_constructible<_Tp> + { }; + + // 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; +#endif // C++11 + + /** + * 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 + 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 + } + + template + inline void + _Destroy(_ForwardIterator __first, _ForwardIterator __last, + allocator<_Tp>&) + { + _Destroy(__first, __last); + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // _ALLOC_TRAITS_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@alloc_traits.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@alloc_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..043b3b4ac4c1265ed9b4d12b25ca39c5f27be4b2 GIT binary patch literal 37487 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 VBM+G;Lq. + +/** @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 + + /// 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; + } + + /// Get the address that the owned pointer refers to. + value_type* get() { return std::__to_address(_M_ptr); } + + private: + _Alloc* _M_alloc; + pointer _M_ptr; + }; + + /// Allocate space for a single object using __a + template + __allocated_ptr<_Alloc> + __allocate_guarded(_Alloc& __a) + { + return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) }; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocated_ptr.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocated_ptr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..402fd6d94b76f3564ead8d09d91b8264abf6adfb GIT binary patch literal 16561 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 GM*kmdVqNzD literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocator.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocator.h new file mode 100644 index 0000000..d224aa3 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocator.h @@ -0,0 +1,323 @@ +// Allocators -*- C++ -*- + +// Copyright (C) 2001-2020 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 + +#define __cpp_lib_incomplete_container_elements 201505 + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup allocators + * @{ + */ + + /// allocator specialization. + template<> + class allocator + { + public: + typedef void value_type; + typedef size_t size_type; + typedef ptrdiff_t difference_type; +#if __cplusplus <= 201703L + typedef void* pointer; + typedef const void* const_pointer; + + template + struct rebind + { typedef allocator<_Tp1> other; }; +#else + allocator() = default; + + template + constexpr + allocator(const allocator<_Up>&) { } +#endif // ! C++20 + +#if __cplusplus >= 201103L && __cplusplus <= 201703L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2103. std::allocator propagate_on_container_move_assignment + typedef true_type propagate_on_container_move_assignment; + + typedef true_type is_always_equal; + + template + void + construct(_Up* __p, _Args&&... __args) + noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) + { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } + + template + void + destroy(_Up* __p) + noexcept(std::is_nothrow_destructible<_Up>::value) + { __p->~_Up(); } +#endif // C++11 to C++17 + }; + + /** + * @brief The @a standard allocator, as per [20.4]. + * + * See https://gcc.gnu.org/onlinedocs/libstdc++/manual/memory.html#std.util.memory.allocator + * for further details. + * + * @tparam _Tp Type of allocated object. + */ + 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 + 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 + typedef true_type propagate_on_container_move_assignment; + + typedef true_type is_always_equal; +#endif + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3035. std::allocator's constructors should be constexpr + _GLIBCXX20_CONSTEXPR + allocator() _GLIBCXX_NOTHROW { } + + _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 + _GLIBCXX20_CONSTEXPR + allocator(const allocator<_Tp1>&) _GLIBCXX_NOTHROW { } + +#if __cpp_constexpr_dynamic_alloc + constexpr +#endif + ~allocator() _GLIBCXX_NOTHROW { } + +#if __cplusplus > 201703L + [[nodiscard,__gnu__::__always_inline__]] + constexpr _Tp* + allocate(size_t __n) + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); +#endif + return __allocator_base<_Tp>::allocate(__n, 0); + } + + [[__gnu__::__always_inline__]] + constexpr void + deallocate(_Tp* __p, size_t __n) + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + { + ::operator delete(__p); + return; + } +#endif + __allocator_base<_Tp>::deallocate(__p, __n); + } +#endif // C++20 + + friend _GLIBCXX20_CONSTEXPR bool + operator==(const allocator&, const allocator&) _GLIBCXX_NOTHROW + { return true; } + +#if __cpp_impl_three_way_comparison < 201907L + friend _GLIBCXX20_CONSTEXPR bool + operator!=(const allocator&, const allocator&) _GLIBCXX_NOTHROW + { return false; } +#endif + + // Inherit everything else. + }; + + template + inline _GLIBCXX20_CONSTEXPR bool + operator==(const allocator<_T1>&, const allocator<_T2>&) + _GLIBCXX_NOTHROW + { return true; } + +#if __cpp_impl_three_way_comparison < 201907L + template + inline _GLIBCXX20_CONSTEXPR bool + operator!=(const allocator<_T1>&, const allocator<_T2>&) + _GLIBCXX_NOTHROW + { return false; } +#endif + + // 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; + template allocator(const allocator<_Up>&) { } + }; + + template + class allocator + { + public: + typedef _Tp value_type; + template allocator(const allocator<_Up>&) { } + }; + + template + class allocator + { + public: + typedef _Tp value_type; + template allocator(const allocator<_Up>&) { } + }; + + /// @} 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 + + // 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); + } + }; + + // Optimize for stateless allocators. + template + struct __alloc_neq + { + static bool + _S_do_it(const _Alloc&, const _Alloc&) + { return false; } + }; + + template + struct __alloc_neq<_Alloc, false> + { + static bool + _S_do_it(const _Alloc& __one, const _Alloc& __two) + { return __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> + { + 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 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocator.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@allocator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7ee75fad398cdce27a9d1d13244157a1943e2e56 GIT binary patch literal 24263 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 bXIrm(=z*@gmVevv*~sNMPky;Pzg_+xaiOto literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_base.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_base.h new file mode 100644 index 0000000..41d5928 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_base.h @@ -0,0 +1,1703 @@ +// -*- C++ -*- header. + +// Copyright (C) 2008-2020 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/atomic_base.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{atomic} + */ + +#ifndef _GLIBCXX_ATOMIC_BASE_H +#define _GLIBCXX_ATOMIC_BASE_H 1 + +#pragma GCC system_header + +#include +#include +#include +#include + +#ifndef _GLIBCXX_ALWAYS_INLINE +#define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__)) +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup atomics Atomics + * + * Components for performing atomic operations. + * @{ + */ + + /// Enumeration for memory_order +#if __cplusplus > 201703L + enum class memory_order : int + { + relaxed, + consume, + acquire, + release, + acq_rel, + seq_cst + }; + + inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; + inline constexpr memory_order memory_order_consume = memory_order::consume; + inline constexpr memory_order memory_order_acquire = memory_order::acquire; + inline constexpr memory_order memory_order_release = memory_order::release; + inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; + inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; +#else + typedef enum memory_order + { + memory_order_relaxed, + memory_order_consume, + memory_order_acquire, + memory_order_release, + memory_order_acq_rel, + memory_order_seq_cst + } memory_order; +#endif + + enum __memory_order_modifier + { + __memory_order_mask = 0x0ffff, + __memory_order_modifier_mask = 0xffff0000, + __memory_order_hle_acquire = 0x10000, + __memory_order_hle_release = 0x20000 + }; + + constexpr memory_order + operator|(memory_order __m, __memory_order_modifier __mod) + { + return memory_order(int(__m) | int(__mod)); + } + + constexpr memory_order + operator&(memory_order __m, __memory_order_modifier __mod) + { + return memory_order(int(__m) & int(__mod)); + } + + // Drop release ordering as per [atomics.types.operations.req]/21 + constexpr memory_order + __cmpexch_failure_order2(memory_order __m) noexcept + { + return __m == memory_order_acq_rel ? memory_order_acquire + : __m == memory_order_release ? memory_order_relaxed : __m; + } + + constexpr memory_order + __cmpexch_failure_order(memory_order __m) noexcept + { + return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask) + | __memory_order_modifier(__m & __memory_order_modifier_mask)); + } + + _GLIBCXX_ALWAYS_INLINE void + atomic_thread_fence(memory_order __m) noexcept + { __atomic_thread_fence(int(__m)); } + + _GLIBCXX_ALWAYS_INLINE void + atomic_signal_fence(memory_order __m) noexcept + { __atomic_signal_fence(int(__m)); } + + /// kill_dependency + template + inline _Tp + kill_dependency(_Tp __y) noexcept + { + _Tp __ret(__y); + return __ret; + } + + + // Base types for atomics. + template + struct __atomic_base; + +#if __cplusplus <= 201703L +# define _GLIBCXX20_INIT(I) +#else +# define __cpp_lib_atomic_value_initialization 201911L +# define _GLIBCXX20_INIT(I) = I +#endif + +#define ATOMIC_VAR_INIT(_VI) { _VI } + + template + struct atomic; + + template + struct atomic<_Tp*>; + + /* The target's "set" value for test-and-set may not be exactly 1. */ +#if __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1 + typedef bool __atomic_flag_data_type; +#else + typedef unsigned char __atomic_flag_data_type; +#endif + + /** + * @brief Base type for atomic_flag. + * + * Base type is POD with data, allowing atomic_flag to derive from + * it and meet the standard layout type requirement. In addition to + * compatibility with a C interface, this allows different + * implementations of atomic_flag to use the same atomic operation + * functions, via a standard conversion to the __atomic_flag_base + * argument. + */ + _GLIBCXX_BEGIN_EXTERN_C + + struct __atomic_flag_base + { + __atomic_flag_data_type _M_i _GLIBCXX20_INIT({}); + }; + + _GLIBCXX_END_EXTERN_C + +#define ATOMIC_FLAG_INIT { 0 } + + /// atomic_flag + struct atomic_flag : public __atomic_flag_base + { + atomic_flag() noexcept = default; + ~atomic_flag() noexcept = default; + atomic_flag(const atomic_flag&) = delete; + atomic_flag& operator=(const atomic_flag&) = delete; + atomic_flag& operator=(const atomic_flag&) volatile = delete; + + // Conversion to ATOMIC_FLAG_INIT. + constexpr atomic_flag(bool __i) noexcept + : __atomic_flag_base{ _S_init(__i) } + { } + + _GLIBCXX_ALWAYS_INLINE bool + test_and_set(memory_order __m = memory_order_seq_cst) noexcept + { + return __atomic_test_and_set (&_M_i, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE bool + test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept + { + return __atomic_test_and_set (&_M_i, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE void + clear(memory_order __m = memory_order_seq_cst) noexcept + { + memory_order __b = __m & __memory_order_mask; + __glibcxx_assert(__b != memory_order_consume); + __glibcxx_assert(__b != memory_order_acquire); + __glibcxx_assert(__b != memory_order_acq_rel); + + __atomic_clear (&_M_i, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE void + clear(memory_order __m = memory_order_seq_cst) volatile noexcept + { + memory_order __b = __m & __memory_order_mask; + __glibcxx_assert(__b != memory_order_consume); + __glibcxx_assert(__b != memory_order_acquire); + __glibcxx_assert(__b != memory_order_acq_rel); + + __atomic_clear (&_M_i, int(__m)); + } + + private: + static constexpr __atomic_flag_data_type + _S_init(bool __i) + { return __i ? __GCC_ATOMIC_TEST_AND_SET_TRUEVAL : 0; } + }; + + + /// Base class for atomic integrals. + // + // For each of the integral types, define atomic_[integral type] struct + // + // atomic_bool bool + // atomic_char char + // atomic_schar signed char + // atomic_uchar unsigned char + // atomic_short short + // atomic_ushort unsigned short + // atomic_int int + // atomic_uint unsigned int + // atomic_long long + // atomic_ulong unsigned long + // atomic_llong long long + // atomic_ullong unsigned long long + // atomic_char8_t char8_t + // atomic_char16_t char16_t + // atomic_char32_t char32_t + // atomic_wchar_t wchar_t + // + // NB: Assuming _ITp is an integral scalar type that is 1, 2, 4, or + // 8 bytes, since that is what GCC built-in functions for atomic + // memory access expect. + template + struct __atomic_base + { + using value_type = _ITp; + using difference_type = value_type; + + private: + typedef _ITp __int_type; + + static constexpr int _S_alignment = + sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp); + + alignas(_S_alignment) __int_type _M_i _GLIBCXX20_INIT(0); + + public: + __atomic_base() noexcept = default; + ~__atomic_base() noexcept = default; + __atomic_base(const __atomic_base&) = delete; + __atomic_base& operator=(const __atomic_base&) = delete; + __atomic_base& operator=(const __atomic_base&) volatile = delete; + + // Requires __int_type convertible to _M_i. + constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { } + + operator __int_type() const noexcept + { return load(); } + + operator __int_type() const volatile noexcept + { return load(); } + + __int_type + operator=(__int_type __i) noexcept + { + store(__i); + return __i; + } + + __int_type + operator=(__int_type __i) volatile noexcept + { + store(__i); + return __i; + } + + __int_type + operator++(int) noexcept + { return fetch_add(1); } + + __int_type + operator++(int) volatile noexcept + { return fetch_add(1); } + + __int_type + operator--(int) noexcept + { return fetch_sub(1); } + + __int_type + operator--(int) volatile noexcept + { return fetch_sub(1); } + + __int_type + operator++() noexcept + { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } + + __int_type + operator++() volatile noexcept + { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } + + __int_type + operator--() noexcept + { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } + + __int_type + operator--() volatile noexcept + { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } + + __int_type + operator+=(__int_type __i) noexcept + { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + __int_type + operator+=(__int_type __i) volatile noexcept + { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + __int_type + operator-=(__int_type __i) noexcept + { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + __int_type + operator-=(__int_type __i) volatile noexcept + { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + __int_type + operator&=(__int_type __i) noexcept + { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + __int_type + operator&=(__int_type __i) volatile noexcept + { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + __int_type + operator|=(__int_type __i) noexcept + { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + __int_type + operator|=(__int_type __i) volatile noexcept + { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + __int_type + operator^=(__int_type __i) noexcept + { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + __int_type + operator^=(__int_type __i) volatile noexcept + { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); } + + bool + is_lock_free() const noexcept + { + // Use a fake, minimally aligned pointer. + return __atomic_is_lock_free(sizeof(_M_i), + reinterpret_cast(-_S_alignment)); + } + + bool + is_lock_free() const volatile noexcept + { + // Use a fake, minimally aligned pointer. + return __atomic_is_lock_free(sizeof(_M_i), + reinterpret_cast(-_S_alignment)); + } + + _GLIBCXX_ALWAYS_INLINE void + store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept + { + memory_order __b = __m & __memory_order_mask; + __glibcxx_assert(__b != memory_order_acquire); + __glibcxx_assert(__b != memory_order_acq_rel); + __glibcxx_assert(__b != memory_order_consume); + + __atomic_store_n(&_M_i, __i, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE void + store(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { + memory_order __b = __m & __memory_order_mask; + __glibcxx_assert(__b != memory_order_acquire); + __glibcxx_assert(__b != memory_order_acq_rel); + __glibcxx_assert(__b != memory_order_consume); + + __atomic_store_n(&_M_i, __i, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE __int_type + load(memory_order __m = memory_order_seq_cst) const noexcept + { + memory_order __b = __m & __memory_order_mask; + __glibcxx_assert(__b != memory_order_release); + __glibcxx_assert(__b != memory_order_acq_rel); + + return __atomic_load_n(&_M_i, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE __int_type + load(memory_order __m = memory_order_seq_cst) const volatile noexcept + { + memory_order __b = __m & __memory_order_mask; + __glibcxx_assert(__b != memory_order_release); + __glibcxx_assert(__b != memory_order_acq_rel); + + return __atomic_load_n(&_M_i, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE __int_type + exchange(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { + return __atomic_exchange_n(&_M_i, __i, int(__m)); + } + + + _GLIBCXX_ALWAYS_INLINE __int_type + exchange(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { + return __atomic_exchange_n(&_M_i, __i, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_weak(__int_type& __i1, __int_type __i2, + memory_order __m1, memory_order __m2) noexcept + { + memory_order __b2 = __m2 & __memory_order_mask; + memory_order __b1 = __m1 & __memory_order_mask; + __glibcxx_assert(__b2 != memory_order_release); + __glibcxx_assert(__b2 != memory_order_acq_rel); + __glibcxx_assert(__b2 <= __b1); + + return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, + int(__m1), int(__m2)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_weak(__int_type& __i1, __int_type __i2, + memory_order __m1, + memory_order __m2) volatile noexcept + { + memory_order __b2 = __m2 & __memory_order_mask; + memory_order __b1 = __m1 & __memory_order_mask; + __glibcxx_assert(__b2 != memory_order_release); + __glibcxx_assert(__b2 != memory_order_acq_rel); + __glibcxx_assert(__b2 <= __b1); + + return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, + int(__m1), int(__m2)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_weak(__int_type& __i1, __int_type __i2, + memory_order __m = memory_order_seq_cst) noexcept + { + return compare_exchange_weak(__i1, __i2, __m, + __cmpexch_failure_order(__m)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_weak(__int_type& __i1, __int_type __i2, + memory_order __m = memory_order_seq_cst) volatile noexcept + { + return compare_exchange_weak(__i1, __i2, __m, + __cmpexch_failure_order(__m)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_strong(__int_type& __i1, __int_type __i2, + memory_order __m1, memory_order __m2) noexcept + { + memory_order __b2 = __m2 & __memory_order_mask; + memory_order __b1 = __m1 & __memory_order_mask; + __glibcxx_assert(__b2 != memory_order_release); + __glibcxx_assert(__b2 != memory_order_acq_rel); + __glibcxx_assert(__b2 <= __b1); + + return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, + int(__m1), int(__m2)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_strong(__int_type& __i1, __int_type __i2, + memory_order __m1, + memory_order __m2) volatile noexcept + { + memory_order __b2 = __m2 & __memory_order_mask; + memory_order __b1 = __m1 & __memory_order_mask; + + __glibcxx_assert(__b2 != memory_order_release); + __glibcxx_assert(__b2 != memory_order_acq_rel); + __glibcxx_assert(__b2 <= __b1); + + return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, + int(__m1), int(__m2)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_strong(__int_type& __i1, __int_type __i2, + memory_order __m = memory_order_seq_cst) noexcept + { + return compare_exchange_strong(__i1, __i2, __m, + __cmpexch_failure_order(__m)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_strong(__int_type& __i1, __int_type __i2, + memory_order __m = memory_order_seq_cst) volatile noexcept + { + return compare_exchange_strong(__i1, __i2, __m, + __cmpexch_failure_order(__m)); + } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_add(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_add(&_M_i, __i, int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_add(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_add(&_M_i, __i, int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_sub(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_sub(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_and(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_and(&_M_i, __i, int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_and(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_and(&_M_i, __i, int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_or(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_or(&_M_i, __i, int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_or(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_or(&_M_i, __i, int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_xor(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_xor(&_M_i, __i, int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __int_type + fetch_xor(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_xor(&_M_i, __i, int(__m)); } + }; + + + /// Partial specialization for pointer types. + template + struct __atomic_base<_PTp*> + { + private: + typedef _PTp* __pointer_type; + + __pointer_type _M_p _GLIBCXX20_INIT(nullptr); + + // Factored out to facilitate explicit specialization. + constexpr ptrdiff_t + _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); } + + constexpr ptrdiff_t + _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); } + + public: + __atomic_base() noexcept = default; + ~__atomic_base() noexcept = default; + __atomic_base(const __atomic_base&) = delete; + __atomic_base& operator=(const __atomic_base&) = delete; + __atomic_base& operator=(const __atomic_base&) volatile = delete; + + // Requires __pointer_type convertible to _M_p. + constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { } + + operator __pointer_type() const noexcept + { return load(); } + + operator __pointer_type() const volatile noexcept + { return load(); } + + __pointer_type + operator=(__pointer_type __p) noexcept + { + store(__p); + return __p; + } + + __pointer_type + operator=(__pointer_type __p) volatile noexcept + { + store(__p); + return __p; + } + + __pointer_type + operator++(int) noexcept + { return fetch_add(1); } + + __pointer_type + operator++(int) volatile noexcept + { return fetch_add(1); } + + __pointer_type + operator--(int) noexcept + { return fetch_sub(1); } + + __pointer_type + operator--(int) volatile noexcept + { return fetch_sub(1); } + + __pointer_type + operator++() noexcept + { return __atomic_add_fetch(&_M_p, _M_type_size(1), + int(memory_order_seq_cst)); } + + __pointer_type + operator++() volatile noexcept + { return __atomic_add_fetch(&_M_p, _M_type_size(1), + int(memory_order_seq_cst)); } + + __pointer_type + operator--() noexcept + { return __atomic_sub_fetch(&_M_p, _M_type_size(1), + int(memory_order_seq_cst)); } + + __pointer_type + operator--() volatile noexcept + { return __atomic_sub_fetch(&_M_p, _M_type_size(1), + int(memory_order_seq_cst)); } + + __pointer_type + operator+=(ptrdiff_t __d) noexcept + { return __atomic_add_fetch(&_M_p, _M_type_size(__d), + int(memory_order_seq_cst)); } + + __pointer_type + operator+=(ptrdiff_t __d) volatile noexcept + { return __atomic_add_fetch(&_M_p, _M_type_size(__d), + int(memory_order_seq_cst)); } + + __pointer_type + operator-=(ptrdiff_t __d) noexcept + { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), + int(memory_order_seq_cst)); } + + __pointer_type + operator-=(ptrdiff_t __d) volatile noexcept + { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), + int(memory_order_seq_cst)); } + + bool + is_lock_free() const noexcept + { + // Produce a fake, minimally aligned pointer. + return __atomic_is_lock_free(sizeof(_M_p), + reinterpret_cast(-__alignof(_M_p))); + } + + bool + is_lock_free() const volatile noexcept + { + // Produce a fake, minimally aligned pointer. + return __atomic_is_lock_free(sizeof(_M_p), + reinterpret_cast(-__alignof(_M_p))); + } + + _GLIBCXX_ALWAYS_INLINE void + store(__pointer_type __p, + memory_order __m = memory_order_seq_cst) noexcept + { + memory_order __b = __m & __memory_order_mask; + + __glibcxx_assert(__b != memory_order_acquire); + __glibcxx_assert(__b != memory_order_acq_rel); + __glibcxx_assert(__b != memory_order_consume); + + __atomic_store_n(&_M_p, __p, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE void + store(__pointer_type __p, + memory_order __m = memory_order_seq_cst) volatile noexcept + { + memory_order __b = __m & __memory_order_mask; + __glibcxx_assert(__b != memory_order_acquire); + __glibcxx_assert(__b != memory_order_acq_rel); + __glibcxx_assert(__b != memory_order_consume); + + __atomic_store_n(&_M_p, __p, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE __pointer_type + load(memory_order __m = memory_order_seq_cst) const noexcept + { + memory_order __b = __m & __memory_order_mask; + __glibcxx_assert(__b != memory_order_release); + __glibcxx_assert(__b != memory_order_acq_rel); + + return __atomic_load_n(&_M_p, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE __pointer_type + load(memory_order __m = memory_order_seq_cst) const volatile noexcept + { + memory_order __b = __m & __memory_order_mask; + __glibcxx_assert(__b != memory_order_release); + __glibcxx_assert(__b != memory_order_acq_rel); + + return __atomic_load_n(&_M_p, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE __pointer_type + exchange(__pointer_type __p, + memory_order __m = memory_order_seq_cst) noexcept + { + return __atomic_exchange_n(&_M_p, __p, int(__m)); + } + + + _GLIBCXX_ALWAYS_INLINE __pointer_type + exchange(__pointer_type __p, + memory_order __m = memory_order_seq_cst) volatile noexcept + { + return __atomic_exchange_n(&_M_p, __p, int(__m)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, + memory_order __m1, + memory_order __m2) noexcept + { + memory_order __b2 = __m2 & __memory_order_mask; + memory_order __b1 = __m1 & __memory_order_mask; + __glibcxx_assert(__b2 != memory_order_release); + __glibcxx_assert(__b2 != memory_order_acq_rel); + __glibcxx_assert(__b2 <= __b1); + + return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, + int(__m1), int(__m2)); + } + + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, + memory_order __m1, + memory_order __m2) volatile noexcept + { + memory_order __b2 = __m2 & __memory_order_mask; + memory_order __b1 = __m1 & __memory_order_mask; + + __glibcxx_assert(__b2 != memory_order_release); + __glibcxx_assert(__b2 != memory_order_acq_rel); + __glibcxx_assert(__b2 <= __b1); + + return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, + int(__m1), int(__m2)); + } + + _GLIBCXX_ALWAYS_INLINE __pointer_type + fetch_add(ptrdiff_t __d, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __pointer_type + fetch_add(ptrdiff_t __d, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __pointer_type + fetch_sub(ptrdiff_t __d, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); } + + _GLIBCXX_ALWAYS_INLINE __pointer_type + fetch_sub(ptrdiff_t __d, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); } + }; + +#if __cplusplus > 201703L + // Implementation details of atomic_ref and atomic. + namespace __atomic_impl + { + // Remove volatile and create a non-deduced context for value arguments. + template + using _Val = remove_volatile_t<_Tp>; + + // As above, but for difference_type arguments. + template + using _Diff = conditional_t, ptrdiff_t, _Val<_Tp>>; + + template + _GLIBCXX_ALWAYS_INLINE bool + is_lock_free() noexcept + { + // Produce a fake, minimally aligned pointer. + return __atomic_is_lock_free(_Size, reinterpret_cast(-_Align)); + } + + template + _GLIBCXX_ALWAYS_INLINE void + store(_Tp* __ptr, _Val<_Tp> __t, memory_order __m) noexcept + { __atomic_store(__ptr, std::__addressof(__t), int(__m)); } + + template + _GLIBCXX_ALWAYS_INLINE _Val<_Tp> + load(const _Tp* __ptr, memory_order __m) noexcept + { + alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; + auto* __dest = reinterpret_cast<_Val<_Tp>*>(__buf); + __atomic_load(__ptr, __dest, int(__m)); + return *__dest; + } + + template + _GLIBCXX_ALWAYS_INLINE _Val<_Tp> + exchange(_Tp* __ptr, _Val<_Tp> __desired, memory_order __m) noexcept + { + alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; + auto* __dest = reinterpret_cast<_Val<_Tp>*>(__buf); + __atomic_exchange(__ptr, std::__addressof(__desired), __dest, int(__m)); + return *__dest; + } + + template + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_weak(_Tp* __ptr, _Val<_Tp>& __expected, + _Val<_Tp> __desired, memory_order __success, + memory_order __failure) noexcept + { + return __atomic_compare_exchange(__ptr, std::__addressof(__expected), + std::__addressof(__desired), true, + int(__success), int(__failure)); + } + + template + _GLIBCXX_ALWAYS_INLINE bool + compare_exchange_strong(_Tp* __ptr, _Val<_Tp>& __expected, + _Val<_Tp> __desired, memory_order __success, + memory_order __failure) noexcept + { + return __atomic_compare_exchange(__ptr, std::__addressof(__expected), + std::__addressof(__desired), false, + int(__success), int(__failure)); + } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + fetch_add(_Tp* __ptr, _Diff<_Tp> __i, memory_order __m) noexcept + { return __atomic_fetch_add(__ptr, __i, int(__m)); } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + fetch_sub(_Tp* __ptr, _Diff<_Tp> __i, memory_order __m) noexcept + { return __atomic_fetch_sub(__ptr, __i, int(__m)); } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + fetch_and(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept + { return __atomic_fetch_and(__ptr, __i, int(__m)); } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + fetch_or(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept + { return __atomic_fetch_or(__ptr, __i, int(__m)); } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + fetch_xor(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept + { return __atomic_fetch_xor(__ptr, __i, int(__m)); } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + __add_fetch(_Tp* __ptr, _Diff<_Tp> __i) noexcept + { return __atomic_add_fetch(__ptr, __i, __ATOMIC_SEQ_CST); } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + __sub_fetch(_Tp* __ptr, _Diff<_Tp> __i) noexcept + { return __atomic_sub_fetch(__ptr, __i, __ATOMIC_SEQ_CST); } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + __and_fetch(_Tp* __ptr, _Val<_Tp> __i) noexcept + { return __atomic_and_fetch(__ptr, __i, __ATOMIC_SEQ_CST); } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + __or_fetch(_Tp* __ptr, _Val<_Tp> __i) noexcept + { return __atomic_or_fetch(__ptr, __i, __ATOMIC_SEQ_CST); } + + template + _GLIBCXX_ALWAYS_INLINE _Tp + __xor_fetch(_Tp* __ptr, _Val<_Tp> __i) noexcept + { return __atomic_xor_fetch(__ptr, __i, __ATOMIC_SEQ_CST); } + + template + _Tp + __fetch_add_flt(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept + { + _Val<_Tp> __oldval = load(__ptr, memory_order_relaxed); + _Val<_Tp> __newval = __oldval + __i; + while (!compare_exchange_weak(__ptr, __oldval, __newval, __m, + memory_order_relaxed)) + __newval = __oldval + __i; + return __oldval; + } + + template + _Tp + __fetch_sub_flt(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept + { + _Val<_Tp> __oldval = load(__ptr, memory_order_relaxed); + _Val<_Tp> __newval = __oldval - __i; + while (!compare_exchange_weak(__ptr, __oldval, __newval, __m, + memory_order_relaxed)) + __newval = __oldval - __i; + return __oldval; + } + + template + _Tp + __add_fetch_flt(_Tp* __ptr, _Val<_Tp> __i) noexcept + { + _Val<_Tp> __oldval = load(__ptr, memory_order_relaxed); + _Val<_Tp> __newval = __oldval + __i; + while (!compare_exchange_weak(__ptr, __oldval, __newval, + memory_order_seq_cst, + memory_order_relaxed)) + __newval = __oldval + __i; + return __newval; + } + + template + _Tp + __sub_fetch_flt(_Tp* __ptr, _Val<_Tp> __i) noexcept + { + _Val<_Tp> __oldval = load(__ptr, memory_order_relaxed); + _Val<_Tp> __newval = __oldval - __i; + while (!compare_exchange_weak(__ptr, __oldval, __newval, + memory_order_seq_cst, + memory_order_relaxed)) + __newval = __oldval - __i; + return __newval; + } + } // namespace __atomic_impl + + // base class for atomic + template + struct __atomic_float + { + static_assert(is_floating_point_v<_Fp>); + + static constexpr size_t _S_alignment = __alignof__(_Fp); + + public: + using value_type = _Fp; + using difference_type = value_type; + + static constexpr bool is_always_lock_free + = __atomic_always_lock_free(sizeof(_Fp), 0); + + __atomic_float() = default; + + constexpr + __atomic_float(_Fp __t) : _M_fp(__t) + { } + + __atomic_float(const __atomic_float&) = delete; + __atomic_float& operator=(const __atomic_float&) = delete; + __atomic_float& operator=(const __atomic_float&) volatile = delete; + + _Fp + operator=(_Fp __t) volatile noexcept + { + this->store(__t); + return __t; + } + + _Fp + operator=(_Fp __t) noexcept + { + this->store(__t); + return __t; + } + + bool + is_lock_free() const volatile noexcept + { return __atomic_impl::is_lock_free(); } + + bool + is_lock_free() const noexcept + { return __atomic_impl::is_lock_free(); } + + void + store(_Fp __t, memory_order __m = memory_order_seq_cst) volatile noexcept + { __atomic_impl::store(&_M_fp, __t, __m); } + + void + store(_Fp __t, memory_order __m = memory_order_seq_cst) noexcept + { __atomic_impl::store(&_M_fp, __t, __m); } + + _Fp + load(memory_order __m = memory_order_seq_cst) const volatile noexcept + { return __atomic_impl::load(&_M_fp, __m); } + + _Fp + load(memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::load(&_M_fp, __m); } + + operator _Fp() const volatile noexcept { return this->load(); } + operator _Fp() const noexcept { return this->load(); } + + _Fp + exchange(_Fp __desired, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_impl::exchange(&_M_fp, __desired, __m); } + + _Fp + exchange(_Fp __desired, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_impl::exchange(&_M_fp, __desired, __m); } + + bool + compare_exchange_weak(_Fp& __expected, _Fp __desired, + memory_order __success, + memory_order __failure) noexcept + { + return __atomic_impl::compare_exchange_weak(&_M_fp, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_weak(_Fp& __expected, _Fp __desired, + memory_order __success, + memory_order __failure) volatile noexcept + { + return __atomic_impl::compare_exchange_weak(&_M_fp, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_strong(_Fp& __expected, _Fp __desired, + memory_order __success, + memory_order __failure) noexcept + { + return __atomic_impl::compare_exchange_strong(&_M_fp, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_strong(_Fp& __expected, _Fp __desired, + memory_order __success, + memory_order __failure) volatile noexcept + { + return __atomic_impl::compare_exchange_strong(&_M_fp, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_weak(_Fp& __expected, _Fp __desired, + memory_order __order = memory_order_seq_cst) + noexcept + { + return compare_exchange_weak(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + bool + compare_exchange_weak(_Fp& __expected, _Fp __desired, + memory_order __order = memory_order_seq_cst) + volatile noexcept + { + return compare_exchange_weak(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + bool + compare_exchange_strong(_Fp& __expected, _Fp __desired, + memory_order __order = memory_order_seq_cst) + noexcept + { + return compare_exchange_strong(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + bool + compare_exchange_strong(_Fp& __expected, _Fp __desired, + memory_order __order = memory_order_seq_cst) + volatile noexcept + { + return compare_exchange_strong(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + value_type + fetch_add(value_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_impl::__fetch_add_flt(&_M_fp, __i, __m); } + + value_type + fetch_add(value_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_impl::__fetch_add_flt(&_M_fp, __i, __m); } + + value_type + fetch_sub(value_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_impl::__fetch_sub_flt(&_M_fp, __i, __m); } + + value_type + fetch_sub(value_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_impl::__fetch_sub_flt(&_M_fp, __i, __m); } + + value_type + operator+=(value_type __i) noexcept + { return __atomic_impl::__add_fetch_flt(&_M_fp, __i); } + + value_type + operator+=(value_type __i) volatile noexcept + { return __atomic_impl::__add_fetch_flt(&_M_fp, __i); } + + value_type + operator-=(value_type __i) noexcept + { return __atomic_impl::__sub_fetch_flt(&_M_fp, __i); } + + value_type + operator-=(value_type __i) volatile noexcept + { return __atomic_impl::__sub_fetch_flt(&_M_fp, __i); } + + private: + alignas(_S_alignment) _Fp _M_fp _GLIBCXX20_INIT(0); + }; +#undef _GLIBCXX20_INIT + + template, bool = is_floating_point_v<_Tp>> + struct __atomic_ref; + + // base class for non-integral, non-floating-point, non-pointer types + template + struct __atomic_ref<_Tp, false, false> + { + static_assert(is_trivially_copyable_v<_Tp>); + + // 1/2/4/8/16-byte types must be aligned to at least their size. + static constexpr int _S_min_alignment + = (sizeof(_Tp) & (sizeof(_Tp) - 1)) || sizeof(_Tp) > 16 + ? 0 : sizeof(_Tp); + + public: + using value_type = _Tp; + + static constexpr bool is_always_lock_free + = __atomic_always_lock_free(sizeof(_Tp), 0); + + static constexpr size_t required_alignment + = _S_min_alignment > alignof(_Tp) ? _S_min_alignment : alignof(_Tp); + + __atomic_ref& operator=(const __atomic_ref&) = delete; + + explicit + __atomic_ref(_Tp& __t) : _M_ptr(std::__addressof(__t)) + { __glibcxx_assert(((uintptr_t)_M_ptr % required_alignment) == 0); } + + __atomic_ref(const __atomic_ref&) noexcept = default; + + _Tp + operator=(_Tp __t) const noexcept + { + this->store(__t); + return __t; + } + + operator _Tp() const noexcept { return this->load(); } + + bool + is_lock_free() const noexcept + { return __atomic_impl::is_lock_free(); } + + void + store(_Tp __t, memory_order __m = memory_order_seq_cst) const noexcept + { __atomic_impl::store(_M_ptr, __t, __m); } + + _Tp + load(memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::load(_M_ptr, __m); } + + _Tp + exchange(_Tp __desired, memory_order __m = memory_order_seq_cst) + const noexcept + { return __atomic_impl::exchange(_M_ptr, __desired, __m); } + + bool + compare_exchange_weak(_Tp& __expected, _Tp __desired, + memory_order __success, + memory_order __failure) const noexcept + { + return __atomic_impl::compare_exchange_weak(_M_ptr, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_strong(_Tp& __expected, _Tp __desired, + memory_order __success, + memory_order __failure) const noexcept + { + return __atomic_impl::compare_exchange_strong(_M_ptr, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_weak(_Tp& __expected, _Tp __desired, + memory_order __order = memory_order_seq_cst) + const noexcept + { + return compare_exchange_weak(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + bool + compare_exchange_strong(_Tp& __expected, _Tp __desired, + memory_order __order = memory_order_seq_cst) + const noexcept + { + return compare_exchange_strong(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + private: + _Tp* _M_ptr; + }; + + // base class for atomic_ref + template + struct __atomic_ref<_Tp, true, false> + { + static_assert(is_integral_v<_Tp>); + + public: + using value_type = _Tp; + using difference_type = value_type; + + static constexpr bool is_always_lock_free + = __atomic_always_lock_free(sizeof(_Tp), 0); + + static constexpr size_t required_alignment + = sizeof(_Tp) > alignof(_Tp) ? sizeof(_Tp) : alignof(_Tp); + + __atomic_ref() = delete; + __atomic_ref& operator=(const __atomic_ref&) = delete; + + explicit + __atomic_ref(_Tp& __t) : _M_ptr(&__t) + { __glibcxx_assert(((uintptr_t)_M_ptr % required_alignment) == 0); } + + __atomic_ref(const __atomic_ref&) noexcept = default; + + _Tp + operator=(_Tp __t) const noexcept + { + this->store(__t); + return __t; + } + + operator _Tp() const noexcept { return this->load(); } + + bool + is_lock_free() const noexcept + { + return __atomic_impl::is_lock_free(); + } + + void + store(_Tp __t, memory_order __m = memory_order_seq_cst) const noexcept + { __atomic_impl::store(_M_ptr, __t, __m); } + + _Tp + load(memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::load(_M_ptr, __m); } + + _Tp + exchange(_Tp __desired, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::exchange(_M_ptr, __desired, __m); } + + bool + compare_exchange_weak(_Tp& __expected, _Tp __desired, + memory_order __success, + memory_order __failure) const noexcept + { + return __atomic_impl::compare_exchange_weak(_M_ptr, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_strong(_Tp& __expected, _Tp __desired, + memory_order __success, + memory_order __failure) const noexcept + { + return __atomic_impl::compare_exchange_strong(_M_ptr, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_weak(_Tp& __expected, _Tp __desired, + memory_order __order = memory_order_seq_cst) + const noexcept + { + return compare_exchange_weak(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + bool + compare_exchange_strong(_Tp& __expected, _Tp __desired, + memory_order __order = memory_order_seq_cst) + const noexcept + { + return compare_exchange_strong(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + value_type + fetch_add(value_type __i, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::fetch_add(_M_ptr, __i, __m); } + + value_type + fetch_sub(value_type __i, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::fetch_sub(_M_ptr, __i, __m); } + + value_type + fetch_and(value_type __i, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::fetch_and(_M_ptr, __i, __m); } + + value_type + fetch_or(value_type __i, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::fetch_or(_M_ptr, __i, __m); } + + value_type + fetch_xor(value_type __i, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::fetch_xor(_M_ptr, __i, __m); } + + _GLIBCXX_ALWAYS_INLINE value_type + operator++(int) const noexcept + { return fetch_add(1); } + + _GLIBCXX_ALWAYS_INLINE value_type + operator--(int) const noexcept + { return fetch_sub(1); } + + value_type + operator++() const noexcept + { return __atomic_impl::__add_fetch(_M_ptr, value_type(1)); } + + value_type + operator--() const noexcept + { return __atomic_impl::__sub_fetch(_M_ptr, value_type(1)); } + + value_type + operator+=(value_type __i) const noexcept + { return __atomic_impl::__add_fetch(_M_ptr, __i); } + + value_type + operator-=(value_type __i) const noexcept + { return __atomic_impl::__sub_fetch(_M_ptr, __i); } + + value_type + operator&=(value_type __i) const noexcept + { return __atomic_impl::__and_fetch(_M_ptr, __i); } + + value_type + operator|=(value_type __i) const noexcept + { return __atomic_impl::__or_fetch(_M_ptr, __i); } + + value_type + operator^=(value_type __i) const noexcept + { return __atomic_impl::__xor_fetch(_M_ptr, __i); } + + private: + _Tp* _M_ptr; + }; + + // base class for atomic_ref + template + struct __atomic_ref<_Fp, false, true> + { + static_assert(is_floating_point_v<_Fp>); + + public: + using value_type = _Fp; + using difference_type = value_type; + + static constexpr bool is_always_lock_free + = __atomic_always_lock_free(sizeof(_Fp), 0); + + static constexpr size_t required_alignment = __alignof__(_Fp); + + __atomic_ref() = delete; + __atomic_ref& operator=(const __atomic_ref&) = delete; + + explicit + __atomic_ref(_Fp& __t) : _M_ptr(&__t) + { __glibcxx_assert(((uintptr_t)_M_ptr % required_alignment) == 0); } + + __atomic_ref(const __atomic_ref&) noexcept = default; + + _Fp + operator=(_Fp __t) const noexcept + { + this->store(__t); + return __t; + } + + operator _Fp() const noexcept { return this->load(); } + + bool + is_lock_free() const noexcept + { + return __atomic_impl::is_lock_free(); + } + + void + store(_Fp __t, memory_order __m = memory_order_seq_cst) const noexcept + { __atomic_impl::store(_M_ptr, __t, __m); } + + _Fp + load(memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::load(_M_ptr, __m); } + + _Fp + exchange(_Fp __desired, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::exchange(_M_ptr, __desired, __m); } + + bool + compare_exchange_weak(_Fp& __expected, _Fp __desired, + memory_order __success, + memory_order __failure) const noexcept + { + return __atomic_impl::compare_exchange_weak(_M_ptr, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_strong(_Fp& __expected, _Fp __desired, + memory_order __success, + memory_order __failure) const noexcept + { + return __atomic_impl::compare_exchange_strong(_M_ptr, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_weak(_Fp& __expected, _Fp __desired, + memory_order __order = memory_order_seq_cst) + const noexcept + { + return compare_exchange_weak(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + bool + compare_exchange_strong(_Fp& __expected, _Fp __desired, + memory_order __order = memory_order_seq_cst) + const noexcept + { + return compare_exchange_strong(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + value_type + fetch_add(value_type __i, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::__fetch_add_flt(_M_ptr, __i, __m); } + + value_type + fetch_sub(value_type __i, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::__fetch_sub_flt(_M_ptr, __i, __m); } + + value_type + operator+=(value_type __i) const noexcept + { return __atomic_impl::__add_fetch_flt(_M_ptr, __i); } + + value_type + operator-=(value_type __i) const noexcept + { return __atomic_impl::__sub_fetch_flt(_M_ptr, __i); } + + private: + _Fp* _M_ptr; + }; + + // base class for atomic_ref + template + struct __atomic_ref<_Tp*, false, false> + { + public: + using value_type = _Tp*; + using difference_type = ptrdiff_t; + + static constexpr bool is_always_lock_free = ATOMIC_POINTER_LOCK_FREE == 2; + + static constexpr size_t required_alignment = __alignof__(_Tp*); + + __atomic_ref() = delete; + __atomic_ref& operator=(const __atomic_ref&) = delete; + + explicit + __atomic_ref(_Tp*& __t) : _M_ptr(std::__addressof(__t)) + { __glibcxx_assert(((uintptr_t)_M_ptr % required_alignment) == 0); } + + __atomic_ref(const __atomic_ref&) noexcept = default; + + _Tp* + operator=(_Tp* __t) const noexcept + { + this->store(__t); + return __t; + } + + operator _Tp*() const noexcept { return this->load(); } + + bool + is_lock_free() const noexcept + { + return __atomic_impl::is_lock_free(); + } + + void + store(_Tp* __t, memory_order __m = memory_order_seq_cst) const noexcept + { __atomic_impl::store(_M_ptr, __t, __m); } + + _Tp* + load(memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::load(_M_ptr, __m); } + + _Tp* + exchange(_Tp* __desired, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::exchange(_M_ptr, __desired, __m); } + + bool + compare_exchange_weak(_Tp*& __expected, _Tp* __desired, + memory_order __success, + memory_order __failure) const noexcept + { + return __atomic_impl::compare_exchange_weak(_M_ptr, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_strong(_Tp*& __expected, _Tp* __desired, + memory_order __success, + memory_order __failure) const noexcept + { + return __atomic_impl::compare_exchange_strong(_M_ptr, + __expected, __desired, + __success, __failure); + } + + bool + compare_exchange_weak(_Tp*& __expected, _Tp* __desired, + memory_order __order = memory_order_seq_cst) + const noexcept + { + return compare_exchange_weak(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + bool + compare_exchange_strong(_Tp*& __expected, _Tp* __desired, + memory_order __order = memory_order_seq_cst) + const noexcept + { + return compare_exchange_strong(__expected, __desired, __order, + __cmpexch_failure_order(__order)); + } + + _GLIBCXX_ALWAYS_INLINE value_type + fetch_add(difference_type __d, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::fetch_add(_M_ptr, _S_type_size(__d), __m); } + + _GLIBCXX_ALWAYS_INLINE value_type + fetch_sub(difference_type __d, + memory_order __m = memory_order_seq_cst) const noexcept + { return __atomic_impl::fetch_sub(_M_ptr, _S_type_size(__d), __m); } + + value_type + operator++(int) const noexcept + { return fetch_add(1); } + + value_type + operator--(int) const noexcept + { return fetch_sub(1); } + + value_type + operator++() const noexcept + { + return __atomic_impl::__add_fetch(_M_ptr, _S_type_size(1)); + } + + value_type + operator--() const noexcept + { + return __atomic_impl::__sub_fetch(_M_ptr, _S_type_size(1)); + } + + value_type + operator+=(difference_type __d) const noexcept + { + return __atomic_impl::__add_fetch(_M_ptr, _S_type_size(__d)); + } + + value_type + operator-=(difference_type __d) const noexcept + { + return __atomic_impl::__sub_fetch(_M_ptr, _S_type_size(__d)); + } + + private: + static constexpr ptrdiff_t + _S_type_size(ptrdiff_t __d) noexcept + { + static_assert(is_object_v<_Tp>); + return __d * sizeof(_Tp); + } + + _Tp** _M_ptr; + }; + +#endif // C++2a + + // @} group atomics + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_base.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_base.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b60dcb4be93a5301c5a93278d68448bb7fc115f3 GIT binary patch literal 60615 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 u9yZ+bXv2Md$?H*XDC78--UID?wKb#;#P|#p. + +/** @file bits/atomic_lockfree_defines.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{atomic} + */ + +#ifndef _GLIBCXX_ATOMIC_LOCK_FREE_H +#define _GLIBCXX_ATOMIC_LOCK_FREE_H 1 + +#pragma GCC system_header + +/** + * @addtogroup atomics + * @{ + */ + +/** + * Lock-free property. + * + * 0 indicates that the types are never lock-free. + * 1 indicates that the types are sometimes lock-free. + * 2 indicates that the types are always lock-free. + */ + +#if __cplusplus >= 201103L +#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE +#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE +#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE +#ifdef _GLIBCXX_USE_CHAR8_T +#define ATOMIC_CHAR8_T_LOCK_FREE __GCC_ATOMIC_CHAR8_T_LOCK_FREE +#endif +#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE +#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE +#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE +#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE +#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE +#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE +#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE +#endif + +// @} group atomics + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_lockfree_defines.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@atomic_lockfree_defines.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e996e13b8cb3d169cef4ffbe79e7e356a4d169e9 GIT binary patch literal 13524 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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 + +#pragma GCC system_header + +#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 + { + 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 + explicit operator bool() const + { return !this->fail(); } +#else + operator void*() const + { return this->fail() ? 0 : const_cast(this); } +#endif + + 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(). + */ + 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); } + + // Flip the internal state on for the proper state bits, then + // rethrows the propagated exception if bit also set in + // exceptions(). + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + char_type + fill() const + { + if (!_M_fill_init) + { + _M_fill = this->widen(' '); + _M_fill_init = true; + } + 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 Qfill(); + _M_fill = __ch; + return __old; + } + + // Locales: + /** + * @brief Moves to a new locale. + * @param __loc The new locale. + * @return The previous locale. + * + * Calls @c ios_base::imbue(loc), and if a stream buffer is associated + * with this stream, calls that buffer's @c pubimbue(loc). + * + * Additional l10n notes are at + * http://gcc.gnu.org/onlinedocs/libstdc++/manual/localization.html + */ + locale + imbue(const locale& __loc); + + /** + * @brief Squeezes characters. + * @param __c The character to narrow. + * @param __dfault The character to narrow. + * @return The narrowed character. + * + * Maps a character of @c char_type to a character of @c char, + * if possible. + * + * Returns the result of + * @code + * std::use_facet >(getloc()).narrow(c,dfault) + * @endcode + * + * Additional l10n notes are at + * http://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 + * http://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/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..32d6c7d06fe30ccf7650cc8ddaf4d9cf83695540 GIT binary patch literal 32132 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 F`@hDw@hboT literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.tcc b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.tcc new file mode 100644 index 0000000..c8c786f --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.tcc @@ -0,0 +1,188 @@ +// basic_ios member functions -*- C++ -*- + +// Copyright (C) 1999-2020 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_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 + +#pragma GCC system_header + +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 != &__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. Because of this, the correct value for _M_fill is + // constructed on the first call of fill(). That way, + // unformatted input and output with non-required basic_ios + // instantiations is possible even without imbuing the expected + // ctype facet. + _M_fill = _CharT(); + _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) + { + if (__builtin_expect(has_facet<__ctype_type>(__loc), true)) + _M_ctype = std::__addressof(use_facet<__ctype_type>(__loc)); + else + _M_ctype = 0; + + if (__builtin_expect(has_facet<__num_put_type>(__loc), true)) + _M_num_put = std::__addressof(use_facet<__num_put_type>(__loc)); + else + _M_num_put = 0; + + if (__builtin_expect(has_facet<__num_get_type>(__loc), true)) + _M_num_get = std::__addressof(use_facet<__num_get_type>(__loc)); + else + _M_num_get = 0; + } + + // 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 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_ios.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..5f1d583d3d318270759cf4fcc14df34c283720b7 GIT binary patch literal 22013 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 N6_0nM{|BdAPS*ec literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.h new file mode 100644 index 0000000..bbab7b9 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.h @@ -0,0 +1,6951 @@ +// Components for manipulating sequences of characters -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +#include +#include +#include + +#if __cplusplus >= 201103L +#include +#endif + +#if __cplusplus >= 201703L +# include +#endif + + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if _GLIBCXX_USE_CXX11_ABI +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + /** + * @class basic_string basic_string.h + * @brief Managing sequences of characters and character-like objects. + * + * @ingroup strings + * @ingroup sequences + * + * @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 + { + typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template + rebind<_CharT>::other _Char_alloc_type; + 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: +#if __cplusplus >= 201703L + // 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. + 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 + { + 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. + */ + 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 + _Alloc_hider(pointer __dat, const _Alloc& __a) + : allocator_type(__a), _M_p(__dat) { } + + _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; + }; + + void + _M_data(pointer __p) + { _M_dataplus._M_p = __p; } + + void + _M_length(size_type __length) + { _M_string_length = __length; } + + pointer + _M_data() const + { return _M_dataplus._M_p; } + + pointer + _M_local_data() + { +#if __cplusplus >= 201103L + return std::pointer_traits::pointer_to(*_M_local_buf); +#else + return pointer(_M_local_buf); +#endif + } + + 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 + } + + void + _M_capacity(size_type __capacity) + { _M_allocated_capacity = __capacity; } + + void + _M_set_length(size_type __n) + { + _M_length(__n); + traits_type::assign(_M_data()[__n], _CharT()); + } + + bool + _M_is_local() const + { return _M_data() == _M_local_data(); } + + // Create & Destroy + pointer + _M_create(size_type&, size_type); + + void + _M_dispose() + { + if (!_M_is_local()) + _M_destroy(_M_allocated_capacity); + } + + void + _M_destroy(size_type __size) throw() + { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); } + + // _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); } + + template + void + _M_construct(_InIterator __beg, _InIterator __end) + { + typedef typename std::__is_integer<_InIterator>::__type _Integral; + _M_construct_aux(__beg, __end, _Integral()); + } + + // For Input Iterators, used in istreambuf_iterators, etc. + template + 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 + void + _M_construct(_FwdIterator __beg, _FwdIterator __end, + std::forward_iterator_tag); + + void + _M_construct(size_type __req, _CharT __c); + + allocator_type& + _M_get_allocator() + { return _M_dataplus; } + + const allocator_type& + _M_get_allocator() const + { return _M_dataplus; } + + 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 + + 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; + } + + 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. + 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. + 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); + } + + 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); + } + + 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); + } + + // _S_copy_chars is a separate template to permit specialization + // to optimize for the common case of pointers as iterators. + template + static void + _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) + { + for (; __k1 != __k2; ++__k1, (void)++__p) + traits_type::assign(*__p, *__k1); // These types are off. + } + + static void + _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) _GLIBCXX_NOEXCEPT + { _S_copy_chars(__p, __k1.base(), __k2.base()); } + + static void + _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) + _GLIBCXX_NOEXCEPT + { _S_copy_chars(__p, __k1.base(), __k2.base()); } + + static void + _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) _GLIBCXX_NOEXCEPT + { _S_copy(__p, __k1, __k2 - __k1); } + + static void + _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) + _GLIBCXX_NOEXCEPT + { _S_copy(__p, __k1, __k2 - __k1); } + + 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); + } + + void + _M_assign(const basic_string&); + + void + _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, + size_type __len2); + + 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. + */ + basic_string() + _GLIBCXX_NOEXCEPT_IF(is_nothrow_default_constructible<_Alloc>::value) + : _M_dataplus(_M_local_data()) + { _M_set_length(0); } + + /** + * @brief Construct an empty string using allocator @a a. + */ + explicit + basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT + : _M_dataplus(_M_local_data(), __a) + { _M_set_length(0); } + + /** + * @brief Construct string with copy of value of @a __str. + * @param __str Source string. + */ + 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._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. + */ + 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)); + } + + /** + * @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. + */ + 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)); + } + + /** + * @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. + */ + 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)); + } + + /** + * @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. + */ + basic_string(const _CharT* __s, size_type __n, + const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a) + { _M_construct(__s, __s + __n); } + + /** + * @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 + basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a) + { _M_construct(__s, __s ? __s + traits_type::length(__s) : __s+npos); } + + /** + * @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 + 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. + **/ + basic_string(basic_string&& __str) noexcept + : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator())) + { + if (__str._M_is_local()) + { + traits_type::copy(_M_local_buf, __str._M_local_buf, + _S_local_capacity + 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_local_data()); + __str._M_set_length(0); + } + + /** + * @brief Construct string from an initializer %list. + * @param __l std::initializer_list of characters. + * @param __a Allocator to use (default is default allocator). + */ + basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a) + { _M_construct(__l.begin(), __l.end()); } + + basic_string(const basic_string& __str, const _Alloc& __a) + : _M_dataplus(_M_local_data(), __a) + { _M_construct(__str.begin(), __str.end()); } + + 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()) + { + traits_type::copy(_M_local_buf, __str._M_local_buf, + _S_local_capacity + 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_local_buf); + __str._M_set_length(0); + } + else + _M_construct(__str.begin(), __str.end()); + } + +#endif // C++11 + + /** + * @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 + basic_string(_InputIterator __beg, _InputIterator __end, + const _Alloc& __a = _Alloc()) + : _M_dataplus(_M_local_data(), __a) + { _M_construct(__beg, __end); } + +#if __cplusplus >= 201703L + /** + * @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> + 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> + 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. + */ + ~basic_string() + { _M_dispose(); } + + /** + * @brief Assign the value of @a str to this string. + * @param __str Source string. + */ + 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. + */ + 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. + */ + 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 + basic_string& + operator=(basic_string&& __str) + noexcept(_Alloc_traits::_S_nothrow_move()) + { + if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign() + && !_Alloc_traits::_S_always_equal() + && _M_get_allocator() != __str._M_get_allocator()) + { + // 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. + 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() + || _Alloc_traits::_S_always_equal() + || _M_get_allocator() == __str._M_get_allocator()) + { + // Just move the allocated pointer, our allocator can free it. + pointer __data = nullptr; + size_type __capacity; + if (!_M_is_local()) + { + if (_Alloc_traits::_S_always_equal()) + { + // __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_local_buf); + } + else // Need to do a deep copy + assign(__str); + __str.clear(); + return *this; + } + + /** + * @brief Set value to string constructed from initializer %list. + * @param __l std::initializer_list. + */ + basic_string& + operator=(initializer_list<_CharT> __l) + { + this->assign(__l.begin(), __l.size()); + return *this; + } +#endif // C++11 + +#if __cplusplus >= 201703L + /** + * @brief Set value to string constructed from a string_view. + * @param __svt An object convertible to string_view. + */ + template + _If_sv<_Tp, basic_string&> + operator=(const _Tp& __svt) + { return this->assign(__svt); } + + /** + * @brief Convert to a string_view. + * @return A string_view. + */ + 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. + */ + iterator + begin() _GLIBCXX_NOEXCEPT + { return iterator(_M_data()); } + + /** + * Returns a read-only (constant) iterator that points to the first + * character in the %string. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + size_type + size() const _GLIBCXX_NOEXCEPT + { return _M_string_length; } + + /// Returns the number of characters in the string, not including any + /// null-termination. + size_type + length() const _GLIBCXX_NOEXCEPT + { return _M_string_length; } + + /// Returns the size() of the largest possible %string. + size_type + max_size() const _GLIBCXX_NOEXCEPT + { return (_Alloc_traits::max_size(_M_get_allocator()) - 1) / 2; } + + /** + * @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. + */ + 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. + */ + void + resize(size_type __n) + { this->resize(__n, _CharT()); } + +#if __cplusplus >= 201103L + /// A non-binding request to reduce capacity() to size(). + void + shrink_to_fit() noexcept + { +#if __cpp_exceptions + if (capacity() > size()) + { + try + { reserve(0); } + catch(...) + { } + } +#endif + } +#endif + + /** + * Returns the total number of characters that the %string can hold + * before needing to allocate more memory. + */ + size_type + capacity() const _GLIBCXX_NOEXCEPT + { + return _M_is_local() ? size_type(_S_local_capacity) + : _M_allocated_capacity; + } + + /** + * @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. + */ + void + reserve(size_type __res_arg = 0); + + /** + * Erases the string, making it empty. + */ + void + clear() _GLIBCXX_NOEXCEPT + { _M_set_length(0); } + + /** + * Returns true if the %string is empty. Equivalent to + * *this == "". + */ + _GLIBCXX_NODISCARD bool + empty() const _GLIBCXX_NOEXCEPT + { return this->size() == 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().) + */ + 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().) + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + basic_string& + operator+=(initializer_list<_CharT> __l) + { return this->append(__l.begin(), __l.size()); } +#endif // C++11 + +#if __cplusplus >= 201703L + /** + * @brief Append a string_view. + * @param __svt An object convertible to string_view to be appended. + * @return Reference to this string. + */ + template + _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. + */ + basic_string& + append(const basic_string& __str) + { return _M_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. + */ + basic_string& + append(const basic_string& __str, size_type __pos, size_type __n = npos) + { return _M_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. + */ + 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. + */ + 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. + */ + basic_string& + append(size_type __n, _CharT __c) + { return _M_replace_aux(this->size(), size_type(0), __n, __c); } + +#if __cplusplus >= 201103L + /** + * @brief Append an initializer_list of characters. + * @param __l The initializer_list of characters to append. + * @return Reference to this string. + */ + 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> +#else + template +#endif + basic_string& + append(_InputIterator __first, _InputIterator __last) + { return this->replace(end(), end(), __first, __last); } + +#if __cplusplus >= 201703L + /** + * @brief Append a string_view. + * @param __svt An object convertible to string_view to be appended. + * @return Reference to this string. + */ + template + _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 + _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. + */ + 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. + */ + 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_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 = _Alloc_traits::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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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 + template> +#else + template +#endif + basic_string& + assign(_InputIterator __first, _InputIterator __last) + { return this->replace(begin(), end(), __first, __last); } + +#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. + */ + basic_string& + assign(initializer_list<_CharT> __l) + { return this->assign(__l.begin(), __l.size()); } +#endif // C++11 + +#if __cplusplus >= 201703L + /** + * @brief Set value from a string_view. + * @param __svt The source object convertible to string_view. + * @return Reference to this string. + */ + template + _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 + _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. + */ + 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> + 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 __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(). + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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); + } + +#if __cplusplus >= 201703L + /** + * @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 + _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 + _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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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> + 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. + 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); + } + + 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); + } + + 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); + } + + 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 __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. + */ + 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 + +#if __cplusplus >= 201703L + /** + * @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 + _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 + _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 + _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 + 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 + basic_string& + _M_replace_dispatch(const_iterator __i1, const_iterator __i2, + _InputIterator __k1, _InputIterator __k2, + __false_type); + + basic_string& + _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, + _CharT __c); + + basic_string& + _M_replace(size_type __pos, size_type __len1, const _CharT* __s, + const size_type __len2); + + 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. + */ + 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. + */ + 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. + */ + 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). + */ + 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. + */ + _CharT* + data() noexcept + { return _M_data(); } +#endif + + /** + * @brief Return copy of allocator used to construct this string. + */ + 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. + */ + 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. + */ + size_type + find(const basic_string& __str, size_type __pos = 0) const + _GLIBCXX_NOEXCEPT + { return this->find(__str.data(), __pos, __str.size()); } + +#if __cplusplus >= 201703L + /** + * @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 + _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. + */ + 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. + */ + 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. + */ + size_type + rfind(const basic_string& __str, size_type __pos = npos) const + _GLIBCXX_NOEXCEPT + { return this->rfind(__str.data(), __pos, __str.size()); } + +#if __cplusplus >= 201703L + /** + * @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 + _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. + */ + 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. + */ + 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. + */ + 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. + */ + 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()); } + +#if __cplusplus >= 201703L + /** + * @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 + _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. + */ + 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. + */ + 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). + */ + 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. + */ + 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()); } + +#if __cplusplus >= 201703L + /** + * @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 + _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. + */ + 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. + */ + 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). + */ + 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. + */ + 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()); } + +#if __cplusplus >= 201703L + /** + * @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 + _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. + */ + 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. + */ + 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. + */ + 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. + */ + 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()); } + +#if __cplusplus >= 201703L + /** + * @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 + _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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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; + } + +#if __cplusplus >= 201703L + /** + * @brief Compare to a string_view. + * @param __svt An object convertible to string_view to compare against. + * @return Integer < 0, 0, or > 0. + */ + template + _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 + _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 + _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. + */ + int + compare(size_type __pos, size_type __n, const basic_string& __str) const; + + /** + * @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. + */ + int + compare(size_type __pos1, size_type __n1, const basic_string& __str, + size_type __pos2, size_type __n2 = npos) const; + + /** + * @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. + */ + int + compare(const _CharT* __s) const _GLIBCXX_NOEXCEPT; + + // _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. + */ + int + compare(size_type __pos, size_type __n1, const _CharT* __s) const; + + /** + * @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. + */ + int + compare(size_type __pos, size_type __n1, const _CharT* __s, + size_type __n2) const; + +#if __cplusplus > 201703L + bool + starts_with(basic_string_view<_CharT, _Traits> __x) const noexcept + { return __sv_type(this->data(), this->size()).starts_with(__x); } + + bool + starts_with(_CharT __x) const noexcept + { return __sv_type(this->data(), this->size()).starts_with(__x); } + + bool + starts_with(const _CharT* __x) const noexcept + { return __sv_type(this->data(), this->size()).starts_with(__x); } + + bool + ends_with(basic_string_view<_CharT, _Traits> __x) const noexcept + { return __sv_type(this->data(), this->size()).ends_with(__x); } + + bool + ends_with(_CharT __x) const noexcept + { return __sv_type(this->data(), this->size()).ends_with(__x); } + + bool + ends_with(const _CharT* __x) const noexcept + { return __sv_type(this->data(), this->size()).ends_with(__x); } +#endif // C++20 + + // Allow basic_stringbuf::__xfer_bufptrs to call _M_length: + template friend class basic_stringbuf; + }; +_GLIBCXX_END_NAMESPACE_CXX11 +#else // !_GLIBCXX_USE_CXX11_ABI + // Reference-counted COW string implentation + + /** + * @class basic_string basic_string.h + * @brief Managing sequences of characters and character-like objects. + * + * @ingroup strings + * @ingroup sequences + * + * @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. + * + * @doctodo + * + * + * Documentation? What's that? + * Nathan Myers . + * + * A string looks like this: + * + * @code + * [_Rep] + * _M_length + * [basic_string] _M_capacity + * _M_dataplus _M_refcount + * _M_p ----------------> unnamed array of char_type + * @endcode + * + * Where the _M_p points to the first character in the string, and + * you cast it to a pointer-to-_Rep and subtract 1 to get a + * pointer to the header. + * + * This approach has the enormous advantage that a string object + * requires only one allocation. All the ugliness is confined + * within a single %pair of inline functions, which each compile to + * a single @a add instruction: _Rep::_M_data(), and + * string::_M_rep(); and the allocation function which gets a + * block of raw bytes and with room enough and constructs a _Rep + * object at the front. + * + * The reason you want _M_data pointing to the character %array and + * not the _Rep is so that the debugger can see the string + * contents. (Probably we should add a non-inline member to get + * the _Rep for the debugger to use, so users can check the actual + * string length.) + * + * Note that the _Rep object is a POD so that you can have a + * static empty string _Rep object already @a constructed before + * static constructors have run. The reference-count encoding is + * chosen so that a 0 indicates one reference, so you never try to + * destroy the empty-string _Rep object. + * + * All but the last paragraph is considered pretty conventional + * for a C++ string implementation. + */ + // 21.3 Template class basic_string + template + class basic_string + { + typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template + rebind<_CharT>::other _CharT_alloc_type; + typedef __gnu_cxx::__alloc_traits<_CharT_alloc_type> _CharT_alloc_traits; + + // Types: + public: + typedef _Traits traits_type; + typedef typename _Traits::char_type value_type; + typedef _Alloc allocator_type; + typedef typename _CharT_alloc_type::size_type size_type; + typedef typename _CharT_alloc_type::difference_type difference_type; +#if __cplusplus < 201103L + typedef typename _CharT_alloc_type::reference reference; + typedef typename _CharT_alloc_type::const_reference const_reference; +#else + typedef value_type& reference; + typedef const value_type& const_reference; +#endif + typedef typename _CharT_alloc_traits::pointer pointer; + typedef typename _CharT_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; + + protected: + // type used for positions in insert, erase etc. + typedef iterator __const_iterator; + + private: + // _Rep: string representation + // Invariants: + // 1. String really contains _M_length + 1 characters: due to 21.3.4 + // must be kept null-terminated. + // 2. _M_capacity >= _M_length + // Allocated memory is always (_M_capacity + 1) * sizeof(_CharT). + // 3. _M_refcount has three states: + // -1: leaked, one reference, no ref-copies allowed, non-const. + // 0: one reference, non-const. + // n>0: n + 1 references, operations require a lock, const. + // 4. All fields==0 is an empty string, given the extra storage + // beyond-the-end for a null terminator; thus, the shared + // empty string representation needs no constructor. + + struct _Rep_base + { + size_type _M_length; + size_type _M_capacity; + _Atomic_word _M_refcount; + }; + + struct _Rep : _Rep_base + { + // Types: + typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template + rebind::other _Raw_bytes_alloc; + + // (Public) Data members: + + // The maximum number of individual char_type elements of an + // individual string is determined by _S_max_size. This is the + // value that will be returned by max_size(). (Whereas npos + // is the maximum number of bytes the allocator can allocate.) + // If one was to divvy up the theoretical largest size string, + // with a terminating character and m _CharT elements, it'd + // look like this: + // npos = sizeof(_Rep) + (m * sizeof(_CharT)) + sizeof(_CharT) + // Solving for m: + // m = ((npos - sizeof(_Rep))/sizeof(CharT)) - 1 + // In addition, this implementation quarters this amount. + static const size_type _S_max_size; + static const _CharT _S_terminal; + + // The following storage is init'd to 0 by the linker, resulting + // (carefully) in an empty string with one reference. + static size_type _S_empty_rep_storage[]; + + static _Rep& + _S_empty_rep() _GLIBCXX_NOEXCEPT + { + // NB: Mild hack to avoid strict-aliasing warnings. Note that + // _S_empty_rep_storage is never modified and the punning should + // be reasonably safe in this case. + void* __p = reinterpret_cast(&_S_empty_rep_storage); + return *reinterpret_cast<_Rep*>(__p); + } + + bool + _M_is_leaked() const _GLIBCXX_NOEXCEPT + { +#if defined(__GTHREADS) + // _M_refcount is mutated concurrently by _M_refcopy/_M_dispose, + // so we need to use an atomic load. However, _M_is_leaked + // predicate does not change concurrently (i.e. the string is either + // leaked or not), so a relaxed load is enough. + return __atomic_load_n(&this->_M_refcount, __ATOMIC_RELAXED) < 0; +#else + return this->_M_refcount < 0; +#endif + } + + bool + _M_is_shared() const _GLIBCXX_NOEXCEPT + { +#if defined(__GTHREADS) + // _M_refcount is mutated concurrently by _M_refcopy/_M_dispose, + // so we need to use an atomic load. Another thread can drop last + // but one reference concurrently with this check, so we need this + // load to be acquire to synchronize with release fetch_and_add in + // _M_dispose. + return __atomic_load_n(&this->_M_refcount, __ATOMIC_ACQUIRE) > 0; +#else + return this->_M_refcount > 0; +#endif + } + + void + _M_set_leaked() _GLIBCXX_NOEXCEPT + { this->_M_refcount = -1; } + + void + _M_set_sharable() _GLIBCXX_NOEXCEPT + { this->_M_refcount = 0; } + + void + _M_set_length_and_sharable(size_type __n) _GLIBCXX_NOEXCEPT + { +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + if (__builtin_expect(this != &_S_empty_rep(), false)) +#endif + { + this->_M_set_sharable(); // One reference. + this->_M_length = __n; + traits_type::assign(this->_M_refdata()[__n], _S_terminal); + // grrr. (per 21.3.4) + // You cannot leave those LWG people alone for a second. + } + } + + _CharT* + _M_refdata() throw() + { return reinterpret_cast<_CharT*>(this + 1); } + + _CharT* + _M_grab(const _Alloc& __alloc1, const _Alloc& __alloc2) + { + return (!_M_is_leaked() && __alloc1 == __alloc2) + ? _M_refcopy() : _M_clone(__alloc1); + } + + // Create & Destroy + static _Rep* + _S_create(size_type, size_type, const _Alloc&); + + void + _M_dispose(const _Alloc& __a) _GLIBCXX_NOEXCEPT + { +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + if (__builtin_expect(this != &_S_empty_rep(), false)) +#endif + { + // Be race-detector-friendly. For more info see bits/c++config. + _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount); + // Decrement of _M_refcount is acq_rel, because: + // - all but last decrements need to release to synchronize with + // the last decrement that will delete the object. + // - the last decrement needs to acquire to synchronize with + // all the previous decrements. + // - last but one decrement needs to release to synchronize with + // the acquire load in _M_is_shared that will conclude that + // the object is not shared anymore. + if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, + -1) <= 0) + { + _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount); + _M_destroy(__a); + } + } + } // XXX MT + + void + _M_destroy(const _Alloc&) throw(); + + _CharT* + _M_refcopy() throw() + { +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + if (__builtin_expect(this != &_S_empty_rep(), false)) +#endif + __gnu_cxx::__atomic_add_dispatch(&this->_M_refcount, 1); + return _M_refdata(); + } // XXX MT + + _CharT* + _M_clone(const _Alloc&, size_type __res = 0); + }; + + // Use empty-base optimization: http://www.cantrip.org/emptyopt.html + struct _Alloc_hider : _Alloc + { + _Alloc_hider(_CharT* __dat, const _Alloc& __a) _GLIBCXX_NOEXCEPT + : _Alloc(__a), _M_p(__dat) { } + + _CharT* _M_p; // The actual data. + }; + + public: + // Data Members (public): + // NB: This is an unsigned type, and thus represents the maximum + // size that the allocator can hold. + /// Value returned by various member functions when they fail. + static const size_type npos = static_cast(-1); + + private: + // Data Members (private): + mutable _Alloc_hider _M_dataplus; + + _CharT* + _M_data() const _GLIBCXX_NOEXCEPT + { return _M_dataplus._M_p; } + + _CharT* + _M_data(_CharT* __p) _GLIBCXX_NOEXCEPT + { return (_M_dataplus._M_p = __p); } + + _Rep* + _M_rep() const _GLIBCXX_NOEXCEPT + { return &((reinterpret_cast<_Rep*> (_M_data()))[-1]); } + + // For the internal use we have functions similar to `begin'/`end' + // but they do not call _M_leak. + iterator + _M_ibegin() const _GLIBCXX_NOEXCEPT + { return iterator(_M_data()); } + + iterator + _M_iend() const _GLIBCXX_NOEXCEPT + { return iterator(_M_data() + this->size()); } + + void + _M_leak() // for use in begin() & non-const op[] + { + if (!_M_rep()->_M_is_leaked()) + _M_leak_hard(); + } + + 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; + } + + 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. + 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. + static void + _M_copy(_CharT* __d, const _CharT* __s, size_type __n) _GLIBCXX_NOEXCEPT + { + if (__n == 1) + traits_type::assign(*__d, *__s); + else + traits_type::copy(__d, __s, __n); + } + + static void + _M_move(_CharT* __d, const _CharT* __s, size_type __n) _GLIBCXX_NOEXCEPT + { + if (__n == 1) + traits_type::assign(*__d, *__s); + else + traits_type::move(__d, __s, __n); + } + + static void + _M_assign(_CharT* __d, size_type __n, _CharT __c) _GLIBCXX_NOEXCEPT + { + if (__n == 1) + traits_type::assign(*__d, __c); + else + traits_type::assign(__d, __n, __c); + } + + // _S_copy_chars is a separate template to permit specialization + // to optimize for the common case of pointers as iterators. + template + static void + _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) + { + for (; __k1 != __k2; ++__k1, (void)++__p) + traits_type::assign(*__p, *__k1); // These types are off. + } + + static void + _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) _GLIBCXX_NOEXCEPT + { _S_copy_chars(__p, __k1.base(), __k2.base()); } + + static void + _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) + _GLIBCXX_NOEXCEPT + { _S_copy_chars(__p, __k1.base(), __k2.base()); } + + static void + _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) _GLIBCXX_NOEXCEPT + { _M_copy(__p, __k1, __k2 - __k1); } + + static void + _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) + _GLIBCXX_NOEXCEPT + { _M_copy(__p, __k1, __k2 - __k1); } + + 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); + } + + void + _M_mutate(size_type __pos, size_type __len1, size_type __len2); + + void + _M_leak_hard(); + + static _Rep& + _S_empty_rep() _GLIBCXX_NOEXCEPT + { return _Rep::_S_empty_rep(); } + +#if __cplusplus >= 201703L + // 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. + 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 + { + 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. + */ + explicit + basic_string(__sv_wrapper __svw, const _Alloc& __a) + : basic_string(__svw._M_sv.data(), __svw._M_sv.size(), __a) { } +#endif + + 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. + */ + basic_string() +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + _GLIBCXX_NOEXCEPT + : _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) +#else + : _M_dataplus(_S_construct(size_type(), _CharT(), _Alloc()), _Alloc()) +#endif + { } + + /** + * @brief Construct an empty string using allocator @a a. + */ + explicit + basic_string(const _Alloc& __a); + + // NB: per LWG issue 42, semantics different from IS: + /** + * @brief Construct string with copy of value of @a str. + * @param __str Source string. + */ + basic_string(const basic_string& __str); + + // _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. + */ + basic_string(const basic_string& __str, size_type __pos, + const _Alloc& __a = _Alloc()); + + /** + * @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. + */ + basic_string(const basic_string& __str, size_type __pos, + size_type __n); + /** + * @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. + */ + basic_string(const basic_string& __str, size_type __pos, + size_type __n, const _Alloc& __a); + + /** + * @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. + */ + basic_string(const _CharT* __s, size_type __n, + const _Alloc& __a = _Alloc()); + + /** + * @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 + basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()) + : _M_dataplus(_S_construct(__s, __s ? __s + traits_type::length(__s) : + __s + npos, __a), __a) + { } + + /** + * @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). + */ + basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc()); + +#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. + **/ + basic_string(basic_string&& __str) +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + noexcept // FIXME C++11: should always be noexcept. +#endif + : _M_dataplus(std::move(__str._M_dataplus)) + { +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + __str._M_data(_S_empty_rep()._M_refdata()); +#else + __str._M_data(_S_construct(size_type(), _CharT(), get_allocator())); +#endif + } + + /** + * @brief Construct string from an initializer %list. + * @param __l std::initializer_list of characters. + * @param __a Allocator to use (default is default allocator). + */ + basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc()); + + basic_string(const basic_string& __str, const _Alloc& __a) + : _M_dataplus(__str._M_rep()->_M_grab(__a, __str.get_allocator()), __a) + { } + + basic_string(basic_string&& __str, const _Alloc& __a) + : _M_dataplus(__str._M_data(), __a) + { + if (__a == __str.get_allocator()) + { +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + __str._M_data(_S_empty_rep()._M_refdata()); +#else + __str._M_data(_S_construct(size_type(), _CharT(), __a)); +#endif + } + else + _M_dataplus._M_p = _S_construct(__str.begin(), __str.end(), __a); + } +#endif // C++11 + + /** + * @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). + */ + template + basic_string(_InputIterator __beg, _InputIterator __end, + const _Alloc& __a = _Alloc()); + +#if __cplusplus >= 201703L + /** + * @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> + 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> + 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. + */ + ~basic_string() _GLIBCXX_NOEXCEPT + { _M_rep()->_M_dispose(this->get_allocator()); } + + /** + * @brief Assign the value of @a str to this string. + * @param __str Source string. + */ + 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. + */ + 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. + */ + 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. + **/ + basic_string& + operator=(basic_string&& __str) + _GLIBCXX_NOEXCEPT_IF(allocator_traits<_Alloc>::is_always_equal::value) + { + // NB: DR 1204. + this->swap(__str); + return *this; + } + + /** + * @brief Set value to string constructed from initializer %list. + * @param __l std::initializer_list. + */ + basic_string& + operator=(initializer_list<_CharT> __l) + { + this->assign(__l.begin(), __l.size()); + return *this; + } +#endif // C++11 + +#if __cplusplus >= 201703L + /** + * @brief Set value to string constructed from a string_view. + * @param __svt An object convertible to string_view. + */ + template + _If_sv<_Tp, basic_string&> + operator=(const _Tp& __svt) + { return this->assign(__svt); } + + /** + * @brief Convert to a string_view. + * @return A string_view. + */ + 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. Unshares the string. + */ + iterator + begin() // FIXME C++11: should be noexcept. + { + _M_leak(); + return iterator(_M_data()); + } + + /** + * Returns a read-only (constant) iterator that points to the first + * character in the %string. + */ + 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. Unshares the string. + */ + iterator + end() // FIXME C++11: should be noexcept. + { + _M_leak(); + return iterator(_M_data() + this->size()); + } + + /** + * Returns a read-only (constant) iterator that points one past the + * last character in the %string. + */ + 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. Unshares the string. + */ + reverse_iterator + rbegin() // FIXME C++11: should be 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. + */ + 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. Unshares the string. + */ + reverse_iterator + rend() // FIXME C++11: should be 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + size_type + size() const _GLIBCXX_NOEXCEPT + { return _M_rep()->_M_length; } + + /// Returns the number of characters in the string, not including any + /// null-termination. + size_type + length() const _GLIBCXX_NOEXCEPT + { return _M_rep()->_M_length; } + + /// Returns the size() of the largest possible %string. + size_type + max_size() const _GLIBCXX_NOEXCEPT + { return _Rep::_S_max_size; } + + /** + * @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. + */ + 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. + */ + void + resize(size_type __n) + { this->resize(__n, _CharT()); } + +#if __cplusplus >= 201103L + /// A non-binding request to reduce capacity() to size(). + void + shrink_to_fit() _GLIBCXX_NOEXCEPT + { +#if __cpp_exceptions + if (capacity() > size()) + { + try + { reserve(0); } + catch(...) + { } + } +#endif + } +#endif + + /** + * Returns the total number of characters that the %string can hold + * before needing to allocate more memory. + */ + size_type + capacity() const _GLIBCXX_NOEXCEPT + { return _M_rep()->_M_capacity; } + + /** + * @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. + */ + void + reserve(size_type __res_arg = 0); + + /** + * Erases the string, making it empty. + */ +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + void + clear() _GLIBCXX_NOEXCEPT + { + if (_M_rep()->_M_is_shared()) + { + _M_rep()->_M_dispose(this->get_allocator()); + _M_data(_S_empty_rep()._M_refdata()); + } + else + _M_rep()->_M_set_length_and_sharable(0); + } +#else + // PR 56166: this should not throw. + void + clear() + { _M_mutate(0, this->size(), 0); } +#endif + + /** + * Returns true if the %string is empty. Equivalent to + * *this == "". + */ + _GLIBCXX_NODISCARD bool + empty() const _GLIBCXX_NOEXCEPT + { return this->size() == 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().) + */ + 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().) Unshares the string. + */ + 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()); + _M_leak(); + 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. + */ + 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. Success results in + * unsharing the string. + */ + 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()); + _M_leak(); + return _M_data()[__n]; + } + +#if __cplusplus >= 201103L + /** + * Returns a read/write reference to the data at the first + * element of the %string. + */ + reference + front() + { + __glibcxx_assert(!empty()); + return operator[](0); + } + + /** + * Returns a read-only (constant) reference to the data at the first + * element of the %string. + */ + 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. + */ + reference + back() + { + __glibcxx_assert(!empty()); + return operator[](this->size() - 1); + } + + /** + * Returns a read-only (constant) reference to the data at the + * last element of the %string. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + basic_string& + operator+=(initializer_list<_CharT> __l) + { return this->append(__l.begin(), __l.size()); } +#endif // C++11 + +#if __cplusplus >= 201703L + /** + * @brief Append a string_view. + * @param __svt The object convertible to string_view to be appended. + * @return Reference to this string. + */ + template + _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. + */ + basic_string& + append(const basic_string& __str); + + /** + * @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. + */ + basic_string& + append(const basic_string& __str, size_type __pos, size_type __n = npos); + + /** + * @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. + */ + basic_string& + append(const _CharT* __s, size_type __n); + + /** + * @brief Append a C string. + * @param __s The C string to append. + * @return Reference to this string. + */ + basic_string& + append(const _CharT* __s) + { + __glibcxx_requires_string(__s); + return this->append(__s, traits_type::length(__s)); + } + + /** + * @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. + */ + basic_string& + append(size_type __n, _CharT __c); + +#if __cplusplus >= 201103L + /** + * @brief Append an initializer_list of characters. + * @param __l The initializer_list of characters to append. + * @return Reference to this string. + */ + 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. + */ + template + basic_string& + append(_InputIterator __first, _InputIterator __last) + { return this->replace(_M_iend(), _M_iend(), __first, __last); } + +#if __cplusplus >= 201703L + /** + * @brief Append a string_view. + * @param __svt The object convertible to string_view to be appended. + * @return Reference to this string. + */ + template + _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 The 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 + _If_sv<_Tp, basic_string&> + append(const _Tp& __svt, size_type __pos, size_type __n = npos) + { + __sv_type __sv = __svt; + return 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. + */ + void + push_back(_CharT __c) + { + const size_type __len = 1 + this->size(); + if (__len > this->capacity() || _M_rep()->_M_is_shared()) + this->reserve(__len); + traits_type::assign(_M_data()[this->size()], __c); + _M_rep()->_M_set_length_and_sharable(__len); + } + + /** + * @brief Set value to contents of another string. + * @param __str Source string to use. + * @return Reference to this string. + */ + basic_string& + assign(const basic_string& __str); + +#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. + */ + basic_string& + assign(basic_string&& __str) + noexcept(allocator_traits<_Alloc>::is_always_equal::value) + { + this->swap(__str); + return *this; + } +#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. + */ + basic_string& + assign(const basic_string& __str, size_type __pos, size_type __n = npos) + { return this->assign(__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. + */ + basic_string& + assign(const _CharT* __s, size_type __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. + */ + basic_string& + assign(const _CharT* __s) + { + __glibcxx_requires_string(__s); + return this->assign(__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. + */ + 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). + */ + template + basic_string& + assign(_InputIterator __first, _InputIterator __last) + { return this->replace(_M_ibegin(), _M_iend(), __first, __last); } + +#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. + */ + basic_string& + assign(initializer_list<_CharT> __l) + { return this->assign(__l.begin(), __l.size()); } +#endif // C++11 + +#if __cplusplus >= 201703L + /** + * @brief Set value from a string_view. + * @param __svt The source object convertible to string_view. + * @return Reference to this string. + */ + template + _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 + _If_sv<_Tp, basic_string&> + assign(const _Tp& __svt, size_type __pos, size_type __n = npos) + { + __sv_type __sv = __svt; + return assign(__sv.data() + + std::__sv_check(__sv.size(), __pos, "basic_string::assign"), + std::__sv_limit(__sv.size(), __pos, __n)); + } +#endif // C++17 + + /** + * @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); } + + /** + * @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); } + +#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(). + */ + void + insert(iterator __p, initializer_list<_CharT> __l) + { + _GLIBCXX_DEBUG_PEDASSERT(__p >= _M_ibegin() && __p <= _M_iend()); + this->insert(__p - _M_ibegin(), __l.begin(), __l.size()); + } +#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. + */ + basic_string& + insert(size_type __pos1, const basic_string& __str) + { return this->insert(__pos1, __str, size_type(0), __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. + */ + basic_string& + insert(size_type __pos1, const basic_string& __str, + size_type __pos2, size_type __n = npos) + { return this->insert(__pos1, __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. + */ + basic_string& + insert(size_type __pos, const _CharT* __s, size_type __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. + */ + basic_string& + insert(size_type __pos, const _CharT* __s) + { + __glibcxx_requires_string(__s); + return this->insert(__pos, __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. + */ + 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. + */ + iterator + insert(iterator __p, _CharT __c) + { + _GLIBCXX_DEBUG_PEDASSERT(__p >= _M_ibegin() && __p <= _M_iend()); + const size_type __pos = __p - _M_ibegin(); + _M_replace_aux(__pos, size_type(0), size_type(1), __c); + _M_rep()->_M_set_leaked(); + return iterator(_M_data() + __pos); + } + +#if __cplusplus >= 201703L + /** + * @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 + _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 __pos Position in string to insert at. + * @param __svt The object convertible to string_view to insert from. + * @param __pos Position in string_view to insert + * from. + * @param __n The number of characters to insert. + * @return Reference to this string. + */ + template + _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. + */ + basic_string& + erase(size_type __pos = 0, size_type __n = npos) + { + _M_mutate(_M_check(__pos, "basic_string::erase"), + _M_limit(__pos, __n), size_type(0)); + 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. + */ + iterator + erase(iterator __position) + { + _GLIBCXX_DEBUG_PEDASSERT(__position >= _M_ibegin() + && __position < _M_iend()); + const size_type __pos = __position - _M_ibegin(); + _M_mutate(__pos, size_type(1), size_type(0)); + _M_rep()->_M_set_leaked(); + 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. + */ + iterator + erase(iterator __first, iterator __last); + +#if __cplusplus >= 201103L + /** + * @brief Remove the last character. + * + * The string must be non-empty. + */ + void + pop_back() // FIXME C++11: should be noexcept. + { + __glibcxx_assert(!empty()); + 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. + */ + 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. + */ + 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. + */ + basic_string& + replace(size_type __pos, size_type __n1, const _CharT* __s, + size_type __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. + */ + 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. + */ + 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. + */ + basic_string& + replace(iterator __i1, 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. + */ + basic_string& + replace(iterator __i1, iterator __i2, const _CharT* __s, size_type __n) + { + _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 + && __i2 <= _M_iend()); + return this->replace(__i1 - _M_ibegin(), __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. + */ + basic_string& + replace(iterator __i1, 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. + */ + basic_string& + replace(iterator __i1, iterator __i2, size_type __n, _CharT __c) + { + _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 + && __i2 <= _M_iend()); + return _M_replace_aux(__i1 - _M_ibegin(), __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. + */ + template + basic_string& + replace(iterator __i1, iterator __i2, + _InputIterator __k1, _InputIterator __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 + && __i2 <= _M_iend()); + __glibcxx_requires_valid_range(__k1, __k2); + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral()); + } + + // Specializations for the common case of pointer and iterator: + // useful to avoid the overhead of temporary buffering in _M_replace. + basic_string& + replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 + && __i2 <= _M_iend()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->replace(__i1 - _M_ibegin(), __i2 - __i1, + __k1, __k2 - __k1); + } + + basic_string& + replace(iterator __i1, iterator __i2, + const _CharT* __k1, const _CharT* __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 + && __i2 <= _M_iend()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->replace(__i1 - _M_ibegin(), __i2 - __i1, + __k1, __k2 - __k1); + } + + basic_string& + replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 + && __i2 <= _M_iend()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->replace(__i1 - _M_ibegin(), __i2 - __i1, + __k1.base(), __k2 - __k1); + } + + basic_string& + replace(iterator __i1, iterator __i2, + const_iterator __k1, const_iterator __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 + && __i2 <= _M_iend()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->replace(__i1 - _M_ibegin(), __i2 - __i1, + __k1.base(), __k2 - __k1); + } + +#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. + */ + basic_string& replace(iterator __i1, iterator __i2, + initializer_list<_CharT> __l) + { return this->replace(__i1, __i2, __l.begin(), __l.end()); } +#endif // C++11 + +#if __cplusplus >= 201703L + /** + * @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 + _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 + _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 + _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 + basic_string& + _M_replace_dispatch(iterator __i1, iterator __i2, _Integer __n, + _Integer __val, __true_type) + { return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __val); } + + template + basic_string& + _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1, + _InputIterator __k2, __false_type); + + basic_string& + _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, + _CharT __c); + + basic_string& + _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s, + size_type __n2); + + // _S_construct_aux is used to implement the 21.3.1 para 15 which + // requires special behaviour if _InIter is an integral type + template + static _CharT* + _S_construct_aux(_InIterator __beg, _InIterator __end, + const _Alloc& __a, __false_type) + { + typedef typename iterator_traits<_InIterator>::iterator_category _Tag; + return _S_construct(__beg, __end, __a, _Tag()); + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 438. Ambiguity in the "do the right thing" clause + template + static _CharT* + _S_construct_aux(_Integer __beg, _Integer __end, + const _Alloc& __a, __true_type) + { return _S_construct_aux_2(static_cast(__beg), + __end, __a); } + + static _CharT* + _S_construct_aux_2(size_type __req, _CharT __c, const _Alloc& __a) + { return _S_construct(__req, __c, __a); } + + template + static _CharT* + _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a) + { + typedef typename std::__is_integer<_InIterator>::__type _Integral; + return _S_construct_aux(__beg, __end, __a, _Integral()); + } + + // For Input Iterators, used in istreambuf_iterators, etc. + template + static _CharT* + _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, + input_iterator_tag); + + // For forward_iterators up to random_access_iterators, used for + // string::iterator, _CharT*, etc. + template + static _CharT* + _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a, + forward_iterator_tag); + + static _CharT* + _S_construct(size_type __req, _CharT __c, const _Alloc& __a); + + 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. + */ + 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. + */ + void + swap(basic_string& __s) + _GLIBCXX_NOEXCEPT_IF(allocator_traits<_Alloc>::is_always_equal::value); + + // 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. + */ + 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). + */ + 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. + */ + _CharT* + data() noexcept + { + _M_leak(); + return _M_data(); + } +#endif + + /** + * @brief Return copy of allocator used to construct this string. + */ + allocator_type + get_allocator() const _GLIBCXX_NOEXCEPT + { return _M_dataplus; } + + /** + * @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. + */ + 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. + */ + size_type + find(const basic_string& __str, size_type __pos = 0) const + _GLIBCXX_NOEXCEPT + { return this->find(__str.data(), __pos, __str.size()); } + + /** + * @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. + */ + 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. + */ + size_type + find(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT; + +#if __cplusplus >= 201703L + /** + * @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 + _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 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. + */ + size_type + rfind(const basic_string& __str, size_type __pos = npos) const + _GLIBCXX_NOEXCEPT + { return this->rfind(__str.data(), __pos, __str.size()); } + + /** + * @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. + */ + 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. + */ + size_type + rfind(const _CharT* __s, size_type __pos = npos) const _GLIBCXX_NOEXCEPT + { + __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. + */ + size_type + rfind(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT; + +#if __cplusplus >= 201703L + /** + * @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 + _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 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. + */ + 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()); } + + /** + * @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. + */ + 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. + */ + 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). + */ + size_type + find_first_of(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT + { return this->find(__c, __pos); } + +#if __cplusplus >= 201703L + /** + * @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 + _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 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. + */ + 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()); } + + /** + * @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. + */ + 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. + */ + 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). + */ + size_type + find_last_of(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT + { return this->rfind(__c, __pos); } + +#if __cplusplus >= 201703L + /** + * @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 + _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 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. + */ + 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()); } + + /** + * @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. + */ + 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. + */ + 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. + */ + size_type + find_first_not_of(_CharT __c, size_type __pos = 0) const + _GLIBCXX_NOEXCEPT; + +#if __cplusplus >= 201703L + /** + * @brief Find 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 from (default 0). + * @return Index of first occurrence. + */ + template + _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 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. + */ + 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()); } + + /** + * @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. + */ + 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. + */ + 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. + */ + size_type + find_last_not_of(_CharT __c, size_type __pos = npos) const + _GLIBCXX_NOEXCEPT; + +#if __cplusplus >= 201703L + /** + * @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 + _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 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. + */ + 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. + */ + 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; + } + +#if __cplusplus >= 201703L + /** + * @brief Compare to a string_view. + * @param __svt An object convertible to string_view to compare against. + * @return Integer < 0, 0, or > 0. + */ + template + _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 + _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 + _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. + */ + int + compare(size_type __pos, size_type __n, const basic_string& __str) const; + + /** + * @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. + */ + int + compare(size_type __pos1, size_type __n1, const basic_string& __str, + size_type __pos2, size_type __n2 = npos) const; + + /** + * @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. + */ + int + compare(const _CharT* __s) const _GLIBCXX_NOEXCEPT; + + // _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. + */ + int + compare(size_type __pos, size_type __n1, const _CharT* __s) const; + + /** + * @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. + */ + int + compare(size_type __pos, size_type __n1, const _CharT* __s, + size_type __n2) const; + +#if __cplusplus > 201703L + bool + starts_with(basic_string_view<_CharT, _Traits> __x) const noexcept + { return __sv_type(this->data(), this->size()).starts_with(__x); } + + bool + starts_with(_CharT __x) const noexcept + { return __sv_type(this->data(), this->size()).starts_with(__x); } + + bool + starts_with(const _CharT* __x) const noexcept + { return __sv_type(this->data(), this->size()).starts_with(__x); } + + bool + ends_with(basic_string_view<_CharT, _Traits> __x) const noexcept + { return __sv_type(this->data(), this->size()).ends_with(__x); } + + bool + ends_with(_CharT __x) const noexcept + { return __sv_type(this->data(), this->size()).ends_with(__x); } + + bool + ends_with(const _CharT* __x) const noexcept + { return __sv_type(this->data(), this->size()).ends_with(__x); } +#endif // C++20 + +# ifdef _GLIBCXX_TM_TS_INTERNAL + friend void + ::_txnal_cow_string_C1_for_exceptions(void* that, const char* s, + void* exc); + friend const char* + ::_txnal_cow_string_c_str(const void *that); + friend void + ::_txnal_cow_string_D1(void *that); + friend void + ::_txnal_cow_string_D1_commit(void *that); +# endif + }; +#endif // !_GLIBCXX_USE_CXX11_ABI + +#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>; +_GLIBCXX_END_NAMESPACE_CXX11 +#endif + + // 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 + basic_string<_CharT, _Traits, _Alloc> + operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { + basic_string<_CharT, _Traits, _Alloc> __str(__lhs); + __str.append(__rhs); + return __str; + } + + /** + * @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 + basic_string<_CharT,_Traits,_Alloc> + operator+(const _CharT* __lhs, + const basic_string<_CharT,_Traits,_Alloc>& __rhs); + + /** + * @brief Concatenate character and string. + * @param __lhs First string. + * @param __rhs Last string. + * @return New string with @a __lhs followed by @a __rhs. + */ + template + basic_string<_CharT,_Traits,_Alloc> + operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs); + + /** + * @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 + inline basic_string<_CharT, _Traits, _Alloc> + operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) + { + basic_string<_CharT, _Traits, _Alloc> __str(__lhs); + __str.append(__rhs); + return __str; + } + + /** + * @brief Concatenate string and character. + * @param __lhs First string. + * @param __rhs Last string. + * @return New string with @a __lhs followed by @a __rhs. + */ + template + inline basic_string<_CharT, _Traits, _Alloc> + operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs) + { + typedef basic_string<_CharT, _Traits, _Alloc> __string_type; + typedef typename __string_type::size_type __size_type; + __string_type __str(__lhs); + __str.append(__size_type(1), __rhs); + return __str; + } + +#if __cplusplus >= 201103L + template + 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 + 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 + 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 + inline basic_string<_CharT, _Traits, _Alloc> + operator+(const _CharT* __lhs, + basic_string<_CharT, _Traits, _Alloc>&& __rhs) + { return std::move(__rhs.insert(0, __lhs)); } + + template + inline basic_string<_CharT, _Traits, _Alloc> + operator+(_CharT __lhs, + basic_string<_CharT, _Traits, _Alloc>&& __rhs) + { return std::move(__rhs.insert(0, 1, __lhs)); } + + template + inline basic_string<_CharT, _Traits, _Alloc> + operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, + const _CharT* __rhs) + { return std::move(__lhs.append(__rhs)); } + + template + inline basic_string<_CharT, _Traits, _Alloc> + operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, + _CharT __rhs) + { return std::move(__lhs.append(1, __rhs)); } +#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 + inline bool + operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.compare(__rhs) == 0; } + + template + inline + typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type + operator==(const basic_string<_CharT>& __lhs, + const basic_string<_CharT>& __rhs) _GLIBCXX_NOEXCEPT + { return (__lhs.size() == __rhs.size() + && !std::char_traits<_CharT>::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 + inline bool + operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, + const _CharT* __rhs) + { return __lhs.compare(__rhs) == 0; } + +#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 + inline 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 + inline 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 + inline bool + operator==(const _CharT* __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { return __rhs.compare(__lhs) == 0; } + + // 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 + 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 + inline bool + operator!=(const _CharT* __lhs, + const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { return !(__lhs == __rhs); } + + /** + * @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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + +#if _GLIBCXX_USE_C99_STDLIB + // 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); } + + 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); } + + // 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); } + + inline double + stod(const string& __str, size_t* __idx = 0) + { return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); } + + inline long double + stold(const string& __str, size_t* __idx = 0) + { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); } +#endif // _GLIBCXX_USE_C99_STDLIB + + // DR 1261. Insufficent overloads for to_string / to_wstring + + inline string + to_string(int __val) + { + const bool __neg = __val < 0; + const unsigned __uval = __neg ? (unsigned)~__val + 1u : __val; + const auto __len = __detail::__to_chars_len(__uval); + string __str(__neg + __len, '-'); + __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); + return __str; + } + + inline string + to_string(unsigned __val) + { + string __str(__detail::__to_chars_len(__val), '\0'); + __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); + return __str; + } + + inline string + to_string(long __val) + { + 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(__neg + __len, '-'); + __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); + return __str; + } + + inline string + to_string(unsigned long __val) + { + string __str(__detail::__to_chars_len(__val), '\0'); + __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); + return __str; + } + + 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(__neg + __len, '-'); + __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); + return __str; + } + + inline string + to_string(unsigned long long __val) + { + string __str(__detail::__to_chars_len(__val), '\0'); + __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); + return __str; + } + +#if _GLIBCXX_USE_C99_STDIO + // NB: (v)snprintf vs sprintf. + + 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); + } + + 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); + } + + 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); + } +#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); } + +#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF + // DR 1261. + inline wstring + to_wstring(int __val) + { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(int), + L"%d", __val); } + + inline wstring + to_wstring(unsigned __val) + { return __gnu_cxx::__to_xstring(&std::vswprintf, + 4 * sizeof(unsigned), + L"%u", __val); } + + inline wstring + to_wstring(long __val) + { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(long), + L"%ld", __val); } + + inline wstring + to_wstring(unsigned long __val) + { return __gnu_cxx::__to_xstring(&std::vswprintf, + 4 * sizeof(unsigned long), + L"%lu", __val); } + + inline wstring + to_wstring(long long __val) + { return __gnu_cxx::__to_xstring(&std::vswprintf, + 4 * sizeof(long long), + L"%lld", __val); } + + inline wstring + to_wstring(unsigned long long __val) + { return __gnu_cxx::__to_xstring(&std::vswprintf, + 4 * sizeof(unsigned long long), + L"%llu", __val); } + + inline wstring + to_wstring(float __val) + { + const int __n = + __gnu_cxx::__numeric_traits::__max_exponent10 + 20; + return __gnu_cxx::__to_xstring(&std::vswprintf, __n, + L"%f", __val); + } + + inline wstring + to_wstring(double __val) + { + const int __n = + __gnu_cxx::__numeric_traits::__max_exponent10 + 20; + return __gnu_cxx::__to_xstring(&std::vswprintf, __n, + L"%f", __val); + } + + inline wstring + to_wstring(long double __val) + { + const int __n = + __gnu_cxx::__numeric_traits::__max_exponent10 + 20; + return __gnu_cxx::__to_xstring(&std::vswprintf, __n, + L"%Lf", __val); + } +#endif // _GLIBCXX_HAVE_BROKEN_VSWPRINTF +#endif // _GLIBCXX_USE_WCHAR_T && _GLIBCXX_USE_C99_WCHAR + +_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 + + // DR 1182. + +#ifndef _GLIBCXX_COMPATIBILITY_CXX0X + /// std::hash specialization for string. + template<> + struct hash + : public __hash_base + { + size_t + operator()(const string& __s) const noexcept + { return std::_Hash_impl::hash(__s.data(), __s.length()); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; + +#ifdef _GLIBCXX_USE_WCHAR_T + /// std::hash specialization for wstring. + template<> + struct hash + : public __hash_base + { + size_t + operator()(const wstring& __s) const noexcept + { return std::_Hash_impl::hash(__s.data(), + __s.length() * sizeof(wchar_t)); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; +#endif +#endif /* _GLIBCXX_COMPATIBILITY_CXX0X */ + +#ifdef _GLIBCXX_USE_CHAR8_T + /// std::hash specialization for u8string. + template<> + struct hash + : public __hash_base + { + size_t + operator()(const u8string& __s) const noexcept + { return std::_Hash_impl::hash(__s.data(), + __s.length() * sizeof(char8_t)); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; +#endif + + /// std::hash specialization for u16string. + template<> + struct hash + : public __hash_base + { + size_t + operator()(const u16string& __s) const noexcept + { return std::_Hash_impl::hash(__s.data(), + __s.length() * sizeof(char16_t)); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; + + /// std::hash specialization for u32string. + template<> + struct hash + : public __hash_base + { + size_t + operator()(const u32string& __s) const noexcept + { return std::_Hash_impl::hash(__s.data(), + __s.length() * sizeof(char32_t)); } + }; + + template<> + struct __is_fast_hash> : std::false_type + { }; + +#if __cplusplus >= 201402L + +#define __cpp_lib_string_udls 201304 + + inline namespace literals + { + inline namespace string_literals + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wliteral-suffix" + _GLIBCXX_DEFAULT_ABI_TAG + inline basic_string + operator""s(const char* __str, size_t __len) + { return basic_string{__str, __len}; } + +#ifdef _GLIBCXX_USE_WCHAR_T + _GLIBCXX_DEFAULT_ABI_TAG + inline basic_string + operator""s(const wchar_t* __str, size_t __len) + { return basic_string{__str, __len}; } +#endif + +#ifdef _GLIBCXX_USE_CHAR8_T + _GLIBCXX_DEFAULT_ABI_TAG + inline basic_string + operator""s(const char8_t* __str, size_t __len) + { return basic_string{__str, __len}; } +#endif + + _GLIBCXX_DEFAULT_ABI_TAG + inline basic_string + operator""s(const char16_t* __str, size_t __len) + { return basic_string{__str, __len}; } + + _GLIBCXX_DEFAULT_ABI_TAG + inline basic_string + operator""s(const char32_t* __str, size_t __len) + { return basic_string{__str, __len}; } + +#pragma GCC diagnostic pop + } // inline namespace string_literals + } // inline namespace literals + +#if __cplusplus >= 201703L + 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 +#endif // C++14 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif /* _BASIC_STRING_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a70ced0bb0520b55c7be12d30a38c4349376d008 GIT binary patch literal 197388 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 axK0d|bik4. + +/** @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 + +#pragma GCC system_header + +#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 + void + basic_string<_CharT, _Traits, _Alloc>:: + swap(basic_string& __s) _GLIBCXX_NOEXCEPT + { + if (this == &__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_local_capacity + 1); + traits_type::copy(__s._M_local_buf, _M_local_buf, + _S_local_capacity + 1); + traits_type::copy(_M_local_buf, __tmp_data, + _S_local_capacity + 1); + } + else if (__s.length()) + { + traits_type::copy(_M_local_buf, __s._M_local_buf, + _S_local_capacity + 1); + _M_length(__s.length()); + __s._M_set_length(0); + return; + } + else if (length()) + { + traits_type::copy(__s._M_local_buf, _M_local_buf, + _S_local_capacity + 1); + __s._M_length(length()); + _M_set_length(0); + return; + } + } + else + { + const size_type __tmp_capacity = __s._M_allocated_capacity; + traits_type::copy(__s._M_local_buf, _M_local_buf, + _S_local_capacity + 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()) + { + traits_type::copy(_M_local_buf, __s._M_local_buf, + _S_local_capacity + 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 + 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 _Alloc_traits::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 + 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); + + while (__beg != __end && __len < __capacity) + { + _M_data()[__len++] = *__beg; + ++__beg; + } + + __try + { + 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); + } + _M_data()[__len++] = *__beg; + ++__beg; + } + } + __catch(...) + { + _M_dispose(); + __throw_exception_again; + } + + _M_set_length(__len); + } + + template + template + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_construct(_InIterator __beg, _InIterator __end, + std::forward_iterator_tag) + { + // NB: Not required, but considered best practice. + if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end) + std::__throw_logic_error(__N("basic_string::" + "_M_construct null not valid")); + + 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); + } + + // Check for out_of_range and length_error exceptions. + __try + { this->_S_copy_chars(_M_data(), __beg, __end); } + __catch(...) + { + _M_dispose(); + __throw_exception_again; + } + + _M_set_length(__dnew); + } + + template + 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); + } + + if (__n) + this->_S_assign(_M_data(), __n, __c); + + _M_set_length(__n); + } + + template + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_assign(const basic_string& __str) + { + if (this != &__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 + void + basic_string<_CharT, _Traits, _Alloc>:: + reserve(size_type __res) + { + // Make sure we don't shrink below the current size. + if (__res < length()) + __res = length(); + + const size_type __capacity = capacity(); + if (__res != __capacity) + { + if (__res > __capacity + || __res > size_type(_S_local_capacity)) + { + pointer __tmp = _M_create(__res, __capacity); + this->_S_copy(__tmp, _M_data(), length() + 1); + _M_dispose(); + _M_data(__tmp); + _M_capacity(__res); + } + else if (!_M_is_local()) + { + this->_S_copy(_M_local_data(), _M_data(), length() + 1); + _M_destroy(__capacity); + _M_data(_M_local_data()); + } + } + } + + template + 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 + 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 + 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 + 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 + 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 + 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 + 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 (_M_disjunct(__s)) + { + if (__how_much && __len1 != __len2) + this->_S_move(__p + __len2, __p + __len1, __how_much); + if (__len2) + this->_S_copy(__p, __s, __len2); + } + else + { + // 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) + this->_S_copy(__p, __s + __len2 - __len1, __len2); + else + { + const size_type __nleft = (__p + __len1) - __s; + this->_S_move(__p, __s, __nleft); + this->_S_copy(__p + __nleft, __p + __len2, + __len2 - __nleft); + } + } + } + } + else + this->_M_mutate(__pos, __len1, __s, __len2); + + this->_M_set_length(__new_size); + return *this; + } + + template + 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; + } + +#else // !_GLIBCXX_USE_CXX11_ABI + + template + const typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>:: + _Rep::_S_max_size = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4; + + template + const _CharT + basic_string<_CharT, _Traits, _Alloc>:: + _Rep::_S_terminal = _CharT(); + + template + const typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>::npos; + + // Linker sets _S_empty_rep_storage to all 0s (one reference, empty string) + // at static init time (before static ctors are run). + template + typename basic_string<_CharT, _Traits, _Alloc>::size_type + basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_empty_rep_storage[ + (sizeof(_Rep_base) + sizeof(_CharT) + sizeof(size_type) - 1) / + sizeof(size_type)]; + + // 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 + _CharT* + basic_string<_CharT, _Traits, _Alloc>:: + _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, + input_iterator_tag) + { +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + if (__beg == __end && __a == _Alloc()) + return _S_empty_rep()._M_refdata(); +#endif + // Avoid reallocation for common case. + _CharT __buf[128]; + size_type __len = 0; + while (__beg != __end && __len < sizeof(__buf) / sizeof(_CharT)) + { + __buf[__len++] = *__beg; + ++__beg; + } + _Rep* __r = _Rep::_S_create(__len, size_type(0), __a); + _M_copy(__r->_M_refdata(), __buf, __len); + __try + { + while (__beg != __end) + { + if (__len == __r->_M_capacity) + { + // Allocate more space. + _Rep* __another = _Rep::_S_create(__len + 1, __len, __a); + _M_copy(__another->_M_refdata(), __r->_M_refdata(), __len); + __r->_M_destroy(__a); + __r = __another; + } + __r->_M_refdata()[__len++] = *__beg; + ++__beg; + } + } + __catch(...) + { + __r->_M_destroy(__a); + __throw_exception_again; + } + __r->_M_set_length_and_sharable(__len); + return __r->_M_refdata(); + } + + template + template + _CharT* + basic_string<_CharT, _Traits, _Alloc>:: + _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, + forward_iterator_tag) + { +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + if (__beg == __end && __a == _Alloc()) + return _S_empty_rep()._M_refdata(); +#endif + // NB: Not required, but considered best practice. + if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end) + __throw_logic_error(__N("basic_string::_S_construct null not valid")); + + const size_type __dnew = static_cast(std::distance(__beg, + __end)); + // Check for out_of_range and length_error exceptions. + _Rep* __r = _Rep::_S_create(__dnew, size_type(0), __a); + __try + { _S_copy_chars(__r->_M_refdata(), __beg, __end); } + __catch(...) + { + __r->_M_destroy(__a); + __throw_exception_again; + } + __r->_M_set_length_and_sharable(__dnew); + return __r->_M_refdata(); + } + + template + _CharT* + basic_string<_CharT, _Traits, _Alloc>:: + _S_construct(size_type __n, _CharT __c, const _Alloc& __a) + { +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + if (__n == 0 && __a == _Alloc()) + return _S_empty_rep()._M_refdata(); +#endif + // Check for out_of_range and length_error exceptions. + _Rep* __r = _Rep::_S_create(__n, size_type(0), __a); + if (__n) + _M_assign(__r->_M_refdata(), __n, __c); + + __r->_M_set_length_and_sharable(__n); + return __r->_M_refdata(); + } + + template + basic_string<_CharT, _Traits, _Alloc>:: + basic_string(const basic_string& __str) + : _M_dataplus(__str._M_rep()->_M_grab(_Alloc(__str.get_allocator()), + __str.get_allocator()), + __str.get_allocator()) + { } + + template + basic_string<_CharT, _Traits, _Alloc>:: + basic_string(const _Alloc& __a) + : _M_dataplus(_S_construct(size_type(), _CharT(), __a), __a) + { } + + template + basic_string<_CharT, _Traits, _Alloc>:: + basic_string(const basic_string& __str, size_type __pos, const _Alloc& __a) + : _M_dataplus(_S_construct(__str._M_data() + + __str._M_check(__pos, + "basic_string::basic_string"), + __str._M_data() + __str._M_limit(__pos, npos) + + __pos, __a), __a) + { } + + template + basic_string<_CharT, _Traits, _Alloc>:: + basic_string(const basic_string& __str, size_type __pos, size_type __n) + : _M_dataplus(_S_construct(__str._M_data() + + __str._M_check(__pos, + "basic_string::basic_string"), + __str._M_data() + __str._M_limit(__pos, __n) + + __pos, _Alloc()), _Alloc()) + { } + + template + basic_string<_CharT, _Traits, _Alloc>:: + basic_string(const basic_string& __str, size_type __pos, + size_type __n, const _Alloc& __a) + : _M_dataplus(_S_construct(__str._M_data() + + __str._M_check(__pos, + "basic_string::basic_string"), + __str._M_data() + __str._M_limit(__pos, __n) + + __pos, __a), __a) + { } + + // TBD: DPG annotate + template + basic_string<_CharT, _Traits, _Alloc>:: + basic_string(const _CharT* __s, size_type __n, const _Alloc& __a) + : _M_dataplus(_S_construct(__s, __s + __n, __a), __a) + { } + + template + basic_string<_CharT, _Traits, _Alloc>:: + basic_string(size_type __n, _CharT __c, const _Alloc& __a) + : _M_dataplus(_S_construct(__n, __c, __a), __a) + { } + + // TBD: DPG annotate + template + template + basic_string<_CharT, _Traits, _Alloc>:: + basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a) + : _M_dataplus(_S_construct(__beg, __end, __a), __a) + { } + +#if __cplusplus >= 201103L + template + basic_string<_CharT, _Traits, _Alloc>:: + basic_string(initializer_list<_CharT> __l, const _Alloc& __a) + : _M_dataplus(_S_construct(__l.begin(), __l.end(), __a), __a) + { } +#endif + + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + assign(const basic_string& __str) + { + if (_M_rep() != __str._M_rep()) + { + // XXX MT + const allocator_type __a = this->get_allocator(); + _CharT* __tmp = __str._M_rep()->_M_grab(__a, __str.get_allocator()); + _M_rep()->_M_dispose(__a); + _M_data(__tmp); + } + return *this; + } + + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + assign(const _CharT* __s, size_type __n) + { + __glibcxx_requires_string_len(__s, __n); + _M_check_length(this->size(), __n, "basic_string::assign"); + if (_M_disjunct(__s) || _M_rep()->_M_is_shared()) + return _M_replace_safe(size_type(0), this->size(), __s, __n); + else + { + // Work in-place. + const size_type __pos = __s - _M_data(); + if (__pos >= __n) + _M_copy(_M_data(), __s, __n); + else if (__pos) + _M_move(_M_data(), __s, __n); + _M_rep()->_M_set_length_and_sharable(__n); + return *this; + } + } + + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + append(size_type __n, _CharT __c) + { + if (__n) + { + _M_check_length(size_type(0), __n, "basic_string::append"); + const size_type __len = __n + this->size(); + if (__len > this->capacity() || _M_rep()->_M_is_shared()) + this->reserve(__len); + _M_assign(_M_data() + this->size(), __n, __c); + _M_rep()->_M_set_length_and_sharable(__len); + } + return *this; + } + + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + append(const _CharT* __s, size_type __n) + { + __glibcxx_requires_string_len(__s, __n); + if (__n) + { + _M_check_length(size_type(0), __n, "basic_string::append"); + const size_type __len = __n + this->size(); + if (__len > this->capacity() || _M_rep()->_M_is_shared()) + { + if (_M_disjunct(__s)) + this->reserve(__len); + else + { + const size_type __off = __s - _M_data(); + this->reserve(__len); + __s = _M_data() + __off; + } + } + _M_copy(_M_data() + this->size(), __s, __n); + _M_rep()->_M_set_length_and_sharable(__len); + } + return *this; + } + + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + append(const basic_string& __str) + { + const size_type __size = __str.size(); + if (__size) + { + const size_type __len = __size + this->size(); + if (__len > this->capacity() || _M_rep()->_M_is_shared()) + this->reserve(__len); + _M_copy(_M_data() + this->size(), __str._M_data(), __size); + _M_rep()->_M_set_length_and_sharable(__len); + } + return *this; + } + + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + append(const basic_string& __str, size_type __pos, size_type __n) + { + __str._M_check(__pos, "basic_string::append"); + __n = __str._M_limit(__pos, __n); + if (__n) + { + const size_type __len = __n + this->size(); + if (__len > this->capacity() || _M_rep()->_M_is_shared()) + this->reserve(__len); + _M_copy(_M_data() + this->size(), __str._M_data() + __pos, __n); + _M_rep()->_M_set_length_and_sharable(__len); + } + return *this; + } + + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + insert(size_type __pos, const _CharT* __s, size_type __n) + { + __glibcxx_requires_string_len(__s, __n); + _M_check(__pos, "basic_string::insert"); + _M_check_length(size_type(0), __n, "basic_string::insert"); + if (_M_disjunct(__s) || _M_rep()->_M_is_shared()) + return _M_replace_safe(__pos, size_type(0), __s, __n); + else + { + // Work in-place. + const size_type __off = __s - _M_data(); + _M_mutate(__pos, 0, __n); + __s = _M_data() + __off; + _CharT* __p = _M_data() + __pos; + if (__s + __n <= __p) + _M_copy(__p, __s, __n); + else if (__s >= __p) + _M_copy(__p, __s + __n, __n); + else + { + const size_type __nleft = __p - __s; + _M_copy(__p, __s, __nleft); + _M_copy(__p + __nleft, __p + __n, __n - __nleft); + } + return *this; + } + } + + template + typename basic_string<_CharT, _Traits, _Alloc>::iterator + basic_string<_CharT, _Traits, _Alloc>:: + erase(iterator __first, iterator __last) + { + _GLIBCXX_DEBUG_PEDASSERT(__first >= _M_ibegin() && __first <= __last + && __last <= _M_iend()); + + // NB: This isn't just an optimization (bail out early when + // there is nothing to do, really), it's also a correctness + // issue vs MT, see libstdc++/40518. + const size_type __size = __last - __first; + if (__size) + { + const size_type __pos = __first - _M_ibegin(); + _M_mutate(__pos, __size, size_type(0)); + _M_rep()->_M_set_leaked(); + return iterator(_M_data() + __pos); + } + else + return __first; + } + + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + replace(size_type __pos, size_type __n1, const _CharT* __s, + size_type __n2) + { + __glibcxx_requires_string_len(__s, __n2); + _M_check(__pos, "basic_string::replace"); + __n1 = _M_limit(__pos, __n1); + _M_check_length(__n1, __n2, "basic_string::replace"); + bool __left; + if (_M_disjunct(__s) || _M_rep()->_M_is_shared()) + return _M_replace_safe(__pos, __n1, __s, __n2); + else if ((__left = __s + __n2 <= _M_data() + __pos) + || _M_data() + __pos + __n1 <= __s) + { + // Work in-place: non-overlapping case. + size_type __off = __s - _M_data(); + __left ? __off : (__off += __n2 - __n1); + _M_mutate(__pos, __n1, __n2); + _M_copy(_M_data() + __pos, _M_data() + __off, __n2); + return *this; + } + else + { + // Todo: overlapping case. + const basic_string __tmp(__s, __n2); + return _M_replace_safe(__pos, __n1, __tmp._M_data(), __n2); + } + } + + template + void + basic_string<_CharT, _Traits, _Alloc>::_Rep:: + _M_destroy(const _Alloc& __a) throw () + { + const size_type __size = sizeof(_Rep_base) + + (this->_M_capacity + 1) * sizeof(_CharT); + _Raw_bytes_alloc(__a).deallocate(reinterpret_cast(this), __size); + } + + template + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_leak_hard() + { +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 + if (_M_rep() == &_S_empty_rep()) + return; +#endif + if (_M_rep()->_M_is_shared()) + _M_mutate(0, 0, 0); + _M_rep()->_M_set_leaked(); + } + + template + void + basic_string<_CharT, _Traits, _Alloc>:: + _M_mutate(size_type __pos, size_type __len1, size_type __len2) + { + const size_type __old_size = this->size(); + const size_type __new_size = __old_size + __len2 - __len1; + const size_type __how_much = __old_size - __pos - __len1; + + if (__new_size > this->capacity() || _M_rep()->_M_is_shared()) + { + // Must reallocate. + const allocator_type __a = get_allocator(); + _Rep* __r = _Rep::_S_create(__new_size, this->capacity(), __a); + + if (__pos) + _M_copy(__r->_M_refdata(), _M_data(), __pos); + if (__how_much) + _M_copy(__r->_M_refdata() + __pos + __len2, + _M_data() + __pos + __len1, __how_much); + + _M_rep()->_M_dispose(__a); + _M_data(__r->_M_refdata()); + } + else if (__how_much && __len1 != __len2) + { + // Work in-place. + _M_move(_M_data() + __pos + __len2, + _M_data() + __pos + __len1, __how_much); + } + _M_rep()->_M_set_length_and_sharable(__new_size); + } + + template + void + basic_string<_CharT, _Traits, _Alloc>:: + reserve(size_type __res) + { + if (__res != this->capacity() || _M_rep()->_M_is_shared()) + { + // Make sure we don't shrink below the current size + if (__res < this->size()) + __res = this->size(); + const allocator_type __a = get_allocator(); + _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size()); + _M_rep()->_M_dispose(__a); + _M_data(__tmp); + } + } + + template + void + basic_string<_CharT, _Traits, _Alloc>:: + swap(basic_string& __s) + _GLIBCXX_NOEXCEPT_IF(allocator_traits<_Alloc>::is_always_equal::value) + { + if (_M_rep()->_M_is_leaked()) + _M_rep()->_M_set_sharable(); + if (__s._M_rep()->_M_is_leaked()) + __s._M_rep()->_M_set_sharable(); + if (this->get_allocator() == __s.get_allocator()) + { + _CharT* __tmp = _M_data(); + _M_data(__s._M_data()); + __s._M_data(__tmp); + } + // The code below can usually be optimized away. + else + { + const basic_string __tmp1(_M_ibegin(), _M_iend(), + __s.get_allocator()); + const basic_string __tmp2(__s._M_ibegin(), __s._M_iend(), + this->get_allocator()); + *this = __tmp2; + __s = __tmp1; + } + } + + template + typename basic_string<_CharT, _Traits, _Alloc>::_Rep* + basic_string<_CharT, _Traits, _Alloc>::_Rep:: + _S_create(size_type __capacity, size_type __old_capacity, + const _Alloc& __alloc) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 83. String::npos vs. string::max_size() + if (__capacity > _S_max_size) + __throw_length_error(__N("basic_string::_S_create")); + + // The standard places no restriction on allocating more memory + // than is strictly needed within this layer at the moment or as + // requested by an explicit application call to reserve(). + + // Many malloc implementations perform quite poorly when an + // application attempts to allocate memory in a stepwise fashion + // growing each allocation size by only 1 char. Additionally, + // it makes little sense to allocate less linear memory than the + // natural blocking size of the malloc implementation. + // Unfortunately, we would need a somewhat low-level calculation + // with tuned parameters to get this perfect for any particular + // malloc implementation. Fortunately, generalizations about + // common features seen among implementations seems to suffice. + + // __pagesize need not match the actual VM page size for good + // results in practice, thus we pick a common value on the low + // side. __malloc_header_size is an estimate of the amount of + // overhead per memory allocation (in practice seen N * sizeof + // (void*) where N is 0, 2 or 4). According to folklore, + // picking this value on the high side is better than + // low-balling it (especially when this algorithm is used with + // malloc implementations that allocate memory blocks rounded up + // to a size which is a power of 2). + const size_type __pagesize = 4096; + const size_type __malloc_header_size = 4 * sizeof(void*); + + // 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. + // It's active for allocations requiring an amount of memory above + // system pagesize. This is consistent with the requirements of the + // standard: http://gcc.gnu.org/ml/libstdc++/2001-07/msg00130.html + if (__capacity > __old_capacity && __capacity < 2 * __old_capacity) + __capacity = 2 * __old_capacity; + + // NB: Need an array of char_type[__capacity], plus a terminating + // null char_type() element, plus enough for the _Rep data structure. + // Whew. Seemingly so needy, yet so elemental. + size_type __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep); + + const size_type __adj_size = __size + __malloc_header_size; + if (__adj_size > __pagesize && __capacity > __old_capacity) + { + const size_type __extra = __pagesize - __adj_size % __pagesize; + __capacity += __extra / sizeof(_CharT); + // Never allocate a string bigger than _S_max_size. + if (__capacity > _S_max_size) + __capacity = _S_max_size; + __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep); + } + + // NB: Might throw, but no worries about a leak, mate: _Rep() + // does not throw. + void* __place = _Raw_bytes_alloc(__alloc).allocate(__size); + _Rep *__p = new (__place) _Rep; + __p->_M_capacity = __capacity; + // ABI compatibility - 3.4.x set in _S_create both + // _M_refcount and _M_length. All callers of _S_create + // in basic_string.tcc then set just _M_length. + // In 4.0.x and later both _M_refcount and _M_length + // are initialized in the callers, unfortunately we can + // have 3.4.x compiled code with _S_create callers inlined + // calling 4.0.x+ _S_create. + __p->_M_set_sharable(); + return __p; + } + + template + _CharT* + basic_string<_CharT, _Traits, _Alloc>::_Rep:: + _M_clone(const _Alloc& __alloc, size_type __res) + { + // Requested capacity of the clone. + const size_type __requested_cap = this->_M_length + __res; + _Rep* __r = _Rep::_S_create(__requested_cap, this->_M_capacity, + __alloc); + if (this->_M_length) + _M_copy(__r->_M_refdata(), _M_refdata(), this->_M_length); + + __r->_M_set_length_and_sharable(this->_M_length); + return __r->_M_refdata(); + } + + template + void + basic_string<_CharT, _Traits, _Alloc>:: + resize(size_type __n, _CharT __c) + { + const size_type __size = this->size(); + _M_check_length(__size, __n, "basic_string::resize"); + if (__size < __n) + this->append(__n - __size, __c); + else if (__n < __size) + this->erase(__n); + // else nothing (in particular, avoid calling _M_mutate() unnecessarily.) + } + + template + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1, + _InputIterator __k2, __false_type) + { + const basic_string __s(__k1, __k2); + const size_type __n1 = __i2 - __i1; + _M_check_length(__n1, __s.size(), "basic_string::_M_replace_dispatch"); + return _M_replace_safe(__i1 - _M_ibegin(), __n1, __s._M_data(), + __s.size()); + } + + template + 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"); + _M_mutate(__pos1, __n1, __n2); + if (__n2) + _M_assign(_M_data() + __pos1, __n2, __c); + return *this; + } + + template + basic_string<_CharT, _Traits, _Alloc>& + basic_string<_CharT, _Traits, _Alloc>:: + _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s, + size_type __n2) + { + _M_mutate(__pos1, __n1, __n2); + if (__n2) + _M_copy(_M_data() + __pos1, __s, __n2); + return *this; + } + + template + 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) + _M_copy(__s, _M_data() + __pos, __n); + // 21.3.5.7 par 3: do not append null. (good.) + return __n; + } +#endif // !_GLIBCXX_USE_CXX11_ABI + + template + 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> __string_type; + typedef typename __string_type::size_type __size_type; + typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template + rebind<_CharT>::other _Char_alloc_type; + typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits; + const __size_type __len = _Traits::length(__lhs); + __string_type __str(_Alloc_traits::_S_select_on_copy( + __rhs.get_allocator())); + __str.reserve(__len + __rhs.size()); + __str.append(__lhs, __len); + __str.append(__rhs); + return __str; + } + + template + basic_string<_CharT, _Traits, _Alloc> + operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs) + { + typedef basic_string<_CharT, _Traits, _Alloc> __string_type; + typedef typename __string_type::size_type __size_type; + typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template + rebind<_CharT>::other _Char_alloc_type; + typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits; + __string_type __str(_Alloc_traits::_S_select_on_copy( + __rhs.get_allocator())); + const __size_type __len = __rhs.size(); + __str.reserve(__len + 1); + __str.append(__size_type(1), __lhs); + __str.append(__rhs); + return __str; + } + + template + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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; + } + + template + int + basic_string<_CharT, _Traits, _Alloc>:: + 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; + } + + template + int + basic_string<_CharT, _Traits, _Alloc>:: + compare(size_type __pos1, size_type __n1, const basic_string& __str, + size_type __pos2, size_type __n2) 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; + } + + template + int + basic_string<_CharT, _Traits, _Alloc>:: + 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; + } + + template + int + basic_string <_CharT, _Traits, _Alloc>:: + 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; + } + + template + int + basic_string <_CharT, _Traits, _Alloc>:: + 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; + } + + // 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 (_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[]; +# 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[]; +# 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 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@basic_string.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..a6b908c2a1b0d781ff6eedc27a19d9ecb8316ebd GIT binary patch literal 77255 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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 + +#pragma GCC system_header + +#include // std::copy, std::fill_n +#include // For streampos +#include // For WEOF, wmemmove, wmemset, etc. +#if __cplusplus > 201703L +# 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 + + /** + * @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; + typedef std::streampos pos_type; + typedef std::streamoff off_type; + typedef std::mbstate_t state_type; + }; + + + /** + * @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; + 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; +#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) + { __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; } + + 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()); } + }; + + 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; +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + { + if (__s1 > __s2 && __s1 < __s2 + __n) + std::copy_backward(__s2, __s2 + __n, __s1); + else + std::copy(__s2, __s2 + __n, __s1); + return __s1; + } +#endif + return static_cast<_CharT*>(__builtin_memmove(__s1, __s2, + __n * sizeof(char_type))); + } + + template + _GLIBCXX20_CONSTEXPR + typename char_traits<_CharT>::char_type* + char_traits<_CharT>:: + copy(char_type* __s1, const char_type* __s2, std::size_t __n) + { + // NB: Inline std::copy so no recursive dependencies. + std::copy(__s2, __s2 + __n, __s1); + 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) + { + // NB: Inline std::fill_n so no recursive dependencies. + std::fill_n(__s, __n, __a); + return __s; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if __cplusplus >= 201703L + +#if __cplusplus == 201703L +// Unofficial macro indicating P0426R1 support +# define __cpp_lib_constexpr_char_traits 201611L +#else +// Also support P1032R1 in C++20 +# define __cpp_lib_constexpr_char_traits 201811L +#endif + + /** + * @brief Determine whether the characters of a NULL-terminated + * string are known at compile time. + * @param __s The string. + * + * Assumes that _CharT is a built-in character type. + */ + template + static _GLIBCXX_ALWAYS_INLINE constexpr bool + __constant_string_p(const _CharT* __s) + { +#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED + (void) __s; + // In constexpr contexts all strings should be constant. + return __builtin_is_constant_evaluated(); +#else + while (__builtin_constant_p(*__s) && *__s) + __s++; + return __builtin_constant_p(*__s); +#endif + } + + /** + * @brief Determine whether the characters of a character array are + * known at compile time. + * @param __a The character array. + * @param __n Number of characters. + * + * Assumes that _CharT is a built-in character type. + */ + template + static _GLIBCXX_ALWAYS_INLINE constexpr bool + __constant_char_array_p(const _CharT* __a, size_t __n) + { +#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED + (void) __a; + (void) __n; + // In constexpr contexts all character arrays should be constant. + return __builtin_is_constant_evaluated(); +#else + size_t __i = 0; + while (__i < __n && __builtin_constant_p(__a[__i])) + __i++; + return __i == __n; +#endif + } +#endif + + // 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; + typedef streampos pos_type; + typedef streamoff off_type; + typedef mbstate_t state_type; +#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 + { __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 (__builtin_constant_p(__n) + && __constant_char_array_p(__s1, __n) + && __constant_char_array_p(__s2, __n)) + 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 (__constant_string_p(__s)) + 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 (__builtin_constant_p(__n) + && __builtin_constant_p(__a) + && __constant_char_array_p(__s, __n)) + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; } + + 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; } + }; + + +#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; + typedef streamoff off_type; + typedef wstreampos pos_type; + typedef mbstate_t state_type; +#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 + { __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 (__builtin_constant_p(__n) + && __constant_char_array_p(__s1, __n) + && __constant_char_array_p(__s2, __n)) + 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 (__constant_string_p(__s)) + 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 (__builtin_constant_p(__n) + && __builtin_constant_p(__a) + && __constant_char_array_p(__s, __n)) + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; } + + 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 //_GLIBCXX_USE_WCHAR_T + +#ifdef _GLIBCXX_USE_CHAR8_T + template<> + struct char_traits + { + typedef char8_t char_type; + typedef unsigned int int_type; + typedef u8streampos pos_type; + typedef streamoff off_type; + typedef mbstate_t state_type; +#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 + { __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 > 201402 + if (__builtin_constant_p(__n) + && __constant_char_array_p(__s1, __n) + && __constant_char_array_p(__s2, __n)) + 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 > 201402 + if (__constant_string_p(__s)) + return __gnu_cxx::char_traits::length(__s); +#endif + 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) + { + if (__n == 0) + return 0; +#if __cplusplus > 201402 + if (__builtin_constant_p(__n) + && __builtin_constant_p(__a) + && __constant_char_array_p(__s, __n)) + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; } + + 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 //_GLIBCXX_USE_CHAR8_T + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#if __cplusplus >= 201103L + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template<> + struct char_traits + { + typedef char16_t char_type; +#ifdef _GLIBCXX_USE_C99_STDINT_TR1 + typedef uint_least16_t int_type; +#elif defined __UINT_LEAST16_TYPE__ + typedef __UINT_LEAST16_TYPE__ int_type; +#else + typedef make_unsigned::type int_type; +#endif + typedef streamoff off_type; + typedef u16streampos pos_type; + typedef mbstate_t state_type; +#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 + { __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; +#ifdef __cpp_lib_is_constant_evaluated + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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 __c == eof() ? int_type(0xfffd) : int_type(__c); } + + static constexpr bool + eq_int_type(const int_type& __c1, const int_type& __c2) noexcept + { return __c1 == __c2; } + + 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; } + }; + + template<> + struct char_traits + { + typedef char32_t char_type; +#ifdef _GLIBCXX_USE_C99_STDINT_TR1 + typedef uint_least32_t int_type; +#elif defined __UINT_LEAST32_TYPE__ + typedef __UINT_LEAST32_TYPE__ int_type; +#else + typedef make_unsigned::type int_type; +#endif + typedef streamoff off_type; + typedef u32streampos pos_type; + typedef mbstate_t state_type; +#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 + { __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; +#ifdef __cpp_lib_is_constant_evaluated + 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; +#ifdef __cpp_lib_is_constant_evaluated + 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; } + + 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; } + }; + +#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 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // C++11 + +#endif // _CHAR_TRAITS_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@char_traits.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@char_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..738fa4c5d6e4b4b64e2858781c9e82a53f4820e1 GIT binary patch literal 59001 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

  • gNcVik-OxsYH zwV{aV5VbcHOALSm8oC!b8TSgre|jjj=h+1xl}Cr$5aBYVq0tBkj22|2JsJT4zyS@} z(2$Kb#LpfKw;}2}$*W=rV&$R8UfOz0T>uBP^P*6X)B9%uA^t6kAmcq6sRW~0DuH|~ zK2IgM5956w9d8>@vC&~@vnJ>EHYfhOr!k#Ys52PDFqjR)U0r5Z0=LB-9D=#6|w50-v}%1lD?pveqNO?Ga%* zD&yax4?-dT#6_!3lwjN*aMvEjU3m~>P!YK4r%ph09pkI-oe zij$6neBzk1LJk$&Aa+C0G#z+EyfioVQk?UNAb618YsNwC;lpYapwMgu{PrfWW*h`q zjRX`j{o?1E>X6Vip&9Bq80tA}sO1wx1BZG(hI&37>P4XGB4HvK>gEwHZ|WK;T&y%| zaSoVv4yq#hcMgOGZ~#_|ASjE3YBa=meTQg>Sw+nRmQO0%!WVDL^5WZK=OEyK<-c~= zIoOWw9OUQg1!>BN7i3DZjh=@g`-fRJ?qRrxfCD)06x_p80tsI5?`bzYSpG~SAb&T6%U}e82N5)Q&5I18 ziynCG?I09kjHM;Kyda1bmOK>MBt0W^A+W|*CdbR>qY&5smpMmvm!5pV5u}-5gjYoU zD){Lt|37Q-)-x4jc7}jNH)kjA(1B!_PxCNWS6l)+A<;^&pt%-u>wVo48IH?3~&JbUV-|0g{m)pcw~@vjOa&jQZ}mW zf%xxXj@KSIUVsB|+6$caQk?j)lz+9Y{b*}HYimE+0vyoR0kn01wly%m?44(y*}~Yb z;pvcCb(R;FQwOg+yF4H`;!1Xr$UQ$PvvG*nxMH~gLv?`};S1nDzyWw%5xQaNikN`y z1GcAp`22Uhg2-eOOzWG7vR#zF62xWl8ZpXu4PAt5j`?_VIv?kUcIq^T(J&MJ#P>J1 zM)a&THjEIhD<71Zsp+xkixFc`NapDch_c>5BMAJUu^?n3JZw1A;v16+5NatvMht1S zz#L29fNU5WCM7ny5vS1H4x4NfKrwzau-t0HBTw;^-MyNu8roV-Y>hU)XHw3U4T6iG zfLe_b{fJh7B(45Gy4})$ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@charconv.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@charconv.h new file mode 100644 index 0000000..a3149bd --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@charconv.h @@ -0,0 +1,106 @@ +// Numeric conversions (to_string, to_chars) -*- C++ -*- + +// Copyright (C) 2017-2020 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 + +#pragma GCC system_header + +#if __cplusplus >= 201103L + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +namespace __detail +{ + // Generic implementation for arbitrary bases. + template + _GLIBCXX14_CONSTEXPR unsigned + __to_chars_len(_Tp __value, int __base = 10) noexcept + { + static_assert(is_integral<_Tp>::value, "implementation bug"); + static_assert(is_unsigned<_Tp>::value, "implementation bug"); + + 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 + void + __to_chars_10_impl(char* __first, unsigned __len, _Tp __val) noexcept + { + static_assert(is_integral<_Tp>::value, "implementation bug"); + static_assert(is_unsigned<_Tp>::value, "implementation bug"); + + static 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@charconv.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@charconv.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f7b39c54211a6bb179035693635bf1546dfd2dee GIT binary patch literal 16110 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 SQ&L+ktif literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@codecvt.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@codecvt.h new file mode 100644 index 0000000..f6e20f0 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@codecvt.h @@ -0,0 +1,840 @@ +// Locale support (codecvt) -*- C++ -*- + +// Copyright (C) 2000-2020 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/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 + +#pragma GCC system_header + +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* __s, 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* __s, 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 + +#endif // _CODECVT_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@codecvt.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@codecvt.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3c294f293861ecdfae11b1ad74de7a5c0ba7b0bc GIT binary patch literal 65156 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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 + +#pragma GCC system_header + +#include + +// 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) || !_GLIBCXX_HOSTED + +#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 + +#endif // _GLIBCXX_CONCEPT_CHECK diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@concept_check.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@concept_check.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c9eae3d4752308271f2028bc13240f4892707e9f GIT binary patch literal 12919 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cpp_type_traits.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cpp_type_traits.h new file mode 100644 index 0000000..ca83f59 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cpp_type_traits.h @@ -0,0 +1,551 @@ +// The -*- C++ -*- type traits classes for internal use in libstdc++ + +// Copyright (C) 2000-2020 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/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} + */ + +// Written by Gabriel Dos Reis + +#ifndef _CPP_TYPE_TRAITS_H +#define _CPP_TYPE_TRAITS_H 1 + +#pragma GCC system_header + +#include + +// +// 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; + }; + + // Holds if the template-argument is a void type. + template + struct __is_void + { + enum { __value = 0 }; + typedef __false_type __type; + }; + + template<> + struct __is_void + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + // + // Integer types + // + template + struct __is_integer + { + enum { __value = 0 }; + typedef __false_type __type; + }; + + // Thirteen specializations (yes there are eleven standard integer + // types; long long and unsigned long long are + // supported as extensions). 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 _GLIBCXX_USE_WCHAR_T + 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) \ + template<> \ + struct __is_integer \ + { \ + enum { __value = 1 }; \ + typedef __true_type __type; \ + }; \ + 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; + }; + + // + // Pointer types + // + template + struct __is_pointer + { + enum { __value = 0 }; + typedef __false_type __type; + }; + + template + struct __is_pointer<_Tp*> + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + // + // An arithmetic type is an integer type or a floating point type + // + template + struct __is_arithmetic + : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > + { }; + + // + // A scalar type is an arithmetic type or a pointer type + // + template + struct __is_scalar + : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_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 _GLIBCXX_USE_WCHAR_T + 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; + }; + +#if __cplusplus >= 201703L + 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 + + template struct iterator_traits; + + // 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 }; + }; + + template + struct __memcpyable<_Tp*, _Tp*> + : __is_nonvolatile_trivially_copyable<_Tp> + { }; + + template + struct __memcpyable<_Tp*, const _Tp*> + : __is_nonvolatile_trivially_copyable<_Tp> + { }; + + // 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 narrow character types (and std::byte). + template::__value> + 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 + // 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 + + // + // 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++" + +#endif //_CPP_TYPE_TRAITS_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cpp_type_traits.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cpp_type_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1aae0ec85b32523ef06466f314761b2b69c6bb6d GIT binary patch literal 36444 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. + +/** @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 + +#pragma GCC system_header + +#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/@@home@ado@git@ssp/@usr@include@c++@10@bits@cxxabi_forced.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cxxabi_forced.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2b78bfb500b573d9ded65cb391ffd6e87d29a5be GIT binary patch literal 12873 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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 + +#pragma GCC system_header + +#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/@@home@ado@git@ssp/@usr@include@c++@10@bits@cxxabi_init_exception.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@cxxabi_init_exception.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4d88f2f8cf8ad3f5b27504e35fd786beeabb9a1b GIT binary patch literal 14631 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. + +/** @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 + +#pragma GCC system_header + +#pragma GCC visibility push(default) + +#include + +extern "C++" { + +namespace std +{ + /** + * @defgroup exceptions Exceptions + * @ingroup diagnostics + * + * Classes and functions for reporting errors via exception classes. + * @{ + */ + + /** + * @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 + +} + +#pragma GCC visibility pop + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b87f54e19785c8d2998ea99e431ddcd26e6daff4 GIT binary patch literal 14665 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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/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception_defines.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception_defines.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..d50fc9ed3bc36409e15afb3690572f7b2d6baa80 GIT binary patch literal 12582 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. + +/** @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 + +#pragma GCC visibility push(default) + +#include +#include +#include +#include +#include + +extern "C++" { + +namespace std +{ + 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. + */ + 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; + + /** + * @brief An opaque pointer to an arbitrary exception. + * @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(0) + { } + + exception_ptr(exception_ptr&& __o) noexcept + : _M_exception_object(__o._M_exception_object) + { __o._M_exception_object = 0; } +#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 + __attribute__ ((__const__)); + bool operator!() const _GLIBCXX_USE_NOEXCEPT + __attribute__ ((__pure__)); + operator __safe_bool() const _GLIBCXX_USE_NOEXCEPT; +#endif + +#if __cplusplus >= 201103L + explicit operator bool() const + { return _M_exception_object; } +#endif + + friend bool + operator==(const exception_ptr&, const exception_ptr&) + _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); + + const class std::type_info* + __cxa_exception_type() const _GLIBCXX_USE_NOEXCEPT + __attribute__ ((__pure__)); + }; + + /// @relates exception_ptr @{ + + bool + operator==(const exception_ptr&, const exception_ptr&) + _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); + + bool + operator!=(const exception_ptr&, const exception_ptr&) + _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); + + inline void + swap(exception_ptr& __lhs, exception_ptr& __rhs) + { __lhs.swap(__rhs); } + + // @} + + /// @cond undocumented + template + inline void + __dest_thunk(void* __x) + { static_cast<_Ex*>(__x)->~_Ex(); } + /// @endcond + + } // namespace __exception_ptr + + /// Obtain an exception_ptr pointing to a copy of the supplied object. + template + exception_ptr + make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT + { +#if __cpp_exceptions && __cpp_rtti && !_GLIBCXX_HAVE_CDTOR_CALLABI + void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex)); + (void) __cxxabiv1::__cxa_init_primary_exception( + __e, const_cast(&typeid(__ex)), + __exception_ptr::__dest_thunk<_Ex>); + try + { + ::new (__e) _Ex(__ex); + return exception_ptr(__e); + } + catch(...) + { + __cxxabiv1::__cxa_free_exception(__e); + return current_exception(); + } +#elif __cpp_exceptions + try + { + throw __ex; + } + catch(...) + { + return current_exception(); + } +#else // no RTTI and no exceptions + return exception_ptr(); +#endif + } + + // @} group exceptions +} // namespace std + +} // extern "C++" + +#pragma GCC visibility pop + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception_ptr.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@exception_ptr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3957a0e4772f52e00d2f53405af8896b2b1cacc9 GIT binary patch literal 19462 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@fstream.tcc b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@fstream.tcc new file mode 100644 index 0000000..81d00c4 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@fstream.tcc @@ -0,0 +1,1102 @@ +// File based streams -*- C++ -*- + +// Copyright (C) 1997-2020 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/fstream.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{fstream} + */ + +// +// ISO C++ 14882: 27.8 File-based streams +// + +#ifndef _FSTREAM_TCC +#define _FSTREAM_TCC 1 + +#pragma GCC system_header + +#include +#include // for swap +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + void + basic_filebuf<_CharT, _Traits>:: + _M_allocate_internal_buffer() + { + // Allocate internal buffer only if one doesn't already exist + // (either allocated or provided by the user via setbuf). + if (!_M_buf_allocated && !_M_buf) + { + _M_buf = new char_type[_M_buf_size]; + _M_buf_allocated = true; + } + } + + template + void + basic_filebuf<_CharT, _Traits>:: + _M_destroy_internal_buffer() throw() + { + if (_M_buf_allocated) + { + delete [] _M_buf; + _M_buf = 0; + _M_buf_allocated = false; + } + delete [] _M_ext_buf; + _M_ext_buf = 0; + _M_ext_buf_size = 0; + _M_ext_next = 0; + _M_ext_end = 0; + } + + template + basic_filebuf<_CharT, _Traits>:: + basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock), + _M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(), + _M_state_last(), _M_buf(0), _M_buf_size(BUFSIZ), + _M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(), + _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false), + _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0), + _M_ext_end(0) + { + if (has_facet<__codecvt_type>(this->_M_buf_locale)) + _M_codecvt = &use_facet<__codecvt_type>(this->_M_buf_locale); + } + +#if __cplusplus >= 201103L + template + basic_filebuf<_CharT, _Traits>:: + basic_filebuf(basic_filebuf&& __rhs) + : __streambuf_type(__rhs), + _M_lock(), _M_file(std::move(__rhs._M_file), &_M_lock), + _M_mode(std::__exchange(__rhs._M_mode, ios_base::openmode(0))), + _M_state_beg(std::move(__rhs._M_state_beg)), + _M_state_cur(std::move(__rhs._M_state_cur)), + _M_state_last(std::move(__rhs._M_state_last)), + _M_buf(std::__exchange(__rhs._M_buf, nullptr)), + _M_buf_size(std::__exchange(__rhs._M_buf_size, 1)), + _M_buf_allocated(std::__exchange(__rhs._M_buf_allocated, false)), + _M_reading(std::__exchange(__rhs._M_reading, false)), + _M_writing(std::__exchange(__rhs._M_writing, false)), + _M_pback(__rhs._M_pback), + _M_pback_cur_save(std::__exchange(__rhs._M_pback_cur_save, nullptr)), + _M_pback_end_save(std::__exchange(__rhs._M_pback_end_save, nullptr)), + _M_pback_init(std::__exchange(__rhs._M_pback_init, false)), + _M_codecvt(__rhs._M_codecvt), + _M_ext_buf(std::__exchange(__rhs._M_ext_buf, nullptr)), + _M_ext_buf_size(std::__exchange(__rhs._M_ext_buf_size, 0)), + _M_ext_next(std::__exchange(__rhs._M_ext_next, nullptr)), + _M_ext_end(std::__exchange(__rhs._M_ext_end, nullptr)) + { + __rhs._M_set_buffer(-1); + __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg; + } + + template + basic_filebuf<_CharT, _Traits>& + basic_filebuf<_CharT, _Traits>:: + operator=(basic_filebuf&& __rhs) + { + this->close(); + __streambuf_type::operator=(__rhs); + _M_file.swap(__rhs._M_file); + _M_mode = std::__exchange(__rhs._M_mode, ios_base::openmode(0)); + _M_state_beg = std::move(__rhs._M_state_beg); + _M_state_cur = std::move(__rhs._M_state_cur); + _M_state_last = std::move(__rhs._M_state_last); + _M_buf = std::__exchange(__rhs._M_buf, nullptr); + _M_buf_size = std::__exchange(__rhs._M_buf_size, 1); + _M_buf_allocated = std::__exchange(__rhs._M_buf_allocated, false); + _M_ext_buf = std::__exchange(__rhs._M_ext_buf, nullptr); + _M_ext_buf_size = std::__exchange(__rhs._M_ext_buf_size, 0); + _M_ext_next = std::__exchange(__rhs._M_ext_next, nullptr); + _M_ext_end = std::__exchange(__rhs._M_ext_end, nullptr); + _M_reading = std::__exchange(__rhs._M_reading, false); + _M_writing = std::__exchange(__rhs._M_writing, false); + _M_pback_cur_save = std::__exchange(__rhs._M_pback_cur_save, nullptr); + _M_pback_end_save = std::__exchange(__rhs._M_pback_end_save, nullptr); + _M_pback_init = std::__exchange(__rhs._M_pback_init, false); + __rhs._M_set_buffer(-1); + __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg; + return *this; + } + + template + void + basic_filebuf<_CharT, _Traits>:: + swap(basic_filebuf& __rhs) + { + __streambuf_type::swap(__rhs); + _M_file.swap(__rhs._M_file); + std::swap(_M_mode, __rhs._M_mode); + std::swap(_M_state_beg, __rhs._M_state_beg); + std::swap(_M_state_cur, __rhs._M_state_cur); + std::swap(_M_state_last, __rhs._M_state_last); + std::swap(_M_buf, __rhs._M_buf); + std::swap(_M_buf_size, __rhs._M_buf_size); + std::swap(_M_buf_allocated, __rhs._M_buf_allocated); + std::swap(_M_ext_buf, __rhs._M_ext_buf); + std::swap(_M_ext_buf_size, __rhs._M_ext_buf_size); + std::swap(_M_ext_next, __rhs._M_ext_next); + std::swap(_M_ext_end, __rhs._M_ext_end); + std::swap(_M_reading, __rhs._M_reading); + std::swap(_M_writing, __rhs._M_writing); + std::swap(_M_pback_cur_save, __rhs._M_pback_cur_save); + std::swap(_M_pback_end_save, __rhs._M_pback_end_save); + std::swap(_M_pback_init, __rhs._M_pback_init); + } +#endif + + template + typename basic_filebuf<_CharT, _Traits>::__filebuf_type* + basic_filebuf<_CharT, _Traits>:: + open(const char* __s, ios_base::openmode __mode) + { + __filebuf_type *__ret = 0; + if (!this->is_open()) + { + _M_file.open(__s, __mode); + if (this->is_open()) + { + _M_allocate_internal_buffer(); + _M_mode = __mode; + + // Setup initial buffer to 'uncommitted' mode. + _M_reading = false; + _M_writing = false; + _M_set_buffer(-1); + + // Reset to initial state. + _M_state_last = _M_state_cur = _M_state_beg; + + // 27.8.1.3,4 + if ((__mode & ios_base::ate) + && this->seekoff(0, ios_base::end, __mode) + == pos_type(off_type(-1))) + this->close(); + else + __ret = this; + } + } + return __ret; + } + +#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T + template + basic_filebuf<_CharT, _Traits>* + basic_filebuf<_CharT, _Traits>:: + open(const wchar_t* __s, ios_base::openmode __mode) + { + __filebuf_type *__ret = 0; + if (!this->is_open()) + { + _M_file.open(__s, __mode); + if (this->is_open()) + { + _M_allocate_internal_buffer(); + _M_mode = __mode; + + // Setup initial buffer to 'uncommitted' mode. + _M_reading = false; + _M_writing = false; + _M_set_buffer(-1); + + // Reset to initial state. + _M_state_last = _M_state_cur = _M_state_beg; + + // 27.8.1.3,4 + if ((__mode & ios_base::ate) + && this->seekoff(0, ios_base::end, __mode) + == pos_type(off_type(-1))) + this->close(); + else + __ret = this; + } + } + return __ret; + } +#endif // HAVE__WFOPEN && USE_WCHAR_T + + template + typename basic_filebuf<_CharT, _Traits>::__filebuf_type* + basic_filebuf<_CharT, _Traits>:: + close() + { + if (!this->is_open()) + return 0; + + bool __testfail = false; + { + // NB: Do this here so that re-opened filebufs will be cool... + struct __close_sentry + { + basic_filebuf *__fb; + __close_sentry (basic_filebuf *__fbi): __fb(__fbi) { } + ~__close_sentry () + { + __fb->_M_mode = ios_base::openmode(0); + __fb->_M_pback_init = false; + __fb->_M_destroy_internal_buffer(); + __fb->_M_reading = false; + __fb->_M_writing = false; + __fb->_M_set_buffer(-1); + __fb->_M_state_last = __fb->_M_state_cur = __fb->_M_state_beg; + } + } __cs (this); + + __try + { + if (!_M_terminate_output()) + __testfail = true; + } + __catch(...) + { + _M_file.close(); + __throw_exception_again; + } + } + + if (!_M_file.close()) + __testfail = true; + + if (__testfail) + return 0; + else + return this; + } + + template + streamsize + basic_filebuf<_CharT, _Traits>:: + showmanyc() + { + streamsize __ret = -1; + const bool __testin = _M_mode & ios_base::in; + if (__testin && this->is_open()) + { + // For a stateful encoding (-1) the pending sequence might be just + // shift and unshift prefixes with no actual character. + __ret = this->egptr() - this->gptr(); + +#if _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM + // About this workaround, see libstdc++/20806. + const bool __testbinary = _M_mode & ios_base::binary; + if (__check_facet(_M_codecvt).encoding() >= 0 + && __testbinary) +#else + if (__check_facet(_M_codecvt).encoding() >= 0) +#endif + __ret += _M_file.showmanyc() / _M_codecvt->max_length(); + } + return __ret; + } + + template + typename basic_filebuf<_CharT, _Traits>::int_type + basic_filebuf<_CharT, _Traits>:: + underflow() + { + int_type __ret = traits_type::eof(); + const bool __testin = _M_mode & ios_base::in; + if (__testin) + { + if (_M_writing) + { + if (overflow() == traits_type::eof()) + return __ret; + _M_set_buffer(-1); + _M_writing = false; + } + // Check for pback madness, and if so switch back to the + // normal buffers and jet outta here before expensive + // fileops happen... + _M_destroy_pback(); + + if (this->gptr() < this->egptr()) + return traits_type::to_int_type(*this->gptr()); + + // Get and convert input sequence. + const size_t __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1; + + // Will be set to true if ::read() returns 0 indicating EOF. + bool __got_eof = false; + // Number of internal characters produced. + streamsize __ilen = 0; + codecvt_base::result __r = codecvt_base::ok; + if (__check_facet(_M_codecvt).always_noconv()) + { + __ilen = _M_file.xsgetn(reinterpret_cast(this->eback()), + __buflen); + if (__ilen == 0) + __got_eof = true; + } + else + { + // Worst-case number of external bytes. + // XXX Not done encoding() == -1. + const int __enc = _M_codecvt->encoding(); + streamsize __blen; // Minimum buffer size. + streamsize __rlen; // Number of chars to read. + if (__enc > 0) + __blen = __rlen = __buflen * __enc; + else + { + __blen = __buflen + _M_codecvt->max_length() - 1; + __rlen = __buflen; + } + const streamsize __remainder = _M_ext_end - _M_ext_next; + __rlen = __rlen > __remainder ? __rlen - __remainder : 0; + + // An imbue in 'read' mode implies first converting the external + // chars already present. + if (_M_reading && this->egptr() == this->eback() && __remainder) + __rlen = 0; + + // Allocate buffer if necessary and move unconverted + // bytes to front. + if (_M_ext_buf_size < __blen) + { + char* __buf = new char[__blen]; + if (__remainder) + __builtin_memcpy(__buf, _M_ext_next, __remainder); + + delete [] _M_ext_buf; + _M_ext_buf = __buf; + _M_ext_buf_size = __blen; + } + else if (__remainder) + __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); + + _M_ext_next = _M_ext_buf; + _M_ext_end = _M_ext_buf + __remainder; + _M_state_last = _M_state_cur; + + do + { + if (__rlen > 0) + { + // Sanity check! + // This may fail if the return value of + // codecvt::max_length() is bogus. + if (_M_ext_end - _M_ext_buf + __rlen > _M_ext_buf_size) + { + __throw_ios_failure(__N("basic_filebuf::underflow " + "codecvt::max_length() " + "is not valid")); + } + streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen); + if (__elen == 0) + __got_eof = true; + else if (__elen == -1) + break; + _M_ext_end += __elen; + } + + char_type* __iend = this->eback(); + if (_M_ext_next < _M_ext_end) + __r = _M_codecvt->in(_M_state_cur, _M_ext_next, + _M_ext_end, _M_ext_next, + this->eback(), + this->eback() + __buflen, __iend); + if (__r == codecvt_base::noconv) + { + size_t __avail = _M_ext_end - _M_ext_buf; + __ilen = std::min(__avail, __buflen); + traits_type::copy(this->eback(), + reinterpret_cast + (_M_ext_buf), __ilen); + _M_ext_next = _M_ext_buf + __ilen; + } + else + __ilen = __iend - this->eback(); + + // _M_codecvt->in may return error while __ilen > 0: this is + // ok, and actually occurs in case of mixed encodings (e.g., + // XML files). + if (__r == codecvt_base::error) + break; + + __rlen = 1; + } + while (__ilen == 0 && !__got_eof); + } + + if (__ilen > 0) + { + _M_set_buffer(__ilen); + _M_reading = true; + __ret = traits_type::to_int_type(*this->gptr()); + } + else if (__got_eof) + { + // If the actual end of file is reached, set 'uncommitted' + // mode, thus allowing an immediate write without an + // intervening seek. + _M_set_buffer(-1); + _M_reading = false; + // However, reaching it while looping on partial means that + // the file has got an incomplete character. + if (__r == codecvt_base::partial) + __throw_ios_failure(__N("basic_filebuf::underflow " + "incomplete character in file")); + } + else if (__r == codecvt_base::error) + __throw_ios_failure(__N("basic_filebuf::underflow " + "invalid byte sequence in file")); + else + __throw_ios_failure(__N("basic_filebuf::underflow " + "error reading the file"), errno); + } + return __ret; + } + + template + typename basic_filebuf<_CharT, _Traits>::int_type + basic_filebuf<_CharT, _Traits>:: + pbackfail(int_type __i) + { + int_type __ret = traits_type::eof(); + const bool __testin = _M_mode & ios_base::in; + if (__testin) + { + if (_M_writing) + { + if (overflow() == traits_type::eof()) + return __ret; + _M_set_buffer(-1); + _M_writing = false; + } + // Remember whether the pback buffer is active, otherwise below + // we may try to store in it a second char (libstdc++/9761). + const bool __testpb = _M_pback_init; + const bool __testeof = traits_type::eq_int_type(__i, __ret); + int_type __tmp; + if (this->eback() < this->gptr()) + { + this->gbump(-1); + __tmp = traits_type::to_int_type(*this->gptr()); + } + else if (this->seekoff(-1, ios_base::cur) != pos_type(off_type(-1))) + { + __tmp = this->underflow(); + if (traits_type::eq_int_type(__tmp, __ret)) + return __ret; + } + else + { + // At the beginning of the buffer, need to make a + // putback position available. But the seek may fail + // (f.i., at the beginning of a file, see + // libstdc++/9439) and in that case we return + // traits_type::eof(). + return __ret; + } + + // Try to put back __i into input sequence in one of three ways. + // Order these tests done in is unspecified by the standard. + if (!__testeof && traits_type::eq_int_type(__i, __tmp)) + __ret = __i; + else if (__testeof) + __ret = traits_type::not_eof(__i); + else if (!__testpb) + { + _M_create_pback(); + _M_reading = true; + *this->gptr() = traits_type::to_char_type(__i); + __ret = __i; + } + } + return __ret; + } + + template + typename basic_filebuf<_CharT, _Traits>::int_type + basic_filebuf<_CharT, _Traits>:: + overflow(int_type __c) + { + int_type __ret = traits_type::eof(); + const bool __testeof = traits_type::eq_int_type(__c, __ret); + const bool __testout = (_M_mode & ios_base::out + || _M_mode & ios_base::app); + if (__testout) + { + if (_M_reading) + { + _M_destroy_pback(); + const int __gptr_off = _M_get_ext_pos(_M_state_last); + if (_M_seek(__gptr_off, ios_base::cur, _M_state_last) + == pos_type(off_type(-1))) + return __ret; + } + if (this->pbase() < this->pptr()) + { + // If appropriate, append the overflow char. + if (!__testeof) + { + *this->pptr() = traits_type::to_char_type(__c); + this->pbump(1); + } + + // Convert pending sequence to external representation, + // and output. + if (_M_convert_to_external(this->pbase(), + this->pptr() - this->pbase())) + { + _M_set_buffer(0); + __ret = traits_type::not_eof(__c); + } + } + else if (_M_buf_size > 1) + { + // Overflow in 'uncommitted' mode: set _M_writing, set + // the buffer to the initial 'write' mode, and put __c + // into the buffer. + _M_set_buffer(0); + _M_writing = true; + if (!__testeof) + { + *this->pptr() = traits_type::to_char_type(__c); + this->pbump(1); + } + __ret = traits_type::not_eof(__c); + } + else + { + // Unbuffered. + char_type __conv = traits_type::to_char_type(__c); + if (__testeof || _M_convert_to_external(&__conv, 1)) + { + _M_writing = true; + __ret = traits_type::not_eof(__c); + } + } + } + return __ret; + } + + template + bool + basic_filebuf<_CharT, _Traits>:: + _M_convert_to_external(_CharT* __ibuf, streamsize __ilen) + { + // Sizes of external and pending output. + streamsize __elen; + streamsize __plen; + if (__check_facet(_M_codecvt).always_noconv()) + { + __elen = _M_file.xsputn(reinterpret_cast(__ibuf), __ilen); + __plen = __ilen; + } + else + { + // Worst-case number of external bytes needed. + // XXX Not done encoding() == -1. + streamsize __blen = __ilen * _M_codecvt->max_length(); + char* __buf = static_cast(__builtin_alloca(__blen)); + + char* __bend; + const char_type* __iend; + codecvt_base::result __r; + __r = _M_codecvt->out(_M_state_cur, __ibuf, __ibuf + __ilen, + __iend, __buf, __buf + __blen, __bend); + + if (__r == codecvt_base::ok || __r == codecvt_base::partial) + __blen = __bend - __buf; + else if (__r == codecvt_base::noconv) + { + // Same as the always_noconv case above. + __buf = reinterpret_cast(__ibuf); + __blen = __ilen; + } + else + __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external " + "conversion error")); + + __elen = _M_file.xsputn(__buf, __blen); + __plen = __blen; + + // Try once more for partial conversions. + if (__r == codecvt_base::partial && __elen == __plen) + { + const char_type* __iresume = __iend; + streamsize __rlen = this->pptr() - __iend; + __r = _M_codecvt->out(_M_state_cur, __iresume, + __iresume + __rlen, __iend, __buf, + __buf + __blen, __bend); + if (__r != codecvt_base::error) + { + __rlen = __bend - __buf; + __elen = _M_file.xsputn(__buf, __rlen); + __plen = __rlen; + } + else + __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external " + "conversion error")); + } + } + return __elen == __plen; + } + + template + streamsize + basic_filebuf<_CharT, _Traits>:: + xsgetn(_CharT* __s, streamsize __n) + { + // Clear out pback buffer before going on to the real deal... + streamsize __ret = 0; + if (_M_pback_init) + { + if (__n > 0 && this->gptr() == this->eback()) + { + *__s++ = *this->gptr(); // emulate non-underflowing sbumpc + this->gbump(1); + __ret = 1; + --__n; + } + _M_destroy_pback(); + } + else if (_M_writing) + { + if (overflow() == traits_type::eof()) + return __ret; + _M_set_buffer(-1); + _M_writing = false; + } + + // Optimization in the always_noconv() case, to be generalized in the + // future: when __n > __buflen we read directly instead of using the + // buffer repeatedly. + const bool __testin = _M_mode & ios_base::in; + const streamsize __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1; + + if (__n > __buflen && __check_facet(_M_codecvt).always_noconv() + && __testin) + { + // First, copy the chars already present in the buffer. + const streamsize __avail = this->egptr() - this->gptr(); + if (__avail != 0) + { + traits_type::copy(__s, this->gptr(), __avail); + __s += __avail; + this->setg(this->eback(), this->gptr() + __avail, this->egptr()); + __ret += __avail; + __n -= __avail; + } + + // Need to loop in case of short reads (relatively common + // with pipes). + streamsize __len; + for (;;) + { + __len = _M_file.xsgetn(reinterpret_cast(__s), __n); + if (__len == -1) + __throw_ios_failure(__N("basic_filebuf::xsgetn " + "error reading the file"), errno); + if (__len == 0) + break; + + __n -= __len; + __ret += __len; + if (__n == 0) + break; + + __s += __len; + } + + if (__n == 0) + { + // Set _M_reading. Buffer is already in initial 'read' mode. + _M_reading = true; + } + else if (__len == 0) + { + // If end of file is reached, set 'uncommitted' + // mode, thus allowing an immediate write without + // an intervening seek. + _M_set_buffer(-1); + _M_reading = false; + } + } + else + __ret += __streambuf_type::xsgetn(__s, __n); + + return __ret; + } + + template + streamsize + basic_filebuf<_CharT, _Traits>:: + xsputn(const _CharT* __s, streamsize __n) + { + streamsize __ret = 0; + // Optimization in the always_noconv() case, to be generalized in the + // future: when __n is sufficiently large we write directly instead of + // using the buffer. + const bool __testout = (_M_mode & ios_base::out + || _M_mode & ios_base::app); + if (__check_facet(_M_codecvt).always_noconv() + && __testout && !_M_reading) + { + // Measurement would reveal the best choice. + const streamsize __chunk = 1ul << 10; + streamsize __bufavail = this->epptr() - this->pptr(); + + // Don't mistake 'uncommitted' mode buffered with unbuffered. + if (!_M_writing && _M_buf_size > 1) + __bufavail = _M_buf_size - 1; + + const streamsize __limit = std::min(__chunk, __bufavail); + if (__n >= __limit) + { + const streamsize __buffill = this->pptr() - this->pbase(); + const char* __buf = reinterpret_cast(this->pbase()); + __ret = _M_file.xsputn_2(__buf, __buffill, + reinterpret_cast(__s), + __n); + if (__ret == __buffill + __n) + { + _M_set_buffer(0); + _M_writing = true; + } + if (__ret > __buffill) + __ret -= __buffill; + else + __ret = 0; + } + else + __ret = __streambuf_type::xsputn(__s, __n); + } + else + __ret = __streambuf_type::xsputn(__s, __n); + return __ret; + } + + template + typename basic_filebuf<_CharT, _Traits>::__streambuf_type* + basic_filebuf<_CharT, _Traits>:: + setbuf(char_type* __s, streamsize __n) + { + if (!this->is_open()) + { + if (__s == 0 && __n == 0) + _M_buf_size = 1; + else 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. When __n > 1, __n - 1 positions will be + // used for the get area, __n - 1 for the put area and 1 + // position to host the overflow char of a full put area. + // When __n == 1, 1 position will be used for the get area + // and 0 for the put area, as in the unbuffered case above. + _M_buf = __s; + _M_buf_size = __n; + } + } + return this; + } + + + // According to 27.8.1.4 p11 - 13, seekoff should ignore the last + // argument (of type openmode). + template + typename basic_filebuf<_CharT, _Traits>::pos_type + basic_filebuf<_CharT, _Traits>:: + seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode) + { + int __width = 0; + if (_M_codecvt) + __width = _M_codecvt->encoding(); + if (__width < 0) + __width = 0; + + pos_type __ret = pos_type(off_type(-1)); + const bool __testfail = __off != 0 && __width <= 0; + if (this->is_open() && !__testfail) + { + // tellg and tellp queries do not affect any state, unless + // ! always_noconv and the put sequence is not empty. + // In that case, determining the position requires converting the + // put sequence. That doesn't use ext_buf, so requires a flush. + bool __no_movement = __way == ios_base::cur && __off == 0 + && (!_M_writing || _M_codecvt->always_noconv()); + + // Ditch any pback buffers to avoid confusion. + if (!__no_movement) + _M_destroy_pback(); + + // Correct state at destination. Note that this is the correct + // state for the current position during output, because + // codecvt::unshift() returns the state to the initial state. + // This is also the correct state at the end of the file because + // an unshift sequence should have been written at the end. + __state_type __state = _M_state_beg; + off_type __computed_off = __off * __width; + if (_M_reading && __way == ios_base::cur) + { + __state = _M_state_last; + __computed_off += _M_get_ext_pos(__state); + } + if (!__no_movement) + __ret = _M_seek(__computed_off, __way, __state); + else + { + if (_M_writing) + __computed_off = this->pptr() - this->pbase(); + + off_type __file_off = _M_file.seekoff(0, ios_base::cur); + if (__file_off != off_type(-1)) + { + __ret = __file_off + __computed_off; + __ret.state(__state); + } + } + } + return __ret; + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 171. Strange seekpos() semantics due to joint position + // According to the resolution of DR 171, seekpos should ignore the last + // argument (of type openmode). + template + typename basic_filebuf<_CharT, _Traits>::pos_type + basic_filebuf<_CharT, _Traits>:: + seekpos(pos_type __pos, ios_base::openmode) + { + pos_type __ret = pos_type(off_type(-1)); + if (this->is_open()) + { + // Ditch any pback buffers to avoid confusion. + _M_destroy_pback(); + __ret = _M_seek(off_type(__pos), ios_base::beg, __pos.state()); + } + return __ret; + } + + template + typename basic_filebuf<_CharT, _Traits>::pos_type + basic_filebuf<_CharT, _Traits>:: + _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state) + { + pos_type __ret = pos_type(off_type(-1)); + if (_M_terminate_output()) + { + off_type __file_off = _M_file.seekoff(__off, __way); + if (__file_off != off_type(-1)) + { + _M_reading = false; + _M_writing = false; + _M_ext_next = _M_ext_end = _M_ext_buf; + _M_set_buffer(-1); + _M_state_cur = __state; + __ret = __file_off; + __ret.state(_M_state_cur); + } + } + return __ret; + } + + // Returns the distance from the end of the ext buffer to the point + // corresponding to gptr(). This is a negative value. Updates __state + // from eback() correspondence to gptr(). + template + int basic_filebuf<_CharT, _Traits>:: + _M_get_ext_pos(__state_type& __state) + { + if (_M_codecvt->always_noconv()) + return this->gptr() - this->egptr(); + else + { + // Calculate offset from _M_ext_buf that corresponds to + // gptr(). Precondition: __state == _M_state_last, which + // corresponds to eback(). + const int __gptr_off = + _M_codecvt->length(__state, _M_ext_buf, _M_ext_next, + this->gptr() - this->eback()); + return _M_ext_buf + __gptr_off - _M_ext_end; + } + } + + template + bool + basic_filebuf<_CharT, _Traits>:: + _M_terminate_output() + { + // Part one: update the output sequence. + bool __testvalid = true; + if (this->pbase() < this->pptr()) + { + const int_type __tmp = this->overflow(); + if (traits_type::eq_int_type(__tmp, traits_type::eof())) + __testvalid = false; + } + + // Part two: output unshift sequence. + if (_M_writing && !__check_facet(_M_codecvt).always_noconv() + && __testvalid) + { + // Note: this value is arbitrary, since there is no way to + // get the length of the unshift sequence from codecvt, + // without calling unshift. + const size_t __blen = 128; + char __buf[__blen]; + codecvt_base::result __r; + streamsize __ilen = 0; + + do + { + char* __next; + __r = _M_codecvt->unshift(_M_state_cur, __buf, + __buf + __blen, __next); + if (__r == codecvt_base::error) + __testvalid = false; + else if (__r == codecvt_base::ok || + __r == codecvt_base::partial) + { + __ilen = __next - __buf; + if (__ilen > 0) + { + const streamsize __elen = _M_file.xsputn(__buf, __ilen); + if (__elen != __ilen) + __testvalid = false; + } + } + } + while (__r == codecvt_base::partial && __ilen > 0 && __testvalid); + + if (__testvalid) + { + // This second call to overflow() is required by the standard, + // but it's not clear why it's needed, since the output buffer + // should be empty by this point (it should have been emptied + // in the first call to overflow()). + const int_type __tmp = this->overflow(); + if (traits_type::eq_int_type(__tmp, traits_type::eof())) + __testvalid = false; + } + } + return __testvalid; + } + + template + int + basic_filebuf<_CharT, _Traits>:: + sync() + { + // Make sure that the internal buffer resyncs its idea of + // the file position with the external file. + int __ret = 0; + if (this->pbase() < this->pptr()) + { + const int_type __tmp = this->overflow(); + if (traits_type::eq_int_type(__tmp, traits_type::eof())) + __ret = -1; + } + return __ret; + } + + template + void + basic_filebuf<_CharT, _Traits>:: + imbue(const locale& __loc) + { + bool __testvalid = true; + + const __codecvt_type* _M_codecvt_tmp = 0; + if (__builtin_expect(has_facet<__codecvt_type>(__loc), true)) + _M_codecvt_tmp = &use_facet<__codecvt_type>(__loc); + + if (this->is_open()) + { + // encoding() == -1 is ok only at the beginning. + if ((_M_reading || _M_writing) + && __check_facet(_M_codecvt).encoding() == -1) + __testvalid = false; + else + { + if (_M_reading) + { + if (__check_facet(_M_codecvt).always_noconv()) + { + if (_M_codecvt_tmp + && !__check_facet(_M_codecvt_tmp).always_noconv()) + __testvalid = this->seekoff(0, ios_base::cur, _M_mode) + != pos_type(off_type(-1)); + } + else + { + // External position corresponding to gptr(). + _M_ext_next = _M_ext_buf + + _M_codecvt->length(_M_state_last, _M_ext_buf, + _M_ext_next, + this->gptr() - this->eback()); + const streamsize __remainder = _M_ext_end - _M_ext_next; + if (__remainder) + __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); + + _M_ext_next = _M_ext_buf; + _M_ext_end = _M_ext_buf + __remainder; + _M_set_buffer(-1); + _M_state_last = _M_state_cur = _M_state_beg; + } + } + else if (_M_writing && (__testvalid = _M_terminate_output())) + _M_set_buffer(-1); + } + } + + if (__testvalid) + _M_codecvt = _M_codecvt_tmp; + else + _M_codecvt = 0; + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class basic_filebuf; + extern template class basic_ifstream; + extern template class basic_ofstream; + extern template class basic_fstream; + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class basic_filebuf; + extern template class basic_ifstream; + extern template class basic_ofstream; + extern template class basic_fstream; +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@fstream.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@fstream.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..b944e8b19c92d6b67596f5a58efbe158266de474 GIT binary patch literal 54275 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 Dxojxv literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functexcept.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functexcept.h new file mode 100644 index 0000000..52eef2b --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functexcept.h @@ -0,0 +1,115 @@ +// Function-Based Exception Support -*- C++ -*- + +// Copyright (C) 2001-2020 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 + + // Helper for exception objects in + void + __throw_bad_exception(void) __attribute__((__noreturn__)); + + // Helper for exception objects in + void + __throw_bad_alloc(void) __attribute__((__noreturn__)); + + // Helper for exception objects in + void + __throw_bad_cast(void) __attribute__((__noreturn__)); + + void + __throw_bad_typeid(void) __attribute__((__noreturn__)); + + // Helpers for exception objects in + void + __throw_logic_error(const char*) __attribute__((__noreturn__)); + + void + __throw_domain_error(const char*) __attribute__((__noreturn__)); + + void + __throw_invalid_argument(const char*) __attribute__((__noreturn__)); + + void + __throw_length_error(const char*) __attribute__((__noreturn__)); + + void + __throw_out_of_range(const char*) __attribute__((__noreturn__)); + + void + __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__)) + __attribute__((__format__(__gnu_printf__, 1, 2))); + + void + __throw_runtime_error(const char*) __attribute__((__noreturn__)); + + void + __throw_range_error(const char*) __attribute__((__noreturn__)); + + void + __throw_overflow_error(const char*) __attribute__((__noreturn__)); + + void + __throw_underflow_error(const char*) __attribute__((__noreturn__)); + + // Helpers for exception objects in + void + __throw_ios_failure(const char*) __attribute__((__noreturn__)); + + void + __throw_ios_failure(const char*, int) __attribute__((__noreturn__)); + + // Helpers for exception objects in + void + __throw_system_error(int) __attribute__((__noreturn__)); + + // Helpers for exception objects in + void + __throw_future_error(int) __attribute__((__noreturn__)); + + // Helpers for exception objects in + void + __throw_bad_function_call() __attribute__((__noreturn__)); + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functexcept.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functexcept.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f1a201d9c9caf8bdd76a143a475bebb1bb2d7736 GIT binary patch literal 15443 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 f. + +/** @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 + +#pragma GCC system_header + +#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 + { + typedef _Result result_type _GLIBCXX17_DEPRECATED; + typedef _Arg argument_type _GLIBCXX17_DEPRECATED; + }; + + /// Primary class template hash. + template + struct hash; + + template + struct __poison_hash + { + static constexpr bool __enable_hash_call = false; + private: + // Private rather than deleted to be non-trivially-copyable. + __poison_hash(__poison_hash&&); + ~__poison_hash(); + }; + + template + struct __poison_hash<_Tp, __void_t()(declval<_Tp>()))>> + { + static constexpr bool __enable_hash_call = true; + }; + + // Helper struct for SFINAE-poisoning non-enum types. + template::value> + struct __hash_enum + { + private: + // Private rather than deleted to be non-trivially-copyable. + __hash_enum(__hash_enum&&); + ~__hash_enum(); + }; + + // Helper struct for hash with enum types. + template + struct __hash_enum<_Tp, true> : 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. + // Use with non-enum types still SFINAES. + template + struct hash : __hash_enum<_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 + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0) + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0 unsigned) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_1 + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_1) + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_1 unsigned) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_2 + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_2) + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_2 unsigned) +#endif +#ifdef __GLIBCXX_TYPE_INT_N_3 + _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_3) + _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 functor. If not fast the hash-based + // containers will cache the hash code. + // Default behavior is to consider that hashers are fast unless specified + // otherwise. + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@functional_hash.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@functional_hash.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5643fe0993d7d35b74b88752d83870c2eb36a33e GIT binary patch literal 27191 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 J2CuVi{x5l$Z|(p9 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@hash_bytes.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@hash_bytes.h new file mode 100644 index 0000000..8d9c9eb --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@hash_bytes.h @@ -0,0 +1,59 @@ +// Declarations for hash functions. -*- C++ -*- + +// Copyright (C) 2010-2020 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 + +#pragma GCC system_header + +#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/@@home@ado@git@ssp/@usr@include@c++@10@bits@hash_bytes.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@hash_bytes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..77765e6fb049d109e88a67a641736ee0b714df6d GIT binary patch literal 14651 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. + +/** @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 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include + +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 + template + using __can_invoke_as_void = __enable_if_t< + __and_, __is_invocable<_Callable, _Args...>>::value, + _Res + >; + + template + using __can_invoke_as_nonvoid = __enable_if_t< + __and_<__not_>, + is_convertible::type, + _Res> + >::value, + _Res + >; + + // INVOKE: Invoke a callable object and convert the result to R. + template + constexpr __can_invoke_as_nonvoid<_Res, _Callable, _Args...> + __invoke_r(_Callable&& __fn, _Args&&... __args) + { + 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)...); + } + + // INVOKE when R is cv void + template + _GLIBCXX14_CONSTEXPR __can_invoke_as_void<_Res, _Callable, _Args...> + __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 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif // _GLIBCXX_INVOKE_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@invoke.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@invoke.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b606dd3cd79a273811059a8e564062ec155f58b9 GIT binary patch literal 19427 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 TgRlvnS+ZQZPTb!WDQ5m3X$Pxi literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ios_base.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ios_base.h new file mode 100644 index 0000000..729ebd1 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ios_base.h @@ -0,0 +1,1109 @@ +// Iostreams base classes -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +#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__ + }; + + inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags + operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b) + { return _Ios_Fmtflags(static_cast(__a) & static_cast(__b)); } + + inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags + operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b) + { return _Ios_Fmtflags(static_cast(__a) | static_cast(__b)); } + + inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags + operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b) + { return _Ios_Fmtflags(static_cast(__a) ^ static_cast(__b)); } + + inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags + operator~(_Ios_Fmtflags __a) + { return _Ios_Fmtflags(~static_cast(__a)); } + + inline const _Ios_Fmtflags& + operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) + { return __a = __a | __b; } + + inline const _Ios_Fmtflags& + operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) + { return __a = __a & __b; } + + inline const _Ios_Fmtflags& + operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) + { return __a = __a ^ __b; } + + + 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_ios_openmode_end = 1L << 16, + _S_ios_openmode_max = __INT_MAX__, + _S_ios_openmode_min = ~__INT_MAX__ + }; + + inline _GLIBCXX_CONSTEXPR _Ios_Openmode + operator&(_Ios_Openmode __a, _Ios_Openmode __b) + { return _Ios_Openmode(static_cast(__a) & static_cast(__b)); } + + inline _GLIBCXX_CONSTEXPR _Ios_Openmode + operator|(_Ios_Openmode __a, _Ios_Openmode __b) + { return _Ios_Openmode(static_cast(__a) | static_cast(__b)); } + + inline _GLIBCXX_CONSTEXPR _Ios_Openmode + operator^(_Ios_Openmode __a, _Ios_Openmode __b) + { return _Ios_Openmode(static_cast(__a) ^ static_cast(__b)); } + + inline _GLIBCXX_CONSTEXPR _Ios_Openmode + operator~(_Ios_Openmode __a) + { return _Ios_Openmode(~static_cast(__a)); } + + inline const _Ios_Openmode& + operator|=(_Ios_Openmode& __a, _Ios_Openmode __b) + { return __a = __a | __b; } + + inline const _Ios_Openmode& + operator&=(_Ios_Openmode& __a, _Ios_Openmode __b) + { return __a = __a & __b; } + + inline const _Ios_Openmode& + operator^=(_Ios_Openmode& __a, _Ios_Openmode __b) + { 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__ + }; + + inline _GLIBCXX_CONSTEXPR _Ios_Iostate + operator&(_Ios_Iostate __a, _Ios_Iostate __b) + { return _Ios_Iostate(static_cast(__a) & static_cast(__b)); } + + inline _GLIBCXX_CONSTEXPR _Ios_Iostate + operator|(_Ios_Iostate __a, _Ios_Iostate __b) + { return _Ios_Iostate(static_cast(__a) | static_cast(__b)); } + + inline _GLIBCXX_CONSTEXPR _Ios_Iostate + operator^(_Ios_Iostate __a, _Ios_Iostate __b) + { return _Ios_Iostate(static_cast(__a) ^ static_cast(__b)); } + + inline _GLIBCXX_CONSTEXPR _Ios_Iostate + operator~(_Ios_Iostate __a) + { return _Ios_Iostate(~static_cast(__a)); } + + inline const _Ios_Iostate& + operator|=(_Ios_Iostate& __a, _Ios_Iostate __b) + { return __a = __a | __b; } + + inline const _Ios_Iostate& + operator&=(_Ios_Iostate& __a, _Ios_Iostate __b) + { return __a = __a & __b; } + + inline const _Ios_Iostate& + operator^=(_Ios_Iostate& __a, _Ios_Iostate __b) + { 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 { }; + + const error_category& iostream_category() noexcept; + + inline error_code + make_error_code(io_errc __e) noexcept + { return error_code(static_cast(__e), iostream_category()); } + + 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; + + // 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@ios_base.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ios_base.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2b76f756f1154e7cad02b54c1fc3c48e73eb61fc GIT binary patch literal 66685 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 bN`JjwntED)!Yd$. + +/** @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 + +#pragma GCC system_header + +#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 + { + const __num_get_type& __ng = __check_facet(this->_M_num_get); + __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; + const __num_get_type& __ng = __check_facet(this->_M_num_get); + __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; + const __num_get_type& __ng = __check_facet(this->_M_num_get); + __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); + + while (!traits_type::eq_int_type(__c, __eof) + && !traits_type::eq_int_type(__c, __idelim) + && !traits_type::eq_int_type(__sb.sputc(__c2), __eof)) + { + ++_M_gcount; + __c = __this_sb->snextc(); + __c2 = traits_type::to_char_type(__c); + } + 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 (!_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 (__large_ignore) + _M_gcount = __gnu_cxx::__numeric_traits::__max; + + 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 (__large_ignore) + _M_gcount = __gnu_cxx::__numeric_traits::__max; + + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + else if (traits_type::eq_int_type(__c, __delim)) + { + if (_M_gcount + < __gnu_cxx::__numeric_traits::__max) + ++_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 + basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s) + { + 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 __num = __in.width(); + if (__num <= 0) + __num = __gnu_cxx::__numeric_traits::__max; + + 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 (_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); + return __in; + } + + // 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; + + 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 (!_Traits::eq_int_type(__c, __eof) + && __ct.is(ctype_base::space, _Traits::to_char_type(__c))) + __c = __sb->snextc(); + + if (_Traits::eq_int_type(__c, __eof)) + __in.setstate(ios_base::eofbit); + return __in; + } + + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template class basic_istream; + extern template istream& ws(istream&); + extern template istream& operator>>(istream&, char&); + extern template istream& operator>>(istream&, char*); + extern template istream& operator>>(istream&, unsigned char&); + extern template istream& operator>>(istream&, signed 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 + extern template istream& istream::_M_extract(long long&); + extern template istream& istream::_M_extract(unsigned long long&); +#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 wistream& operator>>(wistream&, wchar_t*); + + 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 +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@istream.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@istream.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..35638f059eb0b767da72c79a8a5fb79259ecccb3 GIT binary patch literal 66229 zcmdsg349bq7WZ_|5JHFnF(M+1vluaiT!auIgcvzOK;#UF2!zRGk_;r7Ff$T@>U{9Q*sfSKU3`lb#R|_xpVxzh6xr)m>fH zRj=M%uTyNlwcmF5MOl(;8Fc}FhPTFDRafT8aCh&X(IYdX)Ef+BcmqMd$5ovkbh~XC zmA-0EhO5k%QQ-|{1Ol}gK~EsaKP9y;f578Uch}b1?CvU8O+|C>POJC%r+I5C(#pJk zk2~n|H}q@Vk1Z4@nT9yCcTP!8c3PFUrfz0hMNOR;Y_%&`>2_6B1=1=#Rka>}T6tZK zJLvV*1kx*Qzy12lmoGNsA;E@PPavak$gn|{jnv7}p6sd;lW2Odo1S56UFE~L^a(C^ z1%f5zRX$fRgXgWJrmngavxh+zm3TIro>k>7_0|NdOi$Ams@&rW*7-dr^L7DG6=vD; zY1VTZ2$p$$B~{*P%QiIQmKTgT6bM$8xT-3ArLF+a3L%~89j$vVZ2)@JyJ{_;Z{4Kc z1)L3HQkpp>frdbayUbH=eY^S&GZ-zcmf5gR>T0~x>pUg3L0-jXz9Hro%bUiSa1w7x zOHva|tHV!?Wi#XCdxIXo3)`y1?W=KnYJ>c$jmBqeLCfX$RQYO~ywz7r8_N>?K{BwR zPdKuGfwV9oY6ebJ`G`{Z>PoB3`%Bvq)@UKNG`g#E2TKC(N>3TlD^N8ns$iT7-nO0+ z5VSx*Y_k*0Tv>@m80guJZf-O@V`qT9KFemtyReD8?h>yrz$CeG7sh+V1eey8H{)LQ zRm)v&Pcv`?7*&m7pwYB)zsFO8J>;!v)(ll)>b=&R#5i0je$KAVwgMeIP&or-dA|fYERv9Jf`6t7bytAUvdeaMF z=1PKoqJ);?4|=Pu_m1%)L<33%;j?^*dao)SSYW#GVb=4>2xr9-v4pi%gi>yAwX2Hg z)(nq70AfQUX~ZA3k@x~97zHSFxzAr+0;*Y3hJjnYS0mJ5%o6mYq@=o(n2V>xnt!Sz zaTBfZ2cwTh?6m0Dxyx$b3~OF#oLER(B{a6CmfLv0#)wU?j%|}sRW+kJtw)axf?0aY z=+PrRGrfntJS8PyI@shT)vlS~<=%=KF$u4on`ma`+9U`bWq3*RatFY7ebv>prjQta zyZO!tsi&!RsHYXQUIOZsNob>8rH;!pGnm1{2MYjQEEhu8iRrWn4I0UYjo!_)DD;9w zOWkI%uF(q`*9ovd64OFyJkIbcrhW{Q9dWB*$kDGG9%FG+lSB0dnos*dn27TR{Us+U z36@s{(>ya=RcY0pV5P5&W+mDJ*LdnJUcorI)t+i78Rhl-n3G!hW^I4Q6u+mu-Y+EA zMm=a_ak;0}yZmJtuDYPF`EnyM8(OYrayAp*2D}vkPqeM04U3e%ItV-1<%EOLxS$|% zO|1lNHLS)7pHrPy;i>WXz3vQ;-(TZP({Q8kqYo@e3%?ReS)Q3B&|2=1MmWo@YJ-(f zX3Kc~(jZ@)Sas2)Iq;!MSAg%2wxDI6(z=QaF)y0R+2~&DaS=-nfVo>vXQL*@l|s9K zs{*S9tcC_@=J?H`?7H$1jg<4u5$9+^91zsrG<-8nG-$l8fZOYBO5-)YpOAJ1{c2i> zg+z=!eS*C&sA`E2a!YD_HBkiaMssf1N6pzqZcGSf{}e_;c9y1vdOwUSo)VYajitB5 zeRcjY22#UL@HARjT}7m=#|n)3!Og;>FbbRyk%FG;T2e}yr6CFQYY3EpI#j7*TQuU& z_m&H-CknP$uPm7{(!%)NLK>|{2(xlBbEzhY^1Ub!Q@YPw`!0mfj;h@cEY=j zh}zW6>hc>Vzq#n^^0UpN5&BxsJ~JyCNTbQOzF#adaFc8hOz>+x?o(~=r3d%}C-(%k zZ+|@yhv&P|$knw}4Ks!*)a1$f#+FU(Qk1ujrff#Joo%mf8ens`f(ieGRRR`eYvIm# zFX0m~P)v#?LV=>W(`q5IdYDv2n=K|fK0$P_%SiXLe4MfKruQLRwS_c9Pij&SGBHRi zf@b?0Kwmz0#(`T{xG5g5&jp)1%>h&5SL9|0+j zx6RyVDFxGb@or%71_Mb1+cx!-L?zBn{qbDw`#J!J@~sk_Mc3?ssO2=cy_4x|(!!sS{{1#zs?QoOi*|yfxsr zP1;)B+VD=ggYMmd2jyOtEA{zp){H>-Q00zB@~HX>Zr)B7L(;B`9UA=xrUh`?1VLx4 z1(HTs9jLAH2BRZ&quDl)88>_ze(LQ0}U$YI4)NsjKMg7OaC`JNjit(&=?R;>SYxwL}8zm(=zt zshUxCsqu{n)!-1<5vfT!Ej%0iYdIqI!5A|l1!35=c*RD8HV#Ix7P1^zKEBDev^18j zj2-AZv`JrOqkf>$Hq#2DQb#p-#+pZoduXgDmML^rlon;XYE#aZ7BY?d{1&rroCAGz zbaQ`G(?$*qua%zKXp$Ifg=W{hcjE@pEh)w^L)ti@!HFM7zPS>P7i{XKM9;u{v%`b8 zj;WoQA;5A1HdY6P&r*}Ko)IFoO&XkdFlrbT`CUu{up)fqH*X@W$9fpi1ybWY6E&#x z82r^u1p11|T1bI383PwqHphNM$b^7JlqS_UiV^jDgOyE~4oPbz+fbd~??E`@2`7!k zt3dNf9gJhuRwUYbc7z6gRR--y3l~E$1uStcKU;sI ziEO<2z$qJVeQoCfWig|suC+_nxF8s?+vl6+g}2P73v$u8vGr5PbrCfZz&LN-ni;-n z*7$GzWOaO)ziHmGu!JBDGezARyNJ}|Y=2hH>i?IOPi1ueCuS!%SJemwW68}eDN&;V zIV8>5)#@G}g7PV(BtJjd>M}){sWOCkND697yV;6r6Qy@!-|ZBV9nyas|BbUb3rhW7 zPr1`MNSHri*mZ)s_?)nO1uH#%r~aJuIA;OJ`Z}HTET{8QXRQyn;vTv^d}Cakv$)b5 zaB2d$v(!`Rn&AmJtGv@ZPG1d5xf9QJ@@qSxdw@`Rf?l^%HNpD)fz&vR0ynvWPH)iZ zstWj=EclYoFF>8aF6nP@`bwuFq#R={bAoa4Lj$gAkCWMW9O`O-dw3%rffr$@7~7C? zyoY!N408C`VZ%~IL!K~ay|=0gj}JP_UEV5SH;n^UJMl=oB%&7SDFa|igtZuEYP1S@KnS(olY{9^82AbEJD4nu8QV(23F1Ep(oO_>4gGLAWHcCyQMmPe(K#-gG!1j zq5+8UJCkXljNMUlx2vwAGT2S5455XNH=+~jAUvEvYItEV#ZZcEHiz=JeV>nNyC%n_ zyq31%{zWSqCMYeJ7teoYM0HDLLfn&gOxd`7vVCvcy@|@x|M+*q1MPCZwuh1m_O;z- zuJ|V5n|7u==rWN39tlx` zF1Vq#OL&>+E){I3TU&nQifl%_M7$BJ{MAUr?vk6Upc)NDzhIraFaKs&v<3sp8XFz z((i#~%JxoOJAYLA>>Oq7OXob6kpH${$$xrY{pRb=cwBktijm9D{59iY<_h89X~QOr9vv;-)>M6%qizy5a6@!Z@uKNsEz!8SZI zYl)L#Ta^rfCWJzCT-0csbdK1grW;C1TXYU4l|Fya2`W(|IC(>C19S2jj@5A(Lks2ChG*YC*!in8 z<+Xnv-CW+zzD~LDh6U?_y?;2U^uBuX1KS4NJxIx!E6;zu?Uv*6;>5)rOyq7^;xcoE zO8=H$v#saobDk>%^Ab}QA+H1)YTU`)Y_XZKQYg_Li_(_q(V2EfsHfdPkH+A}Ns;1mUJr@svClDpB~a5-!0z_(R_ zBo&*VXioqQiCK?8SN?i0u{S={=nOYb%df@Z7Jh+L!Kz6%0mlnJ0n8M9CIE4zjN}2L zR^f{gkJm0_Qhfn9qsJK`43+u7s)=Q~eV}eU3F6EmNkux>4bYzFf4XFm>hzYQ^9C_Y zdLs`U10c%U16>HhhcHCbO5{d=0=+WPaJ+N{cbeRdndX@>-#lb3Hzw zb5zVxSpbf+_~C9UgYZRL1P4d}(Wq!Z`l8p>7_RVgw=249{6B1qA69;D;oa(A=Y2w% zmDGAnLhh+WerEaBb;FdT(L-Gi&b+FNa&NCkFYNx@t3N4iJ57$;IYQd1 zEGd{gDDRxB?w2dFXt_`OEbF zlQSlrVN(ZI_S^W>HLEiQoa(^p5ZW9BQ7)>DlR`hru_*1BDF0V>gxVO1@>n7kB~7qYXt&Q#1P;&CZtf-&6m{RI z)Yn@R#}tk=Jg^T{9kV30N-#3PBh-ITL;Vo%a0I{1S=!(nINF($$@}l^-Z!oK+lM>fS5}6e{ZHMtiiOI` z`(Pu=M8^kj;GeY0}q$Ip)Hd0F)b%4B}X%N_qb2|HN*5=mJR&jRB(_6Uk^xu|Z0$8SU7E zf8RFkyN750j*U*iS(bJPn(VNZ@b_-^1Szx>VpKY1iC{F;ISC^WZ-0XIoQ!~(h*qWz&l~PQ~|$ATr6jD{EVBdMp#$}Nk(NsKowI-7)`r?Z;wJ{j8@0+LNOH)ESEVW?PAze)q$&8 zpMi(#y+kpT5FKQad_qb^1VdeA%nDl^@v^F}#OjZjK!Y~a4F*xjE|6bzx_SW#B2AFq z$YE$wy?9UY%3_f$-j!|8CIN&OTOV~K{REaIUkY<-b#1Ugtf#M>?Bi?$#;Ur`-YA7#i> zt5d$PAMT~(@BiR09ly(6qAdOQyxH#CK3=Bmeti2ycQz!aDAS8_linWv@U6=6ho?V! z<3j__QW_o|xccX+xL)?q1}POK)1+~Ro|3XrdYdb^N}WPmC8wz}Mwo2By8q}S>u-7F zDJGZf=~Asdnj<_n7ora?z^z}(|#kHb7CBGLNSi(30B_f z`=s3U=(~ew_`E~_!j@WJAUBsZJQ7I-nGN>^hz(AVrRZ-rTU<(8>PGF&F|O@6C-?NM zJu&pGJ&ECC_V~~-dnbn5Iub%{9i4dunrwKo2Cli*2Chg;mLv2YgwXfoq1>@5kTQIw zy(o00UDVG9JYT@d0N_6XKuby27&xur4Eq1Z!g!~Ve$YG+~= zR+_!0r5hLpc^yc^7wU6UYCAR)i!MSxkEWhOZ#S5E%=$TLa^K7u9Cy%O(xBWm(fM<` za@T*A{#m;lmS1$;W~F-m1&8j<-quMD*}>!Okvu*DJU+pi$7{|BFn3H{YxmtplS8CGoy46CLDhE)-WVO8>BST*=EtlD`QRtW>cDm`FWB?An9j4A(E z;&FwXawX6E;oHw>WUR#29z-F{! zC*n6b-Vq~!%{n|Jm^oS~aodhJJhlJ4QA+ia9&6j(x8y@5@lUrOe(}AaSNYf2hu$hl z_}HV|^Z3yxTR(h{!w#;>oK?~IHQPHZD^(7t^Iy6%-cE!}xy>CnCatynLaEPJWqJo< z$rV0dna%i zP)8#YNATa!lb{z*+S8dvJPr716+Qs?fC?W1d`Q5`iWmFb{qymjKf{q#<#of}9DS)s z3ZdYLX3-365}Gtfy1oD~upUID-OzX`JvKd&2uP}9yn%S|#?cP?f+!#ah4Mf_7g99} zNl}Jq^f=Wm-!+9vEcrB7i`GTA=S6AR($J9*#^<@gu!8maV$BTl#< z2;XGLufnC|JWq8#$=tqau7P3 z1GcC>CJy_!fQ+LUy!HfoBd?%X*wboUhj=;@M!Y+&CwEKBFR!W#R3>-R)G(qXq8)j? zgf~vSq4p4!(6UN~PI)Tz<wc@nSkf=k_{P_duzxCRG?52h#|S1|n!? zPhqOt1bTrv0NDwx!nmZpk-))H56%I3;J_n{V@xE}AeUQ9MR~brmn*yp>lG!Tve@?Y zuUnO8?(e*%@~1ubD{J1Y?AdkJq!i`8tT~&`n-E;73?5tbr%78sZl_FWQ9kFBPRq}0 zN%Tsmc0>S4b~C9zL}+v>Mt2a!F;x()Gd+XkKGQQu88MOBRzjy5`r3hWyWM}&jaHyPC&{|oRFx;9Dt}9hU+QuSV99P>1bII46uph;PGH-9HH??u2@8 zq>(1l2>+!)(}7J0xz;#j7Z1@?A-F~2oc*K3*%6U;;jm#DD4a#C9r$?wR;N;2C+|w* z<;7OJw4BDThv1PY5*dU?79`#n^ax5EOB;m9g_=27dwbAX!@f%fg&|)lZqz-cOhM@> zKo^+Q*lfg9$c>R0eEGzUHNj4$u;y7Ld1T*+``&D`{?H=jO#cUa6H^jvmDDWvH)jS8 z4OZ^6Jur00D=90KS0--&qsiUd0&+Xc?k2?2qB#^TvV?^cm4lo17T7qma&x7s)0?)G zD!F|3==Tlp_ZeK!c+Q&_1qx_@(m(jV>x_-%c1QM{w{%U@B!Jt@l|Ulh45(x zLbk$@i85e9QZRZWlAgLhhMuZnwH7%Rh1G+%2>zZL#w`QG2wP~`WmpZ|fat-91aUul zu%#YYhA2k98-ljBg@uryn+cgCpS)p|__!LPN=gD`0gY?Y0Ci<$j_R|-*0%I-V$ZPT zaf$%}7u<8z-EZDBe2CI|%$eIJq#aFHY}WWpB4?)6&i^}ibT z`Y;N(C%R5YA2f0*Uf-}KN#-)!=*_0LA?1(^8#4>ScvH+a3#no0oP}vP(Z$Y3WTYG7 z6D8i&f?^DWA2+!mDU!`zk9|@(tB4KY@rhljZ(N99c4hdywNu7j^XnYtzGEqe&bf8z zZe{s`j~{eQJ>xD379q9@SXVIYZeeE(sUwd-5_%OA=H{t z!^+jJE)I^cgOaI(H+jv%l$r>tnNXK`5ar8O5ilWKg<;9655K3{1)~J;*W_cutU$36 za|84OTB$*UY5Cro5|%hfEm4&sT)vbYX)x>{ex9RIE~Q5O`q6J%5BNq&=1{FpG;Hl*#)Oad$rTWxN^xh3b-gX=)8QaA=w!2w9v5Z0#f0vlkfrrjo=r?EvI0Lmb2ryVgvI&TARaz5L53ORQC>|BBgdUPhO7Pna zLhlgx``AaU3)A#0vb!2YVA@@la)Nan)DQ#t)MHUuX(rR9)GYrvf_e=?HiMiHx+v07Mh5P}TrJ&Un~rjZ(>h1iUFHbhAi+C>e~Q{T3^ zL3;Y_|6hgawNTbyecub|H5DtAdfrzv-C zJo3?U_xFQk%~fhfN!58|g_4V(eW_|e#ozz^hgv5{xKOPVFN5a2tXd~t0{lx8)(Oye zB7o{9KS?76lS9*aKpnM3go#nF16lun$zD-ctCB3UA_(rUnkcXtt0^D@+m!YtE5D@I z;q)B|)InA01R=+Mgrz4STqt0zF7^D9kTvSPWkHx~>4pmM9x}Or>eo1tp2WujGq=_5 z((ThEKWGmob2N=1OuzA&qG~t<0@|s|Dr9G6S%5+&sWL@vA0}zcYRFf_?+1GgMgj>$ z_=(Vy2f2&b)=e$1%DOl`C%s2{R(j7#89CrV1I)^@&NNsc5vp^u)o)B!Q_+t&+eMRw zxuQ?e&}jJG(Pfyj(hXtLE)45##7!}$7prA<1x9~{8ktDB5pZTQ-ILBMLX%dEB_qiU zGb7d}la~-f0m2A#J4|pqG&9LQaUhV1zuRnaO3KJqSKGSvnx|}2-Y9(Kyq-166>H|! zR0sduPdSqO)T&>xayyiM%^+cQ5mzoHs#qNXAD-Bod1vf?^8OwuDo*dC+p`I zKNwPG&uR5#Vf!5yDaQuh^xe4rgOrwtcHxK@voFrFQuS(^2prs2?7A}BzEmHUxl(n6 zo13fAE>>2u{crwxZ0U^`^gUHR9$lYTV;xP@*kGkFgfK(v&jNeTLQDY3j~QU^HAeP6 zP&hCMuXMs^vhvm-)Xz$B0nJdIA0`d$q~ebUX+eqMu7&gu_YPdnK*VaNi+uf&RxiuI zV^#HWkyns#`p>NV@Z^K4aCSnG$uJKTFF!XIA2J~wN|?$>`ZJCKs)kMgw7qp=gPC@x z+0xKBZrS4Sa=3RI3iiIN@mI8Va zAK8pFOkm#+@1N@&>G#bb2RVHg0g;)iNe&V^9Opq&Bh)kRs@$i^@o~;%wwtRdkpkVE zh`K;vYgp?VgJe%-aE;~S(HJs?2(aD|q%8mWU_0-B zxi`H0W1G*cb~03*=#gSUPgPX~o3U`5r8fkb-l`(k3yRzbqart04PYfkppo`QdYmRH zN7LY#Fa!0?8k;au8EsVBn3L0bbR!u7iEEK9GzcRFwZvIPqr<}3P`5&;+MchxJUKHJ z<4yI}L_Yzho4a&<&A{iwyH3}@bkuK3Ut~bCDIw{66yl=A01@lcQ!wqRqRmzjZ6*-yP9vfXI5~>} zdebcifWg=e_5$4(h`xniTYSTl951kEVH>N*@G(52ApJY+3xshcCHPGRm%|(5vFv7n zw5ky&M&kc(j0`Q5A$P{P<8E4(t6clvE@xkwHuhfSKNoCXF)vVbp>lY9%>|Er-*1t! zb>)wnHacJ2FC)5@BV5g@of_w7LEEM%=iWMb;+BM}`IH|9^xVlg_|%xbd@xh~KVzIN zHMN7yCWRc1e3WrALGc8ULqqw~hU7_;|6S7aSHx#ZdKi_ASg8&unUFqW9OF=G9Fp?X zkDtH1WA80}v_6F-qg(14M-);7GRPq%mlH!7J=#e_ksY-t%P#@YQeAg=#35jOZmFG>fA9m<;hsI&)!@DMd7v zzO+cD$OkDo)0)2Uv#+-GAEr91FgO~a9C{r(`Rn$sJcdpf10bc<;|*)eJuySHsXQ_M zyl&6OQwV=vN5Cf_dbs{BV$n3wUxs|&5hV+K?zE3bsYRa)jxTNKbKdx?wLZgdEkaNY z!m#FLvUSNu?79?s&0dUBhR$C@=YXhl8+9s&)eKF$kVCuB`!0J5dj9}%upihvqxU}# zf3ohL^xOqn@28Btui9%vui6QFU&UAe(NGjK_G%iB6xxje?6#+40PVXk?Z5iV{oT}n zTWY2KV^oR@y=2cu>5pN*jA-|l?c)J$0cF@?9|!1F`!JLVfL=qO-fQ+eK)aClVV9jE zarfHWqa*>^XOBba0O%7;!zcD+K%e94=X6zB@%>jVW7pq(i#0w=x~kU_BS}Ib#C{nW zCSJA|GBg#?3_x4#y-^6oU&R<+wG)bO1)^=`{$95y14RhgFWvCL9g{8`wM?7#@S>X% zPZ`#p3^pQ;-&S0V=y55u4l};az6dkE4l@pj=S`rT7EU3B*5hs0^Gw&adaBne2Xj1H zpC*;7xpZQ!ePU>>o#@0`bP9+%RZMh3##qu(X#VfBcSgy@8~6Tf*{4TVk3CE4op&(@ z)sGPjU+n8fa)2#+bb^Wy%D9D36lC6hPX4c`kaQLzK|m-%0X8V_72UVtmFZ9a6b+l? zPy?{3fw5^8pjiYd5AM4Dt!r&FYOPlvw4wov-oT4K3(zcrl*KiPXV#^hy-9na@DghK z7Mz`FEEErw((}F*ZzJA80BP&%M|K*gBXVxCtwAU8u5z|RWW9ibahccVJ%oiXb~o1E`m=gsPKPJDE1 z%CQ%s$6~a<7}#_%VUu6QR{f8pXlXud$^)bNUi84>iw;D8;sH53bU-F*_XD6G2vWvA zab?W&h0C*}PWu5l35|#-{Q&3(f|TsJ56*k)gV~QnZS*#7eVZF?1GJ4B#Scu~S#b21 z?$O2vdV*1{=TQYa9^aX0yz2Xo;?!>%k0q_>S(0)qNOx@&P^9i>7CVJ#LyXd~RA%8jy-& zz#Y;Qc}jvqx;p-9Fs}#WAH?s@_?`IuIsRv2XXi=rCjBj>v;xoyhBgA)$j}ZzI~Y0!=omxiVvC*247DGiehf_jG=ZUO z0A0h-eUOmuV`lI+ptlJM7!iQr*5TYpdL|M5oVR|gQIGA>?Ihu_Da`|}`Mbk5SPNViLuGy5NRzkTJGJpHw36$ zM=r2PxjEs+lCOFdY>P%dVlW%oC`8`YK$u%&AJ6kpgn1xgZUYS18(1daU>^=>BI+JN zJm@1VtDg7e*moYE+u}bOBY`Qj1hx)cbW!yh(yJ&slA`$aYwC!!Q$P{)1ZGz8EWv%| ztc6a*|MZoi*SG5_V)P7NdcGTbdE0XE%0(R)Pr|RV=*5?YNqru8SSUHrRryngGkVa1z-oxkPayLzQc;#M*-PrIj!>vGnL|>B zK-Q$+0-HC>JJKQ1Z-MRB^jn8HB>F9|y^{V4VEQeveUknOVEQevg<44IDEPkyp)Lh= zDO{&Qs2hvAv0SG@sJj+**K(Z-q3#*fJ;QY>gu4Bx+s}0>gt{(rItulxLa1}2&dqfy zgt}``cMaF65bEwi-CbO#La2KIbuVz83Zd>3)P2HrDug-*r@DJ zg{Uj!Iu%0QG}KMwIu%0Q&8WMX>r@DJkE8B!u2Uh@eUG~DxlV-&Y)bi-v$HQhdcB1v z&}h?YyH}`xV*Lp(&$c)VtL2ljNQI$gz_7>+s3!z$d`w(B9UeXlpvP0{VU)VrS~pVb zwrM@??;n~6UrW7n?vE3GgvfTd!(pgoN8*o=(B_mnqND&C1ZWULg@6hfD#H2QA_>}S zD2Tcs*VO^4W2hci>-p;4QgY~SsWy z3Ls_s$m<`enYS}B3PG14Pv)QyiM$x3{bDBVx6Gc_><|SeR(CQK*#y2BomRDmjW^rXg}HJBFc`iP{ zqTUla=zNi_N%s8Y{5(A4BYRgA8biFJ3kq?8n{WR7%=rHIUZ`=cu;M$!m;*Dc_yVGM zbfe-syy~`j>pFeZo_6~=;R8#0>M}jWq@IvX&%&!8iq~__>FILxT%mfJ2>rm19yG1{ zowP7rJup2SW2i^x=xMd|EQWdrnQqF?1ZzafUjvC=s4 zx{mFCInaM*RGdripAPn%mYqhpmUh{i0~^M9Kh?N-_^*;WZNUD2KXOpF*Mv7tgwAiY zYwMO!y4%*JKaAY`PZxd(gv8nAu+ku^~V9XcCSxGY>M=nfB z2|lnx+JXsJBA2`n(NE=+<56G&<$^-)gvwyBHa8=q!tGASL(+ZziVPorL9)!}4rJ(i zDTDkmfnZvhZ)QVjAl931R@ zX-R2x^Wj0`8kT;1>wlutsOfScggLU|`C;4gvu#T=Xd66ECY2GMrx{*<5b-FQ2THx{ z3p7$WSzl|dTN9ke8vUfTl8Z3!qyVx)so^47~&B9fr08+Ro5H zKnEE*1n3Y$nTR#Zl&RkyfO;@A9df~R8Dj&Q#G=sErGS<)v<%QPhSmdG&(Pa|-ezbU zplu8t0Ca$%9{~Np&{>FcILl7Y%YjUhLrx-y{;?=jHyY4rhQVJR)+WC3y^A7qcIz14{ru_QjqTO#Exgol}yFRy z&{VJZlFax_=(3pwnIj!iPH|3|Ln`c8h!?pm^)l!;BT`4;chta9AeLi0j0J|c-1ZW*y@cD2LEACh_6oGPf?He#=qiRv(YBP^ z)}U<-x2-|j8g9D~Z5MLe>(JslZm}59VuqHW?GkQ#JKEmPZEr{0+qvxq+_!=6drHbh zmOjjA=sDCq$90==-)6pVtJDSQ`Y8Tjw-ked`NwZA3bptcBlws{@CDj_!EL_*^bJG5 zUtmGCe(PAaHScOxYt5|zm zCFcVIZiengi@UkST0mbo?GxPgIrR1%_qG}LZRY#70NTP3rQ~~0o`C1= zLfc*3b{E?2;3@tw67GDDTk|E@jMqX)ZdmL?#bKB!+dz{J3uxwmSxt>(7V0ZnIU zHf$%eIqZQF63*x6EyD8_@$(kpd5idYi}Ae0{Jf=j-co+v3Or>6Kjk(+w=wh}+CIo_ zA4J;+x$Q>y1~xKR+6X_=Mmw$QlW>qf$xid90X@yoTcC??vFrCOdjTNA#4j+rU-0Z6 zzG3 z+_o-h9o@Wc_=5KaXS}}XcfDxi7o6qf*Nb?;*5MCO>8YOeujA++ywP)=YI$tJxd8NV zYVBm1o)TXF6i4fKJHHFXA~YBl=D}=jnua7e(|C?%pl$}&t$_`BjRZa!+KalqT=yI5 ze&f14*pTyNy1GYBKp~5k0!U%#d`MpBvlVIH*jdZ3UU&03+T@8DS1qMv+UeXG-@c*X zqAZkw2r z(0vR&AmxM}U>DkY?8xL5Ua7`hVC8&}HI$5pZuB?nNQoPtsSXfB>Im!C3M9u24x zbsx%kC^VBF0i!=+&i@#fl+4w_&R3h)h@ zU=j*p-X(FbtUvJcPydRBdE_I{Mj^aYMt|D-6X#Q}>Uf73a(}U<)KAg;Le}qGsD5Y4 zrrT=?>EaaqgD!e@dOaz<{zWeB+gjl~&3bxfJ^hP*l3zRe8jmmSv_ZWkrGzfRoR1{1A3KFAV3DjT7XueV!4`?dtUPX&nxy5q19nuXEyW1dlM1k2I zXQn%#U}GplH+c>}a`xDpbQ=#@lvP)>u(#^24?C?~=8$$nAe_-JJkK4y*n0E}&vW}* z@jUv4=ehkWfaw>W=k}ifrr!ecJhw-||1}78DX2@~Iu%0QSk#T>Iu%0QwWzz6>r@DJ z&!FxZu2Uh@?MK~yu2Uh@bpiTzVHceWq0WsuH`l2U>aIcEHC(4csJjbwcX6Exq3#9L zy})%Ugt|{q_X*dj5b7KdL>wG~t3s$tMqM)3sSxT4QCG-yDulXesGG)hDulY5QFk-f zsSxTON8RIGr$VUv9(CVyoeCA$lmok7NLbk+_1CC-Ef+g1m-kv4E zT(9jPrq}qIbD5W79K}8oA_*nzv8DIcutk})CiZpzZ{xmZavcXe&O{lAm0v0KMuE}uTrv3Y|`0^lZK@Fr%RZ-V{3$ztwy5Sr~I zWa?cSD2xg!7ksp;p~97ZEE>&_VN1$J0nLCdDH{clQaLa%{-fCKbE8g~7Zc^>DVqvt zDo@#;?)2Z^qSyUnqIY!*I=F?qx)so^+|^@qTP_S#R85Q8)j@P{kh?kr=n!|M1;|>w z@I9q3oRgG%moMt`GC}V%WumM-0QDe9c`NJs{nhFBr$irmCQPQ8GR;yCKs^XjE-bug znsn|vEu(fdUCx0SjT-sUm7lwMWAi;fD#`0Ui{91S=-_Q`wGGfV?yCEsKJ(AL>x|V= zyIP74mhxLI1GJ30n%d%~&V{Lu)kp7YDLPonT`dE&jG)`~w7Moyys@~B#Dv}&TR}lA zNnQ%nFvUI&?r4I^tTs+J)`TFOIdF)?k1`9_W8q_ubr7bvbvRJs0iEgSh|&dylScHWy$ecjj7X5Wf&h)g z9@+!pevds1y?zQ3_^G`MMsgT4bJ(65FX@NXPX=jUwoit2xSWwzSc=O{NZSg=#R({- zK$Y!~thO`K?6e25MsrZN8>q6ILrK2Hx_!%f`~g4*7&-*#5JSf>bI0s)Xz{bXBMPCp zc5p#MAR~I0+PZYnG0Sv;5g+KIpXm&g)>YT4J77JQay?JndUUV{oY{DU12VOv{erGIDV>L{ZCfO|qhlYlQ0A+%LkB&HiEOUu|gaVTxE4&T7` z@(sPKp7E0SCW%%+0OK(%O{1snXL)n0E6UT=;1dLmSHz8>&OuSc`wK#5DlVyUSN#9|p% z1V>GwpvGC%(^3gtPt7YwkKAQXMajX4cVUTk*~goRlneqj6b0HNNYGFeKzdfulfmpY z!0a_DW(yCA8M9+BTN6+Sv)9AQw4Mp$lNi&JjImDxdYYkUvBuBZ+u^?FfxFK$?rPE7 zRywSjc~4#5oSgU*-b5?Qhf5JMMTxU%o~}V(*Dx^`@zn)-to#{_n+veQ3wVXKgC$no zXva~2YyfS!xi}g}$4|9OEU;A{+DQ)dQEMwK zjA`DTcxQ6^r{(J#IWiSjY8*NE>7Rja8UiSvgW7?mQY-N7Gg1j^dfy zzJ6roZleg;AxqARFObUO$`T8tYhtcxTOe(S*?`~OF}v~mYs|0s4RwY~ptD5K06+s6 z@&ocSbQeq~cS)Ub^#jy>z;(w_cbx0`z|`MIrmM4I+@3AdQ*Hxv8$(Y5dXk~tfOa$V zE1+K)`V)-3f3j1H0zd@}O$IcXp=$wM%g{rB9%AUo0 z61NjdhTVR-xj~GG?mp@j9b_j(8xrwy(>;p2{Iv0RAuVBN013O$b_58 zgcfobmau-WSk@6*V@HX^GU2*2h-KI>4mj?pkXY6eU-;`Okyw_Ex6PJFEbE2c){FE@ zrE=#@yZNe9QCg<{b6(SbH|@SNpUPHVorWZ{Dp8`%gNL{!Rq&kU~fYNdz(eD zw=pMg>mt}TFz9W}ptZQ%)3!RtGLKS*b@o7C)xl@+VGxei#^en z_k?yT?zFFuE}8D^xDyM6(`)_Ba?AUP@6!TlpJe{y1~8@Vluj}osOxPWfGf^LLb?{o zqJEGC->QHd8yA;={rzEw4>9x)6F%%(N}O5V6Wp`FA$`>Tqa-L*@_1I|828cF*{{hE)UStc4q0{rRIyJH;LFi8+A zi^0j?7{?MluZGYg;vMY}+ujjF`rE$GN3~s(<7(E6lM+>mFPz}rX-41e|L#b7Z#dOP zn%>#|e)9WpHtZ?g1B&{!^J`d?^)HTFb@aP^br3tAkKJy8-MI*aD4_V9;}wfrrCber^G z#|MErIJp^t^$#UJL|Ctd+MhN;fY^-QDE+a1B4%T11etcipW~EMK&HFF8`(|n3NoDn zlU#~ifbnQwaBs{SHAZGWEk_7lQ-P!es%mbvL{=?W97fJS_cUP+N*0noKJlc^C5crV zb2s8WHYRNRi=v(WV-fwagvV&ZYG0&>kjKNoX2s@|?oGZoolxuE&iAI0^T7@g?PO+!Ew1fO93XM>EK1 zh$l|Yo}5chLriV19)inrRZ&=hvFj&tt4Mh&DXCKDc43Ewon>iZ!oto0CWP0Hymp*J zTG44m7Z5`2)LC@gF^J>tQi$SBAdTr(62r}!q0z+S#LPG)5=@*BzMWE~N%)rG{T+%z zp2-VAPA_C~s`>7kUIU`6Hgyfo!5W;Su7PmRnb&}x9*Y8nOh1v=teGG-Q&^~)ORUCY zm#RM2CCa|GG z90`w*$U;{^4!VlvAT3(MYAlU-C$kXZoz1^H5^-oV4Tej7Fl!Malw*RIQ{ zoQ;H>G?Ietl+W7@?KkMZ&*9TcNbKhp-{BGNt}rnvuMYBOwj%4rXSr-cD`E9H)z(BV z$CRi~g2oYRlWkH?Wlj)d)6UFCY}H3QJc_OQXu_lFR()*bW7w)Mb$AK7kg~4(r&rB* zf1M`>NE*ke$?PX>t1Eym)C@`ZD}(O5cRv=hL6Z@7|QX zz2l|N3O|F1=F7q_@%v5kH#y+32{@6KAQ99PP)~+R0hKbe1ke(Oo`QkrDFn?UrUwxp zTcv@3Rw2q_l{^JdB_e(*?FE3A0$R$@M*C<)#L?9wP`8fQ(TAd)01Tt2Hc{|BoQh9m zN9GPF7>LLII`%^0-sjkd-*4n^pmKkk_$^TEJLh+#YTrEXe&_1MW7A89j42*H z=+eteiU$n9M0U7@|3 z_-=%pTiP_O@1~s+VcpE_nCp}&HAI1;rKUIoBXaaB><0nkl7dU%O)Q8l0J|KNKM0Wk z`T+v<#W+oNiAWuc*Xv|ajb2%Tw++XsO6Q0g=di*tX>hQV(nm8WjU44$rIc}$aF0JB zg!Gpp8EelhC&)t}4*8-zx%4rGdSueX;W_&lW+!JXEF@WPBj^K&y1|>ZuC$W67V9Wqu(2tMk#0mcp)Up22018J>Z+&_@pJI1|+ZG&rha1FRcpjCqzWr+|)RH3ncvcS4uF89M}9o5l&Q|HJF10 z#aFWM%{v@XqAxS@hyTh_;~-v(uRb^-Z+p~ys7NIW@sI{5uEFC_i4o&_#z>xBL)k)0 zJ#m;pdJ~jXHaTk=HP%I*fVr3G^Vi61$D-UG7 z8DU#;Ta;9YNZQfj(?*~WV%{5t6dw_K9;x_DfZ{WO6`!e4e5SJEGYyK*G**0Ormkqe z^e>&Fe6vcRke0KNWpmczt@e`@*$9+cZU6H@!p~GGp z>=NxL_34|pMX>8FV!NIQ+BPdQb}*TE6te669d^CHvt93YFq+%huGeAX(p6vIJn{a< zTvnvpgcRYS6xBd~o-AW6ALX?bR>qxjW1>4l#)#*r{MnvgkWcR1kKn=ki2cypfJ zg|UUO_>9UL1#Mt#%vjiD#&sE&iuKZRn(_P?gc8`t5CxxJ}?PK{L z*l4frcr|Ra$gvk;qn(>LmtIXvml55X6BddEdm|?kncHBNpE9KhBUkixEKnQmqZ}Xy z`Heg11}>GCng{tR&ynZXbA^z6E#-H}r$KAkSWX+dB=wd3q#mKSuSiGo)l}iF0u(@?43oCcy@mBy|Log{xV7H6K^=`RY)d#2G53qs0i+jgUHHurA!^ z;`^#mSIzg$1vHnh-h`_+@zuYh?(ckcos<$R~{K2~xBZ3|7k$*0$Bq2U}hq`Eo#|%250&)uK}h{s@J8kQ78z!~)=@mbK`# z;iWs>jj%`@MV?}IbX4@N0OPD}SKBFGnw~m62YoMp|DK=zG5^OFjm6Ezqu~h%S3~>} z=A#RvB%^{8k85GlC zn=qjXqj#7znp<}mP56D>Uc*E2;S82cmnnTe0!4lVx*@noVS8UQ3THxeae-t|FHVDul zhKfMxikMnmDUZWBw28QS6>Oka(J690p)y7Xy$zp|vBk!cMMeAv)0Ni4)}%{!;OLx8 zgbNN7-)6OJ54*Vkv9s%b=w%V=evi_mh5TG54HzPl1JN=Q~c#C8V|{Vmziq zdz8w>J7gATmc~n?#*ZqGm)xV>aK+3YJ|8Ze^~2ZWcSrFKTs>BN48Mq6EJh*d5rOae5Cp+$feG4vpy2N`Ll~<>^QDI0i_J&agJ1lG6T>8%;*9MY*(2#^45&LbJn-{ zpANYYLoVbY7h=eT5kr;{6h9h;q=M0aM)N?=-<|ltg%{_3jXkOV>o6>CSnmQH{;$d^ zkp7wS?F3yFXz+enYW%daOiH8lW_W#seD9(Di_>XXtrA&olHTpf4G^5Nmy* zOl`{nl{2&m&?1Ib16s|{OMqTtXg{F+47G%U+|o{My94UZ&=5dF7^(qO!_X~&Zei%3 zfd0wQ4}g9kNYTh73`H^D1&(1-Sa5_uzX4|m++@qa$^9-U zDVV^SK(Luol`aelxpR&*89TEa?>ip`j`>nssOnmp?Pe|i>7sRgAxrg@$z$CYvQ%HW zCSs)r%EKVdkHbK(l&7Ff#f@H*1OjA%RO2`dKUkbH&r&fe2SEclGMR=3$muBAz$op* z9##WCJtA2>M6!Ao$;2l(B1N*95Xok;NTz)UqluSWDM1u~072VD9IG!@Uv3>D;MPea z@p4-rQ*B}6v6hFz>g99Cl<5U!TeL>FdTm z`cTnb<2LBL0RR*NhYf{@sg?!%^ohK;L*%`kMP8A#%`Eb^fCa~iLV>tX!HoEnlm%!j z@^oyKIs$qf3-vk+zi(hOyg{xXMa#l}+GaFDRlf&4-NS*DB2m6sRgXbRnlcn@X%O== z6oMX*rlKHL8}6wjloZVWdTAUAvFDATTN_EXP^K5O(rS*cSq;9l zT8gAr_ku6oOWX*dMSlb~7a#XM)x$u&KsL zd}%0>ki8FdexEmD=N0>_*WR~r;r|p7_CTQA!vf_V@Yg*N0wuW#D^dJde(f_uJXO|W z$xnFLPw+buofSz-G$wKk8~GUf7g~dfv}Puf`e;Sb*9XUqZAxSH;aGUJ4_~k5UJWFu z24SO)Q)?+SRV1UpKMEJMBM)E_3i1-*&}&ze6hMmsEhb3OzH9Zz;mA?o$Wg`-@eQg- z961IYImS4meK^1{6TdS`U=mE%li0H@G98+2Gj_yO#-mV>iy!i}pPg3$IIjZiy!z7v zHM7t7;o)0oF13G|L*yYiggRUvj$dz_w?lzc6IX-ZTVrm;LEAfG?!fOWF|XkF^_bW3 z`$^0v`28a03;ZJCQ49(}ae(3&N&%F@PzIn3hQ zLoZ?$UzEDw$@@{apX8S%+N|eD;atm(Blkk0{uV~Sn*A{$Q@e?T&v|Bt9=E?YAmND>_vzs3PclyMHBIr9;dC zI)gZ;>s2t!UB$XiVuwpQtb63;`4-WtCkkR6gXmGWubKl-U8RT&B}YU70x1jFdr|=F zL4h7fITCL$jBQ>E9c1$xE0A(dp*W=Y(HC2NxCr-4~wVQ55JdhF#sR<>p&HE(x zftwInP>1WOSSe~k&h46ulZFL}1)cB;S`tvJVg6ABU=Os?Ju(@{MQTuUAQO_H01@_* zFo)EN1t>suMN1rLHO{aKXH={=z*@2aF|Q=Li2Q#!5&GLR@E$)S!%?As>gV(!)=D7O zN=7V^xH%HBRspeAF=DL)Vy$Dux)+FbFC&)rQBAA2Jw4=ZBLwP=EKrM&Uq+I<$G{#R zV}V-x(&ryHmK7Mw3LcC2BxmGUZoyb?;jt`G?wvI0;PrD(-#R^kb$Wu=NhHaRT&L%- zPS5c=y^3{umDlMttkY|}PFq+0xM`#F#r@F*d}D42Sm1wedKjd!fgugQsbsG3`cF%i zm>ca~5#dW&Vs5m@LPUKkIwSh~{tw-=<(cJ(Nho)e&oLjF zt#DMtV^3?}--|w01G7F|Hp35Lbo-F~BOd}?K5XP4`ADt;K_lC%_KEl?MD}FjGj=1k zemBR~i?7X(SG14ai};KW?5W6!hcH@XxJyJKy8mm#vu_{l{8d_@62~vZk>Z2|ipy+B zZD4h;p>so)I8waAv4V~iYag67%%@prtgE)ArW(UsA}^D9*nG6rTT|kif#Yj9)j2?% zzkpPL4^nxY`r6ccgO$(~^kxNnFk_tVGQxVU~DX?~GpMSKXX?o8vSu{J_k$P6jl#s9;#+{L3pn|amOj_&1;Xr* z-XJfJRuwsKQ&EH>FLK~!MR3E9V8s4NhTUD!zT|B6@YBP6c7WpVV2Zy3=A0dk%sD$j z@pm%C*S@`Jz&g`mO(Z~6zu^mlc)E6R2pUL;ZD}Fc(n5`FY4MPTy1(!j%8Bs6-zti%j zL5%VZ^#RLnE4&R6Vyg;Q;rG?TSMmEs;T!nH_d^O%2x<+eHAAU@QW?qwl*!N)fUaQZ zDnM5;bRD4U7+MTyF+b~H*ZvcJ6P!a^OB+i|kEEnUO8g!or zbsnzsqRz{83sJX_>#hTI9Yc2mx|^Z3fYvg!8PH~iwgB3~&^|EweH;w<8R|acx-S8J z$&d`2iOk`CG4?`ym4fCV4p1CJ7l6QCV9y6JNkLr-*QEnWXQ&8J5ktcO4P&SpP&Gr- z0ZnIU1)voS-3I73hMu$!M8-Wb-#-oLX@(8}I>68&K!*rYv@cJdKEY=f=3^HNKH>`> zk%G@Y2tNB*@c9aa^(z*9zJ}oQwVZ|V{PgLVuS)LNkzqw5qHwg|eVAPV`BIqFD;SX? zN2(1rd^f{Jhl3D-P=G>eL*k!qKm6i*ILGd*2~f~n1hMGSMdeqKS7<*Kb2cf{0d?R)!3JydoFCBUEr?XoI9@jk zD}07SMu~+7sEwll1t)wJ?W3~cCDaK1DTdb}Dk=qq&LN1;7)5T. + +/** @file bits/iterator_concepts.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iterator} + */ + +#ifndef _ITERATOR_CONCEPTS_H +#define _ITERATOR_CONCEPTS_H 1 + +#pragma GCC system_header + +#include +#include // to_address +#include // identity, ranges::less + +#if __cpp_lib_concepts +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + struct input_iterator_tag; + struct output_iterator_tag; + struct forward_iterator_tag; + struct bidirectional_iterator_tag; + struct random_access_iterator_tag; + struct contiguous_iterator_tag; + + template + struct iterator_traits; + + template requires is_object_v<_Tp> + struct iterator_traits<_Tp*>; + + template + struct __iterator_traits; + + namespace __detail + { + template + using __with_ref = _Tp&; + + template + concept __can_reference = requires { typename __with_ref<_Tp>; }; + + template + concept __dereferenceable = requires(_Tp& __t) + { + { *__t } -> __can_reference; + }; + } // namespace __detail + + template<__detail::__dereferenceable _Tp> + using iter_reference_t = decltype(*std::declval<_Tp&>()); + + namespace ranges + { + namespace __cust_imove + { + void iter_move(); + + template + concept __adl_imove + = (std::__detail::__class_or_enum>) + && requires(_Tp&& __t) { iter_move(static_cast<_Tp&&>(__t)); }; + + struct _IMove + { + private: + template + struct __result + { using type = iter_reference_t<_Tp>; }; + + template + requires __adl_imove<_Tp> + struct __result<_Tp> + { using type = decltype(iter_move(std::declval<_Tp>())); }; + + template + requires (!__adl_imove<_Tp>) + && is_lvalue_reference_v> + struct __result<_Tp> + { using type = remove_reference_t>&&; }; + + template + static constexpr bool + _S_noexcept() + { + if constexpr (__adl_imove<_Tp>) + return noexcept(iter_move(std::declval<_Tp>())); + else + return noexcept(*std::declval<_Tp>()); + } + + public: + // The result type of iter_move(std::declval<_Tp>()) + template + using __type = typename __result<_Tp>::type; + + template + constexpr __type<_Tp> + operator()(_Tp&& __e) const + noexcept(_S_noexcept<_Tp>()) + { + if constexpr (__adl_imove<_Tp>) + return iter_move(static_cast<_Tp&&>(__e)); + else if constexpr (is_lvalue_reference_v>) + return static_cast<__type<_Tp>>(*__e); + else + return *__e; + } + }; + } // namespace __cust_imove + + inline namespace __cust + { + inline constexpr __cust_imove::_IMove iter_move{}; + } // inline namespace __cust + } // namespace ranges + + template<__detail::__dereferenceable _Tp> + requires requires(_Tp& __t) + { { ranges::iter_move(__t) } -> __detail::__can_reference; } + using iter_rvalue_reference_t + = decltype(ranges::iter_move(std::declval<_Tp&>())); + + template struct incrementable_traits { }; + + template requires is_object_v<_Tp> + struct incrementable_traits<_Tp*> + { using difference_type = ptrdiff_t; }; + + template + struct incrementable_traits + : incrementable_traits<_Iter> { }; + + template requires requires { typename _Tp::difference_type; } + struct incrementable_traits<_Tp> + { using difference_type = typename _Tp::difference_type; }; + + template + requires (!requires { typename _Tp::difference_type; } + && requires(const _Tp& __a, const _Tp& __b) + { + requires (!is_void_v>); // PR c++/78173 + { __a - __b } -> integral; + }) + struct incrementable_traits<_Tp> + { + using difference_type + = make_signed_t() - std::declval<_Tp>())>; + }; + +#if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__ + // __int128 is incrementable even if !integral<__int128> + template<> + struct incrementable_traits<__int128> + { using difference_type = __int128; }; + + template<> + struct incrementable_traits + { using difference_type = __int128; }; +#endif + + namespace __detail + { + // An iterator such that iterator_traits<_Iter> names a specialization + // generated from the primary template. + template + concept __primary_traits_iter + = __is_base_of(__iterator_traits<_Iter, void>, iterator_traits<_Iter>); + + template + struct __iter_traits_impl + { using type = iterator_traits<_Iter>; }; + + template + requires __primary_traits_iter<_Iter> + struct __iter_traits_impl<_Iter, _Tp> + { using type = _Tp; }; + + // ITER_TRAITS + template + using __iter_traits = typename __iter_traits_impl<_Iter, _Tp>::type; + + template + using __iter_diff_t = typename + __iter_traits<_Tp, incrementable_traits<_Tp>>::difference_type; + } // namespace __detail + + template + using iter_difference_t = __detail::__iter_diff_t>; + + namespace __detail + { + template struct __cond_value_type { }; + + template requires is_object_v<_Tp> + struct __cond_value_type<_Tp> + { using value_type = remove_cv_t<_Tp>; }; + } // namespace __detail + + template struct indirectly_readable_traits { }; + + template + struct indirectly_readable_traits<_Tp*> + : __detail::__cond_value_type<_Tp> + { }; + + template requires is_array_v<_Iter> + struct indirectly_readable_traits<_Iter> + { using value_type = remove_cv_t>; }; + + template + struct indirectly_readable_traits + : indirectly_readable_traits<_Iter> + { }; + + template requires requires { typename _Tp::value_type; } + struct indirectly_readable_traits<_Tp> + : __detail::__cond_value_type + { }; + + template requires requires { typename _Tp::element_type; } + struct indirectly_readable_traits<_Tp> + : __detail::__cond_value_type + { }; + + namespace __detail + { + template + using __iter_value_t = typename + __iter_traits<_Tp, indirectly_readable_traits<_Tp>>::value_type; + } // namespace __detail + + template + using iter_value_t = __detail::__iter_value_t>; + + namespace __detail + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3420. cpp17-iterator should check [type] looks like an iterator first + template + concept __cpp17_iterator = requires(_Iter __it) + { + { *__it } -> __can_reference; + { ++__it } -> same_as<_Iter&>; + { *__it++ } -> __can_reference; + } && copyable<_Iter>; + + template + concept __cpp17_input_iterator = __cpp17_iterator<_Iter> + && equality_comparable<_Iter> + && requires(_Iter __it) + { + typename incrementable_traits<_Iter>::difference_type; + typename indirectly_readable_traits<_Iter>::value_type; + typename common_reference_t&&, + typename indirectly_readable_traits<_Iter>::value_type&>; + typename common_reference_t::value_type&>; + requires signed_integral< + typename incrementable_traits<_Iter>::difference_type>; + }; + + template + concept __cpp17_fwd_iterator = __cpp17_input_iterator<_Iter> + && constructible_from<_Iter> + && is_lvalue_reference_v> + && same_as>, + typename indirectly_readable_traits<_Iter>::value_type> + && requires(_Iter __it) + { + { __it++ } -> convertible_to; + { *__it++ } -> same_as>; + }; + + template + concept __cpp17_bidi_iterator = __cpp17_fwd_iterator<_Iter> + && requires(_Iter __it) + { + { --__it } -> same_as<_Iter&>; + { __it-- } -> convertible_to; + { *__it-- } -> same_as>; + }; + + template + concept __cpp17_randacc_iterator = __cpp17_bidi_iterator<_Iter> + && totally_ordered<_Iter> + && requires(_Iter __it, + typename incrementable_traits<_Iter>::difference_type __n) + { + { __it += __n } -> same_as<_Iter&>; + { __it -= __n } -> same_as<_Iter&>; + { __it + __n } -> same_as<_Iter>; + { __n + __it } -> same_as<_Iter>; + { __it - __n } -> same_as<_Iter>; + { __it - __it } -> same_as; + { __it[__n] } -> convertible_to>; + }; + + template + concept __iter_with_nested_types = requires { + typename _Iter::iterator_category; + typename _Iter::value_type; + typename _Iter::difference_type; + typename _Iter::reference; + }; + + template + concept __iter_without_nested_types = !__iter_with_nested_types<_Iter>; + + template + concept __iter_without_category + = !requires { typename _Iter::iterator_category; }; + + } // namespace __detail + + template + requires __detail::__iter_with_nested_types<_Iterator> + struct __iterator_traits<_Iterator, void> + { + private: + template + struct __ptr + { using type = void; }; + + template requires requires { typename _Iter::pointer; } + struct __ptr<_Iter> + { using type = typename _Iter::pointer; }; + + public: + using iterator_category = typename _Iterator::iterator_category; + using value_type = typename _Iterator::value_type; + using difference_type = typename _Iterator::difference_type; + using pointer = typename __ptr<_Iterator>::type; + using reference = typename _Iterator::reference; + }; + + template + requires __detail::__iter_without_nested_types<_Iterator> + && __detail::__cpp17_input_iterator<_Iterator> + struct __iterator_traits<_Iterator, void> + { + private: + template + struct __cat + { using type = input_iterator_tag; }; + + template + requires requires { typename _Iter::iterator_category; } + struct __cat<_Iter> + { using type = typename _Iter::iterator_category; }; + + template + requires __detail::__iter_without_category<_Iter> + && __detail::__cpp17_randacc_iterator<_Iter> + struct __cat<_Iter> + { using type = random_access_iterator_tag; }; + + template + requires __detail::__iter_without_category<_Iter> + && __detail::__cpp17_bidi_iterator<_Iter> + struct __cat<_Iter> + { using type = bidirectional_iterator_tag; }; + + template + requires __detail::__iter_without_category<_Iter> + && __detail::__cpp17_fwd_iterator<_Iter> + struct __cat<_Iter> + { using type = forward_iterator_tag; }; + + template + struct __ptr + { using type = void; }; + + template requires requires { typename _Iter::pointer; } + struct __ptr<_Iter> + { using type = typename _Iter::pointer; }; + + template + requires (!requires { typename _Iter::pointer; } + && requires(_Iter& __it) { __it.operator->(); }) + struct __ptr<_Iter> + { using type = decltype(std::declval<_Iter&>().operator->()); }; + + template + struct __ref + { using type = iter_reference_t<_Iter>; }; + + template requires requires { typename _Iter::reference; } + struct __ref<_Iter> + { using type = typename _Iter::reference; }; + + public: + using iterator_category = typename __cat<_Iterator>::type; + using value_type + = typename indirectly_readable_traits<_Iterator>::value_type; + using difference_type + = typename incrementable_traits<_Iterator>::difference_type; + using pointer = typename __ptr<_Iterator>::type; + using reference = typename __ref<_Iterator>::type; + }; + + template + requires __detail::__iter_without_nested_types<_Iterator> + && __detail::__cpp17_iterator<_Iterator> + struct __iterator_traits<_Iterator, void> + { + private: + template + struct __diff + { using type = void; }; + + template + requires requires + { typename incrementable_traits<_Iter>::difference_type; } + struct __diff<_Iter> + { + using type = typename incrementable_traits<_Iter>::difference_type; + }; + + public: + using iterator_category = output_iterator_tag; + using value_type = void; + using difference_type = typename __diff<_Iterator>::type; + using pointer = void; + using reference = void; + }; + + namespace __detail + { + template + struct __iter_concept_impl; + + // ITER_CONCEPT(I) is ITER_TRAITS(I)::iterator_concept if that is valid. + template + requires requires { typename __iter_traits<_Iter>::iterator_concept; } + struct __iter_concept_impl<_Iter> + { using type = typename __iter_traits<_Iter>::iterator_concept; }; + + // Otherwise, ITER_TRAITS(I)::iterator_category if that is valid. + template + requires (!requires { typename __iter_traits<_Iter>::iterator_concept; } + && requires { typename __iter_traits<_Iter>::iterator_category; }) + struct __iter_concept_impl<_Iter> + { using type = typename __iter_traits<_Iter>::iterator_category; }; + + // Otherwise, random_access_tag if iterator_traits is not specialized. + template + requires (!requires { typename __iter_traits<_Iter>::iterator_concept; } + && !requires { typename __iter_traits<_Iter>::iterator_category; } + && __primary_traits_iter<_Iter>) + struct __iter_concept_impl<_Iter> + { using type = random_access_iterator_tag; }; + + // Otherwise, there is no ITER_CONCEPT(I) type. + template + struct __iter_concept_impl + { }; + + // ITER_CONCEPT + template + using __iter_concept = typename __iter_concept_impl<_Iter>::type; + + template + concept __indirectly_readable_impl = requires(const _In __in) + { + typename iter_value_t<_In>; + typename iter_reference_t<_In>; + typename iter_rvalue_reference_t<_In>; + { *__in } -> same_as>; + { ranges::iter_move(__in) } -> same_as>; + } + && common_reference_with&&, iter_value_t<_In>&> + && common_reference_with&&, + iter_rvalue_reference_t<_In>&&> + && common_reference_with&&, + const iter_value_t<_In>&>; + + } // namespace __detail + + /// Requirements for types that are readable by applying operator*. + template + concept indirectly_readable + = __detail::__indirectly_readable_impl>; + + template + using iter_common_reference_t + = common_reference_t, iter_value_t<_Tp>&>; + + /// Requirements for writing a value into an iterator's referenced object. + template + concept indirectly_writable = requires(_Out&& __o, _Tp&& __t) + { + *__o = std::forward<_Tp>(__t); + *std::forward<_Out>(__o) = std::forward<_Tp>(__t); + const_cast&&>(*__o) + = std::forward<_Tp>(__t); + const_cast&&>(*std::forward<_Out>(__o)) + = std::forward<_Tp>(__t); + }; + + namespace ranges::__detail + { +#if __SIZEOF_INT128__ + using __max_diff_type = __int128; + using __max_size_type = unsigned __int128; +#else + using __max_diff_type = long long; + using __max_size_type = unsigned long long; +#endif + + template + concept __is_integer_like = integral<_Tp> + || same_as<_Tp, __max_diff_type> || same_as<_Tp, __max_size_type>; + + template + concept __is_signed_integer_like = signed_integral<_Tp> + || same_as<_Tp, __max_diff_type>; + + } // namespace ranges::__detail + + namespace __detail { using ranges::__detail::__is_signed_integer_like; } + + /// Requirements on types that can be incremented with ++. + template + concept weakly_incrementable = default_initializable<_Iter> + && movable<_Iter> + && requires(_Iter __i) + { + typename iter_difference_t<_Iter>; + requires __detail::__is_signed_integer_like>; + { ++__i } -> same_as<_Iter&>; + __i++; + }; + + template + concept incrementable = regular<_Iter> && weakly_incrementable<_Iter> + && requires(_Iter __i) { { __i++ } -> same_as<_Iter>; }; + + template + concept input_or_output_iterator + = requires(_Iter __i) { { *__i } -> __detail::__can_reference; } + && weakly_incrementable<_Iter>; + + template + concept sentinel_for = semiregular<_Sent> + && input_or_output_iterator<_Iter> + && __detail::__weakly_eq_cmp_with<_Sent, _Iter>; + + template + inline constexpr bool disable_sized_sentinel_for = false; + + template + concept sized_sentinel_for = sentinel_for<_Sent, _Iter> + && !disable_sized_sentinel_for, remove_cv_t<_Iter>> + && requires(const _Iter& __i, const _Sent& __s) + { + { __s - __i } -> same_as>; + { __i - __s } -> same_as>; + }; + + template + concept input_iterator = input_or_output_iterator<_Iter> + && indirectly_readable<_Iter> + && requires { typename __detail::__iter_concept<_Iter>; } + && derived_from<__detail::__iter_concept<_Iter>, input_iterator_tag>; + + template + concept output_iterator = input_or_output_iterator<_Iter> + && indirectly_writable<_Iter, _Tp> + && requires(_Iter __i, _Tp&& __t) { *__i++ = std::forward<_Tp>(__t); }; + + template + concept forward_iterator = input_iterator<_Iter> + && derived_from<__detail::__iter_concept<_Iter>, forward_iterator_tag> + && incrementable<_Iter> && sentinel_for<_Iter, _Iter>; + + template + concept bidirectional_iterator = forward_iterator<_Iter> + && derived_from<__detail::__iter_concept<_Iter>, + bidirectional_iterator_tag> + && requires(_Iter __i) + { + { --__i } -> same_as<_Iter&>; + { __i-- } -> same_as<_Iter>; + }; + + template + concept random_access_iterator = bidirectional_iterator<_Iter> + && derived_from<__detail::__iter_concept<_Iter>, + random_access_iterator_tag> + && totally_ordered<_Iter> && sized_sentinel_for<_Iter, _Iter> + && requires(_Iter __i, const _Iter __j, + const iter_difference_t<_Iter> __n) + { + { __i += __n } -> same_as<_Iter&>; + { __j + __n } -> same_as<_Iter>; + { __n + __j } -> same_as<_Iter>; + { __i -= __n } -> same_as<_Iter&>; + { __j - __n } -> same_as<_Iter>; + { __j[__n] } -> same_as>; + }; + + template + concept contiguous_iterator = random_access_iterator<_Iter> + && derived_from<__detail::__iter_concept<_Iter>, contiguous_iterator_tag> + && is_lvalue_reference_v> + && same_as, remove_cvref_t>> + && requires(const _Iter& __i) + { + { std::to_address(__i) } + -> same_as>>; + }; + + // [indirectcallable], indirect callable requirements + + // [indirectcallable.indirectinvocable], indirect callables + + template + concept indirectly_unary_invocable = indirectly_readable<_Iter> + && copy_constructible<_Fn> && invocable<_Fn&, iter_value_t<_Iter>&> + && invocable<_Fn&, iter_reference_t<_Iter>> + && invocable<_Fn&, iter_common_reference_t<_Iter>> + && common_reference_with&>, + invoke_result_t<_Fn&, iter_reference_t<_Iter>>>; + + template + concept indirectly_regular_unary_invocable = indirectly_readable<_Iter> + && copy_constructible<_Fn> + && regular_invocable<_Fn&, iter_value_t<_Iter>&> + && regular_invocable<_Fn&, iter_reference_t<_Iter>> + && regular_invocable<_Fn&, iter_common_reference_t<_Iter>> + && common_reference_with&>, + invoke_result_t<_Fn&, iter_reference_t<_Iter>>>; + + template + concept indirect_unary_predicate = indirectly_readable<_Iter> + && copy_constructible<_Fn> && predicate<_Fn&, iter_value_t<_Iter>&> + && predicate<_Fn&, iter_reference_t<_Iter>> + && predicate<_Fn&, iter_common_reference_t<_Iter>>; + + template + concept indirect_binary_predicate + = indirectly_readable<_I1> && indirectly_readable<_I2> + && copy_constructible<_Fn> + && predicate<_Fn&, iter_value_t<_I1>&, iter_value_t<_I2>&> + && predicate<_Fn&, iter_value_t<_I1>&, iter_reference_t<_I2>> + && predicate<_Fn&, iter_reference_t<_I1>, iter_value_t<_I2>&> + && predicate<_Fn&, iter_reference_t<_I1>, iter_reference_t<_I2>> + && predicate<_Fn&, iter_common_reference_t<_I1>, + iter_common_reference_t<_I2>>; + + template + concept indirect_equivalence_relation + = indirectly_readable<_I1> && indirectly_readable<_I2> + && copy_constructible<_Fn> + && equivalence_relation<_Fn&, iter_value_t<_I1>&, iter_value_t<_I2>&> + && equivalence_relation<_Fn&, iter_value_t<_I1>&, iter_reference_t<_I2>> + && equivalence_relation<_Fn&, iter_reference_t<_I1>, iter_value_t<_I2>&> + && equivalence_relation<_Fn&, iter_reference_t<_I1>, + iter_reference_t<_I2>> + && equivalence_relation<_Fn&, iter_common_reference_t<_I1>, + iter_common_reference_t<_I2>>; + + template + concept indirect_strict_weak_order + = indirectly_readable<_I1> && indirectly_readable<_I2> + && copy_constructible<_Fn> + && strict_weak_order<_Fn&, iter_value_t<_I1>&, iter_value_t<_I2>&> + && strict_weak_order<_Fn&, iter_value_t<_I1>&, iter_reference_t<_I2>> + && strict_weak_order<_Fn&, iter_reference_t<_I1>, iter_value_t<_I2>&> + && strict_weak_order<_Fn&, iter_reference_t<_I1>, iter_reference_t<_I2>> + && strict_weak_order<_Fn&, iter_common_reference_t<_I1>, + iter_common_reference_t<_I2>>; + + template + requires (indirectly_readable<_Is> && ...) + && invocable<_Fn, iter_reference_t<_Is>...> + using indirect_result_t = invoke_result_t<_Fn, iter_reference_t<_Is>...>; + + /// [projected], projected + template _Proj> + struct projected + { + using value_type = remove_cvref_t>; + + indirect_result_t<_Proj&, _Iter> operator*() const; // not defined + }; + + template + struct incrementable_traits> + { using difference_type = iter_difference_t<_Iter>; }; + + // [alg.req], common algorithm requirements + + /// [alg.req.ind.move], concept `indirectly_movable` + + template + concept indirectly_movable = indirectly_readable<_In> + && indirectly_writable<_Out, iter_rvalue_reference_t<_In>>; + + template + concept indirectly_movable_storable = indirectly_movable<_In, _Out> + && indirectly_writable<_Out, iter_value_t<_In>> + && movable> + && constructible_from, iter_rvalue_reference_t<_In>> + && assignable_from&, iter_rvalue_reference_t<_In>>; + + /// [alg.req.ind.copy], concept `indirectly_copyable` + template + concept indirectly_copyable = indirectly_readable<_In> + && indirectly_writable<_Out, iter_reference_t<_In>>; + + template + concept indirectly_copyable_storable = indirectly_copyable<_In, _Out> + && indirectly_writable<_Out, iter_value_t<_In>&> + && indirectly_writable<_Out, const iter_value_t<_In>&> + && indirectly_writable<_Out, iter_value_t<_In>&&> + && indirectly_writable<_Out, const iter_value_t<_In>&&> + && copyable> + && constructible_from, iter_reference_t<_In>> + && assignable_from&, iter_reference_t<_In>>; + +namespace ranges +{ + namespace __cust_iswap + { + template + void iter_swap(_It1, _It2) = delete; + + template + concept __adl_iswap + = (std::__detail::__class_or_enum> + || std::__detail::__class_or_enum>) + && requires(_Tp&& __t, _Up&& __u) { + iter_swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); + }; + + template + constexpr iter_value_t<_Xp> + __iter_exchange_move(_Xp&& __x, _Yp&& __y) + noexcept(noexcept(iter_value_t<_Xp>(iter_move(__x))) + && noexcept(*__x = iter_move(__y))) + { + iter_value_t<_Xp> __old_value(iter_move(__x)); + *__x = iter_move(__y); + return __old_value; + } + + struct _IterSwap + { + private: + template + static constexpr bool + _S_noexcept() + { + if constexpr (__adl_iswap<_Tp, _Up>) + return noexcept(iter_swap(std::declval<_Tp>(), + std::declval<_Up>())); + else if constexpr (indirectly_readable<_Tp> + && indirectly_readable<_Up> + && swappable_with, iter_reference_t<_Up>>) + return noexcept(ranges::swap(*std::declval<_Tp>(), + *std::declval<_Up>())); + else + return noexcept(*std::declval<_Tp>() + = __iter_exchange_move(std::declval<_Up>(), + std::declval<_Tp>())); + } + + public: + template + requires __adl_iswap<_Tp, _Up> + || (indirectly_readable> + && indirectly_readable> + && swappable_with, iter_reference_t<_Up>>) + || (indirectly_movable_storable<_Tp, _Up> + && indirectly_movable_storable<_Up, _Tp>) + constexpr void + operator()(_Tp&& __e1, _Up&& __e2) const + noexcept(_S_noexcept<_Tp, _Up>()) + { + if constexpr (__adl_iswap<_Tp, _Up>) + iter_swap(static_cast<_Tp&&>(__e1), static_cast<_Up&&>(__e2)); + else if constexpr (indirectly_readable<_Tp> + && indirectly_readable<_Up> + && swappable_with, iter_reference_t<_Up>>) + ranges::swap(*__e1, *__e2); + else + *__e1 = __iter_exchange_move(__e2, __e1); + } + }; + } // namespace __cust_iswap + + inline namespace __cust + { + inline constexpr __cust_iswap::_IterSwap iter_swap{}; + } // inline namespace __cust + +} // namespace ranges + + /// [alg.req.ind.swap], concept `indirectly_swappable` + template + concept indirectly_swappable + = indirectly_readable<_I1> && indirectly_readable<_I2> + && requires(const _I1 __i1, const _I2 __i2) + { + ranges::iter_swap(__i1, __i1); + ranges::iter_swap(__i2, __i2); + ranges::iter_swap(__i1, __i2); + ranges::iter_swap(__i2, __i1); + }; + + /// [alg.req.ind.cmp], concept `indirectly_comparable` + template + concept indirectly_comparable + = indirect_binary_predicate<_Rel, projected<_I1, _P1>, + projected<_I2, _P2>>; + + /// [alg.req.permutable], concept `permutable` + template + concept permutable = forward_iterator<_Iter> + && indirectly_movable_storable<_Iter, _Iter> + && indirectly_swappable<_Iter, _Iter>; + + /// [alg.req.mergeable], concept `mergeable` + template + concept mergeable = input_iterator<_I1> && input_iterator<_I2> + && weakly_incrementable<_Out> && indirectly_copyable<_I1, _Out> + && indirectly_copyable<_I2, _Out> + && indirect_strict_weak_order<_Rel, projected<_I1, _P1>, + projected<_I2, _P2>>; + + /// [alg.req.sortable], concept `sortable` + template + concept sortable = permutable<_Iter> + && indirect_strict_weak_order<_Rel, projected<_Iter, _Proj>>; + + struct unreachable_sentinel_t + { + template + friend constexpr bool + operator==(unreachable_sentinel_t, const _It&) noexcept + { return false; } + }; + + inline constexpr unreachable_sentinel_t unreachable_sentinel{}; + + struct default_sentinel_t { }; + inline constexpr default_sentinel_t default_sentinel{}; + + namespace __detail + { + template + constexpr decay_t<_Tp> + __decay_copy(_Tp&& __t) + noexcept(is_nothrow_convertible_v<_Tp, decay_t<_Tp>>) + { return std::forward<_Tp>(__t); } + + template + concept __member_begin = requires(_Tp& __t) + { + { __detail::__decay_copy(__t.begin()) } -> input_or_output_iterator; + }; + + void begin(auto&) = delete; + void begin(const auto&) = delete; + + template + concept __adl_begin = __class_or_enum> + && requires(_Tp& __t) + { + { __detail::__decay_copy(begin(__t)) } -> input_or_output_iterator; + }; + + // Simplified version of std::ranges::begin that only supports lvalues, + // for use by __range_iter_t below. + template + requires is_array_v<_Tp> || __member_begin<_Tp&> || __adl_begin<_Tp&> + auto + __ranges_begin(_Tp& __t) + { + if constexpr (is_array_v<_Tp>) + { + static_assert(sizeof(remove_all_extents_t<_Tp>) != 0, + "not array of incomplete type"); + return __t + 0; + } + else if constexpr (__member_begin<_Tp&>) + return __t.begin(); + else + return begin(__t); + } + + // Implementation of std::ranges::iterator_t, without using ranges::begin. + template + using __range_iter_t + = decltype(__detail::__ranges_begin(std::declval<_Tp&>())); + + } // namespace __detail + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // C++20 library concepts +#endif // _ITERATOR_CONCEPTS_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@iterator_concepts.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@iterator_concepts.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..33b3f45f508329e97282259d524bb281870f50dc GIT binary patch literal 12446 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.h new file mode 100644 index 0000000..ab90682 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.h @@ -0,0 +1,855 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +#include +#include +#include + +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 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 + locale + combine(const locale& __other) const; + + // Locale operations: + /** + * @brief Return locale name. + * @return Locale name or "*" if unnamed. + */ + _GLIBCXX_DEFAULT_ABI_TAG + string + name() const; + + /** + * @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. + */ + 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) + */ + 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 + 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. + */ + 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 + }; + + + // 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(); + + // 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 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*); + }; + + + /** + * @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/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2b6bf3ac3b74250214daef2ea3e8fdf6c236b34a GIT binary patch literal 47671 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%0A^FNO_Hrl9y92br={Do-gzoPazr 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. + +/** @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 + +#pragma GCC system_header + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + locale:: + locale(const locale& __other, _Facet* __f) + { + _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 + { + _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; + } + 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); + } + + /** + * @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 + bool + has_facet(const locale& __loc) throw() + { + const size_t __i = _Facet::id._M_id(); + const locale::facet** __facets = __loc._M_impl->_M_facets; + return (__i < __loc._M_impl->_M_facets_size +#if __cpp_rtti + && dynamic_cast(__facets[__i])); +#else + && static_cast(__facets[__i])); +#endif + } + + /** + * @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. + */ + template + const _Facet& + use_facet(const locale& __loc) + { + const size_t __i = _Facet::id._M_id(); + const locale::facet** __facets = __loc._M_impl->_M_facets; + if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i]) + __throw_bad_cast(); +#if __cpp_rtti + return dynamic_cast(*__facets[__i]); +#else + return static_cast(*__facets[__i]); +#endif + } + + + // 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; + + _CharT* __c = new _CharT[__len]; + + __try + { + // 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(__c, __p, __len); + // If the buffer was not large enough, try again with the + // correct size. + if (__res >= __len) + { + __len = __res + 1; + delete [] __c, __c = 0; + __c = new _CharT[__len]; + __res = _M_transform(__c, __p, __len); + } + + __ret.append(__c, __res); + __p += char_traits<_CharT>::length(__p); + if (__p == __pend) + break; + + __p++; + __ret.push_back(_CharT()); + } + } + __catch(...) + { + delete [] __c; + __throw_exception_again; + } + + delete [] __c; + + 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& + 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& + use_facet >(const locale&); + + extern template + bool + has_facet >(const locale&); +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_classes.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..9eb58c6bd4e3bc9f4709838be6ead0b7091795f9 GIT binary patch literal 25331 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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 +#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 + && (__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 == (__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 == (__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 + +#ifdef _GLIBCXX_USE_WCHAR_T + +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + + /// String conversions + template, + typename _Byte_alloc = allocator> + class 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) + { + if (!_M_cvt) + __throw_logic_error("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), _M_state(__state), _M_with_cvtstate(true) + { + if (!_M_cvt) + __throw_logic_error("wstring_convert"); + } + + /** 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) + { + if (!_M_cvt) + __throw_logic_error("wstring_convert"); + } + + ~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: + unique_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 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), _M_state(__state) + { + if (!_M_cvt) + __throw_logic_error("wbuffer_convert"); + + _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; + unique_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; + }; + +#endif // _GLIBCXX_USE_WCHAR_T + + /// @} group locales + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // __cplusplus + +#endif /* _LOCALE_CONV_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_conv.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_conv.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..34fe6c00bd68b46546a5375ee2ed4a7e31bab234 GIT binary patch literal 45408 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 G=J. + +/** @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 + +#pragma GCC system_header + +#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 + + // NB: Don't instantiate required wchar_t facets if no wchar_t support. +#ifdef _GLIBCXX_USE_WCHAR_T +# define _GLIBCXX_NUM_FACETS 28 +# define _GLIBCXX_NUM_CXX11_FACETS 16 +#else +# define _GLIBCXX_NUM_FACETS 14 +# define _GLIBCXX_NUM_CXX11_FACETS 8 +#endif +#ifdef _GLIBCXX_USE_CHAR8_T +# define _GLIBCXX_NUM_UNICODE_FACETS 4 +#else +# define _GLIBCXX_NUM_UNICODE_FACETS 2 +#endif + + // 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; + + /** + * @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 + 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); } +#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 + 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); } +#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__ + 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_COMPAT && defined __LONG_DOUBLE_128__ + 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 + 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); } +#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 + 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); } +#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_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/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ea878673c5a6e8d4e5e5921a6160e7de6ba248b8 GIT binary patch literal 152552 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᰺{X`Ol=9kXoiw(8nBxjEza44&RY4ff6F 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%0ANA%ShHV8z%waISbF1j)pBajw{oc6Pk+ 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

    bjNnzV@x?-J)KeY)X*bYB8ULdNS-OL%Ao5 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 Mz-Og80ITi)0gy^yv;Y7A literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@sstream.tcc b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@sstream.tcc new file mode 100644 index 0000000..9e70c36 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@sstream.tcc @@ -0,0 +1,307 @@ +// String based streams -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +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 ((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 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@sstream.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@sstream.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..ac5d32ad8d496be78b5ac933d363f2b7db73723c GIT binary patch literal 29183 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_abs.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_abs.h new file mode 100644 index 0000000..7047f82 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_abs.h @@ -0,0 +1,111 @@ +// -*- C++ -*- C library enhancements header. + +// Copyright (C) 2016-2020 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 + +#pragma GCC system_header + +#include + +#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) + 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) + 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) + 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) + inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_3 + abs(__GLIBCXX_TYPE_INT_N_3 __x) { return __x >= 0 ? __x : -__x; } +#endif + +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) && !defined(__CUDACC__) + inline _GLIBCXX_CONSTEXPR + __float128 + abs(__float128 __x) + { return __x < 0 ? -__x : __x; } +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +} // extern "C"++" + +#endif // _GLIBCXX_BITS_STD_ABS_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_abs.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_abs.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1caee91f366198e8b901487321da991fdd8f9228 GIT binary patch literal 15005 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. + +/** @file include/bits/std_function.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{functional} + */ + +#ifndef _GLIBCXX_STD_FUNCTION_H +#define _GLIBCXX_STD_FUNCTION_H 1 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#if __cpp_rtti +# include +#endif +#include +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief Exception class thrown when class template function's + * operator() is called with an empty target. + * @ingroup exceptions + */ + class bad_function_call : public std::exception + { + public: + virtual ~bad_function_call() noexcept; + + const char* what() const noexcept; + }; + + /** + * Trait identifying "location-invariant" types, meaning that the + * address of the object (or any of its members) will not escape. + * Trivially copyable types are location-invariant and users can + * specialize this trait for other types. + */ + template + struct __is_location_invariant + : is_trivially_copyable<_Tp>::type + { }; + + class _Undefined_class; + + union _Nocopy_types + { + void* _M_object; + const void* _M_const_object; + void (*_M_function_pointer)(); + void (_Undefined_class::*_M_member_pointer)(); + }; + + union [[gnu::may_alias]] _Any_data + { + void* _M_access() { return &_M_pod_data[0]; } + const void* _M_access() const { return &_M_pod_data[0]; } + + template + _Tp& + _M_access() + { return *static_cast<_Tp*>(_M_access()); } + + template + const _Tp& + _M_access() const + { return *static_cast(_M_access()); } + + _Nocopy_types _M_unused; + char _M_pod_data[sizeof(_Nocopy_types)]; + }; + + enum _Manager_operation + { + __get_type_info, + __get_functor_ptr, + __clone_functor, + __destroy_functor + }; + + template + class function; + + /// Base class of all polymorphic function object wrappers. + class _Function_base + { + public: + static const size_t _M_max_size = sizeof(_Nocopy_types); + static const size_t _M_max_align = __alignof__(_Nocopy_types); + + template + class _Base_manager + { + protected: + static const bool __stored_locally = + (__is_location_invariant<_Functor>::value + && sizeof(_Functor) <= _M_max_size + && __alignof__(_Functor) <= _M_max_align + && (_M_max_align % __alignof__(_Functor) == 0)); + + typedef integral_constant _Local_storage; + + // Retrieve a pointer to the function object + static _Functor* + _M_get_pointer(const _Any_data& __source) + { + if _GLIBCXX17_CONSTEXPR (__stored_locally) + { + const _Functor& __f = __source._M_access<_Functor>(); + return const_cast<_Functor*>(std::__addressof(__f)); + } + else // have stored a pointer + return __source._M_access<_Functor*>(); + } + + // Clone a location-invariant function object that fits within + // an _Any_data structure. + static void + _M_clone(_Any_data& __dest, const _Any_data& __source, true_type) + { + ::new (__dest._M_access()) _Functor(__source._M_access<_Functor>()); + } + + // Clone a function object that is not location-invariant or + // that cannot fit into an _Any_data structure. + static void + _M_clone(_Any_data& __dest, const _Any_data& __source, false_type) + { + __dest._M_access<_Functor*>() = + new _Functor(*__source._M_access()); + } + + // Destroying a location-invariant object may still require + // destruction. + static void + _M_destroy(_Any_data& __victim, true_type) + { + __victim._M_access<_Functor>().~_Functor(); + } + + // Destroying an object located on the heap. + static void + _M_destroy(_Any_data& __victim, false_type) + { + delete __victim._M_access<_Functor*>(); + } + + public: + static bool + _M_manager(_Any_data& __dest, const _Any_data& __source, + _Manager_operation __op) + { + switch (__op) + { +#if __cpp_rtti + case __get_type_info: + __dest._M_access() = &typeid(_Functor); + break; +#endif + case __get_functor_ptr: + __dest._M_access<_Functor*>() = _M_get_pointer(__source); + break; + + case __clone_functor: + _M_clone(__dest, __source, _Local_storage()); + break; + + case __destroy_functor: + _M_destroy(__dest, _Local_storage()); + break; + } + return false; + } + + static void + _M_init_functor(_Any_data& __functor, _Functor&& __f) + { _M_init_functor(__functor, std::move(__f), _Local_storage()); } + + template + static bool + _M_not_empty_function(const function<_Signature>& __f) + { return static_cast(__f); } + + template + static bool + _M_not_empty_function(_Tp* __fp) + { return __fp != nullptr; } + + template + static bool + _M_not_empty_function(_Tp _Class::* __mp) + { return __mp != nullptr; } + + template + static bool + _M_not_empty_function(const _Tp&) + { return true; } + + private: + static void + _M_init_functor(_Any_data& __functor, _Functor&& __f, true_type) + { ::new (__functor._M_access()) _Functor(std::move(__f)); } + + static void + _M_init_functor(_Any_data& __functor, _Functor&& __f, false_type) + { __functor._M_access<_Functor*>() = new _Functor(std::move(__f)); } + }; + + _Function_base() : _M_manager(nullptr) { } + + ~_Function_base() + { + if (_M_manager) + _M_manager(_M_functor, _M_functor, __destroy_functor); + } + + bool _M_empty() const { return !_M_manager; } + + typedef bool (*_Manager_type)(_Any_data&, const _Any_data&, + _Manager_operation); + + _Any_data _M_functor; + _Manager_type _M_manager; + }; + + template + class _Function_handler; + + template + class _Function_handler<_Res(_ArgTypes...), _Functor> + : public _Function_base::_Base_manager<_Functor> + { + typedef _Function_base::_Base_manager<_Functor> _Base; + + public: + static bool + _M_manager(_Any_data& __dest, const _Any_data& __source, + _Manager_operation __op) + { + switch (__op) + { +#if __cpp_rtti + case __get_type_info: + __dest._M_access() = &typeid(_Functor); + break; +#endif + case __get_functor_ptr: + __dest._M_access<_Functor*>() = _Base::_M_get_pointer(__source); + break; + + default: + _Base::_M_manager(__dest, __source, __op); + } + return false; + } + + static _Res + _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args) + { + return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), + std::forward<_ArgTypes>(__args)...); + } + }; + + /** + * @brief Primary class template for std::function. + * @ingroup functors + * + * Polymorphic function wrapper. + */ + template + class function<_Res(_ArgTypes...)> + : public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>, + private _Function_base + { + template> + struct _Callable + : __is_invocable_impl<_Res2, _Res>::type + { }; + + // Used so the return type convertibility checks aren't done when + // performing overload resolution for copy construction/assignment. + template + struct _Callable : false_type { }; + + template + using _Requires = typename enable_if<_Cond::value, _Tp>::type; + + public: + typedef _Res result_type; + + // [3.7.2.1] construct/copy/destroy + + /** + * @brief Default construct creates an empty function call wrapper. + * @post @c !(bool)*this + */ + function() noexcept + : _Function_base() { } + + /** + * @brief Creates an empty function call wrapper. + * @post @c !(bool)*this + */ + function(nullptr_t) noexcept + : _Function_base() { } + + /** + * @brief %Function copy constructor. + * @param __x A %function object with identical call signature. + * @post @c bool(*this) == bool(__x) + * + * The newly-created %function contains a copy of the target of @a + * __x (if it has one). + */ + function(const function& __x); + + /** + * @brief %Function move constructor. + * @param __x A %function object rvalue with identical call signature. + * + * The newly-created %function contains the target of @a __x + * (if it has one). + */ + function(function&& __x) noexcept : _Function_base() + { + __x.swap(*this); + } + + /** + * @brief Builds a %function that targets a copy of the incoming + * function object. + * @param __f A %function object that is callable with parameters of + * type @c T1, @c T2, ..., @c TN and returns a value convertible + * to @c Res. + * + * The newly-created %function object will target a copy of + * @a __f. If @a __f is @c reference_wrapper, then this function + * object will contain a reference to the function object @c + * __f.get(). If @a __f is a NULL function pointer or NULL + * pointer-to-member, the newly-created object will be empty. + * + * If @a __f is a non-NULL function pointer or an object of type @c + * reference_wrapper, this function will not throw. + */ + template>, void>, + typename = _Requires<_Callable<_Functor>, void>> + function(_Functor); + + /** + * @brief %Function assignment operator. + * @param __x A %function with identical call signature. + * @post @c (bool)*this == (bool)x + * @returns @c *this + * + * The target of @a __x is copied to @c *this. If @a __x has no + * target, then @c *this will be empty. + * + * If @a __x targets a function pointer or a reference to a function + * object, then this operation will not throw an %exception. + */ + function& + operator=(const function& __x) + { + function(__x).swap(*this); + return *this; + } + + /** + * @brief %Function move-assignment operator. + * @param __x A %function rvalue with identical call signature. + * @returns @c *this + * + * The target of @a __x is moved to @c *this. If @a __x has no + * target, then @c *this will be empty. + * + * If @a __x targets a function pointer or a reference to a function + * object, then this operation will not throw an %exception. + */ + function& + operator=(function&& __x) noexcept + { + function(std::move(__x)).swap(*this); + return *this; + } + + /** + * @brief %Function assignment to zero. + * @post @c !(bool)*this + * @returns @c *this + * + * The target of @c *this is deallocated, leaving it empty. + */ + function& + operator=(nullptr_t) noexcept + { + if (_M_manager) + { + _M_manager(_M_functor, _M_functor, __destroy_functor); + _M_manager = nullptr; + _M_invoker = nullptr; + } + return *this; + } + + /** + * @brief %Function assignment to a new target. + * @param __f A %function object that is callable with parameters of + * type @c T1, @c T2, ..., @c TN and returns a value convertible + * to @c Res. + * @return @c *this + * + * This %function object wrapper will target a copy of @a + * __f. If @a __f is @c reference_wrapper, then this function + * object will contain a reference to the function object @c + * __f.get(). If @a __f is a NULL function pointer or NULL + * pointer-to-member, @c this object will be empty. + * + * If @a __f is a non-NULL function pointer or an object of type @c + * reference_wrapper, this function will not throw. + */ + template + _Requires<_Callable::type>, function&> + operator=(_Functor&& __f) + { + function(std::forward<_Functor>(__f)).swap(*this); + return *this; + } + + /// @overload + template + function& + operator=(reference_wrapper<_Functor> __f) noexcept + { + function(__f).swap(*this); + return *this; + } + + // [3.7.2.2] function modifiers + + /** + * @brief Swap the targets of two %function objects. + * @param __x A %function with identical call signature. + * + * Swap the targets of @c this function object and @a __f. This + * function will not throw an %exception. + */ + void swap(function& __x) noexcept + { + std::swap(_M_functor, __x._M_functor); + std::swap(_M_manager, __x._M_manager); + std::swap(_M_invoker, __x._M_invoker); + } + + // [3.7.2.3] function capacity + + /** + * @brief Determine if the %function wrapper has a target. + * + * @return @c true when this %function object contains a target, + * or @c false when it is empty. + * + * This function will not throw an %exception. + */ + explicit operator bool() const noexcept + { return !_M_empty(); } + + // [3.7.2.4] function invocation + + /** + * @brief Invokes the function targeted by @c *this. + * @returns the result of the target. + * @throws bad_function_call when @c !(bool)*this + * + * The function call operator invokes the target function object + * stored by @c this. + */ + _Res operator()(_ArgTypes... __args) const; + +#if __cpp_rtti + // [3.7.2.5] function target access + /** + * @brief Determine the type of the target of this function object + * wrapper. + * + * @returns the type identifier of the target function object, or + * @c typeid(void) if @c !(bool)*this. + * + * This function will not throw an %exception. + */ + const type_info& target_type() const noexcept; + + /** + * @brief Access the stored target function object. + * + * @return Returns a pointer to the stored target function object, + * if @c typeid(_Functor).equals(target_type()); otherwise, a NULL + * pointer. + * + * This function does not throw exceptions. + * + * @{ + */ + template _Functor* target() noexcept; + + template const _Functor* target() const noexcept; + // @} +#endif + + private: + using _Invoker_type = _Res (*)(const _Any_data&, _ArgTypes&&...); + _Invoker_type _M_invoker; + }; + +#if __cpp_deduction_guides >= 201606 + template + struct __function_guide_helper + { }; + + template + struct __function_guide_helper< + _Res (_Tp::*) (_Args...) noexcept(_Nx) + > + { using type = _Res(_Args...); }; + + template + struct __function_guide_helper< + _Res (_Tp::*) (_Args...) & noexcept(_Nx) + > + { using type = _Res(_Args...); }; + + template + struct __function_guide_helper< + _Res (_Tp::*) (_Args...) const noexcept(_Nx) + > + { using type = _Res(_Args...); }; + + template + struct __function_guide_helper< + _Res (_Tp::*) (_Args...) const & noexcept(_Nx) + > + { using type = _Res(_Args...); }; + + template + function(_Res(*)(_ArgTypes...)) -> function<_Res(_ArgTypes...)>; + + template::type> + function(_Functor) -> function<_Signature>; +#endif + + // Out-of-line member definitions. + template + function<_Res(_ArgTypes...)>:: + function(const function& __x) + : _Function_base() + { + if (static_cast(__x)) + { + __x._M_manager(_M_functor, __x._M_functor, __clone_functor); + _M_invoker = __x._M_invoker; + _M_manager = __x._M_manager; + } + } + + template + template + function<_Res(_ArgTypes...)>:: + function(_Functor __f) + : _Function_base() + { + typedef _Function_handler<_Res(_ArgTypes...), _Functor> _My_handler; + + if (_My_handler::_M_not_empty_function(__f)) + { + _My_handler::_M_init_functor(_M_functor, std::move(__f)); + _M_invoker = &_My_handler::_M_invoke; + _M_manager = &_My_handler::_M_manager; + } + } + + template + _Res + function<_Res(_ArgTypes...)>:: + operator()(_ArgTypes... __args) const + { + if (_M_empty()) + __throw_bad_function_call(); + return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...); + } + +#if __cpp_rtti + template + const type_info& + function<_Res(_ArgTypes...)>:: + target_type() const noexcept + { + if (_M_manager) + { + _Any_data __typeinfo_result; + _M_manager(__typeinfo_result, _M_functor, __get_type_info); + return *__typeinfo_result._M_access(); + } + else + return typeid(void); + } + + template + template + _Functor* + function<_Res(_ArgTypes...)>:: + target() noexcept + { + const function* __const_this = this; + const _Functor* __func = __const_this->template target<_Functor>(); + return const_cast<_Functor*>(__func); + } + + template + template + const _Functor* + function<_Res(_ArgTypes...)>:: + target() const noexcept + { + if (typeid(_Functor) == target_type() && _M_manager) + { + _Any_data __ptr; + _M_manager(__ptr, _M_functor, __get_functor_ptr); + return __ptr._M_access(); + } + else + return nullptr; + } +#endif + + // [20.7.15.2.6] null pointer comparisons + + /** + * @brief Compares a polymorphic function object wrapper against 0 + * (the NULL pointer). + * @returns @c true if the wrapper has no target, @c false otherwise + * + * This function will not throw an %exception. + */ + template + inline bool + operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept + { return !static_cast(__f); } + +#if __cpp_impl_three_way_comparison < 201907L + /// @overload + template + inline bool + operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept + { return !static_cast(__f); } + + /** + * @brief Compares a polymorphic function object wrapper against 0 + * (the NULL pointer). + * @returns @c false if the wrapper has no target, @c true otherwise + * + * This function will not throw an %exception. + */ + template + inline bool + operator!=(const function<_Res(_Args...)>& __f, nullptr_t) noexcept + { return static_cast(__f); } + + /// @overload + template + inline bool + operator!=(nullptr_t, const function<_Res(_Args...)>& __f) noexcept + { return static_cast(__f); } +#endif + + // [20.7.15.2.7] specialized algorithms + + /** + * @brief Swap the targets of two polymorphic function object wrappers. + * + * This function will not throw an %exception. + */ + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2062. Effect contradictions w/o no-throw guarantee of std::function swaps + template + inline void + swap(function<_Res(_Args...)>& __x, function<_Res(_Args...)>& __y) noexcept + { __x.swap(__y); } + +#if __cplusplus >= 201703L + namespace __detail::__variant + { + template struct _Never_valueless_alt; // see + + // Provide the strong exception-safety guarantee when emplacing a + // function into a variant. + template + struct _Never_valueless_alt> + : std::true_type + { }; + } // namespace __detail::__variant +#endif // C++17 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 +#endif // _GLIBCXX_STD_FUNCTION_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_function.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@std_function.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..da28969553b81fbfd615f8b8d4119b3278a6d7a4 GIT binary patch literal 41923 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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 + * 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_algo.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{algorithm} + */ + +#ifndef _STL_ALGO_H +#define _STL_ALGO_H 1 + +#include // for rand +#include +#include +#include // for _Temporary_buffer +#include + +#if __cplusplus >= 201103L +#include +#endif + +// See concept_check.h for the __glibcxx_*_requires macros. + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// Swaps the median value of *__a, *__b and *__c under __comp to *__result + template + _GLIBCXX20_CONSTEXPR + void + __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b, + _Iterator __c, _Compare __comp) + { + if (__comp(__a, __b)) + { + if (__comp(__b, __c)) + std::iter_swap(__result, __b); + else if (__comp(__a, __c)) + std::iter_swap(__result, __c); + else + std::iter_swap(__result, __a); + } + else if (__comp(__a, __c)) + std::iter_swap(__result, __a); + else if (__comp(__b, __c)) + std::iter_swap(__result, __c); + else + std::iter_swap(__result, __b); + } + + /// Provided for stable_partition to use. + template + _GLIBCXX20_CONSTEXPR + inline _InputIterator + __find_if_not(_InputIterator __first, _InputIterator __last, + _Predicate __pred) + { + return std::__find_if(__first, __last, + __gnu_cxx::__ops::__negate(__pred), + std::__iterator_category(__first)); + } + + /// Like find_if_not(), but uses and updates a count of the + /// remaining range length instead of comparing against an end + /// iterator. + template + _GLIBCXX20_CONSTEXPR + _InputIterator + __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred) + { + for (; __len; --__len, (void) ++__first) + if (!__pred(__first)) + break; + return __first; + } + + // set_difference + // set_intersection + // set_symmetric_difference + // set_union + // for_each + // find + // find_if + // find_first_of + // adjacent_find + // count + // count_if + // search + + 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; + } + + // search_n + + /** + * This is an helper function for search_n overloaded for forward iterators. + */ + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __search_n_aux(_ForwardIterator __first, _ForwardIterator __last, + _Integer __count, _UnaryPredicate __unary_pred, + std::forward_iterator_tag) + { + __first = std::__find_if(__first, __last, __unary_pred); + while (__first != __last) + { + typename iterator_traits<_ForwardIterator>::difference_type + __n = __count; + _ForwardIterator __i = __first; + ++__i; + while (__i != __last && __n != 1 && __unary_pred(__i)) + { + ++__i; + --__n; + } + if (__n == 1) + return __first; + if (__i == __last) + return __last; + __first = std::__find_if(++__i, __last, __unary_pred); + } + return __last; + } + + /** + * This is an helper function for search_n overloaded for random access + * iterators. + */ + template + _GLIBCXX20_CONSTEXPR + _RandomAccessIter + __search_n_aux(_RandomAccessIter __first, _RandomAccessIter __last, + _Integer __count, _UnaryPredicate __unary_pred, + std::random_access_iterator_tag) + { + typedef typename std::iterator_traits<_RandomAccessIter>::difference_type + _DistanceType; + + _DistanceType __tailSize = __last - __first; + _DistanceType __remainder = __count; + + while (__remainder <= __tailSize) // the main loop... + { + __first += __remainder; + __tailSize -= __remainder; + // __first here is always pointing to one past the last element of + // next possible match. + _RandomAccessIter __backTrack = __first; + while (__unary_pred(--__backTrack)) + { + if (--__remainder == 0) + return (__first - __count); // Success + } + __remainder = __count + 1 - (__first - __backTrack); + } + return __last; // Failure + } + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __search_n(_ForwardIterator __first, _ForwardIterator __last, + _Integer __count, + _UnaryPredicate __unary_pred) + { + if (__count <= 0) + return __first; + + if (__count == 1) + return std::__find_if(__first, __last, __unary_pred); + + return std::__search_n_aux(__first, __last, __count, __unary_pred, + std::__iterator_category(__first)); + } + + // find_end for forward iterators. + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator1 + __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _ForwardIterator2 __last2, + forward_iterator_tag, forward_iterator_tag, + _BinaryPredicate __comp) + { + if (__first2 == __last2) + return __last1; + + _ForwardIterator1 __result = __last1; + while (1) + { + _ForwardIterator1 __new_result + = std::__search(__first1, __last1, __first2, __last2, __comp); + if (__new_result == __last1) + return __result; + else + { + __result = __new_result; + __first1 = __new_result; + ++__first1; + } + } + } + + // find_end for bidirectional iterators (much faster). + template + _GLIBCXX20_CONSTEXPR + _BidirectionalIterator1 + __find_end(_BidirectionalIterator1 __first1, + _BidirectionalIterator1 __last1, + _BidirectionalIterator2 __first2, + _BidirectionalIterator2 __last2, + bidirectional_iterator_tag, bidirectional_iterator_tag, + _BinaryPredicate __comp) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator1>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator2>) + + typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1; + typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2; + + _RevIterator1 __rlast1(__first1); + _RevIterator2 __rlast2(__first2); + _RevIterator1 __rresult = std::__search(_RevIterator1(__last1), __rlast1, + _RevIterator2(__last2), __rlast2, + __comp); + + if (__rresult == __rlast1) + return __last1; + else + { + _BidirectionalIterator1 __result = __rresult.base(); + std::advance(__result, -std::distance(__first2, __last2)); + return __result; + } + } + + /** + * @brief Find last matching subsequence in a sequence. + * @ingroup non_mutating_algorithms + * @param __first1 Start of range to search. + * @param __last1 End of range to search. + * @param __first2 Start of sequence to match. + * @param __last2 End of sequence to match. + * @return The last iterator @c i in the range + * @p [__first1,__last1-(__last2-__first2)) such that @c *(i+N) == + * @p *(__first2+N) 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) and returns an iterator to the __first + * element of the sub-sequence, or @p __last1 if the sub-sequence + * is not found. The sub-sequence will be the last such + * subsequence contained in [__first1,__last1). + * + * Because the sub-sequence must lie completely within the range @p + * [__first1,__last1) it must start at a position less than @p + * __last1-(__last2-__first2) where @p __last2-__first2 is the + * length of the sub-sequence. This means that the returned + * iterator @c i will be in the range @p + * [__first1,__last1-(__last2-__first2)) + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator1 + find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _ForwardIterator2 __last2) + { + // 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); + __glibcxx_requires_valid_range(__first2, __last2); + + return std::__find_end(__first1, __last1, __first2, __last2, + std::__iterator_category(__first1), + std::__iterator_category(__first2), + __gnu_cxx::__ops::__iter_equal_to_iter()); + } + + /** + * @brief Find last matching subsequence in a sequence using a predicate. + * @ingroup non_mutating_algorithms + * @param __first1 Start of range to search. + * @param __last1 End of range to search. + * @param __first2 Start of sequence to match. + * @param __last2 End of sequence to match. + * @param __comp The predicate to use. + * @return The last iterator @c i in the range @p + * [__first1,__last1-(__last2-__first2)) such that @c + * predicate(*(i+N), @p (__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 comp as a predicate and returns an + * iterator to the first element of the sub-sequence, or @p __last1 + * if the sub-sequence is not found. The sub-sequence will be the + * last such subsequence contained in [__first,__last1). + * + * Because the sub-sequence must lie completely within the range @p + * [__first1,__last1) it must start at a position less than @p + * __last1-(__last2-__first2) where @p __last2-__first2 is the + * length of the sub-sequence. This means that the returned + * iterator @c i will be in the range @p + * [__first1,__last1-(__last2-__first2)) + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator1 + find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _ForwardIterator2 __last2, + _BinaryPredicate __comp) + { + // 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::__find_end(__first1, __last1, __first2, __last2, + std::__iterator_category(__first1), + std::__iterator_category(__first2), + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + +#if __cplusplus >= 201103L + /** + * @brief Checks that a predicate is true for all the elements + * of a sequence. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __pred A predicate. + * @return True if the check is true, false otherwise. + * + * Returns true if @p __pred is true for each element in the range + * @p [__first,__last), and false otherwise. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) + { return __last == std::find_if_not(__first, __last, __pred); } + + /** + * @brief Checks that a predicate is false for all the elements + * of a sequence. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __pred A predicate. + * @return True if the check is true, false otherwise. + * + * Returns true if @p __pred is false for each element in the range + * @p [__first,__last), and false otherwise. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) + { return __last == _GLIBCXX_STD_A::find_if(__first, __last, __pred); } + + /** + * @brief Checks that a predicate is true for at least one element + * of a sequence. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __pred A predicate. + * @return True if the check is true, false otherwise. + * + * Returns true if an element exists in the range @p + * [__first,__last) such that @p __pred is true, and false + * otherwise. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) + { return !std::none_of(__first, __last, __pred); } + + /** + * @brief Find the first element in a sequence for which a + * predicate is false. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __pred A predicate. + * @return The first iterator @c i in the range @p [__first,__last) + * such that @p __pred(*i) is false, or @p __last if no such iterator exists. + */ + template + _GLIBCXX20_CONSTEXPR + inline _InputIterator + find_if_not(_InputIterator __first, _InputIterator __last, + _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + return std::__find_if_not(__first, __last, + __gnu_cxx::__ops::__pred_iter(__pred)); + } + + /** + * @brief Checks whether the sequence is partitioned. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __pred A predicate. + * @return True if the range @p [__first,__last) is partioned by @p __pred, + * i.e. if all elements that satisfy @p __pred appear before those that + * do not. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + is_partitioned(_InputIterator __first, _InputIterator __last, + _Predicate __pred) + { + __first = std::find_if_not(__first, __last, __pred); + if (__first == __last) + return true; + ++__first; + return std::none_of(__first, __last, __pred); + } + + /** + * @brief Find the partition point of a partitioned range. + * @ingroup mutating_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __pred A predicate. + * @return An iterator @p mid such that @p all_of(__first, mid, __pred) + * and @p none_of(mid, __last, __pred) are both true. + */ + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + partition_point(_ForwardIterator __first, _ForwardIterator __last, + _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_ForwardIterator>::value_type>) + + // A specific debug-mode test will be necessary... + __glibcxx_requires_valid_range(__first, __last); + + 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 (__pred(*__middle)) + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } + else + __len = __half; + } + return __first; + } +#endif + + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __remove_copy_if(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _Predicate __pred) + { + for (; __first != __last; ++__first) + if (!__pred(__first)) + { + *__result = *__first; + ++__result; + } + return __result; + } + + /** + * @brief Copy a sequence, removing elements of a given value. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @param __value The value to be removed. + * @return An iterator designating the end of the resulting sequence. + * + * Copies each element in the range @p [__first,__last) not equal + * to @p __value to the range beginning at @p __result. + * remove_copy() is stable, so the relative order of elements that + * are copied is unchanged. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + remove_copy(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, const _Tp& __value) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_InputIterator>::value_type, _Tp>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__remove_copy_if(__first, __last, __result, + __gnu_cxx::__ops::__iter_equals_val(__value)); + } + + /** + * @brief Copy a sequence, removing elements for which a predicate is true. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @param __pred A predicate. + * @return An iterator designating the end of the resulting sequence. + * + * Copies each element in the range @p [__first,__last) for which + * @p __pred returns false to the range beginning at @p __result. + * + * remove_copy_if() is stable, so the relative order of elements that are + * copied is unchanged. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + remove_copy_if(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__remove_copy_if(__first, __last, __result, + __gnu_cxx::__ops::__pred_iter(__pred)); + } + +#if __cplusplus >= 201103L + /** + * @brief Copy the elements of a sequence for which a predicate is true. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @param __pred A predicate. + * @return An iterator designating the end of the resulting sequence. + * + * Copies each element in the range @p [__first,__last) for which + * @p __pred returns true to the range beginning at @p __result. + * + * copy_if() is stable, so the relative order of elements that are + * copied is unchanged. + */ + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + copy_if(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + for (; __first != __last; ++__first) + if (__pred(*__first)) + { + *__result = *__first; + ++__result; + } + return __result; + } + + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __copy_n_a(_InputIterator __first, _Size __n, _OutputIterator __result) + { + if (__n > 0) + { + while (true) + { + *__result = *__first; + ++__result; + if (--__n > 0) + ++__first; + else + break; + } + } + return __result; + } + + template + __enable_if_t<__is_char<_CharT>::__value, _CharT*> + __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT>>, + _Size, _CharT*); + + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __copy_n(_InputIterator __first, _Size __n, + _OutputIterator __result, input_iterator_tag) + { + return std::__niter_wrap(__result, + __copy_n_a(__first, __n, + std::__niter_base(__result))); + } + + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + __copy_n(_RandomAccessIterator __first, _Size __n, + _OutputIterator __result, random_access_iterator_tag) + { return std::copy(__first, __first + __n, __result); } + + /** + * @brief Copies the range [first,first+n) into [result,result+n). + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __n The number of elements to copy. + * @param __result An output iterator. + * @return result+n. + * + * 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). + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + copy_n(_InputIterator __first, _Size __n, _OutputIterator __result) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_can_increment(__first, __n); + __glibcxx_requires_can_increment(__result, __n); + + return std::__copy_n(__first, __n, __result, + std::__iterator_category(__first)); + } + + /** + * @brief Copy the elements of a sequence to separate output sequences + * depending on the truth value of a predicate. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __out_true An output iterator. + * @param __out_false An output iterator. + * @param __pred A predicate. + * @return A pair designating the ends of the resulting sequences. + * + * Copies each element in the range @p [__first,__last) for which + * @p __pred returns true to the range beginning at @p out_true + * and each element for which @p __pred returns false to @p __out_false. + */ + template + _GLIBCXX20_CONSTEXPR + pair<_OutputIterator1, _OutputIterator2> + partition_copy(_InputIterator __first, _InputIterator __last, + _OutputIterator1 __out_true, _OutputIterator2 __out_false, + _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator1, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator2, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + for (; __first != __last; ++__first) + if (__pred(*__first)) + { + *__out_true = *__first; + ++__out_true; + } + else + { + *__out_false = *__first; + ++__out_false; + } + + return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false); + } +#endif // C++11 + + 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; + } + + /** + * @brief Remove elements from a sequence. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __value The value to be removed. + * @return An iterator designating the end of the resulting sequence. + * + * All elements equal to @p __value are removed from the range + * @p [__first,__last). + * + * remove() is stable, so the relative order of elements that are + * not removed is unchanged. + * + * Elements between the end of the resulting sequence and @p __last + * are still present, but their value is unspecified. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + remove(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __value) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_ForwardIterator>::value_type, _Tp>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__remove_if(__first, __last, + __gnu_cxx::__ops::__iter_equals_val(__value)); + } + + /** + * @brief Remove elements from a sequence using a predicate. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __pred A predicate. + * @return An iterator designating the end of the resulting sequence. + * + * All elements for which @p __pred returns true are removed from the range + * @p [__first,__last). + * + * remove_if() is stable, so the relative order of elements that are + * not removed is unchanged. + * + * Elements between the end of the resulting sequence and @p __last + * are still present, but their value is unspecified. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + remove_if(_ForwardIterator __first, _ForwardIterator __last, + _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__remove_if(__first, __last, + __gnu_cxx::__ops::__pred_iter(__pred)); + } + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __adjacent_find(_ForwardIterator __first, _ForwardIterator __last, + _BinaryPredicate __binary_pred) + { + if (__first == __last) + return __last; + _ForwardIterator __next = __first; + while (++__next != __last) + { + if (__binary_pred(__first, __next)) + return __first; + __first = __next; + } + return __last; + } + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __unique(_ForwardIterator __first, _ForwardIterator __last, + _BinaryPredicate __binary_pred) + { + // Skip the beginning, if already unique. + __first = std::__adjacent_find(__first, __last, __binary_pred); + if (__first == __last) + return __last; + + // Do the real copy work. + _ForwardIterator __dest = __first; + ++__first; + while (++__first != __last) + if (!__binary_pred(__dest, __first)) + *++__dest = _GLIBCXX_MOVE(*__first); + return ++__dest; + } + + /** + * @brief Remove consecutive duplicate values from a sequence. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @return An iterator designating the end of the resulting sequence. + * + * Removes all but the first element from each group of consecutive + * values that compare equal. + * unique() is stable, so the relative order of elements that are + * not removed is unchanged. + * Elements between the end of the resulting sequence and @p __last + * are still present, but their value is unspecified. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + unique(_ForwardIterator __first, _ForwardIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_function_requires(_EqualityComparableConcept< + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__unique(__first, __last, + __gnu_cxx::__ops::__iter_equal_to_iter()); + } + + /** + * @brief Remove consecutive values from a sequence using a predicate. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __binary_pred A binary predicate. + * @return An iterator designating the end of the resulting sequence. + * + * Removes all but the first element from each group of consecutive + * values for which @p __binary_pred returns true. + * unique() is stable, so the relative order of elements that are + * not removed is unchanged. + * Elements between the end of the resulting sequence and @p __last + * are still present, but their value is unspecified. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + unique(_ForwardIterator __first, _ForwardIterator __last, + _BinaryPredicate __binary_pred) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate, + typename iterator_traits<_ForwardIterator>::value_type, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__unique(__first, __last, + __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); + } + + /** + * This is an uglified + * unique_copy(_InputIterator, _InputIterator, _OutputIterator, + * _BinaryPredicate) + * overloaded for forward iterators and output iterator as result. + */ + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __unique_copy(_ForwardIterator __first, _ForwardIterator __last, + _OutputIterator __result, _BinaryPredicate __binary_pred, + forward_iterator_tag, output_iterator_tag) + { + // concept requirements -- iterators already checked + __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate, + typename iterator_traits<_ForwardIterator>::value_type, + typename iterator_traits<_ForwardIterator>::value_type>) + + _ForwardIterator __next = __first; + *__result = *__first; + while (++__next != __last) + if (!__binary_pred(__first, __next)) + { + __first = __next; + *++__result = *__first; + } + return ++__result; + } + + /** + * This is an uglified + * unique_copy(_InputIterator, _InputIterator, _OutputIterator, + * _BinaryPredicate) + * overloaded for input iterators and output iterator as result. + */ + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __unique_copy(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _BinaryPredicate __binary_pred, + input_iterator_tag, output_iterator_tag) + { + // concept requirements -- iterators already checked + __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate, + typename iterator_traits<_InputIterator>::value_type, + typename iterator_traits<_InputIterator>::value_type>) + + typename iterator_traits<_InputIterator>::value_type __value = *__first; + __decltype(__gnu_cxx::__ops::__iter_comp_val(__binary_pred)) + __rebound_pred + = __gnu_cxx::__ops::__iter_comp_val(__binary_pred); + *__result = __value; + while (++__first != __last) + if (!__rebound_pred(__first, __value)) + { + __value = *__first; + *++__result = __value; + } + return ++__result; + } + + /** + * This is an uglified + * unique_copy(_InputIterator, _InputIterator, _OutputIterator, + * _BinaryPredicate) + * overloaded for input iterators and forward iterator as result. + */ + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __unique_copy(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result, _BinaryPredicate __binary_pred, + input_iterator_tag, forward_iterator_tag) + { + // concept requirements -- iterators already checked + __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate, + typename iterator_traits<_ForwardIterator>::value_type, + typename iterator_traits<_InputIterator>::value_type>) + *__result = *__first; + while (++__first != __last) + if (!__binary_pred(__result, __first)) + *++__result = *__first; + return ++__result; + } + + /** + * This is an uglified reverse(_BidirectionalIterator, + * _BidirectionalIterator) + * overloaded for bidirectional iterators. + */ + template + _GLIBCXX20_CONSTEXPR + void + __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last, + bidirectional_iterator_tag) + { + while (true) + if (__first == __last || __first == --__last) + return; + else + { + std::iter_swap(__first, __last); + ++__first; + } + } + + /** + * This is an uglified reverse(_BidirectionalIterator, + * _BidirectionalIterator) + * overloaded for random access iterators. + */ + template + _GLIBCXX20_CONSTEXPR + void + __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last, + random_access_iterator_tag) + { + if (__first == __last) + return; + --__last; + while (__first < __last) + { + std::iter_swap(__first, __last); + ++__first; + --__last; + } + } + + /** + * @brief Reverse a sequence. + * @ingroup mutating_algorithms + * @param __first A bidirectional iterator. + * @param __last A bidirectional iterator. + * @return reverse() returns no value. + * + * Reverses the order of the elements in the range @p [__first,__last), + * so that the first element becomes the last etc. + * For every @c i such that @p 0<=i<=(__last-__first)/2), @p reverse() + * swaps @p *(__first+i) and @p *(__last-(i+1)) + */ + template + _GLIBCXX20_CONSTEXPR + inline void + reverse(_BidirectionalIterator __first, _BidirectionalIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept< + _BidirectionalIterator>) + __glibcxx_requires_valid_range(__first, __last); + std::__reverse(__first, __last, std::__iterator_category(__first)); + } + + /** + * @brief Copy a sequence, reversing its elements. + * @ingroup mutating_algorithms + * @param __first A bidirectional iterator. + * @param __last A bidirectional iterator. + * @param __result An output iterator. + * @return An iterator designating the end of the resulting sequence. + * + * Copies the elements in the range @p [__first,__last) to the + * range @p [__result,__result+(__last-__first)) such that the + * order of the elements is reversed. For every @c i such that @p + * 0<=i<=(__last-__first), @p reverse_copy() performs the + * assignment @p *(__result+(__last-__first)-1-i) = *(__first+i). + * The ranges @p [__first,__last) and @p + * [__result,__result+(__last-__first)) must not overlap. + */ + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last, + _OutputIterator __result) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_BidirectionalIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + while (__first != __last) + { + --__last; + *__result = *__last; + ++__result; + } + return __result; + } + + /** + * This is a helper function for the rotate algorithm specialized on RAIs. + * It returns the greatest common divisor of two integer values. + */ + template + _GLIBCXX20_CONSTEXPR + _EuclideanRingElement + __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n) + { + while (__n != 0) + { + _EuclideanRingElement __t = __m % __n; + __m = __n; + __n = __t; + } + return __m; + } + + inline namespace _V2 + { + + /// This is a helper function for the rotate algorithm. + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __rotate(_ForwardIterator __first, + _ForwardIterator __middle, + _ForwardIterator __last, + forward_iterator_tag) + { + if (__first == __middle) + return __last; + else if (__last == __middle) + return __first; + + _ForwardIterator __first2 = __middle; + do + { + std::iter_swap(__first, __first2); + ++__first; + ++__first2; + if (__first == __middle) + __middle = __first2; + } + while (__first2 != __last); + + _ForwardIterator __ret = __first; + + __first2 = __middle; + + while (__first2 != __last) + { + std::iter_swap(__first, __first2); + ++__first; + ++__first2; + if (__first == __middle) + __middle = __first2; + else if (__first2 == __last) + __first2 = __middle; + } + return __ret; + } + + /// This is a helper function for the rotate algorithm. + template + _GLIBCXX20_CONSTEXPR + _BidirectionalIterator + __rotate(_BidirectionalIterator __first, + _BidirectionalIterator __middle, + _BidirectionalIterator __last, + bidirectional_iterator_tag) + { + // concept requirements + __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept< + _BidirectionalIterator>) + + if (__first == __middle) + return __last; + else if (__last == __middle) + return __first; + + std::__reverse(__first, __middle, bidirectional_iterator_tag()); + std::__reverse(__middle, __last, bidirectional_iterator_tag()); + + while (__first != __middle && __middle != __last) + { + std::iter_swap(__first, --__last); + ++__first; + } + + if (__first == __middle) + { + std::__reverse(__middle, __last, bidirectional_iterator_tag()); + return __last; + } + else + { + std::__reverse(__first, __middle, bidirectional_iterator_tag()); + return __first; + } + } + + /// This is a helper function for the rotate algorithm. + template + _GLIBCXX20_CONSTEXPR + _RandomAccessIterator + __rotate(_RandomAccessIterator __first, + _RandomAccessIterator __middle, + _RandomAccessIterator __last, + random_access_iterator_tag) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + + if (__first == __middle) + return __last; + else if (__last == __middle) + return __first; + + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _Distance; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; + + _Distance __n = __last - __first; + _Distance __k = __middle - __first; + + if (__k == __n - __k) + { + std::swap_ranges(__first, __middle, __middle); + return __middle; + } + + _RandomAccessIterator __p = __first; + _RandomAccessIterator __ret = __first + (__last - __middle); + + for (;;) + { + if (__k < __n - __k) + { + if (__is_pod(_ValueType) && __k == 1) + { + _ValueType __t = _GLIBCXX_MOVE(*__p); + _GLIBCXX_MOVE3(__p + 1, __p + __n, __p); + *(__p + __n - 1) = _GLIBCXX_MOVE(__t); + return __ret; + } + _RandomAccessIterator __q = __p + __k; + for (_Distance __i = 0; __i < __n - __k; ++ __i) + { + std::iter_swap(__p, __q); + ++__p; + ++__q; + } + __n %= __k; + if (__n == 0) + return __ret; + std::swap(__n, __k); + __k = __n - __k; + } + else + { + __k = __n - __k; + if (__is_pod(_ValueType) && __k == 1) + { + _ValueType __t = _GLIBCXX_MOVE(*(__p + __n - 1)); + _GLIBCXX_MOVE_BACKWARD3(__p, __p + __n - 1, __p + __n); + *__p = _GLIBCXX_MOVE(__t); + return __ret; + } + _RandomAccessIterator __q = __p + __n; + __p = __q - __k; + for (_Distance __i = 0; __i < __n - __k; ++ __i) + { + --__p; + --__q; + std::iter_swap(__p, __q); + } + __n %= __k; + if (__n == 0) + return __ret; + std::swap(__n, __k); + } + } + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 488. rotate throws away useful information + /** + * @brief Rotate the elements of a sequence. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __middle A forward iterator. + * @param __last A forward iterator. + * @return first + (last - middle). + * + * Rotates the elements of the range @p [__first,__last) by + * @p (__middle - __first) positions so that the element at @p __middle + * is moved to @p __first, the element at @p __middle+1 is moved to + * @p __first+1 and so on for each element in the range + * @p [__first,__last). + * + * This effectively swaps the ranges @p [__first,__middle) and + * @p [__middle,__last). + * + * Performs + * @p *(__first+(n+(__last-__middle))%(__last-__first))=*(__first+n) + * for each @p n in the range @p [0,__last-__first). + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + rotate(_ForwardIterator __first, _ForwardIterator __middle, + _ForwardIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_requires_valid_range(__first, __middle); + __glibcxx_requires_valid_range(__middle, __last); + + return std::__rotate(__first, __middle, __last, + std::__iterator_category(__first)); + } + + } // namespace _V2 + + /** + * @brief Copy a sequence, rotating its elements. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __middle A forward iterator. + * @param __last A forward iterator. + * @param __result An output iterator. + * @return An iterator designating the end of the resulting sequence. + * + * Copies the elements of the range @p [__first,__last) to the + * range beginning at @result, rotating the copied elements by + * @p (__middle-__first) positions so that the element at @p __middle + * is moved to @p __result, the element at @p __middle+1 is moved + * to @p __result+1 and so on for each element in the range @p + * [__first,__last). + * + * Performs + * @p *(__result+(n+(__last-__middle))%(__last-__first))=*(__first+n) + * for each @p n in the range @p [0,__last-__first). + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + rotate_copy(_ForwardIterator __first, _ForwardIterator __middle, + _ForwardIterator __last, _OutputIterator __result) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __middle); + __glibcxx_requires_valid_range(__middle, __last); + + return std::copy(__first, __middle, + std::copy(__middle, __last, __result)); + } + + /// This is a helper function... + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __partition(_ForwardIterator __first, _ForwardIterator __last, + _Predicate __pred, forward_iterator_tag) + { + if (__first == __last) + return __first; + + while (__pred(*__first)) + if (++__first == __last) + return __first; + + _ForwardIterator __next = __first; + + while (++__next != __last) + if (__pred(*__next)) + { + std::iter_swap(__first, __next); + ++__first; + } + + return __first; + } + + /// This is a helper function... + template + _GLIBCXX20_CONSTEXPR + _BidirectionalIterator + __partition(_BidirectionalIterator __first, _BidirectionalIterator __last, + _Predicate __pred, bidirectional_iterator_tag) + { + while (true) + { + while (true) + if (__first == __last) + return __first; + else if (__pred(*__first)) + ++__first; + else + break; + --__last; + while (true) + if (__first == __last) + return __first; + else if (!bool(__pred(*__last))) + --__last; + else + break; + std::iter_swap(__first, __last); + ++__first; + } + } + + // partition + + /// This is a helper function... + /// Requires __first != __last and !__pred(__first) + /// and __len == distance(__first, __last). + /// + /// !__pred(__first) allows us to guarantee that we don't + /// move-assign an element onto itself. + template + _ForwardIterator + __stable_partition_adaptive(_ForwardIterator __first, + _ForwardIterator __last, + _Predicate __pred, _Distance __len, + _Pointer __buffer, + _Distance __buffer_size) + { + if (__len == 1) + return __first; + + if (__len <= __buffer_size) + { + _ForwardIterator __result1 = __first; + _Pointer __result2 = __buffer; + + // The precondition guarantees that !__pred(__first), so + // move that element to the buffer before starting the loop. + // This ensures that we only call __pred once per element. + *__result2 = _GLIBCXX_MOVE(*__first); + ++__result2; + ++__first; + for (; __first != __last; ++__first) + if (__pred(__first)) + { + *__result1 = _GLIBCXX_MOVE(*__first); + ++__result1; + } + else + { + *__result2 = _GLIBCXX_MOVE(*__first); + ++__result2; + } + + _GLIBCXX_MOVE3(__buffer, __result2, __result1); + return __result1; + } + + _ForwardIterator __middle = __first; + std::advance(__middle, __len / 2); + _ForwardIterator __left_split = + std::__stable_partition_adaptive(__first, __middle, __pred, + __len / 2, __buffer, + __buffer_size); + + // Advance past true-predicate values to satisfy this + // function's preconditions. + _Distance __right_len = __len - __len / 2; + _ForwardIterator __right_split = + std::__find_if_not_n(__middle, __right_len, __pred); + + if (__right_len) + __right_split = + std::__stable_partition_adaptive(__right_split, __last, __pred, + __right_len, + __buffer, __buffer_size); + + return std::rotate(__left_split, __middle, __right_split); + } + + template + _ForwardIterator + __stable_partition(_ForwardIterator __first, _ForwardIterator __last, + _Predicate __pred) + { + __first = std::__find_if_not(__first, __last, __pred); + + if (__first == __last) + return __first; + + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + typedef typename iterator_traits<_ForwardIterator>::difference_type + _DistanceType; + + _Temporary_buffer<_ForwardIterator, _ValueType> + __buf(__first, std::distance(__first, __last)); + return + std::__stable_partition_adaptive(__first, __last, __pred, + _DistanceType(__buf.requested_size()), + __buf.begin(), + _DistanceType(__buf.size())); + } + + /** + * @brief Move elements for which a predicate is true to the beginning + * of a sequence, preserving relative ordering. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __pred A predicate functor. + * @return An iterator @p middle such that @p __pred(i) is true for each + * iterator @p i in the range @p [first,middle) and false for each @p i + * in the range @p [middle,last). + * + * Performs the same function as @p partition() with the additional + * guarantee that the relative ordering of elements in each group is + * preserved, so any two elements @p x and @p y in the range + * @p [__first,__last) such that @p __pred(x)==__pred(y) will have the same + * relative ordering after calling @p stable_partition(). + */ + template + inline _ForwardIterator + stable_partition(_ForwardIterator __first, _ForwardIterator __last, + _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__stable_partition(__first, __last, + __gnu_cxx::__ops::__pred_iter(__pred)); + } + + /// This is a helper function for the sort routines. + template + _GLIBCXX20_CONSTEXPR + void + __heap_select(_RandomAccessIterator __first, + _RandomAccessIterator __middle, + _RandomAccessIterator __last, _Compare __comp) + { + std::__make_heap(__first, __middle, __comp); + for (_RandomAccessIterator __i = __middle; __i < __last; ++__i) + if (__comp(__i, __first)) + std::__pop_heap(__first, __middle, __i, __comp); + } + + // partial_sort + + template + _GLIBCXX20_CONSTEXPR + _RandomAccessIterator + __partial_sort_copy(_InputIterator __first, _InputIterator __last, + _RandomAccessIterator __result_first, + _RandomAccessIterator __result_last, + _Compare __comp) + { + typedef typename iterator_traits<_InputIterator>::value_type + _InputValueType; + typedef iterator_traits<_RandomAccessIterator> _RItTraits; + typedef typename _RItTraits::difference_type _DistanceType; + + if (__result_first == __result_last) + return __result_last; + _RandomAccessIterator __result_real_last = __result_first; + while (__first != __last && __result_real_last != __result_last) + { + *__result_real_last = *__first; + ++__result_real_last; + ++__first; + } + + std::__make_heap(__result_first, __result_real_last, __comp); + while (__first != __last) + { + if (__comp(__first, __result_first)) + std::__adjust_heap(__result_first, _DistanceType(0), + _DistanceType(__result_real_last + - __result_first), + _InputValueType(*__first), __comp); + ++__first; + } + std::__sort_heap(__result_first, __result_real_last, __comp); + return __result_real_last; + } + + /** + * @brief Copy the smallest elements of a sequence. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __result_first A random-access iterator. + * @param __result_last Another random-access iterator. + * @return An iterator indicating the end of the resulting sequence. + * + * Copies and sorts the smallest N values from the range @p [__first,__last) + * to the range beginning at @p __result_first, where the number of + * elements to be copied, @p N, is the smaller of @p (__last-__first) and + * @p (__result_last-__result_first). + * After the sort if @e i and @e j are iterators in the range + * @p [__result_first,__result_first+N) such that i precedes j then + * *j<*i is false. + * The value returned is @p __result_first+N. + */ + template + _GLIBCXX20_CONSTEXPR + inline _RandomAccessIterator + partial_sort_copy(_InputIterator __first, _InputIterator __last, + _RandomAccessIterator __result_first, + _RandomAccessIterator __result_last) + { +#ifdef _GLIBCXX_CONCEPT_CHECKS + typedef typename iterator_traits<_InputIterator>::value_type + _InputValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _OutputValueType; +#endif + + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_ConvertibleConcept<_InputValueType, + _OutputValueType>) + __glibcxx_function_requires(_LessThanOpConcept<_InputValueType, + _OutputValueType>) + __glibcxx_function_requires(_LessThanComparableConcept<_OutputValueType>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + __glibcxx_requires_valid_range(__result_first, __result_last); + + return std::__partial_sort_copy(__first, __last, + __result_first, __result_last, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Copy the smallest elements of a sequence using a predicate for + * comparison. + * @ingroup sorting_algorithms + * @param __first An input iterator. + * @param __last Another input iterator. + * @param __result_first A random-access iterator. + * @param __result_last Another random-access iterator. + * @param __comp A comparison functor. + * @return An iterator indicating the end of the resulting sequence. + * + * Copies and sorts the smallest N values from the range @p [__first,__last) + * to the range beginning at @p result_first, where the number of + * elements to be copied, @p N, is the smaller of @p (__last-__first) and + * @p (__result_last-__result_first). + * After the sort if @e i and @e j are iterators in the range + * @p [__result_first,__result_first+N) such that i precedes j then + * @p __comp(*j,*i) is false. + * The value returned is @p __result_first+N. + */ + template + _GLIBCXX20_CONSTEXPR + inline _RandomAccessIterator + partial_sort_copy(_InputIterator __first, _InputIterator __last, + _RandomAccessIterator __result_first, + _RandomAccessIterator __result_last, + _Compare __comp) + { +#ifdef _GLIBCXX_CONCEPT_CHECKS + typedef typename iterator_traits<_InputIterator>::value_type + _InputValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _OutputValueType; +#endif + + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_ConvertibleConcept<_InputValueType, + _OutputValueType>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + _InputValueType, _OutputValueType>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + _OutputValueType, _OutputValueType>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + __glibcxx_requires_valid_range(__result_first, __result_last); + + return std::__partial_sort_copy(__first, __last, + __result_first, __result_last, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + /// This is a helper function for the sort routine. + template + _GLIBCXX20_CONSTEXPR + void + __unguarded_linear_insert(_RandomAccessIterator __last, + _Compare __comp) + { + typename iterator_traits<_RandomAccessIterator>::value_type + __val = _GLIBCXX_MOVE(*__last); + _RandomAccessIterator __next = __last; + --__next; + while (__comp(__val, __next)) + { + *__last = _GLIBCXX_MOVE(*__next); + __last = __next; + --__next; + } + *__last = _GLIBCXX_MOVE(__val); + } + + /// This is a helper function for the sort routine. + template + _GLIBCXX20_CONSTEXPR + void + __insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) + { + if (__first == __last) return; + + for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) + { + if (__comp(__i, __first)) + { + typename iterator_traits<_RandomAccessIterator>::value_type + __val = _GLIBCXX_MOVE(*__i); + _GLIBCXX_MOVE_BACKWARD3(__first, __i, __i + 1); + *__first = _GLIBCXX_MOVE(__val); + } + else + std::__unguarded_linear_insert(__i, + __gnu_cxx::__ops::__val_comp_iter(__comp)); + } + } + + /// This is a helper function for the sort routine. + template + _GLIBCXX20_CONSTEXPR + inline void + __unguarded_insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) + { + for (_RandomAccessIterator __i = __first; __i != __last; ++__i) + std::__unguarded_linear_insert(__i, + __gnu_cxx::__ops::__val_comp_iter(__comp)); + } + + /** + * @doctodo + * This controls some aspect of the sort routines. + */ + enum { _S_threshold = 16 }; + + /// This is a helper function for the sort routine. + template + _GLIBCXX20_CONSTEXPR + void + __final_insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) + { + if (__last - __first > int(_S_threshold)) + { + std::__insertion_sort(__first, __first + int(_S_threshold), __comp); + std::__unguarded_insertion_sort(__first + int(_S_threshold), __last, + __comp); + } + else + std::__insertion_sort(__first, __last, __comp); + } + + /// This is a helper function... + template + _GLIBCXX20_CONSTEXPR + _RandomAccessIterator + __unguarded_partition(_RandomAccessIterator __first, + _RandomAccessIterator __last, + _RandomAccessIterator __pivot, _Compare __comp) + { + while (true) + { + while (__comp(__first, __pivot)) + ++__first; + --__last; + while (__comp(__pivot, __last)) + --__last; + if (!(__first < __last)) + return __first; + std::iter_swap(__first, __last); + ++__first; + } + } + + /// This is a helper function... + template + _GLIBCXX20_CONSTEXPR + inline _RandomAccessIterator + __unguarded_partition_pivot(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) + { + _RandomAccessIterator __mid = __first + (__last - __first) / 2; + std::__move_median_to_first(__first, __first + 1, __mid, __last - 1, + __comp); + return std::__unguarded_partition(__first + 1, __last, __first, __comp); + } + + template + _GLIBCXX20_CONSTEXPR + inline void + __partial_sort(_RandomAccessIterator __first, + _RandomAccessIterator __middle, + _RandomAccessIterator __last, + _Compare __comp) + { + std::__heap_select(__first, __middle, __last, __comp); + std::__sort_heap(__first, __middle, __comp); + } + + /// This is a helper function for the sort routine. + template + _GLIBCXX20_CONSTEXPR + void + __introsort_loop(_RandomAccessIterator __first, + _RandomAccessIterator __last, + _Size __depth_limit, _Compare __comp) + { + while (__last - __first > int(_S_threshold)) + { + if (__depth_limit == 0) + { + std::__partial_sort(__first, __last, __last, __comp); + return; + } + --__depth_limit; + _RandomAccessIterator __cut = + std::__unguarded_partition_pivot(__first, __last, __comp); + std::__introsort_loop(__cut, __last, __depth_limit, __comp); + __last = __cut; + } + } + + // sort + + template + _GLIBCXX20_CONSTEXPR + inline void + __sort(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + if (__first != __last) + { + std::__introsort_loop(__first, __last, + std::__lg(__last - __first) * 2, + __comp); + std::__final_insertion_sort(__first, __last, __comp); + } + } + + template + _GLIBCXX20_CONSTEXPR + void + __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth, + _RandomAccessIterator __last, _Size __depth_limit, + _Compare __comp) + { + while (__last - __first > 3) + { + if (__depth_limit == 0) + { + std::__heap_select(__first, __nth + 1, __last, __comp); + // Place the nth largest element in its final position. + std::iter_swap(__first, __nth); + return; + } + --__depth_limit; + _RandomAccessIterator __cut = + std::__unguarded_partition_pivot(__first, __last, __comp); + if (__cut <= __nth) + __first = __cut; + else + __last = __cut; + } + std::__insertion_sort(__first, __last, __comp); + } + + // nth_element + + // lower_bound moved to stl_algobase.h + + /** + * @brief Finds the first position in which @p __val could be inserted + * without changing the ordering. + * @ingroup binary_search_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __val The search term. + * @param __comp A functor to use for comparisons. + * @return An iterator pointing to the first element not less + * than @p __val, or end() if every element is less + * than @p __val. + * @ingroup binary_search_algorithms + * + * The comparison function should have the same effects on ordering as + * the function used for the initial sort. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + lower_bound(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_ForwardIterator>::value_type, _Tp>) + __glibcxx_requires_partitioned_lower_pred(__first, __last, + __val, __comp); + + return std::__lower_bound(__first, __last, __val, + __gnu_cxx::__ops::__iter_comp_val(__comp)); + } + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __upper_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(__val, __middle)) + __len = __half; + else + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } + } + return __first; + } + + /** + * @brief Finds the last position in which @p __val could be inserted + * without changing the ordering. + * @ingroup binary_search_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __val The search term. + * @return An iterator pointing to the first element greater than @p __val, + * or end() if no elements are greater than @p __val. + * @ingroup binary_search_algorithms + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + upper_bound(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_LessThanOpConcept< + _Tp, typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_partitioned_upper(__first, __last, __val); + + return std::__upper_bound(__first, __last, __val, + __gnu_cxx::__ops::__val_less_iter()); + } + + /** + * @brief Finds the last position in which @p __val could be inserted + * without changing the ordering. + * @ingroup binary_search_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __val The search term. + * @param __comp A functor to use for comparisons. + * @return An iterator pointing to the first element greater than @p __val, + * or end() if no elements are greater than @p __val. + * @ingroup binary_search_algorithms + * + * The comparison function should have the same effects on ordering as + * the function used for the initial sort. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + upper_bound(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + _Tp, typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_partitioned_upper_pred(__first, __last, + __val, __comp); + + return std::__upper_bound(__first, __last, __val, + __gnu_cxx::__ops::__val_comp_iter(__comp)); + } + + template + _GLIBCXX20_CONSTEXPR + pair<_ForwardIterator, _ForwardIterator> + __equal_range(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val, + _CompareItTp __comp_it_val, _CompareTpIt __comp_val_it) + { + 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_it_val(__middle, __val)) + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } + else if (__comp_val_it(__val, __middle)) + __len = __half; + else + { + _ForwardIterator __left + = std::__lower_bound(__first, __middle, __val, __comp_it_val); + std::advance(__first, __len); + _ForwardIterator __right + = std::__upper_bound(++__middle, __first, __val, __comp_val_it); + return pair<_ForwardIterator, _ForwardIterator>(__left, __right); + } + } + return pair<_ForwardIterator, _ForwardIterator>(__first, __first); + } + + /** + * @brief Finds the largest subrange in which @p __val could be inserted + * at any place in it without changing the ordering. + * @ingroup binary_search_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __val The search term. + * @return An pair of iterators defining the subrange. + * @ingroup binary_search_algorithms + * + * This is equivalent to + * @code + * std::make_pair(lower_bound(__first, __last, __val), + * upper_bound(__first, __last, __val)) + * @endcode + * but does not actually call those functions. + */ + template + _GLIBCXX20_CONSTEXPR + inline pair<_ForwardIterator, _ForwardIterator> + equal_range(_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_function_requires(_LessThanOpConcept< + _Tp, typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_partitioned_lower(__first, __last, __val); + __glibcxx_requires_partitioned_upper(__first, __last, __val); + + return std::__equal_range(__first, __last, __val, + __gnu_cxx::__ops::__iter_less_val(), + __gnu_cxx::__ops::__val_less_iter()); + } + + /** + * @brief Finds the largest subrange in which @p __val could be inserted + * at any place in it without changing the ordering. + * @param __first An iterator. + * @param __last Another iterator. + * @param __val The search term. + * @param __comp A functor to use for comparisons. + * @return An pair of iterators defining the subrange. + * @ingroup binary_search_algorithms + * + * This is equivalent to + * @code + * std::make_pair(lower_bound(__first, __last, __val, __comp), + * upper_bound(__first, __last, __val, __comp)) + * @endcode + * but does not actually call those functions. + */ + template + _GLIBCXX20_CONSTEXPR + inline pair<_ForwardIterator, _ForwardIterator> + equal_range(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_ForwardIterator>::value_type, _Tp>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + _Tp, typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_partitioned_lower_pred(__first, __last, + __val, __comp); + __glibcxx_requires_partitioned_upper_pred(__first, __last, + __val, __comp); + + return std::__equal_range(__first, __last, __val, + __gnu_cxx::__ops::__iter_comp_val(__comp), + __gnu_cxx::__ops::__val_comp_iter(__comp)); + } + + /** + * @brief Determines whether an element exists in a range. + * @ingroup binary_search_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __val The search term. + * @return True if @p __val (or its equivalent) is in [@p + * __first,@p __last ]. + * + * Note that this does not actually return an iterator to @p __val. For + * that, use std::find or a container's specialized find member functions. + */ + template + _GLIBCXX20_CONSTEXPR + bool + binary_search(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_LessThanOpConcept< + _Tp, typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_partitioned_lower(__first, __last, __val); + __glibcxx_requires_partitioned_upper(__first, __last, __val); + + _ForwardIterator __i + = std::__lower_bound(__first, __last, __val, + __gnu_cxx::__ops::__iter_less_val()); + return __i != __last && !(__val < *__i); + } + + /** + * @brief Determines whether an element exists in a range. + * @ingroup binary_search_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __val The search term. + * @param __comp A functor to use for comparisons. + * @return True if @p __val (or its equivalent) is in @p [__first,__last]. + * + * Note that this does not actually return an iterator to @p __val. For + * that, use std::find or a container's specialized find member functions. + * + * The comparison function should have the same effects on ordering as + * the function used for the initial sort. + */ + template + _GLIBCXX20_CONSTEXPR + bool + binary_search(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + _Tp, typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_partitioned_lower_pred(__first, __last, + __val, __comp); + __glibcxx_requires_partitioned_upper_pred(__first, __last, + __val, __comp); + + _ForwardIterator __i + = std::__lower_bound(__first, __last, __val, + __gnu_cxx::__ops::__iter_comp_val(__comp)); + return __i != __last && !bool(__comp(__val, *__i)); + } + + // merge + + /// This is a helper function for the __merge_adaptive routines. + template + void + __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, _Compare __comp) + { + while (__first1 != __last1 && __first2 != __last2) + { + if (__comp(__first2, __first1)) + { + *__result = _GLIBCXX_MOVE(*__first2); + ++__first2; + } + else + { + *__result = _GLIBCXX_MOVE(*__first1); + ++__first1; + } + ++__result; + } + if (__first1 != __last1) + _GLIBCXX_MOVE3(__first1, __last1, __result); + } + + /// This is a helper function for the __merge_adaptive routines. + template + void + __move_merge_adaptive_backward(_BidirectionalIterator1 __first1, + _BidirectionalIterator1 __last1, + _BidirectionalIterator2 __first2, + _BidirectionalIterator2 __last2, + _BidirectionalIterator3 __result, + _Compare __comp) + { + if (__first1 == __last1) + { + _GLIBCXX_MOVE_BACKWARD3(__first2, __last2, __result); + return; + } + else if (__first2 == __last2) + return; + + --__last1; + --__last2; + while (true) + { + if (__comp(__last2, __last1)) + { + *--__result = _GLIBCXX_MOVE(*__last1); + if (__first1 == __last1) + { + _GLIBCXX_MOVE_BACKWARD3(__first2, ++__last2, __result); + return; + } + --__last1; + } + else + { + *--__result = _GLIBCXX_MOVE(*__last2); + if (__first2 == __last2) + return; + --__last2; + } + } + } + + /// This is a helper function for the merge routines. + template + _BidirectionalIterator1 + __rotate_adaptive(_BidirectionalIterator1 __first, + _BidirectionalIterator1 __middle, + _BidirectionalIterator1 __last, + _Distance __len1, _Distance __len2, + _BidirectionalIterator2 __buffer, + _Distance __buffer_size) + { + _BidirectionalIterator2 __buffer_end; + if (__len1 > __len2 && __len2 <= __buffer_size) + { + if (__len2) + { + __buffer_end = _GLIBCXX_MOVE3(__middle, __last, __buffer); + _GLIBCXX_MOVE_BACKWARD3(__first, __middle, __last); + return _GLIBCXX_MOVE3(__buffer, __buffer_end, __first); + } + else + return __first; + } + else if (__len1 <= __buffer_size) + { + if (__len1) + { + __buffer_end = _GLIBCXX_MOVE3(__first, __middle, __buffer); + _GLIBCXX_MOVE3(__middle, __last, __first); + return _GLIBCXX_MOVE_BACKWARD3(__buffer, __buffer_end, __last); + } + else + return __last; + } + else + return std::rotate(__first, __middle, __last); + } + + /// This is a helper function for the merge routines. + template + void + __merge_adaptive(_BidirectionalIterator __first, + _BidirectionalIterator __middle, + _BidirectionalIterator __last, + _Distance __len1, _Distance __len2, + _Pointer __buffer, _Distance __buffer_size, + _Compare __comp) + { + if (__len1 <= __len2 && __len1 <= __buffer_size) + { + _Pointer __buffer_end = _GLIBCXX_MOVE3(__first, __middle, __buffer); + std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last, + __first, __comp); + } + else if (__len2 <= __buffer_size) + { + _Pointer __buffer_end = _GLIBCXX_MOVE3(__middle, __last, __buffer); + std::__move_merge_adaptive_backward(__first, __middle, __buffer, + __buffer_end, __last, __comp); + } + else + { + _BidirectionalIterator __first_cut = __first; + _BidirectionalIterator __second_cut = __middle; + _Distance __len11 = 0; + _Distance __len22 = 0; + if (__len1 > __len2) + { + __len11 = __len1 / 2; + std::advance(__first_cut, __len11); + __second_cut + = std::__lower_bound(__middle, __last, *__first_cut, + __gnu_cxx::__ops::__iter_comp_val(__comp)); + __len22 = std::distance(__middle, __second_cut); + } + else + { + __len22 = __len2 / 2; + std::advance(__second_cut, __len22); + __first_cut + = std::__upper_bound(__first, __middle, *__second_cut, + __gnu_cxx::__ops::__val_comp_iter(__comp)); + __len11 = std::distance(__first, __first_cut); + } + + _BidirectionalIterator __new_middle + = std::__rotate_adaptive(__first_cut, __middle, __second_cut, + __len1 - __len11, __len22, __buffer, + __buffer_size); + std::__merge_adaptive(__first, __first_cut, __new_middle, __len11, + __len22, __buffer, __buffer_size, __comp); + std::__merge_adaptive(__new_middle, __second_cut, __last, + __len1 - __len11, + __len2 - __len22, __buffer, + __buffer_size, __comp); + } + } + + /// This is a helper function for the merge routines. + template + void + __merge_without_buffer(_BidirectionalIterator __first, + _BidirectionalIterator __middle, + _BidirectionalIterator __last, + _Distance __len1, _Distance __len2, + _Compare __comp) + { + if (__len1 == 0 || __len2 == 0) + return; + + if (__len1 + __len2 == 2) + { + if (__comp(__middle, __first)) + std::iter_swap(__first, __middle); + return; + } + + _BidirectionalIterator __first_cut = __first; + _BidirectionalIterator __second_cut = __middle; + _Distance __len11 = 0; + _Distance __len22 = 0; + if (__len1 > __len2) + { + __len11 = __len1 / 2; + std::advance(__first_cut, __len11); + __second_cut + = std::__lower_bound(__middle, __last, *__first_cut, + __gnu_cxx::__ops::__iter_comp_val(__comp)); + __len22 = std::distance(__middle, __second_cut); + } + else + { + __len22 = __len2 / 2; + std::advance(__second_cut, __len22); + __first_cut + = std::__upper_bound(__first, __middle, *__second_cut, + __gnu_cxx::__ops::__val_comp_iter(__comp)); + __len11 = std::distance(__first, __first_cut); + } + + _BidirectionalIterator __new_middle + = std::rotate(__first_cut, __middle, __second_cut); + std::__merge_without_buffer(__first, __first_cut, __new_middle, + __len11, __len22, __comp); + std::__merge_without_buffer(__new_middle, __second_cut, __last, + __len1 - __len11, __len2 - __len22, __comp); + } + + template + void + __inplace_merge(_BidirectionalIterator __first, + _BidirectionalIterator __middle, + _BidirectionalIterator __last, + _Compare __comp) + { + typedef typename iterator_traits<_BidirectionalIterator>::value_type + _ValueType; + typedef typename iterator_traits<_BidirectionalIterator>::difference_type + _DistanceType; + + if (__first == __middle || __middle == __last) + return; + + const _DistanceType __len1 = std::distance(__first, __middle); + const _DistanceType __len2 = std::distance(__middle, __last); + + typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf; + _TmpBuf __buf(__first, __len1 + __len2); + + if (__buf.begin() == 0) + std::__merge_without_buffer + (__first, __middle, __last, __len1, __len2, __comp); + else + std::__merge_adaptive + (__first, __middle, __last, __len1, __len2, __buf.begin(), + _DistanceType(__buf.size()), __comp); + } + + /** + * @brief Merges two sorted ranges in place. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __middle Another iterator. + * @param __last Another iterator. + * @return Nothing. + * + * Merges two sorted and consecutive ranges, [__first,__middle) and + * [__middle,__last), and puts the result in [__first,__last). The + * output will be sorted. The sort is @e stable, that is, for + * equivalent elements in the two ranges, elements from the first + * range will always come before elements from the second. + * + * If enough additional memory is available, this takes (__last-__first)-1 + * comparisons. Otherwise an NlogN algorithm is used, where N is + * distance(__first,__last). + */ + template + inline void + inplace_merge(_BidirectionalIterator __first, + _BidirectionalIterator __middle, + _BidirectionalIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept< + _BidirectionalIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_BidirectionalIterator>::value_type>) + __glibcxx_requires_sorted(__first, __middle); + __glibcxx_requires_sorted(__middle, __last); + __glibcxx_requires_irreflexive(__first, __last); + + std::__inplace_merge(__first, __middle, __last, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Merges two sorted ranges in place. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __middle Another iterator. + * @param __last Another iterator. + * @param __comp A functor to use for comparisons. + * @return Nothing. + * + * Merges two sorted and consecutive ranges, [__first,__middle) and + * [middle,last), and puts the result in [__first,__last). The output will + * be sorted. The sort is @e stable, that is, for equivalent + * elements in the two ranges, elements from the first range will always + * come before elements from the second. + * + * If enough additional memory is available, this takes (__last-__first)-1 + * comparisons. Otherwise an NlogN algorithm is used, where N is + * distance(__first,__last). + * + * The comparison function should have the same effects on ordering as + * the function used for the initial sort. + */ + template + inline void + inplace_merge(_BidirectionalIterator __first, + _BidirectionalIterator __middle, + _BidirectionalIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept< + _BidirectionalIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_BidirectionalIterator>::value_type, + typename iterator_traits<_BidirectionalIterator>::value_type>) + __glibcxx_requires_sorted_pred(__first, __middle, __comp); + __glibcxx_requires_sorted_pred(__middle, __last, __comp); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + std::__inplace_merge(__first, __middle, __last, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + + /// This is a helper function for the __merge_sort_loop routines. + template + _OutputIterator + __move_merge(_InputIterator __first1, _InputIterator __last1, + _InputIterator __first2, _InputIterator __last2, + _OutputIterator __result, _Compare __comp) + { + while (__first1 != __last1 && __first2 != __last2) + { + if (__comp(__first2, __first1)) + { + *__result = _GLIBCXX_MOVE(*__first2); + ++__first2; + } + else + { + *__result = _GLIBCXX_MOVE(*__first1); + ++__first1; + } + ++__result; + } + return _GLIBCXX_MOVE3(__first2, __last2, + _GLIBCXX_MOVE3(__first1, __last1, + __result)); + } + + template + void + __merge_sort_loop(_RandomAccessIterator1 __first, + _RandomAccessIterator1 __last, + _RandomAccessIterator2 __result, _Distance __step_size, + _Compare __comp) + { + const _Distance __two_step = 2 * __step_size; + + while (__last - __first >= __two_step) + { + __result = std::__move_merge(__first, __first + __step_size, + __first + __step_size, + __first + __two_step, + __result, __comp); + __first += __two_step; + } + __step_size = std::min(_Distance(__last - __first), __step_size); + + std::__move_merge(__first, __first + __step_size, + __first + __step_size, __last, __result, __comp); + } + + template + _GLIBCXX20_CONSTEXPR + void + __chunk_insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, + _Distance __chunk_size, _Compare __comp) + { + while (__last - __first >= __chunk_size) + { + std::__insertion_sort(__first, __first + __chunk_size, __comp); + __first += __chunk_size; + } + std::__insertion_sort(__first, __last, __comp); + } + + enum { _S_chunk_size = 7 }; + + template + void + __merge_sort_with_buffer(_RandomAccessIterator __first, + _RandomAccessIterator __last, + _Pointer __buffer, _Compare __comp) + { + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _Distance; + + const _Distance __len = __last - __first; + const _Pointer __buffer_last = __buffer + __len; + + _Distance __step_size = _S_chunk_size; + std::__chunk_insertion_sort(__first, __last, __step_size, __comp); + + while (__step_size < __len) + { + std::__merge_sort_loop(__first, __last, __buffer, + __step_size, __comp); + __step_size *= 2; + std::__merge_sort_loop(__buffer, __buffer_last, __first, + __step_size, __comp); + __step_size *= 2; + } + } + + template + void + __stable_sort_adaptive(_RandomAccessIterator __first, + _RandomAccessIterator __last, + _Pointer __buffer, _Distance __buffer_size, + _Compare __comp) + { + const _Distance __len = (__last - __first + 1) / 2; + const _RandomAccessIterator __middle = __first + __len; + if (__len > __buffer_size) + { + std::__stable_sort_adaptive(__first, __middle, __buffer, + __buffer_size, __comp); + std::__stable_sort_adaptive(__middle, __last, __buffer, + __buffer_size, __comp); + } + else + { + std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp); + std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp); + } + std::__merge_adaptive(__first, __middle, __last, + _Distance(__middle - __first), + _Distance(__last - __middle), + __buffer, __buffer_size, + __comp); + } + + /// This is a helper function for the stable sorting routines. + template + void + __inplace_stable_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) + { + if (__last - __first < 15) + { + std::__insertion_sort(__first, __last, __comp); + return; + } + _RandomAccessIterator __middle = __first + (__last - __first) / 2; + std::__inplace_stable_sort(__first, __middle, __comp); + std::__inplace_stable_sort(__middle, __last, __comp); + std::__merge_without_buffer(__first, __middle, __last, + __middle - __first, + __last - __middle, + __comp); + } + + // stable_sort + + // Set algorithms: includes, set_union, set_intersection, set_difference, + // set_symmetric_difference. All of these algorithms have the precondition + // that their input ranges are sorted and the postcondition that their output + // ranges are sorted. + + template + _GLIBCXX20_CONSTEXPR + bool + __includes(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _Compare __comp) + { + while (__first1 != __last1 && __first2 != __last2) + if (__comp(__first2, __first1)) + return false; + else if (__comp(__first1, __first2)) + ++__first1; + else + { + ++__first1; + ++__first2; + } + + return __first2 == __last2; + } + + /** + * @brief Determines whether all elements of a sequence exists in a range. + * @param __first1 Start of search range. + * @param __last1 End of search range. + * @param __first2 Start of sequence + * @param __last2 End of sequence. + * @return True if each element in [__first2,__last2) is contained in order + * within [__first1,__last1). False otherwise. + * @ingroup set_algorithms + * + * This operation expects both [__first1,__last1) and + * [__first2,__last2) to be sorted. Searches for the presence of + * each element in [__first2,__last2) within [__first1,__last1). + * The iterators over each range only move forward, so this is a + * linear algorithm. If an element in [__first2,__last2) is not + * found before the search iterator reaches @p __last2, false is + * returned. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + includes(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set(__first1, __last1, __first2); + __glibcxx_requires_sorted_set(__first2, __last2, __first1); + __glibcxx_requires_irreflexive2(__first1, __last1); + __glibcxx_requires_irreflexive2(__first2, __last2); + + return std::__includes(__first1, __last1, __first2, __last2, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Determines whether all elements of a sequence exists in a range + * using comparison. + * @ingroup set_algorithms + * @param __first1 Start of search range. + * @param __last1 End of search range. + * @param __first2 Start of sequence + * @param __last2 End of sequence. + * @param __comp Comparison function to use. + * @return True if each element in [__first2,__last2) is contained + * in order within [__first1,__last1) according to comp. False + * otherwise. @ingroup set_algorithms + * + * This operation expects both [__first1,__last1) and + * [__first2,__last2) to be sorted. Searches for the presence of + * each element in [__first2,__last2) within [__first1,__last1), + * using comp to decide. The iterators over each range only move + * forward, so this is a linear algorithm. If an element in + * [__first2,__last2) is not found before the search iterator + * reaches @p __last2, false is returned. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + includes(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp); + __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp); + __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); + __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); + + return std::__includes(__first1, __last1, __first2, __last2, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + // nth_element + // merge + // set_difference + // set_intersection + // set_union + // stable_sort + // set_symmetric_difference + // min_element + // max_element + + template + _GLIBCXX20_CONSTEXPR + bool + __next_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last, _Compare __comp) + { + if (__first == __last) + return false; + _BidirectionalIterator __i = __first; + ++__i; + if (__i == __last) + return false; + __i = __last; + --__i; + + for(;;) + { + _BidirectionalIterator __ii = __i; + --__i; + if (__comp(__i, __ii)) + { + _BidirectionalIterator __j = __last; + while (!__comp(__i, --__j)) + {} + std::iter_swap(__i, __j); + std::__reverse(__ii, __last, + std::__iterator_category(__first)); + return true; + } + if (__i == __first) + { + std::__reverse(__first, __last, + std::__iterator_category(__first)); + return false; + } + } + } + + /** + * @brief Permute range into the next @e dictionary ordering. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @return False if wrapped to first permutation, true otherwise. + * + * Treats all permutations of the range as a set of @e dictionary sorted + * sequences. Permutes the current sequence into the next one of this set. + * Returns true if there are more sequences to generate. If the sequence + * is the largest of the set, the smallest is generated and false returned. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + next_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_BidirectionalIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + return std::__next_permutation + (__first, __last, __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Permute range into the next @e dictionary ordering using + * comparison functor. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @param __comp A comparison functor. + * @return False if wrapped to first permutation, true otherwise. + * + * Treats all permutations of the range [__first,__last) as a set of + * @e dictionary sorted sequences ordered by @p __comp. Permutes the current + * sequence into the next one of this set. Returns true if there are more + * sequences to generate. If the sequence is the largest of the set, the + * smallest is generated and false returned. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + next_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_BidirectionalIterator>::value_type, + typename iterator_traits<_BidirectionalIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + return std::__next_permutation + (__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + template + _GLIBCXX20_CONSTEXPR + bool + __prev_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last, _Compare __comp) + { + if (__first == __last) + return false; + _BidirectionalIterator __i = __first; + ++__i; + if (__i == __last) + return false; + __i = __last; + --__i; + + for(;;) + { + _BidirectionalIterator __ii = __i; + --__i; + if (__comp(__ii, __i)) + { + _BidirectionalIterator __j = __last; + while (!__comp(--__j, __i)) + {} + std::iter_swap(__i, __j); + std::__reverse(__ii, __last, + std::__iterator_category(__first)); + return true; + } + if (__i == __first) + { + std::__reverse(__first, __last, + std::__iterator_category(__first)); + return false; + } + } + } + + /** + * @brief Permute range into the previous @e dictionary ordering. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @return False if wrapped to last permutation, true otherwise. + * + * Treats all permutations of the range as a set of @e dictionary sorted + * sequences. Permutes the current sequence into the previous one of this + * set. Returns true if there are more sequences to generate. If the + * sequence is the smallest of the set, the largest is generated and false + * returned. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + prev_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_BidirectionalIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + return std::__prev_permutation(__first, __last, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Permute range into the previous @e dictionary ordering using + * comparison functor. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @param __comp A comparison functor. + * @return False if wrapped to last permutation, true otherwise. + * + * Treats all permutations of the range [__first,__last) as a set of + * @e dictionary sorted sequences ordered by @p __comp. Permutes the current + * sequence into the previous one of this set. Returns true if there are + * more sequences to generate. If the sequence is the smallest of the set, + * the largest is generated and false returned. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + prev_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_BidirectionalIterator>::value_type, + typename iterator_traits<_BidirectionalIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + return std::__prev_permutation(__first, __last, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + // replace + // replace_if + + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __replace_copy_if(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, + _Predicate __pred, const _Tp& __new_value) + { + for (; __first != __last; ++__first, (void)++__result) + if (__pred(__first)) + *__result = __new_value; + else + *__result = *__first; + return __result; + } + + /** + * @brief Copy a sequence, replacing each element of one value with another + * value. + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @param __old_value The value to be replaced. + * @param __new_value The replacement value. + * @return The end of the output sequence, @p result+(last-first). + * + * Copies each element in the input range @p [__first,__last) to the + * output range @p [__result,__result+(__last-__first)) replacing elements + * equal to @p __old_value with @p __new_value. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + replace_copy(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, + const _Tp& __old_value, const _Tp& __new_value) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_InputIterator>::value_type, _Tp>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__replace_copy_if(__first, __last, __result, + __gnu_cxx::__ops::__iter_equals_val(__old_value), + __new_value); + } + + /** + * @brief Copy a sequence, replacing each value for which a predicate + * returns true with another value. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @param __pred A predicate. + * @param __new_value The replacement value. + * @return The end of the output sequence, @p __result+(__last-__first). + * + * Copies each element in the range @p [__first,__last) to the range + * @p [__result,__result+(__last-__first)) replacing elements for which + * @p __pred returns true with @p __new_value. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + replace_copy_if(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, + _Predicate __pred, const _Tp& __new_value) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__replace_copy_if(__first, __last, __result, + __gnu_cxx::__ops::__pred_iter(__pred), + __new_value); + } + +#if __cplusplus >= 201103L + /** + * @brief Determines whether the elements of a sequence are sorted. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @return True if the elements are sorted, false otherwise. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + is_sorted(_ForwardIterator __first, _ForwardIterator __last) + { return std::is_sorted_until(__first, __last) == __last; } + + /** + * @brief Determines whether the elements of a sequence are sorted + * according to a comparison functor. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __comp A comparison functor. + * @return True if the elements are sorted, false otherwise. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + is_sorted(_ForwardIterator __first, _ForwardIterator __last, + _Compare __comp) + { return std::is_sorted_until(__first, __last, __comp) == __last; } + + template + _GLIBCXX20_CONSTEXPR + _ForwardIterator + __is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, + _Compare __comp) + { + if (__first == __last) + return __last; + + _ForwardIterator __next = __first; + for (++__next; __next != __last; __first = __next, (void)++__next) + if (__comp(__next, __first)) + return __next; + return __next; + } + + /** + * @brief Determines the end of a sorted sequence. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @return An iterator pointing to the last iterator i in [__first, __last) + * for which the range [__first, i) is sorted. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + is_sorted_until(_ForwardIterator __first, _ForwardIterator __last) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + return std::__is_sorted_until(__first, __last, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Determines the end of a sorted sequence using comparison functor. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __comp A comparison functor. + * @return An iterator pointing to the last iterator i in [__first, __last) + * for which the range [__first, i) is sorted. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_ForwardIterator>::value_type, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + return std::__is_sorted_until(__first, __last, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + /** + * @brief Determines min and max at once as an ordered pair. + * @ingroup sorting_algorithms + * @param __a A thing of arbitrary type. + * @param __b Another thing of arbitrary type. + * @return A pair(__b, __a) if __b is smaller than __a, pair(__a, + * __b) otherwise. + */ + template + _GLIBCXX14_CONSTEXPR + inline pair + minmax(const _Tp& __a, const _Tp& __b) + { + // concept requirements + __glibcxx_function_requires(_LessThanComparableConcept<_Tp>) + + return __b < __a ? pair(__b, __a) + : pair(__a, __b); + } + + /** + * @brief Determines min and max at once as an ordered pair. + * @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 A pair(__b, __a) if __b is smaller than __a, pair(__a, + * __b) otherwise. + */ + template + _GLIBCXX14_CONSTEXPR + inline pair + minmax(const _Tp& __a, const _Tp& __b, _Compare __comp) + { + return __comp(__b, __a) ? pair(__b, __a) + : pair(__a, __b); + } + + template + _GLIBCXX14_CONSTEXPR + pair<_ForwardIterator, _ForwardIterator> + __minmax_element(_ForwardIterator __first, _ForwardIterator __last, + _Compare __comp) + { + _ForwardIterator __next = __first; + if (__first == __last + || ++__next == __last) + return std::make_pair(__first, __first); + + _ForwardIterator __min{}, __max{}; + if (__comp(__next, __first)) + { + __min = __next; + __max = __first; + } + else + { + __min = __first; + __max = __next; + } + + __first = __next; + ++__first; + + while (__first != __last) + { + __next = __first; + if (++__next == __last) + { + if (__comp(__first, __min)) + __min = __first; + else if (!__comp(__first, __max)) + __max = __first; + break; + } + + if (__comp(__next, __first)) + { + if (__comp(__next, __min)) + __min = __next; + if (!__comp(__first, __max)) + __max = __first; + } + else + { + if (__comp(__first, __min)) + __min = __first; + if (!__comp(__next, __max)) + __max = __next; + } + + __first = __next; + ++__first; + } + + return std::make_pair(__min, __max); + } + + /** + * @brief Return a pair of iterators pointing to the minimum and maximum + * elements in a range. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @return make_pair(m, M), where m is the first iterator i in + * [__first, __last) such that no other element in the range is + * smaller, and where M is the last iterator i in [__first, __last) + * such that no other element in the range is larger. + */ + template + _GLIBCXX14_CONSTEXPR + inline pair<_ForwardIterator, _ForwardIterator> + minmax_element(_ForwardIterator __first, _ForwardIterator __last) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + return std::__minmax_element(__first, __last, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Return a pair of iterators pointing to the minimum and maximum + * elements in a range. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @param __comp Comparison functor. + * @return make_pair(m, M), where m is the first iterator i in + * [__first, __last) such that no other element in the range is + * smaller, and where M is the last iterator i in [__first, __last) + * such that no other element in the range is larger. + */ + template + _GLIBCXX14_CONSTEXPR + inline pair<_ForwardIterator, _ForwardIterator> + minmax_element(_ForwardIterator __first, _ForwardIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_ForwardIterator>::value_type, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + return std::__minmax_element(__first, __last, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + // N2722 + DR 915. + template + _GLIBCXX14_CONSTEXPR + inline _Tp + min(initializer_list<_Tp> __l) + { return *std::min_element(__l.begin(), __l.end()); } + + template + _GLIBCXX14_CONSTEXPR + inline _Tp + min(initializer_list<_Tp> __l, _Compare __comp) + { return *std::min_element(__l.begin(), __l.end(), __comp); } + + template + _GLIBCXX14_CONSTEXPR + inline _Tp + max(initializer_list<_Tp> __l) + { return *std::max_element(__l.begin(), __l.end()); } + + template + _GLIBCXX14_CONSTEXPR + inline _Tp + max(initializer_list<_Tp> __l, _Compare __comp) + { return *std::max_element(__l.begin(), __l.end(), __comp); } + + template + _GLIBCXX14_CONSTEXPR + inline pair<_Tp, _Tp> + minmax(initializer_list<_Tp> __l) + { + pair __p = + std::minmax_element(__l.begin(), __l.end()); + return std::make_pair(*__p.first, *__p.second); + } + + template + _GLIBCXX14_CONSTEXPR + inline pair<_Tp, _Tp> + minmax(initializer_list<_Tp> __l, _Compare __comp) + { + pair __p = + std::minmax_element(__l.begin(), __l.end(), __comp); + return std::make_pair(*__p.first, *__p.second); + } + + /** + * @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. + * @param __pred A binary predicate. + * @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, __pred) returns true; + * otherwise, returns false. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _BinaryPredicate __pred) + { + // 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); + + return std::__is_permutation(__first1, __last1, __first2, + __gnu_cxx::__ops::__iter_comp_iter(__pred)); + } + +#if __cplusplus > 201103L + template + _GLIBCXX20_CONSTEXPR + bool + __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _ForwardIterator2 __last2, + _BinaryPredicate __pred) + { + using _Cat1 + = typename iterator_traits<_ForwardIterator1>::iterator_category; + using _Cat2 + = typename iterator_traits<_ForwardIterator2>::iterator_category; + using _It1_is_RA = is_same<_Cat1, random_access_iterator_tag>; + using _It2_is_RA = is_same<_Cat2, random_access_iterator_tag>; + constexpr bool __ra_iters = _It1_is_RA() && _It2_is_RA(); + if (__ra_iters) + { + auto __d1 = std::distance(__first1, __last1); + auto __d2 = std::distance(__first2, __last2); + if (__d1 != __d2) + return false; + } + + // Efficiently compare identical prefixes: O(N) if sequences + // have the same elements in the same order. + for (; __first1 != __last1 && __first2 != __last2; + ++__first1, (void)++__first2) + if (!__pred(__first1, __first2)) + break; + + if (__ra_iters) + { + if (__first1 == __last1) + return true; + } + else + { + auto __d1 = std::distance(__first1, __last1); + auto __d2 = std::distance(__first2, __last2); + if (__d1 == 0 && __d2 == 0) + return true; + if (__d1 != __d2) + return false; + } + + 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 permutaion 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. + * @param __last2 End of first range. + * @return true if there exists a permutation of the elements in the range + * [__first2, __last2), 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, _ForwardIterator2 __last2) + { + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + return + std::__is_permutation(__first1, __last1, __first2, __last2, + __gnu_cxx::__ops::__iter_equal_to_iter()); + } + + /** + * @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. + * @param __last2 End of first range. + * @param __pred A binary predicate. + * @return true if there exists a permutation of the elements in the range + * [__first2, __last2), beginning with ForwardIterator2 begin, + * such that equal(__first1, __last1, __begin, __pred) returns true; + * otherwise, returns false. + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _ForwardIterator2 __last2, + _BinaryPredicate __pred) + { + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + return std::__is_permutation(__first1, __last1, __first2, __last2, + __gnu_cxx::__ops::__iter_comp_iter(__pred)); + } + +#if __cplusplus > 201402L + +#define __cpp_lib_clamp 201603 + + /** + * @brief Returns the value clamped between lo and hi. + * @ingroup sorting_algorithms + * @param __val A value of arbitrary type. + * @param __lo A lower limit of arbitrary type. + * @param __hi An upper limit of arbitrary type. + * @return max(__val, __lo) if __val < __hi or min(__val, __hi) otherwise. + */ + template + constexpr const _Tp& + clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi) + { + __glibcxx_assert(!(__hi < __lo)); + return (__val < __lo) ? __lo : (__hi < __val) ? __hi : __val; + } + + /** + * @brief Returns the value clamped between lo and hi. + * @ingroup sorting_algorithms + * @param __val A value of arbitrary type. + * @param __lo A lower limit of arbitrary type. + * @param __hi An upper limit of arbitrary type. + * @param __comp A comparison functor. + * @return max(__val, __lo, __comp) if __comp(__val, __hi) + * or min(__val, __hi, __comp) otherwise. + */ + template + constexpr const _Tp& + clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi, _Compare __comp) + { + __glibcxx_assert(!__comp(__hi, __lo)); + return __comp(__val, __lo) ? __lo : __comp(__hi, __val) ? __hi : __val; + } +#endif // C++17 +#endif // C++14 + +#ifdef _GLIBCXX_USE_C99_STDINT_TR1 + /** + * @brief Generate two uniformly distributed integers using a + * single distribution invocation. + * @param __b0 The upper bound for the first integer. + * @param __b1 The upper bound for the second integer. + * @param __g A UniformRandomBitGenerator. + * @return A pair (i, j) with i and j uniformly distributed + * over [0, __b0) and [0, __b1), respectively. + * + * Requires: __b0 * __b1 <= __g.max() - __g.min(). + * + * Using uniform_int_distribution with a range that is very + * small relative to the range of the generator ends up wasting + * potentially expensively generated randomness, since + * uniform_int_distribution does not store leftover randomness + * between invocations. + * + * If we know we want two integers in ranges that are sufficiently + * small, we can compose the ranges, use a single distribution + * invocation, and significantly reduce the waste. + */ + template + pair<_IntType, _IntType> + __gen_two_uniform_ints(_IntType __b0, _IntType __b1, + _UniformRandomBitGenerator&& __g) + { + _IntType __x + = uniform_int_distribution<_IntType>{0, (__b0 * __b1) - 1}(__g); + return std::make_pair(__x / __b1, __x % __b1); + } + + /** + * @brief Shuffle the elements of a sequence using a uniform random + * number generator. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __g A UniformRandomNumberGenerator (26.5.1.3). + * @return Nothing. + * + * Reorders the elements in the range @p [__first,__last) using @p __g to + * provide random numbers. + */ + template + void + shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, + _UniformRandomNumberGenerator&& __g) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_requires_valid_range(__first, __last); + + if (__first == __last) + return; + + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; + + typedef typename std::make_unsigned<_DistanceType>::type __ud_type; + typedef typename std::uniform_int_distribution<__ud_type> __distr_type; + typedef typename __distr_type::param_type __p_type; + + typedef typename remove_reference<_UniformRandomNumberGenerator>::type + _Gen; + typedef typename common_type::type + __uc_type; + + const __uc_type __urngrange = __g.max() - __g.min(); + const __uc_type __urange = __uc_type(__last - __first); + + if (__urngrange / __urange >= __urange) + // I.e. (__urngrange >= __urange * __urange) but without wrap issues. + { + _RandomAccessIterator __i = __first + 1; + + // Since we know the range isn't empty, an even number of elements + // means an uneven number of elements /to swap/, in which case we + // do the first one up front: + + if ((__urange % 2) == 0) + { + __distr_type __d{0, 1}; + std::iter_swap(__i++, __first + __d(__g)); + } + + // Now we know that __last - __i is even, so we do the rest in pairs, + // using a single distribution invocation to produce swap positions + // for two successive elements at a time: + + while (__i != __last) + { + const __uc_type __swap_range = __uc_type(__i - __first) + 1; + + const pair<__uc_type, __uc_type> __pospos = + __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g); + + std::iter_swap(__i++, __first + __pospos.first); + std::iter_swap(__i++, __first + __pospos.second); + } + + return; + } + + __distr_type __d; + + for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) + std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first))); + } +#endif + +#endif // C++11 + +_GLIBCXX_BEGIN_NAMESPACE_ALGO + + /** + * @brief Apply a function to every element of a sequence. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __f A unary function object. + * @return @p __f + * + * Applies the function object @p __f to each element in the range + * @p [first,last). @p __f must not modify the order of the sequence. + * If @p __f has a return value it is ignored. + */ + template + _GLIBCXX20_CONSTEXPR + _Function + for_each(_InputIterator __first, _InputIterator __last, _Function __f) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_requires_valid_range(__first, __last); + for (; __first != __last; ++__first) + __f(*__first); + return __f; // N.B. [alg.foreach] says std::move(f) but it's redundant. + } + +#if __cplusplus >= 201703L + /** + * @brief Apply a function to every element of a sequence. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __n A value convertible to an integer. + * @param __f A unary function object. + * @return `__first+__n` + * + * Applies the function object `__f` to each element in the range + * `[first, first+n)`. `__f` must not modify the order of the sequence. + * If `__f` has a return value it is ignored. + */ + template + _GLIBCXX20_CONSTEXPR + _InputIterator + for_each_n(_InputIterator __first, _Size __n, _Function __f) + { + auto __n2 = std::__size_to_integer(__n); + using _Cat = typename iterator_traits<_InputIterator>::iterator_category; + if constexpr (is_base_of_v) + { + if (__n2 <= 0) + return __first; + auto __last = __first + __n2; + std::for_each(__first, __last, std::move(__f)); + return __last; + } + else + { + while (__n2-->0) + { + __f(*__first); + ++__first; + } + return __first; + } + } +#endif // C++17 + + /** + * @brief Find the first occurrence of a value in a sequence. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __val The value to find. + * @return The first iterator @c i in the range @p [__first,__last) + * such that @c *i == @p __val, or @p __last if no such iterator exists. + */ + template + _GLIBCXX20_CONSTEXPR + inline _InputIterator + find(_InputIterator __first, _InputIterator __last, + const _Tp& __val) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_InputIterator>::value_type, _Tp>) + __glibcxx_requires_valid_range(__first, __last); + return std::__find_if(__first, __last, + __gnu_cxx::__ops::__iter_equals_val(__val)); + } + + /** + * @brief Find the first element in a sequence for which a + * predicate is true. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __pred A predicate. + * @return The first iterator @c i in the range @p [__first,__last) + * such that @p __pred(*i) is true, or @p __last if no such iterator exists. + */ + template + _GLIBCXX20_CONSTEXPR + inline _InputIterator + find_if(_InputIterator __first, _InputIterator __last, + _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__find_if(__first, __last, + __gnu_cxx::__ops::__pred_iter(__pred)); + } + + /** + * @brief Find element from a set in a sequence. + * @ingroup non_mutating_algorithms + * @param __first1 Start of range to search. + * @param __last1 End of range to search. + * @param __first2 Start of match candidates. + * @param __last2 End of match candidates. + * @return The first iterator @c i in the range + * @p [__first1,__last1) such that @c *i == @p *(i2) such that i2 is an + * iterator in [__first2,__last2), or @p __last1 if no such iterator exists. + * + * Searches the range @p [__first1,__last1) for an element that is + * equal to some element in the range [__first2,__last2). If + * found, returns an iterator in the range [__first1,__last1), + * otherwise returns @p __last1. + */ + template + _GLIBCXX20_CONSTEXPR + _InputIterator + find_first_of(_InputIterator __first1, _InputIterator __last1, + _ForwardIterator __first2, _ForwardIterator __last2) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_InputIterator>::value_type, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + for (; __first1 != __last1; ++__first1) + for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter) + if (*__first1 == *__iter) + return __first1; + return __last1; + } + + /** + * @brief Find element from a set in a sequence using a predicate. + * @ingroup non_mutating_algorithms + * @param __first1 Start of range to search. + * @param __last1 End of range to search. + * @param __first2 Start of match candidates. + * @param __last2 End of match candidates. + * @param __comp Predicate to use. + * @return The first iterator @c i in the range + * @p [__first1,__last1) such that @c comp(*i, @p *(i2)) is true + * and i2 is an iterator in [__first2,__last2), or @p __last1 if no + * such iterator exists. + * + + * Searches the range @p [__first1,__last1) for an element that is + * equal to some element in the range [__first2,__last2). If + * found, returns an iterator in the range [__first1,__last1), + * otherwise returns @p __last1. + */ + template + _GLIBCXX20_CONSTEXPR + _InputIterator + find_first_of(_InputIterator __first1, _InputIterator __last1, + _ForwardIterator __first2, _ForwardIterator __last2, + _BinaryPredicate __comp) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate, + typename iterator_traits<_InputIterator>::value_type, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first1, __last1); + __glibcxx_requires_valid_range(__first2, __last2); + + for (; __first1 != __last1; ++__first1) + for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter) + if (__comp(*__first1, *__iter)) + return __first1; + return __last1; + } + + /** + * @brief Find two adjacent values in a sequence that are equal. + * @ingroup non_mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @return The first iterator @c i such that @c i and @c i+1 are both + * valid iterators in @p [__first,__last) and such that @c *i == @c *(i+1), + * or @p __last if no such iterator exists. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + adjacent_find(_ForwardIterator __first, _ForwardIterator __last) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_EqualityComparableConcept< + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__adjacent_find(__first, __last, + __gnu_cxx::__ops::__iter_equal_to_iter()); + } + + /** + * @brief Find two adjacent values in a sequence using a predicate. + * @ingroup non_mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __binary_pred A binary predicate. + * @return The first iterator @c i such that @c i and @c i+1 are both + * valid iterators in @p [__first,__last) and such that + * @p __binary_pred(*i,*(i+1)) is true, or @p __last if no such iterator + * exists. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + adjacent_find(_ForwardIterator __first, _ForwardIterator __last, + _BinaryPredicate __binary_pred) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate, + typename iterator_traits<_ForwardIterator>::value_type, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__adjacent_find(__first, __last, + __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); + } + + /** + * @brief Count the number of copies of a value in a sequence. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __value The value to be counted. + * @return The number of iterators @c i in the range @p [__first,__last) + * for which @c *i == @p __value + */ + template + _GLIBCXX20_CONSTEXPR + inline typename iterator_traits<_InputIterator>::difference_type + count(_InputIterator __first, _InputIterator __last, const _Tp& __value) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_InputIterator>::value_type, _Tp>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__count_if(__first, __last, + __gnu_cxx::__ops::__iter_equals_val(__value)); + } + + /** + * @brief Count the elements of a sequence for which a predicate is true. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __pred A predicate. + * @return The number of iterators @c i in the range @p [__first,__last) + * for which @p __pred(*i) is true. + */ + template + _GLIBCXX20_CONSTEXPR + inline typename iterator_traits<_InputIterator>::difference_type + count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__count_if(__first, __last, + __gnu_cxx::__ops::__pred_iter(__pred)); + } + + /** + * @brief Search a sequence for a matching sub-sequence. + * @ingroup non_mutating_algorithms + * @param __first1 A forward iterator. + * @param __last1 A forward iterator. + * @param __first2 A forward iterator. + * @param __last2 A forward iterator. + * @return The first iterator @c i in the range @p + * [__first1,__last1-(__last2-__first2)) such that @c *(i+N) == @p + * *(__first2+N) 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) and returns an iterator to the first element + * of the sub-sequence, or @p __last1 if the sub-sequence is not + * found. + * + * Because the sub-sequence must lie completely within the range @p + * [__first1,__last1) it must start at a position less than @p + * __last1-(__last2-__first2) where @p __last2-__first2 is the + * length of the sub-sequence. + * + * This means that the returned iterator @c i will be in the range + * @p [__first1,__last1-(__last2-__first2)) + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator1 + search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, + _ForwardIterator2 __first2, _ForwardIterator2 __last2) + { + // 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); + __glibcxx_requires_valid_range(__first2, __last2); + + return std::__search(__first1, __last1, __first2, __last2, + __gnu_cxx::__ops::__iter_equal_to_iter()); + } + + /** + * @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)); + } + + /** + * @brief Search a sequence for a number of consecutive values. + * @ingroup non_mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __count The number of consecutive values. + * @param __val The value to find. + * @return The first iterator @c i in the range @p + * [__first,__last-__count) such that @c *(i+N) == @p __val for + * each @c N in the range @p [0,__count), or @p __last if no such + * iterator exists. + * + * Searches the range @p [__first,__last) for @p count consecutive elements + * equal to @p __val. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + search_n(_ForwardIterator __first, _ForwardIterator __last, + _Integer __count, const _Tp& __val) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_ForwardIterator>::value_type, _Tp>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__search_n(__first, __last, __count, + __gnu_cxx::__ops::__iter_equals_val(__val)); + } + + + /** + * @brief Search a sequence for a number of consecutive values using a + * predicate. + * @ingroup non_mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __count The number of consecutive values. + * @param __val The value to find. + * @param __binary_pred A binary predicate. + * @return The first iterator @c i in the range @p + * [__first,__last-__count) such that @p + * __binary_pred(*(i+N),__val) is true for each @c N in the range + * @p [0,__count), or @p __last if no such iterator exists. + * + * Searches the range @p [__first,__last) for @p __count + * consecutive elements for which the predicate returns true. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + search_n(_ForwardIterator __first, _ForwardIterator __last, + _Integer __count, const _Tp& __val, + _BinaryPredicate __binary_pred) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate, + typename iterator_traits<_ForwardIterator>::value_type, _Tp>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__search_n(__first, __last, __count, + __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val)); + } + +#if __cplusplus > 201402L + /** @brief Search a sequence using a Searcher object. + * + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __searcher A callable object. + * @return @p __searcher(__first,__last).first + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + search(_ForwardIterator __first, _ForwardIterator __last, + const _Searcher& __searcher) + { return __searcher(__first, __last).first; } +#endif + + /** + * @brief Perform an operation on a sequence. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @param __unary_op A unary operator. + * @return An output iterator equal to @p __result+(__last-__first). + * + * Applies the operator to each element in the input range and assigns + * the results to successive elements of the output sequence. + * Evaluates @p *(__result+N)=unary_op(*(__first+N)) for each @c N in the + * range @p [0,__last-__first). + * + * @p unary_op must not alter its argument. + */ + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + transform(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _UnaryOperation __unary_op) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + // "the type returned by a _UnaryOperation" + __typeof__(__unary_op(*__first))>) + __glibcxx_requires_valid_range(__first, __last); + + for (; __first != __last; ++__first, (void)++__result) + *__result = __unary_op(*__first); + return __result; + } + + /** + * @brief Perform an operation on corresponding elements of two sequences. + * @ingroup mutating_algorithms + * @param __first1 An input iterator. + * @param __last1 An input iterator. + * @param __first2 An input iterator. + * @param __result An output iterator. + * @param __binary_op A binary operator. + * @return An output iterator equal to @p result+(last-first). + * + * Applies the operator to the corresponding elements in the two + * input ranges and assigns the results to successive elements of the + * output sequence. + * Evaluates @p + * *(__result+N)=__binary_op(*(__first1+N),*(__first2+N)) for each + * @c N in the range @p [0,__last1-__first1). + * + * @p binary_op must not alter either of its arguments. + */ + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + transform(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _OutputIterator __result, + _BinaryOperation __binary_op) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + // "the type returned by a _BinaryOperation" + __typeof__(__binary_op(*__first1,*__first2))>) + __glibcxx_requires_valid_range(__first1, __last1); + + for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result) + *__result = __binary_op(*__first1, *__first2); + return __result; + } + + /** + * @brief Replace each occurrence of one value in a sequence with another + * value. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __old_value The value to be replaced. + * @param __new_value The replacement value. + * @return replace() returns no value. + * + * For each iterator @c i in the range @p [__first,__last) if @c *i == + * @p __old_value then the assignment @c *i = @p __new_value is performed. + */ + template + _GLIBCXX20_CONSTEXPR + void + replace(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __old_value, const _Tp& __new_value) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_function_requires(_EqualOpConcept< + typename iterator_traits<_ForwardIterator>::value_type, _Tp>) + __glibcxx_function_requires(_ConvertibleConcept<_Tp, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + for (; __first != __last; ++__first) + if (*__first == __old_value) + *__first = __new_value; + } + + /** + * @brief Replace each value in a sequence for which a predicate returns + * true with another value. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __pred A predicate. + * @param __new_value The replacement value. + * @return replace_if() returns no value. + * + * For each iterator @c i in the range @p [__first,__last) if @p __pred(*i) + * is true then the assignment @c *i = @p __new_value is performed. + */ + template + _GLIBCXX20_CONSTEXPR + void + replace_if(_ForwardIterator __first, _ForwardIterator __last, + _Predicate __pred, const _Tp& __new_value) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_function_requires(_ConvertibleConcept<_Tp, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + for (; __first != __last; ++__first) + if (__pred(*__first)) + *__first = __new_value; + } + + /** + * @brief Assign the result of a function object to each value in a + * sequence. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __gen A function object taking no arguments and returning + * std::iterator_traits<_ForwardIterator>::value_type + * @return generate() returns no value. + * + * Performs the assignment @c *i = @p __gen() for each @c i in the range + * @p [__first,__last). + */ + template + _GLIBCXX20_CONSTEXPR + void + generate(_ForwardIterator __first, _ForwardIterator __last, + _Generator __gen) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_GeneratorConcept<_Generator, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + for (; __first != __last; ++__first) + *__first = __gen(); + } + + /** + * @brief Assign the result of a function object to each value in a + * sequence. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __n The length of the sequence. + * @param __gen A function object taking no arguments and returning + * std::iterator_traits<_ForwardIterator>::value_type + * @return The end of the sequence, @p __first+__n + * + * Performs the assignment @c *i = @p __gen() for each @c i in the range + * @p [__first,__first+__n). + * + * If @p __n is negative, the function does nothing and returns @p __first. + */ + // _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 + _GLIBCXX20_CONSTEXPR + _OutputIterator + generate_n(_OutputIterator __first, _Size __n, _Generator __gen) + { + // concept requirements + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + // "the type returned by a _Generator" + __typeof__(__gen())>) + + typedef __decltype(std::__size_to_integer(__n)) _IntSize; + for (_IntSize __niter = std::__size_to_integer(__n); + __niter > 0; --__niter, (void) ++__first) + *__first = __gen(); + return __first; + } + + /** + * @brief Copy a sequence, removing consecutive duplicate values. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @return An iterator designating the end of the resulting sequence. + * + * Copies each element in the range @p [__first,__last) to the range + * beginning at @p __result, except that only the first element is copied + * from groups of consecutive elements that compare equal. + * unique_copy() is stable, so the relative order of elements that are + * copied is unchanged. + * + * _GLIBCXX_RESOLVE_LIB_DEFECTS + * DR 241. Does unique_copy() require CopyConstructible and Assignable? + * + * _GLIBCXX_RESOLVE_LIB_DEFECTS + * DR 538. 241 again: Does unique_copy() require CopyConstructible and + * Assignable? + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + unique_copy(_InputIterator __first, _InputIterator __last, + _OutputIterator __result) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_function_requires(_EqualityComparableConcept< + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + if (__first == __last) + return __result; + return std::__unique_copy(__first, __last, __result, + __gnu_cxx::__ops::__iter_equal_to_iter(), + std::__iterator_category(__first), + std::__iterator_category(__result)); + } + + /** + * @brief Copy a sequence, removing consecutive values using a predicate. + * @ingroup mutating_algorithms + * @param __first An input iterator. + * @param __last An input iterator. + * @param __result An output iterator. + * @param __binary_pred A binary predicate. + * @return An iterator designating the end of the resulting sequence. + * + * Copies each element in the range @p [__first,__last) to the range + * beginning at @p __result, except that only the first element is copied + * from groups of consecutive elements for which @p __binary_pred returns + * true. + * unique_copy() is stable, so the relative order of elements that are + * copied is unchanged. + * + * _GLIBCXX_RESOLVE_LIB_DEFECTS + * DR 241. Does unique_copy() require CopyConstructible and Assignable? + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + unique_copy(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, + _BinaryPredicate __binary_pred) + { + // concept requirements -- predicates checked later + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + if (__first == __last) + return __result; + return std::__unique_copy(__first, __last, __result, + __gnu_cxx::__ops::__iter_comp_iter(__binary_pred), + std::__iterator_category(__first), + std::__iterator_category(__result)); + } + +#if _GLIBCXX_HOSTED + /** + * @brief Randomly shuffle the elements of a sequence. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @return Nothing. + * + * Reorder the elements in the range @p [__first,__last) using a random + * distribution, so that every possible ordering of the sequence is + * equally likely. + */ + template + inline void + random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_requires_valid_range(__first, __last); + + if (__first != __last) + for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) + { + // XXX rand() % N is not uniformly distributed + _RandomAccessIterator __j = __first + + std::rand() % ((__i - __first) + 1); + if (__i != __j) + std::iter_swap(__i, __j); + } + } +#endif + + /** + * @brief Shuffle the elements of a sequence using a random number + * generator. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __rand The RNG functor or function. + * @return Nothing. + * + * Reorders the elements in the range @p [__first,__last) using @p __rand to + * provide a random distribution. Calling @p __rand(N) for a positive + * integer @p N should return a randomly chosen integer from the + * range [0,N). + */ + template + void + random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, +#if __cplusplus >= 201103L + _RandomNumberGenerator&& __rand) +#else + _RandomNumberGenerator& __rand) +#endif + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_requires_valid_range(__first, __last); + + if (__first == __last) + return; + for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) + { + _RandomAccessIterator __j = __first + __rand((__i - __first) + 1); + if (__i != __j) + std::iter_swap(__i, __j); + } + } + + + /** + * @brief Move elements for which a predicate is true to the beginning + * of a sequence. + * @ingroup mutating_algorithms + * @param __first A forward iterator. + * @param __last A forward iterator. + * @param __pred A predicate functor. + * @return An iterator @p middle such that @p __pred(i) is true for each + * iterator @p i in the range @p [__first,middle) and false for each @p i + * in the range @p [middle,__last). + * + * @p __pred must not modify its operand. @p partition() does not preserve + * the relative ordering of elements in each group, use + * @p stable_partition() if this is needed. + */ + template + _GLIBCXX20_CONSTEXPR + inline _ForwardIterator + partition(_ForwardIterator __first, _ForwardIterator __last, + _Predicate __pred) + { + // concept requirements + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) + __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + + return std::__partition(__first, __last, __pred, + std::__iterator_category(__first)); + } + + + /** + * @brief Sort the smallest elements of a sequence. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __middle Another iterator. + * @param __last Another iterator. + * @return Nothing. + * + * Sorts the smallest @p (__middle-__first) elements in the range + * @p [first,last) and moves them to the range @p [__first,__middle). The + * order of the remaining elements in the range @p [__middle,__last) is + * undefined. + * After the sort if @e i and @e j are iterators in the range + * @p [__first,__middle) such that i precedes j and @e k is an iterator in + * the range @p [__middle,__last) then *j<*i and *k<*i are both false. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + partial_sort(_RandomAccessIterator __first, + _RandomAccessIterator __middle, + _RandomAccessIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __middle); + __glibcxx_requires_valid_range(__middle, __last); + __glibcxx_requires_irreflexive(__first, __last); + + std::__partial_sort(__first, __middle, __last, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Sort the smallest elements of a sequence using a predicate + * for comparison. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __middle Another iterator. + * @param __last Another iterator. + * @param __comp A comparison functor. + * @return Nothing. + * + * Sorts the smallest @p (__middle-__first) elements in the range + * @p [__first,__last) and moves them to the range @p [__first,__middle). The + * order of the remaining elements in the range @p [__middle,__last) is + * undefined. + * After the sort if @e i and @e j are iterators in the range + * @p [__first,__middle) such that i precedes j and @e k is an iterator in + * the range @p [__middle,__last) then @p *__comp(j,*i) and @p __comp(*k,*i) + * are both false. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + partial_sort(_RandomAccessIterator __first, + _RandomAccessIterator __middle, + _RandomAccessIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_RandomAccessIterator>::value_type, + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __middle); + __glibcxx_requires_valid_range(__middle, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + std::__partial_sort(__first, __middle, __last, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + /** + * @brief Sort a sequence just enough to find a particular position. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __nth Another iterator. + * @param __last Another iterator. + * @return Nothing. + * + * Rearranges the elements in the range @p [__first,__last) so that @p *__nth + * is the same element that would have been in that position had the + * whole sequence been sorted. The elements either side of @p *__nth are + * not completely sorted, but for any iterator @e i in the range + * @p [__first,__nth) and any iterator @e j in the range @p [__nth,__last) it + * holds that *j < *i is false. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, + _RandomAccessIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __nth); + __glibcxx_requires_valid_range(__nth, __last); + __glibcxx_requires_irreflexive(__first, __last); + + if (__first == __last || __nth == __last) + return; + + std::__introselect(__first, __nth, __last, + std::__lg(__last - __first) * 2, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Sort a sequence just enough to find a particular position + * using a predicate for comparison. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __nth Another iterator. + * @param __last Another iterator. + * @param __comp A comparison functor. + * @return Nothing. + * + * Rearranges the elements in the range @p [__first,__last) so that @p *__nth + * is the same element that would have been in that position had the + * whole sequence been sorted. The elements either side of @p *__nth are + * not completely sorted, but for any iterator @e i in the range + * @p [__first,__nth) and any iterator @e j in the range @p [__nth,__last) it + * holds that @p __comp(*j,*i) is false. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, + _RandomAccessIterator __last, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_RandomAccessIterator>::value_type, + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __nth); + __glibcxx_requires_valid_range(__nth, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + if (__first == __last || __nth == __last) + return; + + std::__introselect(__first, __nth, __last, + std::__lg(__last - __first) * 2, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + /** + * @brief Sort the elements of a sequence. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @return Nothing. + * + * Sorts the elements in the range @p [__first,__last) in ascending order, + * such that for each iterator @e i in the range @p [__first,__last-1), + * *(i+1)<*i is false. + * + * The relative ordering of equivalent elements is not preserved, use + * @p stable_sort() if this is needed. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + sort(_RandomAccessIterator __first, _RandomAccessIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Sort the elements of a sequence using a predicate for comparison. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __comp A comparison functor. + * @return Nothing. + * + * Sorts the elements in the range @p [__first,__last) in ascending order, + * such that @p __comp(*(i+1),*i) is false for every iterator @e i in the + * range @p [__first,__last-1). + * + * The relative ordering of equivalent elements is not preserved, use + * @p stable_sort() if this is needed. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + sort(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_RandomAccessIterator>::value_type, + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __merge(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, _Compare __comp) + { + while (__first1 != __last1 && __first2 != __last2) + { + if (__comp(__first2, __first1)) + { + *__result = *__first2; + ++__first2; + } + else + { + *__result = *__first1; + ++__first1; + } + ++__result; + } + return std::copy(__first2, __last2, + std::copy(__first1, __last1, __result)); + } + + /** + * @brief Merges two sorted ranges. + * @ingroup sorting_algorithms + * @param __first1 An iterator. + * @param __first2 Another iterator. + * @param __last1 Another iterator. + * @param __last2 Another iterator. + * @param __result An iterator pointing to the end of the merged range. + * @return An output iterator equal to @p __result + (__last1 - __first1) + * + (__last2 - __first2). + * + * Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into + * the sorted range @p [__result, __result + (__last1-__first1) + + * (__last2-__first2)). Both input ranges must be sorted, and the + * output range must not overlap with either of the input ranges. + * The sort is @e stable, that is, for equivalent elements in the + * two ranges, elements from the first range will always come + * before elements from the second. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + merge(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set(__first1, __last1, __first2); + __glibcxx_requires_sorted_set(__first2, __last2, __first1); + __glibcxx_requires_irreflexive2(__first1, __last1); + __glibcxx_requires_irreflexive2(__first2, __last2); + + return _GLIBCXX_STD_A::__merge(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Merges two sorted ranges. + * @ingroup sorting_algorithms + * @param __first1 An iterator. + * @param __first2 Another iterator. + * @param __last1 Another iterator. + * @param __last2 Another iterator. + * @param __result An iterator pointing to the end of the merged range. + * @param __comp A functor to use for comparisons. + * @return An output iterator equal to @p __result + (__last1 - __first1) + * + (__last2 - __first2). + * + * Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into + * the sorted range @p [__result, __result + (__last1-__first1) + + * (__last2-__first2)). Both input ranges must be sorted, and the + * output range must not overlap with either of the input ranges. + * The sort is @e stable, that is, for equivalent elements in the + * two ranges, elements from the first range will always come + * before elements from the second. + * + * The comparison function should have the same effects on ordering as + * the function used for the initial sort. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + merge(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp); + __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp); + __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); + __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); + + return _GLIBCXX_STD_A::__merge(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + template + inline void + __stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; + + typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf; + _TmpBuf __buf(__first, std::distance(__first, __last)); + + if (__buf.begin() == 0) + std::__inplace_stable_sort(__first, __last, __comp); + else + std::__stable_sort_adaptive(__first, __last, __buf.begin(), + _DistanceType(__buf.size()), __comp); + } + + /** + * @brief Sort the elements of a sequence, preserving the relative order + * of equivalent elements. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @return Nothing. + * + * Sorts the elements in the range @p [__first,__last) in ascending order, + * such that for each iterator @p i in the range @p [__first,__last-1), + * @p *(i+1)<*i is false. + * + * The relative ordering of equivalent elements is preserved, so any two + * elements @p x and @p y in the range @p [__first,__last) such that + * @p x + inline void + stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + _GLIBCXX_STD_A::__stable_sort(__first, __last, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Sort the elements of a sequence using a predicate for comparison, + * preserving the relative order of equivalent elements. + * @ingroup sorting_algorithms + * @param __first An iterator. + * @param __last Another iterator. + * @param __comp A comparison functor. + * @return Nothing. + * + * Sorts the elements in the range @p [__first,__last) in ascending order, + * such that for each iterator @p i in the range @p [__first,__last-1), + * @p __comp(*(i+1),*i) is false. + * + * The relative ordering of equivalent elements is preserved, so any two + * elements @p x and @p y in the range @p [__first,__last) such that + * @p __comp(x,y) is false and @p __comp(y,x) is false will have the same + * relative ordering after calling @p stable_sort(). + */ + template + inline void + stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_RandomAccessIterator>::value_type, + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + _GLIBCXX_STD_A::__stable_sort(__first, __last, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __set_union(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, _Compare __comp) + { + while (__first1 != __last1 && __first2 != __last2) + { + if (__comp(__first1, __first2)) + { + *__result = *__first1; + ++__first1; + } + else if (__comp(__first2, __first1)) + { + *__result = *__first2; + ++__first2; + } + else + { + *__result = *__first1; + ++__first1; + ++__first2; + } + ++__result; + } + return std::copy(__first2, __last2, + std::copy(__first1, __last1, __result)); + } + + /** + * @brief Return the union of two sorted ranges. + * @ingroup set_algorithms + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __last2 End of second range. + * @param __result Start of output range. + * @return End of the output range. + * @ingroup set_algorithms + * + * This operation iterates over both ranges, copying elements present in + * each range in order to the output range. Iterators increment for each + * range. When the current element of one range is less than the other, + * that element is copied and the iterator advanced. If an element is + * contained in both ranges, the element from the first range is copied and + * both ranges advance. The output range may not overlap either input + * range. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + set_union(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set(__first1, __last1, __first2); + __glibcxx_requires_sorted_set(__first2, __last2, __first1); + __glibcxx_requires_irreflexive2(__first1, __last1); + __glibcxx_requires_irreflexive2(__first2, __last2); + + return _GLIBCXX_STD_A::__set_union(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Return the union of two sorted ranges using a comparison functor. + * @ingroup set_algorithms + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __last2 End of second range. + * @param __result Start of output range. + * @param __comp The comparison functor. + * @return End of the output range. + * @ingroup set_algorithms + * + * This operation iterates over both ranges, copying elements present in + * each range in order to the output range. Iterators increment for each + * range. When the current element of one range is less than the other + * according to @p __comp, that element is copied and the iterator advanced. + * If an equivalent element according to @p __comp is contained in both + * ranges, the element from the first range is copied and both ranges + * advance. The output range may not overlap either input range. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + set_union(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp); + __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp); + __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); + __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); + + return _GLIBCXX_STD_A::__set_union(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, _Compare __comp) + { + while (__first1 != __last1 && __first2 != __last2) + if (__comp(__first1, __first2)) + ++__first1; + else if (__comp(__first2, __first1)) + ++__first2; + else + { + *__result = *__first1; + ++__first1; + ++__first2; + ++__result; + } + return __result; + } + + /** + * @brief Return the intersection of two sorted ranges. + * @ingroup set_algorithms + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __last2 End of second range. + * @param __result Start of output range. + * @return End of the output range. + * @ingroup set_algorithms + * + * This operation iterates over both ranges, copying elements present in + * both ranges in order to the output range. Iterators increment for each + * range. When the current element of one range is less than the other, + * that iterator advances. If an element is contained in both ranges, the + * element from the first range is copied and both ranges advance. The + * output range may not overlap either input range. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set(__first1, __last1, __first2); + __glibcxx_requires_sorted_set(__first2, __last2, __first1); + __glibcxx_requires_irreflexive2(__first1, __last1); + __glibcxx_requires_irreflexive2(__first2, __last2); + + return _GLIBCXX_STD_A::__set_intersection(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Return the intersection of two sorted ranges using comparison + * functor. + * @ingroup set_algorithms + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __last2 End of second range. + * @param __result Start of output range. + * @param __comp The comparison functor. + * @return End of the output range. + * @ingroup set_algorithms + * + * This operation iterates over both ranges, copying elements present in + * both ranges in order to the output range. Iterators increment for each + * range. When the current element of one range is less than the other + * according to @p __comp, that iterator advances. If an element is + * contained in both ranges according to @p __comp, the element from the + * first range is copied and both ranges advance. The output range may not + * overlap either input range. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp); + __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp); + __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); + __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); + + return _GLIBCXX_STD_A::__set_intersection(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __set_difference(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, _Compare __comp) + { + while (__first1 != __last1 && __first2 != __last2) + if (__comp(__first1, __first2)) + { + *__result = *__first1; + ++__first1; + ++__result; + } + else if (__comp(__first2, __first1)) + ++__first2; + else + { + ++__first1; + ++__first2; + } + return std::copy(__first1, __last1, __result); + } + + /** + * @brief Return the difference of two sorted ranges. + * @ingroup set_algorithms + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __last2 End of second range. + * @param __result Start of output range. + * @return End of the output range. + * @ingroup set_algorithms + * + * This operation iterates over both ranges, copying elements present in + * the first range but not the second in order to the output range. + * Iterators increment for each range. When the current element of the + * first range is less than the second, that element is copied and the + * iterator advances. If the current element of the second range is less, + * the iterator advances, but no element is copied. If an element is + * contained in both ranges, no elements are copied and both ranges + * advance. The output range may not overlap either input range. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + set_difference(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set(__first1, __last1, __first2); + __glibcxx_requires_sorted_set(__first2, __last2, __first1); + __glibcxx_requires_irreflexive2(__first1, __last1); + __glibcxx_requires_irreflexive2(__first2, __last2); + + return _GLIBCXX_STD_A::__set_difference(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Return the difference of two sorted ranges using comparison + * functor. + * @ingroup set_algorithms + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __last2 End of second range. + * @param __result Start of output range. + * @param __comp The comparison functor. + * @return End of the output range. + * @ingroup set_algorithms + * + * This operation iterates over both ranges, copying elements present in + * the first range but not the second in order to the output range. + * Iterators increment for each range. When the current element of the + * first range is less than the second according to @p __comp, that element + * is copied and the iterator advances. If the current element of the + * second range is less, no element is copied and the iterator advances. + * If an element is contained in both ranges according to @p __comp, no + * elements are copied and both ranges advance. The output range may not + * overlap either input range. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + set_difference(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp); + __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp); + __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); + __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); + + return _GLIBCXX_STD_A::__set_difference(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + template + _GLIBCXX20_CONSTEXPR + _OutputIterator + __set_symmetric_difference(_InputIterator1 __first1, + _InputIterator1 __last1, + _InputIterator2 __first2, + _InputIterator2 __last2, + _OutputIterator __result, + _Compare __comp) + { + while (__first1 != __last1 && __first2 != __last2) + if (__comp(__first1, __first2)) + { + *__result = *__first1; + ++__first1; + ++__result; + } + else if (__comp(__first2, __first1)) + { + *__result = *__first2; + ++__first2; + ++__result; + } + else + { + ++__first1; + ++__first2; + } + return std::copy(__first2, __last2, + std::copy(__first1, __last1, __result)); + } + + /** + * @brief Return the symmetric difference of two sorted ranges. + * @ingroup set_algorithms + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __last2 End of second range. + * @param __result Start of output range. + * @return End of the output range. + * @ingroup set_algorithms + * + * This operation iterates over both ranges, copying elements present in + * one range but not the other in order to the output range. Iterators + * increment for each range. When the current element of one range is less + * than the other, that element is copied and the iterator advances. If an + * element is contained in both ranges, no elements are copied and both + * ranges advance. The output range may not overlap either input range. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_LessThanOpConcept< + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set(__first1, __last1, __first2); + __glibcxx_requires_sorted_set(__first2, __last2, __first1); + __glibcxx_requires_irreflexive2(__first1, __last1); + __glibcxx_requires_irreflexive2(__first2, __last2); + + return _GLIBCXX_STD_A::__set_symmetric_difference(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Return the symmetric difference of two sorted ranges using + * comparison functor. + * @ingroup set_algorithms + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __last2 End of second range. + * @param __result Start of output range. + * @param __comp The comparison functor. + * @return End of the output range. + * @ingroup set_algorithms + * + * This operation iterates over both ranges, copying elements present in + * one range but not the other in order to the output range. Iterators + * increment for each range. When the current element of one range is less + * than the other according to @p comp, that element is copied and the + * iterator advances. If an element is contained in both ranges according + * to @p __comp, no elements are copied and both ranges advance. The output + * range may not overlap either input range. + */ + template + _GLIBCXX20_CONSTEXPR + inline _OutputIterator + set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _InputIterator2 __last2, + _OutputIterator __result, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) + __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator1>::value_type, + typename iterator_traits<_InputIterator2>::value_type>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_InputIterator2>::value_type, + typename iterator_traits<_InputIterator1>::value_type>) + __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp); + __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp); + __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); + __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); + + return _GLIBCXX_STD_A::__set_symmetric_difference(__first1, __last1, + __first2, __last2, __result, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + template + _GLIBCXX14_CONSTEXPR + _ForwardIterator + __min_element(_ForwardIterator __first, _ForwardIterator __last, + _Compare __comp) + { + if (__first == __last) + return __first; + _ForwardIterator __result = __first; + while (++__first != __last) + if (__comp(__first, __result)) + __result = __first; + return __result; + } + + /** + * @brief Return the minimum element in a range. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @return Iterator referencing the first instance of the smallest value. + */ + template + _GLIBCXX14_CONSTEXPR + _ForwardIterator + inline min_element(_ForwardIterator __first, _ForwardIterator __last) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + return _GLIBCXX_STD_A::__min_element(__first, __last, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Return the minimum element in a range using comparison functor. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @param __comp Comparison functor. + * @return Iterator referencing the first instance of the smallest value + * according to __comp. + */ + template + _GLIBCXX14_CONSTEXPR + inline _ForwardIterator + min_element(_ForwardIterator __first, _ForwardIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_ForwardIterator>::value_type, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + return _GLIBCXX_STD_A::__min_element(__first, __last, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + + template + _GLIBCXX14_CONSTEXPR + _ForwardIterator + __max_element(_ForwardIterator __first, _ForwardIterator __last, + _Compare __comp) + { + if (__first == __last) return __first; + _ForwardIterator __result = __first; + while (++__first != __last) + if (__comp(__result, __first)) + __result = __first; + return __result; + } + + /** + * @brief Return the maximum element in a range. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @return Iterator referencing the first instance of the largest value. + */ + template + _GLIBCXX14_CONSTEXPR + inline _ForwardIterator + max_element(_ForwardIterator __first, _ForwardIterator __last) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + return _GLIBCXX_STD_A::__max_element(__first, __last, + __gnu_cxx::__ops::__iter_less_iter()); + } + + /** + * @brief Return the maximum element in a range using comparison functor. + * @ingroup sorting_algorithms + * @param __first Start of range. + * @param __last End of range. + * @param __comp Comparison functor. + * @return Iterator referencing the first instance of the largest value + * according to __comp. + */ + template + _GLIBCXX14_CONSTEXPR + inline _ForwardIterator + max_element(_ForwardIterator __first, _ForwardIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + typename iterator_traits<_ForwardIterator>::value_type, + typename iterator_traits<_ForwardIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + return _GLIBCXX_STD_A::__max_element(__first, __last, + __gnu_cxx::__ops::__iter_comp_iter(__comp)); + } + +#if __cplusplus >= 201402L + /// Reservoir sampling algorithm. + template + _RandomAccessIterator + __sample(_InputIterator __first, _InputIterator __last, input_iterator_tag, + _RandomAccessIterator __out, random_access_iterator_tag, + _Size __n, _UniformRandomBitGenerator&& __g) + { + using __distrib_type = uniform_int_distribution<_Size>; + using __param_type = typename __distrib_type::param_type; + __distrib_type __d{}; + _Size __sample_sz = 0; + while (__first != __last && __sample_sz != __n) + { + __out[__sample_sz++] = *__first; + ++__first; + } + for (auto __pop_sz = __sample_sz; __first != __last; + ++__first, (void) ++__pop_sz) + { + const auto __k = __d(__g, __param_type{0, __pop_sz}); + if (__k < __n) + __out[__k] = *__first; + } + return __out + __sample_sz; + } + + /// Selection sampling algorithm. + template + _OutputIterator + __sample(_ForwardIterator __first, _ForwardIterator __last, + forward_iterator_tag, + _OutputIterator __out, _Cat, + _Size __n, _UniformRandomBitGenerator&& __g) + { + using __distrib_type = uniform_int_distribution<_Size>; + using __param_type = typename __distrib_type::param_type; + using _USize = make_unsigned_t<_Size>; + using _Gen = remove_reference_t<_UniformRandomBitGenerator>; + using __uc_type = common_type_t; + + if (__first == __last) + return __out; + + __distrib_type __d{}; + _Size __unsampled_sz = std::distance(__first, __last); + __n = std::min(__n, __unsampled_sz); + + // If possible, we use __gen_two_uniform_ints to efficiently produce + // two random numbers using a single distribution invocation: + + const __uc_type __urngrange = __g.max() - __g.min(); + if (__urngrange / __uc_type(__unsampled_sz) >= __uc_type(__unsampled_sz)) + // I.e. (__urngrange >= __unsampled_sz * __unsampled_sz) but without + // wrapping issues. + { + while (__n != 0 && __unsampled_sz >= 2) + { + const pair<_Size, _Size> __p = + __gen_two_uniform_ints(__unsampled_sz, __unsampled_sz - 1, __g); + + --__unsampled_sz; + if (__p.first < __n) + { + *__out++ = *__first; + --__n; + } + + ++__first; + + if (__n == 0) break; + + --__unsampled_sz; + if (__p.second < __n) + { + *__out++ = *__first; + --__n; + } + + ++__first; + } + } + + // The loop above is otherwise equivalent to this one-at-a-time version: + + for (; __n != 0; ++__first) + if (__d(__g, __param_type{0, --__unsampled_sz}) < __n) + { + *__out++ = *__first; + --__n; + } + return __out; + } + +#if __cplusplus > 201402L +#define __cpp_lib_sample 201603 + /// Take a random sample from a population. + template + _SampleIterator + sample(_PopulationIterator __first, _PopulationIterator __last, + _SampleIterator __out, _Distance __n, + _UniformRandomBitGenerator&& __g) + { + using __pop_cat = typename + std::iterator_traits<_PopulationIterator>::iterator_category; + using __samp_cat = typename + std::iterator_traits<_SampleIterator>::iterator_category; + + static_assert( + __or_, + is_convertible<__samp_cat, random_access_iterator_tag>>::value, + "output range must use a RandomAccessIterator when input range" + " does not meet the ForwardIterator requirements"); + + static_assert(is_integral<_Distance>::value, + "sample size must be an integer type"); + + typename iterator_traits<_PopulationIterator>::difference_type __d = __n; + return _GLIBCXX_STD_A:: + __sample(__first, __last, __pop_cat{}, __out, __samp_cat{}, __d, + std::forward<_UniformRandomBitGenerator>(__g)); + } +#endif // C++17 +#endif // C++14 + +_GLIBCXX_END_NAMESPACE_ALGO +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif /* _STL_ALGO_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algo.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algo.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e21394320d72a92ce5b344d062ea99303f4285e9 GIT binary patch literal 198989 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 ?xZl3_Z2uSAj>;Q|N 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algobase.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algobase.h new file mode 100644 index 0000000..7750335 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algobase.h @@ -0,0 +1,2070 @@ +// Core algorithmic facilities -*- C++ -*- + +// Copyright (C) 2001-2020 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_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 > 201703L +# include +#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 + _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 + _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 + _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 + _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; + } + + // Fallback implementation of the function in bits/stl_iterator.h used to + // remove the __normal_iterator wrapper. See copy, fill, ... + template + _GLIBCXX20_CONSTEXPR + inline _Iterator + __niter_base(_Iterator __it) + _GLIBCXX_NOEXCEPT_IF(std::is_nothrow_copy_constructible<_Iterator>::value) + { return __it; } + + // 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). + template + _GLIBCXX20_CONSTEXPR + inline _From + __niter_wrap(_From __from, _To __res) + { return __from + (__res - std::__niter_base(__from)); } + + // No need to wrap, iterator already has the right type. + template + _GLIBCXX20_CONSTEXPR + inline _Iterator + __niter_wrap(const _Iterator&, _Iterator __res) + { return __res; } + + // All of these auxiliary structs serve two purposes. (1) Replace + // calls to copy with memmove whenever possible. (Memmove, not memcpy, + // because the input and output ranges are permitted to overlap.) + // (2) If we're using random access iterators, then write the loop as + // a for loop with an explicit count. + + template + struct __copy_move + { + template + _GLIBCXX20_CONSTEXPR + static _OI + __copy_m(_II __first, _II __last, _OI __result) + { + for (; __first != __last; ++__result, (void)++__first) + *__result = *__first; + return __result; + } + }; + +#if __cplusplus >= 201103L + template + struct __copy_move + { + template + _GLIBCXX20_CONSTEXPR + static _OI + __copy_m(_II __first, _II __last, _OI __result) + { + for (; __first != __last; ++__result, (void)++__first) + *__result = std::move(*__first); + return __result; + } + }; +#endif + + template<> + struct __copy_move + { + template + _GLIBCXX20_CONSTEXPR + static _OI + __copy_m(_II __first, _II __last, _OI __result) + { + typedef typename iterator_traits<_II>::difference_type _Distance; + for(_Distance __n = __last - __first; __n > 0; --__n) + { + *__result = *__first; + ++__first; + ++__result; + } + return __result; + } + }; + +#if __cplusplus >= 201103L + template<> + struct __copy_move + { + template + _GLIBCXX20_CONSTEXPR + static _OI + __copy_m(_II __first, _II __last, _OI __result) + { + typedef typename iterator_traits<_II>::difference_type _Distance; + for(_Distance __n = __last - __first; __n > 0; --__n) + { + *__result = std::move(*__first); + ++__first; + ++__result; + } + return __result; + } + }; +#endif + + template + struct __copy_move<_IsMove, true, random_access_iterator_tag> + { + template + _GLIBCXX20_CONSTEXPR + static _Tp* + __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result) + { +#if __cplusplus >= 201103L + using __assignable = conditional<_IsMove, + is_move_assignable<_Tp>, + is_copy_assignable<_Tp>>; + // trivial types can have deleted assignment + static_assert( __assignable::type::value, "type is not assignable" ); +#endif + const ptrdiff_t _Num = __last - __first; + if (_Num) + __builtin_memmove(__result, __first, sizeof(_Tp) * _Num); + return __result + _Num; + } + }; + + // 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 + _GLIBCXX20_CONSTEXPR + inline _OI + __copy_move_a2(_II __first, _II __last, _OI __result) + { + typedef typename iterator_traits<_II>::iterator_category _Category; +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return std::__copy_move<_IsMove, false, _Category>:: + __copy_m(__first, __last, __result); +#endif + return std::__copy_move<_IsMove, __memcpyable<_OI, _II>::__value, + _Category>::__copy_m(__first, __last, __result); + } + +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER + + template + struct _Deque_iterator; + +_GLIBCXX_END_NAMESPACE_CONTAINER + + 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 + _GLIBCXX20_CONSTEXPR + inline _OI + __copy_move_a1(_II __first, _II __last, _OI __result) + { return std::__copy_move_a2<_IsMove>(__first, __last, __result); } + + template + _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 + _OI + __copy_move_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + _OI); + + template + __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> + __copy_move_a(_II, _II, + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); + + template + ::__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>&); + + /** + * @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>::value_type>) + __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 + + template + struct __copy_move_backward + { + template + _GLIBCXX20_CONSTEXPR + static _BI2 + __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) + { + while (__first != __last) + *--__result = *--__last; + return __result; + } + }; + +#if __cplusplus >= 201103L + template + struct __copy_move_backward + { + template + _GLIBCXX20_CONSTEXPR + static _BI2 + __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) + { + while (__first != __last) + *--__result = std::move(*--__last); + return __result; + } + }; +#endif + + template<> + struct __copy_move_backward + { + template + _GLIBCXX20_CONSTEXPR + static _BI2 + __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) + { + typename iterator_traits<_BI1>::difference_type + __n = __last - __first; + for (; __n > 0; --__n) + *--__result = *--__last; + return __result; + } + }; + +#if __cplusplus >= 201103L + template<> + struct __copy_move_backward + { + template + _GLIBCXX20_CONSTEXPR + static _BI2 + __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) + { + typename iterator_traits<_BI1>::difference_type + __n = __last - __first; + for (; __n > 0; --__n) + *--__result = std::move(*--__last); + return __result; + } + }; +#endif + + template + struct __copy_move_backward<_IsMove, true, random_access_iterator_tag> + { + template + _GLIBCXX20_CONSTEXPR + static _Tp* + __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result) + { +#if __cplusplus >= 201103L + using __assignable = conditional<_IsMove, + is_move_assignable<_Tp>, + is_copy_assignable<_Tp>>; + // trivial types can have deleted assignment + static_assert( __assignable::type::value, "type is not assignable" ); +#endif + const ptrdiff_t _Num = __last - __first; + if (_Num) + __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num); + return __result - _Num; + } + }; + + template + _GLIBCXX20_CONSTEXPR + inline _BI2 + __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) + { + typedef typename iterator_traits<_BI1>::iterator_category _Category; +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return std::__copy_move_backward<_IsMove, false, _Category>:: + __copy_move_b(__first, __last, __result); +#endif + return std::__copy_move_backward<_IsMove, + __memcpyable<_BI2, _BI1>::__value, + _Category>::__copy_move_b(__first, + __last, + __result); + } + + template + _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 + _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 + _OI + __copy_move_backward_a( + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, + _OI); + + template + __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> + __copy_move_backward_a(_II, _II, + const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); + + template + ::__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 + _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(_ConvertibleConcept< + typename iterator_traits<_BI1>::value_type, + typename iterator_traits<_BI2>::value_type>) + __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 + _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(_ConvertibleConcept< + typename iterator_traits<_BI1>::value_type, + typename iterator_traits<_BI2>::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 + + template + _GLIBCXX20_CONSTEXPR + inline typename + __gnu_cxx::__enable_if::__value, void>::__type + __fill_a1(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __value) + { + for (; __first != __last; ++__first) + *__first = __value; + } + + template + _GLIBCXX20_CONSTEXPR + inline typename + __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type + __fill_a1(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __value) + { + const _Tp __tmp = __value; + for (; __first != __last; ++__first) + *__first = __tmp; + } + + // Specialization: for char types we can use memset. + template + _GLIBCXX20_CONSTEXPR + inline typename + __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type + __fill_a1(_Tp* __first, _Tp* __last, const _Tp& __c) + { + const _Tp __tmp = __c; +#if __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + { + for (; __first != __last; ++__first) + *__first = __tmp; + return; + } +#endif + if (const size_t __len = __last - __first) + __builtin_memset(__first, static_cast(__tmp), __len); + } + + template + _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&); + + template + _GLIBCXX20_CONSTEXPR + inline void + __fill_a(_FIte __first, _FIte __last, const _Tp& __value) + { std::__fill_a1(__first, __last, __value); } + + template + 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 + _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); + } + + // 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) + inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_0 + __size_to_integer(__GLIBCXX_TYPE_INT_N_0 __n) { return __n; } + 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) + inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_1 + __size_to_integer(__GLIBCXX_TYPE_INT_N_1 __n) { return __n; } + 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) + inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_2 + __size_to_integer(__GLIBCXX_TYPE_INT_N_2 __n) { return __n; } + 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) + inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_3 + __size_to_integer(__GLIBCXX_TYPE_INT_N_3 __n) { return __n; } + inline _GLIBCXX_CONSTEXPR __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 __n; } + inline _GLIBCXX_CONSTEXPR long long + __size_to_integer(double __n) { return __n; } + inline _GLIBCXX_CONSTEXPR long long + __size_to_integer(long double __n) { return __n; } +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) && !defined(__CUDACC__) + inline _GLIBCXX_CONSTEXPR long long + __size_to_integer(__float128 __n) { return __n; } +#endif + + template + _GLIBCXX20_CONSTEXPR + inline typename + __gnu_cxx::__enable_if::__value, _OutputIterator>::__type + __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) + { + for (; __n > 0; --__n, (void) ++__first) + *__first = __value; + return __first; + } + + template + _GLIBCXX20_CONSTEXPR + inline typename + __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type + __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) + { + const _Tp __tmp = __value; + for (; __n > 0; --__n, (void) ++__first) + *__first = __tmp; + return __first; + } + + template + ::__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 + _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 + _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 + _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 + _GLIBCXX20_CONSTEXPR + inline _OI + fill_n(_OI __first, _Size __n, const _Tp& __value) + { + // concept requirements + __glibcxx_function_requires(_OutputIteratorConcept<_OI, _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 + || __is_pointer<_ValueType1>::__value) + && __memcmpable<_II1, _II2>::__value); + return std::__equal<__simple>::equal(__first1, __last1, __first2); + } + + template + _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 + bool + __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, + const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, + _II2); + + template + bool + __equal_aux(_II1, _II1, + const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); + + template + 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<> + struct __lexicographical_compare + { + template + _GLIBCXX20_CONSTEXPR + static bool + __lc(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 < 0; + return __len1 < __len2; + } + }; + + template + _GLIBCXX20_CONSTEXPR + inline bool + __lexicographical_compare_aux(_II1 __first1, _II1 __last1, + _II2 __first2, _II2 __last2) + { + typedef typename iterator_traits<_II1>::value_type _ValueType1; + typedef typename iterator_traits<_II2>::value_type _ValueType2; + const bool __simple = + (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value + && __is_pointer<_II1>::__value + && __is_pointer<_II2>::__value +#if __cplusplus > 201703L && __cpp_lib_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 + ); + + return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, + __first2, __last2); + } + + 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 + _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. + inline _GLIBCXX_CONSTEXPR int + __lg(int __n) + { return (int)sizeof(int) * __CHAR_BIT__ - 1 - __builtin_clz(__n); } + + inline _GLIBCXX_CONSTEXPR unsigned + __lg(unsigned __n) + { return (int)sizeof(int) * __CHAR_BIT__ - 1 - __builtin_clz(__n); } + + inline _GLIBCXX_CONSTEXPR long + __lg(long __n) + { return (int)sizeof(long) * __CHAR_BIT__ - 1 - __builtin_clzl(__n); } + + inline _GLIBCXX_CONSTEXPR unsigned long + __lg(unsigned long __n) + { return (int)sizeof(long) * __CHAR_BIT__ - 1 - __builtin_clzl(__n); } + + inline _GLIBCXX_CONSTEXPR long long + __lg(long long __n) + { return (int)sizeof(long long) * __CHAR_BIT__ - 1 - __builtin_clzll(__n); } + + inline _GLIBCXX_CONSTEXPR unsigned long long + __lg(unsigned long long __n) + { return (int)sizeof(long long) * __CHAR_BIT__ - 1 - __builtin_clzll(__n); } + +_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 + _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 + _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 + // 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 (_RAIters()) + { + auto __d1 = std::distance(__first1, __last1); + auto __d2 = std::distance(__first2, __last2); + if (__d1 != __d2) + return false; + return _GLIBCXX_STD_A::equal(__first1, __last1, __first2); + } + + 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 (_RAIters()) + { + auto __d1 = std::distance(__first1, __last1); + auto __d2 = std::distance(__first2, __last2); + if (__d1 != __d2) + return false; + return _GLIBCXX_STD_A::equal(__first1, __last1, __first2, + __binary_pred); + } + + for (; __first1 != __last1 && __first2 != __last2; + ++__first1, (void)++__first2) + if (!bool(__binary_pred(*__first1, *__first2))) + return false; + return __first1 == __last1 && __first2 == __last2; + } +#endif // C++11 + +#if __cplusplus > 201103L + +#define __cpp_lib_robust_nonmodifying_seq_ops 201304 + + /** + * @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 + _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 + _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 // C++14 + + /** + * @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 + _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(std::__niter_base(__first1), + std::__niter_base(__last1), + std::__niter_base(__first2), + std::__niter_base(__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 + _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 + // Iter points to a contiguous range of unsigned narrow character type + // or std::byte, suitable for comparison by memcmp. + template + concept __is_byte_iter = contiguous_iterator<_Iter> + && __is_memcmp_ordered>::__value; + + // 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 + 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); + +#if __cpp_lib_is_constant_evaluated + 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 (__is_byte_iter<_InputIter1>) + if constexpr (__is_byte_iter<_InputIter2>) + { + const auto [__len, __lencmp] + = std::__min_cmp(__last1 - __first1, __last2 - __first2); + if (__len) + { + const auto __c + = __builtin_memcmp(&*__first1, &*__first2, __len) <=> 0; + if (__c != 0) + return __c; + } + return __lencmp; + } +#endif // is_constant_evaluated + 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 std::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 + _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 + _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 __cplusplus > 201103L + + 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 + _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 + _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 + + /// This is an overload used by find algos for the Input Iterator case. + template + _GLIBCXX20_CONSTEXPR + inline _InputIterator + __find_if(_InputIterator __first, _InputIterator __last, + _Predicate __pred, input_iterator_tag) + { + while (__first != __last && !__pred(__first)) + ++__first; + return __first; + } + + /// This is an overload used by find algos for the RAI case. + template + _GLIBCXX20_CONSTEXPR + _RandomAccessIterator + __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Predicate __pred, random_access_iterator_tag) + { + typename iterator_traits<_RandomAccessIterator>::difference_type + __trip_count = (__last - __first) >> 2; + + for (; __trip_count > 0; --__trip_count) + { + if (__pred(__first)) + return __first; + ++__first; + + if (__pred(__first)) + return __first; + ++__first; + + if (__pred(__first)) + return __first; + ++__first; + + if (__pred(__first)) + return __first; + ++__first; + } + + switch (__last - __first) + { + case 3: + if (__pred(__first)) + return __first; + ++__first; + // FALLTHRU + case 2: + if (__pred(__first)) + return __first; + ++__first; + // FALLTHRU + case 1: + if (__pred(__first)) + return __first; + ++__first; + // FALLTHRU + case 0: + default: + return __last; + } + } + + template + _GLIBCXX20_CONSTEXPR + inline _Iterator + __find_if(_Iterator __first, _Iterator __last, _Predicate __pred) + { + return __find_if(__first, __last, __pred, + std::__iterator_category(__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; + } + +#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_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/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algobase.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_algobase.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..0632e8748610a34cef42e0d63de1c2e88886d7d0 GIT binary patch literal 114209 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 MV;19)Wg|TN4`HSI-T(jq literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_bvector.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_bvector.h new file mode 100644 index 0000000..f245e52 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_bvector.h @@ -0,0 +1,1363 @@ +// vector specialization -*- C++ -*- + +// Copyright (C) 2001-2020 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 + +#if __cplusplus >= 201103L +#include +#include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER + + typedef unsigned long _Bit_type; + enum { _S_word_bit = int(__CHAR_BIT__ * sizeof(_Bit_type)) }; + + struct _Bit_reference + { + _Bit_type * _M_p; + _Bit_type _M_mask; + + _Bit_reference(_Bit_type * __x, _Bit_type __y) + : _M_p(__x), _M_mask(__y) { } + + _Bit_reference() _GLIBCXX_NOEXCEPT : _M_p(0), _M_mask(0) { } + +#if __cplusplus >= 201103L + _Bit_reference(const _Bit_reference&) = default; +#endif + + operator bool() const _GLIBCXX_NOEXCEPT + { return !!(*_M_p & _M_mask); } + + _Bit_reference& + operator=(bool __x) _GLIBCXX_NOEXCEPT + { + if (__x) + *_M_p |= _M_mask; + else + *_M_p &= ~_M_mask; + return *this; + } + + _Bit_reference& + operator=(const _Bit_reference& __x) _GLIBCXX_NOEXCEPT + { return *this = bool(__x); } + + bool + operator==(const _Bit_reference& __x) const + { return bool(*this) == bool(__x); } + + bool + operator<(const _Bit_reference& __x) const + { return !bool(*this) && bool(__x); } + + void + flip() _GLIBCXX_NOEXCEPT + { *_M_p ^= _M_mask; } + }; + +#if __cplusplus >= 201103L + inline void + swap(_Bit_reference __x, _Bit_reference __y) noexcept + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } + + inline void + swap(_Bit_reference __x, bool& __y) noexcept + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } + + inline void + swap(bool& __x, _Bit_reference __y) noexcept + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } +#endif + + struct _Bit_iterator_base + : public std::iterator + { + _Bit_type * _M_p; + unsigned int _M_offset; + + _Bit_iterator_base(_Bit_type * __x, unsigned int __y) + : _M_p(__x), _M_offset(__y) { } + + void + _M_bump_up() + { + if (_M_offset++ == int(_S_word_bit) - 1) + { + _M_offset = 0; + ++_M_p; + } + } + + void + _M_bump_down() + { + if (_M_offset-- == 0) + { + _M_offset = int(_S_word_bit) - 1; + --_M_p; + } + } + + void + _M_incr(ptrdiff_t __i) + { + 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); + } + + friend _GLIBCXX20_CONSTEXPR bool + operator==(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { return __x._M_p == __y._M_p && __x._M_offset == __y._M_offset; } + +#if __cpp_lib_three_way_comparison + friend constexpr strong_ordering + operator<=>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + noexcept + { + if (const auto __cmp = __x._M_p <=> __y._M_p; __cmp != 0) + return __cmp; + return __x._M_offset <=> __y._M_offset; + } +#else + friend bool + operator<(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { + return __x._M_p < __y._M_p + || (__x._M_p == __y._M_p && __x._M_offset < __y._M_offset); + } + + friend bool + operator!=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { return !(__x == __y); } + + friend bool + operator>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { return __y < __x; } + + friend bool + operator<=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { return !(__y < __x); } + + friend bool + operator>=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { return !(__x < __y); } +#endif // three-way comparison + + friend ptrdiff_t + operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) + { + return (int(_S_word_bit) * (__x._M_p - __y._M_p) + + __x._M_offset - __y._M_offset); + } + }; + + 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; + + _Bit_iterator() : _Bit_iterator_base(0, 0) { } + + _Bit_iterator(_Bit_type * __x, unsigned int __y) + : _Bit_iterator_base(__x, __y) { } + + iterator + _M_const_cast() const + { return *this; } + + reference + operator*() const + { return reference(_M_p, 1UL << _M_offset); } + + iterator& + operator++() + { + _M_bump_up(); + return *this; + } + + iterator + operator++(int) + { + iterator __tmp = *this; + _M_bump_up(); + return __tmp; + } + + iterator& + operator--() + { + _M_bump_down(); + return *this; + } + + iterator + operator--(int) + { + iterator __tmp = *this; + _M_bump_down(); + return __tmp; + } + + iterator& + operator+=(difference_type __i) + { + _M_incr(__i); + return *this; + } + + iterator& + operator-=(difference_type __i) + { + *this += -__i; + return *this; + } + + reference + operator[](difference_type __i) const + { return *(*this + __i); } + + friend iterator + operator+(const iterator& __x, difference_type __n) + { + iterator __tmp = __x; + __tmp += __n; + return __tmp; + } + + friend iterator + operator+(difference_type __n, const iterator& __x) + { return __x + __n; } + + friend 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; + + _Bit_const_iterator() : _Bit_iterator_base(0, 0) { } + + _Bit_const_iterator(_Bit_type * __x, unsigned int __y) + : _Bit_iterator_base(__x, __y) { } + + _Bit_const_iterator(const _Bit_iterator& __x) + : _Bit_iterator_base(__x._M_p, __x._M_offset) { } + + _Bit_iterator + _M_const_cast() const + { return _Bit_iterator(_M_p, _M_offset); } + + const_reference + operator*() const + { return _Bit_reference(_M_p, 1UL << _M_offset); } + + const_iterator& + operator++() + { + _M_bump_up(); + return *this; + } + + const_iterator + operator++(int) + { + const_iterator __tmp = *this; + _M_bump_up(); + return __tmp; + } + + const_iterator& + operator--() + { + _M_bump_down(); + return *this; + } + + const_iterator + operator--(int) + { + const_iterator __tmp = *this; + _M_bump_down(); + return __tmp; + } + + const_iterator& + operator+=(difference_type __i) + { + _M_incr(__i); + return *this; + } + + const_iterator& + operator-=(difference_type __i) + { + *this += -__i; + return *this; + } + + const_reference + operator[](difference_type __i) const + { return *(*this + __i); } + + friend const_iterator + operator+(const const_iterator& __x, difference_type __n) + { + const_iterator __tmp = __x; + __tmp += __n; + return __tmp; + } + + friend const_iterator + operator-(const const_iterator& __x, difference_type __n) + { + const_iterator __tmp = __x; + __tmp -= __n; + return __tmp; + } + + friend const_iterator + operator+(difference_type __n, const const_iterator& __x) + { return __x + __n; } + }; + + inline void + __fill_bvector(_Bit_type * __v, + unsigned int __first, unsigned int __last, bool __x) + { + 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; + } + + inline void + fill(_Bit_iterator __first, _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); + + __builtin_memset(__first_p, __x ? ~0 : 0, + (__last._M_p - __first_p) * sizeof(_Bit_type)); + + 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); + } + + 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 + { + _Bit_iterator _M_start; + _Bit_iterator _M_finish; + _Bit_pointer _M_end_of_storage; + + _Bvector_impl_data() _GLIBCXX_NOEXCEPT + : _M_start(), _M_finish(), _M_end_of_storage() + { } + +#if __cplusplus >= 201103L + _Bvector_impl_data(_Bvector_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_reset(); } + + void + _M_move_data(_Bvector_impl_data&& __x) noexcept + { + this->_M_start = __x._M_start; + this->_M_finish = __x._M_finish; + this->_M_end_of_storage = __x._M_end_of_storage; + __x._M_reset(); + } +#endif + + void + _M_reset() _GLIBCXX_NOEXCEPT + { + _M_start = _M_finish = _Bit_iterator(); + _M_end_of_storage = _Bit_pointer(); + } + }; + + struct _Bvector_impl + : public _Bit_alloc_type, public _Bvector_impl_data + { + public: + _Bvector_impl() _GLIBCXX_NOEXCEPT_IF( + is_nothrow_default_constructible<_Bit_alloc_type>::value) + : _Bit_alloc_type() + { } + + _Bvector_impl(const _Bit_alloc_type& __a) _GLIBCXX_NOEXCEPT + : _Bit_alloc_type(__a) + { } + +#if __cplusplus >= 201103L + _Bvector_impl(_Bvector_impl&&) = default; +#endif + + _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; + + _Bit_alloc_type& + _M_get_Bit_allocator() _GLIBCXX_NOEXCEPT + { return this->_M_impl; } + + const _Bit_alloc_type& + _M_get_Bit_allocator() const _GLIBCXX_NOEXCEPT + { return this->_M_impl; } + + allocator_type + get_allocator() const _GLIBCXX_NOEXCEPT + { return allocator_type(_M_get_Bit_allocator()); } + +#if __cplusplus >= 201103L + _Bvector_base() = default; +#else + _Bvector_base() { } +#endif + + _Bvector_base(const allocator_type& __a) + : _M_impl(__a) { } + +#if __cplusplus >= 201103L + _Bvector_base(_Bvector_base&&) = default; +#endif + + ~_Bvector_base() + { this->_M_deallocate(); } + + protected: + _Bvector_impl _M_impl; + + _Bit_pointer + _M_allocate(size_t __n) + { return _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); } + + 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 + void + _M_move_data(_Bvector_base&& __x) noexcept + { _M_impl._M_move_data(std::move(__x._M_impl)); } +#endif + + static size_t + _S_nword(size_t __n) + { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); } + }; + +_GLIBCXX_END_NAMESPACE_CONTAINER +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +// Declare a partial specialization of vector. +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER + + /** + * @brief A specialization of vector for booleans which offers fixed time + * access to individual elements in any order. + * + * @ingroup sequences + * + * @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; +#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; + + 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 + + explicit + vector(const allocator_type& __a) + : _Base(__a) { } + +#if __cplusplus >= 201103L + explicit + vector(size_type __n, const allocator_type& __a = allocator_type()) + : vector(__n, false, __a) + { } + + 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); + } + + vector(const vector& __x) + : _Base(_Bit_alloc_traits::_S_select_on_copy(__x._M_get_Bit_allocator())) + { + _M_initialize(__x.size()); + _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start); + } + +#if __cplusplus >= 201103L + vector(vector&&) = default; + + vector(vector&& __x, const allocator_type& __a) + noexcept(_Bit_alloc_traits::_S_always_equal()) + : _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(); + } + } + + vector(const vector& __x, const allocator_type& __a) + : _Base(__a) + { + _M_initialize(__x.size()); + _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start); + } + + 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> + vector(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { _M_initialize_dispatch(__first, __last, __false_type()); } +#else + template + vector(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_initialize_dispatch(__first, __last, _Integral()); + } +#endif + + ~vector() _GLIBCXX_NOEXCEPT { } + + 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 + 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; + } + + 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. + void + assign(size_type __n, const bool& __x) + { _M_fill_assign(__n, __x); } + +#if __cplusplus >= 201103L + template> + void + assign(_InputIterator __first, _InputIterator __last) + { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } +#else + template + void + assign(_InputIterator __first, _InputIterator __last) + { + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_assign_dispatch(__first, __last, _Integral()); + } +#endif + +#if __cplusplus >= 201103L + void + assign(initializer_list __l) + { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } +#endif + + iterator + begin() _GLIBCXX_NOEXCEPT + { return iterator(this->_M_impl._M_start._M_p, 0); } + + const_iterator + begin() const _GLIBCXX_NOEXCEPT + { return const_iterator(this->_M_impl._M_start._M_p, 0); } + + iterator + end() _GLIBCXX_NOEXCEPT + { return this->_M_impl._M_finish; } + + const_iterator + end() const _GLIBCXX_NOEXCEPT + { return this->_M_impl._M_finish; } + + reverse_iterator + rbegin() _GLIBCXX_NOEXCEPT + { return reverse_iterator(end()); } + + const_reverse_iterator + rbegin() const _GLIBCXX_NOEXCEPT + { return const_reverse_iterator(end()); } + + reverse_iterator + rend() _GLIBCXX_NOEXCEPT + { return reverse_iterator(begin()); } + + const_reverse_iterator + rend() const _GLIBCXX_NOEXCEPT + { return const_reverse_iterator(begin()); } + +#if __cplusplus >= 201103L + const_iterator + cbegin() const noexcept + { return const_iterator(this->_M_impl._M_start._M_p, 0); } + + const_iterator + cend() const noexcept + { return this->_M_impl._M_finish; } + + const_reverse_iterator + crbegin() const noexcept + { return const_reverse_iterator(end()); } + + const_reverse_iterator + crend() const noexcept + { return const_reverse_iterator(begin()); } +#endif + + size_type + size() const _GLIBCXX_NOEXCEPT + { return size_type(end() - begin()); } + + 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); + } + + size_type + capacity() const _GLIBCXX_NOEXCEPT + { return size_type(const_iterator(this->_M_impl._M_end_addr(), 0) + - begin()); } + + _GLIBCXX_NODISCARD bool + empty() const _GLIBCXX_NOEXCEPT + { return begin() == end(); } + + reference + operator[](size_type __n) + { + return *iterator(this->_M_impl._M_start._M_p + + __n / int(_S_word_bit), __n % int(_S_word_bit)); + } + + const_reference + operator[](size_type __n) const + { + return *const_iterator(this->_M_impl._M_start._M_p + + __n / int(_S_word_bit), __n % int(_S_word_bit)); + } + + protected: + 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: + reference + at(size_type __n) + { _M_range_check(__n); return (*this)[__n]; } + + const_reference + at(size_type __n) const + { _M_range_check(__n); return (*this)[__n]; } + + void + reserve(size_type __n) + { + if (__n > max_size()) + __throw_length_error(__N("vector::reserve")); + if (capacity() < __n) + _M_reallocate(__n); + } + + reference + front() + { return *begin(); } + + const_reference + front() const + { return *begin(); } + + reference + back() + { return *(end() - 1); } + + const_reference + back() const + { return *(end() - 1); } + + // _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 way we are implementing DR 464 in the debug-mode + // vector class. + void + data() _GLIBCXX_NOEXCEPT { } + + 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); + } + + void + swap(vector& __x) _GLIBCXX_NOEXCEPT + { + std::swap(this->_M_impl._M_start, __x._M_impl._M_start); + std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish); + std::swap(this->_M_impl._M_end_of_storage, + __x._M_impl._M_end_of_storage); + _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 + static void + swap(reference __x, reference __y) _GLIBCXX_NOEXCEPT + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } + + iterator +#if __cplusplus >= 201103L + insert(const_iterator __position, const bool& __x = bool()) +#else + insert(iterator __position, const bool& __x = bool()) +#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 __cplusplus >= 201103L + template> + iterator + insert(const_iterator __position, + _InputIterator __first, _InputIterator __last) + { + difference_type __offset = __position - cbegin(); + _M_insert_dispatch(__position._M_const_cast(), + __first, __last, __false_type()); + return begin() + __offset; + } +#else + template + void + insert(iterator __position, + _InputIterator __first, _InputIterator __last) + { + typedef typename std::__is_integer<_InputIterator>::__type _Integral; + _M_insert_dispatch(__position, __first, __last, _Integral()); + } +#endif + +#if __cplusplus >= 201103L + 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 + iterator + insert(const_iterator __p, initializer_list __l) + { return this->insert(__p, __l.begin(), __l.end()); } +#endif + + void + pop_back() + { --this->_M_impl._M_finish; } + + iterator +#if __cplusplus >= 201103L + erase(const_iterator __position) +#else + erase(iterator __position) +#endif + { return _M_erase(__position._M_const_cast()); } + + 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()); } + + 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 + void + shrink_to_fit() + { _M_shrink_to_fit(); } +#endif + + 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; + } + + void + clear() _GLIBCXX_NOEXCEPT + { _M_erase_at_end(begin()); } + +#if __cplusplus >= 201103L + template +#if __cplusplus > 201402L + reference +#else + void +#endif + emplace_back(_Args&&... __args) + { + push_back(bool(__args...)); +#if __cplusplus > 201402L + return back(); +#endif + } + + template + iterator + emplace(const_iterator __pos, _Args&&... __args) + { return insert(__pos, bool(__args...)); } +#endif + + protected: + // Precondition: __first._M_offset == 0 && __result._M_offset == 0. + 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)); + } + + 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); + this->_M_impl._M_start = iterator(std::__addressof(*__q), 0); + } + else + { + this->_M_impl._M_end_of_storage = _Bit_pointer(); + this->_M_impl._M_start = iterator(0, 0); + } + this->_M_impl._M_finish = this->_M_impl._M_start + difference_type(__n); + + } + + void + _M_initialize_value(bool __x) + { + if (_Bit_type* __p = this->_M_impl._M_start._M_p) + __builtin_memset(__p, __x ? ~0 : 0, + (this->_M_impl._M_end_addr() - __p) + * sizeof(_Bit_type)); + } + + void + _M_reallocate(size_type __n); + +#if __cplusplus >= 201103L + bool + _M_shrink_to_fit(); +#endif + + // Check whether it's an integral type. If so, it's not an iterator. + + // _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)); } + + template + void + _M_initialize_range(_InputIterator __first, _InputIterator __last, + std::input_iterator_tag) + { + for (; __first != __last; ++__first) + push_back(*__first); + } + + template + 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, this->_M_impl._M_start); + } + +#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 + + 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 + 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 + 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); + } + } + + // Check whether it's an integral type. If so, it's not an iterator. + + // _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)); } + + void + _M_fill_insert(iterator __position, size_type __n, bool __x); + + template + void + _M_insert_range(iterator __pos, _InputIterator __first, + _InputIterator __last, std::input_iterator_tag) + { + for (; __first != __last; ++__first) + { + __pos = insert(__pos, *__first); + ++__pos; + } + } + + template + void + _M_insert_range(iterator __position, _ForwardIterator __first, + _ForwardIterator __last, std::forward_iterator_tag); + + void + _M_insert_aux(iterator __position, bool __x); + + 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; + } + + void + _M_erase_at_end(iterator __pos) + { this->_M_impl._M_finish = __pos; } + + iterator + _M_erase(iterator __pos); + + iterator + _M_erase(iterator __first, iterator __last); + }; + +_GLIBCXX_END_NAMESPACE_CONTAINER +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#if __cplusplus >= 201103L + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // 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; + }; + +_GLIBCXX_END_NAMESPACE_VERSION +}// namespace std + +#endif // C++11 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_bvector.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_bvector.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c151ab45a47f095986c039dca3418012bf6649d4 GIT binary patch literal 81234 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 IZc. + +/* + * + * 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 __cplusplus >= 201703L + 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 __cplusplus > 201703L + template + constexpr auto + construct_at(_Tp* __location, _Args&&... __args) + noexcept(noexcept(::new((void*)0) _Tp(std::declval<_Args>()...))) + -> decltype(::new((void*)0) _Tp(std::declval<_Args>()...)) + { return ::new((void*)__location) _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 + inline void + _Construct(_Tp* __p, _Args&&... __args) + { ::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 + 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 __cplusplus > 201703L + std::destroy_at(__pointer); +#else + __pointer->~_Tp(); +#endif + } + + template + struct _Destroy_aux + { + template + static _GLIBCXX20_CONSTEXPR void + __destroy(_ForwardIterator __first, _ForwardIterator __last) + { + for (; __first != __last; ++__first) + std::_Destroy(std::__addressof(*__first)); + } + }; + + template<> + struct _Destroy_aux + { + template + static void + __destroy(_ForwardIterator, _ForwardIterator) { } + }; + + /** + * 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 + // A deleted destructor is trivial, this ensures we reject such types: + static_assert(is_destructible<_Value_type>::value, + "value type is destructible"); +#endif +#if __cplusplus > 201703L && defined __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return _Destroy_aux::__destroy(__first, __last); +#endif + std::_Destroy_aux<__has_trivial_destructor(_Value_type)>:: + __destroy(__first, __last); + } + + template + struct _Destroy_n_aux + { + 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_n_aux + { + template + static _ForwardIterator + __destroy_n(_ForwardIterator __first, _Size __count) + { + std::advance(__first, __count); + return __first; + } + }; + + /** + * 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 + // A deleted destructor is trivial, this ensures we reject such types: + static_assert(is_destructible<_Value_type>::value, + "value type is destructible"); +#endif +#if __cplusplus > 201703L && defined __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return _Destroy_n_aux::__destroy_n(__first, __count); +#endif + return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>:: + __destroy_n(__first, __count); + } + +#if __cplusplus >= 201703L + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_construct.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_construct.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6afdca67d32a9026450cfb513df44bc2e7a0c8e0 GIT binary patch literal 18324 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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 + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // 20.3.1 base classes + /** @defgroup functors Function Objects + * @ingroup utilities + * + * Function objects, or @e functors, are objects with an @c 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 @a 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 @c a and @c b containing @c double, + * and put the result in @c a, use + * \code + * transform (a.begin(), a.end(), b.begin(), a.begin(), plus()); + * \endcode + * To negate every element in @c a, use + * \code + * transform(a.begin(), a.end(), a.begin(), negate()); + * \endcode + * The addition and negation functions will be inlined directly. + * + * The standard functors are derived from structs named @c unary_function + * and @c binary_function. These two classes contain nothing but typedefs, + * to aid in generic (template) programming. If you write your own + * functors, you might consider doing the same. + * + * @{ + */ + /** + * This is one of the @link functors functor base classes@endlink. + */ + 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; + }; + + /** + * This is one of the @link functors functor base classes@endlink. + */ + 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; + }; + /** @} */ + + // 20.3.2 arithmetic + /** @defgroup arithmetic_functors Arithmetic Classes + * @ingroup functors + * + * Because basic math often needs to be done during an algorithm, + * the library provides functors for those operations. See the + * documentation for @link functors the base classes@endlink + * for examples of their use. + * + * @{ + */ + +#if __cplusplus > 201103L + struct __is_transparent; // undefined + + template + struct plus; + + template + struct minus; + + template + struct multiplies; + + template + struct divides; + + template + struct modulus; + + template + struct negate; +#endif + + /// One of the @link arithmetic_functors math functors@endlink. + template + struct plus : 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 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; } + }; + +#if __cplusplus > 201103L + +#define __cpp_lib_transparent_operators 201510 + + 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 __cplusplus > 201103L + template + struct equal_to; + + template + struct not_equal_to; + + template + struct greater; + + template + struct less; + + template + struct greater_equal; + + template + struct less_equal; +#endif + + /// 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 +#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED + if (__builtin_is_constant_evaluated()) +#else + if (__builtin_constant_p(__x > __y)) +#endif + 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 +#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED + if (__builtin_is_constant_evaluated()) +#else + if (__builtin_constant_p(__x < __y)) +#endif + 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 +#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED + if (__builtin_is_constant_evaluated()) +#else + if (__builtin_constant_p(__x >= __y)) +#endif + 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 +#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED + if (__builtin_is_constant_evaluated()) +#else + if (__builtin_constant_p(__x <= __y)) +#endif + return __x <= __y; +#endif + return (__UINTPTR_TYPE__)__x <= (__UINTPTR_TYPE__)__y; + } + }; + +#if __cplusplus >= 201402L + /// 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)) + { + return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), + __ptr_cmp<_Tp, _Up>{}); + } + + template + constexpr bool + operator()(_Tp* __t, _Up* __u) const noexcept + { return greater>{}(__t, __u); } + + typedef __is_transparent is_transparent; + + private: + template + static constexpr decltype(auto) + _S_cmp(_Tp&& __t, _Up&& __u, false_type) + { return std::forward<_Tp>(__t) > std::forward<_Up>(__u); } + + template + static constexpr bool + _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept + { + return greater{}( + static_cast(std::forward<_Tp>(__t)), + static_cast(std::forward<_Up>(__u))); + } + + // 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 + using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, + is_convertible<_Tp, const volatile void*>, + is_convertible<_Up, const volatile void*>>; + }; + + /// 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)) + { + return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), + __ptr_cmp<_Tp, _Up>{}); + } + + template + constexpr bool + operator()(_Tp* __t, _Up* __u) const noexcept + { return less>{}(__t, __u); } + + typedef __is_transparent is_transparent; + + private: + template + static constexpr decltype(auto) + _S_cmp(_Tp&& __t, _Up&& __u, false_type) + { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); } + + template + static constexpr bool + _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept + { + return less{}( + static_cast(std::forward<_Tp>(__t)), + static_cast(std::forward<_Up>(__u))); + } + + // 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 + using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, + is_convertible<_Tp, const volatile void*>, + is_convertible<_Up, const volatile void*>>; + }; + + /// 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)) + { + return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), + __ptr_cmp<_Tp, _Up>{}); + } + + template + constexpr bool + operator()(_Tp* __t, _Up* __u) const noexcept + { return greater_equal>{}(__t, __u); } + + typedef __is_transparent is_transparent; + + private: + template + static constexpr decltype(auto) + _S_cmp(_Tp&& __t, _Up&& __u, false_type) + { return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); } + + template + static constexpr bool + _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept + { + return greater_equal{}( + static_cast(std::forward<_Tp>(__t)), + static_cast(std::forward<_Up>(__u))); + } + + // 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 + using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, + is_convertible<_Tp, const volatile void*>, + is_convertible<_Up, const volatile void*>>; + }; + + /// 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)) + { + return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), + __ptr_cmp<_Tp, _Up>{}); + } + + template + constexpr bool + operator()(_Tp* __t, _Up* __u) const noexcept + { return less_equal>{}(__t, __u); } + + typedef __is_transparent is_transparent; + + private: + template + static constexpr decltype(auto) + _S_cmp(_Tp&& __t, _Up&& __u, false_type) + { return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); } + + template + static constexpr bool + _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept + { + return less_equal{}( + static_cast(std::forward<_Tp>(__t)), + static_cast(std::forward<_Up>(__u))); + } + + // 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 + using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, + is_convertible<_Tp, const volatile void*>, + is_convertible<_Up, const volatile void*>>; + }; +#endif // C++14 + /** @} */ + + // 20.3.4 logical operations + /** @defgroup logical_functors Boolean Operations Classes + * @ingroup functors + * + * Here are wrapper functors for Boolean operations: @c &&, @c ||, + * and @c !. + * + * @{ + */ +#if __cplusplus > 201103L + template + struct logical_and; + + template + struct logical_or; + + template + struct logical_not; +#endif + + /// 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; } + }; + +#if __cplusplus > 201103L + /// 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 + /** @} */ + +#if __cplusplus > 201103L + template + struct bit_and; + + template + struct bit_or; + + template + struct bit_xor; + + template + struct bit_not; +#endif + + // _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; } + }; + +#if __cplusplus > 201103L + 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 + + // 20.3.5 negators + /** @defgroup negators Negators + * @ingroup functors + * + * The functions @c not1 and @c not2 each take a predicate functor + * and return an instance of @c unary_negate or + * @c binary_negate, respectively. These classes are functors whose + * @c operator() performs the stored 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) { return x > 3; } + * }; + * + * std::find_if (v.begin(), v.end(), not1(IntGreaterThanThree())); + * \endcode + * The call to @c find_if will locate the first index (i) of @c 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 which + * take two arguments. + * + * @{ + */ + /// One of the @link negators negation functors@endlink. + template + class 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 + _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 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 + _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., @c result_type + * from the base classes @c unary_function and @c 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 @c pointer_to_unary_function is constructed with a + * function pointer @c f, and its @c operator() called with argument @c x + * returns @c f(x). The functor @c pointer_to_binary_function does the same + * thing, but with a double-argument @c f and @c operator(). + * + * The function @c ptr_fun takes a pointer-to-function @c f and constructs + * an instance of the appropriate functor. + * + * @{ + */ + /// 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); } + }; + + /// One of the @link pointer_adaptors adaptors for function pointers@endlink. + template + 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); } + }; + + /// One of the @link pointer_adaptors adaptors for function pointers@endlink. + template + 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 memory_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. + * + * @{ + */ + /// One of the @link memory_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)(); + }; + + /// One of the @link memory_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; + }; + + /// One of the @link memory_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)(); + }; + + /// One of the @link memory_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; + }; + + /// One of the @link memory_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); + }; + + /// One of the @link memory_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; + }; + + /// One of the @link memory_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); + }; + + /// One of the @link memory_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; + }; + + // Mem_fun adaptor helper functions. There are only two: + // mem_fun and mem_fun_ref. + template + inline mem_fun_t<_Ret, _Tp> + mem_fun(_Ret (_Tp::*__f)()) + { return mem_fun_t<_Ret, _Tp>(__f); } + + template + inline const_mem_fun_t<_Ret, _Tp> + mem_fun(_Ret (_Tp::*__f)() const) + { return const_mem_fun_t<_Ret, _Tp>(__f); } + + template + inline mem_fun_ref_t<_Ret, _Tp> + mem_fun_ref(_Ret (_Tp::*__f)()) + { return mem_fun_ref_t<_Ret, _Tp>(__f); } + + template + 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 + inline mem_fun1_t<_Ret, _Tp, _Arg> + mem_fun(_Ret (_Tp::*__f)(_Arg)) + { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); } + + template + 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 + 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 + 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); } + + /** @} */ + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#if (__cplusplus < 201103L) || _GLIBCXX_USE_DEPRECATED +# include +#endif + +#endif /* _STL_FUNCTION_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_function.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_function.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2818a4fc53959c69c9a354dc190e198d0d111fff GIT binary patch literal 83442 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 Ky46D*L;WAmn&CMB literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_heap.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_heap.h new file mode 100644 index 0000000..52e3a3b --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_heap.h @@ -0,0 +1,583 @@ +// Heap implementation -*- C++ -*- + +// Copyright (C) 2001-2020 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) 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_heap.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{queue} + */ + +#ifndef _STL_HEAP_H +#define _STL_HEAP_H 1 + +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup heap_algorithms Heap + * @ingroup sorting_algorithms + */ + + template + _GLIBCXX20_CONSTEXPR + _Distance + __is_heap_until(_RandomAccessIterator __first, _Distance __n, + _Compare& __comp) + { + _Distance __parent = 0; + for (_Distance __child = 1; __child < __n; ++__child) + { + if (__comp(__first + __parent, __first + __child)) + return __child; + if ((__child & 1) == 0) + ++__parent; + } + return __n; + } + + // __is_heap, a predicate testing whether or not a range is a heap. + // This function is an extension, not part of the C++ standard. + template + _GLIBCXX20_CONSTEXPR + inline bool + __is_heap(_RandomAccessIterator __first, _Distance __n) + { + __gnu_cxx::__ops::_Iter_less_iter __comp; + return std::__is_heap_until(__first, __n, __comp) == __n; + } + + template + _GLIBCXX20_CONSTEXPR + inline bool + __is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n) + { + typedef __decltype(__comp) _Cmp; + __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); + return std::__is_heap_until(__first, __n, __cmp) == __n; + } + + template + _GLIBCXX20_CONSTEXPR + inline bool + __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) + { return std::__is_heap(__first, std::distance(__first, __last)); } + + template + _GLIBCXX20_CONSTEXPR + inline bool + __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + return std::__is_heap(__first, _GLIBCXX_MOVE(__comp), + std::distance(__first, __last)); + } + + // Heap-manipulation functions: push_heap, pop_heap, make_heap, sort_heap, + // + is_heap and is_heap_until in C++0x. + + template + _GLIBCXX20_CONSTEXPR + void + __push_heap(_RandomAccessIterator __first, + _Distance __holeIndex, _Distance __topIndex, _Tp __value, + _Compare& __comp) + { + _Distance __parent = (__holeIndex - 1) / 2; + while (__holeIndex > __topIndex && __comp(__first + __parent, __value)) + { + *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + __parent)); + __holeIndex = __parent; + __parent = (__holeIndex - 1) / 2; + } + *(__first + __holeIndex) = _GLIBCXX_MOVE(__value); + } + + /** + * @brief Push an element onto a heap. + * @param __first Start of heap. + * @param __last End of heap + element. + * @ingroup heap_algorithms + * + * This operation pushes the element at last-1 onto the valid heap + * over the range [__first,__last-1). After completion, + * [__first,__last) is a valid heap. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) + { + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; + + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + __glibcxx_requires_heap(__first, __last - 1); + + __gnu_cxx::__ops::_Iter_less_val __comp; + _ValueType __value = _GLIBCXX_MOVE(*(__last - 1)); + std::__push_heap(__first, _DistanceType((__last - __first) - 1), + _DistanceType(0), _GLIBCXX_MOVE(__value), __comp); + } + + /** + * @brief Push an element onto a heap using comparison functor. + * @param __first Start of heap. + * @param __last End of heap + element. + * @param __comp Comparison functor. + * @ingroup heap_algorithms + * + * This operation pushes the element at __last-1 onto the valid + * heap over the range [__first,__last-1). After completion, + * [__first,__last) is a valid heap. Compare operations are + * performed using comp. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; + + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + __glibcxx_requires_heap_pred(__first, __last - 1, __comp); + + __decltype(__gnu_cxx::__ops::__iter_comp_val(_GLIBCXX_MOVE(__comp))) + __cmp(_GLIBCXX_MOVE(__comp)); + _ValueType __value = _GLIBCXX_MOVE(*(__last - 1)); + std::__push_heap(__first, _DistanceType((__last - __first) - 1), + _DistanceType(0), _GLIBCXX_MOVE(__value), __cmp); + } + + template + _GLIBCXX20_CONSTEXPR + void + __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, + _Distance __len, _Tp __value, _Compare __comp) + { + const _Distance __topIndex = __holeIndex; + _Distance __secondChild = __holeIndex; + while (__secondChild < (__len - 1) / 2) + { + __secondChild = 2 * (__secondChild + 1); + if (__comp(__first + __secondChild, + __first + (__secondChild - 1))) + __secondChild--; + *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + __secondChild)); + __holeIndex = __secondChild; + } + if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2) + { + __secondChild = 2 * (__secondChild + 1); + *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + + (__secondChild - 1))); + __holeIndex = __secondChild - 1; + } + __decltype(__gnu_cxx::__ops::__iter_comp_val(_GLIBCXX_MOVE(__comp))) + __cmp(_GLIBCXX_MOVE(__comp)); + std::__push_heap(__first, __holeIndex, __topIndex, + _GLIBCXX_MOVE(__value), __cmp); + } + + template + _GLIBCXX20_CONSTEXPR + inline void + __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, + _RandomAccessIterator __result, _Compare& __comp) + { + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; + + _ValueType __value = _GLIBCXX_MOVE(*__result); + *__result = _GLIBCXX_MOVE(*__first); + std::__adjust_heap(__first, _DistanceType(0), + _DistanceType(__last - __first), + _GLIBCXX_MOVE(__value), __comp); + } + + /** + * @brief Pop an element off a heap. + * @param __first Start of heap. + * @param __last End of heap. + * @pre [__first, __last) is a valid, non-empty range. + * @ingroup heap_algorithms + * + * This operation pops the top of the heap. The elements __first + * and __last-1 are swapped and [__first,__last-1) is made into a + * heap. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_non_empty_range(__first, __last); + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + __glibcxx_requires_heap(__first, __last); + + if (__last - __first > 1) + { + --__last; + __gnu_cxx::__ops::_Iter_less_iter __comp; + std::__pop_heap(__first, __last, __last, __comp); + } + } + + /** + * @brief Pop an element off a heap using comparison functor. + * @param __first Start of heap. + * @param __last End of heap. + * @param __comp Comparison functor to use. + * @ingroup heap_algorithms + * + * This operation pops the top of the heap. The elements __first + * and __last-1 are swapped and [__first,__last-1) is made into a + * heap. Comparisons are made using comp. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + pop_heap(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + __glibcxx_requires_non_empty_range(__first, __last); + __glibcxx_requires_heap_pred(__first, __last, __comp); + + if (__last - __first > 1) + { + typedef __decltype(__comp) _Cmp; + __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); + --__last; + std::__pop_heap(__first, __last, __last, __cmp); + } + } + + template + _GLIBCXX20_CONSTEXPR + void + __make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare& __comp) + { + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; + + if (__last - __first < 2) + return; + + const _DistanceType __len = __last - __first; + _DistanceType __parent = (__len - 2) / 2; + while (true) + { + _ValueType __value = _GLIBCXX_MOVE(*(__first + __parent)); + std::__adjust_heap(__first, __parent, __len, _GLIBCXX_MOVE(__value), + __comp); + if (__parent == 0) + return; + __parent--; + } + } + + /** + * @brief Construct a heap over a range. + * @param __first Start of heap. + * @param __last End of heap. + * @ingroup heap_algorithms + * + * This operation makes the elements in [__first,__last) into a heap. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + __gnu_cxx::__ops::_Iter_less_iter __comp; + std::__make_heap(__first, __last, __comp); + } + + /** + * @brief Construct a heap over a range using comparison functor. + * @param __first Start of heap. + * @param __last End of heap. + * @param __comp Comparison functor to use. + * @ingroup heap_algorithms + * + * This operation makes the elements in [__first,__last) into a heap. + * Comparisons are made using __comp. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + typedef __decltype(__comp) _Cmp; + __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); + std::__make_heap(__first, __last, __cmp); + } + + template + _GLIBCXX20_CONSTEXPR + void + __sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare& __comp) + { + while (__last - __first > 1) + { + --__last; + std::__pop_heap(__first, __last, __last, __comp); + } + } + + /** + * @brief Sort a heap. + * @param __first Start of heap. + * @param __last End of heap. + * @ingroup heap_algorithms + * + * This operation sorts the valid heap in the range [__first,__last). + */ + template + _GLIBCXX20_CONSTEXPR + inline void + sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + __glibcxx_requires_heap(__first, __last); + + __gnu_cxx::__ops::_Iter_less_iter __comp; + std::__sort_heap(__first, __last, __comp); + } + + /** + * @brief Sort a heap using comparison functor. + * @param __first Start of heap. + * @param __last End of heap. + * @param __comp Comparison functor to use. + * @ingroup heap_algorithms + * + * This operation sorts the valid heap in the range [__first,__last). + * Comparisons are made using __comp. + */ + template + _GLIBCXX20_CONSTEXPR + inline void + sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + __glibcxx_requires_heap_pred(__first, __last, __comp); + + typedef __decltype(__comp) _Cmp; + __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); + std::__sort_heap(__first, __last, __cmp); + } + +#if __cplusplus >= 201103L + /** + * @brief Search the end of a heap. + * @param __first Start of range. + * @param __last End of range. + * @return An iterator pointing to the first element not in the heap. + * @ingroup heap_algorithms + * + * This operation returns the last iterator i in [__first, __last) for which + * the range [__first, i) is a heap. + */ + template + _GLIBCXX20_CONSTEXPR + inline _RandomAccessIterator + is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last) + { + // concept requirements + __glibcxx_function_requires(_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_LessThanComparableConcept< + typename iterator_traits<_RandomAccessIterator>::value_type>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive(__first, __last); + + __gnu_cxx::__ops::_Iter_less_iter __comp; + return __first + + std::__is_heap_until(__first, std::distance(__first, __last), __comp); + } + + /** + * @brief Search the end of a heap using comparison functor. + * @param __first Start of range. + * @param __last End of range. + * @param __comp Comparison functor to use. + * @return An iterator pointing to the first element not in the heap. + * @ingroup heap_algorithms + * + * This operation returns the last iterator i in [__first, __last) for which + * the range [__first, i) is a heap. Comparisons are made using __comp. + */ + template + _GLIBCXX20_CONSTEXPR + inline _RandomAccessIterator + is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + typedef __decltype(__comp) _Cmp; + __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); + return __first + + std::__is_heap_until(__first, std::distance(__first, __last), __cmp); + } + + /** + * @brief Determines whether a range is a heap. + * @param __first Start of range. + * @param __last End of range. + * @return True if range is a heap, false otherwise. + * @ingroup heap_algorithms + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) + { return std::is_heap_until(__first, __last) == __last; } + + /** + * @brief Determines whether a range is a heap using comparison functor. + * @param __first Start of range. + * @param __last End of range. + * @param __comp Comparison functor to use. + * @return True if range is a heap, false otherwise. + * @ingroup heap_algorithms + */ + template + _GLIBCXX20_CONSTEXPR + inline bool + is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) + { + // concept requirements + __glibcxx_function_requires(_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_requires_valid_range(__first, __last); + __glibcxx_requires_irreflexive_pred(__first, __last, __comp); + + const auto __dist = std::distance(__first, __last); + typedef __decltype(__comp) _Cmp; + __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); + return std::__is_heap_until(__first, __dist, __cmp) == __dist; + } +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _STL_HEAP_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_heap.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_heap.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b75e79e284a1ec7fa1b042814b91afae6e80f13a GIT binary patch literal 33758 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

    p)5_wNXmq(!ZsC!BFJXCv8%IUbDh$dj zDZhxL6^Ec3cBp!coSjcG_$n%gb!H4f^3CkagfIK1vacGyYKQ3JY8MWt9R_=j5o{3iYzJoQb^H@N@X)Ner# zy4r>B(!L{MR$7IPsG>bdXNt~DBY8j%@wAAL$&8?LGzNSs1wsNa9=V)&-X_-_uSIp| zVYKr58Ai)VKhc2>oStNy!=^lp3A85uQm^uah;`!-_D;rtld3>iw;R%p-FT~?^2;Ot zy_jQ1+7298{LVy)sQk_ak2!Xg?yAI_Vz@%ml;1)z+N4I(wzO^G8V@fit%|TVaXZR( zRN*}|Tv literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator.h new file mode 100644 index 0000000..3ff38b9 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator.h @@ -0,0 +1,2237 @@ +// Iterators -*- C++ -*- + +// Copyright (C) 2001-2020 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.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 + +#if __cplusplus >= 201103L +# include +#endif + +#if __cplusplus > 201703L +# define __cpp_lib_array_constexpr 201811L +# define __cpp_lib_constexpr_iterator 201811L +#elif __cplusplus == 201703L +# define __cpp_lib_array_constexpr 201803L +#endif + +#if __cplusplus > 201703L +# include +# include +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup iterators + * @{ + */ + +#if __cplusplus > 201703L && __cpp_lib_concepts + 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>; + } +#endif + + // 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> + { + protected: + _Iterator current; + + typedef iterator_traits<_Iterator> __traits_type; + + public: + typedef _Iterator iterator_type; + typedef typename __traits_type::difference_type difference_type; + typedef typename __traits_type::pointer pointer; + typedef typename __traits_type::reference reference; + +#if __cplusplus > 201703L && __cpp_lib_concepts + using iterator_concept + = conditional_t, + random_access_iterator_tag, + bidirectional_iterator_tag>; + using iterator_category + = __detail::__clamp_iter_cat; +#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() : current() { } + + /** + * This %iterator will move in the opposite direction that @p x does. + */ + explicit _GLIBCXX17_CONSTEXPR + reverse_iterator(iterator_type __x) : current(__x) { } + + /** + * The copy constructor is normal. + */ + _GLIBCXX17_CONSTEXPR + reverse_iterator(const reverse_iterator& __x) + : 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 + _GLIBCXX17_CONSTEXPR + reverse_iterator(const reverse_iterator<_Iter>& __x) + : current(__x.base()) { } + + /** + * @return @c current, the %iterator used for underlying work. + */ + _GLIBCXX17_CONSTEXPR iterator_type + base() const + { 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 + */ + _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. + */ + _GLIBCXX17_CONSTEXPR pointer + operator->() const +#if __cplusplus > 201703L && __cpp_concepts >= 201907L + 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. + */ + _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. + */ + _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. + */ + _GLIBCXX17_CONSTEXPR reference + operator[](difference_type __n) const + { return *(*this + __n); } + +#if __cplusplus > 201703L && __cpp_lib_concepts + 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 + + 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. + * + */ +#if __cplusplus <= 201703L || ! defined __cpp_lib_concepts + template + inline _GLIBCXX17_CONSTEXPR bool + operator==(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return __x.base() == __y.base(); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator<(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return __y.base() < __x.base(); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator!=(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return !(__x == __y); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator>(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return __y < __x; } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator<=(const reverse_iterator<_Iterator>& __x, + const reverse_iterator<_Iterator>& __y) + { return !(__y < __x); } + + template + 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 + 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 __y.base() < __x.base(); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator!=(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return !(__x == __y); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator>(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return __y < __x; } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator<=(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return !(__y < __x); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator>=(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __y) + { return !(__x < __y); } +#else // C++20 + template + 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 + 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 + 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 + 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 + 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 + 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> + constexpr compare_three_way_result_t<_IteratorL, _IteratorR> + operator<=>(const reverse_iterator<_IteratorL>& __x, + const reverse_iterator<_IteratorR>& __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 + 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 + 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); } + +# if __cplusplus >= 201402L +# define __cpp_lib_make_reverse_iterator 201402 + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 2285. make_reverse_iterator + /// Generator function for reverse_iterator. + template + inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator> + make_reverse_iterator(_Iterator __i) + { return reverse_iterator<_Iterator>(__i); } + +# if __cplusplus > 201703L && defined __cpp_lib_concepts + template + requires (!sized_sentinel_for<_Iterator1, _Iterator2>) + inline constexpr bool + disable_sized_sentinel_for, + reverse_iterator<_Iterator2>> = true; +# endif // C++20 +# endif // C++14 + + template + _GLIBCXX20_CONSTEXPR + auto + __niter_base(reverse_iterator<_Iterator> __it) + -> decltype(__make_reverse_iterator(__niter_base(__it.base()))) + { return __make_reverse_iterator(__niter_base(__it.base())); } + + template + struct __is_move_iterator > + : __is_move_iterator<_Iterator> + { }; + + template + _GLIBCXX20_CONSTEXPR + auto + __miter_base(reverse_iterator<_Iterator> __it) + -> decltype(__make_reverse_iterator(__miter_base(__it.base()))) + { return __make_reverse_iterator(__miter_base(__it.base())); } +#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; +#if __cplusplus > 201703L + using difference_type = ptrdiff_t; + + constexpr back_insert_iterator() noexcept : container(nullptr) { } +#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. + _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 + _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; +#if __cplusplus > 201703L + using difference_type = ptrdiff_t; + + constexpr front_insert_iterator() noexcept : container(nullptr) { } +#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. + _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 + _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 + { +#if __cplusplus > 201703L && defined __cpp_lib_concepts + using _Iter = std::__detail::__range_iter_t<_Container>; + + protected: + _Container* container = nullptr; + _Iter iter = _Iter(); +#else + typedef typename _Container::iterator _Iter; + + protected: + _Container* container; + _Iter iter; +#endif + + public: + /// A nested typedef for the type of whatever container you used. + typedef _Container container_type; + +#if __cplusplus > 201703L && defined __cpp_lib_concepts + using difference_type = ptrdiff_t; + + insert_iterator() = default; +#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. + _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; } + }; + + /** + * @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. + */ +#if __cplusplus > 201703L && defined __cpp_lib_concepts + template + constexpr insert_iterator<_Container> + inserter(_Container& __x, std::__detail::__range_iter_t<_Container> __i) + { return insert_iterator<_Container>(__x, __i); } +#else + template + inline insert_iterator<_Container> + inserter(_Container& __x, _Iterator __i) + { + return insert_iterator<_Container>(__x, + typename _Container::iterator(__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; + + 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; + +#if __cplusplus > 201703L && __cpp_lib_concepts + using iterator_concept = std::__detail::__iter_concept<_Iterator>; +#endif + + _GLIBCXX_CONSTEXPR __normal_iterator() _GLIBCXX_NOEXCEPT + : _M_current(_Iterator()) { } + + explicit _GLIBCXX20_CONSTEXPR + __normal_iterator(const _Iterator& __i) _GLIBCXX_NOEXCEPT + : _M_current(__i) { } + + // Allow iterator to const_iterator conversion + template + _GLIBCXX20_CONSTEXPR + __normal_iterator(const __normal_iterator<_Iter, + typename __enable_if< + (std::__are_same<_Iter, typename _Container::pointer>::__value), + _Container>::__type>& __i) _GLIBCXX_NOEXCEPT + : _M_current(__i.base()) { } + + // Forward iterator requirements + _GLIBCXX20_CONSTEXPR + reference + operator*() const _GLIBCXX_NOEXCEPT + { return *_M_current; } + + _GLIBCXX20_CONSTEXPR + pointer + operator->() const _GLIBCXX_NOEXCEPT + { return _M_current; } + + _GLIBCXX20_CONSTEXPR + __normal_iterator& + operator++() _GLIBCXX_NOEXCEPT + { + ++_M_current; + return *this; + } + + _GLIBCXX20_CONSTEXPR + __normal_iterator + operator++(int) _GLIBCXX_NOEXCEPT + { return __normal_iterator(_M_current++); } + + // Bidirectional iterator requirements + _GLIBCXX20_CONSTEXPR + __normal_iterator& + operator--() _GLIBCXX_NOEXCEPT + { + --_M_current; + return *this; + } + + _GLIBCXX20_CONSTEXPR + __normal_iterator + operator--(int) _GLIBCXX_NOEXCEPT + { return __normal_iterator(_M_current--); } + + // Random access iterator requirements + _GLIBCXX20_CONSTEXPR + reference + operator[](difference_type __n) const _GLIBCXX_NOEXCEPT + { return _M_current[__n]; } + + _GLIBCXX20_CONSTEXPR + __normal_iterator& + operator+=(difference_type __n) _GLIBCXX_NOEXCEPT + { _M_current += __n; return *this; } + + _GLIBCXX20_CONSTEXPR + __normal_iterator + operator+(difference_type __n) const _GLIBCXX_NOEXCEPT + { return __normal_iterator(_M_current + __n); } + + _GLIBCXX20_CONSTEXPR + __normal_iterator& + operator-=(difference_type __n) _GLIBCXX_NOEXCEPT + { _M_current -= __n; return *this; } + + _GLIBCXX20_CONSTEXPR + __normal_iterator + operator-(difference_type __n) const _GLIBCXX_NOEXCEPT + { return __normal_iterator(_M_current - __n); } + + _GLIBCXX20_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 + +#if __cpp_lib_three_way_comparison + template + requires requires (_IteratorL __lhs, _IteratorR __rhs) + { { __lhs == __rhs } -> std::convertible_to; } + constexpr bool + operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + noexcept(noexcept(__lhs.base() == __rhs.base())) + { return __lhs.base() == __rhs.base(); } + + template + 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()); } +#else + // Forward iterator requirements + template + _GLIBCXX20_CONSTEXPR + inline bool + operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() == __rhs.base(); } + + template + _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 + _GLIBCXX20_CONSTEXPR + inline bool + operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() != __rhs.base(); } + + template + _GLIBCXX20_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 + inline bool + operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() < __rhs.base(); } + + template + _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 + inline bool + operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() > __rhs.base(); } + + template + _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 + inline bool + operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() <= __rhs.base(); } + + template + _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 + inline bool + operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, + const __normal_iterator<_IteratorR, _Container>& __rhs) + _GLIBCXX_NOEXCEPT + { return __lhs.base() >= __rhs.base(); } + + template + _GLIBCXX20_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. + _GLIBCXX20_CONSTEXPR + inline 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 + _GLIBCXX20_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 + _GLIBCXX20_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 + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template + _GLIBCXX20_CONSTEXPR + _Iterator + __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it) + _GLIBCXX_NOEXCEPT_IF(std::is_nothrow_copy_constructible<_Iterator>::value) + { return __it.base(); } + +#if __cplusplus >= 201103L + /** + * @addtogroup iterators + * @{ + */ + +#if __cplusplus > 201703L && __cpp_lib_concepts + 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; + } + + constexpr _Sent + base() const + noexcept(is_nothrow_copy_constructible_v<_Sent>) + { return _M_last; } + + private: + _Sent _M_last; + }; +#endif // C++20 + + // 24.4.3 Move iterators + /** + * 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 + { + _Iterator _M_current; + + using __traits_type = iterator_traits<_Iterator>; +#if __cplusplus > 201703L && __cpp_lib_concepts + using __base_cat = typename __traits_type::iterator_category; +#else + using __base_ref = typename __traits_type::reference; +#endif + + public: + using iterator_type = _Iterator; + +#if __cplusplus > 201703L && __cpp_lib_concepts + using iterator_concept = input_iterator_tag; + using iterator_category + = __detail::__clamp_iter_cat<__base_cat, random_access_iterator_tag>; + 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 + typedef typename conditional::value, + typename remove_reference<__base_ref>::type&&, + __base_ref>::type reference; +#endif + + _GLIBCXX17_CONSTEXPR + move_iterator() + : _M_current() { } + + explicit _GLIBCXX17_CONSTEXPR + move_iterator(iterator_type __i) + : _M_current(std::move(__i)) { } + + template + _GLIBCXX17_CONSTEXPR + move_iterator(const move_iterator<_Iter>& __i) + : _M_current(__i.base()) { } + +#if __cplusplus <= 201703L + _GLIBCXX17_CONSTEXPR iterator_type + base() const + { return _M_current; } +#else + constexpr iterator_type + base() const & +#if __cpp_lib_concepts + requires copy_constructible +#endif + { return _M_current; } + + constexpr iterator_type + base() && + { return std::move(_M_current); } +#endif + + _GLIBCXX17_CONSTEXPR reference + operator*() const +#if __cplusplus > 201703L && __cpp_lib_concepts + { return ranges::iter_move(_M_current); } +#else + { return static_cast(*_M_current); } +#endif + + _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; + } + +#if __cpp_lib_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; + } + + _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; + } + + _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; + } + + _GLIBCXX17_CONSTEXPR reference + operator[](difference_type __n) const +#if __cplusplus > 201703L && __cpp_lib_concepts + { return ranges::iter_move(_M_current + __n); } +#else + { return std::move(_M_current[__n]); } +#endif + +#if __cplusplus > 201703L && __cpp_lib_concepts + template _Sent> + friend constexpr bool + operator==(const move_iterator& __x, const move_sentinel<_Sent>& __y) + { return __x.base() == __y.base(); } + + template _Sent> + friend constexpr iter_difference_t<_Iterator> + operator-(const move_sentinel<_Sent>& __x, const move_iterator& __y) + { return __x.base() - __y.base(); } + + template _Sent> + friend constexpr iter_difference_t<_Iterator> + operator-(const move_iterator& __x, const move_sentinel<_Sent>& __y) + { return __x.base() - __y.base(); } + + 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 + inline _GLIBCXX17_CONSTEXPR bool + operator==(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#if __cplusplus > 201703L && __cpp_lib_concepts + requires requires { { __x.base() == __y.base() } -> convertible_to; } +#endif + { return __x.base() == __y.base(); } + +#if __cpp_lib_three_way_comparison + template _IteratorR> + 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 + inline _GLIBCXX17_CONSTEXPR bool + operator!=(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) + { return !(__x == __y); } +#endif + + template + inline _GLIBCXX17_CONSTEXPR bool + operator<(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#if __cplusplus > 201703L && __cpp_lib_concepts + requires requires { { __x.base() < __y.base() } -> convertible_to; } +#endif + { return __x.base() < __y.base(); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator<=(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#if __cplusplus > 201703L && __cpp_lib_concepts + requires requires { { __y.base() < __x.base() } -> convertible_to; } +#endif + { return !(__y < __x); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator>(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#if __cplusplus > 201703L && __cpp_lib_concepts + requires requires { { __y.base() < __x.base() } -> convertible_to; } +#endif + { return __y < __x; } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator>=(const move_iterator<_IteratorL>& __x, + const move_iterator<_IteratorR>& __y) +#if __cplusplus > 201703L && __cpp_lib_concepts + requires requires { { __x.base() < __y.base() } -> convertible_to; } +#endif + { return !(__x < __y); } + +#if ! (__cplusplus > 201703L && __cpp_lib_concepts) + // Note: See __normal_iterator operators note from Gaby to understand + // why we have these extra overloads for some move_iterator operators. + + // These extra overloads are not needed in C++20, because the ones above + // are constrained with a requires-clause and so overload resolution will + // prefer them to greedy unconstrained function templates. + + template + inline _GLIBCXX17_CONSTEXPR bool + operator==(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return __x.base() == __y.base(); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator!=(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return !(__x == __y); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator<(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return __x.base() < __y.base(); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator<=(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return !(__y < __x); } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator>(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return __y < __x; } + + template + inline _GLIBCXX17_CONSTEXPR bool + operator>=(const move_iterator<_Iterator>& __x, + const move_iterator<_Iterator>& __y) + { return !(__x < __y); } +#endif // ! C++20 + + // DR 685. + template + 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 + inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator> + operator+(typename move_iterator<_Iterator>::difference_type __n, + const move_iterator<_Iterator>& __x) + { return __x + __n; } + + template + 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>>::type> + inline _GLIBCXX17_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*>>::type> + inline _GLIBCXX17_CONSTEXPR _ReturnType + __make_move_if_noexcept_iterator(_Tp* __i) + { return _ReturnType(__i); } + +#if __cplusplus > 201703L && __cpp_lib_concepts + // [iterators.common] Common iterators + + 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>>); + + } // namespace __detail + + /// 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 _Proxy + { + iter_value_t<_It> _M_keep; + + _Proxy(iter_reference_t<_It>&& __x) + : _M_keep(std::move(__x)) { } + + friend class common_iterator; + + public: + const iter_value_t<_It>* + operator->() const + { return std::__addressof(_M_keep); } + }; + + public: + constexpr + common_iterator() + noexcept(is_nothrow_default_constructible_v<_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) + { + if (_M_index == 0) + { + if constexpr (is_trivially_default_constructible_v<_It>) + _M_it = std::move(__x._M_it); + else + ::new((void*)std::__addressof(_M_it)) _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 + ::new((void*)std::__addressof(_M_sent)) _Sent(__x._M_sent); + } + } + + constexpr + common_iterator(const common_iterator& __x) + noexcept(_S_noexcept()) + : _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 + ::new((void*)std::__addressof(_M_it)) _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 + ::new((void*)std::__addressof(_M_sent)) _Sent(__x._M_sent); + } + } + + 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>) + { + return this->operator=<_It, _Sent>(__x); + } + + template + requires convertible_to + && convertible_to + && assignable_from<_It&, const _It2&> + && assignable_from<_Sent&, const _Sent2&> + 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&>) + { + switch(_M_index << 2 | __x._M_index) + { + case 0b0000: + _M_it = __x._M_it; + break; + case 0b0101: + _M_sent = __x._M_sent; + break; + case 0b0001: + _M_it.~_It(); + _M_index = -1; + [[fallthrough]]; + case 0b1001: + ::new((void*)std::__addressof(_M_sent)) _Sent(__x._M_sent); + _M_index = 1; + break; + case 0b0100: + _M_sent.~_Sent(); + _M_index = -1; + [[fallthrough]]; + case 0b1000: + ::new((void*)std::__addressof(_M_it)) _It(__x._M_it); + _M_index = 0; + break; + default: + __glibcxx_assert(__x._M_has_value()); + __builtin_unreachable(); + } + return *this; + } + + ~common_iterator() + { + switch (_M_index) + { + case 0: + _M_it.~_It(); + break; + case 1: + _M_sent.~_Sent(); + break; + } + } + + decltype(auto) + operator*() + { + __glibcxx_assert(_M_index == 0); + return *_M_it; + } + + decltype(auto) + operator*() const requires __detail::__dereferenceable + { + __glibcxx_assert(_M_index == 0); + return *_M_it; + } + + decltype(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 _Proxy{*_M_it}; + } + + common_iterator& + operator++() + { + __glibcxx_assert(_M_index == 0); + ++_M_it; + return *this; + } + + decltype(auto) + operator++(int) + { + __glibcxx_assert(_M_index == 0); + if constexpr (forward_iterator<_It>) + { + common_iterator __tmp = *this; + ++*this; + return __tmp; + } + else + return _M_it++; + } + + template _Sent2> + requires sentinel_for<_Sent, _It2> + friend bool + operator==(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 bool + operator==(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 iter_difference_t<_It2> + operator-(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(); + } + } + + friend 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 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> + friend class common_iterator; + + bool _M_has_value() const noexcept { return _M_index < 2; } + + union + { + _It _M_it; + _Sent _M_sent; + unsigned char _M_valueless; + }; + unsigned char _M_index; // 0==_M_it, 1==_M_sent, 2==valueless + }; + + 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->()); + }; + + public: + using iterator_concept = conditional_t, + forward_iterator_tag, input_iterator_tag>; + using iterator_category = __detail::__clamp_iter_cat< + typename iterator_traits<_It>::iterator_category, + forward_iterator_tag, input_iterator_tag>; + 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 + + /// An iterator adaptor that keeps track of the distance to the end. + template + class counted_iterator + { + public: + using iterator_type = _It; + + constexpr counted_iterator() = 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; + } + + constexpr _It + base() const & + noexcept(is_nothrow_copy_constructible_v<_It>) + requires copy_constructible<_It> + { return _M_current; } + + constexpr _It + base() && + noexcept(is_nothrow_move_constructible_v<_It>) + { return std::move(_M_current); } + + constexpr iter_difference_t<_It> + count() const noexcept { return _M_length; } + + constexpr decltype(auto) + operator*() + noexcept(noexcept(*_M_current)) + { return *_M_current; } + + constexpr decltype(auto) + operator*() const + noexcept(noexcept(*_M_current)) + requires __detail::__dereferenceable + { return *_M_current; } + + constexpr counted_iterator& + operator++() + { + __glibcxx_assert(_M_length > 0); + ++_M_current; + --_M_length; + return *this; + } + + 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; + } + + constexpr counted_iterator + operator+(iter_difference_t<_It> __n) const + requires random_access_iterator<_It> + { return counted_iterator(_M_current + __n, _M_length - __n); } + + 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; + } + + 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> + friend constexpr iter_difference_t<_It2> + operator-(const counted_iterator& __x, + const counted_iterator<_It2>& __y) + { return __y._M_length - __x._M_length; } + + friend constexpr iter_difference_t<_It> + operator-(const counted_iterator& __x, default_sentinel_t) + { return -__x._M_length; } + + 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; + } + + 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> + friend constexpr bool + operator==(const counted_iterator& __x, + const counted_iterator<_It2>& __y) + { return __x._M_length == __y._M_length; } + + friend constexpr bool + operator==(const counted_iterator& __x, default_sentinel_t) + { return __x._M_length == 0; } + + template _It2> + friend constexpr strong_ordering + operator<=>(const counted_iterator& __x, + const counted_iterator<_It2>& __y) + { return __y._M_length <=> __x._M_length; } + + 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> + { 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))) + { 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 + struct incrementable_traits> + { + using difference_type = iter_difference_t<_It>; + }; + + template + struct iterator_traits> : iterator_traits<_It> + { + using pointer = void; + }; +#endif // C++20 + + // @} group iterators + + template + auto + __niter_base(move_iterator<_Iterator> __it) + -> decltype(make_move_iterator(__niter_base(__it.base()))) + { return make_move_iterator(__niter_base(__it.base())); } + + template + struct __is_move_iterator > + { + enum { __value = 1 }; + typedef __true_type __type; + }; + + template + auto + __miter_base(move_iterator<_Iterator> __it) + -> decltype(__miter_base(__it.base())) + { return __miter_base(__it.base()); } + +#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 + +#if __cpp_deduction_guides >= 201606 + // These helper traits are used for deduction guides + // of associative containers. + template + using __iter_key_t = remove_const_t< + typename iterator_traits<_InputIterator>::value_type::first_type>; + + template + using __iter_val_t = + typename iterator_traits<_InputIterator>::value_type::second_type; + + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6a7150a23c81150ac9022b15b9e81c4daf2d2214 GIT binary patch literal 80019 zcmeFad3+Q_^9Q_V2r=9Nxm^Op1js>v5JQNOBXWrtP`M;*k_}l%vT=7q0&)n*eTWE% z2Z9QCfCz$IA}E5W;Ee|=o`?q?j|YOvI`6k?re|k&XOrOL^ZwpHUj1~o=;`UHuCA`G zuCA``Wca(;Yv&G{j7CFpg~y%jEGsCfD0CzjbncwoH6=OU>GdRgyd`-~ufuKky4*>{ zhU8*bsUz85=t`d8^d@^e<;h-$$IE~6%I$8C!<|%6UT!cKl-SEA)V6eDrOQ3ZSvDcD z(CKy*;6qb-hknQ4i!ugaS(Toam)1S8#93BRl{lfSLdLh$?kz5`my~!CiybB94tHWv zMOlH@=_>O8`@b*#`SrnCRN|dd?(ih%3>?y5_a%isqGo%EOviwV3#g8Ow@X~WOQms< z-Q&$GDskDp$xOGrvWn7tP!C8B$a6d&P*;gF-&y7@38+o zqSTTko++N>f+++D$1OT_a{5lylfi zle`55I>goQ;1U-}3RgvbN#OVrBSQZzc}U}P6$RcrPeHMxkmMCUttS<QXF;CRf&QkrcqpgHwK)x*abSqKHI%N*i;dE_f`t)Rm)0+~}h28_uKtdO}+@*Ptnt6plT(@1-5I;FDuQZ<~7e}7{{Hb74K(fN^ z4UdgH(!xLI{w{S*)}Jf2goU=1M~qQjcWcX2uhK*u&~yx&ywGLKV&lWik<7Y7rASl?x)sbCjl$f!*!Fyz440r9Oqm`1gvn zL0V6B{ZL6gsNV(jRc>8~uBYJTsPZN=`j`SB7mH-2D@0CfiKg&)7!g_>qIr2CT4V?n z0=kb#G2qUEKm{=53tHp=%j^`;rD8VJG&=~6jgFHAv_Y&SihW3 zu9cwR@@_{_rCZiej~E_Q`s&EWg6YYNa@IXN>6@#=b07^JH~6ugp~zMl}zixn>;IW)u~GAfWy~z(#-B zq$PMTg+WM7Z)pnHK?Y2+R>3#jLvph;BArM9Z z(tpjbB2CKZRrlNF*2q!IBt1Us9$Fd6KWO zv|_r*!^*v2Qgx-39<4P!c^;t(Rl3xcgY9lMaD;HMeh0|?26iI@1k3PpM?t`Mg&tOm z_nlOM+jD6(DBpHhf)|*CYKz5}mF`ijGCCxz3^i+tcf(*EZlxKfI2&FI2*KKNcK}Pt zCJC66_4PGvS>jnRl}r>}hJuhPNGyjI>R{;;j#?~7T(TU&z@deoZgtv^S3k7aq%A8r zR8zIOO~9O|CnL3=Rc5r>8&$L~bJvGg#+9N)&JqXIPDpJX_R&`7Q5Ae$YU%SwQF&sC zYeGJ~5z-y{ZzxP(TH$q6>At4mB(DlVpz0RVY&X=cMgQaSn9s{ADtCF(x(9JIcZRyU z#%frok17VV7F<*Hsjgy6_@ZrCscEbuK{Ii{h66r;Z34U@c0;K4(Qgi`VWr939Vol> zZKiflkZw+N3dg!mSE;?s2?WATD~h<+Gw4)DY6x=|EMK}^BvXq?R7>8Wt%RZy`vm=W z1T%}J8TM!jgOzF_9F?*}M`u})D}1||+_KDpF|{x+*a9EIG~ffbopy6-XE@O5PDp61 zmUT&19jO&rqEBo67kTwimME+~I%8PSRNi?c?!L68H}8ieItv|TUZ;18Zkx29U=>6i zZaTf9-wv#cCzb~8Nrm(a$ym$;WL(ni87&&h+)%{6AG$+_IGT#Ec}a_MJyO<6n}RuyWeg!4)8hL;iRUOQblR)kWG{y^u>;DaJ3>xn9TYef+#ABx@)qF*XaDB$6wgOYeI zkI?W1SQcQ%#tS*4uaJarwWqwq=?%}+A=K808`fCEh-Pi4`1OK3d54L3LZw}hKrP_G zq4QiZ-sld1Fj%s+CsF=aARq}L zuc1l!3d#Kd>Vs^A55KX(y(lZ1wCPw)e{e}<4T+tW0!OuaxNKb2U>elBT${|r>i(<# zN?N~5RbP+*`ihT)yhA=D;dczRJX+ww&eUY?ws4$@@hgw18k#2?XbR-%BwS@o2z7|o z-u|n_nJor-hQF}%;IHyPz`mE#4S}p${i_A#6^WQCb%`$|s_sJ}z<6mMo_>?I#fQ~h*LWzJgOC5Cj_USkw@D_v?LXa0Qz7!b|CAF6I)nQ z9d3B#cxq1p;(@g80d23o3+3Kd)=(ikSz+JRHcD2>F%4qhv@FbiwCM0)$t6CZtq%h$ z&o1xkhtNmA-&HY?SO!y@tFm_O*M4&XwgTW$P-L$tsdms8(5J%po3{d++TkBFliph4 zqWM@}tmra`X?_fz=ODl{b9Tm?R{W(f5L%7zgQ>ar>VwmA7NY0iP zvUa=NI#k!vK)5`k(g`cm0j)H#xI1oq-b%5wo#+OiL0aSwmfzg ztdSQ;$Oi6V@X!f(FK|MD;3Nkf^QJ;KX<Lyb8mm{H+KW0E$4d1?v_5s^l_{1``WB+Ko^FjIyOeL)SdEGQcAY4J$ETjdG3z~!3c#0Hp4Rpi3W z#`?9;)%i z`wf1-!*5oE!8bdyt?z+I;Dz6Z@Vg^2+qVb5`y!)nlMerzsD=&&A$tM43XQ66wCJ zbEjJB9av@db;yo38}OghH7$8{*DP%iDd^~^yv>e0CrJ=vVO7SXF$=}W%)WPWMgzt5V=)#0g0NgpE zoWC8Nd;7$vD>FY7-(Jz@m%cxrXfjawwx5YzIMze1W{L4kTqd2`&3>$gWZB~K@~XPX zT@bERE|;1T$nJPe;bvPRFrOk=+t56=vC-ECNVkb-$qi@?*cLI=&@b1Pmfj=DU@%E> zT?a+@?p!ZPTW>5obA0;7_9m2wMd}p5*2u_2>KBly^m&J)&+jt4ch6y^>G>{KiOhJS z=~>k`y;dz(8ZNh~0ou_(X;Xc`jUrOfDJCiP{K3(qqV7E@H9N5D+`0MtUlYC4BlV9A z(;MS5!lIbj`(MQ|#^|dHyy`}@X1YfLzAPf0ah!N(-R50vIVLHkLs{(HtJc*QIG!G5 zieL8G(|y9@_^+Y})-VGtvqDA_U@KUI$k_0Q$i^dQZ$BaJYnGiebwbnaCOnEo3gQVX zc*3gB6Kl8i{Cv=R7e5Qzn0EgJTLps=Y^t3yN zY(FIk{_f6hvDt+ueh!Oc4SaiPLssV8Q$XyLRUVBW1OCD)bMBD0u3yk|&x!F;znfia z&sr?&1(Ju}d3o60o30%b7Rk)&x#FK7c?^ghQ;>WW@S9edFS-wCI`)QPqaTn4ns!aM z|MA8d6CTAP1@Xn3)=XsT%8DL6ejbs3Zus=D&FNhOUtDr~Fcf#74LcOhcpC5?>oDew zZzu2Dld*8ePtv*gSMSZgdhI(VJc>mMYR?{P7BX}6WMAh6o38u1UW0qX&NXrJWTRDH zGBSi>17Fq?qkuCc~GS0S!FF{t~JfK$XXvQF-r4R?63F2 zx_iqF5mx-$Abk?`>Z3Qb|Dq%;T6&)qSaq&7Qu1VFNF5DfQVG;5p%;<@H5sT?S@RjS z2hJRMzDv1nzd-H1I+;(r^|I^HupCg6DE=oLa00!4Lg9dS0H3tV!npqK=aar_8hb%% zx2Nd~zHi!(7sIaU^G83uwKT6|SOQkxuZi(WhZTb=#Y%@w098u3!wiBL$KSqk+}Eq> zn8Oky>whpD&VT@C6k>b@_^d*Ve)Bhpb!6$%2d~eJ>?+9kT(1GQ zM)k>jJZx|2VXm@!=Xj{j3E*OUaWuX-TKVEAd@)ZMU`vPhSo><__XounudJ%mKVf6H z8^V6ETK?$VS@6ejd~dk&yP? zdR!hdYQ{tb)ZlQXXwi4;Gf#ad1^)+q`^=-+|PL zU3q^+Ss58{slr)s?Q%OW@Bajc1Vc<)^v%nbNF;flI|}$!OB#r1l-j&@{l+in-x_H| zP6wne(p{~Kx13t-JFQuJ@9SxrWxu#_vm#W{tlE-LZL%sG;>n;;W-oQnBwVX%GBR|g zZ?UYaZ6&l8bSBtDcN)e|#$ehDLhQB3y5k^8g@|891R^wK#k+DR`zxX$&&wST{ALUZDfk^*`X8U2uk1Y|0U@fQ}{yz0kZ$9rlu z3Z3p%^@{)Z``6GsiKcdR)l!QrpO*k$ZlS5&Bz5kempZ@RBl(i`%!{8-IeP6l6CTAO z1(9I6B?p;9^+=G_IU}OQlY4S&B7riKR6~IfMy(x#hrAZR-)KLn%V=|@!nTtEPX*gj z```aLZfT>uMjuJfH=MX~(O1j*neZqMDX9HZ!2(nDS>S+e#p5quo|N_9xBq`M!et7$ z&}x@Lfil2ug#!0hzBA+0%2_L<)V+U<+`Y4VrU{SYkb)@S1_j*u6nKC0qc&%|b2ryO z0kL%czu|ylw7FPm{{+C3l=fffIqF#w2y!c=3m?BA4y|xuVv%KsT)wPrz>D$Ar81 z0=|C1EU!e)1HNdkZ|LKcL%%^|w3n#59rVasD-aT{6vsKRQK%w2Bg!!Dg+DGoTWe%% zhbwFdWVZ05o4X8z`voZeqM-XT;9t!Fge!gK(@&l)Jv&<~6?y$BxdDD<5|t#1MUh|bmY+~ChYx&O@}PrcV`ps7U4jZxn%=8sH=_{qfP6Iw;COfV=)Ot63 z^4;89=ET(0VZx{yf~bE^`QP;znlS^tG((y8rvsj)O#8ihHnXk&@_{O8*1YIWrCpA` zV#1?1q@eDYg=v45{*A*b$6_yy*p4tMo zSu_Koo$n)aDpCggQH;L6;Gn*iBn8d^Jd|NYp;TbjBNHkpg}`T_g3m(WvrxfD zF&A(d#Y({N8kAq7lwX7LYn1YvEM0t?EZyPjvB@$BDHo7pb>a6EV++GOQO8cDj-8N+ zJ1s*vU$M6_tXL)qmX4gb?)s63AAG}6g`;Q%PA{y8)eXyPJah7>91K9UO=W7W%kqvu zPznE{K*&?Su~fB83)?b1BHe*4%?XB#A`GdCz-pp0q?~|VJpCG_*Kb|BZRFs{PsBhU zam%)%6+ca?uNCV7T8p}6=yp)#J$*khd|Y*}siEAI1nkyBSgkQeBFRRodjQ{Oq)}#) z7Ibge=*UC!qoiS*5|=)BpC@1FE(d%4y1aMs=u=^}C%qj7A!HL}RaoALa$)PhrR>y{ zVduoFY(%Ahmi=Yi<8iA5Z4ASA7B~B?amTQY^PW_PLB9s|Jj#+#`z+76G!^~>W2>7yaS8e*d2 zy5;^G9?zKp9{&=qnqQjaY2ypPUz_9|`>OQVzvFgIxKZ@u4NdCQJ3Fe#_wNb_{XL5= zHvd4)!|n!lgYuk3newJlULHc(<$18>AuB`L!kSU7bPo28#F!3{P?Sv{QTF8gbEzQ{ zqUn8eL!?v|O$2{r9$>fzG1)5pGbwEIfwpq`rxI3^di#ef?oBCv@tJ3gVy+9Y1S_KL zREm_i?)+aJ!VV6hx(BnMUk~I4T+-M;r_aN9m}iuCYUTo7U>wSFBRXzRoq01;ewCK* zoA&C+_upJ+!lPKEPSTlrPjvg`i!QOWkA;j(q<#UJihW;{3o~-W&VuYX5~h$=uP_X% ziZnhS{XDA@2h(0iHQ2Ick5HQ}yTB$NUGRbluu;-c)NVr*J=yKFf}%*2OrhNr3X4u7 zQRe8z``Ye{)Z>_^r)%~r7En2jFf0%-6`0r#Xju+%>9$YHelQ?HsC!_C5QzVis^x^==o5oka zQ3)^I)Ks|X!kb&?8&S4vDYhhWg-sm8Wl!*6WH2U;QrV*|zBqH`#SNmFXI+n_-PU$X zov>XZd>?~r^Gn8m(j(xrJ?Mo!ifr5sc%M=BfGqnsZ%*8{$i_ zk9r`c&X#nPD?C47rVKORr~*!LcMPsW*JT20gkp5k)i@e+wNdV*EMuClud%*nhT{H-in3h? z|4KUg;IL^XBz3mJ`3PF3d#Jat#KORJ;HrQq+lVmbdH+7&f%6cG84WH2I5lSz%Pk&J zW9`@0@7in7yF!60&%WZp%cYyX*7mwanG-aq&4$ze)b^AO*`BS~o~{Pm7q+Jw>=-6# za-yYc#h_(BNpIcX`p=m|-+0_4%nAYW9+_-k2*^|zsC~nWd!M;x$-}{&?-wXFGZ6dD z5nKEa{R6Ya_h~u;`jxGGUia~no)AeHqcX;6XFbpiLmth`@zV(|e z4Ot~I#t)-EWF$|feWgY68gW)f_@D5S*oIR(KtC~2(YV0WEOV4i1?60iwuB853Cfr7 zzvM_OBqV7k~Rkb!=Hvx62Es;2QL$n!Ktpq?7%l2V`3h9QmUy(C(0JX~ukwY`X@t zP@pvf)B=}qkAojv8vPsxe`MLlY@;s)YbDhj3tnpb)si`P3Faxk-}}n#AI|wW7?n#I zwZb}7Z5;`=-r#1ASpmV{*tjiaTOT6Kw&-mOXl@k<^~%mqxcJRWFH~DuO&vz=**v>M zpa&w9*~N+;hzgipG~#4n*`g(SK3yf$g&~#Un(>1X*nIjU2QS3tJOJMW7U= z^OE*5zpVjYe^4EwZ0dh{N(8O>y3mk=F~BYlLOP*gbLF#~DYWHJ(bPb!Q-xBcaL@JF z&{8LaSP>lkxCR>{K-lsfI9XZh!p?~ki)oiz^L8PHzI07NJSwF%9()oZ*fVU!UT=9u za`J?Nf+VaTlU(iz$-{DcbWKm~Mxwuc=WNd-%?f@IgJnje!i<{>KT7hSM#PmMq!wNB zk=lUwAnN_+XXWFwt8ip?m2!M`CE$A^b1`O((zBV5^*HtJtrLvM$wJaSL{l*A<7-Fk zd#FNBch^oxih`+EEPxvg{iZ^?E`v(HOtHKz1$<{X^hP_t!Tw)cs_K3z4)A2?pd6iS4>(Raf%@yZ!W|tKwx}az&mHvPTM;eZ6vB4* z^3CQir#*b7x)T&u>ITmFnu#`?njzLX;;>j%f}wGCnsHO~CO)>jF?v%K>0begR;9C~ zgjcRmt5`vHm9t)jgWi0rAqh>^HnPiYRXF^OOF3vbe^Y4r^0!Z3@2qN14eB=8dtd9q z@Fe4A20Zo;Rk$zdJ=WVxmXE*PhE0*%luePT*c6$mY>L#Ik

    |i*ZIF_m)Rzb?Vsb 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

    -v`z z>T=Ubl@nxdGw2whoCdhUOKwDoCgG(t~s~~d| z4fS7PsQ=0s>bgj?(@|WOG4^5t(mP2m2N6${nF&4pQc3MF}v=!1E#wr+C zuVsa8&PQUcVXV9OEH(2jPh2iFs>rnOXWL|=Q@5pV8yfGf9$P&v-o2~Mt}gNJ+PK>I zc=u~vUSoslSdU}q)6+dp^Z7;G7xA6k-^YE=XDHx~<4~wQsJ);>7WIj$@-6;l4@VnN zD(6z=++fZPR_E-#9x96iH<>FC5T#MVu2u<7PQ`8A@S~62F(hh5Lmj3pP?e=DD>uMa%v7Nx!PLQ!} zbyvE|Yiw+#YIapd;_4si)=E})TynblN4b+jqueU#WnN$3fb!g`FJfwtsB=grb4aF{ zLo!hzV227Bf(jWTD#WT*a?MQahzjXwREREQ;#46wph9jC6=Id`YQhZMni;sYnSom~ z1A`qia9i?P+Dcx_@y9xS_wRXs`Hz^~i@JOrOnB8`6J9kKg96-ud+Bg*DDTUvpxH!) z^&)Ph7mXX~MYfK?5ekb8S_WCIY#m#b+pfwpaqielj%32(ll?m8DH+8IuIHD;wcSh{ z%+3C8+`ZLFB5Xyg{UR}XthqYmiCg5CxJ7SQPgN z+#4f|dt(Ih0d7Dr9fC?ey7$hU`((nD`W9G9k;Yo+yWGbTjeY2We>%;! znf7Ub`u^odmXDhdlVwp=!|kYs+l^|tomUTTz_N5$re3|(CN?I;Xu>@f;T~&*do1q= z>>xOvcQjt!(aU{?-*l`ZDYfYYr<0%{9Ia*Rt`?GNYOkg964*iRCEqOa`OA2|!?Ow| z^ndFgy_!xgY%JZ$Sh~}Ur8{9L*gDM@lS73jxF!rZz2;#Iq zD-q60u|MBEeQL{??&qe(e5R-aYZ4rsWM0}NTqIz}LrvkOO_7&o^~N$3N0?N66?r(_ z)vcSnmE-Ku9{1{Os^fSt!1j7u%lQfX6(_tZ&}hbAK26zq{*6_Qt@Fs&B za5D{VX7Th^+vS)Pqm8*@26(aYa250Vzz%{ld3`hG^;un=V-k!iFeL~~i4m9*D1sdn z%b-{$6fbt&+`stH^Up`67*=&67_@5>4N8)C84Ox+mU{0Y{EvrN!HVhWCgGhz7REW( zGlFSS#}S2WtPgg(`Cr8KJ?|jgZ8}@%9o$6V`lk^KP5%x(m0LUAVnw7j7?mWMBu0eJp|Y zNt}n(wma%8kqI(_gKCT`$EtDsEM+=gYNq3*sCsZc+hn?2h7c?hAsF0l?_&%9H#jgR z#Rde!bni+A)=D$5R-${s4uY%Dy{km`T0O>_PB6@Myb&?qXvBOYPY8Ap+{6=Zk|*3) z*Y3lUE$((VonY7#KEe||VxI63o)FxCU^)cVbZs^4G$jj4t&#;Z+(|U;ltsB|;MuRv z>IJG-yE9qs&Xm=z)ptGSO-I!R+hNmo!=~+M18~G$tGL-jj$TaCH88A37-n^Nk4d|M zNQAwi=TLpm8P)e3q`?uSY10eAeM0cn{k!JgQ5HXQD zCa_%%Q2VWW5g*vgul&~iK>Y;W?2lu))RA*(*a>MWCzmQWc^s2L`JBs_b7T0sF@EL2 zo&cI4Xa;D8pfXUIpauSP!fBQFWeG9nOZ*9-2RQeDoU7zqrJP$wwU~AOY@YY%(XYN< z5}bES_)bUvPzoV6DIUT*LYbgUK~p?kLQ^~{Q*04|Ig30hKdb^&A!s#dwV?H&^@28m zHVJx~t2`}NIm}fK%T+$&+mGbiPeGpwx&*o;=v&aYg6cqZg4z(gtQh(euFMq?#yqPh}2J%{06J(UK5S&3Zls?Of}9e}HK62UIlq{{tMo Box1=4 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_funcs.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_funcs.h new file mode 100644 index 0000000..076b778 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_funcs.h @@ -0,0 +1,239 @@ +// Functions used by iterators -*- C++ -*- + +// Copyright (C) 2001-2020 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_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 + +#pragma GCC system_header + +#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 + 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 + + /** + * @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 + 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; + } + + /** + * @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 + 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 + 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 + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_funcs.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_funcs.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6c3aaf0d015934da9cb8352d52acacf1617b94c5 GIT binary patch literal 20652 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_types.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_types.h new file mode 100644 index 0000000..aa02af5 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_types.h @@ -0,0 +1,271 @@ +// Types used in iterator implementation -*- C++ -*- + +// Copyright (C) 2001-2020 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 + +#pragma GCC system_header + +#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 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 + 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 __iterator_category_t + = typename iterator_traits<_Iter>::iterator_category; + + template + using _RequireInputIter = + __enable_if_t, + input_iterator_tag>::value>; + + 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 + +#endif /* _STL_ITERATOR_BASE_TYPES_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_types.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_iterator_base_types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8532e0c02a6a4cb62a6fea07a12907492f6f39ac GIT binary patch literal 20066 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_pair.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_pair.h new file mode 100644 index 0000000..491c599 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_pair.h @@ -0,0 +1,586 @@ +// Pair implementation -*- C++ -*- + +// Copyright (C) 2001-2020 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,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 + +#include // for std::move / std::forward, and std::swap + +#if __cplusplus >= 201103L +# include // for std::__decay_and_strip, std::is_reference_v +#endif +#if __cplusplus > 201703L +# include +# define __cpp_lib_constexpr_utility 201811L +#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 + class tuple; + + template + struct _Index_tuple; + + // 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 + static constexpr bool _CopyMovePair() + { + using __do_converts = __and_, + is_convertible<_U2&&, _T2>>; + using __converts = typename conditional<__implicit, + __do_converts, + __not_<__do_converts>>::type; + return __and_, + is_constructible<_T2, _U2&&>, + __converts + >::value; + } + + template + static constexpr bool _MoveCopyPair() + { + using __do_converts = __and_, + is_convertible>; + using __converts = typename conditional<__implicit, + __do_converts, + __not_<__do_converts>>::type; + return __and_, + is_constructible<_T2, const _U2&&>, + __converts + >::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 // C++11 + + template class __pair_base + { +#if __cplusplus >= 201103L + 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. + * + * + */ + template + struct pair + : private __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 + + // _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. */ +#if __cplusplus >= 201103L + template , + __is_implicitly_default_constructible<_U2>> + ::value, bool>::type = true> +#endif + _GLIBCXX_CONSTEXPR pair() + : first(), second() { } + +#if __cplusplus >= 201103L + 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() { } +#endif + +#if __cplusplus < 201103L + /// Two objects may be passed to a @c pair constructor to be copied. + pair(const _T1& __a, const _T2& __b) + : first(__a), second(__b) { } +#else + // 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) { } +#endif + +#if __cplusplus < 201103L + /// There is also a templated constructor to convert from other pairs. + template + pair(const pair<_U1, _U2>& __p) + : first(__p.first), second(__p.second) { } +#else + // 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) { } + + 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) { } +#endif + +#if __cplusplus >= 201103L + constexpr pair(const pair&) = default; ///< Copy constructor + constexpr pair(pair&&) = default; ///< Move constructor + + // DR 811. + template(), + bool>::type=true> + constexpr pair(_U1&& __x, const _T2& __y) + : first(std::forward<_U1>(__x)), second(__y) { } + + template(), + bool>::type=false> + explicit constexpr pair(_U1&& __x, const _T2& __y) + : first(std::forward<_U1>(__x)), second(__y) { } + + template(), + bool>::type=true> + constexpr pair(const _T1& __x, _U2&& __y) + : first(__x), second(std::forward<_U2>(__y)) { } + + template(), + bool>::type=false> + explicit pair(const _T1& __x, _U2&& __y) + : first(__x), second(std::forward<_U2>(__y)) { } + + 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)) { } + + 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)) { } + + + 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)) { } + + 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)) { } + + template + _GLIBCXX20_CONSTEXPR + pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>); + + _GLIBCXX20_CONSTEXPR pair& + operator=(typename conditional< + __and_, + is_copy_assignable<_T2>>::value, + const pair&, const __nonesuch&>::type __p) + { + first = __p.first; + second = __p.second; + return *this; + } + + _GLIBCXX20_CONSTEXPR pair& + operator=(typename conditional< + __and_, + is_move_assignable<_T2>>::value, + pair&&, __nonesuch&&>::type __p) + noexcept(__and_, + is_nothrow_move_assignable<_T2>>::value) + { + first = std::forward(__p.first); + second = std::forward(__p.second); + return *this; + } + + template + _GLIBCXX20_CONSTEXPR + 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 + _GLIBCXX20_CONSTEXPR + 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; + } + + /// 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); + } + + private: + template + _GLIBCXX20_CONSTEXPR + pair(tuple<_Args1...>&, tuple<_Args2...>&, + _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>); +#endif // C++11 + }; + + /// @relates pair @{ + +#if __cpp_deduction_guides >= 201606 + template pair(_T1, _T2) -> pair<_T1, _T2>; +#endif + + /// Two pairs of the same type are equal iff their members are equal. + template + inline _GLIBCXX_CONSTEXPR bool + operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) + { return __x.first == __y.first && __x.second == __y.second; } + +#if __cpp_lib_three_way_comparison && __cpp_lib_concepts + template + constexpr common_comparison_category_t<__detail::__synth3way_t<_T1>, + __detail::__synth3way_t<_T2>> + operator<=>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) + { + if (auto __c = __detail::__synth3way(__x.first, __y.first); __c != 0) + return __c; + return __detail::__synth3way(__x.second, __y.second); + } +#else + /** 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 + 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 + 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 + 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 + 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 + 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 __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 + + /// @} + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif /* _STL_PAIR_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_pair.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_pair.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c2b811429924352235b71e387fda3a66d0d758df GIT binary patch literal 34867 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_raw_storage_iter.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_raw_storage_iter.h new file mode 100644 index 0000000..df7a5f9 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_raw_storage_iter.h @@ -0,0 +1,123 @@ +// -*- C++ -*- + +// Copyright (C) 2001-2020 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_raw_storage_iter.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _STL_RAW_STORAGE_ITERATOR_H +#define _STL_RAW_STORAGE_ITERATOR_H 1 + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * This iterator class lets algorithms store their results into + * uninitialized memory. + */ + template + class raw_storage_iterator + : public iterator + { + protected: + _OutputIterator _M_iter; + + public: + explicit + raw_storage_iterator(_OutputIterator __x) + : _M_iter(__x) {} + + raw_storage_iterator& + operator*() { return *this; } + + raw_storage_iterator& + operator=(const _Tp& __element) + { + std::_Construct(std::__addressof(*_M_iter), __element); + return *this; + } + +#if __cplusplus >= 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2127. Move-construction with raw_storage_iterator + raw_storage_iterator& + operator=(_Tp&& __element) + { + std::_Construct(std::__addressof(*_M_iter), std::move(__element)); + return *this; + } +#endif + + raw_storage_iterator& + operator++() + { + ++_M_iter; + return *this; + } + + raw_storage_iterator + operator++(int) + { + raw_storage_iterator __tmp = *this; + ++_M_iter; + return __tmp; + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2454. Add raw_storage_iterator::base() member + _OutputIterator base() const { return _M_iter; } + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_raw_storage_iter.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_raw_storage_iter.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a77fa47660a8ef7964d7f2f211ec681679287360 GIT binary patch literal 15430 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_relops.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_relops.h new file mode 100644 index 0000000..3b0afea --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_relops.h @@ -0,0 +1,133 @@ +// std::rel_ops implementation -*- C++ -*- + +// Copyright (C) 2001-2020 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, 2009 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,1997 + * Silicon Graphics + * + * 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_relops.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{utility} + * + * Inclusion of this file has been removed from + * all of the other STL headers for safety reasons, except std_utility.h. + * For more information, see the thread of about twenty messages starting + * with http://gcc.gnu.org/ml/libstdc++/2001-01/msg00223.html, or + * http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.ambiguous_overloads + * + * Short summary: the rel_ops operators should be avoided for the present. + */ + +#ifndef _STL_RELOPS_H +#define _STL_RELOPS_H 1 + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + namespace rel_ops + { + /** @namespace std::rel_ops + * @brief The generated relational operators are sequestered here. + */ + + /** + * @brief Defines @c != for arbitrary types, in terms of @c ==. + * @param __x A thing. + * @param __y Another thing. + * @return __x != __y + * + * This function uses @c == to determine its result. + */ + template + inline bool + operator!=(const _Tp& __x, const _Tp& __y) + { return !(__x == __y); } + + /** + * @brief Defines @c > for arbitrary types, in terms of @c <. + * @param __x A thing. + * @param __y Another thing. + * @return __x > __y + * + * This function uses @c < to determine its result. + */ + template + inline bool + operator>(const _Tp& __x, const _Tp& __y) + { return __y < __x; } + + /** + * @brief Defines @c <= for arbitrary types, in terms of @c <. + * @param __x A thing. + * @param __y Another thing. + * @return __x <= __y + * + * This function uses @c < to determine its result. + */ + template + inline bool + operator<=(const _Tp& __x, const _Tp& __y) + { return !(__y < __x); } + + /** + * @brief Defines @c >= for arbitrary types, in terms of @c <. + * @param __x A thing. + * @param __y Another thing. + * @return __x >= __y + * + * This function uses @c < to determine its result. + */ + template + inline bool + operator>=(const _Tp& __x, const _Tp& __y) + { return !(__x < __y); } + } // namespace rel_ops + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif /* _STL_RELOPS_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_relops.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_relops.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..52d10c0f6e892003686f64e7d65194efbb0d61da GIT binary patch literal 15492 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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_tempbuf.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _STL_TEMPBUF_H +#define _STL_TEMPBUF_H 1 + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + namespace __detail + { + template + inline void + __return_temporary_buffer(_Tp* __p, + size_t __len __attribute__((__unused__))) + { +#if __cpp_sized_deallocation + ::operator delete(__p, __len * sizeof(_Tp)); +#else + ::operator delete(__p); +#endif + } + } + + /** + * @brief Allocates a temporary buffer. + * @param __len The number of objects of type Tp. + * @return See full description. + * + * Reinventing the wheel, but this time with prettier spokes! + * + * This function tries to obtain storage for @c __len adjacent Tp + * objects. The objects themselves are not constructed, of course. + * A pair<> is returned containing the buffer s address and + * capacity (in the units of sizeof(_Tp)), or a pair of 0 values if + * no storage can be obtained. Note that the capacity obtained + * may be less than that requested if the memory is unavailable; + * you should compare len with the .second return value. + * + * Provides the nothrow exception guarantee. + */ + template + pair<_Tp*, ptrdiff_t> + get_temporary_buffer(ptrdiff_t __len) _GLIBCXX_NOEXCEPT + { + const ptrdiff_t __max = + __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); + if (__len > __max) + __len = __max; + + while (__len > 0) + { + _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp), + std::nothrow)); + if (__tmp != 0) + return std::pair<_Tp*, ptrdiff_t>(__tmp, __len); + __len /= 2; + } + return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0); + } + + /** + * @brief The companion to get_temporary_buffer(). + * @param __p A buffer previously allocated by get_temporary_buffer. + * @return None. + * + * Frees the memory pointed to by __p. + */ + template + inline void + return_temporary_buffer(_Tp* __p) + { ::operator delete(__p); } + + /** + * This class is used in two places: stl_algo.h and ext/memory, + * where it is wrapped as the temporary_buffer class. See + * temporary_buffer docs for more notes. + */ + template + class _Temporary_buffer + { + // concept requirements + __glibcxx_class_requires(_ForwardIterator, _ForwardIteratorConcept) + + public: + typedef _Tp value_type; + typedef value_type* pointer; + typedef pointer iterator; + typedef ptrdiff_t size_type; + + protected: + size_type _M_original_len; + size_type _M_len; + pointer _M_buffer; + + public: + /// As per Table mumble. + size_type + size() const + { return _M_len; } + + /// Returns the size requested by the constructor; may be >size(). + size_type + requested_size() const + { return _M_original_len; } + + /// As per Table mumble. + iterator + begin() + { return _M_buffer; } + + /// As per Table mumble. + iterator + end() + { return _M_buffer + _M_len; } + + /** + * Constructs a temporary buffer of a size somewhere between + * zero and the given length. + */ + _Temporary_buffer(_ForwardIterator __seed, size_type __original_len); + + ~_Temporary_buffer() + { + std::_Destroy(_M_buffer, _M_buffer + _M_len); + std::__detail::__return_temporary_buffer(_M_buffer, _M_len); + } + + private: + // Disable copy constructor and assignment operator. + _Temporary_buffer(const _Temporary_buffer&); + + void + operator=(const _Temporary_buffer&); + }; + + + template + struct __uninitialized_construct_buf_dispatch + { + template + static void + __ucr(_Pointer __first, _Pointer __last, + _ForwardIterator __seed) + { + if (__first == __last) + return; + + _Pointer __cur = __first; + __try + { + std::_Construct(std::__addressof(*__first), + _GLIBCXX_MOVE(*__seed)); + _Pointer __prev = __cur; + ++__cur; + for(; __cur != __last; ++__cur, ++__prev) + std::_Construct(std::__addressof(*__cur), + _GLIBCXX_MOVE(*__prev)); + *__seed = _GLIBCXX_MOVE(*__prev); + } + __catch(...) + { + std::_Destroy(__first, __cur); + __throw_exception_again; + } + } + }; + + template<> + struct __uninitialized_construct_buf_dispatch + { + template + static void + __ucr(_Pointer, _Pointer, _ForwardIterator) { } + }; + + // Constructs objects in the range [first, last). + // Note that while these new objects will take valid values, + // their exact value is not defined. In particular they may + // be 'moved from'. + // + // While *__seed may be altered during this algorithm, it will have + // the same value when the algorithm finishes, unless one of the + // constructions throws. + // + // Requirements: _Pointer::value_type(_Tp&&) is valid. + template + inline void + __uninitialized_construct_buf(_Pointer __first, _Pointer __last, + _ForwardIterator __seed) + { + typedef typename std::iterator_traits<_Pointer>::value_type + _ValueType; + + std::__uninitialized_construct_buf_dispatch< + __has_trivial_constructor(_ValueType)>:: + __ucr(__first, __last, __seed); + } + + template + _Temporary_buffer<_ForwardIterator, _Tp>:: + _Temporary_buffer(_ForwardIterator __seed, size_type __original_len) + : _M_original_len(__original_len), _M_len(0), _M_buffer(0) + { + std::pair __p( + std::get_temporary_buffer(_M_original_len)); + + if (__p.first) + { + __try + { + std::__uninitialized_construct_buf(__p.first, __p.first + __p.second, + __seed); + _M_buffer = __p.first; + _M_len = __p.second; + } + __catch(...) + { + std::__detail::__return_temporary_buffer(__p.first, __p.second); + __throw_exception_again; + } + } + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _STL_TEMPBUF_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_tempbuf.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_tempbuf.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f49b0a7f78b020873503c4f61c870f48cd923dcf GIT binary patch literal 22654 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_uninitialized.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_uninitialized.h new file mode 100644 index 0000000..3109a89 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_uninitialized.h @@ -0,0 +1,1041 @@ +// Raw memory manipulators -*- C++ -*- + +// Copyright (C) 2001-2020 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,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 > 201402L +#include +#endif + +#if __cplusplus >= 201103L +#include +#endif + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** @addtogroup memory + * @{ + */ + + /// @cond undocumented + + template + struct __uninitialized_copy + { + template + static _ForwardIterator + __uninit_copy(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result) + { + _ForwardIterator __cur = __result; + __try + { + for (; __first != __last; ++__first, (void)++__cur) + std::_Construct(std::__addressof(*__cur), *__first); + return __cur; + } + __catch(...) + { + std::_Destroy(__result, __cur); + __throw_exception_again; + } + } + }; + + template<> + struct __uninitialized_copy + { + template + static _ForwardIterator + __uninit_copy(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result) + { return std::copy(__first, __last, __result); } + }; + + /// @endcond + + /** + * @brief Copies 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) + * + * Like copy(), but does not require an initialized output range. + */ + template + inline _ForwardIterator + uninitialized_copy(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result) + { + typedef typename iterator_traits<_InputIterator>::value_type + _ValueType1; + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType2; +#if __cplusplus < 201103L + const bool __assignable = true; +#else + // Trivial types can have deleted copy constructor, but the std::copy + // optimization that uses memmove would happily "copy" them anyway. + static_assert(is_constructible<_ValueType2, decltype(*__first)>::value, + "result type must be constructible from value type of input range"); + + typedef typename iterator_traits<_InputIterator>::reference _RefType1; + typedef typename iterator_traits<_ForwardIterator>::reference _RefType2; + // Trivial types can have deleted assignment, so using std::copy + // would be ill-formed. Require assignability before using std::copy: + const bool __assignable = is_assignable<_RefType2, _RefType1>::value; +#endif + + return std::__uninitialized_copy<__is_trivial(_ValueType1) + && __is_trivial(_ValueType2) + && __assignable>:: + __uninit_copy(__first, __last, __result); + } + + /// @cond undocumented + + template + struct __uninitialized_fill + { + template + static void + __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x) + { + _ForwardIterator __cur = __first; + __try + { + for (; __cur != __last; ++__cur) + std::_Construct(std::__addressof(*__cur), __x); + } + __catch(...) + { + std::_Destroy(__first, __cur); + __throw_exception_again; + } + } + }; + + template<> + struct __uninitialized_fill + { + template + static void + __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x) + { std::fill(__first, __last, __x); } + }; + + /// @endcond + + /** + * @brief Copies the value x into the range [first,last). + * @param __first An input iterator. + * @param __last An input iterator. + * @param __x The source value. + * @return Nothing. + * + * Like fill(), but does not require an initialized output range. + */ + template + inline void + uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x) + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; +#if __cplusplus < 201103L + const bool __assignable = true; +#else + // Trivial types can have deleted copy constructor, but the std::fill + // optimization that uses memmove would happily "copy" them anyway. + static_assert(is_constructible<_ValueType, const _Tp&>::value, + "result type must be constructible from input type"); + + // Trivial types can have deleted assignment, so using std::fill + // would be ill-formed. Require assignability before using std::fill: + const bool __assignable = is_copy_assignable<_ValueType>::value; +#endif + + std::__uninitialized_fill<__is_trivial(_ValueType) && __assignable>:: + __uninit_fill(__first, __last, __x); + } + + /// @cond undocumented + + template + struct __uninitialized_fill_n + { + template + static _ForwardIterator + __uninit_fill_n(_ForwardIterator __first, _Size __n, + const _Tp& __x) + { + _ForwardIterator __cur = __first; + __try + { + for (; __n > 0; --__n, (void) ++__cur) + std::_Construct(std::__addressof(*__cur), __x); + return __cur; + } + __catch(...) + { + std::_Destroy(__first, __cur); + __throw_exception_again; + } + } + }; + + template<> + struct __uninitialized_fill_n + { + template + static _ForwardIterator + __uninit_fill_n(_ForwardIterator __first, _Size __n, + const _Tp& __x) + { return std::fill_n(__first, __n, __x); } + }; + + /// @endcond + + // _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 An input iterator. + * @param __n The number of copies to make. + * @param __x The source value. + * @return Nothing. + * + * Like fill_n(), but does not require an initialized output range. + */ + template + inline _ForwardIterator + uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; +#if __cplusplus < 201103L + const bool __assignable = true; +#else + // Trivial types can have deleted copy constructor, but the std::fill + // optimization that uses memmove would happily "copy" them anyway. + static_assert(is_constructible<_ValueType, const _Tp&>::value, + "result type must be constructible from input type"); + + // Trivial types can have deleted assignment, so using std::fill + // would be ill-formed. Require assignability before using std::fill: + const bool __assignable = is_copy_assignable<_ValueType>::value; +#endif + return __uninitialized_fill_n<__is_trivial(_ValueType) && __assignable>:: + __uninit_fill_n(__first, __n, __x); + } + + /// @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 + _ForwardIterator + __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result, _Allocator& __alloc) + { + _ForwardIterator __cur = __result; + __try + { + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __first != __last; ++__first, (void)++__cur) + __traits::construct(__alloc, std::__addressof(*__cur), *__first); + return __cur; + } + __catch(...) + { + std::_Destroy(__result, __cur, __alloc); + __throw_exception_again; + } + } + + template + inline _ForwardIterator + __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, + _ForwardIterator __result, allocator<_Tp>&) + { return std::uninitialized_copy(__first, __last, __result); } + + template + 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 + 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 + void + __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x, _Allocator& __alloc) + { + _ForwardIterator __cur = __first; + __try + { + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __cur != __last; ++__cur) + __traits::construct(__alloc, std::__addressof(*__cur), __x); + } + __catch(...) + { + std::_Destroy(__first, __cur, __alloc); + __throw_exception_again; + } + } + + template + inline void + __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __x, allocator<_Tp2>&) + { std::uninitialized_fill(__first, __last, __x); } + + template + _ForwardIterator + __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, + const _Tp& __x, _Allocator& __alloc) + { + _ForwardIterator __cur = __first; + __try + { + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __n > 0; --__n, (void) ++__cur) + __traits::construct(__alloc, std::__addressof(*__cur), __x); + return __cur; + } + __catch(...) + { + std::_Destroy(__first, __cur, __alloc); + __throw_exception_again; + } + } + + template + inline _ForwardIterator + __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, + const _Tp& __x, allocator<_Tp2>&) + { return std::uninitialized_fill_n(__first, __n, __x); } + + + // 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); + __try + { + return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc); + } + __catch(...) + { + std::_Destroy(__result, __mid, __alloc); + __throw_exception_again; + } + } + + // __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); + __try + { + return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc); + } + __catch(...) + { + std::_Destroy(__result, __mid, __alloc); + __throw_exception_again; + } + } + + // __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); + __try + { + return std::__uninitialized_move_a(__first, __last, __mid, __alloc); + } + __catch(...) + { + std::_Destroy(__result, __mid, __alloc); + __throw_exception_again; + } + } + + // __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); + __try + { + std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc); + } + __catch(...) + { + std::_Destroy(__first2, __mid2, __alloc); + __throw_exception_again; + } + } + + /// @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 + static void + __uninit_default(_ForwardIterator __first, _ForwardIterator __last) + { + _ForwardIterator __cur = __first; + __try + { + for (; __cur != __last; ++__cur) + std::_Construct(std::__addressof(*__cur)); + } + __catch(...) + { + std::_Destroy(__first, __cur); + __throw_exception_again; + } + } + }; + + template<> + struct __uninitialized_default_1 + { + template + static void + __uninit_default(_ForwardIterator __first, _ForwardIterator __last) + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + + std::fill(__first, __last, _ValueType()); + } + }; + + template + struct __uninitialized_default_n_1 + { + template + static _ForwardIterator + __uninit_default_n(_ForwardIterator __first, _Size __n) + { + _ForwardIterator __cur = __first; + __try + { + for (; __n > 0; --__n, (void) ++__cur) + std::_Construct(std::__addressof(*__cur)); + return __cur; + } + __catch(...) + { + std::_Destroy(__first, __cur); + __throw_exception_again; + } + } + }; + + template<> + struct __uninitialized_default_n_1 + { + template + static _ForwardIterator + __uninit_default_n(_ForwardIterator __first, _Size __n) + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + + return std::fill_n(__first, __n, _ValueType()); + } + }; + + // __uninitialized_default + // Fills [first, last) with std::distance(first, last) default + // constructed value_types(s). + template + inline void + __uninitialized_default(_ForwardIterator __first, + _ForwardIterator __last) + { + 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 n default constructed value_type(s). + template + inline _ForwardIterator + __uninitialized_default_n(_ForwardIterator __first, _Size __n) + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + // trivial types can have deleted assignment + const bool __assignable = is_copy_assignable<_ValueType>::value; + + return __uninitialized_default_n_1<__is_trivial(_ValueType) + && __assignable>:: + __uninit_default_n(__first, __n); + } + + + // __uninitialized_default_a + // Fills [first, last) with std::distance(first, last) default + // constructed value_types(s), constructed with the allocator alloc. + template + void + __uninitialized_default_a(_ForwardIterator __first, + _ForwardIterator __last, + _Allocator& __alloc) + { + _ForwardIterator __cur = __first; + __try + { + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __cur != __last; ++__cur) + __traits::construct(__alloc, std::__addressof(*__cur)); + } + __catch(...) + { + std::_Destroy(__first, __cur, __alloc); + __throw_exception_again; + } + } + + template + inline void + __uninitialized_default_a(_ForwardIterator __first, + _ForwardIterator __last, + allocator<_Tp>&) + { std::__uninitialized_default(__first, __last); } + + + // __uninitialized_default_n_a + // Fills [first, first + n) with n default constructed value_types(s), + // constructed with the allocator alloc. + template + _ForwardIterator + __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, + _Allocator& __alloc) + { + _ForwardIterator __cur = __first; + __try + { + typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; + for (; __n > 0; --__n, (void) ++__cur) + __traits::construct(__alloc, std::__addressof(*__cur)); + return __cur; + } + __catch(...) + { + std::_Destroy(__first, __cur, __alloc); + __throw_exception_again; + } + } + + template + inline _ForwardIterator + __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, + allocator<_Tp>&) + { return std::__uninitialized_default_n(__first, __n); } + + template + struct __uninitialized_default_novalue_1 + { + template + static void + __uninit_default_novalue(_ForwardIterator __first, + _ForwardIterator __last) + { + _ForwardIterator __cur = __first; + __try + { + for (; __cur != __last; ++__cur) + std::_Construct_novalue(std::__addressof(*__cur)); + } + __catch(...) + { + std::_Destroy(__first, __cur); + __throw_exception_again; + } + } + }; + + template<> + struct __uninitialized_default_novalue_1 + { + template + static void + __uninit_default_novalue(_ForwardIterator __first, + _ForwardIterator __last) + { + } + }; + + template + struct __uninitialized_default_novalue_n_1 + { + template + static _ForwardIterator + __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) + { + _ForwardIterator __cur = __first; + __try + { + for (; __n > 0; --__n, (void) ++__cur) + std::_Construct_novalue(std::__addressof(*__cur)); + return __cur; + } + __catch(...) + { + std::_Destroy(__first, __cur); + __throw_exception_again; + } + } + }; + + template<> + struct __uninitialized_default_novalue_n_1 + { + template + static _ForwardIterator + __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) + { return std::next(__first, __n); } + }; + + // __uninitialized_default_novalue + // Fills [first, last) with std::distance(first, last) default-initialized + // value_types(s). + template + 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_n + // Fills [first, first + n) with n default-initialized value_type(s). + template + 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 + _ForwardIterator + __uninitialized_copy_n(_InputIterator __first, _Size __n, + _ForwardIterator __result, input_iterator_tag) + { + _ForwardIterator __cur = __result; + __try + { + for (; __n > 0; --__n, (void) ++__first, ++__cur) + std::_Construct(std::__addressof(*__cur), *__first); + return __cur; + } + __catch(...) + { + std::_Destroy(__result, __cur); + __throw_exception_again; + } + } + + template + inline _ForwardIterator + __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n, + _ForwardIterator __result, + random_access_iterator_tag) + { return std::uninitialized_copy(__first, __first + __n, __result); } + + template + pair<_InputIterator, _ForwardIterator> + __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, + _ForwardIterator __result, input_iterator_tag) + { + _ForwardIterator __cur = __result; + __try + { + for (; __n > 0; --__n, (void) ++__first, ++__cur) + std::_Construct(std::__addressof(*__cur), *__first); + return {__first, __cur}; + } + __catch(...) + { + std::_Destroy(__result, __cur); + __throw_exception_again; + } + } + + template + 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 + * + * Like copy_n(), but does not require an initialized output range. + */ + template + 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 + 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 + +#if __cplusplus >= 201703L +# define __cpp_lib_raw_memory_algorithms 201606L + + /** + * @brief Default-initializes objects in the range [first,last). + * @param __first A forward iterator. + * @param __last A forward iterator. + */ + template + inline void + uninitialized_default_construct(_ForwardIterator __first, + _ForwardIterator __last) + { + __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 + */ + template + inline _ForwardIterator + uninitialized_default_construct_n(_ForwardIterator __first, _Size __count) + { + return __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. + */ + template + inline void + uninitialized_value_construct(_ForwardIterator __first, + _ForwardIterator __last) + { + return __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 + */ + template + inline _ForwardIterator + uninitialized_value_construct_n(_ForwardIterator __first, _Size __count) + { + return __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) + */ + template + 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 + */ + template + 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 // C++17 + +#if __cplusplus >= 201103L + /// @cond undocumented + + template + 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 + : is_trivial<_Tp> { }; + + template + inline __enable_if_t::value, _Tp*> + __relocate_a_1(_Tp* __first, _Tp* __last, + _Tp* __result, allocator<_Up>&) noexcept + { + ptrdiff_t __count = __last - __first; + if (__count > 0) + __builtin_memmove(__result, __first, __count * sizeof(_Tp)); + return __result + __count; + } + + template + 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; + } + + template + 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 __relocate_a_1(std::__niter_base(__first), + std::__niter_base(__last), + std::__niter_base(__result), __alloc); + } + + /// @endcond +#endif + + // @} group memory + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _STL_UNINITIALIZED_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_uninitialized.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_uninitialized.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..76cc6115370e1a07e703877a96b2be4996714682 GIT binary patch literal 62357 zcmeIb33wF6^EbXT6EMbbh=9oD5)cD~ghUJoF$4%PAciYk0aeCsWI3X!uplDao^C73utub}Xb}N`EdAZhz)Qr4{VcCv|!ovIrhqchb{#f!;3kt0T z;pzGLCMDgLY9Ch7yIU6L6%5a|4{Mo`U0_Yei$*=_`5u!qNOHrnq;0e%x^+uiw!NsN zBJCyr71*20K{uHCyB zKBQ4o^qgwrRCnt*o%(Ql+Li~r^cl%aEp%8iZF#AV2u3%Hy(l*g)B}=<7VD>Oec7_p zvh5C=TW?}!Gp(tPq5|vfjIPjX1CwBO^P{V$04oe1<4)c%eMgrP_w&rKJ`! zst}jDjnVkcX`{ei#i{v*{Tn}0oC+p)fG8CtN#Ur%i1Z9=rt$6C7)CO-G@51?!GchY zD6(4e9c&gWI6}}C)7z49!flL_ro`@OS%g1!!^d2SFXY#fo@YJ@9jVf^W=$-H!#^ctmak0Oc%>0@8$r#B*fl8q1DrC!_D{W_cP+`N&-Yo#k;VQpE6F?>z8 z>-{vVv=F-u9bywLYh+ybr z34mVAibN2ExcmF{i;dc46EIl!Eq+@@5lhAxA4 zdymVsl)Dx3jHTQAb(d}oZt{t0USY*o38*kyqa6j7+q4-oZH|`Kk*T(pxmHJ39(gyO zX1_)iyS3P02(HARuyT8DiSzN$vT#q*hTvF4A7pE3v zM5Gou@+xj&(y~O;WxQhe!XCn&J*?2`O~?dVWSAftfvKEg{p_P)3Xik?+WYZJNR8*AkY9eiA_x z&>En-Dc+Pmqc^QFJ`4xGF1VrZt`l8+}+4YvFrG_UCi~D7hSF04%-x zR<&?**kaGKdoj&DXzro~Dk4ScAPA`c53n(In_Nj!fG~{JlA4~5sW;?(?PlQMTkGo+ zt2>hd zfw?x9S_sF5guklO-jq)=U7t1W*O zkHEM-%%j^Aww&e z@Wt5R*13dI$}QV&yAyZ;_7w1h*gB!!Q@-!%$1P>t?XJ6w1FWfqaEp?djGlH3gABPQ{jPe$^P>$NY zM8|A+T!8GVlAeix#3WZvCA$@PbJR=Ta$)QX>Vo{ze@w>^!Zq(Z?XK~x_KfUQpIc%Y0S$2UAdxHG`HGfp$9n5C zDw{6QyX_aWXaPRR%w~3_PTvYq1jdJEcX-&N+7Qy2I2oWMu5$_Xego45*xqqK&lnpd z9$a0RZ_9RgXKD{>yQmvxv3gO>u9H$`7g+dq6!C;kyK)LOoe77*buH3kC;(otWTBy! z{Pit$Zmj51!FZ|V?aC_b8H$X!q3KR^m%s@F9jV$Tskbc?kc5zTp^5hnDOUmJ1CQ8y z--Thb$PG=}q4Y5y>`u+$#I{U2%S7=ydpr{Bf@!(gWxa7O);DX7-EQM4)e}eD=qq00 z@eC!Lc;8-h<scA-`Ov{0xsrbJF>8;;l1A2wg-g9xQgnnS~dOqJ&=Q z!QRRQ0h?snG`O>>??=<~i&|o-G$g*zsD>AX0%I<=clwP?Ex@{9v?b>;wQMM^(O{ay5Og zvV5O{{Wa`g8#pjP8V|y>1_*ng;7TmMP*5DeuzR1+5}^&Ba(#g=Z$5V(J>CNcwSqAf zP1k8jGsY_pzlU)3Zz1RlOG_`pCrHlXCKTw-D=?tCD-HD7sZdOmwj;8QyiN}yF&^Z8 zTE)i39`GI)am5+7gWvEG>yCEXEG$pZFE6-8g<0n;bHd$5aaZq%gJ4lAg8OFZml;!p z6sOPd5yM+cpQ2q9zlhT=xQ}!mV>G;*m#%asnq*mBcAtGD`0|We(2Ix>KPjss(I8?b zBr2l$bjm0tr6AjpNMrO%G-fOndZapgT__Ri$~98B#?1xj}a_F}pES_CZ z=m;}={Eoa_`ni0c)LkJgFkI>=a#PGrEj+=bnc1Gl4TDe}D33&5S`L!FEvcdGLTW|^ z`YX)K3~erYZWhK7ce})}#1-+PX8(^4tC^`)yZVyzPbCnoiBk@coPPlRTM06mOqJ9z zcinG)IqugU>R%o56ZbSv-=yBP<&WI1Z~gj-I%wHYq^w48*2D_rB$S$Fef)_LxB1n5Mk} zmO>j-#zC>|+A-&Z_GLr0Ii|_xFK3)WS)0Tp^xkI8nwgt6En_y$N`f5?yQiKC@w@YerN7$%t-VVarhgfx|$+rW|AlyJtKUjqIC+!=@Y%P<$&GxE|AhPK0f zGMN)w@*UFh7x z0|ku%jYsB9OILhI*`(*o4J9NDL#YPzt7${23b-NDEdlDE13E|7yjAa%+CSjX#1_xr zcva1MztO7JH4opf{{3mpnpW4J$QEM?yL(XGWi^LPy{$>pTz4dVVW$h{c`$#Tvm#a_ zF-{_XC&?)TPg&{4$S(m70?rn96O_y&3JqB7K?&J7r)D0c^~L@%w=mnAnTufwo9$-p zP8iSnSv@nyi5BV5!e-$nldN{UIq&6j56|hOS|9E|WzjS1+Dpzm6&WpB{qWbG8+KPZ zU{jn;;xsLr5WD@UO3xh#Gtjc`GpwV@$>56!p5&oLnS?M_a$b@H(GnO*E&{$O`ydH_ zS2@D4&NxjNFH+`yDm;Ktjd1+B0kMM0h*c=4wSDsJM}FD%NM&_P&6%?r-2dBZ$$3MT z(W2C@^^bPzI3f0X7ixX{#oWcpkQ&{6GLSpngv|dJl0nQADmnXtf%+<~80C@y4^aA< z%yDT2+15;R=e+!EYoXbZWi>NDM{p4%Nei$L9IiYwH-W-~%yI0jlNm~ebD6oL9d|(R z%zBoT>rHku`!5;2^J9tTyi7Ar4U)pdOY_V$NVjhJo2c8oB1idt3*bT*pif~rfytrm zf`ZK5vxi$*Ul1}FO=-XhC5$oNLsuk{Xnr`pR9o^{WdlAf$i}Ze*u>>R3YsSC0KHc1tALsC=%=WcW69#M7-M z=Pt0@E;*V_>ra4>$N@}6CyooOzhYILx71DF)JuEu#SfaQ(=#W`Nc*i)1JkX0afdF} z5N1jJ>6ar-yIKQ(*Eo|7RK*ysGoFh|tT3yL7?&N*`oFYdxcBgL21N^-8l+^&EQma9y*PPj^M%vfEy?oQQ zWcAU9hZQ&Zp^qZXljqe}pIN(qt+MIuFI|@O^ED^rovw0WKi8OUtMorpm2O>Nn3`2$ z5vHMMuR4Xa2m)J)%bCDQ10a7bpbuMUy0JOncA5#i>dkB8UTzZclIlFQ{Et_@IdoVx z|2gDfmq?o^>bD#A4y|u(TS-kCvwqX4HJg4=2R*&^!qSdA zz7&IK-zQ|;U6}{R-qs+PA%-D%o1gN(6MOocDM}pY41}J@(s{o$9hP zd(`|T$zT3G>r_uM#1q3}KAv8EG)Q|JwinHu$9nK@>)3+2Qcm@p=ERNJ)ouA~%3ch+ z+8{Q+#xC{M#`A~Qom^$P`uz0M3+!hr&l8KoHLDV$CXNmFSXF%+krfps!?_3vgDRMh z<#)ce6wd>^+?N|=NiF9>aV2cvTf+L*vf8Z~F1{tXOJPB-*O*I6?uIS}9D)rVppO5_ zp4q9>h|kpfyIjAP)IIK;y1(~G=NqrhX{oMQb8UL#jrUFx4DtFSt3DdC@?gO2^L%zD zTyh?@{lCHg@scwcJfAFeX9}wi;K3UIPkA(O+Kma8>uUBllR7&BtN*FSJu>-=2AxOz zrcQhD&cq3Gl4^+Ib{IbNj`Q;uynb8!&(*Jo1n{3LX3)9oWSA5q8%j5--(az@>(!l3 z6T)6lz4ae?Kl7_s123u%fAVDglD0qYQqK%}Ipmivp>qVoztrdWv^$5FoY&^-f5WQT z%rrO?67eJ!#3!}IaWLR?ERM#}y$2$WJ4U~MV6fWu>knT0Gqu}U^_gxv-mW%LN*2?U zbJyh8cdwZC&~0%gTVPnY*IgM$3L_vA%ZZyhrYoe6JuXCvN21C1(-T1J%c4 zb}x#lmzt*D_%cY{8TQF%>IctcObMPoxUX8=!&(3Gl6IZdi*GgA6#V{U=hc`lm#^Jr zI`p2H>8IYWUgzSW_NoUl4HY<}%>Vde%fg-En4EBJv26)B78BK_#9_5l*^9z>TxL~m(aFpsWJ5mvTL42i5rL!=Rm2!52%>AuqMB4IG9qC!- zG@M(YxDPD=P-XTEY~Ph(RGekCn~SXvB3d&ndn91o79^sVWxa=+&EQ}JcX0H9g+R+L z72P}ZDsFe=$U)V-Gqq#yjTe`yUA8YPxc8ts zQiKM~lI%1~W)>QlGxfcZ%idYt-lx)XXO;g7b&5$=17}u~cucY?;6|iQ9_!wCwGk7YqK^65l1EOXuW1LGiuKkq*F2CsbUL7(j6vZeSxt@g^cMTJ?1XaN-+({lhc zm5k`Gl~(}~;RKM-=o+mwUM}%93l|MH=KqJissE2hN&%%hlG6zr$*Gu`C2$jP1J17s?#v`+^pQi>ZRk028L|8I#uY;>9!Z1e0SQw&o%w& zJ-$k;UQT2BvRge38=A^6?wsh61#BoK)s+@iU&NfY*Q&4K+OuP$1KW0}lXt5>KDzb0 zQ;jbttLuNY|GH}CeXG=yqo!rIx#QGBn)ci;@2}4^=lY_zHncrb_r;1C0bFh?>cY8O z-d;?zkTAqUMniv&*5Vq_-0;}dIMe*GZXg7wBN(#f6&v9aJ#PtdKBE(+=wt1aS`lED|}C@ z%(Erj4<$HFDI_J|$Clc41`>G=w_xgJOU1<%~#U+C;|9W$xBsuMftlQTK)2lO2zJ@|=sp+tJ|5l%BmN+^^B3j9cBQK-24s02OA=kS5Z$z-=sQ`(@w(!>FzA zm5b>ww{11&>5h zDD?}WH*K$8dGkt#9wOwC$Z?sas#2VScxC@8TI@s<~Fl;$w|A4OFXkJp0vyzpsB* zeRz7aUw^MtGC_@Rad=Pc+js6!s~)|X^NsXu7cteB>;63PY~9{7J(h#=RQdOKSa+;x zTb1vG)CmCx7h*mNH4ZKSTqN0;1pcwVz?_h|^(S>p_ri0PBX2BGPyWZeHU2+Kriej& zb)-!bOTg-Tc!$|6Jl2*f@2~!#zJG2)xVa{3SGU|u~Ti7wD{h&XJU7%{g)l@mT3R`X|?mV zcdK67niQa(ejskos2AS;LcJ&N-tStK{H_N@#(ddc{_wFCvD$oK7g;!0ZqAsNaVtp0 z^KUf*>B+b(;o61k`?6#L-TyJwHX~{H0Gy8lTGH@-z(=%Q&1a_73}}0DUKh2)BlU`} zygzHFdbwcdoey7lp}%_Z^%475%z6B2AqMTHnntAdiD>LsmYIg5Dez(nctm2s4KyhF z-E*a4gEx-E(nGjXA?v?R2n^{n;FmKR@0K)4?_BZ5H#jH@f51S8IfP>36<_+WJQ(gbU+oSuBjw z)8VE}*IbrqfM?32ZDsX+Y2jn{J-YEu^~&_cBh0HxV+FQ_dwOsAv(hsME3RZc3^i>W zM%qe9kSBW)4?)#tK-Gpoy@qJ2wh`b^EoqE;Yp6Rzr9kc!MCA%+Kx2g#PgF5vp&gm~7=@+C6_)H1tc-U4yrexjyYNT@c#rC$U=he|Y&RI8asa8eJh;A}Y8r-z0rfyfO z2WMSx*YB79OUkdfm6TI%t!aRy z)*5hYK>F;W748@Uf@)EquKF-Kjyw&^Vlfc zBudD~#GC0~dupy#&#TrC`MBAZNOUX{EVHE_9W+SBqo&cLYf`4~StRhERcgyH6O>?r z7|J(;@sH%Zpmaj(hqq5zmr>Aq!q|JtxTgHjjw$t>$COqW+A$@FAdqa3b^=Rs9#`Vf zlF`#WYX^Q^Yny!C-xM6h6dYw!a1>Jj2&B@Fc8L>R0XPd*8;$1TI9_{PX%6U|l7t4L zIWJ*Mmy|HPHgLiC->!6hb}fv{@|f>anmhL~%=amE2tvAocMDN+{-)T`9O$$`TKcUj z%YSTc(CN=gsPku>2$F!s&%hBdQFISxc8?N@XOHh{Hg0uZ@m?{X%>UQz3Vkv=itYAT z*o*v>m?=5AI`#FfG88QzQ}-=~35W)!Ce?fH+|ZQp*Vq)w&hK#PJEcCb_#V*r1gS4y z9iLlpd`y@D+FOD4RwW#>xD`kP!Yqm-OLWYs6&i@Go_%ETiPiO=&%i0T^5opA#N)wk ztcxgu(1kecL|qI;%S0D*$KUaATD529`(uPb%4p{xWdZsdq+}6<{zO)V>>Lcn8mtV( z_=YGo(4x?DOqHK!js9}LI+hq&9=$!{q31KtpN=w|h#1Uf zj8cH^Vw8Rap*xX*Ps#e@(53>tH)ee$-P`-QXu~rHf`IfdDcBf{IY#NtI;~9*Iu-f- zgrga)8)(@9Y|}x>LH92_I!4n&)IVXJxaVjJS&Hlv9Qhra8YLdnECPg&k;M zvx^`Mxpnja<~b!JP@u`?S#eT^ZF8kM@QB6C#3~H|4F)urAoYo~d(C|>eYU}nYN24? zP{zKYN+LlRpvcXoG~RqPVqaTf&Vml{{epb6NGQk^%2*^6uLp$QM9QxW6lskgLj{@pdCR-kgdI1ogK3W-it>$G;G zlk9u|ob-Sa2Lw6->PV2fWb6K~X03YSIqxgcR;ZY*iUT~b6+8(DgKGO6KV%u;+>RxC zyHXc@ex(dRvjO^A>4}yB=vxr=TQ<-&TN@tFUllsWpHwu0R5W5z(Fn5&2yYW79%W|; z$Qr_yrzRLd6DAdfho4Hie@ej`!}&EsD$GnO%#aE|=uVuZq(heuv~eKAm2N+dJN)oR z4J#xSW=yl0Nrf5s079qYoF;V|jW!gWzE-loYT|`lY#Ed(wrr16lYFk4l$)#SuobG4 zVt0lC3S%n1;nLdg&05kVNUU+XER{{YcJ8^HH{#W588?nuEtO!kRAN?30LTi6A){F> zftbTUHizTK4qO`NC_QK>+XxuBjT1E#AjwEfr}4!m;ywI7$gHHc4t@M?Yxl3#vL!qi zOSst?5C|z7bD(u=^Bpq{r_!VhahjAY@S#cRP7wMjJ2@#U<8gp<8mK=0t`L)B^Q)Z< zmg5o95a$Sq7ON3bcY@G`2-HeWhg1iRRK}#4^_JxwU2OBmtjFQ#AD4TgzvFU4g3zCE zKxF3$_@F1`R+z$*a$B?k=(*t1!`9a=W0QUBkzP`$vzJ6mO)sf7K`_=la#v-fxF(@N z>pJ`5w!RWA)+vFvDt+1JYB#cFkpqV87N`oEf|@len|c&Es0t?K>7Y;sE}(RTS--Oo z`7ZkZ&|^VkT>hWV%Hz`)<}v26Zog9InayU!G?%-80)df_Jkpl^?)F56)sdQw``v!j z%DmCtcjCW@2y^EaEh5_ljdjHdaZRd~TfR$2L8Ke1Ffh`sS$Q@p)LRa%0_!kq39krF zb;`duMVX*k-X7~P&npZzMS@cqyfRMWbm z-D|gx%*Kai44)xBahorE3!(hPSS+Z}WdT>Z@k;qAhvqbA7TIjbf+S8TG#6T}?Sir# zj{J5J5yR5c!_i52Ucs=4JXTN^)d&jd%UfKQBFM5Wbl@Y0C8O}Un+Toms5RusrQl^F z{gj$2vK&;A4ycM0S5+LFQN=+MRb=0*VkcJ>yJD)yiBZLgAyp(rt74N>6TvRXK_wtS1gBSNxGx{E$ z_1%-f533(eC^_---2SW8XD@f?JmJDy`_=jb`X%qIw>4Bf(4*&;J>SgwQ$4q%Zm%7m zMIKXwr`m2^eDtl))%MX-U+g*7c}sn4$6I?Ie75dR{`*1JBk>-w@K%A}a2_?q!` zC8%L%)d1OKdNL&-B`82jX_C@BK(bV|)C`bpAvSoSbL!492T02UmgDO3Cd+YkRn=9v zy0PX)SV;SV_tglHP6eF8)l*GQ;p+LS=W!KD{fJMP@Vv9VR2eN8P`p$Z4ZS(L1M03p zy#X!2Z!ZV-LmM1tay}siqxHsb199I#c3+AV;7pOo{(2=a04)gj4Z?4Oq%{0y!#iy3 z9YuJyNCHmIDfn#)`|Wx3@;vKhg%s;tA;shBYN;j~*?8~ZzIWJtU*PH&?CN%0-OjG= z#MPbb>H+k8fc1P3R}ZqQM{xBByLwTIb6%9-c{#7*x2x>88-Q*w=pH%1d5;Vl;cpW( z(8+nPTosLI^`KlCjVKh2`=Z%>(YP;~-Pa!XwP*J|F4uHEE)&j!*Aa&QG7Fc-pqR5jBxU1xgCDnf}Xdqp7-PGes*;~uI^`758>(| zcJ&nAdy2jH8s2e@y`wflDYcn@QX8?6+6tKj^HRTN?ZADu3$u0*oag_om8bKelrEsK&t~t0wgg=325t70%Gx7 zKtNSAn(0b_DiNfMqN{yrv0&9hNwDHse9&XPoMy7qCOSiUBu5Uz4$GIDR zz;1=t%GeFRWsedCLsT=DVHAqUmdSK4ubFfnKsQt}_I#vlIqm9dMZ5Tsd^f0pAv894yQ@W?{ym4?wUmJ3ofu*{?xM00PqDT!-X*L#lxWzEkTY%vL|H zI)0IXrT(lu#QCgDmin`DcY-KF_nh1mjRslcKfi5sPE5)D*FB*clI*M@QT+C9P!tez zT9_xKIO|B=(1w5-4M2?s(r7^UOKE5$fzy(|?+S`qci^DEDZL9$!(Gg2xC>4LAjC(# zCt@f_+=xP>IjACMqD=-=4O*+3Of)oSZf_Rb`0dBM&&CZ%_YD@0y#Z+igxL`J!4z_j zL4#bXSLDNOf`2`K*vR?1mU%5-lCC9R%g4jw$eDB_;|8L_YT=^I^#ZM`)7UL^3HgMF zhg&)p3@h~T6!r6p*<6CPAP19iw`&&qyevsIrJ128^vGgD8Fn-GE+Jq9C{shHLU;WT z`U7dOI$-uX5+L=Ns9$>zadzqDomyd7|H34S*oI+m9}osCj-^P>2&oeqB8qD1yjLHr zS!3u4f3w{J0^EWLa0>`9APAa%-bEa9QJi#esHGGNWFx?L5hTgZNI;QHroY%5d}7Jm zHvK#WWnJbvnNL3RsE+95pH*et|TG3fRPEv889F+m+k zG-SG-1J9Ur4YG+pqJ~W2_?#K zYX-h&yLS4v2+<}cp@zVKl}4!q+n^I#GC0*Cg`ttDH5fmH>oeZ+wO&`&W`W+oXB3SdO>IQYS^ngCekB`T<#Or2dhk< z!F@`AQR}-WkLdGtmp27Q^e+VjJa?FHGg{jf+O#Xvrisv|fcP-DHhmoG=W&^~78)Jw zs8*MYpY$Wfz0!K&I7Y9Yy(VHv9$D~8?}oj>E6LT9p+5Un?nfra9m9tWUK#NpzqaeU zP@?ZLCHgLuC?FU*-fJi+sJYY{jd=8ZjPQNt&~3m7H;|!IC|F1Q3zJgh7OD?E8ZW(5 zWq-8yWqpV=+Brm;32`1GWf24x61nAYo*)ycQXIzifPVj-w%oU;h3M9bN&bd|HugZBM1x#GpH9M6E(;b=TC@3|HR_ZyAX%oMR927 zZqRi%Ga$D<8+!DC!NCt1$$3|b{^8T0?rOT+ZUc#Sw`9(Qpav7|s!xSK)jdF(5IzBa zr-x6+-x=XE@OMY}4*Z329gap&6FC%(R6ru2L9K<5ZjkFVbHTKC0Gs~S$gTui`RHUV=n0e~<8_iL3es8WXmjh4|zr2R)@ zUaL3CQwKR$%Hz8lYK48iz%T(5xca2*OCksZ$wC z*HpBb=&X)pN268$^R*WmY>Iu;->RRLmIZZ@)iY}%dK5)g!3ajC5W0%G)b+vV^3eYMoG{f)-Mb z+C5lFwjP1$K^UtzEJZ?t7^5EMG)Z%s%%OLVd~3>y2AwVx`dpHn!HB>FvrXqBNM)P)^|SnfO9{5ZlfIEEr%)MqN^T^dA#< zX;$1U7~1NLe>Lp=)j$T?v-SVMCL=g=A|!n?kx&hqr_ zobF+UbpNgPZ=J|M{4MY=qPsX^P1qCNMd%oUd_TOu`zbQ1w)*z zKAy6qQpoO3Abux|CGZ9Q4RqFHBNgedVx(dd0S^qu1A}Gorn={m{r7!6eB(p|y*mVM z!w`w$Rzu)600Q;IVK%Ze>Yz157poc^`|jP|KezhVHJS4~Ea~$Kv>6t}V1gJIX?yt> zloUj3$#41ig__pS?*8qIe+>a>QkF|F05<&qnIdTY5da5N_I}x!0v9xeY#dNB1C3<7 zDCnEJTYhk*zhpzN|Hr9`XUu$&@8~oQAUZc%@QFckb-tamWyc?}<^h8gAKg@b*(Wv8}3R)WZ z9GQpQ=m>i^6fF^=kq$`$g#N?4!%GejX4>1f7LJebC)?D8jA{c`P%Z)k1vzdjy>;9nvuW#VLf$TKhmy#G2+Fo7TaSp)p~2? z=v5oK*iCB3^;JG@_{*o&{n4ga3UwAsM4MtP6o9ab=+y*7$pFPk#Rf*PDB)-vKpM@0 zTVt_`jAg6HZ&APf-2bO8#@RE$ko;hU6jQL0NDzo6>adfQfOrPe3vWz6u%hM9(;qdW zv~vcu+YA;InE~wv2%U)9k5neojz%K=NuNb)G9Q}W-rulCVAvzrut#9nfG}*2qm(jE zTt=fI>WaTPXw&eDf|l!|@0d4&eNYzbL7DYZ&O3=IkAuHlsH@OlSDF600{sQ3Oi+=& zjs@d7^RBN3f4ZVW&9+B{%+tRW_3jI-nO62GB(tTrH8UAcMwv=W;Z#a9rp{O(OEZFJ zEO2@2tiiKL2F@?Y%D(V@fwlaAT)3O%Y_5cytz>ex5;6q{lO*c?%FZ|O+nY?zRzVZ4 zl40Shl?T>IdNu8X?tXgS8oCu6y0!LJnkJ7b0m`=UZAk&rwzO>%;pQdnAe4n=bsKuk zVt3VSVW7#?+Ee_KT{{9DnSI?P=G?kRl z%uIiJ`g~cM9z1=%>&z6)dK&M0e!zz>Z+Y?Xnt#Fz#-|CiwKNO7n8kQ;7Gy@iQk>DArSu|O#FvH`~e|AI?1hScS*4Rd_sBVL+~Ei!_r8 zaw{1kuDnXCaAxgHwhCJVa>1#>XOvV?O%<=>oJu!>)YBijug>6KW1sRPdCqV|dcs+x zCmfL;K#)NFgq}E8B<-ucj|MnDdwcAIk1ZeJXMhV^ErgM^u;D_A5qj1II;oWdQWk|R zf@8dB=pr!t(#lH_7gQ&FHazIu*^^g%`kc-Luv!A!?@j=#0RjO%s^Q8gnj4Kq8#-O3 zOf;x6_1K5`SrK*Sec);BZymA~3+mSHTS<~ckra7*!|hG5^=SWrqAKa%XUv|oyX2VQ zDfbAzAE&#JqQ%VJuFCk7s7wHzB#J_d!wX)&bZFet=0*K{4}TD11cO+NU=U&ifPkLR|;~!-1FEs~- zk0tf|W&g3gbG-Ldgs@zZOh*@r5S9akp2VRu$vFy}6QdXdmkt`WulQN%XU~~H2E%N$ z`RF1JkuN|*rOr}6G>V0H?Q&q}>s6HJbkp) zQ5gMyR{oQ?ul+L(7hRtbb(f!x;jxFJk%2cC3oszOKrg;4O6@96DiAzRrg-0ctj_ak zb#}fC)&DZfdide^tLHkG4C?LgWhTtFNuigSFx!AYPw}xC#VO%8i3QeV1toGx2z8P~-;HePyCoXq)u)cW(YII1&wk!9I%PBxZ$>AM9*w?5o%(<=wa36q z8Czp4LO2tWCZN9=Ni(R|5&hnqG~o2bECcQ=22U2VXl$`$BM2Re(qNKvj8q>j1YN8x zS<}5noi;h%MWqBnSHgs@1VRT0J&D?4)Ke?8c=U8_fBiOlzgg15T`hRb=q70}Hqa@( zXcKZ<0D&z%O0>w%Er?ldp$&BBCxAX-Tj>RxJ3D_{-uW)i;V#TvXoE6OUPw6!qNJO& zxc*`qVx5zp{wJ_qiOCP`o!hYDZDT9mHY{p@fSJdaA7p$Wq7zygFx!DWqaCzoq!u-- z-{_4y_Ez&w#m7L!#~2kK0~G-QQBeS0a(2UBX*V)6)N7~i%y@nD*kzt$JTmzR_9Bls zj?iADDEcWKt8uIj9(yJsbXAq((>MAX;|%cd493GVz^{PNm#C>PJ7?mznT&^L!P%Qd z&Yrsc?OH>cy?P`}*f{iWMZFGRmgd*;*NE8c2>#l|!c>0f_QQ|>X?Nys*qHlL_7RVZ zaF|%m`~)gQpiVpb&7&1yLdn?>TCkzaqi+qcZQqQx?L`C;DMeZ#2PhtG+g^JBI5b~1 zA2=_)(=f8l}%1MHVL@yujnL zj|#pH*%Yl4Uht>V53K;u87vcL*fGDWOTW!IHNdpXAB)FBjN_RY$3u((VMatf2F2M0 zzja~uYJwb%>=UwA6TuaUEPv+E@6}(Ko;hr?zjvHO9?D6k#7;_y1i^;%taTzPn<&n+ zAlO+Jfjxjkw6%h*p1pytV4{ry98v(L-}CgyvkxUb+yP6A-BAQPx^^F2x&` zGR?UR&@whn>n|_+Jm`hT{qB#w1}*g(+gf-HS_%+eq1VY4<*^m#BCyFKrYByA zS%KlKV8dCtcFvwl&tLf79}yEk!~`~;1P~DrCQ5u9LUtzN9f|B6-OzJ4*0cHO%mcGc zfjzye+09Zo!1gni2fE?8(R*TM*4*b0$6XMOT})r@0zQC1 z5RVE!r{F7|NC!y&9VS+>rBkXrbz0uH_+95Mw z+R90#cNkitE8%UdWJv%kp~wND6Y)7L`f`>7Z5%pjd~5NxTQ^oU@y_3;K&eyAj5q~K z0YXorl9J>+4{D!h{Cy~~v7DEB^g%;(!V$&^XIXjS$jSqRPDITe^5b*R$deRn%55&a zSiW3?6l@Xeghi~Awup7a;`;2Yjq8zS;x8;>L<)!>d&fuk24$d&A%9 z&HSC-co`tfzeo8Q1x0b%qS5^Km8+tGH?eJ$ghtlJ%C$FEecL0ngTI#*;bleaWkq-y zAPORQlra(2OB7UNi9sW^Py*kwM202r90M{`mSFq7TQP*K+P?39z!KjOONh;61UIzL!krjS-U?|5wLXLlAa{MFY z7!c%Gd=OGX)|CxyBru+|YP31SmYL=U<8`gpAr!H$;W~1BJPN$Z>%-PV8LuC@9)U2m z-QA-bY&bU4xWd74;B}ngbsTsB0$!pv5}i!8p%GqVmh?;fy0k+*KX^GWfbB0Zw!eUB z0|fj$zRjxO%dv@QS)k-!NI(0FrJr4aWM3i4{#dX6Q~qt(>*r+_O(7vHXY-a4it`El z+he>uP+Pt1kQ1rTGENXhqakMlr-h=>V6y5(fZP`;bk53ZnHn}kK#i&a#i1oJW1iOt zO417t@xE2Xj#Epe=vxUGjFyAG#h1}N`lez{=o(0o&FnzKk#s!D?dS2TFwd!LkOjqG z{-U6pZhU)m=!Wc{r~~t-(p&41Z1di3JqF-F7EYN{4lVkvi$-Cjzwp#wN^cZzyrLk1 zj=fKm{qalt<4PDx0L8FZ@^U~idc7e|pA*VBoCuqV7hO_f(ULG6k(SBQlJ%@f&^|q{ z$W8>RYJA1~DDEK|qW+z8sBmct3SvC<3m*MNX~M?!3(mv<)(aZ(as3A8=QkE3I}B1Drt@-o z4I`~fJ~=@_jFS%F#RotEn(hO57I3*94=M>50QSq#Z#y)~BN3H=%8=mg849(VT5 z?oZ;Z;ggC@>ye_;Ha*tON1Y0!Q<<(#1Lf0L_NUm+@<6aJ1i3F{l19mQx*Ymu8Aq_c zl7T~&B;cZ`k8cF~Vp{qFN!}wB{~4ke65D;Fa4&gJdrsn88kFJ0m=Fa)`8Vh_)!B?@q%)$totfBl#`@J+dDTQ> zBRRV$(P$*6gS2X5W%jN92`W>aI*hH4qom7mqz2F!dC9R%y>uBL<0*s?PO(FzSCmfB zFBIqyMU4EiUK~_XoF+BA%2BLdJ&8|BXJs02Uw}?U)geo7RNT$W?U|>T zWJ!opI2D?z#@Kdlj513!WL`NZUoXbPDcTe#hnp(oBQ%8;Y|2FR?@wdaw7UL8w!z@j ziwa;n1Q}mpYm8=KKp1L(G&PjASX+2fb&{UHO~Ml3tc4fWQZli6)`po-n;~&8Ciq^; z^~dq;XtX$tSbV$H_@xy_CmiU6GjzDknWUSy9Gys@6Uoqt0ykq?%HIETR%Nmpr4W zL={O%yt`T;UM(gawZQ7Nm~@C-W#8(ynv#sZ)3m-Rr#Vf}j~0C=pvPo3Swk^dcAzSD zy$mS9*YA)JrZ8lPl?>S?F66snrK;F%qu!As3ghZdc0g%M&6%?r-2dBZgFcxB7!txB z_zPzP|B|^$z)j#--Nxo!-jEZVH)J>)y8Ud>r5l=;5DmB_a{_Y%yTqf<*66bn`V@7D z{PlTKM)Xw9VngS3in8?jM@YEA&`-hQKSe1+`giRO`t&b$d?e^^H~QNxM?vcNDU<~L zz)KapFTlA^PC^@iiQEs5bU)kOIe-%u2WS%*Wfo%4VCCxGl?Na00*Q7ZVVY)>J6_{d z;k(h0WOQF2EdSyV*&WLvnK< z+ZM=*oWQiaJR3hyD!#VyCli%Ok%O!H(DGSH1eyB%Q0sCKkOnU#Kl1$ z{vP&o{Enqn4bb;5z-8;^C9E5l*h0lC!Y1i%A@|Mxg3b7sk`D>K3=8tIk_IYVg(G!U zq44?go)7l8^U#D^{|E_Pi)?@v*}$|2KO>l+pG)LgWD`Vu6Vn)*z&)Gf?!aa<^vPzX zPqsjdY++hNRK4)M{B)9%QT~E2KfEYLnqFyxPe44jf#O;8S)A(sN8>9aa-$N(4r!X)_k&(J@y5+a)@K~GX*{ChI#Bv!yviKk#6oUVTw zE8qE;^R()T6SM|zb<;rWh@ zeG$fPjTXl`=V9$Q5A`+x>Ma8ZAGmAD@==d=x}hs00DI}iA>(91-V*1ZFKTp<#NL}nSlwaa-G}39IP)IbzG)7`Rw_Phonf`%3&|O%-AKDOl1En|K-Q{~L7J9kLrV*d4rE8~?tN zeX}ukkt@r`PT|j{7E1|+Ou@wMq1%})xV^^qa6S2!EAP1dqyfb@`#hMRX(%3m?=!j& zvrkcrVX|J@fhq8TQ3EMJEXp!_bi$=k(;qDm;A^2pA$ieen_dcn6 z_qnRm8vQHxuO25YtGo<rx!u<*AWtc!_l}O&a0%ws-pTDr)@kIiFgT{ zJbJE}Azvc@p($Dzo2A)Ob%OO|G~Uzmn8W8;Ss3vpEG@LpI5Q}Ssel7YckB-gVBH)* z&=j!SUIA@%v_>O)P89mbk!)=nL+lXb6=V-9+aVZ_odGy8;6469fEoH11qiVK><)yZ z!6-w;zj!pbQrIW3p_Kso9_IS@N&(&{Qtu6@>bgoTN?OGBBan_iSWoe1tJKoAOCh4G zny;c&YD(XC-b#F}-&$8zML~i96Iu+ILF9A#c^eWuGtdgy_;|u+K{;1d92)c2Q=v2f z=f`+Jo1ZGn)DNriDJ+s=P!qEouzx&e_oA43scG)AOXe%hW+aHuLPtxGUb6%_&_sNm ziWjG+`tdGTV3A!xi>!Wp)DN0Bdf#A10FIXq)sLw%=0};(c4)MDB=Xq|`oj0-q7ZZp z_Hqg9DBFQ6AAn#VEyKre_^tv~+~*?=3!+-V_|J_0w5w6&eq`l`*v7*}$lFD>@=;FR zUs6+5Q+W=u#wp*XHp0OP^zX$94=!`BKLpM@PqR>osPX5cyITmV-cq<%%L@Uf=>-L; zJK9|Dj+TPisuYlj)(=z`W#$aEelf&>b8+0IHGEjyI2Xn(zfRN zbnC+uBnm1Ga9h5Wf%OMsGj?FYKrFc_DJirRh`b^{+=E1;6f_=0;fY6CdOi~;-VhX$ z9l|nnL`t{e7?0II7DDoVtn#rCJx834@zj7*Lx9nQDZ{RQ`SZKST=|e(4Jymq8*|Q! z@d8pG{9@Ag^&SfP-Gdq~whRIfPopu97XMNm&eAGv`lCa90T#?Is-a0Y_-65h&&ag@a8gw$jjo*)$8tYCH9~k zhKhf*LWo*u9@x5CVWr(mQ>ZtTNlVe|tugkTS~7KVfHbe+yfE}7>hl?(=c+`2TQVAF zdS1XU%>%!>z%LYiic=p3eY*KVV_T19JLotT60aXGVLUZ2ZXR*HI8pB1rQ~Hy44g_+ zP`n=TJ!C$_qP>S|A3~&893e4eQXB+nipI^AF)&vE>t|F5HIv$5vSa#66^u z(l@DVQrG0J9lLi;=@M^A#P!g|$bqNN1sGj7BXM17TfHsfQ}`QWQYGq9d_3ELUj9QO zdg!ZPXg|b6P;D$xFJi`GA_KDq7C`C~QxFpwRDV!Y6yJ`u&{`7JuELj!SDao;$(oy2R^+V;F-v|AQdie<*1fg|S1> zqR{=L4-YGD@#xGlvUr+QxLV zdngrGo$AD%vs2sg<6ngjGgY^SM$vW+O#|2x|r7(T6HKqn769Fg})c7Ucg^xj8qw|HK1HT zxeS^LXexu=1@tb1z5(; zcgMpt#o`p9;p-PSUCdUw#nl&wsp427>tXqTb9y{p=DLK<^m%8Iy2Q(Z}G{(EE(1LC#9&x&OEHE!%qOqX%0*Hk;cUScGv zCY2JbmmTCJF+*g`?9Azw?uF+nN8a%G8mQ(+l1EA*&_Zbj8t;2VFVQ6g`mb`XoTerOq9B;+`@+O%$S$q!Lof$M7DI&+b`ZGZC zjI@CD$d9Hh@QBFGfSP{o6vS>rRZS{jPabx`_C_BWF{I|8f!>E5Nl zOG{Pmi$%7t)*=6nR9v||l0n!<7$i|5qXxkl5QUx%X2xCV_LJJ8`g0}kQm8xj<0ey#v+IQ?Q zQpTLsW|RM81mx1z4ao%eAG7RaT__Xs;D1hfLF!UDn=WQ zM!WI6;!JlPX}+;zgB01QthQbm$>4pie6_9TwjqQ+$|emdw@2M@Kl!ub!*s@q*#Wvc zaLA4*;6O+Uu>R#cPJtqvW-OxWclu{QJ-D(1(rY^?Jg~sO5IS2G9~tEn-5GhGot4RW zNjyT<@d_=cqA;1C0ivM8U^Kp~!RwXf=mpVu?_pM5fs4u;`lHQskFv5uz5A!xM4n1WDaiY&GmpOou3pOjmXpOtfD zOqGUh6Ab9#%8AJ3N<-s0xV$P@zFuvN$bm0FA#rB4oQcU7#Vn1vG8M#1)wnVhTnSjO zmdWQxRQ&UYlT{vqDu6aNMZ6-QO|LY_ak3);$j;IdMS(nnK5s+9$3nu#G70A;^}6fK z$^+Mv;A&1{`8HD^>rwK=ear<%fyv(-JhEuF21% zjnj{`aYx{k+zuJ2v>_&rbs7xTjirmhKE)dQ@Z+8~{WvKNR>on^STtI~o`xVjO$XHU z1N`p8_H-1M!UkKak&>VA@8n^Fb%zZ`j)JJpWq|Q*FlQ8)J&I+!@p@hfdg(A`-NRl; zLPN$7K7^Kt2K(OG1{OsdmI2ouQH1s^+pYbguYd2*`JL1M9X8c~O*MuM{}54v{_!J@ zO%1%c277Z2xf3ADy}Ji^-NW#@7uej(uo0DOe5~|iU^tjJ@M>fr zuBP33MEj!ANGr@RzgxO@@r*Ecx%Jqp{TO2VvF7RUZvw@6BpOabq9JY7igWxvSo6Hp z90&Zl*U1n2x7CXV(5x!h{j7~f(ci1EgRWA6EASGs{#oH%@kulvuXqEmctd*y|881a z{rhYD6>nlydXtLUfGFe9W-`LWgD?~~soL@ER}cQa{#kdzc=(i`fH0qEgy9vQ;yeN$ zLlO8OpR&P_+&Aw(eSEWfm*srQaBMJzYa2|wti|kd8K$BRh>yX4hQWWP4W1VZX{(B& zBYf~%G5D=)@Y^x??QHNnA=f+k;E&$S`9^xS%fH3l71n0si8e|y7j;aG71UnX zYpck|C-nYr=ax zh*;V|7UenpK-`{DFTDMQM~}>J)WQ_|P}^*u=IHW5CNUlz4nc=>f>V^K_Q72H;N$Mo zd|Y13I#aKS&6(?fl#daQ14RxZ@O6+?8$AN%I>MMM=erZFS04ZBS=YrtMiwP~p>--E zu>8BMv^0p)(cUA4BB~x~7%uFlhYOv7vKfs>(*qGr2W-;69caMjZYEI`IT>FMbSz;(Rq& zoKF;0G(h||?5>y5-^((&{k#lgcfH~xm)AvdP3I!HAqKNdZjD9(08uu{;LYxCXg5e) zH@LtgBi*150K-V-^_sYhB;nU22@x#4XqG{zZnK;KPc1>_u^V1gD^nH4y0|g@ID(~* zGZKkf=KeX;+gYTfGTv+f-fW@qW()8pV3S_r(jV6I!I$$j50qEF%-0D`l#oIGSTr)% zm%&_L#>{n50oPyetw57j8cld%+)Ukk=A0h|&W~c8-yWRbo^ihTGLwhDVnrO!Dou}_!K9s~1$TIT!W_NsAt%D~@Ft&UE|93aW6C84|}cvVgLXD literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_vector.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_vector.h new file mode 100644 index 0000000..d3f1b1f --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_vector.h @@ -0,0 +1,1985 @@ +// Vector implementation -*- C++ -*- + +// Copyright (C) 2001-2020 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 > 201703L +# include +#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; + + _Vector_impl_data() _GLIBCXX_NOEXCEPT + : _M_start(), _M_finish(), _M_end_of_storage() + { } + +#if __cplusplus >= 201103L + _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 + + 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; + } + + 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 + { + _Vector_impl() _GLIBCXX_NOEXCEPT_IF( + is_nothrow_default_constructible<_Tp_alloc_type>::value) + : _Tp_alloc_type() + { } + + _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>. + _Vector_impl(_Vector_impl&& __x) noexcept + : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x)) + { } + + _Vector_impl(_Tp_alloc_type&& __a) noexcept + : _Tp_alloc_type(std::move(__a)) + { } + + _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 void _S_shrink(_Vector_impl&, size_type) { } + static void _S_on_dealloc(_Vector_impl&) { } + + typedef _Vector_impl& _Reinit; + + struct _Grow + { + _Grow(_Vector_impl&, size_type) { } + 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 void + _S_adjust(_Vector_impl& __impl, pointer __prev, pointer __curr) + { + __sanitizer_annotate_contiguous_container(__impl._M_start, + __impl._M_end_of_storage, __prev, __curr); + } + + static void + _S_grow(_Vector_impl& __impl, size_type __n) + { _S_adjust(__impl, __impl._M_finish, __impl._M_finish + __n); } + + static void + _S_shrink(_Vector_impl& __impl, size_type __n) + { _S_adjust(__impl, __impl._M_finish + __n, __impl._M_finish); } + + static 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 _Reinit(_Vector_impl& __impl) : _M_impl(__impl) + { + // Mark unused capacity as valid again before deallocating it. + _S_on_dealloc(_M_impl); + } + + ~_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 + { + _Grow(_Vector_impl& __impl, size_type __n) + : _M_impl(__impl), _M_n(__n) + { _S_grow(_M_impl, __n); } + + ~_Grow() { if (_M_n) _S_shrink(_M_impl, _M_n); } + + 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; + + _Tp_alloc_type& + _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT + { return this->_M_impl; } + + const _Tp_alloc_type& + _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT + { return this->_M_impl; } + + allocator_type + get_allocator() const _GLIBCXX_NOEXCEPT + { return allocator_type(_M_get_Tp_allocator()); } + +#if __cplusplus >= 201103L + _Vector_base() = default; +#else + _Vector_base() { } +#endif + + _Vector_base(const allocator_type& __a) _GLIBCXX_NOEXCEPT + : _M_impl(__a) { } + + // Kept for ABI compatibility. +#if !_GLIBCXX_INLINE_VERSION + _Vector_base(size_t __n) + : _M_impl() + { _M_create_storage(__n); } +#endif + + _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 + _Vector_base(_Tp_alloc_type&& __a) noexcept + : _M_impl(std::move(__a)) { } + + _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 + + _Vector_base(const allocator_type& __a, _Vector_base&& __x) + : _M_impl(_Tp_alloc_type(__a), std::move(__x._M_impl)) + { } +#endif + + ~_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; + + pointer + _M_allocate(size_t __n) + { + typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; + return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer(); + } + + 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: + 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; + } + }; + + /** + * @brief A standard container which offers fixed time access to + * individual elements in any order. + * + * @ingroup sequences + * + * @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 pointer + _S_relocate(pointer __first, pointer __last, pointer __result, + _Tp_alloc_type& __alloc) noexcept + { + using __do_it = __bool_constant<_S_use_relocate()>; + return _S_do_relocate(__first, __last, __result, __alloc, __do_it{}); + } +#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 + 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 + 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. + */ + 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). + */ + 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 + vector(const vector& __x, const allocator_type& __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: + vector(vector&& __rv, const allocator_type& __m, true_type) noexcept + : _Base(__m, std::move(__rv)) + { } + + 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 + vector(vector&& __rv, const allocator_type& __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. + */ + vector(initializer_list __l, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { + _M_range_initialize(__l.begin(), __l.end(), + random_access_iterator_tag()); + } +#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> + vector(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { + _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 + + /** + * 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. + */ + ~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. + */ + 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. + */ + 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. + */ + 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. + */ + 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> + void + assign(_InputIterator __first, _InputIterator __last) + { _M_assign_dispatch(__first, __last, __false_type()); } +#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. + */ + void + assign(initializer_list __l) + { + this->_M_assign_aux(__l.begin(), __l.end(), + random_access_iterator_tag()); + } +#endif + + /// 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. */ + size_type + size() const _GLIBCXX_NOEXCEPT + { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); } + + /** Returns the size() of the largest possible %vector. */ + 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. + */ + 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. + */ + void + resize(size_type __new_size, const value_type& __x) + { + if (__new_size > size()) + _M_fill_insert(end(), __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. + */ + void + resize(size_type __new_size, value_type __x = value_type()) + { + if (__new_size > size()) + _M_fill_insert(end(), __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(). */ + 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. + */ + size_type + capacity() const _GLIBCXX_NOEXCEPT + { return size_type(this->_M_impl._M_end_of_storage + - this->_M_impl._M_start); } + + /** + * Returns true if the %vector is empty. (Thus begin() would + * equal end().) + */ + _GLIBCXX_NODISCARD 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. + */ + 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().) + */ + 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().) + */ + 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(). + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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(). + */ + _Tp* + data() _GLIBCXX_NOEXCEPT + { return _M_data_ptr(this->_M_impl._M_start); } + + 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. + */ + 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_insert(end(), __x); + } + +#if __cplusplus >= 201103L + void + push_back(value_type&& __x) + { emplace_back(std::move(__x)); } + + template +#if __cplusplus > 201402L + 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. + */ + 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 + 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. + */ + 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. + */ + 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. + */ + 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. + */ + 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> + iterator + insert(const_iterator __position, _InputIterator __first, + _InputIterator __last) + { + difference_type __offset = __position - cbegin(); + _M_insert_dispatch(begin() + __offset, + __first, __last, __false_type()); + 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 + + /** + * @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. + */ + 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. + */ + 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. + */ + 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. + */ + void + clear() _GLIBCXX_NOEXCEPT + { _M_erase_at_end(this->_M_impl._M_start); } + + protected: + /** + * Memory expansion handler. Uses the member allocation function to + * obtain @a n bytes of memory, and then copies [first,last) into it. + */ + template + pointer + _M_allocate_and_copy(size_type __n, + _ForwardIterator __first, _ForwardIterator __last) + { + pointer __result = this->_M_allocate(__n); + __try + { + std::__uninitialized_copy_a(__first, __last, __result, + _M_get_Tp_allocator()); + return __result; + } + __catch(...) + { + _M_deallocate(__result, __n); + __throw_exception_again; + } + } + + + // 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 __n, _Integer __value, __true_type) + { + this->_M_impl._M_start = _M_allocate(_S_check_init_len( + static_cast(__n), _M_get_Tp_allocator())); + this->_M_impl._M_end_of_storage = + this->_M_impl._M_start + static_cast(__n); + _M_fill_initialize(static_cast(__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 + 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 + void + _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, + std::forward_iterator_tag) + { + const size_type __n = std::distance(__first, __last); + this->_M_impl._M_start + = this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator())); + this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; + this->_M_impl._M_finish = + std::__uninitialized_copy_a(__first, __last, + this->_M_impl._M_start, + _M_get_Tp_allocator()); + } + + // Called by the first initialize_dispatch above and by the + // vector(n,value,a) constructor. + 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. + 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 + 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 + 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 + void + _M_assign_aux(_InputIterator __first, _InputIterator __last, + std::input_iterator_tag); + + // Called by the second assign_dispatch above + template + 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. + 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 + 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 + 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 + void + _M_range_insert(iterator __pos, _InputIterator __first, + _InputIterator __last, std::input_iterator_tag); + + // Called by the second insert_dispatch above + template + 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. + void + _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); + +#if __cplusplus >= 201103L + // Called by resize(n). + void + _M_default_append(size_type __n); + + 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); +#else + // A value_type object constructed with _Alloc_traits::construct() + // and destroyed with _Alloc_traits::destroy(). + struct _Temporary_value + { + template + explicit + _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec) + { + _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(), + std::forward<_Args>(__args)...); + } + + ~_Temporary_value() + { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); } + + value_type& + _M_val() { return *_M_ptr(); } + + private: + _Tp* + _M_ptr() { return reinterpret_cast<_Tp*>(&__buf); } + + vector* _M_this; + typename aligned_storage::type __buf; + }; + + // Called by insert(p,x) and other functions when insertion needs to + // reallocate or move existing elements. _Arg is either _Tp& or _Tp. + template + void + _M_insert_aux(iterator __position, _Arg&& __arg); + + template + void + _M_realloc_insert(iterator __position, _Args&&... __args); + + // Either move-construct at the end, or forward to _M_insert_aux. + iterator + _M_insert_rval(const_iterator __position, value_type&& __v); + + // Try to emplace at the end, otherwise forward to _M_insert_aux. + template + iterator + _M_emplace_aux(const_iterator __position, _Args&&... __args); + + // Emplacing an rvalue of the correct type can use _M_insert_rval. + 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. + 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 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 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. + 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); + } + } + + iterator + _M_erase(iterator __position); + + 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. + 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. + 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 + _Up* + _M_data_ptr(_Up* __ptr) const _GLIBCXX_NOEXCEPT + { return __ptr; } + +#if __cplusplus >= 201103L + template + typename std::pointer_traits<_Ptr>::element_type* + _M_data_ptr(_Ptr __ptr) const + { return empty() ? nullptr : std::__to_address(__ptr); } +#else + template + _Up* + _M_data_ptr(_Up* __ptr) _GLIBCXX_NOEXCEPT + { return __ptr; } + + template + value_type* + _M_data_ptr(_Ptr __ptr) + { return empty() ? (value_type*)0 : __ptr.operator->(); } + + template + const value_type* + _M_data_ptr(_Ptr __ptr) const + { return empty() ? (const 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>; +#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 + 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 + /** + * @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 + inline __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 + 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 + inline bool + operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { return !(__x == __y); } + + /// Based on operator< + template + inline bool + operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { return __y < __x; } + + /// Based on operator< + template + inline bool + operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) + { return !(__y < __x); } + + /// Based on operator< + template + 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 + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_vector.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stl_vector.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..df769683595c795f1a76b8da31a9c9ee6b854512 GIT binary patch literal 85889 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf.tcc b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf.tcc new file mode 100644 index 0000000..9d79946 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf.tcc @@ -0,0 +1,175 @@ +// Stream buffer classes -*- C++ -*- + +// Copyright (C) 1997-2020 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.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 + +#pragma GCC system_header + +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*); + extern template + streamsize + __copy_streambufs_eof(basic_streambuf*, + basic_streambuf*, bool&); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template class basic_streambuf; + extern template + streamsize + __copy_streambufs(basic_streambuf*, + basic_streambuf*); + extern template + streamsize + __copy_streambufs_eof(basic_streambuf*, + basic_streambuf*, bool&); +#endif +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..81d2f0eadd0301315535e105225b828483c340d6 GIT binary patch literal 18858 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. + +/** @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 + +#pragma GCC system_header + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup iterators + * @{ + */ + + // 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*); + +#if __cplusplus >= 201103L + template + friend __enable_if_t<__is_char<_CharT2>::__value, _CharT2*> + __copy_n_a(istreambuf_iterator<_CharT2>, _Size, _CharT2*); +#endif + + 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. + 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. + 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 + friend bool + operator==(const istreambuf_iterator& __i, default_sentinel_t __s) + { return __i._M_at_eof(); } +#endif + }; + + template + inline bool + operator==(const istreambuf_iterator<_CharT, _Traits>& __a, + const istreambuf_iterator<_CharT, _Traits>& __b) + { return __a.equal(__b); } + + template + inline bool + operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, + const istreambuf_iterator<_CharT, _Traits>& __b) + { return !__a.equal(__b); } + + /// 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. + 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. + 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; + } + }; + + // 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; + } + +#if __cplusplus >= 201103L + template + __enable_if_t<__is_char<_CharT>::__value, _CharT*> + __copy_n_a(istreambuf_iterator<_CharT> __it, _Size __n, _CharT* __result) + { + 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(__result - __beg == __n, + _M_message(__gnu_debug::__msg_inc_istreambuf) + ._M_iterator(__it)); + return __result; + } +#endif // C++11 + + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf_iterator.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@streambuf_iterator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2a8df70b67c5bb8d5539478a15652badc2058ff7 GIT binary patch literal 31045 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 Forward declarations -*- C++ -*- + +// Copyright (C) 2001-2020 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 + +#pragma GCC system_header + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup strings Strings + * + * @{ + */ + + template + struct char_traits; + + template<> struct char_traits; + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> struct char_traits; +#endif + +#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; + +#ifdef _GLIBCXX_USE_WCHAR_T + /// A string of @c wchar_t + typedef basic_string wstring; +#endif + +#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/@@home@ado@git@ssp/@usr@include@c++@10@bits@stringfwd.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@stringfwd.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8d589212bca145ed43133397c0ebf87b4d6bce2b GIT binary patch literal 14989 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uniform_int_dist.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uniform_int_dist.h new file mode 100644 index 0000000..e3d7934 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uniform_int_dist.h @@ -0,0 +1,395 @@ +// Class template uniform_int_distribution -*- C++ -*- + +// Copyright (C) 2009-2020 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/uniform_int_dist.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{random} + */ + +#ifndef _GLIBCXX_BITS_UNIFORM_INT_DIST_H +#define _GLIBCXX_BITS_UNIFORM_INT_DIST_H + +#include +#include +#if __cplusplus > 201703L +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#ifdef __cpp_lib_concepts + /// Requirements for a uniform random bit generator. + template + concept uniform_random_bit_generator + = invocable<_Gen&> && unsigned_integral> + && requires + { + { _Gen::min() } -> same_as>; + { _Gen::max() } -> same_as>; + requires bool_constant<(_Gen::min() < _Gen::max())>::value; + }; +#endif + + namespace __detail + { + /* Determine whether number is a power of 2. */ + template + inline bool + _Power_of_2(_Tp __x) + { + return ((__x - 1) & __x) == 0; + } + } + + /** + * @brief Uniform discrete distribution for random numbers. + * A discrete random distribution on the range @f$[min, max]@f$ with equal + * probability throughout the range. + */ + template + class uniform_int_distribution + { + static_assert(std::is_integral<_IntType>::value, + "template argument must be an integral type"); + + public: + /** The type of the range of the distribution. */ + typedef _IntType result_type; + /** Parameter type. */ + struct param_type + { + typedef uniform_int_distribution<_IntType> distribution_type; + + param_type() : param_type(0) { } + + explicit + param_type(_IntType __a, + _IntType __b = numeric_limits<_IntType>::max()) + : _M_a(__a), _M_b(__b) + { + __glibcxx_assert(_M_a <= _M_b); + } + + result_type + a() const + { return _M_a; } + + result_type + b() const + { return _M_b; } + + friend bool + operator==(const param_type& __p1, const param_type& __p2) + { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } + + friend bool + operator!=(const param_type& __p1, const param_type& __p2) + { return !(__p1 == __p2); } + + private: + _IntType _M_a; + _IntType _M_b; + }; + + public: + /** + * @brief Constructs a uniform distribution object. + */ + uniform_int_distribution() : uniform_int_distribution(0) { } + + /** + * @brief Constructs a uniform distribution object. + */ + explicit + uniform_int_distribution(_IntType __a, + _IntType __b = numeric_limits<_IntType>::max()) + : _M_param(__a, __b) + { } + + explicit + uniform_int_distribution(const param_type& __p) + : _M_param(__p) + { } + + /** + * @brief Resets the distribution state. + * + * Does nothing for the uniform integer distribution. + */ + void + reset() { } + + result_type + a() const + { return _M_param.a(); } + + result_type + b() const + { return _M_param.b(); } + + /** + * @brief Returns the parameter set of the distribution. + */ + param_type + param() const + { return _M_param; } + + /** + * @brief Sets the parameter set of the distribution. + * @param __param The new parameter set of the distribution. + */ + void + param(const param_type& __param) + { _M_param = __param; } + + /** + * @brief Returns the inclusive lower bound of the distribution range. + */ + result_type + min() const + { return this->a(); } + + /** + * @brief Returns the inclusive upper bound of the distribution range. + */ + result_type + max() const + { return this->b(); } + + /** + * @brief Generating functions. + */ + template + result_type + operator()(_UniformRandomNumberGenerator& __urng) + { return this->operator()(__urng, _M_param); } + + template + result_type + operator()(_UniformRandomNumberGenerator& __urng, + const param_type& __p); + + template + void + __generate(_ForwardIterator __f, _ForwardIterator __t, + _UniformRandomNumberGenerator& __urng) + { this->__generate(__f, __t, __urng, _M_param); } + + template + void + __generate(_ForwardIterator __f, _ForwardIterator __t, + _UniformRandomNumberGenerator& __urng, + const param_type& __p) + { this->__generate_impl(__f, __t, __urng, __p); } + + template + void + __generate(result_type* __f, result_type* __t, + _UniformRandomNumberGenerator& __urng, + const param_type& __p) + { this->__generate_impl(__f, __t, __urng, __p); } + + /** + * @brief Return true if two uniform integer distributions have + * the same parameters. + */ + friend bool + operator==(const uniform_int_distribution& __d1, + const uniform_int_distribution& __d2) + { return __d1._M_param == __d2._M_param; } + + private: + template + void + __generate_impl(_ForwardIterator __f, _ForwardIterator __t, + _UniformRandomNumberGenerator& __urng, + const param_type& __p); + + param_type _M_param; + }; + + template + template + typename uniform_int_distribution<_IntType>::result_type + uniform_int_distribution<_IntType>:: + operator()(_UniformRandomNumberGenerator& __urng, + const param_type& __param) + { + typedef typename _UniformRandomNumberGenerator::result_type + _Gresult_type; + typedef typename std::make_unsigned::type __utype; + typedef typename std::common_type<_Gresult_type, __utype>::type + __uctype; + + const __uctype __urngmin = __urng.min(); + const __uctype __urngmax = __urng.max(); + const __uctype __urngrange = __urngmax - __urngmin; + const __uctype __urange + = __uctype(__param.b()) - __uctype(__param.a()); + + __uctype __ret; + + if (__urngrange > __urange) + { + // downscaling + const __uctype __uerange = __urange + 1; // __urange can be zero + const __uctype __scaling = __urngrange / __uerange; + const __uctype __past = __uerange * __scaling; + do + __ret = __uctype(__urng()) - __urngmin; + while (__ret >= __past); + __ret /= __scaling; + } + else if (__urngrange < __urange) + { + // upscaling + /* + Note that every value in [0, urange] + can be written uniquely as + + (urngrange + 1) * high + low + + where + + high in [0, urange / (urngrange + 1)] + + and + + low in [0, urngrange]. + */ + __uctype __tmp; // wraparound control + do + { + const __uctype __uerngrange = __urngrange + 1; + __tmp = (__uerngrange * operator() + (__urng, param_type(0, __urange / __uerngrange))); + __ret = __tmp + (__uctype(__urng()) - __urngmin); + } + while (__ret > __urange || __ret < __tmp); + } + else + __ret = __uctype(__urng()) - __urngmin; + + return __ret + __param.a(); + } + + + template + template + void + uniform_int_distribution<_IntType>:: + __generate_impl(_ForwardIterator __f, _ForwardIterator __t, + _UniformRandomNumberGenerator& __urng, + const param_type& __param) + { + __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) + typedef typename _UniformRandomNumberGenerator::result_type + _Gresult_type; + typedef typename std::make_unsigned::type __utype; + typedef typename std::common_type<_Gresult_type, __utype>::type + __uctype; + + const __uctype __urngmin = __urng.min(); + const __uctype __urngmax = __urng.max(); + const __uctype __urngrange = __urngmax - __urngmin; + const __uctype __urange + = __uctype(__param.b()) - __uctype(__param.a()); + + __uctype __ret; + + if (__urngrange > __urange) + { + if (__detail::_Power_of_2(__urngrange + 1) + && __detail::_Power_of_2(__urange + 1)) + { + while (__f != __t) + { + __ret = __uctype(__urng()) - __urngmin; + *__f++ = (__ret & __urange) + __param.a(); + } + } + else + { + // downscaling + const __uctype __uerange = __urange + 1; // __urange can be zero + const __uctype __scaling = __urngrange / __uerange; + const __uctype __past = __uerange * __scaling; + while (__f != __t) + { + do + __ret = __uctype(__urng()) - __urngmin; + while (__ret >= __past); + *__f++ = __ret / __scaling + __param.a(); + } + } + } + else if (__urngrange < __urange) + { + // upscaling + /* + Note that every value in [0, urange] + can be written uniquely as + + (urngrange + 1) * high + low + + where + + high in [0, urange / (urngrange + 1)] + + and + + low in [0, urngrange]. + */ + __uctype __tmp; // wraparound control + while (__f != __t) + { + do + { + const __uctype __uerngrange = __urngrange + 1; + __tmp = (__uerngrange * operator() + (__urng, param_type(0, __urange / __uerngrange))); + __ret = __tmp + (__uctype(__urng()) - __urngmin); + } + while (__ret > __urange || __ret < __tmp); + *__f++ = __ret; + } + } + else + while (__f != __t) + *__f++ = __uctype(__urng()) - __urngmin + __param.a(); + } + + // operator!= and operator<< and operator>> are defined in + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uniform_int_dist.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uniform_int_dist.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a5408f6ee1818387f117a6a7813dbeb5f6b7272d GIT binary patch literal 29622 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. + +/** @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 +#include +#if __cplusplus > 201703L +# include +# include +#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 + 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>> + default_delete(const default_delete<_Up>&) noexcept { } + + /// Calls `delete __ptr` + 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` + 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>> + default_delete(const default_delete<_Up[]>&) noexcept { } + + /// Calls `delete[] __ptr` + template + 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; + __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; } + + template + __uniq_ptr_impl(pointer __p, _Del&& __d) + : _M_t(__p, std::forward<_Del>(__d)) { } + + __uniq_ptr_impl(__uniq_ptr_impl&& __u) noexcept + : _M_t(std::move(__u._M_t)) + { __u._M_ptr() = nullptr; } + + __uniq_ptr_impl& operator=(__uniq_ptr_impl&& __u) noexcept + { + reset(__u.release()); + _M_deleter() = std::forward<_Dp>(__u._M_deleter()); + return *this; + } + + pointer& _M_ptr() { return std::get<0>(_M_t); } + pointer _M_ptr() const { return std::get<0>(_M_t); } + _Dp& _M_deleter() { return std::get<1>(_M_t); } + const _Dp& _M_deleter() const { return std::get<1>(_M_t); } + + void reset(pointer __p) noexcept + { + const pointer __old_p = _M_ptr(); + _M_ptr() = __p; + if (__old_p) + _M_deleter()(__old_p); + } + + pointer release() noexcept + { + pointer __p = _M_ptr(); + _M_ptr() = nullptr; + return __p; + } + + 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. + 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> + 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>> + 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>> + unique_ptr(pointer __p, + __enable_if_t::value, + _Del&&> __d) noexcept + : _M_t(__p, std::move(__d)) + { } + + template::type> + 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, + typename conditional::value, + is_same<_Ep, _Dp>, + is_convertible<_Ep, _Dp>>::type>> + 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. + ~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 + 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. + unique_ptr& + operator=(nullptr_t) noexcept + { + reset(); + return *this; + } + + // Observers. + + /// Dereference the stored pointer. + typename add_lvalue_reference::type + operator*() const + { + __glibcxx_assert(get() != pointer()); + return *get(); + } + + /// Return the stored pointer. + pointer + operator->() const noexcept + { + _GLIBCXX_DEBUG_PEDASSERT(get() != pointer()); + return get(); + } + + /// Return the stored pointer. + pointer + get() const noexcept + { return _M_t._M_ptr(); } + + /// Return a reference to the stored deleter. + deleter_type& + get_deleter() noexcept + { return _M_t._M_deleter(); } + + /// Return a reference to the stored deleter. + const deleter_type& + get_deleter() const noexcept + { return _M_t._M_deleter(); } + + /// Return @c true if the stored pointer is not null. + explicit operator bool() const noexcept + { return get() == pointer() ? false : true; } + + // Modifiers. + + /// Release ownership of any stored pointer. + 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. + */ + 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. + 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; + }; + + /// 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 + template + class unique_ptr<_Tp[], _Dp> + { + template + using _DeleterConstraint = + typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; + + __uniq_ptr_data<_Tp, _Dp> _M_t; + + template + using __remove_cv = typename remove_cv<_Up>::type; + + // 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<_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> + 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>>> + 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>>> + 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, + typename conditional::value, + is_same<_Ep, _Dp>, + is_convertible<_Ep, _Dp>>::type>> + 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. + ~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 + 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. + unique_ptr& + operator=(nullptr_t) noexcept + { + reset(); + return *this; + } + + // Observers. + + /// Access an element of owned array. + typename std::add_lvalue_reference::type + operator[](size_t __i) const + { + __glibcxx_assert(get() != pointer()); + return get()[__i]; + } + + /// Return the stored pointer. + pointer + get() const noexcept + { return _M_t._M_ptr(); } + + /// Return a reference to the stored deleter. + deleter_type& + get_deleter() noexcept + { return _M_t._M_deleter(); } + + /// Return a reference to the stored deleter. + const deleter_type& + get_deleter() const noexcept + { return _M_t._M_deleter(); } + + /// Return @c true if the stored pointer is not null. + explicit operator bool() const noexcept + { return get() == pointer() ? false : true; } + + // Modifiers. + + /// Release ownership of any stored pointer. + 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(*)[] + > + > + > + >> + void + reset(_Up __p) noexcept + { _M_t.reset(std::move(__p)); } + + void reset(nullptr_t = nullptr) noexcept + { reset(pointer()); } + + /// Exchange the pointer and deleter with another object. + 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; + }; + + /// @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 + 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 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 !__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 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 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 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 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 inline bool + operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) + { return !(nullptr < __x); } + + /// unique_ptr comparison with nullptr + template + _GLIBCXX_NODISCARD 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 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 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 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 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 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> + 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> + 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::__enable_hash_call> + struct __uniq_ptr_hash +#if ! _GLIBCXX_INLINE_VERSION + : private __poison_hash<_Ptr> +#endif + { + size_t + operator()(const _Up& __u) const + noexcept(noexcept(std::declval>()(std::declval<_Ptr>()))) + { return hash<_Ptr>()(__u.get()); } + }; + + template + struct __uniq_ptr_hash<_Up, _Ptr, false> + : private __poison_hash<_Ptr> + { }; + /// @endcond + + /// std::hash specialization for unique_ptr. + template + struct hash> + : public __hash_base>, + public __uniq_ptr_hash> + { }; + +#if __cplusplus >= 201402L + /// @relates unique_ptr @{ +#define __cpp_lib_make_unique 201304 + + /// @cond undocumented + + 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 { }; }; + + /// @endcond + + /// std::make_unique for single objects + template + inline typename _MakeUniq<_Tp>::__single_object + make_unique(_Args&&... __args) + { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); } + + /// std::make_unique for arrays of unknown bound + template + inline typename _MakeUniq<_Tp>::__array + make_unique(size_t __num) + { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]()); } + + /// Disable std::make_unique for arrays of known bound + template + inline typename _MakeUniq<_Tp>::__invalid_type + make_unique(_Args&&...) = delete; + // @} relates unique_ptr +#endif // C++14 + +#if __cplusplus > 201703L && __cpp_concepts + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2948. unique_ptr does not define operator<< for stream output + /// Stream output operator for unique_ptr + 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 + + // @} 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@unique_ptr.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@unique_ptr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2b9dfce0600e303c90a2e9ff1486029ccb99682c GIT binary patch literal 49059 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 vL$(#9xB2btw~+<-&X9K~7{?P literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uses_allocator.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uses_allocator.h new file mode 100644 index 0000000..1832d40 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uses_allocator.h @@ -0,0 +1,195 @@ +// Uses-allocator Construction -*- C++ -*- + +// Copyright (C) 2010-2020 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 +// . + +#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 + + // 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< + is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>::value, + __uses_alloc1<_Alloc>, + __uses_alloc2<_Alloc>>::type + { + // _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 + + template class _Predicate, + typename _Tp, typename _Alloc, typename... _Args> + struct __is_uses_allocator_predicate + : conditional::value, + __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>, + _Predicate<_Tp, _Args..., _Alloc>>, + _Predicate<_Tp, _Args...>>::type { }; + + 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 __a, _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)...); + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uses_allocator.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@uses_allocator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e2b8e5b94b5741068cc0412168f163c119843f71 GIT binary patch literal 22886 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 MR4BEiE<)@3KO%pN?*IS* literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@vector.tcc b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@vector.tcc new file mode 100644 index 0000000..27e6338 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@vector.tcc @@ -0,0 +1,1008 @@ +// Vector implementation (out of line) -*- C++ -*- + +// Copyright (C) 2001-2020 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/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 + 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 + 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_insert(end(), std::forward<_Args>(__args)...); +#if __cplusplus > 201402L + return back(); +#endif + } +#endif + + template + 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) + 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 + 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 + 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 + vector<_Tp, _Alloc>& + vector<_Tp, _Alloc>:: + operator=(const vector<_Tp, _Alloc>& __x) + { + if (&__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 + void + vector<_Tp, _Alloc>:: + _M_fill_assign(size_t __n, const value_type& __val) + { + if (__n > capacity()) + { + vector __tmp(__n, __val, _M_get_Tp_allocator()); + __tmp._M_impl._M_swap_data(this->_M_impl); + } + else if (__n > size()) + { + std::fill(begin(), end(), __val); + const size_type __add = __n - size(); + _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 + 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 + void + vector<_Tp, _Alloc>:: + _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, + std::forward_iterator_tag) + { + const size_type __len = std::distance(__first, __last); + + if (__len > capacity()) + { + _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 (size() >= __len) + _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start)); + else + { + _ForwardIterator __mid = __first; + std::advance(__mid, size()); + std::copy(__first, __mid, this->_M_impl._M_start); + const size_type __attribute__((__unused__)) __n = __len - size(); + _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 + 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 + 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 + 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 + 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(size_type(1), "vector::_M_realloc_insert"); + 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); + __try + { + // 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]). + _Alloc_traits::construct(this->_M_impl, + __new_start + __elems_before, +#if __cplusplus >= 201103L + std::forward<_Args>(__args)...); +#else + __x); +#endif + __new_finish = pointer(); + +#if __cplusplus >= 201103L + if _GLIBCXX17_CONSTEXPR (_S_use_relocate()) + { + __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 + { + __new_finish + = std::__uninitialized_move_if_noexcept_a + (__old_start, __position.base(), + __new_start, _M_get_Tp_allocator()); + + ++__new_finish; + + __new_finish + = std::__uninitialized_move_if_noexcept_a + (__position.base(), __old_finish, + __new_finish, _M_get_Tp_allocator()); + } + } + __catch(...) + { + if (!__new_finish) + _Alloc_traits::destroy(this->_M_impl, + __new_start + __elems_before); + else + std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator()); + _M_deallocate(__new_start, __len); + __throw_exception_again; + } +#if __cplusplus >= 201103L + if _GLIBCXX17_CONSTEXPR (!_S_use_relocate()) +#endif + 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 + void + vector<_Tp, _Alloc>:: + _M_fill_insert(iterator __position, size_type __n, const value_type& __x) + { + if (__n != 0) + { + 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(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::fill(__position.base(), __position.base() + __n, + __x_copy); + } + else + { + _GLIBCXX_ASAN_ANNOTATE_GROW(__n); + this->_M_impl._M_finish = + std::__uninitialized_fill_n_a(this->_M_impl._M_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 + { + const size_type __len = + _M_check_len(__n, "vector::_M_fill_insert"); + const size_type __elems_before = __position - begin(); + 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 + (this->_M_impl._M_start, __position.base(), + __new_start, _M_get_Tp_allocator()); + + __new_finish += __n; + + __new_finish + = std::__uninitialized_move_if_noexcept_a + (__position.base(), this->_M_impl._M_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(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 = __new_start; + this->_M_impl._M_finish = __new_finish; + this->_M_impl._M_end_of_storage = __new_start + __len; + } + } + } + +#if __cplusplus >= 201103L + template + 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) + { + _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 + { + const size_type __len = + _M_check_len(__n, "vector::_M_default_append"); + pointer __new_start(this->_M_allocate(__len)); + if _GLIBCXX17_CONSTEXPR (_S_use_relocate()) + { + __try + { + std::__uninitialized_default_n_a(__new_start + __size, + __n, _M_get_Tp_allocator()); + } + __catch(...) + { + _M_deallocate(__new_start, __len); + __throw_exception_again; + } + _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish, + __new_start, _M_get_Tp_allocator()); + } + else + { + pointer __destroy_from = pointer(); + __try + { + std::__uninitialized_default_n_a(__new_start + __size, + __n, _M_get_Tp_allocator()); + __destroy_from = __new_start + __size; + std::__uninitialized_move_if_noexcept_a( + this->_M_impl._M_start, this->_M_impl._M_finish, + __new_start, _M_get_Tp_allocator()); + } + __catch(...) + { + if (__destroy_from) + std::_Destroy(__destroy_from, __destroy_from + __n, + _M_get_Tp_allocator()); + _M_deallocate(__new_start, __len); + __throw_exception_again; + } + 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 = __new_start; + this->_M_impl._M_finish = __new_start + __size + __n; + this->_M_impl._M_end_of_storage = __new_start + __len; + } + } + } + + template + 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 + 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 + 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 + { + const size_type __len = + _M_check_len(__n, "vector::_M_range_insert"); + pointer __new_start(this->_M_allocate(__len)); + pointer __new_finish(__new_start); + __try + { + __new_finish + = std::__uninitialized_move_if_noexcept_a + (this->_M_impl._M_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(), this->_M_impl._M_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(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 = __new_start; + this->_M_impl._M_finish = __new_finish; + this->_M_impl._M_end_of_storage = __new_start + __len; + } + } + } + + + // vector + template + void + vector:: + _M_reallocate(size_type __n) + { + _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 + 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"); + _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 + 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"); + _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 + 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 + 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 + 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 + bool + vector:: + _M_shrink_to_fit() + { + if (capacity() - size() < int(_S_word_bit)) + return false; + __try + { + _M_reallocate(size()); + 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; + using _GLIBCXX_STD_C::_S_word_bit; + using _GLIBCXX_STD_C::_Bit_type; + + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@vector.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@vector.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..64b78b3dd0e16e73b6678ded87f71126cc2cc41f GIT binary patch literal 54298 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. + +/** @file cassert + * 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 assert.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.2 Assertions +// + +// No include guards on this header... + +#pragma GCC system_header + +#include +#include diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cassert.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cassert.blob new file mode 100644 index 0000000000000000000000000000000000000000..ba1d4ba2563780a3a5c8084fc1afe92c98f814e0 GIT binary patch literal 12346 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cctype b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cctype new file mode 100644 index 0000000..0881d47 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cctype @@ -0,0 +1,94 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2020 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: +// + +#pragma GCC system_header + +#include +#include + +#ifndef _GLIBCXX_CCTYPE +#define _GLIBCXX_CCTYPE 1 + +// 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_TR1 + +#undef isblank + +namespace std +{ + using ::isblank; +} // namespace std + +#endif // _GLIBCXX_USE_C99_CTYPE_TR1 + +#endif // C++11 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cctype.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cctype.blob new file mode 100644 index 0000000000000000000000000000000000000000..3493cf62f65e01eeb9c65e363d16f3ee87474f5f GIT binary patch literal 14281 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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 +// + +#pragma GCC system_header + +#include +#include + +#ifndef _GLIBCXX_CERRNO +#define _GLIBCXX_CERRNO 1 + +// 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/@@home@ado@git@ssp/@usr@include@c++@10@cerrno.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cerrno.blob new file mode 100644 index 0000000000000000000000000000000000000000..550233b0aed044d64e21c583bb10277ba57a484e GIT binary patch literal 12422 zcmbVSy^kzM5#KWz9}+^AB`3%dM4acwhn}8DNc?Td0_#N*D`e(mb)*mQTM-e)`0Y2}*k@u%~1HvjwP zRo>e!H?=DJoz5SA@?1QBmX)UNAF_Sj=Ud}!UP*UQvMg2h;a|;ei@`TecM{A>sHRrBb#&DkfAJ0!SEtLS zU0m9pXJQLIxVXkrxXJ&FW|C4Pto+-a%x|LMew`4NyBlya>A;E-l4yO zqdBh-LqTS%1voToy_uasZYKuEfV5|eXY9p?!Ee*B+u~JVL`DhI*aU9zS`YBHFIKD# zS1qK{D|7@jssc7((_PVNEx?9My$Yccpf|jc#H_1>>_B7hSv+Pik_mz-Rhc!_F578U zX4dsv-mYicCkJ0&Lj(bL4K}mxaC9OUyH!$2q<=|NGM^`W{p13GoNyg_LY9ALD&BTt zBIpCQ-tn_3@92XKngl&l`rA#GD^jr73v*2uylUaNmIBDz|F2F+< zO;-uEyUfXs!*noF~0omA5OBKB{>{Xg1iXuRC1v+s|tMS2bUB35CXt27Cz~k z`RN$6pyLS_y2Pjuvn+Ck!bE%s#fQI9(*$sKLd+ce_Ubed=@1R0OHa;;#B#C}>={CL z`g=r%S+vM%W7kIsaA6puT_-Ng8H>_o`d*e}9Kdmi%_L|TZUb5Km$e#3j zk$zaVC@9%=@{y4~e>(Z29GyTS0phnkr3j1ss)q-;HIN`1C%nfDN%zb-#ac$~0(pc4 zvFX6U2-Fc)VDY99GJKFfyE?Qk1XS+o?(Ax0Xi(Ip#X424CmB^Bd z4_~%J>VNxe2q`TlLX!Z=In?;r5dPM8VB*ar`gG(MsLHxkFLP#GXN!hdK@hI=j;h zd~l9oE#heEqDkMI;PyTTInE)@1fJf8bE?eY7J%n_-xe1wV{G^DZA8GA)mp{$b`))=uzW@ zemWV3q^Xe!K!VIin4}5fTLnlTe8)aLg&`^WL=z{J3-X|qq2PqEjM9sFxbMV9oSsOR zsCg|OhqZj!&5Lw=I5NR^IApd5ADpDei?NQX2F6(TB({`hg8h1%I&(eW%~3v_q=*p^ zqlvC>7RNkOdx7f`Ch?$C$q;gZGhqqiyQ!)!Z&hudL8xTGA3Q4iF|d6vJMjD5$ZaM% zVm0pWPUxl$V0^KI>r)mr0-qLT?+iFbuHzGn087px$;Sgz;>K2ufqB;Fx`QV=c0B?p zNsb?Avi0Ogh2+T<)xrey`JTE9@UoIN8!lTl1b3IJB)1OI6KkFNew?4ULm4LtGV24;rCaf^N z5vm%D#z#e3^uvB~LH}8f0%7189`-=vmbv1L>6jTGIv?c)g{FNh2iSZ8AznH zzH(c4H`AOzD!^X3qQTk-pyESuU329G76(ig!7*MFXJ;1BS-GrOk@;gwI8-(<&U!tb$N@nW)VkkeJZx&8KLbM@8t z{`kXRzx|!pz9l~R_@lSq`Serq&U-Ij{OsqO&F1?*fJ6!!DsP;8dgB)Mz4_fYZ(hOw LKi+(G1&jX=_{SKK literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cfloat b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cfloat new file mode 100644 index 0000000..3c20ea8 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cfloat @@ -0,0 +1,56 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2020 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/cfloat + * 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 float.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 +// + +#pragma GCC system_header + +#include +#include + +#ifndef _GLIBCXX_CFLOAT +#define _GLIBCXX_CFLOAT 1 + +#if __cplusplus >= 201103L +# ifndef DECIMAL_DIG +# define DECIMAL_DIG __DECIMAL_DIG__ +# endif +# ifndef FLT_EVAL_METHOD +# define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ +# endif +#endif + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cfloat.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cfloat.blob new file mode 100644 index 0000000000000000000000000000000000000000..64ee0557c8214277068bf49e0ff838feac90c7d8 GIT binary patch literal 12483 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 D5fdrK literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cinttypes b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cinttypes new file mode 100644 index 0000000..fa9407b --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cinttypes @@ -0,0 +1,81 @@ +// -*- C++ -*- + +// Copyright (C) 2007-2020 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/cinttypes + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_CINTTYPES +#define _GLIBCXX_CINTTYPES 1 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include + +// For 27.9.2/3 (see C99, Note 184) +#if _GLIBCXX_HAVE_INTTYPES_H +# ifndef __STDC_FORMAT_MACROS +# define _UNDEF__STDC_FORMAT_MACROS +# define __STDC_FORMAT_MACROS +# endif +# include +# ifdef _UNDEF__STDC_FORMAT_MACROS +# undef __STDC_FORMAT_MACROS +# undef _UNDEF__STDC_FORMAT_MACROS +# endif +#endif + +#ifdef _GLIBCXX_USE_C99_INTTYPES_TR1 + +namespace std +{ + // types + using ::imaxdiv_t; + + // functions + using ::imaxabs; + using ::imaxdiv; + + // GCC does not support extended integer types + // intmax_t abs(intmax_t) + // imaxdiv_t div(intmax_t, intmax_t) + + using ::strtoimax; + using ::strtoumax; + +#if defined(_GLIBCXX_USE_WCHAR_T) && _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 + using ::wcstoimax; + using ::wcstoumax; +#endif +} // namespace std + +#endif // _GLIBCXX_USE_C99_INTTYPES_TR1 + +#endif // C++11 + +#endif // _GLIBCXX_CINTTYPES diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cinttypes.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cinttypes.blob new file mode 100644 index 0000000000000000000000000000000000000000..80ee47b03c3b98ae171fd1ab0cd61e418fb73048 GIT binary patch literal 14478 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 G&VK>yDWgdM literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@clocale b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@clocale new file mode 100644 index 0000000..076bdbc --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@clocale @@ -0,0 +1,58 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2020 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 +// + +#pragma GCC system_header + +#include +#include + +#ifndef _GLIBCXX_CLOCALE +#define _GLIBCXX_CLOCALE 1 + +// 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/@@home@ado@git@ssp/@usr@include@c++@10@clocale.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@clocale.blob new file mode 100644 index 0000000000000000000000000000000000000000..86a1a7eb86d9a3eb2d6dc4323cefdb097754ba42 GIT binary patch literal 13587 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. + +/** @file include/cmath + * 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 math.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: 26.5 C library +// + +#pragma GCC system_header + +#include +#include +#include +#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS +#include_next +#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS +#include + +#ifndef _GLIBCXX_CMATH +#define _GLIBCXX_CMATH 1 + +// Get rid of those macros defined in in lieu of real functions. +#undef div +#undef acos +#undef asin +#undef atan +#undef atan2 +#undef ceil +#undef cos +#undef cosh +#undef exp +#undef fabs +#undef floor +#undef fmod +#undef frexp +#undef ldexp +#undef log +#undef log10 +#undef modf +#undef pow +#undef sin +#undef sinh +#undef sqrt +#undef tan +#undef tanh + +extern "C++" +{ +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + using ::acos; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + acos(float __x) + { return __builtin_acosf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + acos(long double __x) + { return __builtin_acosl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + acos(_Tp __x) + { return __builtin_acos(__x); } + + using ::asin; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + asin(float __x) + { return __builtin_asinf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + asin(long double __x) + { return __builtin_asinl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + asin(_Tp __x) + { return __builtin_asin(__x); } + + using ::atan; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + atan(float __x) + { return __builtin_atanf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + atan(long double __x) + { return __builtin_atanl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + atan(_Tp __x) + { return __builtin_atan(__x); } + + using ::atan2; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + atan2(float __y, float __x) + { return __builtin_atan2f(__y, __x); } + + inline _GLIBCXX_CONSTEXPR long double + atan2(long double __y, long double __x) + { return __builtin_atan2l(__y, __x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + atan2(_Tp __y, _Up __x) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return atan2(__type(__y), __type(__x)); + } + + using ::ceil; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + ceil(float __x) + { return __builtin_ceilf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + ceil(long double __x) + { return __builtin_ceill(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + ceil(_Tp __x) + { return __builtin_ceil(__x); } + + using ::cos; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + cos(float __x) + { return __builtin_cosf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + cos(long double __x) + { return __builtin_cosl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + cos(_Tp __x) + { return __builtin_cos(__x); } + + using ::cosh; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + cosh(float __x) + { return __builtin_coshf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + cosh(long double __x) + { return __builtin_coshl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + cosh(_Tp __x) + { return __builtin_cosh(__x); } + + using ::exp; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + exp(float __x) + { return __builtin_expf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + exp(long double __x) + { return __builtin_expl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + exp(_Tp __x) + { return __builtin_exp(__x); } + + using ::fabs; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + fabs(float __x) + { return __builtin_fabsf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + fabs(long double __x) + { return __builtin_fabsl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + fabs(_Tp __x) + { return __builtin_fabs(__x); } + + using ::floor; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + floor(float __x) + { return __builtin_floorf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + floor(long double __x) + { return __builtin_floorl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + floor(_Tp __x) + { return __builtin_floor(__x); } + + using ::fmod; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + fmod(float __x, float __y) + { return __builtin_fmodf(__x, __y); } + + inline _GLIBCXX_CONSTEXPR long double + fmod(long double __x, long double __y) + { return __builtin_fmodl(__x, __y); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + fmod(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return fmod(__type(__x), __type(__y)); + } + + using ::frexp; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline float + frexp(float __x, int* __exp) + { return __builtin_frexpf(__x, __exp); } + + inline long double + frexp(long double __x, int* __exp) + { return __builtin_frexpl(__x, __exp); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + frexp(_Tp __x, int* __exp) + { return __builtin_frexp(__x, __exp); } + + using ::ldexp; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + ldexp(float __x, int __exp) + { return __builtin_ldexpf(__x, __exp); } + + inline _GLIBCXX_CONSTEXPR long double + ldexp(long double __x, int __exp) + { return __builtin_ldexpl(__x, __exp); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + ldexp(_Tp __x, int __exp) + { return __builtin_ldexp(__x, __exp); } + + using ::log; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + log(float __x) + { return __builtin_logf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + log(long double __x) + { return __builtin_logl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + log(_Tp __x) + { return __builtin_log(__x); } + + using ::log10; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + log10(float __x) + { return __builtin_log10f(__x); } + + inline _GLIBCXX_CONSTEXPR long double + log10(long double __x) + { return __builtin_log10l(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + log10(_Tp __x) + { return __builtin_log10(__x); } + + using ::modf; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline float + modf(float __x, float* __iptr) + { return __builtin_modff(__x, __iptr); } + + inline long double + modf(long double __x, long double* __iptr) + { return __builtin_modfl(__x, __iptr); } +#endif + + using ::pow; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + pow(float __x, float __y) + { return __builtin_powf(__x, __y); } + + inline _GLIBCXX_CONSTEXPR long double + pow(long double __x, long double __y) + { return __builtin_powl(__x, __y); } + +#if __cplusplus < 201103L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 550. What should the return type of pow(float,int) be? + inline double + pow(double __x, int __i) + { return __builtin_powi(__x, __i); } + + inline float + pow(float __x, int __n) + { return __builtin_powif(__x, __n); } + + inline long double + pow(long double __x, int __n) + { return __builtin_powil(__x, __n); } +#endif +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + pow(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return pow(__type(__x), __type(__y)); + } + + using ::sin; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + sin(float __x) + { return __builtin_sinf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + sin(long double __x) + { return __builtin_sinl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + sin(_Tp __x) + { return __builtin_sin(__x); } + + using ::sinh; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + sinh(float __x) + { return __builtin_sinhf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + sinh(long double __x) + { return __builtin_sinhl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + sinh(_Tp __x) + { return __builtin_sinh(__x); } + + using ::sqrt; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + sqrt(float __x) + { return __builtin_sqrtf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + sqrt(long double __x) + { return __builtin_sqrtl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + sqrt(_Tp __x) + { return __builtin_sqrt(__x); } + + using ::tan; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + tan(float __x) + { return __builtin_tanf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + tan(long double __x) + { return __builtin_tanl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + tan(_Tp __x) + { return __builtin_tan(__x); } + + using ::tanh; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline _GLIBCXX_CONSTEXPR float + tanh(float __x) + { return __builtin_tanhf(__x); } + + inline _GLIBCXX_CONSTEXPR long double + tanh(long double __x) + { return __builtin_tanhl(__x); } +#endif + + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + tanh(_Tp __x) + { return __builtin_tanh(__x); } + +#if _GLIBCXX_USE_C99_MATH +#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC + +// These are possible macros imported from C99-land. +#undef fpclassify +#undef isfinite +#undef isinf +#undef isnan +#undef isnormal +#undef signbit +#undef isgreater +#undef isgreaterequal +#undef isless +#undef islessequal +#undef islessgreater +#undef isunordered + +#if __cplusplus >= 201103L + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr int + fpclassify(float __x) + { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, + FP_SUBNORMAL, FP_ZERO, __x); } + + constexpr int + fpclassify(double __x) + { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, + FP_SUBNORMAL, FP_ZERO, __x); } + + constexpr int + fpclassify(long double __x) + { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, + FP_SUBNORMAL, FP_ZERO, __x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + int>::__type + fpclassify(_Tp __x) + { return __x != 0 ? FP_NORMAL : FP_ZERO; } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + isfinite(float __x) + { return __builtin_isfinite(__x); } + + constexpr bool + isfinite(double __x) + { return __builtin_isfinite(__x); } + + constexpr bool + isfinite(long double __x) + { return __builtin_isfinite(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + bool>::__type + isfinite(_Tp __x) + { return true; } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + isinf(float __x) + { return __builtin_isinf(__x); } + +#if _GLIBCXX_HAVE_OBSOLETE_ISINF \ + && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC + using ::isinf; +#else + constexpr bool + isinf(double __x) + { return __builtin_isinf(__x); } +#endif + + constexpr bool + isinf(long double __x) + { return __builtin_isinf(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + bool>::__type + isinf(_Tp __x) + { return false; } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + isnan(float __x) + { return __builtin_isnan(__x); } + +#if _GLIBCXX_HAVE_OBSOLETE_ISNAN \ + && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC + using ::isnan; +#else + constexpr bool + isnan(double __x) + { return __builtin_isnan(__x); } +#endif + + constexpr bool + isnan(long double __x) + { return __builtin_isnan(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + bool>::__type + isnan(_Tp __x) + { return false; } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + isnormal(float __x) + { return __builtin_isnormal(__x); } + + constexpr bool + isnormal(double __x) + { return __builtin_isnormal(__x); } + + constexpr bool + isnormal(long double __x) + { return __builtin_isnormal(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + bool>::__type + isnormal(_Tp __x) + { return __x != 0 ? true : false; } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + // Note: middle-end/36757 is fixed, __builtin_signbit is type-generic. + constexpr bool + signbit(float __x) + { return __builtin_signbit(__x); } + + constexpr bool + signbit(double __x) + { return __builtin_signbit(__x); } + + constexpr bool + signbit(long double __x) + { return __builtin_signbit(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + bool>::__type + signbit(_Tp __x) + { return __x < 0 ? true : false; } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + isgreater(float __x, float __y) + { return __builtin_isgreater(__x, __y); } + + constexpr bool + isgreater(double __x, double __y) + { return __builtin_isgreater(__x, __y); } + + constexpr bool + isgreater(long double __x, long double __y) + { return __builtin_isgreater(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename + __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + && __is_arithmetic<_Up>::__value), bool>::__type + isgreater(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return __builtin_isgreater(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + isgreaterequal(float __x, float __y) + { return __builtin_isgreaterequal(__x, __y); } + + constexpr bool + isgreaterequal(double __x, double __y) + { return __builtin_isgreaterequal(__x, __y); } + + constexpr bool + isgreaterequal(long double __x, long double __y) + { return __builtin_isgreaterequal(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename + __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + && __is_arithmetic<_Up>::__value), bool>::__type + isgreaterequal(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return __builtin_isgreaterequal(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + isless(float __x, float __y) + { return __builtin_isless(__x, __y); } + + constexpr bool + isless(double __x, double __y) + { return __builtin_isless(__x, __y); } + + constexpr bool + isless(long double __x, long double __y) + { return __builtin_isless(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename + __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + && __is_arithmetic<_Up>::__value), bool>::__type + isless(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return __builtin_isless(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + islessequal(float __x, float __y) + { return __builtin_islessequal(__x, __y); } + + constexpr bool + islessequal(double __x, double __y) + { return __builtin_islessequal(__x, __y); } + + constexpr bool + islessequal(long double __x, long double __y) + { return __builtin_islessequal(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename + __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + && __is_arithmetic<_Up>::__value), bool>::__type + islessequal(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return __builtin_islessequal(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + islessgreater(float __x, float __y) + { return __builtin_islessgreater(__x, __y); } + + constexpr bool + islessgreater(double __x, double __y) + { return __builtin_islessgreater(__x, __y); } + + constexpr bool + islessgreater(long double __x, long double __y) + { return __builtin_islessgreater(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename + __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + && __is_arithmetic<_Up>::__value), bool>::__type + islessgreater(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return __builtin_islessgreater(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr bool + isunordered(float __x, float __y) + { return __builtin_isunordered(__x, __y); } + + constexpr bool + isunordered(double __x, double __y) + { return __builtin_isunordered(__x, __y); } + + constexpr bool + isunordered(long double __x, long double __y) + { return __builtin_isunordered(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename + __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + && __is_arithmetic<_Up>::__value), bool>::__type + isunordered(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return __builtin_isunordered(__type(__x), __type(__y)); + } +#endif + +#else + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + fpclassify(_Tp __f) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, + FP_SUBNORMAL, FP_ZERO, __type(__f)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + isfinite(_Tp __f) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_isfinite(__type(__f)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + isinf(_Tp __f) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_isinf(__type(__f)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + isnan(_Tp __f) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_isnan(__type(__f)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + isnormal(_Tp __f) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_isnormal(__type(__f)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + signbit(_Tp __f) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_signbit(__type(__f)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + isgreater(_Tp __f1, _Tp __f2) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_isgreater(__type(__f1), __type(__f2)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + isgreaterequal(_Tp __f1, _Tp __f2) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_isgreaterequal(__type(__f1), __type(__f2)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + isless(_Tp __f1, _Tp __f2) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_isless(__type(__f1), __type(__f2)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + islessequal(_Tp __f1, _Tp __f2) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_islessequal(__type(__f1), __type(__f2)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + islessgreater(_Tp __f1, _Tp __f2) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_islessgreater(__type(__f1), __type(__f2)); + } + + template + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + int>::__type + isunordered(_Tp __f1, _Tp __f2) + { + typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + return __builtin_isunordered(__type(__f1), __type(__f2)); + } + +#endif // C++11 +#endif /* _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC */ +#endif /* _GLIBCXX_USE_C99_MATH */ + +#if __cplusplus >= 201103L + +#ifdef _GLIBCXX_USE_C99_MATH_TR1 + +#undef acosh +#undef acoshf +#undef acoshl +#undef asinh +#undef asinhf +#undef asinhl +#undef atanh +#undef atanhf +#undef atanhl +#undef cbrt +#undef cbrtf +#undef cbrtl +#undef copysign +#undef copysignf +#undef copysignl +#undef erf +#undef erff +#undef erfl +#undef erfc +#undef erfcf +#undef erfcl +#undef exp2 +#undef exp2f +#undef exp2l +#undef expm1 +#undef expm1f +#undef expm1l +#undef fdim +#undef fdimf +#undef fdiml +#undef fma +#undef fmaf +#undef fmal +#undef fmax +#undef fmaxf +#undef fmaxl +#undef fmin +#undef fminf +#undef fminl +#undef hypot +#undef hypotf +#undef hypotl +#undef ilogb +#undef ilogbf +#undef ilogbl +#undef lgamma +#undef lgammaf +#undef lgammal +#ifndef _GLIBCXX_NO_C99_ROUNDING_FUNCS +#undef llrint +#undef llrintf +#undef llrintl +#undef llround +#undef llroundf +#undef llroundl +#endif +#undef log1p +#undef log1pf +#undef log1pl +#undef log2 +#undef log2f +#undef log2l +#undef logb +#undef logbf +#undef logbl +#undef lrint +#undef lrintf +#undef lrintl +#undef lround +#undef lroundf +#undef lroundl +#undef nan +#undef nanf +#undef nanl +#undef nearbyint +#undef nearbyintf +#undef nearbyintl +#undef nextafter +#undef nextafterf +#undef nextafterl +#undef nexttoward +#undef nexttowardf +#undef nexttowardl +#undef remainder +#undef remainderf +#undef remainderl +#undef remquo +#undef remquof +#undef remquol +#undef rint +#undef rintf +#undef rintl +#undef round +#undef roundf +#undef roundl +#undef scalbln +#undef scalblnf +#undef scalblnl +#undef scalbn +#undef scalbnf +#undef scalbnl +#undef tgamma +#undef tgammaf +#undef tgammal +#undef trunc +#undef truncf +#undef truncl + + // types + using ::double_t; + using ::float_t; + + // functions + using ::acosh; + using ::acoshf; + using ::acoshl; + + using ::asinh; + using ::asinhf; + using ::asinhl; + + using ::atanh; + using ::atanhf; + using ::atanhl; + + using ::cbrt; + using ::cbrtf; + using ::cbrtl; + + using ::copysign; + using ::copysignf; + using ::copysignl; + + using ::erf; + using ::erff; + using ::erfl; + + using ::erfc; + using ::erfcf; + using ::erfcl; + + using ::exp2; + using ::exp2f; + using ::exp2l; + + using ::expm1; + using ::expm1f; + using ::expm1l; + + using ::fdim; + using ::fdimf; + using ::fdiml; + + using ::fma; + using ::fmaf; + using ::fmal; + + using ::fmax; + using ::fmaxf; + using ::fmaxl; + + using ::fmin; + using ::fminf; + using ::fminl; + + using ::hypot; + using ::hypotf; + using ::hypotl; + + using ::ilogb; + using ::ilogbf; + using ::ilogbl; + + using ::lgamma; + using ::lgammaf; + using ::lgammal; + +#ifndef _GLIBCXX_NO_C99_ROUNDING_FUNCS + using ::llrint; + using ::llrintf; + using ::llrintl; + + using ::llround; + using ::llroundf; + using ::llroundl; +#endif + + using ::log1p; + using ::log1pf; + using ::log1pl; + + using ::log2; + using ::log2f; + using ::log2l; + + using ::logb; + using ::logbf; + using ::logbl; + + using ::lrint; + using ::lrintf; + using ::lrintl; + + using ::lround; + using ::lroundf; + using ::lroundl; + + using ::nan; + using ::nanf; + using ::nanl; + + using ::nearbyint; + using ::nearbyintf; + using ::nearbyintl; + + using ::nextafter; + using ::nextafterf; + using ::nextafterl; + + using ::nexttoward; + using ::nexttowardf; + using ::nexttowardl; + + using ::remainder; + using ::remainderf; + using ::remainderl; + + using ::remquo; + using ::remquof; + using ::remquol; + + using ::rint; + using ::rintf; + using ::rintl; + + using ::round; + using ::roundf; + using ::roundl; + + using ::scalbln; + using ::scalblnf; + using ::scalblnl; + + using ::scalbn; + using ::scalbnf; + using ::scalbnl; + + using ::tgamma; + using ::tgammaf; + using ::tgammal; + + using ::trunc; + using ::truncf; + using ::truncl; + + /// Additional overloads. +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + acosh(float __x) + { return __builtin_acoshf(__x); } + + constexpr long double + acosh(long double __x) + { return __builtin_acoshl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + acosh(_Tp __x) + { return __builtin_acosh(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + asinh(float __x) + { return __builtin_asinhf(__x); } + + constexpr long double + asinh(long double __x) + { return __builtin_asinhl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + asinh(_Tp __x) + { return __builtin_asinh(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + atanh(float __x) + { return __builtin_atanhf(__x); } + + constexpr long double + atanh(long double __x) + { return __builtin_atanhl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + atanh(_Tp __x) + { return __builtin_atanh(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + cbrt(float __x) + { return __builtin_cbrtf(__x); } + + constexpr long double + cbrt(long double __x) + { return __builtin_cbrtl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + cbrt(_Tp __x) + { return __builtin_cbrt(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + copysign(float __x, float __y) + { return __builtin_copysignf(__x, __y); } + + constexpr long double + copysign(long double __x, long double __y) + { return __builtin_copysignl(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + copysign(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return copysign(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + erf(float __x) + { return __builtin_erff(__x); } + + constexpr long double + erf(long double __x) + { return __builtin_erfl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + erf(_Tp __x) + { return __builtin_erf(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + erfc(float __x) + { return __builtin_erfcf(__x); } + + constexpr long double + erfc(long double __x) + { return __builtin_erfcl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + erfc(_Tp __x) + { return __builtin_erfc(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + exp2(float __x) + { return __builtin_exp2f(__x); } + + constexpr long double + exp2(long double __x) + { return __builtin_exp2l(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + exp2(_Tp __x) + { return __builtin_exp2(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + expm1(float __x) + { return __builtin_expm1f(__x); } + + constexpr long double + expm1(long double __x) + { return __builtin_expm1l(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + expm1(_Tp __x) + { return __builtin_expm1(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + fdim(float __x, float __y) + { return __builtin_fdimf(__x, __y); } + + constexpr long double + fdim(long double __x, long double __y) + { return __builtin_fdiml(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + fdim(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return fdim(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + fma(float __x, float __y, float __z) + { return __builtin_fmaf(__x, __y, __z); } + + constexpr long double + fma(long double __x, long double __y, long double __z) + { return __builtin_fmal(__x, __y, __z); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type + fma(_Tp __x, _Up __y, _Vp __z) + { + typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type; + return fma(__type(__x), __type(__y), __type(__z)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + fmax(float __x, float __y) + { return __builtin_fmaxf(__x, __y); } + + constexpr long double + fmax(long double __x, long double __y) + { return __builtin_fmaxl(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + fmax(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return fmax(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + fmin(float __x, float __y) + { return __builtin_fminf(__x, __y); } + + constexpr long double + fmin(long double __x, long double __y) + { return __builtin_fminl(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + fmin(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return fmin(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + hypot(float __x, float __y) + { return __builtin_hypotf(__x, __y); } + + constexpr long double + hypot(long double __x, long double __y) + { return __builtin_hypotl(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + hypot(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return hypot(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr int + ilogb(float __x) + { return __builtin_ilogbf(__x); } + + constexpr int + ilogb(long double __x) + { return __builtin_ilogbl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr + typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + int>::__type + ilogb(_Tp __x) + { return __builtin_ilogb(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + lgamma(float __x) + { return __builtin_lgammaf(__x); } + + constexpr long double + lgamma(long double __x) + { return __builtin_lgammal(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + lgamma(_Tp __x) + { return __builtin_lgamma(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr long long + llrint(float __x) + { return __builtin_llrintf(__x); } + + constexpr long long + llrint(long double __x) + { return __builtin_llrintl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + long long>::__type + llrint(_Tp __x) + { return __builtin_llrint(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr long long + llround(float __x) + { return __builtin_llroundf(__x); } + + constexpr long long + llround(long double __x) + { return __builtin_llroundl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + long long>::__type + llround(_Tp __x) + { return __builtin_llround(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + log1p(float __x) + { return __builtin_log1pf(__x); } + + constexpr long double + log1p(long double __x) + { return __builtin_log1pl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + log1p(_Tp __x) + { return __builtin_log1p(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + // DR 568. + constexpr float + log2(float __x) + { return __builtin_log2f(__x); } + + constexpr long double + log2(long double __x) + { return __builtin_log2l(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + log2(_Tp __x) + { return __builtin_log2(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + logb(float __x) + { return __builtin_logbf(__x); } + + constexpr long double + logb(long double __x) + { return __builtin_logbl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + logb(_Tp __x) + { return __builtin_logb(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr long + lrint(float __x) + { return __builtin_lrintf(__x); } + + constexpr long + lrint(long double __x) + { return __builtin_lrintl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + long>::__type + lrint(_Tp __x) + { return __builtin_lrint(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr long + lround(float __x) + { return __builtin_lroundf(__x); } + + constexpr long + lround(long double __x) + { return __builtin_lroundl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + long>::__type + lround(_Tp __x) + { return __builtin_lround(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + nearbyint(float __x) + { return __builtin_nearbyintf(__x); } + + constexpr long double + nearbyint(long double __x) + { return __builtin_nearbyintl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + nearbyint(_Tp __x) + { return __builtin_nearbyint(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + nextafter(float __x, float __y) + { return __builtin_nextafterf(__x, __y); } + + constexpr long double + nextafter(long double __x, long double __y) + { return __builtin_nextafterl(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + nextafter(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return nextafter(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + nexttoward(float __x, long double __y) + { return __builtin_nexttowardf(__x, __y); } + + constexpr long double + nexttoward(long double __x, long double __y) + { return __builtin_nexttowardl(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + nexttoward(_Tp __x, long double __y) + { return __builtin_nexttoward(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + remainder(float __x, float __y) + { return __builtin_remainderf(__x, __y); } + + constexpr long double + remainder(long double __x, long double __y) + { return __builtin_remainderl(__x, __y); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + remainder(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return remainder(__type(__x), __type(__y)); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + inline float + remquo(float __x, float __y, int* __pquo) + { return __builtin_remquof(__x, __y, __pquo); } + + inline long double + remquo(long double __x, long double __y, int* __pquo) + { return __builtin_remquol(__x, __y, __pquo); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + remquo(_Tp __x, _Up __y, int* __pquo) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return remquo(__type(__x), __type(__y), __pquo); + } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + rint(float __x) + { return __builtin_rintf(__x); } + + constexpr long double + rint(long double __x) + { return __builtin_rintl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + rint(_Tp __x) + { return __builtin_rint(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + round(float __x) + { return __builtin_roundf(__x); } + + constexpr long double + round(long double __x) + { return __builtin_roundl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + round(_Tp __x) + { return __builtin_round(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + scalbln(float __x, long __ex) + { return __builtin_scalblnf(__x, __ex); } + + constexpr long double + scalbln(long double __x, long __ex) + { return __builtin_scalblnl(__x, __ex); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + scalbln(_Tp __x, long __ex) + { return __builtin_scalbln(__x, __ex); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + scalbn(float __x, int __ex) + { return __builtin_scalbnf(__x, __ex); } + + constexpr long double + scalbn(long double __x, int __ex) + { return __builtin_scalbnl(__x, __ex); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + scalbn(_Tp __x, int __ex) + { return __builtin_scalbn(__x, __ex); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + tgamma(float __x) + { return __builtin_tgammaf(__x); } + + constexpr long double + tgamma(long double __x) + { return __builtin_tgammal(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + tgamma(_Tp __x) + { return __builtin_tgamma(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + constexpr float + trunc(float __x) + { return __builtin_truncf(__x); } + + constexpr long double + trunc(long double __x) + { return __builtin_truncl(__x); } +#endif + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + template + constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + double>::__type + trunc(_Tp __x) + { return __builtin_trunc(__x); } +#endif + +#endif // _GLIBCXX_USE_C99_MATH_TR1 +#endif // C++11 + +#if __cplusplus > 201402L + + // [c.math.hypot3], three-dimensional hypotenuse +#define __cpp_lib_hypot 201603 + + template + inline _Tp + __hypot3(_Tp __x, _Tp __y, _Tp __z) + { + __x = std::abs(__x); + __y = std::abs(__y); + __z = std::abs(__z); + if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x) + return __a * std::sqrt((__x / __a) * (__x / __a) + + (__y / __a) * (__y / __a) + + (__z / __a) * (__z / __a)); + else + return {}; + } + + inline float + hypot(float __x, float __y, float __z) + { return std::__hypot3(__x, __y, __z); } + + inline double + hypot(double __x, double __y, double __z) + { return std::__hypot3(__x, __y, __z); } + + inline long double + hypot(long double __x, long double __y, long double __z) + { return std::__hypot3(__x, __y, __z); } + + template + typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type + hypot(_Tp __x, _Up __y, _Vp __z) + { + using __type = typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type; + return std::__hypot3<__type>(__x, __y, __z); + } +#endif // C++17 + +#if __cplusplus > 201703L + // linear interpolation +# define __cpp_lib_interpolate 201902L + + template + constexpr _Fp + __lerp(_Fp __a, _Fp __b, _Fp __t) noexcept + { + if (__a <= 0 && __b >= 0 || __a >= 0 && __b <= 0) + return __t * __b + (1 - __t) * __a; + + if (__t == 1) + return __b; // exact + + // Exact at __t=0, monotonic except near __t=1, + // bounded, determinate, and consistent: + const _Fp __x = __a + __t * (__b - __a); + return __t > 1 == __b > __a + ? (__b < __x ? __x : __b) + : (__b > __x ? __x : __b); // monotonic near __t=1 + } + + constexpr float + lerp(float __a, float __b, float __t) noexcept + { return std::__lerp(__a, __b, __t); } + + constexpr double + lerp(double __a, double __b, double __t) noexcept + { return std::__lerp(__a, __b, __t); } + + constexpr long double + lerp(long double __a, long double __b, long double __t) noexcept + { return std::__lerp(__a, __b, __t); } +#endif // C++20 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#if _GLIBCXX_USE_STD_SPEC_FUNCS +# include +#endif + +} // extern "C++" + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cmath.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cmath.blob new file mode 100644 index 0000000000000000000000000000000000000000..d2268a00e9b4c30a77e3e32ca53e0fbbe8c25852 GIT binary patch literal 84789 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 sj~0+HZ?Yz{M~{W>xNnDURo&Dk32=+e(PcqX^?w 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 F{{c7)Qx*UK literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@concepts b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@concepts new file mode 100644 index 0000000..e710a5e --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@concepts @@ -0,0 +1,367 @@ +// -*- C++ -*- + +// Copyright (C) 2019-2020 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 + +#if __cplusplus > 201703L && __cpp_concepts >= 201907L + +#pragma GCC system_header + +/** + * @defgroup concepts Concepts + * @ingroup utilities + * + * Concepts for checking type requirements. + */ + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#define __cpp_lib_concepts 202002L + + // [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>; + + /// [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(add_rvalue_reference_t<_From> (&__f)()) { + static_cast<_To>(__f()); + }; + + /// [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>; + } // 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 = is_nothrow_destructible_v<_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 + { + namespace __cust_swap + { + template void swap(_Tp&, _Tp&) = delete; + + template + concept __adl_swap + = (__detail::__class_or_enum> + || __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 __cust_swap + + inline namespace __cust + { + inline constexpr __cust_swap::_Swap swap{}; + } // inline namespace __cust + } // 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>; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +#endif // C++2a + +#endif /* _GLIBCXX_CONCEPTS */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@concepts.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@concepts.blob new file mode 100644 index 0000000000000000000000000000000000000000..4699ba7f9036e060963ef7757b8b7fc26cb8b572 GIT binary patch literal 12377 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdint b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdint new file mode 100644 index 0000000..8e742fa --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdint @@ -0,0 +1,91 @@ +// -*- C++ -*- + +// Copyright (C) 2007-2020 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 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include + +#if _GLIBCXX_HAVE_STDINT_H +# include +#endif + +namespace std +{ +#ifdef _GLIBCXX_USE_C99_STDINT_TR1 + 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_TR1 + // Define the minimum needed for , etc. + using intmax_t = __INTMAX_TYPE__; + using uintmax_t = __UINTMAX_TYPE__; +#endif // _GLIBCXX_USE_C99_STDINT_TR1 +} // namespace std + +#endif // C++11 + +#endif // _GLIBCXX_CSTDINT diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdint.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdint.blob new file mode 100644 index 0000000000000000000000000000000000000000..4af44e5ba92701b343d2018e239b0b74352fa1ea GIT binary patch literal 15872 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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 +// + +#pragma GCC system_header + +#include +#include + +#ifndef _GLIBCXX_CSTDIO +#define _GLIBCXX_CSTDIO 1 + +#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/@@home@ado@git@ssp/@usr@include@c++@10@cstdio.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdio.blob new file mode 100644 index 0000000000000000000000000000000000000000..65ad074771c5390b6c0c4b58e6834fad348319e7 GIT binary patch literal 18049 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 JnJ&TL{|DiL=>`A* literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdlib b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdlib new file mode 100644 index 0000000..f42db41 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdlib @@ -0,0 +1,261 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2020 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 +// + +#pragma GCC system_header + +#include + +#ifndef _GLIBCXX_CSTDLIB +#define _GLIBCXX_CSTDLIB 1 + +#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 + +namespace std +{ + extern "C" void abort(void) throw () _GLIBCXX_NORETURN; + extern "C" int atexit(void (*)(void)) throw (); + extern "C" void exit(int) throw () _GLIBCXX_NORETURN; +#if __cplusplus >= 201103L +# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT + extern "C" int at_quick_exit(void (*)(void)) throw (); +# endif +# ifdef _GLIBCXX_HAVE_QUICK_EXIT + extern "C" void quick_exit(int) throw() _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. +#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS +#include_next +#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS +#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) { 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) throw () _GLIBCXX_NORETURN; +#endif +#if !_GLIBCXX_USE_C99_DYNAMIC + using ::_Exit; +#endif + +#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC + 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; +#endif + +#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC + extern "C" long long int (atoll)(const char *) throw (); + extern "C" long long int + (strtoll)(const char * __restrict, char ** __restrict, int) throw (); + extern "C" unsigned long long int + (strtoull)(const char * __restrict, char ** __restrict, int) throw (); +#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 + +#endif // _GLIBCXX_USE_C99_STDLIB + +} // extern "C++" + +#endif // !_GLIBCXX_HOSTED + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdlib.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstdlib.blob new file mode 100644 index 0000000000000000000000000000000000000000..e78dff1448b4ffdc7e171fa0cdeb0b8c0fe72d2e GIT binary patch literal 18429 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstring b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstring new file mode 100644 index 0000000..02199a8 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstring @@ -0,0 +1,126 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2020 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 cstring + * 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 string.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 +// + +#pragma GCC system_header + +#include +#include + +#ifndef _GLIBCXX_CSTRING +#define _GLIBCXX_CSTRING 1 + +// Get rid of those macros defined in in lieu of real functions. +#undef memchr +#undef memcmp +#undef memcpy +#undef memmove +#undef memset +#undef strcat +#undef strchr +#undef strcmp +#undef strcoll +#undef strcpy +#undef strcspn +#undef strerror +#undef strlen +#undef strncat +#undef strncmp +#undef strncpy +#undef strpbrk +#undef strrchr +#undef strspn +#undef strstr +#undef strtok +#undef strxfrm + +extern "C++" +{ +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + using ::memchr; + using ::memcmp; + using ::memcpy; + using ::memmove; + using ::memset; + using ::strcat; + using ::strcmp; + using ::strcoll; + using ::strcpy; + using ::strcspn; + using ::strerror; + using ::strlen; + using ::strncat; + using ::strncmp; + using ::strncpy; + using ::strspn; + using ::strtok; + using ::strxfrm; + using ::strchr; + using ::strpbrk; + using ::strrchr; + using ::strstr; + +#ifndef __CORRECT_ISO_CPP_STRING_H_PROTO + inline void* + memchr(void* __s, int __c, size_t __n) + { return __builtin_memchr(__s, __c, __n); } + + inline char* + strchr(char* __s, int __n) + { return __builtin_strchr(__s, __n); } + + inline char* + strpbrk(char* __s1, const char* __s2) + { return __builtin_strpbrk(__s1, __s2); } + + inline char* + strrchr(char* __s, int __n) + { return __builtin_strrchr(__s, __n); } + + inline char* + strstr(char* __s1, const char* __s2) + { return __builtin_strstr(__s1, __s2); } +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +} // extern "C++" + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstring.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cstring.blob new file mode 100644 index 0000000000000000000000000000000000000000..b81b7077fc1ba63f194714036bca7aa168dca64f GIT binary patch literal 16167 zcmcH=eXJZs{jNpSN`#Q3N~wB5Y}&rw+rFlj&jR72eKe(%wvhr1P@JQ83VVMx2(0O-o7?^;o8cHO{=4JtR&PrNor4~U#L$uA^WuG4n>*p;BAQs@#Z zPC~K}?jquXl$FrbGL7Pn6PT{!Dfghnl`puMs9K`fH7&Onw5^Cr1s z0bHU={J53C4_~=W6uuLa&;qwI?ZCImAf~Jq=o5FKxJ@y2Osn$nKL4#w$RriVC7AsM`_~0$LO? zHyb0lj+q7qgk4x%AWuXFpPfLtOjq?Yng!CNw>mU&T7}PNd+4Li}HXB z*fi4(2{FNk9KVu;ToApZb`p_vyKjYHv9n5f6vRkf5M0S?MUK~Lb%^b@qBv=*{kpJS zLOd}683e*L_)InA7(^BvR;fuM{DovCXTK)aOALVI%s9kIsH8u3JhktLKrjZhS>RIw z;cFdcVG2tZfvM$54NjF3L4^YsP0DsW%f+}gOTq|(4N_9bk0~WVG=>U@(A^;POo*Ch z2MAa4RWJ=|SuB2-rq{;gLQHl3ZgG8@ zh$Ys+Z4B3)^;%O?27ad1n=v&txps0YQ;%sv(g7zoJ!=kfxzqER5MDgJA*b?G2rNel zOv>txAnyjAhdPCd@#wb><*J@CJq%HUY84<>8bS+R#pxn*u|dg)6aaCt%Zjc-oEC+~ zZCn#V%Lp~iLKRt%f}}na#q>9Axd1F+5Q&4&%$y{ZrrA(nTEZi!CASp(8B(|Yy#PkB zsFc(os-7hvgkg@3Lvw*OW7myaWY%(99*O%w2c@Dj1)mHREQrGOhzIRRcSyk$Y^1=f z5GpDK3c5Zd-C@XT+yaJ_7R#O)T4Beqk~pYdVPaZBbyduP0`=hRPA?)lCrin~jw^w( z2;u?Spe|psa9E}ZbV|_1SU6s*M|=`Gwn4(s4_c{hY}Hi;q$VGKh|%eF!FO4}C~qu#P! z5j~4`GV;DkW-`+7SUZV{H^A0&$cd{&%lj6tn9oM*H~=35G% zFDuo96^7QlLb+<}G~5{I+>R%@|SwQ49bs_fT?IN^>Q2zxX z#1CpCN`;A=ct&73eC%pInJ}R-w`az#77ev*aktQ$R5f2Kq{EAX`KqN)a}g3!5Wadn zQ!)^T!w4GB2gE+!{SE>MqlH1>xWgeB4wZL-a;{50p;6fHusGsOD@hI4x~@~RoDN}a zB(SP0NcP9Z6EIp<*KXokv?s7YCKRPXK}54#1E@#|4OKd6(V!DBs{=2?CQu1ZL|*QP zbiB=q9fVX`=ScZa6;MUAJiApNu!x(f>h*;=U)ptC0wpMfc!l|h;G(S9S4vB5AKgLA z4SH?dQBa3^2RC{ziOHOD8>fkNh#;V{rkc(Wl~B~kna`VMcMwDy*5@pmDkJN(p)*cP z$&3Q*3%@(}rn1OIdVx3S+Js3-E^SMP4}buU3}8okGJ??ezOsEx*D2ODJa(z)r&g4! z(@{=3({%#R@*N;RmxFk2Pz`s=L=8b1M&7z10ZNOCsG{xQu|n6iG<#BGPTMp%uj%9q z>@+y?wP+8H-wpJ9Q*pDH1B2C$nV-fNj0Wr=wD4r7+7LmZPKeOZIWO3%c`Q-OTCF46 zN%*aF0;KTaRHoQtGV5Mg8&1zgT26=fu@lcLc@k03dL?r=g;vyjK#zQjC!bFh^nx)K zG64>nl$sIA;K@T%u?}%2u4F|`ofFv>HZE}TsNBUd(|||wC6|=W72ymJ)S(cL00<5; zu|ZdfvQqU0qdgick>JMZf0rX3@jH%Hdg8?esGzYRB2n%vqd7k0+tQ({oszd;1QQcr z2VIBOm6?1iNd$@yUUwAgQO<%*-AO@G`kr~HegTaIaC#F%oKY7f1*?t*t`qBxx*%;K z+|Y_u6PiV(jOqfDoi?FOWU|WzRGT`7;yoYaC>=mUC7t}V82VObja5?xwWZcVeHH2% z9DGP*%0d_BBJ^Wy@iS1}i3o@Ui5Fy|2Z&b@pnPBhdHo>^)gmi2@c^d8x%eUHtqy?!`Df~2| zDqp4njJDW%`OR7(+#L;nh1xc3}tC>pU(~jGojab|7%7CPJc$uq92K z07R%W2OQ-%aGbTDgm6PAsxASvfeq^=-pf_Uw9k8}!l{;augDZD$srBG8LF>2n@$y; zk6bAN5gs^}X|WUjf_&6^&%!{W_VZvAU& zr2CQp^D!%al}4auGWAnzH8ox;a)hP^C*zqRmBwjya6x}6DdK>EX1Lb_gIxuS1)@b_ zSZcw^ff9V_UQ~^8mxv(q(9)yG0v>2-D^6i}bmX^a)H#Z+L0ZSx6j>^2Y1}mxIi0lN zXgmlNQWs^AX(t=^mx&F}CmdCuS`ZSoTGrWBw zG+JIo)k7T&$2?VtR!f(4rqDtyWU8cSXAAbmuT@hS-*JDXOES<^+Hn8bf*BOtfwR~U zx)5pD2@Q&^@Jcj@OcRyIFXC<}{7M6@xRyml9U58zO4Q1t61t=G-Wc4KfJvMc(&>+` zWTVapnX>5mspo;of9VmJ3Laf(5Bf#9IsR-gqqcuF zWKJK*Z^r42DuhMb%dcdMIN@_P&e$Ps%gU9yT^pWs#<33{zv%EgZ{2kwxGM?$CawOO zILB(PhNbX#rTEB%s}qpOV34{-T56g;Asv^jYC@6^hAUUqR;)OwM*qQ=*Qo=`vb zz-b$g-1g4HYf@|}9=N{&i0E%{w`ENe;!o2w?GduI$G`0Rk3M&M z9^9ZE&WPY-7Vx}%5NlzZ4HIGSe&*Fv56`R~a@eS9Gj4)F=DMMm0Z#|@Ky3%+GkK{9 zucOdj)8tSgW1 znX{2SjXj9{lJ#p3-cf()a1r}p{{M)5Z(}cFzv1~;gH`W!H>KFIxoXY^PN%sVI(%yN z!Xwf4)e_FR)z-#VROOdn-S(1sX7cS6OX^l}FmeOY6!ZEN-gO8}kw?b4Y?)*_H#BZQ ze2?Aq;JZJ1^qd16pTrOQWjrT2$efdJ{Qmy-p+ir-z#*eiqMS0D%%EpBnLW|kq{P9M zjVqCZ{*xy>ed@taJ(Nm}Dj^GdEPe>jC_Cj&wqk{3`#g%&U)lB8vk%?9xgaSpzLauF z`lA@4c&&{gIbm*VY(plW{@0f}A76gaXHq6pv!GF(2ivOgJcohD^Ly_3>b7TpyKQHl zJ-i&9@h1kxl&KOhyYc6F zs-btth#n;&wIk-_vAwY!A+LXHtN+Btk8Vrp6if(&K63Z6RF`vcPV=+x-m&xfKYYjM zkVomru82hEe)D2`+b$l^%$WZj7DrAsCA+0od6 zWFNWqk3YWguKg#cWT$eXz5Pm7x?nk+NOANOv3}Xz*nJj2`uc5WedP-WfBIUE%D{Ci zq+pRuNd!9^J5imRAAbD8^I!hK8F@18=)d&}dk%dr?dXu$ za$vpmkdL}?^(WzvVKgtDn3y_y$pMij`0^g!7s!K*!zqc>feU>10~aqVN{p6wN| zvXkGDib3rVGAtJu7tpR>Qdq~hfZ2Px9NFPYQ7sSfn@w|-*F#Xpdp%Xb^X0P++@)9U zK|7K31@}SoiZM-?IhtUVlC9)bz9|Ts-Nbd9%o3tzM96td`f)rs&oFwnJqbW2gRo}= z^iaJM*b#oYi20J?!k4I`7{13jHxD=Zjm(>1dJ=msi)6LMwfb~pdRe_bUE9A1o}F;) zYu7ySlj#R`KgJi(|LXI#`3o+tAN%3NU#_2h`Kd>wcUx*(E{1o%Ipx0hFaO}ZBhtI+ z<jSRGdX7hQm>Q2+n{ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ctime b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ctime new file mode 100644 index 0000000..abac940 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ctime @@ -0,0 +1,84 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2020 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/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 +// + +#pragma GCC system_header + +#include +#include + +#ifndef _GLIBCXX_CTIME +#define _GLIBCXX_CTIME 1 + +// 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/@@home@ado@git@ssp/@usr@include@c++@10@ctime.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ctime.blob new file mode 100644 index 0000000000000000000000000000000000000000..2efc299f4ae47ba3dae536098524352ca08b9af2 GIT binary patch literal 14434 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 AlK=n! literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwchar b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwchar new file mode 100644 index 0000000..21857fa --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwchar @@ -0,0 +1,306 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2020 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 +// + +#pragma GCC system_header + +#include + +#if _GLIBCXX_HAVE_WCHAR_H +#include +#endif + +#ifndef _GLIBCXX_CWCHAR +#define _GLIBCXX_CWCHAR 1 + +// 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/@@home@ado@git@ssp/@usr@include@c++@10@cwchar.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwchar.blob new file mode 100644 index 0000000000000000000000000000000000000000..31717edcac40bf638575fe25019b304e86cb91f7 GIT binary patch literal 22440 zcmcIs33L=yy6#GX=7osJ)F5Vp^ss~w(rLmlsHh`~BH*};qljx!sjg0nRCl#i)#>0e zM@46Nb5vZ$ec|CQo9npYHZF(@Dh{AQVFV}4=u^k@aCr|6{r>;ns_I)^w>q6sIVU+q z>MsBP{ri7!cT;4~@bzCkS0O~=9Y#ux%LyaiuGw+R%EWEevdJ$gBb%0LwkVlQq*Br4 zbbGm@V>!d@)Y9#-gl4LWZI}xW5AGA`s}bT^%ZzJjMb9SGc=y3mrKwY5x|Ys%$J*1` zc$;Qh@swju!}QJ<78TT1GNY{v<1QaYPz1N4B%S(5s^Z!KMG)6%x? zTg^owsmgZNR0qPHrRsn(cQrnymYvWHN!L=`Ifyv-g#!~2i)HJQthXC&vPDoqb@K7Z z-??oes8>$TaM$Ng$;qGwHh@wlB-TPJt|ZhXf4IX#7g0-|n5ild9xM8W}V! zuKHWH2?pISWfqK6(J40@e-m6h^j9_uH3i5&T)yq+z?PVoR3Np(fB@!PY#l zz(PUHR+Ye^Sr#?3evnH@u4BNp1A_zPv75oOW^kvmqriwXMbZo_1UGgp1-LDnEMu(0 zYEo9zGIRtqDg|V~q|T(NsuI|cmM#k+9iZ3vM#7S=bjT)XY!?@g0F1;0!IV-lOG_nU z302W!mYr?m+jU^NZ{vv*A%cLr2Ae5wb95pDcB@1sas7crCGETrU+-f8kdtf^Jt3EV zTTAh6hg}4HKpS;@+(n$R8r3k4rn8Ij@gxez3yC1YjE*X$Xen7oztyFh7C0NEBoH56 zN(`$XD!@Z04KpQy*OU@KIG3-0Y7ot${zH;dZ5Uisi61{5N)+@JrX5ZVwY2c}WXqJ% z#gCONu#jy@NLwj!v*X=B>|-6wCa&vUsaR`k9G^+{7H@5BnbgwiiARzk=zx(+DY+YB zxz?VhAgnz=^oMd61RA3lCjH{JAnqEe6v`Ab#y!{ER+ROWl0yz9$QJ?bN?d5bsvNr1 zZaYrMhY$dMF-eoIfS+bTb96k!g_a^zk^)&|00p1;5Qf;~g%4u8)q!x>bPRKqGiN`MQ)7;T%<0CUEqZpYLvS&yYuyTeEzDq*US zR&yK{Sa4Hn3d)gWjw}<D+knyIP%$YRD4ea33A}gIa*-XUctZkH^VPaT9 zag`YZ8S25v351Bnwk<(CT=0?a z_lZnxEL)1Em8y+d{%BrI{a1*uc7{Xl3^v`5?NhHR(R5f!8|jeLJb*c4N99@DRuk{m!(Gq73f!yY&Dg^@};a= zic-1IlE6FYPJ$Qa{K?oP&0a&ag)dobc*F|&U2=VASV=+2rYSGvNT0tu@keoV0wDhPbzg;W9affx3@2S$1qm$I6ny$e`xnrA z<|lXTSkx!bKne<1p}?alu?(cFDsfd|Xc4DlP^SY{hE*bWId=2Xc1Zf)G#kQ|N+v?S z0LgQx?6yw$E58H7P9~xc&)l7%NljNFM+FzpQ6F|W%c};sXz}$UnThE}dmGLOh=V`F zQTkNYR=c^=9GYke2>_L@UiC0h?E-XnA;-a z*szN!7NJzT2Ue$(!;_enP}8<%FXZyXZb9-D&)hgt;qw7S^n#TC04pFD^sx{LFlpjS zh9$!Z9w8ZP4x8p&R`}FumLg+i14onGSXMkkm+C z>ET-zB9MGIc}E~0by!e{IdMpG-%|?>A3%Ho9PilRXZQ(8K&!2cuG!&A9YC9LHzZ>X zam}ny3VDGU46r3LZiQY5m0L@-a`_$_)iXS7HOTMaWmM^Wh`Y4=U3b zA&<7~9D;@&i6}G&XD|t05bq*DdO$n!;ioJ_N;Hwg6G$H3tc09`5{_LIwPc=6JFN_* zuJqW|sFr$%vHY@{FH-Mfh!0P4aQWFm=FI zjRxmg=cy)K(Xq-$0CiyM6d&)UMd(ZH1IJpSb6KWn$_-%-4pGw~htsaWi4zUyn@AB1 zOOojke*ho8+&woCOGDqy$d$)G%R@Vy3&8b)q@2}D8oh#Bh0||m;e-W z*(Qs$68+aC4@+>m250tEBc3B+n=v<@W$0#}mY3)C!@Ip~6#9Up-Nhbwc--gLS zoyEYDPFY=2JfP5cb!Y%2qP4VgD~~s7#dsZyJD#N(vW4X+mW6_jTdDC8L04O{p+x9*E>z*UO235Txp;{SK72C56H*pu#H2%I z&ZA3Q`K5Pk0WSpO=tUjn^oLNH;OZj$lq}Qmwy3Gu9VJ?WSe0V$Cu^E2Tx{$YG?HFf z<-0m)ex-OWnvX86JfTDyNY{u{t_JkYxmQgvzVz0zZplE^sK5ni8G1}`2~MU>=76W6 zCougQo+pX2+bgU(LE=}^(XwNyR}9;RWPmkxsBi1gbcd`)1F&Kkof@2m8D1i1g+yb%M&Z#!=t)0|o0je}I{Es~U)iA# z@axnP1)3^ODt#xL-4mX@cEw!ZG}p~k{vvW{?N^cit^F?2CkVCE^VT;@uB`b)X#l%b z&2%)IhSPEATSoClFa4E+P-A3uy^*AdQL>U`N1G(Ljf`24Vn-z@4bHE*@Xr4d42rx4 z_X0!FmrjU6R$$~BCq$-985$w~YVmhvUzH%j&)6!VuU2S+pK0(kL8ybDrYa#{H~u<( z{)P+wNn1XJ{XiL}P0K;?q;!~#4278jO_HQEN69!8A20w!Pl!aDh6ue?y~Fw{s)WB+ z?YszS$gj*w6OKOiH^=5jDVKcw{xdgTpI>>`;ET4se8di6=kT3l^Xm?IbHmSm`Rvz~ zePgHBRwCW`OL8~Q`(#zyI0r^&i=1LYgRZR+8-PWCSuABaAkDj*R5UPS6~L;mAA-9@ zA_OeqA@QNn0Lnc(#+(w_E2cVoBg(l9w94&dNs-~LOWAIYwzRZNhzuX@TlsbIbzC`n z@`8)%-@Ns=%*tH@Sz3}HPg0~VnN&f5IGoVpUaZK4RpKfTcmAlF6-V4Kd;Ss5Ui3C$ zG?TS+iYHM?LZs;ZJ%ov-OcNsY^))Omw~DtO2rHg=;dDkd02cn3Ok=RVd7V(&Dv7q>`am`P*$*`(jqCtiV9oT z)v;SwJTE>ETldw0t<(t(K*Z`LbH;tKbjTi7cu7}!1q>M@2AwR$xT`Q>QXR(1;7;*Q zB;v^CbkA7ryU$%2fL4MCvTy;0$d&##T&zB&yhFSLmGaxj)ayGcH!kw?g+23R ztE?4wi+7`M8VM+mBpzwx`a`}v`TnB~h8inJi7AC;nNXu`dakm_Mwf}p5RMJ=fA``? z$BVZ!1SA~-_-K$KusligT*GzZb-3-lE9;ki{+BWTVz%ungYW)yh!uFn1L6a)Ro@r@ zdyLQsn>Md+`sC!+Nt>8WEmxx%ukTmsg1axDX$Esv{K8UkDf+5!Cp;jYxohc989KUt zK&f*LEQF+r72*oi$S8mmB^o*Foi#g0-);6f#Cf=Y|H-tOoxzv@FF45H{j`i-(7tHY zC!06LH$gUAhHn`QK~Tu=BfNY0xcmNZl(T73_V8mR52Hu3G*$LhLh?{4pw0}2O5jdy{e&L>%Jh+)00aJ6_fI{JHdop?ob$S)T&ia^%0f+#ae znFG8_*d|6u-)7f{*WhN-M;~1B>58S(T>9O3mPBW2g~T)53mC<0r=LxWLfKW~Rk&&L z^cx0`T)F3;?xqfC)PEP4C`4i(B*XAtrm2V;sO>?lZaD z#M{v1es#&|r@#5gF^9NxxXfcPhnz3qYl%|3x=$AN49L%D#d>i)(71W{=FvoxtF^C% zlMdf!x4RLgwaqpl51~LZ;lC*HxKg|l6OWsAcRjRz+kdw@OE?ZF)n@8y+M$%65wfnT zynN7y_Ko6=i1x$<#*b7bj2Pi#^hNPSWc2*1+G{thz0TlQ0}9@P^K=Wd#SmVh2&fgdS8X4P zMZkwuJGvo{smQNa@4U2g_wt|T?;o-udEA`pD}^1ycZ|-zwPpK^2cBJV9FzMe>pmQ0 zY+UM(z)k{Qun@-nsj+Z?XU4dJ(h0#nllYVPCp3u}%cFm5Trl1Z!38xVy6Wn_KfTRh z0!@wOd#GSRJ&G!lo5Y)ldd%MV#kec>?(iD`C`iEo81j4tj!(`{h)skz^)+HxK- zw_jW^Z^e;Mt*Xd>6FqER&(MALCAmf3O=cK#Teq^gcIKil9$^@S7_KKdybv3ydNqb8z*HG2J9IkZ90P z!Ht5#g2RXVO!->zS~O+DJbS-$A3e=t76cKb;qE}$9*0kVk)=N+K85s;x~k{hpEY$a zceX1C-O9LW1|vtHgd^SJEWf_qXZp{G&!BoW4{ph>Y~Iku71;OFY(B$90$U@lL5BB} zmVLeJKkqo*&oKB$=&}KOA!?o|G<0al^G8Hz=P)!tfGW2Y=kox!h_|2zc<-~-H?JA{ z;V}WAur(P96gT=XF2b73P?#=gVG&B}#C3?$TldHEUq1Q7@eU0nH=|$8KwD6HBB+hb zW&`R$H8l7Nu-)Qrpa8xUrU`zq_!+ zK0WoGTEFUm(vSu%lxx8bEu%M{8T}Zl^R)Ohs?Ox8i}t;K!NjW^3R#K$fC4MB?`Oql z(Z2udk!;VD;GNbY2i&K%$nP{npuo z`jYby{Iqnw)i%vAr^h4FL3$A){6G@7sztS(o)CB6kapqC^}{p*Gelh0WF ze2}T`q?uv`#uzqNQ`q+*(W;2om&KQnSNAL}z^ikZ7vL4#PJvT4bcY7UiVflh*b0yC z2-9b6TwV8%ixRVnr__;# zlGn8=M55~aq7h3zAN<_NW70Bw_B#XL>jS+xI3|_3^(P9 zPI{Sx(Ma=D#~nu^-{EpX@0{MbAgWW(e`Dyqt3Ij=tUz2L{F3ZQQ&Z90%f-vViZVX3 z;6IffP+sizPFo}SaqAaEZtttJif6$=>qzbG_s?1TRJ%(A^X)H%Bh*M^qYI+97G>oK z@dymIXH@SQwDzEH<`iTA08sSzikz6W@dE`>BN>Go2Jixo)uY}>tEHyK`wt!{*PPG% zUxIrT@GSz-^P?B~{)*pgrR%C5cmYyxJ>-ys$=`i55~?k0Fy8k^=SD4#{tx&Uk4I-r zoY;C$&4nyY@FijRv7_Q8ZL`%!YDNd$>o9cu%u^9rrrNG{(+^kTmC&NM$Rni21vmYveU=m+IpAMJIW@@@g)b$z|dAm~maRfmg**9pSm zk?9qS#l`TnIPytFUp2VKY61QSzaxG72o-(%!(a9%f7u`YG7-J%-f&<(6n=(-FC7U_ zBgs<~o}%Pw3_Oh?PvhZfJb7w_r$+KL0iGt{)BgGQ2QRy4;o(Pp%epP0?H=SKR#l?ppLc4TUWyj$tGp%1d@Ok~)wyoK8aJPIG5BOmmxf43$_CiG?s@R;8B@o_q+@?Q`=}Z7=1DV7n=$LilVQID$3T?CFi`X=+6v6X zhsIkf@b~0MUVy>*sShcOKOBA8N*|$TR-ZX#y0E-@IsEP$1%!?g;3>ai&B&*sJ1Rc) zjg_h;V0d-)YWUqZ8pe(m5CHco62p`$_uhtH!c(u<>+rPmtewbHV(vb(-@Bsf9(H}< z(&|eQB=<&>yB=iUk)cD0P^b6KBto6kJ2OLt+OabY%e^!7hOds<{XehymRnrE_$XNJ z?uk3j?0WTa|5ksD{Bb(G`@^XZu9$WE+||B$A4fhu4Bq|y!;M2;*gEbf?7Pa-s!s!W z?y9~E;i?A+>IqzTE#0Jlc6oF=JGSDp>d$ag1B_}QqujhJ$k?V|Z8{nm+tjk@Xv)~; zm{XKbEdEBrqR Ci{noK literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwctype b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwctype new file mode 100644 index 0000000..5190ce8 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwctype @@ -0,0 +1,110 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2020 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/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: +// + +#pragma GCC system_header + +#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 + +#ifndef _GLIBCXX_CWCTYPE +#define _GLIBCXX_CWCTYPE 1 + +// 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/@@home@ado@git@ssp/@usr@include@c++@10@cwctype.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@cwctype.blob new file mode 100644 index 0000000000000000000000000000000000000000..982b6fac00e8f674896de9f024a6a37513b181d8 GIT binary patch literal 15097 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. + +/** @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 + +#ifndef _GLIBCXX_DEBUG + +# define _GLIBCXX_DEBUG_ASSERT(_Condition) +# define _GLIBCXX_DEBUG_PEDASSERT(_Condition) +# define _GLIBCXX_DEBUG_ONLY(_Statement) + +#endif + +#ifndef _GLIBCXX_ASSERTIONS +# define __glibcxx_requires_non_empty_range(_First,_Last) +# define __glibcxx_requires_nonempty() +# define __glibcxx_requires_subscript(_N) +#else + +// Verify that [_First, _Last) forms a non-empty iterator range. +# define __glibcxx_requires_non_empty_range(_First,_Last) \ + __glibcxx_assert(__builtin_expect(_First != _Last, true)) +# define __glibcxx_requires_subscript(_N) \ + __glibcxx_assert(__builtin_expect(_N < this->size(), true)) +// Verify that the container is nonempty +# define __glibcxx_requires_nonempty() \ + __glibcxx_assert(__builtin_expect(!this->empty(), true)) +#endif + +#ifdef _GLIBCXX_DEBUG +# 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 +#endif + +#endif // _GLIBCXX_DEBUG_ASSERTIONS diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@assertions.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@assertions.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..aec660fa343a1a4d9bcdf97ef4f9a0d6cadf6c1a GIT binary patch literal 12963 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 E4@~;XC;$Ke literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@debug.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@debug.h new file mode 100644 index 0000000..5c858e1 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@debug.h @@ -0,0 +1,137 @@ +// Debugging support implementation -*- C++ -*- + +// Copyright (C) 2003-2020 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; +} + +#ifndef _GLIBCXX_DEBUG + +# 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) +# define __glibcxx_requires_string(_String) __glibcxx_check_string(_String) +# define __glibcxx_requires_string_len(_String,_Len) \ + __glibcxx_check_string_len(_String,_Len) +# 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/@@home@ado@git@ssp/@usr@include@c++@10@debug@debug.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@debug@debug.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..398ffdce3f18d955746e64428c412d42dffef1ea GIT binary patch literal 16396 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. + +/** @file exception + * This is a Standard C++ Library header. + */ + +#ifndef __EXCEPTION__ +#define __EXCEPTION__ + +#pragma GCC system_header + +#pragma GCC visibility push(default) + +#include +#include + +extern "C++" { + +namespace std +{ + /** @addtogroup exceptions + * @{ + */ + + /** If an %exception is thrown which is not listed in a function's + * %exception specification, one of these may be thrown. */ + 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) (); + + /// If you write a replacement %unexpected handler, it must be of this type. + typedef void (*unexpected_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__)); + + /// Takes a new handler function as an argument, returns the old function. + unexpected_handler set_unexpected(unexpected_handler) _GLIBCXX_USE_NOEXCEPT; + +#if __cplusplus >= 201103L + /// Return the current unexpected handler. + unexpected_handler get_unexpected() noexcept; +#endif + + /** The runtime will call this function if an %exception is thrown which + * violates the function's %exception specification. */ + void unexpected() __attribute__ ((__noreturn__)); + + /** [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 @c unexpected() + * due to the throw; or after entering @c terminate() for any reason + * other than an explicit call to @c terminate(). [Note: This includes + * stack unwinding [15.2]. end note]' + * + * 2: 'When @c uncaught_exception() is true, throwing an + * %exception can result in a call of @c terminate() + * (15.5.1).' + */ + _GLIBCXX17_DEPRECATED + bool uncaught_exception() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); + +#if __cplusplus >= 201703L || !defined(__STRICT_ANSI__) // c++17 or gnu++98 +#define __cpp_lib_uncaught_exceptions 201411L + /// The number of uncaught exceptions. + int uncaught_exceptions() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); +#endif + + // @} group exceptions +} // namespace std + +namespace __gnu_cxx +{ +_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++" + +#pragma GCC visibility pop + +#if (__cplusplus >= 201103L) +#include +#include +#endif + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@exception.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@exception.blob new file mode 100644 index 0000000000000000000000000000000000000000..a52cb9aae82f4c70939474042608932f0dae0598 GIT binary patch literal 17198 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. + +/** @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 + +#pragma GCC system_header + +#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 could just use alignof(_Tp) instead, but older + // versions of non-GNU compilers might still need this trick. + struct _Tp2 { _Tp _M_t; }; + + alignas(__alignof__(_Tp2::_M_t)) 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 + : std::aligned_storage + { + typename + std::aligned_storage::type _M_storage; + + __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/@@home@ado@git@ssp/@usr@include@c++@10@ext@aligned_buffer.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@aligned_buffer.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..52b3e5a1918338f7d71fd44bbaa249dcfb6070ee GIT binary patch literal 16057 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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 + +#pragma GCC system_header + +# include +#if __cplusplus < 201103L +# include // for __alloc_swap +#endif + +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 + 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 + 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)); } + + static constexpr _Alloc _S_select_on_copy(const _Alloc& __a) + { return _Base_type::select_on_container_copy_construction(__a); } + + static _GLIBCXX14_CONSTEXPR void _S_on_swap(_Alloc& __a, _Alloc& __b) + { std::__alloc_on_swap(__a, __b); } + + static constexpr bool _S_propagate_on_copy_assign() + { return _Base_type::propagate_on_container_copy_assignment::value; } + + static constexpr bool _S_propagate_on_move_assign() + { return _Base_type::propagate_on_container_move_assignment::value; } + + static constexpr bool _S_propagate_on_swap() + { return _Base_type::propagate_on_container_swap::value; } + + static constexpr bool _S_always_equal() + { return _Base_type::is_always_equal::value; } + + 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; + + _GLIBCXX_NODISCARD static pointer + allocate(_Alloc& __a, size_type __n) + { return __a.allocate(__n); } + + template + _GLIBCXX_NODISCARD static pointer + allocate(_Alloc& __a, size_type __n, _Hint __hint) + { return __a.allocate(__n, __hint); } + + static void deallocate(_Alloc& __a, pointer __p, size_type __n) + { __a.deallocate(__p, __n); } + + template + static void construct(_Alloc& __a, pointer __p, const _Tp& __arg) + { __a.construct(__p, __arg); } + + static void destroy(_Alloc& __a, pointer __p) + { __a.destroy(__p); } + + static size_type max_size(const _Alloc& __a) + { return __a.max_size(); } + + static const _Alloc& _S_select_on_copy(const _Alloc& __a) { return __a; } + + 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/@@home@ado@git@ssp/@usr@include@c++@10@ext@alloc_traits.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@alloc_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6c3323b130284799783b10bc042a15790706b3a3 GIT binary patch literal 18189 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. + +/** @file ext/atomicity.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _GLIBCXX_ATOMICITY_H +#define _GLIBCXX_ATOMICITY_H 1 + +#pragma GCC system_header + +#include +#include +#include + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // 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) + { +#ifdef __GTHREADS + if (__gthread_active_p()) + return __exchange_and_add(__mem, __val); +#endif + return __exchange_and_add_single(__mem, __val); + } + + inline void + __attribute__ ((__always_inline__)) + __atomic_add_dispatch(_Atomic_word* __mem, int __val) + { +#ifdef __GTHREADS + if (__gthread_active_p()) + { + __atomic_add(__mem, __val); + return; + } +#endif + __atomic_add_single(__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/@@home@ado@git@ssp/@usr@include@c++@10@ext@atomicity.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@atomicity.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8a379a14f81ee31fdab0b53db8c72a6042463ace GIT binary patch literal 14873 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 JtB!+&{|BFoQzZZZ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@concurrence.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@concurrence.h new file mode 100644 index 0000000..db3d9e7 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@concurrence.h @@ -0,0 +1,315 @@ +// Support for concurrent programing -*- C++ -*- + +// Copyright (C) 2003-2020 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 + +#pragma GCC system_header + +#include +#include +#include +#include +#include + +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. + static 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 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@concurrence.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@concurrence.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6ff32f584c052dbe03298c9ce42370da612cbdae GIT binary patch literal 21974 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 F{{wpLMH>JB literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@new_allocator.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@new_allocator.h new file mode 100644 index 0000000..131718b --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@new_allocator.h @@ -0,0 +1,198 @@ +// Allocator that wraps operator new -*- C++ -*- + +// Copyright (C) 2001-2020 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/new_allocator.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _NEW_ALLOCATOR_H +#define _NEW_ALLOCATOR_H 1 + +#include +#include +#include +#include +#if __cplusplus >= 201103L +#include +#endif + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief An allocator that uses global new, as per [20.4]. + * @ingroup allocators + * + * This is precisely the allocator defined in the C++ Standard. + * - all allocation calls operator new + * - all deallocation calls operator delete + * + * @tparam _Tp Type of allocated object. + */ + 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 + + _GLIBCXX20_CONSTEXPR + new_allocator() _GLIBCXX_USE_NOEXCEPT { } + + _GLIBCXX20_CONSTEXPR + new_allocator(const new_allocator&) _GLIBCXX_USE_NOEXCEPT { } + + template + _GLIBCXX20_CONSTEXPR + new_allocator(const new_allocator<_Tp1>&) _GLIBCXX_USE_NOEXCEPT { } + +#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 + + // 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 (__n > this->_M_max_size()) + std::__throw_bad_alloc(); + +#if __cpp_aligned_new + if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) + { + std::align_val_t __al = std::align_val_t(alignof(_Tp)); + return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp), __al)); + } +#endif + return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); + } + + // __p is not permitted to be a null pointer. + void + deallocate(_Tp* __p, size_type __t) + { +#if __cpp_aligned_new + if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) + { + ::operator delete(__p, +# if __cpp_sized_deallocation + __t * sizeof(_Tp), +# endif + std::align_val_t(alignof(_Tp))); + return; + } +#endif + ::operator delete(__p +#if __cpp_sized_deallocation + , __t * sizeof(_Tp) +#endif + ); + } + +#if __cplusplus <= 201703L + size_type + max_size() const _GLIBCXX_USE_NOEXCEPT + { return _M_max_size(); } + +#if __cplusplus >= 201103L + template + void + construct(_Up* __p, _Args&&... __args) + noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) + { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } + + template + 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 + void + construct(pointer __p, const _Tp& __val) + { ::new((void *)__p) _Tp(__val); } + + void + destroy(pointer __p) { __p->~_Tp(); } +#endif +#endif // ! C++20 + + template + friend _GLIBCXX20_CONSTEXPR bool + operator==(const new_allocator&, const new_allocator<_Up>&) + _GLIBCXX_NOTHROW + { return true; } + +#if __cpp_impl_three_way_comparison < 201907L + template + friend _GLIBCXX20_CONSTEXPR bool + operator!=(const new_allocator&, const new_allocator<_Up>&) + _GLIBCXX_NOTHROW + { return false; } +#endif + + private: + _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/@@home@ado@git@ssp/@usr@include@c++@10@ext@new_allocator.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@new_allocator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f5515cf66bd144b7965a56832e60a9426f642905 GIT binary patch literal 18862 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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 + +#pragma GCC system_header + +#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) \ + template<> struct __is_integer_nonstrict \ + { \ + enum { __value = 1 }; \ + typedef std::__true_type __type; \ + enum { __width = WIDTH }; \ + }; \ + 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; + + template + struct __numeric_traits + : public __conditional_type<__is_integer_nonstrict<_Value>::__value, + __numeric_traits_integer<_Value>, + __numeric_traits_floating<_Value> >::__type + { }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#undef __glibcxx_floating +#undef __glibcxx_max_digits10 +#undef __glibcxx_digits10 +#undef __glibcxx_max_exponent10 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@numeric_traits.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@numeric_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..9aa51ce26c29458e886f968575d476e5418c0c8a GIT binary patch literal 18794 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. + +/** @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 + +#pragma GCC system_header + +#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/@@home@ado@git@ssp/@usr@include@c++@10@ext@string_conversions.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@string_conversions.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..43e684110e8a56ae400cb620ef3b76175e3971c9 GIT binary patch literal 17610 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@type_traits.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@type_traits.h new file mode 100644 index 0000000..cf773cf --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@type_traits.h @@ -0,0 +1,221 @@ +// -*- C++ -*- + +// Copyright (C) 2005-2020 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 + +#pragma GCC system_header + +#include +#include + +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 + inline bool + __is_null_pointer(_Type* __ptr) + { return __ptr == 0; } + + template + inline bool + __is_null_pointer(_Type) + { return false; } + +#if __cplusplus >= 201103L + inline bool + __is_null_pointer(std::nullptr_t) + { return true; } +#endif + + // For complex and cmath + 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; }; + + 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; + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +} // extern "C++" + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@type_traits.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ext@type_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..aec99002376bebd771219c9d0accfab87ce44235 GIT binary patch literal 21270 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@filesystem b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@filesystem new file mode 100644 index 0000000..6a80abf --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@filesystem @@ -0,0 +1,53 @@ +// -*- C++ -*- + +// Copyright (C) 2014-2020 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 + +#pragma GCC system_header + +#if __cplusplus >= 201703L + +/** + * @defgroup filesystem File System + * + * Utilities for performing operations on file systems and their components, + * such as paths, regular files, and directories. + */ + +#include +#include +#include +#include + +#define __cpp_lib_filesystem 201703 + +#endif // C++17 + +#endif // _GLIBCXX_FILESYSTEM diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@filesystem.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@filesystem.blob new file mode 100644 index 0000000000000000000000000000000000000000..75488d02ec28033ffebc17d3b4dd9a499ccc3e72 GIT binary patch literal 12377 zcmbVSy^kzM5#KWj9|?hloke zol}TGLIea5knnGqhz!XwNDz{clJM~!Rne!u#HDrLQ0x;i^F?X9V|*~YY5xu$)1 zV|vf(e_y`HJKN@_R%N%*`Te(U#Lcs;GRGO<1w{vV;WJKirs^V zvmXLXBo^yRA^GU+jj~D>tglo|g zvh+Js@wO8mf<9pF9Ups0SZln7F`6D9#^Xr}$Av@?;l4zbQl^q6`mHi4SLfmbt3S|lzHbI-YQ$bA$>p$s#8xjKqgfy!%TvP5>u2#KggGuTCS8_R%n6dUQ`D zmZPO$&k(xP-=kxgMYE(fc6pQl7ltv~wc^a2u_#@p?_`-(+U=SRqLNaDS|1n|VsI;6 zK{-+!=$MI)Oqh*a#Ue*R>swtMTA$-iZs=)|>h>VpO)fjvEYC18ETOm-#=wYrFm|)G zI%Q-%Sy*v(kQRYIKpjlQOYaWnB!NZ=(l~iem2GvcTcdK_wsn*By7A86{=zyTVu|uG zeUGUxYa_fE_ihKd>4xyjAQL%V{tSdjui0R7KF4PQ3JkhIW-(LyQ(qGxqK zECw3pz5XEBp_oL|qf%#l@FG2WRDqL<R61i%A?4J63M3GXpO(miob zv6fN0Kpr4LY+7(I0(FEHSiC8O3?JlAt`4mW0hPPDJ-HeQ>J@cvaS(q5{!;aoEp<00 z>dT`~!3qhPfX}b@LI&N$ZUs5~y;h%hzrh1qd)^7*?)CtRLwHXp53&p`oCv}`pFB)^ zp#7%=*Qv5Jv7EZJ3JF|l3M2jV{R`+l^T}Pj7WD}<(1XG%6nHe1?IC5=9=k<)3s z(*Y~PDv>=dzI@&essHV>Av|d|5gG+Z&Y{NFhVZw%0~2p1(Wf)_c&QySeHIB`_QgIc zo9!BROrYj>1ck0Tr|;QqfhJ!b0`qefH8l{~Q~1lhJquCn8+-HYNLvZ$q0EM|xX&X8 z3a}{r&Hdlm3>WDI-k@ZQ+9XFIc{F)|3t(OVJNmH*p8nBiKRQuzlID*665l+P_9#h5 zoKk9Ono8CN2uQ`3;P<)C&K%U>aG~Fw>JT7W1kpm>!I?r)%EX>tnfn?IhBcex?7DY+ zVJ+fl>Y_>WO>ldE0$tUOIBvyHlm_&ml{nT})YCHjJuCkriNHL+i_Jrd1qg6c?o(@7|Iz3d>0`C ziABgMCb?!{L6JEzB=z6Dg{BvfFM!dF13$wj8xyUz`_j0yQcuv1+zn-;3D+D8}UmR6eKiyOS-%1#a9n z5iPM2cXmhjrVV6xt%K`R7B>hcO={;1I8LtH6N?DT&Atf03sdTVZ5ji!tWR_c&vWc@ z1W*TVo{e~)7onGasG%k!t>oUADW8%<7=!_8ofu5_0zdX#{RQ!PU|2%>@%{uKUhab% z$ZF`hHHT&V$9HaFCIC+h3fYyjMz8RywA@?=)9v(UQqqsR2IH|$epw~pne6QpOU;Cp z#vGxl!B~7yq**`hrxx^=r6?Q>G{d7FXxcI?PKb_)@u8(K{$59xlRyb z^0mr@Mkr|)c36UU3{PnI80FV2Q@$Y-WeIcbA%B4Et-`i<(=w>XKn>Da)FH*;gyHJc z2}lI6uk4obMjO(dl$d77HkLJ$aPB7P)!<28hYT0;Q_fEG zExf5FjDP;yMK5Has#Ng!SwasA9>7W8V4hSje)_^1YOD~0Bo?<{;@yz=Eq?Ify<+Mb z$^b{yj-iUGqyEttJd}V=oNTH4lSV{GcX=9brg{^UR(;CE{_j~T-1;_2%3C#%&OnZ(h9k^+%t*{(~=l=NIDp@4xrfcR&1)o;Q8)lMjCU_77q8H@@z}>Z{D> XSFcyAizi=wa`O`Y{r2j`1#I{~cL@en literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@fstream b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@fstream new file mode 100644 index 0000000..efc99d1 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@fstream @@ -0,0 +1,1295 @@ +// File based streams -*- C++ -*- + +// Copyright (C) 1997-2020 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/fstream + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 27.8 File-based streams +// + +#ifndef _GLIBCXX_FSTREAM +#define _GLIBCXX_FSTREAM 1 + +#pragma GCC system_header + +#include +#include +#include +#include // For BUFSIZ +#include // For __basic_file, __c_lock +#if __cplusplus >= 201103L +#include // For std::string overloads. +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if __cplusplus >= 201703L + // Enable if _Path is a filesystem::path or experimental::filesystem::path + template().make_preferred().filename())> + using _If_fs_path = enable_if_t, _Result>; +#endif // C++17 + + + // [27.8.1.1] template class basic_filebuf + /** + * @brief The actual work of input and output (for files). + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * This class associates both its input and output sequence with an + * external disk file, and maintains a joint file position for both + * sequences. Many of its semantics are described in terms of similar + * behavior in the Standard C Library's @c FILE streams. + * + * Requirements on traits_type, specific to this class: + * - traits_type::pos_type must be fpos + * - traits_type::off_type must be streamoff + * - traits_type::state_type must be Assignable and DefaultConstructible, + * - traits_type::state_type() must be the initial state for codecvt. + */ + template + class basic_filebuf : public basic_streambuf<_CharT, _Traits> + { +#if __cplusplus >= 201103L + template + using __chk_state = __and_, + is_copy_constructible<_Tp>, + is_default_constructible<_Tp>>; + + static_assert(__chk_state::value, + "state_type must be CopyAssignable, CopyConstructible" + " and DefaultConstructible"); + + static_assert(is_same>::value, + "pos_type must be fpos"); +#endif + public: + // Types: + 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; + + typedef basic_streambuf __streambuf_type; + typedef basic_filebuf __filebuf_type; + typedef __basic_file __file_type; + typedef typename traits_type::state_type __state_type; + typedef codecvt __codecvt_type; + + friend class ios_base; // For sync_with_stdio. + + protected: + // Data Members: + // MT lock inherited from libio or other low-level io library. + __c_lock _M_lock; + + // External buffer. + __file_type _M_file; + + /// Place to stash in || out || in | out settings for current filebuf. + ios_base::openmode _M_mode; + + // Beginning state type for codecvt. + __state_type _M_state_beg; + + // During output, the state that corresponds to pptr(), + // during input, the state that corresponds to egptr() and + // _M_ext_next. + __state_type _M_state_cur; + + // Not used for output. During input, the state that corresponds + // to eback() and _M_ext_buf. + __state_type _M_state_last; + + /// Pointer to the beginning of internal buffer. + char_type* _M_buf; + + /** + * Actual size of internal buffer. This number is equal to the size + * of the put area + 1 position, reserved for the overflow char of + * a full area. + */ + size_t _M_buf_size; + + // Set iff _M_buf is allocated memory from _M_allocate_internal_buffer. + bool _M_buf_allocated; + + /** + * _M_reading == false && _M_writing == false for @b uncommitted mode; + * _M_reading == true for @b read mode; + * _M_writing == true for @b write mode; + * + * NB: _M_reading == true && _M_writing == true is unused. + */ + bool _M_reading; + bool _M_writing; + + //@{ + /** + * Necessary bits for putback buffer management. + * + * @note pbacks of over one character are not currently supported. + */ + char_type _M_pback; + char_type* _M_pback_cur_save; + char_type* _M_pback_end_save; + bool _M_pback_init; + //@} + + // Cached codecvt facet. + const __codecvt_type* _M_codecvt; + + /** + * Buffer for external characters. Used for input when + * codecvt::always_noconv() == false. When valid, this corresponds + * to eback(). + */ + char* _M_ext_buf; + + /** + * Size of buffer held by _M_ext_buf. + */ + streamsize _M_ext_buf_size; + + /** + * Pointers into the buffer held by _M_ext_buf that delimit a + * subsequence of bytes that have been read but not yet converted. + * When valid, _M_ext_next corresponds to egptr(). + */ + const char* _M_ext_next; + char* _M_ext_end; + + /** + * Initializes pback buffers, and moves normal buffers to safety. + * Assumptions: + * _M_in_cur has already been moved back + */ + void + _M_create_pback() + { + if (!_M_pback_init) + { + _M_pback_cur_save = this->gptr(); + _M_pback_end_save = this->egptr(); + this->setg(&_M_pback, &_M_pback, &_M_pback + 1); + _M_pback_init = true; + } + } + + /** + * Deactivates pback buffer contents, and restores normal buffer. + * Assumptions: + * The pback buffer has only moved forward. + */ + void + _M_destroy_pback() throw() + { + if (_M_pback_init) + { + // Length _M_in_cur moved in the pback buffer. + _M_pback_cur_save += this->gptr() != this->eback(); + this->setg(_M_buf, _M_pback_cur_save, _M_pback_end_save); + _M_pback_init = false; + } + } + + public: + // Constructors/destructor: + /** + * @brief Does not open any files. + * + * The default constructor initializes the parent class using its + * own default ctor. + */ + basic_filebuf(); + +#if __cplusplus >= 201103L + basic_filebuf(const basic_filebuf&) = delete; + basic_filebuf(basic_filebuf&&); +#endif + + /** + * @brief The destructor closes the file first. + */ + virtual + ~basic_filebuf() + { + __try + { this->close(); } + __catch(...) + { } + } + +#if __cplusplus >= 201103L + basic_filebuf& operator=(const basic_filebuf&) = delete; + basic_filebuf& operator=(basic_filebuf&&); + void swap(basic_filebuf&); +#endif + + // Members: + /** + * @brief Returns true if the external file is open. + */ + bool + is_open() const throw() + { return _M_file.is_open(); } + + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * @return @c this on success, NULL on failure + * + * If a file is already open, this function immediately fails. + * Otherwise it tries to open the file named @a __s using the flags + * given in @a __mode. + * + * Table 92, adapted here, gives the relation between openmode + * combinations and the equivalent @c fopen() flags. + * (NB: lines app, in|out|app, in|app, binary|app, binary|in|out|app, + * and binary|in|app per DR 596) + *

    +       *  +---------------------------------------------------------+
    +       *  | ios_base Flag combination            stdio equivalent   |
    +       *  |binary  in  out  trunc  app                              |
    +       *  +---------------------------------------------------------+
    +       *  |             +                        w                  |
    +       *  |             +           +            a                  |
    +       *  |                         +            a                  |
    +       *  |             +     +                  w                  |
    +       *  |         +                            r                  |
    +       *  |         +   +                        r+                 |
    +       *  |         +   +     +                  w+                 |
    +       *  |         +   +           +            a+                 |
    +       *  |         +               +            a+                 |
    +       *  +---------------------------------------------------------+
    +       *  |   +         +                        wb                 |
    +       *  |   +         +           +            ab                 |
    +       *  |   +                     +            ab                 |
    +       *  |   +         +     +                  wb                 |
    +       *  |   +     +                            rb                 |
    +       *  |   +     +   +                        r+b                |
    +       *  |   +     +   +     +                  w+b                |
    +       *  |   +     +   +           +            a+b                |
    +       *  |   +     +               +            a+b                |
    +       *  +---------------------------------------------------------+
    +       *  
    + */ + __filebuf_type* + open(const char* __s, ios_base::openmode __mode); + +#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T + /** + * @brief Opens an external file. + * @param __s The name of the file, as a wide character string. + * @param __mode The open mode flags. + * @return @c this on success, NULL on failure + */ + __filebuf_type* + open(const wchar_t* __s, ios_base::openmode __mode); +#endif + +#if __cplusplus >= 201103L + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * @return @c this on success, NULL on failure + */ + __filebuf_type* + open(const std::string& __s, ios_base::openmode __mode) + { return open(__s.c_str(), __mode); } + +#if __cplusplus >= 201703L + /** + * @brief Opens an external file. + * @param __s The name of the file, as a filesystem::path. + * @param __mode The open mode flags. + * @return @c this on success, NULL on failure + */ + template + _If_fs_path<_Path, __filebuf_type*> + open(const _Path& __s, ios_base::openmode __mode) + { return open(__s.c_str(), __mode); } +#endif // C++17 +#endif // C++11 + + /** + * @brief Closes the currently associated file. + * @return @c this on success, NULL on failure + * + * If no file is currently open, this function immediately fails. + * + * If a put buffer area exists, @c overflow(eof) is + * called to flush all the characters. The file is then + * closed. + * + * If any operations fail, this function also fails. + */ + __filebuf_type* + close(); + + protected: + void + _M_allocate_internal_buffer(); + + void + _M_destroy_internal_buffer() throw(); + + // [27.8.1.4] overridden virtual functions + virtual streamsize + showmanyc(); + + // Stroustrup, 1998, p. 628 + // underflow() and uflow() functions are called to get the next + // character from the real input source when the buffer is empty. + // Buffered input uses underflow() + + virtual int_type + underflow(); + + virtual int_type + pbackfail(int_type __c = _Traits::eof()); + + // Stroustrup, 1998, p 648 + // The overflow() function is called to transfer characters to the + // real output destination when the buffer is full. A call to + // overflow(c) outputs the contents of the buffer plus the + // character c. + // 27.5.2.4.5 + // Consume some sequence of the characters in the pending sequence. + virtual int_type + overflow(int_type __c = _Traits::eof()); + + // Convert internal byte sequence to external, char-based + // sequence via codecvt. + bool + _M_convert_to_external(char_type*, streamsize); + + /** + * @brief Manipulates the buffer. + * @param __s Pointer to a buffer area. + * @param __n Size of @a __s. + * @return @c this + * + * If no file has been opened, and both @a __s and @a __n are zero, then + * the stream becomes unbuffered. Otherwise, @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); + + 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 __pos, + ios_base::openmode __mode = ios_base::in | ios_base::out); + + // Common code for seekoff, seekpos, and overflow + pos_type + _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state); + + int + _M_get_ext_pos(__state_type &__state); + + virtual int + sync(); + + virtual void + imbue(const locale& __loc); + + virtual streamsize + xsgetn(char_type* __s, streamsize __n); + + virtual streamsize + xsputn(const char_type* __s, streamsize __n); + + // Flushes output buffer, then writes unshift sequence. + bool + _M_terminate_output(); + + /** + * This function sets the pointers of the internal buffer, both get + * and put areas. Typically: + * + * __off == egptr() - eback() upon underflow/uflow (@b read mode); + * __off == 0 upon overflow (@b write mode); + * __off == -1 upon open, setbuf, seekoff/pos (@b uncommitted mode). + * + * NB: epptr() - pbase() == _M_buf_size - 1, since _M_buf_size + * reflects the actual allocated memory and the last cell is reserved + * for the overflow char of a full put area. + */ + void + _M_set_buffer(streamsize __off) + { + const bool __testin = _M_mode & ios_base::in; + const bool __testout = (_M_mode & ios_base::out + || _M_mode & ios_base::app); + + if (__testin && __off > 0) + this->setg(_M_buf, _M_buf, _M_buf + __off); + else + this->setg(_M_buf, _M_buf, _M_buf); + + if (__testout && __off == 0 && _M_buf_size > 1 ) + this->setp(_M_buf, _M_buf + _M_buf_size - 1); + else + this->setp(0, 0); + } + }; + + // [27.8.1.5] Template class basic_ifstream + /** + * @brief Controlling input for files. + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * This class supports reading from named files, using the inherited + * functions from std::basic_istream. To control the associated + * sequence, an instance of std::basic_filebuf is used, which this page + * refers to as @c sb. + */ + template + class basic_ifstream : public basic_istream<_CharT, _Traits> + { + public: + // Types: + 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; + + // Non-standard types: + typedef basic_filebuf __filebuf_type; + typedef basic_istream __istream_type; + + private: + __filebuf_type _M_filebuf; + + public: + // Constructors/Destructors: + /** + * @brief Default constructor. + * + * Initializes @c sb using its default constructor, and passes + * @c &sb to the base class initializer. Does not open any files + * (you haven't given it a filename to open). + */ + basic_ifstream() : __istream_type(), _M_filebuf() + { this->init(&_M_filebuf); } + + /** + * @brief Create an input file stream. + * @param __s Null terminated string specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + * + * @c ios_base::in is automatically included in @a __mode. + */ + explicit + basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in) + : __istream_type(), _M_filebuf() + { + this->init(&_M_filebuf); + this->open(__s, __mode); + } + +#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T + /** + * @param Create an input file stream. + * @param __s Wide string specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + * + * @c ios_base::in is automatically included in @a __mode. + */ + basic_ifstream(const wchar_t* __s, + ios_base::openmode __mode = ios_base::in) + : __istream_type(), _M_filebuf() + { + this->init(&_M_filebuf); + this->open(__s, __mode); + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Create an input file stream. + * @param __s std::string specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + * + * @c ios_base::in is automatically included in @a __mode. + */ + explicit + basic_ifstream(const std::string& __s, + ios_base::openmode __mode = ios_base::in) + : __istream_type(), _M_filebuf() + { + this->init(&_M_filebuf); + this->open(__s, __mode); + } + +#if __cplusplus >= 201703L + /** + * @brief Create an input file stream. + * @param __s filesystem::path specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + * + * @c ios_base::in is automatically included in @a __mode. + */ + template> + basic_ifstream(const _Path& __s, + ios_base::openmode __mode = ios_base::in) + : basic_ifstream(__s.c_str(), __mode) + { } +#endif // C++17 + + basic_ifstream(const basic_ifstream&) = delete; + + basic_ifstream(basic_ifstream&& __rhs) + : __istream_type(std::move(__rhs)), + _M_filebuf(std::move(__rhs._M_filebuf)) + { __istream_type::set_rdbuf(&_M_filebuf); } +#endif // C++11 + + /** + * @brief The destructor does nothing. + * + * The file is closed by the filebuf object, not the formatting + * stream. + */ + ~basic_ifstream() + { } + +#if __cplusplus >= 201103L + // 27.8.3.2 Assign and swap: + + basic_ifstream& + operator=(const basic_ifstream&) = delete; + + basic_ifstream& + operator=(basic_ifstream&& __rhs) + { + __istream_type::operator=(std::move(__rhs)); + _M_filebuf = std::move(__rhs._M_filebuf); + return *this; + } + + void + swap(basic_ifstream& __rhs) + { + __istream_type::swap(__rhs); + _M_filebuf.swap(__rhs._M_filebuf); + } +#endif + + // Members: + /** + * @brief Accessing the underlying buffer. + * @return The current basic_filebuf buffer. + * + * This hides both signatures of std::basic_ios::rdbuf(). + */ + __filebuf_type* + rdbuf() const + { return const_cast<__filebuf_type*>(&_M_filebuf); } + + /** + * @brief Wrapper to test for an open file. + * @return @c rdbuf()->is_open() + */ + bool + is_open() + { return _M_filebuf.is_open(); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 365. Lack of const-qualification in clause 27 + bool + is_open() const + { return _M_filebuf.is_open(); } + + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(s,__mode|in). If that function + * fails, @c failbit is set in the stream's error state. + */ + void + open(const char* __s, ios_base::openmode __mode = ios_base::in) + { + if (!_M_filebuf.open(__s, __mode | ios_base::in)) + this->setstate(ios_base::failbit); + else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 409. Closing an fstream should clear error state + this->clear(); + } + +#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T + /** + * @brief Opens an external file. + * @param __s The name of the file, as a wide character string. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode|in). If that function + * fails, @c failbit is set in the stream's error state. + */ + void + open(const wchar_t* __s, ios_base::openmode __mode = ios_base::in) + { + if (!_M_filebuf.open(__s, __mode | ios_base::in)) + this->setstate(ios_base::failbit); + else + this->clear(); + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode|in). If that function + * fails, @c failbit is set in the stream's error state. + */ + void + open(const std::string& __s, ios_base::openmode __mode = ios_base::in) + { + if (!_M_filebuf.open(__s, __mode | ios_base::in)) + this->setstate(ios_base::failbit); + else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 409. Closing an fstream should clear error state + this->clear(); + } + +#if __cplusplus >= 201703L + /** + * @brief Opens an external file. + * @param __s The name of the file, as a filesystem::path. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode|in). If that function + * fails, @c failbit is set in the stream's error state. + */ + template + _If_fs_path<_Path, void> + open(const _Path& __s, ios_base::openmode __mode = ios_base::in) + { open(__s.c_str(), __mode); } +#endif // C++17 +#endif // C++11 + + /** + * @brief Close the file. + * + * Calls @c std::basic_filebuf::close(). If that function + * fails, @c failbit is set in the stream's error state. + */ + void + close() + { + if (!_M_filebuf.close()) + this->setstate(ios_base::failbit); + } + }; + + + // [27.8.1.8] Template class basic_ofstream + /** + * @brief Controlling output for files. + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * This class supports reading from named files, using the inherited + * functions from std::basic_ostream. To control the associated + * sequence, an instance of std::basic_filebuf is used, which this page + * refers to as @c sb. + */ + template + class basic_ofstream : public basic_ostream<_CharT,_Traits> + { + public: + // Types: + 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; + + // Non-standard types: + typedef basic_filebuf __filebuf_type; + typedef basic_ostream __ostream_type; + + private: + __filebuf_type _M_filebuf; + + public: + // Constructors: + /** + * @brief Default constructor. + * + * Initializes @c sb using its default constructor, and passes + * @c &sb to the base class initializer. Does not open any files + * (you haven't given it a filename to open). + */ + basic_ofstream(): __ostream_type(), _M_filebuf() + { this->init(&_M_filebuf); } + + /** + * @brief Create an output file stream. + * @param __s Null terminated string specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + * + * @c ios_base::out is automatically included in @a __mode. + */ + explicit + basic_ofstream(const char* __s, + ios_base::openmode __mode = ios_base::out) + : __ostream_type(), _M_filebuf() + { + this->init(&_M_filebuf); + this->open(__s, __mode); + } + +#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T + /** + * @param Create an output file stream. + * @param __s Wide string specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + * + * @c ios_base::out | @c ios_base::trunc is automatically included in + * @a __mode. + */ + basic_ofstream(const wchar_t* __s, + ios_base::openmode __mode = ios_base::out|ios_base::trunc) + : __ostream_type(), _M_filebuf() + { + this->init(&_M_filebuf); + this->open(__s, __mode); + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Create an output file stream. + * @param __s std::string specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + * + * @c ios_base::out is automatically included in @a __mode. + */ + explicit + basic_ofstream(const std::string& __s, + ios_base::openmode __mode = ios_base::out) + : __ostream_type(), _M_filebuf() + { + this->init(&_M_filebuf); + this->open(__s, __mode); + } + +#if __cplusplus >= 201703L + /** + * @brief Create an output file stream. + * @param __s filesystem::path specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + * + * @c ios_base::out is automatically included in @a __mode. + */ + template> + basic_ofstream(const _Path& __s, + ios_base::openmode __mode = ios_base::out) + : basic_ofstream(__s.c_str(), __mode) + { } +#endif // C++17 + + basic_ofstream(const basic_ofstream&) = delete; + + basic_ofstream(basic_ofstream&& __rhs) + : __ostream_type(std::move(__rhs)), + _M_filebuf(std::move(__rhs._M_filebuf)) + { __ostream_type::set_rdbuf(&_M_filebuf); } +#endif + + /** + * @brief The destructor does nothing. + * + * The file is closed by the filebuf object, not the formatting + * stream. + */ + ~basic_ofstream() + { } + +#if __cplusplus >= 201103L + // 27.8.3.2 Assign and swap: + + basic_ofstream& + operator=(const basic_ofstream&) = delete; + + basic_ofstream& + operator=(basic_ofstream&& __rhs) + { + __ostream_type::operator=(std::move(__rhs)); + _M_filebuf = std::move(__rhs._M_filebuf); + return *this; + } + + void + swap(basic_ofstream& __rhs) + { + __ostream_type::swap(__rhs); + _M_filebuf.swap(__rhs._M_filebuf); + } +#endif + + // Members: + /** + * @brief Accessing the underlying buffer. + * @return The current basic_filebuf buffer. + * + * This hides both signatures of std::basic_ios::rdbuf(). + */ + __filebuf_type* + rdbuf() const + { return const_cast<__filebuf_type*>(&_M_filebuf); } + + /** + * @brief Wrapper to test for an open file. + * @return @c rdbuf()->is_open() + */ + bool + is_open() + { return _M_filebuf.is_open(); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 365. Lack of const-qualification in clause 27 + bool + is_open() const + { return _M_filebuf.is_open(); } + + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode|out). If that + * function fails, @c failbit is set in the stream's error state. + */ + void + open(const char* __s, ios_base::openmode __mode = ios_base::out) + { + if (!_M_filebuf.open(__s, __mode | ios_base::out)) + this->setstate(ios_base::failbit); + else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 409. Closing an fstream should clear error state + this->clear(); + } + +#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode|out). If that + * function fails, @c failbit is set in the stream's error state. + */ + void + open(const wchar_t* __s, ios_base::openmode __mode = ios_base::out) + { + if (!_M_filebuf.open(__s, __mode | ios_base::out)) + this->setstate(ios_base::failbit); + else + this->clear(); + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(s,mode|out). If that + * function fails, @c failbit is set in the stream's error state. + */ + void + open(const std::string& __s, ios_base::openmode __mode = ios_base::out) + { + if (!_M_filebuf.open(__s, __mode | ios_base::out)) + this->setstate(ios_base::failbit); + else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 409. Closing an fstream should clear error state + this->clear(); + } + +#if __cplusplus >= 201703L + /** + * @brief Opens an external file. + * @param __s The name of the file, as a filesystem::path. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode|out). If that + * function fails, @c failbit is set in the stream's error state. + */ + template + _If_fs_path<_Path, void> + open(const _Path& __s, ios_base::openmode __mode = ios_base::out) + { open(__s.c_str(), __mode); } +#endif // C++17 +#endif // C++11 + + /** + * @brief Close the file. + * + * Calls @c std::basic_filebuf::close(). If that function + * fails, @c failbit is set in the stream's error state. + */ + void + close() + { + if (!_M_filebuf.close()) + this->setstate(ios_base::failbit); + } + }; + + + // [27.8.1.11] Template class basic_fstream + /** + * @brief Controlling input and output for files. + * @ingroup io + * + * @tparam _CharT Type of character stream. + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * This class supports reading from and writing to named files, using + * the inherited functions from std::basic_iostream. To control the + * associated sequence, an instance of std::basic_filebuf is used, which + * this page refers to as @c sb. + */ + template + class basic_fstream : public basic_iostream<_CharT, _Traits> + { + public: + // Types: + 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; + + // Non-standard types: + typedef basic_filebuf __filebuf_type; + typedef basic_ios __ios_type; + typedef basic_iostream __iostream_type; + + private: + __filebuf_type _M_filebuf; + + public: + // Constructors/destructor: + /** + * @brief Default constructor. + * + * Initializes @c sb using its default constructor, and passes + * @c &sb to the base class initializer. Does not open any files + * (you haven't given it a filename to open). + */ + basic_fstream() + : __iostream_type(), _M_filebuf() + { this->init(&_M_filebuf); } + + /** + * @brief Create an input/output file stream. + * @param __s Null terminated string specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + */ + explicit + basic_fstream(const char* __s, + ios_base::openmode __mode = ios_base::in | ios_base::out) + : __iostream_type(0), _M_filebuf() + { + this->init(&_M_filebuf); + this->open(__s, __mode); + } + +#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T + /** + * @param Create an input/output file stream. + * @param __s Wide string specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + */ + basic_fstream(const wchar_t* __s, + ios_base::openmode __mode = ios_base::in | ios_base::out) + : __iostream_type(0), _M_filebuf() + { + this->init(&_M_filebuf); + this->open(__s, __mode); + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Create an input/output file stream. + * @param __s Null terminated string specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + */ + explicit + basic_fstream(const std::string& __s, + ios_base::openmode __mode = ios_base::in | ios_base::out) + : __iostream_type(0), _M_filebuf() + { + this->init(&_M_filebuf); + this->open(__s, __mode); + } + +#if __cplusplus >= 201703L + /** + * @brief Create an input/output file stream. + * @param __s filesystem::path specifying the filename. + * @param __mode Open file in specified mode (see std::ios_base). + */ + template> + basic_fstream(const _Path& __s, + ios_base::openmode __mode = ios_base::in | ios_base::out) + : basic_fstream(__s.c_str(), __mode) + { } +#endif // C++17 + + basic_fstream(const basic_fstream&) = delete; + + basic_fstream(basic_fstream&& __rhs) + : __iostream_type(std::move(__rhs)), + _M_filebuf(std::move(__rhs._M_filebuf)) + { __iostream_type::set_rdbuf(&_M_filebuf); } +#endif + + /** + * @brief The destructor does nothing. + * + * The file is closed by the filebuf object, not the formatting + * stream. + */ + ~basic_fstream() + { } + +#if __cplusplus >= 201103L + // 27.8.3.2 Assign and swap: + + basic_fstream& + operator=(const basic_fstream&) = delete; + + basic_fstream& + operator=(basic_fstream&& __rhs) + { + __iostream_type::operator=(std::move(__rhs)); + _M_filebuf = std::move(__rhs._M_filebuf); + return *this; + } + + void + swap(basic_fstream& __rhs) + { + __iostream_type::swap(__rhs); + _M_filebuf.swap(__rhs._M_filebuf); + } +#endif + + // Members: + /** + * @brief Accessing the underlying buffer. + * @return The current basic_filebuf buffer. + * + * This hides both signatures of std::basic_ios::rdbuf(). + */ + __filebuf_type* + rdbuf() const + { return const_cast<__filebuf_type*>(&_M_filebuf); } + + /** + * @brief Wrapper to test for an open file. + * @return @c rdbuf()->is_open() + */ + bool + is_open() + { return _M_filebuf.is_open(); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 365. Lack of const-qualification in clause 27 + bool + is_open() const + { return _M_filebuf.is_open(); } + + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode). If that + * function fails, @c failbit is set in the stream's error state. + */ + void + open(const char* __s, + ios_base::openmode __mode = ios_base::in | ios_base::out) + { + if (!_M_filebuf.open(__s, __mode)) + this->setstate(ios_base::failbit); + else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 409. Closing an fstream should clear error state + this->clear(); + } + +#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode). If that + * function fails, @c failbit is set in the stream's error state. + */ + void + open(const wchar_t* __s, + ios_base::openmode __mode = ios_base::in | ios_base::out) + { + if (!_M_filebuf.open(__s, __mode)) + this->setstate(ios_base::failbit); + else + this->clear(); + } +#endif + +#if __cplusplus >= 201103L + /** + * @brief Opens an external file. + * @param __s The name of the file. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode). If that + * function fails, @c failbit is set in the stream's error state. + */ + void + open(const std::string& __s, + ios_base::openmode __mode = ios_base::in | ios_base::out) + { + if (!_M_filebuf.open(__s, __mode)) + this->setstate(ios_base::failbit); + else + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 409. Closing an fstream should clear error state + this->clear(); + } + +#if __cplusplus >= 201703L + /** + * @brief Opens an external file. + * @param __s The name of the file, as a filesystem::path. + * @param __mode The open mode flags. + * + * Calls @c std::basic_filebuf::open(__s,__mode). If that + * function fails, @c failbit is set in the stream's error state. + */ + template + _If_fs_path<_Path, void> + open(const _Path& __s, + ios_base::openmode __mode = ios_base::in | ios_base::out) + { open(__s.c_str(), __mode); } +#endif // C++17 +#endif // C++11 + + /** + * @brief Close the file. + * + * Calls @c std::basic_filebuf::close(). If that function + * fails, @c failbit is set in the stream's error state. + */ + void + close() + { + if (!_M_filebuf.close()) + this->setstate(ios_base::failbit); + } + }; + +#if __cplusplus >= 201103L + /// Swap specialization for filebufs. + template + inline void + swap(basic_filebuf<_CharT, _Traits>& __x, + basic_filebuf<_CharT, _Traits>& __y) + { __x.swap(__y); } + + /// Swap specialization for ifstreams. + template + inline void + swap(basic_ifstream<_CharT, _Traits>& __x, + basic_ifstream<_CharT, _Traits>& __y) + { __x.swap(__y); } + + /// Swap specialization for ofstreams. + template + inline void + swap(basic_ofstream<_CharT, _Traits>& __x, + basic_ofstream<_CharT, _Traits>& __y) + { __x.swap(__y); } + + /// Swap specialization for fstreams. + template + inline void + swap(basic_fstream<_CharT, _Traits>& __x, + basic_fstream<_CharT, _Traits>& __y) + { __x.swap(__y); } +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#include + +#endif /* _GLIBCXX_FSTREAM */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@fstream.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@fstream.blob new file mode 100644 index 0000000000000000000000000000000000000000..389fd17977720da9d6fc9306e1c1068510436723 GIT binary patch literal 59668 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 -*- C++ -*- + +// Copyright (C) 2001-2020 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) 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 include/functional + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_FUNCTIONAL +#define _GLIBCXX_FUNCTIONAL 1 + +#pragma GCC system_header + +#include +#include + +#if __cplusplus >= 201103L + +#include +#include +#include +#include +#include +#include // std::reference_wrapper and _Mem_fn_traits +#include // std::function +#if __cplusplus > 201402L +# include +# include +# include +# include +# include +#endif +#if __cplusplus > 201703L +# include +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#if __cplusplus >= 201703L +# define __cpp_lib_invoke 201411L +# if __cplusplus > 201703L +# define __cpp_lib_constexpr_functional 201907L +# endif + + /// Invoke a callable object. + template + inline _GLIBCXX20_CONSTEXPR invoke_result_t<_Callable, _Args...> + invoke(_Callable&& __fn, _Args&&... __args) + noexcept(is_nothrow_invocable_v<_Callable, _Args...>) + { + return std::__invoke(std::forward<_Callable>(__fn), + std::forward<_Args>(__args)...); + } +#endif // C++17 + + template::value> + class _Mem_fn_base + : public _Mem_fn_traits<_MemFunPtr>::__maybe_type + { + using _Traits = _Mem_fn_traits<_MemFunPtr>; + + using _Arity = typename _Traits::__arity; + using _Varargs = typename _Traits::__vararg; + + template + friend struct _Bind_check_arity; + + _MemFunPtr _M_pmf; + + public: + + using result_type = typename _Traits::__result_type; + + explicit constexpr + _Mem_fn_base(_MemFunPtr __pmf) noexcept : _M_pmf(__pmf) { } + + template + _GLIBCXX20_CONSTEXPR + auto + operator()(_Args&&... __args) const + noexcept(noexcept( + std::__invoke(_M_pmf, std::forward<_Args>(__args)...))) + -> decltype(std::__invoke(_M_pmf, std::forward<_Args>(__args)...)) + { return std::__invoke(_M_pmf, std::forward<_Args>(__args)...); } + }; + + // Partial specialization for member object pointers. + template + class _Mem_fn_base<_MemObjPtr, false> + { + using _Arity = integral_constant; + using _Varargs = false_type; + + template + friend struct _Bind_check_arity; + + _MemObjPtr _M_pm; + + public: + explicit constexpr + _Mem_fn_base(_MemObjPtr __pm) noexcept : _M_pm(__pm) { } + + template + _GLIBCXX20_CONSTEXPR + auto + operator()(_Tp&& __obj) const + noexcept(noexcept(std::__invoke(_M_pm, std::forward<_Tp>(__obj)))) + -> decltype(std::__invoke(_M_pm, std::forward<_Tp>(__obj))) + { return std::__invoke(_M_pm, std::forward<_Tp>(__obj)); } + }; + + template + struct _Mem_fn; // undefined + + template + struct _Mem_fn<_Res _Class::*> + : _Mem_fn_base<_Res _Class::*> + { + using _Mem_fn_base<_Res _Class::*>::_Mem_fn_base; + }; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2048. Unnecessary mem_fn overloads + /** + * @brief Returns a function object that forwards to the member + * pointer @a pm. + * @ingroup functors + */ + template + _GLIBCXX20_CONSTEXPR + inline _Mem_fn<_Tp _Class::*> + mem_fn(_Tp _Class::* __pm) noexcept + { + return _Mem_fn<_Tp _Class::*>(__pm); + } + + /** + * @brief Determines if the given type _Tp is a function object that + * should be treated as a subexpression when evaluating calls to + * function objects returned by bind(). + * + * C++11 [func.bind.isbind]. + * @ingroup binders + */ + template + struct is_bind_expression + : public false_type { }; + + /** + * @brief Determines if the given type _Tp is a placeholder in a + * bind() expression and, if so, which placeholder it is. + * + * C++11 [func.bind.isplace]. + * @ingroup binders + */ + template + struct is_placeholder + : public integral_constant + { }; + +#if __cplusplus > 201402L + template inline constexpr bool is_bind_expression_v + = is_bind_expression<_Tp>::value; + template inline constexpr int is_placeholder_v + = is_placeholder<_Tp>::value; +#endif // C++17 + + /** @brief The type of placeholder objects defined by libstdc++. + * @ingroup binders + */ + template struct _Placeholder { }; + + /** @namespace std::placeholders + * @brief ISO C++ 2011 namespace for std::bind placeholders. + * @ingroup binders + */ + namespace placeholders + { + /* Define a large number of placeholders. There is no way to + * simplify this with variadic templates, because we're introducing + * unique names for each. + */ + extern const _Placeholder<1> _1; + extern const _Placeholder<2> _2; + extern const _Placeholder<3> _3; + extern const _Placeholder<4> _4; + extern const _Placeholder<5> _5; + extern const _Placeholder<6> _6; + extern const _Placeholder<7> _7; + extern const _Placeholder<8> _8; + extern const _Placeholder<9> _9; + extern const _Placeholder<10> _10; + extern const _Placeholder<11> _11; + extern const _Placeholder<12> _12; + extern const _Placeholder<13> _13; + extern const _Placeholder<14> _14; + extern const _Placeholder<15> _15; + extern const _Placeholder<16> _16; + extern const _Placeholder<17> _17; + extern const _Placeholder<18> _18; + extern const _Placeholder<19> _19; + extern const _Placeholder<20> _20; + extern const _Placeholder<21> _21; + extern const _Placeholder<22> _22; + extern const _Placeholder<23> _23; + extern const _Placeholder<24> _24; + extern const _Placeholder<25> _25; + extern const _Placeholder<26> _26; + extern const _Placeholder<27> _27; + extern const _Placeholder<28> _28; + extern const _Placeholder<29> _29; + } + + /** + * Partial specialization of is_placeholder that provides the placeholder + * number for the placeholder objects defined by libstdc++. + * @ingroup binders + */ + template + struct is_placeholder<_Placeholder<_Num> > + : public integral_constant + { }; + + template + struct is_placeholder > + : public integral_constant + { }; + + + // Like tuple_element_t but SFINAE-friendly. + template + using _Safe_tuple_element_t + = typename enable_if<(__i < tuple_size<_Tuple>::value), + tuple_element<__i, _Tuple>>::type::type; + + /** + * Maps an argument to bind() into an actual argument to the bound + * function object [func.bind.bind]/10. Only the first parameter should + * be specified: the rest are used to determine among the various + * implementations. Note that, although this class is a function + * object, it isn't entirely normal because it takes only two + * parameters regardless of the number of parameters passed to the + * bind expression. The first parameter is the bound argument and + * the second parameter is a tuple containing references to the + * rest of the arguments. + */ + template::value, + bool _IsPlaceholder = (is_placeholder<_Arg>::value > 0)> + class _Mu; + + /** + * If the argument is reference_wrapper<_Tp>, returns the + * underlying reference. + * C++11 [func.bind.bind] p10 bullet 1. + */ + template + class _Mu, false, false> + { + public: + /* Note: This won't actually work for const volatile + * reference_wrappers, because reference_wrapper::get() is const + * but not volatile-qualified. This might be a defect in the TR. + */ + template + _GLIBCXX20_CONSTEXPR + _Tp& + operator()(_CVRef& __arg, _Tuple&) const volatile + { return __arg.get(); } + }; + + /** + * If the argument is a bind expression, we invoke the underlying + * function object with the same cv-qualifiers as we are given and + * pass along all of our arguments (unwrapped). + * C++11 [func.bind.bind] p10 bullet 2. + */ + template + class _Mu<_Arg, true, false> + { + public: + template + _GLIBCXX20_CONSTEXPR + auto + operator()(_CVArg& __arg, + tuple<_Args...>& __tuple) const volatile + -> decltype(__arg(declval<_Args>()...)) + { + // Construct an index tuple and forward to __call + typedef typename _Build_index_tuple::__type + _Indexes; + return this->__call(__arg, __tuple, _Indexes()); + } + + private: + // Invokes the underlying function object __arg by unpacking all + // of the arguments in the tuple. + template + _GLIBCXX20_CONSTEXPR + auto + __call(_CVArg& __arg, tuple<_Args...>& __tuple, + const _Index_tuple<_Indexes...>&) const volatile + -> decltype(__arg(declval<_Args>()...)) + { + return __arg(std::get<_Indexes>(std::move(__tuple))...); + } + }; + + /** + * If the argument is a placeholder for the Nth argument, returns + * a reference to the Nth argument to the bind function object. + * C++11 [func.bind.bind] p10 bullet 3. + */ + template + class _Mu<_Arg, false, true> + { + public: + template + _GLIBCXX20_CONSTEXPR + _Safe_tuple_element_t<(is_placeholder<_Arg>::value - 1), _Tuple>&& + operator()(const volatile _Arg&, _Tuple& __tuple) const volatile + { + return + ::std::get<(is_placeholder<_Arg>::value - 1)>(std::move(__tuple)); + } + }; + + /** + * If the argument is just a value, returns a reference to that + * value. The cv-qualifiers on the reference are determined by the caller. + * C++11 [func.bind.bind] p10 bullet 4. + */ + template + class _Mu<_Arg, false, false> + { + public: + template + _GLIBCXX20_CONSTEXPR + _CVArg&& + operator()(_CVArg&& __arg, _Tuple&) const volatile + { return std::forward<_CVArg>(__arg); } + }; + + // std::get for volatile-qualified tuples + template + inline auto + __volget(volatile tuple<_Tp...>& __tuple) + -> __tuple_element_t<_Ind, tuple<_Tp...>> volatile& + { return std::get<_Ind>(const_cast&>(__tuple)); } + + // std::get for const-volatile-qualified tuples + template + inline auto + __volget(const volatile tuple<_Tp...>& __tuple) + -> __tuple_element_t<_Ind, tuple<_Tp...>> const volatile& + { return std::get<_Ind>(const_cast&>(__tuple)); } + + /// Type of the function object returned from bind(). + template + struct _Bind; + + template + class _Bind<_Functor(_Bound_args...)> + : public _Weak_result_type<_Functor> + { + typedef typename _Build_index_tuple::__type + _Bound_indexes; + + _Functor _M_f; + tuple<_Bound_args...> _M_bound_args; + + // Call unqualified + template + _GLIBCXX20_CONSTEXPR + _Result + __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) + { + return std::__invoke(_M_f, + _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)... + ); + } + + // Call as const + template + _GLIBCXX20_CONSTEXPR + _Result + __call_c(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const + { + return std::__invoke(_M_f, + _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)... + ); + } + + // Call as volatile + template + _Result + __call_v(tuple<_Args...>&& __args, + _Index_tuple<_Indexes...>) volatile + { + return std::__invoke(_M_f, + _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)... + ); + } + + // Call as const volatile + template + _Result + __call_c_v(tuple<_Args...>&& __args, + _Index_tuple<_Indexes...>) const volatile + { + return std::__invoke(_M_f, + _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)... + ); + } + + template + using _Mu_type = decltype( + _Mu::type>()( + std::declval<_BoundArg&>(), std::declval<_CallArgs&>()) ); + + template + using _Res_type_impl + = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>&&...) >::type; + + template + using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>; + + template + using __dependent = typename + enable_if::value+1), _Functor>::type; + + template class __cv_quals> + using _Res_type_cv = _Res_type_impl< + typename __cv_quals<__dependent<_CallArgs>>::type, + _CallArgs, + typename __cv_quals<_Bound_args>::type...>; + + public: + template + explicit _GLIBCXX20_CONSTEXPR + _Bind(const _Functor& __f, _Args&&... __args) + : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...) + { } + + template + explicit _GLIBCXX20_CONSTEXPR + _Bind(_Functor&& __f, _Args&&... __args) + : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...) + { } + + _Bind(const _Bind&) = default; + _Bind(_Bind&&) = default; + + // Call unqualified + template>> + _GLIBCXX20_CONSTEXPR + _Result + operator()(_Args&&... __args) + { + return this->__call<_Result>( + std::forward_as_tuple(std::forward<_Args>(__args)...), + _Bound_indexes()); + } + + // Call as const + template, add_const>> + _GLIBCXX20_CONSTEXPR + _Result + operator()(_Args&&... __args) const + { + return this->__call_c<_Result>( + std::forward_as_tuple(std::forward<_Args>(__args)...), + _Bound_indexes()); + } + +#if __cplusplus > 201402L +# define _GLIBCXX_DEPR_BIND \ + [[deprecated("std::bind does not support volatile in C++17")]] +#else +# define _GLIBCXX_DEPR_BIND +#endif + // Call as volatile + template, add_volatile>> + _GLIBCXX_DEPR_BIND + _Result + operator()(_Args&&... __args) volatile + { + return this->__call_v<_Result>( + std::forward_as_tuple(std::forward<_Args>(__args)...), + _Bound_indexes()); + } + + // Call as const volatile + template, add_cv>> + _GLIBCXX_DEPR_BIND + _Result + operator()(_Args&&... __args) const volatile + { + return this->__call_c_v<_Result>( + std::forward_as_tuple(std::forward<_Args>(__args)...), + _Bound_indexes()); + } + }; + + /// Type of the function object returned from bind(). + template + struct _Bind_result; + + template + class _Bind_result<_Result, _Functor(_Bound_args...)> + { + typedef typename _Build_index_tuple::__type + _Bound_indexes; + + _Functor _M_f; + tuple<_Bound_args...> _M_bound_args; + + // Call unqualified + template + _GLIBCXX20_CONSTEXPR + _Res + __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) + { + return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() + (std::get<_Indexes>(_M_bound_args), __args)...); + } + + // Call as const + template + _GLIBCXX20_CONSTEXPR + _Res + __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const + { + return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() + (std::get<_Indexes>(_M_bound_args), __args)...); + } + + // Call as volatile + template + _GLIBCXX20_CONSTEXPR + _Res + __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile + { + return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() + (__volget<_Indexes>(_M_bound_args), __args)...); + } + + // Call as const volatile + template + _GLIBCXX20_CONSTEXPR + _Res + __call(tuple<_Args...>&& __args, + _Index_tuple<_Indexes...>) const volatile + { + return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() + (__volget<_Indexes>(_M_bound_args), __args)...); + } + + public: + typedef _Result result_type; + + template + explicit _GLIBCXX20_CONSTEXPR + _Bind_result(const _Functor& __f, _Args&&... __args) + : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...) + { } + + template + explicit _GLIBCXX20_CONSTEXPR + _Bind_result(_Functor&& __f, _Args&&... __args) + : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...) + { } + + _Bind_result(const _Bind_result&) = default; + _Bind_result(_Bind_result&&) = default; + + // Call unqualified + template + _GLIBCXX20_CONSTEXPR + result_type + operator()(_Args&&... __args) + { + return this->__call<_Result>( + std::forward_as_tuple(std::forward<_Args>(__args)...), + _Bound_indexes()); + } + + // Call as const + template + _GLIBCXX20_CONSTEXPR + result_type + operator()(_Args&&... __args) const + { + return this->__call<_Result>( + std::forward_as_tuple(std::forward<_Args>(__args)...), + _Bound_indexes()); + } + + // Call as volatile + template + _GLIBCXX_DEPR_BIND + result_type + operator()(_Args&&... __args) volatile + { + return this->__call<_Result>( + std::forward_as_tuple(std::forward<_Args>(__args)...), + _Bound_indexes()); + } + + // Call as const volatile + template + _GLIBCXX_DEPR_BIND + result_type + operator()(_Args&&... __args) const volatile + { + return this->__call<_Result>( + std::forward_as_tuple(std::forward<_Args>(__args)...), + _Bound_indexes()); + } + }; +#undef _GLIBCXX_DEPR_BIND + + /** + * @brief Class template _Bind is always a bind expression. + * @ingroup binders + */ + template + struct is_bind_expression<_Bind<_Signature> > + : public true_type { }; + + /** + * @brief Class template _Bind is always a bind expression. + * @ingroup binders + */ + template + struct is_bind_expression > + : public true_type { }; + + /** + * @brief Class template _Bind is always a bind expression. + * @ingroup binders + */ + template + struct is_bind_expression > + : public true_type { }; + + /** + * @brief Class template _Bind is always a bind expression. + * @ingroup binders + */ + template + struct is_bind_expression> + : public true_type { }; + + /** + * @brief Class template _Bind_result is always a bind expression. + * @ingroup binders + */ + template + struct is_bind_expression<_Bind_result<_Result, _Signature>> + : public true_type { }; + + /** + * @brief Class template _Bind_result is always a bind expression. + * @ingroup binders + */ + template + struct is_bind_expression> + : public true_type { }; + + /** + * @brief Class template _Bind_result is always a bind expression. + * @ingroup binders + */ + template + struct is_bind_expression> + : public true_type { }; + + /** + * @brief Class template _Bind_result is always a bind expression. + * @ingroup binders + */ + template + struct is_bind_expression> + : public true_type { }; + + template + struct _Bind_check_arity { }; + + template + struct _Bind_check_arity<_Ret (*)(_Args...), _BoundArgs...> + { + static_assert(sizeof...(_BoundArgs) == sizeof...(_Args), + "Wrong number of arguments for function"); + }; + + template + struct _Bind_check_arity<_Ret (*)(_Args......), _BoundArgs...> + { + static_assert(sizeof...(_BoundArgs) >= sizeof...(_Args), + "Wrong number of arguments for function"); + }; + + template + struct _Bind_check_arity<_Tp _Class::*, _BoundArgs...> + { + using _Arity = typename _Mem_fn<_Tp _Class::*>::_Arity; + using _Varargs = typename _Mem_fn<_Tp _Class::*>::_Varargs; + static_assert(_Varargs::value + ? sizeof...(_BoundArgs) >= _Arity::value + 1 + : sizeof...(_BoundArgs) == _Arity::value + 1, + "Wrong number of arguments for pointer-to-member"); + }; + + // Trait type used to remove std::bind() from overload set via SFINAE + // when first argument has integer type, so that std::bind() will + // not be a better match than ::bind() from the BSD Sockets API. + template::type> + using __is_socketlike = __or_, is_enum<_Tp2>>; + + template + struct _Bind_helper + : _Bind_check_arity::type, _BoundArgs...> + { + typedef typename decay<_Func>::type __func_type; + typedef _Bind<__func_type(typename decay<_BoundArgs>::type...)> type; + }; + + // Partial specialization for is_socketlike == true, does not define + // nested type so std::bind() will not participate in overload resolution + // when the first argument might be a socket file descriptor. + template + struct _Bind_helper + { }; + + /** + * @brief Function template for std::bind. + * @ingroup binders + */ + template + inline _GLIBCXX20_CONSTEXPR typename + _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type + bind(_Func&& __f, _BoundArgs&&... __args) + { + typedef _Bind_helper __helper_type; + return typename __helper_type::type(std::forward<_Func>(__f), + std::forward<_BoundArgs>(__args)...); + } + + template + struct _Bindres_helper + : _Bind_check_arity::type, _BoundArgs...> + { + typedef typename decay<_Func>::type __functor_type; + typedef _Bind_result<_Result, + __functor_type(typename decay<_BoundArgs>::type...)> + type; + }; + + /** + * @brief Function template for std::bind. + * @ingroup binders + */ + template + inline _GLIBCXX20_CONSTEXPR + typename _Bindres_helper<_Result, _Func, _BoundArgs...>::type + bind(_Func&& __f, _BoundArgs&&... __args) + { + typedef _Bindres_helper<_Result, _Func, _BoundArgs...> __helper_type; + return typename __helper_type::type(std::forward<_Func>(__f), + std::forward<_BoundArgs>(__args)...); + } + +#if __cplusplus > 201703L +#define __cpp_lib_bind_front 201907L + + template + struct _Bind_front + { + static_assert(is_move_constructible_v<_Fd>); + static_assert((is_move_constructible_v<_BoundArgs> && ...)); + + // First parameter is to ensure this constructor is never used + // instead of the copy/move constructor. + template + explicit constexpr + _Bind_front(int, _Fn&& __fn, _Args&&... __args) + noexcept(__and_, + is_nothrow_constructible<_BoundArgs, _Args>...>::value) + : _M_fd(std::forward<_Fn>(__fn)), + _M_bound_args(std::forward<_Args>(__args)...) + { static_assert(sizeof...(_Args) == sizeof...(_BoundArgs)); } + + _Bind_front(const _Bind_front&) = default; + _Bind_front(_Bind_front&&) = default; + _Bind_front& operator=(const _Bind_front&) = default; + _Bind_front& operator=(_Bind_front&&) = default; + ~_Bind_front() = default; + + template + constexpr + invoke_result_t<_Fd&, _BoundArgs&..., _CallArgs...> + operator()(_CallArgs&&... __call_args) & + noexcept(is_nothrow_invocable_v<_Fd&, _BoundArgs&..., _CallArgs...>) + { + return _S_call(*this, _BoundIndices(), + std::forward<_CallArgs>(__call_args)...); + } + + template + constexpr + invoke_result_t + operator()(_CallArgs&&... __call_args) const & + noexcept(is_nothrow_invocable_v) + { + return _S_call(*this, _BoundIndices(), + std::forward<_CallArgs>(__call_args)...); + } + + template + constexpr + invoke_result_t<_Fd, _BoundArgs..., _CallArgs...> + operator()(_CallArgs&&... __call_args) && + noexcept(is_nothrow_invocable_v<_Fd, _BoundArgs..., _CallArgs...>) + { + return _S_call(std::move(*this), _BoundIndices(), + std::forward<_CallArgs>(__call_args)...); + } + + template + constexpr + invoke_result_t + operator()(_CallArgs&&... __call_args) const && + noexcept(is_nothrow_invocable_v) + { + return _S_call(std::move(*this), _BoundIndices(), + std::forward<_CallArgs>(__call_args)...); + } + + private: + using _BoundIndices = index_sequence_for<_BoundArgs...>; + + template + static constexpr + decltype(auto) + _S_call(_Tp&& __g, index_sequence<_Ind...>, _CallArgs&&... __call_args) + { + return std::invoke(std::forward<_Tp>(__g)._M_fd, + std::get<_Ind>(std::forward<_Tp>(__g)._M_bound_args)..., + std::forward<_CallArgs>(__call_args)...); + } + + _Fd _M_fd; + std::tuple<_BoundArgs...> _M_bound_args; + }; + + template + using _Bind_front_t + = _Bind_front, decay_t<_Args>...>; + + template + constexpr _Bind_front_t<_Fn, _Args...> + bind_front(_Fn&& __fn, _Args&&... __args) + noexcept(is_nothrow_constructible_v<_Bind_front_t<_Fn, _Args...>, + int, _Fn, _Args...>) + { + return _Bind_front_t<_Fn, _Args...>(0, std::forward<_Fn>(__fn), + std::forward<_Args>(__args)...); + } +#endif + +#if __cplusplus >= 201402L + /// Generalized negator. + template + class _Not_fn + { + template + using __inv_res_t = typename __invoke_result<_Fn2, _Args...>::type; + + template + static decltype(!std::declval<_Tp>()) + _S_not() noexcept(noexcept(!std::declval<_Tp>())); + + public: + template + constexpr + _Not_fn(_Fn2&& __fn, int) + : _M_fn(std::forward<_Fn2>(__fn)) { } + + _Not_fn(const _Not_fn& __fn) = default; + _Not_fn(_Not_fn&& __fn) = default; + ~_Not_fn() = default; + + // Macro to define operator() with given cv-qualifiers ref-qualifiers, + // forwarding _M_fn and the function arguments with the same qualifiers, + // and deducing the return type and exception-specification. +#define _GLIBCXX_NOT_FN_CALL_OP( _QUALS ) \ + template \ + _GLIBCXX20_CONSTEXPR \ + decltype(_S_not<__inv_res_t<_Fn _QUALS, _Args...>>()) \ + operator()(_Args&&... __args) _QUALS \ + noexcept(__is_nothrow_invocable<_Fn _QUALS, _Args...>::value \ + && noexcept(_S_not<__inv_res_t<_Fn _QUALS, _Args...>>())) \ + { \ + return !std::__invoke(std::forward< _Fn _QUALS >(_M_fn), \ + std::forward<_Args>(__args)...); \ + } + _GLIBCXX_NOT_FN_CALL_OP( & ) + _GLIBCXX_NOT_FN_CALL_OP( const & ) + _GLIBCXX_NOT_FN_CALL_OP( && ) + _GLIBCXX_NOT_FN_CALL_OP( const && ) +#undef _GLIBCXX_NOT_FN_CALL_OP + + private: + _Fn _M_fn; + }; + + template + struct __is_byte_like : false_type { }; + + template + struct __is_byte_like<_Tp, equal_to<_Tp>> + : __bool_constant::value> { }; + + template + struct __is_byte_like<_Tp, equal_to> + : __bool_constant::value> { }; + +#if __cplusplus >= 201703L + // Declare std::byte (full definition is in ). + enum class byte : unsigned char; + + template<> + struct __is_byte_like> + : true_type { }; + + template<> + struct __is_byte_like> + : true_type { }; + +#define __cpp_lib_not_fn 201603 + /// [func.not_fn] Function template not_fn + template + _GLIBCXX20_CONSTEXPR + inline auto + not_fn(_Fn&& __fn) + noexcept(std::is_nothrow_constructible, _Fn&&>::value) + { + return _Not_fn>{std::forward<_Fn>(__fn), 0}; + } + + // Searchers +#define __cpp_lib_boyer_moore_searcher 201603 + + template> + class default_searcher + { + public: + _GLIBCXX20_CONSTEXPR + default_searcher(_ForwardIterator1 __pat_first, + _ForwardIterator1 __pat_last, + _BinaryPredicate __pred = _BinaryPredicate()) + : _M_m(__pat_first, __pat_last, std::move(__pred)) + { } + + template + _GLIBCXX20_CONSTEXPR + pair<_ForwardIterator2, _ForwardIterator2> + operator()(_ForwardIterator2 __first, _ForwardIterator2 __last) const + { + _ForwardIterator2 __first_ret = + std::search(__first, __last, std::get<0>(_M_m), std::get<1>(_M_m), + std::get<2>(_M_m)); + auto __ret = std::make_pair(__first_ret, __first_ret); + if (__ret.first != __last) + std::advance(__ret.second, std::distance(std::get<0>(_M_m), + std::get<1>(_M_m))); + return __ret; + } + + private: + tuple<_ForwardIterator1, _ForwardIterator1, _BinaryPredicate> _M_m; + }; + + template + struct __boyer_moore_map_base + { + template + __boyer_moore_map_base(_RAIter __pat, size_t __patlen, + _Hash&& __hf, _Pred&& __pred) + : _M_bad_char{ __patlen, std::move(__hf), std::move(__pred) } + { + if (__patlen > 0) + for (__diff_type __i = 0; __i < __patlen - 1; ++__i) + _M_bad_char[__pat[__i]] = __patlen - 1 - __i; + } + + using __diff_type = _Tp; + + __diff_type + _M_lookup(_Key __key, __diff_type __not_found) const + { + auto __iter = _M_bad_char.find(__key); + if (__iter == _M_bad_char.end()) + return __not_found; + return __iter->second; + } + + _Pred + _M_pred() const { return _M_bad_char.key_eq(); } + + _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash, _Pred> _M_bad_char; + }; + + template + struct __boyer_moore_array_base + { + template + __boyer_moore_array_base(_RAIter __pat, size_t __patlen, + _Unused&&, _Pred&& __pred) + : _M_bad_char{ _GLIBCXX_STD_C::array<_Tp, _Len>{}, std::move(__pred) } + { + std::get<0>(_M_bad_char).fill(__patlen); + if (__patlen > 0) + for (__diff_type __i = 0; __i < __patlen - 1; ++__i) + { + auto __ch = __pat[__i]; + using _UCh = make_unsigned_t; + auto __uch = static_cast<_UCh>(__ch); + std::get<0>(_M_bad_char)[__uch] = __patlen - 1 - __i; + } + } + + using __diff_type = _Tp; + + template + __diff_type + _M_lookup(_Key __key, __diff_type __not_found) const + { + auto __ukey = static_cast>(__key); + if (__ukey >= _Len) + return __not_found; + return std::get<0>(_M_bad_char)[__ukey]; + } + + const _Pred& + _M_pred() const { return std::get<1>(_M_bad_char); } + + tuple<_GLIBCXX_STD_C::array<_Tp, _Len>, _Pred> _M_bad_char; + }; + + // Use __boyer_moore_array_base when pattern consists of narrow characters + // (or std::byte) and uses std::equal_to as the predicate. + template::value_type, + typename _Diff = typename iterator_traits<_RAIter>::difference_type> + using __boyer_moore_base_t + = conditional_t<__is_byte_like<_Val, _Pred>::value, + __boyer_moore_array_base<_Diff, 256, _Pred>, + __boyer_moore_map_base<_Val, _Diff, _Hash, _Pred>>; + + template::value_type>, + typename _BinaryPredicate = equal_to<>> + class boyer_moore_searcher + : __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate> + { + using _Base = __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate>; + using typename _Base::__diff_type; + + public: + boyer_moore_searcher(_RAIter __pat_first, _RAIter __pat_last, + _Hash __hf = _Hash(), + _BinaryPredicate __pred = _BinaryPredicate()); + + template + pair<_RandomAccessIterator2, _RandomAccessIterator2> + operator()(_RandomAccessIterator2 __first, + _RandomAccessIterator2 __last) const; + + private: + bool + _M_is_prefix(_RAIter __word, __diff_type __len, + __diff_type __pos) + { + const auto& __pred = this->_M_pred(); + __diff_type __suffixlen = __len - __pos; + for (__diff_type __i = 0; __i < __suffixlen; ++__i) + if (!__pred(__word[__i], __word[__pos + __i])) + return false; + return true; + } + + __diff_type + _M_suffix_length(_RAIter __word, __diff_type __len, + __diff_type __pos) + { + const auto& __pred = this->_M_pred(); + __diff_type __i = 0; + while (__pred(__word[__pos - __i], __word[__len - 1 - __i]) + && __i < __pos) + { + ++__i; + } + return __i; + } + + template + __diff_type + _M_bad_char_shift(_Tp __c) const + { return this->_M_lookup(__c, _M_pat_end - _M_pat); } + + _RAIter _M_pat; + _RAIter _M_pat_end; + _GLIBCXX_STD_C::vector<__diff_type> _M_good_suffix; + }; + + template::value_type>, + typename _BinaryPredicate = equal_to<>> + class boyer_moore_horspool_searcher + : __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate> + { + using _Base = __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate>; + using typename _Base::__diff_type; + + public: + boyer_moore_horspool_searcher(_RAIter __pat, + _RAIter __pat_end, + _Hash __hf = _Hash(), + _BinaryPredicate __pred + = _BinaryPredicate()) + : _Base(__pat, __pat_end - __pat, std::move(__hf), std::move(__pred)), + _M_pat(__pat), _M_pat_end(__pat_end) + { } + + template + pair<_RandomAccessIterator2, _RandomAccessIterator2> + operator()(_RandomAccessIterator2 __first, + _RandomAccessIterator2 __last) const + { + const auto& __pred = this->_M_pred(); + auto __patlen = _M_pat_end - _M_pat; + if (__patlen == 0) + return std::make_pair(__first, __first); + auto __len = __last - __first; + while (__len >= __patlen) + { + for (auto __scan = __patlen - 1; + __pred(__first[__scan], _M_pat[__scan]); --__scan) + if (__scan == 0) + return std::make_pair(__first, __first + __patlen); + auto __shift = _M_bad_char_shift(__first[__patlen - 1]); + __len -= __shift; + __first += __shift; + } + return std::make_pair(__last, __last); + } + + private: + template + __diff_type + _M_bad_char_shift(_Tp __c) const + { return this->_M_lookup(__c, _M_pat_end - _M_pat); } + + _RAIter _M_pat; + _RAIter _M_pat_end; + }; + + template + boyer_moore_searcher<_RAIter, _Hash, _BinaryPredicate>:: + boyer_moore_searcher(_RAIter __pat, _RAIter __pat_end, + _Hash __hf, _BinaryPredicate __pred) + : _Base(__pat, __pat_end - __pat, std::move(__hf), std::move(__pred)), + _M_pat(__pat), _M_pat_end(__pat_end), _M_good_suffix(__pat_end - __pat) + { + auto __patlen = __pat_end - __pat; + if (__patlen == 0) + return; + __diff_type __last_prefix = __patlen - 1; + for (__diff_type __p = __patlen - 1; __p >= 0; --__p) + { + if (_M_is_prefix(__pat, __patlen, __p + 1)) + __last_prefix = __p + 1; + _M_good_suffix[__p] = __last_prefix + (__patlen - 1 - __p); + } + for (__diff_type __p = 0; __p < __patlen - 1; ++__p) + { + auto __slen = _M_suffix_length(__pat, __patlen, __p); + auto __pos = __patlen - 1 - __slen; + if (!__pred(__pat[__p - __slen], __pat[__pos])) + _M_good_suffix[__pos] = __patlen - 1 - __p + __slen; + } + } + + template + template + pair<_RandomAccessIterator2, _RandomAccessIterator2> + boyer_moore_searcher<_RAIter, _Hash, _BinaryPredicate>:: + operator()(_RandomAccessIterator2 __first, + _RandomAccessIterator2 __last) const + { + auto __patlen = _M_pat_end - _M_pat; + if (__patlen == 0) + return std::make_pair(__first, __first); + const auto& __pred = this->_M_pred(); + __diff_type __i = __patlen - 1; + auto __stringlen = __last - __first; + while (__i < __stringlen) + { + __diff_type __j = __patlen - 1; + while (__j >= 0 && __pred(__first[__i], _M_pat[__j])) + { + --__i; + --__j; + } + if (__j < 0) + { + const auto __match = __first + __i + 1; + return std::make_pair(__match, __match + __patlen); + } + __i += std::max(_M_bad_char_shift(__first[__i]), + _M_good_suffix[__j]); + } + return std::make_pair(__last, __last); + } + +#endif // C++17 +#endif // C++14 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif // _GLIBCXX_FUNCTIONAL diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@functional.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@functional.blob new file mode 100644 index 0000000000000000000000000000000000000000..c77aae3b12f5489d5ae3b41c02b3db5c4ea4544f GIT binary patch literal 58839 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 G!v6zPP$azo literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@initializer_list b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@initializer_list new file mode 100644 index 0000000..9f48595 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@initializer_list @@ -0,0 +1,109 @@ +// std::initializer_list support -*- C++ -*- + +// Copyright (C) 2008-2020 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 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else // C++0x + +#pragma GCC visibility push(default) + +#include + +namespace std +{ + /// 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(); } +} + +#pragma GCC visibility pop + +#endif // C++11 + +#endif // _INITIALIZER_LIST diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@initializer_list.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@initializer_list.blob new file mode 100644 index 0000000000000000000000000000000000000000..1810a64116ed4a4e92856a2b1bd09c08ea86f31f GIT binary patch literal 16543 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. + +/** @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 + +#pragma GCC system_header + +#include +#include +#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 + 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; + } + +#if __cplusplus >= 201402L + +#define __cpp_lib_quoted_string_io 201304 + + /** + * @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. + */ + 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 // C++14 + +#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 + +#endif /* _GLIBCXX_IOMANIP */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iomanip.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iomanip.blob new file mode 100644 index 0000000000000000000000000000000000000000..2ff750cd586403addb25a1a8538a507c8f8cfb63 GIT binary patch literal 41084 zcmdsg3w#vi)%Q*kAjAkX#E2=zg(8iRyAa|^Lx>@U2x-bqUPPA7WgIIy>GXMC-&}Xyob*b!&*cnw zee-|TaU4r9PBP4_DKFQaJ0jiVu4`yYpHtV6S>X=&Gix1zYNx~F@uye2JoPSLdR0T6 zGvM~t`7^35-+lY_sb{;;Nnn1x%b!_1e!@7@msFgHo*f{u$A5Et#i8S1H9A@^V7dU+vRh4y!D+v>a8cnG9`b1zz2pt z=gj?W!bsg`v%)f*uvj zwk|san%}Rm**P#*X%~Wl`tI;>hw14D1MK#izNUW)OyqXj-ClnLyy>4+5M0qv)rDu( zrB*qdt}f6BD5@6Iz)N$hd@h$AJmjwH5{5iLz1y5g^iy|MJA9znMpJxrKqIptSgAJM z@2;&(uXH&*>Ha`Ng*jh$c-=7Y@Zr!P5ZBHGukT65mfcS16tLJ@qXov6>c6$&$K1JnN4G6ukAk0}x+CA$bz|~Sr&IO%yRIc5!bnF4 zeD-eIj8&dMx~tLQNw0MUs=bwjl}Mye=bC4-1U+(VUA1sWs^)Pw9cZM(Vs)aTOM-%* z_qnR(`4k(s!w6z74(Hr?4qs)aqaon!x`jz-xZ0;#I(rcYJgb; zc|bH6Nna}Bu(O>Yro?WXv!B}ZIj%aF&+W`~`FwTWbU_=%e}BhR2=S8G9&1)a( z=G#~wsD^D?$@oi$C30>jN7#MPSk(?cKObpBD_s>0b21gY2aoEn_>2vVDB312*Ic%@<)-6lOsd<*_BTW?DH>cf~r=TcwWSk0Lv)?-)4*m0NWC`1D1B&2|=ww~OVF8NZ*Ea&^}kPaTz zz>6gO`PnMPdW}FW<~vIPkMt0IciO-DSf?B1@cA6`O?KaWbe2b%Bm^QDK<2N7OoUG7 z>uhRrRJdUvy90JbVyZ@W2jQfrG7c9w=D|Sp`XFHJL?fmfrhiFQ8H$oW=hJHF!Vb^f zIrp4T(}V<}cJ{Ek{W|1#m3$pOj&5`yUvuoUvZ9G}K)(6&$|i$0DO$k-zux6M-}l|r zfzRK)9@MdY^FTO^?+!Cp_fiev=ujx^$$1@PpyF19RY!75BRtMgS|?4gtE^z4KP7&F z*t5BDr+=2{2^6Rx#gw2R(VXe^Fj-wJsv=>Fg^pJdI^Z($5>30)58gQ+a{ODdhN!1b z4IzVqG!v-$VO90l^$3jqW#0P8mb?0BmD}TjjS3NOLO%NL{F*mliY;^csH#u*c;{5m z8y&X8{0)`pYa0TtCezo{IVmnA5Y(C1%|S-fUd#tqc;0TWs`vVHM}$!{Z-(ZI!*v$6 zrZxj|95*!`HMN3izE~UFI$bCwOl=#o6BqzF1-v0rC)E3l*UHb~mNIo4WtVw?)!`2_ zT2)k-4#u*MB^rtT`^w=eB_#1V}7c`zK{ropeLKi zbZ7L_P<2BDgLEFn#7&oCK0CMH=^)1inMc#N)R9@9u{u;S70KE|4iMX6f*f5(NMw?O zZidP(8CMAHu?V3FCtmW2QJ}f%D&3AwGhQkJP3G7EMS8p|3d>ywb=qmr)hVXe?E!`l z2OU(o*=*GC+a-*^wouKA4(6u11ShkT$&|!>g+n7hz_I|@n*ijDxxLYWs{QpIcOWuR zcfhtz+^|6!K{V?(C8YN4O16n;Lc?8{Ky@;6nA}$bIi?H{VU`^ENmqtX*Ql|ps)A`L zy}P^$bA7;vaL&`22(poAu`!%5^0sT2X$ffA69oMho$RP0DfKz6bp z{G{qnBJ1LGb!uiSfmYp2!*-W@Q>a+W#hQE7=3A=Og&6QF2I=q))ssZd9_ne-=|z^R zk+&@pWrBYdo;t_!lwgfhQ74f)V?<~y+Vxnle$E^{Fbe`k#0QVcjF4%kl&=HXIU}id z{;IRSAswpH6!}7;n%)!wj6LYc_-l0dpcl+CZXLFkm!c2u8pe&xAX>o=Js*kVw2g^8 z)rNo@g3~PEqu(O(IE9T*14beTiqyD~&T4k~P@&`RItGXaaz_}}-uV_PyRW)P9kN;x z-_k@oP#1=8F`3N}gl{F4eDyNDY~BjgUH( z(@Nrke@$nkc8ocrt_N{jlO=YTw0<&*YN5b@Y4@GJOIu_5mVN+@Lpx1Hb{Gd9YZrqo zs&rJVXv}q#@(j)O+%|=#iqa#nt3WviQYiB6^_gH@j{|LYx)da({Dj-gPwjvtrdq|b z>)P7*g~)*t{hVQKoHL%p-BIez&V_^Lqy>GLm^WK6jwHlgJ=>trQz-@cCS*Ydj~?*u3(0UDP4=Rcj`q&9SR^rf{LU6IC*C zXFJfFT2{?CUb(qTMKbUzov43yAO?jRIENBr?jUKD1dJ)8>Ip*Ii7tm<^l!uP>r~L{ zpH-w{q+!?sG|bkBDxG&E>c&tjfk>Rg$I+iiCL1#!G$m_IQz8P%0;7hZg*9SM3yK1E zdcAYqNQQYeLoSjwHt&Tp6A=^rdc3*o8ohJP>EFC(b$-C#Tz6&2Lg-Q2c}cc@Ou$+= zV}ju|^(i&QUS@WWQLYo{Q_LPxsKGMb>>hUzZXQX&Q<5e44=H7k+^{J=_O++S!>FNn zj+Lrrtk^}HO?f9(p9mRkzXn0IDQQ;w6t0*AFqW!W@~uOueD#fBD2BTu6;NJnCl;SKFOSGISCtC(Z1^y*3Tlh*sMXTpM`O|&x zzqtP2V=^uA(Rjil7kv4ntLmraToq};Y%^PbplQE}slKUB`whT&lKFa`@N%`Pg_Oau~k-a>@b<*BlYS%sd-AX=DK>tFNbM>`*rmpqyE z;5UypEs-zG8vf~qv}gMYq~;_zY%6A6lc(&qT6-8yrJznGXfMvV5EkV2@`0wRD=Y=2iBhl^(A-NJ$Q0ZY@E|6I9`dW#&A#D^!(~(C z*Q|}d`qPpVU&+J1o$`n3Hx{3e3kJUN;~w6p=g9lZOA7j2Ir-fl!34>Nwpjk)(SPlD z;;tRPj}8tgFuyoJ8W0>HWynkC6it;!R}A7O2jb$u@QW!RgcNCr{PNYiqlW(L^=s)# zm3i*ZT2MSFDQmh)g^U;bWLE&W6Q`T1h85n2;ig?lh5dnL*Ii*5kv~A%7qgF-{Cvy{ z!z@;n#5&MefzztJpAlzONsM~2TBlUItf*hpKM-e~jMM{>lY>YJ?vT}6QGC;jM|&@6C_*HoX1TyfGJwRX^jYKC|VhZ+kdtG8P%9pi26ON{|FzVHq}} zkF+>uaRM!QQOuI8PM3@hstil!zO7@eY9fZThAX3ctF5N8F+Y~)0-ZapLRH&r)K`_; z<*BrCGL)zr_q{~a_#1Xt8p%C?)vhM%ylPjSwZOp>h_iy^^U|!@S^PwHZkiQUX|Qmh zUOn^ikGe|gEX(SyqF3zfj?p`gy7^WwCgQUqGuhx`4*2EQ&#$X}Z{*hk%h}KUvG05uVGF2Ol^v?@3wKX12tAviS-Aj^g_!67d2#Cn(u=El}5T(E8Ro`GvCXFerI zNzdim?oRQDnPyzrxcc#wC4V-|G_uI%F}p3|JDF)^Y$eas8C$K)^zF7c_8*)$r(M4P znVE+ltScKYX4<~8>gkFPFA^3BHlEHLDT3@=IPJ1BQf4~I1sd*%)#BJHJD6Vh^WRrk;)W%WVQR7T zq@P$QX;#!wx)O9V>t}{b0GCJ^3{L<&L4}t{LxW4C(R_Uc;1w#o8}M!w-V1oI0?X02 z{q@*8OYi&Cz!;HPlBX{iqx&p8FT}g2V^1@ceG>b*LS^Ij*ADD`XH$uM>DbiWAN7Cf zguv|!EvIS=gV{-jDgLK9qJv&!+l*9gYiuh|^wHQSl!=z^iAnIyPIyxO+gkhKQUcUEdA1&X!a?WA-n-!k+uaDj0mfL>)^O1YbEc>OLHYoGM+ol0H(&yO2 zfBpF2!5+aK(n7Q~MpN1JqRKf&Q(0vp!NI4b95Yk--3teZ{MN&tbc1!}Eu z#RIh!X;$TG$UlcNBn8+{3c5hrF358rELaJ+N-79hq2rnYh+Ja!dLM?|a7F6{VAENN zeMsj`3HNpAyb#~DV{$eden_pU`ciqzdIMs+8Ql4e=t6VmF=s2G2vyNmtb!i4RyqQX zPzNE|1dgo@SVg~h36laMqvT0vM!$FQ(UYg;E6c||YPsglO9e*nx$E}B_ta+m$-o=` zY5C4OV02D334b8=05iyou`eqO^62f=7u|Jx+(`Mqe^>uwd-CL+VycUO`N~CqKXcoK zV)IRWdLC$w@byzwU!P)HaQ@S*6<)6gtO+;RbA=_hAVCU7VV9#MHhY2+;Ap9^3pJLWsI>YN^>`9*DiP#U7DZVxTo^P}E zJ=r3^Wcl~(wvB6(#1wC9{^t6q_bwYLsGUR|6I&>Pr3pK}u1dRe(|k7QJX@vtEWkNk zqIsom|NnQAS5_HD@k{@4!PAWg-A$L+p_V%b7YJ-S9g4k-MRK9We;_ zanO&wh%&%s(h!DM!NOT3vWwB+ns2G`}d!?Kz?t*KWw-BZPP7ck9PF?rZslYa~CN_^M87hY=MNaWyoyK1$X7DX7fnE zzfc3q@~MmOzjF3XiSqW5kN1nRO@2t8^xEcWzdCY>Pk!U#*E}bVtb0`6=54w5y_P43 z^~7%Qj%fSL;bPN^MN+?Dk(4O!y}x~aYl7`Veo}Q-jn=a2wHhy~#AaqfiyqY-*BMs! z@u*QiV^7)`o?rMg#p5aG zm)-Y^3*=AV-jRGZt0hK$X3no2uH~boo)7~p3XDW(dQsgcBN3{R5hJ~+Arj+7RmzzW z;RjbNeQMT#=${LfNCu!`^_uxdR~6dplHI=<_}Q%5{r3XCuS<5n&I+XQ&SCdM1lw%* zA!|&1Q*{@*Wcce|Le_=G6HY+LVvK10$KCz;yggTa_@I1O%bLs9j|hIKlIM-`A7*}b zS?NnDd()NQ$*m76 zUR8KEuS==H*QF8Y=5;BFAefOI(yP6Yjvb9wf{u@16OKrU3>5(?XJ{CpT!yLv1pvK` zj^CC>Ffhe9_Balh*Pi`AVo_-0ra>O+%7ev-5N#EK!OMx^3^XrdU<-Q z`_Q+LY?2lVi9#486)g`V?~rDp)nVl4`d{nYyn56+B_-bxnRS?UGb3{*LCOMVVF6e^ zCSQs+4c!cS_~?V*#a=gF^&Ocxv>=al!6Hka0SPqW+ps6MVH)K1-Uh_qPLe{BkN?lt zmV5uQJuXU?-h6!L&Ij_BO7cy8Zy0;@`laQP<>F|1MudH$g7>16d!bCg8)}M#+knfl&hGb>-83+MF4RZxCJfiJ@82pNr9AiAbcg5J zdFE6(8M`o9rOL^88!)Ic@qu?|pMHDvaw&K{sPcNI$`6K|Sx`4+<9PFaoao2NBF~9l z0HGHVdx=7DX&4&GGM6+7Z5HNL>n)2fo`3bX=S}5yI}V;?XWMLSkDiO(SAzGIKPtVC zky3(Vq%6$j_3eF1Zk#x^r=U8mzYwjdqHiMAQV_)#7P2TABYDurVo=){sSiOkg0?b+ z;)P)w1;aKOEe%*03oMM4Dlzukfn$SRzkQCm+h325@+lllHAn%6+e56Hm_n>7$unZV z>+#~Kf0fc0kVg0kwxh>(X&8EZ3(#8(y$|Spf@DGUUBa-!P1c`r@?5PuRo9=NZ`BDG z6P~15ZrnVS=0txO!BN3{AUIzt!sL7qEk0=yrnK-mYmfi>X8$-{e+E<0X7i(-!Z)9K zj31$TZCa0c5EOYV^*w+*tp08~n%{F-a>h++96*_Y@=F?hgj9#N5ZYseG?O3_61mb+ zv=+?gyF}}T^*4XB>u+jvZW;a={XVs+p`S zJ)!yc8IX*@_9W~{BUQ5}W={#GCCPIx9nk#zS?@3~J9aTj3;St7o9O2go(GW}s5!7Q zMryBV$FDp;XW7vSe|+&qbLq6BbO&sf9eF!Qx$i983G<o2F7s?!^6G zQQ;8QUsLez6fhQZ_L`#wb+=od24B7))lV9#Cvr|e zD4n#OB%$<6%j~~AdnWy;(BLLIDx}Lz?Z$j)@_eZgnmiwv1w?zHX;9T}93vG%$xpya z3xTvkDF;K_KKx6GZ_IZm45)@G!1lTnOp}-7Pw)>WEc;{pMd(djDJsTjNng&ypO z0Bt`BJ0b6joe&&!$^Q&B9b`x94s6|yq#fuydS}i~ywGNA!`8JeY+HkuH(a;jgNda- z*<||i$EhFV<&Tp-rhWe;=M%hq+IE`u{h!O;ym;%#`&&(43%-Pfy~GQ92@3<%X=QFN zlpzmBBThO5UO2@5_#vqX5KxKVVQ6H-9+Ilj$RBT)rlY}*!*2~*Bj)r!_w8wz`uV}F z=9^SgT7ylh$*ZAFnp-#*J$p($v`KwOEG~Ec&{R_g5Gl$I`Lj*X(he4^4aGnNLRH!u9#vhmhe@uM%dGc ztME~7oT9-uSSyK&9k+zS%v)CVz*2a_HoyGWFgMr}>q3cKc^0S^tq zQf3V4xBH324RPk%d8qUdw)0TlA==JY3tz={wwJckc7E{ZV9(#KPwZ(ls50GH7k% zX4uWjAELEbS<7{36_;93i57?sr9MSvmzH!85#WT0NfWcM@RYK=7-??OT)>_b58!o4 z>j1Z;v;f|jv=eY!N*mx;lU@bfp3)BZlcY}opH4XqI7qpTkrJdcyoeMux|Rnhk0FXa zyZLSnuGR204eT}U>L`-H9%2UM5*g5MfjQq|=zT!%6C|&^JO1E|iqBrvxntNBr7V}YKFJs)8a!&m zsG=BYtaU7KQDQB@Z@IM`zf-fOB8FlgXougjs$|vl7-@CdYH-rcX*c6{P0X4^{N}7F zjFHxttjFCAX&Z2TW752%%Yb98Tc(h!z_?q$w8xWm%z_h!ZF?z zfL1WH4R37YH@4x8ZT!Y=+}+K0_X65Wko^4Mw{Lv)skQHza$Zqt5jd|XsfajlT+TRf zUa_s1I4^tsJo^i;y!0D$Mu)3fiUwxKZyrH#H$ZeF&}hQBxSh*W$^(?gP`)$`mJ76z ze9J#he17jO7exqW?JwPre)s3?Cn54;;fv*PHcJlxA@WxzHuV3|o4r02L=^hl7XlTi zr)I*)qEcIPZMD-2azom)&;Rs~<6n}s+CF*Wo|4M~rMuRfqU%uVA)xC}(jh|Et2wU% zUG27ZLRZc50dLHFa9gc`6^z+ZP;8$811&e?jLOK(xbjAD4GPZjL1ldflRs{($B%Pj zE|;}vk~KT;$_$G%Dq&Ox8E2znM%7_)lAQYF*=I7Id~=B~&O|A)mTZkKNGO1vP+U{I z8Um%J48L;Q-?x7F#FZt#5H_g7td#OA7S+d!o1`)rg0bp#OYRiGXW9;Yi;2W&6Olz> znEcdb7jL=p`sSHhQE=?2l2O>Yu_MNUGfPI4;J184Iew=WO`QUs%(8=D)(lt!`}~dp zci>k(nDz6%MU~%0h$T!YodDvPkT-#dV`AY%5Jy>Q84<_tYInUF9J2C+>BhltO+~}z z;WvpO;8B!9_JS)r1PziRxCQ*Wg^kE9@cg&1=f4%#w(_-Bc>b;I`ELh*ZD+oI96dkI zp1+8IQ7BvsmXX{`OzdevAe@WjP-BFHoIo|sC|b2A{YY17|DYIK+ydRdDcpu{HCq>0 z7a6Y70W*)sg)m&$4T?NobyXf;H@qRjc7}`UhfC<`-uRQ5X}xCn@a$1>i}Z8Cf5k#y ze+%z2;LA2l6&V4itJ>?KPtS!-%jcToYEnL7NnhRwyBi8AVl9S|1HPQ_QPsn>;g_A& zK5w0uuIkp2ty^pO>>@m7GSd)V^!?ExD!cNH?hd1>Y0=QG;)^SYM|iMs-LNC#Iy|SW z0$)-QkJED0O)-1iOaD(rQ z-|}Lr-fX}DDTPY?BnEA9)qz00Ei-eD)0u%zGQ7SynO?3pt@Jwm^j}3Nyp&0)D1QL| zD^JsWe4jm2!#mEx2WmZ#SC`77rdJjROJq?xBa7o3vN#=AaO*?rYi=s+d9Ke)C;h8KdXJk=zD~oCdS!Cj6 zQIal;L$TVSUhOz?oTjQ|OHqC8mI0e@)q(`_xWB%5dcrp!-KRy6`P z)|3}La^Iz`hxWd#MRByuCJZ`@l$Ds3EJ<0G;3ZK}q5J`igK0?BOp{U|V_i6N;o?NY zIw>9rp#)spjI_XJ$qG5XYST#hjknGyU)WO84XQy7%0*#v=P~%+h`jga82na1TR8?V z)@jhqh=IVCRL;h*W*z|5IyGS`$7H9*Os!#6EA*LAwc>=5cBm?PR>CYqVJmAYm&0DK z@!(hX6yD_Wt-9r7Q%zKnS^+IokyJq@gfqtp6Qa^qNhZXU9(^aeN*>r^`r7`~{djGE z(tdjF#he%M+5y`EdTrag*`7OBm;TkvVrTnYZ?JbcjbcFg_jZxAQ&ZYeFYSz`c7jAJ zG}dY`wFAH6TtmXRq;XKv#VN&kF_JUM3Ai$)67ce*<$zbDtN{FI(xZS|Q(6JPnDipx z11SdppGZ0Z_+-jSz=$2iq74Sr3$9Nuc7l2X>dg?Hsd#|zZo#!Jd~GYBt?VNG)_(Zc z?SHzz$lNkMUV3~wqJVkF$v`<#c%mF*mY$rBjS{RBPKNW8I2`4Nk0c!7N~R+*NAj5d zgn=sPPn4x<2ZN%ICLA4zA!<$r;Q!T}#;^RFk39c8wmP8yUM`HfTsG?R0Oc{1kGNqz#|_88^%}!* z!!c2p&n|CiooGJ8par8?q+E<*!6<+*Pf?OhS(-F73W!G`78Av3&&RLY^7P=G)QRS( zLV&Xr4d}ve9zo<-^@L;9lO3yGxZR80sosEkGt?K3RbO_j4lIp3^^<$=91&r%J&KFhrRCDx2RK71q<@+Kk z4~S79GF=>%k4E^p5RIbp{gDjo&pEsP*t`A`{2%$#)F=C&{!v?Wm!$XjIwjGsi-&0W z8l@_LD%v7f)l@AHuQKQdsn(D9LB8g?w550c<@i$bDyMfrIq!0n)4QM?KwxAM*o6rg9dfS5$Bu^%|Gn2(+ zCN>lhRx9fGqk>rwlUXb#v+-OubGxX}``(Pf)n<|TB27enS+?=Ruzff;R<&HjJwy@O zc1(0T7ok1Y_Q&YPi>5yuVZB4Jjv*-CqH4M!STSI%_>1}D>wkUeEzwf&a-s%~Sjxi$>yG788jI^{yrPMcII;YbQ)6p%G){A|sSbWdlwv z*`NqkFf4zM26bP3j8~96RxYIebns8FpgA2wcgMhapke$?S&0HI*%74D%HRnIm=i=R z+6Raf%M#0l7aAf=#V|#VJ^Z^zma;Np6$qM2v;YsK|eW*tpsLNY)2wQYW-6AD#SP(W!yVQah{AP?Ijs&YmGSy02 zKCd^&VztJaT?Ynnl+DhSo1;bXZ9a}syZss9IzH#Zw6X&vze6fQ3VR2n>JF(zE9t$E zDP&I}%7IAimN%-nvI;>IeY&%)?c>geQRRcU@KjUEeEs~K%MM%sb%HanzdKs#Zm z@8r>ULU`@u0;AnPz;4ch>;<%!p{Kw$Pf;u(_%t-t)8xo$h0I2hVVSStiN8((VzCSy z%@o-JA>IPCMxmz`L@EGlMbxoKU_}Ezm1y<2{{(U{Pmo0itjt8K#+afiR?#dt@oX|2 zjuTrFa(K9P2#c(P-$BDEfsq`oAeV-tu8Yv%J!xk{Lge#(Y0e9p^D@mTsi<(8TL9yA zfi!HO6kG{JuVk8A1>~$^niJ(V9gl#6tpv^0faYpcnp0|V?$m-v3e7bDcMVK)ji9+k zrnzRQ(PqwjH^by=W~*7`Ock0_%V|t$&a2T}4dOvHD$OaG&nhjwOr!Tk2DBNCXs!t~ z*Tgh8AJ+SPj`Po#W&^^$;@5))Pa8S8foMYjtpK!wp;e&1RZM+1gZge}>Jz2LM(P7< zh}Z^_=Z}C`1)7I<-vu89uqN zjhaM%Dd>;1i>RkIPEVm$QI-|X9M^+6u2-4kdN2oIt(IG1js`GC12ab>n4^)IqZzJh zGh4`_?pPgDlrFQfskaOsER>D$hEdyyd!%mg9|0KD%~&Yuu~Hsn=vbJvW2Kc^9kn9A z3!xVaDIBRC_9L^I+!pl!cqFRQ;*W4_T)qm+?Ah_>_a@fD^JaCEhpo?(nlRlwATtj> zhceBpkmbFKs7X7V7~zZ~^dSrOTxlchx=p!la6wB6_Ns&v z=Mw-;V5m%r!=YOW5|@La%9)`=87rT~4-qQc%uK0tR^JkrhPVV-&edp*jFQVSX}}eV zKrNJJUs{_L9jlmASy7@VcijT6!i5Hw1tn}-cu zMBrC6OW;}e_xFk4;;r!BfxS>S;x#UD=QJM zOCm?3E(I-KDh+^@l>&}Q;dqG%V0XjpSutw`6Aa?iMsp`>Rs1Rt%q_{c5W$EdZ?;RA zqC?*pAmpix-V2Q0OJ#JW27Hs2q)`~XKeTCo)~1P29f@2IDvBY%A23fbd6y+NmPl^# zz{Ol>yEt)is*e@KlH?^YEaiKrG#&bI$FJU|Jr;jrf)}E~7NNITEOQ_~KwS`rdi$8H8%H>+H#B(OqU$|%Iq)f6<+vEnOy8Z%(k z+9&)}3(2$6b1N|f@<_L8**Wg0&RPeC&<^DmPwQ9lts`Ub;E{X8f*CU5_gp;x_=^7{3v}+6R?2C%rpihhxyn$JA(mQr5Y& zLntK+@eK+)T=sTi>*b?t9}0G)zhi=zKuTRAjRyOT2Q;3crNHe{sT9|q1oR|9T8)kg zJ~gZe;$+Owm;Nk6ClF?)PMcaum_bEdrG{g|P*hcF6-?8*)H*Uy#kXj5U-+@a#l`FX z3BIgCErbhwA}>;mHi`Ph-=ongDirpK27^VDqpO{YKR;9JKV+nNV6k}ENb^7^do&}h z7UHg!jWm%T?tn;&MW|d}xw4YE9694KF0Zmy5toa4E~OJ=5m`t96t5|6A(WxYt3}J{ zGuleZO5liUeB#)$@#W~t`V$=Frf;K%-?L_8PJ{Xl%8H`j5s2yIY5C#d@88gP@b}yFvygHu zIR&6;aTrArVv0`gdWdnx3=T2ADb?fn%2KAoH{l)t4hu2915@-J4l#=FnsmNLWoycK zk5Gdbwnyb<<+Mj4#jVUZ@+XfdoF;-Ny=avIn&d@GEyBOL7Xb(YJRi!T@_I`K7_w6p`srH6nYN zNS3H^&@k6jy8(%&3xtZ7%p#!)a7`1~HBA886X2SP%#EV@`r~SU+6*n@t!5e2@2!Un zLq$A$>nsU$7*#r3c$PIF^5bP%YF%*`65)0wvholm1e%EA?_pVzk_g);8&57I`bRy% zLaktdh03YHr^t*El^or`dhx7c#yZM2!mwTvUjnR;PaaQLe{fgcBDfV>+4Z! zR$*5@sIPuLAODAi#bOzuiHwL(S#z?ougpTWUkdKS_iFZW$XS6VsgmT+{eJc3xUc{5 z5<1lWNLd533PFY9Ll~M8?{cL52t>vaHPWtpF{7YE;vfa$gOVX4Gi@}%AlyR%q0I=D zY(~rpyMe!L1Zyd9MLXUHmcEYzLdnnEa>jShyM49Q0FZ)TLkNG3oT#K7_S7lhPV{j$ zba6I>42_(P&`q{fr|RPzjF`jvSe$H7=pa(8gjhz4z_rb4V>-a;g)o14SNtx}!S9lP zM|2>nnHs1G{&T25>>7K~Yl_z(Jab3!9r%^SsgiDB+B3_;n8x{$ zFih9Q*8$VsWG`V_B$ds+tb_<0$%EFlts4oQ$TM%$lG;ptk69lhTSY$7{Nj_J9=qXu z@PO~LpKtJiKJCuPqdo-MZZ5bPVTX+c8!7l8zA>nYInDB6Q%rG{+E=%;tAu0hVXo5Q zVTZ|867^~d^1Gy;D`!RIH~_3CR1D=#PtH9DLPfszdm3|ou82NJBM@D<^b1J5;wJy-E%Tn&>%u#7|{ zjMK8Pg~K>F1sWE{S#Mnr8rcxD0RfziF&in2BmV1=aKWb-YX}UnCH4x^Ag`#w>sKIF z0n6err82#Cm^kfJov)?6!+!1{Uolwt^Mqw@CCmQE zup^vNIx_f3j$+xL8g>c?gU<{*gI}$VPt|tX7E_%H_v5tmNuz%5w%yGh0_yz=wMs#D z{2ohv44kqnbrGTieEB4uv#fVs4jp7l}D>eyl&}tdop?RQ!ff$Eo;J!2buy9}xa;p1Sj~l3!2z4RM(G1J5YR zf`(X%EI!5Gjh#O|>okvyWrUlx{&Qn8?zEphNAi_prUQw9PW$WRfY z>_rknWytFkq0!w5fF>}s0HL1+(j?qn0;6*Y7Za`kw1T1CfOa#q7tmgUv`?DoGCy#^ zlxiuKSfD78`8hlDYz;~Hvy;x&s2QLBNJ{pn$^q?TimKkAVi#x&HUDTVcG0e5**YIj zeZ?&M*n}`v6MG&_(5_7=b`f7KQ(V0H@Dt{KM{`RM9yoJA+J%!c@0s#tht>032hPaj)GE*LZtwZioe0DQl2a-q!q;+ l4Z9(l?FR9`bN#;{*?L2=^=8S|8. + +/** @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 + +#pragma GCC system_header + +#include +#include // For ios_base::failure +#include // For char_traits, streamoff, streamsize, fpos +#include // For class locale +#include // For ios_base declarations. +#include +#include + +#endif /* _GLIBCXX_IOS */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ios.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ios.blob new file mode 100644 index 0000000000000000000000000000000000000000..ea12c1f963ad92736fc1180df08afda69c985d35 GIT binary patch literal 12581 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iosfwd b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iosfwd new file mode 100644 index 0000000..0504075 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iosfwd @@ -0,0 +1,215 @@ +// Forward declarations -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +#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 + /** @} */ + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _GLIBCXX_IOSFWD */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iosfwd.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iosfwd.blob new file mode 100644 index 0000000000000000000000000000000000000000..8fd9331fe9e9749d637d55aea53e776850edbb8c GIT binary patch literal 20915 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. + +/** @file include/iostream + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 27.3 Standard iostream objects +// + +#ifndef _GLIBCXX_IOSTREAM +#define _GLIBCXX_IOSTREAM 1 + +#pragma GCC system_header + +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @name Standard Stream Objects + * + * The <iostream> header declares the eight standard stream + * objects. For other declarations, see + * http://gcc.gnu.org/onlinedocs/libstdc++/manual/io.html + * and the @link iosfwd I/O forward declarations @endlink + * + * They are required by default to cooperate with the global C + * library's @c FILE streams, and to be available during program + * startup and termination. For more information, see the section of the + * manual linked to above. + */ + //@{ + extern istream cin; /// Linked to standard input + extern ostream cout; /// Linked to standard output + extern ostream cerr; /// Linked to standard error (unbuffered) + extern ostream clog; /// Linked to standard error (buffered) + +#ifdef _GLIBCXX_USE_WCHAR_T + extern wistream wcin; /// Linked to standard input + extern wostream wcout; /// Linked to standard output + extern wostream wcerr; /// Linked to standard error (unbuffered) + extern wostream wclog; /// Linked to standard error (buffered) +#endif + //@} + + // For construction of filebuffers for cout, cin, cerr, clog et. al. + static ios_base::Init __ioinit; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif /* _GLIBCXX_IOSTREAM */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iostream.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@iostream.blob new file mode 100644 index 0000000000000000000000000000000000000000..454b1b22e1cfaf3021870dc4c5e713573aa9e968 GIT binary patch literal 14595 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@istream b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@istream new file mode 100644 index 0000000..407c1cc --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@istream @@ -0,0 +1,993 @@ +// Input streams -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +#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 + __istream_type& + operator>>(long long& __n) + { return _M_extract(__n); } + + __istream_type& + operator>>(unsigned long long& __n) + { return _M_extract(__n); } +#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); } + //@} + + /** + * @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)); } + //@} + + //@{ + /** + * @brief Character string extractors + * @param __in An input stream. + * @param __s A pointer to a character array. + * @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 @c n characters and stores them + * into the array starting at @a __s. @c n is defined as: + * + * - if @c width() is greater than zero, @c n is width() otherwise + * - @c n is the number of elements of the largest array of * + * - @c char_type that can store a terminating @c eos. + * - [27.6.1.2.3]/6 + * + * Characters are extracted and stored until one of the following happens: + * - @c n-1 characters are stored + * - EOF is reached + * - the next character is whitespace according to the current locale + * - the next character is a null byte (i.e., @c charT() ) + * + * @c width(0) is then called for the input stream. + * + * If no characters are extracted, sets failbit. + */ + template + basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s); + + // Explicit specialization declaration, defined in src/istream.cc. + template<> + basic_istream& + operator>>(basic_istream& __in, char* __s); + + template + inline basic_istream& + operator>>(basic_istream& __in, unsigned char* __s) + { return (__in >> reinterpret_cast(__s)); } + + template + inline basic_istream& + operator>>(basic_istream& __in, signed char* __s) + { return (__in >> reinterpret_cast(__s)); } + //@} + + /** + * @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 + template + basic_istream<_Ch, _Up>& + __is_convertible_to_basic_istream_test(basic_istream<_Ch, _Up>*); + + template + struct __is_convertible_to_basic_istream_impl + { + using __istream_type = void; + }; + + template + using __do_is_convertible_to_basic_istream_impl = + decltype(__is_convertible_to_basic_istream_test + (declval::type*>())); + + template + struct __is_convertible_to_basic_istream_impl + <_Tp, + __void_t<__do_is_convertible_to_basic_istream_impl<_Tp>>> + { + using __istream_type = + __do_is_convertible_to_basic_istream_impl<_Tp>; + }; + + template + struct __is_convertible_to_basic_istream + : __is_convertible_to_basic_istream_impl<_Tp> + { + public: + using type = __not_::__istream_type>>; + constexpr static bool value = type::value; + }; + + template + struct __is_extractable : false_type {}; + + template + struct __is_extractable<_Istream, _Tp, + __void_t() + >> declval<_Tp>())>> + : true_type {}; + + template + using __rvalue_istream_type = + typename __is_convertible_to_basic_istream< + _Istream>::__istream_type; + + // [27.7.1.6] Rvalue stream extraction + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2328. Rvalue stream extraction should use perfect forwarding + /** + * @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 + typename enable_if<__and_<__not_>, + __is_convertible_to_basic_istream<_Istream>, + __is_extractable< + __rvalue_istream_type<_Istream>, + _Tp&&>>::value, + __rvalue_istream_type<_Istream>>::type + operator>>(_Istream&& __is, _Tp&& __x) + { + __rvalue_istream_type<_Istream> __ret_is = __is; + __ret_is >> std::forward<_Tp>(__x); + return __ret_is; + } +#endif // C++11 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#include + +#endif /* _GLIBCXX_ISTREAM */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@istream.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@istream.blob new file mode 100644 index 0000000000000000000000000000000000000000..0d6b0d6bbdc3f0aa7710b522e670976d72203b3f GIT binary patch literal 51179 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 z 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 K*76mt<^KU>PPTLa literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@limits b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@limits new file mode 100644 index 0000000..ffb85c9 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@limits @@ -0,0 +1,1897 @@ +// The template and inlines for the numeric_limits classes. -*- C++ -*- + +// Copyright (C) 1999-2020 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 + +#pragma GCC system_header + +#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) \ + 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; \ + }; \ + \ + 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 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#undef __glibcxx_signed +#undef __glibcxx_min +#undef __glibcxx_max +#undef __glibcxx_digits +#undef __glibcxx_digits10 +#undef __glibcxx_max_digits10 + +#endif // _GLIBCXX_NUMERIC_LIMITS diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@limits.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@limits.blob new file mode 100644 index 0000000000000000000000000000000000000000..039a5639c6bd5787e00812c01fdbf38023eb4519 GIT binary patch literal 154887 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. + +// +// ISO C++ 14882: 22.1 Locales +// + +/** @file include/locale + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_LOCALE +#define _GLIBCXX_LOCALE 1 + +#pragma GCC system_header + +#include +#include +#include +#include +#if __cplusplus >= 201103L +# include +#endif + +#endif /* _GLIBCXX_LOCALE */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@locale.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@locale.blob new file mode 100644 index 0000000000000000000000000000000000000000..5e0c1006934b7a6bff325c92c9429ca39c505051 GIT binary patch literal 12580 zcmbVSy^kzM5#KYi#79D4Avv+Ih|FnjeCX+k#1h!}3!T6Lfko2l?d{oZZa&u2J-2sG z?T7@4hyajC_%}>MhD3%05`-jVh=h;#sH*On>)ENEo%Km?wNKk!UHz-?s{ZEc+1LK? zug_K&t9;i~I+vR!-x`-&yU(4rjy}X*wpO=SYQJB7L6x%JE?u1+n)cSz+iYW6tz6SS zyfHmz^}jD)(Ju==}cMPsP(GS!wF-KHJt^zBbP0m2^8L%hF~$UG8<86lzyJQ(0wV5VuWkO$`!{d1o7ClHe*JphQqSm8OXz99EpL08_OF)^W#$#&T#x$Zd6}tx! zXMYGVkyxxNg)FztT3SK{)oFA`{^a!osMkU6S^E5zg9J5j0Lns0?1RnKMi>0@aECim zOHRyQ73hv#Z9eL>*gKNq!W#m%Al{5L;f!0NNNSgL@KLkdV(^XAtpu|Ys;QOUJG$zG zzjz0VtJP(*pIzGQ(Xd$cx2^?)KFOJdby`+ePALXlUchC8o}%g2<=DP@i{N*8lZN9u z<%Cr`y+MBkM{`~whJwsi3vg)GdNVtL+(z_{0clSbPuPnOgYTwcx5cZ#h>Q}Zu?gJb zwI1MgS1ec?u3AW?7w8CRR0V9nrrV;`T7V6idJ#e;KyP>>iCI@W*@DL2v3N{iBohQv zsxoV;O}5dh%&hCyyj@SWj}E@Pga`ue8f<3S;pjxpcB`b4NdKIuWIj&#`q2ddIpJFL zge?EgRJ`rPM9>GUz2jqvgtf+N7^CSiF&sQwU{6aub0V5WbyoXqAwza?H?_Yjt z9IE?E`WO^lax6{@akZ%`lo@1%&wl=^qpW5Q=L1TJhZs*K7df$-z?Z&vIk68e9{gV6 zld6dyjzJ4LoN$qIj0!Qy5+^8(#D`G4_cJw4@Fpk3%)xgeIjbvp>CrinSo**ih=RRB zXiongkzp3ivf9|?Q2<;N#$eZqGjqbCbeX=BWmajoYc{CpDOITTfw@8qZlxTL|+koRclF zq+p+wTaXrLHPn*h*uN+S3}r~l=@Z@%wr z4$C1o2Ae)%``)VxpYDpfsS~O91oOy_mROMjKmh&E!3|#)#gMenX3;__1)^tlKP(0w z=Dq$P*r8ZN)1y*mOn8wVJ*vP-MRK~@V|lWuR`OgvSOMOl3<+Gy`P16MXQv5m;U$X= zjqFjsXX%G!vx1UsD<2r?^QV(P%FziV5+HutV~Q}#ue!gNYXb?eal(7dkW^2cQ>1r~1#A;SmxldD5(LO^A%Zcna8hI&PvTO7n6fxlFJWlP3eot;K`Se0MK03O-)3W3V*n_c_E5@W1l`b(r6OK zP>Mt8+~=AD2Us}%;{I=J7L5GD-Jql%eOH>LMUo1kpm>!MQ?F%EX>tnfp2p z1~!}H47_)aVJ+fl>Y_>Co8b072Rf@8aomodC=KXAD{-{5tjoZN6FfAO)@N&V@FhIf zyo{*SsI$IB#Mp3;DHfq#yU(lBX*iOZjjo+>5A2=dBPd@P%#D!>e-9|4e^QMHR1>+N zkA+BpNfRrXn2iuT5*h0Oo8s(Mci`TUIwI6rU*ko5C;QJLKcs4KKW&p zfWKsKr&wwxtTet6sv3;O2Su9o(|)o+pDag#Fz^fyd!Vt)Tyes5%#05$*g0Uy&+bLh zu)E>|1`C~?RZh-500wH}*pATs!S;rU;_@|)j2yz%CL@PGZ^#cN-D?UnCb zJpbpfZ+`m8pI)rQyEpH@`PPRYiklz4_1&AdVc9F+fHV)=m=}XtE)y1n{ef8=E M{QTDH`2{TgKUu_1O#lD@ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@memory b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@memory new file mode 100644 index 0000000..3b3fec0 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@memory @@ -0,0 +1,429 @@ +// -*- C++ -*- + +// Copyright (C) 2001-2020 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) 1997-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 include/memory + * This is a Standard C++ Library header. + * @ingroup memory + */ + +#ifndef _GLIBCXX_MEMORY +#define _GLIBCXX_MEMORY 1 + +#pragma GCC system_header + +/** + * @defgroup memory Memory + * @ingroup utilities + * + * Components for memory allocation, deallocation, and management. + */ + +/** + * @defgroup pointer_abstractions Pointer Abstractions + * @ingroup memory + * + * Smart pointers, etc. + */ + +#include +#include +#include +#include +#include +#include +#include + +#if __cplusplus >= 201103L +# include // std::exception +# include // std::type_info in get_deleter +# include // std::basic_ostream +# include +# include +# include +# include // std::less +# include +# include +# include +# include +# include +# include +# include +# if _GLIBCXX_USE_DEPRECATED +# include +# endif +#else +# include +#endif + +#if __cplusplus >= 201103L +#include +#if __cplusplus > 201703L +# include // for has_single_bit +# include // for placement operator new +# include // for tuple, make_tuple, make_from_tuple +#endif +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +/** + * @brief Fit aligned storage in buffer. + * @ingroup memory + * + * This function tries to fit @a __size bytes of storage with alignment + * @a __align into the buffer @a __ptr of size @a __space bytes. If such + * a buffer fits then @a __ptr is changed to point to the first byte of the + * aligned storage and @a __space is reduced by the bytes used for alignment. + * + * C++11 20.6.5 [ptr.align] + * + * @param __align A fundamental or extended alignment value. + * @param __size Size of the aligned storage required. + * @param __ptr Pointer to a buffer of @a __space bytes. + * @param __space Size of the buffer pointed to by @a __ptr. + * @return the updated pointer if the aligned storage fits, otherwise nullptr. + * + */ +inline void* +align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept +{ +#ifdef _GLIBCXX_USE_C99_STDINT_TR1 + const auto __intptr = reinterpret_cast(__ptr); +#else + // Cannot use std::uintptr_t so assume that std::size_t can be used instead. + static_assert(sizeof(size_t) >= sizeof(void*), + "std::size_t must be a suitable substitute for std::uintptr_t"); + const auto __intptr = reinterpret_cast(__ptr); +#endif + const auto __aligned = (__intptr - 1u + __align) & -__align; + const auto __diff = __aligned - __intptr; + if ((__size + __diff) > __space) + return nullptr; + else + { + __space -= __diff; + return __ptr = reinterpret_cast(__aligned); + } +} + +/** @defgroup ptr_safety Pointer Safety and Garbage Collection + * @ingroup memory + * + * Utilities to assist with garbage collection in an implementation + * that supports strict pointer safety. + * This implementation only supports relaxed pointer safety + * and so these functions have no effect. + * + * C++11 20.6.4 [util.dynamic.safety], Pointer safety + * + * @{ + */ + +/// Constants representing the different types of pointer safety. +enum class pointer_safety { relaxed, preferred, strict }; + +/// Inform a garbage collector that an object is still in use. +inline void +declare_reachable(void*) { } + +/// Unregister an object previously registered with declare_reachable. +template + inline _Tp* + undeclare_reachable(_Tp* __p) { return __p; } + +/// Inform a garbage collector that a region of memory need not be traced. +inline void +declare_no_pointers(char*, size_t) { } + +/// Unregister a range previously registered with declare_no_pointers. +inline void +undeclare_no_pointers(char*, size_t) { } + +/// The type of pointer safety supported by the implementation. +inline pointer_safety +get_pointer_safety() noexcept { return pointer_safety::relaxed; } +// @} + +#if __cplusplus > 201703L +#define __cpp_lib_assume_aligned 201811L + /** @brief Inform the compiler that a pointer is aligned. + * + * @tparam _Align An alignment value (i.e. a power of two) + * @tparam _Tp An object type + * @param __ptr A pointer that is aligned to _Align + * + * C++20 20.10.6 [ptr.align] + * + * @ingroup memory + */ + template + [[nodiscard,__gnu__::__always_inline__]] + constexpr _Tp* + assume_aligned(_Tp* __ptr) noexcept + { + static_assert(std::has_single_bit(_Align)); + if (std::is_constant_evaluated()) + return __ptr; + else + { + // This function is expected to be used in hot code, where + // __glibcxx_assert would add unwanted overhead. + _GLIBCXX_DEBUG_ASSERT((std::uintptr_t)__ptr % _Align == 0); + return static_cast<_Tp*>(__builtin_assume_aligned(__ptr, _Align)); + } + } +#endif // C++2a + +#if __cplusplus > 201703L + template + struct __is_pair : false_type { }; + template + struct __is_pair> : true_type { }; + template + struct __is_pair> : true_type { }; + +/** @addtogroup allocators + * @{ + */ + template>>, + typename _Alloc, typename... _Args> + constexpr auto + __uses_alloc_args(const _Alloc& __a, _Args&&... __args) noexcept + { + 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)...); + } + } + +#if __cpp_concepts + template + concept _Std_pair = __is_pair<_Tp>::value; +#endif + +// This is a temporary workaround until -fconcepts is implied by -std=gnu++2a +#if __cpp_concepts +# define _GLIBCXX_STD_PAIR_CONSTRAINT(T) _Std_pair T +# define _GLIBCXX_STD_PAIR_CONSTRAINT_(T) _Std_pair T +#else +# define _GLIBCXX_STD_PAIR_CONSTRAINT(T) \ + typename T, typename __ = _Require<__is_pair> +# define _GLIBCXX_STD_PAIR_CONSTRAINT_(T) typename T, typename +#endif + + template>>, +#endif + typename _Alloc, typename... _Args> + constexpr auto + uses_allocator_construction_args(const _Alloc& __a, + _Args&&... __args) noexcept +#if __cpp_concepts + requires (! _Std_pair<_Tp>) +#endif + { + return std::__uses_alloc_args<_Tp>(__a, std::forward<_Args>(__args)...); + } + + template<_GLIBCXX_STD_PAIR_CONSTRAINT(_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<_GLIBCXX_STD_PAIR_CONSTRAINT(_Tp), typename _Alloc> + constexpr auto + uses_allocator_construction_args(const _Alloc&) noexcept; + + template<_GLIBCXX_STD_PAIR_CONSTRAINT(_Tp), typename _Alloc, + typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc&, _Up&&, _Vp&&) noexcept; + + template<_GLIBCXX_STD_PAIR_CONSTRAINT(_Tp), typename _Alloc, + typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc&, + const pair<_Up, _Vp>&) noexcept; + + template<_GLIBCXX_STD_PAIR_CONSTRAINT(_Tp), typename _Alloc, + typename _Up, typename _Vp> + constexpr auto + uses_allocator_construction_args(const _Alloc&, pair<_Up, _Vp>&&) noexcept; + + template<_GLIBCXX_STD_PAIR_CONSTRAINT_(_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<_GLIBCXX_STD_PAIR_CONSTRAINT_(_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<_GLIBCXX_STD_PAIR_CONSTRAINT_(_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<_GLIBCXX_STD_PAIR_CONSTRAINT_(_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<_GLIBCXX_STD_PAIR_CONSTRAINT_(_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, + std::move(__pr).first), + std::uses_allocator_construction_args<_Tp2>(__a, + std::move(__pr).second)); + } + + template + inline _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 + inline _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)...)); + } +// @} + +#endif // C++2a + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace +#endif // C++11 + +#if __cplusplus > 201402L +// Parallel STL algorithms +# if _PSTL_EXECUTION_POLICIES_DEFINED +// If has already been included, pull in implementations +# include +# else +// Otherwise just pull in forward declarations +# include +# endif + +// Feature test macro for parallel algorithms +# define __cpp_lib_parallel_algorithm 201603L +#endif // C++17 + +#endif /* _GLIBCXX_MEMORY */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@memory.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@memory.blob new file mode 100644 index 0000000000000000000000000000000000000000..12392ee90f8665b145df78cfd6d62cda9db1f51c GIT binary patch literal 17627 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

    szxZ zY%O0iG-iex&OGLAFAAI`EqMm^7LYAyl66E5|7Y~*Uw`D;|9U6Kp=4YUf1~O}<>Dyu z_b1B5`;>cdM&q}@+pOW&aQi_sJ%@f^6DK9>H=(_715Xr87i(SyH|*plC;GzHK$M85^ReThS10d=G}0j&B$b zX-9CL=zCE+)`6iR?RXQrOS~%dz_tP{^t1*hI%34!!RGJ_C{mqdPNwB-Au>VCOQh`o zSPsLjLC3KB7)K<4u$U#;;m~iB|e@uHwlpL7$2XS()Qmn zd2sSKwNGL*lWh9m#iJwa2R!NSHSKmnvu-fghxWPdDO1sCkXY_QQHjo9M>es3C)8{`~^F(G&gb_noLpN)xG`OKe_b1Kl;ZHblDkq@yN&J}-5>t+$6J2?Z?F7s_q$Ji@3+7CsqgRTKDP6HAN`RPe5L!< z`^HZG^3gN7DU+ z8o-eUbo}bhvW?Ykx{i-8SS(^{AI}sAqe(?Qcm28jWPIn8b8R@yE!|6>Kk-$^dHTHC z{l)A0&Ocl{^*3tw%$GlK+mr9U-%*vJEg%|rW&11p2Gz?SyZp$Y+WqGA_n&_A^mm@2 zc!xfo7P+{kNoGsGEYs*z7%1tXGBL4}yfVGsp*MB;f#o{Jk8Z#Bwea>^KL^)KUnj2- zMZGY3VM0|e?7A=^IL?6=cfPoLP+gl?+drtzCDh5^>m;Hm0lxe2uD5p2J>MFYGcWi& zW#Zs)vIw!Srh>h$Gu#0~or%sNyf-@jpnCD(#iN7jrRhsE*xy6ju3h)~t^aqg3rk|| zk7P>H+qG+}^6@C76Hu}gltg%dB0))ae;OC?cHZClCU?@k&cY!mBgq*e$3q?lm(NDe>`=;kj z@y(LY+xU@zlqJ%WjJ$9UwpTE^j$W(|t<303ugGT*c^dGw$VEvLkil5i^iVSl+tbzR ztZ7bSl1a~>t$OS-LESS0`qdS;rK$th9)$RT>*5lA>QGH_M^`CqIWXj{-6ZqrCb?KQ zNg2CIew(J^X~CeT&KgcrQO#ZEh^m^()#ud#O#0q5&r1?YWoT$CyvEwWwZr6Y;l2*1 zp6@C=i@Nr}+DUke#MOfR-b!S8nuKJAin4FG}wjcAI`_wsyId=R_dA)uJ%%zT9 zItgM3f(D{9mf2ZOft99crF+jk%vQqRo|TedBAo}m!&qeNY%hC`Rc@hG4xO7}tKe^D z74@=v`O`pd$JracbLkV0e^CF(efJ!_VeQllDHnZo5`tY`g@qTLCDZIbB?Nz*A*>(l*s6@BnA3k+oP?x^^nZdn(kq*TN z^~CUrX*~Pq9nb#kuAjgCcbRAA4dziidvW}SpPYZ=&(|`~EX6v4XP-OqXMcM43lCn( zJiGcFs^90-!+4(LEe!u`a;yCu z#*Yb~{!AO#ziCai26=h_EfiT}$ zVIVX*D{0EWz&L&2^wDAUso|$apn*wZCucd%Tcg#*?J{W^Gif z#N`RLwKB3YF`%vtu5|deRwq_J3}t-ijDu|@$)$WPN)5ruaPd>H5wC<)u7c08NECH- aWOZ~vT^(FK&X+x{ot^*&H$F8vto}d4o+V%a literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@new b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@new new file mode 100644 index 0000000..ebd1c49 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@new @@ -0,0 +1,232 @@ +// The -*- C++ -*- dynamic memory management header. + +// Copyright (C) 1994-2020 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 + +#pragma GCC system_header + +#include +#include + +#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_THROW (std::bad_alloc) + __attribute__((__externally_visible__)); +_GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc) + __attribute__((__externally_visible__)); +void operator delete(void*) _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +void operator delete[](void*) _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +#if __cpp_sized_deallocation +void operator delete(void*, std::size_t) _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +void operator delete[](void*, std::size_t) _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +#endif +_GLIBCXX_NODISCARD void* operator new(std::size_t, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__, __malloc__)); +_GLIBCXX_NODISCARD void* operator new[](std::size_t, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__, __malloc__)); +void operator delete(void*, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +void operator delete[](void*, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT + __attribute__((__externally_visible__)); +#if __cpp_aligned_new +_GLIBCXX_NODISCARD void* operator new(std::size_t, std::align_val_t) + __attribute__((__externally_visible__)); +_GLIBCXX_NODISCARD void* operator new(std::size_t, std::align_val_t, const std::nothrow_t&) + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__, __malloc__)); +void operator delete(void*, std::align_val_t) + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +void operator delete(void*, std::align_val_t, const std::nothrow_t&) + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +_GLIBCXX_NODISCARD void* operator new[](std::size_t, std::align_val_t) + __attribute__((__externally_visible__)); +_GLIBCXX_NODISCARD void* operator new[](std::size_t, std::align_val_t, const std::nothrow_t&) + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__, __malloc__)); +void operator delete[](void*, std::align_val_t) + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +void operator delete[](void*, std::align_val_t, const std::nothrow_t&) + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +#if __cpp_sized_deallocation +void operator delete(void*, std::size_t, std::align_val_t) + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +void operator delete[](void*, std::size_t, std::align_val_t) + _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__)); +#endif // __cpp_sized_deallocation +#endif // __cpp_aligned_new + +// Default placement versions of operator new. +_GLIBCXX_NODISCARD inline void* operator new(std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT +{ return __p; } +_GLIBCXX_NODISCARD inline void* operator new[](std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT +{ return __p; } + +// Default placement versions of operator delete. +inline void operator delete (void*, void*) _GLIBCXX_USE_NOEXCEPT { } +inline void operator delete[](void*, void*) _GLIBCXX_USE_NOEXCEPT { } +//@} +} // extern "C++" + +#if __cplusplus >= 201703L +#ifdef _GLIBCXX_HAVE_BUILTIN_LAUNDER +namespace std +{ +#define __cpp_lib_launder 201606 + /// Pointer optimization barrier [ptr.launder] + template + [[nodiscard]] constexpr _Tp* + launder(_Tp* __p) noexcept + { return __builtin_launder(__p); } + + // The program is ill-formed if T is a function type or + // (possibly cv-qualified) void. + + template + void launder(_Ret (*)(_Args...) _GLIBCXX_NOEXCEPT_QUAL) = delete; + template + void launder(_Ret (*)(_Args......) _GLIBCXX_NOEXCEPT_QUAL) = delete; + + void launder(void*) = delete; + void launder(const void*) = delete; + void launder(volatile void*) = delete; + void launder(const volatile void*) = delete; +} +#endif // _GLIBCXX_HAVE_BUILTIN_LAUNDER +#endif // C++17 + +#if __cplusplus > 201703L +namespace std +{ + /// 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{}; +} +// Only define the feature test macro if the compiler supports the feature: +#if __cpp_impl_destroying_delete +# define __cpp_lib_destroying_delete 201806L +#endif +#endif // C++20 + +#pragma GCC visibility pop + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@new.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@new.blob new file mode 100644 index 0000000000000000000000000000000000000000..c998d7ae024d0b1734b70b1c247bd5db48539994 GIT binary patch literal 17879 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@optional b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@optional new file mode 100644 index 0000000..1c7863d --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@optional @@ -0,0 +1,1293 @@ +// -*- C++ -*- + +// Copyright (C) 2013-2020 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/optional + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_OPTIONAL +#define _GLIBCXX_OPTIONAL 1 + +#pragma GCC system_header + +#if __cplusplus >= 201703L + +#include +#include +#include +#include +#include +#include +#include +#include +#if __cplusplus > 201703L +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup utilities + * @{ + */ + +#define __cpp_lib_optional 201606L + + template + class optional; + + /// Tag type to disengage optional objects. + struct nullopt_t + { + // Do not user-declare default constructor at all for + // optional_value = {} syntax to work. + // nullopt_t() = delete; + + // Used for constructing nullopt. + enum class _Construct { _Token }; + + // Must be constexpr for nullopt_t to be literal. + explicit constexpr nullopt_t(_Construct) { } + }; + + /// Tag to disengage optional objects. + inline constexpr nullopt_t nullopt { nullopt_t::_Construct::_Token }; + + /** + * @brief Exception class thrown when a disengaged optional object is + * dereferenced. + * @ingroup exceptions + */ + class bad_optional_access : public exception + { + public: + bad_optional_access() { } + + virtual const char* what() const noexcept override + { return "bad optional access"; } + + virtual ~bad_optional_access() noexcept = default; + }; + + void + __throw_bad_optional_access() + __attribute__((__noreturn__)); + + // XXX Does not belong here. + inline void + __throw_bad_optional_access() + { _GLIBCXX_THROW_OR_ABORT(bad_optional_access()); } + + // This class template manages construction/destruction of + // the contained value for a std::optional. + template + struct _Optional_payload_base + { + using _Stored_type = remove_const_t<_Tp>; + + _Optional_payload_base() = default; + ~_Optional_payload_base() = default; + + template + constexpr + _Optional_payload_base(in_place_t __tag, _Args&&... __args) + : _M_payload(__tag, std::forward<_Args>(__args)...), + _M_engaged(true) + { } + + template + constexpr + _Optional_payload_base(std::initializer_list<_Up> __il, + _Args&&... __args) + : _M_payload(__il, std::forward<_Args>(__args)...), + _M_engaged(true) + { } + + // Constructor used by _Optional_base copy constructor when the + // contained value is not trivially copy constructible. + constexpr + _Optional_payload_base(bool __engaged, + const _Optional_payload_base& __other) + { + if (__other._M_engaged) + this->_M_construct(__other._M_get()); + } + + // Constructor used by _Optional_base move constructor when the + // contained value is not trivially move constructible. + constexpr + _Optional_payload_base(bool __engaged, + _Optional_payload_base&& __other) + { + if (__other._M_engaged) + this->_M_construct(std::move(__other._M_get())); + } + + // Copy constructor is only used to when the contained value is + // trivially copy constructible. + _Optional_payload_base(const _Optional_payload_base&) = default; + + // Move constructor is only used to when the contained value is + // trivially copy constructible. + _Optional_payload_base(_Optional_payload_base&&) = default; + + _Optional_payload_base& + operator=(const _Optional_payload_base&) = default; + + _Optional_payload_base& + operator=(_Optional_payload_base&&) = default; + + // used to perform non-trivial copy assignment. + constexpr void + _M_copy_assign(const _Optional_payload_base& __other) + { + if (this->_M_engaged && __other._M_engaged) + this->_M_get() = __other._M_get(); + else + { + if (__other._M_engaged) + this->_M_construct(__other._M_get()); + else + this->_M_reset(); + } + } + + // used to perform non-trivial move assignment. + constexpr void + _M_move_assign(_Optional_payload_base&& __other) + noexcept(__and_v, + is_nothrow_move_assignable<_Tp>>) + { + if (this->_M_engaged && __other._M_engaged) + this->_M_get() = std::move(__other._M_get()); + else + { + if (__other._M_engaged) + this->_M_construct(std::move(__other._M_get())); + else + this->_M_reset(); + } + } + + struct _Empty_byte { }; + + template> + union _Storage + { + constexpr _Storage() noexcept : _M_empty() { } + + template + constexpr + _Storage(in_place_t, _Args&&... __args) + : _M_value(std::forward<_Args>(__args)...) + { } + + template + constexpr + _Storage(std::initializer_list<_Vp> __il, _Args&&... __args) + : _M_value(__il, std::forward<_Args>(__args)...) + { } + + _Empty_byte _M_empty; + _Up _M_value; + }; + + template + union _Storage<_Up, false> + { + constexpr _Storage() noexcept : _M_empty() { } + + template + constexpr + _Storage(in_place_t, _Args&&... __args) + : _M_value(std::forward<_Args>(__args)...) + { } + + template + constexpr + _Storage(std::initializer_list<_Vp> __il, _Args&&... __args) + : _M_value(__il, std::forward<_Args>(__args)...) + { } + + // User-provided destructor is needed when _Up has non-trivial dtor. + ~_Storage() { } + + _Empty_byte _M_empty; + _Up _M_value; + }; + + _Storage<_Stored_type> _M_payload; + + bool _M_engaged = false; + + template + void + _M_construct(_Args&&... __args) + noexcept(is_nothrow_constructible_v<_Stored_type, _Args...>) + { + ::new ((void *) std::__addressof(this->_M_payload)) + _Stored_type(std::forward<_Args>(__args)...); + this->_M_engaged = true; + } + + constexpr void + _M_destroy() noexcept + { + _M_engaged = false; + _M_payload._M_value.~_Stored_type(); + } + + // The _M_get() operations have _M_engaged as a precondition. + // They exist to access the contained value with the appropriate + // const-qualification, because _M_payload has had the const removed. + + constexpr _Tp& + _M_get() noexcept + { return this->_M_payload._M_value; } + + constexpr const _Tp& + _M_get() const noexcept + { return this->_M_payload._M_value; } + + // _M_reset is a 'safe' operation with no precondition. + constexpr void + _M_reset() noexcept + { + if (this->_M_engaged) + _M_destroy(); + } + }; + + // Class template that manages the payload for optionals. + template , + bool /*_HasTrivialCopy */ = + is_trivially_copy_assignable_v<_Tp> + && is_trivially_copy_constructible_v<_Tp>, + bool /*_HasTrivialMove */ = + is_trivially_move_assignable_v<_Tp> + && is_trivially_move_constructible_v<_Tp>> + struct _Optional_payload; + + // Payload for potentially-constexpr optionals (trivial copy/move/destroy). + template + struct _Optional_payload<_Tp, true, true, true> + : _Optional_payload_base<_Tp> + { + using _Optional_payload_base<_Tp>::_Optional_payload_base; + + _Optional_payload() = default; + }; + + // Payload for optionals with non-trivial copy construction/assignment. + template + struct _Optional_payload<_Tp, true, false, true> + : _Optional_payload_base<_Tp> + { + using _Optional_payload_base<_Tp>::_Optional_payload_base; + + _Optional_payload() = default; + ~_Optional_payload() = default; + _Optional_payload(const _Optional_payload&) = default; + _Optional_payload(_Optional_payload&&) = default; + _Optional_payload& operator=(_Optional_payload&&) = default; + + // Non-trivial copy assignment. + constexpr + _Optional_payload& + operator=(const _Optional_payload& __other) + { + this->_M_copy_assign(__other); + return *this; + } + }; + + // Payload for optionals with non-trivial move construction/assignment. + template + struct _Optional_payload<_Tp, true, true, false> + : _Optional_payload_base<_Tp> + { + using _Optional_payload_base<_Tp>::_Optional_payload_base; + + _Optional_payload() = default; + ~_Optional_payload() = default; + _Optional_payload(const _Optional_payload&) = default; + _Optional_payload(_Optional_payload&&) = default; + _Optional_payload& operator=(const _Optional_payload&) = default; + + // Non-trivial move assignment. + constexpr + _Optional_payload& + operator=(_Optional_payload&& __other) + noexcept(__and_v, + is_nothrow_move_assignable<_Tp>>) + { + this->_M_move_assign(std::move(__other)); + return *this; + } + }; + + // Payload for optionals with non-trivial copy and move assignment. + template + struct _Optional_payload<_Tp, true, false, false> + : _Optional_payload_base<_Tp> + { + using _Optional_payload_base<_Tp>::_Optional_payload_base; + + _Optional_payload() = default; + ~_Optional_payload() = default; + _Optional_payload(const _Optional_payload&) = default; + _Optional_payload(_Optional_payload&&) = default; + + // Non-trivial copy assignment. + constexpr + _Optional_payload& + operator=(const _Optional_payload& __other) + { + this->_M_copy_assign(__other); + return *this; + } + + // Non-trivial move assignment. + constexpr + _Optional_payload& + operator=(_Optional_payload&& __other) + noexcept(__and_v, + is_nothrow_move_assignable<_Tp>>) + { + this->_M_move_assign(std::move(__other)); + return *this; + } + }; + + // Payload for optionals with non-trivial destructors. + template + struct _Optional_payload<_Tp, false, _Copy, _Move> + : _Optional_payload<_Tp, true, false, false> + { + // Base class implements all the constructors and assignment operators: + using _Optional_payload<_Tp, true, false, false>::_Optional_payload; + _Optional_payload() = default; + _Optional_payload(const _Optional_payload&) = default; + _Optional_payload(_Optional_payload&&) = default; + _Optional_payload& operator=(const _Optional_payload&) = default; + _Optional_payload& operator=(_Optional_payload&&) = default; + + // Destructor needs to destroy the contained value: + ~_Optional_payload() { this->_M_reset(); } + }; + + // Common base class for _Optional_base to avoid repeating these + // member functions in each specialization. + template + class _Optional_base_impl + { + protected: + using _Stored_type = remove_const_t<_Tp>; + + // The _M_construct operation has !_M_engaged as a precondition + // while _M_destruct has _M_engaged as a precondition. + template + void + _M_construct(_Args&&... __args) + noexcept(is_nothrow_constructible_v<_Stored_type, _Args...>) + { + ::new + (std::__addressof(static_cast<_Dp*>(this)->_M_payload._M_payload)) + _Stored_type(std::forward<_Args>(__args)...); + static_cast<_Dp*>(this)->_M_payload._M_engaged = true; + } + + void + _M_destruct() noexcept + { static_cast<_Dp*>(this)->_M_payload._M_destroy(); } + + // _M_reset is a 'safe' operation with no precondition. + constexpr void + _M_reset() noexcept + { static_cast<_Dp*>(this)->_M_payload._M_reset(); } + + constexpr bool _M_is_engaged() const noexcept + { return static_cast(this)->_M_payload._M_engaged; } + + // The _M_get operations have _M_engaged as a precondition. + constexpr _Tp& + _M_get() noexcept + { + __glibcxx_assert(this->_M_is_engaged()); + return static_cast<_Dp*>(this)->_M_payload._M_get(); + } + + constexpr const _Tp& + _M_get() const noexcept + { + __glibcxx_assert(this->_M_is_engaged()); + return static_cast(this)->_M_payload._M_get(); + } + }; + + /** + * @brief Class template that provides copy/move constructors of optional. + * + * Such a separate base class template is necessary in order to + * conditionally make copy/move constructors trivial. + * + * When the contained value is trivially copy/move constructible, + * the copy/move constructors of _Optional_base will invoke the + * trivial copy/move constructor of _Optional_payload. Otherwise, + * they will invoke _Optional_payload(bool, const _Optional_payload&) + * or _Optional_payload(bool, _Optional_payload&&) to initialize + * the contained value, if copying/moving an engaged optional. + * + * Whether the other special members are trivial is determined by the + * _Optional_payload<_Tp> specialization used for the _M_payload member. + * + * @see optional, _Enable_special_members + */ + template, + bool = is_trivially_move_constructible_v<_Tp>> + struct _Optional_base + : _Optional_base_impl<_Tp, _Optional_base<_Tp>> + { + // Constructors for disengaged optionals. + constexpr _Optional_base() = default; + + // Constructors for engaged optionals. + template, bool> = false> + constexpr explicit _Optional_base(in_place_t, _Args&&... __args) + : _M_payload(in_place, + std::forward<_Args>(__args)...) { } + + template&, + _Args&&...>, bool> = false> + constexpr explicit _Optional_base(in_place_t, + initializer_list<_Up> __il, + _Args&&... __args) + : _M_payload(in_place, + __il, std::forward<_Args>(__args)...) + { } + + // Copy and move constructors. + constexpr _Optional_base(const _Optional_base& __other) + : _M_payload(__other._M_payload._M_engaged, + __other._M_payload) + { } + + constexpr _Optional_base(_Optional_base&& __other) + noexcept(is_nothrow_move_constructible_v<_Tp>) + : _M_payload(__other._M_payload._M_engaged, + std::move(__other._M_payload)) + { } + + // Assignment operators. + _Optional_base& operator=(const _Optional_base&) = default; + _Optional_base& operator=(_Optional_base&&) = default; + + _Optional_payload<_Tp> _M_payload; + }; + + template + struct _Optional_base<_Tp, false, true> + : _Optional_base_impl<_Tp, _Optional_base<_Tp>> + { + // Constructors for disengaged optionals. + constexpr _Optional_base() = default; + + // Constructors for engaged optionals. + template, bool> = false> + constexpr explicit _Optional_base(in_place_t, _Args&&... __args) + : _M_payload(in_place, + std::forward<_Args>(__args)...) { } + + template&, + _Args&&...>, bool> = false> + constexpr explicit _Optional_base(in_place_t, + initializer_list<_Up> __il, + _Args&&... __args) + : _M_payload(in_place, + __il, std::forward<_Args>(__args)...) + { } + + // Copy and move constructors. + constexpr _Optional_base(const _Optional_base& __other) + : _M_payload(__other._M_payload._M_engaged, + __other._M_payload) + { } + + constexpr _Optional_base(_Optional_base&& __other) = default; + + // Assignment operators. + _Optional_base& operator=(const _Optional_base&) = default; + _Optional_base& operator=(_Optional_base&&) = default; + + _Optional_payload<_Tp> _M_payload; + }; + + template + struct _Optional_base<_Tp, true, false> + : _Optional_base_impl<_Tp, _Optional_base<_Tp>> + { + // Constructors for disengaged optionals. + constexpr _Optional_base() = default; + + // Constructors for engaged optionals. + template, bool> = false> + constexpr explicit _Optional_base(in_place_t, _Args&&... __args) + : _M_payload(in_place, + std::forward<_Args>(__args)...) { } + + template&, + _Args&&...>, bool> = false> + constexpr explicit _Optional_base(in_place_t, + initializer_list<_Up> __il, + _Args&&... __args) + : _M_payload(in_place, + __il, std::forward<_Args>(__args)...) + { } + + // Copy and move constructors. + constexpr _Optional_base(const _Optional_base& __other) = default; + + constexpr _Optional_base(_Optional_base&& __other) + noexcept(is_nothrow_move_constructible_v<_Tp>) + : _M_payload(__other._M_payload._M_engaged, + std::move(__other._M_payload)) + { } + + // Assignment operators. + _Optional_base& operator=(const _Optional_base&) = default; + _Optional_base& operator=(_Optional_base&&) = default; + + _Optional_payload<_Tp> _M_payload; + }; + + template + struct _Optional_base<_Tp, true, true> + : _Optional_base_impl<_Tp, _Optional_base<_Tp>> + { + // Constructors for disengaged optionals. + constexpr _Optional_base() = default; + + // Constructors for engaged optionals. + template, bool> = false> + constexpr explicit _Optional_base(in_place_t, _Args&&... __args) + : _M_payload(in_place, + std::forward<_Args>(__args)...) { } + + template&, + _Args&&...>, bool> = false> + constexpr explicit _Optional_base(in_place_t, + initializer_list<_Up> __il, + _Args&&... __args) + : _M_payload(in_place, + __il, std::forward<_Args>(__args)...) + { } + + // Copy and move constructors. + constexpr _Optional_base(const _Optional_base& __other) = default; + constexpr _Optional_base(_Optional_base&& __other) = default; + + // Assignment operators. + _Optional_base& operator=(const _Optional_base&) = default; + _Optional_base& operator=(_Optional_base&&) = default; + + _Optional_payload<_Tp> _M_payload; + }; + + template + class optional; + + template + using __converts_from_optional = + __or_&>, + is_constructible<_Tp, optional<_Up>&>, + is_constructible<_Tp, const optional<_Up>&&>, + is_constructible<_Tp, optional<_Up>&&>, + is_convertible&, _Tp>, + is_convertible&, _Tp>, + is_convertible&&, _Tp>, + is_convertible&&, _Tp>>; + + template + using __assigns_from_optional = + __or_&>, + is_assignable<_Tp&, optional<_Up>&>, + is_assignable<_Tp&, const optional<_Up>&&>, + is_assignable<_Tp&, optional<_Up>&&>>; + + /** + * @brief Class template for optional values. + */ + template + class optional + : private _Optional_base<_Tp>, + private _Enable_copy_move< + // Copy constructor. + is_copy_constructible_v<_Tp>, + // Copy assignment. + __and_v, is_copy_assignable<_Tp>>, + // Move constructor. + is_move_constructible_v<_Tp>, + // Move assignment. + __and_v, is_move_assignable<_Tp>>, + // Unique tag type. + optional<_Tp>> + { + static_assert(!is_same_v, nullopt_t>); + static_assert(!is_same_v, in_place_t>); + static_assert(!is_reference_v<_Tp>); + + private: + using _Base = _Optional_base<_Tp>; + + // SFINAE helpers + template + using __not_self = __not_>>; + template + using __not_tag = __not_>>; + template + using _Requires = enable_if_t<__and_v<_Cond...>, bool>; + + public: + using value_type = _Tp; + + constexpr optional() = default; + + constexpr optional(nullopt_t) noexcept { } + + // Converting constructors for engaged optionals. + template, __not_tag<_Up>, + is_constructible<_Tp, _Up&&>, + is_convertible<_Up&&, _Tp>> = true> + constexpr + optional(_Up&& __t) + : _Base(std::in_place, std::forward<_Up>(__t)) { } + + template, __not_tag<_Up>, + is_constructible<_Tp, _Up&&>, + __not_>> = false> + explicit constexpr + optional(_Up&& __t) + : _Base(std::in_place, std::forward<_Up>(__t)) { } + + template>, + is_constructible<_Tp, const _Up&>, + is_convertible, + __not_<__converts_from_optional<_Tp, _Up>>> = true> + constexpr + optional(const optional<_Up>& __t) + { + if (__t) + emplace(*__t); + } + + template>, + is_constructible<_Tp, const _Up&>, + __not_>, + __not_<__converts_from_optional<_Tp, _Up>>> = false> + explicit constexpr + optional(const optional<_Up>& __t) + { + if (__t) + emplace(*__t); + } + + template >, + is_constructible<_Tp, _Up&&>, + is_convertible<_Up&&, _Tp>, + __not_<__converts_from_optional<_Tp, _Up>>> = true> + constexpr + optional(optional<_Up>&& __t) + { + if (__t) + emplace(std::move(*__t)); + } + + template >, + is_constructible<_Tp, _Up&&>, + __not_>, + __not_<__converts_from_optional<_Tp, _Up>>> = false> + explicit constexpr + optional(optional<_Up>&& __t) + { + if (__t) + emplace(std::move(*__t)); + } + + template> = false> + explicit constexpr + optional(in_place_t, _Args&&... __args) + : _Base(std::in_place, std::forward<_Args>(__args)...) { } + + template&, + _Args&&...>> = false> + explicit constexpr + optional(in_place_t, initializer_list<_Up> __il, _Args&&... __args) + : _Base(std::in_place, __il, std::forward<_Args>(__args)...) { } + + // Assignment operators. + optional& + operator=(nullopt_t) noexcept + { + this->_M_reset(); + return *this; + } + + template + enable_if_t<__and_v<__not_self<_Up>, + __not_<__and_, + is_same<_Tp, decay_t<_Up>>>>, + is_constructible<_Tp, _Up>, + is_assignable<_Tp&, _Up>>, + optional&> + operator=(_Up&& __u) + { + if (this->_M_is_engaged()) + this->_M_get() = std::forward<_Up>(__u); + else + this->_M_construct(std::forward<_Up>(__u)); + + return *this; + } + + template + enable_if_t<__and_v<__not_>, + is_constructible<_Tp, const _Up&>, + is_assignable<_Tp&, _Up>, + __not_<__converts_from_optional<_Tp, _Up>>, + __not_<__assigns_from_optional<_Tp, _Up>>>, + optional&> + operator=(const optional<_Up>& __u) + { + if (__u) + { + if (this->_M_is_engaged()) + this->_M_get() = *__u; + else + this->_M_construct(*__u); + } + else + { + this->_M_reset(); + } + return *this; + } + + template + enable_if_t<__and_v<__not_>, + is_constructible<_Tp, _Up>, + is_assignable<_Tp&, _Up>, + __not_<__converts_from_optional<_Tp, _Up>>, + __not_<__assigns_from_optional<_Tp, _Up>>>, + optional&> + operator=(optional<_Up>&& __u) + { + if (__u) + { + if (this->_M_is_engaged()) + this->_M_get() = std::move(*__u); + else + this->_M_construct(std::move(*__u)); + } + else + { + this->_M_reset(); + } + + return *this; + } + + template + enable_if_t, _Tp&> + emplace(_Args&&... __args) + { + this->_M_reset(); + this->_M_construct(std::forward<_Args>(__args)...); + return this->_M_get(); + } + + template + enable_if_t&, + _Args&&...>, _Tp&> + emplace(initializer_list<_Up> __il, _Args&&... __args) + { + this->_M_reset(); + this->_M_construct(__il, std::forward<_Args>(__args)...); + return this->_M_get(); + } + + // Destructor is implicit, implemented in _Optional_base. + + // Swap. + void + swap(optional& __other) + noexcept(is_nothrow_move_constructible_v<_Tp> + && is_nothrow_swappable_v<_Tp>) + { + using std::swap; + + if (this->_M_is_engaged() && __other._M_is_engaged()) + swap(this->_M_get(), __other._M_get()); + else if (this->_M_is_engaged()) + { + __other._M_construct(std::move(this->_M_get())); + this->_M_destruct(); + } + else if (__other._M_is_engaged()) + { + this->_M_construct(std::move(__other._M_get())); + __other._M_destruct(); + } + } + + // Observers. + constexpr const _Tp* + operator->() const + { return std::__addressof(this->_M_get()); } + + constexpr _Tp* + operator->() + { return std::__addressof(this->_M_get()); } + + constexpr const _Tp& + operator*() const& + { return this->_M_get(); } + + constexpr _Tp& + operator*()& + { return this->_M_get(); } + + constexpr _Tp&& + operator*()&& + { return std::move(this->_M_get()); } + + constexpr const _Tp&& + operator*() const&& + { return std::move(this->_M_get()); } + + constexpr explicit operator bool() const noexcept + { return this->_M_is_engaged(); } + + constexpr bool has_value() const noexcept + { return this->_M_is_engaged(); } + + constexpr const _Tp& + value() const& + { + return this->_M_is_engaged() + ? this->_M_get() + : (__throw_bad_optional_access(), this->_M_get()); + } + + constexpr _Tp& + value()& + { + return this->_M_is_engaged() + ? this->_M_get() + : (__throw_bad_optional_access(), this->_M_get()); + } + + constexpr _Tp&& + value()&& + { + return this->_M_is_engaged() + ? std::move(this->_M_get()) + : (__throw_bad_optional_access(), std::move(this->_M_get())); + } + + constexpr const _Tp&& + value() const&& + { + return this->_M_is_engaged() + ? std::move(this->_M_get()) + : (__throw_bad_optional_access(), std::move(this->_M_get())); + } + + template + constexpr _Tp + value_or(_Up&& __u) const& + { + static_assert(is_copy_constructible_v<_Tp>); + static_assert(is_convertible_v<_Up&&, _Tp>); + + return this->_M_is_engaged() + ? this->_M_get() : static_cast<_Tp>(std::forward<_Up>(__u)); + } + + template + constexpr _Tp + value_or(_Up&& __u) && + { + static_assert(is_move_constructible_v<_Tp>); + static_assert(is_convertible_v<_Up&&, _Tp>); + + return this->_M_is_engaged() + ? std::move(this->_M_get()) + : static_cast<_Tp>(std::forward<_Up>(__u)); + } + + void reset() noexcept { this->_M_reset(); } + }; + + template + using __optional_relop_t = + enable_if_t::value, bool>; + + template + using __optional_eq_t = __optional_relop_t< + decltype(std::declval() == std::declval()) + >; + + template + using __optional_ne_t = __optional_relop_t< + decltype(std::declval() != std::declval()) + >; + + template + using __optional_lt_t = __optional_relop_t< + decltype(std::declval() < std::declval()) + >; + + template + using __optional_gt_t = __optional_relop_t< + decltype(std::declval() > std::declval()) + >; + + template + using __optional_le_t = __optional_relop_t< + decltype(std::declval() <= std::declval()) + >; + + template + using __optional_ge_t = __optional_relop_t< + decltype(std::declval() >= std::declval()) + >; + + // Comparisons between optional values. + template + constexpr auto + operator==(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) + -> __optional_eq_t<_Tp, _Up> + { + return static_cast(__lhs) == static_cast(__rhs) + && (!__lhs || *__lhs == *__rhs); + } + + template + constexpr auto + operator!=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) + -> __optional_ne_t<_Tp, _Up> + { + return static_cast(__lhs) != static_cast(__rhs) + || (static_cast(__lhs) && *__lhs != *__rhs); + } + + template + constexpr auto + operator<(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) + -> __optional_lt_t<_Tp, _Up> + { + return static_cast(__rhs) && (!__lhs || *__lhs < *__rhs); + } + + template + constexpr auto + operator>(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) + -> __optional_gt_t<_Tp, _Up> + { + return static_cast(__lhs) && (!__rhs || *__lhs > *__rhs); + } + + template + constexpr auto + operator<=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) + -> __optional_le_t<_Tp, _Up> + { + return !__lhs || (static_cast(__rhs) && *__lhs <= *__rhs); + } + + template + constexpr auto + operator>=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) + -> __optional_ge_t<_Tp, _Up> + { + return !__rhs || (static_cast(__lhs) && *__lhs >= *__rhs); + } + +#ifdef __cpp_lib_three_way_comparison + template _Up> + constexpr compare_three_way_result_t<_Tp, _Up> + operator<=>(const optional<_Tp>& __x, const optional<_Up>& __y) + { + return __x && __y ? *__x <=> *__y : bool(__x) <=> bool(__y); + } +#endif + + // Comparisons with nullopt. + template + constexpr bool + operator==(const optional<_Tp>& __lhs, nullopt_t) noexcept + { return !__lhs; } + +#ifdef __cpp_lib_three_way_comparison + template + constexpr strong_ordering + operator<=>(const optional<_Tp>& __x, nullopt_t) noexcept + { return bool(__x) <=> false; } +#else + template + constexpr bool + operator==(nullopt_t, const optional<_Tp>& __rhs) noexcept + { return !__rhs; } + + template + constexpr bool + operator!=(const optional<_Tp>& __lhs, nullopt_t) noexcept + { return static_cast(__lhs); } + + template + constexpr bool + operator!=(nullopt_t, const optional<_Tp>& __rhs) noexcept + { return static_cast(__rhs); } + + template + constexpr bool + operator<(const optional<_Tp>& /* __lhs */, nullopt_t) noexcept + { return false; } + + template + constexpr bool + operator<(nullopt_t, const optional<_Tp>& __rhs) noexcept + { return static_cast(__rhs); } + + template + constexpr bool + operator>(const optional<_Tp>& __lhs, nullopt_t) noexcept + { return static_cast(__lhs); } + + template + constexpr bool + operator>(nullopt_t, const optional<_Tp>& /* __rhs */) noexcept + { return false; } + + template + constexpr bool + operator<=(const optional<_Tp>& __lhs, nullopt_t) noexcept + { return !__lhs; } + + template + constexpr bool + operator<=(nullopt_t, const optional<_Tp>& /* __rhs */) noexcept + { return true; } + + template + constexpr bool + operator>=(const optional<_Tp>& /* __lhs */, nullopt_t) noexcept + { return true; } + + template + constexpr bool + operator>=(nullopt_t, const optional<_Tp>& __rhs) noexcept + { return !__rhs; } +#endif // three-way-comparison + + // Comparisons with value type. + template + constexpr auto + operator==(const optional<_Tp>& __lhs, const _Up& __rhs) + -> __optional_eq_t<_Tp, _Up> + { return __lhs && *__lhs == __rhs; } + + template + constexpr auto + operator==(const _Up& __lhs, const optional<_Tp>& __rhs) + -> __optional_eq_t<_Up, _Tp> + { return __rhs && __lhs == *__rhs; } + + template + constexpr auto + operator!=(const optional<_Tp>& __lhs, const _Up& __rhs) + -> __optional_ne_t<_Tp, _Up> + { return !__lhs || *__lhs != __rhs; } + + template + constexpr auto + operator!=(const _Up& __lhs, const optional<_Tp>& __rhs) + -> __optional_ne_t<_Up, _Tp> + { return !__rhs || __lhs != *__rhs; } + + template + constexpr auto + operator<(const optional<_Tp>& __lhs, const _Up& __rhs) + -> __optional_lt_t<_Tp, _Up> + { return !__lhs || *__lhs < __rhs; } + + template + constexpr auto + operator<(const _Up& __lhs, const optional<_Tp>& __rhs) + -> __optional_lt_t<_Up, _Tp> + { return __rhs && __lhs < *__rhs; } + + template + constexpr auto + operator>(const optional<_Tp>& __lhs, const _Up& __rhs) + -> __optional_gt_t<_Tp, _Up> + { return __lhs && *__lhs > __rhs; } + + template + constexpr auto + operator>(const _Up& __lhs, const optional<_Tp>& __rhs) + -> __optional_gt_t<_Up, _Tp> + { return !__rhs || __lhs > *__rhs; } + + template + constexpr auto + operator<=(const optional<_Tp>& __lhs, const _Up& __rhs) + -> __optional_le_t<_Tp, _Up> + { return !__lhs || *__lhs <= __rhs; } + + template + constexpr auto + operator<=(const _Up& __lhs, const optional<_Tp>& __rhs) + -> __optional_le_t<_Up, _Tp> + { return __rhs && __lhs <= *__rhs; } + + template + constexpr auto + operator>=(const optional<_Tp>& __lhs, const _Up& __rhs) + -> __optional_ge_t<_Tp, _Up> + { return __lhs && *__lhs >= __rhs; } + + template + constexpr auto + operator>=(const _Up& __lhs, const optional<_Tp>& __rhs) + -> __optional_ge_t<_Up, _Tp> + { return !__rhs || __lhs >= *__rhs; } + +#ifdef __cpp_lib_three_way_comparison + template + constexpr compare_three_way_result_t<_Tp, _Up> + operator<=>(const optional<_Tp>& __x, const _Up& __v) + { return bool(__x) ? *__x <=> __v : strong_ordering::less; } +#endif + + // Swap and creation functions. + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2748. swappable traits for optionals + template + inline enable_if_t && is_swappable_v<_Tp>> + swap(optional<_Tp>& __lhs, optional<_Tp>& __rhs) + noexcept(noexcept(__lhs.swap(__rhs))) + { __lhs.swap(__rhs); } + + template + enable_if_t && is_swappable_v<_Tp>)> + swap(optional<_Tp>&, optional<_Tp>&) = delete; + + template + constexpr optional> + make_optional(_Tp&& __t) + { return optional> { std::forward<_Tp>(__t) }; } + + template + constexpr optional<_Tp> + make_optional(_Args&&... __args) + { return optional<_Tp> { in_place, std::forward<_Args>(__args)... }; } + + template + constexpr optional<_Tp> + make_optional(initializer_list<_Up> __il, _Args&&... __args) + { return optional<_Tp> { in_place, __il, std::forward<_Args>(__args)... }; } + + // Hash. + + template, + bool = __poison_hash<_Up>::__enable_hash_call> + struct __optional_hash_call_base + { + size_t + operator()(const optional<_Tp>& __t) const + noexcept(noexcept(hash<_Up>{}(*__t))) + { + // We pick an arbitrary hash for disengaged optionals which hopefully + // usual values of _Tp won't typically hash to. + constexpr size_t __magic_disengaged_hash = static_cast(-3333); + return __t ? hash<_Up>{}(*__t) : __magic_disengaged_hash; + } + }; + + template + struct __optional_hash_call_base<_Tp, _Up, false> {}; + + template + struct hash> + : private __poison_hash>, + public __optional_hash_call_base<_Tp> + { + using result_type [[__deprecated__]] = size_t; + using argument_type [[__deprecated__]] = optional<_Tp>; + }; + + template + struct __is_fast_hash>> : __is_fast_hash> + { }; + + /// @} + +#if __cpp_deduction_guides >= 201606 + template optional(_Tp) -> optional<_Tp>; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++17 + +#endif // _GLIBCXX_OPTIONAL diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@optional.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@optional.blob new file mode 100644 index 0000000000000000000000000000000000000000..91adcfd304b4c85a6467e0d0da0b162b4dccd199 GIT binary patch literal 12377 zcmbVSy^kbE6`wUiLO3C?kSt-#XEIj3?M0^(i6yYX_@ondfP_U-s;Q}-DYiexUDZ3g zjx0frL_`1q3IB$P5D5}7NDz`BG7>)Sc<)tpZ}s%6o*tictC70u)vMq8ey_fTR|$tyZpS z@86!Dv-;ncFY?Z|xv5pzZFGM3ttaBizt=W@@9DGev76N8Wq$ou-cy#Phi61sA&t@QvH`vZ?h9$1 zD9T2b94nzgB2Iil91P-yA8R-bb_t4lzcrN(1w-NrPcG!?rC z5obRHm`E(vl|q)=W-TqDg6cH7BY*Px9@Og~_bh#W%Rzz~H~?iKB=+9sYNHE&dAP$Z zsU;_7uL^X>t~MWcTI?N3ap4UCTM%zXnsCM~Q6#m?I`~tw+hXvI)2#%v5~`_{-aESL zgui$PimTOSv*(vu*Mhm8JlDcHEvqZ16ayVEzOq3-&~)o^Y(2fc^Sivk!f~B)!m6F# zpf`e}Ih&6!N=B&#xGQVD5uLzgBYLw(+LOf-_Tt0fw`tgI@hUJ8ql9T}0=Iar2YB5T z3)Y6K7E$){>wUh0mgD)>3K7ca@i&%Czx`?x#CaEOSKPTpxPZFMdbOAt4xEB2!%fB-f zZ#yv&wD7feYb=ql)_4tLG(9H9<4Fp~1w0VpzC@K$rjjLkrCZ%vh|$Q&B>MH7H1-4+ z;D3vztpxZ)u>r=}dree>G|T%BA*wZo4lVfT7&uYrD_WQ4##>tYI~`dyw|pdwfrVU3 zAa8Txj@S2Lc64Ku3K+Slpa0_5M>)-$91bW!UIch5xzLGK1-|s1%ZYsm0pJ%4 zpHfZybPQV1@q`PVV^oMqjyOSKBtC@V{hzCGdN(;CW)6OPbsCAZkA~5uN9ROhIa&(# z452&yJtD&_nq{@I%cBIiFpSZz6=!CIMd>nqE6c3XZr5xOm6R&f`oLTv2Dj1`6dT2X z$V_x(a@ojLEOHdIzSYH{^%?Bsgq|0vZVs~Der?Q%2Ua zh4oYiX%YAX)WKA|^zLv@5@?hljgxe$Y^!VC8kOs|t(&aZjracgXVwYPl_($6cbM3+ zHo}W>?{<)zZV0~&GLh3IOrQ5b#M((q>r(>V=ykWvJuZFeIa$l|g~8iG8ozUmkr5 zR>;T%e15$bGUz6DE6CyRwfemK4H9VWc@)Cg?Ew^r@SboUWEomG5rlm{d6;%M`%j5m zr^?dAa_YebrXYuqsr2frgIebqUA$8HNe`4SQUnyb30$;eXS5BD}NM6qw|lgCFIO~M#T zaVVYpTyx+63&&sH{f*6nkzcqQlyy-nLU z8?4eECGv<U&q0? zW^m-$R{)UVaRO0{yN_t5hIl*Ml~p}^XCH8R33^Z% z$}0za7a;=4N60%S`DnO;B6DI`>c4vnO)nr{0OK78euhs-CR%OxrEzJco}eAM8_HM{ zt~nOULtY^KI0|)Q!0yPQDl!h{d+7AA29V&AT0@yXJ{z=gX{aDw%FeY_$Y-!KGGcQK zdek_fpH7A$X=-EwkRbCBCTW8B5&_Z&-?2|mVMvNT(ZmVmj67&%C^%s(qx5VZ?mMv& zr$^EyYF>+nVJ%;F^CBIdg^cj+51H)2=OpRzVyvU8fic!Ci7lm>V87m`PF&A-bCeG! zDPjb~V4};L#WBy+Uf{ZfNj&IOGK5^FTh+eHAXKv8_a2q~*gG&PvD5h7 z$`;}RHckHwY%pYUd0%POc*qiwH~7z6ihrQ|f@N90T*N zPjm|pbnJ2jPzRno9^HLjgkJighMJ7Ml6&Jz`IH>OAPiaS#PGTo__62e4~Xf3VF~G< z08H@VkUK9=&Y~_V z4loQ?r%pg3t@V}Nvb)iSbSEX|8M2L&4JRUpvpGTU22bij+(#zj^wwgW)r6Y(7$T;bg1B;zf3KdqZ8@YIxRo5;RJ$>~dEJ&9RDe(LB1oGKCWA zoURg6&QA0#ys9RQfA*_IuV|pERPg*+LJtZa$w}XYo_HERplY}_Wtd6{. + +/** @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 + +#pragma GCC system_header + +#include +#include + +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 + __ostream_type& + operator<<(long long __n) + { return _M_insert(__n); } + + __ostream_type& + operator<<(unsigned long long __n) + { return _M_insert(__n); } +#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(static_cast(__f)); + } + + __ostream_type& + operator<<(long double __f) + { return _M_insert(__f); } + //@} + + /** + * @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 + + /** + * @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 Core write functionality, without sentry. + * @param __s The array to insert. + * @param __n Maximum number of characters to insert. + */ + void + _M_write(const char_type* __s, streamsize __n) + { + const streamsize __put = this->rdbuf()->sputn(__s, __n); + if (__put != __n) + this->setstate(ios_base::badbit); + } + + /** + * @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); + }; + + /** + * @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 @c ios_base::unitbuf is set in @c os.flags(), and + * @c std::uncaught_exception() is true, the sentry destructor calls + * @c flush() on the output stream. + */ + ~sentry() + { + // XXX MT + if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception()) + { + // Can't call flush directly or else will get into recursive lock. + if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1) + _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) + { return __ostream_insert(__out, &__c, 1); } + + 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) + { return __ostream_insert(__out, &__c, 1); } + + // 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. + +#ifdef _GLIBCXX_USE_WCHAR_T + template + basic_ostream& + operator<<(basic_ostream&, wchar_t) = delete; +#endif // _GLIBCXX_USE_WCHAR_T + +#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. + +#ifdef _GLIBCXX_USE_WCHAR_T + template + basic_ostream& + operator<<(basic_ostream&, const wchar_t*) = delete; +#endif // _GLIBCXX_USE_WCHAR_T + +#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 + //@} + + // 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(); } + +#if __cplusplus >= 201103L + template + basic_ostream<_Ch, _Up>& + __is_convertible_to_basic_ostream_test(basic_ostream<_Ch, _Up>*); + + template + struct __is_convertible_to_basic_ostream_impl + { + using __ostream_type = void; + }; + + template + using __do_is_convertible_to_basic_ostream_impl = + decltype(__is_convertible_to_basic_ostream_test + (declval::type*>())); + + template + struct __is_convertible_to_basic_ostream_impl + <_Tp, + __void_t<__do_is_convertible_to_basic_ostream_impl<_Tp>>> + { + using __ostream_type = + __do_is_convertible_to_basic_ostream_impl<_Tp>; + }; + + template + struct __is_convertible_to_basic_ostream + : __is_convertible_to_basic_ostream_impl<_Tp> + { + public: + using type = __not_::__ostream_type>>; + constexpr static bool value = type::value; + }; + + template + struct __is_insertable : false_type {}; + + template + struct __is_insertable<_Ostream, _Tp, + __void_t() + << declval())>> + : true_type {}; + + template + using __rvalue_ostream_type = + typename __is_convertible_to_basic_ostream< + _Ostream>::__ostream_type; + + /** + * @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 + typename enable_if<__and_<__not_>, + __is_convertible_to_basic_ostream<_Ostream>, + __is_insertable< + __rvalue_ostream_type<_Ostream>, + const _Tp&>>::value, + __rvalue_ostream_type<_Ostream>>::type + operator<<(_Ostream&& __os, const _Tp& __x) + { + __rvalue_ostream_type<_Ostream> __ret_os = __os; + __ret_os << __x; + return __ret_os; + } +#endif // C++11 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#include + +#endif /* _GLIBCXX_OSTREAM */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ostream.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@ostream.blob new file mode 100644 index 0000000000000000000000000000000000000000..24dd570f706e4ec29a70ded03a85027d6bfea20d GIT binary patch literal 40198 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. + +/** @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 + +#pragma GCC system_header + +#include +#include + +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; + 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); } + + // 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) + { + __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); + } +#endif + + // Get and set: + /** + * @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 + */ + __string_type + str() const + { + __string_type __ret(_M_string.get_allocator()); + if (this->pptr()) + { + // The current egptr() may not be the actual string end. + if (this->pptr() > this->egptr()) + __ret.assign(this->pbase(), this->pptr()); + else + __ret.assign(this->pbase(), this->egptr()); + } + else + __ret = _M_string; + return __ret; + } + + /** + * @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); + } + + 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() + { + const bool __testin = _M_mode & ios_base::in; + if (this->pptr() && this->pptr() > this->egptr()) + { + if (__testin) + this->setg(this->eback(), this->gptr(), this->pptr()); + else + this->setg(this->pptr(), this->pptr(), this->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: +#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 (__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)) + { } +#endif + }; + + + // [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); } + + // 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 + + // Members: + /** + * @brief Accessing the underlying buffer. + * @return The current basic_stringbuf buffer. + * + * This hides both signatures of std::basic_ios::rdbuf(). + */ + __stringbuf_type* + rdbuf() const + { return const_cast<__stringbuf_type*>(&_M_stringbuf); } + + /** + * @brief Copying out the string buffer. + * @return @c rdbuf()->str() + */ + __string_type + str() const + { return _M_stringbuf.str(); } + + /** + * @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); } + }; + + + // [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); } + + // 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 + + // Members: + /** + * @brief Accessing the underlying buffer. + * @return The current basic_stringbuf buffer. + * + * This hides both signatures of std::basic_ios::rdbuf(). + */ + __stringbuf_type* + rdbuf() const + { return const_cast<__stringbuf_type*>(&_M_stringbuf); } + + /** + * @brief Copying out the string buffer. + * @return @c rdbuf()->str() + */ + __string_type + str() const + { return _M_stringbuf.str(); } + + /** + * @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); } + }; + + + // [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); } + + // 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 + + // Members: + /** + * @brief Accessing the underlying buffer. + * @return The current basic_stringbuf buffer. + * + * This hides both signatures of std::basic_ios::rdbuf(). + */ + __stringbuf_type* + rdbuf() const + { return const_cast<__stringbuf_type*>(&_M_stringbuf); } + + /** + * @brief Copying out the string buffer. + * @return @c rdbuf()->str() + */ + __string_type + str() const + { return _M_stringbuf.str(); } + + /** + * @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 >= 201103L + /// Swap specialization for stringbufs. + template + inline void + swap(basic_stringbuf<_CharT, _Traits, _Allocator>& __x, + basic_stringbuf<_CharT, _Traits, _Allocator>& __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 + +_GLIBCXX_END_NAMESPACE_CXX11 +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#include + +#endif /* _GLIBCXX_SSTREAM */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@sstream.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@sstream.blob new file mode 100644 index 0000000000000000000000000000000000000000..40861687b63ceae522edb0bd31bd9884f4dbb783 GIT binary patch literal 57265 zcmd^o34Bvk_J7_>L8uWcLS?XnVYNUvpaNFxl(LmlON9cZ)`m1q+d!JsBxNnQv8kYd zijIgI;;7@osN;fzI6C8oI6rs9ZQPZS5k(zG4e$Rw_rCk`Uh=XOb^i1F|M_^+<6G`> z?zv~b_YJcg$=v(RZdsBn`R&0#zQ^bCwl})-7mpq77+sj__4wKs=QjJ=^IgM-=Z`4J zZ}5bI1iSpcCQox-izUCs-|EhHHv03MJ)!(yuq{924u;r|qs`s^aR|lkUy~G%-D7;;dCi+pIK*HouL+&)9Vf9wz$1*?m%u+yU!K! z_YEtf3iD;N+ftQsnIQ5}Z2y?*pd!+4W37;-du z{mxK6!<)m`-r4}{p_63}_v41Tyq*S+FXT1UCT6b5?F_XC+?^R+(Cr15O>2vx1BTOJ zsL|thcs;GA?-0gKZ|G?#81g!t-e!M;Gsv()RA?BZdCLt;KwgWSZKm~`zp}^)nhgOd zDWW8}1Qg!rZZdyd9m7IKmS)qeTPN*4&w1@`M_Y)^Vu~XKZZW;Nj1oFAN}3X1D7PIy zKGWCq$oGWY0VkG~1IyUuZVR!Y#`I7B22EGM?e(`MeAM4Y3(J)JgP{Nxbkd#$@toV) zniq1pOpt3n!CpUc3V(Zp*SNmKiZFkRFKIN_?g}}At`>JA@hdcK#ufCaV9VC+07DA~ z`7%p_xkiUz3{-c_!!g~{HwM__H+@b26c&-kyUG5ZU z1QgYZZs4T_O#!#tfi>jurGz0bQ13BcB>JwqTATq;>_Ss~#GsLJDlDbe+@PnmF}Km} z^5zCZ?G5JZI_7ml!^4L|f`DCP&7{^iF_BKQRYsCje`lnUXK5T>Zx{eD=LiLe6Porv z0Ece!2U;EAnvO!&m3qWN+j3Cf5>2=Mc_D}mL&vho_j(t$=8hPVPcYNo@<)uwE65w6O^?F? zp@T*4Xmu`zEcZ0~I1--vRWG9`7f9eTN;gR3bO#}K{jIGur_dOWY}y*7^(2~yMKpuv zQ$VdU78y!>9E~Q)xU73r*Bfha*OdjKP9o`Un+eSGbG{ zU`z}8&H?7+WSCMR4RwPyw4ak>^Pat0dno$Voi>KZ1AC7P}jWuUJ2SnQtWpgZ0o6Wt>7upMd<_yN&iJbB64 zVWOF!MTyx+T2E_kv)ktmcwG7JK)~nE6|^z=o&Bavhz*J9WA4SI`kJm0^J#1gwLmv* zWcbU4CX(F95qcjaR*N&po{u-7jqZl_=6sG9VVuT1Yu+ys-a)7Vrs#}$ML$z`FX(K> zY=Np_YZ`Tflw^Qrro?0V4BsSU5-1K_E*QFR${rI?E%=uRwUadY3 z-5F~-$=c^!)xp(ahtKbeqngLyT(^!=Sw$`&1lT`{-k6(BdXxmEV3q3?wCtB)m|C}$wxTw*f&=B+b+lut|`jsj%kRFT1jeA1^?*M$R?yK6zxr>R4NP!m0@ zPQMQMsgkcVz`PqV#xM2Fs?sfW2aEn?Hudop zbM?_CkJk+q6dYW)zyyuxs|#w%zA3iM>7%JF*XwU?pf_Ts!~6}Erd!)X?!~6BseR%W zA`q0wsAfJy(^||M=S$k*XlnBZM;As>G@A^~(uQR$R7tG|WEWn$_+3*am->sb!D`ca zN}{B)A^3m>5Hi3UA~Hg?*Zxmc601|M*Ql(?+<)o}M(OEuAZ#%drARvzR%r4%0oI6d`Dlaj|wfP(|OTw2cJU}LESm2awOitaM zGs9VIB-hjE_Jus5C8lH2H^I~qZMm7uiupKTBhPO&#;0QDg?KC^0qI1hGo$Z@Dm>yS zq>IQWZaNh6-g$y9CmAk?Jet0xw#*nFlb0%{;w?qQ05KgV$kA1VKqeXJW~fX_xq@qt z@k;7&uU~y`nKu(&L>=G>;GRHlfqiCA!z?26R#M2&+p8BTzn6 zy(325REOYV%gLlm;yz!Y@gHEk0MVNe_>8$i5<}I&Hm@fXpQvN7tz$P#A&tYD^^+3O z3miP!L^KhPHeGCSnA}$#Ii?FBPA{3~Czm&$t5IXBqJq&rgofyRr7043CU9Zup`NT~==AGkw4evpODB3Cpi0GVJu*psR~iKvUqolpac7N- zi<5YjF+^xfG<9FFzR%2iVCDpjix1W+TL}3M3i&z_oimbZ;#Xa5?YR(@rpOl@)%2!d zV9bJ!kH3Y^0OW#M#4ToO*--S(T|>L^7l@XyL(j)saoWVh?`nI<1IB6Q@X=2ZnWVx9 zpa$cS19@sZ2xl#I2aur?OdSJ61EUKKV^2JVeD+lvDkiEG_g(#24J zOsDmo;i82+2d330e3z!i^eue@+6qk=ii~LoCT)sd7?nG!Sv2M{ia$erO|DaDq9`}c zauq0No)+?a`vWFe*W*B&os^uU6rb>z*{Lx|VpPj5yVSTtrD|#!<3pz!Pdo;5sC$m3%|( zfq)x%jY*Nl)T?0XtPakxRx=iDj$Lk+OmvmI8g-O#aMp2Z?7<3HH6=D^H*cPN&>3?JS2@efZ+sG%21mh#RU1Mk{a z)v>`E9#mqpTJTS4dZ%W`{40)}VjMc}zJAbz7ykcDNJXK_?0Gz$J=D&$ZOgn{yGr3= zs|}?m8`qhDe`77P*h?A$9(R-7KEdC%1Q@pa+e7wHiyQS5!tH8?T)Mp^0J#_N+3h7R zd!P}QvxnvuvnFU5UAwTsY@Kys!AUniHzM`Hpdvn=VaeZ7n^lL@a#y+(9*tp)wq~*+ zod$S}wZn22&u%G7PZwhw&+;E=I5e_$^38kMV8!UP!Byiv7bqc>gg74XpoWU{>K0GX z-U82Z(B9w=wb+s5;p4k7?EWS`F?>FtvlJDny#{G$XgX<3$MN&-Sdnf*^QIFSSqHo~ z_=R>IZyB&95NHVwwWL>qnok8K=79%ju#8KnF^ z|DTpCzscK4)X64P3OD1$X51cBA}I@=>S_J>npbzlb}>OulFzCiyL2dX>`Zm3r#M6` zb2i4>8+uCNQ!uVmto_&+`vD%Lj`82tn)MYK*7F5@o;AOGfcK%Be*KFLfvq+J!#7BdQTk{p-Ch z=iGW5K_3`dUdmLY)bniXyp*?Gc zXDJ6>?UDW9+yn1ex}QWyP$~y^zvR=;rk!Lqd;^n?FjDk00q===$;f=>?*Q|;Ubdld z=CcLxR{4Je^XYQgnake)eAqn;J%LcW)0;q$06#@V%!dFcajvRaZ8ETn#1Mw-y)An^2Jhm`}7#czb z4M9>~ANY|xF5^-k>-izup)Bh47q&wU=<%U@Z_X-Mch0|)AkMf>i;7klFJ#k_>L-P3 zu#9RXJL7}|JJ^y!4+`EI^W>P{_p@~6%cbOxFJ#vJDh3K#FVWzrs7tMX39ln*bT70%;?asr6s z1eH)S0QY2s^7dz2GYh-??s2^+NXWQ`B$=Ry9P2C()k%QrO+BT{Y?m>Xc&Y8Od7Sf) zOw9SSs`KmL{o7?@_)rXdD*@*=8;;>!wk8dt*>F2S)j~Gc-2&OX3Y>A3%$fX3z?aHg z|M=?3>u&n~(7q3ZY<9K}UUbp@2OmqJU&%FLLr-Bz=v3i`+o1~IijLeWb5(d7;O+9y ztqR}J_sU7(zK5PmqT>}6xx8*CDe6AI8YD_DO((7aZIOPYa5qTEZc;YW!TL=IzHsJ0 z&X|_svSoUqn@DMUgZZn( zY4*G>_Wulo<`r>b8$8BI+rO0_=rov{SWe8)w+T&(iHJp-@|}C_lg1 z<;sIQH_snv&iAuagGRqANL#Kz^ki-$6AB_ZpQ94!fG;W3>K%y0bL~7T+9>Jf`^viqQNl5q-v3iAWcQE0n1B`vQ)zKy6S-YPI~i5G z{BY{JLf$3z_O?cNTU67XaRPdn&q6wRV4QYvi;%|!Mgp|~gJtxQV{dE+j{T82;XWI@ z5O8CQ@KRbp;1)zyi{av;7POavYOC_l;a?y5;)CW5%G&aND=)p=a=r4gT$d4Qzwsbf zE3%+UWI?Tvz}ik`@JfrkU*4ZVj9RQR#uG@adY*`uc$-2%ln&e@;r#W|O zuk9-R!S)9x&34#!_pnTHgJ{V_bcb|akR%=+ja`n%8f;ratkmyg9F>-d&S?^K1M<~bYiTs`xgNlyMGj8Z36nVn^y(}E3>Bv^?H^2tNCAeM&{ zA`t6j5#ldEG9Z$Lm~7&xx^4o^z&`CrM5vom3^D7fU%Zi~9TJloq8I=FVbPK@{f&1w z4}9~)=U|J;btv`92@l?p_2af9Gl;%a20rE0)6f5^;ZL8Y$iT4!s8Jy7&Uot?^H|Sw7>g#3LbTQvKw1OV zd}BIe=M*TXTbg{~`YKq3lMV&4&uhH2(&7exo6crH6iUE%Kc4qcBOZ-zNxHS zdiA!qHeT{3=gS4)#RXCp$4ohd~d_<-@7z{^T5OJlI1Q*Vh_ zgB$S$w;F3`1l*h;)}U{IhZ?5efAHH!p4xG;;yrtI_K3S5EY&==itsTL(W#+^^gmUH z#{OgP02K$!Oa(t9J&VFFQxRdGF1#@8k}zq9sHA6j!r^cVa*4X$Fw{~uqbI2=7K@F3 zto!=zV?N~f`o72hh6hT;C?!lhhSKIC^0U&t@1|jx<4{u6l9Sm?L`^JZm2! ztaQu7+3=vj)7;Biz>q}nN!AujoTPkr_oX*oe1)<`Xr9m2JiE5=%a*287#BvM`jgG3 zR>NGxA%7$SP2xY@?F+QDe50%-h7%DKEnNT31SB~i_d$7v(NZinS z4)6<-&btz=s|f8|oi4uG48}d~*zMzW^U3s6HlfTyBq?F?+Rvipkox*ll^l=@MnDR= zFiAZ=6N@xmXuMd(h(gkVQxJMudM9T`|7nv`R!;eP&7*HuA8J!h4wwCSYGc)fQh2X4 zAH{2?*z}*V^@b@oe||$;{t!iAx){IVPF&ih_&yJARw20g1*q!_i3d0T3HUJlOSA}I z`@(U~_}^_9CWXI(D)5zL8r+p!uTvWx6XuB8F?lAtz{4?Woqid6u?uhB@r3? zGcxoE5YWuSV@Od54rQGAFE{NwZ-_E)vhX;Mz2Kcue_QqOeJMIqp@61jnln?G1&b&G zr0PKwvN~Wp(2oK?pV-MmE0Ml*+}PSH793CERQmcnlEw??E5 zcgVxB2FIf+invo1?#XoKpHx%e?c}IstLyUKy&cDV^Uv)hi>ydu!K5s+En}0i)OP;=CWVFNBQdO~e)FF&kFqkT=&Az`uD`cYX*#ay-)|`X zg0vL_Rtz&JvMY*LOg1R8D{5DS3~sdZGtM7r&}>z|hfs(49P&IqdxF%jq9S;Iox;-z z+e(d*WmR`0!%~frS*eF4Q!@KgQb1zu{?5H74F5SW z_UEXE|7^f>6Bz!67P#eqd-u(jZ)a{PQi6AV^2(b-C!Q>!2Byv^LIoo(r&|8P=!nl> z!CWs?YvaYyFYOpo1 zW!qqD>?AMc2ENA1#1SBH1pI_0WRXavGgFR>tDgVe!ySwdsQe{&RMXH0=7-LXtJ@m7noPNkdN@|5z)evF?e-pY>K-+l;BLV8 z%KsO%+sfK&=J)^hL6^{O*GxH2e((ENXLb(XW~3Q~2H_Pv(~vA^cqlFn7$%gZhg<}F zU8JUmT*%;-l+qpV-n}dM)-wzCq@Z4K1yi_4Qq!W%)wiLRp0nXBJB)rFmbtU+E5P6U zlvoTR$DIzuOx4^1%-GRF-tarJn2Vi~GRfNjmGdY(4gZa?Z%KK)^!DEl8aVauf=vm> zS=_a*Q`@!BF60Y4-7HbOExl}j^os43Jkrl!w!PWIGJ$Q2kH`cbN~WFP_GXINBZ|gz zFz$S5&}siTZe*VFsO^WEF|`wSbRo~T!4M$>-yj=EI2x2GiXj`aGf0~;=wHlDD3gvw zQkA@jOuCBv?Nkt=^SfwhO0a5$&!w!Jw8gfC`CG2D-AYDRnsVbc!@JI?m^epixUuZ4 zH~uB^kNf_qTUH$$3(maK=z?!yDu*6xMT*fzGbafEqJH^~#9I ztQlA0-7YFpUGj9+PvSJyqM~LTXsSIPtHsQ|yf2d_Jn>2#1=w%_~_(ishm>kDnuU-cJu)0U(%~Nk2VAf58CMh_g;bL4OFmU_S zUNLZcCcgK>N4H<~40G5ZzVCTplQQHte||G{#l~!q8ZKiq7`0n*hZ)h8C>Qf`+vO~C zalP$YB6h2?wPfA-e>r*AN~O!=dp{4H^Ot~f;iQJ=&fc}=S3>Uo^VsXRU)XZ+dV`N6 zeilutUZu7M94^)5^mr45j2QW86{;!7%mF1Sx8AmH!jn(dox_5p2WTrEeSGHofX4I4)iH0u0|wzG^h z%G~mLn%uN)lzBudcekD~{F^<)0~xogYm4AJ z^--5!B)!fwjG>QW{I5%_`}VzxCpu z%+@>?M)+lM7CqDB*W&U`gDBS5688JmmBSBY~e_d76zYE}F^rm2vj7vj?x*=c%j;?JM9qB)L^kWY$d$n_z zOJOYLcDw;Y38qG;j50g^L(IsB>R!GN7@V3NzvOpYo~q9H^BKS3@H$tupgA_GPcV{C z)KPs5_;WSBJZIL8b^X52dq60C6HXd4qxrUp!{VA=2DB#gJ4HPl*YA`8g3C~e?|8r` z$p07oP7~M9>vr+;$ITL`*nMHamCx30SdvhL8oWh9-7#E@OL_@XiVPJ*uWpJ)CyN1* z1oi-t9@WFx0@$lx(a{q4zdLz__VWJ%*(>H7D*j8;SITB?O5gNpO%J7@`XXEUV~>6- zAw7bnNSKN1zh@ug?fpiN-Dd1Fin`RGyy0qmq9q+2xriYUR7mEzhy=IGx`+i2%YsPx z?w9{qE}{sF$7Nnz#bDMY9BFJvhTGw8#s+c(;?v8p?X*95V}I2UvjZLuJ~=hjogHdT z!f?QT0Hpt?^G5B+N@m8?UFU47eB#~7kIN!=)ZkS!y~x~T5=H)*`zHUmOO}MoA5LX% zxx`3uYCH3A#Jj*$nx!Ctr7Eu>c)83~nhjr^clt+fznCLbn)f!g96rC{j;~V+V`{S% zj~Zh`n5n-a!k1MDSyrjx%jtk;BnV$>we!&B87EfTHrXndD_xobhmZeYey)VKna|H~ z0)-m7oLe?!_4iNpGdNzOO$FSdsoW?CTe2%fwy9 z26Bc95;;}Ga3>zs=#CYk%)9j<*Yz^byjur&qq?oPy#34NeJ3>`DyBMk4U@{3q&N?U zEz6GI`(K}Y$&d~+mdhyzzn!*_z;DUQ`4Bz(P>s|O{IOn`|NK4?E&f6#v@g!i!(@W; zzcKoPZOCdep_$Yy+JDt03Uo;~)vL6`iV z=N^eF=r6Bk5MC}|)$}2VS5t&)CbMdCP|a9WlYRWzD_;BZ=6}cO&Mb6i7VFL|bO#XC zGY8$7!@5(0?$ogE{QjJ~(pn#`vgqK2Db^(WOe(rAl-O5U-~c^;EHX3Q-S|DV4R;bDzF$d-KHBoIVCzECVGE1O6J&*9__cJ*JD5uJs1g zn?WZ5I*CF3t#Y`()sDME0SzTc@o%zDIHB+Q{sKkx*XL}-hGTXh9qU?Akrs&&fMviq zY?qV5&&%~FKGxUg(O1B1)>$7d%BQ36Y-pc$_sN_l*d6tU#V4)dJqVrdk+adI7v&n1 zMnEs2&X?r*=-lq_8-BB)pyv+JIXxN^Mq^UJKA#PtVObh(v(tcHlG{)=umQb<0Rg5S zD<@Z+_<5h(*W}Q^B<0n$?~UBQX6BpL@N0PHH8}^}rbF9Kvl280R5`|4jR8Er|MwH0 z=m-xn8$f*RB=z2N%Bj1lucZ+N&{%!6J<2MUc{q@=7+E7tvF|Y&6Bs zOgKODkF_t*XkZL0wI;4)Una-!Ds=q(F!V5iSo_ipVoZ!uJZ|VzFBD<1eQX4v(nm!AkJJy zg1Hm}31{Q>+13IeVefPI-8uA!lYXrsVFDfHm;w?sref*WfFPfktEXX1KP^vYy?+|L z2h4hZ@gvvVGVr~&^{n^A9g0vY(j=U?Wc(*7!m_j|jjJtxdHVUfPvbM=SzyMq7&D#) zW(LxfZ5Lz8v4UG^rz_16--2tOM6OnmTa(m4a7F(xiR% zeZcv?l6_$C@AZ3+INS-+I20fPn@f72^kdLuK(iUt2q*+76L&M&-ArjRAiA3=HKNen zfl?{T3_y2Cl_>Rq9>EsNN2G~>c4EWIPKogGyp)d8mqDd~=#9OS4`l_QDRLzWy*mf9 zI7g;;Yvg$-^zM8)9fjVVFPEawy9>ZH7s&MPM{*U)JO;G^x&Y8&Ski}Oh%jt)>4wsW zK}CQd`0-ndLJTr*LigEWXUTCov`59~4K|{^$lli8fL;GW5~_kQ>J-vqHf7mEh##)O zmZUXO5u?gAQnzqVIbBk2dwYcUs@3Ih+7uB8Rz$c_5j*}Au^CnoSsaRp#3&*Vpa_?_ zmg%bqBUur#4@EenyDMFOvuMVPFV^3z{Q9#Gx*wl;%l{~U-}|rQ9{%y`gUaUG(`&ye zu1;4jdG}jy&t}(HWzQSu_gHemt?A0skF5OlxSdzlDaTiDSDw1^_`%Am^b1Z}bn4@O zl9ZxPFZk`e0k=FSS-M#1xIPhpQG{1q+kU0Qq$wXS!qk`%HP#78-7pB~HP9V4>jK)3 z?ZNw{CI+#j5kPN&#@>>k?BJILg8)&m;R9(Tpbw=S6rvMy)ql*ceS)*lK9NXw`vMmI z7ZO$r)@o0bv4CoDgd2GWFJQyipg{_&yfrK*jb$0$e9w8`Kn+l##T}7 z#qo4-3?9>Xu6U?e-BS@?W)U&H^<5vs`cIplHJvbXHMX=}&2TgdiohtDuDuB8MS_%! zto_rjEh+dTbt9s_ahfIZAHPl9#c@>PY^OxZ8+%fx>m<_L*t5(cff0}Y;X>@Ka9_!e zrBc~e$<&5QTP0T+2Htac=EL%dCvYJvl54a~vUFF53p~xAfqeruDjwmE$*U0U?R(*2JZIDAx$`vRr;WW5sUIsn9EQ7|C+|uvo{d>>M z!Ev?8D?m^6+3J@0N*d)56Swh{n;W6`Sr>{xgU-BV2c>C+V=!XO7wcL*y}UV;mM;X zS5Sv1+a_1A4oidXeEP_Nolh{Wq-%LzIYi#HylMEY$g99_<%~+$bO(zMR;Nja#vMZU z6tNzD2{P4~0&$y7*TatD|CqKeba#tfGP$IYh^jKHlF%b$gg_7djWvF>lR^X_jGs*) ztxeDYfEWC=5zJa;II$=*sun(1)mZ&2Q9EA)$#Ac6Ela<;h;}%sa1zrDC)p-(t?)I+ zxxcBp{fB$0tuB!h)3l?WV$T*4=Vl&TIj*u2q&Ipx=x255YE01P!p)E?`?L20DLCY= zFACW)Sy)b466sn62pktMu2UdQ1VlPit<)8TG?QBBP_+{3QF4~m)@rOdD74T8Cy1}saN~{7dJJny#B^-ggGjA;QtpK^ zmQCH0a<_1~6>5zzux*O)7zS697<%IRyU+TX7u5XlEUb%5Zan|;`G}BTuk~MEf#5@&h zjX3&35vNFNM`kNA=dK(tJk6L9b$0+D)w>9&hqVXo#s$<9HeydQ5kv+KpkCOg+sjJi zp&r8lh>m_fnM|f|7G^k$`Do~9>wfIoDX=O}v4UgZXzxrEB0)FQ8n<;cpeCp_O;&Jp zMG(9hX^~M9bFOk)NmEH6O`4Q739pC8Nj*{e0Xh@VnFJ~4-qP)vz>(RX>FJciiePW1 z9wHy66`Q*GE}bV71L``-R_-p`kyr5_-t*xtICy`nnENBnZOCSs7R-PSnN&2 zaKppo(I|}R;;)Th>YFm}(Gqv{?-mSVOeQUyC+DFM`tkwgGpGPi0fSD1U2+;ZRg^hf z`+f3|uctqb?3AZwO$C~!*H0%&Is4)VN(!z!shA@}|Ep{c^|xh>8G4Brq{cE0F6-3x z;0b+7Y}d0?Z=#`BHB>F8g;`~*;)z@|RI9cTA@&qI>+ACC#D}uLhq9y^1~md&ilLaI@pmvwD4WACcJ_!nsz}*7vT0IJiLdf=f zdmH^}w@V)c19x(lS9sKgBwSaspqmFDG}c_MRoW913Pxd?rfq% zZSjQW23zkVwSMen=ooa-xUtr!T+Qg=&~ z?~B@FzOPa6eT`CmU!$;q0J8-o>?5KoS<#Xz#HKSVQf5j}u%g4;@Y*&RN)`6R*-?rx zu2;^>Eoc~LKO??p#Rbobi+NUD@T>qLG3SQO?zZ|+Rg<*>1@^wSl;bg(wD4egDau;B zH4IwtFd57SzHNQ@p&Ef~`Wvgr2ulIOav>LY#uwZEX&{sL+Ttgk({(o*ky_R&X0?dV*B zWvb&WmOfQ%M*vm!BmGEK6;<`X#@H9H{j=rx+g=hi@~KKtDPu&MX{-7s>wZq( z%r80BHkJD%1wU3%EIcZ|glAN9Qe1mU9*0tfihTVYS8ber z^SxsJxB#6RbEuo}Fh-8tw~Ve9jz(qQU%%XMzc=$*A`P4Jz`^?#IiA1b--@>$krXzlZ?&+&WEeh_2(BI^sl zhx#3Yai9#JbpQKze)PuUiF=`)yDtEh`An;y#(FW$HZ9T%N&8fSHJkwg%aG6aNiOX3Z}XclmWzfaT$0qp|Z(ZghDhYsD=25@t@{5 z6ywuNGH{OQ#go`EVDQIA5<5{3XFCnI+e!P|EVZHVFw|y9dcf4Hs4$dpUs}W0;hF0g zYADSo%pe6WMunMWwcU<%d1}nR%853DZFEW{mK0gay?S-EOm7d-r@~2*(T?x7YfsYA zxZ3~FYw62$|L?#T(Hh#D?aS=T4Oi*ZbFbI!jk!VJ!#e%+vFy6xjYf9}JHqV7%GGb- z($n4XFF)TtVfgS7W73!F`xJ0{9sagpbd{mN2t!xl3w60${9b%9i9Z_|RlwcsUW_kB z`zU~htxwUT5q-lT4K0TPBcoeYztHCu=?O&MK8p5vpy$9cu$G%f0+m_6=?0~&}; z^?7a*b@uUv9`_>icZg05^W|*tL{E&vfm7^hvz~!gh^#p|@+qH;V>FuDy_T4j+1|q^qOs6&N}eDZ5v8UrEZg zguPZ-cdO^Bf>n^SSNFXdn)cRlTOl-Wk#FgiCT)|q;WvDqRE0up?QJO!1#&0+jx+>? zSmtN28$M$}g98X89FRz>T?RvO8FRXK$V0*%ER4MdcIO(IT+M5t^R8vuZ*Sxk^=9^X zrgca-lLfi^TgM`qpcu~$fCWE*BE-syOWrT<`ur=$#?=7U;JCdtZ%oD(z``OO7xQt+*H$yV*ENcAC7vd7Dmfu;Mtd< zA=1PzL(c(I$2H8d5lB$D#-fy?2f{HVdSH$zA#-7xf-Rsiq51EHZoXI5&G$k#2Tbh= zOuc{C`wyS8;>jQ4JK_w+S+plEu_KPf7YD-;Hy9yp8t`B^;&xDc@q?@8f0@yK`Uso$ z9S236TCRvq8Hz}7SHvMNib#uA#DO7-_@0dRxkByZT8j8ciy{tM>8>36QPE{D@7yeF zo*d;53;Lh@yD@ct&gPpr4$2HbD{*ZlyS56;eU&^J*Vf}p zVCxwRsD~r2p2Zg(aKt%Sd{M+)1;r(>uA*o@+QMr5IV~&%eo9by_Qw@iI)I6iwWyK0 z_(eEabYHK{{Vb{+UtjV45?6x6v6_EEQ+<*^uHAp=Hxd6Ec(n9lzdnhKlPKz=Su! zszgv<)UJjvx$SEj-ixA6jU$_fi=&>_d2G!ifKksQ+mCmJlgFpwJSmG5{cB)GU!zjP zH5e6OMh(Itz^L{ZB&KAb5RP{O+R323fc7%zZ9s1`=v_eXGUzkl{WIq9{u0oa%;CM~ zp7Vda^_7LY;tRef;c$AAIh>w>iT(_8IK2qV^F`)xdI=7vmzcw;*SYuZzU=ARwF2AB zM2GLQ(L>H3E&%y>=`c1+-q>DjuCN@1)1Az6i}mfSw_#5HUH*F}hIYhKgo48NiGng-linatd-zr!a-F22c%y764knpk;uTF=#oUBIfV)-x>q#@Te4~0T6djaib&w1}lvNHCA4ex(@^Q;p^-}uy%J8P!;i9mKG;>}XO9B3(=(SzE>KP@6dt47j34@gOH zRVd{26v~TeC4nj$MF|??v-H!eqC=rU48_tX&1@*J0GM?}%o)Q1(q0ioJxwN6R47YY z55}{kp%f_nmsJdMp&sR`X`#6o2w*mlso(9`dHwqjIoUugT2h(T{RH8=DCVwPdm?QoOS);=CP-$obEVT_R)o>%AjSSiZXcL33kt!h&D10aS8Yg^b#h|iK zveDWoBvOxJiPVKq?h9EW^_{=FR4o@4v`f= z)X{ot9ZDNI>abR#G@zqGIZxctc*+ohr}Zd29#Vjg0@im_80#?(51tEnrCz z{^>TE_X!;8!a<}`3Z(whL58d-f&BJzI7~V6N8Y~I!FqX zL>z_jEjP{v;dqR;+PGLS@ocJjp|nY%q*n<$kh`Q?I3&Sh6S+N^iZ~cm5$91W;`n4m zoI0k6(?b>U=~6`;m!)m7Q^cpn6!D!7MVykSh_km9aqPJwPO8#AnyZM0-YqEn>ZjIHgI6*_Yaf4wgko0!MWtTMTDIr%4x$y=XRmaq?Q4 zv@&O9Ieu}PYMQhvV-=kGm)b4`d|A$AxW3-D9`NP%%i-+VlDUN}&eNqF6x_paJxT|l znNm4Q3m_*HPNy0U&Otbso>R}a0<;o+-@2%mncxEiq zbLjioTNtzz5_Bsm&NbRsjr3jT>nxtlscmguVrgjTN{hS6+Jxd|B8BJ0cr|_yw$T&K z)_y31fHINRa}@0@7VWvMAxMCwtUaEQvoxkX8`>k=&hnSxqZ>c|;pvEytEpHi46w10 z4bWk20srP~m-`!h8t3B!oQDCQ5&qcE`;dlU?b$Nj*gfH zZD^22DDuB~g9Zg4=?Jw3=b*tkYJ)s?yF+90e1vn67&VtQDE5@=r!WDv>*%Gfj-m5x z>pU!=CN?_0n3^>5<&Dh%I%hC+3Xaj)#ui)D#;P!HRUjDBcla6(#WZF^V}wePj;3!c z@nXP^ZGM;yn!_iBDZ8u=g^!KroHa#gvpcB;y{!{bU`)baU4#NnMvKr!RBfCbq@YecVP9T73Mq49ztvCK4Q%oG z7$U4dgjGd^70GviwbVe-ZWY=kZ?!mfRyUTY;Zr{kLw`IB1&C&n??b7N8p+o%ZN8>Z zw6+gUulR^FaJYWK=QTFanSy1eKk3%ebY~yx+-tC}UX!^|!nfW{))FAQfh8Y@4K$-s zDtlq;gq)31vXVAPjz*zt-{9Ie>{=J=XrP6zb+u-r&~uqse3{lkxOS4Y3}qg!4Zv2( z0oJ~_HVn`(YhR#c43Iv?8p7S*Ut-eHAEZX=`Ik z_#U|!X-5;;T-*asIbhA-9A;14E04q>-D5Eq!jsHbm7$4v3`!h?AXe3SSW4^Va@HJo z0+&blA(|tzJqHE00M0}hf&%A_=F9F}!|HmjuV-Yu3g-4Ic{XdAJECVtwY&!XTEo0h zYav$G%1}lW;ZFZ4Eic73t)=iX5V>=w`TR)BjFT*rOX19@!2J#cDmvteXjyz3(|jr6 z5JWH&CX(mKwea3^M#cArHASta8W}t7U%1HJz=%t^rxZME+*A7TTIAWjIPigrr>$fwnT*U4tCJJLnghJc+FeZ^T-54W@lDgYHQiVo{F^VQ^B67U7j*s z77=}H#6uyAhO(&5FobJ|kv6UL?|-DK;=@t+L=%1CmLCJld9VoyNBN_iZEcqFmaa$n zDukzFri1Fhzit-UBJHc*N8~QP%3{(1e#9oNp}02Q8%#kINY+5%i#z^-|5&C9NJ!1U;lNq#Ly8_VVTl@!I7 zQAmDm0JK3S`Lz|^u&px5ukFY$+s^p;y>QgtOAaLMlhS5r;RK5TMNqZ|`z^~OtDCK|FJS|JDUm4rN*aPft4y2{p9&Imdk9J9 zqpxmQUdc|bX7;MdtF+4KYl1-6jYDo6DbxPJQq2uP=#p+KxCv<;S^{L;m8FU<-wYp9 z0K4jImpiWwKfN6jMZSvt7}&`Vj9I(lO$t`+KNMb z4@@J$Cni;)6vZ?+iAS-F4fYKXDA>|c8b!}<9((g`OU^9)fm9Xouj_@~F6>u=xQf&b zg`hV8y}_VG$XHq=)3p<<-B1Xs08~MclCz_^?6a?C&pH~#30{Trmb9aL6J!jHi~JH? z;j+2vT=Q&FM_mVg-y8YfXd9)X*P_$|$^?|jpn=e%2TD-QkZRC?LK#Inr4Y(uTzejO zpJ#XXN*5vVU^T9Ngh25}@>)P?@c*P)0}u=1t9wVu6JWu#v=C`6o4srvk=C-DW%D9j z0iX1)z2MMFly%+D~<+X*u{0!>Mb^aarG8;sMwbF749nn z9(Gs!&shIgPQP}*&CHqAGbW8c3y;|c;y44!xsJYPAAy1Q&*)zu({G_gk?^##rpJdl ze{Q_{@X-v8RNbe_Yf0faWUK%;gzH;hbshJKqY%vX!n-d zYkOKI;@gh)v)ru>$S%jhOLKDOFs6&``NbOTl74S80{vdqhtX(Pa1~;@0GS)BT09E z0jYR!wnl2n0n=Q6>2Q-d=xAc17*9XZGc9Q03p*m6{m7llNizhge%5XMEfj++}6Kn29&OKKJn?h|{tHkRjF71YM1U5t3~3Q22oXJmGPy z7VYJll-OvSYV}E;GwMGux6g7kqd(`2I@eNlPY>!+1CC~DkOnY1;`x@@T9>+=1b!VZ zlI$pXu>DJ<9w@{)#seD9pi)4k3_1tUISi`9FzeVZfjS8p7816p;&&m+N|3)eK0vQ5 z@~KF!FRFI+Db{jq_pfH1=3D=(qr6xBtrgfMjJG6Icxz_w@4Wn@3B%}6sR_eIIE*mO+s_3u1?1OjJ?EWbsYUf8=o95XD~EQ zyF09yTrwelZgIpj!@pll_7G0{$U+$+i&H=@)y722t_#Rz01Bn6)?qV4om9o3`G7)z z>T$e!J=>mAj|8WB+We?}dQVSUiR}=k)6gs7#@+}!@@DyF8-9y#F2nwr>{~`+|4hy{xN)?sx(Jb}iFjZ>i=0a=g9fRbU>-OD z_xtiQ=;muFew-5&si%sW&7Q%_9dV*zsPVOq=y!zXftQ3|@j9&A>(qTCd@tZ+ZQmmI zE8YR;_Z<@X74MX?QA$>la$kr-*B-^SN7=Q#xVD#FdjZ#8VAtLOdwxeEzv8=S<6VjT ziU*M7ae!DhTwgK@`4ttc8AT$$;xX_m9>e^KC%~_G0`n`1?X?m7>Z7k}%p~qj5NhO} zslOMhXdy}oTh#naz!i~24Pvlp8+#)){mfm+L>DsEF7Sf~qq{I*-Jlbam* zzbr&DNEzYhXUx;|A5P65%XJx{_8Sj&s(yc@{tnc8ky<~U%5hOt{o>F{ZZ9_Y{a&oM z5YESd0h^hbVR9Ly0Io#ZjeUrLD2O!;1d0YqFz@k8Us$MZAeJPBhv3+kA<_Wwb8$3M zk^yPFken)Q4en;}8m65UV2%saIpzl=m1yjbqwM~sIlI!kS>Nnb3-~-lq=j0vz=MYT zz@?_B7DUch%ItDjlD?Rz8zH}?`aZ_;oFFzQI1CX9PwvXoxGZTJY0xsdqCmleSg1v5 z#FKRpY;_WB7_j(s6hMmDN0OvB<~mq`)B&`tX5HXhO;&3P4@dlgS9@eXIQPIi&UPrf za8$LnhaB_)VT;YyEBcyI@1)Q?iutPIsn{Lr zY4$nkoS2;S2Di)E9(3D1?DI7^Ro)*6xf}UMjp=Nc#wEy~MLZ5Wuj#9ebjZt0XaO^& zJP`0qsAV(p#fIbH^pL{U_`hmt0FWqB0M(`840>Gfj;Sj>fhNXBWSKXQk@4w}y{BWc zXi`syq6k=#bd&;%S|FoErsoP;+f zu{WmR?i6;n3{aU0l>w?o%~Nr0D!W#WQ!UGBeBo(OY^RYPgwgv@mSW7}kcNbu8)$lE z_A3oEBpe&tU|{~zYniXn>KErkapb94^25~sBQ#pFv(w|=B-X>|A}?AmqA41OH8M^b zi>Vuj^)OEIYNuAw6m|vT%28<85}3=6T)JgKxw1MfiiqQr0yrA2?rP?SK3%#1lh4l^=johl4TK~)U8nB)zpt&i`j41(qWCUu%E%O{Y1|`z`NYdBi2#u=TNyzk zM9?uChHWUs8J`n3!Y_WM{YuF0t1_RLOc@~J5xf;2EScVN(_Y91#7eiN*~~?9JnZ#N`Q-L zIK*k1)C1S1gp zn0kRsCYZ=k_Hh*o=XHL>Z2?E-25nh!l4=LaYT)5K*f!^}?eXU!oBlk>htZ1< zWa7DvB@6HW01kTf)Bpeg literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@stdexcept b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@stdexcept new file mode 100644 index 0000000..49161d5 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@stdexcept @@ -0,0 +1,307 @@ +// Standard exception classes -*- C++ -*- + +// Copyright (C) 2001-2020 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/stdexcept + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 19.1 Exception classes +// + +#ifndef _GLIBCXX_STDEXCEPT +#define _GLIBCXX_STDEXCEPT 1 + +#pragma GCC system_header + +#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/@@home@ado@git@ssp/@usr@include@c++@10@stdexcept.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@stdexcept.blob new file mode 100644 index 0000000000000000000000000000000000000000..31d2f2f54617052e62793d682167c982752882a4 GIT binary patch literal 27428 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. + +/** @file include/streambuf + * This is a Standard C++ Library header. + */ + +// +// ISO C++ 14882: 27.5 Stream buffers +// + +#ifndef _GLIBXX_STREAMBUF +#define _GLIBXX_STREAMBUF 1 + +#pragma GCC system_header + +#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); + + template + friend basic_istream<_CharT2, _Traits2>& + operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2*); + + 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/@@home@ado@git@ssp/@usr@include@c++@10@streambuf.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@streambuf.blob new file mode 100644 index 0000000000000000000000000000000000000000..1259d399e8db5a0f6d0b3ec73bd0f0e6e2ce2041 GIT binary patch literal 45492 zcmdsg3wTu3wf~%%7;%hgiWDhg?g23d$eR!_#TX(4L_i7=DFWkUa*_

    &}BD_^4IH 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 Ttte8H>UK0TETdg3ij@Bc^RqN$ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@string b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@string new file mode 100644 index 0000000..a95ef4d --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@string @@ -0,0 +1,147 @@ +// Components for manipulating sequences of characters -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +#include +#include +#include // NB: In turn includes stl_algobase.h +#include +#include +#include // For operators >>, <<, and getline. +#include +#include +#include +#include +#include // For less +#include +#include +#if __cplusplus > 201703L +# include // For remove and remove_if +#endif // C++20 +#include +#include +#include + +#if __cplusplus >= 201703L && _GLIBCXX_USE_CXX11_ABI +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + namespace pmr { + template class polymorphic_allocator; + 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; +#ifdef _GLIBCXX_USE_WCHAR_T + using wstring = basic_string; +#endif + } // namespace pmr + + template + struct __hash_string_base + : public __hash_base + { + size_t + operator()(const _Str& __s) const noexcept + { return hash>{}(__s); } + }; + + template<> + struct hash + : public __hash_string_base + { }; +#ifdef _GLIBCXX_USE_CHAR8_T + template<> + struct hash + : public __hash_string_base + { }; +#endif + template<> + struct hash + : public __hash_string_base + { }; + template<> + struct hash + : public __hash_string_base + { }; +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + struct hash + : public __hash_string_base + { }; +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // C++17 + +#if __cplusplus > 201703L +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#define __cpp_lib_erase_if 202002L + + template + inline typename basic_string<_CharT, _Traits, _Alloc>::size_type + erase_if(basic_string<_CharT, _Traits, _Alloc>& __cont, _Predicate __pred) + { + const auto __osz = __cont.size(); + __cont.erase(std::remove_if(__cont.begin(), __cont.end(), __pred), + __cont.end()); + return __osz - __cont.size(); + } + + template + inline typename basic_string<_CharT, _Traits, _Alloc>::size_type + erase(basic_string<_CharT, _Traits, _Alloc>& __cont, const _Up& __value) + { + const auto __osz = __cont.size(); + __cont.erase(std::remove(__cont.begin(), __cont.end(), __value), + __cont.end()); + return __osz - __cont.size(); + } +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // C++20 + +#endif /* _GLIBCXX_STRING */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@string.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@string.blob new file mode 100644 index 0000000000000000000000000000000000000000..55208d5e6ef7ae5a4c9a450ff021d289191482d5 GIT binary patch literal 13111 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@system_error b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@system_error new file mode 100644 index 0000000..f92b434 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@system_error @@ -0,0 +1,513 @@ +// -*- C++ -*- + +// Copyright (C) 2007-2020 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 + +#pragma GCC system_header + +#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 + inline namespace _V2 { + + /** Abstract base class for types defining a category of error codes. + * + * An error category defines a context that give 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. + */ + 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; + + 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: + _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: + virtual error_condition + default_error_condition(int __i) const noexcept; + + virtual bool + equivalent(int __i, const error_condition& __cond) const noexcept; + + virtual bool + equivalent(const error_code& __code, int __i) const noexcept; + + bool + operator==(const error_category& __other) const noexcept + { return this == &__other; } + +#if __cpp_lib_three_way_comparison + 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 this != &__other; } + + bool + operator<(const error_category& __other) const noexcept + { return less()(this, &__other); } +#endif + }; + + // DR 890. + + /// Error category for `errno` error codes. + _GLIBCXX_CONST const error_category& generic_category() noexcept; + + /// Error category for other error codes defined by the OS. + _GLIBCXX_CONST const error_category& system_category() noexcept; + + } // end inline namespace + + error_code make_error_code(errc) noexcept; + + /** 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. + */ + struct error_code + { + 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) { } + + template::value>::type> + error_code(_ErrorCodeEnum __e) noexcept + { *this = make_error_code(__e); } + + void + assign(int __v, const error_category& __cat) noexcept + { + _M_value = __v; + _M_cat = &__cat; + } + + void + clear() noexcept + { assign(0, system_category()); } + + // DR 804. + template + typename enable_if::value, + error_code&>::type + operator=(_ErrorCodeEnum __e) noexcept + { return *this = make_error_code(__e); } + + int + value() const noexcept { return _M_value; } + + const error_category& + category() const noexcept { return *_M_cat; } + + error_condition + default_error_condition() const noexcept; + + _GLIBCXX_DEFAULT_ABI_TAG + string + message() const + { return category().message(value()); } + + explicit operator bool() const noexcept + { return _M_value != 0; } + + // DR 804. + private: + int _M_value; + const error_category* _M_cat; + }; + + // 19.4.2.6 non-member functions + + /// @relates error_code @{ + + inline error_code + make_error_code(errc __e) noexcept + { return error_code(static_cast(__e), generic_category()); } + +#if __cpp_lib_three_way_comparison + 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 + + template + basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e) + { return (__os << __e.category().name() << ':' << __e.value()); } + + // @} + + error_condition make_error_condition(errc) noexcept; + + /** 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. + */ + struct error_condition + { + error_condition() noexcept + : _M_value(0), _M_cat(&generic_category()) { } + + error_condition(int __v, const error_category& __cat) noexcept + : _M_value(__v), _M_cat(&__cat) { } + + template::value>::type> + error_condition(_ErrorConditionEnum __e) noexcept + { *this = make_error_condition(__e); } + + void + assign(int __v, const error_category& __cat) noexcept + { + _M_value = __v; + _M_cat = &__cat; + } + + // DR 804. + template + typename enable_if::value, error_condition&>::type + operator=(_ErrorConditionEnum __e) noexcept + { return *this = make_error_condition(__e); } + + void + clear() noexcept + { assign(0, generic_category()); } + + // 19.4.3.4 observers + int + value() const noexcept { return _M_value; } + + const error_category& + category() const noexcept { return *_M_cat; } + + _GLIBCXX_DEFAULT_ABI_TAG + string + message() const + { return category().message(value()); } + + explicit operator bool() const noexcept + { return _M_value != 0; } + + // DR 804. + private: + int _M_value; + const error_category* _M_cat; + }; + + // 19.4.3.6 non-member functions + + /// Create an `error_condition` representing a standard `errc` condition. + /// @relates error_condition + inline error_condition + make_error_condition(errc __e) noexcept + { return error_condition(static_cast(__e), generic_category()); } + + // 19.4.4 Comparison operators + + /// @relates error_code + inline bool + operator==(const error_code& __lhs, const error_code& __rhs) noexcept + { return (__lhs.category() == __rhs.category() + && __lhs.value() == __rhs.value()); } + + /// @relates error_code + /// @relates error_condition + 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())); + } + + /// @relates error_condition + inline bool + operator==(const error_condition& __lhs, + const error_condition& __rhs) noexcept + { + return (__lhs.category() == __rhs.category() + && __lhs.value() == __rhs.value()); + } + +#if __cpp_lib_three_way_comparison + /// Define an ordering for error_condition objects. + /// @relates error_condition + 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 + /// Define an ordering for error_condition objects. + /// @relates error_condition + 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_code + /// @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 + /// @relates error_condition + inline bool + operator!=(const error_code& __lhs, const error_condition& __rhs) noexcept + { return !(__lhs == __rhs); } + + /// @relates error_code + /// @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. + * + * @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/@@home@ado@git@ssp/@usr@include@c++@10@system_error.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@system_error.blob new file mode 100644 index 0000000000000000000000000000000000000000..8ffcfb0b93327cf75a814a98b468328034067096 GIT binary patch literal 36021 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

    tSZqv#A_F^)TAeS2RIP zl!+4vMQGzuoqh&{^ck!Qy&^;}i&#E-6G6TcSrgVRkC&QOCFfSfe?o{ND%Od16`yrJ zbUpeBfLs6}zJQy53t>hsWHkV!{49^9yus#cLG<+>a4S~`gV|!BiHj@zO*Ia!s_24P zj1V;(4c@ErdrdpAgKL5fu^TFRw@}Hup_0*85R}@l9x9A%KY2dQG(##F9S z{KlRGwx46v`wM!1p`I#nu#zg=^08>f(U$`74f;Ymp8=4b!H8^SR!YizL2s1Q;!3W# zn6wU(R1IjeIp&R|)ohgyNzZXRRq(!x?AI$TeUbE_h|&Hzio( z`WxZZTC@hffK4#e(YJt?>Xr-8h#+K!B}ogJnMtUkN|P#zO-DjvI{1df&U8Q*eM2RI zlXB3YiU778H0qs$-Z{Kig@siys3?3#2j81uq^9J@m~1v@uT{Jl#0$fiCih|(^etK? z1D|KgM;nFv?T8?>^GYQDvA~p$$3NO_CY#J9jwKW7@YRq`{J!gW7r*?R%_N4NzHa`* z4>a7q;34xH8L@*%l^$d@c=9-U$El}ZyW#lD;fpr?*8C*%JN%WnCqHOmvpqv>Q1LC~ z2Jvdo)E-VbJtKQ&$C1WKKz=UIN-L}CR&hIH)r3{`f>xv-C9Mh%r%oy^(byN|U+{C~ z@TMx2pT?!cm$Sc|N3vObJk7M&6cWO$a5v7_$QAC!ksA{f?oFjPRrfGm78E70-PvHS zvytQ?M4kx0E|3 z8p2&KOcR3in#F6bpn2DfU2{d8csQhGsgxDcJ&Ssp>4l!TJWSZS}S?tIBg@^Vr*W1?!mNDiE4wNOtNr3#+)x?;e1F6^y6#=;AcPu z=cA1Rgcd?lEaZ~nw_}c6wsimF_gF}-LaV3)$^8L5{|APiiZ7eiVTXMy#0sFP3t$@% zN(yjj4gEO8xF>lAuAafj$&hC(OcThBnrIrQK%}+30#IBbOq~_5q0x_%Hg-D*mUb-~ zDb`h(W);sAuZGdHn%jvo1!*&35@ee&Qj>se6CjJe1+s&1{wE)eAiEeQ)MB;>Jr~|^ zaYI4o-)-hHZH`bWT#2=Kb*&KkYcV1E37cETf;a@&jcL{cmFo$W_+5ZTAv&4fAMk`* zFyR(4;TBAYzGXr>f>D4*dQ_f%PCvK_RZXxBoA6aEqJt*bhv-`dC-4Q)Xg4nG#>IEz z!fsrAH!=ZiGhvb~x&?D>5p!+92&&zZT0!-?IEcKzcqJQQA6C+B!~Y>w&%X zoYLem>y&eue+<^^1H~LBA zmSS8&f&9pdXhjCzJNx~x!;n!tQwQii!6gD87Ugt?3gfW$D@ z4xniV&!O$WQg^VQVj=QCWvY?wt|J6I*~nb+NNw?GQd^H;`bWg{Mp44zIKFt4Z971_ zou})zL&I*Tw4OT4njXj|nRYw&aJvvOw}Y_IPXO{AxOxXCH+eob{op3f+y>6vCOC5& zI1~M(!AmhXVNfQ!5&^{jZB8#5whI}o&Uy+Kp>V^AR?a!bDC8(tkaD0JKMSy#fz}8& jU}vGH84&cuF$nYyAZm1gBE0_(HP&SL literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@tuple b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@tuple new file mode 100644 index 0000000..94b9e03 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@tuple @@ -0,0 +1,1764 @@ +// -*- C++ -*- + +// Copyright (C) 2007-2020 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 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include +#include +#include +#include +#if __cplusplus > 201703L +# include +# define __cpp_lib_constexpr_tuple 201811L +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup utilities + * @{ + */ + + template + class tuple; + + 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 + = typename conditional<__is_final(_Tp), false_type, + __is_empty_non_tuple<_Tp>>::type; + + template::value> + struct _Head_base; + + 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)) { } + + _Head_base(allocator_arg_t, __uses_alloc0) + : _Head() { } + + template + _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) + : _Head(allocator_arg, *__a._M_a) { } + + template + _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) + : _Head(*__a._M_a) { } + + template + _Head_base(__uses_alloc0, _UHead&& __uhead) + : _Head(std::forward<_UHead>(__uhead)) { } + + template + _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) + : _Head(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { } + + template + _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; } + }; + + 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 + _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) + : _M_head_impl(allocator_arg, *__a._M_a) { } + + template + _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 + _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) + : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) + { } + + template + _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; + }; + + /** + * 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 class _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::type> + 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; + + constexpr + _Tuple_impl(_Tuple_impl&& __in) + noexcept(__and_, + is_nothrow_move_constructible<_Inherited>>::value) + : _Inherited(std::move(_M_tail(__in))), + _Base(std::forward<_Head>(_M_head(__in))) { } + + 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))) { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) + : _Inherited(__tag, __a), + _Base(__tag, __use_alloc<_Head>(__a)) { } + + template + _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::type> + _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))) { } + + 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))); + } + + 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)); + } + }; + + // Basis case of inheritance recursion. + template + struct _Tuple_impl<_Idx, _Head> + : private _Head_base<_Idx, _Head> + { + template friend class _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; + + constexpr + _Tuple_impl(_Tuple_impl&& __in) + noexcept(is_nothrow_move_constructible<_Head>::value) + : _Base(std::forward<_Head>(_M_head(__in))) { } + + 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))) + { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) + : _Base(__tag, __use_alloc<_Head>(__a)) { } + + template + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + const _Head& __head) + : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, + _UHead&& __head) + : _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) + : _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) + : _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>& __in) + : _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), + _Tuple_impl<_Idx, _UHead>::_M_head(__in)) { } + + template + _GLIBCXX20_CONSTEXPR + _Tuple_impl(allocator_arg_t __tag, 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))) + { } + + 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)); + } + + protected: + _GLIBCXX20_CONSTEXPR + void + _M_swap(_Tuple_impl& __in) + { + using std::swap; + swap(_M_head(*this), _M_head(__in)); + } + }; + + // Concept utility functions, reused in conditionally-explicit + // constructors. + template + struct _TupleConstraints + { + // 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_..., + is_convertible<_UTypes, _Types>... + >::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_..., + __not_<__and_...>> + >::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; } + }; + + /// Primary class template, tuple + template + class tuple : public _Tuple_impl<0, _Elements...> + { + typedef _Tuple_impl<0, _Elements...> _Inherited; + + 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>; + + 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; + } + + // 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>> + { }; + // 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; } + + 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)...) { } + + template(), + _ExplicitCtor<_Valid, _UElements...> = false> + explicit constexpr + tuple(_UElements&&... __elements) + noexcept(__nothrow_constructible<_UElements...>()) + : _Inherited(std::forward<_UElements>(__elements)...) { } + + 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)) + { } + + template&>(), + _ExplicitCtor<_Valid, const _UElements&...> = false> + explicit constexpr + tuple(const tuple<_UElements...>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(static_cast&>(__in)) + { } + + template&&>(), + _ImplicitCtor<_Valid, _UElements...> = true> + constexpr + tuple(tuple<_UElements...>&& __in) + noexcept(__nothrow_constructible<_UElements...>()) + : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } + + template&&>(), + _ExplicitCtor<_Valid, _UElements...> = false> + explicit constexpr + tuple(tuple<_UElements...>&& __in) + noexcept(__nothrow_constructible<_UElements...>()) + : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } + + // Allocator-extended constructors. + + template::value> = true> + _GLIBCXX20_CONSTEXPR + 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)...) + { } + + 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)...) + { } + + 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)) + { } + + 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)) + { } + + 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)) + { } + + 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)) + { } + + // tuple assignment + + _GLIBCXX20_CONSTEXPR + tuple& + operator=(typename conditional<__assignable(), + const tuple&, + const __nonesuch&>::type __in) + noexcept(__nothrow_assignable()) + { + this->_M_assign(__in); + return *this; + } + + _GLIBCXX20_CONSTEXPR + tuple& + operator=(typename conditional<__assignable<_Elements...>(), + tuple&&, + __nonesuch&&>::type __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; + } + + // tuple swap + _GLIBCXX20_CONSTEXPR + void + swap(tuple& __in) + noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value) + { _Inherited::_M_swap(__in); } + }; + +#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: + void swap(tuple&) noexcept { /* no-op */ } + // 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 { } + }; + + /// 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; } + + 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)) { } + + 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)) { } + + 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)) { } + + template = false> + explicit constexpr + tuple(const tuple<_U1, _U2>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(static_cast&>(__in)) { } + + template = true> + constexpr + tuple(tuple<_U1, _U2>&& __in) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } + + template = false> + explicit constexpr + tuple(tuple<_U1, _U2>&& __in) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } + + template = true> + constexpr + tuple(const pair<_U1, _U2>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(__in.first, __in.second) { } + + template = false> + explicit constexpr + tuple(const pair<_U1, _U2>& __in) + noexcept(__nothrow_constructible()) + : _Inherited(__in.first, __in.second) { } + + template = true> + constexpr + tuple(pair<_U1, _U2>&& __in) + noexcept(__nothrow_constructible<_U1, _U2>()) + : _Inherited(std::forward<_U1>(__in.first), + std::forward<_U2>(__in.second)) { } + + 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)) { } + + // Allocator-extended constructors. + + template::value, _T1, _T2> = true> + _GLIBCXX20_CONSTEXPR + 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)) { } + + 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)) { } + + 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)) + { } + + template = false> + explicit + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const tuple<_U1, _U2>& __in) + : _Inherited(__tag, __a, + static_cast&>(__in)) + { } + + 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)) + { } + + 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)) + { } + + template = true> + _GLIBCXX20_CONSTEXPR + tuple(allocator_arg_t __tag, const _Alloc& __a, + const pair<_U1, _U2>& __in) + : _Inherited(__tag, __a, __in.first, __in.second) { } + + 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) { } + + 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)) { } + + 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)) { } + + // Tuple assignment. + + _GLIBCXX20_CONSTEXPR + tuple& + operator=(typename conditional<__assignable(), + const tuple&, + const __nonesuch&>::type __in) + noexcept(__nothrow_assignable()) + { + this->_M_assign(__in); + return *this; + } + + _GLIBCXX20_CONSTEXPR + tuple& + operator=(typename conditional<__assignable<_T1, _T2>(), + tuple&&, + __nonesuch&&>::type __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); } + }; + + + /// class tuple_size + template + struct tuple_size> + : public integral_constant { }; + +#if __cplusplus > 201402L + template + inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value; +#endif + + /** + * Recursive case for tuple_element: strip off the first element in + * the tuple and retrieve the (i-1)th element of the remaining tuple. + */ + template + struct tuple_element<__i, tuple<_Head, _Tail...> > + : tuple_element<__i - 1, tuple<_Tail...> > { }; + + /** + * Basis case for tuple_element: The first element is the one we're seeking. + */ + template + struct tuple_element<0, tuple<_Head, _Tail...> > + { + typedef _Head type; + }; + + /** + * Error case for tuple_element: invalid index. + */ + template + struct tuple_element<__i, tuple<>> + { + static_assert(__i < tuple_size>::value, + "tuple index is in range"); + }; + + 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); } + + /// 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<__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<__i>(__t)); + } + +#if __cplusplus >= 201402L + +#define __cpp_lib_tuples_by_type 201304 + + template + constexpr _Head& + __get_helper2(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept + { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } + + template + constexpr const _Head& + __get_helper2(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept + { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } + + /// Return a reference to the unique element of type _Tp of a tuple. + template + constexpr _Tp& + get(tuple<_Types...>& __t) noexcept + { return std::__get_helper2<_Tp>(__t); } + + /// Return a reference to the unique element of type _Tp of a tuple rvalue. + template + constexpr _Tp&& + get(tuple<_Types...>&& __t) noexcept + { return std::forward<_Tp&&>(std::__get_helper2<_Tp>(__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 + { return std::__get_helper2<_Tp>(__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 + { return std::forward(std::__get_helper2<_Tp>(__t)); } +#endif + + // 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 + 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); + } + +#if __cpp_lib_three_way_comparison + template + constexpr _Cat + __tuple_cmp(const _Tp&, const _Up&, index_sequence<>) + { return _Cat::equivalent; } + + template + constexpr _Cat + __tuple_cmp(const _Tp& __t, const _Up& __u, + index_sequence<_Idx0, _Idxs...>) + { + auto __c + = __detail::__synth3way(std::get<_Idx0>(__t), std::get<_Idx0>(__u)); + if (__c != 0) + return __c; + return std::__tuple_cmp<_Cat>(__t, __u, index_sequence<_Idxs...>()); + } + + template + constexpr + common_comparison_category_t<__detail::__synth3way_t<_Tps, _Ups>...> + operator<=>(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 + template + 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 + constexpr bool + operator!=(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return !(__t == __u); } + + template + constexpr bool + operator>(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return __u < __t; } + + template + constexpr bool + operator<=(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return !(__u < __t); } + + template + constexpr bool + operator>=(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return !(__t < __u); } +#endif // three_way_comparison + + // NB: DR 705. + 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? + /// std::forward_as_tuple + template + constexpr tuple<_Elements&&...> + forward_as_tuple(_Elements&&... __args) noexcept + { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); } + + 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, std::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 std::_Index_tuple<> __type; + }; + + template + struct __make_1st_indices<_Tp, _Tpls...> + { + typedef typename std::_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, std::_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, std::_Index_tuple<>> + { + template + static constexpr _Ret + _S_do(_Us&&... __us) + { + return _Ret(std::forward<_Us>(__us)...); + } + }; + + /// tuple_cat + template...>::value>::type> + 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? + /// tie + template + constexpr tuple<_Elements&...> + tie(_Elements&... __args) noexcept + { return tuple<_Elements&...>(__args...); } + + /// swap + 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 __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 + template + _GLIBCXX20_CONSTEXPR + typename enable_if...>::value>::type + swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete; +#endif + + // A class (and instance) which can be used in 'tie' when an element + // of a tuple is not required. + // _GLIBCXX14_CONSTEXPR + // 2933. PR for LWG 2773 could be clearer + struct _Swallow_assign + { + template + _GLIBCXX14_CONSTEXPR const _Swallow_assign& + operator=(const _Tp&) const + { return *this; } + }; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2773. Making std::ignore constexpr + _GLIBCXX17_INLINE constexpr _Swallow_assign ignore{}; + + /// 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 __cplusplus >= 201703L + + // 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; + +# define __cpp_lib_apply 201603 + + 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))...); + } + + template + 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{}); + } + +#define __cpp_lib_make_from_tuple 201606 + + template + constexpr _Tp + __make_from_tuple_impl(_Tuple&& __t, index_sequence<_Idx...>) + { return _Tp(std::get<_Idx>(std::forward<_Tuple>(__t))...); } + + template + constexpr _Tp + make_from_tuple(_Tuple&& __t) + noexcept(__unpack_std_tuple) + { + return __make_from_tuple_impl<_Tp>( + std::forward<_Tuple>(__t), + make_index_sequence>>{}); + } +#endif // C++17 + + /// @} + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif // _GLIBCXX_TUPLE diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@tuple.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@tuple.blob new file mode 100644 index 0000000000000000000000000000000000000000..378eecee5e1aa49035f716ee5bca6e44ef874b7c GIT binary patch literal 121792 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 -*- C++ -*- + +// Copyright (C) 2007-2020 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 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @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. + * + * @{ + */ + + /// integral_constant + template + struct integral_constant + { + static constexpr _Tp value = __v; + typedef _Tp value_type; + typedef integral_constant<_Tp, __v> type; + constexpr operator value_type() const noexcept { return value; } +#if __cplusplus > 201103L + +#define __cpp_lib_integral_constant_callable 201304 + + constexpr value_type operator()() const noexcept { return value; } +#endif + }; + + template + constexpr _Tp integral_constant<_Tp, __v>::value; + + /// The type used as a compile-time boolean with true value. + typedef integral_constant true_type; + + /// The type used as a compile-time boolean with false value. + typedef integral_constant false_type; + + template + using __bool_constant = integral_constant; + +#if __cplusplus > 201402L +# define __cpp_lib_bool_constant 201505 + template + using bool_constant = integral_constant; +#endif + + // Meta programming helper types. + + template + struct conditional; + + template + struct __type_identity + { using type = _Type; }; + + template + using __type_identity_t = typename __type_identity<_Tp>::type; + + template + struct __or_; + + template<> + struct __or_<> + : public false_type + { }; + + template + struct __or_<_B1> + : public _B1 + { }; + + template + struct __or_<_B1, _B2> + : public conditional<_B1::value, _B1, _B2>::type + { }; + + template + struct __or_<_B1, _B2, _B3, _Bn...> + : public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type + { }; + + template + struct __and_; + + template<> + struct __and_<> + : public true_type + { }; + + template + struct __and_<_B1> + : public _B1 + { }; + + template + struct __and_<_B1, _B2> + : public conditional<_B1::value, _B2, _B1>::type + { }; + + template + struct __and_<_B1, _B2, _B3, _Bn...> + : public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type + { }; + + template + struct __not_ + : public __bool_constant + { }; + +#if __cplusplus >= 201703L + + template + inline constexpr bool __or_v = __or_<_Bn...>::value; + template + inline constexpr bool __and_v = __and_<_Bn...>::value; + +#define __cpp_lib_logical_traits 201510 + + template + struct conjunction + : __and_<_Bn...> + { }; + + template + struct disjunction + : __or_<_Bn...> + { }; + + template + struct negation + : __not_<_Pp> + { }; + + 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 // C++17 + + // Forward declarations + template + struct is_reference; + template + struct is_function; + template + struct is_void; + 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 {}; } + + // 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 + // them, because we need to derive from them as an implementation detail. + + template + struct __success_type + { typedef _Tp type; }; + + struct __failure_type + { }; + + template + struct remove_cv; + + // __remove_cv_t (std::remove_cv_t for C++11). + template + using __remove_cv_t = typename remove_cv<_Tp>::type; + + template + struct is_const; + + // Primary type categories. + + template + struct __is_void_helper + : public false_type { }; + + template<> + struct __is_void_helper + : public true_type { }; + + /// is_void + template + struct is_void + : public __is_void_helper<__remove_cv_t<_Tp>>::type + { }; + + 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 { }; + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + struct __is_integral_helper + : public true_type { }; +#endif + +#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) + template<> + struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_0> + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + template<> + struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_1> + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + template<> + struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_2> + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + template<> + struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_3> + : public true_type { }; + + template<> + struct __is_integral_helper + : public true_type { }; +#endif + + /// is_integral + template + struct is_integral + : public __is_integral_helper<__remove_cv_t<_Tp>>::type + { }; + + 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 { }; + +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) && !defined(__CUDACC__) + template<> + struct __is_floating_point_helper<__float128> + : public true_type { }; +#endif + + /// is_floating_point + template + struct is_floating_point + : public __is_floating_point_helper<__remove_cv_t<_Tp>>::type + { }; + + /// is_array + template + struct is_array + : public false_type { }; + + template + struct is_array<_Tp[_Size]> + : public true_type { }; + + template + struct is_array<_Tp[]> + : public true_type { }; + + template + struct __is_pointer_helper + : public false_type { }; + + template + struct __is_pointer_helper<_Tp*> + : public true_type { }; + + /// is_pointer + template + struct is_pointer + : public __is_pointer_helper<__remove_cv_t<_Tp>>::type + { }; + + /// 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 { }; + + template + struct __is_member_object_pointer_helper + : public false_type { }; + + template + struct __is_member_object_pointer_helper<_Tp _Cp::*> + : public __not_>::type { }; + + /// is_member_object_pointer + template + struct is_member_object_pointer + : public __is_member_object_pointer_helper<__remove_cv_t<_Tp>>::type + { }; + + 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 + { }; + + /// is_enum + template + struct is_enum + : public integral_constant + { }; + + /// is_union + template + struct is_union + : public integral_constant + { }; + + /// is_class + template + struct is_class + : public integral_constant + { }; + + /// is_function + template + struct is_function + : public __bool_constant::value> { }; + + template + struct is_function<_Tp&> + : public false_type { }; + + template + struct is_function<_Tp&&> + : public false_type { }; + +#define __cpp_lib_is_null_pointer 201309 + + template + struct __is_null_pointer_helper + : public false_type { }; + + template<> + struct __is_null_pointer_helper + : public true_type { }; + + /// is_null_pointer (LWG 2247). + template + struct is_null_pointer + : public __is_null_pointer_helper<__remove_cv_t<_Tp>>::type + { }; + + /// __is_nullptr_t (deprecated extension). + template + struct __is_nullptr_t + : public is_null_pointer<_Tp> + { } _GLIBCXX_DEPRECATED_SUGGEST("std::is_null_pointer"); + + // Composite type categories. + + /// is_reference + template + struct is_reference + : public __or_, + is_rvalue_reference<_Tp>>::type + { }; + + /// 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 + template + struct is_object + : public __not_<__or_, is_reference<_Tp>, + is_void<_Tp>>>::type + { }; + + 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 __not_>::type { }; + + template + struct __is_member_pointer_helper + : public false_type { }; + + template + struct __is_member_pointer_helper<_Tp _Cp::*> + : public true_type { }; + + /// is_member_pointer + template + struct is_member_pointer + : public __is_member_pointer_helper<__remove_cv_t<_Tp>>::type + { }; + + template + struct is_same; + + template + using __is_one_of = __or_...>; + + // Check if a type is one of the signed integer types. + 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. + 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; + + // Utility to detect referenceable types ([defns.referenceable]). + + template + struct __is_referenceable + : public false_type + { }; + + template + struct __is_referenceable<_Tp, __void_t<_Tp&>> + : public true_type + { }; + + // Type properties. + + /// is_const + template + struct is_const + : public false_type { }; + + template + struct is_const<_Tp const> + : public true_type { }; + + /// is_volatile + template + struct is_volatile + : public false_type { }; + + template + struct is_volatile<_Tp volatile> + : public true_type { }; + + /// is_trivial + template + struct is_trivial + : public integral_constant + { + 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 integral_constant + { + 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 integral_constant + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_pod (deprecated in C++20) + // Could use is_standard_layout && is_trivial instead of the builtin. + template + struct + _GLIBCXX20_DEPRECATED("use is_standard_layout && is_trivial instead") + is_pod + : public integral_constant + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_literal_type + template + struct is_literal_type + : public integral_constant + { + 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 integral_constant + { }; + + /// is_polymorphic + template + struct is_polymorphic + : public integral_constant + { }; + +#if __cplusplus >= 201402L +#define __cpp_lib_is_final 201402L + /// is_final + template + struct is_final + : public integral_constant + { }; +#endif + + /// is_abstract + template + struct is_abstract + : public integral_constant + { }; + + template::value> + struct __is_signed_helper + : public false_type { }; + + template + struct __is_signed_helper<_Tp, true> + : public integral_constant + { }; + + /// is_signed + template + struct is_signed + : public __is_signed_helper<_Tp>::type + { }; + + /// is_unsigned + template + struct is_unsigned + : public __and_, __not_>> + { }; + + + // Destructible and constructible type properties. + + /** + * @brief Utility to simplify expressions used in unevaluated operands + * @ingroup utilities + */ + + template + _Up + __declval(int); + + template + _Tp + __declval(long); + + template + auto declval() noexcept -> decltype(__declval<_Tp>(0)); + + template + struct extent; + + template + struct remove_all_extents; + + template + struct __is_array_known_bounds + : public integral_constant::value > 0)> + { }; + + template + struct __is_array_unknown_bounds + : public __and_, __not_>> + { }; + + // 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 + { + typedef decltype(__test<_Tp>(0)) type; + }; + + 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 { }; + + /// 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"); + }; + + // 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 + { + typedef decltype(__test<_Tp>(0)) type; + }; + + 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 { }; + + /// 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"); + }; + + template + struct __is_constructible_impl + : public __bool_constant<__is_constructible(_Tp, _Args...)> + { }; + + /// 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>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template::value> + struct __is_copy_constructible_impl; + + template + struct __is_copy_constructible_impl<_Tp, false> + : public false_type { }; + + template + struct __is_copy_constructible_impl<_Tp, true> + : public __is_constructible_impl<_Tp, const _Tp&> + { }; + + /// is_copy_constructible + template + struct is_copy_constructible + : public __is_copy_constructible_impl<_Tp> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template::value> + struct __is_move_constructible_impl; + + template + struct __is_move_constructible_impl<_Tp, false> + : public false_type { }; + + template + struct __is_move_constructible_impl<_Tp, true> + : public __is_constructible_impl<_Tp, _Tp&&> + { }; + + /// is_move_constructible + template + struct is_move_constructible + : public __is_move_constructible_impl<_Tp> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template + struct __is_nt_constructible_impl + : public false_type + { }; + + template + struct __is_nt_constructible_impl + : public __bool_constant()...))> + { }; + + template + struct __is_nt_constructible_impl + : public __bool_constant(std::declval<_Arg>()))> + { }; + + template + struct __is_nt_constructible_impl + : public __bool_constant + { }; + + template + struct __is_nt_constructible_impl + : public __bool_constant::type())> + { }; + +#if __cpp_aggregate_paren_init + template + struct __is_nt_constructible_impl + : public __is_nt_constructible_impl + { }; + + template + struct __is_nt_constructible_impl + : public __and_<__is_nt_constructible_impl...> + { }; +#endif + + template + using __is_nothrow_constructible_impl + = __is_nt_constructible_impl<__is_constructible(_Tp, _Args...), + _Tp, _Args...>; + + /// is_nothrow_constructible + template + struct is_nothrow_constructible + : public __is_nothrow_constructible_impl<_Tp, _Args...>::type + { + 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>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + + template::value> + struct __is_nothrow_copy_constructible_impl; + + template + struct __is_nothrow_copy_constructible_impl<_Tp, false> + : public false_type { }; + + template + struct __is_nothrow_copy_constructible_impl<_Tp, true> + : public __is_nothrow_constructible_impl<_Tp, const _Tp&> + { }; + + /// is_nothrow_copy_constructible + template + struct is_nothrow_copy_constructible + : public __is_nothrow_copy_constructible_impl<_Tp>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template::value> + struct __is_nothrow_move_constructible_impl; + + template + struct __is_nothrow_move_constructible_impl<_Tp, false> + : public false_type { }; + + template + struct __is_nothrow_move_constructible_impl<_Tp, true> + : public __is_nothrow_constructible_impl<_Tp, _Tp&&> + { }; + + /// is_nothrow_move_constructible + template + struct is_nothrow_move_constructible + : public __is_nothrow_move_constructible_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_assignable + template + struct is_assignable + : public __bool_constant<__is_assignable(_Tp, _Up)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template::value> + struct __is_copy_assignable_impl; + + template + struct __is_copy_assignable_impl<_Tp, false> + : public false_type { }; + + template + struct __is_copy_assignable_impl<_Tp, true> + : public __bool_constant<__is_assignable(_Tp&, const _Tp&)> + { }; + + /// is_copy_assignable + template + struct is_copy_assignable + : public __is_copy_assignable_impl<_Tp>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template::value> + struct __is_move_assignable_impl; + + template + struct __is_move_assignable_impl<_Tp, false> + : public false_type { }; + + template + struct __is_move_assignable_impl<_Tp, true> + : public __bool_constant<__is_assignable(_Tp&, _Tp&&)> + { }; + + /// is_move_assignable + template + struct is_move_assignable + : public __is_move_assignable_impl<_Tp>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template + struct __is_nt_assignable_impl + : public integral_constant() = declval<_Up>())> + { }; + + template + struct __is_nothrow_assignable_impl + : public __and_<__bool_constant<__is_assignable(_Tp, _Up)>, + __is_nt_assignable_impl<_Tp, _Up>> + { }; + + /// 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"); + }; + + template::value> + struct __is_nt_copy_assignable_impl; + + template + struct __is_nt_copy_assignable_impl<_Tp, false> + : public false_type { }; + + template + struct __is_nt_copy_assignable_impl<_Tp, true> + : public __is_nothrow_assignable_impl<_Tp&, const _Tp&> + { }; + + /// is_nothrow_copy_assignable + template + struct is_nothrow_copy_assignable + : public __is_nt_copy_assignable_impl<_Tp> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template::value> + struct __is_nt_move_assignable_impl; + + template + struct __is_nt_move_assignable_impl<_Tp, false> + : public false_type { }; + + template + struct __is_nt_move_assignable_impl<_Tp, true> + : public __is_nothrow_assignable_impl<_Tp&, _Tp&&> + { }; + + /// is_nothrow_move_assignable + template + struct is_nothrow_move_assignable + : public __is_nt_move_assignable_impl<_Tp> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + /// is_trivially_constructible + template + struct is_trivially_constructible + : public __bool_constant<__is_trivially_constructible(_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 __bool_constant<__is_trivially_constructible(_Tp)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + 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 + { + typedef decltype(__test(declval<_Tp>())) type; + }; + + 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>> + { }; + + template::value> + struct __is_trivially_copy_constructible_impl; + + template + struct __is_trivially_copy_constructible_impl<_Tp, false> + : public false_type { }; + + template + struct __is_trivially_copy_constructible_impl<_Tp, true> + : public __and_<__is_copy_constructible_impl<_Tp>, + integral_constant> + { }; + + /// is_trivially_copy_constructible + template + struct is_trivially_copy_constructible + : public __is_trivially_copy_constructible_impl<_Tp> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template::value> + struct __is_trivially_move_constructible_impl; + + template + struct __is_trivially_move_constructible_impl<_Tp, false> + : public false_type { }; + + template + struct __is_trivially_move_constructible_impl<_Tp, true> + : public __and_<__is_move_constructible_impl<_Tp>, + integral_constant> + { }; + + /// is_trivially_move_constructible + template + struct is_trivially_move_constructible + : public __is_trivially_move_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_trivially_assignable + template + struct is_trivially_assignable + : public __bool_constant<__is_trivially_assignable(_Tp, _Up)> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template::value> + struct __is_trivially_copy_assignable_impl; + + template + struct __is_trivially_copy_assignable_impl<_Tp, false> + : public false_type { }; + + template + struct __is_trivially_copy_assignable_impl<_Tp, true> + : public __bool_constant<__is_trivially_assignable(_Tp&, const _Tp&)> + { }; + + /// is_trivially_copy_assignable + template + struct is_trivially_copy_assignable + : public __is_trivially_copy_assignable_impl<_Tp> + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + "template argument must be a complete class or an unbounded array"); + }; + + template::value> + struct __is_trivially_move_assignable_impl; + + template + struct __is_trivially_move_assignable_impl<_Tp, false> + : public false_type { }; + + template + struct __is_trivially_move_assignable_impl<_Tp, true> + : public __bool_constant<__is_trivially_assignable(_Tp&, _Tp&&)> + { }; + + /// is_trivially_move_assignable + template + struct is_trivially_move_assignable + : public __is_trivially_move_assignable_impl<_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)>> + { + 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 integral_constant + { + 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 + template + struct rank + : public integral_constant { }; + + template + struct rank<_Tp[_Size]> + : public integral_constant::value> { }; + + template + struct rank<_Tp[]> + : public integral_constant::value> { }; + + /// extent + template + struct extent + : public integral_constant { }; + + template + struct extent<_Tp[_Size], _Uint> + : public integral_constant::value> + { }; + + template + struct extent<_Tp[], _Uint> + : public integral_constant::value> + { }; + + + // Type relations. + + /// is_same + template + struct is_same +#ifdef _GLIBCXX_BUILTIN_IS_SAME_AS + : public integral_constant +#else + : public false_type +#endif + { }; + +#ifndef _GLIBCXX_BUILTIN_IS_SAME_AS + template + struct is_same<_Tp, _Tp> + : public true_type + { }; +#endif + + /// is_base_of + template + struct is_base_of + : public integral_constant + { }; + + template, is_function<_To>, + is_array<_To>>::value> + struct __is_convertible_helper + { + typedef typename is_void<_To>::type 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: + typedef decltype(__test<_From, _To>(0)) type; + }; +#pragma GCC diagnostic pop + + /// is_convertible + template + struct is_convertible + : public __is_convertible_helper<_From, _To>::type + { }; + + // helper trait for unique_ptr, shared_ptr, and span + template + using __is_array_convertible + = is_convertible<_FromElementType(*)[], _ToElementType(*)[]>; + + 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 for C++11 + template + struct __is_nothrow_convertible + : public __is_nt_convertible_helper<_From, _To>::type + { }; + +#if __cplusplus > 201703L +#define __cpp_lib_is_nothrow_convertible 201806L + /// 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 // C++2a + + // Const-volatile modifications. + + /// remove_const + template + struct remove_const + { typedef _Tp type; }; + + template + struct remove_const<_Tp const> + { typedef _Tp type; }; + + /// remove_volatile + template + struct remove_volatile + { typedef _Tp type; }; + + template + struct remove_volatile<_Tp volatile> + { typedef _Tp type; }; + + /// remove_cv + 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; }; + + /// add_const + template + struct add_const + { typedef _Tp const type; }; + + /// add_volatile + template + struct add_volatile + { typedef _Tp volatile type; }; + + /// add_cv + template + struct add_cv + { + typedef typename + add_const::type>::type type; + }; + +#if __cplusplus > 201103L + +#define __cpp_lib_transformation_trait_aliases 201304 + + /// 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 + template + struct remove_reference + { typedef _Tp type; }; + + template + struct remove_reference<_Tp&> + { typedef _Tp type; }; + + template + struct remove_reference<_Tp&&> + { typedef _Tp type; }; + + template::value> + struct __add_lvalue_reference_helper + { typedef _Tp type; }; + + template + struct __add_lvalue_reference_helper<_Tp, true> + { typedef _Tp& type; }; + + /// add_lvalue_reference + template + struct add_lvalue_reference + : public __add_lvalue_reference_helper<_Tp> + { }; + + template::value> + struct __add_rvalue_reference_helper + { typedef _Tp type; }; + + template + struct __add_rvalue_reference_helper<_Tp, true> + { typedef _Tp&& type; }; + + /// add_rvalue_reference + template + struct add_rvalue_reference + : public __add_rvalue_reference_helper<_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. + + // Utility for constructing identically cv-qualified types. + template + struct __cv_selector; + + template + struct __cv_selector<_Unqualified, false, false> + { typedef _Unqualified __type; }; + + template + struct __cv_selector<_Unqualified, false, true> + { typedef volatile _Unqualified __type; }; + + template + struct __cv_selector<_Unqualified, true, false> + { typedef const _Unqualified __type; }; + + template + struct __cv_selector<_Unqualified, true, true> + { typedef const volatile _Unqualified __type; }; + + template::value, + bool _IsVol = is_volatile<_Qualified>::value> + class __match_cv_qualifiers + { + typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match; + + public: + typedef typename __match::__type __type; + }; + + // Utility for finding the unsigned versions of signed integral types. + template + struct __make_unsigned + { typedef _Tp __type; }; + + template<> + struct __make_unsigned + { typedef unsigned char __type; }; + + template<> + struct __make_unsigned + { typedef unsigned char __type; }; + + template<> + struct __make_unsigned + { typedef unsigned short __type; }; + + template<> + struct __make_unsigned + { typedef unsigned int __type; }; + + template<> + struct __make_unsigned + { typedef unsigned long __type; }; + + template<> + struct __make_unsigned + { typedef unsigned long long __type; }; + +#if defined(__GLIBCXX_TYPE_INT_N_0) + template<> + struct __make_unsigned<__GLIBCXX_TYPE_INT_N_0> + { typedef unsigned __GLIBCXX_TYPE_INT_N_0 __type; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + template<> + struct __make_unsigned<__GLIBCXX_TYPE_INT_N_1> + { typedef unsigned __GLIBCXX_TYPE_INT_N_1 __type; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + template<> + struct __make_unsigned<__GLIBCXX_TYPE_INT_N_2> + { typedef unsigned __GLIBCXX_TYPE_INT_N_2 __type; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + template<> + struct __make_unsigned<__GLIBCXX_TYPE_INT_N_3> + { typedef unsigned __GLIBCXX_TYPE_INT_N_3 __type; }; +#endif + + // Select between integral and enum: not possible to be both. + template::value, + bool _IsEnum = is_enum<_Tp>::value> + 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. +#if defined(_GLIBCXX_USE_WCHAR_T) + template<> + struct __make_unsigned + { + using __type + = typename __make_unsigned_selector::__type; + }; +#endif + +#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; + }; + + // Given an integral/enum type, return the corresponding unsigned + // integer type. + // Primary template. + /// make_unsigned + template + struct make_unsigned + { typedef typename __make_unsigned_selector<_Tp>::__type type; }; + + // Integral, but don't define. + template<> + struct make_unsigned; + + + // Utility for finding the signed versions of unsigned integral types. + template + struct __make_signed + { typedef _Tp __type; }; + + template<> + struct __make_signed + { typedef signed char __type; }; + + template<> + struct __make_signed + { typedef signed char __type; }; + + template<> + struct __make_signed + { typedef signed short __type; }; + + template<> + struct __make_signed + { typedef signed int __type; }; + + template<> + struct __make_signed + { typedef signed long __type; }; + + template<> + struct __make_signed + { typedef signed long long __type; }; + +#if defined(__GLIBCXX_TYPE_INT_N_0) + template<> + struct __make_signed + { typedef __GLIBCXX_TYPE_INT_N_0 __type; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + template<> + struct __make_signed + { typedef __GLIBCXX_TYPE_INT_N_1 __type; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + template<> + struct __make_signed + { typedef __GLIBCXX_TYPE_INT_N_2 __type; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_3) + template<> + struct __make_signed + { typedef __GLIBCXX_TYPE_INT_N_3 __type; }; +#endif + + // Select between integral and enum: not possible to be both. + template::value, + bool _IsEnum = is_enum<_Tp>::value> + 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> + { + typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type; + + public: + typedef typename __make_signed_selector<__unsigned_type>::__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. +#if defined(_GLIBCXX_USE_WCHAR_T) + template<> + struct __make_signed + { + using __type + = typename __make_signed_selector::__type; + }; +#endif + +#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; + }; + + // Given an integral/enum type, return the corresponding signed + // integer type. + // Primary template. + /// make_signed + template + struct make_signed + { typedef typename __make_signed_selector<_Tp>::__type type; }; + + // Integral, but don't define. + 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 + template + struct remove_extent + { typedef _Tp type; }; + + template + struct remove_extent<_Tp[_Size]> + { typedef _Tp type; }; + + template + struct remove_extent<_Tp[]> + { typedef _Tp type; }; + + /// remove_all_extents + template + struct remove_all_extents + { typedef _Tp type; }; + + template + struct remove_all_extents<_Tp[_Size]> + { typedef typename remove_all_extents<_Tp>::type type; }; + + template + struct remove_all_extents<_Tp[]> + { typedef typename remove_all_extents<_Tp>::type type; }; + +#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. + + template + struct __remove_pointer_helper + { typedef _Tp type; }; + + template + struct __remove_pointer_helper<_Tp, _Up*> + { typedef _Up type; }; + + /// remove_pointer + template + struct remove_pointer + : public __remove_pointer_helper<_Tp, __remove_cv_t<_Tp>> + { }; + + /// add_pointer + template, + is_void<_Tp>>::value> + struct __add_pointer_helper + { typedef _Tp type; }; + + template + struct __add_pointer_helper<_Tp, true> + { typedef typename remove_reference<_Tp>::type* type; }; + + template + struct add_pointer + : public __add_pointer_helper<_Tp> + { }; + +#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 + + template + struct __aligned_storage_msa + { + union __type + { + unsigned char __data[_Len]; + struct __attribute__((__aligned__)) { } __align; + }; + }; + + /** + * @brief Alignment type. + * + * The value of _Align is a default-alignment which shall be the + * most stringent alignment requirement for any C++ object type + * whose size is no greater than _Len (3.9). The member typedef + * type shall 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. + */ + template::__type)> + struct aligned_storage + { + union type + { + unsigned char __data[_Len]; + struct __attribute__((__aligned__((_Align)))) { } __align; + }; + }; + + 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; + }; + + /** + * @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 + */ + template + struct 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. + typedef typename aligned_storage<_S_len, alignment_value>::type type; + }; + + template + const size_t aligned_union<_Len, _Types...>::alignment_value; + + // Decay trait for arrays and functions, used for perfect forwarding + // in make_pair, make_tuple, etc. + template::value, + bool _IsFunction = is_function<_Up>::value> + struct __decay_selector; + + // NB: DR 705. + template + struct __decay_selector<_Up, false, false> + { typedef __remove_cv_t<_Up> __type; }; + + template + struct __decay_selector<_Up, true, false> + { typedef typename remove_extent<_Up>::type* __type; }; + + template + struct __decay_selector<_Up, false, true> + { typedef typename add_pointer<_Up>::type __type; }; + + /// decay + template + class decay + { + typedef typename remove_reference<_Tp>::type __remove_type; + + public: + typedef typename __decay_selector<__remove_type>::__type type; + }; + + // __decay_t (std::decay_t for C++11). + template + using __decay_t = typename decay<_Tp>::type; + + template + class reference_wrapper; + + // Helper which adds a reference to a type when given a reference_wrapper + template + struct __strip_reference_wrapper + { + typedef _Tp __type; + }; + + template + struct __strip_reference_wrapper > + { + typedef _Tp& __type; + }; + + template + using __decay_and_strip = __strip_reference_wrapper<__decay_t<_Tp>>; + + + // Primary template. + /// Define a member typedef @c type only if a boolean constant is true. + template + struct enable_if + { }; + + // Partial specialization for true. + template + struct enable_if + { typedef _Tp type; }; + + // __enable_if_t (std::enable_if_t for C++11) + template + using __enable_if_t = typename enable_if<_Cond, _Tp>::type; + + template + using _Require = __enable_if_t<__and_<_Cond...>::value>; + + // Primary template. + /// Define a member typedef @c type to one of two argument types. + template + struct conditional + { typedef _Iftrue type; }; + + // Partial specialization for false. + template + struct conditional + { typedef _Iffalse type; }; + + // __remove_cvref_t (std::remove_cvref_t for C++11). + template + using __remove_cvref_t + = typename remove_cv::type>::type; + + /// common_type + template + struct common_type; + + // Sfinae-friendly common_type implementation: + + 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::value> + struct __underlying_type_impl + { + using type = __underlying_type(_Tp); + }; + + template + struct __underlying_type_impl<_Tp, false> + { }; + + /// The underlying type of an enum. + template + struct underlying_type + : public __underlying_type_impl<_Tp> + { }; + + template + struct __declval_protector + { + static const bool __stop = false; + }; + + 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 + class result_of; + + // Sfinae-friendly result_of implementation: + +#define __cpp_lib_result_of_sfinae 201210 + + 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 + { + typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; + }; + + // [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 + { + typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; + }; + + // [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 + { + typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; + }; + + // [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 + { + typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; + }; + + template + struct __result_of_memobj; + + template + struct __result_of_memobj<_Res _Class::*, _Arg> + { + typedef __remove_cvref_t<_Arg> _Argval; + typedef _Res _Class::* _MemPtr; + typedef typename conditional<__or_, + is_base_of<_Class, _Argval>>::value, + __result_of_memobj_ref<_MemPtr, _Arg>, + __result_of_memobj_deref<_MemPtr, _Arg> + >::type::type type; + }; + + template + struct __result_of_memfun; + + template + struct __result_of_memfun<_Res _Class::*, _Arg, _Args...> + { + typedef typename remove_reference<_Arg>::type _Argval; + typedef _Res _Class::* _MemPtr; + typedef typename conditional::value, + __result_of_memfun_ref<_MemPtr, _Arg, _Args...>, + __result_of_memfun_deref<_MemPtr, _Arg, _Args...> + >::type::type 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 + { + typedef __failure_type 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 + { + typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type; + }; + + // __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 + { }; + + template + struct result_of<_Functor(_ArgTypes...)> + : public __invoke_result<_Functor, _ArgTypes...> + { }; + +#if __cplusplus >= 201402L + /// Alias template for aligned_storage + template::__type)> + using aligned_storage_t = typename aligned_storage<_Len, _Align>::type; + + template + using aligned_union_t = typename aligned_union<_Len, _Types...>::type; + + /// 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 + +#if __cplusplus >= 201703L || !defined(__STRICT_ANSI__) // c++17 or gnu++11 +#define __cpp_lib_void_t 201411 + /// A metafunction that always yields void, used for detecting valid types. + template using void_t = void; +#endif + + /// Implementation of the detection idiom (negative case). + template class _Op, typename... _Args> + struct __detector + { + using value_t = false_type; + using type = _Default; + }; + + /// Implementation of the detection idiom (positive case). + template class _Op, + typename... _Args> + struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...> + { + using value_t = true_type; + using type = _Op<_Args...>; + }; + + // Detect whether _Op<_Args...> is a valid type, use _Default if not. + template class _Op, + typename... _Args> + using __detected_or = __detector<_Default, void, _Op, _Args...>; + + // _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; + + /// @} group metaprogramming + + /** + * 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 + class tuple; + + template + struct __is_tuple_like_impl : false_type + { }; + + template + struct __is_tuple_like_impl> : true_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 + { }; + + 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); + + 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 + { + typedef decltype(__test<_Tp>(0)) type; + }; + + template + struct __is_nothrow_swappable_impl + : public __swappable_details::__do_is_nothrow_swappable_impl + { + typedef decltype(__test<_Tp>(0)) type; + }; + + template + struct __is_swappable + : public __is_swappable_impl<_Tp>::type + { }; + + template + struct __is_nothrow_swappable + : public __is_nothrow_swappable_impl<_Tp>::type + { }; + +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 +#define __cpp_lib_is_swappable 201603 + /// 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 + + 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 + { + typedef decltype(__test<_Tp, _Up>(0)) type; + }; + + // Optimization for the homogenous lvalue case, not required: + template + struct __is_swappable_with_impl<_Tp&, _Tp&> + : public __swappable_details::__do_is_swappable_impl + { + typedef decltype(__test<_Tp&>(0)) type; + }; + + template + struct __is_nothrow_swappable_with_impl + : public __swappable_with_details::__do_is_nothrow_swappable_with_impl + { + typedef decltype(__test<_Tp, _Up>(0)) type; + }; + + // 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 + { + typedef decltype(__test<_Tp&>(0)) type; + }; + + /// is_swappable_with + template + struct is_swappable_with + : public __is_swappable_with_impl<_Tp, _Up>::type + { }; + + /// is_nothrow_swappable_with + template + struct is_nothrow_swappable_with + : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type + { }; + +#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// c++1z or gnu++11 + + // __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 { }; + + // Used for valid INVOKE and INVOKE expressions. + template + struct __is_invocable_impl<_Result, _Ret, + /* is_void<_Ret> = */ true, + __void_t> + : true_type + { }; + +#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. + // Unlike declval, this doesn't add_rvalue_reference. + static typename _Result::type _S_get(); + + template + static void _S_conv(_Tp); + + // This overload is viable if INVOKE(f, args...) can convert to _Tp. + template(_S_get()))> + static true_type + _S_test(int); + + template + static false_type + _S_test(...); + + public: + using type = 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 + +#if __cplusplus >= 201703L +# define __cpp_lib_is_invocable 201703 + + /// std::invoke_result + template + struct invoke_result + : public __invoke_result<_Functor, _ArgTypes...> + { }; + + /// std::invoke_result_t + template + using invoke_result_t = typename invoke_result<_Fn, _Args...>::type; + + /// std::is_invocable + template + struct is_invocable + : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type + { + static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), + "_Fn 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"); + }; + + /// std::is_nothrow_invocable + template + struct is_nothrow_invocable + : __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>, + __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"); + }; + + template + struct __is_nt_invocable_impl : false_type { }; + + template + struct __is_nt_invocable_impl<_Result, _Ret, + __void_t> + : __or_, + __is_nothrow_convertible> + { }; + + /// 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 + { }; + + /// std::is_invocable_v + template + inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value; + + /// std::is_nothrow_invocable_v + template + inline constexpr bool is_nothrow_invocable_v + = is_nothrow_invocable<_Fn, _Args...>::value; + + /// std::is_invocable_r_v + template + inline constexpr bool is_invocable_r_v + = is_invocable_r<_Ret, _Fn, _Args...>::value; + + /// std::is_nothrow_invocable_r_v + template + inline constexpr bool is_nothrow_invocable_r_v + = is_nothrow_invocable_r<_Ret, _Fn, _Args...>::value; +#endif // C++17 + +#if __cplusplus >= 201703L +# define __cpp_lib_type_trait_variable_templates 201510L +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; +template + inline constexpr bool is_array_v = is_array<_Tp>::value; +template + inline constexpr bool is_pointer_v = is_pointer<_Tp>::value; +template + inline constexpr bool is_lvalue_reference_v = + is_lvalue_reference<_Tp>::value; +template + inline constexpr bool is_rvalue_reference_v = + is_rvalue_reference<_Tp>::value; +template + inline constexpr bool is_member_object_pointer_v = + is_member_object_pointer<_Tp>::value; +template + inline constexpr bool is_member_function_pointer_v = + is_member_function_pointer<_Tp>::value; +template + inline constexpr bool is_enum_v = is_enum<_Tp>::value; +template + inline constexpr bool is_union_v = is_union<_Tp>::value; +template + inline constexpr bool is_class_v = is_class<_Tp>::value; +template + inline constexpr bool is_function_v = is_function<_Tp>::value; +template + inline constexpr bool is_reference_v = is_reference<_Tp>::value; +template + inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value; +template + inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value; +template + inline constexpr bool is_object_v = is_object<_Tp>::value; +template + inline constexpr bool is_scalar_v = is_scalar<_Tp>::value; +template + inline constexpr bool is_compound_v = is_compound<_Tp>::value; +template + inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value; +template + inline constexpr bool is_const_v = is_const<_Tp>::value; +template + inline constexpr bool is_volatile_v = is_volatile<_Tp>::value; +template + inline constexpr bool is_trivial_v = is_trivial<_Tp>::value; +template + inline constexpr bool is_trivially_copyable_v = + is_trivially_copyable<_Tp>::value; +template + inline constexpr bool is_standard_layout_v = is_standard_layout<_Tp>::value; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +template + _GLIBCXX20_DEPRECATED("use is_standard_layout_v && is_trivial_v instead") + inline constexpr bool is_pod_v = is_pod<_Tp>::value; +#pragma GCC diagnostic pop +template + inline constexpr bool is_literal_type_v = is_literal_type<_Tp>::value; +template + inline constexpr bool is_empty_v = is_empty<_Tp>::value; +template + inline constexpr bool is_polymorphic_v = is_polymorphic<_Tp>::value; +template + inline constexpr bool is_abstract_v = is_abstract<_Tp>::value; +template + inline constexpr bool is_final_v = is_final<_Tp>::value; +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...>::value; +template + inline constexpr bool is_default_constructible_v = + is_default_constructible<_Tp>::value; +template + inline constexpr bool is_copy_constructible_v = + is_copy_constructible<_Tp>::value; +template + inline constexpr bool is_move_constructible_v = + is_move_constructible<_Tp>::value; +template + inline constexpr bool is_assignable_v = is_assignable<_Tp, _Up>::value; +template + inline constexpr bool is_copy_assignable_v = is_copy_assignable<_Tp>::value; +template + inline constexpr bool is_move_assignable_v = is_move_assignable<_Tp>::value; +template + inline constexpr bool is_destructible_v = is_destructible<_Tp>::value; +template + inline constexpr bool is_trivially_constructible_v = + is_trivially_constructible<_Tp, _Args...>::value; +template + inline constexpr bool is_trivially_default_constructible_v = + is_trivially_default_constructible<_Tp>::value; +template + inline constexpr bool is_trivially_copy_constructible_v = + is_trivially_copy_constructible<_Tp>::value; +template + inline constexpr bool is_trivially_move_constructible_v = + is_trivially_move_constructible<_Tp>::value; +template + inline constexpr bool is_trivially_assignable_v = + is_trivially_assignable<_Tp, _Up>::value; +template + inline constexpr bool is_trivially_copy_assignable_v = + is_trivially_copy_assignable<_Tp>::value; +template + inline constexpr bool is_trivially_move_assignable_v = + is_trivially_move_assignable<_Tp>::value; +template + inline constexpr bool is_trivially_destructible_v = + is_trivially_destructible<_Tp>::value; +template + inline constexpr bool is_nothrow_constructible_v = + is_nothrow_constructible<_Tp, _Args...>::value; +template + inline constexpr bool is_nothrow_default_constructible_v = + is_nothrow_default_constructible<_Tp>::value; +template + inline constexpr bool is_nothrow_copy_constructible_v = + is_nothrow_copy_constructible<_Tp>::value; +template + inline constexpr bool is_nothrow_move_constructible_v = + is_nothrow_move_constructible<_Tp>::value; +template + inline constexpr bool is_nothrow_assignable_v = + is_nothrow_assignable<_Tp, _Up>::value; +template + inline constexpr bool is_nothrow_copy_assignable_v = + is_nothrow_copy_assignable<_Tp>::value; +template + inline constexpr bool is_nothrow_move_assignable_v = + is_nothrow_move_assignable<_Tp>::value; +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>::value; +template + inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value; +template + inline constexpr size_t rank_v = rank<_Tp>::value; +template + inline constexpr size_t extent_v = extent<_Tp, _Idx>::value; +#ifdef _GLIBCXX_BUILTIN_IS_SAME_AS +template + inline constexpr bool is_same_v = _GLIBCXX_BUILTIN_IS_SAME_AS(_Tp, _Up); +#else +template + inline constexpr bool is_same_v = std::is_same<_Tp, _Up>::value; +#endif +template + inline constexpr bool is_base_of_v = is_base_of<_Base, _Derived>::value; +template + inline constexpr bool is_convertible_v = is_convertible<_From, _To>::value; + +#ifdef _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP +# define __cpp_lib_has_unique_object_representations 201606 + /// has_unique_object_representations + 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"); + }; + + template + inline constexpr bool has_unique_object_representations_v + = has_unique_object_representations<_Tp>::value; +#endif + +#ifdef _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE +# define __cpp_lib_is_aggregate 201703 + /// is_aggregate + template + struct is_aggregate + : bool_constant<__is_aggregate(remove_cv_t<_Tp>)> + { }; + + /// is_aggregate_v + template + inline constexpr bool is_aggregate_v = is_aggregate<_Tp>::value; +#endif +#endif // C++17 + +#if __cplusplus > 201703L +#define __cpp_lib_remove_cvref 201711L + + /// Remove references and cv-qualifiers. + template + struct remove_cvref + { + using type = __remove_cvref_t<_Tp>; + }; + + template + using remove_cvref_t = __remove_cvref_t<_Tp>; + +#define __cpp_lib_type_identity 201806L + /// Identity metafunction. + template + struct type_identity { using type = _Tp; }; + + template + using type_identity_t = typename type_identity<_Tp>::type; + +#define __cpp_lib_unwrap_ref 201811L + + /// Unwrap a reference_wrapper + 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 + template + struct unwrap_ref_decay { using type = unwrap_reference_t>; }; + + template + using unwrap_ref_decay_t = typename unwrap_ref_decay<_Tp>::type; + +#define __cpp_lib_bounded_array_traits 201902L + + /// True for a type that is an array of known bound. + template + struct is_bounded_array + : public __is_array_known_bounds<_Tp> + { }; + + /// True for a type that is an array of unknown bound. + template + struct is_unbounded_array + : public __is_array_unknown_bounds<_Tp> + { }; + + template + inline constexpr bool is_bounded_array_v + = is_bounded_array<_Tp>::value; + + template + inline constexpr bool is_unbounded_array_v + = is_unbounded_array<_Tp>::value; + +#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED + +#define __cpp_lib_is_constant_evaluated 201811L + + constexpr inline bool + is_constant_evaluated() noexcept + { return __builtin_is_constant_evaluated(); } +#endif + + 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; + + // If A and B are both lvalue reference types, ... + template + struct __common_ref_impl<_Xp&, _Yp&, + __void_t<__cond_res<__copy_cv<_Xp, _Yp>&, __copy_cv<_Yp, _Xp>&>>> + { using type = __cond_res<__copy_cv<_Xp, _Yp>&, __copy_cv<_Yp, _Xp>&>; }; + + // 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&> + { }; + + template class _TQual, template class _UQual> + struct basic_common_reference + { }; + + 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; + + 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; }; + + 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 + struct __common_reference_impl<_Tp1&, _Tp2&, 1, + void_t<__common_ref<_Tp1&, _Tp2&>>> + { using type = __common_ref<_Tp1&, _Tp2&>; }; + + template + struct __common_reference_impl<_Tp1&&, _Tp2&&, 1, + void_t<__common_ref<_Tp1&&, _Tp2&&>>> + { using type = __common_ref<_Tp1&&, _Tp2&&>; }; + + template + struct __common_reference_impl<_Tp1&, _Tp2&&, 1, + void_t<__common_ref<_Tp1&, _Tp2&&>>> + { using type = __common_ref<_Tp1&, _Tp2&&>; }; + + template + struct __common_reference_impl<_Tp1&&, _Tp2&, 1, + void_t<__common_ref<_Tp1&&, _Tp2&>>> + { using type = __common_ref<_Tp1&&, _Tp2&>; }; + + // Otherwise, if basic_common_reference<...>::type is well-formed, ... + template + struct __common_reference_impl<_Tp1, _Tp2, 2, + void_t<__basic_common_ref<_Tp1, _Tp2>>> + { using type = __basic_common_ref<_Tp1, _Tp2>; }; + + // Otherwise, if COND-RES(T1, T2) is well-formed, ... + template + struct __common_reference_impl<_Tp1, _Tp2, 3, + void_t<__cond_res<_Tp1, _Tp2>>> + { using type = __cond_res<_Tp1, _Tp2>; }; + + // Otherwise, if common_type_t is well-formed, ... + template + struct __common_reference_impl<_Tp1, _Tp2, 4, + void_t>> + { using type = common_type_t<_Tp1, _Tp2>; }; + + // Otherwise, there shall be no member type. + template + struct __common_reference_impl<_Tp1, _Tp2, 5, void> + { }; + + // 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...> + { }; + +#endif // C++2a + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++11 + +#endif // _GLIBCXX_TYPE_TRAITS diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@type_traits.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@type_traits.blob new file mode 100644 index 0000000000000000000000000000000000000000..958fd65c91ea92e2e3225329d3e7aae669585a40 GIT binary patch literal 132641 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 |#dV!=AqyjwZqQ8~4ymmW__+@MtP63ow} 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. + +/** @file typeinfo + * This is a Standard C++ Library header. + */ + +#ifndef _TYPEINFO +#define _TYPEINFO + +#pragma GCC system_header + +#include +#if __cplusplus >= 201103L +#include +#endif + +#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; } + +#if !__GXX_TYPEINFO_EQUALITY_INLINE + // 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. + bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT; + bool operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT; +#else + #if !__GXX_MERGED_TYPEINFO_NAMES + /** Returns true if @c *this precedes @c __arg in the implementation's + * collation order. */ + // 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. + bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT + { return (__name[0] == '*' && __arg.__name[0] == '*') + ? __name < __arg.__name + : __builtin_strcmp (__name, __arg.__name) < 0; } + + bool operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT + { + return ((__name == __arg.__name) + || (__name[0] != '*' && + __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. + bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT + { return __name < __arg.__name; } + + bool operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT + { return __name == __arg.__name; } + #endif +#endif + +#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: + /// Assigning type_info is not supported. + type_info& operator=(const type_info&); + type_info(const type_info&); + }; + + /** + * @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/@@home@ado@git@ssp/@usr@include@c++@10@typeinfo.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@typeinfo.blob new file mode 100644 index 0000000000000000000000000000000000000000..e52375fa438c659fd7b637c18c2ffae8be255a82 GIT binary patch literal 19223 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 W3Y<~kh!!4MIL-9bT{z7h(f -*- C++ -*- + +// Copyright (C) 2001-2020 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,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 include/utility + * This is a Standard C++ Library header. + */ + +#ifndef _GLIBCXX_UTILITY +#define _GLIBCXX_UTILITY 1 + +#pragma GCC system_header + +/** + * @defgroup utilities Utilities + * + * Components deemed generally useful. Includes pair, tuple, + * forward/move helpers, ratio, function object, metaprogramming and + * type traits, time, date, and memory functions. + */ + +#include +#include +#include + +#if __cplusplus >= 201103L + +#include +#include +#include + +#if __cplusplus > 201703L +#include +#endif + +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> { }; + + /// 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> + { + typedef typename add_const<__tuple_element_t<__i, _Tp>>::type type; + }; + + template + struct tuple_element<__i, volatile _Tp> + { + typedef typename add_volatile<__tuple_element_t<__i, _Tp>>::type type; + }; + + template + struct tuple_element<__i, const volatile _Tp> + { + typedef typename add_cv<__tuple_element_t<__i, _Tp>>::type type; + }; + +#if __cplusplus >= 201402L +// The standard says this macro and alias template should be in +// but we define them here, to be available when the partial specializations +// of tuple_element> and tuple_element> are defined. +#define __cpp_lib_tuple_element_t 201402L + + template + using tuple_element_t = typename tuple_element<__i, _Tp>::type; +#endif + + // Various functions which give std::pair a tuple-like interface. + + /// Partial specialization for std::pair + template + struct __is_tuple_like_impl> : true_type + { }; + + /// Partial specialization for std::pair + template + struct tuple_size> + : public integral_constant { }; + + /// Partial specialization for std::pair + template + struct tuple_element<0, std::pair<_Tp1, _Tp2>> + { typedef _Tp1 type; }; + + /// Partial specialization for std::pair + template + struct tuple_element<1, std::pair<_Tp1, _Tp2>> + { typedef _Tp2 type; }; + + template + struct __pair_get; + + template<> + struct __pair_get<0> + { + template + static constexpr _Tp1& + __get(std::pair<_Tp1, _Tp2>& __pair) noexcept + { return __pair.first; } + + template + static constexpr _Tp1&& + __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward<_Tp1>(__pair.first); } + + template + static constexpr const _Tp1& + __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept + { return __pair.first; } + + template + static constexpr const _Tp1&& + __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward(__pair.first); } + }; + + template<> + struct __pair_get<1> + { + template + static constexpr _Tp2& + __get(std::pair<_Tp1, _Tp2>& __pair) noexcept + { return __pair.second; } + + template + static constexpr _Tp2&& + __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward<_Tp2>(__pair.second); } + + template + static constexpr const _Tp2& + __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept + { return __pair.second; } + + template + static constexpr const _Tp2&& + __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward(__pair.second); } + }; + + template + constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type& + get(std::pair<_Tp1, _Tp2>& __in) noexcept + { return __pair_get<_Int>::__get(__in); } + + template + constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&& + get(std::pair<_Tp1, _Tp2>&& __in) noexcept + { return __pair_get<_Int>::__move_get(std::move(__in)); } + + template + constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type& + get(const std::pair<_Tp1, _Tp2>& __in) noexcept + { return __pair_get<_Int>::__const_get(__in); } + + template + constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&& + get(const std::pair<_Tp1, _Tp2>&& __in) noexcept + { return __pair_get<_Int>::__const_move_get(std::move(__in)); } + +#if __cplusplus >= 201402L + +#define __cpp_lib_tuples_by_type 201304 + + 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::move(__p.first); } + + template + constexpr const _Tp&& + get(const pair<_Tp, _Up>&& __p) noexcept + { return std::move(__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::move(__p.second); } + + template + constexpr const _Tp&& + get(const pair<_Up, _Tp>&& __p) noexcept + { return std::move(__p.second); } + +#define __cpp_lib_exchange_function 201304 + + /// Assign @p __new_val to @p __obj and return its previous value. + template + _GLIBCXX20_CONSTEXPR + inline _Tp + exchange(_Tp& __obj, _Up&& __new_val) + { return std::__exchange(__obj, std::forward<_Up>(__new_val)); } + +#endif // C++14 + + // Stores a tuple of indices. Used by tuple and pair, and by bind() to + // extract the elements in a tuple. + template struct _Index_tuple { }; + +#ifdef __has_builtin +# if __has_builtin(__make_integer_seq) +# define _GLIBCXX_USE_MAKE_INTEGER_SEQ 1 +# endif +#endif + + // Builds an _Index_tuple<0, 1, 2, ..., _Num-1>. + template + struct _Build_index_tuple + { +#if _GLIBCXX_USE_MAKE_INTEGER_SEQ + template + using _IdxTuple = _Index_tuple<_Indices...>; + + using __type = __make_integer_seq<_IdxTuple, size_t, _Num>; +#else + using __type = _Index_tuple<__integer_pack(_Num)...>; +#endif + }; + +#if __cplusplus > 201103L + +#define __cpp_lib_integer_sequence 201304 + + /// Class template integer_sequence + template + struct integer_sequence + { + typedef _Tp value_type; + static constexpr size_t size() noexcept { return sizeof...(_Idx); } + }; + + /// Alias template make_integer_sequence + template + using make_integer_sequence +#if _GLIBCXX_USE_MAKE_INTEGER_SEQ + = __make_integer_seq; +#else + = integer_sequence<_Tp, __integer_pack(_Num)...>; +#endif + +#undef _GLIBCXX_USE_MAKE_INTEGER_SEQ + + /// 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 + +#if __cplusplus > 201402L + + 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 + struct __is_in_place_type_impl : false_type + { }; + + template + struct __is_in_place_type_impl> : true_type + { }; + + template + struct __is_in_place_type + : public __is_in_place_type_impl<_Tp> + { }; + +#define __cpp_lib_as_const 201510 + template + constexpr add_const_t<_Tp>& as_const(_Tp& __t) noexcept { return __t; } + + template + void as_const(const _Tp&&) = delete; + +#if __cplusplus > 201703L +#define __cpp_lib_integer_comparison_functions 202002L + + template + constexpr bool + cmp_equal(_Tp __t, _Up __u) noexcept + { + static_assert(__is_standard_integer<_Tp>::value); + static_assert(__is_standard_integer<_Up>::value); + + if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>) + return __t == __u; + else if constexpr (is_signed_v<_Tp>) + return __t >= 0 && make_unsigned_t<_Tp>(__t) == __u; + else + return __u >= 0 && __t == make_unsigned_t<_Up>(__u); + } + + template + constexpr bool + cmp_not_equal(_Tp __t, _Up __u) noexcept + { return !std::cmp_equal(__t, __u); } + + template + constexpr bool + cmp_less(_Tp __t, _Up __u) noexcept + { + static_assert(__is_standard_integer<_Tp>::value); + static_assert(__is_standard_integer<_Up>::value); + + if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>) + return __t < __u; + else if constexpr (is_signed_v<_Tp>) + return __t < 0 || make_unsigned_t<_Tp>(__t) < __u; + else + return __u >= 0 && __t < make_unsigned_t<_Up>(__u); + } + + template + constexpr bool + cmp_greater(_Tp __t, _Up __u) noexcept + { return std::cmp_less(__u, __t); } + + template + constexpr bool + cmp_less_equal(_Tp __t, _Up __u) noexcept + { return !std::cmp_less(__u, __t); } + + template + constexpr bool + cmp_greater_equal(_Tp __t, _Up __u) noexcept + { return !std::cmp_less(__t, __u); } + + template + constexpr bool + in_range(_Tp __t) noexcept + { + static_assert(__is_standard_integer<_Up>::value); + static_assert(__is_standard_integer<_Tp>::value); + using __gnu_cxx::__int_traits; + + if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>) + return __int_traits<_Up>::__min <= __t + && __t <= __int_traits<_Up>::__max; + else if constexpr (is_signed_v<_Tp>) + return __t >= 0 + && make_unsigned_t<_Tp>(__t) <= __int_traits<_Up>::__max; + else + return __t <= make_unsigned_t<_Up>(__int_traits<_Up>::__max); + } +#endif // C++20 +#endif // C++17 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif + +#endif /* _GLIBCXX_UTILITY */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@utility.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@utility.blob new file mode 100644 index 0000000000000000000000000000000000000000..54550ce44f240afbeadca4b4465ad39f68e6a287 GIT binary patch literal 27954 zcmb_k34Bvk)_<=pSSw4#T1tn(Sg<0{G_9pFomvsGlzvziYejU3X_~f?G>KVC!2vf^ zTtUYHN6`^x1UEz!L9I)f(Loe&5XJJzB8wDdaT!2a%KQH3zIR{V%XfAoN$K7PQhB$8efx;#xmSD(Z zcX%3nwT>X;3aOKBkLH+br$N1@I{c>a&6iAdKn+4*N`fp2P7CHc>s2hwxI^$3;>}~4a0a_1k$6LSVZ3-vmuZ>r4!Hsjn3dh>^EzGr z5ZkJOKJ5w;SHR`*`QuLY`N^tz@Se{SrGGFjwWl!=`>-kxqv-B@)W*stw(QP z+#<|Z$tDeSVQ0u5bT+!`$X@}qnOD%Vf|;$$4u=*D%4T*N&ehquV<6au$p-SY$S`*M zOqXeA!HC>WyW1Cx!8h$(nZdQ;`UK`GTdj9ET?yz2G^z{gjd68tlXO77_~e7$Z1;G8`aAWvvYf5_crZaZ2a*`wzRlsg{C^%WfV&6-u1sD*~a|)X0_=`*Vh}$=7TiE47S8wq+;U;)z>3p9f;y z)?qgJ9#3;qUO_=Vjal}VUr=DRSqoJ0*zE{9Fmij7qXn_t-Qbm(@UK1@`cTf9Ajc@p zCiUVDBJTQ{nnO-YP`llbMH;xE6CbgnVvbXv02(l8iNjb{C!I)nG}LTbhesopsHw1Lgzng% zYrvRHic6|5n0S#PTs$3#GoMHexPDf2a|;X&vKV9x{>B7dbrdL&R!y1ljyp0w=C3NDEqxT2r4JBoqVGG9{MNXZ)rZ6DM(yvs*zWatW2EK=o@?wV5i4?nA>jUh zL5+FYq-99}Z5Wr`;dDaurn;|81`YAOzA9L?m?YC<-ywkEtZx2Ir*JGS)6|Ohtm|3&6qHNk>ctrd_0j3^~Z3 zcDB;Gu%mK!PC4ytB8V$$yvd6AHOx;`eH{VT-7u)HIrmwxB0>zzH=i#H8M;Z`3g+VBWTyiwqbku9oECX}J7oQD zIU6EKaT6h3fHZTcTC_^|OS}W4UCcxuJ9Ag2*1J6}-IG{ylxN>D+VdC!L0iekJWI>=!wVbA`rJ2ixSiwI(Mk|IAW~f%FOFH z9O%?VXW-m9DszdCZg0IW_P!arWuJr2Yn?s1U2jkt=t00iM?Z;m8BD|p4~^3LjI~+I?nqIy*ecbJw}NA$Mq+>7KMGSiYi~n~7A+_kkk% zmL~lHmO(D$V-X1`X)=|JmJB6$#K>5uQq$aYE9TU>gH8ukHaMCzU8P`V4v)o4g;TLi z5r>2jhY52ufN;`D6}%ZM6Ux5O`(r+a2+rtpK=1Kf-a5A#s~%vh91Lq4i(!O6_Yge3mCY@x9yFkgVY(4_4#ie#1GhEqhGncVT(edvk-WezA4ic+sJx4Es7_`aCZ8*v9#aE|K_zPq z<;m#tRBcQ&R4`r2J5yUlK0}=m9hrKjYZ@nP7;-3wq_K`nz!D-}!;{zm>8=9O2f1S( z`xJ&rQBE}Jgffmi*i5D1#IcOi6*mu;JFyx{qom8A$y%%))|!{y<|0)uj_CNykr>v{ zg_GFFi&`CZ`f!ZZ%)}N;Ghx57O`T?YayQ2*hm%;q7$Z~@O}tsGrJ1!C%({dz`N6O< zL&&$&nXm)LcY0Ngztrgu=OI*@GM{@?(+{}=V#s z0JjV39br#gn|2ba*m4Vnaljq>W2OVQhJ6%n<=oa(3CuUi&5$a|7)Gew5vdwZ##Kd% z>xSin3-)SCkpdVr<6aN?wkBIN5UnLfjvUk&Fa;lXEs4f-l@@_&fN_r^4R}zoCfH z*xqDUN4K#|=WA(3GI82|5(7s^Z+3QZ@U*(1Z4)!#>?(ymY0>+8G)54m!l>s=3pI0& zkgJW`PhxZ{_o?Vu<+Oy;v3Q*OJ?3P@&NsDuCZ069G{@0#Zv4tuY{4&L#>l%H6KM~T zGU4VTp14&ST^0?vLyd7dgH)7K>n9utxNxuWv`k~!Q!sH?hu&9{nTs~(u3UJcLOPSC zkx8{`&^P5;HRJKD1qoe}LDA^M{bvVSOt=H*kbBGqPa_||oYwGENhI7|(W(>jy10&3 zJ6HCKvCyytPe-kuRhr_5-y6eS2{hUq0oL4!m60*yL!@L;(^QF|vf!u=HP1%ObwLim zPM>dz8;4;&HIa)Ijm@FZ$wbV9el6eJ-e%tvbNx4mtk4JkO>x&nGK8-8#=nxS#fh=n zt(dJ_rkzF3M7>A+K-_7{mC(n`CK0`gzY`ueo4{nK+?ShYHX)MTC~0!aHNx0#oh72s zSt@qx9EaZ%@Y{*so5g;a(i7P~Zs>Pquj6#t&+W9Zl-1SZ4_KfJB_$*kdq^I`k+~X> zd(6Ii`S>rbR~_cVrPX|if3eJQVNZ`;dxA;pHsc*RdQZY{i=O(;M@oz zHnP~O{g&KZhP1&I8YsU>tSYr%=O02Jm*I1}-LJtnq`0ft*+)#p(}Us5!Z=&31RhcP zc3E~o^-rD$g>K0V@%7)&d4Km;zdK@z_%wL+Xa^MmZBL-;si5tFak^N<(4PO~gPSs! ze_qbf?ms&2km0eqT*>THb9QBeK$xs3A1#c53()hXM% z)qTI4{7VFt%*8mYttQr97mKxBfUJvxI0fUbVg=jdzzGwVp7-#;I*xe$A5s=h|Eoiz zJQ~F6PUZLH{YLQW_e-ojk$Qqj^LXmXLWb_cHv(5B&&uoI==PnzxAmthzVb)*8MVV` zo<^ySWe}K}f&FACdpi%~^A)u@*7dDPuRmDSgCpDh(97rl{HGtkGS~-j7FcA3#U7xj zcIa)Xt*oTPPNRWr-+Z?POoI!d!tz{=5?gE1#O3MBvq^zpO@D1T+wv!`U)y|k?T`M#9;uFprdEOV3mh1b#Kval-4j_R z{mVHqco&0t-muFJ z#K@e4I17#9EMVefGZ;zo+?c!~W^1@rQkyAmO5c=AbbXfo`3RXV?@w9V+a5W=>H4Mh zj*bTge)mOex?-x?uc50oy_M1RcKSQR8C@^^H2cEZ`8l6*x-2XEUpMjlmsZ84D~1SV z!c;-V<(g5PrF9muExpY~YGId0y)iKmM!A&dDq2a%$#51k!5STJt_5fT(oKERddebc5w91d9U4g z)8ls=SSc%=fr+x#sqBkQQq=b4 z{Ce$bPj6@1^=0~&X2zsrNBh6@*(Bj}PToa5dcWRy|NEarvwj4tMQiS^LAoh0>iD)NS1N_Nbwp(i=`%&t94Ba>$2+EN5f*kpDH({mX%jOLn`j z_7=t%ma)-oXB?$pB4k?9#m*csB}dF6+wQy&C?4NIi5f<8;akrDe0`z1J$;cea>& zY5C1Ja=Je&-j|&D#oN^px*2O#=|=0HK8>QZ@o4H%hU-Y`&vF{I=@*CPou{AbuAsPH zy6~}+zrU+=Qa$kkecp&TjhQ~+i>uRBMH1Mm!EavX&;A7kuDkfvu8KXlu- z+qa#R)BVh`t5^JIk( zLwQDvX~^_>36rEESGOhzz2)qmlLamknfxakKu3xL@mM=WXyiyBz!*Rqs_HDBu3avo zo%Y3(lOjq}{?_ozm_v6i3I}mzM&65kMA+@ALvX;kmYpSG$p1#ywNz8r+j6-DnV9+s zrDb()Tu`=Jtz|;DvR=f;%K-f{U?+RHOiaf^NtGZS-D}&~FYBMrDSZ68==Oo3b)_F^ z`Dnx~b8>*dhzi1P^!RN+n0(ZjEGCY*UQ0I@PO}E z#Pg587%Go-tr*@`u@{p3J%DZzw~!ROmNJ zrngv*XN*XrA{r6kK4LDOAy~QMxvzUJE#A4!M5f)vL7m-28&-CQufYgTqO%7C-9xm3 z(LF^Qo?^hb>9W7Ra*uuNArtJWz@Eymrvf`hggs5n#$&hDFwH(X;3#qDp6`2oQTN?l{|0^J!PFn9#{S9s>qT+@g#9pf0s{@PnmF}ZOH)U+kn(|arF873CF9jqQJOI9e zEgQPr2@!@AcjI)NqyhCftawTQWo7AIhZm+4yrX)sQubYH@~bdAb&M)dYd`wR4JK+D zPs+%&Cft-Qj6;(X$DkIv<;;#l(YEn7+MWQtRj`6R|w0Rf6 zr2jMK$uD{&+m^L?m^87k%Y|Mu9wtt)cKXZ&crAZ6M zEU3n$AI|&D{o~&(JNV!1o|s!2Z{HaS?t4Mzf5a`z6YV4@WxG3O ze!ga2s*t5|;W`1J*>!o$aQD zxJSUqG;w3q#u`!FSh}$WiuhUCXXPp4rs_>Mfr+>J_Y}-KzP25U7%b%l8h?1uVVL9L ztixoANBSOt86M3(N{%S|!>@an_J93#uDpnwvMT5{R*DJ+N=PTtmS!IUEDj#oM)TNz z2XNu~Ql1UrKyD8RS#wjdw|nop_W|15z1{A8fRS=iZbw-E-p6zAjRiN7X6xz1UrCGl zE*g*`E*!Iv)Z)>)zDu|KW4+PIV5T^;Y9`J3`sh{X9y>NKHKIC97nJ5BBV5hbfHI!_ zu*vHF*kl;a&9`I|w#=E#C}yPGnWi&}w#T-1U!V1SlBy-6e;oS#`0cJk#{G%!+1?u_ zitqJ%59vhiD4ey*ghOwf;iFhH^( z=vJM@S8qX|9Uq{DY*A+ht!ZiMAG9p(HqGC5oG#$2be7vJGj#8g_&gq$$M69z92NZT zcf;8Gx)pV5+M?dD9a^c=m1vQdBaqdHJsyj!2|-KH zdoFZi7p-9a0teEK?%G_*W zl)Kr5GPh9!w2<}OchTp~dnbG_&BzvUvu!g{r_KE~BXttnC$z(irHYS# z?lN=f+@+WvRey+^t2QG`-dwsFS#t81WnaSEv`=n_b#JNIG7d}sbomW~UR{yj9?2Rt zNg@g^&0kR^7d6i;CFmo%o2k*Hbi3(3QmMU~9o1n0QnpETNP^`b>Skp~{8&!nhf5Ma zHIexFgv2}D5^uaqvy~GciFcXRzN&gspdOv6jX;UF>m+{sDe=Cs#Lr(PegZ72od6R%R%)VMCb^X`$2-x>5MHVw8ihki)_P5Ad3r(=PW4`GM`3Rh>D)NOTwRO(y6r zLIvgNMHj;*P|HyRky--OLk-{`*IDqtOYjGqTVQFzMSZxOj4bQAqH$G7s@l0h%q7~Q}2(Qc?lO)sDc(|k#ZqN zfr{jJcglVGLXMZhY9V)*r^ov8UZwEt#yVA;Up=2(P)+SKzNMM}m=PhJdk%e}iA^BS zXH53Er{KC1Qf~4R#lr{6K7!mV)PiSbXrE-xhtWynvxhu&i+5mm6NYZIZG=nQ*l#1b z#7z~O$glDBMtaamitE?RDAcu86yK&ew}A;ZRcIT;?s+Ls^oX#F_N+8jc;XtN`2R!r zdYMzALPShWxlJ!~?jBTXc#Dhs3u3!jLjB&4@22+zjHsv%NaDhY3n`o6WlBVA z)D|i9R2@gfZk?Aa#YCoR{5Xs$xWBOM4BMrY=MrO|OIf0CmyYdo-}JiT!GBPdi>Kd4 z?)WSHETQuc^CO`XB)*hu0P(_14MFmMuZBxEbzuO%UxY---CLvt%d5mtD8)LVVdhU^m4V zUdn0{w0{%!x7> zAmAn6j&;-j);h_AIqPieAcb}P){zu8lx!G*>E}+HIds|WU#>UGS6o)L4C(W-(q%}W z#pR{TM`C)oIJo}YvDch$0)3fn8K5ugw+zseUM+mJ1R0`jIZ3)GulUjMq$epKh%#nz zP1PFUSW~)&8rdHeeuPD9OV<*n^@7KYlvkbe2% z@FnfZMij(<@a0^INh~eVF+nQ>qVA{#U0|{Qi!_ zZxu=WW}Cz>)u>8EFhIce%#2+Va@uglV{qxc;nI6Em);vL9V5u3GYiLzS?rjx53IHi zv)Z?=xMo|=+;e7|?Efv>TiE|w{oW$gdAsawlnkvEt(3~tCH=7e{@176X|iZ<`Cgd% z-jcm!>K)A;(1LxoeWV4yz3YLbj_(GYg+F<@kN7LITx1n~FF53B2muDIl{nJPixF#+hvzQti-;_)_YtH5W`O*aD zx~g@6xvq2_U?#6GTn}MyDBl2e{Iv8_687<%7q2`%@OtDJ5_UY_KGy3B)K!1_;!wX6|!s@SL3pqJmX?6xsW+-<- zTAj=A&Ih*h#UjAtC2KT1ICH^bVc^oBbZN>h54lJzjskZMYO8ZtZN+P18C>LA zG2JTUoy+SETR6IE5U^PKJn0~NY5Ajgw&>sPj->!`d5hZ|EC@CR;`zrTM zAb|VQ_f60P{I=%X$pFY5pe|V-jjs-8Ws!Ct=`y%hr2DP=nMn6%?k`R{P;&sPaL9IuM9TY9aW#xc zLlOk7B~Q`rZJ$oEZ7*z}9--CfXYxD*oq#|1(l~E6;KRhCdUga$bYU5YyMj}Bv60gu-EycrP7JjGGI6^Xu z`RNF%=`5(0-v8Y1{`_3e_J~ZXM~@j@eFLbqsMM-rkUwLbzbySSTat)Z_)MleJb%{e zInQrQeW!9mQs_4>9oVL@?4}s?WU*Mo{AV#@ImUE>unG@_G2VHPD>uE@YV)=+uhmxA z7Ui{8SFa|o_1xfHH#VmyHW4z;PA#6avEBBtRP0ET{+KL5zo$A9`*_xbp~<454L{d2Rsc6%iG zPZ0}>PK&XsNL5PJgra9fJW%JAAoogfB)o$>;->V=`5oUCuYL^wS|rlAW@DW>YQv0a zzm7$hnG{W?TBjnqOwF9CM3#w`9h5t`$-85!BLi0m2G86bN`<_v}GnT0cn>^C0@yZ_nyZPZyxH;*!2e=N?T5lb5J*Q;U$ec2qG(mkDj3o`ws$aIUAx+oBL1B7GdejZb57zF**0`o z9F9>}jJncDJyeU$7?yb0Y@}Z+YgX10YjDw^Ho_Xx4+P_SEM278RJ(~qnoR>YMMav= zb3P}K{HBIM5tv*fDe@fa9G2J4$(&Op&aIydxu_ix?b_&MWUF;6b2?iyw-zUDtK5dP LeTQua^y2>j+q8U$ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@variant b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@variant new file mode 100644 index 0000000..fa0284d --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@variant @@ -0,0 +1,1800 @@ +// -*- C++ -*- + +// Copyright (C) 2016-2020 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 variant + * This is the C++ Library header. + */ + +#ifndef _GLIBCXX_VARIANT +#define _GLIBCXX_VARIANT 1 + +#pragma GCC system_header + +#if __cplusplus >= 201703L + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if __cplusplus > 201703L +# include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +namespace __detail +{ +namespace __variant +{ + template + struct _Nth_type; + + template + struct _Nth_type<_Np, _First, _Rest...> + : _Nth_type<_Np-1, _Rest...> { }; + + template + struct _Nth_type<0, _First, _Rest...> + { using type = _First; }; + +} // namespace __variant +} // namespace __detail + +#define __cpp_lib_variant 201606L + + template class tuple; + template class variant; + template struct hash; + + template + struct variant_size; + + template + struct variant_size : variant_size<_Variant> {}; + + template + struct variant_size : variant_size<_Variant> {}; + + template + struct variant_size : variant_size<_Variant> {}; + + template + struct variant_size> + : std::integral_constant {}; + + template + inline constexpr size_t variant_size_v = variant_size<_Variant>::value; + + template + struct variant_alternative; + + template + struct variant_alternative<_Np, variant<_First, _Rest...>> + : variant_alternative<_Np-1, variant<_Rest...>> {}; + + template + struct variant_alternative<0, variant<_First, _Rest...>> + { using type = _First; }; + + template + using variant_alternative_t = + typename variant_alternative<_Np, _Variant>::type; + + template + struct variant_alternative<_Np, const _Variant> + { using type = add_const_t>; }; + + template + struct variant_alternative<_Np, volatile _Variant> + { using type = add_volatile_t>; }; + + template + struct variant_alternative<_Np, const volatile _Variant> + { using type = add_cv_t>; }; + + inline constexpr size_t variant_npos = -1; + + template + constexpr variant_alternative_t<_Np, variant<_Types...>>& + get(variant<_Types...>&); + + template + constexpr variant_alternative_t<_Np, variant<_Types...>>&& + get(variant<_Types...>&&); + + template + constexpr variant_alternative_t<_Np, variant<_Types...>> const& + get(const variant<_Types...>&); + + template + constexpr variant_alternative_t<_Np, variant<_Types...>> const&& + get(const variant<_Types...>&&); + + template + constexpr decltype(auto) + __do_visit(_Visitor&& __visitor, _Variants&&... __variants); + + template + decltype(auto) + __variant_cast(_Tp&& __rhs) + { + if constexpr (is_lvalue_reference_v<_Tp>) + { + if constexpr (is_const_v>) + return static_cast&>(__rhs); + else + return static_cast&>(__rhs); + } + else + return static_cast&&>(__rhs); + } + +namespace __detail +{ +namespace __variant +{ + // Returns the first appearence of _Tp in _Types. + // Returns sizeof...(_Types) if _Tp is not in _Types. + template + struct __index_of : std::integral_constant {}; + + template + inline constexpr size_t __index_of_v = __index_of<_Tp, _Types...>::value; + + template + struct __index_of<_Tp, _First, _Rest...> : + std::integral_constant + ? 0 : __index_of_v<_Tp, _Rest...> + 1> {}; + + // used for raw visitation + struct __variant_cookie {}; + // used for raw visitation with indices passed in + struct __variant_idx_cookie { using type = __variant_idx_cookie; }; + // Used to enable deduction (and same-type checking) for std::visit: + template struct __deduce_visit_result { }; + + // Visit variants that might be valueless. + template + constexpr void + __raw_visit(_Visitor&& __visitor, _Variants&&... __variants) + { + std::__do_visit<__variant_cookie>(std::forward<_Visitor>(__visitor), + std::forward<_Variants>(__variants)...); + } + + // Visit variants that might be valueless, passing indices to the visitor. + template + constexpr void + __raw_idx_visit(_Visitor&& __visitor, _Variants&&... __variants) + { + std::__do_visit<__variant_idx_cookie>(std::forward<_Visitor>(__visitor), + std::forward<_Variants>(__variants)...); + } + + // _Uninitialized is guaranteed to be a trivially destructible type, + // even if T is not. + template> + struct _Uninitialized; + + template + struct _Uninitialized<_Type, true> + { + template + constexpr + _Uninitialized(in_place_index_t<0>, _Args&&... __args) + : _M_storage(std::forward<_Args>(__args)...) + { } + + constexpr const _Type& _M_get() const & noexcept + { return _M_storage; } + + constexpr _Type& _M_get() & noexcept + { return _M_storage; } + + constexpr const _Type&& _M_get() const && noexcept + { return std::move(_M_storage); } + + constexpr _Type&& _M_get() && noexcept + { return std::move(_M_storage); } + + _Type _M_storage; + }; + + template + struct _Uninitialized<_Type, false> + { + template + constexpr + _Uninitialized(in_place_index_t<0>, _Args&&... __args) + { + ::new ((void*)std::addressof(_M_storage)) + _Type(std::forward<_Args>(__args)...); + } + + const _Type& _M_get() const & noexcept + { return *_M_storage._M_ptr(); } + + _Type& _M_get() & noexcept + { return *_M_storage._M_ptr(); } + + const _Type&& _M_get() const && noexcept + { return std::move(*_M_storage._M_ptr()); } + + _Type&& _M_get() && noexcept + { return std::move(*_M_storage._M_ptr()); } + + __gnu_cxx::__aligned_membuf<_Type> _M_storage; + }; + + template + constexpr decltype(auto) + __get(in_place_index_t<0>, _Union&& __u) noexcept + { return std::forward<_Union>(__u)._M_first._M_get(); } + + template + constexpr decltype(auto) + __get(in_place_index_t<_Np>, _Union&& __u) noexcept + { + return __variant::__get(in_place_index<_Np-1>, + std::forward<_Union>(__u)._M_rest); + } + + // Returns the typed storage for __v. + template + constexpr decltype(auto) + __get(_Variant&& __v) noexcept + { + return __variant::__get(std::in_place_index<_Np>, + std::forward<_Variant>(__v)._M_u); + } + + template + struct _Traits + { + static constexpr bool _S_default_ctor = + is_default_constructible_v::type>; + static constexpr bool _S_copy_ctor = + (is_copy_constructible_v<_Types> && ...); + static constexpr bool _S_move_ctor = + (is_move_constructible_v<_Types> && ...); + static constexpr bool _S_copy_assign = + _S_copy_ctor + && (is_copy_assignable_v<_Types> && ...); + static constexpr bool _S_move_assign = + _S_move_ctor + && (is_move_assignable_v<_Types> && ...); + + static constexpr bool _S_trivial_dtor = + (is_trivially_destructible_v<_Types> && ...); + static constexpr bool _S_trivial_copy_ctor = + (is_trivially_copy_constructible_v<_Types> && ...); + static constexpr bool _S_trivial_move_ctor = + (is_trivially_move_constructible_v<_Types> && ...); + static constexpr bool _S_trivial_copy_assign = + _S_trivial_dtor && _S_trivial_copy_ctor + && (is_trivially_copy_assignable_v<_Types> && ...); + static constexpr bool _S_trivial_move_assign = + _S_trivial_dtor && _S_trivial_move_ctor + && (is_trivially_move_assignable_v<_Types> && ...); + + // The following nothrow traits are for non-trivial SMFs. Trivial SMFs + // are always nothrow. + static constexpr bool _S_nothrow_default_ctor = + is_nothrow_default_constructible_v< + typename _Nth_type<0, _Types...>::type>; + static constexpr bool _S_nothrow_copy_ctor = false; + static constexpr bool _S_nothrow_move_ctor = + (is_nothrow_move_constructible_v<_Types> && ...); + static constexpr bool _S_nothrow_copy_assign = false; + static constexpr bool _S_nothrow_move_assign = + _S_nothrow_move_ctor + && (is_nothrow_move_assignable_v<_Types> && ...); + }; + + // Defines members and ctors. + template + union _Variadic_union { }; + + template + union _Variadic_union<_First, _Rest...> + { + constexpr _Variadic_union() : _M_rest() { } + + template + constexpr _Variadic_union(in_place_index_t<0>, _Args&&... __args) + : _M_first(in_place_index<0>, std::forward<_Args>(__args)...) + { } + + template + constexpr _Variadic_union(in_place_index_t<_Np>, _Args&&... __args) + : _M_rest(in_place_index<_Np-1>, std::forward<_Args>(__args)...) + { } + + _Uninitialized<_First> _M_first; + _Variadic_union<_Rest...> _M_rest; + }; + + // _Never_valueless_alt is true for variant alternatives that can + // always be placed in a variant without it becoming valueless. + + // For suitably-small, trivially copyable types we can create temporaries + // on the stack and then memcpy them into place. + template + struct _Never_valueless_alt + : __and_, is_trivially_copyable<_Tp>> + { }; + + // Specialize _Never_valueless_alt for other types which have a + // non-throwing and cheap move construction and move assignment operator, + // so that emplacing the type will provide the strong exception-safety + // guarantee, by creating and moving a temporary. + // Whether _Never_valueless_alt is true or not affects the ABI of a + // variant using that alternative, so we can't change the value later! + + // True if every alternative in _Types... can be emplaced in a variant + // without it becoming valueless. If this is true, variant<_Types...> + // can never be valueless, which enables some minor optimizations. + template + constexpr bool __never_valueless() + { + return _Traits<_Types...>::_S_move_assign + && (_Never_valueless_alt<_Types>::value && ...); + } + + // Defines index and the dtor, possibly trivial. + template + struct _Variant_storage; + + template + using __select_index = + typename __select_int::_Select_int_base::type::value_type; + + template + struct _Variant_storage + { + constexpr + _Variant_storage() + : _M_index(static_cast<__index_type>(variant_npos)) + { } + + template + constexpr + _Variant_storage(in_place_index_t<_Np>, _Args&&... __args) + : _M_u(in_place_index<_Np>, std::forward<_Args>(__args)...), + _M_index{_Np} + { } + + void _M_reset() + { + if (!_M_valid()) [[unlikely]] + return; + + std::__do_visit([](auto&& __this_mem) mutable + { + std::_Destroy(std::__addressof(__this_mem)); + }, __variant_cast<_Types...>(*this)); + + _M_index = static_cast<__index_type>(variant_npos); + } + + ~_Variant_storage() + { _M_reset(); } + + void* + _M_storage() const noexcept + { + return const_cast(static_cast( + std::addressof(_M_u))); + } + + constexpr bool + _M_valid() const noexcept + { + if constexpr (__variant::__never_valueless<_Types...>()) + return true; + return this->_M_index != __index_type(variant_npos); + } + + _Variadic_union<_Types...> _M_u; + using __index_type = __select_index<_Types...>; + __index_type _M_index; + }; + + template + struct _Variant_storage + { + constexpr + _Variant_storage() + : _M_index(static_cast<__index_type>(variant_npos)) + { } + + template + constexpr + _Variant_storage(in_place_index_t<_Np>, _Args&&... __args) + : _M_u(in_place_index<_Np>, std::forward<_Args>(__args)...), + _M_index{_Np} + { } + + void _M_reset() noexcept + { _M_index = static_cast<__index_type>(variant_npos); } + + void* + _M_storage() const noexcept + { + return const_cast(static_cast( + std::addressof(_M_u))); + } + + constexpr bool + _M_valid() const noexcept + { + if constexpr (__variant::__never_valueless<_Types...>()) + return true; + return this->_M_index != static_cast<__index_type>(variant_npos); + } + + _Variadic_union<_Types...> _M_u; + using __index_type = __select_index<_Types...>; + __index_type _M_index; + }; + + template + using _Variant_storage_alias = + _Variant_storage<_Traits<_Types...>::_S_trivial_dtor, _Types...>; + + template + void __variant_construct_single(_Tp&& __lhs, _Up&& __rhs_mem) + { + void* __storage = std::addressof(__lhs._M_u); + using _Type = remove_reference_t; + if constexpr (!is_same_v<_Type, __variant_cookie>) + ::new (__storage) + _Type(std::forward(__rhs_mem)); + } + + template + void __variant_construct(_Tp&& __lhs, _Up&& __rhs) + { + __lhs._M_index = __rhs._M_index; + __variant::__raw_visit([&__lhs](auto&& __rhs_mem) mutable + { + __variant_construct_single(std::forward<_Tp>(__lhs), + std::forward(__rhs_mem)); + }, __variant_cast<_Types...>(std::forward<_Up>(__rhs))); + } + + // The following are (Copy|Move) (ctor|assign) layers for forwarding + // triviality and handling non-trivial SMF behaviors. + + template + struct _Copy_ctor_base : _Variant_storage_alias<_Types...> + { + using _Base = _Variant_storage_alias<_Types...>; + using _Base::_Base; + + _Copy_ctor_base(const _Copy_ctor_base& __rhs) + noexcept(_Traits<_Types...>::_S_nothrow_copy_ctor) + { + __variant_construct<_Types...>(*this, __rhs); + } + + _Copy_ctor_base(_Copy_ctor_base&&) = default; + _Copy_ctor_base& operator=(const _Copy_ctor_base&) = default; + _Copy_ctor_base& operator=(_Copy_ctor_base&&) = default; + }; + + template + struct _Copy_ctor_base : _Variant_storage_alias<_Types...> + { + using _Base = _Variant_storage_alias<_Types...>; + using _Base::_Base; + }; + + template + using _Copy_ctor_alias = + _Copy_ctor_base<_Traits<_Types...>::_S_trivial_copy_ctor, _Types...>; + + template + struct _Move_ctor_base : _Copy_ctor_alias<_Types...> + { + using _Base = _Copy_ctor_alias<_Types...>; + using _Base::_Base; + + _Move_ctor_base(_Move_ctor_base&& __rhs) + noexcept(_Traits<_Types...>::_S_nothrow_move_ctor) + { + __variant_construct<_Types...>(*this, std::move(__rhs)); + } + + template + void _M_destructive_move(unsigned short __rhs_index, _Up&& __rhs) + { + this->_M_reset(); + __variant_construct_single(*this, std::forward<_Up>(__rhs)); + this->_M_index = __rhs_index; + } + + template + void _M_destructive_copy(unsigned short __rhs_index, const _Up& __rhs) + { + this->_M_reset(); + __variant_construct_single(*this, __rhs); + this->_M_index = __rhs_index; + } + + _Move_ctor_base(const _Move_ctor_base&) = default; + _Move_ctor_base& operator=(const _Move_ctor_base&) = default; + _Move_ctor_base& operator=(_Move_ctor_base&&) = default; + }; + + template + struct _Move_ctor_base : _Copy_ctor_alias<_Types...> + { + using _Base = _Copy_ctor_alias<_Types...>; + using _Base::_Base; + + template + void _M_destructive_move(unsigned short __rhs_index, _Up&& __rhs) + { + this->_M_reset(); + __variant_construct_single(*this, std::forward<_Up>(__rhs)); + this->_M_index = __rhs_index; + } + + template + void _M_destructive_copy(unsigned short __rhs_index, const _Up& __rhs) + { + this->_M_reset(); + __variant_construct_single(*this, __rhs); + this->_M_index = __rhs_index; + } + }; + + template + using _Move_ctor_alias = + _Move_ctor_base<_Traits<_Types...>::_S_trivial_move_ctor, _Types...>; + + template + struct _Copy_assign_base : _Move_ctor_alias<_Types...> + { + using _Base = _Move_ctor_alias<_Types...>; + using _Base::_Base; + + _Copy_assign_base& + operator=(const _Copy_assign_base& __rhs) + noexcept(_Traits<_Types...>::_S_nothrow_copy_assign) + { + __variant::__raw_idx_visit( + [this](auto&& __rhs_mem, auto __rhs_index) mutable + { + if constexpr (__rhs_index != variant_npos) + { + if (this->_M_index == __rhs_index) + __variant::__get<__rhs_index>(*this) = __rhs_mem; + else + { + using __rhs_type = __remove_cvref_t; + if constexpr (is_nothrow_copy_constructible_v<__rhs_type> + || !is_nothrow_move_constructible_v<__rhs_type>) + // The standard says this->emplace<__rhs_type>(__rhs_mem) + // should be used here, but _M_destructive_copy is + // equivalent in this case. Either copy construction + // doesn't throw, so _M_destructive_copy gives strong + // exception safety guarantee, or both copy construction + // and move construction can throw, so emplace only gives + // basic exception safety anyway. + this->_M_destructive_copy(__rhs_index, __rhs_mem); + else + __variant_cast<_Types...>(*this) + = variant<_Types...>(std::in_place_index<__rhs_index>, + __rhs_mem); + } + } + else + this->_M_reset(); + }, __variant_cast<_Types...>(__rhs)); + return *this; + } + + _Copy_assign_base(const _Copy_assign_base&) = default; + _Copy_assign_base(_Copy_assign_base&&) = default; + _Copy_assign_base& operator=(_Copy_assign_base&&) = default; + }; + + template + struct _Copy_assign_base : _Move_ctor_alias<_Types...> + { + using _Base = _Move_ctor_alias<_Types...>; + using _Base::_Base; + }; + + template + using _Copy_assign_alias = + _Copy_assign_base<_Traits<_Types...>::_S_trivial_copy_assign, _Types...>; + + template + struct _Move_assign_base : _Copy_assign_alias<_Types...> + { + using _Base = _Copy_assign_alias<_Types...>; + using _Base::_Base; + + _Move_assign_base& + operator=(_Move_assign_base&& __rhs) + noexcept(_Traits<_Types...>::_S_nothrow_move_assign) + { + __variant::__raw_idx_visit( + [this](auto&& __rhs_mem, auto __rhs_index) mutable + { + if constexpr (__rhs_index != variant_npos) + { + if (this->_M_index == __rhs_index) + __variant::__get<__rhs_index>(*this) = std::move(__rhs_mem); + else + __variant_cast<_Types...>(*this) + .template emplace<__rhs_index>(std::move(__rhs_mem)); + } + else + this->_M_reset(); + }, __variant_cast<_Types...>(__rhs)); + return *this; + } + + _Move_assign_base(const _Move_assign_base&) = default; + _Move_assign_base(_Move_assign_base&&) = default; + _Move_assign_base& operator=(const _Move_assign_base&) = default; + }; + + template + struct _Move_assign_base : _Copy_assign_alias<_Types...> + { + using _Base = _Copy_assign_alias<_Types...>; + using _Base::_Base; + }; + + template + using _Move_assign_alias = + _Move_assign_base<_Traits<_Types...>::_S_trivial_move_assign, _Types...>; + + template + struct _Variant_base : _Move_assign_alias<_Types...> + { + using _Base = _Move_assign_alias<_Types...>; + + constexpr + _Variant_base() + noexcept(_Traits<_Types...>::_S_nothrow_default_ctor) + : _Variant_base(in_place_index<0>) { } + + template + constexpr explicit + _Variant_base(in_place_index_t<_Np> __i, _Args&&... __args) + : _Base(__i, std::forward<_Args>(__args)...) + { } + + _Variant_base(const _Variant_base&) = default; + _Variant_base(_Variant_base&&) = default; + _Variant_base& operator=(const _Variant_base&) = default; + _Variant_base& operator=(_Variant_base&&) = default; + }; + + // For how many times does _Tp appear in _Tuple? + template + struct __tuple_count; + + template + inline constexpr size_t __tuple_count_v = + __tuple_count<_Tp, _Tuple>::value; + + template + struct __tuple_count<_Tp, tuple<_Types...>> + : integral_constant { }; + + template + struct __tuple_count<_Tp, tuple<_First, _Rest...>> + : integral_constant< + size_t, + __tuple_count_v<_Tp, tuple<_Rest...>> + is_same_v<_Tp, _First>> { }; + + // TODO: Reuse this in ? + template + inline constexpr bool __exactly_once = + __tuple_count_v<_Tp, tuple<_Types...>> == 1; + + // Helper used to check for valid conversions that don't involve narrowing. + template struct _Arr { _Ti _M_x[1]; }; + + // Build an imaginary function FUN(Ti) for each alternative type Ti + template, bool>, + typename = void> + struct _Build_FUN + { + // This function means 'using _Build_FUN::_S_fun;' is valid, + // but only static functions will be considered in the call below. + void _S_fun(); + }; + + // ... for which Ti x[] = {std::forward(t)}; is well-formed, + template + struct _Build_FUN<_Ind, _Tp, _Ti, false, + void_t{{std::declval<_Tp>()}})>> + { + // This is the FUN function for type _Ti, with index _Ind + static integral_constant _S_fun(_Ti); + }; + + // ... and if Ti is cv bool, remove_cvref_t is bool. + template + struct _Build_FUN<_Ind, _Tp, _Ti, true, + enable_if_t, bool>>> + { + // This is the FUN function for when _Ti is cv bool, with index _Ind + static integral_constant _S_fun(_Ti); + }; + + template>> + struct _Build_FUNs; + + template + struct _Build_FUNs<_Tp, variant<_Ti...>, index_sequence<_Ind...>> + : _Build_FUN<_Ind, _Tp, _Ti>... + { + using _Build_FUN<_Ind, _Tp, _Ti>::_S_fun...; + }; + + // The index j of the overload FUN(Tj) selected by overload resolution + // for FUN(std::forward<_Tp>(t)) + template + using _FUN_type + = decltype(_Build_FUNs<_Tp, _Variant>::_S_fun(std::declval<_Tp>())); + + // The index selected for FUN(std::forward(t)), or variant_npos if none. + template + struct __accepted_index + : integral_constant + { }; + + template + struct __accepted_index<_Tp, _Variant, void_t<_FUN_type<_Tp, _Variant>>> + : _FUN_type<_Tp, _Variant> + { }; + + // Returns the raw storage for __v. + template + void* __get_storage(_Variant&& __v) noexcept + { return __v._M_storage(); } + + template + struct _Extra_visit_slot_needed + { + template struct _Variant_never_valueless; + + template + struct _Variant_never_valueless> + : bool_constant<__variant::__never_valueless<_Types...>()> {}; + + static constexpr bool value = + (is_same_v<_Maybe_variant_cookie, __variant_cookie> + || is_same_v<_Maybe_variant_cookie, __variant_idx_cookie>) + && !_Variant_never_valueless<__remove_cvref_t<_Variant>>::value; + }; + + // Used for storing a multi-dimensional vtable. + template + struct _Multi_array; + + // Partial specialization with rank zero, stores a single _Tp element. + template + struct _Multi_array<_Tp> + { + template + struct __untag_result + : false_type + { using element_type = _Tp; }; + + template + struct __untag_result + : false_type + { using element_type = void(*)(_Args...); }; + + template + struct __untag_result<__variant_cookie(*)(_Args...)> + : false_type + { using element_type = void(*)(_Args...); }; + + template + struct __untag_result<__variant_idx_cookie(*)(_Args...)> + : false_type + { using element_type = void(*)(_Args...); }; + + template + struct __untag_result<__deduce_visit_result<_Res>(*)(_Args...)> + : true_type + { using element_type = _Res(*)(_Args...); }; + + using __result_is_deduced = __untag_result<_Tp>; + + constexpr const typename __untag_result<_Tp>::element_type& + _M_access() const + { return _M_data; } + + typename __untag_result<_Tp>::element_type _M_data; + }; + + // Partial specialization with rank >= 1. + template + struct _Multi_array<_Ret(*)(_Visitor, _Variants...), __first, __rest...> + { + static constexpr size_t __index = + sizeof...(_Variants) - sizeof...(__rest) - 1; + + using _Variant = typename _Nth_type<__index, _Variants...>::type; + + static constexpr int __do_cookie = + _Extra_visit_slot_needed<_Ret, _Variant>::value ? 1 : 0; + + using _Tp = _Ret(*)(_Visitor, _Variants...); + + template + constexpr decltype(auto) + _M_access(size_t __first_index, _Args... __rest_indices) const + { + return _M_arr[__first_index + __do_cookie] + ._M_access(__rest_indices...); + } + + _Multi_array<_Tp, __rest...> _M_arr[__first + __do_cookie]; + }; + + // Creates a multi-dimensional vtable recursively. + // + // For example, + // visit([](auto, auto){}, + // variant(), // typedef'ed as V1 + // variant()) // typedef'ed as V2 + // will trigger instantiations of: + // __gen_vtable_impl<_Multi_array, + // tuple, std::index_sequence<>> + // __gen_vtable_impl<_Multi_array, + // tuple, std::index_sequence<0>> + // __gen_vtable_impl<_Multi_array, + // tuple, std::index_sequence<0, 0>> + // __gen_vtable_impl<_Multi_array, + // tuple, std::index_sequence<0, 1>> + // __gen_vtable_impl<_Multi_array, + // tuple, std::index_sequence<0, 2>> + // __gen_vtable_impl<_Multi_array, + // tuple, std::index_sequence<1>> + // __gen_vtable_impl<_Multi_array, + // tuple, std::index_sequence<1, 0>> + // __gen_vtable_impl<_Multi_array, + // tuple, std::index_sequence<1, 1>> + // __gen_vtable_impl<_Multi_array, + // tuple, std::index_sequence<1, 2>> + // The returned multi-dimensional vtable can be fast accessed by the visitor + // using index calculation. + template + struct __gen_vtable_impl; + + // Defines the _S_apply() member that returns a _Multi_array populated + // with function pointers that perform the visitation expressions e(m) + // for each valid pack of indexes into the variant types _Variants. + // + // This partial specialization builds up the index sequences by recursively + // calling _S_apply() on the next specialization of __gen_vtable_impl. + // The base case of the recursion defines the actual function pointers. + template + struct __gen_vtable_impl< + _Multi_array<_Result_type (*)(_Visitor, _Variants...), __dimensions...>, + std::index_sequence<__indices...>> + { + using _Next = + remove_reference_t::type>; + using _Array_type = + _Multi_array<_Result_type (*)(_Visitor, _Variants...), + __dimensions...>; + + static constexpr _Array_type + _S_apply() + { + _Array_type __vtable{}; + _S_apply_all_alts( + __vtable, make_index_sequence>()); + return __vtable; + } + + template + static constexpr void + _S_apply_all_alts(_Array_type& __vtable, + std::index_sequence<__var_indices...>) + { + if constexpr (_Extra_visit_slot_needed<_Result_type, _Next>::value) + (_S_apply_single_alt( + __vtable._M_arr[__var_indices + 1], + &(__vtable._M_arr[0])), ...); + else + (_S_apply_single_alt( + __vtable._M_arr[__var_indices]), ...); + } + + template + static constexpr void + _S_apply_single_alt(_Tp& __element, _Tp* __cookie_element = nullptr) + { + if constexpr (__do_cookie) + { + __element = __gen_vtable_impl< + _Tp, + std::index_sequence<__indices..., __index>>::_S_apply(); + *__cookie_element = __gen_vtable_impl< + _Tp, + std::index_sequence<__indices..., variant_npos>>::_S_apply(); + } + else + { + __element = __gen_vtable_impl< + remove_reference_t, + std::index_sequence<__indices..., __index>>::_S_apply(); + } + } + }; + + // This partial specialization is the base case for the recursion. + // It populates a _Multi_array element with the address of a function + // that invokes the visitor with the alternatives specified by __indices. + template + struct __gen_vtable_impl< + _Multi_array<_Result_type (*)(_Visitor, _Variants...)>, + std::index_sequence<__indices...>> + { + using _Array_type = + _Multi_array<_Result_type (*)(_Visitor, _Variants...)>; + + template + static constexpr decltype(auto) + __element_by_index_or_cookie(_Variant&& __var) noexcept + { + if constexpr (__index != variant_npos) + return __variant::__get<__index>(std::forward<_Variant>(__var)); + else + return __variant_cookie{}; + } + + static constexpr decltype(auto) + __visit_invoke(_Visitor&& __visitor, _Variants... __vars) + { + if constexpr (is_same_v<_Result_type, __variant_idx_cookie>) + // For raw visitation using indices, pass the indices to the visitor + // and discard the return value: + std::__invoke(std::forward<_Visitor>(__visitor), + __element_by_index_or_cookie<__indices>( + std::forward<_Variants>(__vars))..., + integral_constant()...); + else if constexpr (is_same_v<_Result_type, __variant_cookie>) + // For raw visitation without indices, and discard the return value: + std::__invoke(std::forward<_Visitor>(__visitor), + __element_by_index_or_cookie<__indices>( + std::forward<_Variants>(__vars))...); + else if constexpr (_Array_type::__result_is_deduced::value) + // For the usual std::visit case deduce the return value: + return std::__invoke(std::forward<_Visitor>(__visitor), + __element_by_index_or_cookie<__indices>( + std::forward<_Variants>(__vars))...); + else // for std::visit use INVOKE + return std::__invoke_r<_Result_type>( + std::forward<_Visitor>(__visitor), + __variant::__get<__indices>(std::forward<_Variants>(__vars))...); + } + + static constexpr auto + _S_apply() + { return _Array_type{&__visit_invoke}; } + }; + + template + struct __gen_vtable + { + using _Array_type = + _Multi_array<_Result_type (*)(_Visitor, _Variants...), + variant_size_v>...>; + + static constexpr _Array_type _S_vtable + = __gen_vtable_impl<_Array_type, std::index_sequence<>>::_S_apply(); + }; + + template + struct _Base_dedup : public _Tp { }; + + template + struct _Variant_hash_base; + + template + struct _Variant_hash_base, + std::index_sequence<__indices...>> + : _Base_dedup<__indices, __poison_hash>>... { }; + +} // namespace __variant +} // namespace __detail + + template + void __variant_construct_by_index(_Variant& __v, _Args&&... __args) + { + __v._M_index = _Np; + auto&& __storage = __detail::__variant::__get<_Np>(__v); + ::new ((void*)std::addressof(__storage)) + remove_reference_t + (std::forward<_Args>(__args)...); + } + + template + constexpr bool + holds_alternative(const variant<_Types...>& __v) noexcept + { + static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, + "T must occur exactly once in alternatives"); + return __v.index() == __detail::__variant::__index_of_v<_Tp, _Types...>; + } + + template + constexpr _Tp& get(variant<_Types...>& __v) + { + static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, + "T must occur exactly once in alternatives"); + static_assert(!is_void_v<_Tp>, "_Tp must not be void"); + return std::get<__detail::__variant::__index_of_v<_Tp, _Types...>>(__v); + } + + template + constexpr _Tp&& get(variant<_Types...>&& __v) + { + static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, + "T must occur exactly once in alternatives"); + static_assert(!is_void_v<_Tp>, "_Tp must not be void"); + return std::get<__detail::__variant::__index_of_v<_Tp, _Types...>>( + std::move(__v)); + } + + template + constexpr const _Tp& get(const variant<_Types...>& __v) + { + static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, + "T must occur exactly once in alternatives"); + static_assert(!is_void_v<_Tp>, "_Tp must not be void"); + return std::get<__detail::__variant::__index_of_v<_Tp, _Types...>>(__v); + } + + template + constexpr const _Tp&& get(const variant<_Types...>&& __v) + { + static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, + "T must occur exactly once in alternatives"); + static_assert(!is_void_v<_Tp>, "_Tp must not be void"); + return std::get<__detail::__variant::__index_of_v<_Tp, _Types...>>( + std::move(__v)); + } + + template + constexpr add_pointer_t>> + get_if(variant<_Types...>* __ptr) noexcept + { + using _Alternative_type = variant_alternative_t<_Np, variant<_Types...>>; + static_assert(_Np < sizeof...(_Types), + "The index must be in [0, number of alternatives)"); + static_assert(!is_void_v<_Alternative_type>, "_Tp must not be void"); + if (__ptr && __ptr->index() == _Np) + return std::addressof(__detail::__variant::__get<_Np>(*__ptr)); + return nullptr; + } + + template + constexpr + add_pointer_t>> + get_if(const variant<_Types...>* __ptr) noexcept + { + using _Alternative_type = variant_alternative_t<_Np, variant<_Types...>>; + static_assert(_Np < sizeof...(_Types), + "The index must be in [0, number of alternatives)"); + static_assert(!is_void_v<_Alternative_type>, "_Tp must not be void"); + if (__ptr && __ptr->index() == _Np) + return std::addressof(__detail::__variant::__get<_Np>(*__ptr)); + return nullptr; + } + + template + constexpr add_pointer_t<_Tp> + get_if(variant<_Types...>* __ptr) noexcept + { + static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, + "T must occur exactly once in alternatives"); + static_assert(!is_void_v<_Tp>, "_Tp must not be void"); + return std::get_if<__detail::__variant::__index_of_v<_Tp, _Types...>>( + __ptr); + } + + template + constexpr add_pointer_t + get_if(const variant<_Types...>* __ptr) noexcept + { + static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, + "T must occur exactly once in alternatives"); + static_assert(!is_void_v<_Tp>, "_Tp must not be void"); + return std::get_if<__detail::__variant::__index_of_v<_Tp, _Types...>>( + __ptr); + } + + struct monostate { }; + +#define _VARIANT_RELATION_FUNCTION_TEMPLATE(__OP, __NAME) \ + template \ + constexpr bool operator __OP(const variant<_Types...>& __lhs, \ + const variant<_Types...>& __rhs) \ + { \ + bool __ret = true; \ + __detail::__variant::__raw_idx_visit( \ + [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable \ + { \ + if constexpr (__rhs_index != variant_npos) \ + { \ + if (__lhs.index() == __rhs_index) \ + { \ + auto& __this_mem = std::get<__rhs_index>(__lhs); \ + __ret = __this_mem __OP __rhs_mem; \ + } \ + else \ + __ret = (__lhs.index() + 1) __OP (__rhs_index + 1); \ + } \ + else \ + __ret = (__lhs.index() + 1) __OP (__rhs_index + 1); \ + }, __rhs); \ + return __ret; \ + } + + _VARIANT_RELATION_FUNCTION_TEMPLATE(<, less) + _VARIANT_RELATION_FUNCTION_TEMPLATE(<=, less_equal) + _VARIANT_RELATION_FUNCTION_TEMPLATE(==, equal) + _VARIANT_RELATION_FUNCTION_TEMPLATE(!=, not_equal) + _VARIANT_RELATION_FUNCTION_TEMPLATE(>=, greater_equal) + _VARIANT_RELATION_FUNCTION_TEMPLATE(>, greater) + +#undef _VARIANT_RELATION_FUNCTION_TEMPLATE + + constexpr bool operator==(monostate, monostate) noexcept { return true; } + +#ifdef __cpp_lib_three_way_comparison + template + requires (three_way_comparable<_Types> && ...) + constexpr + common_comparison_category_t...> + operator<=>(const variant<_Types...>& __v, const variant<_Types...>& __w) + { + common_comparison_category_t...> __ret + = strong_ordering::equal; + + __detail::__variant::__raw_idx_visit( + [&__ret, &__v] (auto&& __w_mem, auto __w_index) mutable + { + if constexpr (__w_index != variant_npos) + { + if (__v.index() == __w_index) + { + auto& __this_mem = std::get<__w_index>(__v); + __ret = __this_mem <=> __w_mem; + return; + } + } + __ret = (__v.index() + 1) <=> (__w_index + 1); + }, __w); + return __ret; + } + + constexpr strong_ordering + operator<=>(monostate, monostate) noexcept { return strong_ordering::equal; } +#else + constexpr bool operator!=(monostate, monostate) noexcept { return false; } + constexpr bool operator<(monostate, monostate) noexcept { return false; } + constexpr bool operator>(monostate, monostate) noexcept { return false; } + constexpr bool operator<=(monostate, monostate) noexcept { return true; } + constexpr bool operator>=(monostate, monostate) noexcept { return true; } +#endif + + template + constexpr decltype(auto) visit(_Visitor&&, _Variants&&...); + + template + inline enable_if_t<(is_move_constructible_v<_Types> && ...) + && (is_swappable_v<_Types> && ...)> + swap(variant<_Types...>& __lhs, variant<_Types...>& __rhs) + noexcept(noexcept(__lhs.swap(__rhs))) + { __lhs.swap(__rhs); } + + template + enable_if_t && ...) + && (is_swappable_v<_Types> && ...))> + swap(variant<_Types...>&, variant<_Types...>&) = delete; + + class bad_variant_access : public exception + { + public: + bad_variant_access() noexcept { } + + const char* what() const noexcept override + { return _M_reason; } + + private: + bad_variant_access(const char* __reason) noexcept : _M_reason(__reason) { } + + // Must point to a string with static storage duration: + const char* _M_reason = "bad variant access"; + + friend void __throw_bad_variant_access(const char* __what); + }; + + // Must only be called with a string literal + inline void + __throw_bad_variant_access(const char* __what) + { _GLIBCXX_THROW_OR_ABORT(bad_variant_access(__what)); } + + inline void + __throw_bad_variant_access(bool __valueless) + { + if (__valueless) [[__unlikely__]] + __throw_bad_variant_access("std::get: variant is valueless"); + else + __throw_bad_variant_access("std::get: wrong index for variant"); + } + + template + class variant + : private __detail::__variant::_Variant_base<_Types...>, + private _Enable_default_constructor< + __detail::__variant::_Traits<_Types...>::_S_default_ctor, + variant<_Types...>>, + private _Enable_copy_move< + __detail::__variant::_Traits<_Types...>::_S_copy_ctor, + __detail::__variant::_Traits<_Types...>::_S_copy_assign, + __detail::__variant::_Traits<_Types...>::_S_move_ctor, + __detail::__variant::_Traits<_Types...>::_S_move_assign, + variant<_Types...>> + { + private: + template + friend decltype(auto) __variant_cast(_Tp&&); + template + friend void __variant_construct_by_index(_Variant& __v, + _Args&&... __args); + + static_assert(sizeof...(_Types) > 0, + "variant must have at least one alternative"); + static_assert(!(std::is_reference_v<_Types> || ...), + "variant must have no reference alternative"); + static_assert(!(std::is_void_v<_Types> || ...), + "variant must have no void alternative"); + + using _Base = __detail::__variant::_Variant_base<_Types...>; + using _Default_ctor_enabler = + _Enable_default_constructor< + __detail::__variant::_Traits<_Types...>::_S_default_ctor, + variant<_Types...>>; + + template + static constexpr bool __not_self + = !is_same_v<__remove_cvref_t<_Tp>, variant>; + + template + static constexpr bool + __exactly_once = __detail::__variant::__exactly_once<_Tp, _Types...>; + + template + static constexpr size_t __accepted_index + = __detail::__variant::__accepted_index<_Tp, variant>::value; + + template> + using __to_type = variant_alternative_t<_Np, variant>; + + template>> + using __accepted_type = __to_type<__accepted_index<_Tp>>; + + template + static constexpr size_t __index_of = + __detail::__variant::__index_of_v<_Tp, _Types...>; + + using _Traits = __detail::__variant::_Traits<_Types...>; + + template + struct __is_in_place_tag : false_type { }; + template + struct __is_in_place_tag> : true_type { }; + template + struct __is_in_place_tag> : true_type { }; + + template + static constexpr bool __not_in_place_tag + = !__is_in_place_tag<__remove_cvref_t<_Tp>>::value; + + public: + variant() = default; + variant(const variant& __rhs) = default; + variant(variant&&) = default; + variant& operator=(const variant&) = default; + variant& operator=(variant&&) = default; + ~variant() = default; + + template, + typename = enable_if_t<__not_in_place_tag<_Tp>>, + typename _Tj = __accepted_type<_Tp&&>, + typename = enable_if_t<__exactly_once<_Tj> + && is_constructible_v<_Tj, _Tp>>> + constexpr + variant(_Tp&& __t) + noexcept(is_nothrow_constructible_v<_Tj, _Tp>) + : variant(in_place_index<__accepted_index<_Tp>>, + std::forward<_Tp>(__t)) + { } + + template + && is_constructible_v<_Tp, _Args...>>> + constexpr explicit + variant(in_place_type_t<_Tp>, _Args&&... __args) + : variant(in_place_index<__index_of<_Tp>>, + std::forward<_Args>(__args)...) + { } + + template + && is_constructible_v<_Tp, + initializer_list<_Up>&, _Args...>>> + constexpr explicit + variant(in_place_type_t<_Tp>, initializer_list<_Up> __il, + _Args&&... __args) + : variant(in_place_index<__index_of<_Tp>>, __il, + std::forward<_Args>(__args)...) + { } + + template, + typename = enable_if_t>> + constexpr explicit + variant(in_place_index_t<_Np>, _Args&&... __args) + : _Base(in_place_index<_Np>, std::forward<_Args>(__args)...), + _Default_ctor_enabler(_Enable_default_constructor_tag{}) + { } + + template, + typename = enable_if_t&, + _Args...>>> + constexpr explicit + variant(in_place_index_t<_Np>, initializer_list<_Up> __il, + _Args&&... __args) + : _Base(in_place_index<_Np>, __il, std::forward<_Args>(__args)...), + _Default_ctor_enabler(_Enable_default_constructor_tag{}) + { } + + template + enable_if_t<__exactly_once<__accepted_type<_Tp&&>> + && is_constructible_v<__accepted_type<_Tp&&>, _Tp> + && is_assignable_v<__accepted_type<_Tp&&>&, _Tp>, + variant&> + operator=(_Tp&& __rhs) + noexcept(is_nothrow_assignable_v<__accepted_type<_Tp&&>&, _Tp> + && is_nothrow_constructible_v<__accepted_type<_Tp&&>, _Tp>) + { + constexpr auto __index = __accepted_index<_Tp>; + if (index() == __index) + std::get<__index>(*this) = std::forward<_Tp>(__rhs); + else + { + using _Tj = __accepted_type<_Tp&&>; + if constexpr (is_nothrow_constructible_v<_Tj, _Tp> + || !is_nothrow_move_constructible_v<_Tj>) + this->emplace<__index>(std::forward<_Tp>(__rhs)); + else + operator=(variant(std::forward<_Tp>(__rhs))); + } + return *this; + } + + template + enable_if_t && __exactly_once<_Tp>, + _Tp&> + emplace(_Args&&... __args) + { + constexpr size_t __index = __index_of<_Tp>; + return this->emplace<__index>(std::forward<_Args>(__args)...); + } + + template + enable_if_t&, _Args...> + && __exactly_once<_Tp>, + _Tp&> + emplace(initializer_list<_Up> __il, _Args&&... __args) + { + constexpr size_t __index = __index_of<_Tp>; + return this->emplace<__index>(__il, std::forward<_Args>(__args)...); + } + + template + enable_if_t, + _Args...>, + variant_alternative_t<_Np, variant>&> + emplace(_Args&&... __args) + { + static_assert(_Np < sizeof...(_Types), + "The index must be in [0, number of alternatives)"); + using type = variant_alternative_t<_Np, variant>; + // Provide the strong exception-safety guarantee when possible, + // to avoid becoming valueless. + if constexpr (is_nothrow_constructible_v) + { + this->_M_reset(); + __variant_construct_by_index<_Np>(*this, + std::forward<_Args>(__args)...); + } + else if constexpr (is_scalar_v) + { + // This might invoke a potentially-throwing conversion operator: + const type __tmp(std::forward<_Args>(__args)...); + // But these steps won't throw: + this->_M_reset(); + __variant_construct_by_index<_Np>(*this, __tmp); + } + else if constexpr (__detail::__variant::_Never_valueless_alt() + && _Traits::_S_move_assign) + { + // This construction might throw: + variant __tmp(in_place_index<_Np>, + std::forward<_Args>(__args)...); + // But _Never_valueless_alt means this won't: + *this = std::move(__tmp); + } + else + { + // This case only provides the basic exception-safety guarantee, + // i.e. the variant can become valueless. + this->_M_reset(); + __try + { + __variant_construct_by_index<_Np>(*this, + std::forward<_Args>(__args)...); + } + __catch (...) + { + this->_M_index = variant_npos; + __throw_exception_again; + } + } + return std::get<_Np>(*this); + } + + template + enable_if_t, + initializer_list<_Up>&, _Args...>, + variant_alternative_t<_Np, variant>&> + emplace(initializer_list<_Up> __il, _Args&&... __args) + { + static_assert(_Np < sizeof...(_Types), + "The index must be in [0, number of alternatives)"); + using type = variant_alternative_t<_Np, variant>; + // Provide the strong exception-safety guarantee when possible, + // to avoid becoming valueless. + if constexpr (is_nothrow_constructible_v&, + _Args...>) + { + this->_M_reset(); + __variant_construct_by_index<_Np>(*this, __il, + std::forward<_Args>(__args)...); + } + else if constexpr (__detail::__variant::_Never_valueless_alt() + && _Traits::_S_move_assign) + { + // This construction might throw: + variant __tmp(in_place_index<_Np>, __il, + std::forward<_Args>(__args)...); + // But _Never_valueless_alt means this won't: + *this = std::move(__tmp); + } + else + { + // This case only provides the basic exception-safety guarantee, + // i.e. the variant can become valueless. + this->_M_reset(); + __try + { + __variant_construct_by_index<_Np>(*this, __il, + std::forward<_Args>(__args)...); + } + __catch (...) + { + this->_M_index = variant_npos; + __throw_exception_again; + } + } + return std::get<_Np>(*this); + } + + constexpr bool valueless_by_exception() const noexcept + { return !this->_M_valid(); } + + constexpr size_t index() const noexcept + { + using __index_type = typename _Base::__index_type; + if constexpr (__detail::__variant::__never_valueless<_Types...>()) + return this->_M_index; + else if constexpr (sizeof...(_Types) <= __index_type(-1) / 2) + return make_signed_t<__index_type>(this->_M_index); + else + return size_t(__index_type(this->_M_index + 1)) - 1; + } + + void + swap(variant& __rhs) + noexcept((__is_nothrow_swappable<_Types>::value && ...) + && is_nothrow_move_constructible_v) + { + __detail::__variant::__raw_idx_visit( + [this, &__rhs](auto&& __rhs_mem, auto __rhs_index) mutable + { + if constexpr (__rhs_index != variant_npos) + { + if (this->index() == __rhs_index) + { + auto& __this_mem = + std::get<__rhs_index>(*this); + using std::swap; + swap(__this_mem, __rhs_mem); + } + else + { + if (!this->valueless_by_exception()) [[__likely__]] + { + auto __tmp(std::move(__rhs_mem)); + __rhs = std::move(*this); + this->_M_destructive_move(__rhs_index, + std::move(__tmp)); + } + else + { + this->_M_destructive_move(__rhs_index, + std::move(__rhs_mem)); + __rhs._M_reset(); + } + } + } + else + { + if (!this->valueless_by_exception()) [[__likely__]] + { + __rhs = std::move(*this); + this->_M_reset(); + } + } + }, __rhs); + } + + private: + +#if defined(__clang__) && __clang_major__ <= 7 + public: + using _Base::_M_u; // See https://bugs.llvm.org/show_bug.cgi?id=31852 + private: +#endif + + template + friend constexpr decltype(auto) + __detail::__variant::__get(_Vp&& __v) noexcept; + + template + friend void* + __detail::__variant::__get_storage(_Vp&& __v) noexcept; + +#define _VARIANT_RELATION_FUNCTION_TEMPLATE(__OP) \ + template \ + friend constexpr bool \ + operator __OP(const variant<_Tp...>& __lhs, \ + const variant<_Tp...>& __rhs); + + _VARIANT_RELATION_FUNCTION_TEMPLATE(<) + _VARIANT_RELATION_FUNCTION_TEMPLATE(<=) + _VARIANT_RELATION_FUNCTION_TEMPLATE(==) + _VARIANT_RELATION_FUNCTION_TEMPLATE(!=) + _VARIANT_RELATION_FUNCTION_TEMPLATE(>=) + _VARIANT_RELATION_FUNCTION_TEMPLATE(>) + +#undef _VARIANT_RELATION_FUNCTION_TEMPLATE + }; + + template + constexpr variant_alternative_t<_Np, variant<_Types...>>& + get(variant<_Types...>& __v) + { + static_assert(_Np < sizeof...(_Types), + "The index must be in [0, number of alternatives)"); + if (__v.index() != _Np) + __throw_bad_variant_access(__v.valueless_by_exception()); + return __detail::__variant::__get<_Np>(__v); + } + + template + constexpr variant_alternative_t<_Np, variant<_Types...>>&& + get(variant<_Types...>&& __v) + { + static_assert(_Np < sizeof...(_Types), + "The index must be in [0, number of alternatives)"); + if (__v.index() != _Np) + __throw_bad_variant_access(__v.valueless_by_exception()); + return __detail::__variant::__get<_Np>(std::move(__v)); + } + + template + constexpr const variant_alternative_t<_Np, variant<_Types...>>& + get(const variant<_Types...>& __v) + { + static_assert(_Np < sizeof...(_Types), + "The index must be in [0, number of alternatives)"); + if (__v.index() != _Np) + __throw_bad_variant_access(__v.valueless_by_exception()); + return __detail::__variant::__get<_Np>(__v); + } + + template + constexpr const variant_alternative_t<_Np, variant<_Types...>>&& + get(const variant<_Types...>&& __v) + { + static_assert(_Np < sizeof...(_Types), + "The index must be in [0, number of alternatives)"); + if (__v.index() != _Np) + __throw_bad_variant_access(__v.valueless_by_exception()); + return __detail::__variant::__get<_Np>(std::move(__v)); + } + + template + constexpr decltype(auto) + __do_visit(_Visitor&& __visitor, _Variants&&... __variants) + { + constexpr auto& __vtable = __detail::__variant::__gen_vtable< + _Result_type, _Visitor&&, _Variants&&...>::_S_vtable; + + auto __func_ptr = __vtable._M_access(__variants.index()...); + return (*__func_ptr)(std::forward<_Visitor>(__visitor), + std::forward<_Variants>(__variants)...); + } + + template + constexpr decltype(auto) + visit(_Visitor&& __visitor, _Variants&&... __variants) + { + if ((__variants.valueless_by_exception() || ...)) + __throw_bad_variant_access("std::visit: variant is valueless"); + + using _Result_type = std::invoke_result_t<_Visitor, + decltype(std::get<0>(std::declval<_Variants>()))...>; + + using _Tag = __detail::__variant::__deduce_visit_result<_Result_type>; + + return std::__do_visit<_Tag>(std::forward<_Visitor>(__visitor), + std::forward<_Variants>(__variants)...); + } + +#if __cplusplus > 201703L + template + constexpr _Res + visit(_Visitor&& __visitor, _Variants&&... __variants) + { + if ((__variants.valueless_by_exception() || ...)) + __throw_bad_variant_access("std::visit: variant is valueless"); + + return std::__do_visit<_Res>(std::forward<_Visitor>(__visitor), + std::forward<_Variants>(__variants)...); + } +#endif + + template + struct __variant_hash_call_base_impl + { + size_t + operator()(const variant<_Types...>& __t) const + noexcept((is_nothrow_invocable_v>, _Types> && ...)) + { + size_t __ret; + __detail::__variant::__raw_visit( + [&__t, &__ret](auto&& __t_mem) mutable + { + using _Type = __remove_cvref_t; + if constexpr (!is_same_v<_Type, + __detail::__variant::__variant_cookie>) + __ret = std::hash{}(__t.index()) + + std::hash<_Type>{}(__t_mem); + else + __ret = std::hash{}(__t.index()); + }, __t); + return __ret; + } + }; + + template + struct __variant_hash_call_base_impl {}; + + template + using __variant_hash_call_base = + __variant_hash_call_base_impl<(__poison_hash>:: + __enable_hash_call &&...), _Types...>; + + template + struct hash> + : private __detail::__variant::_Variant_hash_base< + variant<_Types...>, std::index_sequence_for<_Types...>>, + public __variant_hash_call_base<_Types...> + { + using result_type [[__deprecated__]] = size_t; + using argument_type [[__deprecated__]] = variant<_Types...>; + }; + + template<> + struct hash + { + using result_type [[__deprecated__]] = size_t; + using argument_type [[__deprecated__]] = monostate; + + size_t + operator()(const monostate&) const noexcept + { + constexpr size_t __magic_monostate_hash = -7777; + return __magic_monostate_hash; + } + }; + + template + struct __is_fast_hash>> + : bool_constant<(__is_fast_hash<_Types>::value && ...)> + { }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // C++17 + +#endif // _GLIBCXX_VARIANT diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@variant.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@variant.blob new file mode 100644 index 0000000000000000000000000000000000000000..27f31c6b4dbd66bd3d48d14c694584354d752457 GIT binary patch literal 12376 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 -*- C++ -*- + +// Copyright (C) 2001-2020 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 + +#pragma GCC system_header + +#include +#if __cplusplus > 201703L +# include // For remove and remove_if +#endif // C++20 +#include +#include +#include +#include +#include +#include + +#ifndef _GLIBCXX_EXPORT_TEMPLATE +# include +#endif + +#ifdef _GLIBCXX_DEBUG +# include +#endif + +#if __cplusplus >= 201703L +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + namespace pmr { + template class polymorphic_allocator; + 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 + +#if __cplusplus > 201703L +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#define __cpp_lib_erase_if 202002L + + template + inline typename vector<_Tp, _Alloc>::size_type + erase_if(vector<_Tp, _Alloc>& __cont, _Predicate __pred) + { + const auto __osz = __cont.size(); + __cont.erase(std::remove_if(__cont.begin(), __cont.end(), __pred), + __cont.end()); + return __osz - __cont.size(); + } + + template + inline typename vector<_Tp, _Alloc>::size_type + erase(vector<_Tp, _Alloc>& __cont, const _Up& __value) + { + const auto __osz = __cont.size(); + __cont.erase(std::remove(__cont.begin(), __cont.end(), __value), + __cont.end()); + return __osz - __cont.size(); + } +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // C++20 + +#endif /* _GLIBCXX_VECTOR */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@vector.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@vector.blob new file mode 100644 index 0000000000000000000000000000000000000000..2384b607c14e8a5f358c1f5e4d62a7af5e49b05c GIT binary patch literal 12721 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 M@b^oLXJj_aD*ylh literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@ctype.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@ctype.h new file mode 100644 index 0000000..351495a --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@ctype.h @@ -0,0 +1,329 @@ +/* Copyright (C) 1991-2020 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.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/@@home@ado@git@ssp/@usr@include@ctype.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@ctype.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b6909a95b69dc80ca39fd9a52f888643b962746a GIT binary patch literal 20877 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 b#QN+_n7-BIZ!DP1dc1+w0k$f>YgYY#;)6$B literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@endian.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@endian.h new file mode 100644 index 0000000..0256ee4 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@endian.h @@ -0,0 +1,72 @@ +/* Copyright (C) 1992-2020 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/@@home@ado@git@ssp/@usr@include@endian.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@endian.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e939581256cdadd76fc3e91d959c967f9fa8120f GIT binary patch literal 13771 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@errno.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@errno.h new file mode 100644 index 0000000..79e9185 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@errno.h @@ -0,0 +1,55 @@ +/* Copyright (C) 1991-2020 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/@@home@ado@git@ssp/@usr@include@errno.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3aace27bd4edd032f1d4bdaaabdd5bc9c4e6bace GIT binary patch literal 13059 zcmbVSO^7W=6~2>f^r10md?XJS9h|`XNl(8ak4F%KLQH)ApfN-VN^I)(t$S}d{c~Se z_uQF)S*VL3h~P#E$wC+I+`4fQL2xGs5k(g&BDm3&WD_*wcdEMkRZpMl+mk>p!|SS3 zr@r%lPFr|`Q~hI7Ojg+Mq*J!D^*2WZ=y=-%KXF|QEFKpB%96b{v;LoYU=86 zTa-sCUxf=*%A_jF)2D{#%>H+2FRFDJsXR&Rg^W&~ydB@Z6{ae$Pr_ARM{`x_C==B> z5oxN!wM;j%43~ADRI14J!P?$p0+H%;BX#ubXTR_ayD7PGBRaepwUk9Vd-w8h-+r@4 zI3XIn-Dv^7I_{T3SMf3}L=_p_;=Io0Ko3mbiRG_)v{E%!d6o94wJ0p5sOnN)>fg#{m{T<#G4^tFXpT&TezT zSCuRU%qmWbJdvBqTy?;oyMx44%Cy*wE-f}>SgiW%s)RxB{g9R z5`BuTJ%>Nw&Rou{S1)^feeVK5F0M-Qge?D+%6QvxiI5MNTgS%|Y1S&MVT`7`#CSZ7 z!f_!HBHW~;Qi;k$N`C8DmKx56I2pvpmXkv7-~t|cS(I4}uNg1EID4-V@S`}+<`i6H z%*W4$lZ1RlS^2rKmgfI%w18WY|XtfL~nNq-)@(UCa1OS(lEOYMR*)978ntFWH<%Oyx-!M*^bOt= zV@47O8y9-)_kE&M8w;H%HC7wD_p^Di^00H{%fg8STav>?vhLN#I5{RDF{bn(E829>}V7p?HOwW`$eZrIU=$;DfRHRB~ z8!BHW)l!zrQys%Qq)me7bN*)S(q^w7ZQ&(L4Uh1ievi^`mW>KZl%+Ujq|cvj{82@&++wP?Zqx>c(Ct|LUAge0290A)7==TFOR+nR>a5ve15$ZGIW!=6~^IjWb$73 zDF5K$UUgn9vz zbExjIP57JMfpIq*(fc#^X6aI;5;-bdJfl7?Io(wQELyyNEH`0Vtmd?1AP#;u`0nk|0ZJLZM75;E*^Krb~6#Dk9a~f@g(UsyTo!eZqZhQ%kH7_GmYUE+tB4TW~#gvLrtKAo? z)6MWCR129`syb!wxX#OO$@0g&Nw0FjHkjc6)IydCYzCM|mxKH$a;=)qE%yt2c05+X=Gn!IC>k2Y6G zj5#qZwco9U`WF~qfbmWRKf@;^1FhDZR8@YZ9-!^G8}JwEKTacZbAx)fg2R*}z8XQanwA9Sa2V*ac|GbHtmOaKWn z?_lC5NN*L8KG=@Ee+pxyXcJAEP>#sMtZWKSjAarznups?ti$O!=^AQQi@RYhUv~2% z?H-Qw@NEwn?4buI{_&!#qe+1=*0B+rPcvb^)~0q`&vtVX8%})03=o}(PHz^wJe&3c z*Cq7gVNNxMfFW5UhQ6wfZ%sCJh)~Ib-+EN`W9z_7iS5VlSd@qh+(>R9T5}b*``bI$ zZy?=^9$N3SxK1#BR_jW^adI6YS432jwnYFP=u-!3dk^a&m1ms?e10`C88l=N<0P&~HDFRKLnC0jeCQgcd_g{on6-YL?k zpSF_?^UHG7Kn0%h@CS`u=86NRU3hJ1q0RwIesnL1hTY{J&{^o{ta5M;O4^BCn8rIc z&usV@W!Dg|yK{;z6onphZ6P7kCjEpZ?BzO8DSRcdhk`=a1F0+J5q~#dBFWQdyf&F7v{HnA9$iB4+lu!n6TC|V3R(|m1cWqPygckzyHx| zci(~S$}$h&1%m4_#jG4J(CLW@=8;#g1qkHD_Ug6S!w(0u*$ZnK7$O1HS^@lTFh30_ z<1cC*KxQRmAGFD`KA7RZ58$x|pHBYq$q&I5o1>|d7F^$y z#R|`aF{?RlPLK7vD62RZu>C7nK0(AjINRF`uY@n)cNV@dJNxCU&%OVtpS=3OE=moJ z19O9Aou+}v7lD2J7|=^a9TZF4RR**&*uvcf+qFv8=HD9Dg00Y(tn3#DK>#qcG?%C1 zUk7+bWe}-10X-f<(n-y}^fVAvU`!t$D5NZcBELjOp}$*8Iu|3(%{|`Zx;86eo literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@features.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@features.h new file mode 100644 index 0000000..f334777 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@features.h @@ -0,0 +1,488 @@ +/* Copyright (C) 1991-2020 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 _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. + _ISOC2X_SOURCE Extensions to ISO C99 from ISO C2X. + __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. + + _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 + _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. + _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. + _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 or 2; 2 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 + 200809L, 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_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_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_LARGEFILE +#undef __USE_LARGEFILE64 +#undef __USE_FILE_OFFSET64 +#undef __USE_MISC +#undef __USE_ATFILE +#undef __USE_GNU +#undef __USE_FORTIFY_LEVEL +#undef __KERNEL_STRICT_NAMES +#undef __GLIBC_USE_ISOC2X +#undef __GLIBC_USE_DEPRECATED_GETS +#undef __GLIBC_USE_DEPRECATED_SCANF + +/* Suppress kernel-name space pollution unless user expressedly 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 + +/* 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 _ISOC2X_SOURCE +# define _ISOC2X_SOURCE 1 +# undef _POSIX_SOURCE +# define _POSIX_SOURCE 1 +# undef _POSIX_C_SOURCE +# define _POSIX_C_SOURCE 200809L +# undef _XOPEN_SOURCE +# define _XOPEN_SOURCE 700 +# 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 +#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 _ISOC2X_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 C2X extension. */ +#if (defined _ISOC2X_SOURCE \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L)) +# define __GLIBC_USE_ISOC2X 1 +#else +# define __GLIBC_USE_ISOC2X 0 +#endif + +/* This is to enable the ISO C11 extension. */ +#if (defined _ISOC11_SOURCE || defined _ISOC2X_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 _ISOC2X_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 _ISOC2X_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-2008 (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 200809L +#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 +# else +# define _POSIX_C_SOURCE 200809L +# 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 + +#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 +# 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 + +#if defined _DEFAULT_SOURCE +# define __USE_MISC 1 +#endif + +#ifdef _ATFILE_SOURCE +# define __USE_ATFILE 1 +#endif + +#ifdef _GNU_SOURCE +# define __USE_GNU 1 +#endif + +#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \ + && __GNUC_PREREQ (4, 1) && defined __OPTIMIZE__ && __OPTIMIZE__ > 0 +# if _FORTIFY_SOURCE > 1 +# define __USE_FORTIFY_LEVEL 2 +# else +# define __USE_FORTIFY_LEVEL 1 +# endif +#else +# 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 + +/* 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__ 31 + +#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 +# 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/@@home@ado@git@ssp/@usr@include@features.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@features.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7221d0a8481c4db49c05ae62f259beb99d6a2a37 GIT binary patch literal 16795 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 E|9lxy=l}o! literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@inttypes.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@inttypes.h new file mode 100644 index 0000000..685dfc1 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@inttypes.h @@ -0,0 +1,434 @@ +/* Copyright (C) 1997-2020 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.8 Format conversion of integer types + */ + +#ifndef _INTTYPES_H +#define _INTTYPES_H 1 + +#include +/* Get the type definitions. */ +#include + +/* Get a definition for wchar_t. But we must not define wchar_t itself. */ +#ifndef ____gwchar_t_defined +# ifdef __cplusplus +# define __gwchar_t wchar_t +# elif defined __WCHAR_TYPE__ +typedef __WCHAR_TYPE__ __gwchar_t; +# else +# define __need_wchar_t +# include +typedef wchar_t __gwchar_t; +# endif +# define ____gwchar_t_defined 1 +#endif + +# if __WORDSIZE == 64 +# define __PRI64_PREFIX "l" +# define __PRIPTR_PREFIX "l" +# else +# define __PRI64_PREFIX "ll" +# define __PRIPTR_PREFIX +# endif + +/* Macros for printing format specifiers. */ + +/* Decimal notation. */ +# define PRId8 "d" +# define PRId16 "d" +# define PRId32 "d" +# define PRId64 __PRI64_PREFIX "d" + +# define PRIdLEAST8 "d" +# define PRIdLEAST16 "d" +# define PRIdLEAST32 "d" +# define PRIdLEAST64 __PRI64_PREFIX "d" + +# define PRIdFAST8 "d" +# define PRIdFAST16 __PRIPTR_PREFIX "d" +# define PRIdFAST32 __PRIPTR_PREFIX "d" +# define PRIdFAST64 __PRI64_PREFIX "d" + + +# define PRIi8 "i" +# define PRIi16 "i" +# define PRIi32 "i" +# define PRIi64 __PRI64_PREFIX "i" + +# define PRIiLEAST8 "i" +# define PRIiLEAST16 "i" +# define PRIiLEAST32 "i" +# define PRIiLEAST64 __PRI64_PREFIX "i" + +# define PRIiFAST8 "i" +# define PRIiFAST16 __PRIPTR_PREFIX "i" +# define PRIiFAST32 __PRIPTR_PREFIX "i" +# define PRIiFAST64 __PRI64_PREFIX "i" + +/* Octal notation. */ +# define PRIo8 "o" +# define PRIo16 "o" +# define PRIo32 "o" +# define PRIo64 __PRI64_PREFIX "o" + +# define PRIoLEAST8 "o" +# define PRIoLEAST16 "o" +# define PRIoLEAST32 "o" +# define PRIoLEAST64 __PRI64_PREFIX "o" + +# define PRIoFAST8 "o" +# define PRIoFAST16 __PRIPTR_PREFIX "o" +# define PRIoFAST32 __PRIPTR_PREFIX "o" +# define PRIoFAST64 __PRI64_PREFIX "o" + +/* Unsigned integers. */ +# define PRIu8 "u" +# define PRIu16 "u" +# define PRIu32 "u" +# define PRIu64 __PRI64_PREFIX "u" + +# define PRIuLEAST8 "u" +# define PRIuLEAST16 "u" +# define PRIuLEAST32 "u" +# define PRIuLEAST64 __PRI64_PREFIX "u" + +# define PRIuFAST8 "u" +# define PRIuFAST16 __PRIPTR_PREFIX "u" +# define PRIuFAST32 __PRIPTR_PREFIX "u" +# define PRIuFAST64 __PRI64_PREFIX "u" + +/* lowercase hexadecimal notation. */ +# define PRIx8 "x" +# define PRIx16 "x" +# define PRIx32 "x" +# define PRIx64 __PRI64_PREFIX "x" + +# define PRIxLEAST8 "x" +# define PRIxLEAST16 "x" +# define PRIxLEAST32 "x" +# define PRIxLEAST64 __PRI64_PREFIX "x" + +# define PRIxFAST8 "x" +# define PRIxFAST16 __PRIPTR_PREFIX "x" +# define PRIxFAST32 __PRIPTR_PREFIX "x" +# define PRIxFAST64 __PRI64_PREFIX "x" + +/* UPPERCASE hexadecimal notation. */ +# define PRIX8 "X" +# define PRIX16 "X" +# define PRIX32 "X" +# define PRIX64 __PRI64_PREFIX "X" + +# define PRIXLEAST8 "X" +# define PRIXLEAST16 "X" +# define PRIXLEAST32 "X" +# define PRIXLEAST64 __PRI64_PREFIX "X" + +# define PRIXFAST8 "X" +# define PRIXFAST16 __PRIPTR_PREFIX "X" +# define PRIXFAST32 __PRIPTR_PREFIX "X" +# define PRIXFAST64 __PRI64_PREFIX "X" + + +/* Macros for printing `intmax_t' and `uintmax_t'. */ +# define PRIdMAX __PRI64_PREFIX "d" +# define PRIiMAX __PRI64_PREFIX "i" +# define PRIoMAX __PRI64_PREFIX "o" +# define PRIuMAX __PRI64_PREFIX "u" +# define PRIxMAX __PRI64_PREFIX "x" +# define PRIXMAX __PRI64_PREFIX "X" + + +/* Macros for printing `intptr_t' and `uintptr_t'. */ +# define PRIdPTR __PRIPTR_PREFIX "d" +# define PRIiPTR __PRIPTR_PREFIX "i" +# define PRIoPTR __PRIPTR_PREFIX "o" +# define PRIuPTR __PRIPTR_PREFIX "u" +# define PRIxPTR __PRIPTR_PREFIX "x" +# define PRIXPTR __PRIPTR_PREFIX "X" + + +/* Macros for scanning format specifiers. */ + +/* Signed decimal notation. */ +# define SCNd8 "hhd" +# define SCNd16 "hd" +# define SCNd32 "d" +# define SCNd64 __PRI64_PREFIX "d" + +# define SCNdLEAST8 "hhd" +# define SCNdLEAST16 "hd" +# define SCNdLEAST32 "d" +# define SCNdLEAST64 __PRI64_PREFIX "d" + +# define SCNdFAST8 "hhd" +# define SCNdFAST16 __PRIPTR_PREFIX "d" +# define SCNdFAST32 __PRIPTR_PREFIX "d" +# define SCNdFAST64 __PRI64_PREFIX "d" + +/* Signed decimal notation. */ +# define SCNi8 "hhi" +# define SCNi16 "hi" +# define SCNi32 "i" +# define SCNi64 __PRI64_PREFIX "i" + +# define SCNiLEAST8 "hhi" +# define SCNiLEAST16 "hi" +# define SCNiLEAST32 "i" +# define SCNiLEAST64 __PRI64_PREFIX "i" + +# define SCNiFAST8 "hhi" +# define SCNiFAST16 __PRIPTR_PREFIX "i" +# define SCNiFAST32 __PRIPTR_PREFIX "i" +# define SCNiFAST64 __PRI64_PREFIX "i" + +/* Unsigned decimal notation. */ +# define SCNu8 "hhu" +# define SCNu16 "hu" +# define SCNu32 "u" +# define SCNu64 __PRI64_PREFIX "u" + +# define SCNuLEAST8 "hhu" +# define SCNuLEAST16 "hu" +# define SCNuLEAST32 "u" +# define SCNuLEAST64 __PRI64_PREFIX "u" + +# define SCNuFAST8 "hhu" +# define SCNuFAST16 __PRIPTR_PREFIX "u" +# define SCNuFAST32 __PRIPTR_PREFIX "u" +# define SCNuFAST64 __PRI64_PREFIX "u" + +/* Octal notation. */ +# define SCNo8 "hho" +# define SCNo16 "ho" +# define SCNo32 "o" +# define SCNo64 __PRI64_PREFIX "o" + +# define SCNoLEAST8 "hho" +# define SCNoLEAST16 "ho" +# define SCNoLEAST32 "o" +# define SCNoLEAST64 __PRI64_PREFIX "o" + +# define SCNoFAST8 "hho" +# define SCNoFAST16 __PRIPTR_PREFIX "o" +# define SCNoFAST32 __PRIPTR_PREFIX "o" +# define SCNoFAST64 __PRI64_PREFIX "o" + +/* Hexadecimal notation. */ +# define SCNx8 "hhx" +# define SCNx16 "hx" +# define SCNx32 "x" +# define SCNx64 __PRI64_PREFIX "x" + +# define SCNxLEAST8 "hhx" +# define SCNxLEAST16 "hx" +# define SCNxLEAST32 "x" +# define SCNxLEAST64 __PRI64_PREFIX "x" + +# define SCNxFAST8 "hhx" +# define SCNxFAST16 __PRIPTR_PREFIX "x" +# define SCNxFAST32 __PRIPTR_PREFIX "x" +# define SCNxFAST64 __PRI64_PREFIX "x" + + +/* Macros for scanning `intmax_t' and `uintmax_t'. */ +# define SCNdMAX __PRI64_PREFIX "d" +# define SCNiMAX __PRI64_PREFIX "i" +# define SCNoMAX __PRI64_PREFIX "o" +# define SCNuMAX __PRI64_PREFIX "u" +# define SCNxMAX __PRI64_PREFIX "x" + +/* Macros for scaning `intptr_t' and `uintptr_t'. */ +# define SCNdPTR __PRIPTR_PREFIX "d" +# define SCNiPTR __PRIPTR_PREFIX "i" +# define SCNoPTR __PRIPTR_PREFIX "o" +# define SCNuPTR __PRIPTR_PREFIX "u" +# define SCNxPTR __PRIPTR_PREFIX "x" + + +__BEGIN_DECLS + +#if __WORDSIZE == 64 + +/* We have to define the `uintmax_t' type using `ldiv_t'. */ +typedef struct + { + long int quot; /* Quotient. */ + long int rem; /* Remainder. */ + } imaxdiv_t; + +#else + +/* We have to define the `uintmax_t' type using `lldiv_t'. */ +typedef struct + { + __extension__ long long int quot; /* Quotient. */ + __extension__ long long int rem; /* Remainder. */ + } imaxdiv_t; + +#endif + + +/* Compute absolute value of N. */ +extern intmax_t imaxabs (intmax_t __n) __THROW __attribute__ ((__const__)); + +/* Return the `imaxdiv_t' representation of the value of NUMER over DENOM. */ +extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom) + __THROW __attribute__ ((__const__)); + +/* Like `strtol' but convert to `intmax_t'. */ +extern intmax_t strtoimax (const char *__restrict __nptr, + char **__restrict __endptr, int __base) __THROW; + +/* Like `strtoul' but convert to `uintmax_t'. */ +extern uintmax_t strtoumax (const char *__restrict __nptr, + char ** __restrict __endptr, int __base) __THROW; + +/* Like `wcstol' but convert to `intmax_t'. */ +extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr, + __gwchar_t **__restrict __endptr, int __base) + __THROW; + +/* Like `wcstoul' but convert to `uintmax_t'. */ +extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr, + __gwchar_t ** __restrict __endptr, int __base) + __THROW; + +#ifdef __USE_EXTERN_INLINES + +# if __WORDSIZE == 64 + +extern long int __strtol_internal (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `strtol' but convert to `intmax_t'. */ +__extern_inline intmax_t +__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr, + int base)) +{ + return __strtol_internal (nptr, endptr, base, 0); +} + +extern unsigned long int __strtoul_internal (const char *__restrict __nptr, + char ** __restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `strtoul' but convert to `uintmax_t'. */ +__extern_inline uintmax_t +__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr, + int base)) +{ + return __strtoul_internal (nptr, endptr, base, 0); +} + +extern long int __wcstol_internal (const __gwchar_t * __restrict __nptr, + __gwchar_t **__restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `wcstol' but convert to `intmax_t'. */ +__extern_inline intmax_t +__NTH (wcstoimax (const __gwchar_t *__restrict nptr, + __gwchar_t **__restrict endptr, int base)) +{ + return __wcstol_internal (nptr, endptr, base, 0); +} + +extern unsigned long int __wcstoul_internal (const __gwchar_t * + __restrict __nptr, + __gwchar_t ** + __restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `wcstoul' but convert to `uintmax_t'. */ +__extern_inline uintmax_t +__NTH (wcstoumax (const __gwchar_t *__restrict nptr, + __gwchar_t **__restrict endptr, int base)) +{ + return __wcstoul_internal (nptr, endptr, base, 0); +} + +# else /* __WORDSIZE == 32 */ + +__extension__ +extern long long int __strtoll_internal (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `strtol' but convert to `intmax_t'. */ +__extern_inline intmax_t +__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr, + int base)) +{ + return __strtoll_internal (nptr, endptr, base, 0); +} + +__extension__ +extern unsigned long long int __strtoull_internal (const char * + __restrict __nptr, + char ** + __restrict __endptr, + int __base, + int __group) + __THROW __nonnull ((1)) __wur; +/* Like `strtoul' but convert to `uintmax_t'. */ +__extern_inline uintmax_t +__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr, + int base)) +{ + return __strtoull_internal (nptr, endptr, base, 0); +} + +__extension__ +extern long long int __wcstoll_internal (const __gwchar_t *__restrict __nptr, + __gwchar_t **__restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `wcstol' but convert to `intmax_t'. */ +__extern_inline intmax_t +__NTH (wcstoimax (const __gwchar_t *__restrict nptr, + __gwchar_t **__restrict endptr, int base)) +{ + return __wcstoll_internal (nptr, endptr, base, 0); +} + + +__extension__ +extern unsigned long long int __wcstoull_internal (const __gwchar_t * + __restrict __nptr, + __gwchar_t ** + __restrict __endptr, + int __base, + int __group) + __THROW __nonnull ((1)) __wur; +/* Like `wcstoul' but convert to `uintmax_t'. */ +__extern_inline uintmax_t +__NTH (wcstoumax (const __gwchar_t *__restrict nptr, + __gwchar_t **__restrict endptr, int base)) +{ + return __wcstoull_internal (nptr, endptr, base, 0); +} + +# endif /* __WORDSIZE == 32 */ +#endif /* Use extern inlines. */ + +__END_DECLS + +#endif /* inttypes.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@inttypes.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@inttypes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7326ba0d075ab6badf6b5d4f46b311b29aab0dda GIT binary patch literal 26652 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 vkdWf4KB7Q0OpI+~VWr*^j`9!BfomH0c04fHeSA. */ + +#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/@@home@ado@git@ssp/@usr@include@libintl.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@libintl.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..36f94ce483d44b3ea51f315f476856e56646b14c GIT binary patch literal 16954 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@linux@errno.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@linux@errno.h new file mode 100644 index 0000000..70f2bd3 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@linux@errno.h @@ -0,0 +1 @@ +#include diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@linux@errno.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@linux@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a2c00f0fce6b19d2fbcf534ecbb49a2f93dd24c9 GIT binary patch literal 12312 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@locale.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@locale.h new file mode 100644 index 0000000..b013c8b --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@locale.h @@ -0,0 +1,197 @@ +/* Copyright (C) 1991-2020 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/@@home@ado@git@ssp/@usr@include@locale.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@locale.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..428a82a5b6fd0f25e375b6a349392fa16be86c9a GIT binary patch literal 20842 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 Lp>N>^*X#T*7x)o) literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@math.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@math.h new file mode 100644 index 0000000..fb211bb --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@math.h @@ -0,0 +1,1341 @@ +/* Declarations for math functions. + Copyright (C) 1991-2020 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.12 Mathematics + */ + +#ifndef _MATH_H +#define _MATH_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +#if defined log && defined __GNUC__ +# warning A macro called log was already defined when was included. +# warning This will cause compilation problems. +#endif + +__BEGIN_DECLS + +/* Get definitions of __intmax_t and __uintmax_t. */ +#include + +/* Get machine-dependent vector math functions declarations. */ +#include + +/* Gather machine dependent type support. */ +#include + +/* Value returned on overflow. With IEEE 754 floating point, this is + +Infinity, otherwise the largest representable positive value. */ +#if __GNUC_PREREQ (3, 3) +# define HUGE_VAL (__builtin_huge_val ()) +#else +/* This may provoke compiler warnings, and may not be rounded to + +Infinity in all IEEE 754 rounding modes, but is the best that can + be done in ISO C while remaining a constant expression. 10,000 is + greater than the maximum (decimal) exponent for all supported + floating-point formats and widths. */ +# define HUGE_VAL 1e10000 +#endif +#ifdef __USE_ISOC99 +# if __GNUC_PREREQ (3, 3) +# define HUGE_VALF (__builtin_huge_valf ()) +# define HUGE_VALL (__builtin_huge_vall ()) +# else +# define HUGE_VALF 1e10000f +# define HUGE_VALL 1e10000L +# endif +#endif +#if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define HUGE_VAL_F16 (__builtin_huge_valf16 ()) +#endif +#if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define HUGE_VAL_F32 (__builtin_huge_valf32 ()) +#endif +#if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define HUGE_VAL_F64 (__builtin_huge_valf64 ()) +#endif +#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define HUGE_VAL_F128 (__builtin_huge_valf128 ()) +#endif +#if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define HUGE_VAL_F32X (__builtin_huge_valf32x ()) +#endif +#if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define HUGE_VAL_F64X (__builtin_huge_valf64x ()) +#endif +#if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define HUGE_VAL_F128X (__builtin_huge_valf128x ()) +#endif + +#ifdef __USE_ISOC99 +/* IEEE positive infinity. */ +# if __GNUC_PREREQ (3, 3) +# define INFINITY (__builtin_inff ()) +# else +# define INFINITY HUGE_VALF +# endif + +/* IEEE Not A Number. */ +# if __GNUC_PREREQ (3, 3) +# define NAN (__builtin_nanf ("")) +# else +/* This will raise an "invalid" exception outside static initializers, + but is the best that can be done in ISO C while remaining a + constant expression. */ +# define NAN (0.0f / 0.0f) +# endif +#endif /* __USE_ISOC99 */ + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) +/* Signaling NaN macros, if supported. */ +# if __GNUC_PREREQ (3, 3) +# define SNANF (__builtin_nansf ("")) +# define SNAN (__builtin_nans ("")) +# define SNANL (__builtin_nansl ("")) +# endif +#endif +#if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define SNANF16 (__builtin_nansf16 ("")) +#endif +#if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define SNANF32 (__builtin_nansf32 ("")) +#endif +#if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define SNANF64 (__builtin_nansf64 ("")) +#endif +#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define SNANF128 (__builtin_nansf128 ("")) +#endif +#if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define SNANF32X (__builtin_nansf32x ("")) +#endif +#if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define SNANF64X (__builtin_nansf64x ("")) +#endif +#if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define SNANF128X (__builtin_nansf128x ("")) +#endif + +/* Get __GLIBC_FLT_EVAL_METHOD. */ +#include + +#ifdef __USE_ISOC99 +/* Define the following typedefs. + + float_t floating-point type at least as wide as `float' used + to evaluate `float' expressions + double_t floating-point type at least as wide as `double' used + to evaluate `double' expressions +*/ +# if __GLIBC_FLT_EVAL_METHOD == 0 || __GLIBC_FLT_EVAL_METHOD == 16 +typedef float float_t; +typedef double double_t; +# elif __GLIBC_FLT_EVAL_METHOD == 1 +typedef double float_t; +typedef double double_t; +# elif __GLIBC_FLT_EVAL_METHOD == 2 +typedef long double float_t; +typedef long double double_t; +# elif __GLIBC_FLT_EVAL_METHOD == 32 +typedef _Float32 float_t; +typedef double double_t; +# elif __GLIBC_FLT_EVAL_METHOD == 33 +typedef _Float32x float_t; +typedef _Float32x double_t; +# elif __GLIBC_FLT_EVAL_METHOD == 64 +typedef _Float64 float_t; +typedef _Float64 double_t; +# elif __GLIBC_FLT_EVAL_METHOD == 65 +typedef _Float64x float_t; +typedef _Float64x double_t; +# elif __GLIBC_FLT_EVAL_METHOD == 128 +typedef _Float128 float_t; +typedef _Float128 double_t; +# elif __GLIBC_FLT_EVAL_METHOD == 129 +typedef _Float128x float_t; +typedef _Float128x double_t; +# else +# error "Unknown __GLIBC_FLT_EVAL_METHOD" +# endif +#endif + +/* Define macros for the return values of ilogb and llogb, based on + __FP_LOGB0_IS_MIN and __FP_LOGBNAN_IS_MIN. + + FP_ILOGB0 Expands to a value returned by `ilogb (0.0)'. + FP_ILOGBNAN Expands to a value returned by `ilogb (NAN)'. + FP_LLOGB0 Expands to a value returned by `llogb (0.0)'. + FP_LLOGBNAN Expands to a value returned by `llogb (NAN)'. + +*/ + +#include +#ifdef __USE_ISOC99 +# if __FP_LOGB0_IS_MIN +# define FP_ILOGB0 (-2147483647 - 1) +# else +# define FP_ILOGB0 (-2147483647) +# endif +# if __FP_LOGBNAN_IS_MIN +# define FP_ILOGBNAN (-2147483647 - 1) +# else +# define FP_ILOGBNAN 2147483647 +# endif +#endif +#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) +# if __WORDSIZE == 32 +# define __FP_LONG_MAX 0x7fffffffL +# else +# define __FP_LONG_MAX 0x7fffffffffffffffL +# endif +# if __FP_LOGB0_IS_MIN +# define FP_LLOGB0 (-__FP_LONG_MAX - 1) +# else +# define FP_LLOGB0 (-__FP_LONG_MAX) +# endif +# if __FP_LOGBNAN_IS_MIN +# define FP_LLOGBNAN (-__FP_LONG_MAX - 1) +# else +# define FP_LLOGBNAN __FP_LONG_MAX +# endif +#endif + +/* Get the architecture specific values describing the floating-point + evaluation. The following symbols will get defined: + + FP_FAST_FMA + FP_FAST_FMAF + FP_FAST_FMAL + If defined it indicates that the `fma' function + generally executes about as fast as a multiply and an add. + This macro is defined only iff the `fma' function is + implemented directly with a hardware multiply-add instructions. +*/ + +#include + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) +/* Rounding direction macros for fromfp functions. */ +enum + { + FP_INT_UPWARD = +# define FP_INT_UPWARD 0 + FP_INT_UPWARD, + FP_INT_DOWNWARD = +# define FP_INT_DOWNWARD 1 + FP_INT_DOWNWARD, + FP_INT_TOWARDZERO = +# define FP_INT_TOWARDZERO 2 + FP_INT_TOWARDZERO, + FP_INT_TONEARESTFROMZERO = +# define FP_INT_TONEARESTFROMZERO 3 + FP_INT_TONEARESTFROMZERO, + FP_INT_TONEAREST = +# define FP_INT_TONEAREST 4 + FP_INT_TONEAREST, + }; +#endif + +/* The file contains the prototypes for all the + actual math functions. These macros are used for those prototypes, + so we can easily declare each function as both `name' and `__name', + and can declare the float versions `namef' and `__namef'. */ + +#define __SIMD_DECL(function) __CONCAT (__DECL_SIMD_, function) + +#define __MATHCALL_VEC(function, suffix, args) \ + __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \ + __MATHCALL (function, suffix, args) + +#define __MATHDECL_VEC(type, function,suffix, args) \ + __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \ + __MATHDECL(type, function,suffix, args) + +#define __MATHCALL(function,suffix, args) \ + __MATHDECL (_Mdouble_,function,suffix, args) +#define __MATHDECL(type, function,suffix, args) \ + __MATHDECL_1(type, function,suffix, args); \ + __MATHDECL_1(type, __CONCAT(__,function),suffix, args) +#define __MATHCALLX(function,suffix, args, attrib) \ + __MATHDECLX (_Mdouble_,function,suffix, args, attrib) +#define __MATHDECLX(type, function,suffix, args, attrib) \ + __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \ + __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib) +#define __MATHDECL_1(type, function,suffix, args) \ + extern type __MATH_PRECNAME(function,suffix) args __THROW + +#define _Mdouble_ double +#define __MATH_PRECNAME(name,r) __CONCAT(name,r) +#define __MATH_DECLARING_DOUBLE 1 +#define __MATH_DECLARING_FLOATN 0 +#include +#include +#undef _Mdouble_ +#undef __MATH_PRECNAME +#undef __MATH_DECLARING_DOUBLE +#undef __MATH_DECLARING_FLOATN + +#ifdef __USE_ISOC99 + + +/* Include the file of declarations again, this time using `float' + instead of `double' and appending f to each function name. */ + +# define _Mdouble_ float +# define __MATH_PRECNAME(name,r) name##f##r +# define __MATH_DECLARING_DOUBLE 0 +# define __MATH_DECLARING_FLOATN 0 +# include +# include +# undef _Mdouble_ +# undef __MATH_PRECNAME +# undef __MATH_DECLARING_DOUBLE +# undef __MATH_DECLARING_FLOATN + +# if !(defined __NO_LONG_DOUBLE_MATH && defined _LIBC) \ + || defined __LDBL_COMPAT \ + || defined _LIBC_TEST +# ifdef __LDBL_COMPAT + +# ifdef __USE_ISOC99 +extern float __nldbl_nexttowardf (float __x, long double __y) + __THROW __attribute__ ((__const__)); +# ifdef __REDIRECT_NTH +extern float __REDIRECT_NTH (nexttowardf, (float __x, long double __y), + __nldbl_nexttowardf) + __attribute__ ((__const__)); +extern double __REDIRECT_NTH (nexttoward, (double __x, long double __y), + nextafter) __attribute__ ((__const__)); +extern long double __REDIRECT_NTH (nexttowardl, + (long double __x, long double __y), + nextafter) __attribute__ ((__const__)); +# endif +# endif + +# undef __MATHDECL_1 +# define __MATHDECL_2(type, function,suffix, args, alias) \ + extern type __REDIRECT_NTH(__MATH_PRECNAME(function,suffix), \ + args, alias) +# define __MATHDECL_1(type, function,suffix, args) \ + __MATHDECL_2(type, function,suffix, args, __CONCAT(function,suffix)) +# endif + +/* Include the file of declarations again, this time using `long double' + instead of `double' and appending l to each function name. */ + +# define _Mdouble_ long double +# define __MATH_PRECNAME(name,r) name##l##r +# define __MATH_DECLARING_DOUBLE 0 +# define __MATH_DECLARING_FLOATN 0 +# define __MATH_DECLARE_LDOUBLE 1 +# include +# include +# undef _Mdouble_ +# undef __MATH_PRECNAME +# undef __MATH_DECLARING_DOUBLE +# undef __MATH_DECLARING_FLOATN + +# endif /* !(__NO_LONG_DOUBLE_MATH && _LIBC) || __LDBL_COMPAT */ + +#endif /* Use ISO C99. */ + +/* Include the file of declarations for _FloatN and _FloatNx + types. */ + +#if __HAVE_DISTINCT_FLOAT16 || (__HAVE_FLOAT16 && !defined _LIBC) +# define _Mdouble_ _Float16 +# define __MATH_PRECNAME(name,r) name##f16##r +# define __MATH_DECLARING_DOUBLE 0 +# define __MATH_DECLARING_FLOATN 1 +# if __HAVE_DISTINCT_FLOAT16 +# include +# endif +# if __GLIBC_USE (IEC_60559_TYPES_EXT) +# include +# endif +# undef _Mdouble_ +# undef __MATH_PRECNAME +# undef __MATH_DECLARING_DOUBLE +# undef __MATH_DECLARING_FLOATN +#endif /* __HAVE_DISTINCT_FLOAT16 || (__HAVE_FLOAT16 && !_LIBC). */ + +#if __HAVE_DISTINCT_FLOAT32 || (__HAVE_FLOAT32 && !defined _LIBC) +# define _Mdouble_ _Float32 +# define __MATH_PRECNAME(name,r) name##f32##r +# define __MATH_DECLARING_DOUBLE 0 +# define __MATH_DECLARING_FLOATN 1 +# if __HAVE_DISTINCT_FLOAT32 +# include +# endif +# if __GLIBC_USE (IEC_60559_TYPES_EXT) +# include +# endif +# undef _Mdouble_ +# undef __MATH_PRECNAME +# undef __MATH_DECLARING_DOUBLE +# undef __MATH_DECLARING_FLOATN +#endif /* __HAVE_DISTINCT_FLOAT32 || (__HAVE_FLOAT32 && !_LIBC). */ + +#if __HAVE_DISTINCT_FLOAT64 || (__HAVE_FLOAT64 && !defined _LIBC) +# define _Mdouble_ _Float64 +# define __MATH_PRECNAME(name,r) name##f64##r +# define __MATH_DECLARING_DOUBLE 0 +# define __MATH_DECLARING_FLOATN 1 +# if __HAVE_DISTINCT_FLOAT64 +# include +# endif +# if __GLIBC_USE (IEC_60559_TYPES_EXT) +# include +# endif +# undef _Mdouble_ +# undef __MATH_PRECNAME +# undef __MATH_DECLARING_DOUBLE +# undef __MATH_DECLARING_FLOATN +#endif /* __HAVE_DISTINCT_FLOAT64 || (__HAVE_FLOAT64 && !_LIBC). */ + +#if __HAVE_DISTINCT_FLOAT128 || (__HAVE_FLOAT128 && !defined _LIBC) +# define _Mdouble_ _Float128 +# define __MATH_PRECNAME(name,r) name##f128##r +# define __MATH_DECLARING_DOUBLE 0 +# define __MATH_DECLARING_FLOATN 1 +# if __HAVE_DISTINCT_FLOAT128 +# include +# endif +# if __GLIBC_USE (IEC_60559_TYPES_EXT) +# include +# endif +# undef _Mdouble_ +# undef __MATH_PRECNAME +# undef __MATH_DECLARING_DOUBLE +# undef __MATH_DECLARING_FLOATN +#endif /* __HAVE_DISTINCT_FLOAT128 || (__HAVE_FLOAT128 && !_LIBC). */ + +#if __HAVE_DISTINCT_FLOAT32X || (__HAVE_FLOAT32X && !defined _LIBC) +# define _Mdouble_ _Float32x +# define __MATH_PRECNAME(name,r) name##f32x##r +# define __MATH_DECLARING_DOUBLE 0 +# define __MATH_DECLARING_FLOATN 1 +# if __HAVE_DISTINCT_FLOAT32X +# include +# endif +# if __GLIBC_USE (IEC_60559_TYPES_EXT) +# include +# endif +# undef _Mdouble_ +# undef __MATH_PRECNAME +# undef __MATH_DECLARING_DOUBLE +# undef __MATH_DECLARING_FLOATN +#endif /* __HAVE_DISTINCT_FLOAT32X || (__HAVE_FLOAT32X && !_LIBC). */ + +#if __HAVE_DISTINCT_FLOAT64X || (__HAVE_FLOAT64X && !defined _LIBC) +# define _Mdouble_ _Float64x +# define __MATH_PRECNAME(name,r) name##f64x##r +# define __MATH_DECLARING_DOUBLE 0 +# define __MATH_DECLARING_FLOATN 1 +# if __HAVE_DISTINCT_FLOAT64X +# include +# endif +# if __GLIBC_USE (IEC_60559_TYPES_EXT) +# include +# endif +# undef _Mdouble_ +# undef __MATH_PRECNAME +# undef __MATH_DECLARING_DOUBLE +# undef __MATH_DECLARING_FLOATN +#endif /* __HAVE_DISTINCT_FLOAT64X || (__HAVE_FLOAT64X && !_LIBC). */ + +#if __HAVE_DISTINCT_FLOAT128X || (__HAVE_FLOAT128X && !defined _LIBC) +# define _Mdouble_ _Float128x +# define __MATH_PRECNAME(name,r) name##f128x##r +# define __MATH_DECLARING_DOUBLE 0 +# define __MATH_DECLARING_FLOATN 1 +# if __HAVE_DISTINCT_FLOAT128X +# include +# endif +# if __GLIBC_USE (IEC_60559_TYPES_EXT) +# include +# endif +# undef _Mdouble_ +# undef __MATH_PRECNAME +# undef __MATH_DECLARING_DOUBLE +# undef __MATH_DECLARING_FLOATN +#endif /* __HAVE_DISTINCT_FLOAT128X || (__HAVE_FLOAT128X && !_LIBC). */ + +#undef __MATHDECL_1 +#undef __MATHDECL +#undef __MATHCALL + +/* Declare functions returning a narrower type. */ +#define __MATHCALL_NARROW_ARGS_1 (_Marg_ __x) +#define __MATHCALL_NARROW_ARGS_2 (_Marg_ __x, _Marg_ __y) +#define __MATHCALL_NARROW_ARGS_3 (_Marg_ __x, _Marg_ __y, _Marg_ __z) +#define __MATHCALL_NARROW_NORMAL(func, nargs) \ + extern _Mret_ func __MATHCALL_NARROW_ARGS_ ## nargs __THROW +#define __MATHCALL_NARROW_REDIR(func, redir, nargs) \ + extern _Mret_ __REDIRECT_NTH (func, __MATHCALL_NARROW_ARGS_ ## nargs, \ + redir) +#define __MATHCALL_NARROW(func, redir, nargs) \ + __MATHCALL_NARROW_NORMAL (func, nargs) + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) + +# define _Mret_ float +# define _Marg_ double +# define __MATHCALL_NAME(name) f ## name +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME + +# define _Mret_ float +# define _Marg_ long double +# define __MATHCALL_NAME(name) f ## name ## l +# ifdef __LDBL_COMPAT +# define __MATHCALL_REDIR_NAME(name) f ## name +# undef __MATHCALL_NARROW +# define __MATHCALL_NARROW(func, redir, nargs) \ + __MATHCALL_NARROW_REDIR (func, redir, nargs) +# endif +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# ifdef __LDBL_COMPAT +# undef __MATHCALL_REDIR_NAME +# undef __MATHCALL_NARROW +# define __MATHCALL_NARROW(func, redir, nargs) \ + __MATHCALL_NARROW_NORMAL (func, nargs) +# endif + +# define _Mret_ double +# define _Marg_ long double +# define __MATHCALL_NAME(name) d ## name ## l +# ifdef __LDBL_COMPAT +# define __MATHCALL_REDIR_NAME(name) __nldbl_d ## name ## l +# undef __MATHCALL_NARROW +# define __MATHCALL_NARROW(func, redir, nargs) \ + __MATHCALL_NARROW_REDIR (func, redir, nargs) +# endif +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# ifdef __LDBL_COMPAT +# undef __MATHCALL_REDIR_NAME +# undef __MATHCALL_NARROW +# define __MATHCALL_NARROW(func, redir, nargs) \ + __MATHCALL_NARROW_NORMAL (func, nargs) +# endif + +#endif + +#if __GLIBC_USE (IEC_60559_TYPES_EXT) + +# if __HAVE_FLOAT16 && __HAVE_FLOAT32 +# define _Mret_ _Float16 +# define _Marg_ _Float32 +# define __MATHCALL_NAME(name) f16 ## name ## f32 +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT16 && __HAVE_FLOAT32X +# define _Mret_ _Float16 +# define _Marg_ _Float32x +# define __MATHCALL_NAME(name) f16 ## name ## f32x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT16 && __HAVE_FLOAT64 +# define _Mret_ _Float16 +# define _Marg_ _Float64 +# define __MATHCALL_NAME(name) f16 ## name ## f64 +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT16 && __HAVE_FLOAT64X +# define _Mret_ _Float16 +# define _Marg_ _Float64x +# define __MATHCALL_NAME(name) f16 ## name ## f64x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT16 && __HAVE_FLOAT128 +# define _Mret_ _Float16 +# define _Marg_ _Float128 +# define __MATHCALL_NAME(name) f16 ## name ## f128 +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT16 && __HAVE_FLOAT128X +# define _Mret_ _Float16 +# define _Marg_ _Float128x +# define __MATHCALL_NAME(name) f16 ## name ## f128x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT32 && __HAVE_FLOAT32X +# define _Mret_ _Float32 +# define _Marg_ _Float32x +# define __MATHCALL_NAME(name) f32 ## name ## f32x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT32 && __HAVE_FLOAT64 +# define _Mret_ _Float32 +# define _Marg_ _Float64 +# define __MATHCALL_NAME(name) f32 ## name ## f64 +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT32 && __HAVE_FLOAT64X +# define _Mret_ _Float32 +# define _Marg_ _Float64x +# define __MATHCALL_NAME(name) f32 ## name ## f64x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT32 && __HAVE_FLOAT128 +# define _Mret_ _Float32 +# define _Marg_ _Float128 +# define __MATHCALL_NAME(name) f32 ## name ## f128 +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT32 && __HAVE_FLOAT128X +# define _Mret_ _Float32 +# define _Marg_ _Float128x +# define __MATHCALL_NAME(name) f32 ## name ## f128x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT32X && __HAVE_FLOAT64 +# define _Mret_ _Float32x +# define _Marg_ _Float64 +# define __MATHCALL_NAME(name) f32x ## name ## f64 +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT32X && __HAVE_FLOAT64X +# define _Mret_ _Float32x +# define _Marg_ _Float64x +# define __MATHCALL_NAME(name) f32x ## name ## f64x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT32X && __HAVE_FLOAT128 +# define _Mret_ _Float32x +# define _Marg_ _Float128 +# define __MATHCALL_NAME(name) f32x ## name ## f128 +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT32X && __HAVE_FLOAT128X +# define _Mret_ _Float32x +# define _Marg_ _Float128x +# define __MATHCALL_NAME(name) f32x ## name ## f128x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT64 && __HAVE_FLOAT64X +# define _Mret_ _Float64 +# define _Marg_ _Float64x +# define __MATHCALL_NAME(name) f64 ## name ## f64x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT64 && __HAVE_FLOAT128 +# define _Mret_ _Float64 +# define _Marg_ _Float128 +# define __MATHCALL_NAME(name) f64 ## name ## f128 +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT64 && __HAVE_FLOAT128X +# define _Mret_ _Float64 +# define _Marg_ _Float128x +# define __MATHCALL_NAME(name) f64 ## name ## f128x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT64X && __HAVE_FLOAT128 +# define _Mret_ _Float64x +# define _Marg_ _Float128 +# define __MATHCALL_NAME(name) f64x ## name ## f128 +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT64X && __HAVE_FLOAT128X +# define _Mret_ _Float64x +# define _Marg_ _Float128x +# define __MATHCALL_NAME(name) f64x ## name ## f128x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +# if __HAVE_FLOAT128 && __HAVE_FLOAT128X +# define _Mret_ _Float128 +# define _Marg_ _Float128x +# define __MATHCALL_NAME(name) f128 ## name ## f128x +# include +# undef _Mret_ +# undef _Marg_ +# undef __MATHCALL_NAME +# endif + +#endif + +#undef __MATHCALL_NARROW_ARGS_1 +#undef __MATHCALL_NARROW_ARGS_2 +#undef __MATHCALL_NARROW_ARGS_3 +#undef __MATHCALL_NARROW_NORMAL +#undef __MATHCALL_NARROW_REDIR +#undef __MATHCALL_NARROW + +#if defined __USE_MISC || defined __USE_XOPEN +/* This variable is used by `gamma' and `lgamma'. */ +extern int signgam; +#endif + +#if (__HAVE_DISTINCT_FLOAT16 \ + || __HAVE_DISTINCT_FLOAT32 \ + || __HAVE_DISTINCT_FLOAT64 \ + || __HAVE_DISTINCT_FLOAT32X \ + || __HAVE_DISTINCT_FLOAT64X \ + || __HAVE_DISTINCT_FLOAT128X) +# error "Unsupported _FloatN or _FloatNx types for ." +#endif + +/* Depending on the type of TG_ARG, call an appropriately suffixed + version of FUNC with arguments (including parentheses) ARGS. + Suffixed functions may not exist for long double if it has the same + format as double, or for other types with the same format as float, + double or long double. The behavior is undefined if the argument + does not have a real floating type. The definition may use a + conditional expression, so all suffixed versions of FUNC must + return the same type (FUNC may include a cast if necessary rather + than being a single identifier). */ +#ifdef __NO_LONG_DOUBLE_MATH +# if __HAVE_DISTINCT_FLOAT128 +# error "Distinct _Float128 without distinct long double not supported." +# endif +# define __MATH_TG(TG_ARG, FUNC, ARGS) \ + (sizeof (TG_ARG) == sizeof (float) ? FUNC ## f ARGS : FUNC ARGS) +#elif __HAVE_DISTINCT_FLOAT128 +# if __HAVE_GENERIC_SELECTION +# if __HAVE_FLOATN_NOT_TYPEDEF && __HAVE_FLOAT32 +# define __MATH_TG_F32(FUNC, ARGS) _Float32: FUNC ## f ARGS, +# else +# define __MATH_TG_F32(FUNC, ARGS) +# endif +# if __HAVE_FLOATN_NOT_TYPEDEF && __HAVE_FLOAT64X +# if __HAVE_FLOAT64X_LONG_DOUBLE +# define __MATH_TG_F64X(FUNC, ARGS) _Float64x: FUNC ## l ARGS, +# else +# define __MATH_TG_F64X(FUNC, ARGS) _Float64x: FUNC ## f128 ARGS, +# endif +# else +# define __MATH_TG_F64X(FUNC, ARGS) +# endif +# define __MATH_TG(TG_ARG, FUNC, ARGS) \ + _Generic ((TG_ARG), \ + float: FUNC ## f ARGS, \ + __MATH_TG_F32 (FUNC, ARGS) \ + default: FUNC ARGS, \ + long double: FUNC ## l ARGS, \ + __MATH_TG_F64X (FUNC, ARGS) \ + _Float128: FUNC ## f128 ARGS) +# else +# if __HAVE_FLOATN_NOT_TYPEDEF +# error "Non-typedef _FloatN but no _Generic." +# endif +# define __MATH_TG(TG_ARG, FUNC, ARGS) \ + __builtin_choose_expr \ + (__builtin_types_compatible_p (__typeof (TG_ARG), float), \ + FUNC ## f ARGS, \ + __builtin_choose_expr \ + (__builtin_types_compatible_p (__typeof (TG_ARG), double), \ + FUNC ARGS, \ + __builtin_choose_expr \ + (__builtin_types_compatible_p (__typeof (TG_ARG), long double), \ + FUNC ## l ARGS, \ + FUNC ## f128 ARGS))) +# endif +#else +# define __MATH_TG(TG_ARG, FUNC, ARGS) \ + (sizeof (TG_ARG) == sizeof (float) \ + ? FUNC ## f ARGS \ + : sizeof (TG_ARG) == sizeof (double) \ + ? FUNC ARGS \ + : FUNC ## l ARGS) +#endif + +/* ISO C99 defines some generic macros which work on any data type. */ +#ifdef __USE_ISOC99 + +/* All floating-point numbers can be put in one of these categories. */ +enum + { + FP_NAN = +# define FP_NAN 0 + FP_NAN, + FP_INFINITE = +# define FP_INFINITE 1 + FP_INFINITE, + FP_ZERO = +# define FP_ZERO 2 + FP_ZERO, + FP_SUBNORMAL = +# define FP_SUBNORMAL 3 + FP_SUBNORMAL, + FP_NORMAL = +# define FP_NORMAL 4 + FP_NORMAL + }; + +/* GCC bug 66462 means we cannot use the math builtins with -fsignaling-nan, + so disable builtins if this is enabled. When fixed in a newer GCC, + the __SUPPORT_SNAN__ check may be skipped for those versions. */ + +/* Return number of classification appropriate for X. */ +# if ((__GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__) \ + || __glibc_clang_prereq (2,8)) \ + && (!defined __OPTIMIZE_SIZE__ || defined __cplusplus) + /* The check for __cplusplus allows the use of the builtin, even + when optimization for size is on. This is provided for + libstdc++, only to let its configure test work when it is built + with -Os. No further use of this definition of fpclassify is + expected in C++ mode, since libstdc++ provides its own version + of fpclassify in cmath (which undefines fpclassify). */ +# define fpclassify(x) __builtin_fpclassify (FP_NAN, FP_INFINITE, \ + FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x) +# else +# define fpclassify(x) __MATH_TG ((x), __fpclassify, (x)) +# endif + +/* Return nonzero value if sign of X is negative. */ +# if __GNUC_PREREQ (6,0) || __glibc_clang_prereq (3,3) +# define signbit(x) __builtin_signbit (x) +# elif defined __cplusplus + /* In C++ mode, __MATH_TG cannot be used, because it relies on + __builtin_types_compatible_p, which is a C-only builtin. + The check for __cplusplus allows the use of the builtin instead of + __MATH_TG. This is provided for libstdc++, only to let its configure + test work. No further use of this definition of signbit is expected + in C++ mode, since libstdc++ provides its own version of signbit + in cmath (which undefines signbit). */ +# define signbit(x) __builtin_signbitl (x) +# elif __GNUC_PREREQ (4,0) +# define signbit(x) __MATH_TG ((x), __builtin_signbit, (x)) +# else +# define signbit(x) __MATH_TG ((x), __signbit, (x)) +# endif + +/* Return nonzero value if X is not +-Inf or NaN. */ +# if (__GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__) \ + || __glibc_clang_prereq (2,8) +# define isfinite(x) __builtin_isfinite (x) +# else +# define isfinite(x) __MATH_TG ((x), __finite, (x)) +# endif + +/* Return nonzero value if X is neither zero, subnormal, Inf, nor NaN. */ +# if (__GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__) \ + || __glibc_clang_prereq (2,8) +# define isnormal(x) __builtin_isnormal (x) +# else +# define isnormal(x) (fpclassify (x) == FP_NORMAL) +# endif + +/* Return nonzero value if X is a NaN. We could use `fpclassify' but + we already have this functions `__isnan' and it is faster. */ +# if (__GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__) \ + || __glibc_clang_prereq (2,8) +# define isnan(x) __builtin_isnan (x) +# else +# define isnan(x) __MATH_TG ((x), __isnan, (x)) +# endif + +/* Return nonzero value if X is positive or negative infinity. */ +# if __HAVE_DISTINCT_FLOAT128 && !__GNUC_PREREQ (7,0) \ + && !defined __SUPPORT_SNAN__ && !defined __cplusplus + /* Since __builtin_isinf_sign is broken for float128 before GCC 7.0, + use the helper function, __isinff128, with older compilers. This is + only provided for C mode, because in C++ mode, GCC has no support + for __builtin_types_compatible_p (and when in C++ mode, this macro is + not used anyway, because libstdc++ headers undefine it). */ +# define isinf(x) \ + (__builtin_types_compatible_p (__typeof (x), _Float128) \ + ? __isinff128 (x) : __builtin_isinf_sign (x)) +# elif (__GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__) \ + || __glibc_clang_prereq (3,7) +# define isinf(x) __builtin_isinf_sign (x) +# else +# define isinf(x) __MATH_TG ((x), __isinf, (x)) +# endif + +/* Bitmasks for the math_errhandling macro. */ +# define MATH_ERRNO 1 /* errno set by math functions. */ +# define MATH_ERREXCEPT 2 /* Exceptions raised by math functions. */ + +/* By default all math functions support both errno and exception handling + (except for soft floating point implementations which may only support + errno handling). If errno handling is disabled, exceptions are still + supported by GLIBC. Set math_errhandling to 0 with -ffast-math (this is + nonconforming but it is more useful than leaving it undefined). */ +# ifdef __FAST_MATH__ +# define math_errhandling 0 +# elif defined __NO_MATH_ERRNO__ +# define math_errhandling (MATH_ERREXCEPT) +# else +# define math_errhandling (MATH_ERRNO | MATH_ERREXCEPT) +# endif + +#endif /* Use ISO C99. */ + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) +# include + +/* Return nonzero value if X is a signaling NaN. */ +# ifndef __cplusplus +# define issignaling(x) __MATH_TG ((x), __issignaling, (x)) +# else + /* In C++ mode, __MATH_TG cannot be used, because it relies on + __builtin_types_compatible_p, which is a C-only builtin. On the + other hand, overloading provides the means to distinguish between + the floating-point types. The overloading resolution will match + the correct parameter (regardless of type qualifiers (i.e.: const + and volatile)). */ +extern "C++" { +inline int issignaling (float __val) { return __issignalingf (__val); } +inline int issignaling (double __val) { return __issignaling (__val); } +inline int +issignaling (long double __val) +{ +# ifdef __NO_LONG_DOUBLE_MATH + return __issignaling (__val); +# else + return __issignalingl (__val); +# endif +} +# if __HAVE_FLOAT128_UNLIKE_LDBL +/* When using an IEEE 128-bit long double, _Float128 is defined as long double + in C++. */ +inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); } +# endif +} /* extern C++ */ +# endif + +/* Return nonzero value if X is subnormal. */ +# define issubnormal(x) (fpclassify (x) == FP_SUBNORMAL) + +/* Return nonzero value if X is zero. */ +# ifndef __cplusplus +# ifdef __SUPPORT_SNAN__ +# define iszero(x) (fpclassify (x) == FP_ZERO) +# else +# define iszero(x) (((__typeof (x)) (x)) == 0) +# endif +# else /* __cplusplus */ +extern "C++" { +# ifdef __SUPPORT_SNAN__ +inline int +iszero (float __val) +{ + return __fpclassifyf (__val) == FP_ZERO; +} +inline int +iszero (double __val) +{ + return __fpclassify (__val) == FP_ZERO; +} +inline int +iszero (long double __val) +{ +# ifdef __NO_LONG_DOUBLE_MATH + return __fpclassify (__val) == FP_ZERO; +# else + return __fpclassifyl (__val) == FP_ZERO; +# endif +} +# if __HAVE_FLOAT128_UNLIKE_LDBL + /* When using an IEEE 128-bit long double, _Float128 is defined as long double + in C++. */ +inline int +iszero (_Float128 __val) +{ + return __fpclassifyf128 (__val) == FP_ZERO; +} +# endif +# else +template inline bool +iszero (__T __val) +{ + return __val == 0; +} +# endif +} /* extern C++ */ +# endif /* __cplusplus */ +#endif /* Use IEC_60559_BFP_EXT. */ + +#ifdef __USE_XOPEN +/* X/Open wants another strange constant. */ +# define MAXFLOAT 3.40282347e+38F +#endif + + +/* Some useful constants. */ +#if defined __USE_MISC || defined __USE_XOPEN +# define M_E 2.7182818284590452354 /* e */ +# define M_LOG2E 1.4426950408889634074 /* log_2 e */ +# define M_LOG10E 0.43429448190325182765 /* log_10 e */ +# define M_LN2 0.69314718055994530942 /* log_e 2 */ +# define M_LN10 2.30258509299404568402 /* log_e 10 */ +# define M_PI 3.14159265358979323846 /* pi */ +# define M_PI_2 1.57079632679489661923 /* pi/2 */ +# define M_PI_4 0.78539816339744830962 /* pi/4 */ +# define M_1_PI 0.31830988618379067154 /* 1/pi */ +# define M_2_PI 0.63661977236758134308 /* 2/pi */ +# define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ +# define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ +# define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ +#endif + +/* The above constants are not adequate for computation using `long double's. + Therefore we provide as an extension constants with similar names as a + GNU extension. Provide enough digits for the 128-bit IEEE quad. */ +#ifdef __USE_GNU +# define M_El 2.718281828459045235360287471352662498L /* e */ +# define M_LOG2El 1.442695040888963407359924681001892137L /* log_2 e */ +# define M_LOG10El 0.434294481903251827651128918916605082L /* log_10 e */ +# define M_LN2l 0.693147180559945309417232121458176568L /* log_e 2 */ +# define M_LN10l 2.302585092994045684017991454684364208L /* log_e 10 */ +# define M_PIl 3.141592653589793238462643383279502884L /* pi */ +# define M_PI_2l 1.570796326794896619231321691639751442L /* pi/2 */ +# define M_PI_4l 0.785398163397448309615660845819875721L /* pi/4 */ +# define M_1_PIl 0.318309886183790671537767526745028724L /* 1/pi */ +# define M_2_PIl 0.636619772367581343075535053490057448L /* 2/pi */ +# define M_2_SQRTPIl 1.128379167095512573896158903121545172L /* 2/sqrt(pi) */ +# define M_SQRT2l 1.414213562373095048801688724209698079L /* sqrt(2) */ +# define M_SQRT1_2l 0.707106781186547524400844362104849039L /* 1/sqrt(2) */ +#endif + +#if __HAVE_FLOAT16 && defined __USE_GNU +# define M_Ef16 __f16 (2.718281828459045235360287471352662498) /* e */ +# define M_LOG2Ef16 __f16 (1.442695040888963407359924681001892137) /* log_2 e */ +# define M_LOG10Ef16 __f16 (0.434294481903251827651128918916605082) /* log_10 e */ +# define M_LN2f16 __f16 (0.693147180559945309417232121458176568) /* log_e 2 */ +# define M_LN10f16 __f16 (2.302585092994045684017991454684364208) /* log_e 10 */ +# define M_PIf16 __f16 (3.141592653589793238462643383279502884) /* pi */ +# define M_PI_2f16 __f16 (1.570796326794896619231321691639751442) /* pi/2 */ +# define M_PI_4f16 __f16 (0.785398163397448309615660845819875721) /* pi/4 */ +# define M_1_PIf16 __f16 (0.318309886183790671537767526745028724) /* 1/pi */ +# define M_2_PIf16 __f16 (0.636619772367581343075535053490057448) /* 2/pi */ +# define M_2_SQRTPIf16 __f16 (1.128379167095512573896158903121545172) /* 2/sqrt(pi) */ +# define M_SQRT2f16 __f16 (1.414213562373095048801688724209698079) /* sqrt(2) */ +# define M_SQRT1_2f16 __f16 (0.707106781186547524400844362104849039) /* 1/sqrt(2) */ +#endif + +#if __HAVE_FLOAT32 && defined __USE_GNU +# define M_Ef32 __f32 (2.718281828459045235360287471352662498) /* e */ +# define M_LOG2Ef32 __f32 (1.442695040888963407359924681001892137) /* log_2 e */ +# define M_LOG10Ef32 __f32 (0.434294481903251827651128918916605082) /* log_10 e */ +# define M_LN2f32 __f32 (0.693147180559945309417232121458176568) /* log_e 2 */ +# define M_LN10f32 __f32 (2.302585092994045684017991454684364208) /* log_e 10 */ +# define M_PIf32 __f32 (3.141592653589793238462643383279502884) /* pi */ +# define M_PI_2f32 __f32 (1.570796326794896619231321691639751442) /* pi/2 */ +# define M_PI_4f32 __f32 (0.785398163397448309615660845819875721) /* pi/4 */ +# define M_1_PIf32 __f32 (0.318309886183790671537767526745028724) /* 1/pi */ +# define M_2_PIf32 __f32 (0.636619772367581343075535053490057448) /* 2/pi */ +# define M_2_SQRTPIf32 __f32 (1.128379167095512573896158903121545172) /* 2/sqrt(pi) */ +# define M_SQRT2f32 __f32 (1.414213562373095048801688724209698079) /* sqrt(2) */ +# define M_SQRT1_2f32 __f32 (0.707106781186547524400844362104849039) /* 1/sqrt(2) */ +#endif + +#if __HAVE_FLOAT64 && defined __USE_GNU +# define M_Ef64 __f64 (2.718281828459045235360287471352662498) /* e */ +# define M_LOG2Ef64 __f64 (1.442695040888963407359924681001892137) /* log_2 e */ +# define M_LOG10Ef64 __f64 (0.434294481903251827651128918916605082) /* log_10 e */ +# define M_LN2f64 __f64 (0.693147180559945309417232121458176568) /* log_e 2 */ +# define M_LN10f64 __f64 (2.302585092994045684017991454684364208) /* log_e 10 */ +# define M_PIf64 __f64 (3.141592653589793238462643383279502884) /* pi */ +# define M_PI_2f64 __f64 (1.570796326794896619231321691639751442) /* pi/2 */ +# define M_PI_4f64 __f64 (0.785398163397448309615660845819875721) /* pi/4 */ +# define M_1_PIf64 __f64 (0.318309886183790671537767526745028724) /* 1/pi */ +# define M_2_PIf64 __f64 (0.636619772367581343075535053490057448) /* 2/pi */ +# define M_2_SQRTPIf64 __f64 (1.128379167095512573896158903121545172) /* 2/sqrt(pi) */ +# define M_SQRT2f64 __f64 (1.414213562373095048801688724209698079) /* sqrt(2) */ +# define M_SQRT1_2f64 __f64 (0.707106781186547524400844362104849039) /* 1/sqrt(2) */ +#endif + +#if __HAVE_FLOAT128 && defined __USE_GNU +# define M_Ef128 __f128 (2.718281828459045235360287471352662498) /* e */ +# define M_LOG2Ef128 __f128 (1.442695040888963407359924681001892137) /* log_2 e */ +# define M_LOG10Ef128 __f128 (0.434294481903251827651128918916605082) /* log_10 e */ +# define M_LN2f128 __f128 (0.693147180559945309417232121458176568) /* log_e 2 */ +# define M_LN10f128 __f128 (2.302585092994045684017991454684364208) /* log_e 10 */ +# define M_PIf128 __f128 (3.141592653589793238462643383279502884) /* pi */ +# define M_PI_2f128 __f128 (1.570796326794896619231321691639751442) /* pi/2 */ +# define M_PI_4f128 __f128 (0.785398163397448309615660845819875721) /* pi/4 */ +# define M_1_PIf128 __f128 (0.318309886183790671537767526745028724) /* 1/pi */ +# define M_2_PIf128 __f128 (0.636619772367581343075535053490057448) /* 2/pi */ +# define M_2_SQRTPIf128 __f128 (1.128379167095512573896158903121545172) /* 2/sqrt(pi) */ +# define M_SQRT2f128 __f128 (1.414213562373095048801688724209698079) /* sqrt(2) */ +# define M_SQRT1_2f128 __f128 (0.707106781186547524400844362104849039) /* 1/sqrt(2) */ +#endif + +#if __HAVE_FLOAT32X && defined __USE_GNU +# define M_Ef32x __f32x (2.718281828459045235360287471352662498) /* e */ +# define M_LOG2Ef32x __f32x (1.442695040888963407359924681001892137) /* log_2 e */ +# define M_LOG10Ef32x __f32x (0.434294481903251827651128918916605082) /* log_10 e */ +# define M_LN2f32x __f32x (0.693147180559945309417232121458176568) /* log_e 2 */ +# define M_LN10f32x __f32x (2.302585092994045684017991454684364208) /* log_e 10 */ +# define M_PIf32x __f32x (3.141592653589793238462643383279502884) /* pi */ +# define M_PI_2f32x __f32x (1.570796326794896619231321691639751442) /* pi/2 */ +# define M_PI_4f32x __f32x (0.785398163397448309615660845819875721) /* pi/4 */ +# define M_1_PIf32x __f32x (0.318309886183790671537767526745028724) /* 1/pi */ +# define M_2_PIf32x __f32x (0.636619772367581343075535053490057448) /* 2/pi */ +# define M_2_SQRTPIf32x __f32x (1.128379167095512573896158903121545172) /* 2/sqrt(pi) */ +# define M_SQRT2f32x __f32x (1.414213562373095048801688724209698079) /* sqrt(2) */ +# define M_SQRT1_2f32x __f32x (0.707106781186547524400844362104849039) /* 1/sqrt(2) */ +#endif + +#if __HAVE_FLOAT64X && defined __USE_GNU +# define M_Ef64x __f64x (2.718281828459045235360287471352662498) /* e */ +# define M_LOG2Ef64x __f64x (1.442695040888963407359924681001892137) /* log_2 e */ +# define M_LOG10Ef64x __f64x (0.434294481903251827651128918916605082) /* log_10 e */ +# define M_LN2f64x __f64x (0.693147180559945309417232121458176568) /* log_e 2 */ +# define M_LN10f64x __f64x (2.302585092994045684017991454684364208) /* log_e 10 */ +# define M_PIf64x __f64x (3.141592653589793238462643383279502884) /* pi */ +# define M_PI_2f64x __f64x (1.570796326794896619231321691639751442) /* pi/2 */ +# define M_PI_4f64x __f64x (0.785398163397448309615660845819875721) /* pi/4 */ +# define M_1_PIf64x __f64x (0.318309886183790671537767526745028724) /* 1/pi */ +# define M_2_PIf64x __f64x (0.636619772367581343075535053490057448) /* 2/pi */ +# define M_2_SQRTPIf64x __f64x (1.128379167095512573896158903121545172) /* 2/sqrt(pi) */ +# define M_SQRT2f64x __f64x (1.414213562373095048801688724209698079) /* sqrt(2) */ +# define M_SQRT1_2f64x __f64x (0.707106781186547524400844362104849039) /* 1/sqrt(2) */ +#endif + +#if __HAVE_FLOAT128X && defined __USE_GNU +# error "M_* values needed for _Float128x" +#endif + +/* When compiling in strict ISO C compatible mode we must not use the + inline functions since they, among other things, do not set the + `errno' variable correctly. */ +#if defined __STRICT_ANSI__ && !defined __NO_MATH_INLINES +# define __NO_MATH_INLINES 1 +#endif + +#ifdef __USE_ISOC99 +# if __GNUC_PREREQ (3, 1) +/* ISO C99 defines some macros to compare number while taking care for + unordered numbers. Many FPUs provide special instructions to support + these operations. Generic support in GCC for these as builtins went + in 2.97, but not all cpus added their patterns until 3.1. Therefore + we enable the builtins from 3.1 onwards and use a generic implementation + othwerwise. */ +# define isgreater(x, y) __builtin_isgreater(x, y) +# define isgreaterequal(x, y) __builtin_isgreaterequal(x, y) +# define isless(x, y) __builtin_isless(x, y) +# define islessequal(x, y) __builtin_islessequal(x, y) +# define islessgreater(x, y) __builtin_islessgreater(x, y) +# define isunordered(x, y) __builtin_isunordered(x, y) +# else +# define isgreater(x, y) \ + (__extension__ ({ __typeof__ (x) __x = (x); __typeof__ (y) __y = (y); \ + !isunordered (__x, __y) && __x > __y; })) +# define isgreaterequal(x, y) \ + (__extension__ ({ __typeof__ (x) __x = (x); __typeof__ (y) __y = (y); \ + !isunordered (__x, __y) && __x >= __y; })) +# define isless(x, y) \ + (__extension__ ({ __typeof__ (x) __x = (x); __typeof__ (y) __y = (y); \ + !isunordered (__x, __y) && __x < __y; })) +# define islessequal(x, y) \ + (__extension__ ({ __typeof__ (x) __x = (x); __typeof__ (y) __y = (y); \ + !isunordered (__x, __y) && __x <= __y; })) +# define islessgreater(x, y) \ + (__extension__ ({ __typeof__ (x) __x = (x); __typeof__ (y) __y = (y); \ + !isunordered (__x, __y) && __x != __y; })) +/* isunordered must always check both operands first for signaling NaNs. */ +# define isunordered(x, y) \ + (__extension__ ({ __typeof__ (x) __u = (x); __typeof__ (y) __v = (y); \ + __u != __v && (__u != __u || __v != __v); })) +# endif +#endif + +/* Get machine-dependent inline versions (if there are any). */ +#ifdef __USE_EXTERN_INLINES +# include +#endif + + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) +/* An expression whose type has the widest of the evaluation formats + of X and Y (which are of floating-point types). */ +# if __FLT_EVAL_METHOD__ == 2 || __FLT_EVAL_METHOD__ > 64 +# define __MATH_EVAL_FMT2(x, y) ((x) + (y) + 0.0L) +# elif __FLT_EVAL_METHOD__ == 1 || __FLT_EVAL_METHOD__ > 32 +# define __MATH_EVAL_FMT2(x, y) ((x) + (y) + 0.0) +# elif __FLT_EVAL_METHOD__ == 0 || __FLT_EVAL_METHOD__ == 32 +# define __MATH_EVAL_FMT2(x, y) ((x) + (y) + 0.0f) +# else +# define __MATH_EVAL_FMT2(x, y) ((x) + (y)) +# endif + +/* Return X == Y but raising "invalid" and setting errno if X or Y is + a NaN. */ +# if !defined __cplusplus || (__cplusplus < 201103L && !defined __GNUC__) +# define iseqsig(x, y) \ + __MATH_TG (__MATH_EVAL_FMT2 (x, y), __iseqsig, ((x), (y))) +# else +/* In C++ mode, __MATH_TG cannot be used, because it relies on + __builtin_types_compatible_p, which is a C-only builtin. Moreover, + the comparison macros from ISO C take two floating-point arguments, + which need not have the same type. Choosing what underlying function + to call requires evaluating the formats of the arguments, then + selecting which is wider. The macro __MATH_EVAL_FMT2 provides this + information, however, only the type of the macro expansion is + relevant (actually evaluating the expression would be incorrect). + Thus, the type is used as a template parameter for __iseqsig_type, + which calls the appropriate underlying function. */ +extern "C++" { +template struct __iseqsig_type; + +template<> struct __iseqsig_type +{ + static int __call (float __x, float __y) throw () + { + return __iseqsigf (__x, __y); + } +}; + +template<> struct __iseqsig_type +{ + static int __call (double __x, double __y) throw () + { + return __iseqsig (__x, __y); + } +}; + +template<> struct __iseqsig_type +{ + static int __call (long double __x, long double __y) throw () + { +# ifndef __NO_LONG_DOUBLE_MATH + return __iseqsigl (__x, __y); +# else + return __iseqsig (__x, __y); +# endif + } +}; + +# if __HAVE_FLOAT128_UNLIKE_LDBL + /* When using an IEEE 128-bit long double, _Float128 is defined as long double + in C++. */ +template<> struct __iseqsig_type<_Float128> +{ + static int __call (_Float128 __x, _Float128 __y) throw () + { + return __iseqsigf128 (__x, __y); + } +}; +# endif + +template +inline int +iseqsig (_T1 __x, _T2 __y) throw () +{ +# if __cplusplus >= 201103L + typedef decltype (__MATH_EVAL_FMT2 (__x, __y)) _T3; +# else + typedef __typeof (__MATH_EVAL_FMT2 (__x, __y)) _T3; +# endif + return __iseqsig_type<_T3>::__call (__x, __y); +} + +} /* extern "C++" */ +# endif /* __cplusplus */ + +#endif + +__END_DECLS + + +#endif /* math.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@math.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@math.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5b220058cf2fa1ea8eb8c9eae0e911aa6a44698d GIT binary patch literal 38701 zcmbt-349aP_J5{nAuY8+tq45CSWrvtlC2vcQlMp#mRc$Tq9ILFh@?qPQd+o;!CkX(lE0-_K`ezTC{*bMLw5 zoO|xMXNG*kv7>+N-IgLrhT^tRu-NN&``Vg3#VxMzoT52~;yHm9PqC{hP(0fkE)IoS zi^HB!m`=`CS1{xW7P(tn4Mw-m<)5AG-G%Le;9ReNc43n@=y8Vw!TIOJ(=o^yQcR0F z%1fQ4jzXW;-_}t$+uv5)=naRcoo<)U7b=|N@wIw_h0Se#ci0>7htPWJS`w9n=eK%7 z#nlrgRp~zDKKtxqtEE`f?D83o^?mENZ7~(QSsgJ?`vPc}%Fkw3DC}(Z1zh1`;+xao z*3t;>p^@XAp6xMp`Mix@f7lmOn;4g7k1O03^mM0pA&(DS)~!vSr=f6@H{kSnTXdgM zxIx?xg?&z!Z+4*36{60^u|=Oi<9tX_yQ@{Ve*H(SLSVds&;u*&3$7O0tJwAx5!~2D}@+WSsYh3)^t=>prGszBlX%x}ZHy zcfjxVw1%mxaqZJS!Go8Y;fPDdG z5CUzDzF0L9g0KG+*IbZmbBCQF_Z&|XGfNr#BEvz&Gu^oWYH4%}Ly=bhX*#_9P)Akf;_k0}st@4thLJ z=#bZ+6o-6Zy;omJv`u%jY*Ccr~#=@y`GQsF-xV86-i8!X~P@7_(Z(d8G)mqFjIcddKYmueMst%9SiAe`a?rd>& zU@rI0_H!n@+&?E)dIb~s9Hr@G>~M!L?*>|0*qFjGJa)@Hot&Gl#-W{!p#Bgrs$@dr zv`T50rz2cU&Bqh~yV%Tqt2jHYWtt-62~22L4Rt!>oW(dU#0(!}#rPHOSU)e0g0^wM zT%2NtRLq8&PRG#E3`?h5q0gAQ6aTKMM(3t3n;HluKTE)bu{k;%bavBcZ1#lPN0c#C6OrjJ?%PO&@#8h(}Gn;b30WNCnIs4joRtrqznb!AM`Z02f2?MM?tj3 z<(}K_3N{tH+QNb4Jxn$&vEfQ`4%D#hfpALVudpZx@@qLvRChn-lklcBJrJ$Tb_I z1*yi8GL~pkbAY-`No4ei4{VORbvaP3V9+%`>E4k&DrQC?fdi!9=%|a(WqaKn9j-<%9At0U z$t|YhbjR^tD`gZeaJ9oh3Y^2Tc2rGG*{d{i2x?b1 zH}m1wFh5!Gbpv)et{6PzH_I&m&p?( zkTXSBpkUG5g{^Q|J!Gm9af^&jfJ+^;jI9!NtJ4ziS`R7A&AlO3Q11lF2%8Q7BNP(1#IDXXUFHd zUNCDf`i5nlCX~`?+K$nCR@Slu`(&|3$Z`4m8`)z{eOtHcpiU~*VW~gn8HAvHpa0?%XdDbdHtAgyNt@Z zMf18%;Ow&@2hCpcD^>m`#Su6kir*3Ek1AbolRD`%N&L<=H1Q2&3$VQthMm!ONaCbA z)avtw6AN`5w>9R5Jk|uJSvx3Ezre}2qnJ#nyz698-J~2kzbla*T?I(cN(v1Xa`J_$ zG$uP$kSrB;S6AWBu*gVEGh>;q37ilNyOd4RL|Z0c32VHDCy6U$DG6{Nc*H*OE)0z# zcQn}!Wf$W?cPa}`Y|FSkUHaiX602!xr_rU_xD>0Kwff6${UK$mddd%p;jbVP_YBJ` zNxZ$Nl~H#9+gS5x*b+%5^q1?@ak|H&Ic`3kB&v)Up{i)|!D4NjDZHQ;B}~W2Z6bfCC>pS1Er3bzIQ!@ zeDswyRNS^#!e_Oe;x0L+L2R=66Kr0K0q<rH+XJg+0=?BfOHeZ)Y?`EVDk6XA6JK%|bCLz77Ex_hu?)>Tsfqo~2p0cH8GP5j1 z4O{1`Aa!Y{`OXHNbz7vc3T;N>4+6V7U5snAmc4vxVUYvf>brcF4UO(oS^}zucDYv> zM+ZyVB%?5jbyU)9^yesk4{Pi3eF}9dDomiRg5?xxVWIIrP>1VU9;l;}R1}qMV0iV` zsc}pqspTuXa+~ zf=_oPr_T{)YP$?LQM;9dE4J@)+=jD#^DYvA^qY~`A=UDk@nnuivtQjs<}XjR1-}?G z#$GcgnfMVCCZsmv=yDmyvPpy9@SH9}hiui#Vnc1gpa+SM$7LG1SE1xh9fD&mdL~+* zyL@GeB~*8!N;=EgIC)djtBJ=;)+CihgH@#)dC)GzppYcz;z8&*OT%|)bQM)A5b8)I z9e&Y14acubL#w@)Tg60V$ODXNZ7i!at0R$EhGYsv;#@(B{v>kQNck{R(yXZ~L=ahU zG={YBM)YNYPr&X#V6GRtWdYTZOEeqn*TS|g5@rHu`R4V{3(VD*fBl-3_JMzMy-iUM z;V+IP(iHV%YkU&V3HH_|ac}GvY(o-HsFRMIoy^+;@kvDTf~1~P_Z;MRlDuD8)61h$ zlITX%J=J-OK_1<$Dj=_NW4E5rdv!u?>Q)tu=)b!4gf7vo-Kv5SH5t3ZUiL(Ox1aEL z`-zp^e&UC2JrP~S$fnfpFhKL5<DF*ojT(faK1=oSNo{sBTxEAAT#kB(0 z;kb^$wF=i7TqomtA+FPLb>X@Q*XwazhU+R^AHsDru3K<@8rN5F{Wq>Vas3F_k8$0D z>sPq$!*xHdhj8s_G{{-TOu0X<#(ZT5zck%m`xu(_E>Q=-}F#D?BbL*KrACHW&`UmOJ~ z41s6H@L`PA#S z1hn}3Ix)m{f!Ho0whP2|Da3AVxax1ErfL6?P;v>5j!0$B@U`3Cm2x%2(yQ|C2|rTz zPz*88W$0R-v%v}~9R+4*gAHK*P&3y2f%ZJs!z@Y82XFGzve3h!K(@3Lv^^yU~ zPk#PrdgSuLqL%)1wt5UouLl48-`5XM`{!_OXUZw545!Nd(|S;|hMv2y_vhDbIzRI8spma^`9yz* zB%hqt7e{{NgzZ~;b*%X3jf^SB(r5&-#@sNyBh;i38qi+tY z!(hl{CrM5Pnbfp=R4zr%pEvcfwOcFww8zLeEk%ky z{9?+kN6+}5B=0t6<0y(8+_Ck@<`Ey(YKB*gc&DC3X=5i2RM9W0^qftj-}!0t>(?e0z0Ojnas^|oV(lPT zL)J1NYZ;2HWkA+WP-HC}c=gERl^LTVxwU~O{`LEgXCyfjLXer37b(d-`M$FBC4bS# zTFs+BUq0~BOD|SrqA?Kg!L%U69LRGz8-$wo>j#3Tz)GExnh81Ro0=~VNab=+_T)7C z)1RDpzfiP$mvsCp?Vm9$ac@a#qbeqZIDtHm1?3cUHAU%a3c8x6bai+0`Pr{7IhGkQ zI*(lY%Y3;_mG_9yAx&3B?>h}Hw>B!96S2H+c8t_0ETsV!Dy&y=XJJJ3v3jN*)=s*s zm88|KfGX#VIa#)F?*0Mf+w>L^?^3zcCgu&J_dliWOIwl9Snrb*gQ5j2Lmn5 zt!A+!7Ai7GKNx;6rQj^f1~#7>3>n;2*|_VS_h)%u9VWV=C^5gFBZCI@Mn`TNbX!r1 zberL}B6^m0B=T*=+V{qc{r3#q1dUjA~O=rH&3mUY=q*z(roycGR_98iu+Qgt|5?E?;}%qTTaEUBV(M)$q>5 zwCE<(auc;kL8#@Ujq65_${F~wZY_3O2de4Zn7^Z%zf)rrglb;1o>@Q9vFUHI16S$u zaZ$nG6}ASL8_K_F5HchA$lT~Lx3)i#Zp@4l&K9A`p}`=;hF1lucSRW|GP#?d!bdP8*{ zW2DSE-_WlgwIn;O2~Ovwit{;%;hW`StQjY#mE#zhDX9~sBJFrMGm{=pNt=Wzww@kN z!F&R|f$_|8Wz@?C zXT#*$s>=GRDGj3Inj$pbjNboY`Xi4u{14O70@aT5UXLuxD-Ld6;Otykb^YX;8CCU@ zbt)A

    hih)SgepB&wi!3bmD&ynn%kmDkwS?txNvlu}|UF~2Yh&w|3U zsb_)$M|_YBk&6yJ^VpWxzWJucIpzHN2CLK7%qCP#e`0>X2(jPId6uFwOPSSDT2^kg zmY0?|%1Uewhs9FvaM(+2R*R$DQDL!Hka#=@+|3(HBKAR zuA88cR);S37nQcP$Z9LMmsMCx%PbWoC01KWnZ3NC)LK#wnpT^F}`vk~nLpuK_k z%F%L#_Iw^>WUZ#1LC>Tq!0-V2)d5>1W-%_sji?5oqa=gwj@m0tFaa+a5= z^z21ehqa`_Rtip*SCm!QZT50Usjbvux0l;(WfdhBTY0&I`nVqS)~Dt|jyPJZ@HN!y zma+H$bLCAn&PlbRi>i*Og(^jiWQE=8D6^JZN=hm!93|kY1M-3{+N_MPWu+yhd?eR` z;@Z?9pvch@h2ll`)ZYAD&awwl`Q&l7Dy5Tsqn%WXRjSq^u&or`aahXB!B)G&Qf3Ev zo1?VcYOz?$D{NMK8TE4wsIE!P167WeDpY@Y>G0A*?}iI&oPuIjlp+{$o5Kd#ttf|RQ6Fyy)!V6$9Em=D z6zXYMe(dzM8qMc~^=txu(a=uXCfo+vw~*6*W#FR@hEVBVnorR5HbwXC87)(zGM6Eu{OEB^{~Wd*U0 zBf+|h!#}Jj^!;ARttaPQCzGmWUN=nYa!_1OCY2*$QeXSW(z2HieYHZER8CW4Zn#O+ zQtgIGy%AJzBy+=&FgM?CJ3RL4_dXr3^>JY3`o&r~?i4ZpmO8rS`Lu&WKBZG%k@K+zq#<4dmL$<>KfD#i&1i&2O&tcl@p+ zBnWoHzJ)e-nfX=jvRH*_-qf&n7Pks!Ew z)JZ*ed#eAgt_?4&tRLHXQ7FnVzPa%Je>MGzm_aJ82a7tb22Z`Ex%|F9d!FE`PR-X? zN$ybzc6CF~{b;?Pj3h_Gtr#*UuWIV-)FA1()xz8sv@urCd2y7e!|t$E!2Pwty|cM3Q!}%RQbDpCmc<8> zKC+-3348Y0)m6T||IC2kD_vAqyu5_1b;+D`!&RFLT60qe!JKe(rJ~i=RaYIn<-+T~ zj9M{-S9PtJ-Nwk;ZQZhBvq5$?Suu`;6}!6nl;>uC(G%-8?h4XKYPc#&MNhlo9?k>F zdBjzY1XpWXzbso_d)@njB=s|nWVDyvAlVF(%|wzTLGt9Sjc*J*>8+OpNxnMP2(0KP z`J%Ko?grJ3pt_MHmLtL2n z$-q$#WI|qu$v6_>r0;rdeghi=x_%ES5J!U7bNiJ{8@BYZ z50qeAU47M<+RBy$IGQ1ELdhm7 z;b>-tJU|+VV;CDPX%LPPK$$?9ga#wSX|Pm)G6x#vkcxnusKhB*fUZN?byRjI(4B;~ z0&OMq2GAP}Mbb@&Kds&Lw-5-AdJK0pjIW=3A!B)eG^)SEmg)=*ka*ZG4SBPvI0m9q zCjp&A=oFw+2=xQ%M`$+~vRgV6o$~(EWcuWrExV$PN0(H~7A-w~hobj7tzF(docgbG zyDD5xXMteB&{)>7&i6r=`$#N0!q7=lE2)!F?v3vCminRdCjgy5=u33;ODPu}J@Z7* zw$oUs zII5N(N6F(|&PS9F0o01H&JvOr~d2xc{rK`c-wVQE@V3sge1K%ImID#{{tGbg_1%lkYg>c@Hy&U^*SmH}OiMkSBOAt8N%JAjxuwhnIhaT<-CM-G|sgOt(VGI zEuQd?wd=-TFs{mpEv#x#R2>zyQ0oWGX`Ag~37pO5Jn{pEHe@oJa4_qf3BN6q+4jiHH>9${>$2|=gAMx{9W%91 zcl@{KY{y{XJW-+AyrTY%uWbc`_(C5QX%<)rE7;Q0^%wW7Cq>YTB3ejsBxLI2UiWUC zf6nM5u|3(JIs*B__2@|f=B9$QT=c{`aB#o%gC95$bLX~l`&-tgCX z>(5Rw*mgX5yur3>2OC+sV&La%@B%V--#`eyp`qc3dzg|eLkMINf|07O z6x225g(AwPrVnI4EYf{=>&6oU_oNPcc0^b9O@XaIRBYwcvxbMUQ^<`6@-B8pg4fh%Rah zC3!p&cgNE-#88bfPpQE=*nP-VvS1w_Qar8-uQJHoz_8wJOTor>3T=E7a>iFvWe=+GP-PrBo{y6GRKk%%z5^w9 zPzgsi`CgRVOC=mRddYjGu{fAtwpW^ogU$E9Lo9zMN4G~xZ@EVbbBG534It!2^SmjT z8{`mBh|m>4R}i`z=x#zAfHn}?0kngm$T_8j|NUj>?YDq+>Yq{G2Ai{u)`~A;)%YS= zpI)#&y^L^^BI!S0v*11ZmD@0#;+Y;|!0^xXbiFB+P5W{lL_9CGA9%(D&Ea!I^-L|)niDa_`;;kuc+PN;!dXo5PriD()qU>c zKcgn~F9obK;b75*o_MFFrxDSH$ZO{}j{ZLQ67AOWAZ4tqofd6-uzh7B*x!KF|(bd0{RT-NPPQ&Jc8DZ1Ge z?E!NqH4-CSo@x4hz>++SZzwhn?bMfP$L);zBW$iF^FcWYiOu&s~ z0*0p)LER^!tOclr&}}Ie`L>ivD0>#_{w%5cD?qOh+6lCi(4{Z|my!vnUp^#d?7=xB zc^+7OeeGnBR7EmcnohpqQ<&bKGBUO1C|}{b$OMf|C+vtORE|ax<#?L9v+)iMu$oX= zgoH|#)_C>>ZL2z5TNK@3@~tCTRNPgxLzR+5K@Sn=h*cD56_-nV=G5sl=P5$^{}Vb% zP$iSzzL43zB)tsvlhzU!kzERvJef@5-WM)f^5TFV_bRf*65Uie7G=896`yOuR&eqN z$lD0orr{{4jN5tBPP^vaXLpQ`sFK21O32Mw6U2X-0CrH7Rbv{QwGHFV%5(9x(i+J;crdT40ON@2(y4x$S-uC$zNdf; zL;Iv0g?SP9z>yRLA|t=wpRr=~)nDfeH!yw)N{%3k6S;yP>GGLb1AYx}z-z(%|m znA1yQ*?0_{API~1Y0;G}Loze$kRqfRFu~GVEmj04DVf9qlB;teSLc!)nZi` zgd$T>?kK4uqXL$3dd75|XJyR7*_YvCw$g_;O?}2Zpvy7eUv6Y&%MpQGZe;G#?LfB^ zS_ia_(1XUYc!%{8{JI(bZAqzFWJ9fvjAsWQW&HInFr7?$JtQ?cuPxV`acOsw;xkp*RZupZ zXDQ0IcjCKQi_dxgd8c#SqzR+PFbS%vuSNFql!nUs1{T{LUsXA_s@^%FrfyPIO;v3} zWy6HYEYy36;6t|`mHPMY?@yt#(uxn>|7m@o`tU|2rJ?fkCQXnSRRu;>(bgP^MeRD~LrMBPGQkW)C{q%+Hx1Ig|FF zITCx&s}DVsxw3uP>pbUNWVovx)D$PkH>XFU$@JTi3%;E;BsmgZ@{PAVed>lu{XbR5 z4IpEpX(FuRLeoNK8}E@uO zw?Bnh-31uB1*xbn^6t4$=H#}X_TLzaHKrQ;cBSb`M)5IFe2gesQKyyabOX5w-G(}E zqdM0Ctt0dh&_jf_0Bs?311R1=6t}i+?AtUs<9hCWfUdf5SNsvOdu*nB4ndCRD9FK) zjR}BBK7csO0gAJ5lrJAa$q_2yC|^Difr=9;^1@L8zWkDdgN1Q8vdMmw_^E^=o7{nt z4l3cuCf|;d+o^;jhrAvo>#2kzM~3_z$bToXILaZ+=!YoYl7=Wt8bw+91NA2~2aTFT zag-oXkkI8omlIkIw3^TZKo1al0q6yWBGZ2JxIcJsTB$b0qyx-T_c>yIP0k_@30X{_XChEK6K^iDKq| zrX>kSVo9?6f}&dMeZ8kd$Gg;#KoIbQt{_l$4hh2f+2=zLa2A5F_^IhnoVBaphh)`R zt_REd(A>qvdKLTo}Ce2{Ku5~ZHw}X;dIoi z3Z5v_b_oALgxLC)OHWTO zrb#45fyAg(NC(ag31`AN^`hM`488z+pwYknl?9cfM@eG~#^OA#U>wd9izbd8CDjzw z;9OT!hw~K6l0oep<-=g8)Qo|X7 z#*=`h$omnp+ApzGk7MYfN_q;w0}4Fz-4w8|0RIfM5E z1;Yj(#^lrc{y1guixXdoV+c5rn{Y66!&1=@ini0rj$;hd3aIiFi$5SqO^qd`^EsANHUSgj@uBM9e_=cLBIgjzBRM6QDS8sa?OUmP@nX%R+ z{|0yOH_E!>s7{tqB2x)RGvq#S-1?-jR6veq$jzv%nJVL`S#Cv1E0u86Brib80xIFC zS-uk`cTx#Q&GLOHxsOUXnv*Uc1{V%XESIk*e9fLI4E+V@FN7{dQ!Y&bSL85In9!9# zR}xwSw1&_|ppArH1bUI7$V2|0-~9N|8+I#h1O`?UlcK!a1dat`pB>i7P77U*#3uj7 zujdZ=+y90QxymFl4Kj=u)zQIyS!0d8vOgT85ft6MICCBt zBKL3jdfC+zpTK(nbrbNA>V>d>Cz^g(I|?zXg{c?~1&MZuZ=|T1IV^0Il|^BzUB;34 zIvU?)*k!aZypo5lb|GxFi^5jTJdG(q_qx(|^ z11wfy>mA`*IJD*3oP^r39<|XOOX^W3;QNxQdPQ|pB&5_W)J%N#dX-(&CRhbOXLvBGg zTi9v>!Ps&fEWoe=ZqW+16)WEXbO)jJKOa?^E} zU4C>#^&F`nwi{F=I&m*LaW7dzj)d#IXXd2C7mT;xAe>&*sk-r^EP>0*G$bGG%%|ld zM-bbkxFzlFNbk*Ib59ZT}x&FS?C8!hHXs{Et^reZp;tCNbIjh>%P zjyFewp?9q|wDlPBVV&5ct(rEbs;&W5t9w$hzob)bTcLtmjqEi6j%>ot#M=}EUg4|BqHzj(HAbjK%}Jq*GA(exvI zvFAtAPiJ=8?^*f9ruCop$j3W6EYXoI-&AX&6u~V@=Jjb>zg1!oD#=gcNHq4;i;p<% zZx4Qjl!b>{Vil-Ul!X+Ctc;>Si?bI)fp8Y0e%<2R*Dl*?*^N|VO2S9O)fz<^R-O*L z!)~)X$~NKI6Mn-`;&}1YV0{QxE89d;?a(QtEVei^ zd}Bo&PqmOo-&kUuPW}3?xjRA7Nl_4v#Lk-do}TJ7c0|*;%aOu8l0u~!NK64%)424UPwohBR znT_QqGqG$U(E0KMB@J27Jqz)ZBf-xtr~myo`@j2VE9OT1B$f74Q5vt4Z^$bzM2LIL z*jSf-&;EUM3On=lk90WmF!Q|HZRv0Pdh(=0d}A`U&1_$iCa?If=9DvzSkY!HwV5N) z=5ya!V4PF&CO)kq-hfBF8W|R)x;uFl5JX9~p=uk6EJwmydVIg3&rN5H9<0t}s97Uk z%0$NJG4_J24!iX~v=IWq5Q!H@LcGdlDLD2j`l<~sRSh*NC7SoL!Rm;<1wx-i7NF0rquf#o9(mfni%PUZ_ zf=W25mN%nhGnH_JSCEFlL=B-=kV-(dgkCM0h1+J)D@aRGwv@{50=kRP(?CxXdK2hP zh9Vo%rfr>BXlq82EHh4;WnUGdj>+Z9l3f}Oo)4#WAV)sME`6{u?UDWVXZDi!#7M;0 zB^!w7I#hAr{~;nHL1ZKeDMw;zyzAVn&VMcA<@5M5h*621fE_GGtFtnS`*ssi84W6< zX#(a*Q2D)I@m(Jr{dkwwzJQdvveTB6n#!}_cg!+k5vQOcVhUar!)g&G2mHUe@SVT! zd}8u?u!q0WN=sSQ*U=OUGn-tnncSX>(UFU3$DAYK&Xqs^*sO))YX*5kZE&yf|LAy{ z&<~ZUrdVhDT74wCefD(=MXTLyW&!>;5f5F^qltsIx<5tH> z0d?yVbn6mwKR6QaP<{FJ=h^+{w4KH6Nhc{_)`UqxGDd`?U<{~?At~TUNWrT&y!qty z*$4mNo?YCe$UHzzx03Vws9P=&bdlBKNLa0N{y2Bv>+RMn6f@a5zlF@CmXFEwkO;a# L&`kt6QV9M(r1u1` literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@pthread.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@pthread.h new file mode 100644 index 0000000..44dd707 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@pthread.h @@ -0,0 +1,1173 @@ +/* Copyright (C) 2002-2020 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_H +#define _PTHREAD_H 1 + +#include +#include +#include + +#include +#include +#include +#include +#include + + +/* 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; + +/* 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); +#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)); + +/* 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 +/* Yield the processor to another thread or process. + This function is similar to the POSIX `sched_yield' function but + might be differently implemented in the case of a m-on-n thread + implementation. */ +extern int pthread_yield (void) __THROW; + + +/* 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 cancelability 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. */ + +typedef struct +{ + struct + { + __jmp_buf __cancel_jmp_buf; + int __mask_was_saved; + } __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 ((struct __jmp_buf_tag *) (void *) \ + __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 ((struct __jmp_buf_tag *) (void *) \ + __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. */ +struct __jmp_buf_tag; +extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL; + + +/* 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. */ +extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 2)); +#endif + +#ifdef __USE_GNU +extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex, + clockid_t __clockid, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 3)); +#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 +extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex) + __THROW __nonnull ((1)); +# 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 +extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr, + int *__robustness) + __THROW __nonnull ((1, 2)); +# 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 +extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr, + int __robustness) + __THROW __nonnull ((1)); +# 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 specfied time. */ +extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 2)); +# endif + +# ifdef __USE_GNU +extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock, + clockid_t __clockid, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 3)); +# 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 specfied time. */ +extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 2)); +# endif + +# ifdef __USE_GNU +extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock, + clockid_t __clockid, + const struct timespec *__restrict + __abstime) __THROWNL __nonnull ((1, 3)); +# 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. */ +extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, + pthread_mutex_t *__restrict __mutex, + const struct timespec *__restrict __abstime) + __nonnull ((1, 2, 3)); + +# 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. */ +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)); +# 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 ; + + +#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 + + +/* 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/@@home@ado@git@ssp/@usr@include@pthread.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@pthread.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a0cbad2315a065d97fc3376aff3872e590ce451a GIT binary patch literal 75457 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@sched.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@sched.h new file mode 100644 index 0000000..60c9c3c --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@sched.h @@ -0,0 +1,131 @@ +/* Definitions for POSIX 1003.1b-1993 (aka POSIX.4) scheduling interface. + Copyright (C) 1996-2020 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. */ +extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW; + + +#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/@@home@ado@git@ssp/@usr@include@sched.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@sched.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3e18089fbbc3a8abbbb1db3e6f1cc60086799553 GIT binary patch literal 19028 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdc-predef.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdc-predef.h new file mode 100644 index 0000000..eaf0a6a --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdc-predef.h @@ -0,0 +1,60 @@ +/* Copyright (C) 1991-2020 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 +# endif +#else +# define __STDC_IEC_559__ 1 +#endif + +#ifdef __GCC_IEC_559_COMPLEX +# if __GCC_IEC_559_COMPLEX > 0 +# define __STDC_IEC_559_COMPLEX__ 1 +# endif +#else +# define __STDC_IEC_559_COMPLEX__ 1 +#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/@@home@ado@git@ssp/@usr@include@stdc-predef.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdc-predef.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..64f2fd42496555807962fbc89bc5f9b09b6f0b1c GIT binary patch literal 12597 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 o&5~69yu!i2Z}L5G5`Po literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdint.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdint.h new file mode 100644 index 0000000..2df07e4 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdint.h @@ -0,0 +1,319 @@ +/* Copyright (C) 1997-2020 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 + +/* Exact integral types. */ + +/* Signed. */ +#include + +/* Unsigned. */ +#include + + +/* Small types. */ + +/* 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; + + +/* 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; + + +# 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_C2X) + +# 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/@@home@ado@git@ssp/@usr@include@stdint.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdint.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2b69efd34720541b9ea1d70c735e8b9511afbde3 GIT binary patch literal 23140 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdio.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdio.h new file mode 100644 index 0000000..5a10a4d --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdio.h @@ -0,0 +1,875 @@ +/* Define ISO C stdio on top of C++ iostreams. + Copyright (C) 1991-2020 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.19 Input/output + */ + +#ifndef _STDIO_H +#define _STDIO_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +__BEGIN_DECLS + +#define __need_size_t +#define __need_NULL +#include + +#define __need___va_list +#include + +#include +#include +#include +#include +#include +#include + +#ifdef __USE_GNU +# 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 + + +/* Get the values: + L_tmpnam How long an array of chars must be to be passed to `tmpnam'. + TMP_MAX The minimum number of unique filenames generated by tmpnam + (and tempnam when it uses tmpnam's name space), + or tempnam (the two are separate). + L_ctermid How long an array to pass to `ctermid'. + L_cuserid How long an array to pass to `cuserid'. + FOPEN_MAX Minimum number of files that can be open at once. + FILENAME_MAX Maximum length of a filename. */ +#include + + +/* 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 RENAME_EXCHANGE (1 << 1) +# define RENAME_WHITEOUT (1 << 2) + +/* 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 + +/* 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) __wur; +#else +# ifdef __REDIRECT +extern FILE *__REDIRECT (tmpfile, (void), tmpfile64) __wur; +# else +# define tmpfile tmpfile64 +# endif +#endif + +#ifdef __USE_LARGEFILE64 +extern FILE *tmpfile64 (void) __wur; +#endif + +/* Generate a temporary filename. */ +extern char *tmpnam (char *__s) __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) __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; +#endif + + +/* Close STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fclose (FILE *__stream); +/* 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) __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; +#else +# ifdef __REDIRECT +extern FILE *__REDIRECT (fopen, (const char *__restrict __filename, + const char *__restrict __modes), fopen64) + __wur; +extern FILE *__REDIRECT (freopen, (const char *__restrict __filename, + const char *__restrict __modes, + FILE *__restrict __stream), freopen64) + __wur; +# else +# define fopen fopen64 +# define freopen freopen64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern FILE *fopen64 (const char *__restrict __filename, + const char *__restrict __modes) __wur; +extern FILE *freopen64 (const char *__restrict __filename, + const char *__restrict __modes, + FILE *__restrict __stream) __wur; +#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 __wur; +#endif + +#ifdef __USE_GNU +/* 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 __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 __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 __wur; +#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; +/* 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; + +#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; + +/* Make STREAM line-buffered. */ +extern void setlinebuf (FILE *__stream) __THROW; +#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, ...); +/* 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); +/* 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 __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; +/* 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 is in + effect, this is handled in bits/stdio-ldbl.h. */ +#if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT +# ifdef __REDIRECT +extern int __REDIRECT (fscanf, (FILE *__restrict __stream, + const char *__restrict __format, ...), + __isoc99_fscanf) __wur; +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; +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 + +#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; + +/* 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 defined __REDIRECT && !defined __LDBL_COMPAT +extern int __REDIRECT (vfscanf, + (FILE *__restrict __s, + const char *__restrict __format, __gnuc_va_list __arg), + __isoc99_vfscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))) __wur; +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; +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 /* 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); +extern int getc (FILE *__stream); + +/* 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); +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); +#endif /* Use MISC. */ + + +/* Write a character to STREAM. + + These functions are possible cancellation points and therefore not + marked with __THROW. + + These functions is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fputc (int __c, FILE *__stream); +extern int putc (int __c, FILE *__stream); + +/* 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); +#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); +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); + +/* Write a word (int) to STREAM. */ +extern int putw (int __w, FILE *__stream); +#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; + +#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; +#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. + + 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 __ssize_t __getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) __wur; +extern __ssize_t getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) __wur; + +/* Like `getdelim', but reads up to a newline. + + 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 __ssize_t getline (char **__restrict __lineptr, + size_t *__restrict __n, + FILE *__restrict __stream) __wur; +#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); + +/* 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); + + +/* 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; +/* 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); + +#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); +#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; +extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream); +#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); +/* 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; +/* Rewind to the beginning of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void rewind (FILE *__stream); + +/* 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); +/* 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; +# else +# ifdef __REDIRECT +extern int __REDIRECT (fseeko, + (FILE *__stream, __off64_t __off, int __whence), + fseeko64); +extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64); +# 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); +/* 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); +#else +# ifdef __REDIRECT +extern int __REDIRECT (fgetpos, (FILE *__restrict __stream, + fpos_t *__restrict __pos), fgetpos64); +extern int __REDIRECT (fsetpos, + (FILE *__stream, const fpos_t *__pos), fsetpos64); +# else +# define fgetpos fgetpos64 +# define fsetpos fsetpos64 +# endif +#endif + +#ifdef __USE_LARGEFILE64 +extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence); +extern __off64_t ftello64 (FILE *__stream) __wur; +extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos); +extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos); +#endif + +/* Clear the error and EOF indicators for STREAM. */ +extern void clearerr (FILE *__stream) __THROW; +/* Return the EOF indicator for STREAM. */ +extern int feof (FILE *__stream) __THROW __wur; +/* Return the error indicator for STREAM. */ +extern int ferror (FILE *__stream) __THROW __wur; + +#ifdef __USE_MISC +/* Faster versions when locking is not required. */ +extern void clearerr_unlocked (FILE *__stream) __THROW; +extern int feof_unlocked (FILE *__stream) __THROW __wur; +extern int ferror_unlocked (FILE *__stream) __THROW __wur; +#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); + +/* Provide the declarations for `sys_errlist' and `sys_nerr' if they + are available on this system. Even if available, these variables + should not be used directly. The `strerror' function provides + all the necessary functionality. */ +#include + + +#ifdef __USE_POSIX +/* Return the system file descriptor for STREAM. */ +extern int fileno (FILE *__stream) __THROW __wur; +#endif /* Use POSIX. */ + +#ifdef __USE_MISC +/* Faster version when locking is not required. */ +extern int fileno_unlocked (FILE *__stream) __THROW __wur; +#endif + + +#ifdef __USE_POSIX2 +/* 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) __wur; + +/* 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); +#endif + + +#ifdef __USE_POSIX +/* Return the name of the controlling terminal. */ +extern char *ctermid (char *__s) __THROW; +#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); +#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; + +/* Try to acquire ownership of STREAM but do not block if it is not + possible. */ +extern int ftrylockfile (FILE *__stream) __THROW __wur; + +/* Relinquish the ownership granted for STREAM. */ +extern void funlockfile (FILE *__stream) __THROW; +#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 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 +# include +#endif +#ifdef __LDBL_COMPAT +# include +#endif + +__END_DECLS + +#endif /* included. */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdio.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdio.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5b784e93625c9555dfe975205e7d821536de0d9a GIT binary patch literal 55381 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%0AvFnHEKmm+0Ku38AW4lDh*23Hw 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 C0$Ml# literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdlib.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdlib.h new file mode 100644 index 0000000..e347063 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdlib.h @@ -0,0 +1,1025 @@ +/* Copyright (C) 1991-2020 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.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 (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. */ + +/* Convert a floating-point number to a string. */ +#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) +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)); + +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 RAND_MAX 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)); +# 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)); + +#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)); +#endif + +/* Free a block allocated by `malloc', `realloc' or `calloc'. */ +extern void free (void *__ptr) __THROW; + +#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_size__ ((2)) __wur; +#endif + +/* Abort execution and generate a core-dump. */ +extern void abort (void) __THROW __attribute__ ((__noreturn__)); + + +/* 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)) __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 + +/* 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 + + +/* 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; +/* Convert a wide char string to multibyte string. */ +extern size_t wcstombs (char *__restrict __s, + const wchar_t *__restrict __pwcs, size_t __n) + __THROW; + + +#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)); + +/* 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 + +#include + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +# include +#endif +#ifdef __LDBL_COMPAT +# include +#endif + +__END_DECLS + +#endif /* stdlib.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdlib.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@stdlib.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..dec276e551ffe3e56da78498dfde8c290adc0d96 GIT binary patch literal 67117 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 DUjTrD literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@string.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@string.h new file mode 100644 index 0000000..a0f2860 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@string.h @@ -0,0 +1,501 @@ +/* Copyright (C) 1991-2020 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.21 String handling + */ + +#ifndef _STRING_H +#define _STRING_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +__BEGIN_DECLS + +/* Get size_t and NULL from . */ +#define __need_size_t +#define __need_NULL +#include + +/* Tell the caller that we provide correct C++ prototypes. */ +#if defined __cplusplus && (__GNUC_PREREQ (4, 4) \ + || __glibc_clang_prereq (3, 5)) +# define __CORRECT_ISO_CPP_STRING_H_PROTO +#endif + + +/* Copy N bytes of SRC to DEST. */ +extern void *memcpy (void *__restrict __dest, const void *__restrict __src, + size_t __n) __THROW __nonnull ((1, 2)); +/* Copy N bytes of SRC to DEST, guaranteeing + correct behavior for overlapping strings. */ +extern void *memmove (void *__dest, const void *__src, size_t __n) + __THROW __nonnull ((1, 2)); + +/* Copy no more than N bytes of SRC to DEST, stopping when C is found. + Return the position in DEST one byte past where C was copied, + or NULL if C was not found in the first N bytes of SRC. */ +#if defined __USE_MISC || defined __USE_XOPEN || __GLIBC_USE (ISOC2X) +extern void *memccpy (void *__restrict __dest, const void *__restrict __src, + int __c, size_t __n) + __THROW __nonnull ((1, 2)); +#endif /* Misc || X/Open. */ + + +/* Set N bytes of S to C. */ +extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1)); + +/* Compare N bytes of S1 and S2. */ +extern int memcmp (const void *__s1, const void *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Search N bytes of S for C. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern void *memchr (void *__s, int __c, size_t __n) + __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1)); +extern const void *memchr (const void *__s, int __c, size_t __n) + __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1)); + +# ifdef __OPTIMIZE__ +__extern_always_inline void * +memchr (void *__s, int __c, size_t __n) __THROW +{ + return __builtin_memchr (__s, __c, __n); +} + +__extern_always_inline const void * +memchr (const void *__s, int __c, size_t __n) __THROW +{ + return __builtin_memchr (__s, __c, __n); +} +# endif +} +#else +extern void *memchr (const void *__s, int __c, size_t __n) + __THROW __attribute_pure__ __nonnull ((1)); +#endif + +#ifdef __USE_GNU +/* Search in S for C. This is similar to `memchr' but there is no + length limit. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" void *rawmemchr (void *__s, int __c) + __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1)); +extern "C++" const void *rawmemchr (const void *__s, int __c) + __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1)); +# else +extern void *rawmemchr (const void *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +# endif + +/* Search N bytes of S for the final occurrence of C. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" void *memrchr (void *__s, int __c, size_t __n) + __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1)); +extern "C++" const void *memrchr (const void *__s, int __c, size_t __n) + __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1)); +# else +extern void *memrchr (const void *__s, int __c, size_t __n) + __THROW __attribute_pure__ __nonnull ((1)); +# endif +#endif + + +/* Copy SRC to DEST. */ +extern char *strcpy (char *__restrict __dest, const char *__restrict __src) + __THROW __nonnull ((1, 2)); +/* Copy no more than N characters of SRC to DEST. */ +extern char *strncpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); + +/* Append SRC onto DEST. */ +extern char *strcat (char *__restrict __dest, const char *__restrict __src) + __THROW __nonnull ((1, 2)); +/* Append no more than N characters from SRC onto DEST. */ +extern char *strncat (char *__restrict __dest, const char *__restrict __src, + size_t __n) __THROW __nonnull ((1, 2)); + +/* Compare S1 and S2. */ +extern int strcmp (const char *__s1, const char *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Compare N characters of S1 and S2. */ +extern int strncmp (const char *__s1, const char *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Compare the collated forms of S1 and S2. */ +extern int strcoll (const char *__s1, const char *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Put a transformation of SRC into no more than N bytes of DEST. */ +extern size_t strxfrm (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((2)); + +#ifdef __USE_XOPEN2K8 +/* POSIX.1-2008 extended locale interface (see locale.h). */ +# include + +/* Compare the collated forms of S1 and S2, using sorting rules from L. */ +extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l) + __THROW __attribute_pure__ __nonnull ((1, 2, 3)); +/* Put a transformation of SRC into no more than N bytes of DEST, + using sorting rules from L. */ +extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n, + locale_t __l) __THROW __nonnull ((2, 4)); +#endif + +#if (defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 \ + || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC2X)) +/* Duplicate S, returning an identical malloc'd string. */ +extern char *strdup (const char *__s) + __THROW __attribute_malloc__ __nonnull ((1)); +#endif + +/* Return a malloc'd copy of at most N bytes of STRING. The + resultant string is terminated even if no null terminator + appears before STRING[N]. */ +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC2X) +extern char *strndup (const char *__string, size_t __n) + __THROW __attribute_malloc__ __nonnull ((1)); +#endif + +#if defined __USE_GNU && defined __GNUC__ +/* Duplicate S, returning an identical alloca'd string. */ +# define strdupa(s) \ + (__extension__ \ + ({ \ + const char *__old = (s); \ + size_t __len = strlen (__old) + 1; \ + char *__new = (char *) __builtin_alloca (__len); \ + (char *) memcpy (__new, __old, __len); \ + })) + +/* Return an alloca'd copy of at most N bytes of string. */ +# define strndupa(s, n) \ + (__extension__ \ + ({ \ + const char *__old = (s); \ + size_t __len = strnlen (__old, (n)); \ + char *__new = (char *) __builtin_alloca (__len + 1); \ + __new[__len] = '\0'; \ + (char *) memcpy (__new, __old, __len); \ + })) +#endif + +/* Find the first occurrence of C in S. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern char *strchr (char *__s, int __c) + __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1)); +extern const char *strchr (const char *__s, int __c) + __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1)); + +# ifdef __OPTIMIZE__ +__extern_always_inline char * +strchr (char *__s, int __c) __THROW +{ + return __builtin_strchr (__s, __c); +} + +__extern_always_inline const char * +strchr (const char *__s, int __c) __THROW +{ + return __builtin_strchr (__s, __c); +} +# endif +} +#else +extern char *strchr (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +#endif +/* Find the last occurrence of C in S. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern char *strrchr (char *__s, int __c) + __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1)); +extern const char *strrchr (const char *__s, int __c) + __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1)); + +# ifdef __OPTIMIZE__ +__extern_always_inline char * +strrchr (char *__s, int __c) __THROW +{ + return __builtin_strrchr (__s, __c); +} + +__extern_always_inline const char * +strrchr (const char *__s, int __c) __THROW +{ + return __builtin_strrchr (__s, __c); +} +# endif +} +#else +extern char *strrchr (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +#endif + +#ifdef __USE_GNU +/* This function is similar to `strchr'. But it returns a pointer to + the closing NUL byte in case C is not found in S. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" char *strchrnul (char *__s, int __c) + __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1)); +extern "C++" const char *strchrnul (const char *__s, int __c) + __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1)); +# else +extern char *strchrnul (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +# endif +#endif + +/* Return the length of the initial segment of S which + consists entirely of characters not in REJECT. */ +extern size_t strcspn (const char *__s, const char *__reject) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Return the length of the initial segment of S which + consists entirely of characters in ACCEPT. */ +extern size_t strspn (const char *__s, const char *__accept) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Find the first occurrence in S of any character in ACCEPT. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern char *strpbrk (char *__s, const char *__accept) + __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2)); +extern const char *strpbrk (const char *__s, const char *__accept) + __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2)); + +# ifdef __OPTIMIZE__ +__extern_always_inline char * +strpbrk (char *__s, const char *__accept) __THROW +{ + return __builtin_strpbrk (__s, __accept); +} + +__extern_always_inline const char * +strpbrk (const char *__s, const char *__accept) __THROW +{ + return __builtin_strpbrk (__s, __accept); +} +# endif +} +#else +extern char *strpbrk (const char *__s, const char *__accept) + __THROW __attribute_pure__ __nonnull ((1, 2)); +#endif +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern char *strstr (char *__haystack, const char *__needle) + __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2)); +extern const char *strstr (const char *__haystack, const char *__needle) + __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2)); + +# ifdef __OPTIMIZE__ +__extern_always_inline char * +strstr (char *__haystack, const char *__needle) __THROW +{ + return __builtin_strstr (__haystack, __needle); +} + +__extern_always_inline const char * +strstr (const char *__haystack, const char *__needle) __THROW +{ + return __builtin_strstr (__haystack, __needle); +} +# endif +} +#else +extern char *strstr (const char *__haystack, const char *__needle) + __THROW __attribute_pure__ __nonnull ((1, 2)); +#endif + + +/* Divide S into tokens separated by characters in DELIM. */ +extern char *strtok (char *__restrict __s, const char *__restrict __delim) + __THROW __nonnull ((2)); + +/* Divide S into tokens separated by characters in DELIM. Information + passed between calls are stored in SAVE_PTR. */ +extern char *__strtok_r (char *__restrict __s, + const char *__restrict __delim, + char **__restrict __save_ptr) + __THROW __nonnull ((2, 3)); +#ifdef __USE_POSIX +extern char *strtok_r (char *__restrict __s, const char *__restrict __delim, + char **__restrict __save_ptr) + __THROW __nonnull ((2, 3)); +#endif + +#ifdef __USE_GNU +/* Similar to `strstr' but this function ignores the case of both strings. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" char *strcasestr (char *__haystack, const char *__needle) + __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2)); +extern "C++" const char *strcasestr (const char *__haystack, + const char *__needle) + __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2)); +# else +extern char *strcasestr (const char *__haystack, const char *__needle) + __THROW __attribute_pure__ __nonnull ((1, 2)); +# endif +#endif + +#ifdef __USE_GNU +/* Find the first occurrence of NEEDLE in HAYSTACK. + NEEDLE is NEEDLELEN bytes long; + HAYSTACK is HAYSTACKLEN bytes long. */ +extern void *memmem (const void *__haystack, size_t __haystacklen, + const void *__needle, size_t __needlelen) + __THROW __attribute_pure__ __nonnull ((1, 3)); + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +extern void *__mempcpy (void *__restrict __dest, + const void *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); +extern void *mempcpy (void *__restrict __dest, + const void *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); +#endif + + +/* Return the length of S. */ +extern size_t strlen (const char *__s) + __THROW __attribute_pure__ __nonnull ((1)); + +#ifdef __USE_XOPEN2K8 +/* Find the length of STRING, but scan at most MAXLEN characters. + If no '\0' terminator is found in that many characters, return MAXLEN. */ +extern size_t strnlen (const char *__string, size_t __maxlen) + __THROW __attribute_pure__ __nonnull ((1)); +#endif + + +/* Return a string describing the meaning of the `errno' code in ERRNUM. */ +extern char *strerror (int __errnum) __THROW; +#ifdef __USE_XOPEN2K +/* Reentrant version of `strerror'. + There are 2 flavors of `strerror_r', GNU which returns the string + and may or may not use the supplied temporary buffer and POSIX one + which fills the string into the buffer. + To use the POSIX version, -D_XOPEN_SOURCE=600 or -D_POSIX_C_SOURCE=200112L + without -D_GNU_SOURCE is needed, otherwise the GNU version is + preferred. */ +# if defined __USE_XOPEN2K && !defined __USE_GNU +/* Fill BUF with a string describing the meaning of the `errno' code in + ERRNUM. */ +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (strerror_r, + (int __errnum, char *__buf, size_t __buflen), + __xpg_strerror_r) __nonnull ((2)); +# else +extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen) + __THROW __nonnull ((2)); +# define strerror_r __xpg_strerror_r +# endif +# else +/* If a temporary buffer is required, at most BUFLEN bytes of BUF will be + used. */ +extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) + __THROW __nonnull ((2)) __wur; +# endif +#endif + +#ifdef __USE_XOPEN2K8 +/* Translate error number to string according to the locale L. */ +extern char *strerror_l (int __errnum, locale_t __l) __THROW; +#endif + +#ifdef __USE_MISC +# include + +/* Set N bytes of S to 0. The compiler will not delete a call to this + function, even if S is dead after the call. */ +extern void explicit_bzero (void *__s, size_t __n) __THROW __nonnull ((1)); + +/* Return the next DELIM-delimited token from *STRINGP, + terminating it with a '\0', and update *STRINGP to point past it. */ +extern char *strsep (char **__restrict __stringp, + const char *__restrict __delim) + __THROW __nonnull ((1, 2)); +#endif + +#ifdef __USE_XOPEN2K8 +/* Return a string describing the meaning of the signal number in SIG. */ +extern char *strsignal (int __sig) __THROW; + +/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ +extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src) + __THROW __nonnull ((1, 2)); +extern char *stpcpy (char *__restrict __dest, const char *__restrict __src) + __THROW __nonnull ((1, 2)); + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +extern char *__stpncpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); +extern char *stpncpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); +#endif + +#ifdef __USE_GNU +/* Compare S1 and S2 as strings holding name & indices/version numbers. */ +extern int strverscmp (const char *__s1, const char *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Sautee STRING briskly. */ +extern char *strfry (char *__string) __THROW __nonnull ((1)); + +/* Frobnicate N bytes of S. */ +extern void *memfrob (void *__s, size_t __n) __THROW __nonnull ((1)); + +# ifndef basename +/* Return the file name within directory of FILENAME. We don't + declare the function if the `basename' macro is available (defined + in ) which makes the XPG version of this function + available. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" char *basename (char *__filename) + __THROW __asm ("basename") __nonnull ((1)); +extern "C++" const char *basename (const char *__filename) + __THROW __asm ("basename") __nonnull ((1)); +# else +extern char *basename (const char *__filename) __THROW __nonnull ((1)); +# endif +# endif +#endif + +#if __GNUC_PREREQ (3,4) +# if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Functions with security checks. */ +# include +# endif +#endif + +__END_DECLS + +#endif /* string.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@string.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@string.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4d691fc70d5d20dc9be747fdfbac9cf353a5b090 GIT binary patch literal 33083 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 qYg#VIFVyjHI}MebG. */ + +#ifndef _STRINGS_H +#define _STRINGS_H 1 + +#include +#define __need_size_t +#include + +/* Tell the caller that we provide correct C++ prototypes. */ +#if defined __cplusplus && __GNUC_PREREQ (4, 4) +# define __CORRECT_ISO_CPP_STRINGS_H_PROTO +#endif + +__BEGIN_DECLS + +#if defined __USE_MISC || !defined __USE_XOPEN2K8 +/* Compare N bytes of S1 and S2 (same as memcmp). */ +extern int bcmp (const void *__s1, const void *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Copy N bytes of SRC to DEST (like memmove, but args reversed). */ +extern void bcopy (const void *__src, void *__dest, size_t __n) + __THROW __nonnull ((1, 2)); + +/* Set N bytes of S to 0. */ +extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1)); + +/* Find the first occurrence of C in S (same as strchr). */ +# ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO +extern "C++" +{ +extern char *index (char *__s, int __c) + __THROW __asm ("index") __attribute_pure__ __nonnull ((1)); +extern const char *index (const char *__s, int __c) + __THROW __asm ("index") __attribute_pure__ __nonnull ((1)); + +# if defined __OPTIMIZE__ +__extern_always_inline char * +index (char *__s, int __c) __THROW +{ + return __builtin_index (__s, __c); +} + +__extern_always_inline const char * +index (const char *__s, int __c) __THROW +{ + return __builtin_index (__s, __c); +} +# endif +} +# else +extern char *index (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +# endif + +/* Find the last occurrence of C in S (same as strrchr). */ +# ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO +extern "C++" +{ +extern char *rindex (char *__s, int __c) + __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1)); +extern const char *rindex (const char *__s, int __c) + __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1)); + +# if defined __OPTIMIZE__ +__extern_always_inline char * +rindex (char *__s, int __c) __THROW +{ + return __builtin_rindex (__s, __c); +} + +__extern_always_inline const char * +rindex (const char *__s, int __c) __THROW +{ + return __builtin_rindex (__s, __c); +} +# endif +} +# else +extern char *rindex (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +# endif +#endif + +#if defined __USE_MISC || !defined __USE_XOPEN2K8 || defined __USE_XOPEN2K8XSI +/* Return the position of the first bit set in I, or 0 if none are set. + The least-significant bit is position 1, the most-significant 32. */ +extern int ffs (int __i) __THROW __attribute_const__; +#endif + +/* The following two functions are non-standard but necessary for non-32 bit + platforms. */ +# ifdef __USE_MISC +extern int ffsl (long int __l) __THROW __attribute_const__; +__extension__ extern int ffsll (long long int __ll) + __THROW __attribute_const__; +# endif + +/* Compare S1 and S2, ignoring case. */ +extern int strcasecmp (const char *__s1, const char *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +#ifdef __USE_XOPEN2K8 +/* POSIX.1-2008 extended locale interface (see locale.h). */ +# include + +/* Compare S1 and S2, ignoring case, using collation rules from LOC. */ +extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc) + __THROW __attribute_pure__ __nonnull ((1, 2, 3)); + +/* Compare no more than N chars of S1 and S2, ignoring case, using + collation rules from LOC. */ +extern int strncasecmp_l (const char *__s1, const char *__s2, + size_t __n, locale_t __loc) + __THROW __attribute_pure__ __nonnull ((1, 2, 4)); +#endif + +__END_DECLS + +#if __GNUC_PREREQ (3,4) && __USE_FORTIFY_LEVEL > 0 \ + && defined __fortify_function +/* Functions with security checks. */ +# if defined __USE_MISC || !defined __USE_XOPEN2K8 +# include +# endif +#endif + +#endif /* strings.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@strings.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@strings.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6e4e8d1f71425c7a6bc728e5db07210d8428742e GIT binary patch literal 16483 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@time.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@time.h new file mode 100644 index 0000000..015bc1c --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@time.h @@ -0,0 +1,303 @@ +/* Copyright (C) 1991-2020 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 + +/* 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 + +__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; + +/* 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) + __THROW __attribute__ ((__const__)); + +/* Return the `time_t' representation of TP and normalize TP. */ +extern time_t mktime (struct tm *__tp) __THROW; + + +/* 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; + +#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 + + +/* 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; + +#if defined __USE_POSIX || __GLIBC_USE (ISOC2X) +/* 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; +#endif /* POSIX || C2X */ + +/* 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))'. */ +extern char *ctime (const time_t *__timer) __THROW; + +#if defined __USE_POSIX || __GLIBC_USE (ISOC2X) +/* 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)'. */ +extern char *ctime_r (const time_t *__restrict __timer, + char *__restrict __buf) __THROW; +#endif /* POSIX || C2X */ + + +/* Defined in localtime.c. */ +extern char *__tzname[2]; /* Current timezone names. */ +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)) + + +#ifdef __USE_MISC +/* Miscellaneous functions many Unices inherited from the public domain + localtime package. These are included only for compatibility. */ + +/* Like `mktime', but for TP represents Universal Time, not local time. */ +extern time_t timegm (struct tm *__tp) __THROW; + +/* Another name for `mktime'. */ +extern time_t timelocal (struct tm *__tp) __THROW; + +/* Return the number of days in YEAR. */ +extern int dysize (int __year) __THROW __attribute__ ((__const__)); +#endif + + +#ifdef __USE_POSIX199309 +/* 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; + +/* Set clock CLOCK_ID to value TP. */ +extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) + __THROW; + +# ifdef __USE_XOPEN2K +/* High-resolution sleep with the specified clock. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int clock_nanosleep (clockid_t __clock_id, int __flags, + const struct timespec *__req, + struct timespec *__rem); + +/* 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. */ +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; + +/* Get expiration overrun for timer TIMERID. */ +extern int timer_getoverrun (timer_t __timerid) __THROW; +#endif + + +#ifdef __USE_ISOC11 +/* Set TS to calendar time based in time base BASE. */ +extern int timespec_get (struct timespec *__ts, int __base) + __THROW __nonnull ((1)); +#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/@@home@ado@git@ssp/@usr@include@time.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@time.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7668bb68417e32942a10d1e9e804762d354e69fc GIT binary patch literal 27930 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 NkWD|>bueT4{{u$HRuKRI literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@wchar.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@wchar.h new file mode 100644 index 0000000..5e0d65b --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@wchar.h @@ -0,0 +1,858 @@ +/* Copyright (C) 1995-2020 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.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 + +#include +#include +#include +#include + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +# include +#endif +#ifdef __USE_XOPEN2K8 +# include +#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)); + +/* 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__; +#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__; +#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__; +#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__; +#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__; +#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__; +#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 */ + +/* Likewise for `_FloatN' and `_FloatNx' when support is enabled. */ + +#if __HAVE_FLOAT16 && defined __USE_GNU +extern _Float16 wcstof16 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +#endif + +#if __HAVE_FLOAT32 && defined __USE_GNU +extern _Float32 wcstof32 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +#endif + +#if __HAVE_FLOAT64 && defined __USE_GNU +extern _Float64 wcstof64 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +#endif + +#if __HAVE_FLOAT128 && defined __USE_GNU +extern _Float128 wcstof128 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +#endif + +#if __HAVE_FLOAT32X && defined __USE_GNU +extern _Float32x wcstof32x (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +#endif + +#if __HAVE_FLOAT64X && defined __USE_GNU +extern _Float64x wcstof64x (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +#endif + +#if __HAVE_FLOAT128X && defined __USE_GNU +extern _Float128x wcstof128x (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +#endif + + +/* 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. */ + +#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; + +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) +/* 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; +#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 is in + effect, this is handled in bits/wchar-ldbl.h. */ +#if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT +# 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 /* 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) +# 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 /* 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 +# include +#endif + +#ifdef __LDBL_COMPAT +# include +#endif + +__END_DECLS + +#endif /* wchar.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@wchar.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@wchar.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..697570eed3f1ddb4fefdf0a83564689325eea7bd GIT binary patch literal 59640 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@wctype.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@wctype.h new file mode 100644 index 0000000..06260c4 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@wctype.h @@ -0,0 +1,148 @@ +/* Copyright (C) 1996-2020 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/@@home@ado@git@ssp/@usr@include@wctype.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@wctype.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..97bb02754589f72fb11fd36df7013981c972762f GIT binary patch literal 20528 zcmcgz4R9RQec!VchA2dUVuW!Nay0=P%Xep6s=^SVIJRsFWRQbJ6l;{M_x5(B_3iC0 zyL*z(cmNTF$W$gF83@Fr9p|GZL+CWq4`@Q0xTYj9Knawj(+(-&V;DXXoRAim4_|-p z?Y`CS?c3AI(0YdF!}mV^|KI=n|K6<=PQ3l*i$4}pLTw`6f|3rUDK{y5%WJNaD@pEzEa|$FnNV~~u`_DfkX_9*oa}_hMFX3-6-#k)+b`X* zjk`$h=*Vr{kYhVbx^SZH(f|5!WMi4^5m~L9pevwWl^j=8byIS46gSZ*m-0XlL=K3` zPa=EiT3$0;J+d1^K~*HTY%5FQ&QWxr%-xNTspA$jQ`EH*cMU^eiAW4LQ^sI$mxaOCT*a1PR-$YgvSPWE)fj!@6+~RNqMKIT zsis8?i>v;QYr~)yrOd%RMJi=oS>}Mt7qD&;Phpnxdepv{MetX7CXM6DvMW0Bgi;{> z3P0lmgIk}&D=gk(cwC%JgUV5BApQz~T~ ztyIVq6j{$WZaL4l>)7(h!5tllAaK{PnZ^z$PGre$m8vA!pTyRP!;eu%nWOWyeF?rk z!T^vHU7L79F8!`n;@eJm6XFB%p5xW|iO3Wgw@q8Q5}V<<$#N1zz^vK&nSV<&`( z!)H&OA|hqcFvN7^oRC;*rox^Px|6>TZNr&VmsHbfJW9ZYkr?gT;u3R4Rd+MWq@-s` ziaTKz2r5acU?@`@7Q*0`loHAjb&75i(~%gn3w}D+kfWgUZAG23y&N}o0;5Hei&K(a z$Vp|_Y&^pxVTp*V!5A2#9>%VXJ4%v~F|tU-RYqC_e?W9FDPDT+u%0A{Q9>Gv?o-N) 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 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@asm@errno.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@asm@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7dc8a252f21aa51f099cce0ea8628e13b45c20c2 GIT binary patch literal 12288 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 aryThM{GQG6W5|aG{ppi>t}Xij|NajN0rLX@ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@byteswap.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@byteswap.h new file mode 100644 index 0000000..ccf613a --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@byteswap.h @@ -0,0 +1,79 @@ +/* Macros and inline functions to swap the order of bytes in integer values. + Copyright (C) 1997-2020 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 _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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@byteswap.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@byteswap.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..10db792317411587db7af02d3cc9a5a04cf98ddf GIT binary patch literal 13738 zcmbVT-HRkw6|bHQVI5Z;mSwYnWbJWr$?R-R^~}yrhGY{r>rVEA1XdCZidw0zuA06( z_0g%1>7KaYgT87&Pz>mch#&t!1SLj95DXdwkvu4fXddz+;)5aC@tk{a)!gbjx4I?` zThlvrKhF7`?{n{*H}1Xv-oIWqIvvBx)5Kzt8{`Aenrv;_n;T}pqI_cRM7h;xS!(t7 zGcO%Gqt&5d4dc+WoIz~uu*^!+kp-_Z{;)?*l6uLiI~p1Hxq%byv>k1Z<7AgbJLZ5T zo}0zV{uA|mj1Lw%Eocp$Z0I^ckeWj;7`1U*of`Mk?V~z&T5T5bp~RectJdB92$?%N=RK!vjnVjCS@s% z^PF%sb6o;ln)M(?vybzBP&Jl9z3ExPK4H7u&Fs`2dINMmur+1kDiquXJsZ4JnhKkl zf!x3@tQ^;_4X%-=ZU*03OioirfkiOaW^t;)O&u!$?&p4sv65BaalIBg0vZ(p88B(r zPdv{C8)8u_gaUw`(MF<@?hc&IY`n4p z;Q)Lu*i5_4(TN<{M{!b!dwz_)BW>|=28Y&sZ9N?i06Nv5YpSepJlmvi8n6 zR#*qKv4UVPG}qQF{LWJ`Yi(_{x4Kq}$F?EpfRWpwGl9U&b|L}7Zy!8a)!qUG5u+3) ztKv=}?#5w=GKKW--nV}+mBKX1VT=-_MS#0<7h1C_NtZXtEKWXz0Pu^x$e?O|S_Mt& zxWXo1KEuSYgyL!$0~PAQ*x63%>5Qx(3roEm z(jxE&sDrwADcoU`B+w{98Z*}k%^ffD66RW7l0>mt=*H83eVcSboF$%*c@s>1NgJWX zILd~Qn+`aBCS)SBE0!YfgNQYBQa-+>G7`Cg*Uxt>flEGDYX~Io=p!8WIN)7b@geeWFt6I;qQ8Q=zN!C-P$9zcjvD z4u{+sYO^=s4)rDK>(V+^=RHV!cM_9hJs-*;#`>74yA&?24&iV7PzQ|rR+Cobf zyBFr6emAZ!hcybyNfKwDkUqUT_eT~w0Zjr#PdiKz8tHW>6Q|E0L1vjPJf=*#YtBj4 zGTtt5#*iS!2{;%Vb%Yd{I!T5M5#(o%maPjLDtC8x=4d3SP}HWuQv3?|ZPnLFcz2_w zzBKwgSRo-b@ageF$e^3pt>6xSLP({O`)QHqJII6WIDN1$D%%g1`1F}g#wS}nj=VAJ?^S>XmO_# z3#S8ChE*cDoVt0l9rDJz$cAvG#zd$RASs8cZY#rI`womcnTuYZxyzwG3p~hC!Nn8m zqb`@0)c}bWtsnl#4C0+W&Zvolo*|V!%rkF7PLni=5)uGvs=9fTkz9q|T-dyA`=dDB z+?dj6E{w7ihtj#oHA@PxaQxonZ)6sX^a5{C)+w!&sjyu+YJd&kfB2CI`!CGv=qPIXxvIuQc`bTLTA2CDnh1T{Ei=!xsP2#6MksHN`Uxq}}# znmL6s7j+z*&J3nA@WMIDv4|s!{8-O7hg>2`fhX+RGW2hVZZbr}e8f`^9E z`p8->eF=>Jl)*w=G7ZHs` z5N{j1vTi}%kvCXb0X^^;&nruOTOk6;hs--_`KV;U<>o|?RJ<1!svp380UYmS;AiNB zq^8yBC}5dhscUE}?uKWq8rQ4}#c>qsM2TIY`UQ{NIEeSM(?c47hDzQVGR5|0 zsf}$z1=l6>sJ06E40c8;WL7~}8Ylc~=Ey@*-I0kaa&!d~{epP$0MZB1vDcr%a4CvJ z6Hh1`rgz<6_fkCfKjAsTu5vZjLL$iEc3tL}{Y!o5d>4yuCnm3AK3eT}A3=Gujk-+oyC=c(UY2I z3>+ub5mH5jC23Iv;D$PNz*Y`}^RAb@1n%Rc?GZp7*xab_-Yh~PeOW`*j=i*VRi;Er z4q*@uStHHibs=!>MD=`gDS~0yj<^C)!-tl8=?2UQ`f~BO9sep1J8*6Q*AILr4;qc$ z#jW)8XE~gJ>tA#BUdm&P$0GS9m4Ifluv08GHCC!}gsKKd=cOVw`e|{p!Ji~Wa$%qu zF8)Acmte6*v`UN!E!a6Amv5Ylq9JFg8cve~42TIzOT^Q*d+GDO z3`M5KTnor~rv+Q%aYCT3Vo*w_RTmWxFc?**)ssV^m1f8`W;UGo za(Fgp^9!mobwTYT^TqjHi)vO=4G7RVfiRXs!ADkdG$QC~8yilXZh7Gf&s}B`j_2kL z7l3Fo^a-hoGh#CIl=JF_`@P~qE#QSJX4P5%g$39dH6zs52SuZAWp8#c5Kv1-NM zP@W_nTzs4f8c(m%_O1?^V>(p3MJH0x=KVjThljriJD{ljqkU*MFUl(3%8ve z=t03HIY%_1Yo11&(9ATvQWCA(FRD60;@9YC)v>}W>bBt-V1?Q$R7!PJTr7jj6wrxt z65jpMrEJ{zAX1iPUM-aXl?6mATWixDzM2TYZXEA2I4z6IL{1ltX^q083++t+6*m^` z#k;ir(<@8*0KZ)}ILr{{)+^T(m5byXl@|?*0!Z^GjFZRD8lPTRH#Qco8#fp3JNRWV zfBnU0KmI7*tz&LibXmH#jV(Itg~QiA{y72srNJXpznv@_>+2^w+s5|Exz4qRo|!WY zqjT`;Z{A?pyJt?x z4esAXKGcuG&YwS7 zEb~5onX|gq#(bxDx_4o|bMTq3KJngn{`cC?YOCONY(-MWg$q;5T)TYj_Izji^foNR ziXDodor99kgY1Q8AJ4nTw`*IZ!#F8OMbwPd)#@Je-EJ31T{^u4dz?FQ?#6uQ%&{{M zT``W8iZHD;#;H>afYbKs_SOe;oV=~w4~_%Zw=Um$`gjMQSBw(HLzuWGPUP&~YLCwb zjJEFZ*_SR~g4y_l*#&E2_MyDx?4{KuJ{!p1Vtn?w%jaM=K4JE&e|qsp4}Rs>?-r_G zR7GF|fZn;YAWLXPmX=X@-Fa;BvCTPnUj4jr02a`>b>i06mCnJ^PhVen=KMQU&jiplav@bjgGZub%ROqRRny1j|-_xLAY?mqcscYR~Idlz5Jx4oWtFWzn~^Vw4) z#26TH`Eqw_dOEJ{`{E@mz6_kKEUo}&D~sk`!P%t~myolM{r&h;t3SDYu~01hdEeP% zXFqkNvwmzHp4X3Ehv&g3KfCpi*VT_a%Fr zgNGL%1`ZxxJTnm-fWjgN=I`%+$NJCLF4|XbKL4D3^$X8$Klj2@x9uB1R<{)P)VuB) RAo9TC1HCzXZt(St{{u2. */ + +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@cpu-set.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@cpu-set.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5431fd831ae4ee826d2c94945dccc3dd355236a7 GIT binary patch literal 15050 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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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endian.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endian.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..12c2cabcf396f663bf2823597d94b3cbd563ed97 GIT binary patch literal 12798 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endianness.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endianness.h new file mode 100644 index 0000000..962a9ae --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endianness.h @@ -0,0 +1,11 @@ +#ifndef _BITS_ENDIANNESS_H +#define _BITS_ENDIANNESS_H 1 + +#ifndef _BITS_ENDIAN_H +# error "Never use directly; include instead." +#endif + +/* i386/x86_64 are little-endian. */ +#define __BYTE_ORDER __LITTLE_ENDIAN + +#endif /* bits/endianness.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endianness.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@endianness.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..875afc3923b86560150048e9223236b766379371 GIT binary patch literal 12438 zcmbVSy^kbE6`%D9=>!B9Sb(#WAV6OA^{sR|IYGkKt+gke4&=MUBt=b4%}lZVG48J3 z*>wPc$&rvOIe@>#kRTBtKq7JgAqf&BBna+!?^Shg_13GNUR&~L?XG(D>i53itG5@g z{`;T5f4(?c?C zD_b{L-;2*#{O_wrdDk|%sZ`Oebbk5HWAXS=R+y^0%r;e*FO6;UQrfMOMbTzkUF>v| zt-DHDQ&;VSt-HkxBKB&h+x-2f&raD*>i9T6d6@TH<(^sqvV$c4cZ& zn3COth_fF&OeB`p7D5)AdMR5%CBln8d3gouwU;}VKEGuzK@BW`G82;as?F6(uleQv z4i}`BoS2;|&>g$VeAH>Nvn0itHw0`!ycuc2EpCY-schE4PsMHv!8cYn63j}dx>9;) z>8cTb;SLm6ql|Vb0S>KgotYg#ZY6rhfV88<5qsfb@VBYiZQ&{~BBO+< z+XQamS_km5ThCbQuez2>&(IOjs1n$KP3P-IYXLT7s#ypX0KMUjBxGG}Wdj;}!Qv6Y zNG1rTRA#LySJ_IdB5Q58O7fb9^ijzt%VnV>CS^#^Xr}$Av@?;jTcHQl^vz z`mGDywBT%zlPEs+oYd_BF2F;t>!uXoHN^@TXYVxuelA40#NeU@A3r@O3VlUm)7&^q zOMfSMm-Pi7D??x*+Y+c4Q{oQS_knnHbugQ}C@#wEVHQoYTDS9~1h_Da(Y6t{%o*2(&GdyVvQpb^y+Tw{ zs!-`YbA=GxQkPJUtoKAF(vj%0*M2&m8ClO3R$LvVMc@xm2UGFVxx*<*pizP}4$>*JjjnWKRIZz*sj^?sd?UF0Wbv-l6ab zUds8?+O^AG6WYQ{78@SfwSG_1_sb>)C7VWGG1BKxCx4Wq6G$XL{I=^9VUk~Uc`26$ z5@chA^O!#Aj+|4dWz;T^dq@!L1{{n)9bp9)Zt@|+1^I)ked|I%<*v>Tu11D>MV(sg z#UFq_SAAte-Hk|ndGsk*AtMp^{CX#3&`s=Cki*|;^=0=PB+#_Cqu|eO_MkX~cf`4u zrElQ`5cc`xKJJ0`pAxrDm8FU0)TLF(;9OG}>7VOgK<}AP?!vXGPoRMg6jq_Yqp55M zDXS(|l|qZ0PVJlySQ%D{EV=OTX*;C;x66i*(qtku3Xq&b4UhHVZ+-_R+)ScRXYPLK z+7udcRB-W(`h?`#p&DS(;`L*_%Zhrl#2t}1_#Iy9%g*XccAMwPm5>0?RMkyQMwSYH zxU+d7*1NiW{OE>8lQ4!-97^Xt*Bm&&!tt}qzp+^`@(Xu^vMy+)+z8vF=>!}AGX>bu zk4}*KkN)(-17#^`_tqwbY55DX1hL88qkAA;^=2y zmw^!{cxWiCZ>`ndm+)BgGNMwW%K8=&W5YeBScE$5zFnP8!;{RcbY+dbV(%0lLHWvH zZj4m;dq5HWlX5)3isXVm79s&AO{`=>Hhl0%WUPB^nzL8oxihVjSlPg6lHKJ`CWlAy z(j%2JMHmu-I2dpOLNMvX3Z8>lOVpee55ro%?B+!}JRBL}+aD6`!3QVl@nWc>s)jMv z1&J-CnP9)prVd=sb#s&pCn;hC#9*THo5dl|)L!7agh@Q;R5An@l6f(VRdsr++I1O( zN*4Uyqp}}+2Sz1!8ovwKKwRKPa*=51Dq;6`bZ*)}h8I1!K4o!(VA8C1)_~*WIzpj{ zuq5q^06Z|I4%o^uFz@9*z2p?YVgB!>y=*!jndG`;`+`!xbo*%4bS4Lyl&WW<1YA`w<6lu~=yU7OqvK)D+fMeL7%(pp#9&AS_INOw{~o*~;f*l;3pIGYpnvhbiTgneWp zPH!#7S%5R50EZ0GckP?_LqBm6sA#^Gzy#@Ovd>kz9}>LC`3@YUjH; zXpWVki;gtGzlf&W|NK|8-nUHDue{KpKveM7SwcGr-n&WHPmY|18@8}E7s_@3b#^Bu z+zmP0q|Xf3ItQ0JhLX7vw_|LBLZ^Qt2Ja%EsU{n0MJ^ym%zeaBJzKVsh%+W-In literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@errno.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@errno.h new file mode 100644 index 0000000..81308af --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@errno.h @@ -0,0 +1,53 @@ +/* Error constants. Linux specific version. + Copyright (C) 1996-2020 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_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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@errno.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@errno.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..48d7afde9a2c9da35c0ddc155f17ad494dc34a76 GIT binary patch literal 12467 zcmbVS&5LD66@Q(88j(iG7>PJALTYL83wwCrm&xLlQS`ihA|xzE}4Bc)3-# zUw0NR5?9#-T)9wJ{s->dBnuHlgmK}b~0s@@VE(ojUb9 z-{;ir#gqU1`|lqw4i@>QsbtPqO}qHJ;*!V=BgHDx03n!H}0`}ce7H}-FddIyL_pP&MR&VX7}eDJc;jv{gNV7*En&fiyI_4rf*^DKR@$uy^cg^=>EG)>tXdydhu<;?1lkT;rA~lG(UeyRp|EBv88|epotf=HZpC`XfV88<5qsfb@V9EnZQ&{~ zA|;q=bON_9lC2WMD(8o`p~e&@0+VLe|BGx1h0S zBpwlr)&#+ns!XeDm93;GGi|yhZP(HE(ZNSY5JA9QgU!r49G%Fu-Ktedq>r(66Y0qHQN6f<9pB93M%mOB#MtcCyn021$gM9X)6X^ldXVp@?I0*=ZsZL3@(z<@zZl6&{wo3 z&5g6P^mi-osyU-$We6-}TMQLrO5EZ4J`j(t4rY^=3N$1G(wS;+H`tvcJgb^FD}J8?Np8lt5Q<*{ySj zOJAHuYiYhPcxy-lNI0V{p`>7+=4+4^Xf@QDeCkl+(9(V~m+d99&!&u|M{S zL2b;nP-?0+4)5pkV&}gSzS=K`+!<_okL^3J%3M0k>ZVSl<`L$B9nG;K0e}Gd{|7g8 z*%U(3LK{XhE(D04)P27gc$oJ3gJ6eZ5>3yRI%C4K^ypFr_9~K*)fUT_S+$ho@O+I9}AisCDZ(T5`+{NkM)yPn< zs8fr*_yh3gsxNPCcOz0?8hs};&^7EnSO>n90vU^hF=M|%0`H1w6_@hR6DFHov11ZnmONXX1Wo zp-KrkC%9}veL`}2$nHtBX#FU*S=p?YxFZq=y~8Vg)fstCZu303k`Mrzs-kVvkfcH% z?rfg1V%z9@cdux)6~<6nLn++njspi+2>$H+Z)8@B{KDO!Obc2gSHkdU+5iW@i~x4@ zqY$M2!^e;Il$ln$$G(ehm~wq3F-M$Is;ioc*9sU&#T4)Bscy~`)DZKb$DQg5AX*lp znYx2>grek$J-ssbbr}q3R#!9X-Z}cUh@+~DCVg)UxAQsBNnNq4?e|D&Ko44uqnvqN z145kOp`ld1wpM#zLSs$K$d(Ru*0+2J8}2d1qS9&i_3Car49V0=)<&5N@=oCqHvbsR zjgSg`4=9R%RE-BxkzCNnLL|T>h?Gpoh7TTz40MN0aPlfNcS;M6l?sd+$zA?r>+o#6 z^hl*l5r%#s4g#Ej5KJzyBB!97l}$k}&-xf-_{NL>7<)WfuN0pgad`j<9wUfC++9Rd zHN@M=F01I-yY>M`N1z9VvU%cw?<_dcBQrI}#A&ZhQU&vj>n3nwXJ7Kp(_=Qn>to^88;>iQ+|u%}u>fT5Qc!&p_Pw~B3- zL8v6b?>#E{v3Fp$znjMIjJFUMs1aKvT6>kSn>#u;Z6L!79bBKXxIr*!Ry(7>aZ(+g zP()ag_C)|5m{JF9%_x{(y(e3ElB4G%fI4vR?&$8*B6QOCHB>alO70CWi~|C6P9ThRQ1FqJ9E}LN+R28K<=a1?!a2%b#&Hfl@t}uhBb|_jI3p$- z8O)z2p7^>qwSX6b@x2c=bNWZ9Oz>0@{+}%4@O5ab%x0o>h*c~0hPt+u@Q`sYXg0ml z^IaV@$12K2)9AX&6iTS;bd`v5Hqtl$j@n}Ulb_Fe6$4eJfCtYUdQkA_jk_jvK}^1;|S=)@z!>KQYo7?K8Tby zYLZF>Dhr5?j_$J&S{GaZ7EN=iVEWYziCiig(^PPDk(}&@xT*TAIi>ZVrtJ9x{7%*C zGDA3cW%TTDJbL)l7ZzXq+^xk+hhJU1eE7A+?ZdAxjt}oFUO8MWo_+euPaePj>kmKk zcoF<}aP#GxufBHh^!?v_`P08rzyHJiHy^(9_75Jxio>r!{seuNTmGM(d+z?jNA4?p zKDc?~=1b4u@2iWa2eAC. */ + +#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 +/* 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 +# define __f32(x) x##f +# else +# define __f32(x) x##f32 +# endif +# endif + +# if __HAVE_FLOAT64 +# if !__GNUC_PREREQ (7, 0) || defined __cplusplus +# 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 +# define __f32x(x) x +# else +# define __f32x(x) x##f32x +# endif +# endif + +# if __HAVE_FLOAT64X +# if !__GNUC_PREREQ (7, 0) || defined __cplusplus +# 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 +# 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 +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 +# define __CFLOAT32 _Complex float +# else +# define __CFLOAT32 _Complex _Float32 +# endif +# endif + +# if __HAVE_FLOAT64 +# if !__GNUC_PREREQ (7, 0) || defined __cplusplus +# 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 +# define __CFLOAT32X _Complex double +# else +# define __CFLOAT32X _Complex _Float32x +# endif +# endif + +# if __HAVE_FLOAT64X +# if !__GNUC_PREREQ (7, 0) || defined __cplusplus +# 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 +# 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 +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 +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 +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 +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 +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 +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 +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 +# 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn-common.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn-common.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..88e5fb2b17402de805324516987d8cd60b505ced GIT binary patch literal 16564 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn.h new file mode 100644 index 0000000..b4dbe96 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn.h @@ -0,0 +1,122 @@ +/* Macros to control TS 18661-3 glibc features on x86. + Copyright (C) 2017-2020 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. */ +#if (defined __x86_64__ \ + ? __GNUC_PREREQ (4, 3) \ + : (defined __GNU__ ? __GNUC_PREREQ (4, 5) : __GNUC_PREREQ (4, 4))) \ + && !defined(__CUDACC__) && !defined(__ICC) +# 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 +/* 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 +/* 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 +typedef __float128 _Float128; +# endif + +/* __builtin_huge_valf128 doesn't exist before GCC 7.0. */ +# if !__GNUC_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) +# 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. */ +# if !__GNUC_PREREQ (6, 0) +# define __builtin_signbitf128 __signbitf128 +# endif + +# endif + +#endif /* !__ASSEMBLER__. */ + +#include + +#endif /* _BITS_FLOATN_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@floatn.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3bb395927411f4e2ed12e4c43204d944d0ffa70a GIT binary patch literal 12811 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 ULUXUBFKf?TeC{jj`q$j${|sPz-v9sr literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@flt-eval-method.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@flt-eval-method.h new file mode 100644 index 0000000..2fbc6f3 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@flt-eval-method.h @@ -0,0 +1,33 @@ +/* Define __GLIBC_FLT_EVAL_METHOD. x86 version. + Copyright (C) 2016-2020 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 _MATH_H +# error "Never use directly; include instead." +#endif + +#ifdef __FLT_EVAL_METHOD__ +# if __FLT_EVAL_METHOD__ == -1 +# define __GLIBC_FLT_EVAL_METHOD 2 +# else +# define __GLIBC_FLT_EVAL_METHOD __FLT_EVAL_METHOD__ +# endif +#elif defined __x86_64__ +# define __GLIBC_FLT_EVAL_METHOD 0 +#else +# define __GLIBC_FLT_EVAL_METHOD 2 +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@flt-eval-method.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@flt-eval-method.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..0f886d9933a31c1ef9a8cc54187ef6aab52c6b31 GIT binary patch literal 12395 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-fast.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-fast.h new file mode 100644 index 0000000..328d223 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-fast.h @@ -0,0 +1,39 @@ +/* Define FP_FAST_* macros. + Copyright (C) 2016-2020 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 _MATH_H +# error "Never use directly; include instead." +#endif + +#ifdef __USE_ISOC99 + +/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l} + builtins are supported. */ +# ifdef __FP_FAST_FMA +# define FP_FAST_FMA 1 +# endif + +# ifdef __FP_FAST_FMAF +# define FP_FAST_FMAF 1 +# endif + +# ifdef __FP_FAST_FMAL +# define FP_FAST_FMAL 1 +# endif + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-fast.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-fast.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7bea3d38029be28e8a33dc39c9e3affee607a5d8 GIT binary patch literal 12267 zcmbVSJC7tu5$+RM2(5uuNQV$YCoD#_btA1-ICyY6Bn)hvRCab&cQW<5%B<;`a}OU0 z>kRlUhlPiPjR7VOE)Ief5s_InS)Gy9)o1K#q|Qg=7ZG2)>c_kH|NYNDzuJAUD^Fdc zOL^$Zqj9CRed)Ay^q=VEVD<1u_5JP}s+R3>>+0g%4G*S076&tE<+|bdr|CVr|9$I& zak?y2qUEAWM>s}8h7+*|G1n^mi6xacmMM5uNDU@JY%uD?m(_t`bt_Ss=AY|B-}(h zHhVx1g#1+KKP}Fx&EB-GUYs_eP-*GLLErK^t7|}+J&niIx`XLNZ5nnDBF_F0U?R0x zR|{DmyS=o8N`e=E^Zpsk>nwZre16MWf*CjfWg{f^*_P^{D}H%+!y}m`r)F;o^v1C@ zpN(4djK&i#31i25{)Bl37@%W%I@<#emBzxbBcCx^Z7G{cG|FewTM?xNcNVSas3|1 zjeFj&lkJO(@9rRi09}L6Y`Yvu&@pGu3tO=kP~h|CS>Jz zrr~`jJ_I>n?}?8+B&;>w!Wc`B599G9gX2OXsIafmq?Bo7jlA`!2Mc6_k|gnQlBBa& zqyUDlx}g!kn&JS0v+r5~zZ9a`V{p-ekDoyjga1l`*i8Z3#4t zHFd}9r$D@TI=D?)*N;tce_!I?l)aVr_isLab3dy`2naght8;#EN|{p3m#A3^}|V&#*r zgr{TBf{kY=bWKnpk}NVoVWB>R;?v)$WdfMo5DN!?dvjW-bc%-2qZju?YPnbn{tTfz z|9f-{vuIV+&TfwqKw%i8-5_qv8LQeA`cc+Jqur@HASyXiX!V(SLJV%B8z@JrGaZxI zNb=Yho-Q{L1+5=+bsl_-jka#s&mSEE3ap{^|s>W{$RYQA!y?nYw1Jo*%@P>=+C ze!W*R*d}%>i12%@zV3d52MqSM6T;oY84QQ;P9zVy3@w}p!YQ9Tr#;Z=r_8H!Woc$P zb!im}xYZRF_UHQ-(0k^SyLc_y6Ih@Jg*7N(G*$GFvTCBL99l#=ohKdeGOQBWFD#mrF_+>{I#0Rg zECCjdUq1bV&4N*0cpH>;Q7h#lY%iu0Z~@E|V8=8%!P9^J*I!*JOUb&I+{HIorM*bx z5vQE#ny!(p0ReI`D8vS?`?Cf$kTUedb6o^Piy+!)J2-c!YMI$H8S_-f!9eG5nSoE_ z7}g?=rmedCy9sX3Ina4Mh|6|;Vl-d}gT&F#wk`vsPGD##t#7vKz$HA^ypE{UXp5;u z#Q5-pDHfsLx^Jt~X?RkYgKnL1&+MDxD=1%?-Hp)-{|+dkf72`nSczVcV<8e?(!^>e z79#|YOvZY~raAi*UOHoy#L5OnlkBc=GZ7xe%YanQ6=6sS>R`Z$4uVN1R`48@o3bzH z{Sn8Yz^_02*OKvcdoXf!Bo+Wq4@>G1u))mz%zV8l32CvYvb}pouD1j4P~quYL1oik{1X+ zjzXK5vAZBtMb5$e9y&d&17xJ6)==TEFJ^1p8Y;+^iquz^5Jqhf`qRlU^2`lD;DIPg z^uqjs_~ij41HS*BpQ(^eeAUn^8VEq6=>o=B}ngv|XZvvgi zkjxrJUO^4F1aH-k1q418{D~jgA16AZf;o@hqa1+cxd9vhl(?6>xHs=0^Y=NpKId_> zV)CMn&HxQ^{he4vSYS>mJzkhI2W-q3m|lIZ2lybzZbtxZ;N9EB+qY;xR7A-TE4w#- zluxiBsKLmz&5WWagwTtyqJ=J7ci#5?_|79t0pMeTN{;oa z(<{6xuQxZsJUjn0dHH8!htbuivaAvCkDUAz3&$-n6HE;T;j2O5Rm1LzFPJ@ab@G_p0|n~Fo=RZH@X-t(qx>3_^?HUd zhoU0mt`p?cH^D}CH!!Hj7|hz))Dy*VgyE{r1SGOrU#D$*8*Rw_rTjf ne{zry@Ov. */ + +#ifndef _MATH_H +# error "Never use directly; include instead." +#endif + +#define __FP_LOGB0_IS_MIN 1 +#define __FP_LOGBNAN_IS_MIN 1 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-logb.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@fp-logb.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1f9cb99f23992c5b6bedb910998fcd6774e471f2 GIT binary patch literal 12411 zcmbVSy^kbE6`wsvAP1IpI%A0daS{Qm-o8br6+&`g1jZ+s!x9-usivlSrr7=%cUAA~ zI)xmGh`^Qz_&2y#5# z?eqry6&%fZg%AodTP?t$S?kU01accOI0mF0Esod=4}#kU^w!dm2m0qADpivdD0h_LiR%-z^Wa>o-l>oirjU;4U?PLoYd&A-p!AK?urc`Ct zRGVz0Rhe1Wt$DkSwoeW|KZghc?iy@n+2QC!9_&_0C6PYH)``Q9xTDL_dh=<**H110 z$O+e?CuI3|rs8cUB!WI*?HwOWq+e^ihB2BR665hCh2ugZh;Uz`N-0yx68+YVZY?+) zAuUQ=vke*i_1|wLO{>~BNvstg;;L3 zwFlwP?>?St?*M|2QNbmr;zS*6{s*&r$@RjBoWxk3nT zr7I{$iUW~}bR@d$y`Rn(ISN|e>f+G)95*^);6|C=v!^E(J;#wF31Mb1t z&DQFakqvBN#nnMt1pWYZFcmMoJDigQ8YM{MB%LbT>RPu(<+^R_CL46)gTMccbwYF{ z%E$CAroOC=@M7G%9pt7P!Y_kN7+m0OS&Xf@QD)7)TD3>eFll+!1?F~-a!4n8hS*q{2upf;9P88cTKhxhY& zvG-pIU)?W<+!<{8gzbB;DttOD>ZVSl<`L$B9WAjU1%LqhUx6FGYziT1p$(&jR0>4T z>VCf%c$oM4qhQBk5>1avohji(dUUS>Cl$%*YLDg1qFTyxd1nQ9hq6!bQqG^&7Cw7T zXbUe{Yp``l|a45@_wiDD-Ey2T&ZsJL0^TW#7UHARO|^ zL)-%$J|%9QDoYc~sY|Pn!KJ1!(Ldk6fZj8o+=XjVpFjgWD6B$(M^o7zQdUi_Duos~ zoyI#IurjO?S#sgw^L9x6Z=VezrP)Mi5+FH;8Xnt+zvUg6a5ITMow@f*3sY*yQNhJC z>JyT)V>Q5{#p_3}!d2(=EpCfsLTy0yOMkX66#Y6{?Td)wtzOh%&kMxtE9SdtH zgon&=JO|6b-`)O$&1sP&GXGOw!e{HoA7k-LZEHkD%;hG&e>n{5_x~{$({CM@4c$ zj|qMqQy^9{Asc-tNaUXfY=N^^;kh$bNvu;~(8%uUPbRlU(XU4;Wr{HJ1933m1cYF2 ziS;-K<)T~)I(ej3$nfKLznpqJU2lw>9dPvkGCW2Qg}D3pWNL_>vprTdu=n5t&d)&) z3PV}qi0>jqAeHE|h$y@4ub{}B7?y_b-a^w0$QQt{#(|&V(~C%}?Y=ZFt<(|PfxDsn zGvS&;q1;D#;fG786C-v<4potHFyH&W4Ql`iE~(Lz`Qx)u8<&O((xvR7wp#2n>~l=m zoPr*-LFiv6`;ljA00NL8^8qGlg81?P(g)vvPtR0Hiau?`dE<;cXk}kM!jMJj*{s_4 zRRd0sq)XJi7LTJ>zKG^UIz9uL;5!@=?ZM|G>0x20qpE?S)D4L(rI}#A-lk4m&-Z4O z4<{*N1jJ~f%Ui!8&(tj7dVWbf=u{u<1x|P+4CAJ%I=@xzy9`1l3;y6y*^h$*qk=h& z-;Hb`E^q_3NVIg7u$MbIH*Fx}`y5=Kvba$&X;wRDz;SZ@olrzrU=Bq99+*-GY|I## zUVW-tc#vb4BY-+^^?Y*oc@cW)_cc^B#7gcBFXdBm2!k*(trMf@LEy)pYd9dJ2Zkl2 zALvK;@NysBKvqMStvM{ae|Y8=rU3AmppacTYxD|_O3Tf4FwahZCMEr(YcL-Bo&=53E4$p)L36C)Tr`iauS}tY zdPrA^DQ6>n>t9h5#=rh-(VG~kDiu6;me7NOCvVcXlp{~$=Pj(Eh6*uCVsZN=+zpA} ztfLLrdarnV%oLEI1{xlN!2<~Bx5<`zJW*msiQ~yjLZqaq$tn@3EFj9#;B~A~F;4{t5y`oJh?}WznrmMFdCEP1fb6x|+-C@@v$t1|-(0O8y{@ZgfBJIs z=KJtk>0|NH&wld5m+!w6FMck5`r_qkwffFe$bX;Eaz4)_27 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@iscanonical.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@iscanonical.h new file mode 100644 index 0000000..dd6f23f --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@iscanonical.h @@ -0,0 +1,54 @@ +/* Define iscanonical macro. ldbl-96 version. + Copyright (C) 2016-2020 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 _MATH_H +# error "Never use directly; include instead." +#endif + +extern int __iscanonicall (long double __x) + __THROW __attribute__ ((__const__)); +#define __iscanonicalf(x) ((void) (__typeof (x)) (x), 1) +#define __iscanonical(x) ((void) (__typeof (x)) (x), 1) +#if __HAVE_DISTINCT_FLOAT128 +# define __iscanonicalf128(x) ((void) (__typeof (x)) (x), 1) +#endif + +/* Return nonzero value if X is canonical. In IEEE interchange binary + formats, all values are canonical, but the argument must still be + converted to its semantic type for any exceptions arising from the + conversion, before being discarded; in extended precision, there + are encodings that are not consistently handled as corresponding to + any particular value of the type, and we return 0 for those. */ +#ifndef __cplusplus +# define iscanonical(x) __MATH_TG ((x), __iscanonical, (x)) +#else +/* In C++ mode, __MATH_TG cannot be used, because it relies on + __builtin_types_compatible_p, which is a C-only builtin. On the + other hand, overloading provides the means to distinguish between + the floating-point types. The overloading resolution will match + the correct parameter (regardless of type qualifiers (i.e.: const + and volatile)). */ +extern "C++" { +inline int iscanonical (float __val) { return __iscanonicalf (__val); } +inline int iscanonical (double __val) { return __iscanonical (__val); } +inline int iscanonical (long double __val) { return __iscanonicall (__val); } +# if __HAVE_DISTINCT_FLOAT128 +inline int iscanonical (_Float128 __val) { return __iscanonicalf128 (__val); } +# endif +} +#endif /* __cplusplus */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@iscanonical.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@iscanonical.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..0c075c6c8b6ed77f4cd820bbb76f4350a70b32c6 GIT binary patch literal 13266 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libc-header-start.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libc-header-start.h new file mode 100644 index 0000000..b872a41 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libc-header-start.h @@ -0,0 +1,86 @@ +/* Handle feature test macros at the start of a header. + Copyright (C) 2016-2020 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 C2X; the symbols in Annex F + still require that macro in C2X. */ +#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_C2X +#if __GLIBC_USE (IEC_60559_BFP_EXT) || __GLIBC_USE (ISOC2X) +# define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1 +#else +# define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 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 + C2X. */ +#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_C2X +#if __GLIBC_USE (IEC_60559_FUNCS_EXT) || __GLIBC_USE (ISOC2X) +# define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1 +#else +# define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libc-header-start.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libc-header-start.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e0f3e46a6cc50a88e023ebf8e285a41ba9ed1f18 GIT binary patch literal 12978 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 w&wK$$Kh2S@e. */ + +#ifndef _MATH_H +# error "Never include directly;\ + include instead." +#endif + +/* Needed definitions could be generated with: + for func in $(grep __MATHCALL_VEC math/bits/mathcalls.h |\ + sed -r "s|__MATHCALL_VEC.?\(||; s|,.*||"); do + echo "#define __DECL_SIMD_${func}"; + echo "#define __DECL_SIMD_${func}f"; + echo "#define __DECL_SIMD_${func}l"; + done + */ + +#ifndef _BITS_LIBM_SIMD_DECL_STUBS_H +#define _BITS_LIBM_SIMD_DECL_STUBS_H 1 + +#define __DECL_SIMD_cos +#define __DECL_SIMD_cosf +#define __DECL_SIMD_cosl +#define __DECL_SIMD_cosf16 +#define __DECL_SIMD_cosf32 +#define __DECL_SIMD_cosf64 +#define __DECL_SIMD_cosf128 +#define __DECL_SIMD_cosf32x +#define __DECL_SIMD_cosf64x +#define __DECL_SIMD_cosf128x + +#define __DECL_SIMD_sin +#define __DECL_SIMD_sinf +#define __DECL_SIMD_sinl +#define __DECL_SIMD_sinf16 +#define __DECL_SIMD_sinf32 +#define __DECL_SIMD_sinf64 +#define __DECL_SIMD_sinf128 +#define __DECL_SIMD_sinf32x +#define __DECL_SIMD_sinf64x +#define __DECL_SIMD_sinf128x + +#define __DECL_SIMD_sincos +#define __DECL_SIMD_sincosf +#define __DECL_SIMD_sincosl +#define __DECL_SIMD_sincosf16 +#define __DECL_SIMD_sincosf32 +#define __DECL_SIMD_sincosf64 +#define __DECL_SIMD_sincosf128 +#define __DECL_SIMD_sincosf32x +#define __DECL_SIMD_sincosf64x +#define __DECL_SIMD_sincosf128x + +#define __DECL_SIMD_log +#define __DECL_SIMD_logf +#define __DECL_SIMD_logl +#define __DECL_SIMD_logf16 +#define __DECL_SIMD_logf32 +#define __DECL_SIMD_logf64 +#define __DECL_SIMD_logf128 +#define __DECL_SIMD_logf32x +#define __DECL_SIMD_logf64x +#define __DECL_SIMD_logf128x + +#define __DECL_SIMD_exp +#define __DECL_SIMD_expf +#define __DECL_SIMD_expl +#define __DECL_SIMD_expf16 +#define __DECL_SIMD_expf32 +#define __DECL_SIMD_expf64 +#define __DECL_SIMD_expf128 +#define __DECL_SIMD_expf32x +#define __DECL_SIMD_expf64x +#define __DECL_SIMD_expf128x + +#define __DECL_SIMD_pow +#define __DECL_SIMD_powf +#define __DECL_SIMD_powl +#define __DECL_SIMD_powf16 +#define __DECL_SIMD_powf32 +#define __DECL_SIMD_powf64 +#define __DECL_SIMD_powf128 +#define __DECL_SIMD_powf32x +#define __DECL_SIMD_powf64x +#define __DECL_SIMD_powf128x +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libm-simd-decl-stubs.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@libm-simd-decl-stubs.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..d6ac3995d7aed7157783351eae67d090f865e6cc GIT binary patch literal 16936 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. */ + +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@locale.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@locale.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a982d053131c6e14187df09bfa55f5c3cc84e1bf GIT binary patch literal 13210 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@long-double.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@long-double.h new file mode 100644 index 0000000..b77124f --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@long-double.h @@ -0,0 +1,21 @@ +/* Properties of long double type. ldbl-96 version. + Copyright (C) 2016-2020 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 __LONG_DOUBLE_USES_FLOAT128 0 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@long-double.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@long-double.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4cc272963de213d7dd6f4415c0be27d26fe3f9e2 GIT binary patch literal 12343 zcmbVSy^kb06`zHSh+u_u*-2!KYHJ5Aqe}=tx66T6EYfiaiRE^?y3N!_U)eQ1b18%f zq>Bh3<=;3WG9+RoAS59}NC?3m?>)O}TfA9A`?QdMX{qKMN{@KNo zi*nyJx|G|l+!`Ztdve*!4H2-4$EYYvsEB{@dw3 z7ytXplX9?qXUlY?EbEK6U;E>~KASD9aE;mQx&yf;=__fSsOnC- zl5i94&};xb5b^_|e?MERHXGBrdbZk#LZzh}di|KwSzQCl>}ouw)@@BEYSXZD5OMZH zfQi&%T`gq2>o(F7DhXcv&YOFn*HIqW_4z4B2{dp3%1TJ=y)D&NSN!mBhFhW~r)EzD zI^)oqj|VLdj{aGwMrix9W{|Jo`LG> zb=@5nhjs@vESCP(^cYBV!&_)FeYWxC zCBy=7yuki-o1;5;w1Xr{;`$gRXRbSujt)oT%_kYJJv#s(CtQy{jg{Y-W*%k6xDYRb z*1Yj9j9ny*HJ)J%)8oZ>Jc)2za03+{YNV7hjjYiF-RjiagCq)lMep*`cuUKFCw({FEg$t_U?Fc3NQ@uQq;%~~s%B!nq&!1gQ>Jb9M2N=0%k~Im&)p%E5K(b43hGsIHYUFp?gO-R!K+8QCZn)=mSYMc@yR zgSmL=-QkiZke{H9v+Fd)PPe)@s?>eocE!kzSAYF8>xAe?l#l5d&n}k zgkJ%f$oX<*%=;i>?WLvhIfZWZX4sV;m$A%D#`1Du@V1Z!uy7_*Vokw3D|etRU^P^Y z^W0!n444XzoYN<~F~%$;4n8i-#Gm`bsLGXA8M9R7#^>{SvG-pYUmb=+?hH14#`e8e z6+RsnZP#W}^91wAj@DR_0zd%$FCYzH0L75>&`{ArDg~-%xgQ3D49i}BQtVU~qUlko zGhcWWj~*y+mPk%F2P|J!)ly!{dn>>@)FHvkIe!{k`Rp~r7GAU1x+os_y|{iDwx}rC z_wt_6KEFHpqY|A!CIRB7J){VW@~XQ#xiOF+8z;QS3`uw5oMM(y;V+MnAa*@C7=avN z6&6nlA;Smxv!g>3LO|uNZqANIfkvV(4G!v$z+X#W*;Ah)p)Zd<1uGOJ0iPf5l?>d( zZUs5~gH~U3zQF~0`?wXt-u)4XLwF~W2VI6{Oa$SWPae~5=J+Xd>Refx8BYCHg#xZM zg&F^R{{p(md~z3$MLq!oJt!=pz@w?+04b{`SCvDHoKEMR4p}(c<}09g4c!ZE!}S z4t_=;eKRlY`CCS^>eIF!y~t~p77h2yX9 z{>Em(C@-81%DSkPauT*@_YANB+z!Bu@e%}A|H+?zbfzpNcF%nm-(Z#YB#}p)a?~|l zBU=Lk>2BE5DX3j|Fv5teQneAx?K03!R7I8Ff z)#cAkaC@Hvo!6~6ZM-L>0Uq=cFLBm&85nhfhlbMn(X0->gvXlK5tSNkF}8>p8y+#m zBGj|{adkRfgA`_~TW8!od!~2`%2y_HW3QiWBSXOn*D^{k=Hb2*8%cViU0Thvc)G0R z%Wht!(-V*xzT+mz9DF*Gzg~j?Y=#q?o*@gEQbbxsFh*A}mSAA^Ziq9S9iBjnU+!Pa=!GpNTHOxju1Ma2sY!_}z?NW@xS*{wSp zO~`jrVwoY^INNZdO+CT!{O~v^c%Bm}fQffB>Bn2x9{jd~7AhBZ97WvEf8= zhX+@9?{Zdfyfw75di*la(b?8xHo|kk2Vm88HwJFYx+#&%MPq&y zyt>G~1c-4n?QM6%^PgWi$Orh{nC(M`Z~_0GeE!ehee2(U`ScgR6yo)pAAV1~|K_9b zzJ4h_`taq4;??Un-}&*?H{XMC*I$Pm2zn*&E)0A3Ijr~et508j3IG1!;`1jk@&CDa B03rYY literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@math-vector.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@math-vector.h new file mode 100644 index 0000000..0801905 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@math-vector.h @@ -0,0 +1,63 @@ +/* Platform-specific SIMD declarations of math functions. + Copyright (C) 2014-2020 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 _MATH_H +# error "Never include directly;\ + include instead." +#endif + +/* Get default empty definitions for simd declarations. */ +#include + +#if defined __x86_64__ && defined __FAST_MATH__ +# if defined _OPENMP && _OPENMP >= 201307 +/* OpenMP case. */ +# define __DECL_SIMD_x86_64 _Pragma ("omp declare simd notinbranch") +# elif __GNUC_PREREQ (6,0) +/* W/o OpenMP use GCC 6.* __attribute__ ((__simd__)). */ +# define __DECL_SIMD_x86_64 __attribute__ ((__simd__ ("notinbranch"))) +# endif + +# ifdef __DECL_SIMD_x86_64 +# undef __DECL_SIMD_cos +# define __DECL_SIMD_cos __DECL_SIMD_x86_64 +# undef __DECL_SIMD_cosf +# define __DECL_SIMD_cosf __DECL_SIMD_x86_64 +# undef __DECL_SIMD_sin +# define __DECL_SIMD_sin __DECL_SIMD_x86_64 +# undef __DECL_SIMD_sinf +# define __DECL_SIMD_sinf __DECL_SIMD_x86_64 +# undef __DECL_SIMD_sincos +# define __DECL_SIMD_sincos __DECL_SIMD_x86_64 +# undef __DECL_SIMD_sincosf +# define __DECL_SIMD_sincosf __DECL_SIMD_x86_64 +# undef __DECL_SIMD_log +# define __DECL_SIMD_log __DECL_SIMD_x86_64 +# undef __DECL_SIMD_logf +# define __DECL_SIMD_logf __DECL_SIMD_x86_64 +# undef __DECL_SIMD_exp +# define __DECL_SIMD_exp __DECL_SIMD_x86_64 +# undef __DECL_SIMD_expf +# define __DECL_SIMD_expf __DECL_SIMD_x86_64 +# undef __DECL_SIMD_pow +# define __DECL_SIMD_pow __DECL_SIMD_x86_64 +# undef __DECL_SIMD_powf +# define __DECL_SIMD_powf __DECL_SIMD_x86_64 + +# endif +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@math-vector.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@math-vector.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..bdccf71015a29fffa68396ed50c091284ebb1ee1 GIT binary patch literal 12314 zcmbVSJC7tu5$**KorMmh<0mkxsU2yx!T}3ThlGKRlgiG{>Q1I!SD7_Eb1wKuSZBa* zIV?P+v(Eq%2NwsyiipUpnyk*q>gqFgHB#pz@{2Ft_2b=#|NiHnU+v!P%2U_qQXabU zXk2M+Upj3a{U>@kSUudUzTbUU)v`TqU0s~J;nB3m;$Q}?TsOS@G`(l{zwf;%M>~|J zRrPq#C$T6=%;uh?*id+D_; zKmFyee!*^1cX#E(+j2Tt*1Hcs{M*03S{$tKjK%J{1G#4DD`}mm>Q1_na1-s=>;XLx z@-w0TvN)?Yd(*mlaoU7JrKKAOeaq{tt^sBCG#*py4yF^eY1lo8IQv6@iPU0UEo6P{ z_R8aM!DBP904mg=A@etCGq6VZ}Wv!?>Racs@!qZYj* zEpB`vU<>LkhzU2m5>?W=Vub%%c3TX-ae9zoRzh{H(!HanCi2BQP+fzryMA?P*P~&v z^tWyRgT5-6g>_ms_f9DWTwcL-hn}Jv_w~}gCX3*Ad6S0gM&*Q6Cw)MF1y^%kA%=p? zRts=w)_OC$g4{t&jsee37ANAxm%-nrW4Fbtz=(_zrn4E`;cYBl&)apf zeR1*K9Yhdt*I+Z-E=MPFvs)!f;`ta`7Y;v>jvhzr%@-M8zjy#3C)|LZkd@z=hPR#g z5cC0i@A%k5!dl}Q#xOlTjK`A*$Av^tVP7Mqlxbv*e(OmO7Mu-AlElYJlFnX{0z7op z4UGV=DGnew`>qx6OCg#)1{W>(_!%To=qm=7m&RLK{&&)M(>?LAG6oj1ErG;XQ+K?6 z3dD=2gV~gI{nQi>4<-Ih*<1PWaR2uHVOEb25Ol!EMI)afmYZYiLHO$@A1~QEf#73Q z^vI>UEyUffX;7z-F@E^tpD(hWH9eeBgS-mxR&t?6nBg$zxyr zbh*h<(E34F=fUT=$qkb%QazsKa46;Iy6qVzh9y+j#uyk$55{heR_Bat5(_J?5z->? z2gt!(y!7sHO%rI8ppC2NG{sT3dN8Wg!_aoc#Enn?{tfGd=t-21>1RxRSsUTi*t-+t zrU$~WfK23iku&9e5V20u()yf24|+cyOOMM`oF;2|xiENJNCQ|nlP$5PV4syo&=#;7 zYRzSCuqg)2WlGNJ6W$nORuTsv7Z&0#ePUD_ORJ1otBvFL`MlWsuZ*t_%OQ6Lo4#WE z-m40q4vV&HGpTukd1OahtVjVMfd03ThA*39NCs%bXd#sX)wA3Wi$R8UuRkkxE+*0R zsMJ{=yopDz6u3$xr<)$jmrb>lm-595@D6oI@N&+d)>b}yU1tle41`{VTn>YLVf47h z5H#mZD#LGk4fd-qQ_s(GZy?n*PI%uJ(&xm@#C)N`U!Eb=>jrQY0=3OTA8!iI--qj~ zt3wk)Kn<=QudYUcCd#cX4vLJx-%3O|P@f_pB9A_W9TX%1pI=YmqXd>=-+^3ruhqBR zZ}5P@-gZK`dpHAe2=7Glpv%yVi6ERZ!*klroPNr@I#*z3mQ%k~p@3UWVZlG&iGVIL zpQgoYkx#%t4+={t@J*`dA^FtgbaH5sQ|P?=04u|Kk3BBFeBBPIlkM{wJZUwhS%f;y zHOAM5K(@V?5^pBe=X3C|v@*4ZY!jR{L!bCKJLmN*T0B3hzNow79(N?_;CBSlH>1jk5$;0)F}Y4>q4gdEsqP zphZoQivYZsGr$Ef9e^Fv5Cl*E&DX!aQeYChm%fW{l}dY&k|Rzz>YA>RtpNdYF(||a zu8*?@H8^GHZs+;|h!#P#kvlj+sA`$nGm&|!$Y3;cxXh&|=NQ%^j;5`;{JRNm?{lDs zdJvb5_k=XSgF)gDXIsC3Q73q4D3Whxb?_xT*1V3WXlRS6*~8fIgejJjp53=q+%yI$ z%t5!#xEJ%;v^ug?|T>!@q5oqo_nL=wl%gVA8~DCKe+Ek4)})#`ZV+6ka-G zmBbnahK%g4a5FhPikAVYoGHS%57fbc6CDIIORU8?C^uza(8VJkg93m2$-kB!Pqzmn zSBF~xKt{#{q8N7{(M${RcD28%Ch=~*;O-81P#MZAXM8sy0?9|nJCb}fJVB8;F(OUB zdkf7kAYTB38V7!cPe>A0+rBm~PwE8i$lXxJnsLpsQeN`{;Rj2|i5a^KhpNapnBPOs zhBbhUl+@%Y{Po4m#;u`(xK!L~tB}uNk7FU`67;AALVr3L#+|w02S9?tN0{Uf#IFt@ zeek{a{5*xU=o3wxHLmD`R)&HT1}sXi=Hb4l8cBMgT{_LPcpkg*WjC+V`4f-@zSAYi z9{hA9KPZejsyY}*J(1dS%mn-OHg)BBzAvMEILRGGK+Gn(z3m&zOzj1(-vI-2 zD<&`M=nObct|Jty2usqb2*3+-bih`QfyvbudVr5{>~;i@1MlB0-oCCvul-O%B?GMN z-uO{IC5JEwA9v0;`6|;g!IGw1Rq}Svl}Q{=*xBIZSRloJi-J3J|w8* zSg#tr!mILnb0f^M^FI?wKOZ}c$3FRGNx(mHvQsQIw?tW>8Vtc_BCYyqKck@kS&0Hv zATxZz11(zSiHXoLygsyG=YTzabuX%h-4$OjTj=W4F}Vjy+KpY9;2pyUGklElYf#qf zImH}`ij28VkW;4xo7~;NpdMo|YiCmz6-N<1Jo z4=+YOA&qfHOintQJg%XQ2ybz3^|L(MMWrL z1)sY~--J#)ji1o4h8h!M*2L!aOS~Hrzg0&Yuk~IrcMWBL3u%{7Mb**ti5Pqq0i8HG zQ1>U7vXSvYq@<|Hk_adZh%T<4vJsvOJ^-t(do(aD>*ho*7mfK-aCDKK>BqR4_Nja1 p`Olvm. */ + + +/* Classify given number. */ +__MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value)) + __attribute__ ((__const__)); + +/* Test for negative number. */ +__MATHDECL_1 (int, __signbit,, (_Mdouble_ __value)) + __attribute__ ((__const__)); + +/* Return 0 if VALUE is finite or NaN, +1 if it + is +Infinity, -1 if it is -Infinity. */ +__MATHDECL_1 (int, __isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); + +/* Return nonzero if VALUE is finite and not NaN. Used by isfinite macro. */ +__MATHDECL_1 (int, __finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); + +/* Return nonzero if VALUE is not a number. */ +__MATHDECL_1 (int, __isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); + +/* Test equality. */ +__MATHDECL_1 (int, __iseqsig,, (_Mdouble_ __x, _Mdouble_ __y)); + +/* Test for signaling NaN. */ +__MATHDECL_1 (int, __issignaling,, (_Mdouble_ __value)) + __attribute__ ((__const__)); diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-helper-functions.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-helper-functions.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..bc8933411049905e9497063cfe64d0837acd7060 GIT binary patch literal 13623 zcmbVSTZklA8LmpiT#zU-*-X?4V}`UlyViC#Y}N#mFacc>kg&ucx@gMk>eJn|Q(e_t zm+7A9ix?1}jF$%qNf6P8=!5zoB#Oivf)4>NpeQEdLrg$l6oTYBe*ZaDHK)4%Q(cpV zYG`IkHMl2jz8{MpR9 z+z-8I+;z1xkCWXX8au-v5q=gY`*$|^SZ`cycaT2YpNX`8?%t1m6w=CL*NFU+C;O*w z?w3dMLhH?A&%XRjeGTnVqYh&LQo%Oz(##!&v6uDbk=-bt4sdYryT=tjuk95EgCNSn z+HNKMBjIIvA_&%|puBEU5dxs25M;w3cEe!G(vYgz9}1YHJ)~Ladf_-8c&S9Cffq08 zU>}w-_h#(=JjvXH{bc~9BP8j5+V_WI#4j(-uqQ2wQ?oJ!dB!{nF6F|VWm1bBPnc#y zsMnE}aD-EW3?|{^_$y+`bnt^rBpy7%_2bAFvrHbfA)ih`>Pkcy&svwpGxBKG{L?If zFRqj<#X8|lPi4N(fXgd5jLFI4d=S?CtMmw-O1U)H<$mU-{zMEZ)PObTH#!v3ZH0?i zl%~qfRvf zJ&Kd5i>T=iAvk-k7V!J7I~`DR5iXxU3rT#66-j26MtPd~cd74byvOHC9at1fE*VCf zy7l#CBCZ`BZqpCLy{U8hbe}%U!mEG!^r@Rqovzg5x=1>3a(C)2kjsN{q(J!1^=ozO zEkRH@N;_m--6`^JJe`tGQS80>wa1sLo;E$qNrSu!h^q{t4X-NX5{s-a#YYN2TpX#Q zs}ZMl&C5^Euf|z6L2Wve_&KOVRyR3i-G_`d@lv_oq|l)l1 zQFKj#F7?LH7OWb*X1zA(lmn_Z#T4|Vgp^}i3I~-JYU0;pqShOGsUHMwy|I2iRTr!H zWr)?qa@5Z7=@q`OqN=OPVK<5+LuuZ?T=SzYUgQH1p#K)6;oBx1k^~bJ;d;Ig)w8x= zEQSp2QNL1b)l8D>$yTSnaVI-EG=Y_dl!@t#+Lunfl#+5kbrBuHqQEl+f4O#~s#k-x z@S3H8hjVD(t@{_tS{3CbiMP*apXV;)QJ*S!LjlB-9hL~K^7@N~HwaK52brrPW>IvT z0$F7ji8n`q7$*oYF4+jHFx@nZl%bOR%GJf_!bRuq@2*@;5vVlOw#9||HSoKdub0T_ zM#Fr0^kuRlK^oxm>y?sWn>4K;U8ghQzg7BxHb{=RL%}NDVoUvYaX#^ePart1Hy(Pt7kdHs*^veJ$A&EKq?$A~xIs5zTjIC|QLJRVK8g zyTmH!z{{vhWVh3qxBHq26>~6o9lFco`i9ZK4ib;9e!5K=7YhJn|5B~}2)$k>2L$6aN#AVR)v zoyz*9ct>V%@+9nF6v(==!nYG5C_ak1qfw6*NARUPF(Q?}D-SgqqXs0{TSC+ zds1yC%Y^?bpIUJ|HO=u=Ix%e~fv8-x`>JdX{49(nDVhIepw^n4_W#twVGYBEKCho=anI~#%Xo4A^&D2DxiYQc=&_CE_1|& z&^o*-wb0~%-M*EURKrr~3@Q(8y{l~SK}*|l3R6VK;+YMfqtqIbb#+Zqr6R}Rt|jDh z(n6#0IAKuNF{rfDX^Ki07y;L(Hb9bAt2(=GXOjfxNs2Brs*RNcC%GNn&AIYr;YwT3 z=g4w%`PQOd)zlLLCMQT^IT}8;lj9MgP}@3il5!UhuIS!nrQmdL-tqv57sFhT>Npc7 z6QSK#x4h<6kAHy|f$@Kq{lJnFMx)EvA z4Grt4x?B+cuavwoR`SykEvvn&WB7X zvnFdqFj*j4V_jAwye+5%?8otLfZMXTD&$PrnBRr2E{rb$blieyFW%+tpWnHV5BTi{ z!@~-}vaUFI;8hO!i^(Ytr#E38#+ndO?@%;Fs5c&9k<>X>C4c+4LEk-@W$XC!YC(ePeC&AjJ(mo-kwB+rr^J zio-s&(VY|1zW82%-i5<(P&){(Djn{trLsvcg-X#v=5_lZ$zWCr~1=PL{ z(z}VvWe2Z+@A5nzUpG2<^vREJpMUlTsbtsd^=`B6p4D5oZ2Am#(ebao^7|Jqerbsv zX2yriOqzJ=8{P+QdFjO8tIFxBN=(zTR7h zEn3%H^L7h*NqUPnE_<8Q(j#w>jng+cZ>iFXVo_2&(7Uiifp0)jdP+qh6$vVMlD&0) z>p`M|@2o36^bM#=Az7;JPj6o&s%>k#prUU;RUV(E+Pr`BvqS|~DyZliP?dPHRBIR3 zCPcMntrb-C4XAE->dXIp?&ZgSUDM6lxwTL3*y}s%_wU#ncWm6ZV{hKId49*BU zdpkXR-+Qn(+p)Lr*}kx2SDIsaZ=Bzd=)j%}-t-N4msZJAtv|3nAc@zl^@57N0o7Gk nzVh6CKm7hsm-q@g7bM17NDMxZ82CV9XaustOCc+8-m(7=&0B-! literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-narrow.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-narrow.h new file mode 100644 index 0000000..6d6ad2b --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-narrow.h @@ -0,0 +1,33 @@ +/* Declare functions returning a narrower type. + Copyright (C) 2018-2020 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 _MATH_H +# error "Never include directly; include instead." +#endif + +/* Add. */ +__MATHCALL_NARROW (__MATHCALL_NAME (add), __MATHCALL_REDIR_NAME (add), 2); + +/* Divide. */ +__MATHCALL_NARROW (__MATHCALL_NAME (div), __MATHCALL_REDIR_NAME (div), 2); + +/* Multiply. */ +__MATHCALL_NARROW (__MATHCALL_NAME (mul), __MATHCALL_REDIR_NAME (mul), 2); + +/* Subtract. */ +__MATHCALL_NARROW (__MATHCALL_NAME (sub), __MATHCALL_REDIR_NAME (sub), 2); diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-narrow.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls-narrow.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..145612564bb605505da947d0959b922db77f2b08 GIT binary patch literal 13054 zcmbVSO{gVD6~1pWiiQw^j2SaBWKfuekDktxVd5q*kQk!42!m)C)V6MS-Fs_Z|J-y} z-}~O+B0(2|3&WUzh%Sr>StMCxn?(Yn5f#Bzgn$VMG8-YQEHY%~c~1TGtA2H=Z@&cQ z-bd~^Rj0o5f2zJVx% zMyiiw$?AsJ7t-Z&a!;DGaz2(iT37Y1DCbcoYM#of-ha&BXL9G>t)4`C-?)@qx)|l6 zZ16MdbdHH}R9-`p!2=rgVEd-gzXp zE3Pcfsw5W$$zv?T$JW54)Y8a2Vfnn8vPPle;YIH}-3Rkp zvn9DP&9Y`-1`qY-KtO96?PeR0 z%Mu$HaBYv+6VKfY{uUL<=2C$Zi8K*a6Tr=-)c{Z1*$7&5)EP_p2pa*5DnJZi+MU&$ zC*VV(9EDI0&Te#Tptr|FW`I9slzFHaXk?0dj|mI5?Ny;B;}W)pnb<(1Y^Kd2R?EU zLo2j}5ti;QM&qdrj!KE3!ex#om5PGp7`IluZXnp8Bwl{Bl2pwGDIh}6s=7!ZY9<*7 zPM&K3{5VO9DJB=5(D~Cyl47i=Wmp>RY2n|MzKd!_=Smk?sJ0R`j3ITq^fnRqjt*`U z=lQCLc6MU?TUBrI&d!BLF6?ybNfJmp;N(fc_8^ywd8t8o=b=-5>$M>09OWFcukHr& zZdDYhQ>Ym4-uT^-s%JiD2pH-pbdud zr4ENfnn0%nZEReph~~WHwMb)L*JTx1+j#Q*_sAfmj-=`_zK5kR=_9lnmvRBMX{PXt zpc29MH)u(R`>2XIS+GXYhZLIeX*-WKF2F&jX<9B!-VKxiq&Oant0~}X*c`M4Rt>#o zf74Mpplee?L0{p3IcA`6(0QRJem^EUy)kQ2A%=Qm_k6l8*6}M4s|`8S&fwDULOY@(V=}0u5ZW& z6~*eB?TB349c7C?XjtV0$IpJM@&<6d)T{Hrp5(q4FzIVLx4%p zMo5LZOeSUMB)^f`j4l%B+|%8S)F_ZO)FI-TR=)%OSo3AInr?XJOQWxn6$;{kPt$89 zgK#*lPyv6*(@)DUaDlox-U?>#dJTr7@b)A(x-=sk2SQsEFK_LwaB3c?Pp=9MMRE5w|L8sDI2VRC zK1B{s9W;kA`l6M5k7P44=@t?I8tS^$kda)4-dy{9lFXJ>bLrv{i&o0$T5)Kd?ToRL z02{|&?|nd4!6+}B4caD-Ob3VjY}qOTSG3oK7B7-Jz5V9`Ws z#udXPk3hw`#-TZR6k0mbqzpS7xSAxn%+4y{seEaW3b`U&5`sDiaGZtUrV~4O3d&K{ z7tH=ttVDrNJ@mhR#N%Zq*x;3z0g#ZxZaTvXXt{&v+8D<3mGQBkcC28o&1Rz1-9ZbRt;#&nMAN0gNd<&zrs0&TJp&ZbMqBIRBT+5_9(6zDR%Yh;Ybf(yNSnx4^G0@i>{5P6qzr>9UO=Rg&P_h)Vuw1DI;D!}zUO z4S9jOlJiunj^a*#d;5kRq!1MH4$=Ege|FU0&v5SIp8Qqz$04rFP%>J_PlSJi zy%;_Tt%Y0+%>S_U!~suR*Bo9iZUjx$NX__A2NSM>ir_T5y1j%x=s2Sxq9^t2%{-n~ z82{|Iqn^S*YnZ|-X9j~Lcsi9FnAFG<1|*Q5l*P?QqBjNvg_5ndH_ro5bbSkOA6W+biI>S)vkamud1uY zLfM#J1@9k%*ZD4PqFhzGwEfd78~FggU6CDD2$QWZOitZ*^5Efj{?iXtrskf{r=p6M|Ojd%?HA zmqpIwIx{(=xZvC8vUqe{Rzi}?N@$_)xU7VyC#Th3@a^wqwb60ey+|&*m(`EQMWSK3 z-Z=52*B-n1{`1xr@cZQH^QWJ. + Copyright (C) 1996-2020 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 + . */ + +/* NOTE: Because of the special way this file is used by , this + file must NOT be protected from multiple inclusion as header files + usually are. + + This file provides prototype declarations for the math functions. + Most functions are declared using the macro: + + __MATHCALL (NAME,[_r], (ARGS...)); + + This means there is a function `NAME' returning `double' and a function + `NAMEf' returning `float'. Each place `_Mdouble_' appears in the + prototype, that is actually `double' in the prototype for `NAME' and + `float' in the prototype for `NAMEf'. Reentrant variant functions are + called `NAME_r' and `NAMEf_r'. + + Functions returning other types like `int' are declared using the macro: + + __MATHDECL (TYPE, NAME,[_r], (ARGS...)); + + This is just like __MATHCALL but for a function returning `TYPE' + instead of `_Mdouble_'. In all of these cases, there is still + both a `NAME' and a `NAMEf' that takes `float' arguments. + + Note that there must be no whitespace before the argument passed for + NAME, to make token pasting work with -traditional. */ + +#ifndef _MATH_H +# error "Never include directly; include instead." +#endif + + +/* Trigonometric functions. */ + +/* Arc cosine of X. */ +__MATHCALL (acos,, (_Mdouble_ __x)); +/* Arc sine of X. */ +__MATHCALL (asin,, (_Mdouble_ __x)); +/* Arc tangent of X. */ +__MATHCALL (atan,, (_Mdouble_ __x)); +/* Arc tangent of Y/X. */ +__MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x)); + +/* Cosine of X. */ +__MATHCALL_VEC (cos,, (_Mdouble_ __x)); +/* Sine of X. */ +__MATHCALL_VEC (sin,, (_Mdouble_ __x)); +/* Tangent of X. */ +__MATHCALL (tan,, (_Mdouble_ __x)); + +/* Hyperbolic functions. */ + +/* Hyperbolic cosine of X. */ +__MATHCALL (cosh,, (_Mdouble_ __x)); +/* Hyperbolic sine of X. */ +__MATHCALL (sinh,, (_Mdouble_ __x)); +/* Hyperbolic tangent of X. */ +__MATHCALL (tanh,, (_Mdouble_ __x)); + +#ifdef __USE_GNU +/* Cosine and sine of X. */ +__MATHDECL_VEC (void,sincos,, + (_Mdouble_ __x, _Mdouble_ *__sinx, _Mdouble_ *__cosx)); +#endif + +#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 +/* Hyperbolic arc cosine of X. */ +__MATHCALL (acosh,, (_Mdouble_ __x)); +/* Hyperbolic arc sine of X. */ +__MATHCALL (asinh,, (_Mdouble_ __x)); +/* Hyperbolic arc tangent of X. */ +__MATHCALL (atanh,, (_Mdouble_ __x)); +#endif + +/* Exponential and logarithmic functions. */ + +/* Exponential function of X. */ +__MATHCALL_VEC (exp,, (_Mdouble_ __x)); + +/* Break VALUE into a normalized fraction and an integral power of 2. */ +__MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent)); + +/* X times (two to the EXP power). */ +__MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent)); + +/* Natural logarithm of X. */ +__MATHCALL_VEC (log,, (_Mdouble_ __x)); + +/* Base-ten logarithm of X. */ +__MATHCALL (log10,, (_Mdouble_ __x)); + +/* Break VALUE into integral and fractional parts. */ +__MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2)); + +#if __GLIBC_USE (IEC_60559_FUNCS_EXT_C2X) +/* Compute exponent to base ten. */ +__MATHCALL (exp10,, (_Mdouble_ __x)); +#endif + +#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 +/* Return exp(X) - 1. */ +__MATHCALL (expm1,, (_Mdouble_ __x)); + +/* Return log(1 + X). */ +__MATHCALL (log1p,, (_Mdouble_ __x)); + +/* Return the base 2 signed integral exponent of X. */ +__MATHCALL (logb,, (_Mdouble_ __x)); +#endif + +#ifdef __USE_ISOC99 +/* Compute base-2 exponential of X. */ +__MATHCALL (exp2,, (_Mdouble_ __x)); + +/* Compute base-2 logarithm of X. */ +__MATHCALL (log2,, (_Mdouble_ __x)); +#endif + + +/* Power functions. */ + +/* Return X to the Y power. */ +__MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y)); + +/* Return the square root of X. */ +__MATHCALL (sqrt,, (_Mdouble_ __x)); + +#if defined __USE_XOPEN || defined __USE_ISOC99 +/* Return `sqrt(X*X + Y*Y)'. */ +__MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y)); +#endif + +#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 +/* Return the cube root of X. */ +__MATHCALL (cbrt,, (_Mdouble_ __x)); +#endif + + +/* Nearest integer, absolute value, and remainder functions. */ + +/* Smallest integral value not less than X. */ +__MATHCALLX (ceil,, (_Mdouble_ __x), (__const__)); + +/* Absolute value of X. */ +__MATHCALLX (fabs,, (_Mdouble_ __x), (__const__)); + +/* Largest integer not greater than X. */ +__MATHCALLX (floor,, (_Mdouble_ __x), (__const__)); + +/* Floating-point modulo remainder of X/Y. */ +__MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y)); + +#ifdef __USE_MISC +# if ((!defined __cplusplus \ + || __cplusplus < 201103L /* isinf conflicts with C++11. */ \ + || __MATH_DECLARING_DOUBLE == 0)) /* isinff or isinfl don't. */ \ + && !__MATH_DECLARING_FLOATN +/* Return 0 if VALUE is finite or NaN, +1 if it + is +Infinity, -1 if it is -Infinity. */ +__MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); +# endif + +# if !__MATH_DECLARING_FLOATN +/* Return nonzero if VALUE is finite and not NaN. */ +__MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); + +/* Return the remainder of X/Y. */ +__MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y)); + + +/* Return the fractional part of X after dividing out `ilogb (X)'. */ +__MATHCALL (significand,, (_Mdouble_ __x)); +# endif + +#endif /* Use misc. */ + +#ifdef __USE_ISOC99 +/* Return X with its signed changed to Y's. */ +__MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); +#endif + +#ifdef __USE_ISOC99 +/* Return representation of qNaN for double type. */ +__MATHCALL (nan,, (const char *__tagb)); +#endif + + +#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) +# if ((!defined __cplusplus \ + || __cplusplus < 201103L /* isnan conflicts with C++11. */ \ + || __MATH_DECLARING_DOUBLE == 0)) /* isnanf or isnanl don't. */ \ + && !__MATH_DECLARING_FLOATN +/* Return nonzero if VALUE is not a number. */ +__MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); +# endif +#endif + +#if defined __USE_MISC || (defined __USE_XOPEN && __MATH_DECLARING_DOUBLE) +/* Bessel functions. */ +__MATHCALL (j0,, (_Mdouble_)); +__MATHCALL (j1,, (_Mdouble_)); +__MATHCALL (jn,, (int, _Mdouble_)); +__MATHCALL (y0,, (_Mdouble_)); +__MATHCALL (y1,, (_Mdouble_)); +__MATHCALL (yn,, (int, _Mdouble_)); +#endif + + +#if defined __USE_XOPEN || defined __USE_ISOC99 +/* Error and gamma functions. */ +__MATHCALL (erf,, (_Mdouble_)); +__MATHCALL (erfc,, (_Mdouble_)); +__MATHCALL (lgamma,, (_Mdouble_)); +#endif + +#ifdef __USE_ISOC99 +/* True gamma function. */ +__MATHCALL (tgamma,, (_Mdouble_)); +#endif + +#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) +# if !__MATH_DECLARING_FLOATN +/* Obsolete alias for `lgamma'. */ +__MATHCALL (gamma,, (_Mdouble_)); +# endif +#endif + +#ifdef __USE_MISC +/* Reentrant version of lgamma. This function uses the global variable + `signgam'. The reentrant version instead takes a pointer and stores + the value through it. */ +__MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp)); +#endif + + +#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 +/* Return the integer nearest X in the direction of the + prevailing rounding mode. */ +__MATHCALL (rint,, (_Mdouble_ __x)); + +/* Return X + epsilon if X < Y, X - epsilon if X > Y. */ +__MATHCALL (nextafter,, (_Mdouble_ __x, _Mdouble_ __y)); +# if defined __USE_ISOC99 && !defined __LDBL_COMPAT && !__MATH_DECLARING_FLOATN +__MATHCALL (nexttoward,, (_Mdouble_ __x, long double __y)); +# endif + +# if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) || __MATH_DECLARING_FLOATN +/* Return X - epsilon. */ +__MATHCALL (nextdown,, (_Mdouble_ __x)); +/* Return X + epsilon. */ +__MATHCALL (nextup,, (_Mdouble_ __x)); +# endif + +/* Return the remainder of integer divison X / Y with infinite precision. */ +__MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y)); + +# ifdef __USE_ISOC99 +/* Return X times (2 to the Nth power). */ +__MATHCALL (scalbn,, (_Mdouble_ __x, int __n)); +# endif + +/* Return the binary exponent of X, which must be nonzero. */ +__MATHDECL (int,ilogb,, (_Mdouble_ __x)); +#endif + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) || __MATH_DECLARING_FLOATN +/* Like ilogb, but returning long int. */ +__MATHDECL (long int, llogb,, (_Mdouble_ __x)); +#endif + +#ifdef __USE_ISOC99 +/* Return X times (2 to the Nth power). */ +__MATHCALL (scalbln,, (_Mdouble_ __x, long int __n)); + +/* Round X to integral value in floating-point format using current + rounding direction, but do not raise inexact exception. */ +__MATHCALL (nearbyint,, (_Mdouble_ __x)); + +/* Round X to nearest integral value, rounding halfway cases away from + zero. */ +__MATHCALLX (round,, (_Mdouble_ __x), (__const__)); + +/* Round X to the integral value in floating-point format nearest but + not larger in magnitude. */ +__MATHCALLX (trunc,, (_Mdouble_ __x), (__const__)); + +/* Compute remainder of X and Y and put in *QUO a value with sign of x/y + and magnitude congruent `mod 2^n' to the magnitude of the integral + quotient x/y, with n >= 3. */ +__MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo)); + + +/* Conversion functions. */ + +/* Round X to nearest integral value according to current rounding + direction. */ +__MATHDECL (long int,lrint,, (_Mdouble_ __x)); +__extension__ +__MATHDECL (long long int,llrint,, (_Mdouble_ __x)); + +/* Round X to nearest integral value, rounding halfway cases away from + zero. */ +__MATHDECL (long int,lround,, (_Mdouble_ __x)); +__extension__ +__MATHDECL (long long int,llround,, (_Mdouble_ __x)); + + +/* Return positive difference between X and Y. */ +__MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y)); + +/* Return maximum numeric value from X and Y. */ +__MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); + +/* Return minimum numeric value from X and Y. */ +__MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); + +/* Multiply-add function computed as a ternary operation. */ +__MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z)); +#endif /* Use ISO C99. */ + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) || __MATH_DECLARING_FLOATN +/* Round X to nearest integer value, rounding halfway cases to even. */ +__MATHCALLX (roundeven,, (_Mdouble_ __x), (__const__)); + +/* Round X to nearest signed integer value, not raising inexact, with + control of rounding direction and width of result. */ +__MATHDECL (__intmax_t, fromfp,, (_Mdouble_ __x, int __round, + unsigned int __width)); + +/* Round X to nearest unsigned integer value, not raising inexact, + with control of rounding direction and width of result. */ +__MATHDECL (__uintmax_t, ufromfp,, (_Mdouble_ __x, int __round, + unsigned int __width)); + +/* Round X to nearest signed integer value, raising inexact for + non-integers, with control of rounding direction and width of + result. */ +__MATHDECL (__intmax_t, fromfpx,, (_Mdouble_ __x, int __round, + unsigned int __width)); + +/* Round X to nearest unsigned integer value, raising inexact for + non-integers, with control of rounding direction and width of + result. */ +__MATHDECL (__uintmax_t, ufromfpx,, (_Mdouble_ __x, int __round, + unsigned int __width)); + +/* Return value with maximum magnitude. */ +__MATHCALLX (fmaxmag,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); + +/* Return value with minimum magnitude. */ +__MATHCALLX (fminmag,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); + +/* Canonicalize floating-point representation. */ +__MATHDECL_1 (int, canonicalize,, (_Mdouble_ *__cx, const _Mdouble_ *__x)); +#endif + +#if __GLIBC_USE (IEC_60559_BFP_EXT) || __MATH_DECLARING_FLOATN +/* Total order operation. */ +__MATHDECL_1 (int, totalorder,, (const _Mdouble_ *__x, + const _Mdouble_ *__y)) + __attribute_pure__; + +/* Total order operation on absolute values. */ +__MATHDECL_1 (int, totalordermag,, (const _Mdouble_ *__x, + const _Mdouble_ *__y)) + __attribute_pure__; + +/* Get NaN payload. */ +__MATHCALL (getpayload,, (const _Mdouble_ *__x)); + +/* Set quiet NaN payload. */ +__MATHDECL_1 (int, setpayload,, (_Mdouble_ *__x, _Mdouble_ __payload)); + +/* Set signaling NaN payload. */ +__MATHDECL_1 (int, setpayloadsig,, (_Mdouble_ *__x, _Mdouble_ __payload)); +#endif + +#if (defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \ + && __MATH_DECLARING_DOUBLE \ + && !defined __USE_XOPEN2K8)) \ + && !__MATH_DECLARING_FLOATN +/* Return X times (2 to the Nth power). */ +__MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n)); +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@mathcalls.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..45a78e5d54c8498597986f8da7dc611df195534e GIT binary patch literal 40755 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes-arch.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes-arch.h new file mode 100644 index 0000000..399d486 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes-arch.h @@ -0,0 +1,55 @@ +/* Copyright (C) 2002-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes-arch.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes-arch.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1c94f0f3fcb18e6c69edce4e265c85f904166815 GIT binary patch literal 13417 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 ROF;Ynnfn2J_+C(;{U44rEb{;W literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes.h new file mode 100644 index 0000000..ac65027 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes.h @@ -0,0 +1,121 @@ +/* Declaration of common pthread types for all architectures. + Copyright (C) 2017-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@pthreadtypes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..90807279595ea455578d4c10c7f4f67507193178 GIT binary patch literal 17397 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 G&Hn+P)@L&S literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sched.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sched.h new file mode 100644 index 0000000..5d93790 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sched.h @@ -0,0 +1,100 @@ +/* Definitions of constants and data structure for POSIX 1003.1b-1993 + scheduling interface. + Copyright (C) 1996-2020 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_BATCH 3 +# define SCHED_ISO 4 +# define SCHED_IDLE 5 +# define SCHED_DEADLINE 6 + +# define SCHED_RESET_ON_FORK 0x40000000 +#endif + +#ifdef __USE_GNU +/* 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. */ +#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; +#endif + +__END_DECLS + +#endif /* bits/sched.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sched.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sched.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..871155684013b4a2f6a50ab68ec39c550527fea6 GIT binary patch literal 16036 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@select.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@select.h new file mode 100644 index 0000000..b2e3ac8 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@select.h @@ -0,0 +1,63 @@ +/* Copyright (C) 1997-2020 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 + +#include + + +#if defined __GNUC__ && __GNUC__ >= 2 + +# if __WORDSIZE == 64 +# define __FD_ZERO_STOS "stosq" +# else +# define __FD_ZERO_STOS "stosl" +# endif + +# define __FD_ZERO(fdsp) \ + do { \ + int __d0, __d1; \ + __asm__ __volatile__ ("cld; rep; " __FD_ZERO_STOS \ + : "=c" (__d0), "=D" (__d1) \ + : "a" (0), "0" (sizeof (fd_set) \ + / sizeof (__fd_mask)), \ + "1" (&__FDS_BITS (fdsp)[0]) \ + : "memory"); \ + } while (0) + +#else /* ! GNU CC */ + +/* We don't use `memset' because this would require a prototype and + the array isn't too big. */ +# define __FD_ZERO(set) \ + do { \ + unsigned int __i; \ + fd_set *__arr = (set); \ + for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) \ + __FDS_BITS (__arr)[__i] = 0; \ + } while (0) + +#endif /* GNU CC */ + +#define __FD_SET(d, set) \ + ((void) (__FDS_BITS (set)[__FD_ELT (d)] |= __FD_MASK (d))) +#define __FD_CLR(d, set) \ + ((void) (__FDS_BITS (set)[__FD_ELT (d)] &= ~__FD_MASK (d))) +#define __FD_ISSET(d, set) \ + ((__FDS_BITS (set)[__FD_ELT (d)] & __FD_MASK (d)) != 0) diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@select.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@select.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..faa19535a545958d48d5be672e3c3e7ab1722adf GIT binary patch literal 12884 zcmbVS&5s;M6`!>aK^BUPu~6(p(GZa3&C+hKWEq^W#6TQk;V8)KQy^;9RM*TD+aKfZ z>X}^&g@X|%BqR>N0saJ(KOsblazo;RK#_nW2cjS$At3}d?^RXzR!_g`>9r+~Rx?%g zUj5$pd-dYz(SQH*xA#U{qi~+5B4lwM&ZG*F@;yXLx?$xk9nI)q~pZndv-fJDq z@r>5)BnQ44?x(C&(KN}K3N>y~R;3d_514#C62EPomB@+ARMI-FMqw(LstR$E+m$Mo zd6dYMJP-jSf3UaKD3>aUSTf5etkjq6T%Q)szEq-MU?maH zGcFcNU$w)Zy932lh$LV1F3lHcC!{u)ssQ`k$XN;N1WT_d&Ixd70Vg>ceqK$Iwz<>_ zPVX`n3gjxTqLR-=jP3_WQ%3GWp{-Cv;GfFUSj`6H;;6QBJiD{F!=6hF{+2np&0PgX zBzYwB(u143)&M-IrUTa6t4XuIxgZxPU^ZcrEYo0jH^jenG8XRcUb%W@ zw-HYiLC^ssk5YCBv0TnF1Hy+F&bPI_2EoKA=aOx4mk@XJG)0+00{G}>zg|mX`sA=e z3DP1!s@jEitkCi$4ppexhY$dMacXj?j-PfxvpVi^p?!=-Q70+vpwJQ@Lh<@fc{`u$ zP;i-pzl}PzL|R8f=h7`Yj#$=~f;~g%_W$l2LoDiLH7|!p32jo5q2`70gB2^{ zkX0%lo?&8GLU9d@fe!az>~dBLpOMvUVF6V^S_J+8bGLg+iPM!Bb#G12GulETw z7L#fg8eHmHv$K}w3xjtFX#fdlXNxN-*jKU{NDH(YO2>9?FenBzWs1+~YrHYW^dt@@ zF0|Nh`$VVIWhIxguhez#XYyj>zdXL$E{EJ1YlG9$3U)+DpQf(;QHV~!lK|1% zj#GqQe)-`cn@C8IrHYKlv`KfzIk{S<+XZX|31VJ=gNaZ_NP)SVY{)P{e&cG}x`?21 z=LZ{CBSW>K_AR#JcfcR2zO2yQjgI=#=<8sGjC8=K*Bc>&Zeq7WJN$*b5lNpFFqrm8G8Ly6MW1!J($m(m&I`fL1b{+_`H} zpFjf*D5OGxN8`Z)QdXf|l@BfLbaLZ#z{;>nB#(26_uHXvXPayYPwGvCS^<)Bs4iI> z{)Ts8+|63_{>jp?9P|#W^l7EUA-T=+ zWJ*W?sIThQO-Aw*nz*s~D4H(v^7^$kjn=|wN^vNi>s+(p01L-o9{!cgf{|ai82Ll1I~&SUt=(g4ESP@jSW=y zrw?jy%Fq+{brBFP4bec|!MVdUVV*s;GS_t+%xB{D47_%Zb}iy4vuWWI9POG4)>jkyt0q3;1j^!L;D0IMSx^sx{LFlizsKmB=B*?sjiT^-+ zdI0Hz>Dc?HFj|Tx(ZmU5k395BTX4cyhKt@j+;n0cPS>QXPcvHF3~TAKn-*#F4y1)| zO{B92-;emmi>{9H9L88nEjFKKg8dqs+HgJ7&EY1T_zu%RG$uN{S?uzx+Y3~e(2Iwr zsto~#WL6AqRqfx(7gYeEk_5l@sN|2e1Jfn8AHO9lATCfNxsGV{Row1xi>}{5ng=?# z-e+-*VEn9BN`m90Izq09uq3UE03_&B2W;g?n0Gx81w7#?ha-SGaQ#~A?)@S((zi8K zXYA$O>t4#FYiqz|;&16G= zk{ns6fMmBVg8#+dr zHOTAcoT3RufyZ2H$aSX$TjO~_pzdPONM}$N6$coSs#7~4X{|Mt-LSjq4gOAw%QIvf z8yimgIGoKz`eorpU2yxz`f&Z$qMg;W0|InTAdFQ|@R5}qjR?Bh-iDLr+djC$xywez zaccjbv{t+q@JZ*&ky=5G}CM~3z_p}bN zYQ^4ARTKgqK5hg}r&r~0R|n0plycEDx~4LP66z#fC8C_|=$m~;tug-5uLixMfvS?j zduIkcD0n2tOcT1}Y0QL%G*nk18c7Upzqq?0@#}T8?pos&ePnb7*y6Sgl~Wzn56j>& z1$5$Ap}Rl6lua8SL`oesNhJc61w>n<>uiM91rvaIo*zh{gU6t|ix0mBDjlqp>kH2?jJidGxf7p+{ar@r>_%eR| zUA^+woqOZU@%G!}OJ?UAU*G>Wez86N{NDKL_Gq-VcXscKr{MEz#pv-CPx`y9-o5GuRgH!fAX!T9)9xk zKfR*qo7=bP!*@?a{|9?(7$Er@XKw)c8)siSwB-LBfB27Iy!%0^$-i~$?wfG`bFKTE zFSo|$#sJ*--1bGg^Yr1vmo7xY0FR5J{d;fj!}jMo+x0Kw7ho1#-hTnOc=r6WS5M*R yO?%cye-Qut. */ + +/* 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@setjmp.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@setjmp.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ac3df159b05906988fe8c65e1fb416f84891064e GIT binary patch literal 12468 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-intn.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-intn.h new file mode 100644 index 0000000..9e7bbc9 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-intn.h @@ -0,0 +1,29 @@ +/* Define intN_t types. + Copyright (C) 2017-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-intn.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-intn.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..82b4c103e6199f6556b2394bf4af50cd1c2c14e9 GIT binary patch literal 12875 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. */ + +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-uintn.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdint-uintn.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..25576e9c0b0a112520f270f80239bfd5dfd309be GIT binary patch literal 12917 zcmbVSO^75(6|NpV__J!`4)%|NjShoMPj+sPLo?zo%Cfu6fG)z0D1ro0Sy5GC=TB{B zWLNii61^{of(N}Qf}$6}gPztO@F0xnb->kw;$<&_3J&9p??psrM^?PZ%HD=4YN&`8 z?|tw8MO+&_e)RAkua7oH@w~`H%qK-WlPa#NMXW@n^aoq;vJ&M%vRI7XmZUtN4P6~A zi}G0JvuGkqk*K0Pd(J;+^uKp)#C281GEdTaBI46qN9^ckl*+t5jb?crkEN>OjH`LV z)3l1_B3+0wn$~%uWRX_~b0ft7BI;}*s`#ZlpLvnolBS^!@y_fuXeHcbnzVvQTi>ue0@0h70x_*I8iD#tQcX@^>a!c=fom*OJQRU!qH zNoq8vm72(cr7|P;AmZc?7ACEhN~MgavtrCEjf#gCee(DW%xlRPBz=0zl7ks20A(N~ z)marM6EUTiTNzHYSyE~?rl4i4bNOm5*g|P74wMkE1@%VS5=bds6r~a+2mfG6ktbrI zG|%2a?heGg6lt;OU0N*ALr6QWR0*EBma_`h37#FOBq30uHI)|V@5&tn?w_lq*0~nG3}t<_Rhik`;ZDC?t;$@I~=3Ih2x_(Nu-ZSvJ<&I?zC`v zy}TC)+8qG^Ii^YsX(azjX0-3PL@)-7O#~x}*tODF7-8uyF&a;8a8zys6)sXVsYGTx z#kh4M$_j!Fa^fYrhLfUN!v%!eX;Eej(juDxzj<)5gptnPScYtIy{W=yDr1x!^4AT4h~!OFa}8n zoSbF+6q2%>8Qz-o&fAf1QdA}KE@;-q10l4JQO3M-&_ki4K7``-Ye~0~^G7WJ}PRKv3bgfPs}s$>@|{-&vl#0gKMOsIJ==`)2~ zEC~@@a5IrXUol;3GMq{|RmZn(sPH1@H$?=kxlbF}47+xx3T0(UV z%z+N~;Ouf%iI9^uY+>tELs{F5*v3n5 zJRpOR7D?A*;uK3?(nn}DF4P=q(}~6}f=Xn4x6;&okg?{x((6MCorrNgiw!PKm+7sg z`NHH~K^Z{8>1}Z}1^X&K18sp-L(|x;4F=_aw%-T^eT_Hfn4ZGH}zse`Al7G;#VM6+vQL@gHNyVeG^rgDTi5JGUo|00tFDg?YuA#o*b`TjSMx0+PB!M z-vNK9`SMavH$3yD(bvfe8S%iU*Bd2+ZQ`^-2mFOd-s*md1j_1S6ztjM5)4P-smRR}E|bP5x6z{{{pB+0pl_xqt9WSeRTDfJdYodih*RQFh${)SIr+|63`;mX}E zoyt@|jS3;2Fdvs()pi3UTC{yk7g1Ww#<;^%2ff1@eO4=RN^Y|}nHCZN>g&4okddT9 zA8ve}vFW0yj&814v{pvjibLz%)S4{^*f@UY^ek?~vt1ECyba|1Q~>4O@AGR(w7Qv^gy zLp0EK@B(3)^1z+#)>k^0Nq$o6ZvPw91HgLyC?y@KA zfT#1NMJnWqaN7s!Ai!}5!IdR;@D!ATsxMHRjxosa<()UX5l`e3$@Q4n^IOY;1(4v; zgUH3*WHgyWzU`gLCJlQRK45|iQ&UD@J02oWegY~A72qgI4OyA#1u^SklT@B$qR z;Ce?voS_R6&#J3MDplC1J+z&0qbt@xXm*uyUKcQP9fda0Vz&}d6YU(t?{?BdIzWI+ zJsOJ4@lk7yp2^X>O<^2e)K{UN!O2L6%`WK9;6#5_++LD~u1o+DWZuCfOb{O(K>1)M z_TgI?twmF4;tgewKJ-f4aKg1rB6{m^Gl_LLUD2+lW~{iqtfkv-S}E-dkPg1hA>JN* zITF5JbZs;#;2P^ht1V=i;J?PF)`(}OIf+RpAz~Vc)Z^s1keVKZgynvhs$KPD6Fe%cH&w$8c=%_{?5lNw`PdY{q!G|UHhzk&=8!B4rUqB%ts(WsX>+roKS_=( zRKPPl{DHwPA)?2$3$IBnI5{B6_wGg2kh|OiS`Y2LtMtx+mUiG2#zsf`%!bZUW)1SX zzNTnXQ5103268=V!O?h85~#ZvwAvXoMa2sYN%g57NZM*mXE#hXy&*hFae0PnW9`66 zlf%0?rk@C|wFP&MtcmNl7Tv0*n-E}f0%@#3-n*=29PiD0 z9stp7gbPv^XT)SKocrpYx4q^uE#QS#j9XF?5Ws06W}vp>n#T=3yB;rhrKt zFZJ{%RI+L3gG{NjCTT=qvVdsk=%yN>ZNVhqq$rLh+?Ew>As5QVG!?wM2)+bxag+H; zaZKAkP1*7X_#Mm1d4;fXZRj&az+yCd$CKjszrFF=n_tY39+X6TjN#A?r`vnYm(kU$ zo1@Xj?$zC+OB=hR-6PmIdh)5SKKJn3|NX^}A8qLW{2ftW4 zJ6Csr&dzAZ(D~c@{`uu!|LNWPmX7+uXFpl*J@sNkr_SMm9!95o)x0Q`W$*9^s2vB{49a;?BdF9G`0k^FyTQ@FkY>l>V zAc^)^BgMv(pFMcv>_hi{@HO`Qox88FSMI)W=jFTX^YHO9yAA6<_E9h!n7HjxzrXVk T=s&&r^sP(y`RwQk8q5Cyvuv*D literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdio_lim.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdio_lim.h new file mode 100644 index 0000000..573aac4 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdio_lim.h @@ -0,0 +1,39 @@ +/* Copyright (C) 1994-2020 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 L_tmpnam 20 +#define TMP_MAX 238328 +#define FILENAME_MAX 4096 + +#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 + +#endif /* bits/stdio_lim.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdio_lim.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdio_lim.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..630bb0dda59d37186b476cabd2591b22b845c304 GIT binary patch literal 12699 zcmbVSO^9Vj6@J|Tg&?6BhcFXJ(!?D;;9ouQd5vPj5`GdMFD$O!7Ds8_GxKf0;awlY=AYyds#<vXbRBv0P4`5-HE;V^>G3 zqC8ajJesLein=II-thOCeE#%C+*D<(a*;MO86V#`UAaZoN}td>JFS`N37E=?FG>D1$%=zYYdGM@<5eeBEM_vHm)kQO zX%nMVX4Is zj{koqp)#Ig z+&YqF1;GX-@p4@&Nl~ql0wQ!$lo^Al$z~upd9DHQW5%*6CKt)*TxcZ`7%R#;ERFHB z@bB6_vf_x&l`gPQIWaV(A$7a!+eF+uI=D@orbk({w-@98x)O``_O9(-+w0WB7$hBV za+dL9$mMFD8xa0*`C{LCTM$f+at_&7cLjO3$THL^RDX{@{MnfbW=Ib!)F7<_+*OBA z&#SCl^0cl1E+(dc^5V1$nzivj2ptlXF|Q)@Q0S=-p}75l=ofR|4z6(UzcHtt zO51Gc9J;rUqn0yE!Ji>@hktk25Q_#yEvoTZ0zw$(=(=R*tQnKEj^q(fqfFL|Vuq-M zOd*#m;s`FdnarTINLHGSXCvNWPvd$#Dp2V4rA$_(sd2p>T3NU_T=8-i^QJDwSD2WV zP+cQ)pd&pvyP8)rjl)NGmT#amB{)gr>*-SV=Z{4*M}53lhbA%8(i8( z(_2f+g~_{uGJu5BBXKnabQPb2w!o^PZ|v6wqjEskri6mN#v60YK;dBWLQnjDOmzBO zUJ0d!`ds&XrY<(|D-f&ga;Tlbr`PztiK@($!z?fIKxyt_?)cFdFA@L$QogUIW%bYZeC{(W!k8^0&(d6~)VvpAg!och~VK#vl+VfM~MQ5@AqYaeU0D z3JPRZGZQgw(d`8%*UI#`fUlrHEJ_G43~hu|m`h|+hDq{kSKHAAgU($Xu3e1+wT3#h z*s9+Ff2{fPQcpKL^QF<($qEJWz^B(6C4+6^v_c2`r4(P3ULk|BIv)qScew(?(Rh23 zTV2`_jssy^Pppb*K!8vVvblkp{tQ74K^bP^p(z5Q zr6C$=J9zJqq&z^=8gtvn!R5^CYz5v1N4pkrRC!W_&#mD$F$X5EGj?`d?->o)LCNtN zXWW#5P$xuaXsyp})i##USkpSvtwtWTBO=0wTTHPDHP(H;K3!j)L~17UTGc1yncOXO zz0$cGp%wZZ&_sVP>tA4bdchbAnE;C>QZud?HhBap))fxT$)nKHsY-C{Y~Y%aq_R8f zfT#1NMJnWqsmeed1UL>OxV6L%o`P~z^#!v(9b-`7i`#puXAvH$m2T2ghg#? z1%Z>A2)Qc4mb7gGaKn%};3!AIeb*ydG8~B!D`^DK1`e+G&OWR{qkY>$dDmV+TK7<< zB!@Hzm#lf<^14;{*~ryy;PL~{~?i^V&*KaNQRZTx3z~ltdSOX0o*~!s}V5l7&IBB`+6aGxZ5+NPEmgf37#(8QinF1n zEG0aATnm~mud4B(4u)eH6{2Z$O=k)%)On^#L_6!*n|(vAG5+CCN4=tfu2R5bXAUzc zcqGTo5Za40=7xrJRM#LnO^hDDxYSVi4F+0wt%-`EZFB|LleQ0)(;c-B%iu8uOyYQ{ zr$3>RO*zsU@aiJ?62Qex|a4n@lDbz6MnfOh>l6 zFSlQxOg3J;_~Of(`1#7@$p$QY^5J(r{nD@Q&wmTcU^=T%Gl zpGOxy|LiUK%&m7G+`P~3z4>i--|oxpy#v_z%GQ;aHu1A1-ulfqc7F8BkN=Ie>HRnF z-L&+VTDjftx3BNMj!d50dhY5be(qZdKDhMrtGhq`^V1LSJ+So8wDk6??futoytaP> zh%awleqj?oU$w-4`t>(o{oVVYOz*NfTjo3i>9<$9Erzs26V^YC5v?!&k5yu. */ + +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdlib-float.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@stdlib-float.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..cad0894df11b4582404285235e0e4b808daf6256 GIT binary patch literal 12254 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_mutex.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_mutex.h new file mode 100644 index 0000000..6a18f1e --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_mutex.h @@ -0,0 +1,63 @@ +/* x86 internal mutex struct definitions. + Copyright (C) 2019-2020 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 __elision; + __pthread_list_t __list; +# define __PTHREAD_MUTEX_HAVE_PREV 1 +#else + unsigned int __nusers; + __extension__ union + { + struct + { + short __espins; + short __eelision; +# define __spins __elision_data.__espins +# define __elision __elision_data.__eelision + } __elision_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, { 0, 0 } +#else +# define __PTHREAD_MUTEX_INITIALIZER(__kind) \ + 0, 0, 0, __kind, 0, { { 0, 0 } } +#endif + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_mutex.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_mutex.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8d275ed0767de8e60b621cc99a4eca5f6be2d007 GIT binary patch literal 13648 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 J;^zfT`TyedvIqbG literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_rwlock.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_rwlock.h new file mode 100644 index 0000000..9b337c0 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_rwlock.h @@ -0,0 +1,65 @@ +/* x86 internal rwlock struct definitions. + Copyright (C) 2019-2020 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 _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; + signed char __rwelision; +# ifdef __ILP32__ + unsigned char __pad1[3]; +# define __PTHREAD_RWLOCK_ELISION_EXTRA 0, { 0, 0, 0 } +# else + unsigned char __pad1[7]; +# define __PTHREAD_RWLOCK_ELISION_EXTRA 0, { 0, 0, 0, 0, 0, 0, 0 } +# endif + 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; + signed char __rwelision; + unsigned char __pad2; + int __cur_writer; +#endif +}; + +#ifdef __x86_64__ +# define __PTHREAD_RWLOCK_INITIALIZER(__flags) \ + 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_rwlock.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@struct_rwlock.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7721534fa92e6f816a743bf7d1a5b1e0fdd68378 GIT binary patch literal 14060 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 aD*&_b;Kv^l*c@#gWxnoc^XN&9Ve@}6kSrPi literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sys_errlist.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sys_errlist.h new file mode 100644 index 0000000..d6f5fa0 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sys_errlist.h @@ -0,0 +1,32 @@ +/* Declare sys_errlist and sys_nerr, or don't. Compatibility (do) version. + Copyright (C) 2002-2020 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 _STDIO_H +# error "Never include directly; use instead." +#endif + +/* sys_errlist and sys_nerr are deprecated. Use strerror instead. */ + +#ifdef __USE_MISC +extern int sys_nerr; +extern const char *const sys_errlist[]; +#endif +#ifdef __USE_GNU +extern int _sys_nerr; +extern const char *const _sys_errlist[]; +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sys_errlist.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@sys_errlist.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8ec8e7f04ad40406af5f7c8f047596bed120f247 GIT binary patch literal 12532 zcmbVS&5I;S70*^rq9DuA*b6hvX<4?($?ahngvFb#v$8CE6Z{~Eii)fXJ3neOBfGj6 zZ+aI!c~JiXPu^t(!Gr69E8@X}9=!-2#Ea;R@4bl3j;wr*mr_n{;g& zt!&-ge0h3K^1siXWL?{2rcy<>*4g!!o{FbW(!x~Tb-Jm#Y-MblmC|mNEQ&VW>SCvx zH18^9Oe`uvu?1U0Y#%0fumn>JHxo%756 z9j-_%IWap`pgVSzd9TxAXGw|+ZwT0ecvI4ZJKPdQQrWbFKNY(z1m9TQNH8m*>PqRI zrK?W(3wNNn8eP=8*`@Uk4U1L();3_!M>%U@otEVzs}ut+FW{m^Pf>TPVr*Z%Mew_v zNyBlSvZ7U6y+(fpM{`~wgo4ag3vg&{>&)y3a%<5$2BbY%JYg?941SxM-4?C_BQi>u zx{cr#u5|#fx_rS}f7M(ny+B7mqe@@{HeKe8)&gwERErQQ0D8k4Nyxg|$_6y{ip66B zBbgwWQkk}_a>6#~30eNFDS6uoiJ%WyImgEm@oSCKFhAo zpx?UEO$*KjIhn-Ao|C#g!UcHfylzSXUQ?`rarRy_;AcXVD-14L@bS}gqR>|~HqMQ+ zwD@YDeIJNNR|m7nisGtFFD^3tP1##^aq;N&M;C*5gn*y} zMlMQu4YAy8DhI-E&+d)2w+F$+sNj-gakmh6>#{_dLdN*~$3HvBdgkP?M+x#Gz*EVE zPOQrFrLS#9>_Z3uznHtEYvQLv(7cXET<9F5LQJyA2?`_eAr#MksKyE4tz<_%&cC%@9%*cASu;S_=ts+CUU&U>GM8_SX$**rjOXZ^Qyw7!=kFINNPU8Jg}oBR-^zBK>rhP!ZGs#iDQDg;XVDD>X>yKsGUwQoWQsKM3c(bdRMuX1yXz4!z0mnx!cs82Cb zL>_$#JIKfce15$XGUz7u9msX>wECp`4H9VDyHW6GH+xVV!h6EGR{-CP2_WnO`##%1ZT~tPe`sE z@_H66UO)0(TGX2r?wE*!-{F9~U$`3-XhBotAOMf%3~&HU2Vh4(1VQTG{KLCP3d}Ht z@xF_1mCE)YB}bfMs%z>}Rt6Y|#ULLWxIWGt)Zmn%yB+HXAX)^`Lfyd$LSD$oo?e;z ziVQ|G>%&~ScaDB7>Vv8BI(~10+xZ;mp{~VY<9(tupa+e_A1bS*yJ- z;j!jrL`6fD_RSu~hI>r0oOIfKw~Cv_AgNjF${Ksa-YGnS@|D5d7^(30fO7b|<#-e| zkqi1*hy<84v62bd@WCUJvF@?`&0dA)&a_HmjRHePc9%by93FMc2Y+jV~Zy0D~F}euhs-CR*L@3S;9+JwZEg zHVoKdtoR&e-q+AVKB>OyUIb)d8druJ<0Fr;rp~qKUJ{8F|o3UvR>JMd{f* z-1SrgP7kC@)SMO%V^_ZH=0!R@0U6=jA2Qj4Peikx<>rx1nEcm@gWk2=~j7sb{ zepj-AxWEn9CZeUQgniu6xp4y--sa%?n8gi(iL=^S1CEpH2!$fTlC&=Z@W7ZlU@OPK z7?jN4Hfe8RSB*uQY0F8O7Z zfWKsKr&ww(iL#(-Fa#eIY1U7>83p}iIr2~e&+vo?TC~g+CrpR%y3m511D5>kUK96Oc%2U1hiIZnPoZNeOv|Y~yIdiOAuUP0$;`qq-3Gk%>6Hniyv_?&_d9R&p+yN7q%RP(t0M ztHhME6Mge9s0rgA{B+TK7^o^0Jav}PgM#O7(lwzcp2kgRSVIjJVvxk*_Di@M62DnT z8?JR;F?I}PfFo|lPzBXd|3nO)ML;J`Hq`xzrEFw;5Gg5YvPuLh3y6-6?z0hI7hC{V zb$w}IT2>ERc-rE29zTZQs;6rR`J$%jmMgp)OQ`v8QCwct%6j?zkFF$_y z8T?INemi;bq5aJ_K0g1&hfylTM@Z(2J(&lOAAJ4f6 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@thread-shared-types.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@thread-shared-types.h new file mode 100644 index 0000000..fd08b69 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@thread-shared-types.h @@ -0,0 +1,119 @@ +/* Common threading primitives definitions for both POSIX and C11. + Copyright (C) 2017-2020 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 + + +/* 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-sepecific 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 +{ + __extension__ union + { + __extension__ unsigned long long int __wseq; + struct + { + unsigned int __low; + unsigned int __high; + } __wseq32; + }; + __extension__ union + { + __extension__ unsigned long long int __g1_start; + struct + { + unsigned int __low; + unsigned int __high; + } __g1_start32; + }; + unsigned int __g_refs[2] __LOCK_ALIGNMENT; + unsigned int __g_size[2]; + unsigned int __g1_orig_size; + unsigned int __wrefs; + unsigned int __g_signals[2]; +}; + +#endif /* _THREAD_SHARED_TYPES_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@thread-shared-types.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@thread-shared-types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a1a6283315b0e909636faa1736dd0a3217c9655c GIT binary patch literal 15085 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 u!d^_QbNbLUx6bL|>9y7=3zkb#wS&vtN literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time.h new file mode 100644 index 0000000..e096274 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time.h @@ -0,0 +1,83 @@ +/* System-dependent timing definitions. Linux version. + Copyright (C) 1996-2020 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; + +__END_DECLS +#endif /* use GNU */ + +#endif /* bits/time.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..340490211d570f2fb63aa8ef1f0c573815ffc1ef GIT binary patch literal 13941 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 EA4PJ>$p8QV literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time64.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time64.h new file mode 100644 index 0000000..42f21fc --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time64.h @@ -0,0 +1,36 @@ +/* bits/time64.h -- underlying types for __time64_t. Generic version. + Copyright (C) 2018-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time64.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@time64.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6c856070ee3f5b081040e4ebb4626e55701b36ca GIT binary patch literal 12443 zcmbVS&5I;S6|bJXII;&>2A5@a7e(-3o1N1zG$$75ebZj6dY!FQ zD}`y=+i%5m7XSO=S>EY3SG6d+mCSG6xnft3vr^UFO}4JPe5s7iD{eM|m!-}&vfRox zE4o@3)ztc8<8CqI5OcegI)C@s_nwfO#QAxC`6%yC=H=qWmw)%~&qfCeJY%%GY=EzU z`+{r3in8G*x45yotCoNsF!_|p-;B;G)l$`_9G%vqP)KgNR-SS@ElWU|JdMUwo0V!< zsVZ_0B2IqrFj=u^Q!-wzn>ayWeb7m^HCBo=DZx~u z6S#$I9l*=3n6cJhwctX|&=Jt63fO>6*F`HO0~=EHEQCscUeQJpvMx5f1&!U2ctkK- z69iMLGOemrwvwXEwCR?#T}RtTgwM|*f`GdQo0&%(oyf^<)v6?(kFj;+@FVW*tl>W=F@$5Ln2z7%Ik;xWn~*ARb*E%qB0(U6oy4=J?xYZ~5ir#iNVMK|G8>&;cW7 z6~BR4uGX~!;kR!*7;A42f{RhXCCB2{5Op~-| z@_fk~lUw#71b|;GT+$W!=@2xp;|Ui!#VBJ@78#*15+6eG^ygxn07eu-=HRzer;$ke zXc%02L?;l-!BVhi2;J%L!7;?5Nmd&@KT3cL!x(K^c4E$0lqQoqUS^dvn`VWmq*S4n zd*TWqxRtD+94Yqpm`F#W%ij6ve3qlI>swjuTbJWT6nb8`xZd-2mGjOt^D|5gODL|H zF)-jBj9sm@Oc`0v7FJvxq($HlPzO`-(z(MaNuW`JG>)EAWouc>R*77;ZQW$OZoK=K zKa)<#UdiTT@&;31(ne@8Zp{XA)0M?9gG}Ujk<;gW5V1B~+x01duH>>?=MI;?IE~iQ zd|~j`kOq)&Mq5Hj!9LB`AT7{ps5QsA!K@fClqo5vZ}G+$Gm$vBxG-XW>=T39m}{Zb zRBasI&*jC=e<&z3slgJ@}e+v}Cd2k=^O{@dsG>!YiYp{eKZzm?+i?pJs~t4}+@({A^mI2P}Sb1zHZ z!U-Vk^T~bO1MNR0Zk;Mi6U%LvRv?3OO<|;eu73f&XF9nH*P=dw20Bnkg#wQzvMr>n z(z>b?TGr__&gp=aVU?x1-L}a{oXS1C6%A7)o&{o%>vK-~bE9k8l1;X2HlW+zraQpp|kEwnx(mAOJH3*wK$p z@bn-3{{16msnzbW@1h&5TpuLzh*L^+Ra5a=0RyQR>_qK35p97uO6+3L#M@j>F&~hC8%2`RMsg8KP7i4S2`+7GD0AeqK^y0W z3ad-mskRFF40c9FY>q(>8YlLr;eJS(8kqnj$b5iF`apcE0O^D4*r%s3R*Ejs#0lku zJnTweaKczd$jLn1bz%cf52R~Pb6PwMYw5C^7U}SCWQ1=|B-(=yPSWGWP)9`rW2~JO zTS_y*ew|Gnxt{Ch2p3LLhgl#76P@2I4tcii1*%J!#KTgxh5$n{FNU$IPHz?4E`v}> zg5P^o@?-D7Y>A!5Z^v7R3)Dz160N;T*!>;RO&iGYq6gQfEN&1?n$^xIaGX>}C=?Nv zq_?*PNkm&inrj#Xz-xkncjcrF3nY~mgXv(Po&Icf?t`wu z@al3|Ql=57BeTQGaZb<#&4Eeypcj*F*9|J{Uy>sa74Qu2c%V;9Trpxggx5t1Yy^LiT6A-8|nNq#2GQ!$YA_D@xs?V zsRg_cjPL$*Gp8Md$^f@ZTNJ>S(qudAY5 zG>xt+G@&9orAb6or;)z-XVezspZ#*yqZlX>1-y6W&{BdoZ`}2iBTwT7E~KG`3Nc7x zb~h#54SC$8qYc+Oub3iZ6S@(%W2k~+r++5~ZzG_w##`IWNo8Qx_#jdaRa=xwfXV`* zBhtxK!Jg()CDAn33Wi_Jke8*RF|AQJiAWCiL)=uoYp!Yir%(3$0e;tNb(bM5?!C5n z@ao%(ufDoiyz=ssAOGpu`KKTKim~U9jv@7G^v j-+A`@2R+fJu. */ + +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timesize.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timesize.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..33961f23035494531e3104ee1fc21cfed42ed18f GIT binary patch literal 12353 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 b;wRt#;X8i8#nU&Qe)Bc_`}XS91#I{~S*!pm literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timex.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timex.h new file mode 100644 index 0000000..9adb0bc --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timex.h @@ -0,0 +1,110 @@ +/* Copyright (C) 1995-2020 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_TIMEX_H +#define _BITS_TIMEX_H 1 + +#include +#include + +/* These definitions from linux/timex.h as of 3.18. */ + +struct timex +{ + 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; +}; + +/* 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timex.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@timex.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4d76dcd97c8733382b977c402318d87f371c9bf6 GIT binary patch literal 17937 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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 __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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4254325b66af3e79fdf2103ca4e658a35ef607b3 GIT binary patch literal 19711 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@FILE.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@FILE.h new file mode 100644 index 0000000..f268263 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@FILE.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@FILE.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..cca28b7307c4c8c591cfb75cf2dc5e1e6eb93008 GIT binary patch literal 12516 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos64_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos64_t.h new file mode 100644 index 0000000..06a6891 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos64_t.h @@ -0,0 +1,16 @@ +#ifndef _____fpos64_t_defined +#define _____fpos64_t_defined 1 + +#include +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos64_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos64_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8ad931082ab8374477260155268e7a2d3d8d10f1 GIT binary patch literal 13278 zcmdU0&5s;M6`$FxtoV~CvK+@)PAez^dDYuqVlBuBEY2*+$E2%z zXV(Y>f*Xejxa0si!5@J51HuW3Lj-3IL_TprT%uee+sk`ZUA@)YuX=iO!;;sdovK%_ ze((Fe^4-bP$DjWDgRSW#T9!GF*u0DuLPb)pBE_ZBKjIauB(HXp)oSuglCfejc6GQe zs{>Ii!nvq;qRQ&{>-}>kPcBWPT2_%LlB}Nd=;*8a@&5fV6GeR#E{Zyu2_>VPsb#{l zOomIIt#}otb&)7h7IJrKZZU$0I$m)Zz4qPjeVg2r?CeB)_aaM~Ws|2jKK$f^4&el8 zbarPY@YQmkGO6M;E18NkZgElPGe8fRd_CrW>Cno=OcW~XP_rncoT<9v=eeEa8K6v3 zqcN3gF3LC)Ik^WBC%i>-Iq4@PZ*U`lx?MLrMbJjp_->KSdf9p>TQUWA`@_7?5! z?cUqnYsC}C5Ol!EYjoV>LWdZQ<6aioL!l!+gyQvg zlWqdoJHcfRJ{xuFh}1?y=hB^X9I>2P3ib@4+yA{ohFCPnYAMG@32|!Cg&&VuWSaH>m7J)xN9rVRZ;|_-;fkp|^*hnW2 z7rfw=NFrWUMHyP%cRB%P4HlFrBY5vIPRjnHCTsU_s5bB$jJnaJiM$L4(yv6f8g z^*({l`K(?<1{YhL_SVvTVepoa29R*}wz!gleUdFeTA$**rZ?EW@v5;&hvT9wJgIpPbH|Rx zSWyCi0Q#SS8@gTrz)^fkrdBY zSiX#^r3{zHG6wIEH3^>2`Rlc*$zDC$LQ57K9^t8e57KXz4GM}?6+0%RPoJ*+QG`yw zlK|1%PE&+Iev_jkHWQE_3l$rW*(BXP=j3XcZWpjMB#31N4kkt&AqD1cYC?ty@*7t- zt&12c_vB#XYGlYN>d@jw{0{hI)t6PeyU|l$8hstCkdYqv^m-#?&`s=CXotVz$!Fa! zkU%BRN1-{pT7%+fynCECvTRy74um$JT=#pR_AAe=ePyX?$lzF0=;)v6UqJ7f zPVU^bs867Q1{6}Ez@sJM3Q|_CU6l_l?Q}}xbim56N+ij-hY#DK?thzX2q_IFLY)9f zIaK%9Cj5=>z_^>W=>3^{vosYMha44LJfS`=IoVbNBwDn7q^mG17c<<^69>JcQTn`A z{D|Dv@MKCz0BES{)=kC^6^&?HPec7{6ULSdR)6mueMF|RcqlLkwVBfoITL$3BL+AC z1_Q9e&Oea)TmN`tLv5*5wCjNAE-8~|vT?kuPya-jvqAs^zChAAc&dd%3(K$wo)sF~ zzE%LDr6C%r0608IGv?W2HPRMiFqN5~O{1-cYt|x@qDV{sy*1p%aX|ZY9-r;G_ml?o zpkg?`8P_Tx#0hQ|>f?@TTDFIvZX5!QHN8>S3q@%AJcJ=yOtF$Q+I_xaTTehjG3SL6 z>X^KfdxTCpT5}_$Lf-=_;kWbd6sji|bd=!EG4mlM7dsj+qLFD3Y!jdQ;Xb!ek6U*MY57^lOJxGO44qJRjAp#jhlRWg2%H|4*HYb85`@OMH z{{rm`U`C_B&(K*#PpjoB6UwjDJ+vKnqti~0Yj%Zl8r)+uQ$n3+v9q4Z-ccI|@qN>- zAq~L8rS9*9=J>GH#<8J7>r!}LTZNo;{wRKz(VO?p906fsA4%m+oFtmEeD|m+^$0L9`uz$aE_hAtl={JQ? zZ+7L~>t4#F&{p8uiTdxYr3i)^9?KEA%SdF$h_eQ8{F#m29Y0yub z@r3?Ka?}t8p5gTlbZ3bx_Lz2=F`)&^f0F#*UK99eDcVpJdd$^AuG=Np-!3Zxbr*wHI-^>lIE4^Yo!SFQYptp5#@)?WF}}GX z*SkDJwz08mq{-ocE!NKiH|m1h4A#W;gNbfd(+vpFIe{=%L%~N@ax^07Y6rVUn(yY- z6b?@|GLFOVfmb{<8~%jU#ThYKa%bo~@UGW9qy@YXjBov7Ii`Pv$^`Ed;qPD>hfhK) zp_T*vKdf4@H&j;@hu4c6LDT7#9PjF&IhIo{nnu@Drcgqir>jJivps!l9#3nGfBCyn zPhp^{OyHF>gB}#TbYrHI-19VM%(Bt&T1kvxAX2tvUN4mZl?6mQM|;y9P0a-0q%02vjJ(P=k@H1kTBC6O z;2r0?xQXJhJfQWTrrhuc_#KG(X@;h*w9t_*NJwm1(+vKUR}lx1P7W;Qq<<^7iE$+f!+OY5$#`{P&}e z|Nil-v!6~*f=91hxcBkbK4)3{PK*f`k_&$PlgYJfHzsc`d7#)LC|J&eG7Z#HNP8pr z6gxXq89=KSrap%}fK@Oq70IP1rliEe~t)Do)@rU9^uyw z6PI8R39UHHvxDHxB~ykCxh(4p$dxLX@c^Fa%mYyb@WLj*N_KZLy?E#1{jKT6=dNzS zrMH~>T1bC3d0~opoZPv4`-flo)7IZCrUVdii^*hv|N8$YAXm4q-UL7gMH_pKNWTa=k2{eE~7Fpmr4eR4;J9epWiU`Q>Xs z;mYkRcaZ{U_1)H145izTUV8t}hYx-f;~%R8jqjbqQFp%pdJo-A(0XD)um{wq&rKg} M;m>bOPVjdB1C;tKIsgCw literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos_t.h new file mode 100644 index 0000000..bb04576 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__fpos_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a07d5d7b58c631777fe97f8fa807dd9d3e20aaa5 GIT binary patch literal 13224 zcmdU0O^h5z6`t9wqWD*qwZz0iW+a3`UiG#&vR23v7k)yJI3SS|J~TDe)iagtpGjBs z&aP1;Ae;~a!3l{Z0*NCR&K$ytTM#D>9LRwK2jCbHA=}G)Ro%VS+pl_hbHkF?qn)Z( zufF&HUiseS*^~eN_EYqlck(_7XI)Ib9$BOy^I zD&(<9=;ietj*MDTVz#Pa?pWpWjY>o-ZKOEzhJY=IH!zxTfm@7+hDEBs(j^%5M$Qzh6D-@)oD<;E0!|C`6h$>p zyY|&s1ij0eG#poP9VxyPG5RYwn(_)R6vk{t1P)CpYi1jei=)OdAno4b9((R#@L3k* zHg^>mk>rsqlm|C=tp#{qB_r0>S4|ifBXk5bDg!oP(_vBy5rGZKd=x?{Krd+{aard} zR)WSJk$CiAG$sh9lm$v=aS#ih21-|R+OB)sI|uLXLIeSK4K_3GaC9OUcB@7ukv_)O zj>GS9XD(;f%f}vH-?;!F7wHl`A<4g%8Erc*5%d9b>-b0_^;&5)jL>wK7>%bjF^0tLu5SWy=jvcKVVWLg!Tx@TpH21_?(gs2 z-`j7+6Gaeoz{sPF9YZXai`;_n$Cq}x+S`C&W0Z5ruDBJ%-6G3SrjRi{`}sTPvYsJ1 ztWkor2=G+nLVH$K^CgaTXxN7k0DdvCNmtKLyP(xN?s1_*j7Cu}i|nD$5g$VF>Q8w$ z0qmXNG6$cnI(0v*PL#C%Az002Y>2Q>zFzZW^tV^5Y_D*PcVf=8- z$~a_|F2-k=7?x06BV(Y$Js7)ODB&}*hAphPDoBgKAD|BU;-z(mLy|zF1ZixflLZTr zi&FAXlx1E7jc&a1x4)83$XvJW&yNhqO-ce9qsjO>Fk+(H2^=*zgF>^m~wgy=+iWtSs3HA$|IEO`)TIwtoS=XF9oa z*P=dw23k-^g#wSpgB7H#!ni6QTE^)V*6DziVU(#=kO0t7)oq%LBo+E_Yx7Z*tO|AT;G9MqVYH<Zq|<1dasAhTfP7w!gS zozqG=7q&ao2{-^|3b3OYognpZ|M{C6%2K1MvZl8-v?=;fpJ6}T}c zf~DqrYoY!H#uvbNM}wcC6Ox`*t5qtsU#WX&JMPA0tRC0w3gs*>i0n8Db)v=YoI~Zt zIEe4-P7i4S9xhF5D6q!|tu~Gg6-JkWi`pvWGuRpFu-OIOX`Gmkn$<&6-^c_YLFOGy z`~>l>0;CVNWAC5B7%AFB6DO1d@-Qpwf)mCvTny&nwiD}cdQQ5An$_ZVSWB1Pv`E{B zBOQF3LwbAg!HIvo=;|mhV2pKS#OBjXuwQFa8?I-&IoyU5A29<&YogDM(>Z|vpW>t4#Hd#>gHmmU~a#OxD*9zL|(TQ?Bo(3dOLXC zxq!I=JU>WSl@1y`$D{mm(-lm>{a+g;eWNNc9^2%1ND0hp)EJn6xB4*XZtZ}={2U?- zN5lIa=+6?I_5gNKvJnCs03`Xry@)Wm%RQhqw84>M?;NO1M>bPxCs)6gp+k*bgS>7| z4cdqjc&x6zoo$$4hr1{V)Ljf(>5OWI;v7O!NyEmz zks*g8w#YmX+^7p~JJ=96PbRv_N!PDK0|cT`1$7%)kkN>s#~kb%8NTaxQ#d}^$T*I_ z2j20}Z20p^7iYv|DV(wMz{_6ylos$pFuwBEa!eZtl?h%b!r#Ga3?GG-QZENOfLMHD zi>E3}0q++#f@ZQLHQv=hk1L}*Esd@%FrgB%2lySz_>8Bm=f}P_1T0<{yY}4UxXI-C(+_|4_~!RN|C`TEdVfwo`~K^b zcc0!i(tu=XX4A%*^T5viJh^k{#hOM-^a=c8ditxkZe~CJ_m5W7tJ_y^Z%vNOHNR~Bou1Br^5~tv|LK=IlhgR^ z{ZIVh(O*7n82p-P&_{aq-8U!Kuiu=!wiGkX7PFjXVpb$Gy_BlC4Sb5)^}3iruNEdg zM`8wRU{oskk-xcRm1YddiB$+aDGy+)Kz%x#}*b*H0rjl3Q{#0QV? z)N}I5JNCPA{xpDV0D%;MLJ4gYP?vAoM yfB&6tiQoP6-CGg, 1997. + + 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 + +/* 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__locale_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__locale_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5cd056bab5573584e70b350049781999d218080a GIT binary patch literal 13374 zcmbVT&5Inz74MNZw$VW`j%>$rSXxq0yq0=LYZ)PA8_ORuwjyMMHY9ckO-)bDOnLib z+*Q4^>kwjy&oKla0dr*pNdm$ssx95E2YNg_vM@^IlbVZ}s%6o?Z)f z+0|6Ndi8tX@6|r$eewDK{`ujtfj69G2_Ld?Hk=AIlyW{)Tq^x7oU>f=d^4KQy}P2A zrPIEvgGH9_h;$l^Mb0CY<@-;!&++aY9}Ekb4@DZq#h4HGu3Qc;KM}+tE%t(GS`0@* z$zj6OEMjpigBg$KJP#&C8Yz*ba&u;G(SwNEpL02U@#UM>$xYGu^TVx+!-_JCy)Pd8 z_&*;u2uDbxu{+LyubTS_lPa9V8B;@zTbLHf2+#v2Ukdr}8nj|D5~+$C)G8DvoT(z` zN4cHkF`!IRqcN3gEV3{b3AqOmCqF1*(qfS+4p}_SMoel{T6obXkM=>m7Hm$^r?)H^ zsDT1ddO{-i(3KO3X$T^c{;-yjk#YuCx?;-Vm?_@djEGj&Ms9NveVZ zzNO?g8+@U7&cLj~C`%(gSNf_g{_GtnuAIl&ymM(bN5dl3U#c7odL?HP)^V0>swg7B zr3D;k=qa*d6gTawvIu&YF=;rih*T(}86Ts+f}<&~U_+tJmWSZbq%>x>0=aQmIR>QN zTHIpKJ`8>q8M)0~1x6&IP-N19o4wWmJSrwV)|OYDu!#525zwdv*nmwtlbrJqY)GWN z5Q+hMK^uw9dNgA>XzVVDM+-)6f?!HXAVo3`#ypAxsfrP8*RAc1gU_Fb2mzezwC&hL&G)Z45}~iim75!5Y3|RpypwE~j+HjBkZpyi7+vDF*H?kKadj}8VI1!! z!PeFgf7aRCaBFMx;^tN@o-l-<14bSuY!70&n5G7VKRkT0sl62lCPrD8Y>Hb#+|7~% zWeOSN7eD)8DeLKy!vZBpivUm6F0^G;C0~3`4K@1^0>Cd$Ow!fz(>7?Ojyqgv7o%a= z$|74RG{lEcy!39=OaNOa*v!GtMx7cWt)iiI>Bc#hSeBN8Jwxbre{PW>7Im_k$^KCS zTo}e^m4`>n87Hv{_%4fsgsWLLMpRs?kn#m_1smLiCs2+|7Me^;M_QLX^wYy$jzX`` z`DBrs9Jh5s#S4pe7AzkRS)sE28777$6j#p}XmJn5E~b*ZjI3e{E3N|4BJc;OgRXdK z++mj_&?rF~E9oS`l&3rw(U9kPngx|^y!f}jl1@lpN#|pH4^v;#Mrbk4)eLgevBoce zOk{PDQ{{aSv1Ux_^)7*q`KXu<4K7u2+FDEVg~3}w8bHF?+G0xz_DMDcX@OQlt=Y^C zdc}acOmR7VjW@=aj>N&lg$DagpJ>&_Oh!U<)yDSyOkQmKm%~?=%OQ6Ln_gl2#;b-V z9S+khb)@Dk%q=_WV?_}F0_cAUZs@Yfh9rkJ3=dfpf#^xyFBbz3-Cn;IY+X#E>FH9Z zNw}9D9jd@eMN&MOWBJmnmNH!K%MiRnTqbxf=dagJO!n%~7Fx2{@CXj|yOVyotW!`d z&)Gg9efo6mkA~<390?G;?Jz~?2?8IK!TX%;9x@3 z5mI3GrZQxhAir{T*}4d!a*uXau11C`MeSN#ir)giulllFcQ;zWx1ro^R(I}K>=L=9AjdzRlQkG>4$AYlRCl~D=X!Vif)~>SDv0Qg) zBV@3zDKzxY^e>?IOec5tTGS`dKm!V?P~g#`U=ArO*RINimUcRsaXMgSSS6C=?8Ce5 zQ1`!0HiVQq6QM?cq#UY!Y#ILgcVO(zTJ-MBy<9pGF^3!#Ts)yZHaS^W10-6seoW>; zoJ~i#qa_Y{N2&Blq4*xTt>np+kN{9u)vcS1Bo+E_WAkA+nP>9y6H6Mcg;AH{P&!w+ zX3YT>jz8b~JDCL|zi>Aw>#SDFQrK=xC*S~>DZq|ubb{1h|I@20%2KV}P2WW~SeaZ( zWVC3sQ?CCF{q3URQIO~YH-TX6L)nH5G@T+Pu;<}!z5;oJ(V(7bsP+I#>*La zj@7NJJFk5;Ga;YlFIJXJ#NlXtR@(D_PjZiH0mdq5HWM$#N$wd8_679s&A zO{8ROHp<}P$XFNHG$*e@b0=iPu(E;CB)O|RSvx!(FH59crU*kq5C;K{MF=LHSiw_J z_R7AX_osafGJNvkPnsT&r(?l7M`9&_1dlCo&aP}!v3KMH&YuT8m1>?cF04oEDKH;%S6004>z4y zi_<0PYHCJ{>tQWjcGDuQAC5Hetqy7J!3QVq@uIDxQ3hkIT`e}3W`g}1n_6)_)6I!Y zIB^lvK-4DMzgcYatlJAzm(Yoa5$3!IAl{J(R&J5}u<}B>PIiN^%W`n;)LgA4AI*>5 z!fl-E*7EvU4z72ZO^vRb)j|pIepFk>#u@9%DwD?pT{6XfjDVrlTRew%II=$iD9FoC zH16IlLhZ{iox;vTYj)+_YhTLb)ey^IQkps@(3QZK-A{FZO%JRiWM+=v!iSc7ZOcIl z&9!XN@Ba3gQ)vFf8-fWd;!ewr@F=(3Q~_gb_s3dE-z+i=swRUam4Lpak(8+y`-DnR zHJE?biqz?B&3Hn8Cpjvi0-oXZ4s>UUE4G-n;WhCA%YTx5=Ux;IxywGFw$RRjW9uBK zOMA9b%1Bebm7xQTS%bW;P7LaJ5;)AYf?T&tu)m$<1nM>hwRC#5LU9TqsA97PlGa*N zp7pz%-r#PB*gQkZu(E5U$>D%4)XxJ~>Vn-2*2MLLiDqij3<%KvfG}1-)kcGScS3EQu?yS&SUO6*pB*9BJW;)3&Ph-X`q@mghQA?tC55?Xc&5KS)Yp*q4(RGZ@ z02|ykp|VPx>U9{rh=6t)%XJIKm9lB$gU)JQtF=-IP+35htO61O4mu%krmB zJ@exm%jCvPG4I5QQ@9BKJp^Bag9q;V_TH!e_#_;x-@krgZBP?i-d+Cw!yf^Ob??kZ-2D!vpF<5;Nc6t z;ds)Q@W&DUm@6h?>BIXapYMUn@v#r(t>#p+9qwn7<9sp^kpO?T?~Byuo6}8SXTp9} z49HDy@W_crE*u*?;(hBFp!Jm+E$`s>-#Pmz|L@(SJ8$28@b(+;ee=&Bz5nSQ@1BFb z*Ps0N1FwDj)jMzBbMW2Io_Y7pcP{<$j(4y35DI6ovA*%t+Td`9PSD|aQ5u5@}?htUE^E{yU@%?E<}2a`Rwg&IAs0e z`g3^5`r7)9gUY}R`jx=@iL#i(-@}xmJbUV_7UkKsvy~`+{ocd(ee|`@J_w(CdHZ&_ y{o1S7Z->CgE6+cB^Ln@)z69dFcouvG^gn&q8h;Da$P6!dC2rm2yoQ!0YTO=+>2#IjWAreAx3I`N>dGA$sZ}s%6p5CnF_1IJO z>ecUkzgN$Dk3Ra}2lv<4ykM5bDv;wenCc?P^LbFHyr5rVF0))^`{8`WgPNx1?XDTex?Bu2HIo`udYeAW3flk7x9IN2?#oOZcEkDvpdF)SzCSa!7(k>rnX5c__1oY17P~3j+Y1g}2x`hQ@*Z7(_rv=w z!XeUV?T%95tKohk^FmCbR2Bi@CXzB90eZmXYeN08MJv)HofJ`vT8+X)$)e2Ed2W}h z2vBCJ@tEetSf?V=F}nv5XTPXmBC+H}BxE#AM=~c=I(YFXk4`|n7IMzg=eH~*s6hds z41^><$%AmLCj9d14o9SxoS2O&&>hP}zga3VFGz|5ZwT0eczx1@bKDX|k`#UkzY=zv z4Zbc^Cc&&km?oi`7j)GQfA$U(SEizL-n%rNqhYb?pBEVz^h(ZhSf^yXUxXn8E-&CH zMNg5Iqo{3PwMFo|j7h_BWmt$joT)MTD>$0-3N{pEwn~6Q%X4F9E07zD+A$#Q&f*Sx z_F?c@r|dR+6&R5Yg-&w^ZuVLO@Ti;&SX*6nB11JmM?j-uU;{QCPBNtg*pN;JArt}h znl}=g^>8LL(AXmuj}DAvf?!IqpX+$+k5w4?c~OpdyY6gn9lW;(5d_>d*vzoQ(TSYf zt&&P2eT=Owhu`6jE=TM2J%_JvT>y|1MTVY`<-gD|Z#y;-^Z_H|_*f#7uuqsYMmrNE~l zcq+NUj%8GQspBFb_Q8#VZ=0CJspD&H&?-H3xWPU~h3I609TZyPLnvPRS=dhEIw#o7 z!DpjREs@p{&AN2!97`-qOTi`~{JOul$S{j~Sxxido*vu~#@Qkh=gj*iQQ@m28Tqj) zX6YDFaj8P07R(iFaAOriNikUvnU0QhE_>!{gLs6QB-mvi1GGLpxf?{CnapXu zOQ2&lDyMw&VMt7|@g&E~ig;V~ptu z{w6N8*l+tptG<}ZG; zVW0%`KL$5^>0?8ZK`TWG8HONwR`;vLz(c>+Zv@*EglKwHuCxgc(xWpKSgA;bisx8@ z4626=mnXRZ?+{fIf?^ds7uMOpsr>x@tcN zsJ_F)m8+4VT2cEJSK_z8AF94GqYgz!eR=dLSRo@F@cH#d$e^3paUh33SK-IquaQ8O zpN~RycD4Y;A-p@BSF)_yFcyS$KDp@jG3&1!w|145j^)&84Uxg2rqI$q(}RHiF`wMo zYf+y-0}UvwLV-sM{W+wpid>ZoEpj@kaXMgSSS7OL?8E!*kb2lA8$wFGiBKy*at_r# zwhDj4yD0W%61_Wfua-`9q##EH7tg4VO)hV$0TwM@KPGcON~a^-(Gdr~qf+{~EYvZ( zt>Vd)kN{9$)lH2;mI{Bkv3VgT^EAJGYe}O?7)>b-rE{HYHXLB#_{-yeuvswj3wMLE z&T5A&h3(da0ScSxVa7_Fa6FROU;GJmTb1U7f}<(ZGN!234_v z>)`Z34Ne*Q+I)Rx&?1Ni>JH8hCXt--dunB_>o^$7jF&U;+BsHh5l5X&Qunl0p|J?49f*C|_yJjgbm}4=AGV#_b_gM=t1NArfHH#7f3yqY565jCFyHZ}uuY zcRCLxRyHtRWOr33lf$EUSs~>zMHuvfI2dp&LNKkw3Z8>nf^^A0udPBpgPoBUn{Cjo#tD5aWHsn?jXeMoWZuHW zO%UH3K>A=h_U=gvNzo*lIA!dS2d%6MP8h9(sy7ceomh+0CFv41qs7g@l`p$_kv5M% zTKLw7boSt*5%-AD*3mG9QPdHM&83-Ozs9CkT+eiKLK9A0#0ZGSM29zvZJw#Uz;y|o zc+jb22!X)4u7nX>TUGnFhV#;gP|1Q{dsOzz+JRAt?Z)p&W)K&+kz7Z#bQQb%+d9{6 zAkC{BT<@~DMlfzx%R+(r4HE2(J=42r!shklMhD#b>Q}`*4_I> zXrvFB7&a|BV=w1k`%)$)hcF1Ulf*HAt_8mAx#|OKdSF;WnlXL{A71W_8}Jk8%cYB9 z_qWfS!rTC!5KLql^%{MMN4e!zlrY71e@#mIW|?9X`pt4w5eA;&@eVY0nJadfwwW=Z1v>{U`QE)K8g`d`Kx3i3v&zmnP|^qW(?{!290zEbx~>3&(*0NkVtDyWjE|@ zw87m;v3Z7UV`amM$l+{G(CfgJx?uN_i8#HrXlFI;fB>Bn2xBD_d~7AhBZ98Bx8X#5 zSC6J}?y{0`oSXMN;^EnFC!{vch{;S@^Xi^wz2+S);Dunk@{`$+{t@_W2>3qy=`G{% zMQEmrSx@T_t5)m{m070X@#0F*D80&uyEd zr*FUi+h=C)j~Cci+J&?sOlfhfYmdQyty_DJKJ)JfFTGg&$@4Bg z2`f*p{6~KI(}#cgy_YQ=1mFGW=m&58Ve;1p-sy)wzqj?{XMgu4I?3dnyFxS%Z(!@b z_s!<{-!8q!*~OM>2B{a$HNCaVS1x~U9e!`G((JPD=&Lbt|2q0UwHSf_nU`1 zqz;hg0a;9V?St*l-i;gAS23}DVS5Ld@V0m8fcjb=(Rq)Z*5F`kZ}(a2vd`VQWBy4f z!@q<87e4yotv9?&uUv);ZEbDcK*YB;wr+YG7m@o~PGtg56QF4fcoYMOdOP2{1O%_% zytTH=$oexc zubsa0)xUq`>-QhOA>gOcn9322Ve#{y2iZca4`j(K*gb#~*RHJHS;yaB^G;Dz{|AT) B)q4N{ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__sigset_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__sigset_t.h new file mode 100644 index 0000000..e2f18ac --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__sigset_t.h @@ -0,0 +1,10 @@ +#ifndef ____sigset_t_defined +#define ____sigset_t_defined + +#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int))) +typedef struct +{ + unsigned long int __val[_SIGSET_NWORDS]; +} __sigset_t; + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__sigset_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@__sigset_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..271d4c162cfbe5a5f153ee03a2ef124662479f3b GIT binary patch literal 12660 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 ZbVf0UlMmaI+3$OM*Y_Um(=Sn-{2%N4Ti*Zx literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clock_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clock_t.h new file mode 100644 index 0000000..ce97248 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clock_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clock_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..39568687e3eae84a749782e30347e434bee43ea4 GIT binary patch literal 12510 zcmbVSJ%}wy6~42|1R}b~BJ4)P`ap2#>7C{A*km!$CfNy=TRy)T3tdtD6ynw3~Jw@BEtEqhr7QydwCJo2+ z(iTSU)CT<(9L;%!5DGF|Re(b?#+lg>yHw? zesTdouCN_?LY9B4Yu_3@92XKng!>9rO6pov=(ny_ zXTaGYCsBMHIBCrhF2F;VZC4lIHH!@}&faSV{JbdYH3k<|@bS}gBGFfLHqDK*wDfn9 zcimp|u`&b}vaJFYV@}-R`XLZct`26CSJic$U0&w+H)U`6<>kdY7nh@WiUNWT7K!QW1uCL$f8 zVQ}fmIe}OnECqXp(4GDskYN_hvf7&EQ36~T#%S9WkIWg%%4X_XR9UU;uH7IiDOG6H zfw@8mZmnu4N6G_{iF72o?7g4P7dZ-A->LG@xg0k-VcAB@l{!xaexG|?ZCkls3WYv!c9J8xFCOYwQpS%P`S&iqpOjjK~d)xd+`V0 zFI8XBQFkL!Umkr5R>(*MKEK`x8FUl773A>uN`BJ)8VPjfaTNU7-2oJb@Qyh5vh*#S z0Ky@kJj6ZF;Zx$)sj@U$KG7rBhkzb3pQMFrQ7=G~+~rus0M8_|J*1wBTu$oNDCK8SCW3iBW#N1RfstJ_*M8W>2$67S==F3ud(;9Q}%o$3Z4S_IKT-NE@mS&77+ zL79ho3uflVujTBg+z=)CE_50Ok=^%@Ciwz)n;F5n^x)w z?ZDko=9zHKp-}Ggg2IiJP$x$09ynA<#=(5|9UImF5?oS?Cv(SVqc$!L6{JhqV{NtE zXV~GGusH=iXn@e4R`_9OYV-k+AoBqxX@dCX0MZB7c~4JMNQy4e#7X0fJZPma9AUg7 z)odQ_I;sJu52Q=foEDEmSH67aMLIqJnczDd679iRCF-%o;eyiN~8H7p}{K2EL9|s3U zrE(g-Ytcbm;6`haXz40p7k6@Q+CavaIk-M$aid_;toBxech4J3eKbPTSlv{(m9?vPpP?ROib%2~YE!g62I|lU-gHbw* zx}i9T&|IAwfkayCD!XNOqYdd!O2{*08%G;XL=I6?E)O&I_17mHrQKvgN>p|gM<6g+klt_dA^8aHWS4K-AVQ4)*WFX3)T z{AL|(xYl{a)G?F+PPm;y6;wyV12K3M0i8I}QTHd6vXSvYq@<|HDiNqGAUZjE$VPZw zZ~<7h?Ujb9S34$hsc6ho!O=x>q95X>o9p(9*MFX}=MV6^(wqAX;pBAbb3?#lwR-LD z`5%7${%^ke`QITuNQuty4enV1^%)Q@?CPzzz5vVU-%I>GIeq=~?N6WFoqYCRFaG?4 z-=7cL#vNzF&L>YkxB52t*$(=iXY1Ru@6v}aUjT_Gr|-UYa=JQw7b%V$ygZ=;?tb+1 tpM3n=@Biv + +/* Clock ID used in clock and timer functions. */ +typedef __clockid_t clockid_t; + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clockid_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@clockid_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c1075256526f5dc3e115c8a91cb818e2cec7a4c8 GIT binary patch literal 12540 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. */ + +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@cookie_io_functions_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@cookie_io_functions_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..00a7446042042a32b5ddc93753463c11c489b2e0 GIT binary patch literal 14902 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 f@Ir)>f|awre5iR8uKkWZcU+vKpO=j-ioyQ_@. */ + +#ifndef __error_t_defined +# define __error_t_defined 1 + +typedef int error_t; + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@error_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@error_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ca6df841ead0126b2074e7a064af238d916f1c0e GIT binary patch literal 12377 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@locale_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@locale_t.h new file mode 100644 index 0000000..6156631 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@locale_t.h @@ -0,0 +1,26 @@ +/* Definition of locale_t. + Copyright (C) 2017-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@locale_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@locale_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4a778c08c7f87e71c19683643c937028fb0fb280 GIT binary patch literal 12567 zcmbVSJ&Ytr6`r+;h)(i}m5ELQU2scpd&Oym1V{(=nX_~POTGY{lxk|KXNv8gad-93 zt}_b)G9*Y4KZ1aekbulY1V~7P1__WzEF@AAblmdZtLonB?N>d$KIuktH&w4*eeeIh zda!u${J$T6xHwp(o2t;MTvh4X*tBW3snw0853!YXqw8a}-7a2Mxh&UnS0}rwJ~QPy zS(#cZTh*6e9iOxK-=`1Kwy9H7s=Qt4^x{jW;`CvXo3gz~)@7S6jcw9G+KrNV-Xt5H zZ*`qyZK0H&M3563_!Cp9uZ?0j=CDO=&Kg*!WpQkkV!-7EoLA^6s&<(V?W?m0 zewQ<8IIdMzG-{()=&#^t&MSmaklAVh4y|dNne9PtB|67|v`33a?1hKHcT=(3!c|~I zMhR0j5!}MH4&Y^*%~qZ7HcTP2l5`WRaW4u8ZQ zU5?h9_anZ3Z~;J0*cv?{%fB@RZ#y9o^Z`rf_*f!-t#KO0XnIJD$CDI}3yC1YZH_9X zOd)ghTj#oNz}X-tqxjfyQZ;+H01us2bs@lOiWM-<-fIH(Wg!EDkzKQEG#lN7&G_LiQU9KUva(u+q3 z2s&WoqL3F5%gwrUApGIgyF=~mKyWcCxa3gW4aD85C{U)5F~0cGFK%Q#Q*zj$1bGqQ zspLXOR^|E97d9pKAq0S5%v{nn^3x$`UdJOYbc#_SMp@(tg@O1GiYGr*!vt`2LdYC^ zcj`0{X%`KHOApQo#ByUP*fWIg`0oK3X3-?8RWm+{x`1*d+Yyr&T7rMj-m zD(Q6N&AyW`;N3tPz`{A&5=sj8HF6Eo03UhMo=#8>;}kUN7-@3DR7RfS83MOl@R)O>__U`KPTNC6;#{wLsu zFPlP0YG}h~A(aBrv%2pW0}s<)zZYy@Orq&gsWT)zOOLKqV6P%sU2L&@nN>?UE-xDa z-XZr1Ud;K^+RSCI5pCfmiw%$DTE8dh`(=}Yl65UF8R_$oVv6M8Jueh1O0RT3+O%b$z8Y>^$9f4fx;>j zcr=x4A!XI%s$yu7)2W=(0V~5QktG)%K5d88|906BQkqPJ1_6?DsNu0b{LSycgqun9 z@yy*X%}lN#M+Fzps82|)>8k-2EnYveZIV~(CGHrBgWutmzG$t!V7GamTnPyPO;z30 zWMrxEhdY}WBHLEY>BAcuO~U9)aVVX;T(jo@3&)>a{DaMckzcqQlyyNXZOef#~ zm?^-HZghgw-~IF3d&*MM?xFAE8?3Uqk;o%XG1WCyAxi@c#A1+-4P5tU3Tkl5&=Ze! z5fCkcXr}Jq+#$u>5rxV$tce`F3?V4NDTU(xo-_ zlD$KC1m!2ac`;Jpbqk8-?-u;PDx~gXKqT?pVegyekU!KkN@9Tm6GnEIKbia%g*^{I z%%Wh{2PiXl4hX@(5({w-p;<{3wD8DPAj5ZG{rAvu>2hV{?Gf%Fe^aDB|;dcnk5ZLI;v$u)LD5n*N7 zYmmsvv?gjs1BnL&2~ zzv;QU144RWSVFo<{sQIRHieVDc(E!*D`#Ja%+&+{W(P+ijs)Ac92uU1UuYS z&7dA)&`W1lGZg0#hATHmAd%L(%5L7>XhXaq67me$#@@aWk;4(2pa+6`bs=mA6LESn zG0bX)0Rb8y5XM@lM^vyq?CXB!T^I4B!psG~x&RIe$3EsL%*GnFG8aHTR4K-AV zUJ|prD&cNO{3ac3xYl{a*fEp=4!9jc6;wyv`!IMD0Sz@-Q&T6FvXSvYq@<|HDiNqG zAUZg@%SL!zZ~<6V)tP~zSJfwSv1rUw!3jikpdaF9%Jb@s*MFX}=MV5ZGpp+i;o!mC z*M`F)V6k}l>R;ddo&L+Op05|9KUZJ;L-W7x(Yq!43BhPhUDXTpXU_ z{+^fT2So1bHy{1@*B^cR2mcgbf9u&h;@NlJe*BJj`mNW$_VlrMCZ52WFMJMIhMv$p Xe#N~LIOCN&uYBbt{Cu>yLc0G43bjd8 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@mbstate_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@mbstate_t.h new file mode 100644 index 0000000..8d1baa5 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@mbstate_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@mbstate_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..9ca92a8f93383170146bff78caad8d52bb8d2140 GIT binary patch literal 12559 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@sigset_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@sigset_t.h new file mode 100644 index 0000000..8b27e91 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@sigset_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@sigset_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..954675c5b2444e1f2ed6306816d721697474a49a GIT binary patch literal 12610 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_FILE.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_FILE.h new file mode 100644 index 0000000..06feadf --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_FILE.h @@ -0,0 +1,120 @@ +/* Copyright (C) 1991-2020 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 __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 + +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; + __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; + size_t __pad5; + int _mode; + /* Make sure we don't get into trouble again. */ + char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; +}; + +/* 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_FILE.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_FILE.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b8eeee3bb20d6ff06cc2ab15501ad56f3ef28e26 GIT binary patch literal 16936 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 WV?6}T0{K+;DHTaSrJM@Q@BaaQ;Lvvf literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_itimerspec.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_itimerspec.h new file mode 100644 index 0000000..17cc1ac --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_itimerspec.h @@ -0,0 +1,14 @@ +#ifndef __itimerspec_defined +#define __itimerspec_defined 1 + +#include +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_itimerspec.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_itimerspec.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..cfd1190027350a0b681efdf11f23884b954b8e41 GIT binary patch literal 12790 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_sched_param.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_sched_param.h new file mode 100644 index 0000000..db228a8 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_sched_param.h @@ -0,0 +1,28 @@ +/* Sched parameter structure. Generic version. + Copyright (C) 1996-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_sched_param.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_sched_param.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..40088b39b30d292935a7eeb92d72fbee6011a5fe GIT binary patch literal 12550 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 D$S66G literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timespec.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timespec.h new file mode 100644 index 0000000..d11c69c --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timespec.h @@ -0,0 +1,28 @@ +/* NB: Include guard matches what uses. */ +#ifndef _STRUCT_TIMESPEC +#define _STRUCT_TIMESPEC 1 + +#include +#include + +/* POSIX.1b structure for a time value. This is like a `struct timeval' but + has nanoseconds instead of microseconds. */ +struct timespec +{ + __time_t tv_sec; /* Seconds. */ +#if __WORDSIZE == 64 \ + || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) \ + || __TIMESIZE == 32 + __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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timespec.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timespec.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1377a29348c6741dcb6325405fa328b49cc09334 GIT binary patch literal 12979 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 + +/* A time value that is accurate to the nearest + microsecond but also has a range of years. */ +struct timeval +{ + __time_t tv_sec; /* Seconds. */ + __suseconds_t tv_usec; /* Microseconds. */ +}; +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timeval.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_timeval.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c1de1a3454bbf8680ce2fd22776f2034dc001b4c GIT binary patch literal 12812 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_tm.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_tm.h new file mode 100644 index 0000000..b13b631 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_tm.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@struct_tm.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..63d4ed2b03f52b12638a2e6a37de7f0ab5b768ee GIT binary patch literal 13492 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 E0mHmud;kCd literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@time_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@time_t.h new file mode 100644 index 0000000..ab8287c --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@time_t.h @@ -0,0 +1,9 @@ +#ifndef __time_t_defined +#define __time_t_defined 1 + +#include + +/* Returned by `time'. */ +typedef __time_t time_t; + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@time_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@time_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..2e49ccbab722a23bd5eda650bfd72a1bd8fada71 GIT binary patch literal 12505 zcmbVSy^kb074JFF1c+dR6XGsmv;;^DHMJwH77`+0bw~sVA};Z{-L7sk_0d=5>Ylk2 z0x~2b0{B~whz#jS5CZ84K#-7#NtV{`;?w zS7)ny*Hk)}n{~}@XP%j4y2Zx zn4K!n9sAmR*lV%3B*ld{1Z+XP8EL{JZiynPZPvq2&29_9H&(Y2%u1-HR(fygsu6$T z4is0b%Vs~jwArI!vFhL177Y3%XC185vbwTLG2rq7E*ta|O}{Ru_BB`pzss349M>x= zIrA!DHd>WgXZtm8*U|RL!Izg1LBL&u%`7_{oyeozDybyW$Jjb?_z`z>Ia+T%O8EN8 z1pql=Tl9o1|JGEz?Sw?o2dtgrV~O~+#%UO%=^-&5Pf|E8B!UR{C90G%l`PS39dz4) zvq4Ux_&9LVbSJm~4_!2ECBSQn4KU8$YXswtMTbJWTCk(tub#s*MCYQZ!mS>n4mQY*^V_?8N z7`xeaI%Q-7TUc@RkQRYIKpjlQOXm*fB!NZ=(l|+{%C@@Jtx>sd+q%gH-FW%wUsxwZ zSE77O-(u>^+6XVkz1=}>x*_~B$V5&TIYZtD5o;$qTAvc=Mz8yA?r<53(`YTv7Y6SR z(f}6DXiF$5*w@J|NDH(YYRzeGuqXzMWlGBF6W$nOW)cS%7bfgaePU1>%T5_HR~v`- zb9u4zUkP9BmqYFhHhseOomUku9Ts&{CsOkW^T3XlSdjui0R7Lv4PQ2ekhIW-(LyQ( zqGxsAF9sgwz5XcJv6w{Dqf%!|c#$66tH4P`vbx%1`Ld{%a$MeZ0=z@%6TFo3r?rL4 zUK85FOBNd**}Z+{)jyxW}4?;i*u5M1QMurBBn_KMV7@)XR4`oYjibxN6^eO5f zBN6!gdWs%7C>gdL$aC+t`mFm65@@@}QSfKCM^GHXJL25S()VHl2#3V*7&kMAPl;Qn z>dVA(YPTw6Fp<*fdBJa^S?*UeZ zffN(ncU=+h~%p3e5P(8ONBq&*}M?NzUf{(f1uGM zjIpMM8hA(=M-H$8{PpeM*mM^8g}Xt07W70O#NWx70S`5b7WZp6dBd!#g=2d%^z&a!p^BTn$pP$NHDtGzGb zvF2q&HA9^Zy&lGf2TZY=blUy6f}5rwnc3*t8hgjyDLjJmmC@W7sqpuJYWSzsbP^TG z1$`_;0!*4%$%Jh9;E_l@kJ$ZYuflU@Iwi40ff*ya%b!dRkK(0ADrJf=?E`Tz-~@zV zWQnCX2j!yd3z~T3W02vu-}(2{1aU>4oEVmd@6JNg3&DfHo zwNwL6A4r#|IV~Qiu6+H>i*$SeGQoE^B-(>7N78e`P)Ah*^QZ%fEv1=Yzs{ykT+g*- zlnW;*Vg$r!qRYF!AckHwq@rYHtlVPOh~RiU>>6p$NbOQ|f@N90P-^ zk8}%fak}LQpborvKDqn62%YqO4HeC=l6%8Txs)8jAWTc^#1wiE_(RV%91zk2!xGZX z@*{kBxsPrjtD(Wx9GBfcJaY>J0C-1G$iAF4dWA=&`}@%PIkX z$-z#s)Lar}LDgUeJ}T0zpLQb(`eixtPyx^If(JUZ%oQW1LwH?i!Oj6oes(X4hTRn& zFk0yB&@nm(O4@~881EhZdl^1Pxi!e^>6~H=MOngJ2gs?@f<5l0Wl#?>7^SnQi;9y7 z!_}z~NTju{vRigH+K}#~ggisGakAk=6w z{|J={-YCNVvt=AU3vG?v&9n}&YQ^4A-?kcFFrEaB(yMN{tAplP#kpu6U00bx3H6w+ z5>w7b`sN={6UIOP&7$WpP*o~;=`5iK1+U$tYeGk!#!YBgLk$&Tl*HopOSl^nzgb5c zu6159bqr;I6K4&(P`q13)`p;AL`~iM9W^${5&@ZZ071^b_#U%hp9zB<1`a^vZ*&WQS(!#Dr<<4=F_ n@~;CuuXh{xdhu0Y4>~&|bHlfbYvAkb$=S2F@b~%Z4bu8QqL?*Z literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@timer_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@timer_t.h new file mode 100644 index 0000000..d71a413 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@timer_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@types@timer_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c726a7acaf2dae00e15bd7411bd95e9d698041cb GIT binary patch literal 12527 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@typesizes.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@typesizes.h new file mode 100644 index 0000000..d084145 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@typesizes.h @@ -0,0 +1,100 @@ +/* bits/typesizes.h -- underlying types for *_t. Linux/x86-64 version. + Copyright (C) 2012-2020 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 __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 +#else +# define __RLIM_T_MATCHES_RLIM64_T 0 + +# define __STATFS_MATCHES_STATFS64 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@typesizes.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@typesizes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..94eb83d10a9ebb9f9f4a3aeb25c69545d235ae4b GIT binary patch literal 16044 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 x^0t4bD4&bm+7a!@j;. */ + +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@uintn-identity.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@uintn-identity.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..43b592ddef57782fd41b0d06b3cb12d6dd0552d9 GIT binary patch literal 13287 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 H=zsqQEdd&| literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitflags.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitflags.h new file mode 100644 index 0000000..33382cd --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitflags.h @@ -0,0 +1,59 @@ +/* Definitions of flag bits for `waitpid' et al. + Copyright (C) 1992-2020 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. */ + +/* The following values are used by the `waitid' function. */ +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +# ifndef __ENUM_IDTYPE_T +# define __ENUM_IDTYPE_T 1 + +/* The Linux kernel defines these bare, rather than an enum, + which causes a conflict if the include order is reversed. */ +# undef P_ALL +# undef P_PID +# undef P_PGID + +typedef enum +{ + P_ALL, /* Wait for any child. */ + P_PID, /* Wait for specified process. */ + P_PGID /* Wait for members of process group. */ +} idtype_t; +# endif +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitflags.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitflags.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..65c4b48d5169fa4b395c71d0779cdd47bf10e57a GIT binary patch literal 13271 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitstatus.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitstatus.h new file mode 100644 index 0000000..66d88a0 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitstatus.h @@ -0,0 +1,59 @@ +/* Definitions of status bits for `wait' et al. + Copyright (C) 1992-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitstatus.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@waitstatus.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..888a82b7f6e1490069eb39b0b2df98e3b44ba0c1 GIT binary patch literal 13379 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wchar.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wchar.h new file mode 100644 index 0000000..c00c501 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wchar.h @@ -0,0 +1,49 @@ +/* wchar_t type related definitions. + Copyright (C) 2000-2020 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_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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wchar.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wchar.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..04f2156ac046a70a63e41c363d75cb494c639896 GIT binary patch literal 12486 zcmbVS&8sCx6~8ktm4F*v=pW)Lu3V`IE<_i)6v36?Ms&t=PF44-etoKMzbtZjldd{->UX}+sn=Fd z|NEc6f3Ui>%6CnrbGd2qt#P@v``l^k=tt~jYjt~H?f0waR4ME2($(3aY0pf(%{Hdh z$~Eofm!{{e{`dT?yt8d?YE^a{onL(Mp?LTpD^1;9WZSyS*T&hrl5VGDS=wx;%e`*1 zqN|lNO>OV*{4Ev`ahH2-^S7RS^(*Wqb#juQzMl7#Wx0C#^6&or!HBRz8l&B11AGnK z7t%UWl#O&b;U?;?S_68(qSm8OXz99E-{f{ymw+-$jmOlwjcG(_ zDs~Sd&VC3mkyxxNg)FztT3SM7f){`C`V!RZAonbNe#=3E8aM!DAtd(F=4zu0etEdV zIjJQlX0Hl#$F4T-c3SKmNpax~0b3AnMw)PgTcSv6mv!({v)f|ujnl0Jvl6PQmEJqL z>V&^|2a2oJWwW1M+U(J=SoOEA1%p1ynT2&)R`;D!47j|2%LY9~)2+*~ef1W>@A4)M z$92jHt9E*W{tAxfyh02GnXMM!(5&@lb_BVN=p6&no-CfQ7asM z=eo7vY><;leC#=C>=7=⋘e33GkX?1B|oxngKr-qFQ5c(SnbkffI$kqIGF*yrreT zlf0|uoR5_;u#jyDRE#-s$Lsq*Ji0oVOyzTk@ygb$M36g0ysG#W)A-L>NFB* z9}S~RkIsq2a&0NtGlcH+_lOL$XqMH+E{_u6!Z1d=R@^XWEJ~N@b6IAUcDrVSsH9Y( z)(7SaF}Rhkpd2X3or+p!KaT4z15|Cnxm0NOg9Q?IxF(;1Tw{6{Iy>7hq z*T1k%h^|EWn7+W&m$eaIjC;3(+;l_uWsr#+FLL_44%wr4$C2T2Ae)&``)VxpAL(1r~1#A;SmxqpL&fLO|uN&W^4|hI&PvTO7n6 zfxlFJWlP_Z_0ie06o0^O)75;E< z^FkE+#y)&-O`}N|Ln#iWbDwJt9AM%2^NYW+SupYocZ0GnYNcEY+oS0O8~`%~*wK$p zkox!j@bx2QDQWlEckvBYX|E;nh*L^+O;gF*00XHQ6k-F{{h5OroHF#pQ(Xi^iy&I4 zJ2-bJN}1TxD|27R!9ZtoJp=EZV_1tgn!0Gx_a?Z#&w#Pm~7qpp`iKS=MD> z#0ef6O6wbIb?_xT*1U|U)Tpz*Ma0-}k0}$oE?b;02v-95XHFrh-PYt zx3gVY)w6fw15Qpr4+=wh<$&)ZL?HPHdB-Fl4OdWPP7F)^cW_50yyL*n@CnI8 ztL?rtF0IrPv?F&z8Ee8d$3nTv3xpp>p-v3gU2~|4jDz_eIz6lbB)Fv3Q09-%25np# zDoB^Io7yVmGuRm!u{j1kYMjuYPKF_AYGeYCAoCF>X@dAx0n!KGu}@E7NQyqu#0lk$ zJZNPoIAJWK^lTpPJFyX`*Q86-ycQ3`TE6V&MLIkj8R6R>GTDOFH{8qK^G6VZ4qNS_E-QUr*E62dR>pk7V6CS%90n~wq4@P&N7onGasG%lfujJnNQa&YzFbG4|Ix)QN z1%BOg^#{cCz_5h$PXH$P@NysAKvqLvt~o5be|+W^<_7TmppacTYxD|_O3Tf4Fab}0 zCMA8hYcL-BnNGe86C#v$M*{IZ)Cr?7{@^7@pbiG0Lw&UXSM#Lnz7;=GsF}ofd43 zH!XvDjKLtCMO{=JU>L4Woq$AI>npouccTsIPD;!(WE)2tPDBo8bAnzL9@T}ok4(hr zt;IO283zRDoIn`spx|RGIUW&owX+Q;;yXOJ!nw;)#&K>w^8hHu4ez+q(foPliLZZC z3-`y%z4@cvl70{>2Rv1T|7OcFd>z^vx0`7NVik(Lo~~^*JY+ly0;NlKx$A;vSH-zp zUTD73gp%kcT_UDDo#;<^M@<<2_!o;_#Xyy);K8$mo)SEIlfJ1u@f?2Q!Wv$z5Q8KZ zw^QQXkjTwC&Umf&a;ak|qZ@HMhAOId`iElhI08CrvZZcLDg`5Bg2+cvkX0g3SwM7j zbe~=Dy5Iw;nr-Gx1X)v_uG?_38_+0xkG` wGtm0k$Nu%5?{~lblX&CFx4#t_d<@h+Ij|RhxN{0LUi`$1uieJq`<}-C0X)DXtpET3 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wctype-wchar.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wctype-wchar.h new file mode 100644 index 0000000..7152463 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wctype-wchar.h @@ -0,0 +1,173 @@ +/* Copyright (C) 1996-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wctype-wchar.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@bits@wctype-wchar.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..35ed728065b1674b97770ba778fda7cc73fd04fa GIT binary patch literal 21802 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. + +/** @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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@atomic_word.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@atomic_word.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e1284df8e9b17e0b263766633b69780e5dd74472 GIT binary patch literal 12651 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@basic_file.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@basic_file.h new file mode 100644 index 0000000..fa39b78 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@basic_file.h @@ -0,0 +1,135 @@ +// Wrapper of C-language FILE struct -*- C++ -*- + +// Copyright (C) 2000-2020 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.8 File-based streams +// + +/** @file bits/basic_file.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{ios} + */ + +#ifndef _GLIBCXX_BASIC_FILE_STDIO_H +#define _GLIBCXX_BASIC_FILE_STDIO_H 1 + +#pragma GCC system_header + +#include +#include // for __c_lock and __c_file +#include // for swap +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Generic declaration. + template + class __basic_file; + + // Specialization. + template<> + class __basic_file + { + // Underlying data source/sink. + __c_file* _M_cfile; + + // True iff we opened _M_cfile, and thus must close it ourselves. + bool _M_cfile_created; + + public: + __basic_file(__c_lock* __lock = 0) throw (); + +#if __cplusplus >= 201103L + __basic_file(__basic_file&& __rv, __c_lock* = 0) noexcept + : _M_cfile(__rv._M_cfile), _M_cfile_created(__rv._M_cfile_created) + { + __rv._M_cfile = nullptr; + __rv._M_cfile_created = false; + } + + __basic_file& operator=(const __basic_file&) = delete; + __basic_file& operator=(__basic_file&&) = delete; + + void + swap(__basic_file& __f) noexcept + { + std::swap(_M_cfile, __f._M_cfile); + std::swap(_M_cfile_created, __f._M_cfile_created); + } +#endif + + __basic_file* + open(const char* __name, ios_base::openmode __mode, int __prot = 0664); + +#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T + __basic_file* + open(const wchar_t* __name, ios_base::openmode __mode); +#endif + + __basic_file* + sys_open(__c_file* __file, ios_base::openmode); + + __basic_file* + sys_open(int __fd, ios_base::openmode __mode) throw (); + + __basic_file* + close(); + + _GLIBCXX_PURE bool + is_open() const throw (); + + _GLIBCXX_PURE int + fd() throw (); + + _GLIBCXX_PURE __c_file* + file() throw (); + + ~__basic_file(); + + streamsize + xsputn(const char* __s, streamsize __n); + + streamsize + xsputn_2(const char* __s1, streamsize __n1, + const char* __s2, streamsize __n2); + + streamsize + xsgetn(char* __s, streamsize __n); + + streamoff + seekoff(streamoff __off, ios_base::seekdir __way) throw (); + + int + sync(); + + streamsize + showmanyc(); + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@basic_file.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@basic_file.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..abd10a4c78970e368aace0b40603a96d9d6ab791 GIT binary patch literal 18962 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

    *jG!Cu?Cr$5Qqxzu%jC98cD{e11&r-rflum zARK_Zy5!8xQwi~+j*EJ*I2cTPx*eGIw0&JraaaACE2u?-QZOi2f;>M+u7cz>$PHB(LgMQbGD1bS{E2JZQ88otvs(wJ-t|su$ifI`rIa+nzijtZ7A2`$bz&^PG!y zK4?+r=m^$!qwpC@U3?!O2fc!d6FyJun#d%?$@P<<4hN(I@XdA7b?|D##zf`OR1DRT!-&bXOB_8{^-NsUL}`*`KBCyz`nQzBDGGNn3s__;EN z%K^|Cl#P3(JA<~J5~_h@1@dw5|5`5TkLyV)W)3>E zWhYrIW4{9H+obL$tup*yYm5c>jiex6y75xd(YjQ+bU51vmcC|eY%JR$j+tYhmBhW$ z-kuI|di^xSx9PFzETHm(k3I6((q&`63UR)>ZTDv2-0z)oB-igr&N<{9LGGdcIO0hz zckrBvH$IaHV|j4+U=~(?wj^uWaB(&cXZDv@zxNhCTq3>R3*l?j_pW@W4SRSA?|6})1DCbw(N!XAgc+OrCu{;JIG}` zJ%>YuwZb)cY1~+XG(VYBTqWs%@~T?e(am|#-l45S1Bel%NdtkirCPjpED2iNGqy_- r_egs-b%;~zrywp)4NQ#zO@8++j1nf=fD^j$OmBurGqXN3OmX^uQB-`M literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++allocator.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++allocator.h new file mode 100644 index 0000000..ea54255 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++allocator.h @@ -0,0 +1,59 @@ +// Base to std::allocator -*- C++ -*- + +// Copyright (C) 2004-2020 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 + * __gnu_cxx::new_allocator. + * + * @ingroup allocators + * @tparam _Tp Type of allocated object. + */ + template + using __allocator_base = __gnu_cxx::new_allocator<_Tp>; +} +#else +// Define new_allocator as the base class to std::allocator. +# define __allocator_base __gnu_cxx::new_allocator +#endif + +#if defined(__SANITIZE_ADDRESS__) && !defined(_GLIBCXX_SANITIZE_STD_ALLOCATOR) +# define _GLIBCXX_SANITIZE_STD_ALLOCATOR 1 +#endif + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++allocator.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++allocator.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..d1e93619065a8b80d7d4146a36a9e11aec612607 GIT binary patch literal 13869 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 U6!=~I;>GI+`2G3Oy)mr%Ke!6+V*mgE literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++config.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++config.h new file mode 100644 index 0000000..6f0c4ab --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++config.h @@ -0,0 +1,2094 @@ +// Predefined symbols and macros -*- C++ -*- + +// Copyright (C) 1997-2020 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++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 + +// The major release number for the GCC release the C++ library belongs to. +#define _GLIBCXX_RELEASE 10 + +// The datestamp of the C++ library in compressed ISO date format. +#define __GLIBCXX__ 20210110 + +// 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 +// _GLIBCXX17_DEPRECATED +// _GLIBCXX20_DEPRECATED( string-literal ) +#ifndef _GLIBCXX_USE_DEPRECATED +# define _GLIBCXX_USE_DEPRECATED 1 +#endif + +#if defined(__DEPRECATED) && (__cplusplus >= 201103L) +# 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 >= 201703L) +# define _GLIBCXX17_DEPRECATED [[__deprecated__]] +#else +# define _GLIBCXX17_DEPRECATED +#endif + +#if defined(__DEPRECATED) && (__cplusplus > 201703L) +# define _GLIBCXX20_DEPRECATED(MSG) [[deprecated(MSG)]] +#else +# define _GLIBCXX20_DEPRECATED(MSG) +#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 >= 201703L +# 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 > 201703L +# define _GLIBCXX20_CONSTEXPR constexpr +# else +# define _GLIBCXX20_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()) +# 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 +} + +# 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 + +// Defined if inline namespaces are used for versioning. +# define _GLIBCXX_INLINE_VERSION 0 + +// Inline namespace for symbol versioning. +#if _GLIBCXX_INLINE_VERSION +# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __8 { +# define _GLIBCXX_END_NAMESPACE_VERSION } + +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 +# define _GLIBCXX_BEGIN_NAMESPACE_VERSION +# define _GLIBCXX_END_NAMESPACE_VERSION +#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 + +// Inline namespace for long double 128 mode. +#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 + +// Debug Mode implies checking assertions. +#if defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_ASSERTIONS) +# define _GLIBCXX_ASSERTIONS 1 +#endif + +// Disable std::string explicit instantiation declarations in order to assert. +#ifdef _GLIBCXX_ASSERTIONS +# undef _GLIBCXX_EXTERN_TEMPLATE +# define _GLIBCXX_EXTERN_TEMPLATE -1 +#endif + +// Assert. +#if defined(_GLIBCXX_ASSERTIONS) \ + || defined(_GLIBCXX_PARALLEL) || defined(_GLIBCXX_PARALLEL_ASSERTIONS) +namespace std +{ + // Avoid the use of assert, because we're trying to keep the + // include out of the mix. + extern "C++" inline void + __replacement_assert(const char* __file, int __line, + const char* __function, const char* __condition) + { + __builtin_printf("%s:%d: %s: Assertion '%s' failed.\n", __file, __line, + __function, __condition); + __builtin_abort(); + } +} +#define __glibcxx_assert_impl(_Condition) \ + do \ + { \ + if (! (_Condition)) \ + std::__replacement_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \ + #_Condition); \ + } while (false) +#endif + +#if defined(_GLIBCXX_ASSERTIONS) +# define __glibcxx_assert(_Condition) __glibcxx_assert_impl(_Condition) +#else +# define __glibcxx_assert(_Condition) +#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 + +#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__) +#define _GLIBCXX_USE_FLOAT128 1 +#endif + +#if __GNUC__ >= 7 +// Assume these are available if the compiler claims to be a recent GCC: +# define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1 +# define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1 +# define _GLIBCXX_HAVE_BUILTIN_LAUNDER 1 +# define _GLIBCXX_BUILTIN_IS_SAME_AS(T, U) __is_same_as(T, U) +# if __GNUC__ >= 9 +# define _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED 1 +# endif +#elif defined(__is_identifier) && defined(__has_builtin) +// For non-GNU compilers: +# if ! __is_identifier(__has_unique_object_representations) +# define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1 +# endif +# if ! __is_identifier(__is_aggregate) +# define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1 +# endif +# if __has_builtin(__builtin_launder) +# define _GLIBCXX_HAVE_BUILTIN_LAUNDER 1 +# endif +# if __has_builtin(__builtin_is_constant_evaluated) +# define _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED 1 +# endif +# if ! __is_identifier(__is_same) +# define _GLIBCXX_BUILTIN_IS_SAME_AS(T, U) __is_same(T, U) +# endif +#endif // GCC + +// 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 + +// 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 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 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 header file. */ +#define _GLIBCXX_HAVE_DIRENT_H 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_DLFCN_H 1 + +/* Define if EBADMSG exists. */ +#define _GLIBCXX_HAVE_EBADMSG 1 + +/* Define if ECANCELED exists. */ +#define _GLIBCXX_HAVE_ECANCELED 1 + +/* Define if ECHILD exists. */ +#define _GLIBCXX_HAVE_ECHILD 1 + +/* Define if EIDRM exists. */ +#define _GLIBCXX_HAVE_EIDRM 1 + +/* Define to 1 if you have the header file. */ +#define _GLIBCXX_HAVE_ENDIAN_H 1 + +/* Define if ENODATA exists. */ +#define _GLIBCXX_HAVE_ENODATA 1 + +/* Define if ENOLINK exists. */ +#define _GLIBCXX_HAVE_ENOLINK 1 + +/* Define if ENOSPC exists. */ +#define _GLIBCXX_HAVE_ENOSPC 1 + +/* Define if ENOSR exists. */ +#define _GLIBCXX_HAVE_ENOSR 1 + +/* Define if ENOSTR exists. */ +#define _GLIBCXX_HAVE_ENOSTR 1 + +/* Define if ENOTRECOVERABLE exists. */ +#define _GLIBCXX_HAVE_ENOTRECOVERABLE 1 + +/* Define if ENOTSUP exists. */ +#define _GLIBCXX_HAVE_ENOTSUP 1 + +/* Define if EOVERFLOW exists. */ +#define _GLIBCXX_HAVE_EOVERFLOW 1 + +/* Define if EOWNERDEAD exists. */ +#define _GLIBCXX_HAVE_EOWNERDEAD 1 + +/* Define if EPERM exists. */ +#define _GLIBCXX_HAVE_EPERM 1 + +/* Define if EPROTO exists. */ +#define _GLIBCXX_HAVE_EPROTO 1 + +/* Define if ETIME exists. */ +#define _GLIBCXX_HAVE_ETIME 1 + +/* Define if ETIMEDOUT exists. */ +#define _GLIBCXX_HAVE_ETIMEDOUT 1 + +/* Define if ETXTBSY exists. */ +#define _GLIBCXX_HAVE_ETXTBSY 1 + +/* Define if EWOULDBLOCK exists. */ +#define _GLIBCXX_HAVE_EWOULDBLOCK 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 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 _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. */ +#define _GLIBCXX_HAVE_ICONV 1 + +/* Define to 1 if you have the header file. */ +/* #undef _GLIBCXX_HAVE_IEEEFP_H */ + +/* Define if int64_t is available in . */ +#define _GLIBCXX_HAVE_INT64_T 1 + +/* Define if int64_t is a long. */ +#define _GLIBCXX_HAVE_INT64_T_LONG 1 + +/* Define if int64_t is a long long. */ +/* #undef _GLIBCXX_HAVE_INT64_T_LONG_LONG */ + +/* 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 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 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 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 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 `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 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_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 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 + +/* 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 + +/* Defined if Sleep exists. */ +/* #undef _GLIBCXX_HAVE_WIN32_SLEEP */ + +/* Define if writev is available in . */ +#define _GLIBCXX_HAVE_WRITEV 1 + +/* Define to 1 if you have the `_acosf' function. */ +/* #undef _GLIBCXX_HAVE__ACOSF */ + +/* Define to 1 if you have the `_acosl' function. */ +/* #undef _GLIBCXX_HAVE__ACOSL */ + +/* Define to 1 if you have the `_aligned_malloc' function. */ +/* #undef _GLIBCXX_HAVE__ALIGNED_MALLOC */ + +/* Define to 1 if you have the `_asinf' function. */ +/* #undef _GLIBCXX_HAVE__ASINF */ + +/* Define to 1 if you have the `_asinl' function. */ +/* #undef _GLIBCXX_HAVE__ASINL */ + +/* Define to 1 if you have the `_atan2f' function. */ +/* #undef _GLIBCXX_HAVE__ATAN2F */ + +/* Define to 1 if you have the `_atan2l' function. */ +/* #undef _GLIBCXX_HAVE__ATAN2L */ + +/* Define to 1 if you have the `_atanf' function. */ +/* #undef _GLIBCXX_HAVE__ATANF */ + +/* Define to 1 if you have the `_atanl' function. */ +/* #undef _GLIBCXX_HAVE__ATANL */ + +/* Define to 1 if you have the `_ceilf' function. */ +/* #undef _GLIBCXX_HAVE__CEILF */ + +/* Define to 1 if you have the `_ceill' function. */ +/* #undef _GLIBCXX_HAVE__CEILL */ + +/* Define to 1 if you have the `_cosf' function. */ +/* #undef _GLIBCXX_HAVE__COSF */ + +/* Define to 1 if you have the `_coshf' function. */ +/* #undef _GLIBCXX_HAVE__COSHF */ + +/* Define to 1 if you have the `_coshl' function. */ +/* #undef _GLIBCXX_HAVE__COSHL */ + +/* Define to 1 if you have the `_cosl' function. */ +/* #undef _GLIBCXX_HAVE__COSL */ + +/* Define to 1 if you have the `_expf' function. */ +/* #undef _GLIBCXX_HAVE__EXPF */ + +/* Define to 1 if you have the `_expl' function. */ +/* #undef _GLIBCXX_HAVE__EXPL */ + +/* Define to 1 if you have the `_fabsf' function. */ +/* #undef _GLIBCXX_HAVE__FABSF */ + +/* Define to 1 if you have the `_fabsl' function. */ +/* #undef _GLIBCXX_HAVE__FABSL */ + +/* Define to 1 if you have the `_finite' function. */ +/* #undef _GLIBCXX_HAVE__FINITE */ + +/* Define to 1 if you have the `_finitef' function. */ +/* #undef _GLIBCXX_HAVE__FINITEF */ + +/* Define to 1 if you have the `_finitel' function. */ +/* #undef _GLIBCXX_HAVE__FINITEL */ + +/* Define to 1 if you have the `_floorf' function. */ +/* #undef _GLIBCXX_HAVE__FLOORF */ + +/* Define to 1 if you have the `_floorl' function. */ +/* #undef _GLIBCXX_HAVE__FLOORL */ + +/* Define to 1 if you have the `_fmodf' function. */ +/* #undef _GLIBCXX_HAVE__FMODF */ + +/* Define to 1 if you have the `_fmodl' function. */ +/* #undef _GLIBCXX_HAVE__FMODL */ + +/* Define to 1 if you have the `_fpclass' function. */ +/* #undef _GLIBCXX_HAVE__FPCLASS */ + +/* Define to 1 if you have the `_frexpf' function. */ +/* #undef _GLIBCXX_HAVE__FREXPF */ + +/* Define to 1 if you have the `_frexpl' function. */ +/* #undef _GLIBCXX_HAVE__FREXPL */ + +/* Define to 1 if you have the `_hypot' function. */ +/* #undef _GLIBCXX_HAVE__HYPOT */ + +/* Define to 1 if you have the `_hypotf' function. */ +/* #undef _GLIBCXX_HAVE__HYPOTF */ + +/* Define to 1 if you have the `_hypotl' function. */ +/* #undef _GLIBCXX_HAVE__HYPOTL */ + +/* Define to 1 if you have the `_isinf' function. */ +/* #undef _GLIBCXX_HAVE__ISINF */ + +/* Define to 1 if you have the `_isinff' function. */ +/* #undef _GLIBCXX_HAVE__ISINFF */ + +/* Define to 1 if you have the `_isinfl' function. */ +/* #undef _GLIBCXX_HAVE__ISINFL */ + +/* Define to 1 if you have the `_isnan' function. */ +/* #undef _GLIBCXX_HAVE__ISNAN */ + +/* Define to 1 if you have the `_isnanf' function. */ +/* #undef _GLIBCXX_HAVE__ISNANF */ + +/* Define to 1 if you have the `_isnanl' function. */ +/* #undef _GLIBCXX_HAVE__ISNANL */ + +/* Define to 1 if you have the `_ldexpf' function. */ +/* #undef _GLIBCXX_HAVE__LDEXPF */ + +/* Define to 1 if you have the `_ldexpl' function. */ +/* #undef _GLIBCXX_HAVE__LDEXPL */ + +/* Define to 1 if you have the `_log10f' function. */ +/* #undef _GLIBCXX_HAVE__LOG10F */ + +/* Define to 1 if you have the `_log10l' function. */ +/* #undef _GLIBCXX_HAVE__LOG10L */ + +/* Define to 1 if you have the `_logf' function. */ +/* #undef _GLIBCXX_HAVE__LOGF */ + +/* Define to 1 if you have the `_logl' function. */ +/* #undef _GLIBCXX_HAVE__LOGL */ + +/* Define to 1 if you have the `_modf' function. */ +/* #undef _GLIBCXX_HAVE__MODF */ + +/* Define to 1 if you have the `_modff' function. */ +/* #undef _GLIBCXX_HAVE__MODFF */ + +/* Define to 1 if you have the `_modfl' function. */ +/* #undef _GLIBCXX_HAVE__MODFL */ + +/* Define to 1 if you have the `_powf' function. */ +/* #undef _GLIBCXX_HAVE__POWF */ + +/* Define to 1 if you have the `_powl' function. */ +/* #undef _GLIBCXX_HAVE__POWL */ + +/* Define to 1 if you have the `_qfpclass' function. */ +/* #undef _GLIBCXX_HAVE__QFPCLASS */ + +/* Define to 1 if you have the `_sincos' function. */ +/* #undef _GLIBCXX_HAVE__SINCOS */ + +/* Define to 1 if you have the `_sincosf' function. */ +/* #undef _GLIBCXX_HAVE__SINCOSF */ + +/* Define to 1 if you have the `_sincosl' function. */ +/* #undef _GLIBCXX_HAVE__SINCOSL */ + +/* Define to 1 if you have the `_sinf' function. */ +/* #undef _GLIBCXX_HAVE__SINF */ + +/* Define to 1 if you have the `_sinhf' function. */ +/* #undef _GLIBCXX_HAVE__SINHF */ + +/* Define to 1 if you have the `_sinhl' function. */ +/* #undef _GLIBCXX_HAVE__SINHL */ + +/* Define to 1 if you have the `_sinl' function. */ +/* #undef _GLIBCXX_HAVE__SINL */ + +/* Define to 1 if you have the `_sqrtf' function. */ +/* #undef _GLIBCXX_HAVE__SQRTF */ + +/* Define to 1 if you have the `_sqrtl' function. */ +/* #undef _GLIBCXX_HAVE__SQRTL */ + +/* Define to 1 if you have the `_tanf' function. */ +/* #undef _GLIBCXX_HAVE__TANF */ + +/* Define to 1 if you have the `_tanhf' function. */ +/* #undef _GLIBCXX_HAVE__TANHF */ + +/* Define to 1 if you have the `_tanhl' function. */ +/* #undef _GLIBCXX_HAVE__TANHL */ + +/* Define to 1 if you have the `_tanl' function. */ +/* #undef _GLIBCXX_HAVE__TANL */ + +/* 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 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" + +/* The size of `char', as computed by sizeof. */ +/* #undef SIZEOF_CHAR */ + +/* The size of `int', as computed by sizeof. */ +/* #undef SIZEOF_INT */ + +/* The size of `long', as computed by sizeof. */ +/* #undef SIZEOF_LONG */ + +/* The size of `short', as computed by sizeof. */ +/* #undef SIZEOF_SHORT */ + +/* The size of `void *', as computed by sizeof. */ +/* #undef SIZEOF_VOID_P */ + +/* Define to 1 if you have the ANSI C header files. */ +#define 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 functions or 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 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 1 + +/* 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 */ + +/* 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 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 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::tr1. */ +#define _GLIBCXX_USE_C99_CTYPE_TR1 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::tr1. */ +#define _GLIBCXX_USE_C99_INTTYPES_TR1 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 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::tr1. */ +#define _GLIBCXX_USE_C99_STDINT_TR1 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 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 + +/* 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 __int128 is supported on this host. */ +#define _GLIBCXX_USE_INT128 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 + +/* 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 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 1 + +/* 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 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 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 + +/* 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 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 + +#if defined (_GLIBCXX_HAVE__ACOSF) && ! defined (_GLIBCXX_HAVE_ACOSF) +# define _GLIBCXX_HAVE_ACOSF 1 +# define acosf _acosf +#endif + +#if defined (_GLIBCXX_HAVE__ACOSL) && ! defined (_GLIBCXX_HAVE_ACOSL) +# define _GLIBCXX_HAVE_ACOSL 1 +# define acosl _acosl +#endif + +#if defined (_GLIBCXX_HAVE__ASINF) && ! defined (_GLIBCXX_HAVE_ASINF) +# define _GLIBCXX_HAVE_ASINF 1 +# define asinf _asinf +#endif + +#if defined (_GLIBCXX_HAVE__ASINL) && ! defined (_GLIBCXX_HAVE_ASINL) +# define _GLIBCXX_HAVE_ASINL 1 +# define asinl _asinl +#endif + +#if defined (_GLIBCXX_HAVE__ATAN2F) && ! defined (_GLIBCXX_HAVE_ATAN2F) +# define _GLIBCXX_HAVE_ATAN2F 1 +# define atan2f _atan2f +#endif + +#if defined (_GLIBCXX_HAVE__ATAN2L) && ! defined (_GLIBCXX_HAVE_ATAN2L) +# define _GLIBCXX_HAVE_ATAN2L 1 +# define atan2l _atan2l +#endif + +#if defined (_GLIBCXX_HAVE__ATANF) && ! defined (_GLIBCXX_HAVE_ATANF) +# define _GLIBCXX_HAVE_ATANF 1 +# define atanf _atanf +#endif + +#if defined (_GLIBCXX_HAVE__ATANL) && ! defined (_GLIBCXX_HAVE_ATANL) +# define _GLIBCXX_HAVE_ATANL 1 +# define atanl _atanl +#endif + +#if defined (_GLIBCXX_HAVE__CEILF) && ! defined (_GLIBCXX_HAVE_CEILF) +# define _GLIBCXX_HAVE_CEILF 1 +# define ceilf _ceilf +#endif + +#if defined (_GLIBCXX_HAVE__CEILL) && ! defined (_GLIBCXX_HAVE_CEILL) +# define _GLIBCXX_HAVE_CEILL 1 +# define ceill _ceill +#endif + +#if defined (_GLIBCXX_HAVE__COSF) && ! defined (_GLIBCXX_HAVE_COSF) +# define _GLIBCXX_HAVE_COSF 1 +# define cosf _cosf +#endif + +#if defined (_GLIBCXX_HAVE__COSHF) && ! defined (_GLIBCXX_HAVE_COSHF) +# define _GLIBCXX_HAVE_COSHF 1 +# define coshf _coshf +#endif + +#if defined (_GLIBCXX_HAVE__COSHL) && ! defined (_GLIBCXX_HAVE_COSHL) +# define _GLIBCXX_HAVE_COSHL 1 +# define coshl _coshl +#endif + +#if defined (_GLIBCXX_HAVE__COSL) && ! defined (_GLIBCXX_HAVE_COSL) +# define _GLIBCXX_HAVE_COSL 1 +# define cosl _cosl +#endif + +#if defined (_GLIBCXX_HAVE__EXPF) && ! defined (_GLIBCXX_HAVE_EXPF) +# define _GLIBCXX_HAVE_EXPF 1 +# define expf _expf +#endif + +#if defined (_GLIBCXX_HAVE__EXPL) && ! defined (_GLIBCXX_HAVE_EXPL) +# define _GLIBCXX_HAVE_EXPL 1 +# define expl _expl +#endif + +#if defined (_GLIBCXX_HAVE__FABSF) && ! defined (_GLIBCXX_HAVE_FABSF) +# define _GLIBCXX_HAVE_FABSF 1 +# define fabsf _fabsf +#endif + +#if defined (_GLIBCXX_HAVE__FABSL) && ! defined (_GLIBCXX_HAVE_FABSL) +# define _GLIBCXX_HAVE_FABSL 1 +# define fabsl _fabsl +#endif + +#if defined (_GLIBCXX_HAVE__FINITE) && ! defined (_GLIBCXX_HAVE_FINITE) +# define _GLIBCXX_HAVE_FINITE 1 +# define finite _finite +#endif + +#if defined (_GLIBCXX_HAVE__FINITEF) && ! defined (_GLIBCXX_HAVE_FINITEF) +# define _GLIBCXX_HAVE_FINITEF 1 +# define finitef _finitef +#endif + +#if defined (_GLIBCXX_HAVE__FINITEL) && ! defined (_GLIBCXX_HAVE_FINITEL) +# define _GLIBCXX_HAVE_FINITEL 1 +# define finitel _finitel +#endif + +#if defined (_GLIBCXX_HAVE__FLOORF) && ! defined (_GLIBCXX_HAVE_FLOORF) +# define _GLIBCXX_HAVE_FLOORF 1 +# define floorf _floorf +#endif + +#if defined (_GLIBCXX_HAVE__FLOORL) && ! defined (_GLIBCXX_HAVE_FLOORL) +# define _GLIBCXX_HAVE_FLOORL 1 +# define floorl _floorl +#endif + +#if defined (_GLIBCXX_HAVE__FMODF) && ! defined (_GLIBCXX_HAVE_FMODF) +# define _GLIBCXX_HAVE_FMODF 1 +# define fmodf _fmodf +#endif + +#if defined (_GLIBCXX_HAVE__FMODL) && ! defined (_GLIBCXX_HAVE_FMODL) +# define _GLIBCXX_HAVE_FMODL 1 +# define fmodl _fmodl +#endif + +#if defined (_GLIBCXX_HAVE__FPCLASS) && ! defined (_GLIBCXX_HAVE_FPCLASS) +# define _GLIBCXX_HAVE_FPCLASS 1 +# define fpclass _fpclass +#endif + +#if defined (_GLIBCXX_HAVE__FREXPF) && ! defined (_GLIBCXX_HAVE_FREXPF) +# define _GLIBCXX_HAVE_FREXPF 1 +# define frexpf _frexpf +#endif + +#if defined (_GLIBCXX_HAVE__FREXPL) && ! defined (_GLIBCXX_HAVE_FREXPL) +# define _GLIBCXX_HAVE_FREXPL 1 +# define frexpl _frexpl +#endif + +#if defined (_GLIBCXX_HAVE__HYPOT) && ! defined (_GLIBCXX_HAVE_HYPOT) +# define _GLIBCXX_HAVE_HYPOT 1 +# define hypot _hypot +#endif + +#if defined (_GLIBCXX_HAVE__HYPOTF) && ! defined (_GLIBCXX_HAVE_HYPOTF) +# define _GLIBCXX_HAVE_HYPOTF 1 +# define hypotf _hypotf +#endif + +#if defined (_GLIBCXX_HAVE__HYPOTL) && ! defined (_GLIBCXX_HAVE_HYPOTL) +# define _GLIBCXX_HAVE_HYPOTL 1 +# define hypotl _hypotl +#endif + +#if defined (_GLIBCXX_HAVE__ISINF) && ! defined (_GLIBCXX_HAVE_ISINF) +# define _GLIBCXX_HAVE_ISINF 1 +# define isinf _isinf +#endif + +#if defined (_GLIBCXX_HAVE__ISINFF) && ! defined (_GLIBCXX_HAVE_ISINFF) +# define _GLIBCXX_HAVE_ISINFF 1 +# define isinff _isinff +#endif + +#if defined (_GLIBCXX_HAVE__ISINFL) && ! defined (_GLIBCXX_HAVE_ISINFL) +# define _GLIBCXX_HAVE_ISINFL 1 +# define isinfl _isinfl +#endif + +#if defined (_GLIBCXX_HAVE__ISNAN) && ! defined (_GLIBCXX_HAVE_ISNAN) +# define _GLIBCXX_HAVE_ISNAN 1 +# define isnan _isnan +#endif + +#if defined (_GLIBCXX_HAVE__ISNANF) && ! defined (_GLIBCXX_HAVE_ISNANF) +# define _GLIBCXX_HAVE_ISNANF 1 +# define isnanf _isnanf +#endif + +#if defined (_GLIBCXX_HAVE__ISNANL) && ! defined (_GLIBCXX_HAVE_ISNANL) +# define _GLIBCXX_HAVE_ISNANL 1 +# define isnanl _isnanl +#endif + +#if defined (_GLIBCXX_HAVE__LDEXPF) && ! defined (_GLIBCXX_HAVE_LDEXPF) +# define _GLIBCXX_HAVE_LDEXPF 1 +# define ldexpf _ldexpf +#endif + +#if defined (_GLIBCXX_HAVE__LDEXPL) && ! defined (_GLIBCXX_HAVE_LDEXPL) +# define _GLIBCXX_HAVE_LDEXPL 1 +# define ldexpl _ldexpl +#endif + +#if defined (_GLIBCXX_HAVE__LOG10F) && ! defined (_GLIBCXX_HAVE_LOG10F) +# define _GLIBCXX_HAVE_LOG10F 1 +# define log10f _log10f +#endif + +#if defined (_GLIBCXX_HAVE__LOG10L) && ! defined (_GLIBCXX_HAVE_LOG10L) +# define _GLIBCXX_HAVE_LOG10L 1 +# define log10l _log10l +#endif + +#if defined (_GLIBCXX_HAVE__LOGF) && ! defined (_GLIBCXX_HAVE_LOGF) +# define _GLIBCXX_HAVE_LOGF 1 +# define logf _logf +#endif + +#if defined (_GLIBCXX_HAVE__LOGL) && ! defined (_GLIBCXX_HAVE_LOGL) +# define _GLIBCXX_HAVE_LOGL 1 +# define logl _logl +#endif + +#if defined (_GLIBCXX_HAVE__MODF) && ! defined (_GLIBCXX_HAVE_MODF) +# define _GLIBCXX_HAVE_MODF 1 +# define modf _modf +#endif + +#if defined (_GLIBCXX_HAVE__MODFF) && ! defined (_GLIBCXX_HAVE_MODFF) +# define _GLIBCXX_HAVE_MODFF 1 +# define modff _modff +#endif + +#if defined (_GLIBCXX_HAVE__MODFL) && ! defined (_GLIBCXX_HAVE_MODFL) +# define _GLIBCXX_HAVE_MODFL 1 +# define modfl _modfl +#endif + +#if defined (_GLIBCXX_HAVE__POWF) && ! defined (_GLIBCXX_HAVE_POWF) +# define _GLIBCXX_HAVE_POWF 1 +# define powf _powf +#endif + +#if defined (_GLIBCXX_HAVE__POWL) && ! defined (_GLIBCXX_HAVE_POWL) +# define _GLIBCXX_HAVE_POWL 1 +# define powl _powl +#endif + +#if defined (_GLIBCXX_HAVE__QFPCLASS) && ! defined (_GLIBCXX_HAVE_QFPCLASS) +# define _GLIBCXX_HAVE_QFPCLASS 1 +# define qfpclass _qfpclass +#endif + +#if defined (_GLIBCXX_HAVE__SINCOS) && ! defined (_GLIBCXX_HAVE_SINCOS) +# define _GLIBCXX_HAVE_SINCOS 1 +# define sincos _sincos +#endif + +#if defined (_GLIBCXX_HAVE__SINCOSF) && ! defined (_GLIBCXX_HAVE_SINCOSF) +# define _GLIBCXX_HAVE_SINCOSF 1 +# define sincosf _sincosf +#endif + +#if defined (_GLIBCXX_HAVE__SINCOSL) && ! defined (_GLIBCXX_HAVE_SINCOSL) +# define _GLIBCXX_HAVE_SINCOSL 1 +# define sincosl _sincosl +#endif + +#if defined (_GLIBCXX_HAVE__SINF) && ! defined (_GLIBCXX_HAVE_SINF) +# define _GLIBCXX_HAVE_SINF 1 +# define sinf _sinf +#endif + +#if defined (_GLIBCXX_HAVE__SINHF) && ! defined (_GLIBCXX_HAVE_SINHF) +# define _GLIBCXX_HAVE_SINHF 1 +# define sinhf _sinhf +#endif + +#if defined (_GLIBCXX_HAVE__SINHL) && ! defined (_GLIBCXX_HAVE_SINHL) +# define _GLIBCXX_HAVE_SINHL 1 +# define sinhl _sinhl +#endif + +#if defined (_GLIBCXX_HAVE__SINL) && ! defined (_GLIBCXX_HAVE_SINL) +# define _GLIBCXX_HAVE_SINL 1 +# define sinl _sinl +#endif + +#if defined (_GLIBCXX_HAVE__SQRTF) && ! defined (_GLIBCXX_HAVE_SQRTF) +# define _GLIBCXX_HAVE_SQRTF 1 +# define sqrtf _sqrtf +#endif + +#if defined (_GLIBCXX_HAVE__SQRTL) && ! defined (_GLIBCXX_HAVE_SQRTL) +# define _GLIBCXX_HAVE_SQRTL 1 +# define sqrtl _sqrtl +#endif + +#if defined (_GLIBCXX_HAVE__STRTOF) && ! defined (_GLIBCXX_HAVE_STRTOF) +# define _GLIBCXX_HAVE_STRTOF 1 +# define strtof _strtof +#endif + +#if defined (_GLIBCXX_HAVE__STRTOLD) && ! defined (_GLIBCXX_HAVE_STRTOLD) +# define _GLIBCXX_HAVE_STRTOLD 1 +# define strtold _strtold +#endif + +#if defined (_GLIBCXX_HAVE__TANF) && ! defined (_GLIBCXX_HAVE_TANF) +# define _GLIBCXX_HAVE_TANF 1 +# define tanf _tanf +#endif + +#if defined (_GLIBCXX_HAVE__TANHF) && ! defined (_GLIBCXX_HAVE_TANHF) +# define _GLIBCXX_HAVE_TANHF 1 +# define tanhf _tanhf +#endif + +#if defined (_GLIBCXX_HAVE__TANHL) && ! defined (_GLIBCXX_HAVE_TANHL) +# define _GLIBCXX_HAVE_TANHL 1 +# define tanhl _tanhl +#endif + +#if defined (_GLIBCXX_HAVE__TANL) && ! defined (_GLIBCXX_HAVE_TANL) +# define _GLIBCXX_HAVE_TANL 1 +# define tanl _tanl +#endif + +#endif // _GLIBCXX_CXX_CONFIG_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++config.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++config.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c59551872878662328abbd811f590cf2a0504807 GIT binary patch literal 45526 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%0D?jJ-A(U?*E~VugG)zL|7{ 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 L&m$33Nxc3KknfT$ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++io.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++io.h new file mode 100644 index 0000000..4c9b5f0 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++io.h @@ -0,0 +1,50 @@ +// Underlying io library details -*- C++ -*- + +// Copyright (C) 2000-2020 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++io.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{ios} + */ + +// c_io_stdio.h - Defines for using "C" stdio.h + +#ifndef _GLIBCXX_CXX_IO_H +#define _GLIBCXX_CXX_IO_H 1 + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + typedef __gthread_mutex_t __c_lock; + + // for basic_file.h + typedef FILE __c_file; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++io.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++io.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..94f43d746d69ee2884af7f861f18384b105e8435 GIT binary patch literal 13830 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++locale.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++locale.h new file mode 100644 index 0000000..bf9fafa --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++locale.h @@ -0,0 +1,114 @@ +// Wrapper for underlying C-language localization -*- C++ -*- + +// Copyright (C) 2001-2020 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++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; + + // 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; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++locale.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@c++locale.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..6557e9746822987a553f79bdd0f11ffed3c2d560 GIT binary patch literal 15360 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@cpu_defines.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@cpu_defines.h new file mode 100644 index 0000000..b40a4f0 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@cpu_defines.h @@ -0,0 +1,33 @@ +// Specific definitions for generic platforms -*- C++ -*- + +// Copyright (C) 2005-2020 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/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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@cpu_defines.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@cpu_defines.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..4a13fe6b365eb6d5f9da3c97056b6a56f22ce1fb GIT binary patch literal 12322 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 AN&o-= literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_base.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_base.h new file mode 100644 index 0000000..24bff55 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_base.h @@ -0,0 +1,66 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 1997-2020 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_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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_base.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_base.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..697eb6cabef7ffa7b2683b1881d5552105fa6d86 GIT binary patch literal 16782 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_inline.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_inline.h new file mode 100644 index 0000000..ae8a2f4 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_inline.h @@ -0,0 +1,76 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2000-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_inline.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@ctype_inline.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c76aa0f516e222272864fc722b0b75ee07279f5a GIT binary patch literal 16324 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 UMt38U61{sPQe12<{9 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@error_constants.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@error_constants.h new file mode 100644 index 0000000..b5b0ea6 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@error_constants.h @@ -0,0 +1,178 @@ +// Specific definitions for generic platforms -*- C++ -*- + +// Copyright (C) 2007-2020 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/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 _GLIBCXX_HAVE_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 _GLIBCXX_HAVE_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 _GLIBCXX_HAVE_ENOLINK + no_link = ENOLINK, +#endif + + no_lock_available = ENOLCK, + +#ifdef _GLIBCXX_HAVE_ENODATA + no_message_available = ENODATA, +#endif + + no_message = ENOMSG, + no_protocol_option = ENOPROTOOPT, + no_space_on_device = ENOSPC, + +#ifdef _GLIBCXX_HAVE_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 _GLIBCXX_HAVE_ENOSTR + not_a_stream = ENOSTR, +#endif + + not_connected = ENOTCONN, + not_enough_memory = ENOMEM, + +#ifdef _GLIBCXX_HAVE_ENOTSUP + not_supported = ENOTSUP, +#endif + +#ifdef _GLIBCXX_HAVE_ECANCELED + operation_canceled = ECANCELED, +#endif + + operation_in_progress = EINPROGRESS, + operation_not_permitted = EPERM, + operation_not_supported = EOPNOTSUPP, + operation_would_block = EWOULDBLOCK, + +#ifdef _GLIBCXX_HAVE_EOWNERDEAD + owner_dead = EOWNERDEAD, +#endif + + permission_denied = EACCES, + +#ifdef _GLIBCXX_HAVE_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 _GLIBCXX_HAVE_ENOTRECOVERABLE + state_not_recoverable = ENOTRECOVERABLE, +#endif + +#ifdef _GLIBCXX_HAVE_ETIME + stream_timeout = ETIME, +#endif + +#ifdef _GLIBCXX_HAVE_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 _GLIBCXX_HAVE_EOVERFLOW + value_too_large = EOVERFLOW, +#endif + + wrong_protocol_type = EPROTOTYPE + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@error_constants.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@error_constants.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..afe003740a3101dfb4956b6e989910af0b21c364 GIT binary patch literal 22824 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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 + +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; +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 +#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) + + +#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__)) + +static volatile int __gthread_active = -1; + +static void +__gthread_trigger (void) +{ + __gthread_active = 1; +} + +static 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; +} + +#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 + +static inline int +__gthread_active_p (void) +{ + static void *const __gthread_active_ptr + = __extension__ (void *) >HR_ACTIVE_PROXY; + return __gthread_active_ptr != 0; +} + +#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__) + +static volatile int __gthread_active = -1; + +static 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 */ + +static 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 */ + +static inline int +__gthread_create (__gthread_t *__threadid, void *(*__func) (void*), + void *__args) +{ + return __gthrw_(pthread_create) (__threadid, NULL, __func, __args); +} + +static inline int +__gthread_join (__gthread_t __threadid, void **__value_ptr) +{ + return __gthrw_(pthread_join) (__threadid, __value_ptr); +} + +static inline int +__gthread_detach (__gthread_t __threadid) +{ + return __gthrw_(pthread_detach) (__threadid); +} + +static inline int +__gthread_equal (__gthread_t __t1, __gthread_t __t2) +{ + return __gthrw_(pthread_equal) (__t1, __t2); +} + +static inline __gthread_t +__gthread_self (void) +{ + return __gthrw_(pthread_self) (); +} + +static inline int +__gthread_yield (void) +{ + return __gthrw_(sched_yield) (); +} + +static inline int +__gthread_once (__gthread_once_t *__once, void (*__func) (void)) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_once) (__once, __func); + else + return -1; +} + +static inline int +__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) +{ + return __gthrw_(pthread_key_create) (__key, __dtor); +} + +static inline int +__gthread_key_delete (__gthread_key_t __key) +{ + return __gthrw_(pthread_key_delete) (__key); +} + +static inline void * +__gthread_getspecific (__gthread_key_t __key) +{ + return __gthrw_(pthread_getspecific) (__key); +} + +static inline int +__gthread_setspecific (__gthread_key_t __key, const void *__ptr) +{ + return __gthrw_(pthread_setspecific) (__key, __ptr); +} + +static inline void +__gthread_mutex_init_function (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + __gthrw_(pthread_mutex_init) (__mutex, NULL); +} + +static inline int +__gthread_mutex_destroy (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_destroy) (__mutex); + else + return 0; +} + +static inline int +__gthread_mutex_lock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_lock) (__mutex); + else + return 0; +} + +static 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 +static 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 + +static 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) +static 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 + +static inline int +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_lock (__mutex); +} + +static inline int +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_trylock (__mutex); +} + +#if _GTHREAD_USE_MUTEX_TIMEDLOCK +static 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 + +static inline int +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_unlock (__mutex); +} + +static inline int +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_destroy (__mutex); +} + +#ifdef _GTHREAD_USE_COND_INIT_FUNC +static inline void +__gthread_cond_init_function (__gthread_cond_t *__cond) +{ + if (__gthread_active_p ()) + __gthrw_(pthread_cond_init) (__cond, NULL); +} +#endif + +static inline int +__gthread_cond_broadcast (__gthread_cond_t *__cond) +{ + return __gthrw_(pthread_cond_broadcast) (__cond); +} + +static inline int +__gthread_cond_signal (__gthread_cond_t *__cond) +{ + return __gthrw_(pthread_cond_signal) (__cond); +} + +static inline int +__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) +{ + return __gthrw_(pthread_cond_wait) (__cond, __mutex); +} + +static 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); +} + +static inline int +__gthread_cond_wait_recursive (__gthread_cond_t *__cond, + __gthread_recursive_mutex_t *__mutex) +{ + return __gthread_cond_wait (__cond, __mutex); +} + +static inline int +__gthread_cond_destroy (__gthread_cond_t* __cond) +{ + return __gthrw_(pthread_cond_destroy) (__cond); +} + +#endif /* _LIBOBJC */ + +#endif /* ! _GLIBCXX_GCC_GTHR_POSIX_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr-default.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr-default.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..ccb7a77c95e17f13b7300fc2f7de0f6df1f76210 GIT binary patch literal 30147 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 Ugu72xjbECf3Q>R^)lm)mKkEUhNdN!< literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr.h new file mode 100644 index 0000000..34ad976 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr.h @@ -0,0 +1,154 @@ +/* Threads compatibility routines for libgcc2. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1997-2020 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 +. */ + +#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 + +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@gthr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..7b164e74dc9c864c27192c2e32e55931294cdde8 GIT binary patch literal 12509 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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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@messages_members.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@messages_members.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..743c624008d4efb3a4b7da371d7070130d07d9f5 GIT binary patch literal 17880 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 MBV3M5*QhlA4+vZ7rT_o{ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@os_defines.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@os_defines.h new file mode 100644 index 0000000..01bfa9d --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@os_defines.h @@ -0,0 +1,64 @@ +// Specific definitions for GNU/Linux -*- C++ -*- + +// Copyright (C) 2000-2020 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 isanum, 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) + +#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 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@os_defines.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@os_defines.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1c760236d8afc554b60618aea78bca26df211729 GIT binary patch literal 12698 zcmbVSO^h5z6`pkzDMB19uz*}53oK+<+MThT6+()L<6YyG%&xI5lyIrk)YQxr+dq@; z>YZI5I3!32B!t9?1Kc>lg)0Y0xNrdk;)p~LCk}9m#04cb?^RXzR&T%R=}DxFR_>}- zufF&HUVU-&nQdQM|}g8S`l#&y|kLav5t`YV*UEyeMUHO)QtAXGFrY`OwwT zDld*yHjk#NkV5Ch>C4@7Mjw7`E3V2SR+&husfTUH#@Km#ZP zAt_JGSWM-NUheL2Y}AqxvsDFi$0}2AR+25Xk>bD`0=6LD$Y{a_w?vU-I;!9&Be(hB zD=iBSX2nFF3AxnfsvZ9P9Vo6sCi${=X}(0mBGtdt1sL>N&PrG(d3sF?L4ZpOILXmd z{g9R zBK=LGl6oBQ^{op4a!eQK2}%C7N@?5iiJ%XdSjR^aach;;FhbLPVlsniRKsYN^&gC-6AUhr(ecx9 zBG6Y9I?Ro=wD5OxWSSq-vC;J$-Um zp#*6W;Hk!icC5$=0(9z*C10t<^v{=Y8DEK*5maF0PPNhu$E35&1EJFC1P0= zSsv9Yap%3ik$%R=!K7UB1hZSx3}_iF^#an*slh0MWMh3DQ>S(iloq@+>pPm_fSt-o zHIFSWb^X~{OY?>Cxr9hh!r9qUD~Tz8Wm)n$NDGu1%E@;4ALQnnN+jgh4c-_=dU6Bn z`djR`-JVze@=_?(SN{6a`i<7HW%1+woB=AQ8nF<=3J z0Qw(+8@e*`At|8KA{iF~L{I9zTMRt(JN8DfO}&VwXR4Vt;X!(IrUGjfNy~JJ70RG; z$#QvGGVl(G%i%&k->jY41T~;7v}CcT5uNFGFMYR+78Fh1IGh-*JdniD+s?v#FGJ$w zgijPCxk@wZ5?$il@jkv9nUbHcAj!)M@E{D8fRu>8$;AX4yw|RF?FRVn68X2lJ zv2U@HuV-6B^^+H-L($Ps8hsOukdY4f^m;2~P(JK97>~Y`;-l_YNT4V;qu|aiR-iZr z?+)iqmaYxsL0IR6t8O2&{uH=%sI&|$H=S023=TDgmj2lu1oV&Tq|IN8`UDziK_L|i zT$YHIkcvv4>og!=g8&a!+GEm}Wj%P7g`6Wq}e2ff27eOhUGLT+Z_bh zqmZORA8u`)vDq>&cW$23Xd{fKoQCqZP9_@;u=xAQ$v?<67x{&|L22f-L(awJ)`S5L zfVlwdsK*~j{ab&zzoxV_+THeDbd!{q=Q4G~DWtk8PkE+*flv%`v4QH~^g#_y8T#6x zP5`21AR4GUI6IgnJg}!$=DHYzq0IDrid{QLw-#|!*(?v=+rVvo4s=ha?0n0;qcorg z1;_EtuucIXPVmrBGH?w(=sx(L>AR;9>RueOtE&c+Pzu*Z3ZBbn#xQoeM;WR zKf>fIjkyt0q3;0&`nS{e5UL{=^sx{LFlizsQ-8qLUjBya(T`Pw)fB=`K z_Y>LUqedHth6!^O8mo0gYp&wAcU$L%4WxOMgX=>U*9a!e zYNZu8&UJltEJ^Dk01phQ1GaJ$%&Z>E0-oWN!x2Co*tyxdd%p;+^j!_r8C?bU`g&(m zatMPkD9r)`=vv_CJy(5zPY(=>aXZHE;6uy3aRX5X(~W#J?Ee0la~KT36M`A9l3t@1 zcvM(!x`HWo__I;cH>(`uu}ywSC7>@^+bNcs0W0-ygsKMP??#b&{j?ojm|v13M;Lg9 z$2-uuC9c?E+Goaw7VI355t~KPQ(}KP4ydY5bF=(VSsEdjd3Psha9gvLH+RAR&-OPq?C&lL(vW>M3CqoX0 zZ_K<7T&oLyAK4H$?J&$;3 zHo^(1k27Mjkltv%=UK0PM+f>r&~bd z>CfN(#Xk=oefGUG8i(xg)rW`o_8#rA{fGMpci{Kn)&bjn{ovNu_iw|V``vT<_grR{ zI=la1@4?-YCy`K5-f=3g(5;gl;EuUxr+zgOKUzkdI% t-@ftvKOZ(%K77b__wMW;>^%fBpKr+2(4T!a^j^65!p?;)`2C8d_kYMAWY7Qr literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@time_members.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@time_members.h new file mode 100644 index 0000000..3ef2201 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@time_members.h @@ -0,0 +1,89 @@ +// std::time_get, std::time_put implementation, GNU version -*- C++ -*- + +// Copyright (C) 2001-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@time_members.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@c++@10@bits@time_members.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..db32df25823e6a70e608065e7e7055986ce71685 GIT binary patch literal 16382 zcmbVT4{RjYS)cJa*Ne3Y>D3(0k%UQQEdN`NZT#o5@!c8c?&O%>xtCnhBY{rGv$N}| zXJ__iX8k8ekWl|nQ5sN0)uNPEq7izh?aA{v?5t`ELa?rUZk88z28Bb~|3@LG)xNDoY| z8uphnv|MMy@gg@vEs;XaHltQxA7*!e6@>f_|<`qOyFtfD{IJ7Y2W_Ez&sz%}%h<0vpjy-WPe0F^4G;tJ+$gvE^4-4cb zj^zU0Xw`Zc8*jB{T6PZ@0iqgU1CzFDfo&VGA;;@ULM}w_$c;o~-P$w*Aa+|SkDM5p z3Br^b<B?2}BUMYuHS0i<1*Mv|DA6B>IPmO3o7nzCN=7 zNY01?@`O_UBc~y^9gzt6fDP{Wq(tJe4o8>-=^`v?#O~;{`6X8>5Di%OZ19$f%D*vHDw9HUZ47ATo!~ z98MXPCecvXbY>kvEgeH)&j{Vc&jm7)L0wt(!``C=To}dZC@>D0GuGUwY;T)xxnW0} zewCzB1O?CDk!(Q}Zo_V%9I5RvGC7RoHY>P_o*V@mAK0~>fakcm6%t-dYiq|0s=C>V z{N6K63QMG}9%G=uJ&fI{hjx*XC2Uc})k0bXe?S;4ikI9ScGCnICA4uMokqECdv@Sh zx*Y_bUrw-b;oGlBoeK~FItEmMk|K9e`am@bI} zj|&<0vp!L%jm^+YBe-qru%O+7I0opLOVOkbcFU5X57(8_M`l({mVvh5{0tW&qvKvh* zUwW#gIG1~&0q@|(30{%&XJczTdo4hVT(i{hDDUIDEB$y_S4EjYVD3q@FJGPcBb}T; zK>{S7wx1$&<=5KXH8&h2$WCN%j~OT3Ip-vzjI|5Q9VCc;00(0bMx+W8C&eLy2l)d> z$E^zkmAkcd;Amnf0cy9wvHAt!_X=M#VBL)zeC5(-!HO8k312>*D;e0NZUuArP1}02 z^Bp1(gomRLuN~|FI85F-&SPE1EgV6FNj|xg?|~+d3U*yomKF?WU0RD6?9~)9_~ZQx z^q%F(oj8{81O#%SNC5?pW|f;rS#9R3iloJyj?bMAtcl-v9rw;jy z81#)+WbaC+#XRv65(4U0b+aa;l!|gRJ}0P1JD8=!q9~5lC80L_K1M&K+v5SuiI7b5h6QK&RT7fhW!}9!qj` zyqaIUZzgW;bI^IM8lCO>9B6=pz@(#}-ntADb;3iVv_3SdV_zbdwOmK6)bPqli%4R_ ziA<>o<>)?Koz4zV%1+hxA}89D?nzvNXG?#8g&YcrlCRH{#nv~9pS7r{6#miVyMW%>DLa0L`9Dxu{I;nz}iL$5c z3%x()V~F9wJ73FsJlm@}X4fOJSb!29b0QMu&Lf)RA>MZF%329~hhAV}0ywBSEU!%E z+ml3)e8hQ2E+37zU@>!&u#`OK7Fs-j`2rm8MDR26gd~URu<1HcF{pFW7TgWXSPNXU zsFeM@z~IMGgo#vk9S+rE#vyqgcY34-P{1W?4VC%wz+Z+GW%@iqpeddD$&jX?k%aBj03^+#I@aQhdB9V$||+jJ3_wR)kF0FSn@!w#U0U z77r&y#F!vb6YafO%;qsD>js_bnmB;Vf~`;(T$9aK8Np5}zQiX=A0{q{70JaC*fs-r zcG;m?PC1Mpv45Lcw;1B-og5lpWHYH~i&TduqsK51loCr?>r!Yu3^E#|46#*>by@twl=}>n&>G47>O-1L?JvPZ5=;uTl`m zH<{Qe6^jK{D(;A&hQsd^NL@WGKbv5$QjTK6;2BqU(3+KOF~_vX3=a-e`%B4polB~b z&Jq_$Ewt-tV{RQ3r9JjhV(%DVl#xdnK8AQbI4eklNx8sW6OprC2{pI z>Vwh|gd?job3$UM<+WLFdt(!ddm$pv$QKT588LEnx@NGufd^ti>;yC7?6yQUFUbZ3 z^ga;AS}571wU}HYQR!a5)kGyB1<}A2e{H%`VM9synH>(+UC`R~HWy8cUGE-d!EqTMe0u zmP?n{mMDS_(-)Eyq&d9BH>a75-~Wl8?!llgv~b1QL>CFy+)Um^&UqSs#v(OT5fG^+ zdTyYIv#n;UtD_aia<5pl49fsB+-5~3)Hli1FkFW~FU<^C|E4HqW5$O_$)ctdM1U+L znprx@M&wxF0od~WEeGdaewxS?MPoS?I(#TR%NOP5c-#J#9RG64F@KQXmQ&r&5ESJt z?cnd~qy4|~%1>-NLDVu`4STOt40g=aq|5S^%C8E)Eg27>rF7-Y=$LZH+^D)fyS{c~ zWl+7;|Hy!XpT5gyE?;fGcDDMq$D4QkO2ok_jH- zZp+lbfOcim2{rsP#nEga251|5TC{0vz)t`iYUqF2ZcU4P4PiuUH8tF88PGWJL!!3K zE*{4l(LmhR9*Cb$2~R`*$TJ(Z=GU+`C$T?-wy0_Eq)Q}KT8@~Y(4w)tL}NFWrxfLu z_P>5r311wWc)tCu-@o&Fb7%f{yM1|N>+Sz$-4V2>x9jWS+;eZVU;V4SZ+&XpDW`l=Q3ZMKYD(y{p|7ooA|&VJu*ZJUOlz?P-eufT;sp->Hog|-XGol);Fhd za?LRwp>q=lzbtfeQZ_SW%#{GHV&YI^(fJ=-^Su3de-Z)SRC zEyMC`X||HtRJ?~|pWD7ul_B;bJ1ghq*}e&l%27L}3`{{I^mCM6j!c#&D-fVctJ6D) zmflnQq06R@rR}fIK~SkM9m8xNhU-PH=kFPbh2+*A;U+Vt3@wk)s)}-xUQ{wvwpe1l z@nWK7v3=y%tm9^wWe_w+$ACLjS#S>{mrfGhnEcU+>4`NWPok!G0v5d!p6H!WL+|83 z=)L{YwZC}sw}1Dkzj-rok=Xs%>=;AAX#XUkKy82MD`zkL=W}0O=_AfE$|p5Qlz&_M z;;HBFQSVmj+y}DF#V>5D>bkZ**{`-gZ2jifzklCtFObtk-3Zg>B7-OD0D>|yJs4AH z|J+rX1B5f)x(8gnK`#!KTT`qk;uG+q}= zi+J4{sWH&Eqr0 z#eQ}D*g8J1&#kY4y#$f8RQ9L+*s+_pd~NZ6*2w0=CjLT%BtVK996YM5w<0-H|cB0_Di zj;FLo&KowFSvd-3J6DY}+s>~ocv;V=J?*toFl+(2#|-v!#3$#B|EtQ6UBpZ*SHx99P^k9OGM+YW9XOIaeEWb}p0 zah-}W476_ypfZD%PL*FkR#|JguEvoNB001x1DjFQtmt~(vZg>}$`9(g&rTStz7^7+ zVsKm1UHr*O7~!wpcK48)>ZvuM5RDpcY^p~Tb$D?2q^b@pSNrhYThpX2$&#Z+Qz?}O zgkQDOl%BFQ`f)@p+xuli%G1YB-_@s{K6-jtx$RcuPiIEY%$C%%Q)f?=)YPGZvq~is zc9o$a_(63+TbQJL8;);s>jvhli$jaU@GeRADdrc*+%XNwkUIaN`KM^wd~^OOg{B>; zEL4_C>e53?S4--dg){iv{^lJYd;R>6fB3heb5e)z8eT#AaPNP8`s^QU{rPtpV~AOC z4CbC%@UjSK7t^QvDVw658z-{I@V|e2W!xQ9r!P(K4yubQi}-wH?#jEdhsWo?{Nh(m zn3u&p#0!cM^CHWQ1mZ(WZ%>HdI#HUK8dPUWGk85!I)&G>N6(H9sw;gf!-MMT?W@xz z^}%}{TrR1X2QM#_)Q3(yM1ud!#CIRxe*U>XBs$5DI--m$WA91um9QcN?=*E*mX~jb z$n}~Yk;oCTqclTc8k??6BQ~_}{;YTXw*UCtN0a5~UA<7ca1u-Y%*%tH{n^FJtC?qO zN7v@??3pXOFTDCEAA33T>|E*G2|WAtNB;DWS3mja=QGdVrMzni&ys3{OE-%!U{e_$ z9w>MO92@v+9>*Dw#ULQXB@FwB$LVHW(Wh3AORtZdFj{l!Z5foD-BVCxDXT-o4R$Y@2$N4OaHw4 z-iRADn-EY`f(rv#2yrLTomoV(a3{Ek2oiMV4^GHV1b=2c=TvpS>f5LK_RC@}kLjvY zr@r%lPTiQ@`|rR1_V#Q(3paVHLb1xjwXVaeD#BV-HT^_|C@WPS%A%NkL?$9zPhA~s z^YU0{>tLlzCF{IA`}FXf+5axj!=@@joynwGsqpkux1-y)f<$M{X|T?kaH;DmOhvts zB1x)Xqmn|ELEL1r)_GPPZpj%_Ne+B<+{dD-qd3V$9TIL))}%{7514!|QorueO7v1^b<(5Oq7W-lH>JAB?JAW3 z$}BY=)2d$SJW6!R?m@)a4;Cg8OI0V4NY?pMRD{X^FaG4^8K~D*6fAvy%T|CI)Bwsv zNUF0clq(hU%k3RbNG&-r8&#k?Hkp30QBhHo6er#gum$l3qzMn zu2m_(tRk6bQWZ5_b-uStNvA8f!o z-Yk>8eYFO7faeOQhyH*I0*#^Xr} z$Av@?VUeIpNu7!W{nm*pD{wZ*$sj(qoaEIWF2F;_d6`DwHKP?U&faST{4k2rB?cE2 z@$u7gBGFfrwVxYfY5wmd?=(N*W2Fl$WLps`#+bO>^=%;TT^-COOp=o{I64aPZ_3`n zqoc!{hew@wq6mTx7sXcP^y$N>sH@gWq? zeNXliz`+SFbMUuOr=CdLXy{zJca9^Louy#U5W4-}9WuqYLJY zaZ(5BL?l6~>P@~vRD7zCsV#E_7u-~(P>#e~A~VpD!DY|=bU4XT(E3uv+tTE?gA-a_ zggoAgautfE&ZlRX7?x066JwymJs7)QSITE(En8S|HINp8KR_My#Y^K3$0UJ93DVe0 zCk@srQ>B)nD$6VnTHSc|Pk&^c5M7D#F?EWmFKZ*b7>jxXx#^1V3m_BOU*xoTA4IH; zsA#=Upewa()}g_rElvk(dA=}sSC9sA?dq0yG8~^3;)pj}L&S2AfY~Og*$fUzjmS>*Se1N%Q zM^mgw0w93?hv0@Un_NgrXv3&TNC~26b>A)q9>%?XC)lo-MAM^Er%!m29-XVeUPY=^ zT44Dysg^Qao>dWehr}j$KIczsW0Splw1t-}HavoJ{T`)nmyHTal%+Uhq|cvD{wPEz z;7Ne^ZRaV%D8KUbR4g?l$hwY<$FxcJz&W{EM(qNzg#c zb&s{-Z+ZvD-AtnQXYO`stP=$}D!6z?eOz)?R}HXe@%j-LL6WbRxMLs=euq{1w5io8 zyUp@sN=N``tm>vFBTI!p+}L~+#YJA-zO|##B#f>Uhtj#tH9HQlaQyMJi9F)uQ(c{>BGbTtF9zAz zz;%Ddpa!Q5J#k+b0ns9eCh88(9pXfI_O!~})^RY z`EENstO0nqq}EVijt@F*oEj=fmx7DhD&#ZR8R@av2i<9$(4V!iLsH+!1Rz1?9ZdWL z@vQ=+52j=9pTdw7O`?et$`N_cN?UNkSVpSRJlu3*9Zq+oOVo@Ocf(q~?B+$E=iiPJF}&h|WZ(H;Y}KslC8;3B7pG zsbmN+B(q}ZtLpexSu_EJN*4Uqqp}}c2Sz2fAHNe(LR{cRas$!QRow1x?_9rubT4{v zz0cx0!T4EiY7LH)>j=3b!jiNt0`NeeI$$eD!@TQ`D&YxFH5~!ef!nuwcOMs_k-n{= z24gSpUiVTaC5JEwL)OeQylw@)>$%zkTzX(wkuXmH2KexD@7zF;L0>N4PP@N*<{IV( z@cbYaO)_fq5|8rBt!`if?*B|m`eKt~JT}QMs|5TdTRX*4b4rv2RfExar%0oI+Dta+ zm*vPp1w6yUA870{R~#_y!fQecb`DtbqkB;_>@N3!&O%3Lm4kDjq@CD>vEI=>v*BZu zS%bU|a*7r}>YHGrJ1-dw-5YgSPwI){I6`w(=ithugQiYnIpsI_`ywvSkUQ*cAJO?Z zX^ZHc;9kkPU11_lFDLprO5eRh9|VF@1LYfAm+==w$2r7@zshW=b~*l?fgy!oSg?4Bv*9y55X50|Kzx$I(Z(^WElnb>-m-rba^-~=)dRJ7T16a{I$E^{MzHmx8s-IZFj30n*SP^_{1&~-KY7(i-!*{ z(XXZQvoHPh=~v!+>YAmJ$W5BBfX2snXtW>Z4=odFA~#{&Ck*IVbY?4iMd!`Q^psr!LX2rSbHQmy_zX lcT-Cv!sbB%J%r^dPMT^193Acu8!nkYuz28^OZ01~{vUiezKH+; literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@gnu@stubs.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@gnu@stubs.h new file mode 100644 index 0000000..70a1ba0 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@gnu@stubs.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@gnu@stubs.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..0156271b4f0ea99fe01442a89c115f5d15d94469 GIT binary patch literal 12308 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. */ + +#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 + anymore supported. */ +#if defined __GNUC__ && !defined __STDC__ +# error "You need a ISO C conforming compiler to use the glibc headers" +#endif + +/* Some user header file might have defined this before. */ +#undef __P +#undef __PMT + +#ifdef __GNUC__ + +/* 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 works only with + gcc 2.8.x and egcs. For gcc 3.2 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, 3) +# 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) +# define __THROW throw () +# 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 + +#else /* Not GCC. */ + +# 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 + +#endif /* GCC. */ + +/* Compilers that are not clang may object to + #if defined __clang__ && __has_extension(...) + even though they do not need to evaluate the right-hand side of the &&. */ +#if defined __clang__ && defined __has_extension +# define __glibc_clang_has_extension(ext) __has_extension (ext) +#else +# define __glibc_clang_has_extension(ext) 0 +#endif + +/* 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 + + +/* Fortify support. */ +#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) +#define __bos0(ptr) __builtin_object_size (ptr, 0) + +#if __GNUC_PREREQ (4,3) +# define __warndecl(name, msg) \ + extern void name (void) __attribute__((__warning__ (msg))) +# define __warnattr(msg) __attribute__((__warning__ (msg))) +# define __errordecl(name, msg) \ + extern void name (void) __attribute__((__error__ (msg))) +#else +# define __warndecl(name, msg) extern void name (void) +# 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 +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif __GNUC_PREREQ (2,97) +/* GCC 2.97 supports 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 + +# 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 + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __REDIRECT(name, proto, alias) name proto; \ + _Pragma("let " #name " = " #alias) +*/ +#endif + +/* GCC has 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__ || __GNUC__ < 2 +# 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) +# 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 + +/* 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) +# 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) +# define __attribute_const__ __attribute__ ((__const__)) +#else +# define __attribute_const__ /* 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) +# 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) +# 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_clang_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) +# 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) +# define __attribute_format_strfmon__(a,b) \ + __attribute__ ((__format__ (__strfmon__, a, b))) +#else +# define __attribute_format_strfmon__(a,b) /* Ignore */ +#endif + +/* The nonull function attribute allows to mark pointer parameters which + must not be NULL. */ +#if __GNUC_PREREQ (3,3) +# define __nonnull(params) __attribute__ ((__nonnull__ params)) +#else +# define __nonnull(params) +#endif + +/* If fortification mode, we warn about unused results of certain + function calls which can lead to problems. */ +#if __GNUC_PREREQ (3,4) +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +# if __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) +/* 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) +# 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) +# define __extension__ /* Ignore */ +#endif + +/* __restrict is known in EGCS 1.2 and above. */ +#if !__GNUC_PREREQ (2,92) +# 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 supports this. */ +#if __GNUC_PREREQ (3,1) && !defined __GNUG__ +# 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 +# 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 + +#ifdef __has_attribute +# define __glibc_has_attribute(attr) __has_attribute (attr) +#else +# define __glibc_has_attribute(attr) 0 +#endif + +#if (!defined _Noreturn \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && !__GNUC_PREREQ (4,7)) +# 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) || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ + extern int (*__Static_assert_function (void)) \ + [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + +#include +#include + +#if 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_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 || !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_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_clang_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 + +#endif /* sys/cdefs.h */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@cdefs.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@cdefs.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..13951bd5c7a469686089e3667c231ff90eb586c5 GIT binary patch literal 19402 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. */ + +/* 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. */ +extern int select (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + struct timeval *__restrict __timeout); + +#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. */ +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); +#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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@select.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@select.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..d1db4e4c614fcccb66cb142aab46ea40fea10e2a GIT binary patch literal 16503 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@types.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@types.h new file mode 100644 index 0000000..c9241e4 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@types.h @@ -0,0 +1,232 @@ +/* Copyright (C) 1991-2020 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/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@types.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@x86_64-linux-gnu@sys@types.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..cb59bcbcbf95324b27aa29af07823a4da5651b06 GIT binary patch literal 19747 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

    4q|f4TqfD*5?K_mk~UJ@dnR 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@__stddef_max_align_t.h b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@__stddef_max_align_t.h new file mode 100644 index 0000000..e3b4392 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@__stddef_max_align_t.h @@ -0,0 +1,27 @@ +/*===---- __stddef_max_align_t.h - Definition of max_align_t for modules ---=== + * + * 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/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@__stddef_max_align_t.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@__stddef_max_align_t.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..694bb993f02b6a4c7e4f3ff12539382e823872d4 GIT binary patch literal 12816 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 + +/* Prior to Apple's 10.7 SDK, float.h SDK header used to apply an extra level + * of #include_next to keep Metrowerks compilers happy. Avoid this + * extra indirection. + */ +#ifdef __APPLE__ +#define _FLOAT_H_ +#endif + +# include_next + +/* Undefine anything that we'll be redefining below. */ +# undef FLT_EVAL_METHOD +# undef FLT_ROUNDS +# undef FLT_RADIX +# undef FLT_MANT_DIG +# undef DBL_MANT_DIG +# undef LDBL_MANT_DIG +# if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__) || __cplusplus >= 201103L +# undef DECIMAL_DIG +# endif +# undef FLT_DIG +# undef DBL_DIG +# undef LDBL_DIG +# undef FLT_MIN_EXP +# undef DBL_MIN_EXP +# undef LDBL_MIN_EXP +# undef FLT_MIN_10_EXP +# undef DBL_MIN_10_EXP +# undef LDBL_MIN_10_EXP +# undef FLT_MAX_EXP +# undef DBL_MAX_EXP +# undef LDBL_MAX_EXP +# undef FLT_MAX_10_EXP +# undef DBL_MAX_10_EXP +# undef LDBL_MAX_10_EXP +# undef FLT_MAX +# undef DBL_MAX +# undef LDBL_MAX +# undef FLT_EPSILON +# undef DBL_EPSILON +# undef LDBL_EPSILON +# undef FLT_MIN +# undef DBL_MIN +# undef LDBL_MIN +# if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) || __cplusplus >= 201703L +# undef FLT_TRUE_MIN +# undef DBL_TRUE_MIN +# undef LDBL_TRUE_MIN +# undef FLT_DECIMAL_DIG +# undef DBL_DECIMAL_DIG +# undef LDBL_DECIMAL_DIG +# undef FLT_HAS_SUBNORM +# undef DBL_HAS_SUBNORM +# undef LDBL_HAS_SUBNORM +# endif +#endif + +/* Characteristics of floating point types, C99 5.2.4.2.2 */ + +#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ +#define FLT_ROUNDS (__builtin_flt_rounds()) +#define FLT_RADIX __FLT_RADIX__ + +#define FLT_MANT_DIG __FLT_MANT_DIG__ +#define DBL_MANT_DIG __DBL_MANT_DIG__ +#define LDBL_MANT_DIG __LDBL_MANT_DIG__ + +#if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__) || __cplusplus >= 201103L +# define DECIMAL_DIG __DECIMAL_DIG__ +#endif + +#define FLT_DIG __FLT_DIG__ +#define DBL_DIG __DBL_DIG__ +#define LDBL_DIG __LDBL_DIG__ + +#define FLT_MIN_EXP __FLT_MIN_EXP__ +#define DBL_MIN_EXP __DBL_MIN_EXP__ +#define LDBL_MIN_EXP __LDBL_MIN_EXP__ + +#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ +#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ +#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ + +#define FLT_MAX_EXP __FLT_MAX_EXP__ +#define DBL_MAX_EXP __DBL_MAX_EXP__ +#define LDBL_MAX_EXP __LDBL_MAX_EXP__ + +#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ +#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ +#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ + +#define FLT_MAX __FLT_MAX__ +#define DBL_MAX __DBL_MAX__ +#define LDBL_MAX __LDBL_MAX__ + +#define FLT_EPSILON __FLT_EPSILON__ +#define DBL_EPSILON __DBL_EPSILON__ +#define LDBL_EPSILON __LDBL_EPSILON__ + +#define FLT_MIN __FLT_MIN__ +#define DBL_MIN __DBL_MIN__ +#define LDBL_MIN __LDBL_MIN__ + +#if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) || __cplusplus >= 201703L +# define FLT_TRUE_MIN __FLT_DENORM_MIN__ +# define DBL_TRUE_MIN __DBL_DENORM_MIN__ +# define LDBL_TRUE_MIN __LDBL_DENORM_MIN__ +# define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ +# define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ +# define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ +# define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ +# define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ +# define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ +#endif + +#ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ +# define FLT16_MANT_DIG __FLT16_MANT_DIG__ +# define FLT16_DECIMAL_DIG __FLT16_DECIMAL_DIG__ +# define FLT16_DIG __FLT16_DIG__ +# define FLT16_MIN_EXP __FLT16_MIN_EXP__ +# define FLT16_MIN_10_EXP __FLT16_MIN_10_EXP__ +# define FLT16_MAX_EXP __FLT16_MAX_EXP__ +# define FLT16_MAX_10_EXP __FLT16_MAX_10_EXP__ +# define FLT16_MAX __FLT16_MAX__ +# define FLT16_EPSILON __FLT16_EPSILON__ +# define FLT16_MIN __FLT16_MIN__ +# define FLT16_TRUE_MIN __FLT16_TRUE_MIN__ +#endif /* __STDC_WANT_IEC_60559_TYPES_EXT__ */ + +#endif /* __CLANG_FLOAT_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@float.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@float.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5aded393a328071de77d0ecd4ba477d06a87f9cf GIT binary patch literal 15650 zcmbVTe~cVe9p60?ilr%&vNWJjuOLup_qGS65d+#QcWsaM`s1!GrL-OAW@q=NH#@VP znY|w+l){xp6hea$L1_>bf!9f3LR3st>6i7uxLPV@!1a1AiUvqDE-puXM z#K+#ud*AnYpYPB2-gs&5#PjDAp3dcSr6I3om5j1is@h>G2@0uRv zAamiuQs?55kZd@)6LWv{L0qs&WW+{09&knID@G9N6~{Be66H;I8?`~O2av0D>zNox z#~!rZ(1}SCEL1EbZ1~o6Ru@}u8#DsS zN`f!-%!A`FuTi6}l&>B#YQPLakkTS0!FW(I%T`6*ov&epnx#t3%oOMv8?L>pVd?dd zYO%!?f?KG!NG)L+t0XFM!(s!Cs~jeiZ-rme9Q6bnO(g) zaV(|z2cZv#o)TGrewI<|2u)K#u3Ev4MtU$WC-lz>_D#Z`)H2lY7C5Y*V+rAcZ%%FC%!cQE8zs zUuwlLtrlzq7F7cb3>vQZmZigoY_}zb98hnookWIi4jDcyc0|cXf=23saHU!?uxsUF z*)pAC5H<$Yew`Q|n|R?uWDtaF_)Ke)lOQtfuu4sm$e&JDvUjJ%`q%=%oF4il5-RbB zc1`U&vJesj23g=!3gLZiW?>3TmxZbMqz0!-iBMtPAtq(oHNzosYsB&c1RH`Rksk#T zFPH)aB6P*`YdWH)UIuXGx)P>AEsMnuU9Sz2F?>3HE%?n zD`jF)ZRrGCmb&HsA`!=y4!0>e&Pc7;*;yjLY4uj>?CeF*^micXnOy`c3hfe=P=bm;5TtQjj#ShPkAr&zPXA+JnWNizl48dWSo zCbwqQupOz4QZWe|Ni0?h6)gn{+TXV-qdu!~6Eg@bhB-WH_~nw(2)))TOp=y}x?0SE z5_&khT@9=>Clj#9j;n#P2=Rc}U|POp;V?@R#3`YTDdp6PRm-(}+bmhW?|MaH8!KLW zMHz(Xl4w0qjF%0A%;I56s66v z5tz1}wK(8E4Ap-PHO}i>HC5M7%krl2H$v%=MXo%&{?J&_<Mm7eD#Qc&ktYD6ByV?WE*Q}*U(5IVNt=J1rg_8)T-7-Jvc$*0DgXu}&bNiz(9LjeBIoBmW zi;*Z4h2d!OFjKrrS#{d}GNn5`ZZ!$OR$U=xf9xOvhsf$GP3}wV2^PpmQ5qCNmRYQ$ z_Oxg$N@I&g6^~gRyo_x3l;Y&cv;B}BWV5n{NXo2eVu?-_G39A_8f*P1MIKC5pI(CV zt`*y{P;4TGE6hh07er;fk}b7;RO&^?s}7P833aGPaHFp^LTgMpjALSZK@gO+eWs^{ zN-65ena}HbrS1hwmo!;4RYtU@#vWJ{jS&K}1H5saN(SH;}Oqt%eIkux5WumU`$XX z^UgAw?IPc19jnp|5@A;99(g9LX z(leeSo4y!XW2>ox+EQ`4zKVK=oN&Zo#z~hBKoHebAnK!-@M9)5@&F*^#P*v`M>E8nfc))^$4j>gWrQ7{6kYgc*=8 zN7C;JWg9g;+((UMmih2s=2KHFkDbbxES;p8IVB=;(bi9WWz6(=A?vs=!3Uj{m3}(8 z+%<3y7dO>ZDw!SB8%3l_CHW$vDqjlcrd#ZE{zeQRc|mozre2DCj2oLb-9e&Hb4dR* zkBbzO4z&^52%PevnV?Qq5!sT8O#qoN%^b*4j*W|}-IkAUae~$vAU3dcNo?%`hng~` zeZGfE++U@Rl^4ZIa->1rmbxjo&_dxfh^DWbS`{2iH`rZ%f*d1&UPV`3g`X3d-q83pxAtduV$VG&$+NUN+qE^dx zcCD?Ac`^C!O4(n=jA~=b11BnuT(ar(6Tz%Sv6*4{@tdru){EjvJR#s{25GE;4WDu+ zr)GqN+ROtd3Wk3<1qV=@zDx$W0MGc6M-3yrAeBXvXfR|+7ta~r_Og#@Q3Vn*x+jKO zIX@!Cgl`n_zszkM`7G48!=a3$L$YfnXG0C&x9|nyl-j1{RnU56{6MbvYjcm zP}4b8Qfy}v_QpS;rX26PzopM%u&XrjrL%!ED17Z^utVrXq+vHSQ#xLxiI$IFWOFj> zjm$tR_hnHrZ5mnu#?Z#8l6FVp3o(2Zfs;7Hr>8$@B^z}VfwAlCmSzO|Kxj=?Rs5 zYvESFM!S_u?)>oAN7wHO4pST(`#1IIeZ6ae`O`7X;>9FjN(8!6se221JKFMSH*={+ z4sYN6^0TXl2?Q|~LeCaL<>wL7n8=$8H!o_-qwVJ+&%b=<#xt~Mj!>Wsqb9_OX9AwU zb)$A;ds`mu7r2m#$0y$V@^SBcIv}q8xRRuILMVA88NmL+e&`78HZJ>=iLT3zU9kUM zVk`{bY=MtIf+YTnvNo=b&uh!0UCJd49sSbSldHEqOgi>m ze{I+Az5bqM`J49Mg!bgXr5}8}{Rb=C2;%;(?%plvH%G=xA9A$xH=Suf8#uo$kM@fk z>j!7d+Vju@d&Zd}yVh>xo)fpiKK=soVjZc>>$K}GZOfxw%VicSJAQNgm6>x0wzxk= zKGXDy^p95P|HrqkzUKCqFMgk_Q*sDkix_Nr z#aG+pDz_DG1A%BotUUVL1B30$_RnQnL=frOvR)=oeh!iHpA@O7nII6YAn?%q<@Tv3 zzy5u)u%68bynQ_zSFP)okv6^JYnM7x$s4o{h-7F5i}$_xi&^gC6E9I+)5sX}A~-r< zvxqsnwcTJ5tzgl=t8ZWXzi-${0Q7Yc4~Zo3M;r@YQVhGaU66oQNH}=^`mdJX|7;mU zqks8AN1-1c_-5_7-!DGcSVcLS3>uLw%FhLra@ZKvMnNT7L8W>8`3o<)=gJzx7I|VM zP<|c(XWc0JP1+_1L@NZ&?=D^Z!VUM^5p?{>7fvf&1oSV~N8dSZ{%e=(`Za61)~-Z& zT-SxXj2@ANC0^xcYBQlD(sK7XGQa;vKioKRHeD-Ax$)G1XJYO6Nnz@mj?{owqz3(O zPrSJ7jVqrfik{>#3ck`~h?4%I(nhoq1Yfiw_`dN-ZfpDTB4=?6H}FUrS3G$faY#E+ zX|`rV8d@Rk$?tW1?X21QtIQFo4aFA-(-8|4RupIf7Km0X@L2xP>=_q+_dGgxX2{0@CwKzkT~3K78OT?ibAqlpb@sh<{+YRNA062x(}Aw5zUs`%fRu zIQ*R8rE@VCc&;1-$B6+$j1ry^_&Nl0D6X9ibI=bo7Zu-B + +#if defined(_MSC_VER) && _MSC_VER < 1900 +/* MSVC headers define int32_t as int, but PRIx32 as "lx" instead of "x". + * This triggers format warnings, so fix it up here. */ +#undef PRId32 +#undef PRIdLEAST32 +#undef PRIdFAST32 +#undef PRIi32 +#undef PRIiLEAST32 +#undef PRIiFAST32 +#undef PRIo32 +#undef PRIoLEAST32 +#undef PRIoFAST32 +#undef PRIu32 +#undef PRIuLEAST32 +#undef PRIuFAST32 +#undef PRIx32 +#undef PRIxLEAST32 +#undef PRIxFAST32 +#undef PRIX32 +#undef PRIXLEAST32 +#undef PRIXFAST32 + +#undef SCNd32 +#undef SCNdLEAST32 +#undef SCNdFAST32 +#undef SCNi32 +#undef SCNiLEAST32 +#undef SCNiFAST32 +#undef SCNo32 +#undef SCNoLEAST32 +#undef SCNoFAST32 +#undef SCNu32 +#undef SCNuLEAST32 +#undef SCNuFAST32 +#undef SCNx32 +#undef SCNxLEAST32 +#undef SCNxFAST32 + +#define PRId32 "d" +#define PRIdLEAST32 "d" +#define PRIdFAST32 "d" +#define PRIi32 "i" +#define PRIiLEAST32 "i" +#define PRIiFAST32 "i" +#define PRIo32 "o" +#define PRIoLEAST32 "o" +#define PRIoFAST32 "o" +#define PRIu32 "u" +#define PRIuLEAST32 "u" +#define PRIuFAST32 "u" +#define PRIx32 "x" +#define PRIxLEAST32 "x" +#define PRIxFAST32 "x" +#define PRIX32 "X" +#define PRIXLEAST32 "X" +#define PRIXFAST32 "X" + +#define SCNd32 "d" +#define SCNdLEAST32 "d" +#define SCNdFAST32 "d" +#define SCNi32 "i" +#define SCNiLEAST32 "i" +#define SCNiFAST32 "i" +#define SCNo32 "o" +#define SCNoLEAST32 "o" +#define SCNoFAST32 "o" +#define SCNu32 "u" +#define SCNuLEAST32 "u" +#define SCNuFAST32 "u" +#define SCNx32 "x" +#define SCNxLEAST32 "x" +#define SCNxFAST32 "x" +#endif + +#endif /* __CLANG_INTTYPES_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@inttypes.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@inttypes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c3fcc04d5a0643322d05b3787e1aca35d8f7f3f9 GIT binary patch literal 12352 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 Ef1L6Gq5uE@ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdarg.h b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdarg.h new file mode 100644 index 0000000..0bc3940 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdarg.h @@ -0,0 +1,35 @@ +/*===---- 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 + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __STDARG_H +#define __STDARG_H + +#ifndef _VA_LIST +typedef __builtin_va_list va_list; +#define _VA_LIST +#endif +#define va_start(ap, param) __builtin_va_start(ap, param) +#define va_end(ap) __builtin_va_end(ap) +#define va_arg(ap, type) __builtin_va_arg(ap, type) + +/* 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. + */ +#define __va_copy(d,s) __builtin_va_copy(d,s) + +#if __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L || !defined(__STRICT_ANSI__) +#define va_copy(dest, src) __builtin_va_copy(dest, src) +#endif + +#ifndef __GNUC_VA_LIST +#define __GNUC_VA_LIST 1 +typedef __builtin_va_list __gnuc_va_list; +#endif + +#endif /* __STDARG_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdarg.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdarg.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b96fc85a871caf020f8af87a545490c839c9e746 GIT binary patch literal 13105 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 D?V8_F literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stddef.h b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stddef.h new file mode 100644 index 0000000..15acd44 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stddef.h @@ -0,0 +1,121 @@ +/*===---- 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 + * + *===-----------------------------------------------------------------------=== + */ + +#if !defined(__STDDEF_H) || defined(__need_ptrdiff_t) || \ + defined(__need_size_t) || defined(__need_wchar_t) || \ + defined(__need_NULL) || defined(__need_wint_t) + +#if !defined(__need_ptrdiff_t) && !defined(__need_size_t) && \ + !defined(__need_wchar_t) && !defined(__need_NULL) && \ + !defined(__need_wint_t) +/* Always define miscellaneous pieces when modules are available. */ +#if !__has_feature(modules) +#define __STDDEF_H +#endif +#define __need_ptrdiff_t +#define __need_size_t +#define __need_wchar_t +#define __need_NULL +#define __need_STDDEF_H_misc +/* __need_wint_t is intentionally not defined here. */ +#endif + +#if defined(__need_ptrdiff_t) +#if !defined(_PTRDIFF_T) || __has_feature(modules) +/* Always define ptrdiff_t when modules are available. */ +#if !__has_feature(modules) +#define _PTRDIFF_T +#endif +typedef __PTRDIFF_TYPE__ ptrdiff_t; +#endif +#undef __need_ptrdiff_t +#endif /* defined(__need_ptrdiff_t) */ + +#if defined(__need_size_t) +#if !defined(_SIZE_T) || __has_feature(modules) +/* Always define size_t when modules are available. */ +#if !__has_feature(modules) +#define _SIZE_T +#endif +typedef __SIZE_TYPE__ size_t; +#endif +#undef __need_size_t +#endif /*defined(__need_size_t) */ + +#if defined(__need_STDDEF_H_misc) +/* 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 && \ + !defined(_RSIZE_T)) || __has_feature(modules) +/* Always define rsize_t when modules are available. */ +#if !__has_feature(modules) +#define _RSIZE_T +#endif +typedef __SIZE_TYPE__ rsize_t; +#endif +#endif /* defined(__need_STDDEF_H_misc) */ + +#if defined(__need_wchar_t) +#ifndef __cplusplus +/* Always define wchar_t when modules are available. */ +#if !defined(_WCHAR_T) || __has_feature(modules) +#if !__has_feature(modules) +#define _WCHAR_T +#if defined(_MSC_EXTENSIONS) +#define _WCHAR_T_DEFINED +#endif +#endif +typedef __WCHAR_TYPE__ wchar_t; +#endif +#endif +#undef __need_wchar_t +#endif /* defined(__need_wchar_t) */ + +#if defined(__need_NULL) +#undef NULL +#ifdef __cplusplus +# if !defined(__MINGW32__) && !defined(_MSC_VER) +# define NULL __null +# else +# define NULL 0 +# endif +#else +# define NULL ((void*)0) +#endif +#ifdef __cplusplus +#if defined(_MSC_EXTENSIONS) && defined(_NATIVE_NULLPTR_SUPPORTED) +namespace std { typedef decltype(nullptr) nullptr_t; } +using ::std::nullptr_t; +#endif +#endif +#undef __need_NULL +#endif /* defined(__need_NULL) */ + +#if defined(__need_STDDEF_H_misc) +#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L +#include "__stddef_max_align_t.h" +#endif +#define offsetof(t, d) __builtin_offsetof(t, d) +#undef __need_STDDEF_H_misc +#endif /* defined(__need_STDDEF_H_misc) */ + +/* 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) +/* Always define wint_t when modules are available. */ +#if !defined(_WINT_T) || __has_feature(modules) +#if !__has_feature(modules) +#define _WINT_T +#endif +typedef __WINT_TYPE__ wint_t; +#endif +#undef __need_wint_t +#endif /* __need_wint_t */ + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stddef.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stddef.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..202a88e469f1731178eca3053618dcbe7dff9e81 GIT binary patch literal 12601 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 + +// 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; +# define __int_least64_t int64_t +# define __uint_least64_t uint64_t +# define __int_least32_t int64_t +# define __uint_least32_t uint64_t +# define __int_least16_t int64_t +# define __uint_least16_t uint64_t +# define __int_least8_t int64_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; +# define __int_least32_t int56_t +# define __uint_least32_t uint56_t +# define __int_least16_t int56_t +# define __uint_least16_t uint56_t +# define __int_least8_t int56_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; +# define __int_least32_t int48_t +# define __uint_least32_t uint48_t +# define __int_least16_t int48_t +# define __uint_least16_t uint48_t +# define __int_least8_t int48_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; +# define __int_least32_t int40_t +# define __uint_least32_t uint40_t +# define __int_least16_t int40_t +# define __uint_least16_t uint40_t +# define __int_least8_t int40_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 */ + +# define __int_least32_t int32_t +# define __uint_least32_t uint32_t +# define __int_least16_t int32_t +# define __uint_least16_t uint32_t +# define __int_least8_t int32_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; +# define __int_least16_t int24_t +# define __uint_least16_t uint24_t +# define __int_least8_t int24_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; +# define __int_least16_t int16_t +# define __uint_least16_t uint16_t +# define __int_least8_t int16_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; +# define __int_least8_t int8_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. + * + * These macros are defined using the same successive-shrinking approach as + * the type definitions above. It is likewise important that macros are defined + * in order of decending width. + * + * 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]). + */ + +#define __int_c_join(a, b) a ## b +#define __int_c(v, suffix) __int_c_join(v, suffix) +#define __uint_c(v, suffix) __int_c_join(v##U, suffix) + + +#ifdef __INT64_TYPE__ +# ifdef __INT64_C_SUFFIX__ +# define __int64_c_suffix __INT64_C_SUFFIX__ +# define __int32_c_suffix __INT64_C_SUFFIX__ +# define __int16_c_suffix __INT64_C_SUFFIX__ +# define __int8_c_suffix __INT64_C_SUFFIX__ +# else +# undef __int64_c_suffix +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT64_C_SUFFIX__ */ +#endif /* __INT64_TYPE__ */ + +#ifdef __int_least64_t +# ifdef __int64_c_suffix +# define INT64_C(v) __int_c(v, __int64_c_suffix) +# define UINT64_C(v) __uint_c(v, __int64_c_suffix) +# else +# define INT64_C(v) v +# define UINT64_C(v) v ## U +# endif /* __int64_c_suffix */ +#endif /* __int_least64_t */ + + +#ifdef __INT56_TYPE__ +# ifdef __INT56_C_SUFFIX__ +# define INT56_C(v) __int_c(v, __INT56_C_SUFFIX__) +# define UINT56_C(v) __uint_c(v, __INT56_C_SUFFIX__) +# define __int32_c_suffix __INT56_C_SUFFIX__ +# define __int16_c_suffix __INT56_C_SUFFIX__ +# define __int8_c_suffix __INT56_C_SUFFIX__ +# else +# define INT56_C(v) v +# define UINT56_C(v) v ## U +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT56_C_SUFFIX__ */ +#endif /* __INT56_TYPE__ */ + + +#ifdef __INT48_TYPE__ +# ifdef __INT48_C_SUFFIX__ +# define INT48_C(v) __int_c(v, __INT48_C_SUFFIX__) +# define UINT48_C(v) __uint_c(v, __INT48_C_SUFFIX__) +# define __int32_c_suffix __INT48_C_SUFFIX__ +# define __int16_c_suffix __INT48_C_SUFFIX__ +# define __int8_c_suffix __INT48_C_SUFFIX__ +# else +# define INT48_C(v) v +# define UINT48_C(v) v ## U +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT48_C_SUFFIX__ */ +#endif /* __INT48_TYPE__ */ + + +#ifdef __INT40_TYPE__ +# ifdef __INT40_C_SUFFIX__ +# define INT40_C(v) __int_c(v, __INT40_C_SUFFIX__) +# define UINT40_C(v) __uint_c(v, __INT40_C_SUFFIX__) +# define __int32_c_suffix __INT40_C_SUFFIX__ +# define __int16_c_suffix __INT40_C_SUFFIX__ +# define __int8_c_suffix __INT40_C_SUFFIX__ +# else +# define INT40_C(v) v +# define UINT40_C(v) v ## U +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT40_C_SUFFIX__ */ +#endif /* __INT40_TYPE__ */ + + +#ifdef __INT32_TYPE__ +# ifdef __INT32_C_SUFFIX__ +# define __int32_c_suffix __INT32_C_SUFFIX__ +# define __int16_c_suffix __INT32_C_SUFFIX__ +# define __int8_c_suffix __INT32_C_SUFFIX__ +#else +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT32_C_SUFFIX__ */ +#endif /* __INT32_TYPE__ */ + +#ifdef __int_least32_t +# ifdef __int32_c_suffix +# define INT32_C(v) __int_c(v, __int32_c_suffix) +# define UINT32_C(v) __uint_c(v, __int32_c_suffix) +# else +# define INT32_C(v) v +# define UINT32_C(v) v ## U +# endif /* __int32_c_suffix */ +#endif /* __int_least32_t */ + + +#ifdef __INT24_TYPE__ +# ifdef __INT24_C_SUFFIX__ +# define INT24_C(v) __int_c(v, __INT24_C_SUFFIX__) +# define UINT24_C(v) __uint_c(v, __INT24_C_SUFFIX__) +# define __int16_c_suffix __INT24_C_SUFFIX__ +# define __int8_c_suffix __INT24_C_SUFFIX__ +# else +# define INT24_C(v) v +# define UINT24_C(v) v ## U +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT24_C_SUFFIX__ */ +#endif /* __INT24_TYPE__ */ + + +#ifdef __INT16_TYPE__ +# ifdef __INT16_C_SUFFIX__ +# define __int16_c_suffix __INT16_C_SUFFIX__ +# define __int8_c_suffix __INT16_C_SUFFIX__ +#else +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT16_C_SUFFIX__ */ +#endif /* __INT16_TYPE__ */ + +#ifdef __int_least16_t +# ifdef __int16_c_suffix +# define INT16_C(v) __int_c(v, __int16_c_suffix) +# define UINT16_C(v) __uint_c(v, __int16_c_suffix) +# else +# define INT16_C(v) v +# define UINT16_C(v) v ## U +# endif /* __int16_c_suffix */ +#endif /* __int_least16_t */ + + +#ifdef __INT8_TYPE__ +# ifdef __INT8_C_SUFFIX__ +# define __int8_c_suffix __INT8_C_SUFFIX__ +#else +# undef __int8_c_suffix +# endif /* __INT8_C_SUFFIX__ */ +#endif /* __INT8_TYPE__ */ + +#ifdef __int_least8_t +# ifdef __int8_c_suffix +# define INT8_C(v) __int_c(v, __int8_c_suffix) +# define UINT8_C(v) __uint_c(v, __int8_c_suffix) +# else +# define INT8_C(v) v +# define UINT8_C(v) v ## U +# endif /* __int8_c_suffix */ +#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) +# define __INT_LEAST64_MIN INT64_MIN +# define __INT_LEAST64_MAX INT64_MAX +# define __UINT_LEAST64_MAX UINT64_MAX +# define __INT_LEAST32_MIN INT64_MIN +# define __INT_LEAST32_MAX INT64_MAX +# define __UINT_LEAST32_MAX UINT64_MAX +# define __INT_LEAST16_MIN INT64_MIN +# define __INT_LEAST16_MAX INT64_MAX +# define __UINT_LEAST16_MAX UINT64_MAX +# define __INT_LEAST8_MIN INT64_MIN +# define __INT_LEAST8_MAX INT64_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 +#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 +# define __INT_LEAST32_MIN INT56_MIN +# define __INT_LEAST32_MAX INT56_MAX +# define __UINT_LEAST32_MAX UINT56_MAX +# define __INT_LEAST16_MIN INT56_MIN +# define __INT_LEAST16_MAX INT56_MAX +# define __UINT_LEAST16_MAX UINT56_MAX +# define __INT_LEAST8_MIN INT56_MIN +# define __INT_LEAST8_MAX INT56_MAX +# define __UINT_LEAST8_MAX UINT56_MAX +#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 +# define __INT_LEAST32_MIN INT48_MIN +# define __INT_LEAST32_MAX INT48_MAX +# define __UINT_LEAST32_MAX UINT48_MAX +# define __INT_LEAST16_MIN INT48_MIN +# define __INT_LEAST16_MAX INT48_MAX +# define __UINT_LEAST16_MAX UINT48_MAX +# define __INT_LEAST8_MIN INT48_MIN +# define __INT_LEAST8_MAX INT48_MAX +# define __UINT_LEAST8_MAX UINT48_MAX +#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 +# define __INT_LEAST32_MIN INT40_MIN +# define __INT_LEAST32_MAX INT40_MAX +# define __UINT_LEAST32_MAX UINT40_MAX +# define __INT_LEAST16_MIN INT40_MIN +# define __INT_LEAST16_MAX INT40_MAX +# define __UINT_LEAST16_MAX UINT40_MAX +# define __INT_LEAST8_MIN INT40_MIN +# define __INT_LEAST8_MAX INT40_MAX +# define __UINT_LEAST8_MAX UINT40_MAX +#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) +# define __INT_LEAST32_MIN INT32_MIN +# define __INT_LEAST32_MAX INT32_MAX +# define __UINT_LEAST32_MAX UINT32_MAX +# define __INT_LEAST16_MIN INT32_MIN +# define __INT_LEAST16_MAX INT32_MAX +# define __UINT_LEAST16_MAX UINT32_MAX +# define __INT_LEAST8_MIN INT32_MIN +# define __INT_LEAST8_MAX INT32_MAX +# define __UINT_LEAST8_MAX UINT32_MAX +#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 +#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 +# define __INT_LEAST16_MIN INT24_MIN +# define __INT_LEAST16_MAX INT24_MAX +# define __UINT_LEAST16_MAX UINT24_MAX +# define __INT_LEAST8_MIN INT24_MIN +# define __INT_LEAST8_MAX INT24_MAX +# define __UINT_LEAST8_MAX UINT24_MAX +#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) +# define __INT_LEAST16_MIN INT16_MIN +# define __INT_LEAST16_MAX INT16_MAX +# define __UINT_LEAST16_MAX UINT16_MAX +# define __INT_LEAST8_MIN INT16_MIN +# define __INT_LEAST8_MAX INT16_MAX +# define __UINT_LEAST8_MAX UINT16_MAX +#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 +#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) +# define __INT_LEAST8_MIN INT8_MIN +# define __INT_LEAST8_MAX INT8_MAX +# define __UINT_LEAST8_MAX UINT8_MAX +#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 +#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__ + +/* 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__ + +/* 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) __int_c(v, __INTMAX_C_SUFFIX__) +#define UINTMAX_C(v) __int_c(v, __UINTMAX_C_SUFFIX__) + +#endif /* __STDC_HOSTED__ */ +#endif /* __CLANG_STDINT_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdint.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@lib@llvm-11@lib@clang@11.0.1@include@stdint.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..8151832b053b90853499431b0967c06da32ab2f5 GIT binary patch literal 12818 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 x|H%30;Mr +#include +#include +#include + +#include "float_common.h" + +namespace fast_float { + +// Next function can be micro-optimized, but compilers are entirely +// able to optimize it well. +fastfloat_really_inline bool is_integer(char c) noexcept { return c >= '0' && c <= '9'; } + + +// credit @aqrit +fastfloat_really_inline uint32_t parse_eight_digits_unrolled(uint64_t val) { + const uint64_t mask = 0x000000FF000000FF; + const uint64_t mul1 = 0x000F424000000064; // 100 + (1000000ULL << 32) + const uint64_t mul2 = 0x0000271000000001; // 1 + (10000ULL << 32) + val -= 0x3030303030303030; + val = (val * 10) + (val >> 8); // val = (val * 2561) >> 8; + val = (((val & mask) * mul1) + (((val >> 16) & mask) * mul2)) >> 32; + return uint32_t(val); +} + +fastfloat_really_inline uint32_t parse_eight_digits_unrolled(const char *chars) noexcept { + uint64_t val; + ::memcpy(&val, chars, sizeof(uint64_t)); + return parse_eight_digits_unrolled(val); +} + +// credit @aqrit +fastfloat_really_inline bool is_made_of_eight_digits_fast(uint64_t val) noexcept { + return !((((val + 0x4646464646464646) | (val - 0x3030303030303030)) & + 0x8080808080808080)); +} + +fastfloat_really_inline bool is_made_of_eight_digits_fast(const char *chars) noexcept { + uint64_t val; + ::memcpy(&val, chars, 8); + return is_made_of_eight_digits_fast(val); +} + +struct parsed_number_string { + int64_t exponent; + uint64_t mantissa; + const char *lastmatch; + bool negative; + bool valid; + bool too_many_digits; +}; + + +// Assuming that you use no more than 19 digits, this will +// parse an ASCII string. +fastfloat_really_inline +parsed_number_string parse_number_string(const char *p, const char *pend, chars_format fmt) noexcept { + parsed_number_string answer; + answer.valid = false; + answer.too_many_digits = false; + answer.negative = (*p == '-'); + if ((*p == '-') || (*p == '+')) { + ++p; + if (p == pend) { + return answer; + } + if (!is_integer(*p) && (*p != '.')) { // a sign must be followed by an integer or the dot + return answer; + } + } + const char *const start_digits = p; + + uint64_t i = 0; // an unsigned int avoids signed overflows (which are bad) + + while ((p != pend) && is_integer(*p)) { + // a multiplication by 10 is cheaper than an arbitrary integer + // multiplication + i = 10 * i + + uint64_t(*p - '0'); // might overflow, we will handle the overflow later + ++p; + } + const char *const end_of_integer_part = p; + int64_t digit_count = int64_t(end_of_integer_part - start_digits); + int64_t exponent = 0; + if ((p != pend) && (*p == '.')) { + ++p; +#if FASTFLOAT_IS_BIG_ENDIAN == 0 + // Fast approach only tested under little endian systems + if ((p + 8 <= pend) && is_made_of_eight_digits_fast(p)) { + i = i * 100000000 + parse_eight_digits_unrolled(p); // in rare cases, this will overflow, but that's ok + p += 8; + if ((p + 8 <= pend) && is_made_of_eight_digits_fast(p)) { + i = i * 100000000 + parse_eight_digits_unrolled(p); // in rare cases, this will overflow, but that's ok + p += 8; + } + } +#endif + while ((p != pend) && is_integer(*p)) { + uint8_t digit = uint8_t(*p - '0'); + ++p; + i = i * 10 + digit; // in rare cases, this will overflow, but that's ok + } + exponent = end_of_integer_part + 1 - p; + digit_count -= exponent; + } + // we must have encountered at least one integer! + if (digit_count == 0) { + return answer; + } + int64_t exp_number = 0; // explicit exponential part + if ((fmt & chars_format::scientific) && (p != pend) && (('e' == *p) || ('E' == *p))) { + const char * location_of_e = p; + ++p; + bool neg_exp = false; + if ((p != pend) && ('-' == *p)) { + neg_exp = true; + ++p; + } else if ((p != pend) && ('+' == *p)) { + ++p; + } + if ((p == pend) || !is_integer(*p)) { + if(!(fmt & chars_format::fixed)) { + // We are in error. + return answer; + } + // Otherwise, we will be ignoring the 'e'. + p = location_of_e; + } else { + while ((p != pend) && is_integer(*p)) { + uint8_t digit = uint8_t(*p - '0'); + if (exp_number < 0x10000) { + exp_number = 10 * exp_number + digit; + } + ++p; + } + if(neg_exp) { exp_number = - exp_number; } + exponent += exp_number; + } + } else { + // If it scientific and not fixed, we have to bail out. + if((fmt & chars_format::scientific) && !(fmt & chars_format::fixed)) { return answer; } + } + answer.lastmatch = p; + answer.valid = true; + + // If we frequently had to deal with long strings of digits, + // we could extend our code by using a 128-bit integer instead + // of a 64-bit integer. However, this is uncommon. + // + // We can deal with up to 19 digits. + if (digit_count > 19) { // this is uncommon + // It is possible that the integer had an overflow. + // We have to handle the case where we have 0.0000somenumber. + // We need to be mindful of the case where we only have zeroes... + // E.g., 0.000000000...000. + const char *start = start_digits; + while ((start != pend) && (*start == '0' || *start == '.')) { + if(*start == '0') { digit_count --; } + start++; + } + if (digit_count > 19) { + answer.too_many_digits = true; + // Let us start again, this time, avoiding overflows. + i = 0; + p = start_digits; + const uint64_t minimal_nineteen_digit_integer{1000000000000000000}; + while((i < minimal_nineteen_digit_integer) && (p != pend) && is_integer(*p)) { + i = i * 10 + uint64_t(*p - '0'); + ++p; + } + if (i >= minimal_nineteen_digit_integer) { // We have a big integers + exponent = end_of_integer_part - p + exp_number; + } else { // We have a value with a fractional component. + p++; // skip the '.' + const char *first_after_period = p; + while((i < minimal_nineteen_digit_integer) && (p != pend) && is_integer(*p)) { + i = i * 10 + uint64_t(*p - '0'); + ++p; + } + exponent = first_after_period - p + exp_number; + } + // We have now corrected both exponent and i, to a truncated value + } + } + answer.exponent = exponent; + answer.mantissa = i; + return answer; +} + + +// This should always succeed since it follows a call to parse_number_string +// This function could be optimized. In particular, we could stop after 19 digits +// and try to bail out. Furthermore, we should be able to recover the computed +// exponent from the pass in parse_number_string. +fastfloat_really_inline decimal parse_decimal(const char *p, const char *pend) noexcept { + decimal answer; + answer.num_digits = 0; + answer.decimal_point = 0; + answer.truncated = false; + // any whitespace has been skipped. + answer.negative = (*p == '-'); + if ((*p == '-') || (*p == '+')) { + ++p; + } + // skip leading zeroes + while ((p != pend) && (*p == '0')) { + ++p; + } + while ((p != pend) && is_integer(*p)) { + if (answer.num_digits < max_digits) { + answer.digits[answer.num_digits] = uint8_t(*p - '0'); + } + answer.num_digits++; + ++p; + } + if ((p != pend) && (*p == '.')) { + ++p; + const char *first_after_period = p; + // if we have not yet encountered a zero, we have to skip it as well + if(answer.num_digits == 0) { + // skip zeros + while ((p != pend) && (*p == '0')) { + ++p; + } + } +#if FASTFLOAT_IS_BIG_ENDIAN == 0 + // We expect that this loop will often take the bulk of the running time + // because when a value has lots of digits, these digits often + while ((p + 8 <= pend) && (answer.num_digits + 8 < max_digits)) { + uint64_t val; + ::memcpy(&val, p, sizeof(uint64_t)); + if(! is_made_of_eight_digits_fast(val)) { break; } + // We have eight digits, process them in one go! + val -= 0x3030303030303030; + ::memcpy(answer.digits + answer.num_digits, &val, sizeof(uint64_t)); + answer.num_digits += 8; + p += 8; + } +#endif + while ((p != pend) && is_integer(*p)) { + if (answer.num_digits < max_digits) { + answer.digits[answer.num_digits] = uint8_t(*p - '0'); + } + answer.num_digits++; + ++p; + } + answer.decimal_point = int32_t(first_after_period - p); + } + if ((p != pend) && (('e' == *p) || ('E' == *p))) { + ++p; + bool neg_exp = false; + if ((p != pend) && ('-' == *p)) { + neg_exp = true; + ++p; + } else if ((p != pend) && ('+' == *p)) { + ++p; + } + int32_t exp_number = 0; // exponential part + while ((p != pend) && is_integer(*p)) { + uint8_t digit = uint8_t(*p - '0'); + if (exp_number < 0x10000) { + exp_number = 10 * exp_number + digit; + } + ++p; + } + answer.decimal_point += (neg_exp ? -exp_number : exp_number); + } + answer.decimal_point += int32_t(answer.num_digits); + if(answer.num_digits > max_digits) { + answer.truncated = true; + answer.num_digits = max_digits; + } + // In very rare cases, we may have fewer than 19 digits, we want to be able to reliably + // assume that all digits up to max_digit_without_overflow have been initialized. + for(uint32_t i = answer.num_digits; i < max_digit_without_overflow; i++) { answer.digits[i] = 0; } + + return answer; +} +} // namespace fast_float + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@ascii_number.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@ascii_number.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..31c49986fb75acf9417b46af157c4fc240abdf0b GIT binary patch literal 23187 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@decimal_to_binary.h b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@decimal_to_binary.h new file mode 100644 index 0000000..0dd05a2 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@decimal_to_binary.h @@ -0,0 +1,174 @@ +#ifndef FASTFLOAT_DECIMAL_TO_BINARY_H +#define FASTFLOAT_DECIMAL_TO_BINARY_H + +#include "float_common.h" +#include "fast_table.h" +#include +#include +#include +#include +#include +#include +#include + +namespace fast_float { + +// This will compute or rather approximate w * 5**q and return a pair of 64-bit words approximating +// the result, with the "high" part corresponding to the most significant bits and the +// low part corresponding to the least significant bits. +// +template +fastfloat_really_inline +value128 compute_product_approximation(int64_t q, uint64_t w) { + const int index = 2 * int(q - smallest_power_of_five); + // For small values of q, e.g., q in [0,27], the answer is always exact because + // The line value128 firstproduct = full_multiplication(w, power_of_five_128[index]); + // gives the exact answer. + value128 firstproduct = full_multiplication(w, power_of_five_128[index]); + static_assert((bit_precision >= 0) && (bit_precision <= 64), " precision should be in (0,64]"); + constexpr uint64_t precision_mask = (bit_precision < 64) ? + (uint64_t(0xFFFFFFFFFFFFFFFF) >> bit_precision) + : uint64_t(0xFFFFFFFFFFFFFFFF); + if((firstproduct.high & precision_mask) == precision_mask) { // could further guard with (lower + w < lower) + // regarding the second product, we only need secondproduct.high, but our expectation is that the compiler will optimize this extra work away if needed. + value128 secondproduct = full_multiplication(w, power_of_five_128[index + 1]); + firstproduct.low += secondproduct.high; + if(secondproduct.high > firstproduct.low) { + firstproduct.high++; + } + } + return firstproduct; +} + +namespace { +/** + * For q in (0,350), we have that + * f = (((152170 + 65536) * q ) >> 16); + * is equal to + * floor(p) + q + * where + * p = log(5**q)/log(2) = q * log(5)/log(2) + * + * For negative values of q in (-400,0), we have that + * f = (((152170 + 65536) * q ) >> 16); + * is equal to + * -ceil(p) + q + * where + * p = log(5**-q)/log(2) = -q * log(5)/log(2) + */ + fastfloat_really_inline int power(int q) noexcept { + return (((152170 + 65536) * q) >> 16) + 63; + } +} // namespace + + +// w * 10 ** q +// The returned value should be a valid ieee64 number that simply need to be packed. +// However, in some very rare cases, the computation will fail. In such cases, we +// return an adjusted_mantissa with a negative power of 2: the caller should recompute +// in such cases. +template +fastfloat_really_inline +adjusted_mantissa compute_float(int64_t q, uint64_t w) noexcept { + adjusted_mantissa answer; + if ((w == 0) || (q < binary::smallest_power_of_ten())) { + answer.power2 = 0; + answer.mantissa = 0; + // result should be zero + return answer; + } + if (q > binary::largest_power_of_ten()) { + // we want to get infinity: + answer.power2 = binary::infinite_power(); + answer.mantissa = 0; + return answer; + } + // At this point in time q is in [smallest_power_of_five, largest_power_of_five]. + + // We want the most significant bit of i to be 1. Shift if needed. + int lz = leading_zeroes(w); + w <<= lz; + + // The required precision is binary::mantissa_explicit_bits() + 3 because + // 1. We need the implicit bit + // 2. We need an extra bit for rounding purposes + // 3. We might lose a bit due to the "upperbit" routine (result too small, requiring a shift) + + value128 product = compute_product_approximation(q, w); + if(product.low == 0xFFFFFFFFFFFFFFFF) { // could guard it further + // In some very rare cases, this could happen, in which case we might need a more accurate + // computation that what we can provide cheaply. This is very, very unlikely. + // + const bool inside_safe_exponent = (q >= -27) && (q <= 55); // always good because 5**q <2**128 when q>=0, + // and otherwise, for q<0, we have 5**-q<2**64 and the 128-bit reciprocal allows for exact computation. + if(!inside_safe_exponent) { + answer.power2 = -1; // This (a negative value) indicates an error condition. + return answer; + } + } + // The "compute_product_approximation" function can be slightly slower than a branchless approach: + // value128 product = compute_product(q, w); + // but in practice, we can win big with the compute_product_approximation if its additional branch + // is easily predicted. Which is best is data specific. + int upperbit = int(product.high >> 63); + + answer.mantissa = product.high >> (upperbit + 64 - binary::mantissa_explicit_bits() - 3); + + answer.power2 = int(power(int(q)) + upperbit - lz - binary::minimum_exponent()); + if (answer.power2 <= 0) { // we have a subnormal? + // Here have that answer.power2 <= 0 so -answer.power2 >= 0 + if(-answer.power2 + 1 >= 64) { // if we have more than 64 bits below the minimum exponent, you have a zero for sure. + answer.power2 = 0; + answer.mantissa = 0; + // result should be zero + return answer; + } + // next line is safe because -answer.power2 + 1 < 64 + answer.mantissa >>= -answer.power2 + 1; + // Thankfully, we can't have both "round-to-even" and subnormals because + // "round-to-even" only occurs for powers close to 0. + answer.mantissa += (answer.mantissa & 1); // round up + answer.mantissa >>= 1; + // There is a weird scenario where we don't have a subnormal but just. + // Suppose we start with 2.2250738585072013e-308, we end up + // with 0x3fffffffffffff x 2^-1023-53 which is technically subnormal + // whereas 0x40000000000000 x 2^-1023-53 is normal. Now, we need to round + // up 0x3fffffffffffff x 2^-1023-53 and once we do, we are no longer + // subnormal, but we can only know this after rounding. + // So we only declare a subnormal if we are smaller than the threshold. + answer.power2 = (answer.mantissa < (uint64_t(1) << binary::mantissa_explicit_bits())) ? 0 : 1; + return answer; + } + + // usually, we round *up*, but if we fall right in between and and we have an + // even basis, we need to round down + // We are only concerned with the cases where 5**q fits in single 64-bit word. + if ((product.low <= 1) && (q >= binary::min_exponent_round_to_even()) && (q <= binary::max_exponent_round_to_even()) && + ((answer.mantissa & 3) == 1) ) { // we may fall between two floats! + // To be in-between two floats we need that in doing + // answer.mantissa = product.high >> (upperbit + 64 - binary::mantissa_explicit_bits() - 3); + // ... we dropped out only zeroes. But if this happened, then we can go back!!! + if((answer.mantissa << (upperbit + 64 - binary::mantissa_explicit_bits() - 3)) == product.high) { + answer.mantissa &= ~uint64_t(1); // flip it so that we do not round up + } + } + + answer.mantissa += (answer.mantissa & 1); // round up + answer.mantissa >>= 1; + if (answer.mantissa >= (uint64_t(2) << binary::mantissa_explicit_bits())) { + answer.mantissa = (uint64_t(1) << binary::mantissa_explicit_bits()); + answer.power2++; // undo previous addition + } + + answer.mantissa &= ~(uint64_t(1) << binary::mantissa_explicit_bits()); + if (answer.power2 >= binary::infinite_power()) { // infinity + answer.power2 = binary::infinite_power(); + answer.mantissa = 0; + } + return answer; +} + + +} // namespace fast_float + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@decimal_to_binary.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@decimal_to_binary.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..726b95d70fa01151143d500f084dc426b8e3f357 GIT binary patch literal 19015 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_float.h b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_float.h new file mode 100644 index 0000000..ffad079 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_float.h @@ -0,0 +1,45 @@ +#ifndef FASTFLOAT_FAST_FLOAT_H +#define FASTFLOAT_FAST_FLOAT_H + +#include + +namespace fast_float { +enum chars_format { + scientific = 1<<0, + fixed = 1<<2, + hex = 1<<3, + general = fixed | scientific +}; + + +struct from_chars_result { + const char *ptr; + std::errc ec; +}; + +/** + * This function parses the character sequence [first,last) for a number. It parses floating-point numbers expecting + * a locale-indepent format equivalent to what is used by std::strtod in the default ("C") locale. + * The resulting floating-point value is the closest floating-point values (using either float or double), + * using the "round to even" convention for values that would otherwise fall right in-between two values. + * That is, we provide exact parsing according to the IEEE standard. + * + * Given a successful parse, the pointer (`ptr`) in the returned value is set to point right after the + * parsed number, and the `value` referenced is set to the parsed value. In case of error, the returned + * `ec` contains a representative error, otherwise the default (`std::errc()`) value is stored. + * + * The implementation does not throw and does not allocate memory (e.g., with `new` or `malloc`). + * + * Like the C++17 standard, the `fast_float::from_chars` functions take an optional last argument of + * the type `fast_float::chars_format`. It is a bitset value: we check whether + * `fmt & fast_float::chars_format::fixed` and `fmt & fast_float::chars_format::scientific` are set + * to determine whether we allowe the fixed point and scientific notation respectively. + * The default is `fast_float::chars_format::general` which allows both `fixed` and `scientific`. + */ +template +from_chars_result from_chars(const char *first, const char *last, + T &value, chars_format fmt = chars_format::general) noexcept; + +} +#include "parse_number.h" +#endif // FASTFLOAT_FAST_FLOAT_H \ No newline at end of file diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_float.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_float.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..0ab103d6d7ff09fa220554e5746435d71769ce68 GIT binary patch literal 15195 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 v3x7O%;hrzAU3l + +namespace fast_float { + +/** + * When mapping numbers from decimal to binary, + * we go from w * 10^q to m * 2^p but we have + * 10^q = 5^q * 2^q, so effectively + * we are trying to match + * w * 2^q * 5^q to m * 2^p. Thus the powers of two + * are not a concern since they can be represented + * exactly using the binary notation, only the powers of five + * affect the binary significand. + */ + +/** + * The smallest non-zero float (binary64) is 2^−1074. + * We take as input numbers of the form w x 10^q where w < 2^64. + * We have that w * 10^-343 < 2^(64-344) 5^-343 < 2^-1076. + * However, we have that + * (2^64-1) * 10^-342 = (2^64-1) * 2^-342 * 5^-342 > 2^−1074. + * Thus it is possible for a number of the form w * 10^-342 where + * w is a 64-bit value to be a non-zero floating-point number. + ********* + * Any number of form w * 10^309 where w>= 1 is going to be + * infinite in binary64 so we never need to worry about powers + * of 5 greater than 308. + */ +constexpr int smallest_power_of_five = -342; +constexpr int largest_power_of_five = 308; +// Powers of five from 5^-342 all the way to 5^308 rounded toward one. +const uint64_t power_of_five_128[]= { + 0xeef453d6923bd65a,0x113faa2906a13b3f, + 0x9558b4661b6565f8,0x4ac7ca59a424c507, + 0xbaaee17fa23ebf76,0x5d79bcf00d2df649, + 0xe95a99df8ace6f53,0xf4d82c2c107973dc, + 0x91d8a02bb6c10594,0x79071b9b8a4be869, + 0xb64ec836a47146f9,0x9748e2826cdee284, + 0xe3e27a444d8d98b7,0xfd1b1b2308169b25, + 0x8e6d8c6ab0787f72,0xfe30f0f5e50e20f7, + 0xb208ef855c969f4f,0xbdbd2d335e51a935, + 0xde8b2b66b3bc4723,0xad2c788035e61382, + 0x8b16fb203055ac76,0x4c3bcb5021afcc31, + 0xaddcb9e83c6b1793,0xdf4abe242a1bbf3d, + 0xd953e8624b85dd78,0xd71d6dad34a2af0d, + 0x87d4713d6f33aa6b,0x8672648c40e5ad68, + 0xa9c98d8ccb009506,0x680efdaf511f18c2, + 0xd43bf0effdc0ba48,0x212bd1b2566def2, + 0x84a57695fe98746d,0x14bb630f7604b57, + 0xa5ced43b7e3e9188,0x419ea3bd35385e2d, + 0xcf42894a5dce35ea,0x52064cac828675b9, + 0x818995ce7aa0e1b2,0x7343efebd1940993, + 0xa1ebfb4219491a1f,0x1014ebe6c5f90bf8, + 0xca66fa129f9b60a6,0xd41a26e077774ef6, + 0xfd00b897478238d0,0x8920b098955522b4, + 0x9e20735e8cb16382,0x55b46e5f5d5535b0, + 0xc5a890362fddbc62,0xeb2189f734aa831d, + 0xf712b443bbd52b7b,0xa5e9ec7501d523e4, + 0x9a6bb0aa55653b2d,0x47b233c92125366e, + 0xc1069cd4eabe89f8,0x999ec0bb696e840a, + 0xf148440a256e2c76,0xc00670ea43ca250d, + 0x96cd2a865764dbca,0x380406926a5e5728, + 0xbc807527ed3e12bc,0xc605083704f5ecf2, + 0xeba09271e88d976b,0xf7864a44c633682e, + 0x93445b8731587ea3,0x7ab3ee6afbe0211d, + 0xb8157268fdae9e4c,0x5960ea05bad82964, + 0xe61acf033d1a45df,0x6fb92487298e33bd, + 0x8fd0c16206306bab,0xa5d3b6d479f8e056, + 0xb3c4f1ba87bc8696,0x8f48a4899877186c, + 0xe0b62e2929aba83c,0x331acdabfe94de87, + 0x8c71dcd9ba0b4925,0x9ff0c08b7f1d0b14, + 0xaf8e5410288e1b6f,0x7ecf0ae5ee44dd9, + 0xdb71e91432b1a24a,0xc9e82cd9f69d6150, + 0x892731ac9faf056e,0xbe311c083a225cd2, + 0xab70fe17c79ac6ca,0x6dbd630a48aaf406, + 0xd64d3d9db981787d,0x92cbbccdad5b108, + 0x85f0468293f0eb4e,0x25bbf56008c58ea5, + 0xa76c582338ed2621,0xaf2af2b80af6f24e, + 0xd1476e2c07286faa,0x1af5af660db4aee1, + 0x82cca4db847945ca,0x50d98d9fc890ed4d, + 0xa37fce126597973c,0xe50ff107bab528a0, + 0xcc5fc196fefd7d0c,0x1e53ed49a96272c8, + 0xff77b1fcbebcdc4f,0x25e8e89c13bb0f7a, + 0x9faacf3df73609b1,0x77b191618c54e9ac, + 0xc795830d75038c1d,0xd59df5b9ef6a2417, + 0xf97ae3d0d2446f25,0x4b0573286b44ad1d, + 0x9becce62836ac577,0x4ee367f9430aec32, + 0xc2e801fb244576d5,0x229c41f793cda73f, + 0xf3a20279ed56d48a,0x6b43527578c1110f, + 0x9845418c345644d6,0x830a13896b78aaa9, + 0xbe5691ef416bd60c,0x23cc986bc656d553, + 0xedec366b11c6cb8f,0x2cbfbe86b7ec8aa8, + 0x94b3a202eb1c3f39,0x7bf7d71432f3d6a9, + 0xb9e08a83a5e34f07,0xdaf5ccd93fb0cc53, + 0xe858ad248f5c22c9,0xd1b3400f8f9cff68, + 0x91376c36d99995be,0x23100809b9c21fa1, + 0xb58547448ffffb2d,0xabd40a0c2832a78a, + 0xe2e69915b3fff9f9,0x16c90c8f323f516c, + 0x8dd01fad907ffc3b,0xae3da7d97f6792e3, + 0xb1442798f49ffb4a,0x99cd11cfdf41779c, + 0xdd95317f31c7fa1d,0x40405643d711d583, + 0x8a7d3eef7f1cfc52,0x482835ea666b2572, + 0xad1c8eab5ee43b66,0xda3243650005eecf, + 0xd863b256369d4a40,0x90bed43e40076a82, + 0x873e4f75e2224e68,0x5a7744a6e804a291, + 0xa90de3535aaae202,0x711515d0a205cb36, + 0xd3515c2831559a83,0xd5a5b44ca873e03, + 0x8412d9991ed58091,0xe858790afe9486c2, + 0xa5178fff668ae0b6,0x626e974dbe39a872, + 0xce5d73ff402d98e3,0xfb0a3d212dc8128f, + 0x80fa687f881c7f8e,0x7ce66634bc9d0b99, + 0xa139029f6a239f72,0x1c1fffc1ebc44e80, + 0xc987434744ac874e,0xa327ffb266b56220, + 0xfbe9141915d7a922,0x4bf1ff9f0062baa8, + 0x9d71ac8fada6c9b5,0x6f773fc3603db4a9, + 0xc4ce17b399107c22,0xcb550fb4384d21d3, + 0xf6019da07f549b2b,0x7e2a53a146606a48, + 0x99c102844f94e0fb,0x2eda7444cbfc426d, + 0xc0314325637a1939,0xfa911155fefb5308, + 0xf03d93eebc589f88,0x793555ab7eba27ca, + 0x96267c7535b763b5,0x4bc1558b2f3458de, + 0xbbb01b9283253ca2,0x9eb1aaedfb016f16, + 0xea9c227723ee8bcb,0x465e15a979c1cadc, + 0x92a1958a7675175f,0xbfacd89ec191ec9, + 0xb749faed14125d36,0xcef980ec671f667b, + 0xe51c79a85916f484,0x82b7e12780e7401a, + 0x8f31cc0937ae58d2,0xd1b2ecb8b0908810, + 0xb2fe3f0b8599ef07,0x861fa7e6dcb4aa15, + 0xdfbdcece67006ac9,0x67a791e093e1d49a, + 0x8bd6a141006042bd,0xe0c8bb2c5c6d24e0, + 0xaecc49914078536d,0x58fae9f773886e18, + 0xda7f5bf590966848,0xaf39a475506a899e, + 0x888f99797a5e012d,0x6d8406c952429603, + 0xaab37fd7d8f58178,0xc8e5087ba6d33b83, + 0xd5605fcdcf32e1d6,0xfb1e4a9a90880a64, + 0x855c3be0a17fcd26,0x5cf2eea09a55067f, + 0xa6b34ad8c9dfc06f,0xf42faa48c0ea481e, + 0xd0601d8efc57b08b,0xf13b94daf124da26, + 0x823c12795db6ce57,0x76c53d08d6b70858, + 0xa2cb1717b52481ed,0x54768c4b0c64ca6e, + 0xcb7ddcdda26da268,0xa9942f5dcf7dfd09, + 0xfe5d54150b090b02,0xd3f93b35435d7c4c, + 0x9efa548d26e5a6e1,0xc47bc5014a1a6daf, + 0xc6b8e9b0709f109a,0x359ab6419ca1091b, + 0xf867241c8cc6d4c0,0xc30163d203c94b62, + 0x9b407691d7fc44f8,0x79e0de63425dcf1d, + 0xc21094364dfb5636,0x985915fc12f542e4, + 0xf294b943e17a2bc4,0x3e6f5b7b17b2939d, + 0x979cf3ca6cec5b5a,0xa705992ceecf9c42, + 0xbd8430bd08277231,0x50c6ff782a838353, + 0xece53cec4a314ebd,0xa4f8bf5635246428, + 0x940f4613ae5ed136,0x871b7795e136be99, + 0xb913179899f68584,0x28e2557b59846e3f, + 0xe757dd7ec07426e5,0x331aeada2fe589cf, + 0x9096ea6f3848984f,0x3ff0d2c85def7621, + 0xb4bca50b065abe63,0xfed077a756b53a9, + 0xe1ebce4dc7f16dfb,0xd3e8495912c62894, + 0x8d3360f09cf6e4bd,0x64712dd7abbbd95c, + 0xb080392cc4349dec,0xbd8d794d96aacfb3, + 0xdca04777f541c567,0xecf0d7a0fc5583a0, + 0x89e42caaf9491b60,0xf41686c49db57244, + 0xac5d37d5b79b6239,0x311c2875c522ced5, + 0xd77485cb25823ac7,0x7d633293366b828b, + 0x86a8d39ef77164bc,0xae5dff9c02033197, + 0xa8530886b54dbdeb,0xd9f57f830283fdfc, + 0xd267caa862a12d66,0xd072df63c324fd7b, + 0x8380dea93da4bc60,0x4247cb9e59f71e6d, + 0xa46116538d0deb78,0x52d9be85f074e608, + 0xcd795be870516656,0x67902e276c921f8b, + 0x806bd9714632dff6,0xba1cd8a3db53b6, + 0xa086cfcd97bf97f3,0x80e8a40eccd228a4, + 0xc8a883c0fdaf7df0,0x6122cd128006b2cd, + 0xfad2a4b13d1b5d6c,0x796b805720085f81, + 0x9cc3a6eec6311a63,0xcbe3303674053bb0, + 0xc3f490aa77bd60fc,0xbedbfc4411068a9c, + 0xf4f1b4d515acb93b,0xee92fb5515482d44, + 0x991711052d8bf3c5,0x751bdd152d4d1c4a, + 0xbf5cd54678eef0b6,0xd262d45a78a0635d, + 0xef340a98172aace4,0x86fb897116c87c34, + 0x9580869f0e7aac0e,0xd45d35e6ae3d4da0, + 0xbae0a846d2195712,0x8974836059cca109, + 0xe998d258869facd7,0x2bd1a438703fc94b, + 0x91ff83775423cc06,0x7b6306a34627ddcf, + 0xb67f6455292cbf08,0x1a3bc84c17b1d542, + 0xe41f3d6a7377eeca,0x20caba5f1d9e4a93, + 0x8e938662882af53e,0x547eb47b7282ee9c, + 0xb23867fb2a35b28d,0xe99e619a4f23aa43, + 0xdec681f9f4c31f31,0x6405fa00e2ec94d4, + 0x8b3c113c38f9f37e,0xde83bc408dd3dd04, + 0xae0b158b4738705e,0x9624ab50b148d445, + 0xd98ddaee19068c76,0x3badd624dd9b0957, + 0x87f8a8d4cfa417c9,0xe54ca5d70a80e5d6, + 0xa9f6d30a038d1dbc,0x5e9fcf4ccd211f4c, + 0xd47487cc8470652b,0x7647c3200069671f, + 0x84c8d4dfd2c63f3b,0x29ecd9f40041e073, + 0xa5fb0a17c777cf09,0xf468107100525890, + 0xcf79cc9db955c2cc,0x7182148d4066eeb4, + 0x81ac1fe293d599bf,0xc6f14cd848405530, + 0xa21727db38cb002f,0xb8ada00e5a506a7c, + 0xca9cf1d206fdc03b,0xa6d90811f0e4851c, + 0xfd442e4688bd304a,0x908f4a166d1da663, + 0x9e4a9cec15763e2e,0x9a598e4e043287fe, + 0xc5dd44271ad3cdba,0x40eff1e1853f29fd, + 0xf7549530e188c128,0xd12bee59e68ef47c, + 0x9a94dd3e8cf578b9,0x82bb74f8301958ce, + 0xc13a148e3032d6e7,0xe36a52363c1faf01, + 0xf18899b1bc3f8ca1,0xdc44e6c3cb279ac1, + 0x96f5600f15a7b7e5,0x29ab103a5ef8c0b9, + 0xbcb2b812db11a5de,0x7415d448f6b6f0e7, + 0xebdf661791d60f56,0x111b495b3464ad21, + 0x936b9fcebb25c995,0xcab10dd900beec34, + 0xb84687c269ef3bfb,0x3d5d514f40eea742, + 0xe65829b3046b0afa,0xcb4a5a3112a5112, + 0x8ff71a0fe2c2e6dc,0x47f0e785eaba72ab, + 0xb3f4e093db73a093,0x59ed216765690f56, + 0xe0f218b8d25088b8,0x306869c13ec3532c, + 0x8c974f7383725573,0x1e414218c73a13fb, + 0xafbd2350644eeacf,0xe5d1929ef90898fa, + 0xdbac6c247d62a583,0xdf45f746b74abf39, + 0x894bc396ce5da772,0x6b8bba8c328eb783, + 0xab9eb47c81f5114f,0x66ea92f3f326564, + 0xd686619ba27255a2,0xc80a537b0efefebd, + 0x8613fd0145877585,0xbd06742ce95f5f36, + 0xa798fc4196e952e7,0x2c48113823b73704, + 0xd17f3b51fca3a7a0,0xf75a15862ca504c5, + 0x82ef85133de648c4,0x9a984d73dbe722fb, + 0xa3ab66580d5fdaf5,0xc13e60d0d2e0ebba, + 0xcc963fee10b7d1b3,0x318df905079926a8, + 0xffbbcfe994e5c61f,0xfdf17746497f7052, + 0x9fd561f1fd0f9bd3,0xfeb6ea8bedefa633, + 0xc7caba6e7c5382c8,0xfe64a52ee96b8fc0, + 0xf9bd690a1b68637b,0x3dfdce7aa3c673b0, + 0x9c1661a651213e2d,0x6bea10ca65c084e, + 0xc31bfa0fe5698db8,0x486e494fcff30a62, + 0xf3e2f893dec3f126,0x5a89dba3c3efccfa, + 0x986ddb5c6b3a76b7,0xf89629465a75e01c, + 0xbe89523386091465,0xf6bbb397f1135823, + 0xee2ba6c0678b597f,0x746aa07ded582e2c, + 0x94db483840b717ef,0xa8c2a44eb4571cdc, + 0xba121a4650e4ddeb,0x92f34d62616ce413, + 0xe896a0d7e51e1566,0x77b020baf9c81d17, + 0x915e2486ef32cd60,0xace1474dc1d122e, + 0xb5b5ada8aaff80b8,0xd819992132456ba, + 0xe3231912d5bf60e6,0x10e1fff697ed6c69, + 0x8df5efabc5979c8f,0xca8d3ffa1ef463c1, + 0xb1736b96b6fd83b3,0xbd308ff8a6b17cb2, + 0xddd0467c64bce4a0,0xac7cb3f6d05ddbde, + 0x8aa22c0dbef60ee4,0x6bcdf07a423aa96b, + 0xad4ab7112eb3929d,0x86c16c98d2c953c6, + 0xd89d64d57a607744,0xe871c7bf077ba8b7, + 0x87625f056c7c4a8b,0x11471cd764ad4972, + 0xa93af6c6c79b5d2d,0xd598e40d3dd89bcf, + 0xd389b47879823479,0x4aff1d108d4ec2c3, + 0x843610cb4bf160cb,0xcedf722a585139ba, + 0xa54394fe1eedb8fe,0xc2974eb4ee658828, + 0xce947a3da6a9273e,0x733d226229feea32, + 0x811ccc668829b887,0x806357d5a3f525f, + 0xa163ff802a3426a8,0xca07c2dcb0cf26f7, + 0xc9bcff6034c13052,0xfc89b393dd02f0b5, + 0xfc2c3f3841f17c67,0xbbac2078d443ace2, + 0x9d9ba7832936edc0,0xd54b944b84aa4c0d, + 0xc5029163f384a931,0xa9e795e65d4df11, + 0xf64335bcf065d37d,0x4d4617b5ff4a16d5, + 0x99ea0196163fa42e,0x504bced1bf8e4e45, + 0xc06481fb9bcf8d39,0xe45ec2862f71e1d6, + 0xf07da27a82c37088,0x5d767327bb4e5a4c, + 0x964e858c91ba2655,0x3a6a07f8d510f86f, + 0xbbe226efb628afea,0x890489f70a55368b, + 0xeadab0aba3b2dbe5,0x2b45ac74ccea842e, + 0x92c8ae6b464fc96f,0x3b0b8bc90012929d, + 0xb77ada0617e3bbcb,0x9ce6ebb40173744, + 0xe55990879ddcaabd,0xcc420a6a101d0515, + 0x8f57fa54c2a9eab6,0x9fa946824a12232d, + 0xb32df8e9f3546564,0x47939822dc96abf9, + 0xdff9772470297ebd,0x59787e2b93bc56f7, + 0x8bfbea76c619ef36,0x57eb4edb3c55b65a, + 0xaefae51477a06b03,0xede622920b6b23f1, + 0xdab99e59958885c4,0xe95fab368e45eced, + 0x88b402f7fd75539b,0x11dbcb0218ebb414, + 0xaae103b5fcd2a881,0xd652bdc29f26a119, + 0xd59944a37c0752a2,0x4be76d3346f0495f, + 0x857fcae62d8493a5,0x6f70a4400c562ddb, + 0xa6dfbd9fb8e5b88e,0xcb4ccd500f6bb952, + 0xd097ad07a71f26b2,0x7e2000a41346a7a7, + 0x825ecc24c873782f,0x8ed400668c0c28c8, + 0xa2f67f2dfa90563b,0x728900802f0f32fa, + 0xcbb41ef979346bca,0x4f2b40a03ad2ffb9, + 0xfea126b7d78186bc,0xe2f610c84987bfa8, + 0x9f24b832e6b0f436,0xdd9ca7d2df4d7c9, + 0xc6ede63fa05d3143,0x91503d1c79720dbb, + 0xf8a95fcf88747d94,0x75a44c6397ce912a, + 0x9b69dbe1b548ce7c,0xc986afbe3ee11aba, + 0xc24452da229b021b,0xfbe85badce996168, + 0xf2d56790ab41c2a2,0xfae27299423fb9c3, + 0x97c560ba6b0919a5,0xdccd879fc967d41a, + 0xbdb6b8e905cb600f,0x5400e987bbc1c920, + 0xed246723473e3813,0x290123e9aab23b68, + 0x9436c0760c86e30b,0xf9a0b6720aaf6521, + 0xb94470938fa89bce,0xf808e40e8d5b3e69, + 0xe7958cb87392c2c2,0xb60b1d1230b20e04, + 0x90bd77f3483bb9b9,0xb1c6f22b5e6f48c2, + 0xb4ecd5f01a4aa828,0x1e38aeb6360b1af3, + 0xe2280b6c20dd5232,0x25c6da63c38de1b0, + 0x8d590723948a535f,0x579c487e5a38ad0e, + 0xb0af48ec79ace837,0x2d835a9df0c6d851, + 0xdcdb1b2798182244,0xf8e431456cf88e65, + 0x8a08f0f8bf0f156b,0x1b8e9ecb641b58ff, + 0xac8b2d36eed2dac5,0xe272467e3d222f3f, + 0xd7adf884aa879177,0x5b0ed81dcc6abb0f, + 0x86ccbb52ea94baea,0x98e947129fc2b4e9, + 0xa87fea27a539e9a5,0x3f2398d747b36224, + 0xd29fe4b18e88640e,0x8eec7f0d19a03aad, + 0x83a3eeeef9153e89,0x1953cf68300424ac, + 0xa48ceaaab75a8e2b,0x5fa8c3423c052dd7, + 0xcdb02555653131b6,0x3792f412cb06794d, + 0x808e17555f3ebf11,0xe2bbd88bbee40bd0, + 0xa0b19d2ab70e6ed6,0x5b6aceaeae9d0ec4, + 0xc8de047564d20a8b,0xf245825a5a445275, + 0xfb158592be068d2e,0xeed6e2f0f0d56712, + 0x9ced737bb6c4183d,0x55464dd69685606b, + 0xc428d05aa4751e4c,0xaa97e14c3c26b886, + 0xf53304714d9265df,0xd53dd99f4b3066a8, + 0x993fe2c6d07b7fab,0xe546a8038efe4029, + 0xbf8fdb78849a5f96,0xde98520472bdd033, + 0xef73d256a5c0f77c,0x963e66858f6d4440, + 0x95a8637627989aad,0xdde7001379a44aa8, + 0xbb127c53b17ec159,0x5560c018580d5d52, + 0xe9d71b689dde71af,0xaab8f01e6e10b4a6, + 0x9226712162ab070d,0xcab3961304ca70e8, + 0xb6b00d69bb55c8d1,0x3d607b97c5fd0d22, + 0xe45c10c42a2b3b05,0x8cb89a7db77c506a, + 0x8eb98a7a9a5b04e3,0x77f3608e92adb242, + 0xb267ed1940f1c61c,0x55f038b237591ed3, + 0xdf01e85f912e37a3,0x6b6c46dec52f6688, + 0x8b61313bbabce2c6,0x2323ac4b3b3da015, + 0xae397d8aa96c1b77,0xabec975e0a0d081a, + 0xd9c7dced53c72255,0x96e7bd358c904a21, + 0x881cea14545c7575,0x7e50d64177da2e54, + 0xaa242499697392d2,0xdde50bd1d5d0b9e9, + 0xd4ad2dbfc3d07787,0x955e4ec64b44e864, + 0x84ec3c97da624ab4,0xbd5af13bef0b113e, + 0xa6274bbdd0fadd61,0xecb1ad8aeacdd58e, + 0xcfb11ead453994ba,0x67de18eda5814af2, + 0x81ceb32c4b43fcf4,0x80eacf948770ced7, + 0xa2425ff75e14fc31,0xa1258379a94d028d, + 0xcad2f7f5359a3b3e,0x96ee45813a04330, + 0xfd87b5f28300ca0d,0x8bca9d6e188853fc, + 0x9e74d1b791e07e48,0x775ea264cf55347e, + 0xc612062576589dda,0x95364afe032a819e, + 0xf79687aed3eec551,0x3a83ddbd83f52205, + 0x9abe14cd44753b52,0xc4926a9672793543, + 0xc16d9a0095928a27,0x75b7053c0f178294, + 0xf1c90080baf72cb1,0x5324c68b12dd6339, + 0x971da05074da7bee,0xd3f6fc16ebca5e04, + 0xbce5086492111aea,0x88f4bb1ca6bcf585, + 0xec1e4a7db69561a5,0x2b31e9e3d06c32e6, + 0x9392ee8e921d5d07,0x3aff322e62439fd0, + 0xb877aa3236a4b449,0x9befeb9fad487c3, + 0xe69594bec44de15b,0x4c2ebe687989a9b4, + 0x901d7cf73ab0acd9,0xf9d37014bf60a11, + 0xb424dc35095cd80f,0x538484c19ef38c95, + 0xe12e13424bb40e13,0x2865a5f206b06fba, + 0x8cbccc096f5088cb,0xf93f87b7442e45d4, + 0xafebff0bcb24aafe,0xf78f69a51539d749, + 0xdbe6fecebdedd5be,0xb573440e5a884d1c, + 0x89705f4136b4a597,0x31680a88f8953031, + 0xabcc77118461cefc,0xfdc20d2b36ba7c3e, + 0xd6bf94d5e57a42bc,0x3d32907604691b4d, + 0x8637bd05af6c69b5,0xa63f9a49c2c1b110, + 0xa7c5ac471b478423,0xfcf80dc33721d54, + 0xd1b71758e219652b,0xd3c36113404ea4a9, + 0x83126e978d4fdf3b,0x645a1cac083126ea, + 0xa3d70a3d70a3d70a,0x3d70a3d70a3d70a4, + 0xcccccccccccccccc,0xcccccccccccccccd, + 0x8000000000000000,0x0, + 0xa000000000000000,0x0, + 0xc800000000000000,0x0, + 0xfa00000000000000,0x0, + 0x9c40000000000000,0x0, + 0xc350000000000000,0x0, + 0xf424000000000000,0x0, + 0x9896800000000000,0x0, + 0xbebc200000000000,0x0, + 0xee6b280000000000,0x0, + 0x9502f90000000000,0x0, + 0xba43b74000000000,0x0, + 0xe8d4a51000000000,0x0, + 0x9184e72a00000000,0x0, + 0xb5e620f480000000,0x0, + 0xe35fa931a0000000,0x0, + 0x8e1bc9bf04000000,0x0, + 0xb1a2bc2ec5000000,0x0, + 0xde0b6b3a76400000,0x0, + 0x8ac7230489e80000,0x0, + 0xad78ebc5ac620000,0x0, + 0xd8d726b7177a8000,0x0, + 0x878678326eac9000,0x0, + 0xa968163f0a57b400,0x0, + 0xd3c21bcecceda100,0x0, + 0x84595161401484a0,0x0, + 0xa56fa5b99019a5c8,0x0, + 0xcecb8f27f4200f3a,0x0, + 0x813f3978f8940984,0x4000000000000000, + 0xa18f07d736b90be5,0x5000000000000000, + 0xc9f2c9cd04674ede,0xa400000000000000, + 0xfc6f7c4045812296,0x4d00000000000000, + 0x9dc5ada82b70b59d,0xf020000000000000, + 0xc5371912364ce305,0x6c28000000000000, + 0xf684df56c3e01bc6,0xc732000000000000, + 0x9a130b963a6c115c,0x3c7f400000000000, + 0xc097ce7bc90715b3,0x4b9f100000000000, + 0xf0bdc21abb48db20,0x1e86d40000000000, + 0x96769950b50d88f4,0x1314448000000000, + 0xbc143fa4e250eb31,0x17d955a000000000, + 0xeb194f8e1ae525fd,0x5dcfab0800000000, + 0x92efd1b8d0cf37be,0x5aa1cae500000000, + 0xb7abc627050305ad,0xf14a3d9e40000000, + 0xe596b7b0c643c719,0x6d9ccd05d0000000, + 0x8f7e32ce7bea5c6f,0xe4820023a2000000, + 0xb35dbf821ae4f38b,0xdda2802c8a800000, + 0xe0352f62a19e306e,0xd50b2037ad200000, + 0x8c213d9da502de45,0x4526f422cc340000, + 0xaf298d050e4395d6,0x9670b12b7f410000, + 0xdaf3f04651d47b4c,0x3c0cdd765f114000, + 0x88d8762bf324cd0f,0xa5880a69fb6ac800, + 0xab0e93b6efee0053,0x8eea0d047a457a00, + 0xd5d238a4abe98068,0x72a4904598d6d880, + 0x85a36366eb71f041,0x47a6da2b7f864750, + 0xa70c3c40a64e6c51,0x999090b65f67d924, + 0xd0cf4b50cfe20765,0xfff4b4e3f741cf6d, + 0x82818f1281ed449f,0xbff8f10e7a8921a4, + 0xa321f2d7226895c7,0xaff72d52192b6a0d, + 0xcbea6f8ceb02bb39,0x9bf4f8a69f764490, + 0xfee50b7025c36a08,0x2f236d04753d5b4, + 0x9f4f2726179a2245,0x1d762422c946590, + 0xc722f0ef9d80aad6,0x424d3ad2b7b97ef5, + 0xf8ebad2b84e0d58b,0xd2e0898765a7deb2, + 0x9b934c3b330c8577,0x63cc55f49f88eb2f, + 0xc2781f49ffcfa6d5,0x3cbf6b71c76b25fb, + 0xf316271c7fc3908a,0x8bef464e3945ef7a, + 0x97edd871cfda3a56,0x97758bf0e3cbb5ac, + 0xbde94e8e43d0c8ec,0x3d52eeed1cbea317, + 0xed63a231d4c4fb27,0x4ca7aaa863ee4bdd, + 0x945e455f24fb1cf8,0x8fe8caa93e74ef6a, + 0xb975d6b6ee39e436,0xb3e2fd538e122b44, + 0xe7d34c64a9c85d44,0x60dbbca87196b616, + 0x90e40fbeea1d3a4a,0xbc8955e946fe31cd, + 0xb51d13aea4a488dd,0x6babab6398bdbe41, + 0xe264589a4dcdab14,0xc696963c7eed2dd1, + 0x8d7eb76070a08aec,0xfc1e1de5cf543ca2, + 0xb0de65388cc8ada8,0x3b25a55f43294bcb, + 0xdd15fe86affad912,0x49ef0eb713f39ebe, + 0x8a2dbf142dfcc7ab,0x6e3569326c784337, + 0xacb92ed9397bf996,0x49c2c37f07965404, + 0xd7e77a8f87daf7fb,0xdc33745ec97be906, + 0x86f0ac99b4e8dafd,0x69a028bb3ded71a3, + 0xa8acd7c0222311bc,0xc40832ea0d68ce0c, + 0xd2d80db02aabd62b,0xf50a3fa490c30190, + 0x83c7088e1aab65db,0x792667c6da79e0fa, + 0xa4b8cab1a1563f52,0x577001b891185938, + 0xcde6fd5e09abcf26,0xed4c0226b55e6f86, + 0x80b05e5ac60b6178,0x544f8158315b05b4, + 0xa0dc75f1778e39d6,0x696361ae3db1c721, + 0xc913936dd571c84c,0x3bc3a19cd1e38e9, + 0xfb5878494ace3a5f,0x4ab48a04065c723, + 0x9d174b2dcec0e47b,0x62eb0d64283f9c76, + 0xc45d1df942711d9a,0x3ba5d0bd324f8394, + 0xf5746577930d6500,0xca8f44ec7ee36479, + 0x9968bf6abbe85f20,0x7e998b13cf4e1ecb, + 0xbfc2ef456ae276e8,0x9e3fedd8c321a67e, + 0xefb3ab16c59b14a2,0xc5cfe94ef3ea101e, + 0x95d04aee3b80ece5,0xbba1f1d158724a12, + 0xbb445da9ca61281f,0x2a8a6e45ae8edc97, + 0xea1575143cf97226,0xf52d09d71a3293bd, + 0x924d692ca61be758,0x593c2626705f9c56, + 0xb6e0c377cfa2e12e,0x6f8b2fb00c77836c, + 0xe498f455c38b997a,0xb6dfb9c0f956447, + 0x8edf98b59a373fec,0x4724bd4189bd5eac, + 0xb2977ee300c50fe7,0x58edec91ec2cb657, + 0xdf3d5e9bc0f653e1,0x2f2967b66737e3ed, + 0x8b865b215899f46c,0xbd79e0d20082ee74, + 0xae67f1e9aec07187,0xecd8590680a3aa11, + 0xda01ee641a708de9,0xe80e6f4820cc9495, + 0x884134fe908658b2,0x3109058d147fdcdd, + 0xaa51823e34a7eede,0xbd4b46f0599fd415, + 0xd4e5e2cdc1d1ea96,0x6c9e18ac7007c91a, + 0x850fadc09923329e,0x3e2cf6bc604ddb0, + 0xa6539930bf6bff45,0x84db8346b786151c, + 0xcfe87f7cef46ff16,0xe612641865679a63, + 0x81f14fae158c5f6e,0x4fcb7e8f3f60c07e, + 0xa26da3999aef7749,0xe3be5e330f38f09d, + 0xcb090c8001ab551c,0x5cadf5bfd3072cc5, + 0xfdcb4fa002162a63,0x73d9732fc7c8f7f6, + 0x9e9f11c4014dda7e,0x2867e7fddcdd9afa, + 0xc646d63501a1511d,0xb281e1fd541501b8, + 0xf7d88bc24209a565,0x1f225a7ca91a4226, + 0x9ae757596946075f,0x3375788de9b06958, + 0xc1a12d2fc3978937,0x52d6b1641c83ae, + 0xf209787bb47d6b84,0xc0678c5dbd23a49a, + 0x9745eb4d50ce6332,0xf840b7ba963646e0, + 0xbd176620a501fbff,0xb650e5a93bc3d898, + 0xec5d3fa8ce427aff,0xa3e51f138ab4cebe, + 0x93ba47c980e98cdf,0xc66f336c36b10137, + 0xb8a8d9bbe123f017,0xb80b0047445d4184, + 0xe6d3102ad96cec1d,0xa60dc059157491e5, + 0x9043ea1ac7e41392,0x87c89837ad68db2f, + 0xb454e4a179dd1877,0x29babe4598c311fb, + 0xe16a1dc9d8545e94,0xf4296dd6fef3d67a, + 0x8ce2529e2734bb1d,0x1899e4a65f58660c, + 0xb01ae745b101e9e4,0x5ec05dcff72e7f8f, + 0xdc21a1171d42645d,0x76707543f4fa1f73, + 0x899504ae72497eba,0x6a06494a791c53a8, + 0xabfa45da0edbde69,0x487db9d17636892, + 0xd6f8d7509292d603,0x45a9d2845d3c42b6, + 0x865b86925b9bc5c2,0xb8a2392ba45a9b2, + 0xa7f26836f282b732,0x8e6cac7768d7141e, + 0xd1ef0244af2364ff,0x3207d795430cd926, + 0x8335616aed761f1f,0x7f44e6bd49e807b8, + 0xa402b9c5a8d3a6e7,0x5f16206c9c6209a6, + 0xcd036837130890a1,0x36dba887c37a8c0f, + 0x802221226be55a64,0xc2494954da2c9789, + 0xa02aa96b06deb0fd,0xf2db9baa10b7bd6c, + 0xc83553c5c8965d3d,0x6f92829494e5acc7, + 0xfa42a8b73abbf48c,0xcb772339ba1f17f9, + 0x9c69a97284b578d7,0xff2a760414536efb, + 0xc38413cf25e2d70d,0xfef5138519684aba, + 0xf46518c2ef5b8cd1,0x7eb258665fc25d69, + 0x98bf2f79d5993802,0xef2f773ffbd97a61, + 0xbeeefb584aff8603,0xaafb550ffacfd8fa, + 0xeeaaba2e5dbf6784,0x95ba2a53f983cf38, + 0x952ab45cfa97a0b2,0xdd945a747bf26183, + 0xba756174393d88df,0x94f971119aeef9e4, + 0xe912b9d1478ceb17,0x7a37cd5601aab85d, + 0x91abb422ccb812ee,0xac62e055c10ab33a, + 0xb616a12b7fe617aa,0x577b986b314d6009, + 0xe39c49765fdf9d94,0xed5a7e85fda0b80b, + 0x8e41ade9fbebc27d,0x14588f13be847307, + 0xb1d219647ae6b31c,0x596eb2d8ae258fc8, + 0xde469fbd99a05fe3,0x6fca5f8ed9aef3bb, + 0x8aec23d680043bee,0x25de7bb9480d5854, + 0xada72ccc20054ae9,0xaf561aa79a10ae6a, + 0xd910f7ff28069da4,0x1b2ba1518094da04, + 0x87aa9aff79042286,0x90fb44d2f05d0842, + 0xa99541bf57452b28,0x353a1607ac744a53, + 0xd3fa922f2d1675f2,0x42889b8997915ce8, + 0x847c9b5d7c2e09b7,0x69956135febada11, + 0xa59bc234db398c25,0x43fab9837e699095, + 0xcf02b2c21207ef2e,0x94f967e45e03f4bb, + 0x8161afb94b44f57d,0x1d1be0eebac278f5, + 0xa1ba1ba79e1632dc,0x6462d92a69731732, + 0xca28a291859bbf93,0x7d7b8f7503cfdcfe, + 0xfcb2cb35e702af78,0x5cda735244c3d43e, + 0x9defbf01b061adab,0x3a0888136afa64a7, + 0xc56baec21c7a1916,0x88aaa1845b8fdd0, + 0xf6c69a72a3989f5b,0x8aad549e57273d45, + 0x9a3c2087a63f6399,0x36ac54e2f678864b, + 0xc0cb28a98fcf3c7f,0x84576a1bb416a7dd, + 0xf0fdf2d3f3c30b9f,0x656d44a2a11c51d5, + 0x969eb7c47859e743,0x9f644ae5a4b1b325, + 0xbc4665b596706114,0x873d5d9f0dde1fee, + 0xeb57ff22fc0c7959,0xa90cb506d155a7ea, + 0x9316ff75dd87cbd8,0x9a7f12442d588f2, + 0xb7dcbf5354e9bece,0xc11ed6d538aeb2f, + 0xe5d3ef282a242e81,0x8f1668c8a86da5fa, + 0x8fa475791a569d10,0xf96e017d694487bc, + 0xb38d92d760ec4455,0x37c981dcc395a9ac, + 0xe070f78d3927556a,0x85bbe253f47b1417, + 0x8c469ab843b89562,0x93956d7478ccec8e, + 0xaf58416654a6babb,0x387ac8d1970027b2, + 0xdb2e51bfe9d0696a,0x6997b05fcc0319e, + 0x88fcf317f22241e2,0x441fece3bdf81f03, + 0xab3c2fddeeaad25a,0xd527e81cad7626c3, + 0xd60b3bd56a5586f1,0x8a71e223d8d3b074, + 0x85c7056562757456,0xf6872d5667844e49, + 0xa738c6bebb12d16c,0xb428f8ac016561db, + 0xd106f86e69d785c7,0xe13336d701beba52, + 0x82a45b450226b39c,0xecc0024661173473, + 0xa34d721642b06084,0x27f002d7f95d0190, + 0xcc20ce9bd35c78a5,0x31ec038df7b441f4, + 0xff290242c83396ce,0x7e67047175a15271, + 0x9f79a169bd203e41,0xf0062c6e984d386, + 0xc75809c42c684dd1,0x52c07b78a3e60868, + 0xf92e0c3537826145,0xa7709a56ccdf8a82, + 0x9bbcc7a142b17ccb,0x88a66076400bb691, + 0xc2abf989935ddbfe,0x6acff893d00ea435, + 0xf356f7ebf83552fe,0x583f6b8c4124d43, + 0x98165af37b2153de,0xc3727a337a8b704a, + 0xbe1bf1b059e9a8d6,0x744f18c0592e4c5c, + 0xeda2ee1c7064130c,0x1162def06f79df73, + 0x9485d4d1c63e8be7,0x8addcb5645ac2ba8, + 0xb9a74a0637ce2ee1,0x6d953e2bd7173692, + 0xe8111c87c5c1ba99,0xc8fa8db6ccdd0437, + 0x910ab1d4db9914a0,0x1d9c9892400a22a2, + 0xb54d5e4a127f59c8,0x2503beb6d00cab4b, + 0xe2a0b5dc971f303a,0x2e44ae64840fd61d, + 0x8da471a9de737e24,0x5ceaecfed289e5d2, + 0xb10d8e1456105dad,0x7425a83e872c5f47, + 0xdd50f1996b947518,0xd12f124e28f77719, + 0x8a5296ffe33cc92f,0x82bd6b70d99aaa6f, + 0xace73cbfdc0bfb7b,0x636cc64d1001550b, + 0xd8210befd30efa5a,0x3c47f7e05401aa4e, + 0x8714a775e3e95c78,0x65acfaec34810a71, + 0xa8d9d1535ce3b396,0x7f1839a741a14d0d, + 0xd31045a8341ca07c,0x1ede48111209a050, + 0x83ea2b892091e44d,0x934aed0aab460432, + 0xa4e4b66b68b65d60,0xf81da84d5617853f, + 0xce1de40642e3f4b9,0x36251260ab9d668e, + 0x80d2ae83e9ce78f3,0xc1d72b7c6b426019, + 0xa1075a24e4421730,0xb24cf65b8612f81f, + 0xc94930ae1d529cfc,0xdee033f26797b627, + 0xfb9b7cd9a4a7443c,0x169840ef017da3b1, + 0x9d412e0806e88aa5,0x8e1f289560ee864e, + 0xc491798a08a2ad4e,0xf1a6f2bab92a27e2, + 0xf5b5d7ec8acb58a2,0xae10af696774b1db, + 0x9991a6f3d6bf1765,0xacca6da1e0a8ef29, + 0xbff610b0cc6edd3f,0x17fd090a58d32af3, + 0xeff394dcff8a948e,0xddfc4b4cef07f5b0, + 0x95f83d0a1fb69cd9,0x4abdaf101564f98e, + 0xbb764c4ca7a4440f,0x9d6d1ad41abe37f1, + 0xea53df5fd18d5513,0x84c86189216dc5ed, + 0x92746b9be2f8552c,0x32fd3cf5b4e49bb4, + 0xb7118682dbb66a77,0x3fbc8c33221dc2a1, + 0xe4d5e82392a40515,0xfabaf3feaa5334a, + 0x8f05b1163ba6832d,0x29cb4d87f2a7400e, + 0xb2c71d5bca9023f8,0x743e20e9ef511012, + 0xdf78e4b2bd342cf6,0x914da9246b255416, + 0x8bab8eefb6409c1a,0x1ad089b6c2f7548e, + 0xae9672aba3d0c320,0xa184ac2473b529b1, + 0xda3c0f568cc4f3e8,0xc9e5d72d90a2741e, + 0x8865899617fb1871,0x7e2fa67c7a658892, + 0xaa7eebfb9df9de8d,0xddbb901b98feeab7, + 0xd51ea6fa85785631,0x552a74227f3ea565, + 0x8533285c936b35de,0xd53a88958f87275f, + 0xa67ff273b8460356,0x8a892abaf368f137, + 0xd01fef10a657842c,0x2d2b7569b0432d85, + 0x8213f56a67f6b29b,0x9c3b29620e29fc73, + 0xa298f2c501f45f42,0x8349f3ba91b47b8f, + 0xcb3f2f7642717713,0x241c70a936219a73, + 0xfe0efb53d30dd4d7,0xed238cd383aa0110, + 0x9ec95d1463e8a506,0xf4363804324a40aa, + 0xc67bb4597ce2ce48,0xb143c6053edcd0d5, + 0xf81aa16fdc1b81da,0xdd94b7868e94050a, + 0x9b10a4e5e9913128,0xca7cf2b4191c8326, + 0xc1d4ce1f63f57d72,0xfd1c2f611f63a3f0, + 0xf24a01a73cf2dccf,0xbc633b39673c8cec, + 0x976e41088617ca01,0xd5be0503e085d813, + 0xbd49d14aa79dbc82,0x4b2d8644d8a74e18, + 0xec9c459d51852ba2,0xddf8e7d60ed1219e, + 0x93e1ab8252f33b45,0xcabb90e5c942b503, + 0xb8da1662e7b00a17,0x3d6a751f3b936243, + 0xe7109bfba19c0c9d,0xcc512670a783ad4, + 0x906a617d450187e2,0x27fb2b80668b24c5, + 0xb484f9dc9641e9da,0xb1f9f660802dedf6, + 0xe1a63853bbd26451,0x5e7873f8a0396973, + 0x8d07e33455637eb2,0xdb0b487b6423e1e8, + 0xb049dc016abc5e5f,0x91ce1a9a3d2cda62, + 0xdc5c5301c56b75f7,0x7641a140cc7810fb, + 0x89b9b3e11b6329ba,0xa9e904c87fcb0a9d, + 0xac2820d9623bf429,0x546345fa9fbdcd44, + 0xd732290fbacaf133,0xa97c177947ad4095, + 0x867f59a9d4bed6c0,0x49ed8eabcccc485d, + 0xa81f301449ee8c70,0x5c68f256bfff5a74, + 0xd226fc195c6a2f8c,0x73832eec6fff3111, + 0x83585d8fd9c25db7,0xc831fd53c5ff7eab, + 0xa42e74f3d032f525,0xba3e7ca8b77f5e55, + 0xcd3a1230c43fb26f,0x28ce1bd2e55f35eb, + 0x80444b5e7aa7cf85,0x7980d163cf5b81b3, + 0xa0555e361951c366,0xd7e105bcc332621f, + 0xc86ab5c39fa63440,0x8dd9472bf3fefaa7, + 0xfa856334878fc150,0xb14f98f6f0feb951, + 0x9c935e00d4b9d8d2,0x6ed1bf9a569f33d3, + 0xc3b8358109e84f07,0xa862f80ec4700c8, + 0xf4a642e14c6262c8,0xcd27bb612758c0fa, + 0x98e7e9cccfbd7dbd,0x8038d51cb897789c, + 0xbf21e44003acdd2c,0xe0470a63e6bd56c3, + 0xeeea5d5004981478,0x1858ccfce06cac74, + 0x95527a5202df0ccb,0xf37801e0c43ebc8, + 0xbaa718e68396cffd,0xd30560258f54e6ba, + 0xe950df20247c83fd,0x47c6b82ef32a2069, + 0x91d28b7416cdd27e,0x4cdc331d57fa5441, + 0xb6472e511c81471d,0xe0133fe4adf8e952, + 0xe3d8f9e563a198e5,0x58180fddd97723a6, + 0x8e679c2f5e44ff8f,0x570f09eaa7ea7648,}; + +} + +#endif \ No newline at end of file diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_table.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@fast_table.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..f8f23d023f74537030f3985f3ec9d1399c3784e5 GIT binary patch literal 13600 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@float_common.h b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@float_common.h new file mode 100644 index 0000000..cb15ac2 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@float_common.h @@ -0,0 +1,340 @@ +#ifndef FASTFLOAT_FLOAT_COMMON_H +#define FASTFLOAT_FLOAT_COMMON_H + +#include +#include +#include + +#if (defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) \ + || defined(__amd64) || defined(__aarch64__) || defined(_M_ARM64) \ + || defined(__MINGW64__) \ + || defined(__s390x__) \ + || (defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || defined(__PPC64LE__))) +#define FASTFLOAT_64BIT +#elif (defined(__i386) || defined(__i386__) || defined(_M_IX86) \ + || defined(__arm__) \ + || defined(__MINGW32__)) +#define FASTFLOAT_32BIT +#else +#error Unknown platform (not 32-bit, not 64-bit?) +#endif + +#if ((defined(_WIN32) || defined(_WIN64)) && !defined(__clang__)) +#include +#endif + +#if defined(_MSC_VER) && !defined(__clang__) +#define FASTFLOAT_VISUAL_STUDIO 1 +#endif + +#ifdef _WIN32 +#define FASTFLOAT_IS_BIG_ENDIAN 0 +#else +#if defined(__APPLE__) || defined(__FreeBSD__) +#include +#else +#include +#endif +# +#ifndef __BYTE_ORDER__ +// safe choice +#define FASTFLOAT_IS_BIG_ENDIAN 0 +#endif +# +#ifndef __ORDER_LITTLE_ENDIAN__ +// safe choice +#define FASTFLOAT_IS_BIG_ENDIAN 0 +#endif +# +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define FASTFLOAT_IS_BIG_ENDIAN 0 +#else +#define FASTFLOAT_IS_BIG_ENDIAN 1 +#endif +#endif + +#ifdef FASTFLOAT_VISUAL_STUDIO +#define fastfloat_really_inline __forceinline +#else +#define fastfloat_really_inline inline __attribute__((always_inline)) +#endif + +namespace fast_float { + +// Compares two ASCII strings in a case insensitive manner. +inline bool fastfloat_strncasecmp(const char *input1, const char *input2, + size_t length) { + char running_diff{0}; + for (size_t i = 0; i < length; i++) { + running_diff |= (input1[i] ^ input2[i]); + } + return (running_diff == 0) || (running_diff == 32); +} + +#ifndef FLT_EVAL_METHOD +#error "FLT_EVAL_METHOD should be defined, please include cfloat." +#endif + +inline bool is_space(uint8_t c) { + static const bool table[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + return table[c]; +} + +namespace { +constexpr uint32_t max_digits = 768; +constexpr uint32_t max_digit_without_overflow = 19; +constexpr int32_t decimal_point_range = 2047; +} // namespace + +struct value128 { + uint64_t low; + uint64_t high; + value128(uint64_t _low, uint64_t _high) : low(_low), high(_high) {} + value128() : low(0), high(0) {} +}; + +/* result might be undefined when input_num is zero */ +fastfloat_really_inline int leading_zeroes(uint64_t input_num) { + assert(input_num > 0); +#ifdef FASTFLOAT_VISUAL_STUDIO + #if defined(_M_X64) || defined(_M_ARM64) + unsigned long leading_zero = 0; + // Search the mask data from most significant bit (MSB) + // to least significant bit (LSB) for a set bit (1). + _BitScanReverse64(&leading_zero, input_num); + return (int)(63 - leading_zero); + #else + int last_bit = 0; + if(input_num & uint64_t(0xffffffff00000000)) input_num >>= 32, last_bit |= 32; + if(input_num & uint64_t( 0xffff0000)) input_num >>= 16, last_bit |= 16; + if(input_num & uint64_t( 0xff00)) input_num >>= 8, last_bit |= 8; + if(input_num & uint64_t( 0xf0)) input_num >>= 4, last_bit |= 4; + if(input_num & uint64_t( 0xc)) input_num >>= 2, last_bit |= 2; + if(input_num & uint64_t( 0x2)) input_num >>= 1, last_bit |= 1; + return 63 - last_bit; + #endif +#else + return __builtin_clzll(input_num); +#endif +} + +#ifdef FASTFLOAT_32BIT + +#if (!defined(_WIN32)) || defined(__MINGW32__) +// slow emulation routine for 32-bit +fastfloat_really_inline uint64_t __emulu(uint32_t x, uint32_t y) { + return x * (uint64_t)y; +} +#endif + +// slow emulation routine for 32-bit +#if !defined(__MINGW64__) +fastfloat_really_inline uint64_t _umul128(uint64_t ab, uint64_t cd, + uint64_t *hi) { + uint64_t ad = __emulu((uint32_t)(ab >> 32), (uint32_t)cd); + uint64_t bd = __emulu((uint32_t)ab, (uint32_t)cd); + uint64_t adbc = ad + __emulu((uint32_t)ab, (uint32_t)(cd >> 32)); + uint64_t adbc_carry = !!(adbc < ad); + uint64_t lo = bd + (adbc << 32); + *hi = __emulu((uint32_t)(ab >> 32), (uint32_t)(cd >> 32)) + (adbc >> 32) + + (adbc_carry << 32) + !!(lo < bd); + return lo; +} +#endif // !__MINGW64__ + +#endif // FASTFLOAT_32BIT + + +// compute 64-bit a*b +fastfloat_really_inline value128 full_multiplication(uint64_t a, + uint64_t b) { + value128 answer; +#ifdef _M_ARM64 + // ARM64 has native support for 64-bit multiplications, no need to emulate + answer.high = __umulh(a, b); + answer.low = a * b; +#elif defined(FASTFLOAT_32BIT) || (defined(_WIN64) && !defined(__clang__)) + answer.low = _umul128(a, b, &answer.high); // _umul128 not available on ARM64 +#elif defined(FASTFLOAT_64BIT) + __uint128_t r = ((__uint128_t)a) * b; + answer.low = uint64_t(r); + answer.high = uint64_t(r >> 64); +#else + #error Not implemented +#endif + return answer; +} + + +struct adjusted_mantissa { + uint64_t mantissa{0}; + int power2{0}; // a negative value indicates an invalid result + adjusted_mantissa() = default; + bool operator==(const adjusted_mantissa &o) const { + return mantissa == o.mantissa && power2 == o.power2; + } + bool operator!=(const adjusted_mantissa &o) const { + return mantissa != o.mantissa || power2 != o.power2; + } +}; + +struct decimal { + uint32_t num_digits{0}; + int32_t decimal_point{0}; + bool negative{false}; + bool truncated{false}; + uint8_t digits[max_digits]; + decimal() = default; + // Copies are not allowed since this is a fat object. + decimal(const decimal &) = delete; + // Copies are not allowed since this is a fat object. + decimal &operator=(const decimal &) = delete; + // Moves are allowed: + decimal(decimal &&) = default; + decimal &operator=(decimal &&other) = default; +}; + +constexpr static double powers_of_ten_double[] = { + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, + 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22}; +constexpr static float powers_of_ten_float[] = {1e0, 1e1, 1e2, 1e3, 1e4, 1e5, + 1e6, 1e7, 1e8, 1e9, 1e10}; + +template struct binary_format { + static constexpr int mantissa_explicit_bits(); + static constexpr int minimum_exponent(); + static constexpr int infinite_power(); + static constexpr int sign_index(); + static constexpr int min_exponent_fast_path(); + static constexpr int max_exponent_fast_path(); + static constexpr int max_exponent_round_to_even(); + static constexpr int min_exponent_round_to_even(); + static constexpr uint64_t max_mantissa_fast_path(); + static constexpr int largest_power_of_ten(); + static constexpr int smallest_power_of_ten(); + static constexpr T exact_power_of_ten(int64_t power); +}; + +template <> constexpr int binary_format::mantissa_explicit_bits() { + return 52; +} +template <> constexpr int binary_format::mantissa_explicit_bits() { + return 23; +} + +template <> constexpr int binary_format::max_exponent_round_to_even() { + return 23; +} + +template <> constexpr int binary_format::max_exponent_round_to_even() { + return 10; +} + +template <> constexpr int binary_format::min_exponent_round_to_even() { + return -4; +} + +template <> constexpr int binary_format::min_exponent_round_to_even() { + return -17; +} + +template <> constexpr int binary_format::minimum_exponent() { + return -1023; +} +template <> constexpr int binary_format::minimum_exponent() { + return -127; +} + +template <> constexpr int binary_format::infinite_power() { + return 0x7FF; +} +template <> constexpr int binary_format::infinite_power() { + return 0xFF; +} + +template <> constexpr int binary_format::sign_index() { return 63; } +template <> constexpr int binary_format::sign_index() { return 31; } + +template <> constexpr int binary_format::min_exponent_fast_path() { +#if (FLT_EVAL_METHOD != 1) && (FLT_EVAL_METHOD != 0) + return 0; +#else + return -22; +#endif +} +template <> constexpr int binary_format::min_exponent_fast_path() { +#if (FLT_EVAL_METHOD != 1) && (FLT_EVAL_METHOD != 0) + return 0; +#else + return -10; +#endif +} + +template <> constexpr int binary_format::max_exponent_fast_path() { + return 22; +} +template <> constexpr int binary_format::max_exponent_fast_path() { + return 10; +} + +template <> constexpr uint64_t binary_format::max_mantissa_fast_path() { + return uint64_t(2) << mantissa_explicit_bits(); +} +template <> constexpr uint64_t binary_format::max_mantissa_fast_path() { + return uint64_t(2) << mantissa_explicit_bits(); +} + +template <> +constexpr double binary_format::exact_power_of_ten(int64_t power) { + return powers_of_ten_double[power]; +} +template <> +constexpr float binary_format::exact_power_of_ten(int64_t power) { + + return powers_of_ten_float[power]; +} + + +template <> +constexpr int binary_format::largest_power_of_ten() { + return 308; +} +template <> +constexpr int binary_format::largest_power_of_ten() { + return 38; +} + +template <> +constexpr int binary_format::smallest_power_of_ten() { + return -342; +} +template <> +constexpr int binary_format::smallest_power_of_ten() { + return -65; +} + +} // namespace fast_float + +// for convenience: +template +inline OStream& operator<<(OStream &out, const fast_float::decimal &d) { + out << "0."; + for (size_t i = 0; i < d.num_digits; i++) { + out << int32_t(d.digits[i]); + } + out << " * 10 ** " << d.decimal_point; + return out; +} + +#endif \ No newline at end of file diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@float_common.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@float_common.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..55ea47eded12e9b0eed31b9ee02ec14d9199a6d9 GIT binary patch literal 22329 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 UX$s%=`t6NH;*Q20O-17W0j9t@UjP6A literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@parse_number.h b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@parse_number.h new file mode 100644 index 0000000..f69b741 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@parse_number.h @@ -0,0 +1,136 @@ +#ifndef FASTFLOAT_PARSE_NUMBER_H +#define FASTFLOAT_PARSE_NUMBER_H +#include "ascii_number.h" +#include "decimal_to_binary.h" +#include "simple_decimal_conversion.h" + +#include +#include +#include +#include +#include + +namespace fast_float { + + +namespace { +/** + * Special case +inf, -inf, nan, infinity, -infinity. + * The case comparisons could be made much faster given that we know that the + * strings a null-free and fixed. + **/ +template +from_chars_result parse_infnan(const char *first, const char *last, T &value) noexcept { + from_chars_result answer; + answer.ec = std::errc(); // be optimistic + if (last - first >= 3) { + if (fastfloat_strncasecmp(first, "nan", 3)) { + answer.ptr = first + 3; + value = std::numeric_limits::quiet_NaN(); + return answer; + } + if (fastfloat_strncasecmp(first, "inf", 3)) { + if ((last - first >= 8) && fastfloat_strncasecmp(first, "infinity", 8)) { + answer.ptr = first + 8; + } else { + answer.ptr = first + 3; + } + value = std::numeric_limits::infinity(); + return answer; + } + if (last - first >= 4) { + if (fastfloat_strncasecmp(first, "+nan", 4) || fastfloat_strncasecmp(first, "-nan", 4)) { + answer.ptr = first + 4; + value = std::numeric_limits::quiet_NaN(); + if (first[0] == '-') { + value = -value; + } + return answer; + } + + if (fastfloat_strncasecmp(first, "+inf", 4) || fastfloat_strncasecmp(first, "-inf", 4)) { + if ((last - first >= 8) && fastfloat_strncasecmp(first + 1, "infinity", 8)) { + answer.ptr = first + 9; + } else { + answer.ptr = first + 4; + } + value = std::numeric_limits::infinity(); + if (first[0] == '-') { + value = -value; + } + return answer; + } + } + } + answer.ec = std::errc::invalid_argument; + answer.ptr = first; + return answer; +} + +template +fastfloat_really_inline void to_float(bool negative, adjusted_mantissa am, T &value) { + uint64_t word = am.mantissa; + word |= uint64_t(am.power2) << binary_format::mantissa_explicit_bits(); + word = negative + ? word | (uint64_t(1) << binary_format::sign_index()) : word; +#if FASTFLOAT_IS_BIG_ENDIAN == 1 + if (std::is_same::value) { + ::memcpy(&value, (char *)&word + 4, sizeof(T)); // extract value at offset 4-7 if float on big-endian + } else { + ::memcpy(&value, &word, sizeof(T)); + } +#else + // For little-endian systems: + ::memcpy(&value, &word, sizeof(T)); +#endif +} + +} // namespace + + + +template +from_chars_result from_chars(const char *first, const char *last, + T &value, chars_format fmt /*= chars_format::general*/) noexcept { + static_assert (std::is_same::value || std::is_same::value, "only float and double are supported"); + + + from_chars_result answer; + while ((first != last) && fast_float::is_space(uint8_t(*first))) { + first++; + } + if (first == last) { + answer.ec = std::errc::invalid_argument; + answer.ptr = first; + return answer; + } + parsed_number_string pns = parse_number_string(first, last, fmt); + if (!pns.valid) { + return parse_infnan(first, last, value); + } + answer.ec = std::errc(); // be optimistic + answer.ptr = pns.lastmatch; + // Next is Clinger's fast path. + if (binary_format::min_exponent_fast_path() <= pns.exponent && pns.exponent <= binary_format::max_exponent_fast_path() && pns.mantissa <=binary_format::max_mantissa_fast_path() && !pns.too_many_digits) { + value = T(pns.mantissa); + if (pns.exponent < 0) { value = value / binary_format::exact_power_of_ten(-pns.exponent); } + else { value = value * binary_format::exact_power_of_ten(pns.exponent); } + if (pns.negative) { value = -value; } + return answer; + } + adjusted_mantissa am = compute_float>(pns.exponent, pns.mantissa); + if(pns.too_many_digits) { + if(am != compute_float>(pns.exponent, pns.mantissa + 1)) { + am.power2 = -1; // value is invalid. + } + } + // If we called compute_float>(pns.exponent, pns.mantissa) and we have an invalid power (am.power2 < 0), + // then we need to go the long way around again. This is very uncommon. + if(am.power2 < 0) { am = parse_long_mantissa>(first,last); } + to_float(pns.negative, am, value); + return answer; +} + +} // namespace fast_float + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@parse_number.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@parse_number.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..c6af3cdbfcd4172430208a4c26791160e0022c46 GIT binary patch literal 20966 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 + +namespace fast_float { + +namespace { + +// remove all final zeroes +inline void trim(decimal &h) { + while ((h.num_digits > 0) && (h.digits[h.num_digits - 1] == 0)) { + h.num_digits--; + } +} + + + +uint32_t number_of_digits_decimal_left_shift(const decimal &h, uint32_t shift) { + shift &= 63; + const static uint16_t number_of_digits_decimal_left_shift_table[65] = { + 0x0000, 0x0800, 0x0801, 0x0803, 0x1006, 0x1009, 0x100D, 0x1812, 0x1817, + 0x181D, 0x2024, 0x202B, 0x2033, 0x203C, 0x2846, 0x2850, 0x285B, 0x3067, + 0x3073, 0x3080, 0x388E, 0x389C, 0x38AB, 0x38BB, 0x40CC, 0x40DD, 0x40EF, + 0x4902, 0x4915, 0x4929, 0x513E, 0x5153, 0x5169, 0x5180, 0x5998, 0x59B0, + 0x59C9, 0x61E3, 0x61FD, 0x6218, 0x6A34, 0x6A50, 0x6A6D, 0x6A8B, 0x72AA, + 0x72C9, 0x72E9, 0x7B0A, 0x7B2B, 0x7B4D, 0x8370, 0x8393, 0x83B7, 0x83DC, + 0x8C02, 0x8C28, 0x8C4F, 0x9477, 0x949F, 0x94C8, 0x9CF2, 0x051C, 0x051C, + 0x051C, 0x051C, + }; + uint32_t x_a = number_of_digits_decimal_left_shift_table[shift]; + uint32_t x_b = number_of_digits_decimal_left_shift_table[shift + 1]; + uint32_t num_new_digits = x_a >> 11; + uint32_t pow5_a = 0x7FF & x_a; + uint32_t pow5_b = 0x7FF & x_b; + const static uint8_t + number_of_digits_decimal_left_shift_table_powers_of_5[0x051C] = { + 5, 2, 5, 1, 2, 5, 6, 2, 5, 3, 1, 2, 5, 1, 5, 6, 2, 5, 7, 8, 1, 2, 5, 3, + 9, 0, 6, 2, 5, 1, 9, 5, 3, 1, 2, 5, 9, 7, 6, 5, 6, 2, 5, 4, 8, 8, 2, 8, + 1, 2, 5, 2, 4, 4, 1, 4, 0, 6, 2, 5, 1, 2, 2, 0, 7, 0, 3, 1, 2, 5, 6, 1, + 0, 3, 5, 1, 5, 6, 2, 5, 3, 0, 5, 1, 7, 5, 7, 8, 1, 2, 5, 1, 5, 2, 5, 8, + 7, 8, 9, 0, 6, 2, 5, 7, 6, 2, 9, 3, 9, 4, 5, 3, 1, 2, 5, 3, 8, 1, 4, 6, + 9, 7, 2, 6, 5, 6, 2, 5, 1, 9, 0, 7, 3, 4, 8, 6, 3, 2, 8, 1, 2, 5, 9, 5, + 3, 6, 7, 4, 3, 1, 6, 4, 0, 6, 2, 5, 4, 7, 6, 8, 3, 7, 1, 5, 8, 2, 0, 3, + 1, 2, 5, 2, 3, 8, 4, 1, 8, 5, 7, 9, 1, 0, 1, 5, 6, 2, 5, 1, 1, 9, 2, 0, + 9, 2, 8, 9, 5, 5, 0, 7, 8, 1, 2, 5, 5, 9, 6, 0, 4, 6, 4, 4, 7, 7, 5, 3, + 9, 0, 6, 2, 5, 2, 9, 8, 0, 2, 3, 2, 2, 3, 8, 7, 6, 9, 5, 3, 1, 2, 5, 1, + 4, 9, 0, 1, 1, 6, 1, 1, 9, 3, 8, 4, 7, 6, 5, 6, 2, 5, 7, 4, 5, 0, 5, 8, + 0, 5, 9, 6, 9, 2, 3, 8, 2, 8, 1, 2, 5, 3, 7, 2, 5, 2, 9, 0, 2, 9, 8, 4, + 6, 1, 9, 1, 4, 0, 6, 2, 5, 1, 8, 6, 2, 6, 4, 5, 1, 4, 9, 2, 3, 0, 9, 5, + 7, 0, 3, 1, 2, 5, 9, 3, 1, 3, 2, 2, 5, 7, 4, 6, 1, 5, 4, 7, 8, 5, 1, 5, + 6, 2, 5, 4, 6, 5, 6, 6, 1, 2, 8, 7, 3, 0, 7, 7, 3, 9, 2, 5, 7, 8, 1, 2, + 5, 2, 3, 2, 8, 3, 0, 6, 4, 3, 6, 5, 3, 8, 6, 9, 6, 2, 8, 9, 0, 6, 2, 5, + 1, 1, 6, 4, 1, 5, 3, 2, 1, 8, 2, 6, 9, 3, 4, 8, 1, 4, 4, 5, 3, 1, 2, 5, + 5, 8, 2, 0, 7, 6, 6, 0, 9, 1, 3, 4, 6, 7, 4, 0, 7, 2, 2, 6, 5, 6, 2, 5, + 2, 9, 1, 0, 3, 8, 3, 0, 4, 5, 6, 7, 3, 3, 7, 0, 3, 6, 1, 3, 2, 8, 1, 2, + 5, 1, 4, 5, 5, 1, 9, 1, 5, 2, 2, 8, 3, 6, 6, 8, 5, 1, 8, 0, 6, 6, 4, 0, + 6, 2, 5, 7, 2, 7, 5, 9, 5, 7, 6, 1, 4, 1, 8, 3, 4, 2, 5, 9, 0, 3, 3, 2, + 0, 3, 1, 2, 5, 3, 6, 3, 7, 9, 7, 8, 8, 0, 7, 0, 9, 1, 7, 1, 2, 9, 5, 1, + 6, 6, 0, 1, 5, 6, 2, 5, 1, 8, 1, 8, 9, 8, 9, 4, 0, 3, 5, 4, 5, 8, 5, 6, + 4, 7, 5, 8, 3, 0, 0, 7, 8, 1, 2, 5, 9, 0, 9, 4, 9, 4, 7, 0, 1, 7, 7, 2, + 9, 2, 8, 2, 3, 7, 9, 1, 5, 0, 3, 9, 0, 6, 2, 5, 4, 5, 4, 7, 4, 7, 3, 5, + 0, 8, 8, 6, 4, 6, 4, 1, 1, 8, 9, 5, 7, 5, 1, 9, 5, 3, 1, 2, 5, 2, 2, 7, + 3, 7, 3, 6, 7, 5, 4, 4, 3, 2, 3, 2, 0, 5, 9, 4, 7, 8, 7, 5, 9, 7, 6, 5, + 6, 2, 5, 1, 1, 3, 6, 8, 6, 8, 3, 7, 7, 2, 1, 6, 1, 6, 0, 2, 9, 7, 3, 9, + 3, 7, 9, 8, 8, 2, 8, 1, 2, 5, 5, 6, 8, 4, 3, 4, 1, 8, 8, 6, 0, 8, 0, 8, + 0, 1, 4, 8, 6, 9, 6, 8, 9, 9, 4, 1, 4, 0, 6, 2, 5, 2, 8, 4, 2, 1, 7, 0, + 9, 4, 3, 0, 4, 0, 4, 0, 0, 7, 4, 3, 4, 8, 4, 4, 9, 7, 0, 7, 0, 3, 1, 2, + 5, 1, 4, 2, 1, 0, 8, 5, 4, 7, 1, 5, 2, 0, 2, 0, 0, 3, 7, 1, 7, 4, 2, 2, + 4, 8, 5, 3, 5, 1, 5, 6, 2, 5, 7, 1, 0, 5, 4, 2, 7, 3, 5, 7, 6, 0, 1, 0, + 0, 1, 8, 5, 8, 7, 1, 1, 2, 4, 2, 6, 7, 5, 7, 8, 1, 2, 5, 3, 5, 5, 2, 7, + 1, 3, 6, 7, 8, 8, 0, 0, 5, 0, 0, 9, 2, 9, 3, 5, 5, 6, 2, 1, 3, 3, 7, 8, + 9, 0, 6, 2, 5, 1, 7, 7, 6, 3, 5, 6, 8, 3, 9, 4, 0, 0, 2, 5, 0, 4, 6, 4, + 6, 7, 7, 8, 1, 0, 6, 6, 8, 9, 4, 5, 3, 1, 2, 5, 8, 8, 8, 1, 7, 8, 4, 1, + 9, 7, 0, 0, 1, 2, 5, 2, 3, 2, 3, 3, 8, 9, 0, 5, 3, 3, 4, 4, 7, 2, 6, 5, + 6, 2, 5, 4, 4, 4, 0, 8, 9, 2, 0, 9, 8, 5, 0, 0, 6, 2, 6, 1, 6, 1, 6, 9, + 4, 5, 2, 6, 6, 7, 2, 3, 6, 3, 2, 8, 1, 2, 5, 2, 2, 2, 0, 4, 4, 6, 0, 4, + 9, 2, 5, 0, 3, 1, 3, 0, 8, 0, 8, 4, 7, 2, 6, 3, 3, 3, 6, 1, 8, 1, 6, 4, + 0, 6, 2, 5, 1, 1, 1, 0, 2, 2, 3, 0, 2, 4, 6, 2, 5, 1, 5, 6, 5, 4, 0, 4, + 2, 3, 6, 3, 1, 6, 6, 8, 0, 9, 0, 8, 2, 0, 3, 1, 2, 5, 5, 5, 5, 1, 1, 1, + 5, 1, 2, 3, 1, 2, 5, 7, 8, 2, 7, 0, 2, 1, 1, 8, 1, 5, 8, 3, 4, 0, 4, 5, + 4, 1, 0, 1, 5, 6, 2, 5, 2, 7, 7, 5, 5, 5, 7, 5, 6, 1, 5, 6, 2, 8, 9, 1, + 3, 5, 1, 0, 5, 9, 0, 7, 9, 1, 7, 0, 2, 2, 7, 0, 5, 0, 7, 8, 1, 2, 5, 1, + 3, 8, 7, 7, 7, 8, 7, 8, 0, 7, 8, 1, 4, 4, 5, 6, 7, 5, 5, 2, 9, 5, 3, 9, + 5, 8, 5, 1, 1, 3, 5, 2, 5, 3, 9, 0, 6, 2, 5, 6, 9, 3, 8, 8, 9, 3, 9, 0, + 3, 9, 0, 7, 2, 2, 8, 3, 7, 7, 6, 4, 7, 6, 9, 7, 9, 2, 5, 5, 6, 7, 6, 2, + 6, 9, 5, 3, 1, 2, 5, 3, 4, 6, 9, 4, 4, 6, 9, 5, 1, 9, 5, 3, 6, 1, 4, 1, + 8, 8, 8, 2, 3, 8, 4, 8, 9, 6, 2, 7, 8, 3, 8, 1, 3, 4, 7, 6, 5, 6, 2, 5, + 1, 7, 3, 4, 7, 2, 3, 4, 7, 5, 9, 7, 6, 8, 0, 7, 0, 9, 4, 4, 1, 1, 9, 2, + 4, 4, 8, 1, 3, 9, 1, 9, 0, 6, 7, 3, 8, 2, 8, 1, 2, 5, 8, 6, 7, 3, 6, 1, + 7, 3, 7, 9, 8, 8, 4, 0, 3, 5, 4, 7, 2, 0, 5, 9, 6, 2, 2, 4, 0, 6, 9, 5, + 9, 5, 3, 3, 6, 9, 1, 4, 0, 6, 2, 5, + }; + const uint8_t *pow5 = + &number_of_digits_decimal_left_shift_table_powers_of_5[pow5_a]; + uint32_t i = 0; + uint32_t n = pow5_b - pow5_a; + for (; i < n; i++) { + if (i >= h.num_digits) { + return num_new_digits - 1; + } else if (h.digits[i] == pow5[i]) { + continue; + } else if (h.digits[i] < pow5[i]) { + return num_new_digits - 1; + } else { + return num_new_digits; + } + } + return num_new_digits; +} + +uint64_t round(decimal &h) { + if ((h.num_digits == 0) || (h.decimal_point < 0)) { + return 0; + } else if (h.decimal_point > 18) { + return UINT64_MAX; + } + // at this point, we know that h.decimal_point >= 0 + uint32_t dp = uint32_t(h.decimal_point); + uint64_t n = 0; + for (uint32_t i = 0; i < dp; i++) { + n = (10 * n) + ((i < h.num_digits) ? h.digits[i] : 0); + } + bool round_up = false; + if (dp < h.num_digits) { + round_up = h.digits[dp] >= 5; // normally, we round up + // but we may need to round to even! + if ((h.digits[dp] == 5) && (dp + 1 == h.num_digits)) { + round_up = h.truncated || ((dp > 0) && (1 & h.digits[dp - 1])); + } + } + if (round_up) { + n++; + } + return n; +} + +// computes h * 2^-shift +void decimal_left_shift(decimal &h, uint32_t shift) { + if (h.num_digits == 0) { + return; + } + uint32_t num_new_digits = number_of_digits_decimal_left_shift(h, shift); + int32_t read_index = int32_t(h.num_digits - 1); + uint32_t write_index = h.num_digits - 1 + num_new_digits; + uint64_t n = 0; + + while (read_index >= 0) { + n += uint64_t(h.digits[read_index]) << shift; + uint64_t quotient = n / 10; + uint64_t remainder = n - (10 * quotient); + if (write_index < max_digits) { + h.digits[write_index] = uint8_t(remainder); + } else if (remainder > 0) { + h.truncated = true; + } + n = quotient; + write_index--; + read_index--; + } + while (n > 0) { + uint64_t quotient = n / 10; + uint64_t remainder = n - (10 * quotient); + if (write_index < max_digits) { + h.digits[write_index] = uint8_t(remainder); + } else if (remainder > 0) { + h.truncated = true; + } + n = quotient; + write_index--; + } + h.num_digits += num_new_digits; + if (h.num_digits > max_digits) { + h.num_digits = max_digits; + } + h.decimal_point += int32_t(num_new_digits); + trim(h); +} + +// computes h * 2^shift +void decimal_right_shift(decimal &h, uint32_t shift) { + uint32_t read_index = 0; + uint32_t write_index = 0; + + uint64_t n = 0; + + while ((n >> shift) == 0) { + if (read_index < h.num_digits) { + n = (10 * n) + h.digits[read_index++]; + } else if (n == 0) { + return; + } else { + while ((n >> shift) == 0) { + n = 10 * n; + read_index++; + } + break; + } + } + h.decimal_point -= int32_t(read_index - 1); + if (h.decimal_point < -decimal_point_range) { // it is zero + h.num_digits = 0; + h.decimal_point = 0; + h.negative = false; + h.truncated = false; + return; + } + uint64_t mask = (uint64_t(1) << shift) - 1; + while (read_index < h.num_digits) { + uint8_t new_digit = uint8_t(n >> shift); + n = (10 * (n & mask)) + h.digits[read_index++]; + h.digits[write_index++] = new_digit; + } + while (n > 0) { + uint8_t new_digit = uint8_t(n >> shift); + n = 10 * (n & mask); + if (write_index < max_digits) { + h.digits[write_index++] = new_digit; + } else if (new_digit > 0) { + h.truncated = true; + } + } + h.num_digits = write_index; + trim(h); +} + +} // end of anonymous namespace + +template +adjusted_mantissa compute_float(decimal &d) { + adjusted_mantissa answer; + if (d.num_digits == 0) { + // should be zero + answer.power2 = 0; + answer.mantissa = 0; + return answer; + } + // At this point, going further, we can assume that d.num_digits > 0. + // + // We want to guard against excessive decimal point values because + // they can result in long running times. Indeed, we do + // shifts by at most 60 bits. We have that log(10**400)/log(2**60) ~= 22 + // which is fine, but log(10**299995)/log(2**60) ~= 16609 which is not + // fine (runs for a long time). + // + if(d.decimal_point < -324) { + // We have something smaller than 1e-324 which is always zero + // in binary64 and binary32. + // It should be zero. + answer.power2 = 0; + answer.mantissa = 0; + return answer; + } else if(d.decimal_point >= 310) { + // We have something at least as large as 0.1e310 which is + // always infinite. + answer.power2 = binary::infinite_power(); + answer.mantissa = 0; + return answer; + } + static const uint32_t max_shift = 60; + static const uint32_t num_powers = 19; + static const uint8_t powers[19] = { + 0, 3, 6, 9, 13, 16, 19, 23, 26, 29, // + 33, 36, 39, 43, 46, 49, 53, 56, 59, // + }; + int32_t exp2 = 0; + while (d.decimal_point > 0) { + uint32_t n = uint32_t(d.decimal_point); + uint32_t shift = (n < num_powers) ? powers[n] : max_shift; + decimal_right_shift(d, shift); + if (d.decimal_point < -decimal_point_range) { + // should be zero + answer.power2 = 0; + answer.mantissa = 0; + return answer; + } + exp2 += int32_t(shift); + } + // We shift left toward [1/2 ... 1]. + while (d.decimal_point <= 0) { + uint32_t shift; + if (d.decimal_point == 0) { + if (d.digits[0] >= 5) { + break; + } + shift = (d.digits[0] < 2) ? 2 : 1; + } else { + uint32_t n = uint32_t(-d.decimal_point); + shift = (n < num_powers) ? powers[n] : max_shift; + } + decimal_left_shift(d, shift); + if (d.decimal_point > decimal_point_range) { + // we want to get infinity: + answer.power2 = binary::infinite_power(); + answer.mantissa = 0; + return answer; + } + exp2 -= int32_t(shift); + } + // We are now in the range [1/2 ... 1] but the binary format uses [1 ... 2]. + exp2--; + constexpr int32_t minimum_exponent = binary::minimum_exponent(); + while ((minimum_exponent + 1) > exp2) { + uint32_t n = uint32_t((minimum_exponent + 1) - exp2); + if (n > max_shift) { + n = max_shift; + } + decimal_right_shift(d, n); + exp2 += int32_t(n); + } + if ((exp2 - minimum_exponent) >= binary::infinite_power()) { + answer.power2 = binary::infinite_power(); + answer.mantissa = 0; + return answer; + } + + const int mantissa_size_in_bits = binary::mantissa_explicit_bits() + 1; + decimal_left_shift(d, mantissa_size_in_bits); + + uint64_t mantissa = round(d); + // It is possible that we have an overflow, in which case we need + // to shift back. + if(mantissa >= (uint64_t(1) << mantissa_size_in_bits)) { + decimal_right_shift(d, 1); + exp2 += 1; + mantissa = round(d); + if ((exp2 - minimum_exponent) >= binary::infinite_power()) { + answer.power2 = binary::infinite_power(); + answer.mantissa = 0; + return answer; + } + } + answer.power2 = exp2 - binary::minimum_exponent(); + if(mantissa < (uint64_t(1) << binary::mantissa_explicit_bits())) { answer.power2--; } + answer.mantissa = mantissa & ((uint64_t(1) << binary::mantissa_explicit_bits()) - 1); + return answer; +} + +template +adjusted_mantissa parse_long_mantissa(const char *first, const char* last) { + decimal d = parse_decimal(first, last); + return compute_float(d); +} + +} // namespace fast_float +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@simple_decimal_conversion.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@fast_float@simple_decimal_conversion.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..e87de7a3592698e60bb54cd4cf65aed8edaf6f7a GIT binary patch literal 24844 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 Vcm;vG4Aazz0_Ph9sziZk{2zL6avT5v literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@common.hpp b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@common.hpp new file mode 100644 index 0000000..0398a96 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@common.hpp @@ -0,0 +1,76 @@ +#pragma once +#include + +namespace ss { + +struct none {}; + +using string_range = std::pair; +using split_data = std::vector; + +constexpr inline auto default_delimiter = ","; + +template +inline void assert_string_error_defined() { + static_assert(StringError, + "'string_error' needs to be enabled to use 'error_msg'"); +} + +#if defined(_WIN64) || defined(_WIN32) +#include +using ssize_t = int64_t; +inline ssize_t get_line(char** lineptr, size_t* n, FILE* stream) { + size_t pos; + int c; + + if (lineptr == nullptr || stream == nullptr || n == nullptr) { + errno = EINVAL; + return -1; + } + + c = getc(stream); + if (c == EOF) { + return -1; + } + + if (*lineptr == nullptr) { + *lineptr = static_cast(malloc(128)); + if (*lineptr == nullptr) { + return -1; + } + *n = 128; + } + + pos = 0; + while (c != EOF) { + if (pos + 1 >= *n) { + size_t new_size = *n + (*n >> 2); + if (new_size < 128) { + new_size = 128; + } + char* new_ptr = static_cast( + realloc(static_cast(*lineptr), new_size)); + if (new_ptr == nullptr) { + return -1; + } + *n = new_size; + *lineptr = new_ptr; + } + + (*lineptr)[pos++] = c; + if (c == '\n') { + break; + } + c = getc(stream); + } + + (*lineptr)[pos] = '\0'; + return pos; +} +#else +inline ssize_t get_line(char** lineptr, size_t* n, FILE* stream) { + return getline(lineptr, n, stream); +} +#endif + +} /* ss */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@common.hpp.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@common.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..827c451c628d10c525bf2d74c8f74eeaa090eb7d GIT binary patch literal 13720 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 +#include +#include + +namespace ss { +INIT_HAS_METHOD(tied) +INIT_HAS_METHOD(ss_valid) +INIT_HAS_METHOD(error) + +//////////////// +// replace validator +//////////////// + +// replace 'validator' types with elements they operate on +// eg. no_validator_tup_t> <=> std::tuple +// where ss::nx is a validator '(n)one e(x)cept' which +// checks if the returned character is either 'A' or 'B', returns error if not +// additionally if one element is left in the pack, it will be unwrapped from +// the tuple eg. no_void_validator_tup_t <=> int instead of std::tuple +template +struct no_validator; + +template +struct no_validator>> { + using type = typename member_wrapper::arg_type; +}; + +template +struct no_validator { + using type = T; +}; + +template +using no_validator_t = typename no_validator::type; + +template +struct no_validator_tup : apply_trait> {}; + +template +struct no_validator_tup> : no_validator_tup {}; + +template +struct no_validator_tup> : no_validator {}; + +template +using no_validator_tup_t = typename no_validator_tup::type; + +//////////////// +// no void tuple +//////////////// + +template +struct no_void_tup : filter_not> {}; + +template +using no_void_tup_t = filter_not_t; + +//////////////// +// no void or validator +//////////////// + +// replace 'validators' and remove void from tuple +template +struct no_void_validator_tup : no_validator_tup> {}; + +template +struct no_void_validator_tup> + : no_validator_tup> {}; + +template +using no_void_validator_tup_t = typename no_void_validator_tup::type; + +//////////////// +// tied class +//////////////// + +// check if the parameter pack is only one element which is a class and has +// the 'tied' method which is to be used for type deduction when converting +template +struct tied_class { + constexpr static bool value = + (sizeof...(Ts) == 0 && std::is_class_v && has_m_tied::value); +}; + +template +constexpr bool tied_class_v = tied_class::value; + +//////////////// +// converter +//////////////// + +template +class converter { + using line_ptr_type = typename splitter::line_ptr_type; + + constexpr static auto string_error = setup::string_error; + constexpr static auto default_delimiter = ","; + + using error_type = ss::ternary_t; + +public: + // parses line with given delimiter, returns a 'T' object created with + // extracted values of type 'Ts' + template + T convert_object(line_ptr_type line, + const std::string& delim = default_delimiter) { + return to_object(convert(line, delim)); + } + + // parses line with given delimiter, returns tuple of objects with + // extracted values of type 'Ts' + template + no_void_validator_tup_t convert( + line_ptr_type line, const std::string& delim = default_delimiter) { + split(line, delim); + return convert(splitter_.split_data_); + } + + // parses already split line, returns 'T' object with extracted values + template + T convert_object(const split_data& elems) { + return to_object(convert(elems)); + } + + // same as above, but uses cached split line + template + T convert_object() { + return to_object(convert()); + } + + // parses already split line, returns either a tuple of objects with + // parsed values (returns raw element (no tuple) if Ts is empty), or if + // one argument is given which is a class which has a tied + // method which returns a tuple, returns that type + template + no_void_validator_tup_t convert(const split_data& elems) { + if constexpr (sizeof...(Ts) == 0 && is_instance_of_v) { + return convert_impl(elems, static_cast(nullptr)); + } else if constexpr (tied_class_v) { + using arg_ref_tuple = std::result_of_t; + using arg_tuple = apply_trait_t; + + return to_object( + convert_impl(elems, static_cast(nullptr))); + } else { + return convert_impl(elems); + } + } + + // same as above, but uses cached split line + template + no_void_validator_tup_t convert() { + return convert(splitter_.split_data_); + } + + bool valid() const { + if constexpr (string_error) { + return error_.empty(); + } else { + return !error_; + } + } + + const std::string& error_msg() const { + assert_string_error_defined(); + return error_; + } + + bool unterminated_quote() const { + return splitter_.unterminated_quote(); + } + + // 'splits' string by given delimiter, returns vector of pairs which + // contain the beginnings and the ends of each column of the string + const split_data& split(line_ptr_type line, + const std::string& delim = default_delimiter) { + splitter_.split_data_.clear(); + if (line[0] == '\0') { + return splitter_.split_data_; + } + + return splitter_.split(line, delim); + } + +private: + //////////////// + // resplit + //////////////// + + const split_data& resplit(line_ptr_type new_line, ssize_t new_size, + const std::string& delim = default_delimiter) { + return splitter_.resplit(new_line, new_size, delim); + } + + size_t size_shifted() { + return splitter_.size_shifted(); + } + + //////////////// + // error + //////////////// + + void clear_error() { + if constexpr (string_error) { + error_.clear(); + } else { + error_ = false; + } + } + + std::string error_sufix(const string_range msg, size_t pos) const { + std::string error; + error.reserve(32); + error.append("at column ") + .append(std::to_string(pos + 1)) + .append(": \'") + .append(msg.first, msg.second) + .append("\'"); + return error; + } + + void set_error_unterminated_quote() { + if constexpr (string_error) { + error_.clear(); + error_.append(splitter_.error_msg()); + } else { + error_ = true; + } + } + + void set_error_multiline_limit_reached() { + if constexpr (string_error) { + error_.clear(); + error_.append("multiline limit reached."); + } else { + error_ = true; + } + } + + void set_error_invalid_conversion(const string_range msg, size_t pos) { + if constexpr (string_error) { + error_.clear(); + error_.append("invalid conversion for parameter ") + .append(error_sufix(msg, pos)); + } else { + error_ = true; + } + } + + void set_error_validate(const char* const error, const string_range msg, + size_t pos) { + if constexpr (string_error) { + error_.clear(); + error_.append(error).append(" ").append(error_sufix(msg, pos)); + } else { + error_ = true; + } + } + + void set_error_number_of_colums(size_t expected_pos, size_t pos) { + if constexpr (string_error) { + error_.clear(); + error_.append("invalid number of columns, expected: ") + .append(std::to_string(expected_pos)) + .append(", got: ") + .append(std::to_string(pos)); + } else { + error_ = true; + } + } + + //////////////// + // convert implementation + //////////////// + + template + no_void_validator_tup_t convert_impl(const split_data& elems) { + clear_error(); + + if (!splitter_.valid()) { + set_error_unterminated_quote(); + no_void_validator_tup_t ret{}; + return ret; + } + + if (sizeof...(Ts) != elems.size()) { + set_error_number_of_colums(sizeof...(Ts), elems.size()); + no_void_validator_tup_t ret{}; + return ret; + } + + return extract_tuple(elems); + } + + // do not know how to specialize by return type :( + template + no_void_validator_tup_t> convert_impl( + const split_data& elems, const std::tuple*) { + return convert_impl(elems); + } + + //////////////// + // conversion + //////////////// + + template + void extract_one(no_validator_t& dst, const string_range msg, + size_t pos) { + if (!valid()) { + return; + } + + if constexpr (std::is_same_v) { + extract(msg.first, msg.second, dst); + return; + } + + if (!extract(msg.first, msg.second, dst)) { + set_error_invalid_conversion(msg, pos); + return; + } + + if constexpr (has_m_ss_valid_t) { + if (T validator; !validator.ss_valid(dst)) { + if constexpr (has_m_error_t) { + set_error_validate(validator.error(), msg, pos); + } else { + set_error_validate("validation error", msg, pos); + } + return; + } + } + } + + template + void extract_multiple(no_void_validator_tup_t& tup, + const split_data& elems) { + using elem_t = std::tuple_element_t>; + + constexpr bool not_void = !std::is_void_v; + constexpr bool one_element = count_not_v == 1; + + if constexpr (not_void) { + if constexpr (one_element) { + extract_one(tup, elems[ArgN], ArgN); + } else { + auto& el = std::get(tup); + extract_one(el, elems[ArgN], ArgN); + } + } + + if constexpr (sizeof...(Ts) > ArgN + 1) { + constexpr size_t NewTupN = (not_void) ? TupN + 1 : TupN; + extract_multiple(tup, elems); + } + } + + template + no_void_validator_tup_t extract_tuple(const split_data& elems) { + static_assert(!all_of_v, + "at least one parameter must be non void"); + no_void_validator_tup_t ret{}; + extract_multiple<0, 0, Ts...>(ret, elems); + return ret; + } + + //////////////// + // members + //////////////// + + error_type error_{}; + splitter splitter_; + + template + friend class parser; +}; + +} /* ss */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@converter.hpp.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@converter.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..3013912138006e54bf8c802b6d2b632ee35e7b24 GIT binary patch literal 27407 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 +#include +#include +#include +#include +#include +#include +#include + +namespace ss { + +//////////////// +// number converters +//////////////// + +template +std::enable_if_t, std::optional> to_num( + const char* begin, const char* const end) { + T ret; + auto answer = fast_float::from_chars(begin, end, ret); + + if (answer.ec != std::errc() || answer.ptr != end) { + return std::nullopt; + } + return ret; +} + +inline std::optional from_char(char c) { + if (c >= '0' && c <= '9') { + return c - '0'; + } + return std::nullopt; +} + +#if defined(__clang__) || defined(__GNUC__) || defined(__GUNG__) +//////////////// +// mul overflow detection +//////////////// +template +bool mul_overflow(T& result, T operand) { + return __builtin_mul_overflow(result, operand, &result); +} + +template <> +inline bool mul_overflow(int& result, int operand) { + return __builtin_smul_overflow(result, operand, &result); +} + +template <> +inline bool mul_overflow(long& result, long operand) { + return __builtin_smull_overflow(result, operand, &result); +} + +template <> +inline bool mul_overflow(long long& result, long long operand) { + return __builtin_smulll_overflow(result, operand, &result); +} + +template <> +inline bool mul_overflow(unsigned int& result, unsigned int operand) { + return __builtin_umul_overflow(result, operand, &result); +} + +template <> +inline bool mul_overflow(unsigned long& result, unsigned long operand) { + return __builtin_umull_overflow(result, operand, &result); +} + +template <> +inline bool mul_overflow(unsigned long long& result, + unsigned long long operand) { + return __builtin_umulll_overflow(result, operand, &result); +} + +//////////////// +// addition overflow detection +//////////////// + +template +inline bool add_overflow(T& result, T operand) { + return __builtin_add_overflow(result, operand, &result); +} + +template <> +inline bool add_overflow(int& result, int operand) { + return __builtin_sadd_overflow(result, operand, &result); +} + +template <> +inline bool add_overflow(long& result, long operand) { + return __builtin_saddl_overflow(result, operand, &result); +} + +template <> +inline bool add_overflow(long long& result, long long operand) { + return __builtin_saddll_overflow(result, operand, &result); +} + +template <> +inline bool add_overflow(unsigned int& result, unsigned int operand) { + return __builtin_uadd_overflow(result, operand, &result); +} + +template <> +inline bool add_overflow(unsigned long& result, unsigned long operand) { + return __builtin_uaddl_overflow(result, operand, &result); +} + +template <> +inline bool add_overflow(unsigned long long& result, + unsigned long long operand) { + return __builtin_uaddll_overflow(result, operand, &result); +} + +//////////////// +// substraction overflow detection +//////////////// +template +inline bool sub_overflow(T& result, T operand) { + return __builtin_sub_overflow(result, operand, &result); +} + +template <> +inline bool sub_overflow(int& result, int operand) { + return __builtin_ssub_overflow(result, operand, &result); +} + +template <> +inline bool sub_overflow(long& result, long operand) { + return __builtin_ssubl_overflow(result, operand, &result); +} + +template <> +inline bool sub_overflow(long long& result, long long operand) { + return __builtin_ssubll_overflow(result, operand, &result); +} + +template <> +inline bool sub_overflow(unsigned int& result, unsigned int operand) { + return __builtin_usub_overflow(result, operand, &result); +} + +template <> +inline bool sub_overflow(unsigned long& result, unsigned long operand) { + return __builtin_usubl_overflow(result, operand, &result); +} + +template <> +inline bool sub_overflow(unsigned long long& result, + unsigned long long operand) { + return __builtin_usubll_overflow(result, operand, &result); +} + +template +bool shift_and_add_overflow(T& value, T digit, F add_last_digit_owerflow) { + if (mul_overflow(value, 10) || add_last_digit_owerflow(value, digit)) { + return true; + } + return false; +} +#else + +#warning "Use clang or gcc if possible." +template +bool shift_and_add_overflow(T& value, T digit, U is_negative) { + digit = (is_negative) ? -digit : digit; + T old_value = value; + value = 10 * value + digit; + + T expected_old_value = (value - digit) / 10; + if (old_value != expected_old_value) { + return true; + } + return false; +} + +#endif + +template +std::enable_if_t, std::optional> to_num( + const char* begin, const char* end) { + if (begin == end) { + return std::nullopt; + } + bool is_negative = false; + if constexpr (std::is_signed_v) { + is_negative = *begin == '-'; + if (is_negative) { + ++begin; + } + } + +#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) + auto add_last_digit_owerflow = + (is_negative) ? sub_overflow : add_overflow; +#else + auto add_last_digit_owerflow = is_negative; +#endif + + T value = 0; + for (auto i = begin; i != end; ++i) { + if (auto digit = from_char(*i); + !digit || shift_and_add_overflow(value, digit.value(), + add_last_digit_owerflow)) { + return std::nullopt; + } + } + + return value; +} + +//////////////// +// extract +//////////////// + +namespace error { +template +struct unsupported_type { + constexpr static bool value = false; +}; +} /* namespace */ + +template +std::enable_if_t && !std::is_floating_point_v && + !is_instance_of_v && + !is_instance_of_v, + bool> +extract(const char*, const char*, T&) { + static_assert(error::unsupported_type::value, + "Conversion for given type is not defined, an " + "\'extract\' function needs to be defined!"); +} + +template +std::enable_if_t || std::is_floating_point_v, bool> +extract(const char* begin, const char* end, T& value) { + auto optional_value = to_num(begin, end); + if (!optional_value) { + return false; + } + value = optional_value.value(); + return true; +} + +template +std::enable_if_t, bool> extract( + const char* begin, const char* end, T& value) { + typename T::value_type raw_value; + if (extract(begin, end, raw_value)) { + value = raw_value; + } else { + value = std::nullopt; + } + return true; +} + +template +bool extract_variant(const char* begin, const char* end, T& value) { + using IthType = std::variant_alternative_t>; + IthType ithValue; + if (extract(begin, end, ithValue)) { + value = ithValue; + return true; + } else if constexpr (I + 1 < std::variant_size_v) { + return extract_variant(begin, end, value); + } + return false; +} + +template +std::enable_if_t, bool> extract( + const char* begin, const char* end, T& value) { + return extract_variant(begin, end, value); +} + +//////////////// +// extract specialization +//////////////// + +template <> +inline bool extract(const char* begin, const char* end, bool& value) { + if (end == begin + 1) { + if (*begin == '1') { + value = true; + } else if (*begin == '0') { + value = false; + } else { + return false; + } + } else { + size_t size = end - begin; + if (size == 4 && strncmp(begin, "true", size) == 0) { + value = true; + } else if (size == 5 && strncmp(begin, "false", size) == 0) { + value = false; + } else { + return false; + } + } + + return true; +} + +template <> +inline bool extract(const char* begin, const char* end, char& value) { + value = *begin; + return (end == begin + 1); +} + +template <> +inline bool extract(const char* begin, const char* end, std::string& value) { + value = std::string(begin, end); + return true; +} + +} /* ss */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@extract.hpp.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@extract.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..c18e679f0ac66d6ac008d2c0d1ec3fd125d7d097 GIT binary patch literal 12614 zcmbVSy^kzM5#M_@2&@xA=!9_Q*r$2plb)VPATpMb2$0A~TD`qJyUop)r+aSi9wM?M z5+ovoAmUHp55SQ{f<#0>03itx5(&Z&s;YbDdTy#`XKl%+)tm0>>R)|V^}CzbAO1pp z`s`wpADT+%a@XX0<8o`;+-d9Rk7#9Qb@yDg?dAw>H1Eeb33a`K$)e+V`|;bG@>*W zy9W_xKLnUaEY_7mmiuNaEuk{Qi$8h$0P1y=ElZ!@a+IJ34nSE6iG8rS+UbH{9`0~Q zYRQS&s{-Azugyoj7Of*GuDl^&3*ya46VA9LillZ~4}WTQTMWK&x|3j5LN&G0t)r{X z_=|U-xH?@n?c&m=MZ;p%-?|PA`Xpx-)@fNicSTgJBbgwW zQk7X#?XsO#WoBK!n9fgPowrN7gWRddJ3 z${1M4wgmFFB<^_q5QryN2eZk`@~+BmZgTuh*;{^d^ZdQ%H=}rjfS?0LE-HBsvE1xy z55i|}Up+~Ed`wh6Mn#vLirYfmZK?`o3K`?;U;g$<*0UssBTA4L0iH@ObY@in27T{x zVjn^P_{G8}T{Ax&gBEl=;X;=f6=Ie}&QO?$523(Zdy)XoPKcR<-(H<2A|0Y(bm_@C zkyxHA1$&0jo&Fw?VHPd2+Sv6`0$dozXxE7|bH<`{nZA={R%v%=c8E$!6>5ECt`LJ; z=?cn`;z(p>Ix@R#Uk;@J5dcXq3 zz11lr8`#2%tB14*`~m73? zkLi0%eOVjf#n`$71r~1#A;SmxldD7PLO|uNZcna8h6Y7lS{%e5fxlLLWk=nO znfmhRQ?NotX5jPdy^ujSv0Fh7zt!rC?l(xFv*%F=XLmN|D1FsCea~(SJoyq509vZLsmaJv;ScvVFGSHc_T`Hw z8co6&OK~Wjhg@^y01L-o-T$4n zNxP@Mi*K+>`y`P^oKmW5no8CN7)ZsS5F5De&l1$&l%Xe{>LMUo1kp;}!MQ_G%EX>Q znTI+K20FW^8TjBF!&=1A)J2oNH^J?F4s>33BGs;60wJh8h6t#c&sNvqBzO?{bE$@? zv!VCH80P>MR+nCF&nv)bDw3IunU$jR1Q(Cl z5Zl;^*$7b~k%}I%8_r&Z=gwFqv1EanBfBe{OrDGaVL&QnV=(;#aWLRSgkXe;r8x)X zsk0reJkB7BardFh)DTD)+pTI~@9YDvuR#wALkZ)E z?CP-IRFOT%|>q3H$WL||^?z=80Y#!RbiTN;;E>KWQmSfEri;d5i5 zJO+H>=S-**BX&v?&H;i>uH87vLTg>0Ve!WedxSns*C?8HzYED3m zCc3^09P^C!$F~2Hc+jb22)V#vuY|eWR8^O^sr)mt3MS2J?+iFjuGJHZ2y4wDyT=1l>VQ2O1B0wrx`Vel zc0B^91211p?!GKSFa3}y&gNOkz44`dt_@)jrl)mcDm@7NsplFFi0Of03F&A1Gkkct zk8U8Vq2bmX*WEupa}NUncvn!!zFahVg-503=6V=yr$3XDe$+P@kA3pXDgl4V!A`M; zOjv1rBUCk*iI0l3=%@Y2g8s4`1;W5Hyy$_BEpx>g(=jtXv|vksCBL{AMZ@lj4;U?U zaR@m(2Wr)o?Umpi!}}RNM)@_!>*<_g3`JSOTnEUhg@Qfrrejc#F&L$@sy#|0e69eU zfkayCE4y`fqYdd6Nz5~38z(zSL=J~;f}RYX)P=Y~OvLFC#Wbs#1_Wq{Kp5+x;A1N} z9uai4i=8CmJG`XAfyzn7aUj0%vWI6Qosh;jBPItO4Wbv``ufMUfER-C{>O(kjUn*a z5b!hjf3b|iXQG{PhlQRXR;}3d>AOzDi^h|nQF>+9yE^E4Rh*0F(e;%nlu+liiN8O)P%0|Wqk&>b&t3;r(fav7tAsgX!!3SW~G`9xE zV9l7wrJ^xU1!oe;5r2%EsqdOwUjKQ@fj_|S*6bcLgs;9y?~SIgg2%(7RUR{3c P;^K1i`FAg#;lKVLWT08d literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@function_traits.hpp b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@function_traits.hpp new file mode 100644 index 0000000..c22a936 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@function_traits.hpp @@ -0,0 +1,80 @@ +#pragma once + +#include +#include +#include + +namespace ss { + +//////////////// +// function traits +//////////////// + +template +struct decayed_arg_n { + static_assert(N - 1 != sizeof...(Ts), "index out of range"); + using type = typename decayed_arg_n::type; +}; + +template +struct decayed_arg_n<0, T, Ts...> { + using type = std::decay_t; +}; + +template +struct function_traits; + +template +struct function_traits> { + using arg_type = Arg; +}; + +template +struct function_traits { + using arg0 = typename decayed_arg_n<0, Ts...>::type; +}; + +template +struct function_traits : function_traits {}; + +template +struct function_traits : function_traits {}; + +template +struct function_traits : function_traits {}; + +template +struct function_traits : function_traits {}; + +template +struct function_traits : function_traits {}; + +template +struct member_wrapper; + +template +struct member_wrapper { + using arg_type = typename function_traits::arg0; +}; + +//////////////// +// has method +//////////////// + +#define INIT_HAS_METHOD(method) \ + template \ + class has_m_##method { \ + template \ + static std::true_type test(decltype(&C::method)); \ + \ + template \ + static std::false_type test(...); \ + \ + public: \ + constexpr static bool value = decltype(test(0))::value; \ + }; \ + \ + template \ + constexpr bool has_m_##method##_t = has_m_##method::value; + +} /* trait */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@function_traits.hpp.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@function_traits.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..15421c98a7e3f47a2e8a74e33b843d2c9e60a09d GIT binary patch literal 15344 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 aCfs#qBVUOZo_=AW1zs=zmarrO>Hh(Kfl+e+ literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@parser.hpp b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@parser.hpp new file mode 100644 index 0000000..86f4e92 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@parser.hpp @@ -0,0 +1,546 @@ +#pragma once + +#include "common.hpp" +#include "converter.hpp" +#include "extract.hpp" +#include "restrictions.hpp" +#include +#include +#include +#include +#include + +namespace ss { + +template +class parser { + constexpr static auto string_error = setup::string_error; + + using multiline = typename setup::multiline; + using error_type = ss::ternary_t; + + constexpr static bool escaped_multiline_enabled = + multiline::enabled && setup::escape::enabled; + + constexpr static bool quoted_multiline_enabled = + multiline::enabled && setup::quote::enabled; + +public: + parser(const std::string& file_name, + const std::string& delim = ss::default_delimiter) + : file_name_{file_name}, reader_{file_name_, delim} { + if (reader_.file_) { + read_line(); + } else { + set_error_file_not_open(); + eof_ = true; + } + } + + parser(parser&& other) = default; + parser& operator=(parser&& other) = default; + + parser() = delete; + parser(const parser& other) = delete; + parser& operator=(const parser& other) = delete; + + bool valid() const { + if constexpr (string_error) { + return error_.empty(); + } else { + return !error_; + } + } + + const std::string& error_msg() const { + assert_string_error_defined(); + return error_; + } + + bool eof() const { + return eof_; + } + + bool ignore_next() { + return reader_.read_next(); + } + + template + T get_object() { + return to_object(get_next()); + } + + template + no_void_validator_tup_t get_next() { + reader_.update(); + clear_error(); + if (eof_) { + set_error_eof_reached(); + return {}; + } + + auto value = reader_.converter_.template convert(); + + if (!reader_.converter_.valid()) { + set_error_invalid_conversion(); + } + + read_line(); + return value; + } + + //////////////// + // composite conversion + //////////////// + template + class composite { + public: + composite(std::tuple&& values, parser& parser) + : values_{std::move(values)}, parser_{parser} { + } + + // tries to convert the same line with a different output type + // only if the previous conversion was not successful, + // returns composite containing itself and the new output + // as optional, additionally, if a parameter is passed, and + // that parameter can be invoked using the converted value, + // than it will be invoked in the case of a valid conversion + template + composite>> or_else( + Fun&& fun = none{}) { + using Value = no_void_validator_tup_t; + std::optional value; + try_convert_and_invoke(value, fun); + return composite_with(std::move(value)); + } + + // same as or_else, but saves the result into a 'U' object + // instead of a tuple + template + composite> or_object(Fun&& fun = none{}) { + std::optional value; + try_convert_and_invoke(value, fun); + return composite_with(std::move(value)); + } + + std::tuple values() { + return values_; + } + + template + auto on_error(Fun&& fun) { + if (!parser_.valid()) { + if constexpr (std::is_invocable_v) { + fun(); + } else { + static_assert(string_error, + "to enable error messages within the " + "on_error method " + "callback string_error needs to be enabled"); + std::invoke(std::forward(fun), parser_.error_msg()); + } + } + return *this; + } + + private: + template + composite composite_with(T&& new_value) { + auto merged_values = + std::tuple_cat(std::move(values_), + std::tuple{parser_.valid() + ? std::forward(new_value) + : std::nullopt}); + return {std::move(merged_values), parser_}; + } + + template + void try_convert_and_invoke(std::optional& value, Fun&& fun) { + if (!parser_.valid()) { + auto tuple_output = try_same(); + if (!parser_.valid()) { + return; + } + + if constexpr (!std::is_same_v) { + value = to_object(std::move(tuple_output)); + } else { + value = std::move(tuple_output); + } + + parser_.try_invoke(*value, std::forward(fun)); + } + } + + template + no_void_validator_tup_t try_same() { + parser_.clear_error(); + auto value = + parser_.reader_.converter_.template convert(); + if (!parser_.reader_.converter_.valid()) { + parser_.set_error_invalid_conversion(); + } + return value; + } + + //////////////// + // members + //////////////// + + std::tuple values_; + parser& parser_; + }; + + // tries to convert a line and returns a composite which is + // able to try additional conversions in case of failure + template + composite>> try_next( + Fun&& fun = none{}) { + using Ret = no_void_validator_tup_t; + return try_invoke_and_make_composite< + std::optional>(get_next(), std::forward(fun)); + } + + // identical to try_next but returns composite with object instead of a + // tuple + template + composite> try_object(Fun&& fun = none{}) { + return try_invoke_and_make_composite< + std::optional>(get_object(), std::forward(fun)); + } + +private: + // tries to invoke the given function (see below), if the function + // returns a value which can be used as a conditional, and it returns + // false, the function sets an error, and allows the invoke of the + // next possible conversion as if the validation of the current one + // failed + template + void try_invoke(Arg&& arg, Fun&& fun) { + constexpr bool is_none = std::is_same_v, none>; + if constexpr (!is_none) { + using Ret = decltype(try_invoke_impl(arg, std::forward(fun))); + constexpr bool returns_void = std::is_same_v; + if constexpr (!returns_void) { + if (!try_invoke_impl(arg, std::forward(fun))) { + set_error_failed_check(); + } + } else { + try_invoke_impl(arg, std::forward(fun)); + } + } + } + + // tries to invoke the function if not none + // it first tries to invoke the function without arguments, + // than with one argument if the function accepts the whole tuple + // as an argument, and finally tries to invoke it with the tuple + // laid out as a parameter pack + template + auto try_invoke_impl(Arg&& arg, Fun&& fun) { + constexpr bool is_none = std::is_same_v, none>; + if constexpr (!is_none) { + if constexpr (std::is_invocable_v) { + return fun(); + } else if constexpr (std::is_invocable_v) { + return std::invoke(std::forward(fun), + std::forward(arg)); + } else { + return std::apply(std::forward(fun), + std::forward(arg)); + } + } + } + + template + composite try_invoke_and_make_composite(T&& value, Fun&& fun) { + if (valid()) { + try_invoke(*value, std::forward(fun)); + } + return {valid() ? std::move(value) : std::nullopt, *this}; + } + + //////////////// + // error + //////////////// + + void clear_error() { + if constexpr (string_error) { + error_.clear(); + } else { + error_ = false; + } + } + + void set_error_failed_check() { + if constexpr (string_error) { + error_.append(file_name_).append(" failed check."); + } else { + error_ = true; + } + } + + void set_error_file_not_open() { + if constexpr (string_error) { + error_.append(file_name_).append(" could not be opened."); + } else { + error_ = true; + } + } + + void set_error_eof_reached() { + if constexpr (string_error) { + error_.append(file_name_).append(" reached end of file."); + } else { + error_ = true; + } + } + + void set_error_invalid_conversion() { + if constexpr (string_error) { + error_.append(file_name_) + .append(" ") + .append(std::to_string(line_number_)) + .append(": ") + .append(reader_.converter_.error_msg()) + .append(": \"") + .append(reader_.buffer_) + .append("\""); + } else { + error_ = true; + } + } + + //////////////// + // line reading + //////////////// + + void read_line() { + eof_ = !reader_.read_next(); + ++line_number_; + } + + struct reader { + reader(const std::string& file_name_, const std::string& delim) + : delim_{delim}, file_{fopen(file_name_.c_str(), "rb")} { + } + + reader(reader&& other) + : buffer_{other.buffer_}, + next_line_buffer_{other.next_line_buffer_}, + helper_buffer_{other.helper_buffer_}, converter_{std::move( + other.converter_)}, + next_line_converter_{std::move(other.next_line_converter_)}, + size_{other.size_}, next_line_size_{other.size_}, + helper_size_{other.helper_size_}, delim_{std::move(other.delim_)}, + file_{other.file_}, crlf_{other.crlf_} { + other.buffer_ = nullptr; + other.next_line_buffer_ = nullptr; + other.helper_buffer_ = nullptr; + other.file_ = nullptr; + } + + reader& operator=(reader&& other) { + if (this != &other) { + buffer_ = other.buffer_; + next_line_buffer_ = other.next_line_buffer_; + helper_buffer_ = other.helper_buffer_; + converter_ = std::move(other.converter_); + next_line_converter_ = std::move(other.next_line_converter_); + size_ = other.size_; + next_line_size_ = other.next_line_size_; + helper_size_ = other.helper_size_; + delim_ = std::move(other.delim_); + file_ = other.file_; + crlf_ = other.crlf_; + + other.buffer_ = nullptr; + other.next_line_buffer_ = nullptr; + other.helper_buffer_ = nullptr; + other.file_ = nullptr; + } + + return *this; + } + + ~reader() { + free(buffer_); + free(next_line_buffer_); + free(helper_buffer_); + + if (file_) { + fclose(file_); + } + } + + reader() = delete; + reader(const reader& other) = delete; + reader& operator=(const reader& other) = delete; + + bool read_next() { + memset(next_line_buffer_, '\0', next_line_size_); + ssize_t ssize = + get_line(&next_line_buffer_, &next_line_size_, file_); + + if (ssize == -1) { + return false; + } + + size_t size = remove_eol(next_line_buffer_, ssize); + size_t limit = 0; + + if constexpr (escaped_multiline_enabled) { + while (escaped_eol(size)) { + if (multiline_limit_reached(limit)) { + return true; + } + if (!append_next_line_to_buffer(next_line_buffer_, size)) { + return false; + } + } + } + + next_line_converter_.split(next_line_buffer_, delim_); + + if constexpr (quoted_multiline_enabled) { + while (unterminated_quote()) { + if (multiline_limit_reached(limit)) { + return true; + } + if (!append_next_line_to_buffer(next_line_buffer_, size)) { + return false; + } + + if constexpr (escaped_multiline_enabled) { + while (escaped_eol(size)) { + if (multiline_limit_reached(limit)) { + return true; + } + if (!append_next_line_to_buffer(next_line_buffer_, + size)) { + return false; + } + } + } + + next_line_converter_.resplit(next_line_buffer_, size); + } + } + + return true; + } + + void update() { + std::swap(buffer_, next_line_buffer_); + std::swap(size_, next_line_size_); + std::swap(converter_, next_line_converter_); + } + + bool multiline_limit_reached(size_t& limit) { + if constexpr (multiline::size > 0) { + if (limit++ >= multiline::size) { + next_line_converter_.set_error_multiline_limit_reached(); + return true; + } + } + return false; + } + + bool escaped_eol(size_t size) { + const char* curr; + for (curr = next_line_buffer_ + size - 1; + curr >= next_line_buffer_ && + setup::escape::match(*curr); + --curr) { + } + return (next_line_buffer_ - curr + size) % 2 == 0; + } + + bool unterminated_quote() { + if (next_line_converter_.unterminated_quote()) { + return true; + } + return false; + } + + void undo_remove_eol(char* buffer, size_t& string_end) { + if (next_line_converter_.unterminated_quote()) { + string_end -= next_line_converter_.size_shifted(); + } + if (crlf_) { + std::copy_n("\r\n\0", 3, buffer + string_end); + string_end += 2; + } else { + std::copy_n("\n\0", 2, buffer + string_end); + string_end += 1; + } + } + + size_t remove_eol(char*& buffer, size_t size) { + size_t new_size = size - 1; + if (size >= 2 && buffer[size - 2] == '\r') { + crlf_ = true; + new_size--; + } else { + crlf_ = false; + } + + buffer[new_size] = '\0'; + return new_size; + } + + void realloc_concat(char*& first, size_t& first_size, + const char* const second, size_t second_size) { + next_line_size_ = first_size + second_size + 2; + first = static_cast( + realloc(static_cast(first), next_line_size_)); + std::copy_n(second, second_size + 1, first + first_size); + first_size += second_size; + } + + bool append_next_line_to_buffer(char*& buffer, size_t& size) { + undo_remove_eol(buffer, size); + + ssize_t next_ssize = + get_line(&helper_buffer_, &helper_size_, file_); + if (next_ssize == -1) { + return false; + } + + size_t next_size = remove_eol(helper_buffer_, next_ssize); + realloc_concat(buffer, size, helper_buffer_, next_size); + return true; + } + + //////////////// + // members + //////////////// + char* buffer_{nullptr}; + char* next_line_buffer_{nullptr}; + char* helper_buffer_{nullptr}; + + converter converter_; + converter next_line_converter_; + + size_t size_{0}; + size_t next_line_size_{0}; + size_t helper_size_{0}; + + std::string delim_; + FILE* file_{nullptr}; + + bool crlf_; + }; + + //////////////// + // members + //////////////// + + std::string file_name_; + error_type error_{}; + reader reader_; + size_t line_number_{0}; + bool eof_{false}; +}; + +} /* ss */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@parser.hpp.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@parser.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..3f27526ad03fa831040c955f3db433999cbdbd76 GIT binary patch literal 17323 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 S +struct ax { +private: + template + bool ss_valid_impl(const T& x) const { + if constexpr (sizeof...(Xs) != 0) { + return x != X && ss_valid_impl(x); + } + return x != X; + } + +public: + bool ss_valid(const T& value) const { + return ss_valid_impl(value); + } + + const char* error() const { + return "value excluded"; + } +}; + +//////////////// +// none except +//////////////// + +template +struct nx { +private: + template + bool ss_valid_impl(const T& x) const { + if constexpr (sizeof...(Xs) != 0) { + return x == X || ss_valid_impl(x); + } + return x == X; + } + +public: + bool ss_valid(const T& value) const { + return ss_valid_impl(value); + } + + const char* error() const { + return "value excluded"; + } +}; + +//////////////// +// greater than or equal to +// greater than +// less than +// less than or equal to +//////////////// + +template +struct gt { + bool ss_valid(const T& value) const { + return value > N; + } +}; + +template +struct gte { + bool ss_valid(const T& value) const { + return value >= N; + } +}; + +template +struct lt { + bool ss_valid(const T& value) const { + return value < N; + } +}; + +template +struct lte { + bool ss_valid(const T& value) const { + return value <= N; + } +}; + +//////////////// +// in range +//////////////// + +template +struct ir { + bool ss_valid(const T& value) const { + return value >= Min && value <= Max; + } +}; + +//////////////// +// out of range +//////////////// + +template +struct oor { + bool ss_valid(const T& value) const { + return value < Min || value > Max; + } +}; + +//////////////// +// non empty +//////////////// + +template +struct ne { + bool ss_valid(const T& value) const { + return !value.empty(); + } + + const char* error() const { + return "empty field"; + } +}; + +} /* ss */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@restrictions.hpp.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@restrictions.hpp.blob new file mode 100644 index 0000000000000000000000000000000000000000..fa57036f0f92f939b0ad73050a9e35af49575468 GIT binary patch literal 16666 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@setup.hpp b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@setup.hpp new file mode 100644 index 0000000..8f26eb8 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@local@include@ss@setup.hpp @@ -0,0 +1,244 @@ +#pragma once +#include "type_traits.hpp" +#include + +namespace ss { + +//////////////// +// matcher +//////////////// + +template +struct matcher { +private: + template + static bool match_impl(char c) { + if constexpr (sizeof...(Xs) != 0) { + return (c == X) || match_impl(c); + } + return (c == X); + } + + constexpr static bool contains_string_terminator() { + for (const auto& match : matches) { + if (match == '\0') { + return false; + } + } + return true; + } + +public: + static bool match(char c) { + return match_impl(c); + } + + constexpr static bool enabled = true; + constexpr static std::array matches{Cs...}; + static_assert(contains_string_terminator(), + "string terminator cannot be used as a match character"); +}; + +template +inline constexpr bool matches_intersect() { + for (const auto& first_match : FirstMatcher::matches) { + for (const auto& second_match : SecondMatcher::matches) { + if (first_match != '\0' && first_match == second_match) { + return true; + } + } + } + return false; +} + +template +inline constexpr bool matches_intersect_union() { + return matches_intersect() || + matches_intersect(); +} + +template <> +class matcher<'\0'> { +public: + constexpr static bool enabled = false; + constexpr static std::array matches{'\0'}; + static bool match(char c) = delete; +}; + +//////////////// +// setup +//////////////// + +//////////////// +// matcher +//////////////// + +template +struct quote : matcher {}; + +template +struct trim : matcher {}; + +template +struct trim_left : matcher {}; + +template +struct trim_right : matcher {}; + +template +struct escape : matcher {}; + +template class Template> +struct is_instance_of_matcher : std::false_type {}; + +template class Template> +struct is_instance_of_matcher, Template> : std::true_type {}; + +template class Template> +using is_instance_of_matcher_t = + typename is_instance_of_matcher::type; + +template

    JVP|^WLNM`ROaNYoGdeU@Ojq$S17#9DP(B{Ik^>L>DadjD{N94 z>rc}{Cyd|RC;Cx~jQay8h@^}H-BiTH^N20{b0ouxwQxaXd^)U_<~1$Mn;e8;LTYF7YiHrI$aZn`CdvW36g>~1f8$fjX*J1t+AnW>-8`EC6eFI^Ls5@!13D|DBb-HMLSm<)= z@Cjf(2xcOPMoYp6H^6kTK^KA#UYQ^D=H-aF`)k@4cSDidjkg`yWOf_dFiaGl`_ak1 z(mYAd`)ZdqaZ}mdQxR}Ui6G`fSRG)+7BKfz3>wQ7Ito|RQJyPw6uCl2d9KiLY|wGG zLDu!{ZtV>?v*IY<7Mnn#G$YG>`K+wbx!kX1951+V$l9e#q`c-cy<4{z~|ZDGpP={c78VT8`@4Ofv?q0P%$vs&|>?Zcx(K7Z4WUXOG*v-aPCWU zE%zl6hkRekW0-hsvxS9KXAW9F;<;k>gfa4doyFr0XN}@$o;B8In4S|jXB>%FzM0V8 z?wQ@!O=*5E!g1z^nw&d&E|FX-A{h*D>rduja`RuOe$1cEo#GD3Ow z@P9w(TByy0U-z#XM#^ z91>2FG~1FSiCnWJ@Ec&oc4#fBSdUb$D-83!{jgb+fY)RrUB4#S3co%C^mxRA3kFbKum? zk;MMzpl}5+?VTBWXXblXWo%hi&&N2}CIQrDlIR5Qc_;FocY^mESY?t3hxa_3d(Tau zEHRl!*C(y=QG*o{fW6MfMAX)p&Pi>dl*q7R@mZaXHfX3o1a&P64ITu`5~&fIFIK11 zTgAB-uO>Am63)p*gs*r^I@~Z5_Cv9);YefwHjDVJq(8Ryn>jT7P5O;euP>Akp@@}Y z=ciDT7$(kLQgW%q>D6EC<#V$wolyJp!wQry`ghi@51Acf;_G4W`ef zH;wsN#LAEYzX)Lvi}WJ6d=Y#hz{KJnEWi3~_}U{IDKLPK$7$4a-uT=plToQ_GB1Kb zbv0vaRo-HnEY}F0s0-h%;j@Rp9Ma#3QN@ zH34iFFht3)#0x9-ZcRN#m3iy|LRWBGT>&#>AHISg0#o#eX5_`nsm4q5_=g`Gq#27K z%~%S-h=qp94wGT*ef8uD(COk(A_p64h4!nSD+gIp5KPf3zE z&q?SBm~WcSl7ca&a1NJ>k*9JFmj(`(#yQ-vea{|$ZdA;yCmplHhyF0y`r8RRUOD;mG8x@6qEK6%9AaTI zTB+N{iJSN>XVdTv4xkf?@h(vY_Tf#`(9KbwhMr%pK;-(q=abxVi9Nhe~HCL`Z zDYatAbi&;AgJ9Sk$$NK)s0gg0)=~ZIMRdN|x{Rox7UotCzi~O;Z{@Is0V|jr%#O$_ ztu(N*fBwHovzPmyyjSTL#qL|ru+$(>?Hrpg4 zdD~rDQ=q3x50O~BNWBo~BcT-ltH#vm+?w)hgC_i<4D;Y)qx!C8kV4DoA=NUNSb=G5 zd*P(p%d75Q-EwMjj5J$cm$9W|Z0R(%bc_vHHMZ)vdq2$nr`bf=UN{M5IRWwQ1ckDk zKqw2aB9w(iwuYjy$|qs1GuEGfO;aT6@sU@QV|UZxGfF3)Q967^z^c*q^g6m>LBQ#+ zY9~oqCGr=s;V-%gbLfk19T`@UWP6m^ZqLhX|6f##(6|#jgt^x#t;;%YfQ}nb#|_Xi zu&U#R=(r*8c<-ID{UQc82&?;QROlz7YNb#tD)fmAt5)OFJD<4MYoeLNuWDwyp(Llt z`Vh-xcq!OfoDB0HFlhk)s;Krlc_(WRUq6+Zo)Uans5jk0j*MS+3Hh;0s4@6tW3tZ+ z9Id*9yzy6WLpKn@ys_>h25g@??lA<*22OHMF$%F2>ji%<*84L|a?g*WcHb!v+aB~p z8}EYsaiRTj!TtcN_D910NPK^e4eojNjm{||Zc1%XF9yjMgR8TJEY?RdObeMjD{jNW z!;9SP`jVp11cH8(5Wi=wZE~f{ty%p*>yf23F?= zjx1ZL8(X<1AZ^LIK(e;s90*P-ESh@#Fst?s}t;uN%(Dql+c5Lqw5R5+Xw+oM2UzU7IoQm7ZDx0KM^*B`%-qbl_6I6f*I>BLWLMlhWX3VUGiV}@sRiX8p{LsvIBl^_ZPMJyyCW6exe`kj|4}L`XsiFB^FhY)!!YmrNCe37!{~O@$pVl^2ywg;^|>7nS|$ z`8^+WInrHNpy;eQR#9En#a4;U_TGm-yMdw*T^B`VU7{ev15;U-R}6tD!xjx0J}rNl z%d&IsO&wiR1SHd~rsFOXRYKGk;B;&ZOJ}h>gN=CxeY5EiR&C77UtZpKFyogA^o6X+ z>5RNsjuT$VnKDM~us=vuqd~y9#>HZG%R?(bhx6Q~qA{oWk8>-Ac=THRQ%&VnzBEF3 zBI@NvSg{_aw8l^MLyWCG6ie}2RJ56#7hxAn`By^Pwr|B>L}8;~5C7!hbrfzG=3fu< z_wSd-Uh+xq9oH)$RLch1KSW!Y=|dq2w~NRY(C{%5*l;=6#oJ{k+omQ$*BC0j7ypAZZe9A04pwJ zn9EU2B$XEv$?#p>E@kcNj!p+IQFvobybZp5^a6KNt%;8z7{(4HYgl}-CcfN*7w2^?Ea20ZaBQ3` zdMtg+_UR`mR};(1)%ap4zC>XHn-oLQSVx$`J-=QyX)@C%gEI9biRff0%Yg`{(8Q5Y*mVO3DqlpS73T5RG}FU_j;!p^c^*sbw}*2G*1tG?hq=DpiTZl{ab59oQ1dO)el zB?WQ0Blvi$5MW#7Vx|X_?)U_Ghpp@@(oYycjq{^k-@mx$ z!}+d!#cAsyRpa41o0mXlbUOf}+W|7V9e~jdSf%J5gwTDE8{Mwot+)E&vhL0!^q9aR zEAUGdzOZ#+7;qR3SYUO5-@7X!R~=vdeYRjKC=NFKFgMFZ!AVWfwD&Wz7Z_ajWasYSq=KnDgRW wHXWt*ui2ljLs4O0b|iYCsBkZ;yWI<)16KGjSwZ0hw9)wNM0|Fl!6a$_AN1zI;Q#;t literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.tcc b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.tcc new file mode 100644 index 0000000..ebc9933 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.tcc @@ -0,0 +1,1377 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 1997-2020 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_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 + +#pragma GCC system_header + +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); + + typedef __gnu_cxx::__conditional_type<(sizeof(void*) + <= sizeof(unsigned long)), + unsigned long, unsigned long long>::__type _UIntPtrType; + + _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; + } + + // 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)); + + typedef __gnu_cxx::__conditional_type<(sizeof(const void*) + <= sizeof(unsigned long)), + unsigned long, unsigned long long>::__type _UIntPtrType; + + __s = _M_insert_int(__s, __io, __fill, + reinterpret_cast<_UIntPtrType>(__v)); + __io.flags(__flags); + return __s; + } + +_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& + 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& + 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 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..26038acf94f36d4f7602caa4bfa5baec858b5ad6 GIT binary patch literal 73889 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�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 E1ND;9J^%m! literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.h new file mode 100644 index 0000000..b76eac4 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.h @@ -0,0 +1,2017 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2007-2020 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_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 + +#pragma GCC system_header + +#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(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 + +_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; + }; + + 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 + 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_COMPAT && defined __LONG_DOUBLE_128__ \ + && _GLIBCXX_USE_CXX11_ABI == 0 + 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 + 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_COMPAT && defined __LONG_DOUBLE_128__ \ + && _GLIBCXX_USE_CXX11_ABI == 0 + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3782c287dd400f68514e93f11e2ce612eed650f2 GIT binary patch literal 108999 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 yJ?*f-x-LWs&GU%sNEChN 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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 + +#pragma GCC system_header + +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); + + _M_decimal_point = __mp.decimal_point(); + _M_thousands_sep = __mp.thousands_sep(); + _M_frac_digits = __mp.frac_digits(); + + char* __grouping = 0; + _CharT* __curr_symbol = 0; + _CharT* __positive_sign = 0; + _CharT* __negative_sign = 0; + __try + { + const string& __g = __mp.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>& __cs = __mp.curr_symbol(); + _M_curr_symbol_size = __cs.size(); + __curr_symbol = new _CharT[_M_curr_symbol_size]; + __cs.copy(__curr_symbol, _M_curr_symbol_size); + + const basic_string<_CharT>& __ps = __mp.positive_sign(); + _M_positive_sign_size = __ps.size(); + __positive_sign = new _CharT[_M_positive_sign_size]; + __ps.copy(__positive_sign, _M_positive_sign_size); + + const basic_string<_CharT>& __ns = __mp.negative_sign(); + _M_negative_sign_size = __ns.size(); + __negative_sign = new _CharT[_M_negative_sign_size]; + __ns.copy(__negative_sign, _M_negative_sign_size); + + _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_grouping = __grouping; + _M_curr_symbol = __curr_symbol; + _M_positive_sign = __positive_sign; + _M_negative_sign = __negative_sign; + _M_allocated = true; + } + __catch(...) + { + delete [] __grouping; + delete [] __curr_symbol; + delete [] __positive_sign; + delete [] __negative_sign; + __throw_exception_again; + } + } + +_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 + 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; + } + + 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 + 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); } + +_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 strftime 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) 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': + // Abbreviated weekday name [tm_wday] + const char_type* __days1[7]; + __tp._M_days_abbreviated(__days1); + __beg = _M_extract_name(__beg, __end, __mem, __days1, + 7, __io, __tmperr); + if (!__tmperr) + __tm->tm_wday = __mem; + break; + case 'A': + // Weekday name [tm_wday]. + const char_type* __days2[7]; + __tp._M_days(__days2); + __beg = _M_extract_name(__beg, __end, __mem, __days2, + 7, __io, __tmperr); + if (!__tmperr) + __tm->tm_wday = __mem; + break; + case 'h': + case 'b': + // Abbreviated month name [tm_mon] + const char_type* __months1[12]; + __tp._M_months_abbreviated(__months1); + __beg = _M_extract_name(__beg, __end, __mem, + __months1, 12, __io, __tmperr); + if (!__tmperr) + __tm->tm_mon = __mem; + break; + case 'B': + // Month name [tm_mon]. + const char_type* __months2[12]; + __tp._M_months(__months2); + __beg = _M_extract_name(__beg, __end, __mem, + __months2, 12, __io, __tmperr); + if (!__tmperr) + __tm->tm_mon = __mem; + 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]); + break; + case 'd': + // Day [01, 31]. [tm_mday] + __beg = _M_extract_num(__beg, __end, __mem, 1, 31, 2, + __io, __tmperr); + if (!__tmperr) + __tm->tm_mday = __mem; + break; + case 'e': + // Day [1, 31], with single digits preceded by + // space. [tm_mday] + if (__ctype.is(ctype_base::space, *__beg)) + __beg = _M_extract_num(++__beg, __end, __mem, 1, 9, + 1, __io, __tmperr); + else + __beg = _M_extract_num(__beg, __end, __mem, 10, 31, + 2, __io, __tmperr); + if (!__tmperr) + __tm->tm_mday = __mem; + 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); + 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; + 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; + 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; + 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': + if (__ctype.narrow(*__beg, 0) == '\n') + ++__beg; + else + __tmperr |= ios_base::failbit; + 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); + 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': + if (__ctype.narrow(*__beg, 0) == '\t') + ++__beg; + else + __tmperr |= ios_base::failbit; + 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); + 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]); + 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]); + break; + case 'y': + case 'C': // C99 + // Two digit year. + case 'Y': + // Year [1900). + // NB: We parse either two digits, implicitly years since + // 1900, or 4 digits, full year. In both cases we can + // reconstruct [tm_year]. See also libstdc++/26701. + __beg = _M_extract_num(__beg, __end, __mem, 0, 9999, 4, + __io, __tmperr); + if (!__tmperr) + __tm->tm_year = __mem < 0 ? __mem + 100 : __mem - 1900; + 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; + default: + // Not recognized. + __tmperr |= ios_base::failbit; + } + } + else + { + // Verify format and input match, extract and discard. + if (__format[__i] == *__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_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); + + // As-is works for __len = 1, 2, 4, the values actually used. + int __mult = __len == 2 ? 10 : (__len == 4 ? 1000 : 1); + + ++__min; + 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'); + const int __valuec = __value * __mult; + if (__valuec > __max || __valuec + __mult < __min) + break; + __mult /= 10; + } + else + break; + } + if (__i == __len) + __member = __value; + // Special encoding for do_get_year, 'y', and 'Y' above. + else if (__len == 4 && __i == 2) + __member = __value - 100; + else + __err |= ios_base::failbit; + + return __beg; + } + + // Assumptions: + // All elements in __names are unique. + 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); + + int* __matches = static_cast(__builtin_alloca(sizeof(int) + * __indexlen)); + size_t __nmatches = 0; + size_t __pos = 0; + bool __testvalid = true; + const char_type* __name; + + // Look for initial matches. + // NB: Some of the locale data is in the form of all lowercase + // names, and some is in the form of initially-capitalized + // names. Look for both. + if (__beg != __end) + { + const char_type __c = *__beg; + for (size_t __i1 = 0; __i1 < __indexlen; ++__i1) + if (__c == __names[__i1][0] + || __c == __ctype.toupper(__names[__i1][0])) + __matches[__nmatches++] = __i1; + } + + while (__nmatches > 1) + { + // Find smallest matching string. + size_t __minlen = __traits_type::length(__names[__matches[0]]); + for (size_t __i2 = 1; __i2 < __nmatches; ++__i2) + __minlen = std::min(__minlen, + __traits_type::length(__names[__matches[__i2]])); + ++__beg; + ++__pos; + if (__pos < __minlen && __beg != __end) + for (size_t __i3 = 0; __i3 < __nmatches;) + { + __name = __names[__matches[__i3]]; + if (!(__name[__pos] == *__beg)) + __matches[__i3] = __matches[--__nmatches]; + else + ++__i3; + } + else + break; + } + + if (__nmatches == 1) + { + // Make sure found name is completely extracted. + ++__beg; + ++__pos; + __name = __names[__matches[0]]; + const size_t __len = __traits_type::length(__name); + while (__pos < __len && __beg != __end && __name[__pos] == *__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] >= __indexlen + ? __matches[0] - __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); + __beg = _M_extract_via_format(__beg, __end, __io, __err, + __tm, __times[0]); + 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); + __beg = _M_extract_via_format(__beg, __end, __io, __err, + __tm, __dates[0]); + 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; + + __beg = _M_extract_num(__beg, __end, __tmpyear, 0, 9999, 4, + __io, __tmperr); + if (!__tmperr) + __tm->tm_year = __tmpyear < 0 ? __tmpyear + 100 : __tmpyear - 1900; + 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; + while (__fmt != __fmtend && + __err == ios_base::goodbit) + { + if (__s == __end) + { + __err = ios_base::eofbit | ios_base::failbit; + break; + } + else if (__ctype.narrow(*__fmt, 0) == '%') + { + 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; + } + __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; + } + } + 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(); + } + + __beg = _M_extract_via_format(__beg, __end, __io, __err, __tm, __fmt); + 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 IEE 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 + 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& + 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& + 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 +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@locale_facets_nonio.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..ff8fa94b9aa423136a397887f7f1f15ae4b2fcd3 GIT binary patch literal 89034 zcmeFa2Yggj^EbYC_by| zR0IJlf?@%zfTAMBj##jQg{G*es3?j)in5&lcjlJeyCsC@d4BKzegFTL&*v zX3m_MIdjuZClhx5{-RluOxg8bPqwSpQC(l*%x=i-VeipBv)WZ#-;g=Jwm#c&(M8!^ zad{&hyyUJbT%r2{NXODOJvc2BAY@gHX;~#rnnaAt&WI5{UOcqCV zS?&1dmd>2)_Dpouj?b)cd7KWP+tb)Pyd9H2Mryjx+}WBkUzMY*y4ssr<*crAdNM2P zYaKq9yVi@|pFHu`w=XuM5?^DT)0&ch&l;4Yg@2SLrPC)q9+$Gdi!c8nYa+ zwlF;4IraJ~TyA@{t0v+*G~*E;1mlp`S8Xq=9`7zM^YW|^78=GFx#jXkpx5NGx`_2h zer0kQaMp)OY37u88-d{!&dSKe)iF$Bw2ZXOL3C1I>$=ZLsVb>S~)g4witb4(Y0d~0~z7|{xMC5YVU2bobc?&M9OmKO9 zWi!gEL#-@xIGceZz^EE@120Xi^f;Y%(2%RPSu<3Psdq&tlHjg8s>(dT*hvxRBWxO( zQ-PFfGQF;vip&b9qdL>;t1pjC*I}<48ouZv>>yy*pqb`1PE6#q*(#$X)qgs>l50v7 zUT+uxX3p;O5GRb-f1j%+GVKIcLOh^cVSEuQQOmj%42yv2!IedxPe!;%TOyXQu9{HF z;i@UCCcZVv>G6WuP*1}4N3ADr?;{jmBAAWY0FN1YihZJ%WE64Vdx;6?CR=CHJM$y zWE0HNTXvT&Svgr<^yRVJvFU)w?KNc$*vnnxYn4gZetx`hE7vAL*`tC6XP z4Xr68#*??-7b5jEwGNYM1tTv3waP3sjH=XrIU9W0+yG|BsG10c zn(V6E+x%SuER6POpT~ZhGGk@6FVi`xtU9yC>8o;A(5ys5g<9w22tx>-+!|*Mjw6+m zxtcH>2^(w>t7sOZ;PM`4mkK*M(Vs&V!t!e(PFOhyMBqHKNi?QNnVMJgtPl*yfXH6X) zM4ELfQhM3wwS&&9RZ%S(8|Si>iX0kc-6O9NsV*`DnA&9hYO%;CRdw#mJf5<~2=MDM9xt}naHmNHv1;~>u6{wD|bQEb@}WH?^DI+Fg6oRLVWNqn+#FU?E$N>6OKe& zu;7SC{J}&Q@gnsI1GZc8@QoH^P=9@*67B*VOx*4G~{c`=lHOF+ok8pIKcPv6je< zD>QGnSJt_`J-UZrG%tpJsKy~!lN$9N&=K&ihR-9)v(#UV4F|L!rAWxOZLl+-0ayp{ zhGqnz+DE@%dWr)kW4DoaMOKxTc|$~Unx|-}>vGqW)w9oG&R*=%Fu2{ z(+ALO@f0-^cgTWJSzQ+89Sxba6B$f16```U#vIkMG>@*@N_X^e^K>gb2RhUWd#K_) z3~7J|o-#7xG*4d;VL8E}aY#OGtX6qR-4lCMT#O*evNR9%(9@C4E7Q$2^8Q z9Dn|gMvmvKt#Fk!Y1~pLFhU>0rYLycl^xAhi~Y7q{i;Lj-f1@wWH1k~x@OG?gb!8j z2$M(EAvl5TGu-aQ!?eaxO>af`kVmBjJXdu#5eXnlFImZxsWhLdV`Fo-3dW_()1_6&Go<4%bkjKLK`Iai zePyb-Gn(-OQ$n2&nv>`ilGg#m2SxWD-JZg$s0f;5YiwdYxTJdEgn`B3Y*G$abgDr; z4cRWaHU*1yvuosIcjP72T|f-;t2Gk#4!OHTHxvfrsKX6|)FfWEXqXB5RcPuI!&9_5 z4rM!uRvAx(PNL0M`v&)!)eDjIeNpFwTV+DXwv%6(*9XF~mnp{lu=$C+?m8RDtc70AJ-K<~4{mcjEC6sMs4T0mZj$I7)Kv6! z^VP$a9sMyQ>2>vP+K(0CHzE>59;8O6bkvMOrNJX2RD%&*N2DhCv|^*+--ta@D@LE; z!UM%_gdv7?I=C~+)pVJ7k(rIew* zo?52Rx1!7_$8k*Lmk;u59Y`_k; zd!h^0GPf?sMca)d*FvU?s5brJd2`iHa!-tm|B-7}`-l0P=&A@v2qxKYmrVW|Dc0Z3 zZ1VRs$NER$|1tQ#g~jA=Wr^)7h9A$ou4|_&pP%G*RoE~wd3koWVAYXFJ^mPCudDZ^ z+WSFIHQbgCkC6ofd|ylsAU5^ z*ESwoCp*?s9ZsMY(#R>*L$~j$t_~f6_IF^U<<9ZpncxKKSWR6^TS)%nax0|PezPq3 z|0T=*^QPUWwjMHcfAkeu$9@UM>e;|Rsl!Ete61s?!SfMJkKOSvFMbH0IgR z44Apo15GugRa=?YR^AvxFH};OQq!n21?*OB!}5ETDijHXnwtzR?*xz)T*~FP*@n66 zp)|0$D{Ts2FchGfw%G!6kBZ=OL_M?Bl~vGC48<`<+c15&ld-SxJn;@%P{Tm-uF7o1w?v*k%?B`p*02waP2qqD9IZ>9f{+ zyGr=KoizSoP^Q>)R=2c08Haul1+O@M`sQHrUa{x)Zl+I?FU%ARou}oBLAd>c7vPWC7ts%xqyL`VzD5xwLNaG4ZKN=+NeL>5`Yn$Uoj0PFr?+SP2wU zh%Cah0A&WK?G(i@$tneglBM=H2p+r~L_qY4JtKne-Q7^%fnAZLa%hgpKr4ArqVr-Iou9hl`e%*1c<&{8nkB~+ynsw=$59| z2Gdl1SvBYrPTRHPV~BB7xNDtY7fR!dQ59}G{tx0A%rb2JPbWfk!a%P)9RYI1iW3#m zKa~=jC`wF*{{=V=vBywu!&syg>`!Ma8=C=%S&%|Y=K!=@sr8k*nIUo!o#_yBA*SW3 z4Sok`ruIQ&Fw})8Oop*i8K644h=s#=4L9xa`j}tZYTZ6%+A6?yV#PznSvA`Se{UDd z{<|B0BnTrTl1mrKQolfTMaX1sNXIF-tj(mu}~m3+aKeI~g)j8M_&Gr(S= zl~9n)-smjzG>b{`&K<3?Ky!?R|2CV_#DL**5+r{kcu1q%&fgbez$EaH`O$a?jX~d) zLYW4+ta@$rb%c@K84Ey*pnUq9DG2gIPzAItf`ioi6k3O?0CZiv%ezq!`z%fs^>r}+ zfb2nEiV(p>9xQSI1|O<|5X{>$&LXZ!ctO20MNNa@!hMlt5?GzZGZ4_{v<>-XQJ(iNd%)N2Pa^WYRemUqCsd^bv_CP-Pwum`oE40cD6IG=mwO zf?&&?jc#x?S|CttOR@5`SzC_!Cf_YAOZWc1`nLz#i8oUFc~&m)UoJ|@pQ(DR?d)Gg z>5S@2fB*H!3h}{ZgNx@||9DV*HRa()hpjxY$>N_WCnM#GPe z^7jV~_Ln;_4fX{Mj+SEsqIhZ0KCTWSDj71VfhufT!P+v&>?FlUp|zOPBDOGEi#Z)) zV_MS|fyph#R^j~rF}(#Z66h{QEWPd1TlcTL@Ec)0`s;{aUR~-HPdO$(ytnkN-Qsck z?Q>rG``{JAH|fj%X-E3ih)2w4UsT)cifS=D>ykgV%;>yVtZrGf|B(S}H;du}^0Tsf(q4xMAK?G8HcuI{y6K<5R~_F5XlsfnCRg`TW6(XOD(Hp)QxG1&b6?QK@4 zd?MM?-e#Hdd0qZ5*;gof0Y!=c)wdEW9$$Ci%B9_I6Dh}bb@VMws1ql8%)EQ@BhU2_ zzpOZTnZNe%FQWTzlV2EfY~Kp8t^4P1WL{V{M*Mtp=iF(Hx1TFU_I_-}i3vyMS^bxQ z#xDt_@rapuAm==}yO>xs)Okf_iHj+>C&;;{TqJUiwfpH$>HDiWGar?CUMy6ct<>)GQT5`LhB=Dvh73rku!c$Fvjmc_9iae8v z_2p)N2TL4M4(ZF$QSL13&b70^sp&gf326RR|6{tD_dl@3L#IM2J;iMaLOlM&UoMyu zRIsce)Yia;2JWyX3TR4v?e9=+p*C-YJ_!C5mR3j|SO;Hbk^S>5F{b{CkF`zpa)o)K zrVdIhbcPhw&RX~&pj!a2d7Le}e(%Y?;-d%tDXxFp^7O=E6F(4VUVJ$Im;7CM;)&(2 z_sX4_{gxQo;2W^`pRLanzh?Y4`i6`HW>GTb$@jl{XXIuv`x{4(F20>#ijhzKaIfpf zxJlyS=j(62dwBNEVnWOUU#BpTV&kEU!)MdZ^XH5|}!F;xW~K$C_73e^X41H}UhevR@pN(`wepoEWVPJ_V> zB&M)G==7C8Yuvj1tnav3$)9X(g%r<+_VcZ>zt8`>_A~A!+w0WuNH%ns6z86ZdNUU2 zWBy&e8L1OeRfzzR3SjYzbdLW&&l0Dq#WnLM&1pcFPMd)ny8kOeCzvsW%7v-f!fkLd z_rEyyiXqoNEcQQk!#4|teb_?`a;N>XE+zFzQ9tg?OWS-ueUI4Txck+H^cgKh`TMqt{GB! zv0+)*Z5j>?z1m2HC52;2sOT%tia~2^)Dx}=)DBVUUV>mOX&_qDkxgT=f@ ze|%+#J!z_Fx9a8X3(i}*L?mu`V9ufZE0(kz&}+a*vH6OkvxmQN#qWejG&FrGDPvIX zpc3)d(Ir3bd%MkNlrb!KSh3hPw!3fB_fu06>@jW%OmXrJP=?JH!c`&C7NB33fZ}ozFdXA zB+2hF=Oc|`R$ph9{a$lXKtDTFF}%Y$0Wp1We-|zi)C`0*76LMG-fzs{^Bn8f!w!WC z(}2>p*5-uFXRGwMYZP;3XwS#HCc&(!xlb6HqkLB-8#+`T2K`Ti4R1JW$q*9QF%{13 zuC0a(1;tQ_+)MJI2sO3nIv`C2)J*L!d1q*x@iLntUDNb%pF+k6nHDDr#Wg@vP6Sf~ zy%TT*;`NGpN};D3M+!ZqT!2%`1?nk9RfYhUBpuZlNtpcDYZE5xGP;RGE-mbkqg@iZRwY$Opfb1S}y&usM^`TA^QWdT$SNHx()1fPYV;{TsN427Km z$+8gUdPSE~73VANc&H?%{T=;G)K2o>hBMJ^mQH*ox&>#VkAu!cWwnhqCElftgI*9C zsrESBc!1+eH5n0M{|N4Gx>6RX6)(npyZz-s_l_$P-ygl{`uP`KGDN)dN%fF{UT41e zea+mb8mqrwDV`khl&gI{@$)yXxB=t#^%s@b)^+&stJM?54{5F1eJlzNh}R3p_iXIg zd#MnsxVq`D@RN`td;@crYuUDslR=pB}DS&nWuJO<6?eAUsZR;B&)JEPJ zVLo-nO;{-spn(wdSLimRn!x!WQe6RxVR>$hC- z$ocp8PJCjuEbjky{n4#^KU^=SwMr?8otoek-LJUQa_II=-wOF~+Xs#vvQ80i47q&E z&h~$H5Jd+UzW3(TBY9%QWfz~dxWnb$#Drz9nzsJD>!5g{e`e~*$H!ENs-Z{3_7l%N zEM9K$<@G<#-PA!W?y%vEBiD^TE>cofKG*(+46E4v>kC&FJTYOh_{Z8k(?0s-y;h=q z-OSgIwMZ@%U3wq>;NmY|P7^&F=k*?wF4l^v)!D1ICU09I8e{%WnY+j`Du$#*1FDB* zZ0@uT-5h+g` zeRhTQ=eS4r(rf-fQanvB%<&#~eH|nPojMZ-w+XJA#4)Z`lj5RR z)g1X(^O3G2XC=MO5c!v+Ms8DEK5jFxQNVpk@rDY`r$`BUr8y-e=HeeKA+3ZDR4J`G z{qO%?8j3WA;UiMI|A^F`VZYSQ@0S$ii{_W0+|X8c5M>4iU~5NGeEvAgjTqnLWjU?4 z%6kk&?DjI1gV1aGtMDXAGZhR}Wde3H{)dKg+#MCu7*-LC;Xlpo{C}F+2ibp)r5%z2 z4+K0=g-f8rD#710+^Z}JNJ$Kj!Im(Fbh5}-Rc{QdTLr^yp(<`GD`ix*G3TqsABI)C zF2kxhmti;Fb*t}s0DDweb@$*hs+R}DM^WaeQbw2Kc}h=D+NyPqKZUeKCk1LzH%}{T z8SX$D;Qi4`1a=zxWJvQkB0v)W#b3z26G?z$?;#Btnrd6!cW8?Z(m@ByF}8H5-v4LB zt{lm~7h>05OD>CDpF-?v2Md>`ipH49@tenNW0#U9g{%v&%e^LU`Jc}V)7|TyZh1SF z;OZH_#Se`+Ynk}leNj!qMRA{sN4~tO|Fs=1lSG^QIy<+fKfYBQd?4-Vv$vj~ERtLk z#{0G(7$DNN{(QmIZohUF@2{La`igdUyd!R`AN!;$_3!@T(yBgFPIkP;FWTMvL($4( zxmSxd&!!JcnDNrb;={Mo-mKYE_JFwetBv;f!S|dLvnQskoqFudm16qPua^#7G2=dQ zcj?KBn?9PpQ1t$(Xi>$OM}D?Ix4`-Z!_E^qQ>7Nee!#5X3~vbbh+ssY0C<8tm{D-| z_WP2D7Rb}pm!~nP)U@cT0##cxbXUBT9-GeMNm^_l5>90C$dRlKx0Ib*Dx|NnKfSD@=L~V* zqaE`%eK79|adzonjd>rW&6awm_AD0O`{Po-`tss&d=^&@Zm(Q&*L__!KXcS@7T2Y& zNK_Jy@KpCnMm)m1{{e#Ird{gQKU=5M^WCyZemg9~cIfZPe{u{g!@g*iVTF25X&Me9 zvj3g@wgOA=e+|JEL7Wh$${6v`hI8+*Hl%(iO4<)Ue*KiqJH*C6-mJM|eeafH*Liu@ z^?PjU-6HA0=ugkO`Nh>@`PSDzyL0}owPNHQ*}Xbmz3(2;`>tP~yJq^%y~1V@iVnDwB@WZH=NXjK^K~a;*Nph7sVdYWyFPHcJwsb*tb9YN}_Tpfp<}Q z!y9}r!Q+I&-b<0&pg9jz6{FVGEd6(6=V!Hw(5nXI1Bvr0Xk0gz65THR{?(6t_gL%1 z#r`3mkEuymE0S)jKl{0}p4ujUI=tf|*LC;5BQ~tqJbPxs?kw?>>8n4--7w@FaqiAF z9W!=)`-S*+-iX((-Tm5m;{C!!D{mQ`v0hBE+}S@nVPc9ImNvGw8R<4srpnQ^i!i|l zU}r;}W-$pq$?_6wBIYy||AGrNbpkFbRjq@30+w(IhcDtVacI7WMjSdFkum732Db(6 zjCkt$PWPb3H3sCyQxQez6~Vw|U4`pwT%^#KF8QaJTOoDjv)E+Vo9sa<443+MjcQ_;LE1 zZ^qqm{gWa&X~v7oZLQxIZ97CYbMH2B`H6zrAitM@*ieB)Gc^P)qaSstGLvKZ{# z{n@@5rH_e=_uZS(`J%nY#qIXGpS$(g+DeQ|IQYrS@7#Grod3SP%fnZ_|ADCg+vk0I zZ)O)Uuz&gu?^_@Fm#C;cXXAZa?_MpkzW%K5(F;b66aC(K%id?N#Wdc~@2E#*!+lH;P`WV%=C$_53l)W2)NS zSW;E<2~C^GUD^x<{bqAtql>QUHD$bQqqd^CstP@0rmER9WHKv1131EX z!m@|Dz6`6g&9FLk46BpFusVE(RmW0>Rrhd)RY8wn@$@gf>%RAXc*w|Nm2E$gOP4N4 z2NeO+R$^I46lFqc35YVG>^Eu`0_tj`&sWqJniN%v8sa4Xorqy^C)CHV>G+pGROw^@xX_pSw(4aNp&9&$;vY$3*v=-r1e`kCJCa?+gE^Njb5_ zE+)Kv?csZqpE*nXaottFEZY6$YhrqOFGU6K9A+WzLpk(%!yQ{PkFi`;K09@pIyZ4xc`-JSRyKcOP&4(d_q^yd`d2({k!n z4;H;FR`mJc%X{u`TPzknpOEdk&h&Zc6?Sy$7r~8$LShr(@)-5i_?)J^WjwBGG5mXS?PypKmgs$Z%ip~pY`>KI88Oo@ zWx+g0j(h{Y%(Fuq%&`f4gg6gQ8WGVet4qBHdU)Qyp2(`mm_ z<Z{D>NAFrAsR!o0;@byO@{zKA^;X*s(2T_DZcuWkyFvRgAj5eM#^YSLU zDqv#KR?(JE{lY&rE{{sEyowstHLJqVLUubEa;BL=8&FA_8+iB7lNT1|RUB*zO+t1l zmC}P9g_PhI!H&$4_QHTUiZ{AbpTwiK6rfja*9*pmNXSrtgGYf`Ie+)Y!K2JflYXYS z`0Zm|?&$h_KXKm3Df1h;zSv2u828IdC4-*$Mcn`5%ng^G`;VPs&8HpC+1ha4F4411 z(Y6_ncy1EuL))%;@5G1G#F0OqBwjqGO-@eoj&cvF!JM9&P`7%x_}MH4FM* zees}`G5&sVJn3i77u|estsnC4!_NX?E<;8E(qQr3nm?X;V%byAF|TfZ$wB5U=zmJY zmp4rB6!+2PPx9-kQpkXrDAnAOL*Yz6)LdY!Q&lb*>Qwo^*0y@ACIg?gVoKC@J9+%s zCk5+Afft$*3`9#`C{eY7*c}j$Nn?go7my@qH_)~a4la|Gm6c{nu-S-e5Qu|*%-TQ+ ztuYK93ZuB@PtnBbzsO*V*N*?4f{y=siIDSuP(DoH#Y2M?09JD6pe~Tp26s!{^chyS zb%xdLm|z`Ccq%m=q4Iz5L@GJN`P_)I;0f%ArX-#Zlj#ha7D>ZC;G87lK6#~hTFb`7 z|I?}6xT7nPm4bxsCS_dS8!EvLDphvi06TD*X9WCSiz0*wJC#OG(RFxja86ZRq$rqI zK>MaB-(rk$inzzDm}TW3%M&&w_9^Mu5U-4aeh>{I;Ey{CYBnr-YMSD5%dx+LgN%^6 zkBB4?o&rH*jwPB4vbOC6aT$eqYbVdVJPqGeV|ro_m9MB`NI?`2>IV~h5u)asQu0;#)nsD(I@}DbIYMC!oM1VEDjwYPRa%3)|4pn0hB z75nP_*WHx3KXR23V#Qhgf5Bk*mz;!Z{*rT%3IY8oCm~V8emN0|8urT*kkGJLIJ!s2 zqi+>H(9AhO++A`6(5FVV{peG3B_`xbYYCcI4rn<+V&A$2Z7#U+wdb@63H&eSZvDcw z)pK_|9d{6N+h)I_-Zuc=6v~RQ-q|SEnNkYW&C4XNy7=Bpu1{<8{RvcP4n)_}uK1V{ zUa<{Q3ObXFD3Zz6RCMN%A75T~*~#`jwUz>%F`0O!%>F-M=`(SQ2!#lwGeMDloRmQZFuW8ITvqLHOdc}o?LP;`dgFn)?|LG0dF<%TbXyZ zeIa4xCtpThcbM45VnxUDiaO*RzeDbYMji4rBtn~q9!`DeNcs(z>T}BcBXmXyx7ieA zYS&AjQEjDYMlFHpgkg7_T4GvDkjC-U4#(710_tRqMQR5q6Hq2YU9HLfuGTE%y4}KSmvCH;l9!k2Dt}&E=8iVx+k|(nGsOZnnO)wLJRtcE$8| z<>~E)>FvhTyZnaKD^pirJv#bZ?eSK7ek%oUrSMy?UHjv^*GuNXk-IACo>f-=K1(tZ zaLvC5K7e~HM0ua%*6ZgM;ur@l9gv974_YQ5(KL*D`R=FPpFR3v6F8ZK+m1uRG7MDxS9`WHbFyU0T9 zVj%{ykO#5^16jfYS%!fu67PQ(=j! zc!6q=XcqBg;hWi$o87kH8dK}9GF}L#Wd*Jc&58|JQ}nyn(WBr+uzanJ5(VnR5`nznE0^U=gi^c}3;1W;IYi-0jnkB6X#G|?j(=`J$by~o!6nNV%d zG!sG3G*=)^0n{1$N@tn!I?EMEl$VRVT+YiyUM}YiK;8h(8-Tn4oaaEEgYz87b8udJ zu#fgu;@j=PD%xAAzCqYd23d;$-2vzhg2d6xP3^wicnjR`n%>U?-hM&5R|bUGYFs?Q z{;uN)@9(nza)sHg#UVT3DRgli*YbmY>o%i z(~^foli@3^Egji;3WeoVgZ={lTep@qTqgXF30N2PxEOk98$Gg>?kc6nnA5{U>MksL zz*_D4Y>a;@Zs|=m_eG~VK=$asy!v857c*2O=lhFfdOA*?fixS?6g-{6PZ!ID{>5@J z@;;LXB0+4x_A&#B$|YMTApr}-fz*AU6@GZ$)7qc{|BD;a_g^yQ*OB`pZF{mb> z*(n8GPhp9oGbD=6+-PS=6rEY3c=qyXV#{TNM@DOu?xLn6QB#MyFI}Gbo$u2qO;OP# zBv7~zV>k5pv2fk5L0p?Lk<{|EO~oc?D5xDVuEW@_GbdqeUew|>W3ENdx7KvbTlRnP-EMve7uR(ukh;DZQWX`8(4LhMWF?s5?cH?p~Z_7n)|WP!no=| zriJD~2=Zc98;kjY`rAx$O(UR2h8&O)92Ux32xuWgdjRcWC{EJF=|8W_3_&}|HT0_YQhyaC3cK$32;Gl?F9;w|5s^2SG9*aqNG1L2UE+hV|d zvs&y(h+Ndt#O3ZY3$qIIWT_~t2)~zST%IdSC9x&w+7+=^;I}lk6u)D$#^R}?t0P~Q zs=8L;x3*m^h^=;P?F6*mKL6U%lui5NqhYJrUkB?#okS#Zos@xu+Qi05{@pV#dl%ox zRd!8VF9o5LF&Jeng-d$yX;g0jvtS9Ut*5&bd3iz4RUi6%!sq;AUD#l;%X)L%%_IdBaHm2fbU@^;> zDJ{d9b{U^(4?Qtt$;26LKi0N_NWFx^ArDJA1Lfx8>?hsa_vSHX>1OlIV+bkqi8?{L z1nK9zpNFGs-P6Y$`uoH2=W2B;3O&WX289SmUiO*Vq_!eq^IoYEsn$%8nINwB%oh_A z7ku9Rda75_O}#j-N;s}cSa$ptAz>2~saJMe_{bk09nzYk7#L08T>wj$a|SS9E%vIcV=^hH zcRkdBcH^?eu()B^8s_KCFOsE|=9R5w>2dSp`1RMr@?X!>G#AiZg34)J!T-(-+`-hZ zUWVVV)b2b6Ol!LHpKg-ZEiSs+O1oEV5_9g3eRFjA(RYIwvZk0)xVk}cbZ+2&scym3 zeGGMP1>LZtYsYjKF+FOOelc3VyraiG(?b{PkxO+~cs+)&9{yW*QPw|5phZO~nO8Xv zoAvw_^T9hdr*8(|csK9eftdY4QW6qv_#<$GbA&`>eGQ;%81hIySTpA!&kN4u>-0dwGyFc@hJpd)yCgrEL~2qnKsqmk#Ax+0PMcp)~# z3(eGn0tmzf=COb(0aY?I#oPejJrbd(nn@;20(1ks18y)UGgJgl zWY4h>G!W20hDvbzx`Yq6SAjiUWdW|^7GFFP9fvC|F-TN%B@VHb7R(Or_QfO7)5Vrp zBx-H3B?Ae<3@(MoBhl0SmNrN>hH?OrPM|Fu%G)vzyAWd1g|ZKM9pGHvL5>HMiKm(T zv^$=5=cgCr>BamsA5Zi7X@Bs){(OEal4BriQ~ydJVwK3$mlC-MiAFvGZ;aqKMgbbd z&^U-)<4Dnk-+@S@0afAMDt@;L?^f}(zK8hY3swG_!g3i)IxCHK& z>u$xmgOYB`)m=aJKyi931pU6A9;siyO`v}}M2lpUR2x?dw5T0gI|fX<^$#27^9a_|Y7EdQU z-A1C#80Wuo_pk+^_CzC)lW&ve8FTC5N5+vhOw#KPm9oE zWC+bkNoZF`&@dlgEOTS$V)h_c6Ns6b&V?=FAVf44kp?oN3qlE+Vo`bCiv%A00 z_l~)D{t~6D#1xW|Ko8>B(d`8-?8UoO*B+81yme$#S9pRFm4KErC4)#`5~Ew4v~IuT zkAZ{_7LzpFG<&dLlJUQPqPdt@VF#%K$x~nwU$s1A)cWl=!I-Tb=854bqDm3k@EOnZ za5~ejv{QqHCBf%(Nz8Bm$!o8)I^N10h;E~KMq4^3bOtIfF)yJddjQAT2S^~$Uy0O# ze(bnlQ(WiV3ZE(dj{*D24ntXCLQiT+B|6DT6F6Boqbqk!rRNJ6{iPdH|wxf9c7 ze_i6M6IqqfrzMAwZ_LJ>N+wuEh z;)i&8IPoxkk0l<%uRj5klfbgv1%NJK=w8GRx|e0SwLs;ytRj0H?&gp45%X&tMZcEl zSaJg8PH;I1_emwzoVNnhilH+BoykxgJAX3C zE1$|VWoW)CiV{T9qiQ5(w9cSay&mg!J+IpwoM7j$a@2`9$xcgOJauE|akENvk);<5 zwZ+K08+mtg-aUZsVd!C;I3MQo=#!Qf{wFPQDEAcdp5nZXIGJwb^XMDcuHLYaJhKnm z@jl*|522PrT+26rzG3KFK;JU-BWn4PYxxt~$)Bvm`_obd$cI|~!qdO_sU)`m|Dtv+ zIOSRRT-Xs<(vh*mmwxMgmgRS~ZNmD!3qA;I`3;m|C;dVKylBe&f5l{U}K z-n*Az?_R=t_Y#Z*5Qsly@3vr?(ve8&Uyo^7&kBGy5U}tK%Rsc9I^>VB>vk;NskNc{7nWlk&s|eXsoH&)gS>N7=htq~)ifSVn#Zesgkiz;e3v?FQ*AKQ|vU z(s_7iP=+p?((D=ki9bp%-jJ5ob#*Ya4-kGJm?KFrIhwS~26}TK!kKp6#=Nf6It&ps znuJ9A>AdQzKYXO|;?dgdM>;LsQh7^*S-Qo1O9S_fPYKq0%=g60(vHL(>9X`@?3;w@ z7fCTlgju=JzUI=oSA1Om)CBh<)6X{4A0Bs7aVJ+4nu@kHaiG4PDq2nb#*yaOX7%5N zX6|B!@+z8sRU(bYQ9wr-x)yYPEgzuA!%#P#v|M7~d%K_O-7sumvvycpZ`G_F*|Sa8 z9Y+z~jCP{Hnh~>}aFc;qOL{EZmKmuTz>%WFB5>Qw6D~)m{rzDi?@!7Ue-WS}h86)@ z#L!|ui&@p8>7tu8xKLS!``0{2kTI1V2oVrlSdH_GKgcv8>EU!*r6s0e6ge?D*hRV} zcLR^fkIU}?e9!8P^GIQlQ>#$64ReOy zX~y`({%7{QdE?Wjb2RLZ%)0`Ha{WGp$);T#H|chGLi2$Uij>FD zKtN*v?S&u4UfweITE+mXMc#!tdtS&V&I=L3<3c`Jbw^%z&g+i6?wr?O?gYgxwb5TL zMxr+Cz!f_yGVO?AWtYbyuMzJy^1F?Aw~^mnB)5SA6t*0{Pqlsu zzdt4Z1Qzjg;?Kk=(y%|JFS5A&_*x6+~hUW66A zR{|vNI%h%J`9EatZGtZHK^OT<7kxk%eV8s1tk3w4H|X+poJWW@O2gagDLuVQnb&b1U|^8M|je{nrRYco%_08{kwxZiZEosLMJ29 zJl_bF%8e2ZDEOU#G)a~wYBR0<|Bpb#Ha$3l9+N@;0F3@k7d_ZLni2~r%0=ckA0 z(4`Dz$9wiC9y?~Jx>H}P2pG^MS9>Pou)q3?xhRu@}7RL2UDe}Pa(<2 zB9R={2NcB{1HvQd4blQr}vzW3X@~oZ9CLKCaKIO@bDk)DanIgYrT0HS#ZDhK6JY=e&sm{x5Lc)Z$TMbD=y4GGukW|FJ-qHmFzPk6M zR{JS+E4Y9Y<}(2KrVMkKc}?*h&~D300%+#R25oOw0UO(P8)i&Lb zi;W5~*PPX159liDrI+S%zTpk!<1IF0<&(-ht}@&&MD=IjUv{>w-$fU7xg=(KaGyNR zYP-A68(O8$)5XwLTy}9dtK8N2E`m}vFe;C8ytBd1H`UNu=u;XaeIS+_FtqIRbPa7) zjW-;c?Z6%QS~ukejiXD@1cdf3O0ft%4a`e$eLj3S!H%2v6s{_?)i4#T9=3jJP_x}* z!pbS5um_6MaMVSKR2(sZsxh(6Ew9q}X%?U4a!!ui1mTHcy~@g6p$ntCaT#zWbjj&f zUS&N#Yp;G{$cE2$=fza{e06!*+2b9KEck+Dxjo~v@ktAiQia>$&DLotn{HWoeVG;R zhQ{&E+H4)~yjfMgnrfnSv#vqb_2jJdPKi%RlB5)qf4|inP@$XfC0+2BVhQJXTyc*@ ziUX7h0VtClJO;t7V-P!s3`O2h&RYj(j&;l+@^J?%-wF{_Oz5y`$Dpf^7il~)k`BRt z4_M$m67&f8H50_FiFFCG|1o4e#{Jj=XbVHfAj}?PQQ??05>ORdT7Tfd!%uW8zEW#R zQTmf1P`{PSSpiF6rFzfT)ML2jKqUVBdhxmE>~8rJZDY8!rN$B=_nCAgoJGXdE5=o9 zS$QzJ&s-sFCxvV~8351M0erX^0MFL}@;tn*HNZnO{D{{IkKa<*@0VYr@No+^?qnpA zkP0#Vh3vLo2)Fe@a$DDBTSKM%$Kuc|Nx#Kz@(-5uk1PdUq*YX>6vU#8K6GK~(4kHA zr%;A;>6&XQ>6@o~PKBc!(2Y+|xeMNZp2jTOFnlBkcSnh5*vj##Zu&YbF2p)(%AKAJ zumP9PRaOm4G$P;mlq-hhUGH+&_JJ9uqqP%K58y{fI2&}d_MLbZT>8wo1eJk=!?wSt zwJQ>|wfeWDf_kf(B5*kxkf~Frm}t*14vKGG2(3=UF~{{rY_F0kg2VFmwpBDmJi!^y_w zxooQq@d10_4p$Gl!>E5XOX;!}T@9Nm`#mP3S$I1geuJW;hZ~&O*Dc z$3&pn7K1dV=%v@xwJX1sjJr?C=qL42xzd-TUm;ZL&4&|DKHrX7@chBtS)IoJuJlkH zufvp((88F*lgnn+tXh23#639`m;Ct)w>fFl(^gg+QYXxED{BnW*jk!h*?)#L4k;0{ za)vbvsXL$;+~SO}rUN<)U#2_DniMOE7AbF}&sy{CDy3D0hA7I6v$n#NoXk`I7modZ z$wPTqf5C$ZuzvZIhGp@eMD9r$3MapeDUhwC5IqyPbtYk%SkQOgH?LJ*=?-lIqX;z7 z4%McrO_&KbG|>vxCn3RXgWr6lVtgM{Kno#cYD@y>l=#l748^@{O~KPv@Yii+CCTeC5n?DFT?2LROa+NgKoxR=)gy7}VjR(O1fj)st+x&)JMSiOKNibm1ez^w{9CGkW{!0sVCo{q(Tn3a=kZ`orL%}MI@|gcq zMzIeIzfUGcu@8;!lZ}jmx-3TJijT2JHL{9(6Ro$_<^-A>i9{% z33X`hAb|}Hkn-&YV7Q?pdXC7i{&ZsC7Q$iSS*hs*wBx&(T5}?;-)Ks;w#y|=0Qx5?}iZ!_m@0Z-n-Jb9~J z1%Dk6o^HcRZ+&4rZ3ncSp*QjFoAj>G?(v0^_hRUn7vrOhM2gB)yx}3_ zy;1i0H_Fp6bLal@ZtS7_`A?jRycYwb7X!bQI?1`Wz(C$D;p7YL50m#@n610y4#589 zz~JR_C*bVE7}LXyy&C{+U}&RUiC&N%W+%$+q;f*@W^aNGEW$J{lB>BZipOzv2pd=m zHn5c0z(y>?M)EHfnu?H)2DmL!Q%BzqG_`8Q&WO|CKs-$*sbCsL0m!3B1vBN5{+Yb8 zv%%44%On-d2FA{ohci?Or~$OCU9AjVi7A+|DG&!})|Bg!#UU#(8w_x^9D_Pa%Acuv ztnKVyPqh+LfH70RRg^l(MZ3FUB@n6@b#8qrI-xOKozZj!IMEk zoIV-dF#-ANWRNi^-!K_6CL$JzcFdVze>2%9{w8$bChovIkl8$9O8N&5!cm7Yopx!Q ztfD`~))RO*-tDfyfr=P(6;75_asj4Kxjj&&BN|Pg**_6PF_BGJ)i6?3%bkG6+Wpqk zV8t*D;j`b@bj7-dT_%cIZB*KzPP(vkOb(nySX@a~E)1lpS zSGs^H&;ktTvK+)gU!AE(k5;EBVh{%-RTL}~I?ySHJP@)z_sfoi?8Ztp9_4swb$?F&=y}(H?fS|ehBmaAs8AU=Kb{bp$SOXBmKir za@%+l`vhi*wlK&2wA9Bm)U zE&h^_Eom4wjbXecY1aAEM56v+R{bHRQ4@+ayf6fbO3}?yMxs)5rIeBADy+j*j6_!h ziLPcO(qdTrFP`sQ%y%x&cP=`b8#3RLKM%QiJj>eM9HoQC1LJ@B%()B_*fKtIE<^Ln zLe88qkV-ot(dm8-h5mtbdU0P_1P>jA9 zLe|A9&r%{(gbG=`Ah+~lxkU@@tSBC#5P*C_ipTi)n2;>6epP3XrHA0<^;N_7ay&JB zB8-(wF=TEy!)8!nW|v~* zaRW*?KHFp$)R?u1jz`Y12Lo9s_cPn3$ z=f{{~p~O3gt^JOaio8Sc8$85ru|MLCAEkIm7e@dcVU_nUaGL!^%0;=~;avN> zlme&?B7w9q7XwNFl)#Y99OJi{>D~6YgwWocgQp#F9lWEt08pyA7ZM$W)66nbYn01` z6Hcai9M)0$;@PPUnK&^*P&XA7#Wc69dWg;`%^7Vb=dW_z#K{7EH@O@7(p~P}T9$I- za+77L=fIxB(WkQ}B;5a7MW3%2rGp(+@P(WjS8Y8a45YC3o?HSY_!So+L02ZUdpP0S z9LPUNJ+j|25;tKK$#*|IPXX(~6iL2xZPbiJvbyFg8Qc%;i`jO2ohdbyUs#LPT`Q5I zKyiA`(LFV3tZ;h8sy->T!Q4Ls=oyBNOG9xL9ecKJJ2&!nrAedx9hgh82C)qAu%}S% z9;6w}-4#pv4BfU*Be4Qm1|yMR5Qoof#_{c-1mq=fUPoBaJDN-JG}Sy1iDpr=dq?U_ zsMVZQg$g;C2GbW;$yPoRsgir7*v%_-o4hi&w@NMix00`q=s4o4^WT2(<%y9N8V42N zPnRxOYradsYh5?Ij*xa_@5g4Gm~doX5a)|<>bV#)%)WR#4LaO8-J}vMS)iI@7P40nBcPo9kf6z)YeRCFw#h#62((^r0(Xd z9JJ=a31S{!2b~X`m@kc?*3`hnkyH1lCYLO?K@X!)B)ewYCBM``Zw_v|Cn}%&s{( z4N6>8e7?4-42FA-imQe#!}pXboYnY#jLR1TYZSg`?{!hwa9I!2@RN|M=2!E)6$;>16CGa*6m_#;qPK?gL&@?s4GJ~0QF$#5g`{gWggIxrcxd?&LF zSG(gAM9crF6f?t|iaR-^lb->f?-^#JPTq_#V2h9-#o!wC3?$OdYZ2gsVv@sp$2``9 z8(|))P94{1g3A?7HVN))lV~H?!^LYequ)8DDGJ(oyx7vc*z`#nSHd{t8g?EF>T5un z&2vAmsu>C<~ed7Bq=j&}6Wn$;^TtzUa$q zCcXLGBf++0se`FQL4l-yU8xC#m}0&KuD(louuANRr3QpJ4{MW)M2F=&;gf$SyA<3H z=zfMCg#+oM97p15Ku%x`nj^7*7jp3_)xyvcPWL8mS#N!PZt8iA41{YdI1u40?239#dfJ3*K^dEB$fk z>yP84Nc=+y!JBTd(pzCkjzx;Yb2C~sTjQa5jze$atR#HK!NMPBrJ*NSlaOp^f4chV z=pejoQkud;Q)#Jc>gP_MsyGl3A{faH*ssiTC!`Eak{Nf`%+RxH;RR{Gg6SJNkydO- z((d4gQ;CtO&cb@mQkkj}2gk@%&5%19kcg?y$Lh`}rmBC>gGZn^iIE`X^B^b!i*5A~ zPUXZ1}PuaYR<+=wH#;x)z;RO`4BnEi@M_@ zKT!`$xMG-ul!aE63x_?}@uh`-jU@%C2Uhbjlz7aN1qyizmkFP;ko99D?)GoAi~_U? z&?d_$lzSQ14_~&>?liSJd)3zDZ7b9j)}lWU{<=I~pUGxZ?eM|JZhl0p!;Y}zS(UEZ z3Z*oC|HkgFOzoW0nVmRtr4G2LjPF55`gL$jpbIkCw+Z$B?3+ zdH?bPRX~7*)HlhgbPhLx#|2!5Fw*KSxCi8c6(P@t@2(=dE9p>{m^9BYpt zmsh&^6ABQo-Su8X@b}ui&N^FNb-iPv`gH{?EPp)+;`GWkE5Vu&6fJ|%*!n<=2U0-a zE#Vp2lA~?(!~L{=QWo-xfbK=?n?4YE11V1=uD@;h;oHZo3E!-P)m8klC>~01E;~k> zimGD%?UxDV2Mkl{QMdUP2w5=}iDa1eaAR*T;k<`H75PZTfHuK2y@{_tZG~cSD_Liu zh8%?iNNCYZPQ`(XaGEZHdee-zl?YjR2C>$Rt)CK^K}P`^#i|u8bg$~Tg|8Jkyw`Ne zxfY>y6;}XAbBoQST~mVcrs`3FiKtrmcR_iv%S`9UkIjilv`~KJ`8iJ@PjFrWSYiT) zKuN@X{6q?bB((Se|3z&60#eTx7Gi{7KrsBm5=u%3Ei({%iLkkS-OSgIwMZ@vYFyt! zqp`v3zyl-hxlvzW1{f5H5z-`>I5|$aeD*0$4?aAms7hH`N<6Sj4(U)G#MXb#`nkJV z`Z@M!hJllre~JGk3Ag|I9s}~|Q5}ND5yp>DS9(D@yN{)JNFS*CQ4(*nWEN&(`MP)L z4%+D%(-R`M*zn}i;=5C~j8f`kF-!X-8;>;TPAY$hT_bdpdPA75ut}a4o@Dqh?EdwI zD+`{OusC>In?Sb{3>lcG9K7?U?M?U`;O=skLiumyzf~A3ye{gRYo#)4WBCM?EUrzH+i1d^E+oQP%z*rRA(YH@47){+DoXs}cw)u9^g zHkdkvL0dCv!fiIqan<;MmsZ`*9Q7WL-P>4G?ylzVC1EH#GIqdoc1P@vT4gVOYv5ZD z5_YES%s`7;ym6()NOn|6SO0y3Y-lchvx;Xj(f&S=kgg2UZ{%dugV^M+N94XZqC z!*akr;$ZuT7VR>EK4B(K^D|X_!b}`g0IT|hdC(`!V|{{l`$t=(z#Srzq^liJJL~51 z&}ZEDdPk6l`RNXPrg8@xGv03MR`gD3~%c@NStJ?f0@6)Ufqp!v*wW-^ygb@-%inN^9vkcdSGtibuXcSEvwb+{a303q3M$)Hq};Cb1~|8<<}J`a z!nI`}k@x%pEX4w8xGIz1jA_1EY6mj870Y%j3#8fy4ue0S2M)jjktr#OwdG!@j=Vry z+TXp9A^@wxX#-B%4HV8rzgf$}582M5>#Oes>fH&%p_-NZw|NGAwFP#n7$iEpW zX{N(#j=2p|0$PplHEqDvZ{*8ila9rrJr2{(Q7~xQ%}-T6<-^-wV-UpCnU+$v8z+e(rWYSoN}VF zGuQW8KQvZ)ug!b#toydrx1P51CxVtIb5zA zP8Z!I;&Y|QE9Jc5SmNPi92BdjmR(o3ZCkmrYX-imYKo1G56#1HXxAH(I0W+Ukk}#J zP1H+yM2itg@zTh|k%-9PN%25)GbL#X&YD7to2lR?%dNp4Je=`ga_GJhUopK=B8To9 zF|->cqeHhz|7>~?^Vab#imz*hPqF>9G8L){b}GnUT_ej7zPwe3Q!c(GkJF;NmelH- zpmN+~h75$?R!DgUHHF##0?eu}n8`r21%l=lGig#5fAZjOD`)*;ZHmu;GqK|hBW!?8 zIo*|to-g*_ep%sAYDGYI((<)J@Zbz2G9qVU^U7qe$$UWh42=RbiXjgm4?}YS&1Gmg z^lr=L!Fcy5@{UrTe(60}grXz5B74NgCq#U}*ftEsZ1foOdr!hWz&k{Z>CUXF#paQl zt7D~4Vn0cVmkz`pz%Ot=28nPz11I1NX)K^@sOhpLV5R;M=}1VRFy9cvDearkqz)gh ziB!?T&Jd;OPSSXV=2g=jfZl6hex}RH9gyg-{vfv02c=To>`G*0hCw<72}A@=Q-B0# zX`y}mBh+VNoO~0U%9INm$`?FBFKpD{%v8f(Kw3y~W!OM_Js|nNAs8%8Uy9?(QuERh zJs3LmK5<$1W!RpU7c7U6e_!%_u+QBeb3asy>-w(4ICk{f0knU+)7uc*cg604$hN!F zZor?UegXx@o`gNn#P3bn3ybN2)C0&lm~ap|U$*%&QI`Id@h@z2$6Fr<@AjME2VtV? z%zg>8De-KjNu!`b!F~cI$|xj)im~GqbC}ox5F!S!5OD=;h*wDDZa&z#`?GyBN*_}N zac2z);`$#doAcj{v*gWumb}^A8c-^uU0eSh=HW5$*euzAv@!I8QsSPdi25Dee1?zVEaz z*c{{w*2F3GNU&1R6mO6O`VzFSqZ#MxsH*vnNW~pZl#D;F=EKIFT7%00)!qt;$X+9}x>LiY^7RKU;>ej6v@Tap|k(kpEDJvl-DNnlDmH zZnGt|%8&$=myU%D5U|&Ur2c|B8UK`!DG+4;(xhXBcgB35Xlp4hbRRoRJ8x1c?-f)( zExPhveZ%_3aj&aKdSChcu(`_OE&7tS(N_MYr>FNbJn6~l{gkgVd#3i}>}8~8@Y%ad zZ?Vz8HZo`8$#L0F$~~Qbxb#7sdKpQ~@ZQELH}`mE=7Uu<#UV9rZTTqTeMS+$ARL#K zk$grqT}>(2rc`w`Wk6-Bt9kXImkYkW;Y|M;BcIoD9$0W*lX)uLV zSrm5E8L9k_ORS-JHW_VkNQ(oRqgL&%!M9Ds$_~>eE1Baz!X z6~b&8(QSr#91FwaUg3Tp$9DtBHp4uP1Nzh61a{DR%qZ)**Xjq_Tq=neJ7pkqhaKxmRAAG*n@^`W5BnJv* zvX~t7xq+R|fp`dg|3jwOA*{rMacU8$>)ULG(!{>=JV)bsGm_2!B8JEp%{Dy$O|HJF zS9fxtcACQU?<9fXP7}u0_cmzYZM7!sCW3pnNyL=j$xvgR$zsrGhz;5!+040|DZhrHacm=U zww{KDKCK>TPs5P_xi}Ip!h9%AJaM)FZBZx$m#`3Z32TbaL{k+)KiYNcJ*_w8&bRR$ zY?I4i5)>ZZ>^zt3Z89)wV2UACcG4?r_y|2Pi$aPJbtcD6hKIPd$*sw}bL2~p-*Gf` zzXp7e-{g5Q?#;dDr`=_J?^`Vh z)A?ukM!_kK@}#DDd`YBFO)`M|i|fys^Sv))QeM9SJ-YYnm6y@IN3ZO`d07Lp`VPp; z?$Lu^C$zu;Nz%5Q?>o^rJXC$FyhV9Xr;(bkOX+U=G3_gOuiW8_dfj;Sbt`K_7s}dOHd~8Ruk=F9 z%tXtR&#kT0&rYV$^ZtM}5Jg$RM5_wD-VGOFIZz`=xG+K`Kr3}*u3|j{=eaW49Ja(L zqmVX*rJv)gzvxI*|F87f4h41*j|DRp%#nRW^_Mv=e*|+${1S8;Tf?@(Nxu{I4&1hX z#GJclynXb&W6pZY|C+0sRm@-A|He^o)o&Q6VR9T&?N_gr$>9_`?h0*&X*phaZ-jubse4I}doM{}<$zeZ`!Zb71);uGP@h$r`u0h@N1imXk^7#5 zHa%xku1-)cp_eam^+mn<23Oy(DOV@xm0aD4?PRCePM})#X^~L9ebB{yl3dw8|Avjv z^m#02y=%IBp9BZdx-ezkc1@V@YHSQiQxWgSTDc}HJ>f6oef4hrt$1I5%oYRhTlZmv z7T$jerr;&dO$^@2=lCmUKA)_J`LOUZ^HwIsp01hq`fg@^Zr0?}H=DUYh0IwwnHI~n z2Ecr-&ez$SWrj9*?f(+`>i`0Gm1R^2big(Kl<+4}6Q6@5pA!!n|HcmGcTKqE`s)Ht zekBiMB@qb}w*xQ9v;-CkOG)AT<0^_cj*`npkKkJ{CvTbJ+xQmwmESUNva^8fG+VMA z#06qE+hMn`KK{}P$L?tT`l$WxP2e@_`n+ZvHi47F&f;k%;A9Dh6IS(?j)x&cckLRT zh`&IG1X8hCxIwy-v@1b6JG2ezUfv$9-_+8w@#PvopeTepbcl;ijEhc+Q(sP%a&X!l zTQM04W4aKld{Hfxa3o4hv1^tf;gp!u6tS2{GW}>nd8=t=HfFcyoJov9_TSKmj!5FN`*>kISnsR&O~)k-;)Tk|*@t4%W_c%%qW(_l%aiD2k= z>QOidt;(xWV*!41DC4b=)LS)d%qnJ7J#1_?Z2N4jMR7Ys_jU~%yQ-dX@2gKQyh-VF zjjd`UKrwL&=_GhDG*#8@g5yFqkJ`*hdnMzQfz)8h*v9Af-0g+bU`cxuUIZWfVKn4( z|6|>+{@v1+y*mczev#=4ODE&Z9U2-{OE@-ME7M7@L_nQFT>N1Rs=Kv zl0HBzEq$CPS~50mtY{JX2WJm{^Q+mh*6@!&U{gNmq-9tccNm zV0+Z2og+Gv0Ki|dYx_5CCx7((#ji_%Z8<0^E2?r;%0tT8rGBUWpKBjZz{N()BGWDB zsE7!g-rC#LeVOAUDAsb!s=2$=KS4Yb_!koc7OTyLOZQ>hplpmY;!-a%k*s;;gIMuL zA|F8pc*J-#TaSSGa{SBSw>O%+krL+lBH|0tCp)#--IF8IkJJ<)8IBslmYA`W14z~d zTLSV1uB`elM*a}r8c5a}lT+$j%lFnw{b;h?=g>p}xCz|4Npl&$0KR=esq+pLRy)Lb z*ze>tx5i)}7?+$}gO6oP+3`0+hw7GE0cl=g8`M^C?13w@uB*=lnKhGWJsHgl?C=-V z68kdy^<^~&Hu_}!&d`(w&(y^EE;Z7^xP_f$7ARxb$)!Fr@hPrLYY4Y-1Cc&Ac*22( z0}U6*AAiTuC$1`ce6*a03!#LQBpqA1L z-p+9oagbIehB324vcWJnB;J5^E+-)e;!v4pHeekpIhSIh_XGWKsxGjXtB|H`8^fQb zuM}s2a^_2pvEuwT!q~(`#i8JgGvdmWp)uo|#dAPA5ABR1I<+JfO-f}-a%&9Exp$-~ zTk&5W6c=Zc{_}l9*#Iu;(?JjF0%=QKL7w*U?a|-1H`-VDoy6%PTN?3U@lj!()M2TD z&kxpne9iQ(=|9Qwcm8>NcaePkE^jk9D<>ImZPWFOJfLN5(R#6tJu!e2v=n>F3*Js_ zpEO!FmTWG8+woF;t@ff_0l0TiK7Qw%CiHRE@* z(S$%$Br;+O>(UwmwE=3QP`%x zRA?E{GKH1{Ef>f?^!-(B>$D$s{Y4lNTyCl^BSL0arWg^zJC1+x(mOiO(|zEQ*Vs;h zs&ntFv9F>m-;uZ@h2lL4AE0rg%uXzgUVs1YXE#0kXz#-FPi9R6s!0C7(tyfObm}cC z6%T7L8Wh;G0Otvu=9FSPM@Hi293H@q$diPU@OGsViYMZehWLf%7ZU|uM%f?o&Lui3sjU)`B<8z+qMeNR?i>Q z8FNi%P0yAJOPH$07^k9hz|z^gE;M=^N#I-r%Ho#giY~;2N%0ObR9ZB+`Cw#`!6AeD zRhE`k5|AC2%{Ivi$$>ZaJ9W1Lo@fyq;c0<>LyFC1Cb`X25M2f%wXBA_>~i?w4|0OZ_IDr&w9AcNRJgU2Oigxo0^+pcydE>Gt`46$nVsbw!UuTU~%m!o-{h2AKB=m z+6CqYPP9-&{eVTY-My;#P>Tyiy6XZrI<+{zqDYC;8Th9&9`P1A15W+kW65=f?^1%< zE;Ufo`Ys2$Tp<6$pKr-))bF9616dbzy+|@4)w&py_~=mTi42o!0kR4|Sr#BKeF-!% zS^sDbrHy3Q{$$3}L~=Z5j-eqr`fo_xdF*!)&rJ_ly-IvrrQ)+Fv6Y75--_^g61(%0 zrjVN_(b}N$tL8eh1`pXaTIFgjs=l>mI2&xi(3f6g(vqPCZ}so}(qFFnS4-K* zh!<6MHdIfn_uv9ab1r^m7A`EENZc|p%4n$RkhtaPaRfA=Rl-vV<${e^gFLH4SBD#( z)yC>b6>ICB2|WYDeJ=W(D0O^@CcdCB7z!`qs#kMU)WNH-jwhF^b?K|C*(Z8q)9>vO z9p3<;0Rs7V|KXX}dVII;?&^LkEpZQOX}jaLB<&G!wd^(Ryy3ofn(M=WG}Jz;wy zqC9&u_h#d)(`X+(`@{F+h<+gZ020T+@Pp8{Ps2Z@=S0I3%*TmNC(@!kCsR(str0vD zMiV|T5{ek96!8lBuJCYAUo>+Vtx+&np{cq`@^J7uigpuMfHn3|u)(`OjP^Y_3pPf0t`FU-HVx&fm)#R7^-oshE&Q+z!bB!>hC!c*#(q)L`21 zjfteGifH$UuO5zi{&&`z)M76D|Ce!gB|dd4Js3IpG-$KkmPNRR7@A<1ANzE_dd0^> zzH_f?70wNmLjuey`(X?A+iZbVaww^qa{na$=O;C3(@9R?Nlm|Yilj}aG-=bfByIXu zlQy0Es?l4Gvu|7-$R}QmwTS&%o3&_s$at|9IaNFZPIC=*0K(PtmY#QtG}Uud&pTa# zA4c!2-a{#oUN-R-CdsLw{$E%*A89>&nzzZSYwmU}HOa^vN{eI<*A0%N3B9OKq-_0Q zd@B4+*G-)HyKkOdE@#*IXLJhf6q)9k7B;O3xP3*7n48Dmou7IUe7?F84)4%`aHljh zH#Rnyls~D0CpooHFEqjDy9OGpEv5Nmc-uYZfz{*Fpk-CAh_ZWZ;|kg=UU(G;bd~zn zIVJ7?3o8>H+=-0p;`D1(mv^s>hZGjgX>i$or>K!dKWq4@WWfAeY6Bd)Z0d-AHZp`H z`Y0>7d2+Gng6%^f!od#&GyLEYkFy`}kN?4Ad7PO*@ibwjen8p#gC`S|b(YjNXFa&8 z`acMN;QL-bez(in2=c$Dc~tXswn1jE*tzcoulZ-d5>-;Ks>5H!a6z^>pyXXl9Ns~5 z)HDq0FMn&nl<48$KrWAvv2HZtXyS9X5y5(+kx`Ae+Ju&5lOdAcX2kN%>Xz)3Mhawe z)L^B`b8cFI9kIZ)($HB&P_xF1t}qzmR18gA?Mg6Cm6$m|H=CI>QMlZOE$KEBA0Xcx zIMg{BYkYdewJ`}>9vJM#cozDpLC2~xR4f>}V2q#&%59Eu(XqO_;&yey(KL522Aczg z2PQ$CTAmR7Y9t#vQbYEm(Yr^h-aQTpEKV>lbR~)=T2=2?|MU3iqro$*{ZfLfg}PkT zt=q`mquf_NE>|*MNS*8?NfT4xw&k!APlP_v%P_MxQ`sMV>!DytBN{8kC)pT{MCFaW zzAXB)3~`DZXf&gVh&IRwp-H642%{4X$AikE8G+F;PH;?Qq}l|!8_~Y*M!c#GyK^Xk zm&)lecwBRuoSwlzg9WOr=w=;8$C8Ek?i|MXSncL(+JX5nSwK2s6KBFZX-nAJ3rRb$ zP}2@9!ZUi2MD+R#Ze8?xQO0!y9^?E{r3?s+;#ruvaHtG&Vamdxm7=~3lyn}b=Z6R* z=HESf_O!A-2R+q!{h3CFZ>C|Ph?z#Jz%E|DA->bpM>ZPqva5hrDfBGRvkGki+M>`) zKrd;=mDhn@*S>dw-c{%$ppW$GA)rIrcLeB&LdSuQEA$=EcMAD|{Q8S}*!t_4;fx>> zjY6bmX1NmRN`+#8Vif8K)X`+5ey0d|0G_VF$DHq4?PPXIvn7z&CB~9!}yomff}99ns_MpsDTSeS6a=QYbod}um_pT2icYqT%U0f2dy2;u zSCq>kejWYw>+0HQ74}WgBXJ3d74Z~O%j>%wm3LJ`w;$`%ew9}KhV|=jYODQ>zR$Gp z2;V!R-#ZF)RG||bxD!f8E&&x>VnEOQk6wA=%dh{hATlxZ&2?b@Ljv_F+Y;p-nKA7sAa6mg1 z`|MQf^mx36~zNqQe*n)9yy zv^-~gR=b*BU{wmg^F@)C6cknvL0b2>{#F)mFm8t2MbE9c{bU~ zPYROtLd7C!5~{fcXp2I}fsQLQ!CRmBEcieF`-g`tU%Y-umTM^$i_|iS)%pY9H?t_> z-@Jvj>s z@7vHgOIST)X~{qlKoJUEg+ujKhQuYdf~#w#{9PN|=i6wQR$Ca$wuVIG9{c9b+ZVRG z#-j3-6!{lv$i3!BTxpARZtpdv2zF7mxm|@&wn}SpK5zEHeRdFYyAx=qK>i!Q>Am>( z-CzH(YQF(#$f?VL!?)BNM9bCZEH&c z9Z9+gO>`1xA=YO-ll)1sxkrEcVBBSLS}|)tjeZoWBICJi$N-G}(?P%uzIPfq-M7{Wv2U1 znSGe8$3}g-E$g~Jk}v^jz}W~ccXX1(j-lP8%bx~g5A1eJ_w_&s>R})>;_aS8L#)Kx zJ(DKetYqZw=Kr`O{K4OXrOJy+rwX_DTXQlvzqe4F^Os-}ajy1mP2Gxj*E?D7;QB^V zzdUu9O^YRr#LNj5(~76)J4iL0(*G$+l$9Jk~YO zn5b)&!&;4DtvZKiyfSM|*_{E0#};!e<88~9flk_im-H}zH4*LUR(mmfB8Dc8I6WYt zJ&b`aMWPg{oJGS|-{1e^mfr-=YW(4a_K1U=Tw66I#VLI9+Y(>ezqa;=b1Qp$)bY(F z9(S&RVU*ex!)O8(0Tn59E6}Y9-OpLS-;19t1(ecgY$|G|CD7>e_t>*5uiN5(T^2B@ zzl4zl>r^J8?x%VZlKM)our4h?!Yxd(Dzre5ZDFRlP>bPfX(rMn8X^Xd!5H-zbn3cW z${JhIg2JYutAlyyloXU9x&FvuF&)q3F_Q}mQJgrrlE)N}i!PX0I(b}?45T+CthYfj zBtFAvmbew->tjr$&1M#^V;f#)ECb47Gh``Q9EkR0pdoU>^+qmjB3B0)6|_5#%yrd++~>*`h26`p|2vl-)xL3dYk>r4W^>A*vC5)QIyvYRI%bit^=Aqx!Tx29bVD z>!z;cXsk3)Ao_1g-!-Le^aDTJJ^)OX1mY@ZT!?a`5G*IGO`(w_u$`T!2=AsMLjsG( zMvTjv*!R9STzl4yUJH3vp^aV(L9f6r^lEUc9GW22VjfqlNHy!K?6bGe*t*k=7pjQW zdBn~7Aq2p9rQn|-aYrhE!GbBkJ{&YLb-YxVoT`B2JUINZ3#jCWrvFPT(YE9 zR&ARx;QcMB!U`~hcXIpLjzfAI$6k>+AIHW6cKO-L0+-R|=mHlq2~(K!@Ifu3*B(51 zQs-RP)lvyhEX^w|qlS1;P_#;Qn(f|Kjx%Dpsv+=in7k&i~+m$>$Ny^ zHlelTVfQn)_Zv9E^O;Obr*9>FE46PWeJizZ9ewMxZykN>wC_3kp3}bP=zC84w$is% z`?eZAfwH*YHu|<{-!^v6HkonKBWBSsQj)qMj3$AzZ?oQS8&bV>4}E*IZx3FLdo&Ns zKJKzl@3N0O@6$UUpznb89pKIf^v;LrJFI<&={u}_U()xb_I*j;m)duVzEj$FioR3Y z_dPq}dn1KW{S*Joe;QcqNm@;XS^eJ6JojgPZZH%i*pyidHapSejq1ZP);Hz1m%?6N zs)^_t^S#FUy~fyp8Y>&wjJ{^t*Nnbq+SiJ{R@&E!zE;|oKwpCPCGd;{ea1Cdk*+ai z)>3#ziYX?M6tdK&m=b8y&5Wcq2TCIZDovvTyAy}jUH#yD;0)Bml-$TY%w(FZbT9gP zXlGk}$sJ`q-Q zRfDD%b0z{*hch4+Ga#1+?==IY3G6x(k(`G(ny~!$ql~}b7znfyXr)5yfYvGW9ME$L zZRLz@)$}0S*csb&XS|II^V?GAgI(K)Cc@)BzPC@mcYyC5(C-}vI;_x_Kwm0!3h0zV zKl6*9^%ueHhhW_gjS(mto4MSt8BjBYS^>3ED1q-K==W0CBPqH^x)Dv$%@k{04`N7r znDR!wfO-k!k7_dO)kmW1zvsv=Rncc|L3So*VkW0hW^N|Q!hov@vbhMdxhlwR7&~?K z!GXK>>Ebvyc2n+NB%ST$Rlf!Pze(U~l)Ddlj6Pc8?Rvt~t{2|k-+B6iuDP-Pb(QJ{ zvB6hQHCYTJCh^n0cBtRlsg|{!ClttX$o68o>_QWbYI{#2P3*YsQP#Bgh|KqUPeWQH z49KdFPOb|re(t+Kjg@4etkPI{u#QC1&{+AK|CrOfY`&Re9f>N1przKQj5Q>OVw-Ss zw}5D58gF45fh+T^TE^hp;s0(oW^sK!TXDY81!$3xPLoY^4+QZZ6&JJ32o9*2UVEQQ z+wsH5%1E&PR`I{v7}RZs=RhRzn>HA*$eDwLWuRbWdz9QuaUNS;z7l6#eY4Y1N zv`%SySi75Xplk?y)Mn@CR^fzyFCuj=IApFtQUgB2 zL^!O(AcFE^!Mh`ABGNp7wf6xPCsv>bTw$P`qFhBZErF3fPT%9&_cR>G)0$%W8Ty{l zzRmP)*1qTIdtUpt8YSRp+@L6C5lO?($hV!V+x6-$gqK~qoPPoOi$d>k^&P#skKgXo z-yY<*2lcm~aP`=_qq0cMc-H2cZ|Mc+V>58-)P^r^nI&+|6&&YWr!F2 z&phL2ea0nF?@KhdOehY#p{Bff15Bw6O!;18vxFw^(F~}WLal&WDb#`AcF^A@^4moH zZ5ObA7v)E~5f#@>Q&IJVj`uY2(4=%m6PiGoJR?(|k;S&m(%AnYrkDB?lKW;joWyWb z!W-{ea`dm}>RVqE+AdxPNOU0%ta=PRqVW?)mz9-H6<=?)Y7TGL4op2l3ybFzloc0F zw@sneWi>C1rFszN%qoLu!8GzJkF5}4c@eX>NF59oaR?U~MRq0fyGb~9w;_hGyNyJe z=#cL*ytGg_oW)og7aKC_#yK+rWR2&4R$ll7DdxwlYwnfG!OPTPeswIKY2K= zb-ROSZNWfZ9gYU)_{c~M7ij0%noA7PurA@81F4hzCB6^&>qGT**bBzkYs4|pdpQJq zb)e_CdQPwUxa!lZKCb%o>g6oM<)-*aL=cA`VajhKU@jv}Uedqp$dh+o_4}274xmlt zm@{3psUC|~&lFF>L(k0pV$t9aI$eMuM+NusMFkI3!W0#pB(RGhlVd12nI=}RQ4xnf zer?YKU;j$(uY;pz=ssplS;3TI$pscYwN{k_bGi)bw@ft-%b2HSH8c*(VMdngF~1)< z_rm+t7C1J&R;3K#&k+o4EdyJt&S7gA*xDM-VNbE4 zo>I>6Y4+;V>Ku0aZgcba!Q6_%Ci&L%W6WF-5iyiGY`!ptT!VIuu^nvJ{W zgpRv1VCPMMw`c1GxDLP0d3{}7hu;NyS6zqWkNh?Lo2ElY{ffmQj;R(^p7aV*h~nL& zRFxOSS&6El%4=#S!cK@#b|r}MO68U6UROW3WAgh00!D9DMGqW(N50=eN zCCm8_aZ}pdkiBK7{7|W&IBdz;zm_jwtC{q!g^B~&zE3HvU5Y8npl$>vchfu*J)4#*auwgm=~GJz9N}5fAiCOTU9KJnDi?*Z4%BGNp{8a zButpVu1#y8vd^K7VhCLk?YgR-Y|a;BJ9Vh|%inAA9Bw(J&>YC1huJScD5*KDl8dn1 ztmZKv^HdJ$KfBlR;5w~aRPB6sfPgE>mg|yzECxgkKtLT3HlSLPt+63vVficKDv-Bt zX>tn!g#VK<5#PSDZ~AeiF!qc|-Yg9Q?ou<xU4un6VehGLdQWJ5eQTJq#_}-&Toxb!rx@_ zU7y|e`$HcE>~pIEbk#mLaU_eR$v$5Nv`V4D?D)aD<8w9~f4KNW!zlsh)izqNB0#^v zjiktI!`_nO4MngUMKz+)iit)m)@ZcVFHXMe!R+7PWj*{q%JvtdS1C3{k6Fy1icPm3 zQ?mKAp$Up@vE=l}-#2K|Qu!T=0SF7LTlE*aCeSD@7h=UAK4x;Ucu?e788GRvO$b&7 ztUk53heYQn%Vg z89qzl^-47%PATtMYPQkPZpmPjN+Y0~&l$AY@O!txI^1STX2Ch=f##TLJh9t@X1BBN zz4K3fV(nsx8qpFHRljrAJBH#}6ZN2;rQ|hmr4V8r)P~eOY#7X*^_Sgz>+;K9z4?Pm zr*ev0lq*>&H$#9%+UYeb%=*3xajWDrmd0z7rZt@= zCh6B7D=TRKNZo*dc{=Mf7|Xxs%mtP*pxz0h^q;7pN-L;5E6MFEhRn91jL@z;Ta2FDNPb9~HrWcQMo5 zsfGzA<`+zpyb#nv6E` z>vp@|(;>-j4c<~xuq*{N%1kc>p#WFoB$mNREK^S6Zn(_#7ZX=U_O6q%J6!dTm^7YkA;H zy&p*lMl~Q^2n*Riz+^vQilq1e!&_m-E3!u^#<70N6nCff@cZk{X+WD$;cimC@dY@x z7ewx(=p1SC6*2!A?)T4H9C8P%u)`$D4hJNfmdFAgZ(Fz7NB*?G1;k(Dj9e@Uw$58~ zfnD-2!+ThRiXUcp51T1gCLiBBoW6HNl=Qt1clEw02Ivp??gtW=;(xQ}xX#mCbzN2) z);W(gz;PRrt@(%s$-{oU>>Kx!$irYAM=Nz^CCRq>6`i`u zNLe13;E3v8QVAnSSen7MiY_PZ86L$IWMQK2q1#1sJrsPsx;d?9s@9ux^mR<%Mpkm8 zT8uXGVjI=g^E|Kqyd?Vb*E?`-!K0^|yyYHxamQLFuA?(?TZm8EqUi&-@XRe{qRm%q z;UsR+4f+B+#0y%{^v_VWKZ_p8x0R*dD!L_q@HgMx@a^l%%JrF*)T(OVoW~sB3uAjP z3YrT3=><^+b`fm@OHnROB(Ncf8ADXeXmNA$@P?24>&1(CSOAA`kfV5z=zn?GLEZ+~ z^{_g=uXy*bRE2xoO!6H!Q~Bl@=K754&;0OSezm{(;kNvyST_v~J(ce@g@0(O{6o-# z8#mYa-!#v~3@^Z}bkfW-rCgVB@#y_daxX$sK=QIUZ zFd|^EmlNWDvQPYk9sQ0`{WCCiZ0!qO9@MiZHy6j(mb6%X{1O7)fnBc_iUVvEtvSQn z0<^^|nf=xhEyq}Pa+-K}-0Jh~2QcWCSce}PaQ=6D`fLV1{@c(?|kJPDyZsf2RL zhx1>%e5pU-qUsgg*XcguChs%uOLf;NSeCrZs!{OX$~nUZG`oM#{~xlO2#vi+()&4U z@VS!S&w1e^m8AC+r1zAP-gB(qIVHHkUdlUo^TAW~NWfLkE0Rz>c2Yer0T!%U6PiS1 zUcrvM!YexZE7(6*c!#lu^Cpj6U)<)WUb@XI_sYfBracO-II6X2k221qrd6A^9%F1y zliIZ3for~#I8fhN7U`_UhW^MA{m~pqpXu#F6DSm^CDa?uFX|!P)bo89%og?hAa2DxOGkITIgHPU))V7ygDrCB6Xj ze_={U?H9b&7iNY(x6$7s$3HwFMmXKNz8|1cKbRz)Bd@7rR{{73bN>&en*U&w z|FE5d@l|I`-`kix7xXEH;t*ynM62P|^(Nwu+yyLhxwnLd&p+cSq)pN>r8A~}jA_8D zYY)B{HE*VSOc%;Ya|b4fJ5)Dt2fBef3`=IOgOx0mCNldxv;^~vTNuxL`sS;T%pzkb zHWJBGa}T}*_ZSjVoeh(itw?$}1Yo!_iBJ70c5uY3Z694M-v)91cWP1}hXx&2=JGg; z4T*H|c?LA3AuW<=JjryQRP*n;!u9J9ZQVfipzBRql_mVq)&(!eK1+DedA+$0VTd`z>t>#=XC+pz9QefY@x_!l$QO#?ekJFMb6z}X7d&1O6g(90_IMMN zt1^6bI0<#UVhe1*S#6+awbT7yyxDH>DMRmg@f=hO)UYjVMQsZRCa{aN8Ynt)Xric% zgM*4w4(h>yKj+{1;jN3^!@tlbHoeV2NTR_pL6@f2^0==9lt2@Y`(O@Bu(t##1jot{ zMO1Yl(sh(b*MqFrQzRSajpOhm-}o+N8ZPzLhkbmcd!uQ8o&Ray3#?lU?=)U+wys+X zZ@$2;bu)Z1IGe<%vq>!1W4$HN`~&~nG3eu{7VT|4gIyuB>Mv)d>I66P)d`m1=Q_cm zv>4UY7{1>HdujE-Xbpp>&}MVbLDMSwF1@mTJt2M~a!zxs2n8I^0`{kDtpfNdV6A5= ziK63Z%#wfDBlC8DncVhrM;@;-%ez(NEkW!pmAS-`!s`{-r6QMgokSDeS$oo*wbyiK z=T@C*dvNv!+xbyv^WRnX#(=+LG-@ygN)%HgYOpm?gRM1caNDO_UfDV3lJzz#`rmS4 zY0a*0?G+c6)(o(<*X_bWT1a}^dL?4}$7ezw{btD3FIXqpO5Y`kC9Ozd3bF~W`iv)n zCMmg|@fZTBsxpMSp2%Dtk)Hnq^e2T*;DmI-BQ8C`ID!WoLffK@hBTq;O^q~~L{S)_ zi%%cAVaXL2i=&~@!ckW`z%#5ioU=AwA-!#QpEll})$ndx$Y)!xxcar@q_y+n4&Xo6 p>9z-_u6d!`1x{5Grz*)lRY{y0;A*Gp8cx+Uda62ey|bLE{|6@v@&Nz< literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@localefwd.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@localefwd.h new file mode 100644 index 0000000..8fecc0b --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@localefwd.h @@ -0,0 +1,214 @@ +// Forward declarations -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +#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 + class 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 + class 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@localefwd.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@localefwd.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..3b38a2068096218e77f9bd8cf9b4b94e19195247 GIT binary patch literal 21224 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 Forward declarations -*- C++ -*- + +// Copyright (C) 2001-2020 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 + +#pragma GCC system_header + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @defgroup allocators Allocators + * @ingroup memory + * + * Classes encapsulating memory operations. + * + * @{ + */ + + template + class allocator; + +#if __cplusplus <= 201703L + template<> + class allocator; +#endif + +#if __cplusplus >= 201103L + /// Declare uses_allocator so it can be specialized in \ etc. + template + struct uses_allocator; +#endif + + /// @} group memory + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@memoryfwd.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@memoryfwd.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..fe6253b65663136df30aad45a780036bad409bac GIT binary patch literal 13837 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. + +/** @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 +#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 + inline _GLIBCXX_CONSTEXPR _Tp* + __addressof(_Tp& __r) _GLIBCXX_NOEXCEPT + { return __builtin_addressof(__r); } + +#if __cplusplus >= 201103L + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#include // Brings in std::declval too. + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup utilities + * @{ + */ + + /** + * @brief Forward an lvalue. + * @return The parameter cast to the specified type. + * + * This function is used to implement "perfect forwarding". + */ + template + 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". + */ + template + constexpr _Tp&& + forward(typename std::remove_reference<_Tp>::type&& __t) noexcept + { + static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument" + " substituting _Tp is an lvalue reference type"); + return static_cast<_Tp&&>(__t); + } + + /** + * @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. + */ + template + 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. + */ + template + constexpr typename + conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type + move_if_noexcept(_Tp& __x) noexcept + { return std::move(__x); } + + // declval, from type_traits. + +#if __cplusplus > 201402L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2296. std::addressof should be constexpr +# define __cpp_lib_addressof_constexpr 201603 +#endif + /** + * @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. + */ + template + 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_MOVE(__val) std::move(__val) +#define _GLIBCXX_FORWARD(_Tp, __val) std::forward<_Tp>(__val) +#else +#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/@@home@ado@git@ssp/@usr@include@c++@10@bits@move.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@move.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..00998673b2447fa27906314c582638c8c93b9256 GIT binary patch literal 20468 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. + +/** @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 + +#pragma GCC visibility push(default) + +#if __cplusplus < 201103L +# include +#else + +#include +#include + +extern "C++" { + +namespace std +{ + /** + * @addtogroup exceptions + * @{ + */ + + /// Exception class with exception_ptr data member. + class nested_exception + { + exception_ptr _M_ptr; + + public: + 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; + + [[noreturn]] + void + rethrow_nested() const + { + if (_M_ptr) + rethrow_exception(_M_ptr); + std::terminate(); + } + + 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)) + { } + }; + + // [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) + { + using _Up = typename remove_reference<_Tp>::type; + throw _Nested_exception<_Up>{std::forward<_Tp>(__t)}; + } + + template + [[noreturn]] + inline void + __throw_with_nested_impl(_Tp&& __t, false_type) + { throw std::forward<_Tp>(__t); } + + /// @endcond + + /// If @p __t is derived from nested_exception, throws @p __t. + /// Else, throws an implementation-defined object derived from both. + 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"); + using __nest = __and_, __bool_constant, + __not_>>; + std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{}); + } + + /// @cond undocumented + + // Determine if dynamic_cast would be well-formed. + template + using __rethrow_if_nested_cond = typename enable_if< + __and_, + __or_<__not_>, + is_convertible<_Tp*, nested_exception*>>>::value + >::type; + + // Attempt dynamic_cast to nested_exception and call rethrow_nested(). + template + inline __rethrow_if_nested_cond<_Ex> + __rethrow_if_nested_impl(const _Ex* __ptr) + { + if (auto __ne_ptr = dynamic_cast(__ptr)) + __ne_ptr->rethrow_nested(); + } + + // Otherwise, no effects. + inline void + __rethrow_if_nested_impl(const void*) + { } + + /// @endcond + + /// If @p __ex is derived from nested_exception, @p __ex.rethrow_nested(). + template + inline void + rethrow_if_nested(const _Ex& __ex) + { std::__rethrow_if_nested_impl(std::__addressof(__ex)); } + + // @} group exceptions +} // namespace std + +} // extern "C++" + +#endif // C++11 + +#pragma GCC visibility pop + +#endif // _GLIBCXX_NESTED_EXCEPTION_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@nested_exception.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@nested_exception.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..0997727b66aea9ca9d69ff2171ae87183dc130aa GIT binary patch literal 18848 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream.tcc b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream.tcc new file mode 100644 index 0000000..67348c4 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream.tcc @@ -0,0 +1,407 @@ +// ostream classes -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +#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 + __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 + { + const __num_put_type& __np = __check_facet(this->_M_num_put); + 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) + { + __try + { _M_write(__s, __n); } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_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. + ios_base::iostate __err = ios_base::goodbit; + __try + { + if (this->rdbuf() && 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() + { + pos_type __ret = pos_type(-1); + __try + { + if (!this->fail()) + __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); + } + __catch(__cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + __throw_exception_again; + } + __catch(...) + { this->_M_setstate(ios_base::badbit); } + return __ret; + } + + template + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + seekp(pos_type __pos) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + 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))) + __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_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + seekp(off_type __off, ios_base::seekdir __dir) + { + ios_base::iostate __err = ios_base::goodbit; + __try + { + 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))) + __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_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 + extern template ostream& ostream::_M_insert(long long); + extern template ostream& ostream::_M_insert(unsigned long long); +#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 + extern template wostream& wostream::_M_insert(long long); + extern template wostream& wostream::_M_insert(unsigned long long); +#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 + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream.tcc.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream.tcc.blob new file mode 100644 index 0000000000000000000000000000000000000000..2d1cf26c5330dffb54179f289253d226cf9c74af GIT binary patch literal 31439 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream_insert.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream_insert.h new file mode 100644 index 0000000..89011ea --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream_insert.h @@ -0,0 +1,129 @@ +// Helpers for ostream inserters -*- C++ -*- + +// Copyright (C) 2007-2020 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_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 + +#pragma GCC system_header + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + 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 + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif /* _OSTREAM_INSERT_H */ diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream_insert.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ostream_insert.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..b81130aff7ef98b2fb6e35281dc0a8785fb1de22 GIT binary patch literal 17220 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@postypes.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@postypes.h new file mode 100644 index 0000000..718ff44 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@postypes.h @@ -0,0 +1,253 @@ +// Position types -*- C++ -*- + +// Copyright (C) 1997-2020 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 + +#pragma GCC system_header + +#include // For mbstate_t + +// XXX If is really needed, make sure to define the macros +// before including it, in order not to break (and +// in C++11). Reconsider all this as soon as possible... +#if (defined(_GLIBCXX_HAVE_INT64_T) && !defined(_GLIBCXX_HAVE_INT64_T_LONG) \ + && !defined(_GLIBCXX_HAVE_INT64_T_LONG_LONG)) + +#ifndef __STDC_LIMIT_MACROS +# define _UNDEF__STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS +#endif +#ifndef __STDC_CONSTANT_MACROS +# define _UNDEF__STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS +#endif +#include // For int64_t +#ifdef _UNDEF__STDC_LIMIT_MACROS +# undef __STDC_LIMIT_MACROS +# undef _UNDEF__STDC_LIMIT_MACROS +#endif +#ifdef _UNDEF__STDC_CONSTANT_MACROS +# undef __STDC_CONSTANT_MACROS +# undef _UNDEF__STDC_CONSTANT_MACROS +#endif + +#endif + +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. + + /** + * @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 _GLIBCXX_HAVE_INT64_T_LONG + typedef long streamoff; +#elif defined(_GLIBCXX_HAVE_INT64_T_LONG_LONG) + typedef long long streamoff; +#elif defined(_GLIBCXX_HAVE_INT64_T) + typedef int64_t streamoff; +#else + typedef long long streamoff; +#endif + + /// 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@postypes.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@postypes.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..acea1eb77992f8644b219d7a4394c65bf81420da GIT binary patch literal 20406 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 GwErKgqDIvK literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@predefined_ops.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@predefined_ops.h new file mode 100644 index 0000000..7ac9a46 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@predefined_ops.h @@ -0,0 +1,405 @@ +// Default predicates for internal use -*- C++ -*- + +// Copyright (C) 2013-2020 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 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 + +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/@@home@ado@git@ssp/@usr@include@c++@10@bits@predefined_ops.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@predefined_ops.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..56df8e9b3400d1e0347b4c6706564c44e257d53e GIT binary patch literal 31502 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. + +/** @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 +#define __cpp_lib_constexpr_memory 201811L +namespace __gnu_debug { struct _Safe_iterator_base; } +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + class __undefined; + + // Given Template return T, otherwise invalid. + template + struct __get_first_arg + { using type = __undefined; }; + + template class _Template, typename _Tp, + typename... _Types> + struct __get_first_arg<_Template<_Tp, _Types...>> + { using type = _Tp; }; + + template + using __get_first_arg_t = typename __get_first_arg<_Tp>::type; + + // Given Template and U return Template, otherwise invalid. + template + struct __replace_first_arg + { }; + + template class _Template, typename _Up, + typename _Tp, typename... _Types> + struct __replace_first_arg<_Template<_Tp, _Types...>, _Up> + { using type = _Template<_Up, _Types...>; }; + + template + using __replace_first_arg_t = typename __replace_first_arg<_Tp, _Up>::type; + + template + using __make_not_void + = typename conditional::value, __undefined, _Tp>::type; + + /** + * @brief Uniform interface to all pointer-like types + * @ingroup pointer_abstractions + */ + template + struct pointer_traits + { + private: + template + using __element_type = typename _Tp::element_type; + + template + using __difference_type = typename _Tp::difference_type; + + template + struct __rebind : __replace_first_arg<_Tp, _Up> { }; + + template + struct __rebind<_Tp, _Up, __void_t>> + { using type = typename _Tp::template rebind<_Up>; }; + + public: + /// The pointer type. + using pointer = _Ptr; + + /// The type pointed to. + using element_type + = __detected_or_t<__get_first_arg_t<_Ptr>, __element_type, _Ptr>; + + /// 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 __rebind<_Ptr, _Up>::type; + + static _Ptr + pointer_to(__make_not_void& __e) + { return _Ptr::pointer_to(__e); } + + static_assert(!is_same::value, + "pointer type defines element_type or is like SomePointer"); + }; + + /** + * @brief Partial specialization for built-in pointers. + * @ingroup pointer_abstractions + */ + template + struct pointer_traits<_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; + + template + using rebind = _Up*; + + /** + * @brief Obtain a pointer to an object + * @param __r A reference to an object of type @c element_type + * @return @c addressof(__r) + */ + static _GLIBCXX20_CONSTEXPR pointer + pointer_to(__make_not_void& __r) noexcept + { return std::addressof(__r); } + }; + + /// Convenience alias for rebinding pointers. + template + using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>; + + template + constexpr _Tp* + __to_address(_Tp* __ptr) noexcept + { + static_assert(!std::is_function<_Tp>::value, "not a function pointer"); + return __ptr; + } + +#if __cplusplus <= 201703L + template + constexpr typename std::pointer_traits<_Ptr>::element_type* + __to_address(const _Ptr& __ptr) + { return std::__to_address(__ptr.operator->()); } +#else + template + constexpr auto + __to_address(const _Ptr& __ptr) noexcept + -> decltype(std::pointer_traits<_Ptr>::to_address(__ptr)) + { return std::pointer_traits<_Ptr>::to_address(__ptr); } + + template + constexpr auto + __to_address(const _Ptr& __ptr, _None...) noexcept + { + 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->()); + } + +#define __cpp_lib_to_address 201711L + + /** + * @brief Obtain address referenced by a pointer to an object + * @param __ptr A pointer to an object + * @return @c __ptr + * @ingroup pointer_abstractions + */ + template + constexpr _Tp* + to_address(_Tp* __ptr) noexcept + { return std::__to_address(__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 + { return std::__to_address(__ptr); } +#endif // C++2a + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif + +#endif diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ptr_traits.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ptr_traits.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..97c72431c934f233e54690c0a4b5e301782529b4 GIT binary patch literal 19697 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. + +/** @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 + +#pragma GCC system_header + +#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. + * + * _GLIBCXX_RESOLVE_LIB_DEFECTS + * DR 2344 quoted()'s interaction with padding is unclear + */ + template + std::basic_ostream<_CharT, _Traits>& + operator<<(std::basic_ostream<_CharT, _Traits>& __os, + const _Quoted_string& __str) + { + 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. + * + * _GLIBCXX_RESOLVE_LIB_DEFECTS + * DR 2344 quoted()'s interaction with padding is unclear + */ + template + std::basic_ostream<_CharT, _Traits>& + operator<<(std::basic_ostream<_CharT, _Traits>& __os, + const _Quoted_string<_String, _CharT>& __str) + { + 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. + */ + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@quoted_string.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@quoted_string.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a6c66f71a41c5c225ff81fdcfe0d47f595bb0203 GIT binary patch literal 19174 zcmc&*4R9RQecwHw75NYvRTYX+HJ**)_)9vSB&(7+%d#S4BYTXEKjL^~$;)bQPq+5o z?PYgQ9}o;lm>_@D2FFmWiH)(T$1{8sm}Wvd420<`cQwW*3Z{`zbFx-Q zDT%3dJz`IHTvKy}srY!VkQh@fGm(|7j4WxI8P6zMUNPe7LQb|+J!iIOxN9GO^y?QZ zAYx7D6*IAA>-NpeNpfpzqO&96P?j_*9v@*DY4~PqI`HLkpO#EZOl!JiC5YU_Tp>FK z(gP-kMCCg^TADhh<}A%e&5=S{k*tEDEM#}4qJfl|)YvjLt(2;Znwn+KL5VXT*kU4T zF)dA$v~hh*GKo~soP2v^uRJyl<~1qhne^FHCM7Tf3xrakNX%(7A*Ylyd$_%a31XHk zHB(a{do1MCFBKFqZxJn4xI>UFs5ee5VF9~DmE^2=0bX*Er ztp@n>&Omh;il*nw4%PGMSWNRbEdv~SUd~Jyr%2g$OO_eJWh+?I5h?V-nCAB{$0OLY zs7u3g1=$i!IisWyuV85wDtJXf+*T0*&`guM**ua(c}Ia0 zsj{f*W{BLpW2u103h4^Q+FMOavQmMKfJJ424VZK|Z77NeKBVR=*_YMP$cM zn-dwa!mz@*p`I50oGh8uC)lylD_F?3MC7fUy1nC_KU&@q~AnZd309;Jdq$_~aUZL4G9s;4|7!}1p78#I&Pkktg zp;NLy0Sv6*We(m`bMmRwiH4p{`_}QOrDQ1hGlcH&=N>YQL1kIh&B~($Kp4ho%Mcfs zGp02wu1rW;JgZn4J%v&UGliTo$=HHdxLG9&$%iK;BbAT}mR@;=iD3!VRbdSDa1YL|j+;uDlR0c*#Z`c`2=D-HFf3kDI4q|L zbV|_1ymYehaV4i1s+>>^Bd5n5+t~7xA2UISY>DJ!$`q!)OdnyZF>hrcH%$@w#UT@! zzsPa&K8RQu$t2^$6q-`T3gZbX7pFK4jAiqM!P|s1fGN(v6tAXWo+*ukw!o^P*7WBF z6~zFzObG*hB5#Z_WfBJ(7kupdG0{^SOQx)<br_{i%E1n zQtJ2#S7b+XCNQrdSxPpKou1`YD_j<#DDB2@13;dw_RLyn=A8*HoJBm7FuS29R62iE zj0A+w9#54Fwu#*e0{D4F{-pC&Bw&~eqhPOXOoHJMc?USRb!oS7JR)@R$;n_3)Oi%L z>#(vkWH{;4%E(})uHdsj+P{F_GdsESjzxO{3#39}8WbR!9M40_st~9OlNJFToq`T{ z8CHo*a^A(u`yuIn(`*PSl}&_v0g?r%-ev9ZS9u4<6}4@pbqv7+vu|eOPOL$vw5N=BnYTn)lHg=Oe*Zfsn3gIIpZQLlCbSNoqz@4OaW#%M<+;q_>J4< zDNBiU`>~7NV3o|0L>}c7X1c1Lm2xUD5Eg^%*ud)kloK_8GW5j5x(FyOBBBay2hSbS zniMj}F=nTZg9DvZX$J0qqdgYosOHjo_`Zp_Dds@uH6@m|>jOpuc3?<&^ix@vfuT-7 zXeg~0Y}GcFuw~8G5h*otai>MZ@L@-$ScFpRURa$@4o~80O37KOHO<_UcL|cOxbDW# z3VR<=L?6of53mAyL5zh+fJqZmGhR0A;1QCsPGZxXxfM2dswqoY*}%~xbC$g_0Xz~f zZApc>A{-KeIvB$75Q39Vtl(LqtSI|}-XFmjWVqqRcl?N_@=<#WGI1vcOU`rZq2U7v7Qpe2 z1vtY_NCH-E<~7v{H|l`2J#a%Z)(~j+DrGJ&5b1Fg+Jq~+5+<0g)i{9+`v_#JdWRKG2SR z_$dt0B26^$gtCl2$Vj{3gku?5DVvAWPOOL1673Rd)Qa81T6WpZR;hbx^8k-!|h za1wsJ=(SNqP8&01plQzHP7~FH%F%7B#amlgzKV}H;cVIllB6uOBgB-vMO)9WK8K$$+@PI+6>hmTbk_{q?OI?jY`s z9vmO$ajs&*SuI#904J*>6uF!Qy!61aM2TJj2*`)6cNYfYIq1vjla=k? zyXH8Y8^HC0v{cZ_I=zfbh3m~KzzI0xF`I42^RRdf@jEY%XgqKj?wUqfOlc-$-f^yq z!Sx8}tw{#y=Y%C;#Q7jnlBmfvA~0EysBdW}zhHYB4ZyOlA6DV~OLtSVuxQMtf`<{I zXZv2csksULFx&pwlx_Y%euvf6T!z4J^WDO>mvGK>A}!qV*dVuiS#>dWZGYRvM-!Vs zFv+A{-qDznOp2m?L5g6hu!1$F0O!!ws@2?3KE{!sDtzV7G@My>b@>2ayj=fhpY46@ zZm``_`hDUi=xOb36U4pbMq|IdfCxrrNvf7i>Tu5=@1FGcuc~M|^4lhmEK?A76?E)r zz+Rx?+ede1|5LIsaPWD&<^l}BTf!8)#cOfKYHnMmfj?GrOt>0}@<(f)s^td83{^=B zn`z5cHv}kgg_J@XWJ*e)OPK93f&T2xD1xS>EkVkq1VbIqSngoM6rf2bj447&#p`O& zuWaYIXmR`>pMGl7&XX?}e|_hJ;4 z6(5#kd*atcURVT@MuEG^#1CfsX9tQm44?e)Z|eWHpZUT0W#?D;Xk1!)N$`D8vj~;x zel(`*8f}?=8&uWt>l1Dp}PMPF|;|w#{}_~ z?OO*o?cXo%-n?h$_I;a0_*cAn^Ont<_U?%ZH}4j@)^>Lbbl$4fD@_3+C|Ei#1&Q@DGpn zMRd9J`Zpe`y87Fn|B-bm?jfGeR-#p75ha>6U;Se%al58JdH&Vk%@%KoJ(2#**u7)L zA3XQ{nJ>z(-Bo;P<>*^OM-D&lDDknE>i+I<)7E!Ouq?P!BKkSp^pBsz(G9EoPx^wC zRtp;tpA<{s2Jflo*GJYjAo3+6>xYQ)t3Hi?iof|l8`|@;e_k@r!t*S*%3fa}SnFsG z{sRs?|0$-tn&bNW`JPD6GUTQwvJPQpQ89D9eC~$pI^HWj^5YFl3P1e(e-~f*3%R*E z^XGNk62fR>@xxy|@TY(B!%w|Sxc9vj?>$@d^6=R2UMF7xpR}aW#!~&iKXn zCUUmsY;%;K-8MTM<%`e!T&J(6im4MR;PC6>)YPMyHy(8 zW*7R9y_}R)?6}q@%zZ$kF6bMNmh2M5M&JH^!6Ou3Rv;vW3DvL)k|yNgt2(MI*pGEH z2;CsX)8A}z7)L4cZgh(rZ9EE_Jl1w>3vm9(g{1y^_l>XHxqveT|KeVE%#6TZ`({Q! z>qiHV-UjpbA4^C1sHM@xr4l4eibMgBjt~Aln#CF|U)* zfacgg)ZlPIOq*X@w{|&D9In2$_E4dF7YaHnvW?^FDGm8L0L-~qJ!J8!ya9r@fhgXVLBpSaz) z#nDUPCy@{~wYGNl#_sa+1m9J|)9+G}meJ{B6^vb0GP;IG?N%9hbpx~g4@lzuE{3_Yjgr=ERudIV6)UC1y7r*m@g(z7xuR3GG|DzK^@@8`4% z9cM@_G}yRj+3r|i9Nh(UlAYnW9a|}^;W~biXR6}yG%a4}@Cg;Jjx$+8JMrlYZa0=H zMiimnCW2M^Y^7A?TQG$$Xc~k)tU64=RFq^aV_ErRA~7z@?LeemH^vh>IU-K!vWefN zp}v$rlr=5*+TzqSTwqVQa)-`=mDSK;5!Qd!qCEQ@1+a_bS2nC{;`x=_vk}jO>H{?g z>ZANf%gCxIZ`PRb-fFSn{n47E@cvlKF?fGAa<&@6&%i9=<>;DMezfI|uYZG$m&OhQ z@Y3ir052ovpb2 zkY*VMv^gkRqj9N6zU7`dc6KPycYZaVbk4>-x_|M6%yHxK-U2< zqmiKz2(+Vpqd;YJ$0%e_(ozY-*Wx4h-TlPdr*^Rod3eV#81iu6FdFiK!2@8(Bl}0t zkbimR(C_OCH+BBOQe&h#b}jh_raFs`^F{+?}+ zJPr4Nw)-RfwNZX!WFx#5_ubHQ>Eo}wJAD@lQ!uwfa79!xe z*g1HAzTrHKycoR*Y+kCp)EMO-k30@^o~(OvDX{5SBqYwDA9Q7|x*7#Mxo>hT!cRsf z#|#uW=N8~hQQHC1DMOuxAh%-&in6e`a1i%Ys45)viISggnQj9v9QgBhm;i6N=H{xv zhs2bC({}MzyI~1yNUNmw2rt!0yIt5tz9Z6p=^(&oTGE>N;$OA?;=shq-@fd1P<}PH zdSGC#)}f99!jQSzT8Ogz$-0w`5v+6?-O33mf9h2IDUjgl*y%cub<;VJ{)PGr@X5u7 zi%nn*&6mMQu5?@hNN`&f_`O9!ITl08(~Z;35q`R6x|yRgc7mnN1F@a3cn6TuP0i0C+iliO6RB+~8%9YNa1_t*84)*4{6;K~Sfw5WGYZ?b_u zz5Fy_$mO2P80PN#!qblro!|GAR~!5@+%tWk2Pa5+@TGiH*Txr1vk1OG#%#H10pbf} zlXg9BJF`D?Elnqh`Oy@JtJ{I*x1oN+a#TOm?#tcm5Vuye zYsG`>06c3S2Cuo&cm>d^sD9V_#*d~yv(Ie@@A|^dy_;_q_w3!hb;m6tHq<&k3%w&O z(8Id-C# literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_access.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_access.h new file mode 100644 index 0000000..3853bbf --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_access.h @@ -0,0 +1,1158 @@ +// -*- C++ -*- + +// Copyright (C) 2010-2020 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/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 + +#pragma GCC system_header + +#if __cplusplus >= 201103L +#include +#include +#include + +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 + inline _GLIBCXX17_CONSTEXPR auto + begin(_Container& __cont) -> decltype(__cont.begin()) + { return __cont.begin(); } + + /** + * @brief Return an iterator pointing to the first element of + * the const container. + * @param __cont Container. + */ + template + inline _GLIBCXX17_CONSTEXPR auto + begin(const _Container& __cont) -> decltype(__cont.begin()) + { return __cont.begin(); } + + /** + * @brief Return an iterator pointing to one past the last element of + * the container. + * @param __cont Container. + */ + template + inline _GLIBCXX17_CONSTEXPR auto + end(_Container& __cont) -> 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 + inline _GLIBCXX17_CONSTEXPR auto + end(const _Container& __cont) -> decltype(__cont.end()) + { return __cont.end(); } + + /** + * @brief Return an iterator pointing to the first element of the array. + * @param __arr Array. + */ + template + inline _GLIBCXX14_CONSTEXPR _Tp* + begin(_Tp (&__arr)[_Nm]) + { return __arr; } + + /** + * @brief Return an iterator pointing to one past the last element + * of the array. + * @param __arr Array. + */ + template + inline _GLIBCXX14_CONSTEXPR _Tp* + end(_Tp (&__arr)[_Nm]) + { 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>&); + template const _Tp* begin(const valarray<_Tp>&); + template _Tp* end(valarray<_Tp>&); + template const _Tp* end(const valarray<_Tp>&); + + /** + * @brief Return an iterator pointing to the first element of + * the const container. + * @param __cont Container. + */ + template + 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 + 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 + inline _GLIBCXX17_CONSTEXPR auto + rbegin(_Container& __cont) -> decltype(__cont.rbegin()) + { return __cont.rbegin(); } + + /** + * @brief Return a reverse iterator pointing to the last element of + * the const container. + * @param __cont Container. + */ + template + inline _GLIBCXX17_CONSTEXPR auto + rbegin(const _Container& __cont) -> decltype(__cont.rbegin()) + { return __cont.rbegin(); } + + /** + * @brief Return a reverse iterator pointing one past the first element of + * the container. + * @param __cont Container. + */ + template + inline _GLIBCXX17_CONSTEXPR auto + rend(_Container& __cont) -> 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 + inline _GLIBCXX17_CONSTEXPR auto + rend(const _Container& __cont) -> decltype(__cont.rend()) + { return __cont.rend(); } + + /** + * @brief Return a reverse iterator pointing to the last element of + * the array. + * @param __arr Array. + */ + template + inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*> + rbegin(_Tp (&__arr)[_Nm]) + { return reverse_iterator<_Tp*>(__arr + _Nm); } + + /** + * @brief Return a reverse iterator pointing one past the first element of + * the array. + * @param __arr Array. + */ + template + inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*> + rend(_Tp (&__arr)[_Nm]) + { return reverse_iterator<_Tp*>(__arr); } + + /** + * @brief Return a reverse iterator pointing to the last element of + * the initializer_list. + * @param __il initializer_list. + */ + template + inline _GLIBCXX17_CONSTEXPR reverse_iterator + rbegin(initializer_list<_Tp> __il) + { 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 + inline _GLIBCXX17_CONSTEXPR reverse_iterator + rend(initializer_list<_Tp> __il) + { return reverse_iterator(__il.begin()); } + + /** + * @brief Return a reverse iterator pointing to the last element of + * the const container. + * @param __cont Container. + */ + template + inline _GLIBCXX17_CONSTEXPR auto + crbegin(const _Container& __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 + inline _GLIBCXX17_CONSTEXPR auto + crend(const _Container& __cont) -> decltype(std::rend(__cont)) + { return std::rend(__cont); } + +#endif // C++14 + +#if __cplusplus >= 201703L +#define __cpp_lib_nonmember_container_access 201411 + + /** + * @brief Return the size of a container. + * @param __cont Container. + */ + template + constexpr auto + size(const _Container& __cont) noexcept(noexcept(__cont.size())) + -> decltype(__cont.size()) + { return __cont.size(); } + + /** + * @brief Return the size of an array. + */ + template + constexpr size_t + size(const _Tp (&)[_Nm]) noexcept + { return _Nm; } + + /** + * @brief Return whether a container is empty. + * @param __cont Container. + */ + template + [[nodiscard]] 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]] constexpr bool + empty(const _Tp (&)[_Nm]) noexcept + { return false; } + + /** + * @brief Return whether an initializer_list is empty. + * @param __il Initializer list. + */ + template + [[nodiscard]] constexpr bool + empty(initializer_list<_Tp> __il) noexcept + { return __il.size() == 0;} + + /** + * @brief Return the data pointer of a container. + * @param __cont Container. + */ + template + 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 + 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 + constexpr _Tp* + data(_Tp (&__array)[_Nm]) noexcept + { return __array; } + + /** + * @brief Return the data pointer of an initializer list. + * @param __il Initializer list. + */ + template + constexpr const _Tp* + data(initializer_list<_Tp> __il) noexcept + { return __il.begin(); } + +#endif // C++17 + +#if __cplusplus > 201703L +#define __cpp_lib_ssize 201902L + template + constexpr auto + ssize(const _Container& __cont) + noexcept(noexcept(__cont.size())) + -> common_type_t> + { + using type = make_signed_t; + return static_cast>(__cont.size()); + } + + template + constexpr ptrdiff_t + ssize(const _Tp (&)[_Num]) noexcept + { return _Num; } + +#ifdef __cpp_lib_concepts +namespace ranges +{ + template + inline constexpr bool disable_sized_range = false; + + template + inline constexpr bool enable_borrowed_range = false; + + template + extern const bool enable_view; + + namespace __detail + { + template + constexpr auto + __to_unsigned_like(_Tp __t) noexcept + { return static_cast>(__t); } + +#if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__ + constexpr unsigned __int128 + __to_unsigned_like(__int128 __t) noexcept + { return __t; } + + constexpr unsigned __int128 + __to_unsigned_like(unsigned __int128 __t) noexcept + { return __t; } +#endif + + template + using __make_unsigned_like_t + = decltype(__detail::__to_unsigned_like(std::declval<_Tp>())); + + // Part of the constraints of ranges::borrowed_range + template + concept __maybe_borrowed_range + = is_lvalue_reference_v<_Tp> + || enable_borrowed_range>; + + } // namespace __detail + + namespace __cust_access + { + using std::ranges::__detail::__maybe_borrowed_range; + using std::__detail::__class_or_enum; + using std::__detail::__decay_copy; + using std::__detail::__member_begin; + using std::__detail::__adl_begin; + + struct _Begin + { + private: + template + static constexpr bool + _S_noexcept() + { + if constexpr (is_array_v>) + return true; + else if constexpr (__member_begin<_Tp>) + return noexcept(__decay_copy(std::declval<_Tp&>().begin())); + else + return noexcept(__decay_copy(begin(std::declval<_Tp&>()))); + } + + public: + template<__maybe_borrowed_range _Tp> + requires is_array_v> || __member_begin<_Tp> + || __adl_begin<_Tp> + constexpr auto + operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp>()) + { + if constexpr (is_array_v>) + { + static_assert(is_lvalue_reference_v<_Tp>); + using _Up = remove_all_extents_t>; + static_assert(sizeof(_Up) != 0, "not array of incomplete type"); + return __t + 0; + } + else if constexpr (__member_begin<_Tp>) + return __t.begin(); + else + return begin(__t); + } + }; + + template + concept __member_end = requires(_Tp& __t) + { + { __decay_copy(__t.end()) } + -> sentinel_for(__t)))>; + }; + + void end(auto&) = delete; + void end(const auto&) = delete; + + template + concept __adl_end = __class_or_enum> + && requires(_Tp& __t) + { + { __decay_copy(end(__t)) } + -> sentinel_for(__t)))>; + }; + + struct _End + { + private: + template + static constexpr bool + _S_noexcept() + { + if constexpr (is_bounded_array_v>) + return true; + else if constexpr (__member_end<_Tp>) + return noexcept(__decay_copy(std::declval<_Tp&>().end())); + else + return noexcept(__decay_copy(end(std::declval<_Tp&>()))); + } + + public: + template<__maybe_borrowed_range _Tp> + requires is_bounded_array_v> || __member_end<_Tp> + || __adl_end<_Tp> + constexpr auto + operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp>()) + { + if constexpr (is_bounded_array_v>) + { + static_assert(is_lvalue_reference_v<_Tp>); + return __t + extent_v>; + } + else if constexpr (__member_end<_Tp>) + return __t.end(); + else + return end(__t); + } + }; + + template + constexpr decltype(auto) + __as_const(_Tp&& __t) noexcept + { + if constexpr (is_lvalue_reference_v<_Tp>) + return static_cast&>(__t); + else + return static_cast(__t); + } + + struct _CBegin + { + template + constexpr auto + operator()(_Tp&& __e) const + noexcept(noexcept(_Begin{}(__cust_access::__as_const((_Tp&&)__e)))) + requires requires { _Begin{}(__cust_access::__as_const((_Tp&&)__e)); } + { + return _Begin{}(__cust_access::__as_const(std::forward<_Tp>(__e))); + } + }; + + struct _CEnd + { + template + constexpr auto + operator()(_Tp&& __e) const + noexcept(noexcept(_End{}(__cust_access::__as_const((_Tp&&)__e)))) + requires requires { _End{}(__cust_access::__as_const((_Tp&&)__e)); } + { + return _End{}(__cust_access::__as_const(std::forward<_Tp>(__e))); + } + }; + + template + concept __member_rbegin = requires(_Tp& __t) + { + { __decay_copy(__t.rbegin()) } -> input_or_output_iterator; + }; + + void rbegin(auto&) = delete; + void rbegin(const auto&) = delete; + + template + concept __adl_rbegin = __class_or_enum> + && requires(_Tp& __t) + { + { __decay_copy(rbegin(__t)) } -> input_or_output_iterator; + }; + + template + concept __reversable = requires(_Tp& __t) + { + { _Begin{}(__t) } -> bidirectional_iterator; + { _End{}(__t) } -> same_as; + }; + + struct _RBegin + { + private: + template + static constexpr bool + _S_noexcept() + { + if constexpr (__member_rbegin<_Tp>) + return noexcept(__decay_copy(std::declval<_Tp&>().rbegin())); + else if constexpr (__adl_rbegin<_Tp>) + return noexcept(__decay_copy(rbegin(std::declval<_Tp&>()))); + else + { + if constexpr (noexcept(_End{}(std::declval<_Tp&>()))) + { + using _It = decltype(_End{}(std::declval<_Tp&>())); + // std::reverse_iterator copy-initializes its member. + return is_nothrow_copy_constructible_v<_It>; + } + else + return false; + } + } + + public: + template<__maybe_borrowed_range _Tp> + requires __member_rbegin<_Tp> || __adl_rbegin<_Tp> || __reversable<_Tp> + constexpr auto + operator()(_Tp&& __t) const + noexcept(_S_noexcept<_Tp>()) + { + if constexpr (__member_rbegin<_Tp>) + return __t.rbegin(); + else if constexpr (__adl_rbegin<_Tp>) + return rbegin(__t); + else + return std::make_reverse_iterator(_End{}(__t)); + } + }; + + template + concept __member_rend = requires(_Tp& __t) + { + { __decay_copy(__t.rend()) } + -> sentinel_for; + }; + + void rend(auto&) = delete; + void rend(const auto&) = delete; + + template + concept __adl_rend = __class_or_enum> + && requires(_Tp& __t) + { + { __decay_copy(rend(__t)) } + -> sentinel_for(__t)))>; + }; + + struct _REnd + { + private: + template + static constexpr bool + _S_noexcept() + { + if constexpr (__member_rend<_Tp>) + return noexcept(__decay_copy(std::declval<_Tp&>().rend())); + else if constexpr (__adl_rend<_Tp>) + return noexcept(__decay_copy(rend(std::declval<_Tp&>()))); + else + { + if constexpr (noexcept(_Begin{}(std::declval<_Tp&>()))) + { + using _It = decltype(_Begin{}(std::declval<_Tp&>())); + // std::reverse_iterator copy-initializes its member. + return is_nothrow_copy_constructible_v<_It>; + } + else + return false; + } + } + + public: + template<__maybe_borrowed_range _Tp> + requires __member_rend<_Tp> || __adl_rend<_Tp> || __reversable<_Tp> + constexpr auto + operator()(_Tp&& __t) const + noexcept(_S_noexcept<_Tp>()) + { + if constexpr (__member_rend<_Tp>) + return __t.rend(); + else if constexpr (__adl_rend<_Tp>) + return rend(__t); + else + return std::make_reverse_iterator(_Begin{}(__t)); + } + }; + + struct _CRBegin + { + template + constexpr auto + operator()(_Tp&& __e) const + noexcept(noexcept(_RBegin{}(__cust_access::__as_const((_Tp&&)__e)))) + requires requires { _RBegin{}(__cust_access::__as_const((_Tp&&)__e)); } + { + return _RBegin{}(__cust_access::__as_const(std::forward<_Tp>(__e))); + } + }; + + struct _CREnd + { + template + constexpr auto + operator()(_Tp&& __e) const + noexcept(noexcept(_REnd{}(__cust_access::__as_const((_Tp&&)__e)))) + requires requires { _REnd{}(__cust_access::__as_const((_Tp&&)__e)); } + { + return _REnd{}(__cust_access::__as_const(std::forward<_Tp>(__e))); + } + }; + + template + concept __member_size = !disable_sized_range> + && requires(_Tp&& __t) + { + { __decay_copy(std::forward<_Tp>(__t).size()) } + -> __detail::__is_integer_like; + }; + + void size(auto&) = delete; + void size(const auto&) = delete; + + template + concept __adl_size = __class_or_enum> + && !disable_sized_range> + && requires(_Tp&& __t) + { + { __decay_copy(size(std::forward<_Tp>(__t))) } + -> __detail::__is_integer_like; + }; + + template + concept __sentinel_size = requires(_Tp&& __t) + { + { _Begin{}(std::forward<_Tp>(__t)) } -> forward_iterator; + + { _End{}(std::forward<_Tp>(__t)) } + -> sized_sentinel_for(__t)))>; + }; + + struct _Size + { + private: + template + static constexpr bool + _S_noexcept() + { + if constexpr (is_bounded_array_v>) + return true; + else if constexpr (__member_size<_Tp>) + return noexcept(__decay_copy(std::declval<_Tp>().size())); + else if constexpr (__adl_size<_Tp>) + return noexcept(__decay_copy(size(std::declval<_Tp>()))); + else if constexpr (__sentinel_size<_Tp>) + return noexcept(_End{}(std::declval<_Tp>()) + - _Begin{}(std::declval<_Tp>())); + } + + public: + template + requires is_bounded_array_v> + || __member_size<_Tp> || __adl_size<_Tp> || __sentinel_size<_Tp> + constexpr auto + operator()(_Tp&& __e) const noexcept(_S_noexcept<_Tp>()) + { + if constexpr (is_bounded_array_v>) + { + return extent_v>; + } + else if constexpr (__member_size<_Tp>) + return std::forward<_Tp>(__e).size(); + else if constexpr (__adl_size<_Tp>) + return size(std::forward<_Tp>(__e)); + else if constexpr (__sentinel_size<_Tp>) + return __detail::__to_unsigned_like( + _End{}(std::forward<_Tp>(__e)) + - _Begin{}(std::forward<_Tp>(__e))); + } + }; + + struct _SSize + { + template + requires requires (_Tp&& __e) + { + _Begin{}(std::forward<_Tp>(__e)); + _Size{}(std::forward<_Tp>(__e)); + } + constexpr auto + operator()(_Tp&& __e) const + noexcept(noexcept(_Size{}(std::forward<_Tp>(__e)))) + { + using __iter_type = decltype(_Begin{}(std::forward<_Tp>(__e))); + using __diff_type = iter_difference_t<__iter_type>; + using __gnu_cxx::__int_traits; + auto __size = _Size{}(std::forward<_Tp>(__e)); + if constexpr (integral<__diff_type>) + { + if constexpr (__int_traits<__diff_type>::__digits + < __int_traits::__digits) + return static_cast(__size); + } + return static_cast<__diff_type>(__size); + } + }; + + template + concept __member_empty = requires(_Tp&& __t) + { bool(std::forward<_Tp>(__t).empty()); }; + + template + concept __size0_empty = requires(_Tp&& __t) + { _Size{}(std::forward<_Tp>(__t)) == 0; }; + + template + concept __eq_iter_empty = requires(_Tp&& __t) + { + { _Begin{}(std::forward<_Tp>(__t)) } -> forward_iterator; + bool(_Begin{}(std::forward<_Tp>(__t)) + == _End{}(std::forward<_Tp>(__t))); + }; + + struct _Empty + { + private: + template + static constexpr bool + _S_noexcept() + { + if constexpr (__member_empty<_Tp>) + return noexcept(std::declval<_Tp>().empty()); + else if constexpr (__size0_empty<_Tp>) + return noexcept(_Size{}(std::declval<_Tp>()) == 0); + else + return noexcept(bool(_Begin{}(std::declval<_Tp>()) + == _End{}(std::declval<_Tp>()))); + } + + public: + template + requires __member_empty<_Tp> || __size0_empty<_Tp> + || __eq_iter_empty<_Tp> + constexpr bool + operator()(_Tp&& __e) const noexcept(_S_noexcept<_Tp>()) + { + if constexpr (__member_empty<_Tp>) + return bool(std::forward<_Tp>(__e).empty()); + else if constexpr (__size0_empty<_Tp>) + return _Size{}(std::forward<_Tp>(__e)) == 0; + else + return bool(_Begin{}(std::forward<_Tp>(__e)) + == _End{}(std::forward<_Tp>(__e))); + } + }; + + template + concept __pointer_to_object = is_pointer_v<_Tp> + && is_object_v>; + + template + concept __member_data = is_lvalue_reference_v<_Tp> + && requires(_Tp __t) { { __t.data() } -> __pointer_to_object; }; + + template + concept __begin_data = requires(_Tp&& __t) + { { _Begin{}(std::forward<_Tp>(__t)) } -> contiguous_iterator; }; + + struct _Data + { + private: + template + static constexpr bool + _S_noexcept() + { + if constexpr (__member_data<_Tp>) + return noexcept(__decay_copy(std::declval<_Tp>().data())); + else + return noexcept(_Begin{}(std::declval<_Tp>())); + } + + public: + template<__maybe_borrowed_range _Tp> + requires __member_data<_Tp> || __begin_data<_Tp> + constexpr auto + operator()(_Tp&& __e) const noexcept(_S_noexcept<_Tp>()) + { + if constexpr (__member_data<_Tp>) + return __e.data(); + else + return std::to_address(_Begin{}(std::forward<_Tp>(__e))); + } + }; + + struct _CData + { + template + constexpr auto + operator()(_Tp&& __e) const + noexcept(noexcept(_Data{}(__cust_access::__as_const((_Tp&&)__e)))) + requires requires { _Data{}(__cust_access::__as_const((_Tp&&)__e)); } + { + return _Data{}(__cust_access::__as_const(std::forward<_Tp>(__e))); + } + }; + + } // namespace __cust_access + + inline namespace __cust + { + inline constexpr __cust_access::_Begin begin{}; + inline constexpr __cust_access::_End end{}; + inline constexpr __cust_access::_CBegin cbegin{}; + inline constexpr __cust_access::_CEnd cend{}; + inline constexpr __cust_access::_RBegin rbegin{}; + inline constexpr __cust_access::_REnd rend{}; + inline constexpr __cust_access::_CRBegin crbegin{}; + inline constexpr __cust_access::_CREnd crend{}; + inline constexpr __cust_access::_Size size{}; + inline constexpr __cust_access::_SSize ssize{}; + inline constexpr __cust_access::_Empty empty{}; + inline constexpr __cust_access::_Data data{}; + inline constexpr __cust_access::_CData cdata{}; + } + + /// [range.range] The range concept. + template + concept range = requires(_Tp& __t) + { + ranges::begin(__t); + ranges::end(__t); + }; + + /// [range.range] The borrowed_range concept. + template + concept borrowed_range + = range<_Tp> && __detail::__maybe_borrowed_range<_Tp>; + + template + using iterator_t = std::__detail::__range_iter_t<_Tp>; + + template + using sentinel_t = decltype(ranges::end(std::declval<_Range&>())); + + template + using range_difference_t = iter_difference_t>; + + template + using range_value_t = iter_value_t>; + + template + using range_reference_t = iter_reference_t>; + + template + using range_rvalue_reference_t + = iter_rvalue_reference_t>; + + /// [range.sized] The sized_range concept. + template + concept sized_range = range<_Tp> + && requires(_Tp& __t) { ranges::size(__t); }; + + template + using range_size_t = decltype(ranges::size(std::declval<_Range&>())); + + // [range.refinements] + + /// A range for which ranges::begin returns an output iterator. + template + concept output_range + = range<_Range> && output_iterator, _Tp>; + + /// A range for which ranges::begin returns an input iterator. + template + concept input_range = range<_Tp> && input_iterator>; + + /// A range for which ranges::begin returns a forward iterator. + template + concept forward_range + = input_range<_Tp> && forward_iterator>; + + /// A range for which ranges::begin returns a bidirectional iterator. + template + concept bidirectional_range + = forward_range<_Tp> && bidirectional_iterator>; + + /// A range for which ranges::begin returns a random access iterator. + template + concept random_access_range + = bidirectional_range<_Tp> && random_access_iterator>; + + /// A range for which ranges::begin returns a contiguous iterator. + template + concept contiguous_range + = random_access_range<_Tp> && contiguous_iterator> + && requires(_Tp& __t) + { + { ranges::data(__t) } -> same_as>>; + }; + + /// A range for which ranges::begin and ranges::end return the same type. + template + concept common_range + = range<_Tp> && same_as, sentinel_t<_Tp>>; + + // [range.iter.ops] range iterator operations + + template + constexpr void + advance(_It& __it, iter_difference_t<_It> __n) + { + if constexpr (random_access_iterator<_It>) + __it += __n; + else if constexpr (bidirectional_iterator<_It>) + { + if (__n > 0) + { + do + { + ++__it; + } + while (--__n); + } + else if (__n < 0) + { + do + { + --__it; + } + while (++__n); + } + } + else + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated() && __n < 0) + throw "attempt to decrement a non-bidirectional iterator"; +#endif + __glibcxx_assert(__n >= 0); + while (__n-- > 0) + ++__it; + } + } + + template _Sent> + constexpr void + advance(_It& __it, _Sent __bound) + { + if constexpr (assignable_from<_It&, _Sent>) + __it = std::move(__bound); + else if constexpr (sized_sentinel_for<_Sent, _It>) + ranges::advance(__it, __bound - __it); + else + { + while (__it != __bound) + ++__it; + } + } + + template _Sent> + constexpr iter_difference_t<_It> + advance(_It& __it, iter_difference_t<_It> __n, _Sent __bound) + { + if constexpr (sized_sentinel_for<_Sent, _It>) + { + const auto __diff = __bound - __it; +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated() + && !(__n == 0 || __diff == 0 || (__n < 0 == __diff < 0))) + throw "inconsistent directions for distance and bound"; +#endif + // n and bound must not lead in opposite directions: + __glibcxx_assert(__n == 0 || __diff == 0 || (__n < 0 == __diff < 0)); + const auto __absdiff = __diff < 0 ? -__diff : __diff; + const auto __absn = __n < 0 ? -__n : __n;; + if (__absn >= __absdiff) + { + ranges::advance(__it, __bound); + return __n - __diff; + } + else + { + ranges::advance(__it, __n); + return 0; + } + } + else if (__it == __bound || __n == 0) + return iter_difference_t<_It>(0); + else if (__n > 0) + { + iter_difference_t<_It> __m = 0; + do + { + ++__it; + ++__m; + } + while (__m != __n && __it != __bound); + return __n - __m; + } + else if constexpr (bidirectional_iterator<_It> && same_as<_It, _Sent>) + { + iter_difference_t<_It> __m = 0; + do + { + --__it; + --__m; + } + while (__m != __n && __it != __bound); + return __n - __m; + } + else + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated() && __n < 0) + throw "attempt to decrement a non-bidirectional iterator"; +#endif + __glibcxx_assert(__n >= 0); + return __n; + } + } + + template _Sent> + constexpr iter_difference_t<_It> + distance(_It __first, _Sent __last) + { + if constexpr (sized_sentinel_for<_Sent, _It>) + return __last - __first; + else + { + iter_difference_t<_It> __n = 0; + while (__first != __last) + { + ++__first; + ++__n; + } + return __n; + } + } + + template + constexpr range_difference_t<_Range> + distance(_Range&& __r) + { + if constexpr (sized_range<_Range>) + return static_cast>(ranges::size(__r)); + else + return ranges::distance(ranges::begin(__r), ranges::end(__r)); + } + + template + constexpr _It + next(_It __x) + { + ++__x; + return __x; + } + + template + constexpr _It + next(_It __x, iter_difference_t<_It> __n) + { + ranges::advance(__x, __n); + return __x; + } + + template _Sent> + constexpr _It + next(_It __x, _Sent __bound) + { + ranges::advance(__x, __bound); + return __x; + } + + template _Sent> + constexpr _It + next(_It __x, iter_difference_t<_It> __n, _Sent __bound) + { + ranges::advance(__x, __n, __bound); + return __x; + } + + template + constexpr _It + prev(_It __x) + { + --__x; + return __x; + } + + template + constexpr _It + prev(_It __x, iter_difference_t<_It> __n) + { + ranges::advance(__x, -__n); + return __x; + } + + template + constexpr _It + prev(_It __x, iter_difference_t<_It> __n, _It __bound) + { + ranges::advance(__x, -__n, __bound); + return __x; + } + +} // namespace ranges +#endif // library concepts +#endif // C++20 +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // C++11 + +#endif // _GLIBCXX_RANGE_ACCESS_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_access.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_access.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..a74caebb2d04b88f6d7810139ca13540b7605cc4 GIT binary patch literal 22745 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. + +/** @file bits/range_cmp.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{functional} + */ + +#ifndef _RANGE_CMP_H +#define _RANGE_CMP_H 1 + +#if __cplusplus > 201703L +# include +# include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + struct __is_transparent; // not defined + + // Define std::identity here so that and + // don't need to include to get it. + + /// [func.identity] The identity function. + struct identity + { + template + constexpr _Tp&& + operator()(_Tp&& __t) const noexcept + { return std::forward<_Tp>(__t); } + + using is_transparent = __is_transparent; + }; + +#ifdef __cpp_lib_concepts +// Define this here, included by all the headers that need to define it. +#define __cpp_lib_ranges 201911L + +namespace ranges +{ + namespace __detail + { + // BUILTIN-PTR-CMP(T, ==, U) + template + concept __eq_builtin_ptr_cmp + = requires (_Tp&& __t, _Up&& __u) { { __t == __u } -> same_as; } + && convertible_to<_Tp, const volatile void*> + && convertible_to<_Up, const volatile void*> + && (! requires(_Tp&& __t, _Up&& __u) + { operator==(std::forward<_Tp>(__t), std::forward<_Up>(__u)); } + && + ! requires(_Tp&& __t, _Up&& __u) + { std::forward<_Tp>(__t).operator==(std::forward<_Up>(__u)); }); + + // BUILTIN-PTR-CMP(T, <, U) + template + concept __less_builtin_ptr_cmp + = requires (_Tp&& __t, _Up&& __u) { { __t < __u } -> same_as; } + && convertible_to<_Tp, const volatile void*> + && convertible_to<_Up, const volatile void*> + && (! requires(_Tp&& __t, _Up&& __u) + { operator<(std::forward<_Tp>(__t), std::forward<_Up>(__u)); } + && ! requires(_Tp&& __t, _Up&& __u) + { std::forward<_Tp>(__t).operator<(std::forward<_Up>(__u)); }); + } // namespace __detail + + // [range.cmp] Concept-constrained comparisons + + /// ranges::equal_to function object type. + struct equal_to + { + template + requires equality_comparable_with<_Tp, _Up> + || __detail::__eq_builtin_ptr_cmp<_Tp, _Up> + constexpr bool + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::declval<_Tp>() == std::declval<_Up>())) + { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); } + + using is_transparent = __is_transparent; + }; + + /// ranges::not_equal_to function object type. + struct not_equal_to + { + template + requires equality_comparable_with<_Tp, _Up> + || __detail::__eq_builtin_ptr_cmp<_Tp, _Up> + constexpr bool + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::declval<_Up>() == std::declval<_Tp>())) + { return !equal_to{}(std::forward<_Tp>(__t), std::forward<_Up>(__u)); } + + using is_transparent = __is_transparent; + }; + + /// ranges::less function object type. + struct less + { + template + requires totally_ordered_with<_Tp, _Up> + || __detail::__less_builtin_ptr_cmp<_Tp, _Up> + constexpr bool + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::declval<_Tp>() < std::declval<_Up>())) + { + if constexpr (__detail::__less_builtin_ptr_cmp<_Tp, _Up>) + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return __t < __u; +#endif + auto __x = reinterpret_cast<__UINTPTR_TYPE__>( + static_cast(std::forward<_Tp>(__t))); + auto __y = reinterpret_cast<__UINTPTR_TYPE__>( + static_cast(std::forward<_Up>(__u))); + return __x < __y; + } + else + return std::forward<_Tp>(__t) < std::forward<_Up>(__u); + } + + using is_transparent = __is_transparent; + }; + + /// ranges::greater function object type. + struct greater + { + template + requires totally_ordered_with<_Tp, _Up> + || __detail::__less_builtin_ptr_cmp<_Up, _Tp> + constexpr bool + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::declval<_Up>() < std::declval<_Tp>())) + { return less{}(std::forward<_Up>(__u), std::forward<_Tp>(__t)); } + + using is_transparent = __is_transparent; + }; + + /// ranges::greater_equal function object type. + struct greater_equal + { + template + requires totally_ordered_with<_Tp, _Up> + || __detail::__less_builtin_ptr_cmp<_Tp, _Up> + constexpr bool + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::declval<_Tp>() < std::declval<_Up>())) + { return !less{}(std::forward<_Tp>(__t), std::forward<_Up>(__u)); } + + using is_transparent = __is_transparent; + }; + + /// ranges::less_equal function object type. + struct less_equal + { + template + requires totally_ordered_with<_Tp, _Up> + || __detail::__less_builtin_ptr_cmp<_Up, _Tp> + constexpr bool + operator()(_Tp&& __t, _Up&& __u) const + noexcept(noexcept(std::declval<_Up>() < std::declval<_Tp>())) + { return !less{}(std::forward<_Up>(__u), std::forward<_Tp>(__t)); } + + using is_transparent = __is_transparent; + }; + +} // namespace ranges +#endif // library concepts +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // C++20 +#endif // _RANGE_CMP_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_cmp.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@range_cmp.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..5958ca52a1c5caa3d0938b44a7862940c6216d43 GIT binary patch literal 12357 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. + +/** @file bits/ranges_uninitialized.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _RANGES_UNINITIALIZED_H +#define _RANGES_UNINITIALIZED_H 1 + +#if __cplusplus > 201703L +#if __cpp_lib_concepts + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +namespace ranges +{ + namespace __detail + { + template + constexpr void* + __voidify(_Tp& __obj) noexcept + { + return const_cast + (static_cast(std::__addressof(__obj))); + } + + template + concept __nothrow_input_iterator + = (input_iterator<_Iter> + && is_lvalue_reference_v> + && same_as>, + iter_value_t<_Iter>>); + + template + concept __nothrow_sentinel = sentinel_for<_Sent, _Iter>; + + template + concept __nothrow_input_range + = (range<_Range> + && __nothrow_input_iterator> + && __nothrow_sentinel, iterator_t<_Range>>); + + template + concept __nothrow_forward_iterator + = (__nothrow_input_iterator<_Iter> + && forward_iterator<_Iter> + && __nothrow_sentinel<_Iter, _Iter>); + + template + concept __nothrow_forward_range + = (__nothrow_input_range<_Range> + && __nothrow_forward_iterator>); + } // namespace __detail + + struct __destroy_fn + { + template<__detail::__nothrow_input_iterator _Iter, + __detail::__nothrow_sentinel<_Iter> _Sent> + requires destructible> + constexpr _Iter + operator()(_Iter __first, _Sent __last) const noexcept; + + template<__detail::__nothrow_input_range _Range> + requires destructible> + constexpr borrowed_iterator_t<_Range> + operator()(_Range&& __r) const noexcept; + }; + + inline constexpr __destroy_fn destroy{}; + + namespace __detail + { + template + requires destructible> + struct _DestroyGuard + { + private: + _Iter _M_first; + const _Iter* _M_cur; + + public: + explicit + _DestroyGuard(const _Iter* __iter) + : _M_first(*__iter), _M_cur(__iter) + { } + + void + release() noexcept + { _M_cur = nullptr; } + + ~_DestroyGuard() + { + if (_M_cur != nullptr) + ranges::destroy(std::move(_M_first), *_M_cur); + } + }; + + template + requires destructible> + && is_trivially_destructible_v> + struct _DestroyGuard<_Iter> + { + explicit + _DestroyGuard(const _Iter*) + { } + + void + release() noexcept + { } + }; + } // namespace __detail + + struct __uninitialized_default_construct_fn + { + template<__detail::__nothrow_forward_iterator _Iter, + __detail::__nothrow_sentinel<_Iter> _Sent> + requires default_initializable> + _Iter + operator()(_Iter __first, _Sent __last) const + { + using _ValueType = remove_reference_t>; + if constexpr (is_trivially_default_constructible_v<_ValueType>) + return ranges::next(__first, __last); + else + { + auto __guard = __detail::_DestroyGuard(&__first); + for (; __first != __last; ++__first) + ::new (__detail::__voidify(*__first)) _ValueType; + __guard.release(); + return __first; + } + } + + template<__detail::__nothrow_forward_range _Range> + requires default_initializable> + borrowed_iterator_t<_Range> + operator()(_Range&& __r) const + { + return (*this)(ranges::begin(__r), ranges::end(__r)); + } + }; + + inline constexpr __uninitialized_default_construct_fn + uninitialized_default_construct{}; + + struct __uninitialized_default_construct_n_fn + { + template<__detail::__nothrow_forward_iterator _Iter> + requires default_initializable> + _Iter + operator()(_Iter __first, iter_difference_t<_Iter> __n) const + { + using _ValueType = remove_reference_t>; + if constexpr (is_trivially_default_constructible_v<_ValueType>) + return ranges::next(__first, __n); + else + { + auto __guard = __detail::_DestroyGuard(&__first); + for (; __n > 0; ++__first, (void) --__n) + ::new (__detail::__voidify(*__first)) _ValueType; + __guard.release(); + return __first; + } + } + }; + + inline constexpr __uninitialized_default_construct_n_fn + uninitialized_default_construct_n; + + struct __uninitialized_value_construct_fn + { + template<__detail::__nothrow_forward_iterator _Iter, + __detail::__nothrow_sentinel<_Iter> _Sent> + requires default_initializable> + _Iter + operator()(_Iter __first, _Sent __last) const + { + using _ValueType = remove_reference_t>; + if constexpr (is_trivial_v<_ValueType> + && is_copy_assignable_v<_ValueType>) + return ranges::fill(__first, __last, _ValueType()); + else + { + auto __guard = __detail::_DestroyGuard(&__first); + for (; __first != __last; ++__first) + ::new (__detail::__voidify(*__first)) _ValueType(); + __guard.release(); + return __first; + } + } + + template<__detail::__nothrow_forward_range _Range> + requires default_initializable> + borrowed_iterator_t<_Range> + operator()(_Range&& __r) const + { + return (*this)(ranges::begin(__r), ranges::end(__r)); + } + }; + + inline constexpr __uninitialized_value_construct_fn + uninitialized_value_construct{}; + + struct __uninitialized_value_construct_n_fn + { + template<__detail::__nothrow_forward_iterator _Iter> + requires default_initializable> + _Iter + operator()(_Iter __first, iter_difference_t<_Iter> __n) const + { + using _ValueType = remove_reference_t>; + if constexpr (is_trivial_v<_ValueType> + && is_copy_assignable_v<_ValueType>) + return ranges::fill_n(__first, __n, _ValueType()); + else + { + auto __guard = __detail::_DestroyGuard(&__first); + for (; __n > 0; ++__first, (void) --__n) + ::new (__detail::__voidify(*__first)) _ValueType(); + __guard.release(); + return __first; + } + } + }; + + inline constexpr __uninitialized_value_construct_n_fn + uninitialized_value_construct_n; + + template + using uninitialized_copy_result = in_out_result<_Iter, _Out>; + + struct __uninitialized_copy_fn + { + template _ISent, + __detail::__nothrow_forward_iterator _Out, + __detail::__nothrow_sentinel<_Out> _OSent> + requires constructible_from, iter_reference_t<_Iter>> + uninitialized_copy_result<_Iter, _Out> + operator()(_Iter __ifirst, _ISent __ilast, + _Out __ofirst, _OSent __olast) const + { + using _OutType = remove_reference_t>; + if constexpr (sized_sentinel_for<_ISent, _Iter> + && sized_sentinel_for<_OSent, _Out> + && is_trivial_v<_OutType> + && is_nothrow_assignable_v<_OutType&, + iter_reference_t<_Iter>>) + { + auto __d1 = __ilast - __ifirst; + auto __d2 = __olast - __ofirst; + return ranges::copy_n(std::move(__ifirst), std::min(__d1, __d2), + __ofirst); + } + else + { + auto __guard = __detail::_DestroyGuard(&__ofirst); + for (; __ifirst != __ilast && __ofirst != __olast; + ++__ofirst, (void)++__ifirst) + ::new (__detail::__voidify(*__ofirst)) _OutType(*__ifirst); + __guard.release(); + return {std::move(__ifirst), __ofirst}; + } + } + + template + requires constructible_from, + range_reference_t<_IRange>> + uninitialized_copy_result, + borrowed_iterator_t<_ORange>> + operator()(_IRange&& __inr, _ORange&& __outr) const + { + return (*this)(ranges::begin(__inr), ranges::end(__inr), + ranges::begin(__outr), ranges::end(__outr)); + } + }; + + inline constexpr __uninitialized_copy_fn uninitialized_copy{}; + + template + using uninitialized_copy_n_result = in_out_result<_Iter, _Out>; + + struct __uninitialized_copy_n_fn + { + template _Sent> + requires constructible_from, iter_reference_t<_Iter>> + uninitialized_copy_n_result<_Iter, _Out> + operator()(_Iter __ifirst, iter_difference_t<_Iter> __n, + _Out __ofirst, _Sent __olast) const + { + using _OutType = remove_reference_t>; + if constexpr (sized_sentinel_for<_Sent, _Out> + && is_trivial_v<_OutType> + && is_nothrow_assignable_v<_OutType&, + iter_reference_t<_Iter>>) + { + auto __d = __olast - __ofirst; + return ranges::copy_n(std::move(__ifirst), std::min(__n, __d), + __ofirst); + } + else + { + auto __guard = __detail::_DestroyGuard(&__ofirst); + for (; __n > 0 && __ofirst != __olast; + ++__ofirst, (void)++__ifirst, (void)--__n) + ::new (__detail::__voidify(*__ofirst)) _OutType(*__ifirst); + __guard.release(); + return {std::move(__ifirst), __ofirst}; + } + } + }; + + inline constexpr __uninitialized_copy_n_fn uninitialized_copy_n{}; + + template + using uninitialized_move_result = in_out_result<_Iter, _Out>; + + struct __uninitialized_move_fn + { + template _ISent, + __detail::__nothrow_forward_iterator _Out, + __detail::__nothrow_sentinel<_Out> _OSent> + requires constructible_from, + iter_rvalue_reference_t<_Iter>> + uninitialized_move_result<_Iter, _Out> + operator()(_Iter __ifirst, _ISent __ilast, + _Out __ofirst, _OSent __olast) const + { + using _OutType = remove_reference_t>; + if constexpr (sized_sentinel_for<_ISent, _Iter> + && sized_sentinel_for<_OSent, _Out> + && is_trivial_v<_OutType> + && is_nothrow_assignable_v<_OutType&, + iter_rvalue_reference_t<_Iter>>) + { + auto __d1 = __ilast - __ifirst; + auto __d2 = __olast - __ofirst; + auto [__in, __out] + = ranges::copy_n(std::make_move_iterator(std::move(__ifirst)), + std::min(__d1, __d2), __ofirst); + return {std::move(__in).base(), __out}; + } + else + { + auto __guard = __detail::_DestroyGuard(&__ofirst); + for (; __ifirst != __ilast && __ofirst != __olast; + ++__ofirst, (void)++__ifirst) + ::new (__detail::__voidify(*__ofirst)) + _OutType(ranges::iter_move(__ifirst)); + __guard.release(); + return {std::move(__ifirst), __ofirst}; + } + } + + template + requires constructible_from, + range_rvalue_reference_t<_IRange>> + uninitialized_move_result, + borrowed_iterator_t<_ORange>> + operator()(_IRange&& __inr, _ORange&& __outr) const + { + return (*this)(ranges::begin(__inr), ranges::end(__inr), + ranges::begin(__outr), ranges::end(__outr)); + } + }; + + inline constexpr __uninitialized_move_fn uninitialized_move{}; + + template + using uninitialized_move_n_result = in_out_result<_Iter, _Out>; + + struct __uninitialized_move_n_fn + { + template _Sent> + requires constructible_from, + iter_rvalue_reference_t<_Iter>> + uninitialized_move_n_result<_Iter, _Out> + operator()(_Iter __ifirst, iter_difference_t<_Iter> __n, + _Out __ofirst, _Sent __olast) const + { + using _OutType = remove_reference_t>; + if constexpr (sized_sentinel_for<_Sent, _Out> + && is_trivial_v<_OutType> + && is_nothrow_assignable_v<_OutType&, + iter_rvalue_reference_t<_Iter>>) + { + auto __d = __olast - __ofirst; + auto [__in, __out] + = ranges::copy_n(std::make_move_iterator(std::move(__ifirst)), + std::min(__n, __d), __ofirst); + return {std::move(__in).base(), __out}; + } + else + { + auto __guard = __detail::_DestroyGuard(&__ofirst); + for (; __n > 0 && __ofirst != __olast; + ++__ofirst, (void)++__ifirst, (void)--__n) + ::new (__detail::__voidify(*__ofirst)) + _OutType(ranges::iter_move(__ifirst)); + __guard.release(); + return {std::move(__ifirst), __ofirst}; + } + } + }; + + inline constexpr __uninitialized_move_n_fn uninitialized_move_n{}; + + struct __uninitialized_fill_fn + { + template<__detail::__nothrow_forward_iterator _Iter, + __detail::__nothrow_sentinel<_Iter> _Sent, typename _Tp> + requires constructible_from, const _Tp&> + _Iter + operator()(_Iter __first, _Sent __last, const _Tp& __x) const + { + using _ValueType = remove_reference_t>; + if constexpr (is_trivial_v<_ValueType> + && is_nothrow_assignable_v<_ValueType&, const _Tp&>) + return ranges::fill(__first, __last, __x); + else + { + auto __guard = __detail::_DestroyGuard(&__first); + for (; __first != __last; ++__first) + ::new (__detail::__voidify(*__first)) _ValueType(__x); + __guard.release(); + return __first; + } + } + + template<__detail::__nothrow_forward_range _Range, typename _Tp> + requires constructible_from, const _Tp&> + borrowed_iterator_t<_Range> + operator()(_Range&& __r, const _Tp& __x) const + { + return (*this)(ranges::begin(__r), ranges::end(__r), __x); + } + }; + + inline constexpr __uninitialized_fill_fn uninitialized_fill{}; + + struct __uninitialized_fill_n_fn + { + template<__detail::__nothrow_forward_iterator _Iter, typename _Tp> + requires constructible_from, const _Tp&> + _Iter + operator()(_Iter __first, iter_difference_t<_Iter> __n, + const _Tp& __x) const + { + using _ValueType = remove_reference_t>; + if constexpr (is_trivial_v<_ValueType> + && is_nothrow_assignable_v<_ValueType&, const _Tp&>) + return ranges::fill_n(__first, __n, __x); + else + { + auto __guard = __detail::_DestroyGuard(&__first); + for (; __n > 0; ++__first, (void)--__n) + ::new (__detail::__voidify(*__first)) _ValueType(__x); + __guard.release(); + return __first; + } + } + }; + + inline constexpr __uninitialized_fill_n_fn uninitialized_fill_n{}; + + struct __construct_at_fn + { + template + requires requires { + ::new (std::declval()) _Tp(std::declval<_Args>()...); + } + constexpr _Tp* + operator()(_Tp* __location, _Args&&... __args) const + noexcept(noexcept(std::construct_at(__location, + std::forward<_Args>(__args)...))) + { + return std::construct_at(__location, + std::forward<_Args>(__args)...); + } + }; + + inline constexpr __construct_at_fn construct_at{}; + + struct __destroy_at_fn + { + template + constexpr void + operator()(_Tp* __location) const noexcept + { + if constexpr (is_array_v<_Tp>) + ranges::destroy(ranges::begin(*__location), ranges::end(*__location)); + else + __location->~_Tp(); + } + }; + + inline constexpr __destroy_at_fn destroy_at{}; + + template<__detail::__nothrow_input_iterator _Iter, + __detail::__nothrow_sentinel<_Iter> _Sent> + requires destructible> + constexpr _Iter + __destroy_fn::operator()(_Iter __first, _Sent __last) const noexcept + { + if constexpr (is_trivially_destructible_v>) + return ranges::next(std::move(__first), __last); + else + { + for (; __first != __last; ++__first) + ranges::destroy_at(std::__addressof(*__first)); + return __first; + } + } + + template<__detail::__nothrow_input_range _Range> + requires destructible> + constexpr borrowed_iterator_t<_Range> + __destroy_fn::operator()(_Range&& __r) const noexcept + { + return (*this)(ranges::begin(__r), ranges::end(__r)); + } + + struct __destroy_n_fn + { + template<__detail::__nothrow_input_iterator _Iter> + requires destructible> + constexpr _Iter + operator()(_Iter __first, iter_difference_t<_Iter> __n) const noexcept + { + if constexpr (is_trivially_destructible_v>) + return ranges::next(std::move(__first), __n); + else + { + for (; __n > 0; ++__first, (void)--__n) + ranges::destroy_at(std::__addressof(*__first)); + return __first; + } + } + }; + + inline constexpr __destroy_n_fn destroy_n{}; +} +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif // concepts +#endif // C++20 +#endif // _RANGES_UNINITIALIZED_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ranges_uninitialized.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@ranges_uninitialized.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..726ab1f208956ade786abcd94b558f294d483956 GIT binary patch literal 12370 zcmbVSy^kb074KOR1PKx+#3ieh$QaesjkH=3aELqI9y`)$h4@G=vD|J~x0(9rE4!v= zF1^c{)oQW9WydGFa(>zaD5uD+Fa)Kb~c&%gKmp1-|%^^HIM z`^D;PmG7EL=W^5JTjO$T_qo&7(I2swt<~*?+V59iQl+f7OIK%yroA@xHrtq1E7!Dl z?@rHIz5L2q-q|)cwJN)f&Tqf-L_B$%m8R})vu)kwYvXKQNw-t7EN!;aCT0#ZYX>>>a*Fo-C`uvuI1T}B~%0fu&oz2xo7yR;YhZ|B$ zPRw2v=#E`&KIydBJCfqU8v?c<-i$Qigj=FWYL|8Jr)Ias;2Wn~31%f!Q!Bl9bkzxe z@eUMMtIK9TyR_M(VX^9OT?+<%lrszKw5%?iQVh7ffXfCwMboXzv3>Ox!SC`W4aarL z39EK`gZ>JR=Db1-1(~fD;Lxn~W_AR*jp!W%(w;1yuooW&zfHq#i&udW86`|(6S&1| zJ;3X(Sg6*F~$f02?y(B7{nS-ta~ev#xfs1&zI7@tD9!CJ3ff zW!6-iY@=0~S=X(3yPj+x9ejQc5d_>d*vzuS(TSYwR!Jq1{wYz(e46m}qYD6X!nNoL zS^k}=c-x7IpbuDk$Hx*0YmL`1M$=&H{05S z@W;2`8i(>81RtZKOOC~DA?`L+g))VV@zpPWeJ|^olfwZe$cq3^B^Nres=$}NbvdyQ zAprbh;ghb3pN>HbI-YQ$bBqcx$s#8xjKqgfJo~vCCxDX^V&>qtSErFk`)C+ldUQ@C zmU~OVo*{Inzei-4MYF6nc6pQl7ltv~wc^B_u_#@pZ)BNO+U=SRqLNaDS|6Az#NbxC zf^wud5SfXNOfDO_ibals*0;Jiv_8k3oY3(Z29GyTS0php4NfBoGRkyctZ6HB5PI!+QlJ1Ff zinWZ|1@Zt1V$*_y5vU`qz~W6IWcVO|baiN52&mlE_0iSHP_L+Si-Y(h@RzEuY^l33 zQC}W?3RcL-1blwI7c%H3b}Pu?@3s1(`wbFk?P(Ok+3f)ohwz?o9%LC>I1z+>K6#k- zK>JULTc^s>#B%D=Dr9h}DU9^b_b;IL%qMs8TGS`dKo1J5P~g#2wuh8eldDRhMNX&j zP6wdoPhkoKmW5no8CN7)ZsS5F5De&m7d?l%Xe{>LMUo1kpm>!MQ_G%EX>t znfp2p20EMj8F=p;!&=1A)J2oNH^J?F4s>2O;(oh+qBNift;EsKvMvK7PVmrBTA!@d z!I$t@^D?4Rqt5yk5o5zWrdWh}?LMter{PIvHoA7k-LZFykDz>IFgHdj{5_zE{#i91 zU`^zLJ{BSYCQYnlVm3nXNMx)BY?`xI;kh$bNvv#OG|BD?CzHdYco~pNnIa4cK^zP? z5h0j#Vg=7ZxhVUB-XHlGWcaPO|26h_y51N$I}!^3GCWQoigEW5&D0QYXS=ehXYb?# z&d)&)3PXA2fbSwiAo&P+$0Q#OS5Rb53`_lYZ=vZ0g?Yr-|hLV1%H2tSTOofxpY=TH?H2lG92dRPNUa7nG9%pac(+PE}SkS=AX+A8ET z*clnIIR-syoX}4v!;myJG66`C`3RFVL42zK>4Wdsr>8I^MW1NmgmOk6v@#T&FqTnz zHV^lm*of16(j{tMi-%z?Uv~2%9UhL1@a+$o?7;^o>G5K$qpE>1)(wd*rI}#A-lmRR z&v$c_4<{*N1jJyX%bUe9&(vPvx`atQ=u|RI3r~3Las*HZo;)7ieO`oK`k{uJjJ=Y3<4gIJ9Ks+BS?k2`x)=C;&($9g z(*wg2(mw&1;KR#(a06KleYxha?EdkYTbLWb^MgWm<*d;wJSr_W*TDol{h5^Xldi#d z?2}(s3HVF)c8aBD!b;;Cp{l{?d{CrWKkX+Q^q1u*5C)#%;SV%+nJZ41j+ybH1v>{U z`PscF8g^HFz+j=Xv&zXiP|_~!!UXRap4sp*%CA9QkLMIaD9RG%+CxsA7Ho|-ErWWD z!62PQT~r)k7_Ls8fJ9pBE4yWPqYdd!O3X848%G;XL=IJC37Qg$52IuPX9&>-bFxDO}5m?No8MTM-cQV0J8c3+6Rb^j_wl+UKe~U zRZVkkVDQxpIaw;O@>FmNksRvBxS9H. + +/** @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 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include +#include +#include // for unary_function and binary_function + +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 { }; + + /// 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> { }; + + 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> + { }; + + // - 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; + }; +#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 result_of<_Tp&(_Args&&...)>::type + operator()(_Args&&... __args) const + { +#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 __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/@@home@ado@git@ssp/@usr@include@c++@10@bits@refwrap.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@refwrap.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..1fc2fbcab25c4ff4c96cc844be90de9a9a377796 GIT binary patch literal 29602 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr.h new file mode 100644 index 0000000..0c393e2 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr.h @@ -0,0 +1,918 @@ +// shared_ptr and weak_ptr implementation -*- C++ -*- + +// Copyright (C) 2007-2020 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 +// . + +// 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 + +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 + } + + /** + * @brief A smart pointer with reference-counted copy semantics. + * + * 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; + +#if __cplusplus >= 201703L +# define __cpp_lib_shared_ptr_weak_type 201606 + /// The corresponding weak_ptr type for this shared_ptr + 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()` + * + * 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<_Yp> + allocate_shared(const _Alloc& __a, _Args&&... __args); + + // This constructor is non-standard, it is used by weak_ptr::lock(). + shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t) + : __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` + 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` + 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` + 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` + 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` + 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 + * + * 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 member function shared_from_this. + */ + 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); } + +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 +#define __cpp_lib_enable_shared_from_this 201603 + 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<_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<_Tp> + make_shared(_Args&&... __args) + { + typedef typename std::remove_cv<_Tp>::type _Tp_nc; + return std::allocate_shared<_Tp>(std::allocator<_Tp_nc>(), + std::forward<_Args>(__args)...); + } + + /// 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()); + } + }; + + // @} 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..9422c297a7f229a5dd7eaef08f3b1dae51db96ad GIT binary patch literal 48325 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. + +/** @file bits/shared_ptr_atomic.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _SHARED_PTR_ATOMIC_H +#define _SHARED_PTR_ATOMIC_H 1 + +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @addtogroup pointer_abstractions + * @{ + */ + /// @relates shared_ptr @{ + + /// @cond undocumented + + struct _Sp_locker + { + _Sp_locker(const _Sp_locker&) = delete; + _Sp_locker& operator=(const _Sp_locker&) = delete; + +#ifdef __GTHREADS + explicit + _Sp_locker(const void*) noexcept; + _Sp_locker(const void*, const void*) noexcept; + ~_Sp_locker(); + + private: + unsigned char _M_key1; + unsigned char _M_key2; +#else + explicit _Sp_locker(const void*, const void* = nullptr) { } +#endif + }; + + /// @endcond + + /** + * @brief Report whether shared_ptr atomic operations are lock-free. + * @param __p A non-null pointer to a shared_ptr object. + * @return True if atomic access to @c *__p is lock-free, false otherwise. + * @{ + */ + template + inline bool + atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>* __p) + { +#ifdef __GTHREADS + return __gthread_active_p() == 0; +#else + return true; +#endif + } + + template + inline bool + atomic_is_lock_free(const shared_ptr<_Tp>* __p) + { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__p); } + + // @} + + /** + * @brief Atomic load for shared_ptr objects. + * @param __p A non-null pointer to a shared_ptr object. + * @return @c *__p + * + * The memory order shall not be @c memory_order_release or + * @c memory_order_acq_rel. + * @{ + */ + template + inline shared_ptr<_Tp> + atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order) + { + _Sp_locker __lock{__p}; + return *__p; + } + + template + inline shared_ptr<_Tp> + atomic_load(const shared_ptr<_Tp>* __p) + { return std::atomic_load_explicit(__p, memory_order_seq_cst); } + + template + inline __shared_ptr<_Tp, _Lp> + atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order) + { + _Sp_locker __lock{__p}; + return *__p; + } + + template + inline __shared_ptr<_Tp, _Lp> + atomic_load(const __shared_ptr<_Tp, _Lp>* __p) + { return std::atomic_load_explicit(__p, memory_order_seq_cst); } + // @} + + /** + * @brief Atomic store for shared_ptr objects. + * @param __p A non-null pointer to a shared_ptr object. + * @param __r The value to store. + * + * The memory order shall not be @c memory_order_acquire or + * @c memory_order_acq_rel. + * @{ + */ + template + inline void + atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, + memory_order) + { + _Sp_locker __lock{__p}; + __p->swap(__r); // use swap so that **__p not destroyed while lock held + } + + template + inline void + atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) + { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } + + template + inline void + atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p, + __shared_ptr<_Tp, _Lp> __r, + memory_order) + { + _Sp_locker __lock{__p}; + __p->swap(__r); // use swap so that **__p not destroyed while lock held + } + + template + inline void + atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) + { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } + // @} + + /** + * @brief Atomic exchange for shared_ptr objects. + * @param __p A non-null pointer to a shared_ptr object. + * @param __r New value to store in @c *__p. + * @return The original value of @c *__p + * @{ + */ + template + inline shared_ptr<_Tp> + atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, + memory_order) + { + _Sp_locker __lock{__p}; + __p->swap(__r); + return __r; + } + + template + inline shared_ptr<_Tp> + atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) + { + return std::atomic_exchange_explicit(__p, std::move(__r), + memory_order_seq_cst); + } + + template + inline __shared_ptr<_Tp, _Lp> + atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p, + __shared_ptr<_Tp, _Lp> __r, + memory_order) + { + _Sp_locker __lock{__p}; + __p->swap(__r); + return __r; + } + + template + inline __shared_ptr<_Tp, _Lp> + atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) + { + return std::atomic_exchange_explicit(__p, std::move(__r), + memory_order_seq_cst); + } + // @} + + /** + * @brief Atomic compare-and-swap for shared_ptr objects. + * @param __p A non-null pointer to a shared_ptr object. + * @param __v A non-null pointer to a shared_ptr object. + * @param __w A non-null pointer to a shared_ptr object. + * @return True if @c *__p was equivalent to @c *__v, false otherwise. + * + * The memory order for failure shall not be @c memory_order_release or + * @c memory_order_acq_rel, or stronger than the memory order for success. + * @{ + */ + template + bool + atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p, + shared_ptr<_Tp>* __v, + shared_ptr<_Tp> __w, + memory_order, + memory_order) + { + shared_ptr<_Tp> __x; // goes out of scope after __lock + _Sp_locker __lock{__p, __v}; + owner_less> __less; + if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) + { + __x = std::move(*__p); + *__p = std::move(__w); + return true; + } + __x = std::move(*__v); + *__v = *__p; + return false; + } + + template + inline bool + atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, + shared_ptr<_Tp> __w) + { + return std::atomic_compare_exchange_strong_explicit(__p, __v, + std::move(__w), memory_order_seq_cst, memory_order_seq_cst); + } + + template + inline bool + atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p, + shared_ptr<_Tp>* __v, + shared_ptr<_Tp> __w, + memory_order __success, + memory_order __failure) + { + return std::atomic_compare_exchange_strong_explicit(__p, __v, + std::move(__w), __success, __failure); + } + + template + inline bool + atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, + shared_ptr<_Tp> __w) + { + return std::atomic_compare_exchange_weak_explicit(__p, __v, + std::move(__w), memory_order_seq_cst, memory_order_seq_cst); + } + + template + bool + atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p, + __shared_ptr<_Tp, _Lp>* __v, + __shared_ptr<_Tp, _Lp> __w, + memory_order, + memory_order) + { + __shared_ptr<_Tp, _Lp> __x; // goes out of scope after __lock + _Sp_locker __lock{__p, __v}; + owner_less<__shared_ptr<_Tp, _Lp>> __less; + if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) + { + __x = std::move(*__p); + *__p = std::move(__w); + return true; + } + __x = std::move(*__v); + *__v = *__p; + return false; + } + + template + inline bool + atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p, + __shared_ptr<_Tp, _Lp>* __v, + __shared_ptr<_Tp, _Lp> __w) + { + return std::atomic_compare_exchange_strong_explicit(__p, __v, + std::move(__w), memory_order_seq_cst, memory_order_seq_cst); + } + + template + inline bool + atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p, + __shared_ptr<_Tp, _Lp>* __v, + __shared_ptr<_Tp, _Lp> __w, + memory_order __success, + memory_order __failure) + { + return std::atomic_compare_exchange_strong_explicit(__p, __v, + std::move(__w), __success, __failure); + } + + template + inline bool + atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p, + __shared_ptr<_Tp, _Lp>* __v, + __shared_ptr<_Tp, _Lp> __w) + { + return std::atomic_compare_exchange_weak_explicit(__p, __v, + std::move(__w), memory_order_seq_cst, memory_order_seq_cst); + } + // @} + + // @} relates shared_ptr + // @} group pointer_abstractions + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // _SHARED_PTR_ATOMIC_H diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_atomic.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_atomic.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..43e1f73db95971e2c1d86667b30f316db171aa2f GIT binary patch literal 29705 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 literal 0 HcmV?d00001 diff --git a/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_base.h b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_base.h new file mode 100644 index 0000000..ff578e6 --- /dev/null +++ b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_base.h @@ -0,0 +1,1898 @@ +// shared_ptr and weak_ptr implementation details -*- C++ -*- + +// Copyright (C) 2007-2020 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 +// . + +// 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 +#if __cplusplus > 201703L +# 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; + + void + _M_add_ref_copy() + { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); } + + void + _M_add_ref_lock(); + + bool + _M_add_ref_lock_nothrow(); + + void + _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) + { + _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(); + } + } + } + + void + _M_weak_add_ref() noexcept + { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); } + + 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 void + _Sp_counted_base<_S_single>:: + _M_add_ref_lock() + { + if (_M_use_count == 0) + __throw_bad_weak_ptr(); + ++_M_use_count; + } + + template<> + inline void + _Sp_counted_base<_S_mutex>:: + _M_add_ref_lock() + { + __gnu_cxx::__scoped_lock sentry(*this); + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) + { + _M_use_count = 0; + __throw_bad_weak_ptr(); + } + } + + template<> + inline void + _Sp_counted_base<_S_atomic>:: + _M_add_ref_lock() + { + // Perform lock-free add-if-not-zero operation. + _Atomic_word __count = _M_get_use_count(); + do + { + if (__count == 0) + __throw_bad_weak_ptr(); + // 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)); + } + + template<> + inline bool + _Sp_counted_base<_S_single>:: + _M_add_ref_lock_nothrow() + { + 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() + { + __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() + { + // 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_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; + + + // 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 { } + + 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 + : _M_ptr(__p), _Del_base(std::move(__d)), _Alloc_base(__a) + { } + + _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 std::type_info& __ti) 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: + _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<_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 + { + auto __ptr = const_cast::type*>(_M_ptr()); + // 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 __ptr; + return nullptr; + } + + _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); } + + _Impl _M_impl; + }; + + // 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 + { + template + struct __not_alloc_shared_tag { using type = void; }; + + template + struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { }; + + 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) + { + typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type; + 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_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 = typename conditional::value, + reference_wrapper::type>, + _Del>::type; + 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); + _Alloc_traits::construct(__a, __mem, __r.release(), + __r.get_deleter()); // non-throwing + _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); + + ~__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 != 0) + _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 != 0) + __tmp->_M_add_ref_copy(); + if (_M_pi != 0) + _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 != 0 ? _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>; + + _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>; + + _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(); + else + __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) + : _M_pi(__r._M_pi) + { + if (_M_pi != nullptr) + if (!_M_pi->_M_add_ref_lock_nothrow()) + _M_pi = nullptr; + } + +#define __cpp_lib_shared_ptr_arrays 201611L + + // 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 + { }; + + + // 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 + { + __glibcxx_assert(_M_get() != nullptr); + return *_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 + { + __glibcxx_assert(_M_get() != nullptr); + return *_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 + + element_type& + operator[](ptrdiff_t __i) const + { + __glibcxx_assert(_M_get() != nullptr); + __glibcxx_assert(!extent<_Tp>::value || __i < extent<_Tp>::value); + return _M_get()[__i]; + } + + 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 = typename enable_if<__and_< + __sp_compatible_with<_Yp*, _Tp*>, is_convertible<_Ptr, element_type*> + >::value, _Res>::type; + + // 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 = 0; + } + + __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 = 0; + } + + 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 = 0; + } + + 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 = __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 = __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 == 0 || __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 // never throws + { return _M_ptr == 0 ? false : true; } + + /// 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); + + // 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) + : _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; + + 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 + { + _M_ptr = __r._M_ptr; + _M_refcount = std::move(__r._M_refcount); + __r._M_ptr = nullptr; + 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(*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>; + + 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); } + + 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); } + }; + + 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) + { + 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/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_base.h.blob b/.ccls-cache/@@home@ado@git@ssp/@usr@include@c++@10@bits@shared_ptr_base.h.blob new file mode 100644 index 0000000000000000000000000000000000000000..34f3ef3fbce08d4eb0d0257489de9a24449207b4 GIT binary patch literal 106690 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