react-native-windows 0.84.0-preview.9 → 0.84.1
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/Common/unicode.cpp +36 -0
- package/Common/unicode.h +8 -0
- package/Directory.Build.props +2 -17
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +5 -0
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +91 -23
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +11 -0
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +6 -4
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +28 -6
- package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +80 -0
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.h +17 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +1 -1
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +4 -9
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +33 -25
- package/Microsoft.ReactNative/Utils/LocalBundleReader.h +5 -3
- package/Microsoft.ReactNative/Utils/UwpScriptStore.cpp +2 -2
- package/Microsoft.ReactNative/Utils/UwpScriptStore.h +3 -2
- package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +3 -3
- package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +10 -10
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml +1 -1
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml +1 -1
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +10 -1
- package/PropertySheets/React.Cpp.props +7 -6
- package/PropertySheets/WinUI.props +2 -2
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/JustMyXaml.ps1 +8 -8
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/UnitTest.ps1 +3 -1
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +5 -8
- package/Scripts/creaternwlib.cmd +10 -23
- package/Scripts/rnw-dependencies.ps1 +15 -16
- package/Shared/DevSupportManager.cpp +55 -48
- package/Shared/DevSupportManager.h +0 -1
- package/Shared/Modules/IWebSocketModuleContentHandler.h +15 -0
- package/Shared/Modules/WebSocketModule.cpp +8 -3
- package/Shared/Networking/DefaultBlobResource.cpp +37 -0
- package/Shared/Networking/DefaultBlobResource.h +12 -0
- package/Shared/Networking/WinRTWebSocketResource.h +5 -1
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- 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/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/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/{fmt → external/folly/folly}/.clang-format +0 -1
- 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/ConstructorCallbackList.h +158 -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/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.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.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -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/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -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.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/just-task.js +13 -2
- package/package.json +7 -7
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +1 -1
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/example/metro.config.js +30 -4
- package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +1 -1
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -378
- package/Folly/Folly.vcxproj.filters +0 -558
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{fmt → external/fmt}/cgmanifest.json +0 -0
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,880 @@
|
|
|
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 <functional>
|
|
20
|
+
#include <type_traits>
|
|
21
|
+
|
|
22
|
+
#include <boost/preprocessor/control/expr_iif.hpp>
|
|
23
|
+
#include <boost/preprocessor/facilities/is_empty_variadic.hpp>
|
|
24
|
+
#include <boost/preprocessor/list/for_each.hpp>
|
|
25
|
+
#include <boost/preprocessor/logical/not.hpp>
|
|
26
|
+
#include <boost/preprocessor/tuple/to_list.hpp>
|
|
27
|
+
|
|
28
|
+
#include <folly/CppAttributes.h>
|
|
29
|
+
#include <folly/Portability.h>
|
|
30
|
+
#include <folly/Preprocessor.h>
|
|
31
|
+
#include <folly/Traits.h>
|
|
32
|
+
#include <folly/Utility.h>
|
|
33
|
+
#include <folly/lang/CustomizationPoint.h>
|
|
34
|
+
|
|
35
|
+
#define FOLLY_DETAIL_FORWARD_REF(a) static_cast<decltype(a)&&>(a)
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* include or backport:
|
|
39
|
+
* * std::invoke
|
|
40
|
+
* * std::invoke_result
|
|
41
|
+
* * std::invoke_result_t
|
|
42
|
+
* * std::is_invocable
|
|
43
|
+
* * std::is_invocable_v
|
|
44
|
+
* * std::is_invocable_r
|
|
45
|
+
* * std::is_invocable_r_v
|
|
46
|
+
* * std::is_nothrow_invocable
|
|
47
|
+
* * std::is_nothrow_invocable_v
|
|
48
|
+
* * std::is_nothrow_invocable_r
|
|
49
|
+
* * std::is_nothrow_invocable_r_v
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
namespace folly {
|
|
53
|
+
|
|
54
|
+
// invoke_fn
|
|
55
|
+
// invoke
|
|
56
|
+
//
|
|
57
|
+
// mimic: std::invoke, C++17
|
|
58
|
+
struct invoke_fn {
|
|
59
|
+
template <typename F, typename... A>
|
|
60
|
+
FOLLY_ERASE constexpr auto operator()(F&& f, A&&... a) const
|
|
61
|
+
noexcept(noexcept(static_cast<F&&>(f)(static_cast<A&&>(a)...)))
|
|
62
|
+
-> decltype(static_cast<F&&>(f)(static_cast<A&&>(a)...)) {
|
|
63
|
+
return static_cast<F&&>(f)(static_cast<A&&>(a)...);
|
|
64
|
+
}
|
|
65
|
+
template <typename M, typename C, typename... A>
|
|
66
|
+
FOLLY_ERASE constexpr auto operator()(M C::*f, A&&... a) const
|
|
67
|
+
noexcept(noexcept(std::mem_fn(f)(static_cast<A&&>(a)...)))
|
|
68
|
+
-> decltype(std::mem_fn(f)(static_cast<A&&>(a)...)) {
|
|
69
|
+
return std::mem_fn(f)(static_cast<A&&>(a)...);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
inline constexpr invoke_fn invoke;
|
|
74
|
+
|
|
75
|
+
} // namespace folly
|
|
76
|
+
|
|
77
|
+
namespace folly {
|
|
78
|
+
|
|
79
|
+
namespace invoke_detail {
|
|
80
|
+
|
|
81
|
+
// ok_one_
|
|
82
|
+
//
|
|
83
|
+
// A quoted-metafunction which, when applied to type T, enforces that T is a
|
|
84
|
+
// complete type, (possibly cv-qualified) void, or an array of unknown bound.
|
|
85
|
+
// Substitutes as void if that holds; otherwise fails a static-assert.
|
|
86
|
+
struct ok_one_ {
|
|
87
|
+
template <typename T>
|
|
88
|
+
static constexpr bool pass_v = ( //
|
|
89
|
+
std::is_void_v<T> || //
|
|
90
|
+
std::is_reference_v<T> || //
|
|
91
|
+
std::is_function_v<T> || //
|
|
92
|
+
is_unbounded_array_v<T> || //
|
|
93
|
+
false);
|
|
94
|
+
|
|
95
|
+
// note: void return type with no function body to enforce that, in the
|
|
96
|
+
// typical case of complete non-function types, to minimize the quantity of
|
|
97
|
+
// evaluations and instantiations
|
|
98
|
+
template <typename T, std::size_t = sizeof(T)>
|
|
99
|
+
static void test(int);
|
|
100
|
+
|
|
101
|
+
// note: auto return type with no trailing return type to force the
|
|
102
|
+
// instantiation of the function and, therefore, to force the
|
|
103
|
+
// evaluation of she static-assert
|
|
104
|
+
template <typename T>
|
|
105
|
+
static auto test(...) {
|
|
106
|
+
static_assert(pass_v<T>, "must be complete, cv-void, or unbounded-array");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
template <typename T>
|
|
111
|
+
using apply = decltype(test<T>(0));
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// ok_
|
|
115
|
+
//
|
|
116
|
+
// Enforce that each A... is a complete type, (possibly cv-qualified) void, or
|
|
117
|
+
// an array of unknown bound. Substitutes as T if that holds; otherwise fails a
|
|
118
|
+
// static-assert.
|
|
119
|
+
//
|
|
120
|
+
// The reason to fail a static-assert and not, say, to fail to substitute is
|
|
121
|
+
// to force application to incomplete types to fail the compile rather than to
|
|
122
|
+
// allow the compile to succumb to ODR violation. The failing static-assert is
|
|
123
|
+
// a diagnosis of undefined behavior.
|
|
124
|
+
//
|
|
125
|
+
// See:
|
|
126
|
+
// https://en.cppreference.com/w/cpp/types/is_invocable
|
|
127
|
+
// https://github.com/gcc-mirror/gcc/blob/releases/gcc-13.2.0/libstdc%2B%2B-v3/include/std/type_traits#L272-L287
|
|
128
|
+
template <typename T, typename... A>
|
|
129
|
+
using ok_ = type_t<T, ok_one_::apply<A>...>;
|
|
130
|
+
|
|
131
|
+
template <typename F>
|
|
132
|
+
struct traits {
|
|
133
|
+
template <typename... A>
|
|
134
|
+
using result = decltype( //
|
|
135
|
+
FOLLY_DECLVAL(F&&)(FOLLY_DECLVAL(A&&)...));
|
|
136
|
+
#if defined(_MSC_VER) && defined(__NVCC__)
|
|
137
|
+
template <typename... A>
|
|
138
|
+
using nothrow_t = std::bool_constant<noexcept( //
|
|
139
|
+
FOLLY_DECLVAL(F&&)(FOLLY_DECLVAL(A&&)...))>;
|
|
140
|
+
#else
|
|
141
|
+
template <typename... A>
|
|
142
|
+
static constexpr bool nothrow_v = noexcept( //
|
|
143
|
+
FOLLY_DECLVAL(F&&)(FOLLY_DECLVAL(A&&)...));
|
|
144
|
+
#endif
|
|
145
|
+
};
|
|
146
|
+
template <typename P>
|
|
147
|
+
struct traits_member_ptr {
|
|
148
|
+
template <typename... A>
|
|
149
|
+
using result = decltype( //
|
|
150
|
+
std::mem_fn(FOLLY_DECLVAL(P))(FOLLY_DECLVAL(A&&)...));
|
|
151
|
+
#if defined(_MSC_VER) && defined(__NVCC__)
|
|
152
|
+
template <typename... A>
|
|
153
|
+
using nothrow_t = std::bool_constant<noexcept( //
|
|
154
|
+
std::mem_fn(FOLLY_DECLVAL(P))(FOLLY_DECLVAL(A&&)...))>;
|
|
155
|
+
#else
|
|
156
|
+
template <typename... A>
|
|
157
|
+
static constexpr bool nothrow_v = noexcept( //
|
|
158
|
+
std::mem_fn(FOLLY_DECLVAL(P))(FOLLY_DECLVAL(A&&)...));
|
|
159
|
+
#endif
|
|
160
|
+
};
|
|
161
|
+
template <typename M, typename C>
|
|
162
|
+
struct traits<M C::*> : traits_member_ptr<M C::*> {};
|
|
163
|
+
template <typename M, typename C>
|
|
164
|
+
struct traits<M C::*const> : traits_member_ptr<M C::*> {};
|
|
165
|
+
template <typename M, typename C>
|
|
166
|
+
struct traits<M C::*&> : traits_member_ptr<M C::*> {};
|
|
167
|
+
template <typename M, typename C>
|
|
168
|
+
struct traits<M C::*const&> : traits_member_ptr<M C::*> {};
|
|
169
|
+
template <typename M, typename C>
|
|
170
|
+
struct traits<M C::*&&> : traits_member_ptr<M C::*> {};
|
|
171
|
+
template <typename M, typename C>
|
|
172
|
+
struct traits<M C::*const&&> : traits_member_ptr<M C::*> {};
|
|
173
|
+
|
|
174
|
+
#if defined(_MSC_VER) && defined(__NVCC__)
|
|
175
|
+
template <typename P, typename... A>
|
|
176
|
+
using is_nothrow = traits<P>::template nothrow_t<A...>;
|
|
177
|
+
#else
|
|
178
|
+
template <typename P, typename... A>
|
|
179
|
+
using is_nothrow = std::bool_constant<traits<P>::template nothrow_v<A...>>;
|
|
180
|
+
#endif
|
|
181
|
+
|
|
182
|
+
template <bool IsVoid>
|
|
183
|
+
struct conv_r_;
|
|
184
|
+
template <>
|
|
185
|
+
struct conv_r_<true> {
|
|
186
|
+
template <bool NX, typename R, typename FR>
|
|
187
|
+
using apply = std::true_type;
|
|
188
|
+
};
|
|
189
|
+
template <>
|
|
190
|
+
struct conv_r_<false> {
|
|
191
|
+
template <typename R>
|
|
192
|
+
static void conv(R, decay_t<R>* = nullptr) noexcept;
|
|
193
|
+
template <
|
|
194
|
+
bool NX,
|
|
195
|
+
typename R,
|
|
196
|
+
typename FR,
|
|
197
|
+
bool C = noexcept(conv<R>(FOLLY_DECLVAL(FR)))>
|
|
198
|
+
static std::bool_constant<!NX || C> test(int);
|
|
199
|
+
template <bool NX, typename R, typename FR>
|
|
200
|
+
static std::false_type test(...);
|
|
201
|
+
template <bool NX, typename R, typename FR>
|
|
202
|
+
using apply = decltype(test<NX, R, FR>(0));
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
template <bool NX, typename R, typename FR>
|
|
206
|
+
static inline constexpr bool conv_r_v_ =
|
|
207
|
+
conv_r_<std::is_void_v<R>>::template apply<NX, R, FR>::value;
|
|
208
|
+
|
|
209
|
+
// adapted from: http://en.cppreference.com/w/cpp/types/result_of, CC-BY-SA
|
|
210
|
+
|
|
211
|
+
template <typename F, typename... A>
|
|
212
|
+
using invoke_result_t = typename traits<F>::template result<A...>;
|
|
213
|
+
|
|
214
|
+
template <typename Void, typename F, typename... A>
|
|
215
|
+
struct invoke_result {};
|
|
216
|
+
|
|
217
|
+
template <typename F, typename... A>
|
|
218
|
+
struct invoke_result<void_t<invoke_result_t<F, A...>>, F, A...> {
|
|
219
|
+
using type = invoke_result_t<F, A...>;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
template <typename Void, typename F, typename... A>
|
|
223
|
+
inline constexpr bool is_invocable_v = ok_<bool, F, A...>{false};
|
|
224
|
+
|
|
225
|
+
template <typename F, typename... A>
|
|
226
|
+
inline constexpr bool
|
|
227
|
+
is_invocable_v<void_t<invoke_result_t<F, A...>>, F, A...> = true;
|
|
228
|
+
|
|
229
|
+
template <typename Void, typename R, typename F, typename... A>
|
|
230
|
+
inline constexpr bool is_invocable_r_v = ok_<bool, R, F, A...>{false};
|
|
231
|
+
|
|
232
|
+
// clang-format off
|
|
233
|
+
template <typename R, typename F, typename... A>
|
|
234
|
+
inline constexpr bool
|
|
235
|
+
is_invocable_r_v<void_t<invoke_result_t<F, A...>>, R, F, A...> =
|
|
236
|
+
conv_r_v_<false, R, invoke_result_t<F, A...>>;
|
|
237
|
+
// clang-format on
|
|
238
|
+
|
|
239
|
+
template <typename Void, typename F, typename... A>
|
|
240
|
+
inline constexpr bool is_nothrow_invocable_v = ok_<bool, F, A...>{false};
|
|
241
|
+
|
|
242
|
+
template <typename F, typename... A>
|
|
243
|
+
inline constexpr bool
|
|
244
|
+
is_nothrow_invocable_v<void_t<invoke_result_t<F, A...>>, F, A...> =
|
|
245
|
+
is_nothrow<F, A...>::value;
|
|
246
|
+
|
|
247
|
+
template <typename Void, typename R, typename F, typename... A>
|
|
248
|
+
inline constexpr bool is_nothrow_invocable_r_v = ok_<bool, R, F, A...>{false};
|
|
249
|
+
|
|
250
|
+
// clang-format off
|
|
251
|
+
template <typename R, typename F, typename... A>
|
|
252
|
+
inline constexpr bool
|
|
253
|
+
is_nothrow_invocable_r_v<void_t<invoke_result_t<F, A...>>, R, F, A...> =
|
|
254
|
+
is_nothrow<F, A...>::value &&
|
|
255
|
+
conv_r_v_<true, R, invoke_result_t<F, A...>>;
|
|
256
|
+
// clang-format on
|
|
257
|
+
|
|
258
|
+
} // namespace invoke_detail
|
|
259
|
+
|
|
260
|
+
// mimic: std::invoke_result, C++17
|
|
261
|
+
template <typename F, typename... A>
|
|
262
|
+
using invoke_result = invoke_detail::invoke_result<void, F, A...>;
|
|
263
|
+
|
|
264
|
+
// mimic: std::invoke_result_t, C++17
|
|
265
|
+
using invoke_detail::invoke_result_t;
|
|
266
|
+
|
|
267
|
+
// mimic: std::is_invocable_v, C++17
|
|
268
|
+
template <typename F, typename... A>
|
|
269
|
+
inline constexpr bool is_invocable_v =
|
|
270
|
+
invoke_detail::is_invocable_v<void, F, A...>;
|
|
271
|
+
|
|
272
|
+
// mimic: std::is_invocable, C++17
|
|
273
|
+
template <typename F, typename... A>
|
|
274
|
+
struct is_invocable : std::bool_constant<is_invocable_v<F, A...>> {};
|
|
275
|
+
|
|
276
|
+
// mimic: std::is_invocable_r_v, C++17
|
|
277
|
+
template <typename R, typename F, typename... A>
|
|
278
|
+
inline constexpr bool is_invocable_r_v =
|
|
279
|
+
invoke_detail::is_invocable_r_v<void, R, F, A...>;
|
|
280
|
+
|
|
281
|
+
// mimic: std::is_invocable_r, C++17
|
|
282
|
+
template <typename R, typename F, typename... A>
|
|
283
|
+
struct is_invocable_r : std::bool_constant<is_invocable_r_v<R, F, A...>> {};
|
|
284
|
+
|
|
285
|
+
// mimic: std::is_nothrow_invocable_v, C++17
|
|
286
|
+
template <typename F, typename... A>
|
|
287
|
+
inline constexpr bool is_nothrow_invocable_v =
|
|
288
|
+
invoke_detail::is_nothrow_invocable_v<void, F, A...>;
|
|
289
|
+
|
|
290
|
+
// mimic: std::is_nothrow_invocable, C++17
|
|
291
|
+
template <typename F, typename... A>
|
|
292
|
+
struct is_nothrow_invocable
|
|
293
|
+
: std::bool_constant<is_nothrow_invocable_v<F, A...>> {};
|
|
294
|
+
|
|
295
|
+
// mimic: std::is_nothrow_invocable_r_v, C++17
|
|
296
|
+
template <typename R, typename F, typename... Args>
|
|
297
|
+
inline constexpr bool is_nothrow_invocable_r_v =
|
|
298
|
+
invoke_detail::is_nothrow_invocable_r_v<void, R, F, Args...>;
|
|
299
|
+
|
|
300
|
+
// mimic: std::is_nothrow_invocable_r, C++17
|
|
301
|
+
template <typename R, typename F, typename... A>
|
|
302
|
+
struct is_nothrow_invocable_r
|
|
303
|
+
: std::bool_constant<is_nothrow_invocable_r_v<R, F, A...>> {};
|
|
304
|
+
|
|
305
|
+
} // namespace folly
|
|
306
|
+
|
|
307
|
+
namespace folly {
|
|
308
|
+
|
|
309
|
+
namespace detail {
|
|
310
|
+
|
|
311
|
+
struct invoke_private_overload;
|
|
312
|
+
|
|
313
|
+
template <bool, typename I>
|
|
314
|
+
struct invoke_traits_base_ {};
|
|
315
|
+
template <typename I>
|
|
316
|
+
struct invoke_traits_base_<false, I> {};
|
|
317
|
+
template <typename I>
|
|
318
|
+
struct invoke_traits_base_<true, I> {
|
|
319
|
+
inline static constexpr I invoke{};
|
|
320
|
+
};
|
|
321
|
+
template <typename I>
|
|
322
|
+
using invoke_traits_base =
|
|
323
|
+
invoke_traits_base_<is_constexpr_default_constructible_v<I>, I>;
|
|
324
|
+
|
|
325
|
+
} // namespace detail
|
|
326
|
+
|
|
327
|
+
// invoke_traits
|
|
328
|
+
//
|
|
329
|
+
// A traits container struct with the following member types, type aliases, and
|
|
330
|
+
// variables:
|
|
331
|
+
//
|
|
332
|
+
// * invoke_result
|
|
333
|
+
// * invoke_result_t
|
|
334
|
+
// * is_invocable
|
|
335
|
+
// * is_invocable_v
|
|
336
|
+
// * is_invocable_r
|
|
337
|
+
// * is_invocable_r_v
|
|
338
|
+
// * is_nothrow_invocable
|
|
339
|
+
// * is_nothrow_invocable_v
|
|
340
|
+
// * is_nothrow_invocable_r
|
|
341
|
+
// * is_nothrow_invocable_r_v
|
|
342
|
+
//
|
|
343
|
+
// These members have behavior matching the behavior of C++17's corresponding
|
|
344
|
+
// invocation traits types, type aliases, and variables, but using invoke_type
|
|
345
|
+
// as the invocable argument passed to the usual nivocation traits.
|
|
346
|
+
//
|
|
347
|
+
// The traits container struct also has a member type alias:
|
|
348
|
+
//
|
|
349
|
+
// * invoke_type
|
|
350
|
+
//
|
|
351
|
+
// And an invocable variable as a default-constructed instance of invoke_type,
|
|
352
|
+
// if the latter is constexpr default-constructible:
|
|
353
|
+
//
|
|
354
|
+
// * invoke
|
|
355
|
+
template <typename I>
|
|
356
|
+
struct invoke_traits : detail::invoke_traits_base<I> {
|
|
357
|
+
public:
|
|
358
|
+
using invoke_type = I;
|
|
359
|
+
|
|
360
|
+
// If invoke_type is constexpr default-constructible:
|
|
361
|
+
//
|
|
362
|
+
// inline static constexpr invoke_type invoke{};
|
|
363
|
+
|
|
364
|
+
template <typename... A>
|
|
365
|
+
using invoke_result = invoke_detail::invoke_result<void, I, A...>;
|
|
366
|
+
template <typename... A>
|
|
367
|
+
using invoke_result_t = invoke_detail::invoke_result_t<I, A...>;
|
|
368
|
+
template <typename... A>
|
|
369
|
+
inline static constexpr bool is_invocable_v =
|
|
370
|
+
invoke_detail::is_invocable_v<void, I, A...>;
|
|
371
|
+
template <typename... A>
|
|
372
|
+
struct is_invocable //
|
|
373
|
+
: std::bool_constant<invoke_detail::is_invocable_v<void, I, A...>> {};
|
|
374
|
+
template <typename R, typename... A>
|
|
375
|
+
inline static constexpr bool is_invocable_r_v =
|
|
376
|
+
invoke_detail::is_invocable_r_v<void, R, I, A...>;
|
|
377
|
+
template <typename R, typename... A>
|
|
378
|
+
struct is_invocable_r //
|
|
379
|
+
: std::bool_constant< //
|
|
380
|
+
invoke_detail::is_invocable_r_v<void, R, I, A...>> {};
|
|
381
|
+
template <typename... A>
|
|
382
|
+
inline static constexpr bool is_nothrow_invocable_v =
|
|
383
|
+
invoke_detail::is_nothrow_invocable_v<void, I, A...>;
|
|
384
|
+
template <typename... A>
|
|
385
|
+
struct is_nothrow_invocable //
|
|
386
|
+
: std::bool_constant<
|
|
387
|
+
invoke_detail::is_nothrow_invocable_v<void, I, A...>> {};
|
|
388
|
+
template <typename R, typename... A>
|
|
389
|
+
inline static constexpr bool is_nothrow_invocable_r_v =
|
|
390
|
+
invoke_detail::is_nothrow_invocable_r_v<void, R, I, A...>;
|
|
391
|
+
template <typename R, typename... A>
|
|
392
|
+
struct is_nothrow_invocable_r //
|
|
393
|
+
: std::bool_constant<
|
|
394
|
+
invoke_detail::is_nothrow_invocable_r_v<void, R, I, A...>> {};
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
// invoke_first_match
|
|
398
|
+
//
|
|
399
|
+
// A composite invoker which delegates to the first invoker parameter matching
|
|
400
|
+
// the call.
|
|
401
|
+
//
|
|
402
|
+
// Example:
|
|
403
|
+
//
|
|
404
|
+
// FOLLY_CREATE_QUAL_INVOKER(invoke_x_fn, x);
|
|
405
|
+
// FOLLY_CREATE_QUAL_INVOKER(invoke_y_fn, y);
|
|
406
|
+
//
|
|
407
|
+
// using invoke_x_or_y_fn = invoke_first_match<invoke_x_fn, invoke_y_fn>;
|
|
408
|
+
// inline constexpr invoke_x_or_y_fn invoke_x_or_y;
|
|
409
|
+
//
|
|
410
|
+
// void go(int a, int b) { invoke_x_or_y(a, b); }
|
|
411
|
+
//
|
|
412
|
+
// In this example, go(...) will delegate to x(...) if it exists and is a match
|
|
413
|
+
// for the arguments, or otherwise will delegate to y(...).
|
|
414
|
+
template <typename... Invoker>
|
|
415
|
+
struct invoke_first_match : private Invoker... {
|
|
416
|
+
private:
|
|
417
|
+
using iseq = std::index_sequence_for<Invoker...>;
|
|
418
|
+
template <size_t Idx>
|
|
419
|
+
using at = type_pack_element_t<Idx, Invoker...>;
|
|
420
|
+
template <size_t... Idx, typename... A>
|
|
421
|
+
static constexpr size_t first_(std::index_sequence<Idx...>, tag_t<A...>) {
|
|
422
|
+
constexpr bool r[] = {is_invocable_v<at<Idx> const&, A...>..., false};
|
|
423
|
+
for (size_t i = 0; i < sizeof...(Invoker); ++i) {
|
|
424
|
+
if (r[i]) {
|
|
425
|
+
return i;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return sizeof...(Invoker);
|
|
429
|
+
}
|
|
430
|
+
template <typename... A>
|
|
431
|
+
static constexpr size_t first = first_(iseq{}, tag<A...>);
|
|
432
|
+
|
|
433
|
+
public:
|
|
434
|
+
template <typename... A, typename Inv = at<first<A...>>>
|
|
435
|
+
FOLLY_ERASE constexpr auto operator()(A&&... a) const
|
|
436
|
+
noexcept(is_nothrow_invocable_v<Inv const&, A...>)
|
|
437
|
+
-> invoke_result_t<Inv const&, A...> {
|
|
438
|
+
return static_cast<Inv const&>(*this)(static_cast<A&&>(a)...);
|
|
439
|
+
}
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
} // namespace folly
|
|
443
|
+
|
|
444
|
+
#define FOLLY_DETAIL_CREATE_FREE_INVOKE_TRAITS_USING_1(_, funcname, ns) \
|
|
445
|
+
using ns::funcname;
|
|
446
|
+
|
|
447
|
+
#define FOLLY_DETAIL_CREATE_FREE_INVOKE_TRAITS_USING(_, funcname, ...) \
|
|
448
|
+
BOOST_PP_EXPR_IIF( \
|
|
449
|
+
BOOST_PP_NOT(BOOST_PP_IS_EMPTY(__VA_ARGS__)), \
|
|
450
|
+
BOOST_PP_LIST_FOR_EACH( \
|
|
451
|
+
FOLLY_DETAIL_CREATE_FREE_INVOKE_TRAITS_USING_1, \
|
|
452
|
+
funcname, \
|
|
453
|
+
BOOST_PP_TUPLE_TO_LIST((__VA_ARGS__))))
|
|
454
|
+
|
|
455
|
+
/***
|
|
456
|
+
* FOLLY_CREATE_FREE_INVOKER
|
|
457
|
+
*
|
|
458
|
+
* Used to create an invoker type bound to a specific free-invocable name.
|
|
459
|
+
*
|
|
460
|
+
* Example:
|
|
461
|
+
*
|
|
462
|
+
* FOLLY_CREATE_FREE_INVOKER(foo_invoker, foo);
|
|
463
|
+
*
|
|
464
|
+
* The type `foo_invoker` is generated in the current namespace and may be used
|
|
465
|
+
* as follows:
|
|
466
|
+
*
|
|
467
|
+
* namespace Deep {
|
|
468
|
+
* struct CanFoo {};
|
|
469
|
+
* int foo(CanFoo const&, Bar&) { return 1; }
|
|
470
|
+
* int foo(CanFoo&&, Car&&) noexcept { return 2; }
|
|
471
|
+
* }
|
|
472
|
+
*
|
|
473
|
+
* using traits = folly::invoke_traits<foo_invoker>;
|
|
474
|
+
*
|
|
475
|
+
* traits::invoke(Deep::CanFoo{}, Car{}) // 2
|
|
476
|
+
*
|
|
477
|
+
* traits::invoke_result<Deep::CanFoo, Bar&> // has member
|
|
478
|
+
* traits::invoke_result_t<Deep::CanFoo, Bar&> // int
|
|
479
|
+
* traits::invoke_result<Deep::CanFoo, Bar&&> // empty
|
|
480
|
+
* traits::invoke_result_t<Deep::CanFoo, Bar&&> // error
|
|
481
|
+
*
|
|
482
|
+
* traits::is_invocable_v<CanFoo, Bar&> // true
|
|
483
|
+
* traits::is_invocable_v<CanFoo, Bar&&> // false
|
|
484
|
+
*
|
|
485
|
+
* traits::is_invocable_r_v<int, CanFoo, Bar&> // true
|
|
486
|
+
* traits::is_invocable_r_v<char*, CanFoo, Bar&> // false
|
|
487
|
+
*
|
|
488
|
+
* traits::is_nothrow_invocable_v<CanFoo, Bar&> // false
|
|
489
|
+
* traits::is_nothrow_invocable_v<CanFoo, Car&&> // true
|
|
490
|
+
*
|
|
491
|
+
* traits::is_nothrow_invocable_v<int, CanFoo, Bar&> // false
|
|
492
|
+
* traits::is_nothrow_invocable_v<char*, CanFoo, Bar&> // false
|
|
493
|
+
* traits::is_nothrow_invocable_v<int, CanFoo, Car&&> // true
|
|
494
|
+
* traits::is_nothrow_invocable_v<char*, CanFoo, Car&&> // false
|
|
495
|
+
*
|
|
496
|
+
* When a name has one or more primary definition in a fixed set of namespaces
|
|
497
|
+
* and alternate definitions in the namespaces of its arguments, the primary
|
|
498
|
+
* definitions may automatically be found as follows:
|
|
499
|
+
*
|
|
500
|
+
* FOLLY_CREATE_FREE_INVOKER(swap_invoker, swap, std);
|
|
501
|
+
*
|
|
502
|
+
* In this case, `swap_invoke_traits::invoke(int&, int&)` will use the primary
|
|
503
|
+
* definition found in `namespace std` relative to the current namespace, which
|
|
504
|
+
* may be equivalent to `namespace ::std`. In contrast:
|
|
505
|
+
*
|
|
506
|
+
* namespace Deep {
|
|
507
|
+
* struct HasData {};
|
|
508
|
+
* void swap(HasData&, HasData&) { throw 7; }
|
|
509
|
+
* }
|
|
510
|
+
*
|
|
511
|
+
* using traits = invoke_traits<swap_invoker>;
|
|
512
|
+
*
|
|
513
|
+
* HasData a, b;
|
|
514
|
+
* traits::invoke(a, b); // throw 7
|
|
515
|
+
*/
|
|
516
|
+
#define FOLLY_CREATE_FREE_INVOKER(classname, funcname, ...) \
|
|
517
|
+
namespace classname##__folly_detail_invoke_ns { \
|
|
518
|
+
[[maybe_unused]] void funcname(::folly::detail::invoke_private_overload&); \
|
|
519
|
+
FOLLY_DETAIL_CREATE_FREE_INVOKE_TRAITS_USING(_, funcname, __VA_ARGS__) \
|
|
520
|
+
struct __folly_detail_invoke_obj { \
|
|
521
|
+
template <typename... Args> \
|
|
522
|
+
[[maybe_unused]] FOLLY_ERASE_HACK_GCC constexpr auto operator()( \
|
|
523
|
+
Args&&... args) const \
|
|
524
|
+
noexcept(noexcept(funcname(static_cast<Args&&>(args)...))) \
|
|
525
|
+
-> decltype(funcname(static_cast<Args&&>(args)...)) { \
|
|
526
|
+
return funcname(static_cast<Args&&>(args)...); \
|
|
527
|
+
} \
|
|
528
|
+
}; \
|
|
529
|
+
} \
|
|
530
|
+
struct classname \
|
|
531
|
+
: classname##__folly_detail_invoke_ns::__folly_detail_invoke_obj {}
|
|
532
|
+
|
|
533
|
+
/***
|
|
534
|
+
* FOLLY_CREATE_FREE_INVOKER_SUITE
|
|
535
|
+
*
|
|
536
|
+
* Used to create an invoker type and associated variable bound to a specific
|
|
537
|
+
* free-invocable name. The invoker variable is named like the free-invocable
|
|
538
|
+
* name and the invoker type is named with a suffix of _fn.
|
|
539
|
+
*
|
|
540
|
+
* See FOLLY_CREATE_FREE_INVOKER.
|
|
541
|
+
*/
|
|
542
|
+
#define FOLLY_CREATE_FREE_INVOKER_SUITE(funcname, ...) \
|
|
543
|
+
FOLLY_CREATE_FREE_INVOKER(funcname##_fn, funcname, __VA_ARGS__); \
|
|
544
|
+
[[maybe_unused]] inline constexpr funcname##_fn funcname {}
|
|
545
|
+
|
|
546
|
+
/***
|
|
547
|
+
* FOLLY_CREATE_QUAL_INVOKER
|
|
548
|
+
*
|
|
549
|
+
* Used to create an invoker type bound to a specific free-invocable qualified
|
|
550
|
+
* name. It is permitted that the qualification be empty and that the name be
|
|
551
|
+
* unqualified in practice. This differs from FOLLY_CREATE_FREE_INVOKER in that
|
|
552
|
+
* it is required that the name be in scope and that it is not possible to
|
|
553
|
+
* provide a list of namespaces in which to look up the name..
|
|
554
|
+
*/
|
|
555
|
+
#define FOLLY_CREATE_QUAL_INVOKER(classname, funcpath) \
|
|
556
|
+
struct classname { \
|
|
557
|
+
template <typename... A> \
|
|
558
|
+
[[maybe_unused]] FOLLY_ERASE_HACK_GCC constexpr auto operator()(A&&... a) \
|
|
559
|
+
const FOLLY_DETAIL_FORWARD_BODY(funcpath(static_cast<A&&>(a)...)) \
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/***
|
|
563
|
+
* FOLLY_CREATE_QUAL_INVOKER_SUITE
|
|
564
|
+
*
|
|
565
|
+
* Used to create an invoker type and associated variable bound to a specific
|
|
566
|
+
* free-invocable qualified name.
|
|
567
|
+
*
|
|
568
|
+
* See FOLLY_CREATE_QUAL_INVOKER.
|
|
569
|
+
*/
|
|
570
|
+
#define FOLLY_CREATE_QUAL_INVOKER_SUITE(name, funcpath) \
|
|
571
|
+
FOLLY_CREATE_QUAL_INVOKER(name##_fn, funcpath); \
|
|
572
|
+
[[maybe_unused]] inline constexpr name##_fn name {}
|
|
573
|
+
|
|
574
|
+
/***
|
|
575
|
+
* FOLLY_INVOKE_QUAL
|
|
576
|
+
*
|
|
577
|
+
* An invoker expression resulting in an invocable which, when invoked, invokes
|
|
578
|
+
* the free-invocable qualified name with the given arguments.
|
|
579
|
+
*/
|
|
580
|
+
#define FOLLY_INVOKE_QUAL(funcpath) \
|
|
581
|
+
[](auto&&... __folly_param_a) constexpr FOLLY_DETAIL_FORWARD_BODY( \
|
|
582
|
+
funcpath(FOLLY_DETAIL_FORWARD_REF(__folly_param_a)...))
|
|
583
|
+
|
|
584
|
+
/***
|
|
585
|
+
* FOLLY_CREATE_MEMBER_INVOKER
|
|
586
|
+
*
|
|
587
|
+
* Used to create an invoker type bound to a specific member-invocable name.
|
|
588
|
+
*
|
|
589
|
+
* Example:
|
|
590
|
+
*
|
|
591
|
+
* FOLLY_CREATE_MEMBER_INVOKER(foo_invoker, foo);
|
|
592
|
+
*
|
|
593
|
+
* The type `foo_invoker` is generated in the current namespace and may be used
|
|
594
|
+
* as follows:
|
|
595
|
+
*
|
|
596
|
+
* struct CanFoo {
|
|
597
|
+
* int foo(Bar&) { return 1; }
|
|
598
|
+
* int foo(Car&&) noexcept { return 2; }
|
|
599
|
+
* };
|
|
600
|
+
*
|
|
601
|
+
* using traits = folly::invoke_traits<foo_invoker>;
|
|
602
|
+
*
|
|
603
|
+
* traits::invoke(CanFoo{}, Car{}) // 2
|
|
604
|
+
*
|
|
605
|
+
* traits::invoke_result<CanFoo, Bar&> // has member
|
|
606
|
+
* traits::invoke_result_t<CanFoo, Bar&> // int
|
|
607
|
+
* traits::invoke_result<CanFoo, Bar&&> // empty
|
|
608
|
+
* traits::invoke_result_t<CanFoo, Bar&&> // error
|
|
609
|
+
*
|
|
610
|
+
* traits::is_invocable_v<CanFoo, Bar&> // true
|
|
611
|
+
* traits::is_invocable_v<CanFoo, Bar&&> // false
|
|
612
|
+
*
|
|
613
|
+
* traits::is_invocable_r_v<int, CanFoo, Bar&> // true
|
|
614
|
+
* traits::is_invocable_r_v<char*, CanFoo, Bar&> // false
|
|
615
|
+
*
|
|
616
|
+
* traits::is_nothrow_invocable_v<CanFoo, Bar&> // false
|
|
617
|
+
* traits::is_nothrow_invocable_v<CanFoo, Car&&> // true
|
|
618
|
+
*
|
|
619
|
+
* traits::is_nothrow_invocable_v<int, CanFoo, Bar&> // false
|
|
620
|
+
* traits::is_nothrow_invocable_v<char*, CanFoo, Bar&> // false
|
|
621
|
+
* traits::is_nothrow_invocable_v<int, CanFoo, Car&&> // true
|
|
622
|
+
* traits::is_nothrow_invocable_v<char*, CanFoo, Car&&> // false
|
|
623
|
+
*/
|
|
624
|
+
#define FOLLY_CREATE_MEMBER_INVOKER(classname, membername) \
|
|
625
|
+
struct classname { \
|
|
626
|
+
template <typename O, typename... Args> \
|
|
627
|
+
[[maybe_unused]] FOLLY_ERASE_HACK_GCC constexpr auto operator()( \
|
|
628
|
+
O&& o, Args&&... args) const \
|
|
629
|
+
noexcept(noexcept( \
|
|
630
|
+
static_cast<O&&>(o).membername(static_cast<Args&&>(args)...))) \
|
|
631
|
+
-> decltype(static_cast<O&&>(o).membername( \
|
|
632
|
+
static_cast<Args&&>(args)...)) { \
|
|
633
|
+
return static_cast<O&&>(o).membername(static_cast<Args&&>(args)...); \
|
|
634
|
+
} \
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
/***
|
|
638
|
+
* FOLLY_CREATE_MEMBER_INVOKER_SUITE
|
|
639
|
+
*
|
|
640
|
+
* Used to create an invoker type and associated variable bound to a specific
|
|
641
|
+
* member-invocable name. The invoker variable is named like the member-
|
|
642
|
+
* invocable name and the invoker type is named with a suffix of _fn.
|
|
643
|
+
*
|
|
644
|
+
* See FOLLY_CREATE_MEMBER_INVOKER.
|
|
645
|
+
*/
|
|
646
|
+
#define FOLLY_CREATE_MEMBER_INVOKER_SUITE(membername) \
|
|
647
|
+
FOLLY_CREATE_MEMBER_INVOKER(membername##_fn, membername); \
|
|
648
|
+
[[maybe_unused]] inline constexpr membername##_fn membername {}
|
|
649
|
+
|
|
650
|
+
/***
|
|
651
|
+
* FOLLY_INVOKE_MEMBER
|
|
652
|
+
*
|
|
653
|
+
* An invoker expression resulting in an invocable which, when invoked, invokes
|
|
654
|
+
* the member on the object with the given arguments.
|
|
655
|
+
*
|
|
656
|
+
* Example:
|
|
657
|
+
*
|
|
658
|
+
* FOLLY_INVOKE_MEMBER(find)(map, key)
|
|
659
|
+
*
|
|
660
|
+
* Equivalent to:
|
|
661
|
+
*
|
|
662
|
+
* map.find(key)
|
|
663
|
+
*
|
|
664
|
+
* But also equivalent to:
|
|
665
|
+
*
|
|
666
|
+
* std::invoke(FOLLY_INVOKE_MEMBER(find), map, key)
|
|
667
|
+
*
|
|
668
|
+
* As an implementation detail, the resulting callable is a lambda. This has
|
|
669
|
+
* two observable consequences.
|
|
670
|
+
* * Since C++17 only, lambda invocations may be marked constexpr.
|
|
671
|
+
* * Since C++20 only, lambda definitions may appear in an unevaluated context,
|
|
672
|
+
* namely, in an operand to decltype, noexcept, sizeof, or typeid.
|
|
673
|
+
*/
|
|
674
|
+
#define FOLLY_INVOKE_MEMBER(membername) \
|
|
675
|
+
[](auto&& __folly_param_o, auto&&... __folly_param_a) constexpr FOLLY_DETAIL_FORWARD_BODY( \
|
|
676
|
+
FOLLY_DETAIL_FORWARD_REF(__folly_param_o) \
|
|
677
|
+
.membername(FOLLY_DETAIL_FORWARD_REF(__folly_param_a)...))
|
|
678
|
+
|
|
679
|
+
/***
|
|
680
|
+
* FOLLY_CREATE_STATIC_MEMBER_INVOKER
|
|
681
|
+
*
|
|
682
|
+
* Used to create an invoker type template bound to a specific static-member-
|
|
683
|
+
* invocable name.
|
|
684
|
+
*
|
|
685
|
+
* Example:
|
|
686
|
+
*
|
|
687
|
+
* FOLLY_CREATE_STATIC_MEMBER_INVOKER(foo_invoker, foo);
|
|
688
|
+
*
|
|
689
|
+
* The type template `foo_invoker` is generated in the current namespace and
|
|
690
|
+
* may be used as follows:
|
|
691
|
+
*
|
|
692
|
+
* struct CanFoo {
|
|
693
|
+
* static int foo(Bar&) { return 1; }
|
|
694
|
+
* static int foo(Car&&) noexcept { return 2; }
|
|
695
|
+
* };
|
|
696
|
+
*
|
|
697
|
+
* using traits = folly::invoke_traits<foo_invoker<CanFoo>>;
|
|
698
|
+
*
|
|
699
|
+
* traits::invoke(Car{}) // 2
|
|
700
|
+
*
|
|
701
|
+
* traits::invoke_result<Bar&> // has member
|
|
702
|
+
* traits::invoke_result_t<Bar&> // int
|
|
703
|
+
* traits::invoke_result<Bar&&> // empty
|
|
704
|
+
* traits::invoke_result_t<Bar&&> // error
|
|
705
|
+
*
|
|
706
|
+
* traits::is_invocable_v<Bar&> // true
|
|
707
|
+
* traits::is_invocable_v<Bar&&> // false
|
|
708
|
+
*
|
|
709
|
+
* traits::is_invocable_r_v<int, Bar&> // true
|
|
710
|
+
* traits::is_invocable_r_v<char*, Bar&> // false
|
|
711
|
+
*
|
|
712
|
+
* traits::is_nothrow_invocable_v<Bar&> // false
|
|
713
|
+
* traits::is_nothrow_invocable_v<Car&&> // true
|
|
714
|
+
*
|
|
715
|
+
* traits::is_nothrow_invocable_v<int, Bar&> // false
|
|
716
|
+
* traits::is_nothrow_invocable_v<char*, Bar&> // false
|
|
717
|
+
* traits::is_nothrow_invocable_v<int, Car&&> // true
|
|
718
|
+
* traits::is_nothrow_invocable_v<char*, Car&&> // false
|
|
719
|
+
*/
|
|
720
|
+
#define FOLLY_CREATE_STATIC_MEMBER_INVOKER(classname, membername) \
|
|
721
|
+
template <typename T> \
|
|
722
|
+
struct classname { \
|
|
723
|
+
template <typename... Args, typename U = T> \
|
|
724
|
+
[[maybe_unused]] FOLLY_ERASE_HACK_GCC constexpr auto operator()( \
|
|
725
|
+
Args&&... args) const \
|
|
726
|
+
noexcept(noexcept(U::membername(static_cast<Args&&>(args)...))) \
|
|
727
|
+
-> decltype(U::membername(static_cast<Args&&>(args)...)) { \
|
|
728
|
+
return U::membername(static_cast<Args&&>(args)...); \
|
|
729
|
+
} \
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
/***
|
|
733
|
+
* FOLLY_CREATE_STATIC_MEMBER_INVOKER_SUITE
|
|
734
|
+
*
|
|
735
|
+
* Used to create an invoker type template and associated variable template
|
|
736
|
+
* bound to a specific static-member-invocable name. The invoker variable
|
|
737
|
+
* template is named like the static-member-invocable name and the invoker type
|
|
738
|
+
* template is named with a suffix of _fn.
|
|
739
|
+
*
|
|
740
|
+
* See FOLLY_CREATE_STATIC_MEMBER_INVOKER.
|
|
741
|
+
*/
|
|
742
|
+
#define FOLLY_CREATE_STATIC_MEMBER_INVOKER_SUITE(membername) \
|
|
743
|
+
FOLLY_CREATE_STATIC_MEMBER_INVOKER(membername##_fn, membername); \
|
|
744
|
+
template <typename T> \
|
|
745
|
+
[[maybe_unused]] inline constexpr membername##_fn<T> membername {}
|
|
746
|
+
|
|
747
|
+
namespace folly {
|
|
748
|
+
|
|
749
|
+
namespace detail_tag_invoke_fn {
|
|
750
|
+
|
|
751
|
+
void tag_invoke();
|
|
752
|
+
|
|
753
|
+
struct tag_invoke_fn {
|
|
754
|
+
template <typename Tag, typename... Args>
|
|
755
|
+
constexpr auto operator()(Tag tag, Args&&... args) const noexcept(noexcept(
|
|
756
|
+
tag_invoke(static_cast<Tag&&>(tag), static_cast<Args&&>(args)...)))
|
|
757
|
+
-> decltype(tag_invoke(
|
|
758
|
+
static_cast<Tag&&>(tag), static_cast<Args&&>(args)...)) {
|
|
759
|
+
return tag_invoke(static_cast<Tag&&>(tag), static_cast<Args&&>(args)...);
|
|
760
|
+
}
|
|
761
|
+
};
|
|
762
|
+
|
|
763
|
+
// Manually implement the traits here rather than defining them in terms of
|
|
764
|
+
// the corresponding std::invoke_result/is_invocable/is_nothrow_invocable
|
|
765
|
+
// traits to improve compile-times. We don't need all of the generality of
|
|
766
|
+
// the std:: traits and the tag_invoke traits can be used heavily in CPO-based
|
|
767
|
+
// code so optimising them for compile times can make a big difference.
|
|
768
|
+
|
|
769
|
+
// Use the immediately-invoked function-pointer trick here to avoid
|
|
770
|
+
// instantiating the std::declval<T>() template.
|
|
771
|
+
|
|
772
|
+
template <typename Tag, typename... Args>
|
|
773
|
+
using tag_invoke_result_t = decltype(tag_invoke(
|
|
774
|
+
static_cast<Tag && (*)() noexcept>(nullptr)(),
|
|
775
|
+
static_cast<Args && (*)() noexcept>(nullptr)()...));
|
|
776
|
+
|
|
777
|
+
template <typename Tag, typename... Args>
|
|
778
|
+
auto try_tag_invoke(int) noexcept(
|
|
779
|
+
noexcept(tag_invoke(FOLLY_DECLVAL(Tag&&), FOLLY_DECLVAL(Args&&)...)))
|
|
780
|
+
-> decltype(static_cast<void>(tag_invoke(FOLLY_DECLVAL(Tag&&), FOLLY_DECLVAL(Args&&)...)), std::true_type{});
|
|
781
|
+
|
|
782
|
+
template <typename Tag, typename... Args>
|
|
783
|
+
std::false_type try_tag_invoke(...) noexcept(false);
|
|
784
|
+
|
|
785
|
+
template <template <typename...> class T, typename... Args>
|
|
786
|
+
struct defer {
|
|
787
|
+
using type = T<Args...>;
|
|
788
|
+
};
|
|
789
|
+
|
|
790
|
+
struct empty {};
|
|
791
|
+
|
|
792
|
+
} // namespace detail_tag_invoke_fn
|
|
793
|
+
|
|
794
|
+
// The expression folly::tag_invoke(tag, args...) is equivalent to performing
|
|
795
|
+
// a call to the expression tag_invoke(tag, args...) using argument-dependent
|
|
796
|
+
// lookup (ADL).
|
|
797
|
+
//
|
|
798
|
+
// This is intended to be used by customization-point objects, which dispatch
|
|
799
|
+
// a call to the CPO to an ADL call to tag_invoke(cpo, args...), using the type
|
|
800
|
+
// of the first argument to disambiguate between customisations for different
|
|
801
|
+
// CPOs rather than using different ADL names for this.
|
|
802
|
+
//
|
|
803
|
+
// For example: Defining a new CPO in terms of tag_invoke.
|
|
804
|
+
// struct FooCpo {
|
|
805
|
+
// template<typename A, typename B>
|
|
806
|
+
// auto operator()(A&& a, B&& b) const
|
|
807
|
+
// noexcept(folly::is_nothrow_tag_invocable_v<FooCpo, A, B>)
|
|
808
|
+
// -> folly::tag_invoke_result_t<FooCpo, A, B> {
|
|
809
|
+
// return folly::tag_invoke(*this, (A&&)a, (B&&)b);
|
|
810
|
+
// }
|
|
811
|
+
// };
|
|
812
|
+
// FOLLY_DEFINE_CPO(FooCpo, Foo)
|
|
813
|
+
//
|
|
814
|
+
// And then customising the Foo CPO for a particular type:
|
|
815
|
+
// class SomeType {
|
|
816
|
+
// ...
|
|
817
|
+
// template<typename B>
|
|
818
|
+
// friend int tag_invoke(folly::cpo_t<Foo>, const SomeType& a, B&& b) {
|
|
819
|
+
// // implementation goes here
|
|
820
|
+
// }
|
|
821
|
+
// };
|
|
822
|
+
//
|
|
823
|
+
// For more details see the C++ standards proposal: https://wg21.link/P1895R0.
|
|
824
|
+
FOLLY_DEFINE_CPO(detail_tag_invoke_fn::tag_invoke_fn, tag_invoke)
|
|
825
|
+
|
|
826
|
+
// Query if the 'folly::tag_invoke()' CPO can be invoked with a tag and
|
|
827
|
+
// arguments of the the specified types.
|
|
828
|
+
//
|
|
829
|
+
// This checks whether an overload of the free-function tag_invoke() found
|
|
830
|
+
// by ADL can be invoked with the specified types.
|
|
831
|
+
|
|
832
|
+
template <typename Tag, typename... Args>
|
|
833
|
+
inline constexpr bool is_tag_invocable_v =
|
|
834
|
+
decltype(detail_tag_invoke_fn::try_tag_invoke<Tag, Args...>(0))::value;
|
|
835
|
+
|
|
836
|
+
template <typename Tag, typename... Args>
|
|
837
|
+
struct is_tag_invocable //
|
|
838
|
+
: std::bool_constant<is_tag_invocable_v<Tag, Args...>> {};
|
|
839
|
+
|
|
840
|
+
// Query whether the 'folly::tag_invoke()' CPO can be invoked with a tag
|
|
841
|
+
// and arguments of the specified type and that such an invocation is
|
|
842
|
+
// noexcept.
|
|
843
|
+
|
|
844
|
+
template <typename Tag, typename... Args>
|
|
845
|
+
inline constexpr bool is_nothrow_tag_invocable_v =
|
|
846
|
+
noexcept(detail_tag_invoke_fn::try_tag_invoke<Tag, Args...>(0));
|
|
847
|
+
|
|
848
|
+
template <typename Tag, typename... Args>
|
|
849
|
+
struct is_nothrow_tag_invocable
|
|
850
|
+
: std::bool_constant<is_nothrow_tag_invocable_v<Tag, Args...>> {};
|
|
851
|
+
|
|
852
|
+
// Versions of the above that check in addition that the result is
|
|
853
|
+
// convertible to the given return type R.
|
|
854
|
+
|
|
855
|
+
template <typename R, typename Tag, typename... Args>
|
|
856
|
+
using is_tag_invocable_r =
|
|
857
|
+
folly::is_invocable_r<R, decltype(folly::tag_invoke), Tag, Args...>;
|
|
858
|
+
|
|
859
|
+
template <typename R, typename Tag, typename... Args>
|
|
860
|
+
inline constexpr bool is_tag_invocable_r_v =
|
|
861
|
+
is_tag_invocable_r<R, Tag, Args...>::value;
|
|
862
|
+
|
|
863
|
+
template <typename R, typename Tag, typename... Args>
|
|
864
|
+
using is_nothrow_tag_invocable_r =
|
|
865
|
+
folly::is_nothrow_invocable_r<R, decltype(folly::tag_invoke), Tag, Args...>;
|
|
866
|
+
|
|
867
|
+
template <typename R, typename Tag, typename... Args>
|
|
868
|
+
inline constexpr bool is_nothrow_tag_invocable_r_v =
|
|
869
|
+
is_nothrow_tag_invocable_r<R, Tag, Args...>::value;
|
|
870
|
+
|
|
871
|
+
using detail_tag_invoke_fn::tag_invoke_result_t;
|
|
872
|
+
|
|
873
|
+
template <typename Tag, typename... Args>
|
|
874
|
+
struct tag_invoke_result
|
|
875
|
+
: conditional_t<
|
|
876
|
+
is_tag_invocable_v<Tag, Args...>,
|
|
877
|
+
detail_tag_invoke_fn::defer<tag_invoke_result_t, Tag, Args...>,
|
|
878
|
+
detail_tag_invoke_fn::empty> {};
|
|
879
|
+
|
|
880
|
+
} // namespace folly
|