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,478 @@
|
|
|
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
|
+
/**
|
|
18
|
+
* Improved thread local storage for non-trivial types (similar speed as
|
|
19
|
+
* pthread_getspecific but only consumes a single pthread_key_t, and 4x faster
|
|
20
|
+
* than boost::thread_specific_ptr).
|
|
21
|
+
*
|
|
22
|
+
* ThreadLocal objects can be grouped together logically under a tag. Within
|
|
23
|
+
* a tag, each object has a unique id. The combination of tag and id is used to
|
|
24
|
+
* locate the managed object corresponding to the current thread.
|
|
25
|
+
*
|
|
26
|
+
* Also includes an accessor interface to iterate all of the managed
|
|
27
|
+
* objects owned by a ThreadLocal object, each corresponding to a
|
|
28
|
+
* separate thread. accessAllThreads() initializes an accessor
|
|
29
|
+
* which holds
|
|
30
|
+
* a lock *that blocks all creation and destruction of managed
|
|
31
|
+
* objects managed by the ThreadLocal. The accessor can be used
|
|
32
|
+
* as an iterable container. Note: for now, the accessor also happens to hold
|
|
33
|
+
* other per tag global locks and hence calls to accessAllThreads() are
|
|
34
|
+
* serialized at tag level.
|
|
35
|
+
*
|
|
36
|
+
* accessAllThreads() can race with destruction of thread-local elements. We
|
|
37
|
+
* provide a strict mode which is dangerous because it requires the access lock
|
|
38
|
+
* to be held while destroying thread-local elements which could cause
|
|
39
|
+
* deadlocks. We gate this mode behind the AccessModeStrict template parameter.
|
|
40
|
+
*
|
|
41
|
+
* Intended use is for frequent write, infrequent read data access patterns such
|
|
42
|
+
* as counters.
|
|
43
|
+
*
|
|
44
|
+
* There are two classes here - ThreadLocal and ThreadLocalPtr. ThreadLocalPtr
|
|
45
|
+
* has semantics similar to boost::thread_specific_ptr. ThreadLocal is a thin
|
|
46
|
+
* wrapper around ThreadLocalPtr that manages allocation automatically.
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
#pragma once
|
|
50
|
+
|
|
51
|
+
#include <iterator>
|
|
52
|
+
#include <thread>
|
|
53
|
+
#include <type_traits>
|
|
54
|
+
#include <utility>
|
|
55
|
+
|
|
56
|
+
#include <folly/Likely.h>
|
|
57
|
+
#include <folly/Portability.h>
|
|
58
|
+
#include <folly/ScopeGuard.h>
|
|
59
|
+
#include <folly/SharedMutex.h>
|
|
60
|
+
#include <folly/detail/ThreadLocalDetail.h>
|
|
61
|
+
|
|
62
|
+
namespace folly {
|
|
63
|
+
|
|
64
|
+
template <class T, class Tag, class AccessMode>
|
|
65
|
+
class ThreadLocalPtr;
|
|
66
|
+
|
|
67
|
+
template <class T, class Tag = void, class AccessMode = void>
|
|
68
|
+
class ThreadLocal {
|
|
69
|
+
public:
|
|
70
|
+
constexpr ThreadLocal() : constructor_([]() { return T(); }) {}
|
|
71
|
+
|
|
72
|
+
template <typename F, std::enable_if_t<is_invocable_r_v<T, F>, int> = 0>
|
|
73
|
+
explicit ThreadLocal(F&& constructor)
|
|
74
|
+
: constructor_(std::forward<F>(constructor)) {}
|
|
75
|
+
|
|
76
|
+
FOLLY_ERASE T* get() const {
|
|
77
|
+
auto const ptr = tlp_.get();
|
|
78
|
+
return FOLLY_LIKELY(!!ptr) ? ptr : makeTlp();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// may return null
|
|
82
|
+
FOLLY_ERASE T* get_existing() const { return tlp_.get(); }
|
|
83
|
+
|
|
84
|
+
T* operator->() const { return get(); }
|
|
85
|
+
|
|
86
|
+
T& operator*() const { return *get(); }
|
|
87
|
+
|
|
88
|
+
void reset(T* newPtr = nullptr) { tlp_.reset(newPtr); }
|
|
89
|
+
|
|
90
|
+
typedef typename ThreadLocalPtr<T, Tag, AccessMode>::Accessor Accessor;
|
|
91
|
+
Accessor accessAllThreads() const { return tlp_.accessAllThreads(); }
|
|
92
|
+
|
|
93
|
+
// movable
|
|
94
|
+
ThreadLocal(ThreadLocal&&) = default;
|
|
95
|
+
ThreadLocal& operator=(ThreadLocal&&) = default;
|
|
96
|
+
|
|
97
|
+
private:
|
|
98
|
+
// non-copyable
|
|
99
|
+
ThreadLocal(const ThreadLocal&) = delete;
|
|
100
|
+
ThreadLocal& operator=(const ThreadLocal&) = delete;
|
|
101
|
+
|
|
102
|
+
FOLLY_NOINLINE T* makeTlp() const {
|
|
103
|
+
auto const ptr = new T(constructor_());
|
|
104
|
+
tlp_.reset(ptr);
|
|
105
|
+
return ptr;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
mutable ThreadLocalPtr<T, Tag, AccessMode> tlp_;
|
|
109
|
+
std::function<T()> constructor_;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* The idea here is that __thread is faster than pthread_getspecific, so we
|
|
114
|
+
* keep a __thread array of pointers to objects (ThreadEntry::elements) where
|
|
115
|
+
* each array has an index for each unique instance of the ThreadLocalPtr
|
|
116
|
+
* object. Each ThreadLocalPtr object has a unique id that is an index into
|
|
117
|
+
* these arrays so we can fetch the correct object from thread local storage
|
|
118
|
+
* very efficiently.
|
|
119
|
+
*
|
|
120
|
+
* In order to prevent unbounded growth of the id space and thus huge
|
|
121
|
+
* ThreadEntry::elements, arrays, for example due to continuous creation and
|
|
122
|
+
* destruction of ThreadLocalPtr objects, we keep a set of all active
|
|
123
|
+
* instances. When an instance is destroyed we remove it from the active
|
|
124
|
+
* set and insert the id into freeIds_ for reuse. These operations require a
|
|
125
|
+
* global mutex, but only happen at construction and destruction time.
|
|
126
|
+
*
|
|
127
|
+
* We use a single global pthread_key_t per Tag to manage object destruction and
|
|
128
|
+
* memory cleanup upon thread exit because there is a finite number of
|
|
129
|
+
* pthread_key_t's available per machine.
|
|
130
|
+
*
|
|
131
|
+
* NOTE: Apple platforms don't support the same semantics for __thread that
|
|
132
|
+
* Linux does (and it's only supported at all on i386). For these, use
|
|
133
|
+
* pthread_setspecific()/pthread_getspecific() for the per-thread
|
|
134
|
+
* storage. Windows (MSVC and GCC) does support the same semantics
|
|
135
|
+
* with __declspec(thread)
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
template <class T, class Tag = void, class AccessMode = void>
|
|
139
|
+
class ThreadLocalPtr {
|
|
140
|
+
private:
|
|
141
|
+
typedef threadlocal_detail::StaticMeta<Tag, AccessMode> StaticMeta;
|
|
142
|
+
|
|
143
|
+
using AccessAllThreadsEnabled = Negation<std::is_same<Tag, void>>;
|
|
144
|
+
|
|
145
|
+
public:
|
|
146
|
+
constexpr ThreadLocalPtr() : id_() {}
|
|
147
|
+
|
|
148
|
+
ThreadLocalPtr(ThreadLocalPtr&& other) noexcept : id_(std::move(other.id_)) {}
|
|
149
|
+
|
|
150
|
+
ThreadLocalPtr& operator=(ThreadLocalPtr&& other) {
|
|
151
|
+
assert(this != &other);
|
|
152
|
+
destroy();
|
|
153
|
+
id_ = std::move(other.id_);
|
|
154
|
+
return *this;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
~ThreadLocalPtr() { destroy(); }
|
|
158
|
+
|
|
159
|
+
T* get() const {
|
|
160
|
+
threadlocal_detail::ElementWrapper& w = StaticMeta::get(&id_);
|
|
161
|
+
return static_cast<T*>(w.ptr);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
T* operator->() const { return get(); }
|
|
165
|
+
|
|
166
|
+
T& operator*() const { return *get(); }
|
|
167
|
+
|
|
168
|
+
T* release() {
|
|
169
|
+
auto rlocked = getForkGuard();
|
|
170
|
+
threadlocal_detail::ThreadEntry* te = StaticMeta::getThreadEntry(&id_);
|
|
171
|
+
auto id = id_.getOrInvalid();
|
|
172
|
+
// Only valid index into the the elements array
|
|
173
|
+
DCHECK_NE(id, threadlocal_detail::kEntryIDInvalid);
|
|
174
|
+
return static_cast<T*>(te->releaseElement(id));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
void reset(T* newPtr = nullptr) {
|
|
178
|
+
auto rlocked = getForkGuard();
|
|
179
|
+
auto guard = makeGuard([&] { delete newPtr; });
|
|
180
|
+
threadlocal_detail::ThreadEntry* te = StaticMeta::getThreadEntry(&id_);
|
|
181
|
+
uint32_t id = id_.getOrInvalid();
|
|
182
|
+
// Only valid index into the the elements array
|
|
183
|
+
DCHECK_NE(id, threadlocal_detail::kEntryIDInvalid);
|
|
184
|
+
te->resetElement(newPtr, id);
|
|
185
|
+
guard.dismiss();
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
explicit operator bool() const { return get() != nullptr; }
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* reset() that transfers ownership from a smart pointer
|
|
192
|
+
*/
|
|
193
|
+
template <
|
|
194
|
+
typename SourceT,
|
|
195
|
+
typename Deleter,
|
|
196
|
+
typename = typename std::enable_if<
|
|
197
|
+
std::is_convertible<SourceT*, T*>::value>::type>
|
|
198
|
+
void reset(std::unique_ptr<SourceT, Deleter> source) {
|
|
199
|
+
auto deleter = [delegate = source.get_deleter()](
|
|
200
|
+
T* ptr, TLPDestructionMode) { delegate(ptr); };
|
|
201
|
+
reset(source.release(), deleter);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* reset() that transfers ownership from a smart pointer with the default
|
|
206
|
+
* deleter
|
|
207
|
+
*/
|
|
208
|
+
template <
|
|
209
|
+
typename SourceT,
|
|
210
|
+
typename = typename std::enable_if<
|
|
211
|
+
std::is_convertible<SourceT*, T*>::value>::type>
|
|
212
|
+
void reset(std::unique_ptr<SourceT> source) {
|
|
213
|
+
reset(source.release());
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* reset() with a custom deleter:
|
|
218
|
+
* deleter(T* ptr, TLPDestructionMode mode)
|
|
219
|
+
* "mode" is ALL_THREADS if we're destructing this ThreadLocalPtr (and thus
|
|
220
|
+
* deleting pointers for all threads), and THIS_THREAD if we're only deleting
|
|
221
|
+
* the member for one thread (because of thread exit or reset()).
|
|
222
|
+
* Invoking the deleter must not throw.
|
|
223
|
+
*/
|
|
224
|
+
template <class Deleter>
|
|
225
|
+
void reset(T* newPtr, const Deleter& deleter) {
|
|
226
|
+
auto guard = makeGuard([&] {
|
|
227
|
+
if (newPtr) {
|
|
228
|
+
deleter(newPtr, TLPDestructionMode::THIS_THREAD);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
auto rlocked = getForkGuard();
|
|
233
|
+
threadlocal_detail::ThreadEntry* te = StaticMeta::getThreadEntry(&id_);
|
|
234
|
+
uint32_t id = id_.getOrInvalid();
|
|
235
|
+
// Only valid index into the the elements array
|
|
236
|
+
DCHECK_NE(id, threadlocal_detail::kEntryIDInvalid);
|
|
237
|
+
te->resetElement(newPtr, deleter, id);
|
|
238
|
+
guard.dismiss();
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
void reset(const std::shared_ptr<T>& newPtr) {
|
|
242
|
+
reset(newPtr.get(), threadlocal_detail::SharedPtrDeleter{newPtr});
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Holds a global lock for iteration through all thread local child objects.
|
|
246
|
+
// Can be used as an iterable container.
|
|
247
|
+
// Use accessAllThreads() to obtain one.
|
|
248
|
+
class Accessor {
|
|
249
|
+
friend class ThreadLocalPtr<T, Tag, AccessMode>;
|
|
250
|
+
|
|
251
|
+
threadlocal_detail::StaticMetaBase& meta_;
|
|
252
|
+
SharedMutex* accessAllThreadsLock_;
|
|
253
|
+
SharedMutex* forkHandlerLock_;
|
|
254
|
+
std::mutex* lock_;
|
|
255
|
+
uint32_t id_;
|
|
256
|
+
|
|
257
|
+
// Prevent the entry set from changing while we are iterating over it.
|
|
258
|
+
// reset() calls to populate will acquire shared lock on the id's set.
|
|
259
|
+
threadlocal_detail::StaticMetaBase::SynchronizedThreadEntrySet::WLockedPtr
|
|
260
|
+
wlockedThreadEntrySet_;
|
|
261
|
+
|
|
262
|
+
public:
|
|
263
|
+
class Iterator;
|
|
264
|
+
friend class Iterator;
|
|
265
|
+
|
|
266
|
+
// The iterators obtained from Accessor are bidirectional iterators.
|
|
267
|
+
class Iterator {
|
|
268
|
+
friend class Accessor;
|
|
269
|
+
const Accessor* accessor_{nullptr};
|
|
270
|
+
using InnerVector = threadlocal_detail::ThreadEntrySet::EntryVector;
|
|
271
|
+
using InnerIterator = InnerVector::iterator;
|
|
272
|
+
|
|
273
|
+
InnerVector& vec_;
|
|
274
|
+
InnerIterator iter_;
|
|
275
|
+
|
|
276
|
+
void increment() {
|
|
277
|
+
if (iter_ != vec_.end()) {
|
|
278
|
+
++iter_;
|
|
279
|
+
incrementToValid();
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
void decrement() {
|
|
284
|
+
if (iter_ != vec_.begin()) {
|
|
285
|
+
--iter_;
|
|
286
|
+
decrementToValid();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const T& dereference() const {
|
|
291
|
+
return *static_cast<T*>((*iter_)->elements[accessor_->id_].ptr);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
T& dereference() {
|
|
295
|
+
return *static_cast<T*>((*iter_)->elements[accessor_->id_].ptr);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
bool equal(const Iterator& other) const {
|
|
299
|
+
return (accessor_->id_ == other.accessor_->id_ && iter_ == other.iter_);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
void setToEnd() { iter_ = vec_.end(); }
|
|
303
|
+
|
|
304
|
+
explicit Iterator(const Accessor* accessor, bool toEnd = false)
|
|
305
|
+
: accessor_(accessor),
|
|
306
|
+
vec_(accessor_->wlockedThreadEntrySet_->threadEntries),
|
|
307
|
+
iter_(vec_.begin()) {
|
|
308
|
+
if (toEnd) {
|
|
309
|
+
setToEnd();
|
|
310
|
+
} else {
|
|
311
|
+
incrementToValid();
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// we just need to check the ptr since it can be set to nullptr
|
|
316
|
+
// even if the entry is part of the list
|
|
317
|
+
bool valid() const {
|
|
318
|
+
return (iter_ != vec_.end() && (*iter_)->elements[accessor_->id_].ptr);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
void incrementToValid() {
|
|
322
|
+
for (; iter_ != vec_.end() && !valid(); ++iter_) {
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
void decrementToValid() {
|
|
327
|
+
for (; iter_ != vec_.begin() && !valid(); --iter_) {
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
public:
|
|
332
|
+
using difference_type = ssize_t;
|
|
333
|
+
using value_type = T;
|
|
334
|
+
using reference = T const&;
|
|
335
|
+
using pointer = T const*;
|
|
336
|
+
using iterator_category = std::bidirectional_iterator_tag;
|
|
337
|
+
|
|
338
|
+
Iterator() = default;
|
|
339
|
+
|
|
340
|
+
Iterator& operator++() {
|
|
341
|
+
increment();
|
|
342
|
+
return *this;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
Iterator& operator++(int) {
|
|
346
|
+
Iterator copy(*this);
|
|
347
|
+
increment();
|
|
348
|
+
return copy;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
Iterator& operator--() {
|
|
352
|
+
decrement();
|
|
353
|
+
return *this;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
Iterator& operator--(int) {
|
|
357
|
+
Iterator copy(*this);
|
|
358
|
+
decrement();
|
|
359
|
+
return copy;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
T& operator*() { return dereference(); }
|
|
363
|
+
|
|
364
|
+
T const& operator*() const { return dereference(); }
|
|
365
|
+
|
|
366
|
+
T* operator->() { return &dereference(); }
|
|
367
|
+
|
|
368
|
+
T const* operator->() const { return &dereference(); }
|
|
369
|
+
|
|
370
|
+
bool operator==(Iterator const& rhs) const { return equal(rhs); }
|
|
371
|
+
|
|
372
|
+
bool operator!=(Iterator const& rhs) const { return !equal(rhs); }
|
|
373
|
+
|
|
374
|
+
std::thread::id getThreadId() const { return (*iter_)->tid(); }
|
|
375
|
+
|
|
376
|
+
uint64_t getOSThreadId() const { return (*iter_)->tid_os; }
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
~Accessor() { release(); }
|
|
380
|
+
|
|
381
|
+
Iterator begin() const { return Iterator(this); }
|
|
382
|
+
|
|
383
|
+
Iterator end() const { return Iterator(this, true); }
|
|
384
|
+
|
|
385
|
+
Accessor(const Accessor&) = delete;
|
|
386
|
+
Accessor& operator=(const Accessor&) = delete;
|
|
387
|
+
|
|
388
|
+
Accessor(Accessor&& other) noexcept
|
|
389
|
+
: meta_(other.meta_),
|
|
390
|
+
accessAllThreadsLock_(other.accessAllThreadsLock_),
|
|
391
|
+
forkHandlerLock_(other.forkHandlerLock_),
|
|
392
|
+
lock_(other.lock_),
|
|
393
|
+
id_(other.id_) {
|
|
394
|
+
other.id_ = 0;
|
|
395
|
+
other.accessAllThreadsLock_ = nullptr;
|
|
396
|
+
other.forkHandlerLock_ = nullptr;
|
|
397
|
+
other.lock_ = nullptr;
|
|
398
|
+
wlockedThreadEntrySet_ = std::move(other.wlockedThreadEntrySet_);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
Accessor& operator=(Accessor&& other) noexcept {
|
|
402
|
+
// Each Tag has its own unique meta, and accessors with different Tags
|
|
403
|
+
// have different types. So either *this is empty, or this and other
|
|
404
|
+
// have the same tag. But if they have the same tag, they have the same
|
|
405
|
+
// meta (and lock), so they'd both hold the lock at the same time,
|
|
406
|
+
// which is impossible, which leaves only one possible scenario --
|
|
407
|
+
// *this is empty. Assert it.
|
|
408
|
+
assert(&meta_ == &other.meta_);
|
|
409
|
+
assert(lock_ == nullptr);
|
|
410
|
+
using std::swap;
|
|
411
|
+
swap(accessAllThreadsLock_, other.accessAllThreadsLock_);
|
|
412
|
+
swap(forkHandlerLock_, other.forkHandlerLock_);
|
|
413
|
+
swap(lock_, other.lock_);
|
|
414
|
+
swap(id_, other.id_);
|
|
415
|
+
wlockedThreadEntrySet_.unlock();
|
|
416
|
+
swap(wlockedThreadEntrySet_, other.wlockedThreadEntrySet_);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
Accessor()
|
|
420
|
+
: meta_(threadlocal_detail::StaticMeta<Tag, AccessMode>::instance()),
|
|
421
|
+
accessAllThreadsLock_(nullptr),
|
|
422
|
+
forkHandlerLock_(nullptr),
|
|
423
|
+
lock_(nullptr),
|
|
424
|
+
id_(0) {}
|
|
425
|
+
|
|
426
|
+
private:
|
|
427
|
+
explicit Accessor(uint32_t id)
|
|
428
|
+
: meta_(threadlocal_detail::StaticMeta<Tag, AccessMode>::instance()),
|
|
429
|
+
accessAllThreadsLock_(&meta_.accessAllThreadsLock_),
|
|
430
|
+
forkHandlerLock_(&meta_.forkHandlerLock_),
|
|
431
|
+
lock_(&meta_.lock_) {
|
|
432
|
+
forkHandlerLock_->lock_shared();
|
|
433
|
+
accessAllThreadsLock_->lock();
|
|
434
|
+
id_ = id;
|
|
435
|
+
wlockedThreadEntrySet_ = meta_.allId2ThreadEntrySets_[id_].wlock();
|
|
436
|
+
lock_->lock();
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
void release() {
|
|
440
|
+
if (lock_) {
|
|
441
|
+
lock_->unlock();
|
|
442
|
+
DCHECK(accessAllThreadsLock_ != nullptr);
|
|
443
|
+
accessAllThreadsLock_->unlock();
|
|
444
|
+
DCHECK(forkHandlerLock_ != nullptr);
|
|
445
|
+
forkHandlerLock_->unlock_shared();
|
|
446
|
+
id_ = 0;
|
|
447
|
+
lock_ = nullptr;
|
|
448
|
+
accessAllThreadsLock_ = nullptr;
|
|
449
|
+
forkHandlerLock_ = nullptr;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
// accessor allows a client to iterate through all thread local child
|
|
455
|
+
// elements of this ThreadLocal instance. Holds a global lock for each <Tag>
|
|
456
|
+
Accessor accessAllThreads() const {
|
|
457
|
+
static_assert(
|
|
458
|
+
AccessAllThreadsEnabled::value,
|
|
459
|
+
"Must use a unique Tag to use the accessAllThreads feature");
|
|
460
|
+
return Accessor(id_.getOrAllocate(StaticMeta::instance()));
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
private:
|
|
464
|
+
void destroy() { StaticMeta::instance().destroy(&id_); }
|
|
465
|
+
|
|
466
|
+
// non-copyable
|
|
467
|
+
ThreadLocalPtr(const ThreadLocalPtr&) = delete;
|
|
468
|
+
ThreadLocalPtr& operator=(const ThreadLocalPtr&) = delete;
|
|
469
|
+
|
|
470
|
+
static auto getForkGuard() {
|
|
471
|
+
auto& mutex = StaticMeta::instance().forkHandlerLock_;
|
|
472
|
+
return std::shared_lock{mutex};
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
mutable typename StaticMeta::EntryID id_;
|
|
476
|
+
};
|
|
477
|
+
|
|
478
|
+
} // namespace folly
|
|
@@ -0,0 +1,78 @@
|
|
|
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/TimeoutQueue.h>
|
|
18
|
+
|
|
19
|
+
#include <algorithm>
|
|
20
|
+
#include <limits>
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
23
|
+
namespace folly {
|
|
24
|
+
|
|
25
|
+
TimeoutQueue::Id TimeoutQueue::add(
|
|
26
|
+
int64_t now, int64_t delay, Callback callback) {
|
|
27
|
+
Id id = nextId_++;
|
|
28
|
+
timeouts_.insert({id, now + delay, -1, std::move(callback)});
|
|
29
|
+
return id;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
TimeoutQueue::Id TimeoutQueue::addRepeating(
|
|
33
|
+
int64_t now, int64_t interval, Callback callback) {
|
|
34
|
+
Id id = nextId_++;
|
|
35
|
+
timeouts_.insert({id, now + interval, interval, std::move(callback)});
|
|
36
|
+
return id;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
int64_t TimeoutQueue::nextExpiration() const {
|
|
40
|
+
return (
|
|
41
|
+
timeouts_.empty() ? std::numeric_limits<int64_t>::max()
|
|
42
|
+
: timeouts_.get<BY_EXPIRATION>().begin()->expiration);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
bool TimeoutQueue::erase(Id id) {
|
|
46
|
+
return timeouts_.get<BY_ID>().erase(id);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
int64_t TimeoutQueue::runInternal(int64_t now, bool onceOnly) {
|
|
50
|
+
auto& byExpiration = timeouts_.get<BY_EXPIRATION>();
|
|
51
|
+
int64_t nextExp;
|
|
52
|
+
do {
|
|
53
|
+
const auto end = byExpiration.upper_bound(now);
|
|
54
|
+
std::vector<Event> expired;
|
|
55
|
+
std::move(byExpiration.begin(), end, std::back_inserter(expired));
|
|
56
|
+
byExpiration.erase(byExpiration.begin(), end);
|
|
57
|
+
for (const auto& event : expired) {
|
|
58
|
+
// Reinsert if repeating, do this before executing callbacks
|
|
59
|
+
// so the callbacks have a chance to call erase
|
|
60
|
+
if (event.repeatInterval >= 0) {
|
|
61
|
+
timeouts_.insert(
|
|
62
|
+
{event.id,
|
|
63
|
+
now + event.repeatInterval,
|
|
64
|
+
event.repeatInterval,
|
|
65
|
+
event.callback});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Call callbacks
|
|
70
|
+
for (const auto& event : expired) {
|
|
71
|
+
event.callback(event.id, now);
|
|
72
|
+
}
|
|
73
|
+
nextExp = nextExpiration();
|
|
74
|
+
} while (!onceOnly && nextExp <= now);
|
|
75
|
+
return nextExp;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
} // namespace folly
|
|
@@ -0,0 +1,123 @@
|
|
|
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
|
+
/**
|
|
18
|
+
* Simple timeout queue. Call user-specified callbacks when their timeouts
|
|
19
|
+
* expire.
|
|
20
|
+
*
|
|
21
|
+
* This class assumes that "time" is an int64_t and doesn't care about time
|
|
22
|
+
* units (seconds, milliseconds, etc). You call runOnce() / runLoop() using
|
|
23
|
+
* the same time units that you use to specify callbacks.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
#pragma once
|
|
27
|
+
|
|
28
|
+
#include <cstdint>
|
|
29
|
+
#include <functional>
|
|
30
|
+
|
|
31
|
+
#include <boost/multi_index/indexed_by.hpp>
|
|
32
|
+
#include <boost/multi_index/member.hpp>
|
|
33
|
+
#include <boost/multi_index/ordered_index.hpp>
|
|
34
|
+
#include <boost/multi_index_container.hpp>
|
|
35
|
+
|
|
36
|
+
namespace folly {
|
|
37
|
+
|
|
38
|
+
class TimeoutQueue {
|
|
39
|
+
public:
|
|
40
|
+
typedef int64_t Id;
|
|
41
|
+
typedef std::function<void(Id, int64_t)> Callback;
|
|
42
|
+
|
|
43
|
+
TimeoutQueue() : nextId_(1) {}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Add a one-time timeout event that will fire "delay" time units from "now"
|
|
47
|
+
* (that is, the first time that run*() is called with a time value >= now
|
|
48
|
+
* + delay).
|
|
49
|
+
*/
|
|
50
|
+
Id add(int64_t now, int64_t delay, Callback callback);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Add a repeating timeout event that will fire every "interval" time units
|
|
54
|
+
* (it will first fire when run*() is called with a time value >=
|
|
55
|
+
* now + interval).
|
|
56
|
+
*
|
|
57
|
+
* run*() will always invoke each repeating event at most once, even if
|
|
58
|
+
* more than one "interval" period has passed.
|
|
59
|
+
*/
|
|
60
|
+
Id addRepeating(int64_t now, int64_t interval, Callback callback);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Erase a given timeout event, returns true if the event was actually
|
|
64
|
+
* erased and false if it didn't exist in our queue.
|
|
65
|
+
*/
|
|
66
|
+
bool erase(Id id);
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Process all events that are due at times <= "now" by calling their
|
|
70
|
+
* callbacks.
|
|
71
|
+
*
|
|
72
|
+
* Callbacks are allowed to call back into the queue and add / erase events;
|
|
73
|
+
* they might create more events that are already due. In this case,
|
|
74
|
+
* runOnce() will only go through the queue once, and return a "next
|
|
75
|
+
* expiration" time in the past or present (<= now); runLoop()
|
|
76
|
+
* will process the queue again, until there are no events already due.
|
|
77
|
+
*
|
|
78
|
+
* Note that it is then possible for runLoop to never return if
|
|
79
|
+
* callbacks re-add themselves to the queue (or if you have repeating
|
|
80
|
+
* callbacks with an interval of 0).
|
|
81
|
+
*
|
|
82
|
+
* Return the time that the next event will be due (same as
|
|
83
|
+
* nextExpiration(), below)
|
|
84
|
+
*/
|
|
85
|
+
int64_t runOnce(int64_t now) { return runInternal(now, true); }
|
|
86
|
+
int64_t runLoop(int64_t now) { return runInternal(now, false); }
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Return the time that the next event will be due.
|
|
90
|
+
*/
|
|
91
|
+
int64_t nextExpiration() const;
|
|
92
|
+
|
|
93
|
+
private:
|
|
94
|
+
int64_t runInternal(int64_t now, bool onceOnly);
|
|
95
|
+
TimeoutQueue(const TimeoutQueue&) = delete;
|
|
96
|
+
TimeoutQueue& operator=(const TimeoutQueue&) = delete;
|
|
97
|
+
|
|
98
|
+
struct Event {
|
|
99
|
+
Id id;
|
|
100
|
+
int64_t expiration;
|
|
101
|
+
int64_t repeatInterval;
|
|
102
|
+
Callback callback;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
typedef boost::multi_index_container<
|
|
106
|
+
Event,
|
|
107
|
+
boost::multi_index::indexed_by<
|
|
108
|
+
boost::multi_index::ordered_unique<
|
|
109
|
+
boost::multi_index::member<Event, Id, &Event::id>>,
|
|
110
|
+
boost::multi_index::ordered_non_unique<
|
|
111
|
+
boost::multi_index::member<Event, int64_t, &Event::expiration>>>>
|
|
112
|
+
Set;
|
|
113
|
+
|
|
114
|
+
enum {
|
|
115
|
+
BY_ID = 0,
|
|
116
|
+
BY_EXPIRATION = 1,
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
Set timeouts_;
|
|
120
|
+
Id nextId_;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
} // namespace folly
|