react-native-windows 0.85.0-preview.1 → 0.85.0-preview.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +28 -46
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +0 -3
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +19 -13
- package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +107 -0
- package/Microsoft.ReactNative/Fabric/Composition/SelectionItemAutomationEvent.h +73 -0
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +105 -32
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +7 -2
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +2 -2
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +2 -9
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +54 -5
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +29 -9
- package/Scripts/creaternwlib.cmd +31 -15
- package/external/.clang-format +1 -0
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/external/fmt/cgmanifest.json +15 -0
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/external/fmt/include/fmt/base.h +3077 -0
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/Folly.natvis +25 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/external/folly/cgmanifest.json +25 -0
- package/external/folly/folly/.clang-format +1 -0
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstexprMath.h +978 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.cpp +1205 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/Hardware.h +155 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.cpp +633 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/external/folly/folly/hash/SpookyHashV2.h +339 -0
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic-inl.h +1438 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.cpp +1118 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/SafeAssert.h +188 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/ToAscii.cpp +348 -0
- package/external/folly/folly/lang/ToAscii.h +182 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.cpp +33 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/package.json +3 -3
- package/templates/cpp-lib/example/metro.config.js +18 -2
|
@@ -0,0 +1,43 @@
|
|
|
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
|
+
#include <folly/concurrency/memory/AtomicReadMostlyMainPtr.h>
|
|
18
|
+
|
|
19
|
+
#include <folly/executors/InlineExecutor.h>
|
|
20
|
+
|
|
21
|
+
namespace folly {
|
|
22
|
+
namespace detail {
|
|
23
|
+
|
|
24
|
+
namespace {
|
|
25
|
+
struct FailingExecutor : folly::Executor {
|
|
26
|
+
// We shouldn't be invoking any callbacks.
|
|
27
|
+
void add(Func func) override {
|
|
28
|
+
LOG(DFATAL)
|
|
29
|
+
<< "Added an RCU callback to the AtomicReadMostlyMainPtr executor.";
|
|
30
|
+
InlineExecutor::instance().add(std::move(func));
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
} // namespace
|
|
34
|
+
|
|
35
|
+
// *All* modifications of *all* AtomicReadMostlyMainPtrs use the same mutex and
|
|
36
|
+
// domain. The first of these just shrinks the size of the individual objects a
|
|
37
|
+
// little, but the second is necessary for correctness; we want to support
|
|
38
|
+
// arbitrarily many AtomicReadMostlyMainPtrs.
|
|
39
|
+
Indestructible<std::mutex> atomicReadMostlyMu;
|
|
40
|
+
Indestructible<folly::rcu_domain> atomicReadMostlyDomain(new FailingExecutor);
|
|
41
|
+
|
|
42
|
+
} // namespace detail
|
|
43
|
+
} // namespace folly
|
|
@@ -0,0 +1,190 @@
|
|
|
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
|
+
#include <memory>
|
|
22
|
+
#include <mutex>
|
|
23
|
+
|
|
24
|
+
#include <folly/Indestructible.h>
|
|
25
|
+
#include <folly/concurrency/memory/ReadMostlySharedPtr.h>
|
|
26
|
+
#include <folly/synchronization/Rcu.h>
|
|
27
|
+
|
|
28
|
+
namespace folly {
|
|
29
|
+
|
|
30
|
+
namespace detail {
|
|
31
|
+
extern Indestructible<std::mutex> atomicReadMostlyMu;
|
|
32
|
+
extern Indestructible<rcu_domain> atomicReadMostlyDomain;
|
|
33
|
+
} // namespace detail
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* What atomic_shared_ptr is to shared_ptr, AtomicReadMostlyMainPtr is to
|
|
37
|
+
* ReadMostlyMainPtr; it allows racy conflicting accesses to one. This gives
|
|
38
|
+
* true shared_ptr-like semantics, including reclamation at the point where the
|
|
39
|
+
* last pointer to an object goes away.
|
|
40
|
+
*
|
|
41
|
+
* It's about the same speed (slightly slower) as ReadMostlyMainPtr. The most
|
|
42
|
+
* significant feature they share is avoiding reader-reader contention and
|
|
43
|
+
* atomic RMWs in the absence of writes.
|
|
44
|
+
*/
|
|
45
|
+
template <typename T>
|
|
46
|
+
class AtomicReadMostlyMainPtr {
|
|
47
|
+
public:
|
|
48
|
+
AtomicReadMostlyMainPtr() : curMainPtrIndex_(0) {}
|
|
49
|
+
|
|
50
|
+
explicit AtomicReadMostlyMainPtr(std::shared_ptr<T> ptr)
|
|
51
|
+
: curMainPtrIndex_(0) {
|
|
52
|
+
mainPtrs_[0] = ReadMostlyMainPtr<T>{std::move(ptr)};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
void operator=(std::shared_ptr<T> desired) { store(std::move(desired)); }
|
|
56
|
+
|
|
57
|
+
bool is_lock_free() const { return false; }
|
|
58
|
+
|
|
59
|
+
ReadMostlySharedPtr<T> load(
|
|
60
|
+
std::memory_order order = std::memory_order_seq_cst) const {
|
|
61
|
+
detail::atomicReadMostlyDomain->lock();
|
|
62
|
+
// Synchronization point with the store in storeLocked().
|
|
63
|
+
auto index = curMainPtrIndex_.load(order);
|
|
64
|
+
auto result = mainPtrs_[index].getShared();
|
|
65
|
+
detail::atomicReadMostlyDomain->unlock();
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
void store(
|
|
70
|
+
std::shared_ptr<T> ptr,
|
|
71
|
+
std::memory_order order = std::memory_order_seq_cst) {
|
|
72
|
+
std::shared_ptr<T> old;
|
|
73
|
+
{
|
|
74
|
+
std::lock_guard<std::mutex> lg(*detail::atomicReadMostlyMu);
|
|
75
|
+
old = exchangeLocked(std::move(ptr), order);
|
|
76
|
+
}
|
|
77
|
+
// If ~T() runs (triggered by the shared_ptr refcount decrement), it's here,
|
|
78
|
+
// after dropping the lock. This avoids a possible (albeit esoteric)
|
|
79
|
+
// deadlock if ~T() modifies the AtomicReadMostlyMainPtr that used to point
|
|
80
|
+
// to it.
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
std::shared_ptr<T> exchange(
|
|
84
|
+
std::shared_ptr<T> ptr,
|
|
85
|
+
std::memory_order order = std::memory_order_seq_cst) {
|
|
86
|
+
std::lock_guard<std::mutex> lg(*detail::atomicReadMostlyMu);
|
|
87
|
+
return exchangeLocked(std::move(ptr), order);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
bool compare_exchange_weak(
|
|
91
|
+
std::shared_ptr<T>& expected,
|
|
92
|
+
const std::shared_ptr<T>& desired,
|
|
93
|
+
std::memory_order successOrder = std::memory_order_seq_cst,
|
|
94
|
+
std::memory_order failureOrder = std::memory_order_seq_cst) {
|
|
95
|
+
return compare_exchange_strong(
|
|
96
|
+
expected, desired, successOrder, failureOrder);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
bool compare_exchange_strong(
|
|
100
|
+
std::shared_ptr<T>& expected,
|
|
101
|
+
const std::shared_ptr<T>& desired,
|
|
102
|
+
std::memory_order successOrder = std::memory_order_seq_cst,
|
|
103
|
+
std::memory_order failureOrder = std::memory_order_seq_cst) {
|
|
104
|
+
// See the note at the end of store; we need to defer any destruction we
|
|
105
|
+
// might trigger until after the lock is released.
|
|
106
|
+
// This is not actually needed down the success path (the reference passed
|
|
107
|
+
// in as expected is another pointer to the same object, so we won't
|
|
108
|
+
// decrement the refcount to 0), but "never decrement a refcount while
|
|
109
|
+
// holding a lock" is an easier rule to keep in our heads, and costs us
|
|
110
|
+
// nothing.
|
|
111
|
+
std::shared_ptr<T> prev;
|
|
112
|
+
std::shared_ptr<T> expectedDup;
|
|
113
|
+
{
|
|
114
|
+
std::lock_guard<std::mutex> lg(*detail::atomicReadMostlyMu);
|
|
115
|
+
auto index = curMainPtrIndex_.load(failureOrder);
|
|
116
|
+
ReadMostlyMainPtr<T>& oldMain = mainPtrs_[index];
|
|
117
|
+
if (oldMain.get() != expected.get()) {
|
|
118
|
+
expectedDup = std::move(expected);
|
|
119
|
+
expected = oldMain.getStdShared();
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
prev = exchangeLocked(desired, successOrder);
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
private:
|
|
128
|
+
// Must hold the global mutex.
|
|
129
|
+
std::shared_ptr<T> exchangeLocked(
|
|
130
|
+
std::shared_ptr<T> ptr,
|
|
131
|
+
std::memory_order order = std::memory_order_seq_cst) {
|
|
132
|
+
// This is where the tricky bits happen; all modifications of the mainPtrs_
|
|
133
|
+
// and index happen here. We maintain the invariant that, on entry to this
|
|
134
|
+
// method, all read-side critical sections in progress are using the version
|
|
135
|
+
// indicated by curMainPtrIndex_, and the other version is nulled out.
|
|
136
|
+
// (Readers can still hold a ReadMostlySharedPtr to the thing the old
|
|
137
|
+
// version used to point to; they just can't access the old version to get
|
|
138
|
+
// that handle any more).
|
|
139
|
+
auto index = curMainPtrIndex_.load(std::memory_order_relaxed);
|
|
140
|
+
ReadMostlyMainPtr<T>& oldMain = mainPtrs_[index];
|
|
141
|
+
ReadMostlyMainPtr<T>& newMain = mainPtrs_[1 - index];
|
|
142
|
+
DCHECK(newMain.get() == nullptr)
|
|
143
|
+
<< "Invariant should ensure that at most one version is non-null";
|
|
144
|
+
newMain.reset(std::move(ptr));
|
|
145
|
+
// If order is acq_rel, it should degrade to just release, and if acquire to
|
|
146
|
+
// relaxed, since this is a store rather than an RMW. (Of course, this is
|
|
147
|
+
// such a slow method that we don't really care, but precision is its own
|
|
148
|
+
// reward. If TSAN one day understands asymmetric barriers, this will also
|
|
149
|
+
// improve its error detection here). We get our "acquire-y-ness" from the
|
|
150
|
+
// mutex.
|
|
151
|
+
auto realOrder =
|
|
152
|
+
(order == std::memory_order_acq_rel ? std::memory_order_release
|
|
153
|
+
: order == std::memory_order_acquire ? std::memory_order_relaxed
|
|
154
|
+
: order);
|
|
155
|
+
// After this, read-side critical sections can access both versions, but
|
|
156
|
+
// new ones will use newMain.
|
|
157
|
+
// This is also synchronization point with loads.
|
|
158
|
+
curMainPtrIndex_.store(1 - index, realOrder);
|
|
159
|
+
// Wait for all read-side critical sections using oldMain to finish.
|
|
160
|
+
detail::atomicReadMostlyDomain->synchronize();
|
|
161
|
+
// We've reestablished the first half of the invariant (all readers are
|
|
162
|
+
// using newMain), now let's establish the other one (that the other pointer
|
|
163
|
+
// is null).
|
|
164
|
+
auto result = oldMain.getStdShared();
|
|
165
|
+
oldMain.reset();
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// The right way to think of this implementation is as an
|
|
170
|
+
// std::atomic<ReadMostlyMainPtr<T>*>, protected by RCU. There's only two
|
|
171
|
+
// tricky parts:
|
|
172
|
+
// 1. We give ourselves our own RCU domain, and synchronize on modification,
|
|
173
|
+
// so that we don't do any batching of deallocations. This gives
|
|
174
|
+
// shared_ptr-like eager reclamation semantics.
|
|
175
|
+
// 2. Instead of putting the ReadMostlyMainPtrs on the heap, we keep them as
|
|
176
|
+
// part of the same object to improve locality.
|
|
177
|
+
|
|
178
|
+
// Really, just a 0/1 index. This is also the synchronization point for memory
|
|
179
|
+
// orders.
|
|
180
|
+
std::atomic<uint8_t> curMainPtrIndex_;
|
|
181
|
+
|
|
182
|
+
// Both the ReadMostlyMainPtrs themselves and the domain have nontrivial
|
|
183
|
+
// indirections even on the read path, and asymmetric barriers on the write
|
|
184
|
+
// path. Some of these could be fused as a later optimization, at the cost of
|
|
185
|
+
// having to put more tricky threading primitives in this class that are
|
|
186
|
+
// currently abstracted out by those.
|
|
187
|
+
ReadMostlyMainPtr<T> mainPtrs_[2];
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
} // namespace folly
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
load("@fbcode_macros//build_defs:cpp_library.bzl", "cpp_library")
|
|
2
|
+
|
|
3
|
+
oncall("fbcode_entropy_wardens_folly")
|
|
4
|
+
|
|
5
|
+
cpp_library(
|
|
6
|
+
name = "atomic_read_mostly_main_ptr",
|
|
7
|
+
srcs = [
|
|
8
|
+
"AtomicReadMostlyMainPtr.cpp",
|
|
9
|
+
],
|
|
10
|
+
headers = [
|
|
11
|
+
"AtomicReadMostlyMainPtr.h",
|
|
12
|
+
],
|
|
13
|
+
deps = [
|
|
14
|
+
"//folly/executors:inline_executor",
|
|
15
|
+
],
|
|
16
|
+
exported_deps = [
|
|
17
|
+
"//folly:indestructible",
|
|
18
|
+
"//folly/concurrency/memory:read_mostly_shared_ptr",
|
|
19
|
+
"//folly/synchronization:rcu",
|
|
20
|
+
],
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
cpp_library(
|
|
24
|
+
name = "read_mostly_shared_ptr",
|
|
25
|
+
headers = ["ReadMostlySharedPtr.h"],
|
|
26
|
+
exported_deps = [
|
|
27
|
+
"//folly:function",
|
|
28
|
+
"//folly/concurrency/memory:tl_ref_count",
|
|
29
|
+
],
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
cpp_library(
|
|
33
|
+
name = "primary_ptr",
|
|
34
|
+
headers = ["PrimaryPtr.h"],
|
|
35
|
+
exported_deps = [
|
|
36
|
+
"//folly:function",
|
|
37
|
+
"//folly/futures:cleanup",
|
|
38
|
+
"//folly/futures:core",
|
|
39
|
+
],
|
|
40
|
+
exported_external_deps = [
|
|
41
|
+
"glog",
|
|
42
|
+
],
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
cpp_library(
|
|
46
|
+
name = "tl_ref_count",
|
|
47
|
+
headers = ["TLRefCount.h"],
|
|
48
|
+
exported_deps = [
|
|
49
|
+
"//folly:thread_local",
|
|
50
|
+
"//folly/synchronization:asymmetric_thread_fence",
|
|
51
|
+
"//folly/synchronization/detail:sleeper",
|
|
52
|
+
],
|
|
53
|
+
)
|
|
@@ -0,0 +1,338 @@
|
|
|
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 <memory>
|
|
20
|
+
#include <mutex>
|
|
21
|
+
|
|
22
|
+
#include <folly/Function.h>
|
|
23
|
+
#include <folly/futures/Cleanup.h>
|
|
24
|
+
#include <folly/futures/Future.h>
|
|
25
|
+
|
|
26
|
+
#include <glog/logging.h>
|
|
27
|
+
|
|
28
|
+
namespace folly {
|
|
29
|
+
|
|
30
|
+
template <typename T>
|
|
31
|
+
class EnablePrimaryFromThis;
|
|
32
|
+
|
|
33
|
+
template <typename T>
|
|
34
|
+
class PrimaryPtr;
|
|
35
|
+
|
|
36
|
+
template <typename T>
|
|
37
|
+
class PrimaryPtrRef;
|
|
38
|
+
|
|
39
|
+
namespace detail {
|
|
40
|
+
struct publicallyDerivedFromEnablePrimaryFromThis_fn {
|
|
41
|
+
template <class T>
|
|
42
|
+
void operator()(const EnablePrimaryFromThis<T>&) const {}
|
|
43
|
+
};
|
|
44
|
+
} // namespace detail
|
|
45
|
+
|
|
46
|
+
template <class T>
|
|
47
|
+
constexpr bool is_enable_master_from_this_v = folly::
|
|
48
|
+
is_invocable_v<detail::publicallyDerivedFromEnablePrimaryFromThis_fn, T>;
|
|
49
|
+
|
|
50
|
+
template <typename T>
|
|
51
|
+
using is_enable_master_from_this =
|
|
52
|
+
std::bool_constant<is_enable_master_from_this_v<T>>;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* EnablePrimaryFromThis provides an object with appropriate access to the
|
|
56
|
+
* functionality of the PrimaryPtr holding this.
|
|
57
|
+
*/
|
|
58
|
+
template <typename T>
|
|
59
|
+
class EnablePrimaryFromThis {
|
|
60
|
+
// initializes members when the PrimaryPtr for this is constructed
|
|
61
|
+
//
|
|
62
|
+
// used by the PrimaryPtr for this, to invoke the EnablePrimaryFromThis base
|
|
63
|
+
// of T, if it exists.
|
|
64
|
+
template <
|
|
65
|
+
class O,
|
|
66
|
+
class Master,
|
|
67
|
+
std::enable_if_t<is_enable_master_from_this_v<O>, int> = 0>
|
|
68
|
+
static void set(EnablePrimaryFromThis<O>* that, Master& m) {
|
|
69
|
+
that->outerPtrWeak_ = m.outerPtrWeak_;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
template <
|
|
73
|
+
class O,
|
|
74
|
+
class Master,
|
|
75
|
+
std::enable_if_t<!is_enable_master_from_this_v<O>, int> = 0>
|
|
76
|
+
static void set(O*, Master&) {}
|
|
77
|
+
|
|
78
|
+
public:
|
|
79
|
+
// Gets a non-owning reference to the pointer. PrimaryPtr::join() and the
|
|
80
|
+
// PrimaryPtr::cleanup() work do *NOT* wait for outstanding PrimaryPtrRef
|
|
81
|
+
// objects to be released.
|
|
82
|
+
PrimaryPtrRef<T> masterRefFromThis() {
|
|
83
|
+
return PrimaryPtrRef<T>(outerPtrWeak_);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Gets a non-owning const reference to the pointer. PrimaryPtr::join() and
|
|
87
|
+
// the PrimaryPtr::cleanup() work do *NOT* wait for outstanding PrimaryPtrRef
|
|
88
|
+
// objects to be released.
|
|
89
|
+
PrimaryPtrRef<const T> masterRefFromThis() const {
|
|
90
|
+
return PrimaryPtrRef<const T>(outerPtrWeak_);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Attempts to lock a pointer. Returns null if pointer is not set or if
|
|
94
|
+
// PrimaryPtr::join() was called or the PrimaryPtr::cleanup() task was started
|
|
95
|
+
// (even if the call to PrimaryPtr::join() hasn't returned yet and the
|
|
96
|
+
// PrimaryPtr::cleanup() task has not completed yet).
|
|
97
|
+
std::shared_ptr<T> masterLockFromThis() {
|
|
98
|
+
if (auto outerPtr = outerPtrWeak_.lock()) {
|
|
99
|
+
return *outerPtr;
|
|
100
|
+
}
|
|
101
|
+
return nullptr;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Attempts to lock a pointer. Returns null if pointer is not set or if
|
|
105
|
+
// PrimaryPtr::join() was called or the PrimaryPtr::cleanup() task was started
|
|
106
|
+
// (even if the call to PrimaryPtr::join() hasn't returned yet and the
|
|
107
|
+
// PrimaryPtr::cleanup() task has not completed yet).
|
|
108
|
+
std::shared_ptr<T const> masterLockFromThis() const {
|
|
109
|
+
if (!*this) {
|
|
110
|
+
return nullptr;
|
|
111
|
+
}
|
|
112
|
+
if (auto outerPtr = outerPtrWeak_.lock()) {
|
|
113
|
+
return *outerPtr;
|
|
114
|
+
}
|
|
115
|
+
return nullptr;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private:
|
|
119
|
+
template <class>
|
|
120
|
+
friend class PrimaryPtr;
|
|
121
|
+
|
|
122
|
+
std::weak_ptr<std::shared_ptr<T>> outerPtrWeak_;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* PrimaryPtr should be used to achieve deterministic destruction of objects
|
|
127
|
+
* with shared ownership. Once an object is managed by a PrimaryPtr, shared_ptrs
|
|
128
|
+
* can be obtained pointing to that object. However destroying those shared_ptrs
|
|
129
|
+
* will never call the object destructor inline. To destroy the object, join()
|
|
130
|
+
* method must be called on PrimaryPtr or the task returned from cleanup() must
|
|
131
|
+
* be completed, which will wait for all shared_ptrs to be released and then
|
|
132
|
+
* call the object destructor on the caller supplied execution context.
|
|
133
|
+
*/
|
|
134
|
+
template <typename T>
|
|
135
|
+
class PrimaryPtr {
|
|
136
|
+
// retrieves nested cleanup() work from innerPtr_. Called when the PrimaryPtr
|
|
137
|
+
// cleanup() task has finished waiting for outstanding references
|
|
138
|
+
//
|
|
139
|
+
template <class Cleanup, std::enable_if_t<is_cleanup_v<Cleanup>, int> = 0>
|
|
140
|
+
static folly::SemiFuture<folly::Unit> getCleanup(Cleanup* cleanup) {
|
|
141
|
+
return std::move(*cleanup).cleanup();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
template <class O, std::enable_if_t<!is_cleanup_v<O>, int> = 0>
|
|
145
|
+
static folly::SemiFuture<folly::Unit> getCleanup(O*) {
|
|
146
|
+
return folly::makeSemiFuture();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
public:
|
|
150
|
+
PrimaryPtr() = delete;
|
|
151
|
+
template <class T2, class Deleter>
|
|
152
|
+
PrimaryPtr(std::unique_ptr<T2, Deleter> ptr) {
|
|
153
|
+
set(std::move(ptr));
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
explicit PrimaryPtr(std::nullptr_t) {}
|
|
157
|
+
|
|
158
|
+
~PrimaryPtr() {
|
|
159
|
+
if (*this) {
|
|
160
|
+
LOG(FATAL) << "PrimaryPtr has to be joined explicitly.";
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
PrimaryPtr(PrimaryPtr<T>&&) = default;
|
|
165
|
+
|
|
166
|
+
void swap(PrimaryPtr<T>& other) noexcept {
|
|
167
|
+
PrimaryPtr<T> temp = std::move(other);
|
|
168
|
+
other = std::move(*this);
|
|
169
|
+
*this = std::move(temp);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
PrimaryPtr<T> exchange(PrimaryPtr<T>&& newVal) noexcept {
|
|
173
|
+
PrimaryPtr<T> oldVal = std::move(*this);
|
|
174
|
+
*this = std::move(newVal);
|
|
175
|
+
return oldVal;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
explicit operator bool() const { return !!innerPtr_; }
|
|
179
|
+
|
|
180
|
+
// Attempts to lock a pointer. Returns null if pointer is not set or if join()
|
|
181
|
+
// was called or the cleanup() task was started (even if the call to join()
|
|
182
|
+
// hasn't returned yet and the cleanup() task has not completed yet).
|
|
183
|
+
std::shared_ptr<T> lock() const {
|
|
184
|
+
if (auto outerPtr = outerPtrWeak_.lock()) {
|
|
185
|
+
return *outerPtr;
|
|
186
|
+
}
|
|
187
|
+
return nullptr;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Waits until all the refereces obtained via lock() are released. Then
|
|
191
|
+
// destroys the object in the current thread.
|
|
192
|
+
// Can not be called concurrently with set().
|
|
193
|
+
void join() {
|
|
194
|
+
if (!*this) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
this->cleanup().get();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Returns: a SemiFuture that waits until all the refereces obtained via
|
|
201
|
+
// lock() are released. Then destroys the object on the Executor provided to
|
|
202
|
+
// the SemiFuture.
|
|
203
|
+
//
|
|
204
|
+
// The returned SemiFuture must run to completion before calling set()
|
|
205
|
+
//
|
|
206
|
+
folly::SemiFuture<folly::Unit> cleanup() {
|
|
207
|
+
return folly::makeSemiFuture()
|
|
208
|
+
// clear outerPtrShared_ after cleanup is started
|
|
209
|
+
// to disable further calls to lock().
|
|
210
|
+
// then wait for outstanding references.
|
|
211
|
+
.deferValue([this](folly::Unit) {
|
|
212
|
+
if (!this->outerPtrShared_) {
|
|
213
|
+
LOG(FATAL)
|
|
214
|
+
<< "Cleanup already run - lock() was previouly disabled.";
|
|
215
|
+
}
|
|
216
|
+
this->outerPtrShared_.reset();
|
|
217
|
+
return std::move(this->unreferenced_);
|
|
218
|
+
})
|
|
219
|
+
// start cleanup tasks
|
|
220
|
+
.deferValue([this](folly::Unit) { return getCleanup(innerPtr_.get()); })
|
|
221
|
+
.defer([this](folly::Try<folly::Unit> r) {
|
|
222
|
+
if (r.hasException()) {
|
|
223
|
+
LOG(FATAL) << "Cleanup actions must be noexcept.";
|
|
224
|
+
}
|
|
225
|
+
this->innerPtr_.reset();
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Sets the pointer. Can not be called concurrently with lock() or join() or
|
|
230
|
+
// ref() or while the SemiFuture returned from cleanup() is running.
|
|
231
|
+
template <class T2, class Deleter>
|
|
232
|
+
void set(std::unique_ptr<T2, Deleter> ptr) {
|
|
233
|
+
if (*this) {
|
|
234
|
+
LOG(FATAL) << "PrimaryPtr has to be joined before being set.";
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (!ptr) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
auto rawPtr = ptr.get();
|
|
242
|
+
innerPtr_ = std::unique_ptr<T, folly::Function<void(T*)>>{
|
|
243
|
+
ptr.release(),
|
|
244
|
+
[d = ptr.get_deleter(), rawPtr](T*) mutable { d(rawPtr); }};
|
|
245
|
+
|
|
246
|
+
auto [referencesPromise, referencesFuture] =
|
|
247
|
+
folly::makePromiseContract<folly::Unit>();
|
|
248
|
+
unreferenced_ = std::move(referencesFuture);
|
|
249
|
+
|
|
250
|
+
// The deleter object needs to be copyable in std::shared_ptr on some
|
|
251
|
+
// platform. To work around this limitation we can slightly tweak the
|
|
252
|
+
// semantics of deleter copy constructor and check we always use this
|
|
253
|
+
// object at most once.
|
|
254
|
+
class LastReference {
|
|
255
|
+
public:
|
|
256
|
+
LastReference(Promise<Unit>&& p) : p_(std::move(p)) {}
|
|
257
|
+
LastReference(LastReference&&) = default;
|
|
258
|
+
LastReference(LastReference& other) : LastReference(std::move(other)) {}
|
|
259
|
+
void operator()(T*) {
|
|
260
|
+
DCHECK(!p_.isFulfilled());
|
|
261
|
+
p_.setValue();
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
private:
|
|
265
|
+
Promise<Unit> p_;
|
|
266
|
+
};
|
|
267
|
+
auto innerPtrShared = std::shared_ptr<T>(
|
|
268
|
+
innerPtr_.get(), LastReference{std::move(referencesPromise)});
|
|
269
|
+
|
|
270
|
+
outerPtrWeak_ = outerPtrShared_ =
|
|
271
|
+
std::make_shared<std::shared_ptr<T>>(innerPtrShared);
|
|
272
|
+
|
|
273
|
+
// attaches optional EnablePrimaryFromThis base of innerPtr_ to this
|
|
274
|
+
// PrimaryPtr
|
|
275
|
+
EnablePrimaryFromThis<T>::set(innerPtr_.get(), *this);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Gets a non-owning reference to the pointer. join() and the cleanup() work
|
|
279
|
+
// do *NOT* wait for outstanding PrimaryPtrRef objects to be released.
|
|
280
|
+
PrimaryPtrRef<T> ref() const { return PrimaryPtrRef<T>(outerPtrWeak_); }
|
|
281
|
+
|
|
282
|
+
private:
|
|
283
|
+
// Making this private for now since non-null PrimaryPtr's must be explicitly
|
|
284
|
+
// joined before destruction.
|
|
285
|
+
PrimaryPtr<T>& operator=(PrimaryPtr<T>&& other) = default;
|
|
286
|
+
|
|
287
|
+
template <class>
|
|
288
|
+
friend class EnablePrimaryFromThis;
|
|
289
|
+
friend class PrimaryPtrRef<T>;
|
|
290
|
+
|
|
291
|
+
folly::SemiFuture<folly::Unit> unreferenced_;
|
|
292
|
+
std::shared_ptr<std::shared_ptr<T>> outerPtrShared_;
|
|
293
|
+
std::weak_ptr<std::shared_ptr<T>> outerPtrWeak_;
|
|
294
|
+
std::unique_ptr<T, folly::Function<void(T*)>> innerPtr_;
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
template <typename T>
|
|
298
|
+
void swap(PrimaryPtr<T>& x, PrimaryPtr<T>& y) noexcept {
|
|
299
|
+
x.swap(y);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
template <typename T>
|
|
303
|
+
PrimaryPtr<T> exchange(PrimaryPtr<T>& x, PrimaryPtr<T>&& newVal) noexcept {
|
|
304
|
+
return x.exchange(std::move(newVal));
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* PrimaryPtrRef is a non-owning reference to the pointer. PrimaryPtr::join()
|
|
309
|
+
* and the PrimaryPtr::cleanup() work do *NOT* wait for outstanding
|
|
310
|
+
* PrimaryPtrRef objects to be released.
|
|
311
|
+
*/
|
|
312
|
+
template <typename T>
|
|
313
|
+
class PrimaryPtrRef {
|
|
314
|
+
public:
|
|
315
|
+
PrimaryPtrRef() = default;
|
|
316
|
+
|
|
317
|
+
// Attempts to lock a pointer. Returns null if pointer is not set or if
|
|
318
|
+
// join() was called or cleanup() work was started (even if the call to join()
|
|
319
|
+
// hasn't returned yet or the cleanup() work has not completed yet).
|
|
320
|
+
std::shared_ptr<T> lock() const {
|
|
321
|
+
if (auto outerPtr = outerPtrWeak_.lock()) {
|
|
322
|
+
return *outerPtr;
|
|
323
|
+
}
|
|
324
|
+
return nullptr;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
private:
|
|
328
|
+
template <class>
|
|
329
|
+
friend class EnablePrimaryFromThis;
|
|
330
|
+
template <class>
|
|
331
|
+
friend class PrimaryPtr;
|
|
332
|
+
/* implicit */ PrimaryPtrRef(std::weak_ptr<std::shared_ptr<T>> outerPtrWeak)
|
|
333
|
+
: outerPtrWeak_(std::move(outerPtrWeak)) {}
|
|
334
|
+
|
|
335
|
+
std::weak_ptr<std::shared_ptr<T>> outerPtrWeak_;
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
} // namespace folly
|