react-native-windows 0.81.34 → 0.81.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +1 -16
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +27 -4
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +8 -4
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -3
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/React.Cpp.props +3 -3
- package/ReactCommon/ReactCommon.vcxproj +0 -10
- package/ReactCommon/packages.lock.win32.json +0 -10
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +11 -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/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 +12 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/{fmt → external/fmt}/cgmanifest.json +1 -1
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/{fmt/TEMP_UntilFmtUpdate/core.h → external/fmt/include/fmt/base.h} +1188 -1036
- 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 +61 -0
- package/external/folly/LICENSE +200 -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/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/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/hash/SpookyHashV2.h +6 -1
- 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/sync-config.json +8 -0
- package/package.json +3 -3
- package/template/cpp-app/proj/MyApp.sln +0 -33
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-app/proj/MyApp.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/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -383
- package/Folly/Folly.vcxproj.filters +0 -558
- package/Folly/Folly.win32.vcxproj +0 -11
- package/Folly/packages.lock.win32.json +0 -20
- package/fmt/fmt.vcxproj +0 -163
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/fmt.win32.vcxproj +0 -10
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /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,730 @@
|
|
|
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 <algorithm>
|
|
20
|
+
#include <exception>
|
|
21
|
+
#include <functional>
|
|
22
|
+
|
|
23
|
+
#include <boost/intrusive/list.hpp>
|
|
24
|
+
#include <boost/iterator/iterator_adaptor.hpp>
|
|
25
|
+
|
|
26
|
+
#include <folly/container/F14Set.h>
|
|
27
|
+
#include <folly/container/HeterogeneousAccess.h>
|
|
28
|
+
#include <folly/lang/Exception.h>
|
|
29
|
+
|
|
30
|
+
namespace folly {
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A general purpose LRU evicting cache designed to support constant time
|
|
34
|
+
* set/get/insert/erase ops. The only required configuration parameter is the
|
|
35
|
+
* `maxSize`, which is the maximum number of entries held by the cache, which
|
|
36
|
+
* is also dynamically changeable. Insertion will evict (and destroy with ~TKey
|
|
37
|
+
* and ~TValue) existing entries in LRU order as needed to keep number of
|
|
38
|
+
* entries less than maxSize. When automatic eviction is triggered, the
|
|
39
|
+
* minimum number of evictions is `clearSize`, which is configurable with a
|
|
40
|
+
* default of 1. If a callback is specified with setPruneHook, it is invoked
|
|
41
|
+
* for each eviction. However, the prune hook cannot manage object lifetimes
|
|
42
|
+
* because it is not invoked on erase nor cache destruction.
|
|
43
|
+
*
|
|
44
|
+
* This is NOT a thread-safe implementation.
|
|
45
|
+
*
|
|
46
|
+
* Iterators and references are only invalidated when the referenced entry
|
|
47
|
+
* might have been removed (pruned or erased), like std::map.
|
|
48
|
+
*
|
|
49
|
+
* NOTE: maxSize==0 is a special case that disables automatic evictions.
|
|
50
|
+
* prune() can be used for manually trimming down the number of entries.
|
|
51
|
+
*
|
|
52
|
+
* Implementaion: Maintains a doubly linked list (`lru_`) of entry nodes in
|
|
53
|
+
* LRU order, which are also connected to hash table index (`index_`). The
|
|
54
|
+
* access order is maintained on the list by moving an element to the front
|
|
55
|
+
* of list on a get, and adding to the front on insert. Assuming quality
|
|
56
|
+
* hashing, set/get are both constant time operations.
|
|
57
|
+
*
|
|
58
|
+
* NOTE: Previous versions of this structure used a hash table size that was
|
|
59
|
+
* fixed at creation time, but that limitation is no longer present.
|
|
60
|
+
*/
|
|
61
|
+
template <
|
|
62
|
+
class TKey,
|
|
63
|
+
class TValue,
|
|
64
|
+
class THash = HeterogeneousAccessHash<TKey>,
|
|
65
|
+
class TKeyEqual = HeterogeneousAccessEqualTo<TKey>>
|
|
66
|
+
class EvictingCacheMap {
|
|
67
|
+
private:
|
|
68
|
+
// typedefs for brevity
|
|
69
|
+
struct Node;
|
|
70
|
+
struct NodeList;
|
|
71
|
+
struct KeyHasher;
|
|
72
|
+
struct KeyValueEqual;
|
|
73
|
+
using NodeMap = F14VectorSet<Node*, KeyHasher, KeyValueEqual>;
|
|
74
|
+
using TPair = std::pair<const TKey, TValue>;
|
|
75
|
+
|
|
76
|
+
public:
|
|
77
|
+
using PruneHookCall = std::function<void(TKey, TValue&&)>;
|
|
78
|
+
|
|
79
|
+
// iterator base : returns TPair on dereference
|
|
80
|
+
template <typename Value, typename TIterator>
|
|
81
|
+
class iterator_base : public boost::iterator_adaptor<
|
|
82
|
+
iterator_base<Value, TIterator>,
|
|
83
|
+
TIterator,
|
|
84
|
+
Value,
|
|
85
|
+
boost::bidirectional_traversal_tag> {
|
|
86
|
+
public:
|
|
87
|
+
iterator_base() {}
|
|
88
|
+
|
|
89
|
+
explicit iterator_base(TIterator it)
|
|
90
|
+
: iterator_base::iterator_adaptor_(it) {}
|
|
91
|
+
|
|
92
|
+
template <
|
|
93
|
+
typename V,
|
|
94
|
+
typename I,
|
|
95
|
+
std::enable_if_t<
|
|
96
|
+
std::is_same<V const, Value>::value &&
|
|
97
|
+
std::is_convertible<I, TIterator>::value,
|
|
98
|
+
int> = 0>
|
|
99
|
+
/* implicit */ iterator_base(iterator_base<V, I> const& other)
|
|
100
|
+
: iterator_base::iterator_adaptor_(other.base()) {}
|
|
101
|
+
|
|
102
|
+
Value& dereference() const { return this->base_reference()->pr; }
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// iterators
|
|
106
|
+
using iterator = iterator_base<TPair, typename NodeList::iterator>;
|
|
107
|
+
using const_iterator =
|
|
108
|
+
iterator_base<const TPair, typename NodeList::const_iterator>;
|
|
109
|
+
using reverse_iterator =
|
|
110
|
+
iterator_base<TPair, typename NodeList::reverse_iterator>;
|
|
111
|
+
using const_reverse_iterator =
|
|
112
|
+
iterator_base<const TPair, typename NodeList::const_reverse_iterator>;
|
|
113
|
+
|
|
114
|
+
// public type aliases for convenience
|
|
115
|
+
using key_type = TKey;
|
|
116
|
+
using mapped_type = TValue;
|
|
117
|
+
using hasher = THash;
|
|
118
|
+
|
|
119
|
+
/*
|
|
120
|
+
* Approximate size of memory used by each entry added to the cache,
|
|
121
|
+
* including the shallow bits (sizeof) of TKey and TValue, but not the deep
|
|
122
|
+
* bits. Using 128 (bytes per chunk) / 10 (avg entries per chunk) as
|
|
123
|
+
* approximate F14 index entry size.
|
|
124
|
+
*/
|
|
125
|
+
static constexpr std::size_t kApproximateEntryMemUsage = 13 + sizeof(Node);
|
|
126
|
+
|
|
127
|
+
private:
|
|
128
|
+
template <typename K, typename T>
|
|
129
|
+
using EnableHeterogeneousFind = std::enable_if_t<
|
|
130
|
+
detail::EligibleForHeterogeneousFind<TKey, THash, TKeyEqual, K>::value,
|
|
131
|
+
T>;
|
|
132
|
+
|
|
133
|
+
template <typename K, typename T>
|
|
134
|
+
using EnableHeterogeneousInsert = std::enable_if_t<
|
|
135
|
+
detail::EligibleForHeterogeneousInsert<TKey, THash, TKeyEqual, K>::value,
|
|
136
|
+
T>;
|
|
137
|
+
|
|
138
|
+
template <typename K>
|
|
139
|
+
using IsIter = Disjunction<
|
|
140
|
+
std::is_same<iterator, remove_cvref_t<K>>,
|
|
141
|
+
std::is_same<const_iterator, remove_cvref_t<K>>>;
|
|
142
|
+
|
|
143
|
+
template <typename K, typename T>
|
|
144
|
+
using EnableHeterogeneousErase = std::enable_if_t<
|
|
145
|
+
detail::EligibleForHeterogeneousFind<
|
|
146
|
+
TKey,
|
|
147
|
+
THash,
|
|
148
|
+
TKeyEqual,
|
|
149
|
+
std::conditional_t<IsIter<K>::value, TKey, K>>::value &&
|
|
150
|
+
!IsIter<K>::value,
|
|
151
|
+
T>;
|
|
152
|
+
|
|
153
|
+
public:
|
|
154
|
+
/**
|
|
155
|
+
* Construct a EvictingCacheMap
|
|
156
|
+
* @param maxSize maximum size of the cache map. Once the map size exceeds
|
|
157
|
+
* maxSize, the map will begin to evict.
|
|
158
|
+
* @param clearSize the number of elements to clear at a time when automatic
|
|
159
|
+
* eviction on insert is triggered.
|
|
160
|
+
*/
|
|
161
|
+
explicit EvictingCacheMap(
|
|
162
|
+
std::size_t maxSize,
|
|
163
|
+
std::size_t clearSize = 1,
|
|
164
|
+
const THash& keyHash = THash(),
|
|
165
|
+
const TKeyEqual& keyEqual = TKeyEqual())
|
|
166
|
+
: keyHash_(keyHash),
|
|
167
|
+
keyEqual_(keyEqual),
|
|
168
|
+
index_(maxSize + /*transient*/ 1, keyHash_, keyEqual_),
|
|
169
|
+
maxSize_(maxSize),
|
|
170
|
+
clearSize_(clearSize) {}
|
|
171
|
+
|
|
172
|
+
EvictingCacheMap(const EvictingCacheMap&) = delete;
|
|
173
|
+
EvictingCacheMap& operator=(const EvictingCacheMap&) = delete;
|
|
174
|
+
EvictingCacheMap(EvictingCacheMap&&) = default;
|
|
175
|
+
EvictingCacheMap& operator=(EvictingCacheMap&&) = default;
|
|
176
|
+
|
|
177
|
+
~EvictingCacheMap() { assert(lru_.size() == index_.size()); }
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Adjust the max size of EvictingCacheMap, evicting as needed to ensure the
|
|
181
|
+
* new max is not exceeded.
|
|
182
|
+
*
|
|
183
|
+
* Calling this function with an arugment of 0 removes the limit on the cache
|
|
184
|
+
* size and elements are not evicted unless clients explicitly call prune.
|
|
185
|
+
*
|
|
186
|
+
* @param maxSize new maximum size of the cache map.
|
|
187
|
+
* @param pruneHook eviction callback to use INSTEAD OF the configured one
|
|
188
|
+
*/
|
|
189
|
+
void setMaxSize(size_t maxSize, PruneHookCall pruneHook = nullptr) {
|
|
190
|
+
if (maxSize != 0 && maxSize < size()) {
|
|
191
|
+
// Prune the excess elements with our new constraints.
|
|
192
|
+
prune(std::max(size() - maxSize, clearSize_), pruneHook);
|
|
193
|
+
}
|
|
194
|
+
maxSize_ = maxSize;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
std::size_t getMaxSize() const { return maxSize_; }
|
|
198
|
+
|
|
199
|
+
void setClearSize(std::size_t clearSize) { clearSize_ = clearSize; }
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Check for existence of a specific key in the map. This operation has
|
|
203
|
+
* no effect on LRU order.
|
|
204
|
+
* @param key key to search for
|
|
205
|
+
* @return true if exists, false otherwise
|
|
206
|
+
*/
|
|
207
|
+
bool exists(const TKey& key) const { return existsImpl(key); }
|
|
208
|
+
|
|
209
|
+
template <typename K, EnableHeterogeneousFind<K, int> = 0>
|
|
210
|
+
bool exists(const K& key) const {
|
|
211
|
+
return existsImpl(key);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Get the value associated with a specific key. This function always
|
|
216
|
+
* promotes a found value to the head of the LRU.
|
|
217
|
+
* @param key key associated with the value
|
|
218
|
+
* @return the value if it exists
|
|
219
|
+
* @throw std::out_of_range exception of the key does not exist
|
|
220
|
+
*/
|
|
221
|
+
TValue& get(const TKey& key) { return getImpl(key); }
|
|
222
|
+
|
|
223
|
+
template <typename K, EnableHeterogeneousFind<K, int> = 0>
|
|
224
|
+
TValue& get(const K& key) {
|
|
225
|
+
return getImpl(key);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Get the iterator associated with a specific key. This function always
|
|
230
|
+
* promotes a found value to the head of the LRU.
|
|
231
|
+
* @param key key to associate with value
|
|
232
|
+
* @return the iterator of the object (a std::pair of const TKey, TValue) or
|
|
233
|
+
* end() if it does not exist
|
|
234
|
+
*/
|
|
235
|
+
iterator find(const TKey& key) { return findImpl(*this, key); }
|
|
236
|
+
|
|
237
|
+
template <typename K, EnableHeterogeneousFind<K, int> = 0>
|
|
238
|
+
iterator find(const K& key) {
|
|
239
|
+
return findImpl(*this, key);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Get the value associated with a specific key. This function never
|
|
244
|
+
* promotes a found value to the head of the LRU.
|
|
245
|
+
* @param key key associated with the value
|
|
246
|
+
* @return the value if it exists
|
|
247
|
+
* @throw std::out_of_range exception of the key does not exist
|
|
248
|
+
*/
|
|
249
|
+
const TValue& getWithoutPromotion(const TKey& key) const {
|
|
250
|
+
return getWithoutPromotionImpl(*this, key);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
template <typename K, EnableHeterogeneousFind<K, int> = 0>
|
|
254
|
+
const TValue& getWithoutPromotion(const K& key) const {
|
|
255
|
+
return getWithoutPromotionImpl(*this, key);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
TValue& getWithoutPromotion(const TKey& key) {
|
|
259
|
+
return getWithoutPromotionImpl(*this, key);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
template <typename K, EnableHeterogeneousFind<K, int> = 0>
|
|
263
|
+
TValue& getWithoutPromotion(const K& key) {
|
|
264
|
+
return getWithoutPromotionImpl(*this, key);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Get the iterator associated with a specific key. This function never
|
|
269
|
+
* promotes a found value to the head of the LRU.
|
|
270
|
+
* @param key key to associate with value
|
|
271
|
+
* @return the iterator of the object (a std::pair of const TKey, TValue) or
|
|
272
|
+
* end() if it does not exist
|
|
273
|
+
*/
|
|
274
|
+
const_iterator findWithoutPromotion(const TKey& key) const {
|
|
275
|
+
return findWithoutPromotionImpl(*this, key);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
template <typename K, EnableHeterogeneousFind<K, int> = 0>
|
|
279
|
+
const_iterator findWithoutPromotion(const K& key) const {
|
|
280
|
+
return findWithoutPromotionImpl(*this, key);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
iterator findWithoutPromotion(const TKey& key) {
|
|
284
|
+
return findWithoutPromotionImpl(*this, key);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
template <typename K, EnableHeterogeneousFind<K, int> = 0>
|
|
288
|
+
iterator findWithoutPromotion(const K& key) {
|
|
289
|
+
return findWithoutPromotionImpl(*this, key);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Erase the key-value pair associated with key if it exists. Prune hook
|
|
294
|
+
* is not called unless one passed in here.
|
|
295
|
+
* @param key key associated with the value
|
|
296
|
+
* @param eraseHook callback to use with erased entry (similar to a prune
|
|
297
|
+
* hook)
|
|
298
|
+
* @return true if the key existed and was erased, else false
|
|
299
|
+
*/
|
|
300
|
+
bool erase(const TKey& key, PruneHookCall eraseHook = nullptr) {
|
|
301
|
+
return eraseKeyImpl(key, eraseHook);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
template <typename K, EnableHeterogeneousErase<K, int> = 0>
|
|
305
|
+
bool erase(const K& key, PruneHookCall eraseHook = nullptr) {
|
|
306
|
+
return eraseKeyImpl(key, eraseHook);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Erase the key-value pair associated with pos. Prune hook is not called
|
|
311
|
+
* unless one passed in here.
|
|
312
|
+
* @param pos iterator to the element to be erased
|
|
313
|
+
* @param eraseHook callback to use with erased entry (similar to a prune
|
|
314
|
+
* hook)
|
|
315
|
+
* @return iterator to the following element or end() if pos was the last
|
|
316
|
+
* element
|
|
317
|
+
*/
|
|
318
|
+
iterator erase(const_iterator pos, PruneHookCall eraseHook = nullptr) {
|
|
319
|
+
return iterator(
|
|
320
|
+
eraseImpl(const_cast<Node*>(&(*pos.base())), pos.base(), eraseHook));
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Set a key-value pair in the dictionary
|
|
325
|
+
* @param key key to associate with value
|
|
326
|
+
* @param value value to associate with the key
|
|
327
|
+
* @param promote boolean flag indicating whether or not to move something
|
|
328
|
+
* to the front of an LRU. This only really matters if you're setting
|
|
329
|
+
* a value that already exists.
|
|
330
|
+
* @param pruneHook eviction callback to use INSTEAD OF the configured one
|
|
331
|
+
*/
|
|
332
|
+
void set(
|
|
333
|
+
const TKey& key,
|
|
334
|
+
TValue&& value,
|
|
335
|
+
bool promote = true,
|
|
336
|
+
PruneHookCall pruneHook = nullptr) {
|
|
337
|
+
setImpl(key, std::move(value), promote, pruneHook);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
void set(
|
|
341
|
+
const TKey& key,
|
|
342
|
+
const TValue& value,
|
|
343
|
+
bool promote = true,
|
|
344
|
+
PruneHookCall pruneHook = nullptr) {
|
|
345
|
+
TValue tmp{value}; // can't yet rely on temporary materialization
|
|
346
|
+
setImpl(key, std::move(tmp), promote, pruneHook);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
template <typename K, EnableHeterogeneousInsert<K, int> = 0>
|
|
350
|
+
void set(
|
|
351
|
+
const K& key,
|
|
352
|
+
TValue&& value,
|
|
353
|
+
bool promote = true,
|
|
354
|
+
PruneHookCall pruneHook = nullptr) {
|
|
355
|
+
setImpl(key, std::move(value), promote, pruneHook);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
template <typename K, EnableHeterogeneousInsert<K, int> = 0>
|
|
359
|
+
void set(
|
|
360
|
+
const K& key,
|
|
361
|
+
const TValue& value,
|
|
362
|
+
bool promote = true,
|
|
363
|
+
PruneHookCall pruneHook = nullptr) {
|
|
364
|
+
TValue tmp{value}; // can't yet rely on temporary materialization
|
|
365
|
+
setImpl(key, std::move(tmp), promote, pruneHook);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Insert a new key-value pair in the dictionary if no element exists for key
|
|
370
|
+
* @param key key to associate with value
|
|
371
|
+
* @param value value to associate with the key
|
|
372
|
+
* @param pruneHook eviction callback to use INSTEAD OF the configured one
|
|
373
|
+
* @return a pair consisting of an iterator to the inserted element (or to the
|
|
374
|
+
* element that prevented the insertion) and a bool denoting whether the
|
|
375
|
+
* insertion took place.
|
|
376
|
+
*/
|
|
377
|
+
std::pair<iterator, bool> insert(
|
|
378
|
+
const TKey& key, TValue&& value, PruneHookCall pruneHook = nullptr) {
|
|
379
|
+
return insertImpl(key, std::move(value), pruneHook);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
std::pair<iterator, bool> insert(
|
|
383
|
+
const TKey& key, const TValue& value, PruneHookCall pruneHook = nullptr) {
|
|
384
|
+
TValue tmp{value}; // can't yet rely on temporary materialization
|
|
385
|
+
return insertImpl(key, std::move(tmp), pruneHook);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
template <typename K, EnableHeterogeneousInsert<K, int> = 0>
|
|
389
|
+
std::pair<iterator, bool> insert(
|
|
390
|
+
const K& key, TValue&& value, PruneHookCall pruneHook = nullptr) {
|
|
391
|
+
return insertImpl(key, std::move(value), pruneHook);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
template <typename K, EnableHeterogeneousInsert<K, int> = 0>
|
|
395
|
+
std::pair<iterator, bool> insert(
|
|
396
|
+
const K& key, const TValue& value, PruneHookCall pruneHook = nullptr) {
|
|
397
|
+
TValue tmp{value}; // can't yet rely on temporary materialization
|
|
398
|
+
return insertImpl(key, std::move(tmp), pruneHook);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Emplace a new key-value pair in the dictionary if no element exists for
|
|
403
|
+
* key, utilizing the configured prunehook
|
|
404
|
+
* @param key key to associate with value
|
|
405
|
+
* @param args args to construct TValue in place, to associate with the key
|
|
406
|
+
* @return a pair consisting of an iterator to the inserted element (or to the
|
|
407
|
+
* element that prevented the insertion) and a bool denoting whether the
|
|
408
|
+
* insertion took place.
|
|
409
|
+
*/
|
|
410
|
+
template <typename K, typename... Args>
|
|
411
|
+
std::pair<iterator, bool> try_emplace(const K& key, Args&&... args) {
|
|
412
|
+
return emplaceWithPruneHook<K, Args...>(
|
|
413
|
+
key, std::forward<Args>(args)..., nullptr);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Emplace a new key-value pair in the dictionary if no element exists for key
|
|
418
|
+
* @param key key to associate with value
|
|
419
|
+
* @param args args to construct TValue in place, to associate with the key
|
|
420
|
+
* @param pruneHook eviction callback to use INSTEAD OF the configured one
|
|
421
|
+
* @return a pair consisting of an iterator to the inserted element (or to the
|
|
422
|
+
* element that prevented the insertion) and a bool denoting whether the
|
|
423
|
+
* insertion took place.
|
|
424
|
+
*/
|
|
425
|
+
template <typename K, typename... Args>
|
|
426
|
+
std::pair<iterator, bool> emplaceWithPruneHook(
|
|
427
|
+
const K& key, Args&&... args, PruneHookCall pruneHook) {
|
|
428
|
+
return insertImpl<K>(
|
|
429
|
+
std::make_unique<Node>(
|
|
430
|
+
std::piecewise_construct, key, std::forward<Args>(args)...),
|
|
431
|
+
pruneHook);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Get the number of elements in the dictionary
|
|
436
|
+
* @return the size of the dictionary
|
|
437
|
+
*/
|
|
438
|
+
std::size_t size() const {
|
|
439
|
+
assert(index_.size() == lru_.size());
|
|
440
|
+
return index_.size();
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Typical empty function
|
|
445
|
+
* @return true if empty, false otherwise
|
|
446
|
+
*/
|
|
447
|
+
bool empty() const { return index_.empty(); }
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Remove all entries (as if all evicted)
|
|
451
|
+
* @param pruneHook eviction callback to use INSTEAD OF the configured one
|
|
452
|
+
*/
|
|
453
|
+
void clear(PruneHookCall pruneHook = nullptr) { prune(size(), pruneHook); }
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Set the prune hook, which is the function invoked on the key and value
|
|
457
|
+
* on each eviction. An operation will throw if the pruneHook throws.
|
|
458
|
+
* Note that this prune hook is not automatically called on entries
|
|
459
|
+
* explicitly erase()ed nor on remaining entries at destruction time.
|
|
460
|
+
* @param pruneHook eviction callback to set as default, or nullptr to clear
|
|
461
|
+
*/
|
|
462
|
+
void setPruneHook(PruneHookCall pruneHook) { pruneHook_ = pruneHook; }
|
|
463
|
+
|
|
464
|
+
PruneHookCall getPruneHook() { return pruneHook_; }
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Prune the minimum of pruneSize and size() from the back of the LRU.
|
|
468
|
+
* Will throw if pruneHook throws.
|
|
469
|
+
* @param pruneSize minimum number of elements to prune
|
|
470
|
+
* @param pruneHook eviction callback to use INSTEAD OF the configured one
|
|
471
|
+
*/
|
|
472
|
+
void prune(std::size_t pruneSize, PruneHookCall pruneHook = nullptr) {
|
|
473
|
+
auto& ph = (nullptr == pruneHook) ? pruneHook_ : pruneHook;
|
|
474
|
+
|
|
475
|
+
for (std::size_t i = 0; i < pruneSize && !lru_.empty(); i++) {
|
|
476
|
+
auto* node = &(*lru_.rbegin());
|
|
477
|
+
std::unique_ptr<Node> node_owner(node);
|
|
478
|
+
|
|
479
|
+
lru_.erase(lru_.iterator_to(*node));
|
|
480
|
+
index_.erase(node);
|
|
481
|
+
if (ph) {
|
|
482
|
+
// NOTE: might throw, so we are in an exception-safe state
|
|
483
|
+
ph(node->pr.first, std::move(node->pr.second));
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// Iterators and such
|
|
489
|
+
iterator begin() { return iterator(lru_.begin()); }
|
|
490
|
+
iterator end() { return iterator(lru_.end()); }
|
|
491
|
+
const_iterator begin() const { return const_iterator(lru_.begin()); }
|
|
492
|
+
const_iterator end() const { return const_iterator(lru_.end()); }
|
|
493
|
+
|
|
494
|
+
const_iterator cbegin() const { return const_iterator(lru_.cbegin()); }
|
|
495
|
+
const_iterator cend() const { return const_iterator(lru_.cend()); }
|
|
496
|
+
|
|
497
|
+
reverse_iterator rbegin() { return reverse_iterator(lru_.rbegin()); }
|
|
498
|
+
reverse_iterator rend() { return reverse_iterator(lru_.rend()); }
|
|
499
|
+
|
|
500
|
+
const_reverse_iterator rbegin() const {
|
|
501
|
+
return const_reverse_iterator(lru_.rbegin());
|
|
502
|
+
}
|
|
503
|
+
const_reverse_iterator rend() const {
|
|
504
|
+
return const_reverse_iterator(lru_.rend());
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
const_reverse_iterator crbegin() const {
|
|
508
|
+
return const_reverse_iterator(lru_.crbegin());
|
|
509
|
+
}
|
|
510
|
+
const_reverse_iterator crend() const {
|
|
511
|
+
return const_reverse_iterator(lru_.crend());
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
private:
|
|
515
|
+
struct Node : public boost::intrusive::list_base_hook<
|
|
516
|
+
boost::intrusive::link_mode<boost::intrusive::safe_link>> {
|
|
517
|
+
template <typename K>
|
|
518
|
+
Node(const K& key, TValue&& value) : pr(key, std::move(value)) {}
|
|
519
|
+
|
|
520
|
+
template <typename Key, typename... Args>
|
|
521
|
+
explicit Node(std::piecewise_construct_t, Key&& k, Args&&... args)
|
|
522
|
+
: pr(std::piecewise_construct,
|
|
523
|
+
std::forward_as_tuple(std::forward<Key>(k)),
|
|
524
|
+
std::forward_as_tuple(std::forward<Args>(args)...)) {}
|
|
525
|
+
TPair pr;
|
|
526
|
+
};
|
|
527
|
+
using NodePtr = Node*;
|
|
528
|
+
|
|
529
|
+
// NOTE: deriving from boost::intrusive::list is likely discouraged. This is
|
|
530
|
+
// simply an alternative to an ugly explicit move operator for
|
|
531
|
+
// EvictingCacheMap. Change to that if this derivation proves problematic.
|
|
532
|
+
struct NodeList : public boost::intrusive::list<Node> {
|
|
533
|
+
NodeList() {}
|
|
534
|
+
NodeList& operator=(NodeList&& that) noexcept {
|
|
535
|
+
// Clear the moved-from rather than swap, for consistency with NodeMap
|
|
536
|
+
clear_nodes();
|
|
537
|
+
// Now invoke base class move operator without using static_cast
|
|
538
|
+
boost::intrusive::list<Node>& this_parent = *this;
|
|
539
|
+
boost::intrusive::list<Node>&& that_parent = std::move(that);
|
|
540
|
+
this_parent = std::move(that_parent);
|
|
541
|
+
return *this;
|
|
542
|
+
}
|
|
543
|
+
NodeList(NodeList&& that) noexcept { *this = std::move(that); }
|
|
544
|
+
~NodeList() {
|
|
545
|
+
// Adds leak-free final destruction to the intrusive container
|
|
546
|
+
clear_nodes();
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
private:
|
|
550
|
+
void clear_nodes() {
|
|
551
|
+
boost::intrusive::list<Node>::clear_and_dispose(
|
|
552
|
+
[](Node* ptr) { delete ptr; });
|
|
553
|
+
}
|
|
554
|
+
};
|
|
555
|
+
|
|
556
|
+
struct KeyHasher {
|
|
557
|
+
using is_transparent = void;
|
|
558
|
+
using folly_is_avalanching = IsAvalanchingHasher<THash, TKey>;
|
|
559
|
+
|
|
560
|
+
KeyHasher() : hash() {}
|
|
561
|
+
explicit KeyHasher(const THash& keyHash) : hash(keyHash) {}
|
|
562
|
+
std::size_t operator()(const NodePtr& node) const {
|
|
563
|
+
return hash(node->pr.first);
|
|
564
|
+
}
|
|
565
|
+
template <typename K>
|
|
566
|
+
std::size_t operator()(const K& key) const {
|
|
567
|
+
return hash(key);
|
|
568
|
+
}
|
|
569
|
+
THash hash;
|
|
570
|
+
};
|
|
571
|
+
|
|
572
|
+
struct KeyValueEqual {
|
|
573
|
+
using is_transparent = void;
|
|
574
|
+
|
|
575
|
+
KeyValueEqual() : equal() {}
|
|
576
|
+
explicit KeyValueEqual(const TKeyEqual& keyEqual) : equal(keyEqual) {}
|
|
577
|
+
template <typename K>
|
|
578
|
+
bool operator()(const K& lhs, const NodePtr& rhs) const {
|
|
579
|
+
return equal(lhs, rhs->pr.first);
|
|
580
|
+
}
|
|
581
|
+
template <typename K>
|
|
582
|
+
bool operator()(const NodePtr& lhs, const K& rhs) const {
|
|
583
|
+
return equal(lhs->pr.first, rhs);
|
|
584
|
+
}
|
|
585
|
+
bool operator()(const NodePtr& lhs, const NodePtr& rhs) const {
|
|
586
|
+
return equal(lhs->pr.first, rhs->pr.first);
|
|
587
|
+
}
|
|
588
|
+
TKeyEqual equal;
|
|
589
|
+
};
|
|
590
|
+
|
|
591
|
+
template <typename K>
|
|
592
|
+
bool existsImpl(const K& key) const {
|
|
593
|
+
return findInIndex(key) != nullptr;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
template <typename K>
|
|
597
|
+
TValue& getImpl(const K& key) {
|
|
598
|
+
auto it = findImpl(*this, key);
|
|
599
|
+
if (it == end()) {
|
|
600
|
+
throw_exception<std::out_of_range>("Key does not exist");
|
|
601
|
+
}
|
|
602
|
+
return it->second;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
template <typename Self>
|
|
606
|
+
using self_iterator_t =
|
|
607
|
+
std::conditional_t<std::is_const<Self>::value, const_iterator, iterator>;
|
|
608
|
+
|
|
609
|
+
template <typename Self, typename K>
|
|
610
|
+
static auto findImpl(Self& self, const K& key) {
|
|
611
|
+
Node* ptr = self.findInIndex(key);
|
|
612
|
+
if (!ptr) {
|
|
613
|
+
return self.end();
|
|
614
|
+
}
|
|
615
|
+
self.lru_.splice(self.lru_.begin(), self.lru_, self.lru_.iterator_to(*ptr));
|
|
616
|
+
return self_iterator_t<Self>(self.lru_.iterator_to(*ptr));
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
template <typename Self, typename K>
|
|
620
|
+
static auto& getWithoutPromotionImpl(Self& self, const K& key) {
|
|
621
|
+
auto it = self.findWithoutPromotion(key);
|
|
622
|
+
if (it == self.end()) {
|
|
623
|
+
throw_exception<std::out_of_range>("Key does not exist");
|
|
624
|
+
}
|
|
625
|
+
return it->second;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
template <typename Self, typename K>
|
|
629
|
+
static auto findWithoutPromotionImpl(Self& self, const K& key) {
|
|
630
|
+
Node* ptr = self.findInIndex(key);
|
|
631
|
+
return ptr ? self_iterator_t<Self>(self.lru_.iterator_to(*ptr))
|
|
632
|
+
: self.end();
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
typename NodeList::iterator eraseImpl(
|
|
636
|
+
Node* ptr,
|
|
637
|
+
typename NodeList::const_iterator base_iter,
|
|
638
|
+
PruneHookCall eraseHook) {
|
|
639
|
+
std::unique_ptr<Node> node_owner(ptr);
|
|
640
|
+
index_.erase(ptr);
|
|
641
|
+
auto next_base_iter = lru_.erase(base_iter);
|
|
642
|
+
if (eraseHook) {
|
|
643
|
+
// NOTE: might throw, so we are in an exception-safe state
|
|
644
|
+
eraseHook(ptr->pr.first, std::move(ptr->pr.second));
|
|
645
|
+
}
|
|
646
|
+
return next_base_iter;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
template <typename K>
|
|
650
|
+
bool eraseKeyImpl(const K& key, PruneHookCall eraseHook) {
|
|
651
|
+
Node* ptr = findInIndex(key);
|
|
652
|
+
if (ptr) {
|
|
653
|
+
eraseImpl(ptr, lru_.iterator_to(*ptr), eraseHook);
|
|
654
|
+
return true;
|
|
655
|
+
}
|
|
656
|
+
return false;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
template <typename K>
|
|
660
|
+
void setImpl(
|
|
661
|
+
const K& key, TValue&& value, bool promote, PruneHookCall pruneHook) {
|
|
662
|
+
Node* ptr = findInIndex(key);
|
|
663
|
+
if (ptr) {
|
|
664
|
+
ptr->pr.second = std::move(value);
|
|
665
|
+
if (promote) {
|
|
666
|
+
lru_.splice(lru_.begin(), lru_, lru_.iterator_to(*ptr));
|
|
667
|
+
}
|
|
668
|
+
} else {
|
|
669
|
+
auto node = new Node(key, std::move(value));
|
|
670
|
+
index_.insert(node);
|
|
671
|
+
lru_.push_front(*node);
|
|
672
|
+
|
|
673
|
+
// no evictions if maxSize_ is 0 i.e. unlimited capacity
|
|
674
|
+
if (maxSize_ > 0 && size() > maxSize_) {
|
|
675
|
+
prune(clearSize_, pruneHook);
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
template <typename K>
|
|
681
|
+
auto insertImpl(const K& key, TValue&& value, PruneHookCall pruneHook) {
|
|
682
|
+
auto node_owner = std::make_unique<Node>(key, std::move(value));
|
|
683
|
+
return insertImpl<K>(std::move(node_owner), std::move(pruneHook));
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
template <typename K>
|
|
687
|
+
auto insertImpl(std::unique_ptr<Node> nodeOwner, PruneHookCall pruneHook) {
|
|
688
|
+
Node* node = nodeOwner.get();
|
|
689
|
+
{
|
|
690
|
+
auto pair = index_.insert(node);
|
|
691
|
+
if (!pair.second) {
|
|
692
|
+
// No change. Abandon/destroy new node.
|
|
693
|
+
return std::pair<iterator, bool>(lru_.iterator_to(**pair.first), false);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
// upcoming prune might invalidate iterator
|
|
697
|
+
assert(*pair.first == node);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
// Complete insertion
|
|
701
|
+
lru_.push_front(*nodeOwner.release());
|
|
702
|
+
|
|
703
|
+
// no evictions if maxSize_ is 0 i.e. unlimited capacity
|
|
704
|
+
if (maxSize_ > 0 && size() > maxSize_) {
|
|
705
|
+
prune(clearSize_, pruneHook);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
return std::pair<iterator, bool>(lru_.iterator_to(*node), true);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
template <typename K>
|
|
712
|
+
Node* findInIndex(const K& key) const {
|
|
713
|
+
auto it = index_.find(key);
|
|
714
|
+
if (it != index_.end()) {
|
|
715
|
+
return *it;
|
|
716
|
+
} else {
|
|
717
|
+
return nullptr;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
PruneHookCall pruneHook_;
|
|
722
|
+
KeyHasher keyHash_;
|
|
723
|
+
KeyValueEqual keyEqual_;
|
|
724
|
+
NodeMap index_;
|
|
725
|
+
NodeList lru_;
|
|
726
|
+
std::size_t maxSize_;
|
|
727
|
+
std::size_t clearSize_;
|
|
728
|
+
};
|
|
729
|
+
|
|
730
|
+
} // namespace folly
|