react-native-windows 0.85.0-preview.1 → 0.85.0-preview.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +28 -46
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +0 -3
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +19 -13
- package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +107 -0
- package/Microsoft.ReactNative/Fabric/Composition/SelectionItemAutomationEvent.h +73 -0
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +105 -32
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +7 -2
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +2 -2
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +2 -9
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +54 -5
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +29 -9
- package/Scripts/creaternwlib.cmd +31 -15
- package/external/.clang-format +1 -0
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/external/fmt/cgmanifest.json +15 -0
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/external/fmt/include/fmt/base.h +3077 -0
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/Folly.natvis +25 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/external/folly/cgmanifest.json +25 -0
- package/external/folly/folly/.clang-format +1 -0
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstexprMath.h +978 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.cpp +1205 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/Hardware.h +155 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.cpp +633 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/external/folly/folly/hash/SpookyHashV2.h +339 -0
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic-inl.h +1438 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.cpp +1118 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/SafeAssert.h +188 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/ToAscii.cpp +348 -0
- package/external/folly/folly/lang/ToAscii.h +182 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.cpp +33 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/package.json +3 -3
- package/templates/cpp-lib/example/metro.config.js +18 -2
|
@@ -0,0 +1,716 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <atomic>
|
|
20
|
+
#include <exception>
|
|
21
|
+
#include <string>
|
|
22
|
+
#include <type_traits>
|
|
23
|
+
#include <utility>
|
|
24
|
+
|
|
25
|
+
#include <folly/CPortability.h>
|
|
26
|
+
#include <folly/CppAttributes.h>
|
|
27
|
+
#include <folly/Likely.h>
|
|
28
|
+
#include <folly/Portability.h>
|
|
29
|
+
#include <folly/Traits.h>
|
|
30
|
+
#include <folly/Utility.h>
|
|
31
|
+
#include <folly/lang/Assume.h>
|
|
32
|
+
#include <folly/lang/SafeAssert.h>
|
|
33
|
+
#include <folly/lang/Thunk.h>
|
|
34
|
+
#include <folly/lang/TypeInfo.h>
|
|
35
|
+
|
|
36
|
+
namespace folly {
|
|
37
|
+
|
|
38
|
+
/// throw_exception
|
|
39
|
+
///
|
|
40
|
+
/// Throw an exception if exceptions are enabled, or terminate if compiled with
|
|
41
|
+
/// -fno-exceptions.
|
|
42
|
+
template <typename Ex>
|
|
43
|
+
[[noreturn, FOLLY_ATTR_GNU_COLD]] FOLLY_NOINLINE void throw_exception(Ex&& ex) {
|
|
44
|
+
#if FOLLY_HAS_EXCEPTIONS
|
|
45
|
+
throw static_cast<Ex&&>(ex);
|
|
46
|
+
#else
|
|
47
|
+
(void)ex;
|
|
48
|
+
std::terminate();
|
|
49
|
+
#endif
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/// terminate_with
|
|
53
|
+
///
|
|
54
|
+
/// Terminates as if by forwarding to throw_exception but in a noexcept context.
|
|
55
|
+
template <typename Ex>
|
|
56
|
+
[[noreturn, FOLLY_ATTR_GNU_COLD]] FOLLY_NOINLINE void terminate_with(
|
|
57
|
+
Ex&& ex) noexcept {
|
|
58
|
+
throw_exception(static_cast<Ex&&>(ex));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
namespace detail {
|
|
62
|
+
|
|
63
|
+
struct throw_exception_arg_array_ {
|
|
64
|
+
template <typename R>
|
|
65
|
+
using v = std::remove_extent_t<std::remove_reference_t<R>>;
|
|
66
|
+
template <typename R>
|
|
67
|
+
using apply = std::enable_if_t<std::is_same<char const, v<R>>::value, v<R>*>;
|
|
68
|
+
};
|
|
69
|
+
struct throw_exception_arg_trivial_ {
|
|
70
|
+
template <typename R>
|
|
71
|
+
using apply = remove_cvref_t<R>;
|
|
72
|
+
};
|
|
73
|
+
struct throw_exception_arg_base_ {
|
|
74
|
+
template <typename R>
|
|
75
|
+
using apply = R;
|
|
76
|
+
};
|
|
77
|
+
template <typename R>
|
|
78
|
+
using throw_exception_arg_ = //
|
|
79
|
+
conditional_t<
|
|
80
|
+
std::is_array<std::remove_reference_t<R>>::value,
|
|
81
|
+
throw_exception_arg_array_,
|
|
82
|
+
conditional_t<
|
|
83
|
+
std::is_trivially_copyable_v<remove_cvref_t<R>>,
|
|
84
|
+
throw_exception_arg_trivial_,
|
|
85
|
+
throw_exception_arg_base_>>;
|
|
86
|
+
template <typename R>
|
|
87
|
+
using throw_exception_arg_t =
|
|
88
|
+
typename throw_exception_arg_<R>::template apply<R>;
|
|
89
|
+
|
|
90
|
+
template <typename Ex, typename... Args>
|
|
91
|
+
[[noreturn, FOLLY_ATTR_GNU_COLD]] FOLLY_NOINLINE void throw_exception_(
|
|
92
|
+
Args... args) {
|
|
93
|
+
throw_exception(Ex(static_cast<Args>(args)...));
|
|
94
|
+
}
|
|
95
|
+
template <typename Ex, typename... Args>
|
|
96
|
+
[[noreturn, FOLLY_ATTR_GNU_COLD]] FOLLY_NOINLINE void terminate_with_(
|
|
97
|
+
Args... args) noexcept {
|
|
98
|
+
throw_exception(Ex(static_cast<Args>(args)...));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
} // namespace detail
|
|
102
|
+
|
|
103
|
+
/// throw_exception
|
|
104
|
+
///
|
|
105
|
+
/// Construct and throw an exception if exceptions are enabled, or terminate if
|
|
106
|
+
/// compiled with -fno-exceptions.
|
|
107
|
+
///
|
|
108
|
+
/// Does not perfectly forward all its arguments. Instead, in the interest of
|
|
109
|
+
/// minimizing common-case inline code size, decays its arguments as follows:
|
|
110
|
+
/// * refs to arrays of char const are decayed to char const*
|
|
111
|
+
/// * refs to arrays are otherwise invalid
|
|
112
|
+
/// * refs to trivial types are decayed to values
|
|
113
|
+
///
|
|
114
|
+
/// The reason for treating refs to arrays as invalid is to avoid having two
|
|
115
|
+
/// behaviors for refs to arrays, one for the general case and one for where the
|
|
116
|
+
/// inner type is char const. Having two behaviors can be surprising, so avoid.
|
|
117
|
+
template <typename Ex, typename... Args>
|
|
118
|
+
[[noreturn]] FOLLY_ERASE void throw_exception(Args&&... args) {
|
|
119
|
+
detail::throw_exception_<Ex, detail::throw_exception_arg_t<Args&&>...>(
|
|
120
|
+
static_cast<Args&&>(args)...);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/// terminate_with
|
|
124
|
+
///
|
|
125
|
+
/// Terminates as if by forwarding to throw_exception within a noexcept context.
|
|
126
|
+
template <typename Ex, typename... Args>
|
|
127
|
+
[[noreturn]] FOLLY_ERASE void terminate_with(Args&&... args) {
|
|
128
|
+
detail::terminate_with_<Ex, detail::throw_exception_arg_t<Args&&>...>(
|
|
129
|
+
static_cast<Args&&>(args)...);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/// invoke_cold
|
|
133
|
+
///
|
|
134
|
+
/// Invoke the provided function with the provided arguments.
|
|
135
|
+
///
|
|
136
|
+
/// Usage note:
|
|
137
|
+
/// Passing extra values as arguments rather than capturing them allows smaller
|
|
138
|
+
/// inlined native code at the call-site. Passing function-pointers or function-
|
|
139
|
+
/// references rather than general callables with captures allows allows smaller
|
|
140
|
+
/// inlined native code at the call-site as well.
|
|
141
|
+
///
|
|
142
|
+
/// Example:
|
|
143
|
+
///
|
|
144
|
+
/// if (i < 0) {
|
|
145
|
+
/// invoke_cold(
|
|
146
|
+
/// [](int j) {
|
|
147
|
+
/// std::string ret = doStepA();
|
|
148
|
+
/// doStepB(ret);
|
|
149
|
+
/// doStepC(ret);
|
|
150
|
+
/// },
|
|
151
|
+
/// i);
|
|
152
|
+
/// }
|
|
153
|
+
template <
|
|
154
|
+
typename F,
|
|
155
|
+
typename... A,
|
|
156
|
+
typename FD = std::remove_pointer_t<std::decay_t<F>>,
|
|
157
|
+
std::enable_if_t<!std::is_function<FD>::value, int> = 0,
|
|
158
|
+
typename R = decltype(FOLLY_DECLVAL(F&&)(FOLLY_DECLVAL(A&&)...))>
|
|
159
|
+
[[FOLLY_ATTR_GNU_COLD]] FOLLY_NOINLINE R invoke_cold(F&& f, A&&... a) //
|
|
160
|
+
noexcept(noexcept(static_cast<F&&>(f)(static_cast<A&&>(a)...))) {
|
|
161
|
+
return static_cast<F&&>(f)(static_cast<A&&>(a)...);
|
|
162
|
+
}
|
|
163
|
+
template <
|
|
164
|
+
typename F,
|
|
165
|
+
typename... A,
|
|
166
|
+
typename FD = std::remove_pointer_t<std::decay_t<F>>,
|
|
167
|
+
std::enable_if_t<std::is_function<FD>::value, int> = 0,
|
|
168
|
+
typename R = decltype(FOLLY_DECLVAL(F&&)(FOLLY_DECLVAL(A&&)...))>
|
|
169
|
+
FOLLY_ERASE R invoke_cold(F&& f, A&&... a) //
|
|
170
|
+
noexcept(noexcept(f(static_cast<A&&>(a)...))) {
|
|
171
|
+
return f(static_cast<A&&>(a)...);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/// invoke_noreturn_cold
|
|
175
|
+
///
|
|
176
|
+
/// Invoke the provided function with the provided arguments. If the invocation
|
|
177
|
+
/// returns, terminate.
|
|
178
|
+
///
|
|
179
|
+
/// May be used with throw_exception in cases where construction of the object
|
|
180
|
+
/// to be thrown requires more than just invoking its constructor with a given
|
|
181
|
+
/// sequence of arguments passed by reference - for example, if a string message
|
|
182
|
+
/// must be computed before being passed to the constructor of the object to be
|
|
183
|
+
/// thrown.
|
|
184
|
+
///
|
|
185
|
+
/// Usage note:
|
|
186
|
+
/// Passing extra values as arguments rather than capturing them allows smaller
|
|
187
|
+
/// inlined native code at the call-site.
|
|
188
|
+
///
|
|
189
|
+
/// Example:
|
|
190
|
+
///
|
|
191
|
+
/// if (i < 0) {
|
|
192
|
+
/// invoke_noreturn_cold(
|
|
193
|
+
/// [](int j) {
|
|
194
|
+
/// throw_exceptions(runtime_error(to<string>("invalid: ", j)));
|
|
195
|
+
/// },
|
|
196
|
+
/// i);
|
|
197
|
+
/// }
|
|
198
|
+
template <typename F, typename... A>
|
|
199
|
+
[[noreturn, FOLLY_ATTR_GNU_COLD]] FOLLY_NOINLINE void
|
|
200
|
+
invoke_noreturn_cold(F&& f, A&&... a) noexcept(
|
|
201
|
+
/* formatting */ noexcept(static_cast<F&&>(f)(static_cast<A&&>(a)...))) {
|
|
202
|
+
static_cast<F&&>(f)(static_cast<A&&>(a)...);
|
|
203
|
+
std::terminate();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/// catch_exception
|
|
207
|
+
///
|
|
208
|
+
/// Invokes t; if exceptions are enabled (if not compiled with -fno-exceptions),
|
|
209
|
+
/// catches a thrown exception e of type E and invokes c, forwarding e and any
|
|
210
|
+
/// trailing arguments.
|
|
211
|
+
///
|
|
212
|
+
/// Usage note:
|
|
213
|
+
/// As a general rule, pass Ex const& rather than unqualified Ex as the explicit
|
|
214
|
+
/// template argument E. The catch statement catches E without qualifiers so
|
|
215
|
+
/// if E is Ex then that translates to catch (Ex), but if E is Ex const& then
|
|
216
|
+
/// that translates to catch (Ex const&).
|
|
217
|
+
///
|
|
218
|
+
/// Usage note:
|
|
219
|
+
/// Passing extra values as arguments rather than capturing them allows smaller
|
|
220
|
+
/// inlined native code at the call-site.
|
|
221
|
+
///
|
|
222
|
+
/// Example:
|
|
223
|
+
///
|
|
224
|
+
/// int input = // ...
|
|
225
|
+
/// int def = 45;
|
|
226
|
+
/// auto result = catch_exception<std::runtime_error const&>(
|
|
227
|
+
/// [=] {
|
|
228
|
+
/// if (input < 0) throw std::runtime_error("foo");
|
|
229
|
+
/// return input;
|
|
230
|
+
/// },
|
|
231
|
+
/// [](auto&& e, int num) { return num; },
|
|
232
|
+
/// def);
|
|
233
|
+
/// assert(result == input < 0 ? def : input);
|
|
234
|
+
template <
|
|
235
|
+
typename E,
|
|
236
|
+
typename Try,
|
|
237
|
+
typename Catch,
|
|
238
|
+
typename... CatchA,
|
|
239
|
+
typename R = std::common_type_t<
|
|
240
|
+
decltype(FOLLY_DECLVAL(Try&&)()),
|
|
241
|
+
decltype(FOLLY_DECLVAL(Catch&&)(
|
|
242
|
+
FOLLY_DECLVAL(E&), FOLLY_DECLVAL(CatchA&&)...))>>
|
|
243
|
+
FOLLY_ERASE_TRYCATCH R catch_exception(Try&& t, Catch&& c, CatchA&&... a) {
|
|
244
|
+
#if FOLLY_HAS_EXCEPTIONS
|
|
245
|
+
try {
|
|
246
|
+
return static_cast<Try&&>(t)();
|
|
247
|
+
} catch (E e) {
|
|
248
|
+
return invoke_cold(static_cast<Catch&&>(c), e, static_cast<CatchA&&>(a)...);
|
|
249
|
+
}
|
|
250
|
+
#else
|
|
251
|
+
[](auto&&...) {}(c, a...); // ignore
|
|
252
|
+
return static_cast<Try&&>(t)();
|
|
253
|
+
#endif
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/// catch_exception
|
|
257
|
+
///
|
|
258
|
+
/// Invokes t; if exceptions are enabled (if not compiled with -fno-exceptions),
|
|
259
|
+
/// catches a thrown exception of any type and invokes c, forwarding any
|
|
260
|
+
/// trailing arguments.
|
|
261
|
+
//
|
|
262
|
+
/// Usage note:
|
|
263
|
+
/// Passing extra values as arguments rather than capturing them allows smaller
|
|
264
|
+
/// inlined native code at the call-site.
|
|
265
|
+
///
|
|
266
|
+
/// Example:
|
|
267
|
+
///
|
|
268
|
+
/// int input = // ...
|
|
269
|
+
/// int def = 45;
|
|
270
|
+
/// auto result = catch_exception(
|
|
271
|
+
/// [=] {
|
|
272
|
+
/// if (input < 0) throw 11;
|
|
273
|
+
/// return input;
|
|
274
|
+
/// },
|
|
275
|
+
/// [](int num) { return num; },
|
|
276
|
+
/// def);
|
|
277
|
+
/// assert(result == input < 0 ? def : input);
|
|
278
|
+
template <
|
|
279
|
+
typename Try,
|
|
280
|
+
typename Catch,
|
|
281
|
+
typename... CatchA,
|
|
282
|
+
typename R = std::common_type_t<
|
|
283
|
+
decltype(FOLLY_DECLVAL(Try&&)()),
|
|
284
|
+
decltype(FOLLY_DECLVAL(Catch&&)(FOLLY_DECLVAL(CatchA&&)...))>>
|
|
285
|
+
FOLLY_ERASE_TRYCATCH R
|
|
286
|
+
catch_exception(Try&& t, Catch&& c, CatchA&&... a) noexcept(
|
|
287
|
+
noexcept(static_cast<Catch&&>(c)(static_cast<CatchA&&>(a)...))) {
|
|
288
|
+
#if FOLLY_HAS_EXCEPTIONS
|
|
289
|
+
try {
|
|
290
|
+
return static_cast<Try&&>(t)();
|
|
291
|
+
} catch (...) {
|
|
292
|
+
return invoke_cold(static_cast<Catch&&>(c), static_cast<CatchA&&>(a)...);
|
|
293
|
+
}
|
|
294
|
+
#else
|
|
295
|
+
[](auto&&...) {}(c, a...); // ignore
|
|
296
|
+
return static_cast<Try&&>(t)();
|
|
297
|
+
#endif
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/// rethrow_current_exception
|
|
301
|
+
///
|
|
302
|
+
/// Equivalent to:
|
|
303
|
+
///
|
|
304
|
+
/// throw;
|
|
305
|
+
[[noreturn]] FOLLY_ERASE void rethrow_current_exception() {
|
|
306
|
+
#if FOLLY_HAS_EXCEPTIONS
|
|
307
|
+
throw;
|
|
308
|
+
#else
|
|
309
|
+
std::terminate();
|
|
310
|
+
#endif
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
namespace detail {
|
|
314
|
+
|
|
315
|
+
unsigned int* uncaught_exceptions_ptr() noexcept;
|
|
316
|
+
|
|
317
|
+
} // namespace detail
|
|
318
|
+
|
|
319
|
+
/// uncaught_exceptions
|
|
320
|
+
///
|
|
321
|
+
/// An accelerated version of std::uncaught_exceptions.
|
|
322
|
+
///
|
|
323
|
+
/// mimic: std::uncaught_exceptions, c++17
|
|
324
|
+
[[FOLLY_ATTR_GNU_PURE]] FOLLY_EXPORT FOLLY_ALWAYS_INLINE int
|
|
325
|
+
uncaught_exceptions() noexcept {
|
|
326
|
+
#if defined(__APPLE__)
|
|
327
|
+
return std::uncaught_exceptions();
|
|
328
|
+
#elif defined(_CPPLIB_VER)
|
|
329
|
+
return std::uncaught_exceptions();
|
|
330
|
+
#elif defined(__has_feature) && !FOLLY_HAS_FEATURE(cxx_thread_local)
|
|
331
|
+
return std::uncaught_exceptions();
|
|
332
|
+
#else
|
|
333
|
+
thread_local unsigned int* ct;
|
|
334
|
+
return to_signed(
|
|
335
|
+
FOLLY_LIKELY(!!ct) ? *ct : *(ct = detail::uncaught_exceptions_ptr()));
|
|
336
|
+
#endif
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/// current_exception
|
|
340
|
+
///
|
|
341
|
+
/// An accelerated version of std::current_exception.
|
|
342
|
+
///
|
|
343
|
+
/// mimic: std::current_exception, c++11
|
|
344
|
+
std::exception_ptr current_exception() noexcept;
|
|
345
|
+
|
|
346
|
+
namespace detail {
|
|
347
|
+
#if FOLLY_APPLE_IOS
|
|
348
|
+
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_12_0
|
|
349
|
+
inline constexpr bool exception_ptr_access_ct = false;
|
|
350
|
+
#else
|
|
351
|
+
inline constexpr bool exception_ptr_access_ct = true;
|
|
352
|
+
#endif
|
|
353
|
+
#else
|
|
354
|
+
inline constexpr bool exception_ptr_access_ct = true;
|
|
355
|
+
#endif
|
|
356
|
+
|
|
357
|
+
// 0 unknown, 1 true, -1 false
|
|
358
|
+
extern std::atomic<int> exception_ptr_access_rt_cache_;
|
|
359
|
+
|
|
360
|
+
[[FOLLY_ATTR_GNU_COLD]] bool exception_ptr_access_rt_v_() noexcept;
|
|
361
|
+
[[FOLLY_ATTR_GNU_COLD]] bool exception_ptr_access_rt_() noexcept;
|
|
362
|
+
|
|
363
|
+
inline bool exception_ptr_access_rt() noexcept {
|
|
364
|
+
auto const& cache = exception_ptr_access_rt_cache_;
|
|
365
|
+
auto const value = cache.load(std::memory_order_relaxed);
|
|
366
|
+
return FOLLY_LIKELY(value) ? value > 0 : exception_ptr_access_rt_();
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
inline std::nullptr_t exception_ptr_nullptr() {
|
|
370
|
+
return nullptr;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
template <typename T, typename Catch>
|
|
374
|
+
auto exception_ptr_catching(std::exception_ptr const& ptr, Catch catch_) {
|
|
375
|
+
auto const try_ = [&] {
|
|
376
|
+
return ptr ? (std::rethrow_exception(ptr), nullptr) : nullptr;
|
|
377
|
+
};
|
|
378
|
+
return catch_exception(
|
|
379
|
+
[&] { return catch_exception<T>(try_, catch_); }, exception_ptr_nullptr);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
std::type_info const* exception_ptr_exception_typeid(
|
|
383
|
+
std::exception const&) noexcept;
|
|
384
|
+
|
|
385
|
+
std::type_info const* exception_ptr_get_type_(
|
|
386
|
+
std::exception_ptr const& ptr) noexcept;
|
|
387
|
+
|
|
388
|
+
void* exception_ptr_get_object_(
|
|
389
|
+
std::exception_ptr const&, std::type_info const*) noexcept;
|
|
390
|
+
|
|
391
|
+
} // namespace detail
|
|
392
|
+
|
|
393
|
+
// exception_ptr_access
|
|
394
|
+
//
|
|
395
|
+
// Whether exception_ptr_get_type and template exception_ptr_get_object always
|
|
396
|
+
// return the type or object or only do so when the stored object is of some
|
|
397
|
+
// concrete type inheriting std::exception, and whether the non non-template
|
|
398
|
+
// overloads of exception_ptr_get_object works at all.
|
|
399
|
+
//
|
|
400
|
+
// Non-authoritative. For some known platforms, inspection of exception-ptr
|
|
401
|
+
// objects fails. This is likely to do with mismatch between the application
|
|
402
|
+
// ABI and the system-provided libstdc++/libc++/cxxabi ABI. May falsely return
|
|
403
|
+
// true on other platforms.
|
|
404
|
+
[[FOLLY_ATTR_GNU_PURE]] inline bool exception_ptr_access() noexcept {
|
|
405
|
+
return detail::exception_ptr_access_ct || detail::exception_ptr_access_rt();
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// exception_ptr_get_type
|
|
409
|
+
//
|
|
410
|
+
// Returns the true runtime type info of the exception as stored.
|
|
411
|
+
inline std::type_info const* exception_ptr_get_type(
|
|
412
|
+
std::exception_ptr const& ptr) noexcept {
|
|
413
|
+
if (!exception_ptr_access()) {
|
|
414
|
+
return detail::exception_ptr_catching<std::exception&>(
|
|
415
|
+
ptr, detail::exception_ptr_exception_typeid);
|
|
416
|
+
}
|
|
417
|
+
return detail::exception_ptr_get_type_(ptr);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// exception_ptr_get_object
|
|
421
|
+
//
|
|
422
|
+
// Returns the address of the stored exception as if it were upcast to the
|
|
423
|
+
// given type, if it could be upcast to that type. If no type is passed,
|
|
424
|
+
// returns the address of the stored exception without upcasting.
|
|
425
|
+
//
|
|
426
|
+
// Note that the stored exception is always a copy of the thrown exception, and
|
|
427
|
+
// on some platforms caught exceptions may be copied from the stored exception.
|
|
428
|
+
// The address is only the address of the object as stored, not as thrown and
|
|
429
|
+
// not as caught.
|
|
430
|
+
inline void* exception_ptr_get_object(
|
|
431
|
+
std::exception_ptr const& ptr,
|
|
432
|
+
std::type_info const* const target) noexcept {
|
|
433
|
+
FOLLY_SAFE_CHECK(exception_ptr_access(), "unsupported");
|
|
434
|
+
return detail::exception_ptr_get_object_(ptr, target);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// exception_ptr_get_object
|
|
438
|
+
//
|
|
439
|
+
// Returns the true address of the exception as stored without upcasting.
|
|
440
|
+
inline void* exception_ptr_get_object( //
|
|
441
|
+
std::exception_ptr const& ptr) noexcept {
|
|
442
|
+
return exception_ptr_get_object(ptr, nullptr);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// exception_ptr_get_object
|
|
446
|
+
//
|
|
447
|
+
// Returns the address of the stored exception as if it were upcast to the
|
|
448
|
+
// given type, if it could be upcast to that type.
|
|
449
|
+
template <typename T>
|
|
450
|
+
T* exception_ptr_get_object(std::exception_ptr const& ptr) noexcept {
|
|
451
|
+
static_assert(!std::is_reference<T>::value, "is a reference");
|
|
452
|
+
if (!exception_ptr_access()) {
|
|
453
|
+
return detail::exception_ptr_catching<T&>(
|
|
454
|
+
ptr, +[](T& ex) { return std::addressof(ex); });
|
|
455
|
+
}
|
|
456
|
+
auto const target = type_info_of<T>();
|
|
457
|
+
auto const object =
|
|
458
|
+
!to_bool(target) ? nullptr : exception_ptr_get_object(ptr, target);
|
|
459
|
+
return static_cast<T*>(object);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/// exception_ptr_try_get_object_exact_fast
|
|
463
|
+
///
|
|
464
|
+
/// Returns the address of the stored exception as if it were upcast to the
|
|
465
|
+
/// given type, if its concrete type is exactly equal to one of the types passed
|
|
466
|
+
/// in the tag.
|
|
467
|
+
///
|
|
468
|
+
/// May hypothetically fail in cases where multipe type-info objects exist for
|
|
469
|
+
/// any of the given types. Positives are true but negatives may be either true
|
|
470
|
+
/// or false.
|
|
471
|
+
template <typename T, typename... S>
|
|
472
|
+
T* exception_ptr_try_get_object_exact_fast(
|
|
473
|
+
std::exception_ptr const& ptr, tag_t<S...>) noexcept {
|
|
474
|
+
static_assert((std::is_convertible_v<S*, T*> && ...));
|
|
475
|
+
if (!kHasRtti || !ptr || !exception_ptr_access()) {
|
|
476
|
+
return nullptr;
|
|
477
|
+
}
|
|
478
|
+
auto const type = exception_ptr_get_type(ptr);
|
|
479
|
+
if (!type) {
|
|
480
|
+
return nullptr;
|
|
481
|
+
}
|
|
482
|
+
auto const object = exception_ptr_get_object(ptr);
|
|
483
|
+
auto const fun = [&](auto const phantom, std::type_info const* const target) {
|
|
484
|
+
assume(!!object);
|
|
485
|
+
return type == target ? static_cast<decltype(phantom)>(object) : nullptr;
|
|
486
|
+
};
|
|
487
|
+
T* out = nullptr;
|
|
488
|
+
((out = fun(static_cast<S*>(nullptr), FOLLY_TYPE_INFO_OF(S))) || ...);
|
|
489
|
+
return out;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/// exception_ptr_get_object_hint
|
|
493
|
+
///
|
|
494
|
+
/// Returns the address of the stored exception as if it were upcast to the
|
|
495
|
+
/// given type, if it could be upcast to that type.
|
|
496
|
+
///
|
|
497
|
+
/// If its concrete type is exactly equal to one of the types passed in the tag,
|
|
498
|
+
/// this may be faster than exception_ptr_get_object without the hint.
|
|
499
|
+
template <typename T, typename... S>
|
|
500
|
+
T* exception_ptr_get_object_hint(
|
|
501
|
+
std::exception_ptr const& ptr, tag_t<S...> const hint) noexcept {
|
|
502
|
+
auto const val = exception_ptr_try_get_object_exact_fast<T>(ptr, hint);
|
|
503
|
+
return FOLLY_LIKELY(!!val) ? val : exception_ptr_get_object<T>(ptr);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
namespace detail {
|
|
507
|
+
|
|
508
|
+
struct make_exception_ptr_with_arg_ {
|
|
509
|
+
size_t size = 0;
|
|
510
|
+
std::type_info const* type = nullptr;
|
|
511
|
+
void (*ctor)(void*, void*) = nullptr;
|
|
512
|
+
void (*dtor)(void*) = nullptr;
|
|
513
|
+
|
|
514
|
+
template <typename F, typename E>
|
|
515
|
+
static void make(void* p, void* f) {
|
|
516
|
+
::new (p) E((*static_cast<F*>(f))());
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
template <typename F, typename E = decltype(FOLLY_DECLVAL(F&)())>
|
|
520
|
+
FOLLY_ERASE explicit constexpr make_exception_ptr_with_arg_(tag_t<F>) noexcept
|
|
521
|
+
: size{sizeof(E)},
|
|
522
|
+
type{FOLLY_TYPE_INFO_OF(E)},
|
|
523
|
+
ctor{make<F, E>},
|
|
524
|
+
dtor{thunk::dtor<E>} {}
|
|
525
|
+
};
|
|
526
|
+
|
|
527
|
+
std::exception_ptr make_exception_ptr_with_(
|
|
528
|
+
make_exception_ptr_with_arg_ const&, void*) noexcept;
|
|
529
|
+
|
|
530
|
+
template <typename F>
|
|
531
|
+
struct make_exception_ptr_with_fn_ {
|
|
532
|
+
F& f_;
|
|
533
|
+
FOLLY_ERASE std::exception_ptr operator()() const {
|
|
534
|
+
return std::make_exception_ptr(f_());
|
|
535
|
+
}
|
|
536
|
+
};
|
|
537
|
+
|
|
538
|
+
} // namespace detail
|
|
539
|
+
|
|
540
|
+
/// make_exception_ptr_with_fn
|
|
541
|
+
/// make_exception_ptr_with
|
|
542
|
+
///
|
|
543
|
+
/// Constructs a std::exception_ptr. On some platforms, this form may be more
|
|
544
|
+
/// efficient than std::make_exception_ptr. In particular, even when the latter
|
|
545
|
+
/// is optimized not actually to throw, catch, and call std::current_exception
|
|
546
|
+
/// internally, it remains specified to take its parameter by-value and to copy
|
|
547
|
+
/// its parameter internally. Many in-practice exception types, including those
|
|
548
|
+
/// which ship with standard libraries implementations, have copy constructors
|
|
549
|
+
/// which may atomically modify refcounts; others may allocate and copy string
|
|
550
|
+
/// data. In the best-case scenario, folly::make_exception_ptr_with may avoid
|
|
551
|
+
/// these costs.
|
|
552
|
+
//
|
|
553
|
+
/// There are three overloads, with overload selection unambiguous.
|
|
554
|
+
/// * A single invocable argument. The argument is invoked and its return value
|
|
555
|
+
/// is the managed exception.
|
|
556
|
+
/// * Variadic arguments, the first of which is in_place_type<E>. An exception
|
|
557
|
+
/// of type E is created in-place with the remaining arguments forwarded to
|
|
558
|
+
/// the constructor of E, and it is the managed exception.
|
|
559
|
+
/// * Two arguments, the first of which is in_place. The argument is moved or
|
|
560
|
+
/// copied and the result is the managed exception. This form is the closest
|
|
561
|
+
/// to std::make_exception_ptr.
|
|
562
|
+
///
|
|
563
|
+
/// Example:
|
|
564
|
+
///
|
|
565
|
+
/// std::exception_ptr eptr = make_exception_ptr_with(
|
|
566
|
+
/// [] { return std::runtime_error("message string"); });
|
|
567
|
+
///
|
|
568
|
+
/// std::exception_ptr eptr = make_exception_ptr_with(
|
|
569
|
+
/// std::in_place_type<std::runtime_error>, "message string");
|
|
570
|
+
///
|
|
571
|
+
/// std::exception_ptr eptr = make_exception_ptr_with(
|
|
572
|
+
/// std::in_place, std::runtime_error("message string");
|
|
573
|
+
///
|
|
574
|
+
/// In each example above, the variable eptr holds a managed exception object of
|
|
575
|
+
/// type std::runtime_error with a message string "message string" that would be
|
|
576
|
+
/// returned by member what().
|
|
577
|
+
///
|
|
578
|
+
/// Note that a managed exception object can have any value type whatsoever; it
|
|
579
|
+
/// is not required to have value type of or inheriting std::exception. This is
|
|
580
|
+
/// the same principle as for throw statements and throw_exception above.
|
|
581
|
+
struct make_exception_ptr_with_fn {
|
|
582
|
+
private:
|
|
583
|
+
template <typename R>
|
|
584
|
+
using make_arg_ = conditional_t<
|
|
585
|
+
std::is_array<std::remove_reference_t<R>>::value,
|
|
586
|
+
detail::throw_exception_arg_array_,
|
|
587
|
+
detail::throw_exception_arg_base_>;
|
|
588
|
+
template <typename R>
|
|
589
|
+
using make_arg_t = typename make_arg_<R>::template apply<R>;
|
|
590
|
+
|
|
591
|
+
template <typename E, typename... A>
|
|
592
|
+
auto make(A&&... a) const noexcept {
|
|
593
|
+
return [&] { return E(static_cast<A&&>(a)...); };
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
public:
|
|
597
|
+
template <typename F, decltype(FOLLY_DECLVAL(F&)())* = nullptr>
|
|
598
|
+
std::exception_ptr operator()(F f) const noexcept {
|
|
599
|
+
if ((kIsGlibcxx || kIsLibcpp) && !kIsApple && !kIsWindows //
|
|
600
|
+
&& kHasRtti && exception_ptr_access()) {
|
|
601
|
+
static const detail::make_exception_ptr_with_arg_ arg{tag<F>};
|
|
602
|
+
return detail::make_exception_ptr_with_(arg, &f);
|
|
603
|
+
}
|
|
604
|
+
if (kHasExceptions) {
|
|
605
|
+
return catch_exception(
|
|
606
|
+
detail::make_exception_ptr_with_fn_<F>{f}, current_exception);
|
|
607
|
+
}
|
|
608
|
+
return std::exception_ptr();
|
|
609
|
+
}
|
|
610
|
+
template <typename E, typename... A>
|
|
611
|
+
FOLLY_ERASE std::exception_ptr operator()(
|
|
612
|
+
std::in_place_type_t<E>, A&&... a) const noexcept {
|
|
613
|
+
return operator()(make<E, make_arg_t<A&&>...>(static_cast<A&&>(a)...));
|
|
614
|
+
}
|
|
615
|
+
template <typename E>
|
|
616
|
+
FOLLY_ERASE std::exception_ptr operator()(
|
|
617
|
+
std::in_place_t, E&& e) const noexcept {
|
|
618
|
+
constexpr auto tag = std::in_place_type<remove_cvref_t<E>>;
|
|
619
|
+
check_(FOLLY_TYPE_INFO_OF(std::decay_t<E>), FOLLY_TYPE_INFO_OF(e));
|
|
620
|
+
return operator()(tag, static_cast<E&&>(e));
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
private:
|
|
624
|
+
FOLLY_ALWAYS_INLINE void check_(
|
|
625
|
+
std::type_info const* s, std::type_info const* d) const noexcept {
|
|
626
|
+
FOLLY_SAFE_DCHECK(
|
|
627
|
+
!s || !d || *s == *d,
|
|
628
|
+
"mismatched static and dynamic types indicates object slicing");
|
|
629
|
+
}
|
|
630
|
+
};
|
|
631
|
+
inline constexpr make_exception_ptr_with_fn make_exception_ptr_with{};
|
|
632
|
+
|
|
633
|
+
// exception_shared_string
|
|
634
|
+
//
|
|
635
|
+
// An immutable refcounted string, with the same layout as a pointer, suitable
|
|
636
|
+
// for use in an exception. Exceptions are intended to cheaply nothrow-copy-
|
|
637
|
+
// constructible and mostly do not need to optimize moves, and this affects how
|
|
638
|
+
// exception messages are best stored.
|
|
639
|
+
//
|
|
640
|
+
// May be constructed with a literal string in a very particular form. If so
|
|
641
|
+
// constructed, (a literal copy of) the literal string will be held with no
|
|
642
|
+
// refcount required.
|
|
643
|
+
class exception_shared_string {
|
|
644
|
+
private:
|
|
645
|
+
using format_sig_ = void(void*, char*, std::size_t);
|
|
646
|
+
|
|
647
|
+
template <typename F>
|
|
648
|
+
using test_format_ =
|
|
649
|
+
decltype(FOLLY_DECLVAL(F)(static_cast<char*>(nullptr), std::size_t(0)));
|
|
650
|
+
|
|
651
|
+
struct literal_state_base {
|
|
652
|
+
unsigned char pad{0};
|
|
653
|
+
};
|
|
654
|
+
|
|
655
|
+
// a structure with a compile-time string buffer having an odd address
|
|
656
|
+
template <std::size_t N>
|
|
657
|
+
struct alignas(2) literal_state : literal_state_base {
|
|
658
|
+
using lit = literal_string<char, N>;
|
|
659
|
+
lit what; // address is offset +1 from alignment 2
|
|
660
|
+
|
|
661
|
+
literal_state() = delete;
|
|
662
|
+
explicit constexpr literal_state(lit const str) noexcept : what{str} {}
|
|
663
|
+
};
|
|
664
|
+
|
|
665
|
+
template <auto V>
|
|
666
|
+
static inline constexpr auto literal_state_instance = literal_state{V};
|
|
667
|
+
|
|
668
|
+
static void test_params_(char const*, std::size_t);
|
|
669
|
+
template <typename F>
|
|
670
|
+
static void ffun_(void* f, char* b, std::size_t l) {
|
|
671
|
+
(*static_cast<F*>(f))(b, l);
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
struct state; // alignment is alignof(void*)
|
|
675
|
+
|
|
676
|
+
// state_ can be either state* or char const*
|
|
677
|
+
// - low bit 0: state*
|
|
678
|
+
// - low bit 1: char const* to &literal_state::what
|
|
679
|
+
uintptr_t const state_;
|
|
680
|
+
|
|
681
|
+
// private; the wrapping public ctor passes only static-lifetime constants
|
|
682
|
+
explicit exception_shared_string(literal_state_base const&) noexcept;
|
|
683
|
+
|
|
684
|
+
exception_shared_string(std::size_t, format_sig_&, void*);
|
|
685
|
+
|
|
686
|
+
public:
|
|
687
|
+
#if FOLLY_CPLUSPLUS >= 202002 && !defined(__NVCC__)
|
|
688
|
+
template <std::size_t N, literal_string<char, N> Str>
|
|
689
|
+
explicit exception_shared_string(vtag_t<Str>) noexcept
|
|
690
|
+
: exception_shared_string(literal_state_instance<Str>) {}
|
|
691
|
+
#endif
|
|
692
|
+
|
|
693
|
+
explicit exception_shared_string(char const*);
|
|
694
|
+
exception_shared_string(char const*, std::size_t);
|
|
695
|
+
|
|
696
|
+
template <
|
|
697
|
+
typename String,
|
|
698
|
+
typename = decltype(test_params_(
|
|
699
|
+
FOLLY_DECLVAL(String const&).data(),
|
|
700
|
+
FOLLY_DECLVAL(String const&).size()))>
|
|
701
|
+
explicit exception_shared_string(String const& str)
|
|
702
|
+
: exception_shared_string{str.data(), str.size()} {}
|
|
703
|
+
|
|
704
|
+
template <typename F, decltype((void(test_format_<F&>()), 0)) = 0>
|
|
705
|
+
exception_shared_string(std::size_t size, F func)
|
|
706
|
+
: exception_shared_string(
|
|
707
|
+
size, ffun_<F>, &reinterpret_cast<unsigned char&>(func)) {}
|
|
708
|
+
|
|
709
|
+
exception_shared_string(exception_shared_string const&) noexcept;
|
|
710
|
+
~exception_shared_string();
|
|
711
|
+
void operator=(exception_shared_string const&) = delete;
|
|
712
|
+
|
|
713
|
+
char const* what() const noexcept;
|
|
714
|
+
};
|
|
715
|
+
|
|
716
|
+
} // namespace folly
|