react-native-windows 0.83.2 → 0.83.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +2 -17
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +17 -4
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +8 -4
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +9 -1
- package/PropertySheets/React.Cpp.props +3 -3
- package/PropertySheets/WinUI.props +2 -1
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/ConfigureYarnPackageAgeGate.ps1 +25 -0
- package/Scripts/EnableInternalWinAppSDKFeed.ps1 +12 -5
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +103 -6
- package/Scripts/RunRnwInitWindows.js +37 -0
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +30 -17
- package/Scripts/creaternwlib.cmd +36 -23
- 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/package.json +5 -5
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- 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.sln +0 -33
- package/Folly/Folly.vcxproj +0 -376
- package/Folly/Folly.vcxproj.filters +0 -558
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{fmt → external/fmt}/cgmanifest.json +0 -0
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,553 @@
|
|
|
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 <functional>
|
|
21
|
+
#include <limits>
|
|
22
|
+
|
|
23
|
+
#include <folly/Function.h>
|
|
24
|
+
#include <folly/Indestructible.h>
|
|
25
|
+
#include <folly/Optional.h>
|
|
26
|
+
#include <folly/detail/TurnSequencer.h>
|
|
27
|
+
#include <folly/executors/QueuedImmediateExecutor.h>
|
|
28
|
+
#include <folly/synchronization/detail/ThreadCachedLists.h>
|
|
29
|
+
#include <folly/synchronization/detail/ThreadCachedReaders.h>
|
|
30
|
+
|
|
31
|
+
// Implementation of proposed Read-Copy-Update (RCU) C++ API
|
|
32
|
+
// http://open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0566r3.pdf
|
|
33
|
+
|
|
34
|
+
// Overview
|
|
35
|
+
|
|
36
|
+
// This file provides a low-overhead mechanism to guarantee ordering
|
|
37
|
+
// between operations on shared data. In the simplest usage pattern,
|
|
38
|
+
// readers enter a critical section, view some state, and leave the
|
|
39
|
+
// critical section, while writers modify shared state and then defer
|
|
40
|
+
// some cleanup operations. Proper use of these classes will guarantee
|
|
41
|
+
// that a cleanup operation that is deferred during a reader critical
|
|
42
|
+
// section will not be executed until after that critical section is
|
|
43
|
+
// over.
|
|
44
|
+
|
|
45
|
+
// Example
|
|
46
|
+
|
|
47
|
+
// As an example, suppose we have some configuration data that gets
|
|
48
|
+
// periodically updated. We need to protect ourselves on *every* read
|
|
49
|
+
// path, even if updates are only vanishly rare, because we don't know
|
|
50
|
+
// if some writer will come along and yank the data out from under us.
|
|
51
|
+
//
|
|
52
|
+
// Here's how that might look without deferral:
|
|
53
|
+
//
|
|
54
|
+
// void doSomething(IPAddress host);
|
|
55
|
+
//
|
|
56
|
+
// folly::SharedMutex sm;
|
|
57
|
+
// ConfigData* globalConfigData;
|
|
58
|
+
//
|
|
59
|
+
// void reader() {
|
|
60
|
+
// while (true) {
|
|
61
|
+
// sm.lock_shared();
|
|
62
|
+
// IPAddress curManagementServer = globalConfigData->managementServerIP;
|
|
63
|
+
// sm.unlock_shared();
|
|
64
|
+
// doSomethingWith(curManagementServer);
|
|
65
|
+
// }
|
|
66
|
+
// }
|
|
67
|
+
//
|
|
68
|
+
// void writer() {
|
|
69
|
+
// while (true) {
|
|
70
|
+
// std::this_thread::sleep_for(std::chrono::seconds(60));
|
|
71
|
+
// ConfigData* oldConfigData;
|
|
72
|
+
// ConfigData* newConfigData = loadConfigDataFromRemoteServer();
|
|
73
|
+
// sm.lock();
|
|
74
|
+
// oldConfigData = globalConfigData;
|
|
75
|
+
// globalConfigData = newConfigData;
|
|
76
|
+
// sm.unlock();
|
|
77
|
+
// delete oldConfigData;
|
|
78
|
+
// }
|
|
79
|
+
// }
|
|
80
|
+
//
|
|
81
|
+
// The readers have to lock_shared and unlock_shared every iteration, even
|
|
82
|
+
// during the overwhelming majority of the time in which there's no writer
|
|
83
|
+
// present. These functions are surprisingly expensive; there's around 30ns of
|
|
84
|
+
// overhead per critical section on my machine.
|
|
85
|
+
//
|
|
86
|
+
// Let's get rid of the locking. The readers and writer may proceed
|
|
87
|
+
// concurrently. Here's how this would look:
|
|
88
|
+
//
|
|
89
|
+
// void doSomething(IPAddress host);
|
|
90
|
+
//
|
|
91
|
+
// std::atomic<ConfigData*> globalConfigData;
|
|
92
|
+
//
|
|
93
|
+
// void reader() {
|
|
94
|
+
// while (true) {
|
|
95
|
+
// ConfigData* configData = globalConfigData.load();
|
|
96
|
+
// IPAddress curManagementServer = configData->managementServerIP;
|
|
97
|
+
// doSomethingWith(curManagementServer);
|
|
98
|
+
// }
|
|
99
|
+
// }
|
|
100
|
+
//
|
|
101
|
+
// void writer() {
|
|
102
|
+
// while (true) {
|
|
103
|
+
// std::this_thread::sleep_for(std::chrono::seconds(60));
|
|
104
|
+
// ConfigData* newConfigData = loadConfigDataFromRemoteServer();
|
|
105
|
+
// globalConfigData.store(newConfigData);
|
|
106
|
+
// // We can't delete the old ConfigData; we don't know when the readers
|
|
107
|
+
// // will be done with it! I guess we have to leak it...
|
|
108
|
+
// }
|
|
109
|
+
// }
|
|
110
|
+
//
|
|
111
|
+
// This works and is fast, but we don't ever reclaim the memory we
|
|
112
|
+
// allocated for the copy of the data. We need a way for the writer to
|
|
113
|
+
// know that no readers observed the old value of the pointer and are
|
|
114
|
+
// still using it. Tweaking this slightly, we want a way for the
|
|
115
|
+
// writer to say "I want some operation (deleting the old ConfigData)
|
|
116
|
+
// to happen, but only after I know that all readers that started
|
|
117
|
+
// before I requested the action have finished.". The classes in this
|
|
118
|
+
// namespace allow this. Here's how we'd express this idea:
|
|
119
|
+
//
|
|
120
|
+
// void doSomething(IPAddress host);
|
|
121
|
+
// std::atomic<ConfigData*> globalConfigData;
|
|
122
|
+
//
|
|
123
|
+
//
|
|
124
|
+
// void reader() {
|
|
125
|
+
// while (true) {
|
|
126
|
+
// IPAddress curManagementServer;
|
|
127
|
+
// {
|
|
128
|
+
// // We're about to do some reads we want to protect; if we read a
|
|
129
|
+
// // pointer, we need to make sure that if the writer comes along and
|
|
130
|
+
// // updates it, the writer's cleanup operation won't happen until we're
|
|
131
|
+
// // done accessing the pointed-to data. We get a Guard on that
|
|
132
|
+
// // domain; as long as it exists, no function subsequently passed to
|
|
133
|
+
// // invokeEventually will execute.
|
|
134
|
+
// std::scoped_lock<rcu_domain> guard(rcu_default_domain());
|
|
135
|
+
// ConfigData* configData = globalConfigData.load();
|
|
136
|
+
// // We created a guard before we read globalConfigData; we know that the
|
|
137
|
+
// // pointer will remain valid until the guard is destroyed.
|
|
138
|
+
// curManagementServer = configData->managementServerIP;
|
|
139
|
+
// // RCU domain via the scoped mutex is released here; retired objects
|
|
140
|
+
// // may be freed.
|
|
141
|
+
// }
|
|
142
|
+
// doSomethingWith(curManagementServer);
|
|
143
|
+
// }
|
|
144
|
+
// }
|
|
145
|
+
//
|
|
146
|
+
// void writer() {
|
|
147
|
+
//
|
|
148
|
+
// while (true) {
|
|
149
|
+
// std::this_thread::sleep_for(std::chrono::seconds(60));
|
|
150
|
+
// ConfigData* oldConfigData = globalConfigData.load();
|
|
151
|
+
// ConfigData* newConfigData = loadConfigDataFromRemoteServer();
|
|
152
|
+
// globalConfigData.store(newConfigData);
|
|
153
|
+
// rcu_retire(oldConfigData);
|
|
154
|
+
// // alternatively, in a blocking manner:
|
|
155
|
+
// // rcu_synchronize();
|
|
156
|
+
// // delete oldConfigData;
|
|
157
|
+
// }
|
|
158
|
+
// }
|
|
159
|
+
//
|
|
160
|
+
// This gets us close to the speed of the second solution, without
|
|
161
|
+
// leaking memory. An std::scoped_lock costs about 5 ns, faster than the
|
|
162
|
+
// lock() / unlock() pair in the more traditional mutex-based approach from our
|
|
163
|
+
// first attempt, and the writer never blocks the readers.
|
|
164
|
+
|
|
165
|
+
// Notes
|
|
166
|
+
|
|
167
|
+
// This implementation does implement an rcu_domain, and provides a default
|
|
168
|
+
// one for use per the standard implementation.
|
|
169
|
+
//
|
|
170
|
+
// rcu_domain:
|
|
171
|
+
// A "universe" of deferred execution. Each rcu_domain has an
|
|
172
|
+
// executor on which deferred functions may execute. Readers enter
|
|
173
|
+
// a read region in an rcu_domain by creating an instance of an
|
|
174
|
+
// std::scoped_lock<folly::rcu_domain> object on the domain. The scoped
|
|
175
|
+
// lock provides RAII semantics for read region protection over the domain.
|
|
176
|
+
//
|
|
177
|
+
// rcu_domains should in general be completely separated;
|
|
178
|
+
// std::scoped_lock<folly::rcu_domain> locks created on one domain do not
|
|
179
|
+
// prevent functions deferred on other domains from running. It's intended
|
|
180
|
+
// that most callers should only ever use the default, global domain.
|
|
181
|
+
//
|
|
182
|
+
// You should use a custom rcu_domain if you can't avoid sleeping
|
|
183
|
+
// during reader critical sections (because you don't want to block
|
|
184
|
+
// all other users of the domain while you sleep), or you want to change
|
|
185
|
+
// the default executor type on which retire callbacks are invoked.
|
|
186
|
+
// Otherwise, users are strongly encouraged to use the default domain.
|
|
187
|
+
//
|
|
188
|
+
// API correctness limitations:
|
|
189
|
+
//
|
|
190
|
+
// - fork():
|
|
191
|
+
// Invoking fork() in a multithreaded program with any thread other than the
|
|
192
|
+
// forking thread being present in a read region will result in undefined
|
|
193
|
+
// behavior. Similarly, a forking thread must immediately invoke exec if
|
|
194
|
+
// fork() is invoked while in a read region. Invoking fork() inside of a read
|
|
195
|
+
// region, and then exiting before invoking exec(), will similarly result in
|
|
196
|
+
// undefined behavior.
|
|
197
|
+
//
|
|
198
|
+
// - Exceptions:
|
|
199
|
+
// In short, nothing about this is exception safe. retire functions should
|
|
200
|
+
// not throw exceptions in their destructors, move constructors or call
|
|
201
|
+
// operators.
|
|
202
|
+
//
|
|
203
|
+
// Performance limitations:
|
|
204
|
+
// - Blocking:
|
|
205
|
+
// A blocked reader will block invocation of deferred functions until it
|
|
206
|
+
// becomes unblocked. Sleeping while holding an
|
|
207
|
+
// std::scoped_lock<folly::rcu_domain> lock can have bad performance
|
|
208
|
+
// consequences.
|
|
209
|
+
//
|
|
210
|
+
// API questions you might have:
|
|
211
|
+
// - Nested critical sections:
|
|
212
|
+
// These are fine. The following is explicitly allowed by the standard, up to
|
|
213
|
+
// a nesting level of 100:
|
|
214
|
+
// std::scoped_lock<rcu_domain> reader1(rcu_default_domain());
|
|
215
|
+
// doSomeWork();
|
|
216
|
+
// std::scoped_lock<rcu_domain> reader2(rcu_default_domain());
|
|
217
|
+
// doSomeMoreWork();
|
|
218
|
+
// - Restrictions on retired()ed functions:
|
|
219
|
+
// Any operation is safe from within a retired function's
|
|
220
|
+
// execution; you can retire additional functions or add a new domain call to
|
|
221
|
+
// the domain. However, when using the default domain or the default
|
|
222
|
+
// executor, it is not legal to hold a lock across rcu_retire or call
|
|
223
|
+
// that is acquired by the deleter. This is normally not a problem when
|
|
224
|
+
// using the default deleter delete, which does not acquire any user locks.
|
|
225
|
+
// However, even when using the default deleter, an object having a
|
|
226
|
+
// user-defined destructor that acquires locks held across the corresponding
|
|
227
|
+
// call to rcu_retire can still deadlock.
|
|
228
|
+
// - rcu_domain destruction:
|
|
229
|
+
// Destruction of a domain assumes previous synchronization: all remaining
|
|
230
|
+
// call and retire calls are immediately added to the executor.
|
|
231
|
+
|
|
232
|
+
// Overheads
|
|
233
|
+
|
|
234
|
+
// Deferral latency is as low as is practical: overhead involves running
|
|
235
|
+
// several global memory barriers on the machine to ensure all readers are gone.
|
|
236
|
+
//
|
|
237
|
+
// Currently use of MPMCQueue is the bottleneck for deferred calls, more
|
|
238
|
+
// specialized queues could be used if available, since only a single reader
|
|
239
|
+
// reads the queue, and can splice all of the items to the executor if possible.
|
|
240
|
+
//
|
|
241
|
+
// rcu_synchronize() call latency is on the order of 10ms. Multiple
|
|
242
|
+
// separate threads can share a synchronized period and should scale.
|
|
243
|
+
//
|
|
244
|
+
// rcu_retire() is a queue push, and on the order of 150 ns, however,
|
|
245
|
+
// the current implementation may synchronize if the retire queue is full,
|
|
246
|
+
// resulting in tail latencies of ~10ms.
|
|
247
|
+
//
|
|
248
|
+
// std::scoped_lock<rcu_domain> creation/destruction is ~5ns. By comparison,
|
|
249
|
+
// folly::SharedMutex::lock_shared + unlock_shared pair is ~26ns
|
|
250
|
+
|
|
251
|
+
// Hazard pointers vs. RCU:
|
|
252
|
+
//
|
|
253
|
+
// Hazard pointers protect pointers, generally malloc()d pieces of memory, and
|
|
254
|
+
// each hazptr only protects one such block.
|
|
255
|
+
//
|
|
256
|
+
// RCU protects critical sections, *all* memory is protected as long
|
|
257
|
+
// as the critical section is active.
|
|
258
|
+
//
|
|
259
|
+
// For example, this has implications for linked lists: If you wish to
|
|
260
|
+
// free an entire linked list, you simply rcu_retire() each node with
|
|
261
|
+
// RCU: readers will see either an entirely valid list, or no list at
|
|
262
|
+
// all.
|
|
263
|
+
//
|
|
264
|
+
// Conversely with hazptrs, generally lists are walked with
|
|
265
|
+
// hand-over-hand hazptrs. Only one node is protected at a time. So
|
|
266
|
+
// anywhere in the middle of the list, hazptrs may read NULL, and throw
|
|
267
|
+
// away all current work. Alternatively, reference counting can be used,
|
|
268
|
+
// (as if each node was a shared_ptr<node>), so that readers will always see
|
|
269
|
+
// *the remaining part* of the list as valid, however parts before its current
|
|
270
|
+
// hazptr may be freed.
|
|
271
|
+
//
|
|
272
|
+
// So roughly: RCU is simple, but an all-or-nothing affair. A single
|
|
273
|
+
// std::scoped_lock<folly::rcu_domain> can block all reclamation. Hazptrs will
|
|
274
|
+
// reclaim exactly as much as possible, at the cost of extra work writing
|
|
275
|
+
// traversal code
|
|
276
|
+
//
|
|
277
|
+
// Reproduced from
|
|
278
|
+
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/n4895.pdf
|
|
279
|
+
//
|
|
280
|
+
// Reference Counting RCU Hazptr
|
|
281
|
+
//
|
|
282
|
+
// Unreclaimed objects Bounded Unbounded Bounded
|
|
283
|
+
//
|
|
284
|
+
// Contention among readers High None None
|
|
285
|
+
//
|
|
286
|
+
// Traversal forward progress lock-free wait-free lock-free
|
|
287
|
+
//
|
|
288
|
+
// Reclamation forward progress lock-free blocking wait-free
|
|
289
|
+
//
|
|
290
|
+
// Traversal speed atomic no-overhead folly's is
|
|
291
|
+
// no-overhead
|
|
292
|
+
//
|
|
293
|
+
// Reference acquisition unconditional unconditional conditional
|
|
294
|
+
//
|
|
295
|
+
// Automatic reclamation yes no no
|
|
296
|
+
//
|
|
297
|
+
// Purpose of domains N/A isolate slow configeration
|
|
298
|
+
// readers
|
|
299
|
+
|
|
300
|
+
namespace folly {
|
|
301
|
+
|
|
302
|
+
// Defines an RCU domain. RCU readers within a given domain block updaters
|
|
303
|
+
// (rcu_synchronize, call, retire, or rcu_retire) only within that same
|
|
304
|
+
// domain, and have no effect on updaters associated with other rcu_domains.
|
|
305
|
+
//
|
|
306
|
+
// Custom domains are normally not necessary because the default domain works
|
|
307
|
+
// in most cases. But it makes sense to create a separate domain for uses
|
|
308
|
+
// having unusually long read-side critical sections (many milliseconds)
|
|
309
|
+
// or uses that cannot tolerate moderately long read-side critical sections
|
|
310
|
+
// from others.
|
|
311
|
+
//
|
|
312
|
+
// The executor runs grace-period processing and invokes deleters.
|
|
313
|
+
// The default of QueuedImmediateExecutor is very light weight (compared
|
|
314
|
+
// to, say, a thread pool). However, the flip side of this light weight
|
|
315
|
+
// is that the overhead of this processing and invocation is incurred within
|
|
316
|
+
// the executor invoking the RCU primitive, for example, rcu_retire().
|
|
317
|
+
//
|
|
318
|
+
// The domain must survive all its readers.
|
|
319
|
+
class rcu_domain {
|
|
320
|
+
using list_head = typename detail::ThreadCachedLists::ListHead;
|
|
321
|
+
using list_node = typename detail::ThreadCachedLists::Node;
|
|
322
|
+
|
|
323
|
+
public:
|
|
324
|
+
/*
|
|
325
|
+
* If an executor is passed, it is used to run calls and delete
|
|
326
|
+
* retired objects.
|
|
327
|
+
*/
|
|
328
|
+
explicit rcu_domain(Executor* executor = nullptr) noexcept
|
|
329
|
+
: executor_(executor ? executor : &QueuedImmediateExecutor::instance()) {}
|
|
330
|
+
|
|
331
|
+
rcu_domain(const rcu_domain&) = delete;
|
|
332
|
+
rcu_domain(rcu_domain&&) = delete;
|
|
333
|
+
rcu_domain& operator=(const rcu_domain&) = delete;
|
|
334
|
+
rcu_domain& operator=(rcu_domain&&) = delete;
|
|
335
|
+
|
|
336
|
+
// Reader locks: Prevent any calls from occuring, retired memory
|
|
337
|
+
// from being freed, and synchronize() calls from completing until
|
|
338
|
+
// all preceding lock() sections are finished.
|
|
339
|
+
|
|
340
|
+
/*
|
|
341
|
+
* Enter a read region on the current thread.
|
|
342
|
+
*
|
|
343
|
+
* Note that despite the function being marked noexcept, an allocation
|
|
344
|
+
* may take place in folly::ThreadLocal the first time a thread enters a read
|
|
345
|
+
* region. Regardless, for now, we're marking this as noexcept to match the
|
|
346
|
+
* N4895 standard proposal:
|
|
347
|
+
*
|
|
348
|
+
* https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/n4895.pdf
|
|
349
|
+
*/
|
|
350
|
+
FOLLY_ALWAYS_INLINE void lock() noexcept {
|
|
351
|
+
counters_.increment(version_.load(std::memory_order_acquire));
|
|
352
|
+
}
|
|
353
|
+
FOLLY_ALWAYS_INLINE void unlock() noexcept { counters_.decrement(); }
|
|
354
|
+
|
|
355
|
+
// Invokes cbin(this) and then deletes this some time after all pre-existing
|
|
356
|
+
// RCU readers have completed. See rcu_synchronize() for more information
|
|
357
|
+
// about RCU readers and domains.
|
|
358
|
+
template <typename T>
|
|
359
|
+
void call(T&& cbin) {
|
|
360
|
+
auto node = new list_node;
|
|
361
|
+
node->cb_ = [node, cb = std::forward<T>(cbin)]() {
|
|
362
|
+
cb();
|
|
363
|
+
delete node;
|
|
364
|
+
};
|
|
365
|
+
retire(node);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// Invokes node->cb_(node) some time after all pre-existing RCU readers
|
|
369
|
+
// have completed. See rcu_synchronize() for more information about RCU
|
|
370
|
+
// readers and domains.
|
|
371
|
+
void retire(list_node* node) noexcept {
|
|
372
|
+
q_.push(node);
|
|
373
|
+
|
|
374
|
+
// Note that it's likely we hold a read lock here,
|
|
375
|
+
// so we can only half_sync(false). half_sync(true)
|
|
376
|
+
// or a synchronize() call might block forever.
|
|
377
|
+
uint64_t time = std::chrono::duration_cast<std::chrono::milliseconds>(
|
|
378
|
+
std::chrono::steady_clock::now().time_since_epoch())
|
|
379
|
+
.count();
|
|
380
|
+
auto syncTime = syncTime_.load(std::memory_order_relaxed);
|
|
381
|
+
if (time > syncTime + syncTimePeriod_ &&
|
|
382
|
+
syncTime_.compare_exchange_strong(
|
|
383
|
+
syncTime, time, std::memory_order_relaxed)) {
|
|
384
|
+
list_head finished;
|
|
385
|
+
{
|
|
386
|
+
std::lock_guard<std::mutex> g(syncMutex_);
|
|
387
|
+
half_sync(false, finished);
|
|
388
|
+
}
|
|
389
|
+
// callbacks are called outside of syncMutex_
|
|
390
|
+
finished.forEach(
|
|
391
|
+
[&](list_node* item) { executor_->add(std::move(item->cb_)); });
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// Ensure concurrent critical sections have finished.
|
|
396
|
+
// Always waits for full synchronization.
|
|
397
|
+
// read lock *must not* be held.
|
|
398
|
+
void synchronize() noexcept {
|
|
399
|
+
auto curr = version_.load(std::memory_order_acquire);
|
|
400
|
+
// Target is two epochs away.
|
|
401
|
+
auto target = curr + 2;
|
|
402
|
+
while (true) {
|
|
403
|
+
// Try to assign ourselves to do the sync work.
|
|
404
|
+
// If someone else is already assigned, we can wait for
|
|
405
|
+
// the work to be finished by waiting on turn_.
|
|
406
|
+
auto work = work_.load(std::memory_order_acquire);
|
|
407
|
+
auto tmp = work;
|
|
408
|
+
if (work < target && work_.compare_exchange_strong(tmp, target)) {
|
|
409
|
+
list_head finished;
|
|
410
|
+
{
|
|
411
|
+
std::lock_guard<std::mutex> g(syncMutex_);
|
|
412
|
+
while (version_.load(std::memory_order_acquire) < target) {
|
|
413
|
+
half_sync(true, finished);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// callbacks are called outside of syncMutex_
|
|
417
|
+
finished.forEach(
|
|
418
|
+
[&](list_node* node) { executor_->add(std::move(node->cb_)); });
|
|
419
|
+
return;
|
|
420
|
+
} else {
|
|
421
|
+
if (version_.load(std::memory_order_acquire) >= target) {
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
std::atomic<uint32_t> cutoff{100};
|
|
425
|
+
// Wait for someone to finish the work.
|
|
426
|
+
turn_.tryWaitForTurn(to_narrow(work), cutoff, false);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
private:
|
|
432
|
+
detail::ThreadCachedReaders counters_;
|
|
433
|
+
// Global epoch.
|
|
434
|
+
std::atomic<uint64_t> version_{0};
|
|
435
|
+
// Future epochs being driven by threads in synchronize
|
|
436
|
+
std::atomic<uint64_t> work_{0};
|
|
437
|
+
// Matches version_, for waking up threads in synchronize that are
|
|
438
|
+
// sharing an epoch.
|
|
439
|
+
detail::TurnSequencer<std::atomic> turn_;
|
|
440
|
+
// Only one thread can drive half_sync.
|
|
441
|
+
std::mutex syncMutex_;
|
|
442
|
+
// Currently half_sync takes ~16ms due to heavy barriers.
|
|
443
|
+
// Ensure that if used in a single thread, max GC time
|
|
444
|
+
// is limited to 1% of total CPU time.
|
|
445
|
+
static constexpr uint64_t syncTimePeriod_{1600 * 2 /* full sync is 2x */};
|
|
446
|
+
std::atomic<uint64_t> syncTime_{0};
|
|
447
|
+
// call()s waiting to move through two epochs.
|
|
448
|
+
detail::ThreadCachedLists q_;
|
|
449
|
+
// Executor callbacks will eventually be run on.
|
|
450
|
+
Executor* executor_{nullptr};
|
|
451
|
+
|
|
452
|
+
// Queues for callbacks waiting to go through two epochs.
|
|
453
|
+
list_head queues_[2]{};
|
|
454
|
+
|
|
455
|
+
// Move queues through one epoch (half of a full synchronize()).
|
|
456
|
+
// Will block waiting for readers to exit if blocking is true.
|
|
457
|
+
// blocking must *not* be true if the current thread is locked,
|
|
458
|
+
// or will deadlock.
|
|
459
|
+
//
|
|
460
|
+
// returns a list of callbacks ready to run in finished.
|
|
461
|
+
void half_sync(bool blocking, list_head& finished) {
|
|
462
|
+
auto curr = version_.load(std::memory_order_acquire);
|
|
463
|
+
auto next = curr + 1;
|
|
464
|
+
|
|
465
|
+
// Push all work to a queue for moving through two epochs. One
|
|
466
|
+
// version is not enough because of late readers of the version_
|
|
467
|
+
// counter in lock_shared.
|
|
468
|
+
//
|
|
469
|
+
// Note that for a similar reason we can't swap out the q here,
|
|
470
|
+
// and instead drain it, so concurrent calls to call() are safe,
|
|
471
|
+
// and will wait for the next epoch.
|
|
472
|
+
q_.collect(queues_[0]);
|
|
473
|
+
|
|
474
|
+
if (blocking) {
|
|
475
|
+
counters_.waitForZero(next & 1);
|
|
476
|
+
} else {
|
|
477
|
+
if (!counters_.epochIsClear(next & 1)) {
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// Run callbacks that have been through two epochs, and swap queues
|
|
483
|
+
// for those only through a single epoch.
|
|
484
|
+
finished.splice(queues_[1]);
|
|
485
|
+
queues_[1].splice(queues_[0]);
|
|
486
|
+
|
|
487
|
+
version_.store(next, std::memory_order_release);
|
|
488
|
+
// Notify synchronous waiters in synchronize().
|
|
489
|
+
turn_.completeTurn(to_narrow(curr));
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
extern folly::Indestructible<rcu_domain*> rcu_default_domain_;
|
|
494
|
+
|
|
495
|
+
inline rcu_domain& rcu_default_domain() {
|
|
496
|
+
return **rcu_default_domain_;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
// Waits for all pre-existing RCU readers to complete.
|
|
500
|
+
// RCU readers will normally be marked using the RAII interface
|
|
501
|
+
// std::scoped_lock<folly::rcu_domain>, as in:
|
|
502
|
+
//
|
|
503
|
+
// std::scoped_lock<folly::rcu_domain> rcuReader(rcu_default_domain());
|
|
504
|
+
//
|
|
505
|
+
// Other locking primitives that provide moveable semantics such as
|
|
506
|
+
// std::unique_lock may be used as well.
|
|
507
|
+
//
|
|
508
|
+
// Note that rcu_synchronize is not obligated to wait for RCU readers that
|
|
509
|
+
// start after rcu_synchronize starts. Note also that holding a lock across
|
|
510
|
+
// rcu_synchronize that is acquired by any deleter (as in is passed to
|
|
511
|
+
// rcu_retire, retire, or call) will result in deadlock. Note that such
|
|
512
|
+
// deadlock will normally only occur with user-written deleters, as in the
|
|
513
|
+
// default of delele will normally be immune to such deadlocks.
|
|
514
|
+
inline void rcu_synchronize(
|
|
515
|
+
rcu_domain& domain = rcu_default_domain()) noexcept {
|
|
516
|
+
domain.synchronize();
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
// Waits for all in-flight deleters to complete.
|
|
520
|
+
//
|
|
521
|
+
// An in-flight deleter is one that has already been passed to rcu_retire,
|
|
522
|
+
// retire, or call. In other words, rcu_barrier is not obligated to wait
|
|
523
|
+
// on any deleters passed to later calls to rcu_retire, retire, or call.
|
|
524
|
+
//
|
|
525
|
+
// And yes, the current implementation is buggy, and will be fixed.
|
|
526
|
+
inline void rcu_barrier(rcu_domain& domain = rcu_default_domain()) noexcept {
|
|
527
|
+
domain.synchronize();
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
// Free-function retire. Always allocates.
|
|
531
|
+
//
|
|
532
|
+
// This will invoke the deleter d(p) asynchronously some time after all
|
|
533
|
+
// pre-existing RCU readers have completed. See synchronize_rcu() for more
|
|
534
|
+
// information about RCU readers and domains.
|
|
535
|
+
template <typename T, typename D = std::default_delete<T>>
|
|
536
|
+
void rcu_retire(T* p, D d = {}, rcu_domain& domain = rcu_default_domain()) {
|
|
537
|
+
domain.call([p, del = std::move(d)]() { del(p); });
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
// Base class for rcu objects. retire() will use preallocated storage
|
|
541
|
+
// from rcu_obj_base, vs. rcu_retire() which always allocates.
|
|
542
|
+
template <typename T, typename D = std::default_delete<T>>
|
|
543
|
+
class rcu_obj_base : detail::ThreadCachedListsBase::Node {
|
|
544
|
+
public:
|
|
545
|
+
void retire(D d = {}, rcu_domain& domain = rcu_default_domain()) {
|
|
546
|
+
// This implementation assumes folly::Function has enough
|
|
547
|
+
// inline storage for D, otherwise, it allocates.
|
|
548
|
+
this->cb_ = [this, d = std::move(d)]() { d(static_cast<T*>(this)); };
|
|
549
|
+
domain.retire(this);
|
|
550
|
+
}
|
|
551
|
+
};
|
|
552
|
+
|
|
553
|
+
} // namespace folly
|