react-native-windows 0.84.0-preview.9 → 0.84.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/unicode.cpp +36 -0
- package/Common/unicode.h +8 -0
- package/Directory.Build.props +2 -17
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +5 -0
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +91 -23
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +11 -0
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +6 -4
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +28 -6
- package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +80 -0
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.h +17 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +1 -1
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +4 -9
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +33 -25
- package/Microsoft.ReactNative/Utils/LocalBundleReader.h +5 -3
- package/Microsoft.ReactNative/Utils/UwpScriptStore.cpp +2 -2
- package/Microsoft.ReactNative/Utils/UwpScriptStore.h +3 -2
- package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +3 -3
- package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +10 -10
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml +1 -1
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml +1 -1
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +10 -1
- package/PropertySheets/React.Cpp.props +7 -6
- package/PropertySheets/WinUI.props +2 -2
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/JustMyXaml.ps1 +8 -8
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/UnitTest.ps1 +3 -1
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +5 -8
- package/Scripts/creaternwlib.cmd +10 -23
- package/Scripts/rnw-dependencies.ps1 +15 -16
- package/Shared/DevSupportManager.cpp +55 -48
- package/Shared/DevSupportManager.h +0 -1
- package/Shared/Modules/IWebSocketModuleContentHandler.h +15 -0
- package/Shared/Modules/WebSocketModule.cpp +8 -3
- package/Shared/Networking/DefaultBlobResource.cpp +37 -0
- package/Shared/Networking/DefaultBlobResource.h +12 -0
- package/Shared/Networking/WinRTWebSocketResource.h +5 -1
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/external/fmt/include/fmt/base.h +3077 -0
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/{fmt → external/folly/folly}/.clang-format +0 -1
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/external/folly/folly/hash/SpookyHashV2.h +339 -0
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/just-task.js +13 -2
- package/package.json +7 -7
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +1 -1
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/example/metro.config.js +30 -4
- package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +1 -1
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -378
- package/Folly/Folly.vcxproj.filters +0 -558
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{fmt → external/fmt}/cgmanifest.json +0 -0
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <atomic>
|
|
20
|
+
#include <cassert>
|
|
21
|
+
#include <cstdint>
|
|
22
|
+
#include <tuple>
|
|
23
|
+
#include <type_traits>
|
|
24
|
+
|
|
25
|
+
#include <folly/ConstexprMath.h>
|
|
26
|
+
#include <folly/Likely.h>
|
|
27
|
+
|
|
28
|
+
#ifdef _WIN32
|
|
29
|
+
#include <intrin.h>
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
namespace folly {
|
|
33
|
+
|
|
34
|
+
template <typename T>
|
|
35
|
+
class atomic_ref;
|
|
36
|
+
|
|
37
|
+
namespace detail {
|
|
38
|
+
|
|
39
|
+
constexpr std::memory_order atomic_compare_exchange_succ(
|
|
40
|
+
bool cond, std::memory_order succ, std::memory_order fail) {
|
|
41
|
+
constexpr auto const relaxed = std::memory_order_relaxed;
|
|
42
|
+
constexpr auto const release = std::memory_order_release;
|
|
43
|
+
constexpr auto const acq_rel = std::memory_order_acq_rel;
|
|
44
|
+
|
|
45
|
+
assert(fail != release);
|
|
46
|
+
assert(fail != acq_rel);
|
|
47
|
+
|
|
48
|
+
auto const bump = succ == release ? acq_rel : succ;
|
|
49
|
+
auto const high = fail < bump ? bump : fail;
|
|
50
|
+
return !cond || fail == relaxed ? succ : high;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// atomic_compare_exchange_succ
|
|
54
|
+
//
|
|
55
|
+
// Return a success order with, conditionally, the failure order mixed in.
|
|
56
|
+
//
|
|
57
|
+
// Until C++17, atomic compare-exchange operations require the success order to
|
|
58
|
+
// be at least as strong as the failure order. C++17 drops this requirement. As
|
|
59
|
+
// an implication, were this rule in force, an implementation is free to ignore
|
|
60
|
+
// the explicit failure order and to infer one from the success order.
|
|
61
|
+
//
|
|
62
|
+
// https://en.cppreference.com/w/cpp/atomic/atomic/compare_exchange
|
|
63
|
+
//
|
|
64
|
+
// The libstdc++ library with assertions enabled enforces this rule, including
|
|
65
|
+
// under C++17, but only until and not since libstdc++12.
|
|
66
|
+
//
|
|
67
|
+
// https://github.com/gcc-mirror/gcc/commit/dba1ab212292839572fda60df00965e094a11252
|
|
68
|
+
//
|
|
69
|
+
// Clang TSAN ignores the passed failure order and infers failure order from
|
|
70
|
+
// success order in atomic compare-exchange operations, which is broken for
|
|
71
|
+
// cases like success-release/failure-acquire.
|
|
72
|
+
//
|
|
73
|
+
// https://github.com/google/sanitizers/issues/970
|
|
74
|
+
//
|
|
75
|
+
// All GCC sanitizers statically check the memory-orders passed to compare-
|
|
76
|
+
// exchange operations for correctness and report violations with the warning
|
|
77
|
+
// invalid-memory-model; but, up to the current version (gcc-13), they use the
|
|
78
|
+
// C++14 rule, which is broken for cases like success-relaxed/failure-acquire.
|
|
79
|
+
//
|
|
80
|
+
// https://godbolt.org/z/3hjjdGzMv
|
|
81
|
+
//
|
|
82
|
+
// Handle all of these cases.
|
|
83
|
+
constexpr std::memory_order atomic_compare_exchange_succ(
|
|
84
|
+
std::memory_order succ, std::memory_order fail) {
|
|
85
|
+
constexpr auto const cond = false //
|
|
86
|
+
|| (kGlibcxxVer && kGlibcxxVer < 12 && kGlibcxxAssertions) //
|
|
87
|
+
|| (kIsSanitizeThread && kIsClang) //
|
|
88
|
+
|| (kIsSanitize && !kIsClang && kGnuc) //
|
|
89
|
+
;
|
|
90
|
+
return atomic_compare_exchange_succ(cond, succ, fail);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
} // namespace detail
|
|
94
|
+
|
|
95
|
+
template <template <typename> class Atom, typename T>
|
|
96
|
+
bool atomic_compare_exchange_weak_explicit(
|
|
97
|
+
Atom<T>* obj,
|
|
98
|
+
type_t<T>* expected,
|
|
99
|
+
type_t<T> desired,
|
|
100
|
+
std::memory_order succ,
|
|
101
|
+
std::memory_order fail) {
|
|
102
|
+
succ = detail::atomic_compare_exchange_succ(succ, fail);
|
|
103
|
+
return obj->compare_exchange_weak(*expected, desired, succ, fail);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
template <template <typename> class Atom, typename T>
|
|
107
|
+
bool atomic_compare_exchange_strong_explicit(
|
|
108
|
+
Atom<T>* obj,
|
|
109
|
+
type_t<T>* expected,
|
|
110
|
+
type_t<T> desired,
|
|
111
|
+
std::memory_order succ,
|
|
112
|
+
std::memory_order fail) {
|
|
113
|
+
succ = detail::atomic_compare_exchange_succ(succ, fail);
|
|
114
|
+
return obj->compare_exchange_strong(*expected, desired, succ, fail);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
namespace detail {
|
|
118
|
+
|
|
119
|
+
// TODO: Remove the non-default implementations when both gcc and clang
|
|
120
|
+
// can recognize single bit set/reset patterns and compile them down to locked
|
|
121
|
+
// bts and btr instructions.
|
|
122
|
+
//
|
|
123
|
+
// Currently, at the time of writing it seems like gcc7 and greater can make
|
|
124
|
+
// this optimization and clang cannot - https://gcc.godbolt.org/z/Q83rxX
|
|
125
|
+
|
|
126
|
+
struct atomic_fetch_set_fallback_fn {
|
|
127
|
+
template <typename Atomic>
|
|
128
|
+
bool operator()(
|
|
129
|
+
Atomic& atomic, std::size_t bit, std::memory_order order) const {
|
|
130
|
+
using Integer = decltype(atomic.load());
|
|
131
|
+
auto mask = Integer(Integer{0b1} << bit);
|
|
132
|
+
return (atomic.fetch_or(mask, order) & mask);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
inline constexpr atomic_fetch_set_fallback_fn atomic_fetch_set_fallback{};
|
|
136
|
+
|
|
137
|
+
struct atomic_fetch_reset_fallback_fn {
|
|
138
|
+
template <typename Atomic>
|
|
139
|
+
bool operator()(
|
|
140
|
+
Atomic& atomic, std::size_t bit, std::memory_order order) const {
|
|
141
|
+
using Integer = decltype(atomic.load());
|
|
142
|
+
auto mask = Integer(Integer{0b1} << bit);
|
|
143
|
+
return (atomic.fetch_and(Integer(~mask), order) & mask);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
inline constexpr atomic_fetch_reset_fallback_fn atomic_fetch_reset_fallback{};
|
|
147
|
+
|
|
148
|
+
struct atomic_fetch_flip_fallback_fn {
|
|
149
|
+
template <typename Atomic>
|
|
150
|
+
bool operator()(
|
|
151
|
+
Atomic& atomic, std::size_t bit, std::memory_order order) const {
|
|
152
|
+
using Integer = decltype(atomic.load());
|
|
153
|
+
auto mask = Integer(Integer{0b1} << bit);
|
|
154
|
+
return (atomic.fetch_xor(mask, order) & mask);
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
inline constexpr atomic_fetch_flip_fallback_fn atomic_fetch_flip_fallback{};
|
|
158
|
+
|
|
159
|
+
#if FOLLY_X64
|
|
160
|
+
|
|
161
|
+
#if defined(_MSC_VER)
|
|
162
|
+
|
|
163
|
+
template <typename Integer>
|
|
164
|
+
inline bool atomic_fetch_set_native(
|
|
165
|
+
std::atomic<Integer>& atomic, std::size_t bit, std::memory_order order) {
|
|
166
|
+
static_assert(alignof(std::atomic<Integer>) == alignof(Integer), "");
|
|
167
|
+
static_assert(sizeof(std::atomic<Integer>) == sizeof(Integer), "");
|
|
168
|
+
assert(atomic.is_lock_free());
|
|
169
|
+
|
|
170
|
+
if /* constexpr */ (sizeof(Integer) == 4) {
|
|
171
|
+
return _interlockedbittestandset(
|
|
172
|
+
reinterpret_cast<volatile long*>(&atomic), static_cast<long>(bit));
|
|
173
|
+
} else if /* constexpr */ (sizeof(Integer) == 8) {
|
|
174
|
+
return _interlockedbittestandset64(
|
|
175
|
+
reinterpret_cast<volatile long long*>(&atomic),
|
|
176
|
+
static_cast<long long>(bit));
|
|
177
|
+
} else {
|
|
178
|
+
assert(sizeof(Integer) != 4 && sizeof(Integer) != 8);
|
|
179
|
+
return atomic_fetch_set_fallback(atomic, bit, order);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
template <typename Atomic>
|
|
184
|
+
inline bool atomic_fetch_set_native(
|
|
185
|
+
Atomic& atomic, std::size_t bit, std::memory_order order) {
|
|
186
|
+
static_assert(!std::is_same<Atomic, std::atomic<std::uint32_t>>{}, "");
|
|
187
|
+
static_assert(!std::is_same<Atomic, std::atomic<std::uint64_t>>{}, "");
|
|
188
|
+
return atomic_fetch_set_fallback(atomic, bit, order);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
template <typename Integer>
|
|
192
|
+
inline bool atomic_fetch_reset_native(
|
|
193
|
+
std::atomic<Integer>& atomic, std::size_t bit, std::memory_order order) {
|
|
194
|
+
static_assert(alignof(std::atomic<Integer>) == alignof(Integer), "");
|
|
195
|
+
static_assert(sizeof(std::atomic<Integer>) == sizeof(Integer), "");
|
|
196
|
+
assert(atomic.is_lock_free());
|
|
197
|
+
|
|
198
|
+
if /* constexpr */ (sizeof(Integer) == 4) {
|
|
199
|
+
return _interlockedbittestandreset(
|
|
200
|
+
reinterpret_cast<volatile long*>(&atomic), static_cast<long>(bit));
|
|
201
|
+
} else if /* constexpr */ (sizeof(Integer) == 8) {
|
|
202
|
+
return _interlockedbittestandreset64(
|
|
203
|
+
reinterpret_cast<volatile long long*>(&atomic),
|
|
204
|
+
static_cast<long long>(bit));
|
|
205
|
+
} else {
|
|
206
|
+
assert(sizeof(Integer) != 4 && sizeof(Integer) != 8);
|
|
207
|
+
return atomic_fetch_reset_fallback(atomic, bit, order);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
template <typename Atomic>
|
|
212
|
+
inline bool atomic_fetch_reset_native(
|
|
213
|
+
Atomic& atomic, std::size_t bit, std::memory_order mo) {
|
|
214
|
+
static_assert(!std::is_same<Atomic, std::atomic<std::uint32_t>>{}, "");
|
|
215
|
+
static_assert(!std::is_same<Atomic, std::atomic<std::uint64_t>>{}, "");
|
|
216
|
+
return atomic_fetch_reset_fallback(atomic, bit, mo);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
template <typename Atomic>
|
|
220
|
+
inline bool atomic_fetch_flip_native(
|
|
221
|
+
Atomic& atomic, std::size_t bit, std::memory_order mo) {
|
|
222
|
+
return atomic_fetch_flip_fallback(atomic, bit, mo);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
#else
|
|
226
|
+
|
|
227
|
+
enum class atomic_fetch_bit_op_native_instr_mnem { bts, btr, btc };
|
|
228
|
+
enum class atomic_fetch_bit_op_native_instr_suff { w, l, q };
|
|
229
|
+
|
|
230
|
+
#define FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(mnem, suff) \
|
|
231
|
+
if constexpr ( \
|
|
232
|
+
Instr == mnem_t::mnem && sizeof(Int) == 1 << (int(suff_t::suff) + 1)) { \
|
|
233
|
+
if (order == ::std::memory_order_relaxed) { \
|
|
234
|
+
asm("lock " #mnem #suff " %[bit], %[ptr]" \
|
|
235
|
+
: "=@ccc"(out), [ptr] "+m"(*ptr) \
|
|
236
|
+
: [bit] "ri"(bit)); \
|
|
237
|
+
} else { \
|
|
238
|
+
asm volatile("lock " #mnem #suff " %[bit], (%[ptr])" \
|
|
239
|
+
: "=@ccc"(out) \
|
|
240
|
+
: [bit] "ri"(bit), [ptr] "r"(ptr) \
|
|
241
|
+
: "memory"); \
|
|
242
|
+
} \
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
template <atomic_fetch_bit_op_native_instr_mnem Instr>
|
|
246
|
+
struct atomic_fetch_bit_op_native_do_instr_fn {
|
|
247
|
+
template <typename Int>
|
|
248
|
+
FOLLY_ERASE bool operator()(
|
|
249
|
+
Int* ptr, Int bit, std::memory_order order) const {
|
|
250
|
+
using mnem_t = atomic_fetch_bit_op_native_instr_mnem;
|
|
251
|
+
using suff_t = atomic_fetch_bit_op_native_instr_suff;
|
|
252
|
+
bool out = false;
|
|
253
|
+
FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(bts, w)
|
|
254
|
+
FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(bts, l)
|
|
255
|
+
FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(bts, q)
|
|
256
|
+
FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(btr, w)
|
|
257
|
+
FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(btr, l)
|
|
258
|
+
FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(btr, q)
|
|
259
|
+
FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(btc, w)
|
|
260
|
+
FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(btc, l)
|
|
261
|
+
FOLLY_DETAIL_ATOMIC_BIT_OP_ONE(btc, q)
|
|
262
|
+
return out;
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
template <atomic_fetch_bit_op_native_instr_mnem Instr>
|
|
266
|
+
inline constexpr atomic_fetch_bit_op_native_do_instr_fn<Instr>
|
|
267
|
+
atomic_fetch_bit_op_native_do_instr{};
|
|
268
|
+
|
|
269
|
+
static constexpr auto& atomic_fetch_bit_op_native_bts =
|
|
270
|
+
atomic_fetch_bit_op_native_do_instr<
|
|
271
|
+
atomic_fetch_bit_op_native_instr_mnem::bts>;
|
|
272
|
+
static constexpr auto& atomic_fetch_bit_op_native_btr =
|
|
273
|
+
atomic_fetch_bit_op_native_do_instr<
|
|
274
|
+
atomic_fetch_bit_op_native_instr_mnem::btr>;
|
|
275
|
+
static constexpr auto& atomic_fetch_bit_op_native_btc =
|
|
276
|
+
atomic_fetch_bit_op_native_do_instr<
|
|
277
|
+
atomic_fetch_bit_op_native_instr_mnem::btc>;
|
|
278
|
+
|
|
279
|
+
#undef FOLLY_DETAIL_ATOMIC_BIT_OP_ONE
|
|
280
|
+
|
|
281
|
+
template <typename Integer, typename Op, typename Fb>
|
|
282
|
+
FOLLY_ERASE bool atomic_fetch_bit_op_native_(
|
|
283
|
+
std::atomic<Integer>& atomic,
|
|
284
|
+
std::size_t bit,
|
|
285
|
+
std::memory_order order,
|
|
286
|
+
Op op,
|
|
287
|
+
Fb fb) {
|
|
288
|
+
constexpr auto atomic_size = sizeof(Integer);
|
|
289
|
+
constexpr auto lo_size = std::size_t(2);
|
|
290
|
+
constexpr auto hi_size = std::size_t(8);
|
|
291
|
+
// some versions of TSAN do not properly instrument the inline assembly
|
|
292
|
+
if (atomic_size > hi_size || folly::kIsSanitize) {
|
|
293
|
+
return fb(atomic, bit, order);
|
|
294
|
+
}
|
|
295
|
+
auto address = reinterpret_cast<std::uintptr_t>(&atomic);
|
|
296
|
+
// there is a minimum word size - if too small, enlarge
|
|
297
|
+
constexpr auto word_size = constexpr_clamp(atomic_size, lo_size, hi_size);
|
|
298
|
+
using word_type = uint_bits_t<word_size * 8>;
|
|
299
|
+
auto adjust = std::size_t(address % lo_size);
|
|
300
|
+
// when the adjustment is not known at compile-time, the extra calculations
|
|
301
|
+
// at run time may cost more than would be saved by using the native op
|
|
302
|
+
if (!__builtin_constant_p(adjust)) {
|
|
303
|
+
return fb(atomic, bit, order);
|
|
304
|
+
}
|
|
305
|
+
address -= adjust;
|
|
306
|
+
bit += 8 * adjust;
|
|
307
|
+
return op(reinterpret_cast<word_type*>(address), word_type(bit), order);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
#if defined(__cpp_lib_atomic_ref) && __cpp_lib_atomic_ref >= 201806L
|
|
311
|
+
template <typename Integer, typename Op, typename Fb>
|
|
312
|
+
FOLLY_ERASE bool atomic_fetch_bit_op_native_(
|
|
313
|
+
std::atomic_ref<Integer>& atomic,
|
|
314
|
+
std::size_t bit,
|
|
315
|
+
std::memory_order order,
|
|
316
|
+
Op op,
|
|
317
|
+
Fb fb) {
|
|
318
|
+
if constexpr (!std::atomic_ref<Integer>::is_always_lock_free) {
|
|
319
|
+
return fb(atomic, bit, order);
|
|
320
|
+
}
|
|
321
|
+
auto& ref = **reinterpret_cast<std::atomic<Integer>**>(&atomic);
|
|
322
|
+
return atomic_fetch_bit_op_native_(ref, bit, order, op, fb);
|
|
323
|
+
}
|
|
324
|
+
#endif
|
|
325
|
+
|
|
326
|
+
template <typename Integer>
|
|
327
|
+
inline bool atomic_fetch_set_native(
|
|
328
|
+
std::atomic<Integer>& atomic, std::size_t bit, std::memory_order order) {
|
|
329
|
+
auto op = atomic_fetch_bit_op_native_bts;
|
|
330
|
+
auto fb = atomic_fetch_set_fallback;
|
|
331
|
+
return atomic_fetch_bit_op_native_(atomic, bit, order, op, fb);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
template <typename Integer>
|
|
335
|
+
inline bool atomic_fetch_set_native(
|
|
336
|
+
atomic_ref<Integer>& atomic, std::size_t bit, std::memory_order order) {
|
|
337
|
+
return atomic_fetch_set_native(atomic.atomic(), bit, order);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
#if defined(__cpp_lib_atomic_ref) && __cpp_lib_atomic_ref >= 201806L
|
|
341
|
+
template <typename Integer>
|
|
342
|
+
inline bool atomic_fetch_set_native(
|
|
343
|
+
std::atomic_ref<Integer>& atomic,
|
|
344
|
+
std::size_t bit,
|
|
345
|
+
std::memory_order order) {
|
|
346
|
+
auto op = atomic_fetch_bit_op_native_bts;
|
|
347
|
+
auto fb = atomic_fetch_set_fallback;
|
|
348
|
+
return atomic_fetch_bit_op_native_(atomic, bit, order, op, fb);
|
|
349
|
+
}
|
|
350
|
+
#endif
|
|
351
|
+
|
|
352
|
+
template <typename Atomic>
|
|
353
|
+
inline bool atomic_fetch_set_native(
|
|
354
|
+
Atomic& atomic, std::size_t bit, std::memory_order order) {
|
|
355
|
+
static_assert(!is_instantiation_of_v<std::atomic, Atomic>, "");
|
|
356
|
+
return atomic_fetch_set_fallback(atomic, bit, order);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
template <typename Integer>
|
|
360
|
+
inline bool atomic_fetch_reset_native(
|
|
361
|
+
std::atomic<Integer>& atomic, std::size_t bit, std::memory_order order) {
|
|
362
|
+
auto op = atomic_fetch_bit_op_native_btr;
|
|
363
|
+
auto fb = atomic_fetch_reset_fallback;
|
|
364
|
+
return atomic_fetch_bit_op_native_(atomic, bit, order, op, fb);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
template <typename Integer>
|
|
368
|
+
inline bool atomic_fetch_reset_native(
|
|
369
|
+
atomic_ref<Integer>& atomic, std::size_t bit, std::memory_order order) {
|
|
370
|
+
return atomic_fetch_reset_native(atomic.atomic(), bit, order);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
#if defined(__cpp_lib_atomic_ref) && __cpp_lib_atomic_ref >= 201806L
|
|
374
|
+
template <typename Integer>
|
|
375
|
+
inline bool atomic_fetch_reset_native(
|
|
376
|
+
std::atomic_ref<Integer>& atomic,
|
|
377
|
+
std::size_t bit,
|
|
378
|
+
std::memory_order order) {
|
|
379
|
+
auto op = atomic_fetch_bit_op_native_btr;
|
|
380
|
+
auto fb = atomic_fetch_reset_fallback;
|
|
381
|
+
return atomic_fetch_bit_op_native_(atomic, bit, order, op, fb);
|
|
382
|
+
}
|
|
383
|
+
#endif
|
|
384
|
+
|
|
385
|
+
template <typename Atomic>
|
|
386
|
+
bool atomic_fetch_reset_native(
|
|
387
|
+
Atomic& atomic, std::size_t bit, std::memory_order order) {
|
|
388
|
+
static_assert(!is_instantiation_of_v<std::atomic, Atomic>, "");
|
|
389
|
+
return atomic_fetch_reset_fallback(atomic, bit, order);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
template <typename Integer>
|
|
393
|
+
inline bool atomic_fetch_flip_native(
|
|
394
|
+
std::atomic<Integer>& atomic, std::size_t bit, std::memory_order order) {
|
|
395
|
+
auto op = atomic_fetch_bit_op_native_btc;
|
|
396
|
+
auto fb = atomic_fetch_flip_fallback;
|
|
397
|
+
return atomic_fetch_bit_op_native_(atomic, bit, order, op, fb);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
template <typename Integer>
|
|
401
|
+
inline bool atomic_fetch_flip_native(
|
|
402
|
+
atomic_ref<Integer>& atomic, std::size_t bit, std::memory_order order) {
|
|
403
|
+
return atomic_fetch_flip_native(atomic.atomic(), bit, order);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
#if defined(__cpp_lib_atomic_ref) && __cpp_lib_atomic_ref >= 201806L
|
|
407
|
+
template <typename Integer>
|
|
408
|
+
inline bool atomic_fetch_flip_native(
|
|
409
|
+
std::atomic_ref<Integer>& atomic,
|
|
410
|
+
std::size_t bit,
|
|
411
|
+
std::memory_order order) {
|
|
412
|
+
auto op = atomic_fetch_bit_op_native_btc;
|
|
413
|
+
auto fb = atomic_fetch_flip_fallback;
|
|
414
|
+
return atomic_fetch_bit_op_native_(atomic, bit, order, op, fb);
|
|
415
|
+
}
|
|
416
|
+
#endif
|
|
417
|
+
|
|
418
|
+
template <typename Atomic>
|
|
419
|
+
bool atomic_fetch_flip_native(
|
|
420
|
+
Atomic& atomic, std::size_t bit, std::memory_order order) {
|
|
421
|
+
static_assert(!is_instantiation_of_v<std::atomic, Atomic>, "");
|
|
422
|
+
return atomic_fetch_flip_fallback(atomic, bit, order);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
#endif
|
|
426
|
+
|
|
427
|
+
#else
|
|
428
|
+
|
|
429
|
+
using atomic_fetch_set_native_fn = detail::atomic_fetch_set_fallback_fn;
|
|
430
|
+
inline constexpr atomic_fetch_set_native_fn atomic_fetch_set_native{};
|
|
431
|
+
|
|
432
|
+
using atomic_fetch_reset_native_fn = detail::atomic_fetch_reset_fallback_fn;
|
|
433
|
+
inline constexpr atomic_fetch_reset_native_fn atomic_fetch_reset_native{};
|
|
434
|
+
|
|
435
|
+
using atomic_fetch_flip_native_fn = detail::atomic_fetch_flip_fallback_fn;
|
|
436
|
+
inline constexpr atomic_fetch_flip_native_fn atomic_fetch_flip_native{};
|
|
437
|
+
|
|
438
|
+
#endif
|
|
439
|
+
|
|
440
|
+
template <typename Atomic>
|
|
441
|
+
void atomic_fetch_bit_op_check_(Atomic& atomic, std::size_t bit) {
|
|
442
|
+
using Integer = decltype(atomic.load());
|
|
443
|
+
static_assert(std::is_unsigned<Integer>{}, "");
|
|
444
|
+
static_assert(!std::is_const<Atomic>{}, "");
|
|
445
|
+
assert(bit < (sizeof(Integer) * 8));
|
|
446
|
+
(void)bit;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
} // namespace detail
|
|
450
|
+
|
|
451
|
+
template <typename Atomic>
|
|
452
|
+
bool atomic_fetch_set_fn::operator()(
|
|
453
|
+
Atomic& atomic, std::size_t bit, std::memory_order mo) const {
|
|
454
|
+
detail::atomic_fetch_bit_op_check_(atomic, bit);
|
|
455
|
+
return detail::atomic_fetch_set_native(atomic, bit, mo);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
template <typename Atomic>
|
|
459
|
+
bool atomic_fetch_reset_fn::operator()(
|
|
460
|
+
Atomic& atomic, std::size_t bit, std::memory_order mo) const {
|
|
461
|
+
detail::atomic_fetch_bit_op_check_(atomic, bit);
|
|
462
|
+
return detail::atomic_fetch_reset_native(atomic, bit, mo);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
template <typename Atomic>
|
|
466
|
+
bool atomic_fetch_flip_fn::operator()(
|
|
467
|
+
Atomic& atomic, std::size_t bit, std::memory_order mo) const {
|
|
468
|
+
detail::atomic_fetch_bit_op_check_(atomic, bit);
|
|
469
|
+
return detail::atomic_fetch_flip_native(atomic, bit, mo);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
template <typename Atomic, typename Op>
|
|
473
|
+
atomic_value_type_t<Atomic> atomic_fetch_modify_fn::operator()(
|
|
474
|
+
Atomic& atomic, Op op, std::memory_order const mo) const {
|
|
475
|
+
auto curr = atomic.load(std::memory_order_relaxed);
|
|
476
|
+
auto const& cref = curr;
|
|
477
|
+
while (FOLLY_UNLIKELY(!atomic.compare_exchange_weak(curr, op(cref), mo)))
|
|
478
|
+
;
|
|
479
|
+
return curr;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
} // namespace folly
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <atomic>
|
|
20
|
+
#include <cstdint>
|
|
21
|
+
|
|
22
|
+
#include <folly/Portability.h>
|
|
23
|
+
#include <folly/Traits.h>
|
|
24
|
+
|
|
25
|
+
namespace folly {
|
|
26
|
+
|
|
27
|
+
namespace detail {
|
|
28
|
+
struct atomic_value_type_alias_ {
|
|
29
|
+
template <typename Atomic>
|
|
30
|
+
using apply = typename Atomic::value_type;
|
|
31
|
+
};
|
|
32
|
+
struct atomic_value_type_load_ {
|
|
33
|
+
template <typename Atomic>
|
|
34
|
+
using apply = decltype(std::declval<Atomic const&>().load());
|
|
35
|
+
};
|
|
36
|
+
} // namespace detail
|
|
37
|
+
|
|
38
|
+
// atomic_value_type_t
|
|
39
|
+
// atomic_value_type
|
|
40
|
+
//
|
|
41
|
+
// A trait type alias and type giving the effective value-type of a type which
|
|
42
|
+
// are atomic-like. Either member type alias value_type or the return type of
|
|
43
|
+
// member function load.
|
|
44
|
+
template <typename Atomic>
|
|
45
|
+
using atomic_value_type_t = typename conditional_t<
|
|
46
|
+
is_detected_v<detail::atomic_value_type_alias_::apply, Atomic>,
|
|
47
|
+
detail::atomic_value_type_alias_,
|
|
48
|
+
detail::atomic_value_type_load_>::template apply<Atomic>;
|
|
49
|
+
template <typename Atomic>
|
|
50
|
+
struct atomic_value_type {
|
|
51
|
+
using type = atomic_value_type_t<Atomic>;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// atomic_compare_exchange_weak_explicit
|
|
55
|
+
//
|
|
56
|
+
// Fix TSAN bug in std::atomic_compare_exchange_weak_explicit.
|
|
57
|
+
// Workaround for https://github.com/google/sanitizers/issues/970.
|
|
58
|
+
//
|
|
59
|
+
// mimic: std::atomic_compare_exchange_weak
|
|
60
|
+
template <template <typename> class Atom = std::atomic, typename T>
|
|
61
|
+
bool atomic_compare_exchange_weak_explicit(
|
|
62
|
+
Atom<T>* obj,
|
|
63
|
+
type_t<T>* expected,
|
|
64
|
+
type_t<T> desired,
|
|
65
|
+
std::memory_order succ,
|
|
66
|
+
std::memory_order fail);
|
|
67
|
+
|
|
68
|
+
// atomic_compare_exchange_strong_explicit
|
|
69
|
+
//
|
|
70
|
+
// Fix TSAN bug in std::atomic_compare_exchange_strong_explicit.
|
|
71
|
+
// Workaround for https://github.com/google/sanitizers/issues/970.
|
|
72
|
+
//
|
|
73
|
+
// mimic: std::atomic_compare_exchange_strong
|
|
74
|
+
template <template <typename> class Atom = std::atomic, typename T>
|
|
75
|
+
bool atomic_compare_exchange_strong_explicit(
|
|
76
|
+
Atom<T>* obj,
|
|
77
|
+
type_t<T>* expected,
|
|
78
|
+
type_t<T> desired,
|
|
79
|
+
std::memory_order succ,
|
|
80
|
+
std::memory_order fail);
|
|
81
|
+
|
|
82
|
+
// atomic_fetch_set
|
|
83
|
+
//
|
|
84
|
+
// Sets the bit at the given index in the binary representation of the integer
|
|
85
|
+
// to 1. Returns the previous value of the bit, which is equivalent to whether
|
|
86
|
+
// that bit is unchanged.
|
|
87
|
+
//
|
|
88
|
+
// Equivalent to Atomic::fetch_or with a mask. For example, if the bit
|
|
89
|
+
// argument to this function is 1, the mask passed to the corresponding
|
|
90
|
+
// Atomic::fetch_or would be 0b10.
|
|
91
|
+
//
|
|
92
|
+
// Uses an optimized implementation when available, otherwise falling back to
|
|
93
|
+
// Atomic::fetch_or with mask. The optimization is currently available for
|
|
94
|
+
// std::atomic on x86, using the bts instruction.
|
|
95
|
+
struct atomic_fetch_set_fn {
|
|
96
|
+
template <typename Atomic>
|
|
97
|
+
bool operator()(
|
|
98
|
+
Atomic& atomic,
|
|
99
|
+
std::size_t bit,
|
|
100
|
+
std::memory_order order = std::memory_order_seq_cst) const;
|
|
101
|
+
};
|
|
102
|
+
inline constexpr atomic_fetch_set_fn atomic_fetch_set{};
|
|
103
|
+
|
|
104
|
+
// atomic_fetch_reset
|
|
105
|
+
//
|
|
106
|
+
// Resets the bit at the given index in the binary representation of the
|
|
107
|
+
// integer to 0. Returns the previous value of the bit, which is equivalent to
|
|
108
|
+
// whether that bit is changed.
|
|
109
|
+
//
|
|
110
|
+
// Equivalent to Atomic::fetch_and with a mask. For example, if the bit
|
|
111
|
+
// argument to this function is 1, the mask passed to the corresponding
|
|
112
|
+
// Atomic::fetch_and would be ~0b10.
|
|
113
|
+
//
|
|
114
|
+
// Uses an optimized implementation when available, otherwise falling back to
|
|
115
|
+
// Atomic::fetch_and with mask. The optimization is currently available for
|
|
116
|
+
// std::atomic on x86, using the btr instruction.
|
|
117
|
+
struct atomic_fetch_reset_fn {
|
|
118
|
+
template <typename Atomic>
|
|
119
|
+
bool operator()(
|
|
120
|
+
Atomic& atomic,
|
|
121
|
+
std::size_t bit,
|
|
122
|
+
std::memory_order order = std::memory_order_seq_cst) const;
|
|
123
|
+
};
|
|
124
|
+
inline constexpr atomic_fetch_reset_fn atomic_fetch_reset{};
|
|
125
|
+
|
|
126
|
+
// atomic_fetch_flip
|
|
127
|
+
//
|
|
128
|
+
// Flips the bit at the given index in the binary representation of the integer
|
|
129
|
+
// from 1 to 0 or from 0 to 1. Returns the previous value of the bit.
|
|
130
|
+
//
|
|
131
|
+
// Equivalent to Atomic::fetch_xor with a mask. For example, if the bit
|
|
132
|
+
// argument to this function is 1, the mask passed to the corresponding
|
|
133
|
+
// Atomic::fetch_xor would be 0b1.
|
|
134
|
+
//
|
|
135
|
+
// Uses an optimized implementation when available, otherwise falling back to
|
|
136
|
+
// Atomic::fetch_xor with mask. The optimization is currently available for
|
|
137
|
+
// std::atomic on x86, using the btc instruction.
|
|
138
|
+
struct atomic_fetch_flip_fn {
|
|
139
|
+
template <typename Atomic>
|
|
140
|
+
bool operator()(
|
|
141
|
+
Atomic& atomic,
|
|
142
|
+
std::size_t bit,
|
|
143
|
+
std::memory_order order = std::memory_order_seq_cst) const;
|
|
144
|
+
};
|
|
145
|
+
inline constexpr atomic_fetch_flip_fn atomic_fetch_flip{};
|
|
146
|
+
|
|
147
|
+
// atomic_fetch_modify
|
|
148
|
+
//
|
|
149
|
+
// Atomically modifies the value in the atomic by loading the value, passing it
|
|
150
|
+
// to the operation op, and storing the result, but without risk of race from
|
|
151
|
+
// interleaving accesses.
|
|
152
|
+
//
|
|
153
|
+
// Example:
|
|
154
|
+
//
|
|
155
|
+
// int atomic_fetch_nonnegative(std::atomic<int>& atomic) {
|
|
156
|
+
// auto const op = [](int value) { return std::max(value, 0); };
|
|
157
|
+
// return folly::atomic_fetch_modify(x, op);
|
|
158
|
+
// }
|
|
159
|
+
//
|
|
160
|
+
// The implementation is just a c/x-loop. It is intended for use when other
|
|
161
|
+
// specialized and optimized forms of atomic-fetch-modify are inapplicable.
|
|
162
|
+
//
|
|
163
|
+
// A single call to this function will call op at least one time, but with no
|
|
164
|
+
// upper bound on the number of times. It is expected that op be free of side-
|
|
165
|
+
// effect.
|
|
166
|
+
//
|
|
167
|
+
// Does not attempt to handle ABA scenarios.
|
|
168
|
+
struct atomic_fetch_modify_fn {
|
|
169
|
+
template <typename Atomic, typename Op>
|
|
170
|
+
atomic_value_type_t<Atomic> operator()(
|
|
171
|
+
Atomic& atomic,
|
|
172
|
+
Op op,
|
|
173
|
+
std::memory_order = std::memory_order_seq_cst) const;
|
|
174
|
+
};
|
|
175
|
+
inline constexpr atomic_fetch_modify_fn atomic_fetch_modify{};
|
|
176
|
+
|
|
177
|
+
} // namespace folly
|
|
178
|
+
|
|
179
|
+
#include <folly/synchronization/AtomicUtil-inl.h>
|