react-native-windows 0.84.0 → 0.84.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +2 -17
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
- 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 +10 -1
- package/PropertySheets/React.Cpp.props +3 -3
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +5 -8
- package/Scripts/creaternwlib.cmd +10 -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 +6 -6
- 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 -378
- package/Folly/Folly.vcxproj.filters +0 -558
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{fmt → external/fmt}/cgmanifest.json +0 -0
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,651 @@
|
|
|
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 <new>
|
|
20
|
+
#include <type_traits>
|
|
21
|
+
#include <folly/container/EvictingCacheMap.h>
|
|
22
|
+
|
|
23
|
+
namespace folly {
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* A variant of EvictingCacheMap that assigns weights to entries and
|
|
27
|
+
* evicts entries in LRU order to ensure the total weight of all entries
|
|
28
|
+
* stays below some set maximum. ImplicitlyWeighted means this variant
|
|
29
|
+
* derives the weights from the key-values using a chosen function. TWeightFn
|
|
30
|
+
* must be a type implementing `size_t operator()(const TKey&, const Tvalue&)`
|
|
31
|
+
*
|
|
32
|
+
* Example usage: if TKey and TValue are std::string, the weight could be the
|
|
33
|
+
* sum of the string sizes (already stored in the key and value) so that the
|
|
34
|
+
* total weight approximates the total memory usage.
|
|
35
|
+
*
|
|
36
|
+
* Also consider WeightedEvictingCacheMap below, which tracks weights
|
|
37
|
+
* explicitly, along with keys and values.
|
|
38
|
+
*
|
|
39
|
+
* TValue must be either movable or copyable. TKey must be copyable.
|
|
40
|
+
*
|
|
41
|
+
* IMPORTANT NOTES:
|
|
42
|
+
* * Returned references, pointers, or iterators are potentially invalid
|
|
43
|
+
* after any pruning operation (set, insert, etc. that might increase total
|
|
44
|
+
* weight), or any set/insert on the same key (which are allowed to create a
|
|
45
|
+
* new entry or modify an existing entry becoming obsolete).
|
|
46
|
+
* * Operations are more restrictive than EvictingCacheMap to reduce the
|
|
47
|
+
* risk of modifying a value in a way that changes its weight without proper
|
|
48
|
+
* tracking. TValue can be a const type if appropriate.
|
|
49
|
+
* * This is NOT a thread-safe structure.
|
|
50
|
+
* * For simplicity, functions taking a key implicitly inherit type
|
|
51
|
+
* constraints from EvictingCacheMap. (Must either match TKey or
|
|
52
|
+
* EligibleForHeterogeneousFind/Insert.)
|
|
53
|
+
*
|
|
54
|
+
* This implementation has not been highly optimized and is a wrapper around
|
|
55
|
+
* EvictingCacheMap.
|
|
56
|
+
*/
|
|
57
|
+
template <
|
|
58
|
+
class TKey,
|
|
59
|
+
class TValue,
|
|
60
|
+
class TWeightFn,
|
|
61
|
+
class THash = HeterogeneousAccessHash<TKey>,
|
|
62
|
+
class TKeyEqual = HeterogeneousAccessEqualTo<TKey>>
|
|
63
|
+
class ImplicitlyWeightedEvictingCacheMap {
|
|
64
|
+
private: // typedefs
|
|
65
|
+
using ECM = EvictingCacheMap<TKey, TValue, THash, TKeyEqual>;
|
|
66
|
+
|
|
67
|
+
public:
|
|
68
|
+
using PruneHookCall = std::function<void(TKey, TValue&&)>;
|
|
69
|
+
|
|
70
|
+
explicit ImplicitlyWeightedEvictingCacheMap(
|
|
71
|
+
std::size_t maxTotalWeight,
|
|
72
|
+
const TWeightFn& weightFn = TWeightFn(),
|
|
73
|
+
const THash& keyHash = THash(),
|
|
74
|
+
const TKeyEqual& keyEqual = TKeyEqual())
|
|
75
|
+
: ecm_(/* no max size*/ 0, 1, keyHash, keyEqual),
|
|
76
|
+
weightFn_(weightFn),
|
|
77
|
+
maxTotalWeight_(maxTotalWeight),
|
|
78
|
+
currentTotalWeight_(0) {
|
|
79
|
+
setupPruneHook();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Like EvictingCacheMap
|
|
83
|
+
ImplicitlyWeightedEvictingCacheMap(
|
|
84
|
+
const ImplicitlyWeightedEvictingCacheMap&) = delete;
|
|
85
|
+
ImplicitlyWeightedEvictingCacheMap& operator=(
|
|
86
|
+
const ImplicitlyWeightedEvictingCacheMap&) = delete;
|
|
87
|
+
ImplicitlyWeightedEvictingCacheMap& operator=(
|
|
88
|
+
ImplicitlyWeightedEvictingCacheMap&& that) {
|
|
89
|
+
// Put moved-from in a valid but empty state
|
|
90
|
+
ecm_ = std::move(that.ecm_);
|
|
91
|
+
that.ecm_.clear();
|
|
92
|
+
weightFn_ = std::move(that.weightFn_);
|
|
93
|
+
that.weightFn_ = TWeightFn();
|
|
94
|
+
maxTotalWeight_ = std::move(that.maxTotalWeight_);
|
|
95
|
+
that.maxTotalWeight_ = 0;
|
|
96
|
+
currentTotalWeight_ = std::move(that.currentTotalWeight_);
|
|
97
|
+
that.currentTotalWeight_ = 0;
|
|
98
|
+
// Set prune hook for this 'this' (not that this)
|
|
99
|
+
setupPruneHook();
|
|
100
|
+
return *this;
|
|
101
|
+
}
|
|
102
|
+
ImplicitlyWeightedEvictingCacheMap(ImplicitlyWeightedEvictingCacheMap&& that)
|
|
103
|
+
: ecm_(/* no max size*/ 0) {
|
|
104
|
+
*this = std::move(that);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
~ImplicitlyWeightedEvictingCacheMap() {
|
|
108
|
+
#ifndef NDEBUG
|
|
109
|
+
// Verify remaining total weight is properly tracked. This can break if
|
|
110
|
+
// improperly mutating the TValues that changes the result of TWeightFn.
|
|
111
|
+
std::size_t actual_total_weight = 0;
|
|
112
|
+
for (auto& e : ecm_) {
|
|
113
|
+
actual_total_weight += weightFn_(e.first, e.second);
|
|
114
|
+
}
|
|
115
|
+
assert(actual_total_weight == currentTotalWeight_);
|
|
116
|
+
#endif
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
static constexpr std::size_t kApproximateEntryMemUsage =
|
|
120
|
+
ECM::kApproximateEntryMemUsage;
|
|
121
|
+
|
|
122
|
+
// iterators. NOTE: mutable iterators not included because of challenges and
|
|
123
|
+
// confusion over writes affecting the implicit weights and whether entries
|
|
124
|
+
// are promoted or potentially invalidated due to pruning.
|
|
125
|
+
using const_iterator = typename ECM::const_iterator;
|
|
126
|
+
using const_reverse_iterator = typename ECM::const_reverse_iterator;
|
|
127
|
+
|
|
128
|
+
const_iterator begin() const { return ecm_.begin(); }
|
|
129
|
+
const_iterator end() const { return ecm_.end(); }
|
|
130
|
+
|
|
131
|
+
const_reverse_iterator rbegin() const { return ecm_.rbegin(); }
|
|
132
|
+
const_reverse_iterator rend() const { return ecm_.rend(); }
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Get the number of elements in the dictionary
|
|
136
|
+
* @return the size of the dictionary
|
|
137
|
+
*/
|
|
138
|
+
std::size_t size() const { return ecm_.size(); }
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Typical empty function
|
|
142
|
+
* @return true if empty, false otherwise
|
|
143
|
+
*/
|
|
144
|
+
bool empty() const { return ecm_.empty(); }
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Returns total weight of all entries currently in the cache.
|
|
148
|
+
*/
|
|
149
|
+
std::size_t getCurrentTotalWeight() const { return currentTotalWeight_; }
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Returns the maximum allowed total weight of all entries in
|
|
153
|
+
* the cache.
|
|
154
|
+
*/
|
|
155
|
+
std::size_t getMaxTotalWeight() const { return maxTotalWeight_; }
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Sets the maximum allowed total weight of all entries in
|
|
159
|
+
* the cache, evicting entries as needed for the new limit.
|
|
160
|
+
*/
|
|
161
|
+
void setMaxTotalWeight(std::size_t newMaxTotalWeight) {
|
|
162
|
+
maxTotalWeight_ = newMaxTotalWeight;
|
|
163
|
+
pruneToMaxTotalWeight();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Check for existence of a specific key in the map. This operation has
|
|
168
|
+
* no effect on LRU order.
|
|
169
|
+
* @param key key to search for
|
|
170
|
+
* @return true if exists, false otherwise
|
|
171
|
+
*/
|
|
172
|
+
template <typename K>
|
|
173
|
+
bool exists(const K& key) const {
|
|
174
|
+
return ecm_.exists(key);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Get the value associated with a specific key. This function always
|
|
179
|
+
* promotes a found value to the head of the LRU. The returned reference
|
|
180
|
+
* is const and might be inavlidated by many subsequent operations. See
|
|
181
|
+
* IMPORTANT NOTES above. See also replace().
|
|
182
|
+
*
|
|
183
|
+
* @param key key to search for
|
|
184
|
+
* @return the value if it exists
|
|
185
|
+
* @throw std::out_of_range exception of the key does not exist
|
|
186
|
+
*/
|
|
187
|
+
template <typename K>
|
|
188
|
+
const TValue& get(const K& key) {
|
|
189
|
+
return ecm_.get(key);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Same but without LRU promotion
|
|
193
|
+
template <typename K>
|
|
194
|
+
const TValue& getWithoutPromotion(const K& key) const {
|
|
195
|
+
return ecm_.getWithoutPromotion(key);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Set a key-value pair in the dictionary with a given weight. If its weight
|
|
200
|
+
* is more than maxTotalWeight, the entry is inserted anyway and all other
|
|
201
|
+
* entries are evicted, so that get() after set() always succeeds. The
|
|
202
|
+
* structure can be temporarily over max weight until the next modification.
|
|
203
|
+
* The new or modified entry is always inserted at or promoted to the head
|
|
204
|
+
* of the LRU.
|
|
205
|
+
*
|
|
206
|
+
* @param key key to associate with value
|
|
207
|
+
* @param value value to associate with the key
|
|
208
|
+
*/
|
|
209
|
+
template <typename K>
|
|
210
|
+
void set(const K& key, TValue&& value) {
|
|
211
|
+
std::size_t new_weight = weightFn_(key, value);
|
|
212
|
+
std::size_t old_weight = 0;
|
|
213
|
+
auto it = find(key); // Does promotion
|
|
214
|
+
if (it != end()) {
|
|
215
|
+
using TMutableValue = std::remove_const_t<TValue>;
|
|
216
|
+
|
|
217
|
+
// Existing entry
|
|
218
|
+
old_weight = weightFn_(it->first, it->second);
|
|
219
|
+
auto ptr = const_cast<TMutableValue*>(&it->second);
|
|
220
|
+
// Overwrite
|
|
221
|
+
// Would be this, but need to work around
|
|
222
|
+
// const values, which don't allow move-assignment:
|
|
223
|
+
// it->second = std::move(value);
|
|
224
|
+
// Below hack is OK because we reserve the right to "entirely new
|
|
225
|
+
// entry" semantics for set() (invalidate pointers/iterators/etc.) but
|
|
226
|
+
// optimize with "replace in place" implementation.
|
|
227
|
+
ptr->~TValue();
|
|
228
|
+
new (ptr) TValue(std::move(value));
|
|
229
|
+
} else {
|
|
230
|
+
// No existing entry
|
|
231
|
+
ecm_.insert(key, std::move(value));
|
|
232
|
+
}
|
|
233
|
+
// Protect the entry we just put at the head of the LRU
|
|
234
|
+
entryWeightUpdated(old_weight, new_weight, /*protect_one*/ true);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
template <typename K>
|
|
238
|
+
void set(const K& key, const TValue& value) {
|
|
239
|
+
TValue tmp{value}; // can't yet rely on C++17 temporary materialization
|
|
240
|
+
set(key, std::move(tmp));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// TODO: insert() functions, which would refuse insert if new entry weight
|
|
244
|
+
// exceeds max (or existing entry for key)
|
|
245
|
+
// template <typename K>
|
|
246
|
+
// std::pair<const_iterator, bool> insert(const K& key, TValue&& value) {}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Erases any entry with given key or iterator.
|
|
250
|
+
*
|
|
251
|
+
* @param key_or_it key to search for or iterator
|
|
252
|
+
*/
|
|
253
|
+
template <typename KI>
|
|
254
|
+
void erase(const KI& key_or_it) {
|
|
255
|
+
// Use prune hook as erase hook to keep total weight updated
|
|
256
|
+
ecm_.erase(key_or_it, ecm_.getPruneHook());
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Get the iterator associated with a specific key. This function always
|
|
261
|
+
* promotes a found value to the head of the LRU. See IMPORTANT NOTES above
|
|
262
|
+
* for why this only returns a const_iterator. See also replace().
|
|
263
|
+
* @param key key to associate with value
|
|
264
|
+
* @return the const_iterator of the object (a std::pair of const TKey,
|
|
265
|
+
* TValue) or end() if it does not exist
|
|
266
|
+
*/
|
|
267
|
+
template <typename K>
|
|
268
|
+
const_iterator find(const K& key) {
|
|
269
|
+
return const_iterator(ecm_.find(key).base());
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Same but without LRU promotion
|
|
273
|
+
template <typename K>
|
|
274
|
+
const_iterator findWithoutPromotion(const K& key) const {
|
|
275
|
+
return ecm_.findWithoutPromotion(key);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Replace the value associated with an entry from a const_iterator, in a
|
|
280
|
+
* safe way that tracks any modification to the weight. Entries are evicted
|
|
281
|
+
* so that max total weight it not exceeded, except this function protects
|
|
282
|
+
* the entry at the head of the LRU list from eviction. Thus, for find()
|
|
283
|
+
* immediately followed by replace(), the modified entry is protected
|
|
284
|
+
* against eviction even if exceeding max total weight (like set(), iterator
|
|
285
|
+
* remains valid). The iterator also remains valid if the weight does not
|
|
286
|
+
* increase. Otherwise, the iterator is potentially invalidated by eviction
|
|
287
|
+
* during this operation.
|
|
288
|
+
*
|
|
289
|
+
* If TValue is a const type, this function is invalid.
|
|
290
|
+
* @param it const_iterator for the entry to modify, which must come from
|
|
291
|
+
* this cache map
|
|
292
|
+
* @param value replacement value
|
|
293
|
+
*/
|
|
294
|
+
void replace(const_iterator it, TValue&& value) {
|
|
295
|
+
assert(it != end());
|
|
296
|
+
size_t old_weight = weightFn_(it->first, it->second);
|
|
297
|
+
size_t new_weight = weightFn_(it->first, value);
|
|
298
|
+
// Overwrite in place
|
|
299
|
+
const_cast<TValue&>(it->second) = std::move(value);
|
|
300
|
+
// Evict as needed (possibly including this entry, unless it's LRU head)
|
|
301
|
+
entryWeightUpdated(old_weight, new_weight, /*protect_one*/ true);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
void replace(const_iterator it, const TValue& value) {
|
|
305
|
+
TValue tmp{value}; // can't yet rely on C++17 temporary materialization
|
|
306
|
+
replace(it, std::move(tmp));
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Clear the cache to an empty state.
|
|
311
|
+
*/
|
|
312
|
+
void clear() {
|
|
313
|
+
ecm_.clear();
|
|
314
|
+
assert(currentTotalWeight_ == 0);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Set the prune hook, which is the function invoked on the key and value
|
|
319
|
+
* on each eviction. An operation will throw if the pruneHook throws.
|
|
320
|
+
* Note that this prune hook is not automatically called on entries
|
|
321
|
+
* explicitly erase()ed nor on remaining entries at destruction time.
|
|
322
|
+
* @param pruneHook eviction callback to set as default, or nullptr to clear
|
|
323
|
+
*/
|
|
324
|
+
void setPruneHook(PruneHookCall pruneHook) { pruneHook_ = pruneHook; }
|
|
325
|
+
|
|
326
|
+
private: // fns
|
|
327
|
+
void setupPruneHook() {
|
|
328
|
+
ecm_.setPruneHook([this](const TKey& key, TValue&& value) {
|
|
329
|
+
std::size_t weight = weightFn_(key, value);
|
|
330
|
+
assert(currentTotalWeight_ >= weight);
|
|
331
|
+
currentTotalWeight_ -= weight;
|
|
332
|
+
if (pruneHook_) {
|
|
333
|
+
pruneHook_(key, std::move(value));
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
void entryWeightUpdated(
|
|
339
|
+
std::size_t old_weight,
|
|
340
|
+
std::size_t new_weight,
|
|
341
|
+
bool protect_one = false) {
|
|
342
|
+
assert(old_weight <= currentTotalWeight_);
|
|
343
|
+
currentTotalWeight_ += new_weight - old_weight;
|
|
344
|
+
pruneToMaxTotalWeight(protect_one);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
void pruneToMaxTotalWeight(bool protect_one = false) {
|
|
348
|
+
// NOTE: Avoid infinite loop even in the case of weight tracking bug
|
|
349
|
+
size_t min_count = protect_one ? 1 : 0;
|
|
350
|
+
while (currentTotalWeight_ > maxTotalWeight_ && ecm_.size() > min_count) {
|
|
351
|
+
ecm_.prune(1);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
template <class _TKey, class _TValue, class _THash, class _TKeyEqual>
|
|
356
|
+
friend class WeightedEvictingCacheMap;
|
|
357
|
+
|
|
358
|
+
private: // data
|
|
359
|
+
PruneHookCall pruneHook_;
|
|
360
|
+
ECM ecm_;
|
|
361
|
+
TWeightFn weightFn_;
|
|
362
|
+
std::size_t maxTotalWeight_;
|
|
363
|
+
std::size_t currentTotalWeight_;
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* A variant of EvictingCacheMap that tracks weights for entries and
|
|
368
|
+
* evicts entries in LRU order to ensure the total weight of all entries
|
|
369
|
+
* stays below some set maximum. Weights are stored as a size_t with each
|
|
370
|
+
* entry.
|
|
371
|
+
*
|
|
372
|
+
* Example usage: if TKey is std::string and TValue is some large, complex
|
|
373
|
+
* object type, the weight could be the estimated memory size of the key
|
|
374
|
+
* and complex object. Tracking the weight explicitly minimizes costly
|
|
375
|
+
* recomputation of the estimated memory size. Thus, the total weight of all
|
|
376
|
+
* entries approximates the total memory usage.
|
|
377
|
+
*
|
|
378
|
+
* TValue must be either movable or copyable. TKey must be copyable.
|
|
379
|
+
*
|
|
380
|
+
* IMPORTANT NOTES:
|
|
381
|
+
* * Returned references, pointers, or iterators are potentially invalid
|
|
382
|
+
* after any pruning operation (set, insert, etc. that might increase total
|
|
383
|
+
* weight), or any set/insert on the same key (which are allowed to create a
|
|
384
|
+
* new entry or modify an existing entry becoming obsolete).
|
|
385
|
+
* * This is NOT a thread-safe structure.
|
|
386
|
+
* * For simplicity, functions taking a key implicitly inherit type
|
|
387
|
+
* constraints from EvictingCacheMap. (Must either match TKey or
|
|
388
|
+
* EligibleForHeterogeneousFind/Insert.)
|
|
389
|
+
*
|
|
390
|
+
* This implementation has not been highly optimized.
|
|
391
|
+
*/
|
|
392
|
+
template <
|
|
393
|
+
class TKey,
|
|
394
|
+
class TValue,
|
|
395
|
+
class THash = HeterogeneousAccessHash<TKey>,
|
|
396
|
+
class TKeyEqual = HeterogeneousAccessEqualTo<TKey>>
|
|
397
|
+
class WeightedEvictingCacheMap {
|
|
398
|
+
public: // types
|
|
399
|
+
struct ValueAndWeight {
|
|
400
|
+
/*implicit*/ ValueAndWeight(TValue&& _value, std::size_t _weight)
|
|
401
|
+
: value(std::move(_value)), weight(_weight) {}
|
|
402
|
+
// Value is mutable through non-const iterator
|
|
403
|
+
TValue value;
|
|
404
|
+
// Weight is not mutable to ensure proper tracking. See updateWeight().
|
|
405
|
+
const std::size_t weight;
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
private: // types
|
|
409
|
+
struct WeightFn {
|
|
410
|
+
std::size_t operator()(const TKey& /*key*/, const ValueAndWeight& p) {
|
|
411
|
+
return p.weight;
|
|
412
|
+
}
|
|
413
|
+
};
|
|
414
|
+
using IWECM = ImplicitlyWeightedEvictingCacheMap<
|
|
415
|
+
TKey,
|
|
416
|
+
ValueAndWeight,
|
|
417
|
+
WeightFn,
|
|
418
|
+
THash,
|
|
419
|
+
TKeyEqual>;
|
|
420
|
+
|
|
421
|
+
public:
|
|
422
|
+
using PruneHookCall = std::function<void(TKey, TValue&&, size_t)>;
|
|
423
|
+
|
|
424
|
+
explicit WeightedEvictingCacheMap(
|
|
425
|
+
std::size_t maxTotalWeight,
|
|
426
|
+
const THash& keyHash = THash(),
|
|
427
|
+
const TKeyEqual& keyEqual = TKeyEqual())
|
|
428
|
+
: iwecm_(maxTotalWeight, WeightFn(), keyHash, keyEqual) {}
|
|
429
|
+
|
|
430
|
+
// Like EvictingCacheMap
|
|
431
|
+
WeightedEvictingCacheMap(const WeightedEvictingCacheMap&) = delete;
|
|
432
|
+
WeightedEvictingCacheMap& operator=(const WeightedEvictingCacheMap&) = delete;
|
|
433
|
+
WeightedEvictingCacheMap(WeightedEvictingCacheMap&&) = default;
|
|
434
|
+
WeightedEvictingCacheMap& operator=(WeightedEvictingCacheMap&&) = default;
|
|
435
|
+
|
|
436
|
+
static constexpr std::size_t kApproximateEntryMemUsage =
|
|
437
|
+
IWECM::kApproximateEntryMemUsage;
|
|
438
|
+
|
|
439
|
+
// iterators that dereference to ValueAndWeight
|
|
440
|
+
using iterator = typename IWECM::ECM::iterator;
|
|
441
|
+
using reverse_iterator = typename IWECM::ECM::reverse_iterator;
|
|
442
|
+
using const_iterator = typename IWECM::const_iterator;
|
|
443
|
+
using const_reverse_iterator = typename IWECM::const_reverse_iterator;
|
|
444
|
+
|
|
445
|
+
iterator begin() { return iwecm_.ecm_.begin(); }
|
|
446
|
+
iterator end() { return iwecm_.ecm_.end(); }
|
|
447
|
+
|
|
448
|
+
const_iterator begin() const { return cbegin(); }
|
|
449
|
+
const_iterator end() const { return cend(); }
|
|
450
|
+
|
|
451
|
+
const_iterator cbegin() const { return iwecm_.begin(); }
|
|
452
|
+
const_iterator cend() const { return iwecm_.end(); }
|
|
453
|
+
|
|
454
|
+
reverse_iterator rbegin() { return iwecm_.ecm_.rbegin(); }
|
|
455
|
+
reverse_iterator rend() { return iwecm_.ecm_.rend(); }
|
|
456
|
+
|
|
457
|
+
const_reverse_iterator rbegin() const { return crbegin(); }
|
|
458
|
+
const_reverse_iterator rend() const { return crend(); }
|
|
459
|
+
|
|
460
|
+
const_reverse_iterator crbegin() const { return iwecm_.rbegin(); }
|
|
461
|
+
const_reverse_iterator crend() const { return iwecm_.rend(); }
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Get the number of elements in the dictionary
|
|
465
|
+
* @return the size of the dictionary
|
|
466
|
+
*/
|
|
467
|
+
std::size_t size() const { return iwecm_.size(); }
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Typical empty function
|
|
471
|
+
* @return true if empty, false otherwise
|
|
472
|
+
*/
|
|
473
|
+
bool empty() const { return iwecm_.empty(); }
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* Returns total weight of all entries currently in the cache.
|
|
477
|
+
*/
|
|
478
|
+
std::size_t getCurrentTotalWeight() const {
|
|
479
|
+
return iwecm_.getCurrentTotalWeight();
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Returns the maximum allowed total weight of all entries in
|
|
484
|
+
* the cache.
|
|
485
|
+
*/
|
|
486
|
+
std::size_t getMaxTotalWeight() const { return iwecm_.getMaxTotalWeight(); }
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Sets the maximum allowed total weight of all entries in
|
|
490
|
+
* the cache, evicting entries as needed for the new limit.
|
|
491
|
+
*/
|
|
492
|
+
void setMaxTotalWeight(std::size_t newMaxTotalWeight) {
|
|
493
|
+
iwecm_.setMaxTotalWeight(newMaxTotalWeight);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Check for existence of a specific key in the map. This operation has
|
|
498
|
+
* no effect on LRU order.
|
|
499
|
+
* @param key key to search for
|
|
500
|
+
* @return true if exists, false otherwise
|
|
501
|
+
*/
|
|
502
|
+
template <typename K>
|
|
503
|
+
bool exists(const K& key) const {
|
|
504
|
+
return iwecm_.exists(key);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* Get the value associated with a specific key. This function always
|
|
509
|
+
* promotes a found value to the head of the LRU. The TValue can be
|
|
510
|
+
* modified in place through the reference, keeping in mind the reference
|
|
511
|
+
* can easily be invalidated (IMPORTANT NOTES above).
|
|
512
|
+
* @param key key to search for
|
|
513
|
+
* @return the value if it exists
|
|
514
|
+
* @throw std::out_of_range exception of the key does not exist
|
|
515
|
+
*/
|
|
516
|
+
template <typename K>
|
|
517
|
+
TValue& get(const K& key) {
|
|
518
|
+
return const_cast<TValue&>(iwecm_.get(key).value);
|
|
519
|
+
}
|
|
520
|
+
// Same but without LRU promotion
|
|
521
|
+
template <typename K>
|
|
522
|
+
TValue& getWithoutPromotion(const K& key) {
|
|
523
|
+
return const_cast<TValue&>(iwecm_.getWithoutPromotion(key).value);
|
|
524
|
+
}
|
|
525
|
+
template <typename K>
|
|
526
|
+
const TValue& getWithoutPromotion(const K& key) const {
|
|
527
|
+
return iwecm_.getWithoutPromotion(key).value;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* Set a key-value pair in the dictionary with a given weight. If its weight
|
|
532
|
+
* is more than maxTotalWeight, the entry is inserted anyway and all other
|
|
533
|
+
* entries are evicted, so that get() after set() always succeeds. The
|
|
534
|
+
* structure can be temporarily over max weight until the next modification.
|
|
535
|
+
* The new or modified entry is always inserted at or promoted to the head
|
|
536
|
+
* of the LRU.
|
|
537
|
+
*
|
|
538
|
+
* @param key key to associate with value
|
|
539
|
+
* @param value value to associate with the key
|
|
540
|
+
* @param weight weight to associate with the key-value entry
|
|
541
|
+
*/
|
|
542
|
+
template <typename K>
|
|
543
|
+
void set(const K& key, TValue&& value, std::size_t weight) {
|
|
544
|
+
ValueAndWeight tmp{std::move(value), weight};
|
|
545
|
+
return iwecm_.set(key, std::move(tmp));
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
template <typename K>
|
|
549
|
+
void set(const K& key, const TValue& value, std::size_t weight) {
|
|
550
|
+
TValue tmp{value}; // can't yet rely on C++17 temporary materialization
|
|
551
|
+
return set(key, std::move(tmp), weight);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// TODO: insert() functions, which would refuse insert if new entry weight
|
|
555
|
+
// exceeds max (or existing entry for key)
|
|
556
|
+
// template <typename K>
|
|
557
|
+
// std::pair<const_iterator, bool> insert(const K& key, TValue&& value) {}
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* Erases any entry with given key or iterator.
|
|
561
|
+
*
|
|
562
|
+
* @param key_or_it key to search for or iterator
|
|
563
|
+
*/
|
|
564
|
+
template <typename KI>
|
|
565
|
+
void erase(const KI& key_or_it) {
|
|
566
|
+
iwecm_.erase(key_or_it);
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Get the iterator associated with a specific key. This function always
|
|
571
|
+
* promotes a found value to the head of the LRU. Although values can be
|
|
572
|
+
* modified through iterators, weights are const. See updateWeight().
|
|
573
|
+
* @param key key to associate with value
|
|
574
|
+
* @return the iterator of std::pair<const TKey, ValueAndWeight>, or
|
|
575
|
+
* end() if it does not exist
|
|
576
|
+
*/
|
|
577
|
+
template <typename K>
|
|
578
|
+
iterator find(const K& key) {
|
|
579
|
+
return iwecm_.ecm_.find(key);
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
// Same but without LRU promotion
|
|
583
|
+
template <typename K>
|
|
584
|
+
iterator findWithoutPromotion(const K& key) {
|
|
585
|
+
return iwecm_.ecm_.findWithoutPromotion(key);
|
|
586
|
+
}
|
|
587
|
+
template <typename K>
|
|
588
|
+
const_iterator findWithoutPromotion(const K& key) const {
|
|
589
|
+
return iwecm_.findWithoutPromotion(key);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/**
|
|
593
|
+
* Overwrite the weight associated with a specific entry. As usual, entries
|
|
594
|
+
* are evicted so that max total weight it not exceeded, except this
|
|
595
|
+
* function protects the entry at the head of the LRU list from eviction.
|
|
596
|
+
* Thus, for find() immediately followed by updateWeight(), the modified
|
|
597
|
+
* entry is protected against eviction even if exceeding max total weight
|
|
598
|
+
* (like set(), iterator remains valid). The iterator also remains valid if
|
|
599
|
+
* the weight does not increase. Otherwise, the iterator is potentially
|
|
600
|
+
* invalidated by eviction during this operation.
|
|
601
|
+
*
|
|
602
|
+
* @param it iterator for the entry to modify, which must come from
|
|
603
|
+
* this cache map
|
|
604
|
+
* @param new_weight the updated weight to assign
|
|
605
|
+
*/
|
|
606
|
+
void updateWeight(const_iterator it, std::size_t new_weight) {
|
|
607
|
+
updateWeightImpl(it, new_weight);
|
|
608
|
+
}
|
|
609
|
+
void updateWeight(iterator it, std::size_t new_weight) {
|
|
610
|
+
updateWeightImpl(it, new_weight);
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Clear the cache to an empty state.
|
|
615
|
+
*/
|
|
616
|
+
void clear() { iwecm_.clear(); }
|
|
617
|
+
|
|
618
|
+
/**
|
|
619
|
+
* Set the prune hook, which is the function invoked on the key and value
|
|
620
|
+
* on each eviction. An operation will throw if the pruneHook throws.
|
|
621
|
+
* Note that this prune hook is not automatically called on entries
|
|
622
|
+
* explicitly erase()ed nor on remaining entries at destruction time.
|
|
623
|
+
* @param pruneHook eviction callback to set as default, or nullptr to clear
|
|
624
|
+
*/
|
|
625
|
+
void setPruneHook(PruneHookCall pruneHook) {
|
|
626
|
+
iwecm_.setPruneHook([pruneHook = std::move(pruneHook)](
|
|
627
|
+
const TKey& key, ValueAndWeight&& valueAndWeight) {
|
|
628
|
+
if (!pruneHook) {
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
pruneHook(key, std::move(valueAndWeight.value), valueAndWeight.weight);
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
private:
|
|
636
|
+
// Like IWECM::replace
|
|
637
|
+
template <typename It>
|
|
638
|
+
void updateWeightImpl(It it, std::size_t new_weight) {
|
|
639
|
+
assert(it != end());
|
|
640
|
+
size_t old_weight = it->second.weight;
|
|
641
|
+
// Overwrite in place
|
|
642
|
+
const_cast<std::size_t&>(it->second.weight) = new_weight;
|
|
643
|
+
// Evict as needed (possibly including this entry, unless it's LRU head)
|
|
644
|
+
iwecm_.entryWeightUpdated(old_weight, new_weight, /*protect_one*/ true);
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
PruneHookCall pruneHook_;
|
|
648
|
+
IWECM iwecm_;
|
|
649
|
+
};
|
|
650
|
+
|
|
651
|
+
} // namespace folly
|