react-native-windows 0.83.0 → 0.83.3
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/CompositionEventHandler.cpp +17 -4
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +6 -4
- package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +8 -4
- 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/ReactNativeAppBuilder.idl +3 -0
- 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.Cxx/Microsoft.ReactNative.Cxx.vcxitems +16 -0
- 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 +9 -1
- package/PropertySheets/React.Cpp.props +7 -6
- package/PropertySheets/WinUI.props +4 -3
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/ConfigureYarnPackageAgeGate.ps1 +25 -0
- package/Scripts/EnableInternalWinAppSDKFeed.ps1 +12 -5
- package/Scripts/JustMyXaml.ps1 +8 -8
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +103 -6
- package/Scripts/RunRnwInitWindows.js +37 -0
- 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 +35 -12
- package/Scripts/creaternwlib.cmd +41 -18
- 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 +6 -6
- 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 -376
- 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,887 @@
|
|
|
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 <chrono>
|
|
20
|
+
#include <mutex>
|
|
21
|
+
#include <shared_mutex>
|
|
22
|
+
#include <system_error>
|
|
23
|
+
#include <type_traits>
|
|
24
|
+
|
|
25
|
+
#include <folly/Portability.h>
|
|
26
|
+
#include <folly/Traits.h>
|
|
27
|
+
#include <folly/functional/Invoke.h>
|
|
28
|
+
#include <folly/lang/Exception.h>
|
|
29
|
+
#include <folly/lang/Hint.h>
|
|
30
|
+
|
|
31
|
+
namespace folly {
|
|
32
|
+
|
|
33
|
+
namespace access {
|
|
34
|
+
|
|
35
|
+
// locks and unlocks
|
|
36
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(lock);
|
|
37
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock);
|
|
38
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_for);
|
|
39
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_until);
|
|
40
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock);
|
|
41
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(lock_shared);
|
|
42
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_shared);
|
|
43
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_shared_for);
|
|
44
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_shared_until);
|
|
45
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_shared);
|
|
46
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(lock_upgrade);
|
|
47
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_upgrade);
|
|
48
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_upgrade_for);
|
|
49
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_upgrade_until);
|
|
50
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_upgrade);
|
|
51
|
+
|
|
52
|
+
// transitions
|
|
53
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_and_lock_shared);
|
|
54
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_and_lock_upgrade);
|
|
55
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock);
|
|
56
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_for);
|
|
57
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_until);
|
|
58
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_upgrade);
|
|
59
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_upgrade_for);
|
|
60
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_upgrade_until);
|
|
61
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_upgrade_and_lock);
|
|
62
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_upgrade_and_lock);
|
|
63
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_upgrade_and_lock_for);
|
|
64
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_upgrade_and_lock_until);
|
|
65
|
+
FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_upgrade_and_lock_shared);
|
|
66
|
+
|
|
67
|
+
} // namespace access
|
|
68
|
+
|
|
69
|
+
namespace detail {
|
|
70
|
+
|
|
71
|
+
// A lock base class with a mostly-complete implementation suitable for either
|
|
72
|
+
// unique, shared, or upgrade lock base classes. However, each particular base
|
|
73
|
+
// class specific to each lock category must still be its own class to avoid
|
|
74
|
+
// overly permissive overloads of member and free swap.
|
|
75
|
+
template <typename Mutex, typename Policy>
|
|
76
|
+
class lock_base {
|
|
77
|
+
public:
|
|
78
|
+
using mutex_type = Mutex;
|
|
79
|
+
using state_type = invoke_result_t<typename Policy::lock_fn, mutex_type&>;
|
|
80
|
+
|
|
81
|
+
static_assert(
|
|
82
|
+
std::is_same<state_type, std::decay_t<state_type>>::value,
|
|
83
|
+
"state_type, if not void, must be a value type");
|
|
84
|
+
static_assert(
|
|
85
|
+
std::is_void<state_type>::value ||
|
|
86
|
+
(std::is_nothrow_default_constructible<state_type>::value &&
|
|
87
|
+
std::is_nothrow_copy_constructible<state_type>::value &&
|
|
88
|
+
std::is_nothrow_copy_assignable<state_type>::value &&
|
|
89
|
+
std::is_nothrow_destructible<state_type>::value),
|
|
90
|
+
"state_type, if not void, must be noexcept-semiregular");
|
|
91
|
+
static_assert(
|
|
92
|
+
std::is_void<state_type>::value ||
|
|
93
|
+
std::is_constructible<bool, state_type>::value,
|
|
94
|
+
"state_type, if not void, must explicitly convert to bool");
|
|
95
|
+
|
|
96
|
+
private:
|
|
97
|
+
static constexpr bool has_state_ = !std::is_void<state_type>::value;
|
|
98
|
+
using owner_type = conditional_t<has_state_, state_type, bool>;
|
|
99
|
+
template <bool C, typename V = int>
|
|
100
|
+
using if_ = std::enable_if_t<C, V>;
|
|
101
|
+
|
|
102
|
+
static bool owner_true_(tag_t<bool>) noexcept { return true; }
|
|
103
|
+
static owner_type owner_true_(tag_t<state_type>) noexcept { return {}; }
|
|
104
|
+
|
|
105
|
+
mutex_type* mutex_{};
|
|
106
|
+
owner_type state_{};
|
|
107
|
+
|
|
108
|
+
public:
|
|
109
|
+
FOLLY_NODISCARD lock_base() = default;
|
|
110
|
+
FOLLY_NODISCARD lock_base(lock_base&& that) noexcept
|
|
111
|
+
: mutex_{std::exchange(that.mutex_, nullptr)},
|
|
112
|
+
state_{std::exchange(that.state_, owner_type{})} {}
|
|
113
|
+
template <typename M = mutex_type, if_<!has_state_, M>* = nullptr>
|
|
114
|
+
FOLLY_NODISCARD lock_base(type_t<M>& mutex, std::adopt_lock_t)
|
|
115
|
+
: mutex_{std::addressof(mutex)}, state_{owner_true_(tag<owner_type>)} {}
|
|
116
|
+
template <typename M = mutex_type, if_<has_state_, M>* = nullptr>
|
|
117
|
+
FOLLY_NODISCARD lock_base(
|
|
118
|
+
type_t<M>& mutex, std::adopt_lock_t, owner_type const& state)
|
|
119
|
+
: mutex_{std::addressof(mutex)}, state_{state} {
|
|
120
|
+
state_ || (check_fail_<true>(), 0);
|
|
121
|
+
}
|
|
122
|
+
FOLLY_NODISCARD explicit lock_base(mutex_type& mutex)
|
|
123
|
+
: mutex_{std::addressof(mutex)} {
|
|
124
|
+
lock();
|
|
125
|
+
}
|
|
126
|
+
lock_base(mutex_type& mutex, std::defer_lock_t) noexcept
|
|
127
|
+
: mutex_{std::addressof(mutex)} {}
|
|
128
|
+
FOLLY_NODISCARD lock_base(mutex_type& mutex, std::try_to_lock_t)
|
|
129
|
+
: mutex_{std::addressof(mutex)} {
|
|
130
|
+
try_lock();
|
|
131
|
+
}
|
|
132
|
+
template <typename Rep, typename Period>
|
|
133
|
+
FOLLY_NODISCARD lock_base(
|
|
134
|
+
mutex_type& mutex, std::chrono::duration<Rep, Period> const& timeout)
|
|
135
|
+
: mutex_{std::addressof(mutex)} {
|
|
136
|
+
try_lock_for(timeout);
|
|
137
|
+
}
|
|
138
|
+
template <typename Clock, typename Duration>
|
|
139
|
+
FOLLY_NODISCARD lock_base(
|
|
140
|
+
mutex_type& mutex,
|
|
141
|
+
std::chrono::time_point<Clock, Duration> const& deadline)
|
|
142
|
+
: mutex_{std::addressof(mutex)} {
|
|
143
|
+
try_lock_until(deadline);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
~lock_base() {
|
|
147
|
+
if (owns_lock()) {
|
|
148
|
+
unlock();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
lock_base& operator=(lock_base&& that) noexcept {
|
|
153
|
+
if (owns_lock()) {
|
|
154
|
+
unlock();
|
|
155
|
+
}
|
|
156
|
+
mutex_ = std::exchange(that.mutex_, nullptr);
|
|
157
|
+
state_ = std::exchange(that.state_, owner_type{});
|
|
158
|
+
return *this;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
void lock() {
|
|
162
|
+
check<false>();
|
|
163
|
+
if constexpr (has_state_) {
|
|
164
|
+
state_ = typename Policy::lock_fn{}(*mutex_);
|
|
165
|
+
} else {
|
|
166
|
+
typename Policy::lock_fn{}(*mutex_);
|
|
167
|
+
state_ = true;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
bool try_lock() {
|
|
172
|
+
check<false>();
|
|
173
|
+
state_ = typename Policy::try_lock_fn{}(*mutex_);
|
|
174
|
+
return !!state_;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
template <typename Rep, typename Period>
|
|
178
|
+
bool try_lock_for(std::chrono::duration<Rep, Period> const& timeout) {
|
|
179
|
+
check<false>();
|
|
180
|
+
state_ = typename Policy::try_lock_for_fn{}(*mutex_, timeout);
|
|
181
|
+
return !!state_;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
template <typename Clock, typename Duration>
|
|
185
|
+
bool try_lock_until(
|
|
186
|
+
std::chrono::time_point<Clock, Duration> const& deadline) {
|
|
187
|
+
check<false>();
|
|
188
|
+
state_ = typename Policy::try_lock_until_fn{}(*mutex_, deadline);
|
|
189
|
+
return !!state_;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
void unlock() {
|
|
193
|
+
check<true>();
|
|
194
|
+
if constexpr (has_state_) {
|
|
195
|
+
auto const& state = state_; // prohibit unlock to mutate state_
|
|
196
|
+
typename Policy::unlock_fn{}(*mutex_, state);
|
|
197
|
+
} else {
|
|
198
|
+
typename Policy::unlock_fn{}(*mutex_);
|
|
199
|
+
}
|
|
200
|
+
state_ = decltype(state_){};
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
mutex_type* release() noexcept {
|
|
204
|
+
state_ = {};
|
|
205
|
+
return std::exchange(mutex_, nullptr);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
mutex_type* mutex() const noexcept { return mutex_; }
|
|
209
|
+
|
|
210
|
+
template <bool C = has_state_, if_<C> = 0>
|
|
211
|
+
state_type state() const noexcept {
|
|
212
|
+
return state_;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
bool owns_lock() const noexcept { return !!state_; }
|
|
216
|
+
|
|
217
|
+
explicit operator bool() const noexcept { return !!state_; }
|
|
218
|
+
|
|
219
|
+
protected:
|
|
220
|
+
void swap(lock_base& that) noexcept {
|
|
221
|
+
std::swap(mutex_, that.mutex_);
|
|
222
|
+
std::swap(state_, that.state_);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
private:
|
|
226
|
+
template <bool Owns>
|
|
227
|
+
void check() {
|
|
228
|
+
if (!mutex_ || !state_ == Owns) {
|
|
229
|
+
check_fail_<Owns>();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
template <bool Owns>
|
|
234
|
+
[[noreturn]] FOLLY_NOINLINE void check_fail_() {
|
|
235
|
+
auto perm = std::errc::operation_not_permitted;
|
|
236
|
+
auto dead = std::errc::resource_deadlock_would_occur;
|
|
237
|
+
auto code = !mutex_ || !state_ ? perm : dead;
|
|
238
|
+
throw_exception<std::system_error>(std::make_error_code(code));
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
template <typename Mutex, typename Policy>
|
|
243
|
+
class lock_guard_base
|
|
244
|
+
: unsafe_for_async_usage_if<!is_coro_aware_mutex_v<Mutex>> {
|
|
245
|
+
private:
|
|
246
|
+
using lock_type_ = lock_base<Mutex, Policy>;
|
|
247
|
+
using lock_state_type_ = typename lock_type_::state_type;
|
|
248
|
+
|
|
249
|
+
static constexpr bool has_state_ = !std::is_void<lock_state_type_>::value;
|
|
250
|
+
using state_type_ = conditional_t<has_state_, lock_state_type_, bool>;
|
|
251
|
+
template <bool C>
|
|
252
|
+
using if_ = std::enable_if_t<C, int>;
|
|
253
|
+
|
|
254
|
+
public:
|
|
255
|
+
using mutex_type = Mutex;
|
|
256
|
+
|
|
257
|
+
lock_guard_base(lock_guard_base const&) = delete;
|
|
258
|
+
lock_guard_base(lock_guard_base&&) = delete;
|
|
259
|
+
explicit lock_guard_base(mutex_type& mutex) : lock_{mutex} {}
|
|
260
|
+
template <bool C = has_state_, if_<!C> = 0>
|
|
261
|
+
lock_guard_base(mutex_type& mutex, std::adopt_lock_t)
|
|
262
|
+
: lock_{mutex, std::adopt_lock} {}
|
|
263
|
+
template <bool C = has_state_, if_<C> = 0>
|
|
264
|
+
lock_guard_base(
|
|
265
|
+
mutex_type& mutex, std::adopt_lock_t, state_type_ const& state)
|
|
266
|
+
: lock_{mutex, std::adopt_lock, state} {}
|
|
267
|
+
|
|
268
|
+
void operator=(lock_guard_base const&) = delete;
|
|
269
|
+
void operator=(lock_guard_base&&) = delete;
|
|
270
|
+
|
|
271
|
+
private:
|
|
272
|
+
lock_type_ lock_;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
struct lock_policy_unique {
|
|
276
|
+
using lock_fn = access::lock_fn;
|
|
277
|
+
using try_lock_fn = access::try_lock_fn;
|
|
278
|
+
using try_lock_for_fn = access::try_lock_for_fn;
|
|
279
|
+
using try_lock_until_fn = access::try_lock_until_fn;
|
|
280
|
+
using unlock_fn = access::unlock_fn;
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
struct lock_policy_shared {
|
|
284
|
+
using lock_fn = access::lock_shared_fn;
|
|
285
|
+
using try_lock_fn = access::try_lock_shared_fn;
|
|
286
|
+
using try_lock_for_fn = access::try_lock_shared_for_fn;
|
|
287
|
+
using try_lock_until_fn = access::try_lock_shared_until_fn;
|
|
288
|
+
using unlock_fn = access::unlock_shared_fn;
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
struct lock_policy_upgrade {
|
|
292
|
+
using lock_fn = access::lock_upgrade_fn;
|
|
293
|
+
using try_lock_fn = access::try_lock_upgrade_fn;
|
|
294
|
+
using try_lock_for_fn = access::try_lock_upgrade_for_fn;
|
|
295
|
+
using try_lock_until_fn = access::try_lock_upgrade_until_fn;
|
|
296
|
+
using unlock_fn = access::unlock_upgrade_fn;
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
template <typename Mutex>
|
|
300
|
+
using lock_policy_hybrid = conditional_t<
|
|
301
|
+
is_invocable_v<access::lock_shared_fn, Mutex&>,
|
|
302
|
+
lock_policy_shared,
|
|
303
|
+
lock_policy_unique>;
|
|
304
|
+
|
|
305
|
+
template <typename Mutex>
|
|
306
|
+
using lock_base_unique = lock_base<Mutex, lock_policy_unique>;
|
|
307
|
+
|
|
308
|
+
template <typename Mutex>
|
|
309
|
+
using lock_base_shared = lock_base<Mutex, lock_policy_shared>;
|
|
310
|
+
|
|
311
|
+
template <typename Mutex>
|
|
312
|
+
using lock_base_upgrade = lock_base<Mutex, lock_policy_upgrade>;
|
|
313
|
+
|
|
314
|
+
template <typename Mutex>
|
|
315
|
+
using lock_base_hybrid = lock_base<Mutex, lock_policy_hybrid<Mutex>>;
|
|
316
|
+
|
|
317
|
+
} // namespace detail
|
|
318
|
+
|
|
319
|
+
// unique_lock_base
|
|
320
|
+
//
|
|
321
|
+
// A lock-holder base which holds exclusive locks, usable with any mutex type.
|
|
322
|
+
//
|
|
323
|
+
// Works with both lockable mutex types and lockable-with-state mutex types.
|
|
324
|
+
//
|
|
325
|
+
// When defining lockable-with-state mutex types, specialize std::unique_lock
|
|
326
|
+
// to derive this. See the example with upgrade_lock.
|
|
327
|
+
//
|
|
328
|
+
// A lockable-with-state mutex type is signalled by the return type of mutex
|
|
329
|
+
// member function lock. Members try_lock, try_lock_for, and try_lock_until
|
|
330
|
+
// all return this type and member unlock accepts this type.
|
|
331
|
+
template <typename Mutex>
|
|
332
|
+
class unique_lock_base : public detail::lock_base_unique<Mutex> {
|
|
333
|
+
private:
|
|
334
|
+
using base = detail::lock_base_unique<Mutex>;
|
|
335
|
+
using self = unique_lock_base;
|
|
336
|
+
|
|
337
|
+
public:
|
|
338
|
+
using base::base;
|
|
339
|
+
|
|
340
|
+
void swap(self& that) noexcept { base::swap(that); }
|
|
341
|
+
|
|
342
|
+
friend void swap(self& a, self& b) noexcept { a.swap(b); }
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
// shared_lock_base
|
|
346
|
+
//
|
|
347
|
+
// A lock-holder base which holds shared locks, usable with any shared mutex
|
|
348
|
+
// type.
|
|
349
|
+
//
|
|
350
|
+
// Works with both shared-lockable mutex types and shared-lockable-with-state
|
|
351
|
+
// mutex types.
|
|
352
|
+
//
|
|
353
|
+
// When defining shared-lockable-with-state mutex types, specialize
|
|
354
|
+
// std::shared_lock to derive this. See the example with upgrade_lock.
|
|
355
|
+
//
|
|
356
|
+
// A shared-lockable-with-state mutex type is signalled by the return type of
|
|
357
|
+
// mutex member function lock_shared. Members try_lock_shared,
|
|
358
|
+
// try_lock_shared_for, and try_lock_shared_until all return this type and
|
|
359
|
+
// member unlock_shared accepts this type. Likewise for mutex member
|
|
360
|
+
// transition functions.
|
|
361
|
+
template <typename Mutex>
|
|
362
|
+
class shared_lock_base : public detail::lock_base_shared<Mutex> {
|
|
363
|
+
private:
|
|
364
|
+
using base = detail::lock_base_shared<Mutex>;
|
|
365
|
+
using self = shared_lock_base;
|
|
366
|
+
|
|
367
|
+
public:
|
|
368
|
+
using base::base;
|
|
369
|
+
|
|
370
|
+
void swap(self& that) noexcept { base::swap(that); }
|
|
371
|
+
|
|
372
|
+
friend void swap(self& a, self& b) noexcept { a.swap(b); }
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
// upgrade_lock_base
|
|
376
|
+
//
|
|
377
|
+
// A lock-holder base which holds upgrade locks, usable with any upgrade mutex
|
|
378
|
+
// type.
|
|
379
|
+
//
|
|
380
|
+
// Works with both upgrade-lockable mutex types and upgrade-lockable-with-state
|
|
381
|
+
// mutex types.
|
|
382
|
+
//
|
|
383
|
+
// There are no use-cases except the one below.
|
|
384
|
+
//
|
|
385
|
+
// An upgrade-lockable-with-state mutex type is signalled by the return type of
|
|
386
|
+
// mutex member function lock_upgrade. Members try_lock_upgrade,
|
|
387
|
+
// try_lock_upgrade_for, and try_lock_upgrade_until all return this type and
|
|
388
|
+
// member unlock_upgrade accepts this type. Likewise for mutex member
|
|
389
|
+
// transition functions.
|
|
390
|
+
template <typename Mutex>
|
|
391
|
+
class upgrade_lock_base : public detail::lock_base_upgrade<Mutex> {
|
|
392
|
+
private:
|
|
393
|
+
using base = detail::lock_base_upgrade<Mutex>;
|
|
394
|
+
using self = upgrade_lock_base;
|
|
395
|
+
|
|
396
|
+
public:
|
|
397
|
+
using base::base;
|
|
398
|
+
|
|
399
|
+
void swap(self& that) noexcept { base::swap(that); }
|
|
400
|
+
|
|
401
|
+
friend void swap(self& a, self& b) noexcept { a.swap(b); }
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
// hybrid_lock_base
|
|
405
|
+
//
|
|
406
|
+
// A lock-holder base which holds shared locks for shared mutex types or
|
|
407
|
+
// exclusive locks otherwise.
|
|
408
|
+
//
|
|
409
|
+
// See unique_lock_base and shared_lock_base.
|
|
410
|
+
template <typename Mutex>
|
|
411
|
+
class hybrid_lock_base : public detail::lock_base_hybrid<Mutex> {
|
|
412
|
+
private:
|
|
413
|
+
using base = detail::lock_base_hybrid<Mutex>;
|
|
414
|
+
using self = hybrid_lock_base;
|
|
415
|
+
|
|
416
|
+
public:
|
|
417
|
+
using base::base;
|
|
418
|
+
|
|
419
|
+
void swap(self& that) noexcept { base::swap(that); }
|
|
420
|
+
|
|
421
|
+
friend void swap(self& a, self& b) noexcept { a.swap(b); }
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
// unique_lock
|
|
425
|
+
//
|
|
426
|
+
// Alias to std::unique_lock.
|
|
427
|
+
using std::unique_lock;
|
|
428
|
+
|
|
429
|
+
// shared_lock
|
|
430
|
+
//
|
|
431
|
+
// Alias to std::shared_lock.
|
|
432
|
+
using std::shared_lock;
|
|
433
|
+
|
|
434
|
+
// upgrade_lock
|
|
435
|
+
//
|
|
436
|
+
// A lock-holder type which holds upgrade locks, usable with any upgrade mutex
|
|
437
|
+
// type. An upgrade mutex is a shared mutex which supports the upgrade state.
|
|
438
|
+
//
|
|
439
|
+
// Works with both upgrade-lockable mutex types and upgrade-lockable-with-state
|
|
440
|
+
// mutex types.
|
|
441
|
+
//
|
|
442
|
+
// Upgrade locks are not useful by themselves; they are primarily useful since
|
|
443
|
+
// upgrade locks may be transitioned atomically to exclusive locks. This lock-
|
|
444
|
+
// holder type works with the transition_to_... functions below to facilitate
|
|
445
|
+
// atomic transition from ugprade lock to exclusive lock.
|
|
446
|
+
template <typename Mutex>
|
|
447
|
+
class upgrade_lock : public upgrade_lock_base<Mutex> {
|
|
448
|
+
public:
|
|
449
|
+
using upgrade_lock_base<Mutex>::upgrade_lock_base;
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
template <typename Mutex, typename... A>
|
|
453
|
+
explicit upgrade_lock(Mutex&, A const&...) -> upgrade_lock<Mutex>;
|
|
454
|
+
|
|
455
|
+
// hybrid_lock
|
|
456
|
+
//
|
|
457
|
+
// A lock-holder type which holds shared locks for shared mutex types or
|
|
458
|
+
// exclusive locks otherwise.
|
|
459
|
+
//
|
|
460
|
+
// See unique_lock and shared_lock.
|
|
461
|
+
template <typename Mutex>
|
|
462
|
+
class hybrid_lock : public hybrid_lock_base<Mutex> {
|
|
463
|
+
public:
|
|
464
|
+
using hybrid_lock_base<Mutex>::hybrid_lock_base;
|
|
465
|
+
};
|
|
466
|
+
|
|
467
|
+
template <typename Mutex, typename... A>
|
|
468
|
+
explicit hybrid_lock(Mutex&, A const&...) -> hybrid_lock<Mutex>;
|
|
469
|
+
|
|
470
|
+
// lock_guard_base
|
|
471
|
+
//
|
|
472
|
+
// A lock-guard which holds exclusive locks, usable with any mutex type.
|
|
473
|
+
//
|
|
474
|
+
// Works with both lockable mutex types and lockable-with-state mutex types.
|
|
475
|
+
//
|
|
476
|
+
// When defining lockable-with-state mutex types, specialize std::lock_guard
|
|
477
|
+
// to derive this.
|
|
478
|
+
template <typename Mutex>
|
|
479
|
+
class unique_lock_guard_base
|
|
480
|
+
: public detail::lock_guard_base<Mutex, detail::lock_policy_unique> {
|
|
481
|
+
private:
|
|
482
|
+
using base = detail::lock_guard_base<Mutex, detail::lock_policy_unique>;
|
|
483
|
+
|
|
484
|
+
public:
|
|
485
|
+
using base::base;
|
|
486
|
+
};
|
|
487
|
+
|
|
488
|
+
// unique_lock_guard
|
|
489
|
+
//
|
|
490
|
+
// Alias to std::lock_guard.
|
|
491
|
+
template <typename Mutex>
|
|
492
|
+
using unique_lock_guard = std::lock_guard<Mutex>;
|
|
493
|
+
|
|
494
|
+
// shared_lock_guard
|
|
495
|
+
//
|
|
496
|
+
// A lock-guard which holds shared locks, usable with any shared mutex type.
|
|
497
|
+
//
|
|
498
|
+
// Works with both lockable mutex types and lockable-with-state mutex types.
|
|
499
|
+
template <typename Mutex>
|
|
500
|
+
class shared_lock_guard
|
|
501
|
+
: public detail::lock_guard_base<Mutex, detail::lock_policy_shared> {
|
|
502
|
+
private:
|
|
503
|
+
using base = detail::lock_guard_base<Mutex, detail::lock_policy_shared>;
|
|
504
|
+
|
|
505
|
+
public:
|
|
506
|
+
using base::base;
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
// hybrid_lock_guard
|
|
510
|
+
//
|
|
511
|
+
// For shared mutex types, effectively shared_lock_guard; otherwise,
|
|
512
|
+
// effectively unique_lock_guard.
|
|
513
|
+
template <typename Mutex>
|
|
514
|
+
class hybrid_lock_guard
|
|
515
|
+
: public detail::lock_guard_base<Mutex, detail::lock_policy_hybrid<Mutex>> {
|
|
516
|
+
private:
|
|
517
|
+
using base =
|
|
518
|
+
detail::lock_guard_base<Mutex, detail::lock_policy_hybrid<Mutex>>;
|
|
519
|
+
|
|
520
|
+
public:
|
|
521
|
+
using base::base;
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
template <typename Mutex, typename... A>
|
|
525
|
+
explicit hybrid_lock_guard(Mutex&, A const&...) -> hybrid_lock_guard<Mutex>;
|
|
526
|
+
|
|
527
|
+
} // namespace folly
|
|
528
|
+
|
|
529
|
+
FOLLY_NAMESPACE_STD_BEGIN
|
|
530
|
+
|
|
531
|
+
template <typename Mutex, typename LockFn = ::folly::access::lock_fn>
|
|
532
|
+
unique_lock(Mutex&, adopt_lock_t, invoke_result_t<LockFn, Mutex&> const&)
|
|
533
|
+
-> unique_lock<Mutex>;
|
|
534
|
+
|
|
535
|
+
template <typename Mutex, typename LockFn = ::folly::access::lock_shared_fn>
|
|
536
|
+
shared_lock(Mutex&, adopt_lock_t, invoke_result_t<LockFn, Mutex&> const&)
|
|
537
|
+
-> shared_lock<Mutex>;
|
|
538
|
+
|
|
539
|
+
template <typename Mutex, typename LockFn = ::folly::access::lock_upgrade_fn>
|
|
540
|
+
lock_guard(Mutex&, adopt_lock_t, invoke_result_t<LockFn, Mutex&> const&)
|
|
541
|
+
-> lock_guard<Mutex>;
|
|
542
|
+
|
|
543
|
+
FOLLY_NAMESPACE_STD_END
|
|
544
|
+
|
|
545
|
+
namespace folly {
|
|
546
|
+
|
|
547
|
+
namespace detail {
|
|
548
|
+
|
|
549
|
+
template <typename L>
|
|
550
|
+
using lock_state_type_of_t_ = typename L::state_type;
|
|
551
|
+
template <typename L>
|
|
552
|
+
using lock_state_type_of_t = detected_or_t<void, lock_state_type_of_t_, L>;
|
|
553
|
+
|
|
554
|
+
template <typename State>
|
|
555
|
+
struct transition_lock_result_ {
|
|
556
|
+
template <typename Transition, typename Mutex, typename... A>
|
|
557
|
+
using apply = invoke_result_t<Transition, Mutex&, State const&, A const&...>;
|
|
558
|
+
};
|
|
559
|
+
template <>
|
|
560
|
+
struct transition_lock_result_<void> {
|
|
561
|
+
template <typename Transition, typename Mutex, typename... A>
|
|
562
|
+
using apply = invoke_result_t<Transition, Mutex&, A const&...>;
|
|
563
|
+
};
|
|
564
|
+
template <typename From, typename Transition, typename... A>
|
|
565
|
+
using transition_lock_result_t_ =
|
|
566
|
+
typename transition_lock_result_<lock_state_type_of_t<From>>::
|
|
567
|
+
template apply<Transition, typename From::mutex_type&, A...>;
|
|
568
|
+
|
|
569
|
+
template <typename From, typename Transition, typename... A>
|
|
570
|
+
auto transition_lock_2_(From& lock, Transition transition, A const&... a) {
|
|
571
|
+
using FromState = lock_state_type_of_t<From>;
|
|
572
|
+
if constexpr (std::is_void_v<FromState>) {
|
|
573
|
+
// release() may check or mutate mutex state to support the dissociation;
|
|
574
|
+
// call it before performing the transition.
|
|
575
|
+
return transition(*lock.release(), a...);
|
|
576
|
+
} else {
|
|
577
|
+
auto state = lock.state();
|
|
578
|
+
// release() may check or mutate mutex state to support the dissociation;
|
|
579
|
+
// call it before performing the transition.
|
|
580
|
+
return transition(*lock.release(), std::move(state), a...);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
template <typename From, typename Transition, typename... A>
|
|
584
|
+
auto transition_lock_1_(From& lock, Transition transition, A const&... a) {
|
|
585
|
+
using Result = transition_lock_result_t_<From, Transition, A...>;
|
|
586
|
+
if constexpr (std::is_void_v<Result>) {
|
|
587
|
+
return detail::transition_lock_2_(lock, transition, a...), true;
|
|
588
|
+
} else {
|
|
589
|
+
return detail::transition_lock_2_(lock, transition, a...);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
template <typename To, typename From, typename Transition, typename... A>
|
|
593
|
+
auto transition_lock_0_(From& lock, Transition transition, A const&... a) {
|
|
594
|
+
using ToState = lock_state_type_of_t<To>;
|
|
595
|
+
auto& mutex = *lock.mutex();
|
|
596
|
+
auto s = detail::transition_lock_1_(lock, transition, a...);
|
|
597
|
+
if constexpr (std::is_void_v<ToState>) {
|
|
598
|
+
return !s ? To{} : To{mutex, std::adopt_lock};
|
|
599
|
+
} else {
|
|
600
|
+
return !s ? To{} : To{mutex, std::adopt_lock, s};
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
template <
|
|
604
|
+
template <typename>
|
|
605
|
+
class To,
|
|
606
|
+
template <typename>
|
|
607
|
+
class From,
|
|
608
|
+
typename Mutex,
|
|
609
|
+
typename Transition,
|
|
610
|
+
typename... A>
|
|
611
|
+
auto transition_lock_(From<Mutex>& lock, Transition transition, A const&... a) {
|
|
612
|
+
// clang-format off
|
|
613
|
+
return
|
|
614
|
+
!lock.mutex() ? To<Mutex>{} :
|
|
615
|
+
!lock.owns_lock() ? To<Mutex>{*lock.release(), std::defer_lock} :
|
|
616
|
+
detail::transition_lock_0_<To<Mutex>>(lock, transition, a...);
|
|
617
|
+
// clang-format on
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
template <typename, typename>
|
|
621
|
+
struct transition_lock_policy;
|
|
622
|
+
|
|
623
|
+
template <typename Mutex>
|
|
624
|
+
struct transition_lock_policy<unique_lock<Mutex>, shared_lock<Mutex>> {
|
|
625
|
+
using transition_fn = access::unlock_and_lock_shared_fn;
|
|
626
|
+
};
|
|
627
|
+
template <typename Mutex>
|
|
628
|
+
struct transition_lock_policy<unique_lock<Mutex>, upgrade_lock<Mutex>> {
|
|
629
|
+
using transition_fn = access::unlock_and_lock_upgrade_fn;
|
|
630
|
+
};
|
|
631
|
+
template <typename Mutex>
|
|
632
|
+
struct transition_lock_policy<shared_lock<Mutex>, unique_lock<Mutex>> {
|
|
633
|
+
using try_transition_fn = access::try_unlock_shared_and_lock_fn;
|
|
634
|
+
using try_transition_for_fn = access::try_unlock_shared_and_lock_for_fn;
|
|
635
|
+
using try_transition_until_fn = access::try_unlock_shared_and_lock_until_fn;
|
|
636
|
+
};
|
|
637
|
+
template <typename Mutex>
|
|
638
|
+
struct transition_lock_policy<shared_lock<Mutex>, upgrade_lock<Mutex>> {
|
|
639
|
+
using try_transition_fn = access::try_unlock_shared_and_lock_upgrade_fn;
|
|
640
|
+
using try_transition_for_fn =
|
|
641
|
+
access::try_unlock_shared_and_lock_upgrade_for_fn;
|
|
642
|
+
using try_transition_until_fn =
|
|
643
|
+
access::try_unlock_shared_and_lock_upgrade_until_fn;
|
|
644
|
+
};
|
|
645
|
+
template <typename Mutex>
|
|
646
|
+
struct transition_lock_policy<upgrade_lock<Mutex>, unique_lock<Mutex>> {
|
|
647
|
+
using transition_fn = access::unlock_upgrade_and_lock_fn;
|
|
648
|
+
using try_transition_fn = access::try_unlock_upgrade_and_lock_fn;
|
|
649
|
+
using try_transition_for_fn = access::try_unlock_upgrade_and_lock_for_fn;
|
|
650
|
+
using try_transition_until_fn = access::try_unlock_upgrade_and_lock_until_fn;
|
|
651
|
+
};
|
|
652
|
+
template <typename Mutex>
|
|
653
|
+
struct transition_lock_policy<upgrade_lock<Mutex>, shared_lock<Mutex>> {
|
|
654
|
+
using transition_fn = access::unlock_upgrade_and_lock_shared_fn;
|
|
655
|
+
};
|
|
656
|
+
|
|
657
|
+
} // namespace detail
|
|
658
|
+
|
|
659
|
+
// transition_lock
|
|
660
|
+
//
|
|
661
|
+
// Represents an atomic transition from the from-lock to the to-lock. Waits
|
|
662
|
+
// unboundedly for the transition to become available.
|
|
663
|
+
template <
|
|
664
|
+
template <typename>
|
|
665
|
+
class ToLock,
|
|
666
|
+
typename Mutex,
|
|
667
|
+
template <typename>
|
|
668
|
+
class FromLock>
|
|
669
|
+
ToLock<Mutex> transition_lock(FromLock<Mutex>& lock) {
|
|
670
|
+
using policy = detail::transition_lock_policy<FromLock<Mutex>, ToLock<Mutex>>;
|
|
671
|
+
auto _ = typename policy::transition_fn{};
|
|
672
|
+
return detail::transition_lock_<ToLock>(lock, _);
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
// try_transition_lock
|
|
676
|
+
//
|
|
677
|
+
// Represents an atomic transition attempt from the from-lock to the to-lock.
|
|
678
|
+
// Does not wait if the transition is not immediately available.
|
|
679
|
+
template <
|
|
680
|
+
template <typename>
|
|
681
|
+
class ToLock,
|
|
682
|
+
typename Mutex,
|
|
683
|
+
template <typename>
|
|
684
|
+
class FromLock>
|
|
685
|
+
ToLock<Mutex> try_transition_lock(FromLock<Mutex>& lock) {
|
|
686
|
+
using policy = detail::transition_lock_policy<FromLock<Mutex>, ToLock<Mutex>>;
|
|
687
|
+
auto _ = typename policy::try_transition_fn{};
|
|
688
|
+
return detail::transition_lock_<ToLock>(lock, _);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
// try_transition_lock_for
|
|
692
|
+
//
|
|
693
|
+
// Represents an atomic transition attempt from the from-lock to the to-lock
|
|
694
|
+
// bounded by a timeout. Waits up to the timeout for the transition to become
|
|
695
|
+
// available.
|
|
696
|
+
template <
|
|
697
|
+
template <typename>
|
|
698
|
+
class ToLock,
|
|
699
|
+
typename Mutex,
|
|
700
|
+
template <typename>
|
|
701
|
+
class FromLock,
|
|
702
|
+
typename Rep,
|
|
703
|
+
typename Period>
|
|
704
|
+
ToLock<Mutex> try_transition_lock_for(
|
|
705
|
+
FromLock<Mutex>& lock, std::chrono::duration<Rep, Period> const& timeout) {
|
|
706
|
+
using policy = detail::transition_lock_policy<FromLock<Mutex>, ToLock<Mutex>>;
|
|
707
|
+
auto _ = typename policy::try_transition_for_fn{};
|
|
708
|
+
return detail::transition_lock_<ToLock>(lock, _, timeout);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
// try_transition_lock_until
|
|
712
|
+
//
|
|
713
|
+
// Represents an atomic transition attempt from the from-lock to the to-lock
|
|
714
|
+
// bounded by a deadline. Waits up to the deadline for the transition to become
|
|
715
|
+
// available.
|
|
716
|
+
template <
|
|
717
|
+
template <typename>
|
|
718
|
+
class ToLock,
|
|
719
|
+
typename Mutex,
|
|
720
|
+
template <typename>
|
|
721
|
+
class FromLock,
|
|
722
|
+
typename Clock,
|
|
723
|
+
typename Duration>
|
|
724
|
+
ToLock<Mutex> try_transition_lock_until(
|
|
725
|
+
FromLock<Mutex>& lock,
|
|
726
|
+
std::chrono::time_point<Clock, Duration> const& deadline) {
|
|
727
|
+
using policy = detail::transition_lock_policy<FromLock<Mutex>, ToLock<Mutex>>;
|
|
728
|
+
auto _ = typename policy::try_transition_until_fn{};
|
|
729
|
+
return detail::transition_lock_<ToLock>(lock, _, deadline);
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
// transition_to_shared_lock(unique_lock)
|
|
733
|
+
//
|
|
734
|
+
// Wraps mutex member function unlock_and_lock_shared.
|
|
735
|
+
//
|
|
736
|
+
// Represents an immediate atomic downgrade transition from exclusive lock to
|
|
737
|
+
// to shared lock.
|
|
738
|
+
template <typename Mutex>
|
|
739
|
+
shared_lock<Mutex> transition_to_shared_lock(unique_lock<Mutex>& lock) {
|
|
740
|
+
return transition_lock<shared_lock>(lock);
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
// transition_to_shared_lock(upgrade_lock)
|
|
744
|
+
//
|
|
745
|
+
// Wraps mutex member function unlock_upgrade_and_lock_shared.
|
|
746
|
+
//
|
|
747
|
+
// Represents an immediate atomic downgrade transition from upgrade lock to
|
|
748
|
+
// shared lock.
|
|
749
|
+
template <typename Mutex>
|
|
750
|
+
shared_lock<Mutex> transition_to_shared_lock(upgrade_lock<Mutex>& lock) {
|
|
751
|
+
return transition_lock<shared_lock>(lock);
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
// transition_to_upgrade_lock(unique_lock)
|
|
755
|
+
//
|
|
756
|
+
// Wraps mutex member function unlock_and_lock_upgrade.
|
|
757
|
+
//
|
|
758
|
+
// Represents an immediate atomic downgrade transition from unique lock to
|
|
759
|
+
// upgrade lock.
|
|
760
|
+
template <typename Mutex>
|
|
761
|
+
upgrade_lock<Mutex> transition_to_upgrade_lock(unique_lock<Mutex>& lock) {
|
|
762
|
+
return transition_lock<upgrade_lock>(lock);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
// transition_to_unique_lock(upgrade_lock)
|
|
766
|
+
//
|
|
767
|
+
// Wraps mutex member function unlock_upgrade_and_lock.
|
|
768
|
+
//
|
|
769
|
+
// Represents an eventual atomic upgrade transition from upgrade lock to unique
|
|
770
|
+
// lock.
|
|
771
|
+
template <typename Mutex>
|
|
772
|
+
unique_lock<Mutex> transition_to_unique_lock(upgrade_lock<Mutex>& lock) {
|
|
773
|
+
return transition_lock<unique_lock>(lock);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
// try_transition_to_unique_lock(upgrade_lock)
|
|
777
|
+
//
|
|
778
|
+
// Wraps mutex member function try_unlock_upgrade_and_lock.
|
|
779
|
+
//
|
|
780
|
+
// Represents an immediate attempted atomic upgrade transition from upgrade
|
|
781
|
+
// lock to unique lock.
|
|
782
|
+
template <typename Mutex>
|
|
783
|
+
unique_lock<Mutex> try_transition_to_unique_lock(upgrade_lock<Mutex>& lock) {
|
|
784
|
+
return transition_lock<unique_lock>(lock);
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
// try_transition_to_unique_lock_for(upgrade_lock)
|
|
788
|
+
//
|
|
789
|
+
// Wraps mutex member function try_unlock_upgrade_and_lock_for.
|
|
790
|
+
//
|
|
791
|
+
// Represents an eventual attempted atomic upgrade transition from upgrade
|
|
792
|
+
// lock to unique lock.
|
|
793
|
+
template <typename Mutex, typename Rep, typename Period>
|
|
794
|
+
unique_lock<Mutex> try_transition_to_unique_lock_for(
|
|
795
|
+
upgrade_lock<Mutex>& lock,
|
|
796
|
+
std::chrono::duration<Rep, Period> const& timeout) {
|
|
797
|
+
return try_transition_lock_for<unique_lock>(lock, timeout);
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
// try_transition_to_unique_lock_until(upgrade_lock)
|
|
801
|
+
//
|
|
802
|
+
// Wraps mutex member function try_unlock_upgrade_and_lock_until.
|
|
803
|
+
//
|
|
804
|
+
// Represents an eventual attempted atomic upgrade transition from upgrade
|
|
805
|
+
// lock to unique lock.
|
|
806
|
+
template <typename Mutex, typename Clock, typename Duration>
|
|
807
|
+
unique_lock<Mutex> try_transition_to_unique_lock_until(
|
|
808
|
+
upgrade_lock<Mutex>& lock,
|
|
809
|
+
std::chrono::time_point<Clock, Duration> const& deadline) {
|
|
810
|
+
return try_transition_lock_until<unique_lock>(lock, deadline);
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
// try_transition_to_unique_lock(shared_lock)
|
|
814
|
+
//
|
|
815
|
+
// Wraps mutex member function try_unlock_shared_and_lock.
|
|
816
|
+
//
|
|
817
|
+
// Represents an immediate attempted atomic upgrade transition from shared
|
|
818
|
+
// lock to unique lock.
|
|
819
|
+
template <typename Mutex>
|
|
820
|
+
unique_lock<Mutex> try_transition_to_unique_lock(shared_lock<Mutex>& lock) {
|
|
821
|
+
return try_transition_lock<unique_lock>(lock);
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
// try_transition_to_unique_lock_for(shared_lock)
|
|
825
|
+
//
|
|
826
|
+
// Wraps mutex member function try_unlock_shared_and_lock_for.
|
|
827
|
+
//
|
|
828
|
+
// Represents an eventual attempted atomic upgrade transition from shared
|
|
829
|
+
// lock to unique lock.
|
|
830
|
+
template <typename Mutex, typename Rep, typename Period>
|
|
831
|
+
unique_lock<Mutex> try_transition_to_unique_lock_for(
|
|
832
|
+
shared_lock<Mutex>& lock,
|
|
833
|
+
std::chrono::duration<Rep, Period> const& timeout) {
|
|
834
|
+
return try_transition_lock_for<unique_lock>(lock, timeout);
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
// try_transition_to_unique_lock_until(shared_lock)
|
|
838
|
+
//
|
|
839
|
+
// Wraps mutex member function try_unlock_shared_and_lock_until.
|
|
840
|
+
//
|
|
841
|
+
// Represents an eventual attempted atomic upgrade transition from shared
|
|
842
|
+
// lock to unique lock.
|
|
843
|
+
template <typename Mutex, typename Clock, typename Duration>
|
|
844
|
+
unique_lock<Mutex> try_transition_to_unique_lock_until(
|
|
845
|
+
shared_lock<Mutex>& lock,
|
|
846
|
+
std::chrono::time_point<Clock, Duration> const& deadline) {
|
|
847
|
+
return try_transition_lock_until<unique_lock>(lock, deadline);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
// try_transition_to_upgrade_lock(shared_lock)
|
|
851
|
+
//
|
|
852
|
+
// Wraps mutex member function try_unlock_shared_and_lock_upgrade.
|
|
853
|
+
//
|
|
854
|
+
// Represents an immediate attempted atomic upgrade transition from shared
|
|
855
|
+
// lock to upgrade lock.
|
|
856
|
+
template <typename Mutex>
|
|
857
|
+
upgrade_lock<Mutex> try_transition_to_upgrade_lock(shared_lock<Mutex>& lock) {
|
|
858
|
+
return try_transition_lock<upgrade_lock>(lock);
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
// try_transition_to_upgrade_lock_for(shared_lock)
|
|
862
|
+
//
|
|
863
|
+
// Wraps mutex member function try_unlock_shared_and_lock_upgrade_for.
|
|
864
|
+
//
|
|
865
|
+
// Represents an eventual attempted atomic upgrade transition from shared
|
|
866
|
+
// lock to upgrade lock.
|
|
867
|
+
template <typename Mutex, typename Rep, typename Period>
|
|
868
|
+
upgrade_lock<Mutex> try_transition_to_upgrade_lock_for(
|
|
869
|
+
shared_lock<Mutex>& lock,
|
|
870
|
+
std::chrono::duration<Rep, Period> const& timeout) {
|
|
871
|
+
return try_transition_lock_for<upgrade_lock>(lock, timeout);
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
// try_transition_to_upgrade_lock_until(shared_lock)
|
|
875
|
+
//
|
|
876
|
+
// Wraps mutex member function try_unlock_shared_and_lock_upgrade_until.
|
|
877
|
+
//
|
|
878
|
+
// Represents an eventual attempted atomic upgrade transition from shared
|
|
879
|
+
// lock to upgrade lock.
|
|
880
|
+
template <typename Mutex, typename Clock, typename Duration>
|
|
881
|
+
upgrade_lock<Mutex> try_transition_to_upgrade_lock_until(
|
|
882
|
+
shared_lock<Mutex>& lock,
|
|
883
|
+
std::chrono::time_point<Clock, Duration> const& deadline) {
|
|
884
|
+
return try_transition_lock_until<upgrade_lock>(lock, deadline);
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
} // namespace folly
|