react-native-windows 0.85.0-preview.1 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +28 -46
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +0 -3
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +19 -13
- package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +107 -0
- package/Microsoft.ReactNative/Fabric/Composition/SelectionItemAutomationEvent.h +73 -0
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +105 -32
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +7 -2
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +2 -2
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +2 -9
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +54 -5
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +29 -9
- package/Scripts/creaternwlib.cmd +31 -15
- package/external/.clang-format +1 -0
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/external/fmt/cgmanifest.json +15 -0
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/external/fmt/include/fmt/base.h +3077 -0
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/Folly.natvis +25 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/external/folly/cgmanifest.json +25 -0
- package/external/folly/folly/.clang-format +1 -0
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstexprMath.h +978 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.cpp +1205 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/Hardware.h +155 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.cpp +633 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/external/folly/folly/hash/SpookyHashV2.h +339 -0
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic-inl.h +1438 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.cpp +1118 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/SafeAssert.h +188 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/ToAscii.cpp +348 -0
- package/external/folly/folly/lang/ToAscii.h +182 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.cpp +33 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/package.json +8 -8
- package/templates/cpp-lib/example/metro.config.js +18 -2
|
@@ -0,0 +1,1603 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
//
|
|
18
|
+
// Docs: https://fburl.com/fbcref_f14nodeset
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#pragma once
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* F14NodeSet, F14ValueSet, and F14VectorSet
|
|
25
|
+
*
|
|
26
|
+
* F14FastSet conditionally works like F14ValueSet or F14VectorSet
|
|
27
|
+
*
|
|
28
|
+
* See F14.md
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
#include <cstddef>
|
|
32
|
+
#include <initializer_list>
|
|
33
|
+
#include <tuple>
|
|
34
|
+
|
|
35
|
+
#include <folly/Portability.h>
|
|
36
|
+
#include <folly/container/View.h>
|
|
37
|
+
#include <folly/lang/SafeAssert.h>
|
|
38
|
+
|
|
39
|
+
#include <folly/container/F14Set-fwd.h>
|
|
40
|
+
#include <folly/container/Iterator.h>
|
|
41
|
+
#include <folly/container/detail/F14Policy.h>
|
|
42
|
+
#include <folly/container/detail/F14SetFallback.h>
|
|
43
|
+
#include <folly/container/detail/F14Table.h>
|
|
44
|
+
#include <folly/container/detail/Util.h>
|
|
45
|
+
|
|
46
|
+
namespace folly {
|
|
47
|
+
|
|
48
|
+
#if FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
|
|
49
|
+
|
|
50
|
+
//////// Common case for supported platforms
|
|
51
|
+
|
|
52
|
+
namespace f14 {
|
|
53
|
+
namespace detail {
|
|
54
|
+
|
|
55
|
+
template <typename Policy>
|
|
56
|
+
class F14BasicSet {
|
|
57
|
+
template <typename K, typename T>
|
|
58
|
+
using EnableHeterogeneousFind = std::enable_if_t<
|
|
59
|
+
::folly::detail::EligibleForHeterogeneousFind<
|
|
60
|
+
typename Policy::Value,
|
|
61
|
+
typename Policy::Hasher,
|
|
62
|
+
typename Policy::KeyEqual,
|
|
63
|
+
K>::value,
|
|
64
|
+
T>;
|
|
65
|
+
|
|
66
|
+
template <typename K, typename T>
|
|
67
|
+
using EnableHeterogeneousInsert = std::enable_if_t<
|
|
68
|
+
::folly::detail::EligibleForHeterogeneousInsert<
|
|
69
|
+
typename Policy::Value,
|
|
70
|
+
typename Policy::Hasher,
|
|
71
|
+
typename Policy::KeyEqual,
|
|
72
|
+
K>::value,
|
|
73
|
+
T>;
|
|
74
|
+
|
|
75
|
+
template <typename K>
|
|
76
|
+
using IsIter = std::is_same<typename Policy::Iter, remove_cvref_t<K>>;
|
|
77
|
+
|
|
78
|
+
template <typename K, typename T>
|
|
79
|
+
using EnableHeterogeneousErase = std::enable_if_t<
|
|
80
|
+
::folly::detail::EligibleForHeterogeneousFind<
|
|
81
|
+
typename Policy::Value,
|
|
82
|
+
typename Policy::Hasher,
|
|
83
|
+
typename Policy::KeyEqual,
|
|
84
|
+
std::conditional_t<IsIter<K>::value, typename Policy::Value, K>>::
|
|
85
|
+
value &&
|
|
86
|
+
!IsIter<K>::value,
|
|
87
|
+
T>;
|
|
88
|
+
|
|
89
|
+
public:
|
|
90
|
+
//// PUBLIC - Member types
|
|
91
|
+
|
|
92
|
+
using key_type = typename Policy::Value;
|
|
93
|
+
using value_type = key_type;
|
|
94
|
+
using size_type = std::size_t;
|
|
95
|
+
using difference_type = std::ptrdiff_t;
|
|
96
|
+
using hash_token_type = F14HashToken;
|
|
97
|
+
using hasher = typename Policy::Hasher;
|
|
98
|
+
using key_equal = typename Policy::KeyEqual;
|
|
99
|
+
using allocator_type = typename Policy::Alloc;
|
|
100
|
+
using reference = value_type&;
|
|
101
|
+
using const_reference = value_type const&;
|
|
102
|
+
using pointer = typename Policy::AllocTraits::pointer;
|
|
103
|
+
using const_pointer = typename Policy::AllocTraits::const_pointer;
|
|
104
|
+
using iterator = typename Policy::Iter;
|
|
105
|
+
using const_iterator = iterator;
|
|
106
|
+
|
|
107
|
+
private:
|
|
108
|
+
using ItemIter = typename Policy::ItemIter;
|
|
109
|
+
|
|
110
|
+
public:
|
|
111
|
+
//// PUBLIC - Member functions
|
|
112
|
+
|
|
113
|
+
F14BasicSet() noexcept(Policy::kDefaultConstructIsNoexcept) : table_{} {}
|
|
114
|
+
|
|
115
|
+
explicit F14BasicSet(
|
|
116
|
+
std::size_t initialCapacity,
|
|
117
|
+
hasher const& hash = hasher{},
|
|
118
|
+
key_equal const& eq = key_equal{},
|
|
119
|
+
allocator_type const& alloc = allocator_type{})
|
|
120
|
+
: table_{initialCapacity, hash, eq, alloc} {}
|
|
121
|
+
|
|
122
|
+
explicit F14BasicSet(std::size_t initialCapacity, allocator_type const& alloc)
|
|
123
|
+
: F14BasicSet(initialCapacity, hasher{}, key_equal{}, alloc) {}
|
|
124
|
+
|
|
125
|
+
explicit F14BasicSet(
|
|
126
|
+
std::size_t initialCapacity,
|
|
127
|
+
hasher const& hash,
|
|
128
|
+
allocator_type const& alloc)
|
|
129
|
+
: F14BasicSet(initialCapacity, hash, key_equal{}, alloc) {}
|
|
130
|
+
|
|
131
|
+
explicit F14BasicSet(allocator_type const& alloc)
|
|
132
|
+
: F14BasicSet(0, hasher{}, key_equal{}, alloc) {}
|
|
133
|
+
|
|
134
|
+
template <typename InputIt>
|
|
135
|
+
F14BasicSet(
|
|
136
|
+
InputIt first,
|
|
137
|
+
InputIt last,
|
|
138
|
+
std::size_t initialCapacity = 0,
|
|
139
|
+
hasher const& hash = hasher{},
|
|
140
|
+
key_equal const& eq = key_equal{},
|
|
141
|
+
allocator_type const& alloc = allocator_type{})
|
|
142
|
+
: table_{initialCapacity, hash, eq, alloc} {
|
|
143
|
+
initialInsert(first, last, initialCapacity);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
template <typename InputIt>
|
|
147
|
+
F14BasicSet(
|
|
148
|
+
InputIt first,
|
|
149
|
+
InputIt last,
|
|
150
|
+
std::size_t initialCapacity,
|
|
151
|
+
allocator_type const& alloc)
|
|
152
|
+
: table_{initialCapacity, hasher{}, key_equal{}, alloc} {
|
|
153
|
+
initialInsert(first, last, initialCapacity);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
template <typename InputIt>
|
|
157
|
+
F14BasicSet(
|
|
158
|
+
InputIt first,
|
|
159
|
+
InputIt last,
|
|
160
|
+
std::size_t initialCapacity,
|
|
161
|
+
hasher const& hash,
|
|
162
|
+
allocator_type const& alloc)
|
|
163
|
+
: table_{initialCapacity, hash, key_equal{}, alloc} {
|
|
164
|
+
initialInsert(first, last, initialCapacity);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
F14BasicSet(F14BasicSet const& rhs) = default;
|
|
168
|
+
|
|
169
|
+
F14BasicSet(F14BasicSet const& rhs, allocator_type const& alloc)
|
|
170
|
+
: table_(rhs.table_, alloc) {}
|
|
171
|
+
|
|
172
|
+
F14BasicSet(F14BasicSet&& rhs) = default;
|
|
173
|
+
|
|
174
|
+
F14BasicSet(F14BasicSet&& rhs, allocator_type const& alloc) noexcept(
|
|
175
|
+
Policy::kAllocIsAlwaysEqual)
|
|
176
|
+
: table_{std::move(rhs.table_), alloc} {}
|
|
177
|
+
|
|
178
|
+
/* implicit */ F14BasicSet(
|
|
179
|
+
std::initializer_list<value_type> init,
|
|
180
|
+
std::size_t initialCapacity = 0,
|
|
181
|
+
hasher const& hash = hasher{},
|
|
182
|
+
key_equal const& eq = key_equal{},
|
|
183
|
+
allocator_type const& alloc = allocator_type{})
|
|
184
|
+
: table_{initialCapacity, hash, eq, alloc} {
|
|
185
|
+
initialInsert(init.begin(), init.end(), initialCapacity);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
F14BasicSet(
|
|
189
|
+
std::initializer_list<value_type> init,
|
|
190
|
+
std::size_t initialCapacity,
|
|
191
|
+
allocator_type const& alloc)
|
|
192
|
+
: table_{initialCapacity, hasher{}, key_equal{}, alloc} {
|
|
193
|
+
initialInsert(init.begin(), init.end(), initialCapacity);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
F14BasicSet(
|
|
197
|
+
std::initializer_list<value_type> init,
|
|
198
|
+
std::size_t initialCapacity,
|
|
199
|
+
hasher const& hash,
|
|
200
|
+
allocator_type const& alloc)
|
|
201
|
+
: table_{initialCapacity, hash, key_equal{}, alloc} {
|
|
202
|
+
initialInsert(init.begin(), init.end(), initialCapacity);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
F14BasicSet& operator=(F14BasicSet const&) = default;
|
|
206
|
+
|
|
207
|
+
F14BasicSet& operator=(F14BasicSet&&) = default;
|
|
208
|
+
|
|
209
|
+
F14BasicSet& operator=(std::initializer_list<value_type> ilist) {
|
|
210
|
+
clear();
|
|
211
|
+
bulkInsert(ilist.begin(), ilist.end(), true);
|
|
212
|
+
return *this;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/// Get the allocator for this container.
|
|
216
|
+
allocator_type get_allocator() const noexcept { return table_.alloc(); }
|
|
217
|
+
|
|
218
|
+
//// PUBLIC - Iterators
|
|
219
|
+
|
|
220
|
+
/// @methodset Iterators
|
|
221
|
+
iterator begin() noexcept { return cbegin(); }
|
|
222
|
+
const_iterator begin() const noexcept { return cbegin(); }
|
|
223
|
+
/// @methodset Iterators
|
|
224
|
+
const_iterator cbegin() const noexcept {
|
|
225
|
+
return table_.makeIter(table_.begin());
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/// @methodset Iterators
|
|
229
|
+
iterator end() noexcept { return cend(); }
|
|
230
|
+
const_iterator end() const noexcept { return cend(); }
|
|
231
|
+
/// @methodset Iterators
|
|
232
|
+
const_iterator cend() const noexcept { return table_.makeIter(table_.end()); }
|
|
233
|
+
|
|
234
|
+
//// PUBLIC - Capacity
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Check if this container has any elements.
|
|
238
|
+
* @methodset Capacity
|
|
239
|
+
*/
|
|
240
|
+
bool empty() const noexcept { return table_.empty(); }
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Number of elements in this container.
|
|
244
|
+
* @methodset Capacity
|
|
245
|
+
*/
|
|
246
|
+
std::size_t size() const noexcept { return table_.size(); }
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* The maximum size of this container.
|
|
250
|
+
* @methodset Capacity
|
|
251
|
+
*/
|
|
252
|
+
std::size_t max_size() const noexcept { return table_.max_size(); }
|
|
253
|
+
|
|
254
|
+
//// PUBLIC - Modifiers
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Remove all elements.
|
|
258
|
+
*
|
|
259
|
+
* Frees heap-allocated memory; bucket_count is returned to 0.
|
|
260
|
+
*
|
|
261
|
+
* @methodset Modifiers
|
|
262
|
+
*/
|
|
263
|
+
void clear() noexcept { table_.clear(); }
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Add a single element.
|
|
267
|
+
*
|
|
268
|
+
* @overloadbrief Add elements.
|
|
269
|
+
* @methodset Modifiers
|
|
270
|
+
*/
|
|
271
|
+
std::pair<iterator, bool> insert(value_type const& value) {
|
|
272
|
+
return emplace(value);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/// Add a single element.
|
|
276
|
+
std::pair<iterator, bool> insert(value_type&& value) {
|
|
277
|
+
return emplace(std::move(value));
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Add a single element, with a locational hint.
|
|
282
|
+
*
|
|
283
|
+
* std::unordered_set's hinted insertion API is misleading. No implementation
|
|
284
|
+
* I've seen actually uses the hint. Code restructuring by the caller to use
|
|
285
|
+
* the hinted API is at best unnecessary, and at worst a pessimization. It is
|
|
286
|
+
* used, however, so we provide it.
|
|
287
|
+
*/
|
|
288
|
+
iterator insert(const_iterator /*hint*/, value_type const& value) {
|
|
289
|
+
return insert(value).first;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/// Add a single element, with a locational hint.
|
|
293
|
+
iterator insert(const_iterator /*hint*/, value_type&& value) {
|
|
294
|
+
return insert(std::move(value)).first;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/// Add a single element, of a heterognous type.
|
|
298
|
+
template <typename K>
|
|
299
|
+
EnableHeterogeneousInsert<K, std::pair<iterator, bool>> insert(K&& value) {
|
|
300
|
+
return emplace(std::forward<K>(value));
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
private:
|
|
304
|
+
template <class InputIt>
|
|
305
|
+
FOLLY_ALWAYS_INLINE void bulkInsert(
|
|
306
|
+
InputIt first, InputIt last, bool autoReserve) {
|
|
307
|
+
if (autoReserve) {
|
|
308
|
+
auto n = std::distance(first, last);
|
|
309
|
+
if (n == 0) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
table_.reserveForInsert(n);
|
|
313
|
+
}
|
|
314
|
+
while (first != last) {
|
|
315
|
+
insert(*first);
|
|
316
|
+
++first;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
template <class InputIt>
|
|
321
|
+
void initialInsert(InputIt first, InputIt last, std::size_t initialCapacity) {
|
|
322
|
+
FOLLY_SAFE_DCHECK(empty() && bucket_count() >= initialCapacity, "");
|
|
323
|
+
|
|
324
|
+
// It's possible that there are a lot of duplicates in first..last and
|
|
325
|
+
// so we will oversize ourself. The common case, however, is that
|
|
326
|
+
// we can avoid a lot of rehashing if we pre-expand. The behavior
|
|
327
|
+
// is easy to disable at a particular call site by asking for an
|
|
328
|
+
// initialCapacity of 1.
|
|
329
|
+
bool autoReserve =
|
|
330
|
+
std::is_base_of<
|
|
331
|
+
std::random_access_iterator_tag,
|
|
332
|
+
typename std::iterator_traits<InputIt>::iterator_category>::value &&
|
|
333
|
+
initialCapacity == 0;
|
|
334
|
+
bulkInsert(first, last, autoReserve);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
public:
|
|
338
|
+
/// Add a range of elements.
|
|
339
|
+
template <class InputIt>
|
|
340
|
+
void insert(InputIt first, InputIt last) {
|
|
341
|
+
// Bulk reserve is a heuristic choice, so it can backfire. We restrict
|
|
342
|
+
// ourself to situations that mimic bulk construction without an
|
|
343
|
+
// explicit initialCapacity.
|
|
344
|
+
bool autoReserve =
|
|
345
|
+
std::is_base_of<
|
|
346
|
+
std::random_access_iterator_tag,
|
|
347
|
+
typename std::iterator_traits<InputIt>::iterator_category>::value &&
|
|
348
|
+
bucket_count() == 0;
|
|
349
|
+
bulkInsert(first, last, autoReserve);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/// Add elements from an initializer list.
|
|
353
|
+
void insert(std::initializer_list<value_type> ilist) {
|
|
354
|
+
insert(ilist.begin(), ilist.end());
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
private:
|
|
358
|
+
template <typename Arg>
|
|
359
|
+
using UsableAsKey = ::folly::detail::
|
|
360
|
+
EligibleForHeterogeneousFind<key_type, hasher, key_equal, Arg>;
|
|
361
|
+
|
|
362
|
+
public:
|
|
363
|
+
/**
|
|
364
|
+
* Add an element by constructing it in-place.
|
|
365
|
+
*
|
|
366
|
+
* @overloadbrief Add elements in-place.
|
|
367
|
+
* @methodset Modifiers
|
|
368
|
+
*/
|
|
369
|
+
template <class... Args>
|
|
370
|
+
std::pair<iterator, bool> emplace(Args&&... args) {
|
|
371
|
+
auto rv = folly::detail::callWithConstructedKey<key_type, UsableAsKey>(
|
|
372
|
+
table_.alloc(),
|
|
373
|
+
[&](auto&&... inner) {
|
|
374
|
+
return table_.tryEmplaceValue(
|
|
375
|
+
std::forward<decltype(inner)>(inner)...);
|
|
376
|
+
},
|
|
377
|
+
std::forward<Args>(args)...);
|
|
378
|
+
return std::make_pair(table_.makeIter(rv.first), rv.second);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Emplace with prehash token
|
|
382
|
+
template <class... Args>
|
|
383
|
+
std::pair<iterator, bool> emplace_token(
|
|
384
|
+
F14HashToken const& token, Args&&... args) {
|
|
385
|
+
auto rv = folly::detail::callWithConstructedKey<key_type, UsableAsKey>(
|
|
386
|
+
table_.alloc(),
|
|
387
|
+
[&](auto&&... inner) {
|
|
388
|
+
return table_.tryEmplaceValueWithToken(
|
|
389
|
+
token, std::forward<decltype(inner)>(inner)...);
|
|
390
|
+
},
|
|
391
|
+
std::forward<Args>(args)...);
|
|
392
|
+
return std::make_pair(table_.makeIter(rv.first), rv.second);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/// Emplace with hint.
|
|
396
|
+
template <class... Args>
|
|
397
|
+
iterator emplace_hint(const_iterator /*hint*/, Args&&... args) {
|
|
398
|
+
return emplace(std::forward<Args>(args)...).first;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Remove element at a specific position (iterator).
|
|
403
|
+
* @overloadbrief Remove elements.
|
|
404
|
+
* @methodset Modifiers
|
|
405
|
+
*/
|
|
406
|
+
FOLLY_ALWAYS_INLINE iterator erase(const_iterator pos) {
|
|
407
|
+
return eraseInto(pos, variadic_noop);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/// Remove a range of elements.
|
|
411
|
+
iterator erase(const_iterator first, const_iterator last) {
|
|
412
|
+
return eraseInto(first, last, variadic_noop);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/// Remove a specific key.
|
|
416
|
+
size_type erase(key_type const& key) { return eraseInto(key, variadic_noop); }
|
|
417
|
+
|
|
418
|
+
/// Remove a key, using a heterogeneous representation.
|
|
419
|
+
template <typename K>
|
|
420
|
+
EnableHeterogeneousErase<K, size_type> erase(K const& key) {
|
|
421
|
+
return eraseInto(key, variadic_noop);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Callback-erase a single iterator.
|
|
426
|
+
*
|
|
427
|
+
* Like erase, but with an additional callback argument which is called with
|
|
428
|
+
* an rvalue reference to the item directly before it is destroyed. This can
|
|
429
|
+
* be used to extract an item out of a F14Set while avoiding a copy.
|
|
430
|
+
*
|
|
431
|
+
* @overloadbrief Erase with pre-destruction callback.
|
|
432
|
+
* @methodset Modifiers
|
|
433
|
+
*/
|
|
434
|
+
template <typename BeforeDestroy>
|
|
435
|
+
FOLLY_ALWAYS_INLINE iterator
|
|
436
|
+
eraseInto(const_iterator pos, BeforeDestroy&& beforeDestroy) {
|
|
437
|
+
auto itemPos = table_.unwrapIter(pos);
|
|
438
|
+
table_.eraseIterInto(itemPos, beforeDestroy);
|
|
439
|
+
|
|
440
|
+
// If we are inlined then gcc and clang can optimize away all of the
|
|
441
|
+
// work of ++pos if the caller discards it.
|
|
442
|
+
itemPos.advanceLikelyDead();
|
|
443
|
+
return table_.makeIter(itemPos);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/// Callback-erase a range of values.
|
|
447
|
+
template <typename BeforeDestroy>
|
|
448
|
+
iterator eraseInto(
|
|
449
|
+
const_iterator first,
|
|
450
|
+
const_iterator last,
|
|
451
|
+
BeforeDestroy&& beforeDestroy) {
|
|
452
|
+
while (first != last) {
|
|
453
|
+
first = eraseInto(first, beforeDestroy);
|
|
454
|
+
}
|
|
455
|
+
return first;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/// Callback-erase a specific key.
|
|
459
|
+
template <typename BeforeDestroy>
|
|
460
|
+
size_type eraseInto(key_type const& key, BeforeDestroy&& beforeDestroy) {
|
|
461
|
+
return table_.eraseKeyInto(key, beforeDestroy);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/// Callback-erase a specific key, using a heterogeneous representation.
|
|
465
|
+
template <typename K, typename BeforeDestroy>
|
|
466
|
+
EnableHeterogeneousErase<K, size_type> eraseInto(
|
|
467
|
+
K const& key, BeforeDestroy&& beforeDestroy) {
|
|
468
|
+
return table_.eraseKeyInto(key, beforeDestroy);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
//// PUBLIC - Lookup
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Number of elements matching the given key.
|
|
475
|
+
* @methodset Lookup
|
|
476
|
+
*/
|
|
477
|
+
FOLLY_ALWAYS_INLINE size_type count(key_type const& key) const {
|
|
478
|
+
return contains(key) ? 1 : 0;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
template <typename K>
|
|
482
|
+
FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, size_type> count(
|
|
483
|
+
K const& key) const {
|
|
484
|
+
return contains(key) ? 1 : 0;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* @overloadbrief Prehash a key.
|
|
489
|
+
* @methodset Lookup
|
|
490
|
+
*
|
|
491
|
+
* prehash(key) does the work of evaluating hash_function()(key)
|
|
492
|
+
* (including additional bit-mixing for non-avalanching hash functions),
|
|
493
|
+
* and wraps the result of that work in a token for later reuse.
|
|
494
|
+
*
|
|
495
|
+
* The returned token may be used at any time, may be used more than
|
|
496
|
+
* once, and may be used in other F14 sets and maps. Tokens are
|
|
497
|
+
* transferrable between any F14 containers (maps and sets) with the
|
|
498
|
+
* same key_type and equal hash_function()s.
|
|
499
|
+
*
|
|
500
|
+
* Hash tokens are not hints -- it is a bug to call any method on this
|
|
501
|
+
* class with a token t and key k where t isn't the result of a call
|
|
502
|
+
* to prehash(k2) with k2 == k.
|
|
503
|
+
*/
|
|
504
|
+
F14HashToken prehash(key_type const& key) const {
|
|
505
|
+
return table_.prehash(key);
|
|
506
|
+
}
|
|
507
|
+
/// @copydoc prehash
|
|
508
|
+
F14HashToken prehash(key_type const& key, std::size_t hash) const {
|
|
509
|
+
return table_.prehash(key, hash);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/// @copydoc prehash
|
|
513
|
+
template <typename K>
|
|
514
|
+
EnableHeterogeneousFind<K, F14HashToken> prehash(K const& key) const {
|
|
515
|
+
return table_.prehash(key);
|
|
516
|
+
}
|
|
517
|
+
/// @copydoc prehash
|
|
518
|
+
template <typename K>
|
|
519
|
+
EnableHeterogeneousFind<K, F14HashToken> prehash(
|
|
520
|
+
K const& key, std::size_t hash) const {
|
|
521
|
+
return table_.prehash(key, hash);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* @overloadbrief Prefetch cachelines associated with a key.
|
|
526
|
+
* @methodset Lookup
|
|
527
|
+
*
|
|
528
|
+
* prefetch(token) begins prefetching the first steps of looking for key into
|
|
529
|
+
* the local CPU cache.
|
|
530
|
+
*
|
|
531
|
+
* Example Scenario: Loading 2 values from a cold map.
|
|
532
|
+
* You have a map that is cold, meaning it is out of the local CPU cache,
|
|
533
|
+
* and you want to load two values from the map. This can be extended to
|
|
534
|
+
* load N values, but we're loading 2 for simplicity.
|
|
535
|
+
*
|
|
536
|
+
* When the map is cold the dominating factor in the latency is loading the
|
|
537
|
+
* cache line of the entry into the local CPU cache. Using prehash() will
|
|
538
|
+
* issue these cache line fetches in parallel. That means that by the time we
|
|
539
|
+
* finish map.find(token1, key1) the cache lines needed by map.find(token2,
|
|
540
|
+
* key2) may already be in the local CPU cache. In the best case this will
|
|
541
|
+
* half the latency.
|
|
542
|
+
*
|
|
543
|
+
* It is always okay to call prefetch() before a find() or other lookup
|
|
544
|
+
* operation, as it only prefetches cache lines that are guaranteed to be
|
|
545
|
+
* needed by the lookup.
|
|
546
|
+
*
|
|
547
|
+
* std::pair<iterator, iterator> find2(
|
|
548
|
+
* auto& set, key_type const& key1, key_type const& key2) {
|
|
549
|
+
* auto const token1 = set.prehash(key1);
|
|
550
|
+
* set.prefetch(token1);
|
|
551
|
+
* auto const token2 = set.prehash(key2);
|
|
552
|
+
* set.prefetch(token2);
|
|
553
|
+
* return std::make_pair(set.find(token1, key1), set.find(token2, key2));
|
|
554
|
+
* }
|
|
555
|
+
*/
|
|
556
|
+
void prefetch(F14HashToken const& token) const { table_.prefetch(token); }
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* @overloadbrief Get the iterator for a key.
|
|
560
|
+
* @methodset Lookup
|
|
561
|
+
*/
|
|
562
|
+
FOLLY_ALWAYS_INLINE iterator find(key_type const& key) {
|
|
563
|
+
return const_cast<F14BasicSet const*>(this)->find(key);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
FOLLY_ALWAYS_INLINE const_iterator find(key_type const& key) const {
|
|
567
|
+
return table_.makeIter(table_.find(key));
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
FOLLY_ALWAYS_INLINE iterator
|
|
571
|
+
find(F14HashToken const& token, key_type const& key) {
|
|
572
|
+
return const_cast<F14BasicSet const*>(this)->find(token, key);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
FOLLY_ALWAYS_INLINE iterator
|
|
576
|
+
find(const F14HashedKey<key_type, hasher>& hashedKey) {
|
|
577
|
+
return const_cast<F14BasicSet const*>(this)->find(
|
|
578
|
+
hashedKey.getHashToken(), hashedKey.getKey());
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
FOLLY_ALWAYS_INLINE const_iterator
|
|
582
|
+
find(F14HashToken const& token, key_type const& key) const {
|
|
583
|
+
return table_.makeIter(table_.find(token, key));
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
FOLLY_ALWAYS_INLINE const_iterator
|
|
587
|
+
find(const F14HashedKey<key_type, hasher>& hashedKey) const {
|
|
588
|
+
return table_.makeIter(
|
|
589
|
+
table_.find(hashedKey.getHashToken(), hashedKey.getKey()));
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
template <typename K>
|
|
593
|
+
FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, iterator> find(K const& key) {
|
|
594
|
+
return const_cast<F14BasicSet const*>(this)->find(key);
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
template <typename K>
|
|
598
|
+
FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, const_iterator> find(
|
|
599
|
+
K const& key) const {
|
|
600
|
+
return table_.makeIter(table_.find(key));
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
template <typename K>
|
|
604
|
+
FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, iterator> find(
|
|
605
|
+
F14HashToken const& token, K const& key) {
|
|
606
|
+
return const_cast<F14BasicSet const*>(this)->find(token, key);
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
template <typename K>
|
|
610
|
+
FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, const_iterator> find(
|
|
611
|
+
F14HashToken const& token, K const& key) const {
|
|
612
|
+
return table_.makeIter(table_.find(token, key));
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/**
|
|
616
|
+
* @overloadbrief Checks if the container contains an element with the
|
|
617
|
+
* specific key.
|
|
618
|
+
* @methodset Lookup
|
|
619
|
+
*/
|
|
620
|
+
FOLLY_ALWAYS_INLINE bool contains(key_type const& key) const {
|
|
621
|
+
return !table_.find(key).atEnd();
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
template <typename K>
|
|
625
|
+
FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, bool> contains(
|
|
626
|
+
K const& key) const {
|
|
627
|
+
return !table_.find(key).atEnd();
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
FOLLY_ALWAYS_INLINE bool contains(
|
|
631
|
+
F14HashToken const& token, key_type const& key) const {
|
|
632
|
+
return !table_.find(token, key).atEnd();
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
FOLLY_ALWAYS_INLINE bool contains(
|
|
636
|
+
const F14HashedKey<key_type, hasher>& hashedKey) const {
|
|
637
|
+
return !table_.find(hashedKey.getHashToken(), hashedKey.getKey()).atEnd();
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
template <typename K>
|
|
641
|
+
FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, bool> contains(
|
|
642
|
+
F14HashToken const& token, K const& key) const {
|
|
643
|
+
return !table_.find(token, key).atEnd();
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
/**
|
|
647
|
+
* @overloadbrief Returns the range of elements matching a specific key.
|
|
648
|
+
* @methodset Lookup
|
|
649
|
+
*/
|
|
650
|
+
std::pair<iterator, iterator> equal_range(key_type const& key) {
|
|
651
|
+
return equal_range(*this, key);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
std::pair<const_iterator, const_iterator> equal_range(
|
|
655
|
+
key_type const& key) const {
|
|
656
|
+
return equal_range(*this, key);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
template <typename K>
|
|
660
|
+
EnableHeterogeneousFind<K, std::pair<iterator, iterator>> equal_range(
|
|
661
|
+
K const& key) {
|
|
662
|
+
return equal_range(*this, key);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
template <typename K>
|
|
666
|
+
EnableHeterogeneousFind<K, std::pair<const_iterator, const_iterator>>
|
|
667
|
+
equal_range(K const& key) const {
|
|
668
|
+
return equal_range(*this, key);
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
//// PUBLIC - Bucket interface
|
|
672
|
+
|
|
673
|
+
/**
|
|
674
|
+
* The number of buckets in this container.
|
|
675
|
+
* @methodset Bucket interface
|
|
676
|
+
*/
|
|
677
|
+
std::size_t bucket_count() const noexcept { return table_.bucket_count(); }
|
|
678
|
+
|
|
679
|
+
/**
|
|
680
|
+
* The maximum number of buckets for this container.
|
|
681
|
+
* @methodset Bucket interface
|
|
682
|
+
*/
|
|
683
|
+
std::size_t max_bucket_count() const noexcept {
|
|
684
|
+
return table_.max_bucket_count();
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
//// PUBLIC - Hash policy
|
|
688
|
+
|
|
689
|
+
/**
|
|
690
|
+
* Load factor of the underlying hashtable.
|
|
691
|
+
* @methodset Hash policy
|
|
692
|
+
*/
|
|
693
|
+
float load_factor() const noexcept { return table_.load_factor(); }
|
|
694
|
+
|
|
695
|
+
/**
|
|
696
|
+
* @overloadbrief Load factor control.
|
|
697
|
+
* Get the maximum load factor for this container.
|
|
698
|
+
* @methodset Hash policy
|
|
699
|
+
*/
|
|
700
|
+
float max_load_factor() const noexcept { return table_.max_load_factor(); }
|
|
701
|
+
|
|
702
|
+
/**
|
|
703
|
+
* Set the maximum load factor for this container.
|
|
704
|
+
* @methodset Hash policy
|
|
705
|
+
*/
|
|
706
|
+
void max_load_factor(float v) { table_.max_load_factor(v); }
|
|
707
|
+
|
|
708
|
+
/**
|
|
709
|
+
* Rehash this container.
|
|
710
|
+
*
|
|
711
|
+
* This function is provided for compliance with C++'s requirements for
|
|
712
|
+
* hashtables, but is no better than a simple `reserve` call for F14.
|
|
713
|
+
*
|
|
714
|
+
* @param bucketCapcity The desired capacity across all buckets.
|
|
715
|
+
*
|
|
716
|
+
* @methodset Hash policy
|
|
717
|
+
*/
|
|
718
|
+
void rehash(std::size_t bucketCapacity) {
|
|
719
|
+
// The standard's rehash() requires understanding the max load factor,
|
|
720
|
+
// which is easy to get wrong. Since we don't actually allow adjustment
|
|
721
|
+
// of max_load_factor there is no difference.
|
|
722
|
+
reserve(bucketCapacity);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/**
|
|
726
|
+
* Pre-allocate space for at least this many elements.
|
|
727
|
+
*
|
|
728
|
+
* @param capacity The number of elements to pre-allocate space for.
|
|
729
|
+
*
|
|
730
|
+
* @methodset Capacity
|
|
731
|
+
*/
|
|
732
|
+
void reserve(std::size_t capacity) { table_.reserve(capacity); }
|
|
733
|
+
|
|
734
|
+
//// PUBLIC - Observers
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* Get the hasher.
|
|
738
|
+
* @methodset Observers
|
|
739
|
+
*/
|
|
740
|
+
hasher hash_function() const { return table_.hasher(); }
|
|
741
|
+
|
|
742
|
+
/**
|
|
743
|
+
* Get the key_equal.
|
|
744
|
+
* @methodset Observers
|
|
745
|
+
*/
|
|
746
|
+
key_equal key_eq() const { return table_.keyEqual(); }
|
|
747
|
+
|
|
748
|
+
//// PUBLIC - F14 Extensions
|
|
749
|
+
|
|
750
|
+
/**
|
|
751
|
+
* Checks for a value using operator==
|
|
752
|
+
*
|
|
753
|
+
* returns true iff there is an element in the set
|
|
754
|
+
* that compares equal to key using operator==. It is undefined
|
|
755
|
+
* behavior to call this function if operator== on key_type can ever
|
|
756
|
+
* return true when the same keys passed to key_eq() would return false
|
|
757
|
+
* (the opposite is allowed). When using the default key_eq this function
|
|
758
|
+
* is equivalent to contains().
|
|
759
|
+
*
|
|
760
|
+
* @methodset Lookup
|
|
761
|
+
*/
|
|
762
|
+
bool containsEqualValue(value_type const& value) const {
|
|
763
|
+
return !table_.findMatching(value, [&](auto& k) { return value == k; })
|
|
764
|
+
.atEnd();
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/**
|
|
768
|
+
* Get memory footprint, not including sizeof(*this).
|
|
769
|
+
* @methodset Capacity
|
|
770
|
+
*/
|
|
771
|
+
std::size_t getAllocatedMemorySize() const {
|
|
772
|
+
return table_.getAllocatedMemorySize();
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
/**
|
|
776
|
+
* In-depth memory analysis.
|
|
777
|
+
*
|
|
778
|
+
* Enumerates classes of allocated memory blocks currently owned
|
|
779
|
+
* by this table, calling visitor(allocationSize, allocationCount).
|
|
780
|
+
* This can be used to get a more accurate indication of memory footprint
|
|
781
|
+
* than getAllocatedMemorySize() if you have some way of computing the
|
|
782
|
+
* internal fragmentation of the allocator, such as JEMalloc's nallocx.
|
|
783
|
+
* The visitor might be called twice with the same allocationSize. The
|
|
784
|
+
* visitor's computation should produce the same result for visitor(8,
|
|
785
|
+
* 2) as for two calls to visitor(8, 1), for example. The visitor may
|
|
786
|
+
* be called with a zero allocationCount.
|
|
787
|
+
*
|
|
788
|
+
* @methodset Capacity
|
|
789
|
+
*/
|
|
790
|
+
template <typename V>
|
|
791
|
+
void visitAllocationClasses(V&& visitor) const {
|
|
792
|
+
return table_.visitAllocationClasses(visitor);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/**
|
|
796
|
+
* Visit contiguous ranges of elements.
|
|
797
|
+
*
|
|
798
|
+
* Calls visitor with two value_type const*, b and e, such that every
|
|
799
|
+
* entry in the table is included in exactly one of the ranges [b,e).
|
|
800
|
+
* This can be used to efficiently iterate elements in bulk when crossing
|
|
801
|
+
* an API boundary that supports contiguous blocks of items.
|
|
802
|
+
*
|
|
803
|
+
* @methodset Iterators
|
|
804
|
+
*/
|
|
805
|
+
template <typename V>
|
|
806
|
+
void visitContiguousRanges(V&& visitor) const;
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
* Get stats.
|
|
810
|
+
* @methodset Hash policy
|
|
811
|
+
*/
|
|
812
|
+
F14TableStats computeStats() const noexcept { return table_.computeStats(); }
|
|
813
|
+
|
|
814
|
+
private:
|
|
815
|
+
template <typename Self, typename K>
|
|
816
|
+
static auto equal_range(Self& self, K const& key) {
|
|
817
|
+
auto first = self.find(key);
|
|
818
|
+
auto last = first;
|
|
819
|
+
if (last != self.end()) {
|
|
820
|
+
++last;
|
|
821
|
+
}
|
|
822
|
+
return std::make_pair(first, last);
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
protected:
|
|
826
|
+
F14Table<Policy> table_;
|
|
827
|
+
};
|
|
828
|
+
} // namespace detail
|
|
829
|
+
} // namespace f14
|
|
830
|
+
|
|
831
|
+
template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
|
|
832
|
+
class F14ValueSet
|
|
833
|
+
: public f14::detail::F14BasicSet<f14::detail::SetPolicyWithDefaults<
|
|
834
|
+
f14::detail::ValueContainerPolicy,
|
|
835
|
+
Key,
|
|
836
|
+
Hasher,
|
|
837
|
+
KeyEqual,
|
|
838
|
+
Alloc>> {
|
|
839
|
+
protected:
|
|
840
|
+
friend struct F14ValueSetTester;
|
|
841
|
+
using Policy = f14::detail::SetPolicyWithDefaults<
|
|
842
|
+
f14::detail::ValueContainerPolicy,
|
|
843
|
+
Key,
|
|
844
|
+
Hasher,
|
|
845
|
+
KeyEqual,
|
|
846
|
+
Alloc>;
|
|
847
|
+
|
|
848
|
+
private:
|
|
849
|
+
using Super = f14::detail::F14BasicSet<Policy>;
|
|
850
|
+
|
|
851
|
+
public:
|
|
852
|
+
using typename Super::value_type;
|
|
853
|
+
|
|
854
|
+
F14ValueSet() = default;
|
|
855
|
+
|
|
856
|
+
using Super::Super;
|
|
857
|
+
|
|
858
|
+
F14ValueSet& operator=(std::initializer_list<value_type> ilist) {
|
|
859
|
+
Super::operator=(ilist);
|
|
860
|
+
return *this;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
void swap(F14ValueSet& rhs) noexcept(Policy::kSwapIsNoexcept) {
|
|
864
|
+
this->table_.swap(rhs.table_);
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
template <typename V>
|
|
868
|
+
void visitContiguousRanges(V&& visitor) const {
|
|
869
|
+
this->table_.visitContiguousItemRanges(std::forward<V>(visitor));
|
|
870
|
+
}
|
|
871
|
+
};
|
|
872
|
+
#endif // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
|
|
873
|
+
|
|
874
|
+
template <
|
|
875
|
+
typename InputIt,
|
|
876
|
+
typename Hasher = f14::DefaultHasher<iterator_value_type_t<InputIt>>,
|
|
877
|
+
typename KeyEqual = f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
878
|
+
typename Alloc = f14::DefaultAlloc<iterator_value_type_t<InputIt>>,
|
|
879
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
880
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
881
|
+
typename = detail::RequireNotAllocator<KeyEqual>,
|
|
882
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
883
|
+
F14ValueSet(
|
|
884
|
+
InputIt, InputIt, std::size_t = {}, Hasher = {}, KeyEqual = {}, Alloc = {})
|
|
885
|
+
-> F14ValueSet<iterator_value_type_t<InputIt>, Hasher, KeyEqual, Alloc>;
|
|
886
|
+
|
|
887
|
+
template <
|
|
888
|
+
typename InputIt,
|
|
889
|
+
typename Alloc,
|
|
890
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
891
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
892
|
+
F14ValueSet(InputIt, InputIt, std::size_t, Alloc)
|
|
893
|
+
-> F14ValueSet<
|
|
894
|
+
iterator_value_type_t<InputIt>,
|
|
895
|
+
f14::DefaultHasher<iterator_value_type_t<InputIt>>,
|
|
896
|
+
f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
897
|
+
Alloc>;
|
|
898
|
+
|
|
899
|
+
template <
|
|
900
|
+
typename InputIt,
|
|
901
|
+
typename Hasher,
|
|
902
|
+
typename Alloc,
|
|
903
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
904
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
905
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
906
|
+
F14ValueSet(InputIt, InputIt, std::size_t, Hasher, Alloc)
|
|
907
|
+
-> F14ValueSet<
|
|
908
|
+
iterator_value_type_t<InputIt>,
|
|
909
|
+
Hasher,
|
|
910
|
+
f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
911
|
+
Alloc>;
|
|
912
|
+
|
|
913
|
+
template <
|
|
914
|
+
typename Key,
|
|
915
|
+
typename Hasher = f14::DefaultHasher<Key>,
|
|
916
|
+
typename KeyEqual = f14::DefaultKeyEqual<Key>,
|
|
917
|
+
typename Alloc = f14::DefaultAlloc<Key>,
|
|
918
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
919
|
+
typename = detail::RequireNotAllocator<KeyEqual>,
|
|
920
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
921
|
+
F14ValueSet(
|
|
922
|
+
std::initializer_list<Key>,
|
|
923
|
+
std::size_t = {},
|
|
924
|
+
Hasher = {},
|
|
925
|
+
KeyEqual = {},
|
|
926
|
+
Alloc = {}) -> F14ValueSet<Key, Hasher, KeyEqual, Alloc>;
|
|
927
|
+
|
|
928
|
+
template <
|
|
929
|
+
typename Key,
|
|
930
|
+
typename Alloc,
|
|
931
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
932
|
+
F14ValueSet(std::initializer_list<Key>, std::size_t, Alloc)
|
|
933
|
+
-> F14ValueSet<
|
|
934
|
+
Key,
|
|
935
|
+
f14::DefaultHasher<Key>,
|
|
936
|
+
f14::DefaultKeyEqual<Key>,
|
|
937
|
+
Alloc>;
|
|
938
|
+
|
|
939
|
+
template <
|
|
940
|
+
typename Key,
|
|
941
|
+
typename Hasher,
|
|
942
|
+
typename Alloc,
|
|
943
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
944
|
+
F14ValueSet(std::initializer_list<Key>, std::size_t, Hasher, Alloc)
|
|
945
|
+
-> F14ValueSet<Key, Hasher, f14::DefaultKeyEqual<Key>, Alloc>;
|
|
946
|
+
|
|
947
|
+
#if FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
|
|
948
|
+
template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
|
|
949
|
+
class F14NodeSet
|
|
950
|
+
: public f14::detail::F14BasicSet<f14::detail::SetPolicyWithDefaults<
|
|
951
|
+
f14::detail::NodeContainerPolicy,
|
|
952
|
+
Key,
|
|
953
|
+
Hasher,
|
|
954
|
+
KeyEqual,
|
|
955
|
+
Alloc>> {
|
|
956
|
+
protected:
|
|
957
|
+
using Policy = f14::detail::SetPolicyWithDefaults<
|
|
958
|
+
f14::detail::NodeContainerPolicy,
|
|
959
|
+
Key,
|
|
960
|
+
Hasher,
|
|
961
|
+
KeyEqual,
|
|
962
|
+
Alloc>;
|
|
963
|
+
|
|
964
|
+
private:
|
|
965
|
+
using Super = f14::detail::F14BasicSet<Policy>;
|
|
966
|
+
|
|
967
|
+
public:
|
|
968
|
+
using typename Super::value_type;
|
|
969
|
+
|
|
970
|
+
F14NodeSet() = default;
|
|
971
|
+
|
|
972
|
+
using Super::Super;
|
|
973
|
+
|
|
974
|
+
F14NodeSet& operator=(std::initializer_list<value_type> ilist) {
|
|
975
|
+
Super::operator=(ilist);
|
|
976
|
+
return *this;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
void swap(F14NodeSet& rhs) noexcept(Policy::kSwapIsNoexcept) {
|
|
980
|
+
this->table_.swap(rhs.table_);
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
template <typename V>
|
|
984
|
+
void visitContiguousRanges(V&& visitor) const {
|
|
985
|
+
this->table_.visitItems([&](typename Policy::Item ptr) {
|
|
986
|
+
value_type const* b = std::addressof(*ptr);
|
|
987
|
+
visitor(b, b + 1);
|
|
988
|
+
});
|
|
989
|
+
}
|
|
990
|
+
};
|
|
991
|
+
#endif // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
|
|
992
|
+
|
|
993
|
+
template <
|
|
994
|
+
typename InputIt,
|
|
995
|
+
typename Hasher = f14::DefaultHasher<iterator_value_type_t<InputIt>>,
|
|
996
|
+
typename KeyEqual = f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
997
|
+
typename Alloc = f14::DefaultAlloc<iterator_value_type_t<InputIt>>,
|
|
998
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
999
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
1000
|
+
typename = detail::RequireNotAllocator<KeyEqual>,
|
|
1001
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1002
|
+
F14NodeSet(
|
|
1003
|
+
InputIt, InputIt, std::size_t = {}, Hasher = {}, KeyEqual = {}, Alloc = {})
|
|
1004
|
+
-> F14NodeSet<iterator_value_type_t<InputIt>, Hasher, KeyEqual, Alloc>;
|
|
1005
|
+
|
|
1006
|
+
template <
|
|
1007
|
+
typename InputIt,
|
|
1008
|
+
typename Alloc,
|
|
1009
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
1010
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1011
|
+
F14NodeSet(InputIt, InputIt, std::size_t, Alloc)
|
|
1012
|
+
-> F14NodeSet<
|
|
1013
|
+
iterator_value_type_t<InputIt>,
|
|
1014
|
+
f14::DefaultHasher<iterator_value_type_t<InputIt>>,
|
|
1015
|
+
f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
1016
|
+
Alloc>;
|
|
1017
|
+
|
|
1018
|
+
template <
|
|
1019
|
+
typename InputIt,
|
|
1020
|
+
typename Hasher,
|
|
1021
|
+
typename Alloc,
|
|
1022
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
1023
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
1024
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1025
|
+
F14NodeSet(InputIt, InputIt, std::size_t, Hasher, Alloc)
|
|
1026
|
+
-> F14NodeSet<
|
|
1027
|
+
iterator_value_type_t<InputIt>,
|
|
1028
|
+
Hasher,
|
|
1029
|
+
f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
1030
|
+
Alloc>;
|
|
1031
|
+
|
|
1032
|
+
template <
|
|
1033
|
+
typename Key,
|
|
1034
|
+
typename Hasher = f14::DefaultHasher<Key>,
|
|
1035
|
+
typename KeyEqual = f14::DefaultKeyEqual<Key>,
|
|
1036
|
+
typename Alloc = f14::DefaultAlloc<Key>,
|
|
1037
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
1038
|
+
typename = detail::RequireNotAllocator<KeyEqual>,
|
|
1039
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1040
|
+
F14NodeSet(
|
|
1041
|
+
std::initializer_list<Key>,
|
|
1042
|
+
std::size_t = {},
|
|
1043
|
+
Hasher = {},
|
|
1044
|
+
KeyEqual = {},
|
|
1045
|
+
Alloc = {}) -> F14NodeSet<Key, Hasher, KeyEqual, Alloc>;
|
|
1046
|
+
|
|
1047
|
+
template <
|
|
1048
|
+
typename Key,
|
|
1049
|
+
typename Alloc,
|
|
1050
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1051
|
+
F14NodeSet(std::initializer_list<Key>, std::size_t, Alloc)
|
|
1052
|
+
-> F14NodeSet<
|
|
1053
|
+
Key,
|
|
1054
|
+
f14::DefaultHasher<Key>,
|
|
1055
|
+
f14::DefaultKeyEqual<Key>,
|
|
1056
|
+
Alloc>;
|
|
1057
|
+
|
|
1058
|
+
template <
|
|
1059
|
+
typename Key,
|
|
1060
|
+
typename Hasher,
|
|
1061
|
+
typename Alloc,
|
|
1062
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1063
|
+
F14NodeSet(std::initializer_list<Key>, std::size_t, Hasher, Alloc)
|
|
1064
|
+
-> F14NodeSet<Key, Hasher, f14::DefaultKeyEqual<Key>, Alloc>;
|
|
1065
|
+
|
|
1066
|
+
#if FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
|
|
1067
|
+
namespace f14 {
|
|
1068
|
+
namespace detail {
|
|
1069
|
+
template <
|
|
1070
|
+
typename Key,
|
|
1071
|
+
typename Hasher,
|
|
1072
|
+
typename KeyEqual,
|
|
1073
|
+
typename Alloc,
|
|
1074
|
+
typename EligibleForPerturbedInsertionOrder>
|
|
1075
|
+
class F14VectorSetImpl : public F14BasicSet<SetPolicyWithDefaults<
|
|
1076
|
+
VectorContainerPolicy,
|
|
1077
|
+
Key,
|
|
1078
|
+
Hasher,
|
|
1079
|
+
KeyEqual,
|
|
1080
|
+
Alloc,
|
|
1081
|
+
EligibleForPerturbedInsertionOrder>> {
|
|
1082
|
+
protected:
|
|
1083
|
+
using Policy = SetPolicyWithDefaults<
|
|
1084
|
+
VectorContainerPolicy,
|
|
1085
|
+
Key,
|
|
1086
|
+
Hasher,
|
|
1087
|
+
KeyEqual,
|
|
1088
|
+
Alloc,
|
|
1089
|
+
EligibleForPerturbedInsertionOrder>;
|
|
1090
|
+
|
|
1091
|
+
private:
|
|
1092
|
+
using Super = F14BasicSet<Policy>;
|
|
1093
|
+
|
|
1094
|
+
template <typename K>
|
|
1095
|
+
using IsIter = Disjunction<
|
|
1096
|
+
std::is_same<typename Policy::Iter, remove_cvref_t<K>>,
|
|
1097
|
+
std::is_same<typename Policy::ReverseIter, remove_cvref_t<K>>>;
|
|
1098
|
+
|
|
1099
|
+
template <typename K, typename T>
|
|
1100
|
+
using EnableHeterogeneousVectorErase = std::enable_if_t<
|
|
1101
|
+
::folly::detail::EligibleForHeterogeneousFind<
|
|
1102
|
+
typename Policy::Value,
|
|
1103
|
+
typename Policy::Hasher,
|
|
1104
|
+
typename Policy::KeyEqual,
|
|
1105
|
+
std::conditional_t<IsIter<K>::value, typename Policy::Value, K>>::
|
|
1106
|
+
value &&
|
|
1107
|
+
!IsIter<K>::value,
|
|
1108
|
+
T>;
|
|
1109
|
+
|
|
1110
|
+
public:
|
|
1111
|
+
using typename Super::const_iterator;
|
|
1112
|
+
using typename Super::iterator;
|
|
1113
|
+
using typename Super::key_type;
|
|
1114
|
+
using typename Super::value_type;
|
|
1115
|
+
|
|
1116
|
+
F14VectorSetImpl() = default;
|
|
1117
|
+
|
|
1118
|
+
using Super::Super;
|
|
1119
|
+
|
|
1120
|
+
F14VectorSetImpl& operator=(std::initializer_list<value_type> ilist) {
|
|
1121
|
+
Super::operator=(ilist);
|
|
1122
|
+
return *this;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
iterator begin() { return cbegin(); }
|
|
1126
|
+
const_iterator begin() const { return cbegin(); }
|
|
1127
|
+
const_iterator cbegin() const {
|
|
1128
|
+
return this->table_.linearBegin(this->size());
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
iterator end() { return cend(); }
|
|
1132
|
+
const_iterator end() const { return cend(); }
|
|
1133
|
+
const_iterator cend() const { return this->table_.linearEnd(); }
|
|
1134
|
+
|
|
1135
|
+
private:
|
|
1136
|
+
template <typename BeforeDestroy>
|
|
1137
|
+
void eraseUnderlying(
|
|
1138
|
+
typename Policy::ItemIter underlying, BeforeDestroy&& beforeDestroy) {
|
|
1139
|
+
Alloc& a = this->table_.alloc();
|
|
1140
|
+
auto values = this->table_.values_;
|
|
1141
|
+
|
|
1142
|
+
// destroy the value and remove the ptr from the base table
|
|
1143
|
+
auto index = underlying.item();
|
|
1144
|
+
this->table_.eraseIterInto(underlying, beforeDestroy);
|
|
1145
|
+
Policy::AllocTraits::destroy(a, std::addressof(values[index]));
|
|
1146
|
+
|
|
1147
|
+
// move the last element in values_ down and fix up the inbound index
|
|
1148
|
+
auto tailIndex = this->size();
|
|
1149
|
+
if (tailIndex != index) {
|
|
1150
|
+
auto tail = this->table_.find(
|
|
1151
|
+
VectorContainerIndexSearch{static_cast<uint32_t>(tailIndex)});
|
|
1152
|
+
tail.item() = index;
|
|
1153
|
+
auto p = std::addressof(values[index]);
|
|
1154
|
+
assume(p != nullptr);
|
|
1155
|
+
this->table_.transfer(a, std::addressof(values[tailIndex]), p, 1);
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
template <typename K, typename BeforeDestroy>
|
|
1160
|
+
std::size_t eraseUnderlyingKey(K const& key, BeforeDestroy&& beforeDestroy) {
|
|
1161
|
+
auto underlying = this->table_.find(key);
|
|
1162
|
+
if (underlying.atEnd()) {
|
|
1163
|
+
return 0;
|
|
1164
|
+
} else {
|
|
1165
|
+
eraseUnderlying(underlying, beforeDestroy);
|
|
1166
|
+
return 1;
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
public:
|
|
1171
|
+
FOLLY_ALWAYS_INLINE iterator erase(const_iterator pos) {
|
|
1172
|
+
return eraseInto(pos, variadic_noop);
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
iterator erase(const_iterator first, const_iterator last) {
|
|
1176
|
+
return eraseInto(first, last, variadic_noop);
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
std::size_t erase(key_type const& key) {
|
|
1180
|
+
return eraseInto(key, variadic_noop);
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
template <typename K>
|
|
1184
|
+
EnableHeterogeneousVectorErase<K, std::size_t> erase(K const& key) {
|
|
1185
|
+
return eraseInto(key, variadic_noop);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
template <typename BeforeDestroy>
|
|
1189
|
+
FOLLY_ALWAYS_INLINE iterator
|
|
1190
|
+
eraseInto(const_iterator pos, BeforeDestroy&& beforeDestroy) {
|
|
1191
|
+
auto underlying = this->table_.find(
|
|
1192
|
+
VectorContainerIndexSearch{this->table_.iterToIndex(pos)});
|
|
1193
|
+
eraseUnderlying(underlying, beforeDestroy);
|
|
1194
|
+
return ++pos;
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
template <typename BeforeDestroy>
|
|
1198
|
+
iterator eraseInto(
|
|
1199
|
+
const_iterator first,
|
|
1200
|
+
const_iterator last,
|
|
1201
|
+
BeforeDestroy&& beforeDestroy) {
|
|
1202
|
+
while (first != last) {
|
|
1203
|
+
first = eraseInto(first, beforeDestroy);
|
|
1204
|
+
}
|
|
1205
|
+
return first;
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
template <typename BeforeDestroy>
|
|
1209
|
+
std::size_t eraseInto(key_type const& key, BeforeDestroy&& beforeDestroy) {
|
|
1210
|
+
return eraseUnderlyingKey(key, beforeDestroy);
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
template <typename K, typename BeforeDestroy>
|
|
1214
|
+
EnableHeterogeneousVectorErase<K, std::size_t> eraseInto(
|
|
1215
|
+
K const& key, BeforeDestroy&& beforeDestroy) {
|
|
1216
|
+
return eraseUnderlyingKey(key, beforeDestroy);
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
template <typename V>
|
|
1220
|
+
void visitContiguousRanges(V&& visitor) const {
|
|
1221
|
+
auto n = this->table_.size();
|
|
1222
|
+
if (n > 0) {
|
|
1223
|
+
value_type const* b = std::addressof(this->table_.values_[0]);
|
|
1224
|
+
visitor(b, b + n);
|
|
1225
|
+
}
|
|
1226
|
+
}
|
|
1227
|
+
};
|
|
1228
|
+
} // namespace detail
|
|
1229
|
+
} // namespace f14
|
|
1230
|
+
|
|
1231
|
+
template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
|
|
1232
|
+
class F14VectorSet
|
|
1233
|
+
: public f14::detail::
|
|
1234
|
+
F14VectorSetImpl<Key, Hasher, KeyEqual, Alloc, std::false_type> {
|
|
1235
|
+
using Super = f14::detail::
|
|
1236
|
+
F14VectorSetImpl<Key, Hasher, KeyEqual, Alloc, std::false_type>;
|
|
1237
|
+
|
|
1238
|
+
public:
|
|
1239
|
+
using typename Super::const_iterator;
|
|
1240
|
+
using typename Super::iterator;
|
|
1241
|
+
using typename Super::value_type;
|
|
1242
|
+
using reverse_iterator = typename Super::Policy::ReverseIter;
|
|
1243
|
+
using const_reverse_iterator = reverse_iterator;
|
|
1244
|
+
|
|
1245
|
+
F14VectorSet() = default;
|
|
1246
|
+
|
|
1247
|
+
using Super::Super;
|
|
1248
|
+
|
|
1249
|
+
F14VectorSet& operator=(std::initializer_list<value_type> ilist) {
|
|
1250
|
+
Super::operator=(ilist);
|
|
1251
|
+
return *this;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
void swap(F14VectorSet& rhs) noexcept(Super::Policy::kSwapIsNoexcept) {
|
|
1255
|
+
this->table_.swap(rhs.table_);
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
// ITERATION ORDER
|
|
1259
|
+
//
|
|
1260
|
+
// Deterministic iteration order for insert-only workloads is part of
|
|
1261
|
+
// F14VectorSet's supported API: iterator is LIFO and reverse_iterator
|
|
1262
|
+
// is FIFO.
|
|
1263
|
+
//
|
|
1264
|
+
// If there have been no calls to erase() then iterator and
|
|
1265
|
+
// const_iterator enumerate entries in the opposite of insertion order.
|
|
1266
|
+
// begin()->first is the key most recently inserted. reverse_iterator
|
|
1267
|
+
// and reverse_const_iterator, therefore, enumerate in LIFO (insertion)
|
|
1268
|
+
// order for insert-only workloads. Deterministic iteration order is
|
|
1269
|
+
// only guaranteed if no keys were removed since the last time the
|
|
1270
|
+
// set was empty. Iteration order is preserved across rehashes and
|
|
1271
|
+
// F14VectorSet copies and moves.
|
|
1272
|
+
//
|
|
1273
|
+
// iterator uses LIFO order so that erasing while iterating with begin()
|
|
1274
|
+
// and end() is safe using the erase(it++) idiom, which is supported
|
|
1275
|
+
// by std::set and std::unordered_set. erase(iter) invalidates iter
|
|
1276
|
+
// and all iterators before iter in the non-reverse iteration order.
|
|
1277
|
+
// Every successful erase invalidates all reverse iterators.
|
|
1278
|
+
//
|
|
1279
|
+
// No erase is provided for reverse_iterator (AKA const_reverse_iterator)
|
|
1280
|
+
// to make it harder to shoot yourself in the foot by erasing while
|
|
1281
|
+
// reverse-iterating. You can write that as set.erase(set.iter(riter))
|
|
1282
|
+
// if you need it.
|
|
1283
|
+
|
|
1284
|
+
reverse_iterator rbegin() { return this->table_.values_; }
|
|
1285
|
+
const_reverse_iterator rbegin() const { return crbegin(); }
|
|
1286
|
+
const_reverse_iterator crbegin() const { return this->table_.values_; }
|
|
1287
|
+
|
|
1288
|
+
reverse_iterator rend() { return this->table_.values_ + this->table_.size(); }
|
|
1289
|
+
const_reverse_iterator rend() const { return crend(); }
|
|
1290
|
+
const_reverse_iterator crend() const {
|
|
1291
|
+
return this->table_.values_ + this->table_.size();
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
// explicit conversions between iterator and reverse_iterator
|
|
1295
|
+
iterator iter(reverse_iterator riter) { return this->table_.iter(riter); }
|
|
1296
|
+
const_iterator iter(const_reverse_iterator riter) const {
|
|
1297
|
+
return this->table_.iter(riter);
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
reverse_iterator riter(iterator it) { return this->table_.riter(it); }
|
|
1301
|
+
const_reverse_iterator riter(const_iterator it) const {
|
|
1302
|
+
return this->table_.riter(it);
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
friend Range<const_reverse_iterator> tag_invoke(
|
|
1306
|
+
order_preserving_reinsertion_view_fn, F14VectorSet const& c) noexcept {
|
|
1307
|
+
return {c.rbegin(), c.rend()};
|
|
1308
|
+
}
|
|
1309
|
+
};
|
|
1310
|
+
#endif // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
|
|
1311
|
+
|
|
1312
|
+
template <
|
|
1313
|
+
typename InputIt,
|
|
1314
|
+
typename Hasher = f14::DefaultHasher<iterator_value_type_t<InputIt>>,
|
|
1315
|
+
typename KeyEqual = f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
1316
|
+
typename Alloc = f14::DefaultAlloc<iterator_value_type_t<InputIt>>,
|
|
1317
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
1318
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
1319
|
+
typename = detail::RequireNotAllocator<KeyEqual>,
|
|
1320
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1321
|
+
F14VectorSet(
|
|
1322
|
+
InputIt, InputIt, std::size_t = {}, Hasher = {}, KeyEqual = {}, Alloc = {})
|
|
1323
|
+
-> F14VectorSet<iterator_value_type_t<InputIt>, Hasher, KeyEqual, Alloc>;
|
|
1324
|
+
|
|
1325
|
+
template <
|
|
1326
|
+
typename InputIt,
|
|
1327
|
+
typename Alloc,
|
|
1328
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
1329
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1330
|
+
F14VectorSet(InputIt, InputIt, std::size_t, Alloc)
|
|
1331
|
+
-> F14VectorSet<
|
|
1332
|
+
iterator_value_type_t<InputIt>,
|
|
1333
|
+
f14::DefaultHasher<iterator_value_type_t<InputIt>>,
|
|
1334
|
+
f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
1335
|
+
Alloc>;
|
|
1336
|
+
|
|
1337
|
+
template <
|
|
1338
|
+
typename InputIt,
|
|
1339
|
+
typename Hasher,
|
|
1340
|
+
typename Alloc,
|
|
1341
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
1342
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
1343
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1344
|
+
F14VectorSet(InputIt, InputIt, std::size_t, Hasher, Alloc)
|
|
1345
|
+
-> F14VectorSet<
|
|
1346
|
+
iterator_value_type_t<InputIt>,
|
|
1347
|
+
Hasher,
|
|
1348
|
+
f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
1349
|
+
Alloc>;
|
|
1350
|
+
|
|
1351
|
+
template <
|
|
1352
|
+
typename Key,
|
|
1353
|
+
typename Hasher = f14::DefaultHasher<Key>,
|
|
1354
|
+
typename KeyEqual = f14::DefaultKeyEqual<Key>,
|
|
1355
|
+
typename Alloc = f14::DefaultAlloc<Key>,
|
|
1356
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
1357
|
+
typename = detail::RequireNotAllocator<KeyEqual>,
|
|
1358
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1359
|
+
F14VectorSet(
|
|
1360
|
+
std::initializer_list<Key>,
|
|
1361
|
+
std::size_t = {},
|
|
1362
|
+
Hasher = {},
|
|
1363
|
+
KeyEqual = {},
|
|
1364
|
+
Alloc = {}) -> F14VectorSet<Key, Hasher, KeyEqual, Alloc>;
|
|
1365
|
+
|
|
1366
|
+
template <
|
|
1367
|
+
typename Key,
|
|
1368
|
+
typename Alloc,
|
|
1369
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1370
|
+
F14VectorSet(std::initializer_list<Key>, std::size_t, Alloc)
|
|
1371
|
+
-> F14VectorSet<
|
|
1372
|
+
Key,
|
|
1373
|
+
f14::DefaultHasher<Key>,
|
|
1374
|
+
f14::DefaultKeyEqual<Key>,
|
|
1375
|
+
Alloc>;
|
|
1376
|
+
|
|
1377
|
+
template <
|
|
1378
|
+
typename Key,
|
|
1379
|
+
typename Hasher,
|
|
1380
|
+
typename Alloc,
|
|
1381
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1382
|
+
F14VectorSet(std::initializer_list<Key>, std::size_t, Hasher, Alloc)
|
|
1383
|
+
-> F14VectorSet<Key, Hasher, f14::DefaultKeyEqual<Key>, Alloc>;
|
|
1384
|
+
|
|
1385
|
+
#if FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
|
|
1386
|
+
template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
|
|
1387
|
+
class F14FastSet
|
|
1388
|
+
: public std::conditional_t<
|
|
1389
|
+
sizeof(Key) < 24,
|
|
1390
|
+
F14ValueSet<Key, Hasher, KeyEqual, Alloc>,
|
|
1391
|
+
f14::detail::
|
|
1392
|
+
F14VectorSetImpl<Key, Hasher, KeyEqual, Alloc, std::true_type>> {
|
|
1393
|
+
using Super = std::conditional_t<
|
|
1394
|
+
sizeof(Key) < 24,
|
|
1395
|
+
F14ValueSet<Key, Hasher, KeyEqual, Alloc>,
|
|
1396
|
+
f14::detail::
|
|
1397
|
+
F14VectorSetImpl<Key, Hasher, KeyEqual, Alloc, std::true_type>>;
|
|
1398
|
+
|
|
1399
|
+
public:
|
|
1400
|
+
using typename Super::value_type;
|
|
1401
|
+
|
|
1402
|
+
F14FastSet() = default;
|
|
1403
|
+
|
|
1404
|
+
using Super::Super;
|
|
1405
|
+
|
|
1406
|
+
F14FastSet& operator=(std::initializer_list<value_type> ilist) {
|
|
1407
|
+
Super::operator=(ilist);
|
|
1408
|
+
return *this;
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
void swap(F14FastSet& rhs) noexcept(Super::Policy::kSwapIsNoexcept) {
|
|
1412
|
+
this->table_.swap(rhs.table_);
|
|
1413
|
+
}
|
|
1414
|
+
};
|
|
1415
|
+
#endif // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
|
|
1416
|
+
|
|
1417
|
+
template <
|
|
1418
|
+
typename InputIt,
|
|
1419
|
+
typename Hasher = f14::DefaultHasher<iterator_value_type_t<InputIt>>,
|
|
1420
|
+
typename KeyEqual = f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
1421
|
+
typename Alloc = f14::DefaultAlloc<iterator_value_type_t<InputIt>>,
|
|
1422
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
1423
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
1424
|
+
typename = detail::RequireNotAllocator<KeyEqual>,
|
|
1425
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1426
|
+
F14FastSet(
|
|
1427
|
+
InputIt, InputIt, std::size_t = {}, Hasher = {}, KeyEqual = {}, Alloc = {})
|
|
1428
|
+
-> F14FastSet<iterator_value_type_t<InputIt>, Hasher, KeyEqual, Alloc>;
|
|
1429
|
+
|
|
1430
|
+
template <
|
|
1431
|
+
typename InputIt,
|
|
1432
|
+
typename Alloc,
|
|
1433
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
1434
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1435
|
+
F14FastSet(InputIt, InputIt, std::size_t, Alloc)
|
|
1436
|
+
-> F14FastSet<
|
|
1437
|
+
iterator_value_type_t<InputIt>,
|
|
1438
|
+
f14::DefaultHasher<iterator_value_type_t<InputIt>>,
|
|
1439
|
+
f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
1440
|
+
Alloc>;
|
|
1441
|
+
|
|
1442
|
+
template <
|
|
1443
|
+
typename InputIt,
|
|
1444
|
+
typename Hasher,
|
|
1445
|
+
typename Alloc,
|
|
1446
|
+
typename = detail::RequireInputIterator<InputIt>,
|
|
1447
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
1448
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1449
|
+
F14FastSet(InputIt, InputIt, std::size_t, Hasher, Alloc)
|
|
1450
|
+
-> F14FastSet<
|
|
1451
|
+
iterator_value_type_t<InputIt>,
|
|
1452
|
+
Hasher,
|
|
1453
|
+
f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
|
|
1454
|
+
Alloc>;
|
|
1455
|
+
|
|
1456
|
+
template <
|
|
1457
|
+
typename Key,
|
|
1458
|
+
typename Hasher = f14::DefaultHasher<Key>,
|
|
1459
|
+
typename KeyEqual = f14::DefaultKeyEqual<Key>,
|
|
1460
|
+
typename Alloc = f14::DefaultAlloc<Key>,
|
|
1461
|
+
typename = detail::RequireNotAllocator<Hasher>,
|
|
1462
|
+
typename = detail::RequireNotAllocator<KeyEqual>,
|
|
1463
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1464
|
+
F14FastSet(
|
|
1465
|
+
std::initializer_list<Key>,
|
|
1466
|
+
std::size_t = {},
|
|
1467
|
+
Hasher = {},
|
|
1468
|
+
KeyEqual = {},
|
|
1469
|
+
Alloc = {}) -> F14FastSet<Key, Hasher, KeyEqual, Alloc>;
|
|
1470
|
+
|
|
1471
|
+
template <
|
|
1472
|
+
typename Key,
|
|
1473
|
+
typename Alloc,
|
|
1474
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1475
|
+
F14FastSet(std::initializer_list<Key>, std::size_t, Alloc)
|
|
1476
|
+
-> F14FastSet<
|
|
1477
|
+
Key,
|
|
1478
|
+
f14::DefaultHasher<Key>,
|
|
1479
|
+
f14::DefaultKeyEqual<Key>,
|
|
1480
|
+
Alloc>;
|
|
1481
|
+
|
|
1482
|
+
template <
|
|
1483
|
+
typename Key,
|
|
1484
|
+
typename Hasher,
|
|
1485
|
+
typename Alloc,
|
|
1486
|
+
typename = detail::RequireAllocator<Alloc>>
|
|
1487
|
+
F14FastSet(std::initializer_list<Key>, std::size_t, Hasher, Alloc)
|
|
1488
|
+
-> F14FastSet<Key, Hasher, f14::DefaultKeyEqual<Key>, Alloc>;
|
|
1489
|
+
|
|
1490
|
+
} // namespace folly
|
|
1491
|
+
|
|
1492
|
+
namespace folly {
|
|
1493
|
+
namespace f14 {
|
|
1494
|
+
namespace detail {
|
|
1495
|
+
template <typename S>
|
|
1496
|
+
bool setsEqual(S const& lhs, S const& rhs) {
|
|
1497
|
+
if (lhs.size() != rhs.size()) {
|
|
1498
|
+
return false;
|
|
1499
|
+
}
|
|
1500
|
+
for (auto& k : lhs) {
|
|
1501
|
+
if (!rhs.containsEqualValue(k)) {
|
|
1502
|
+
return false;
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
return true;
|
|
1506
|
+
}
|
|
1507
|
+
} // namespace detail
|
|
1508
|
+
} // namespace f14
|
|
1509
|
+
|
|
1510
|
+
template <typename K, typename H, typename E, typename A>
|
|
1511
|
+
bool operator==(
|
|
1512
|
+
F14ValueSet<K, H, E, A> const& lhs, F14ValueSet<K, H, E, A> const& rhs) {
|
|
1513
|
+
return setsEqual(lhs, rhs);
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
template <typename K, typename H, typename E, typename A>
|
|
1517
|
+
bool operator!=(
|
|
1518
|
+
F14ValueSet<K, H, E, A> const& lhs, F14ValueSet<K, H, E, A> const& rhs) {
|
|
1519
|
+
return !(lhs == rhs);
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1522
|
+
template <typename K, typename H, typename E, typename A>
|
|
1523
|
+
bool operator==(
|
|
1524
|
+
F14NodeSet<K, H, E, A> const& lhs, F14NodeSet<K, H, E, A> const& rhs) {
|
|
1525
|
+
return setsEqual(lhs, rhs);
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
template <typename K, typename H, typename E, typename A>
|
|
1529
|
+
bool operator!=(
|
|
1530
|
+
F14NodeSet<K, H, E, A> const& lhs, F14NodeSet<K, H, E, A> const& rhs) {
|
|
1531
|
+
return !(lhs == rhs);
|
|
1532
|
+
}
|
|
1533
|
+
|
|
1534
|
+
template <typename K, typename H, typename E, typename A>
|
|
1535
|
+
bool operator==(
|
|
1536
|
+
F14VectorSet<K, H, E, A> const& lhs, F14VectorSet<K, H, E, A> const& rhs) {
|
|
1537
|
+
return setsEqual(lhs, rhs);
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
template <typename K, typename H, typename E, typename A>
|
|
1541
|
+
bool operator!=(
|
|
1542
|
+
F14VectorSet<K, H, E, A> const& lhs, F14VectorSet<K, H, E, A> const& rhs) {
|
|
1543
|
+
return !(lhs == rhs);
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
template <typename K, typename H, typename E, typename A>
|
|
1547
|
+
bool operator==(
|
|
1548
|
+
F14FastSet<K, H, E, A> const& lhs, F14FastSet<K, H, E, A> const& rhs) {
|
|
1549
|
+
return setsEqual(lhs, rhs);
|
|
1550
|
+
}
|
|
1551
|
+
|
|
1552
|
+
template <typename K, typename H, typename E, typename A>
|
|
1553
|
+
bool operator!=(
|
|
1554
|
+
F14FastSet<K, H, E, A> const& lhs, F14FastSet<K, H, E, A> const& rhs) {
|
|
1555
|
+
return !(lhs == rhs);
|
|
1556
|
+
}
|
|
1557
|
+
|
|
1558
|
+
template <typename K, typename H, typename E, typename A>
|
|
1559
|
+
void swap(F14ValueSet<K, H, E, A>& lhs, F14ValueSet<K, H, E, A>& rhs) noexcept(
|
|
1560
|
+
noexcept(lhs.swap(rhs))) {
|
|
1561
|
+
lhs.swap(rhs);
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
template <typename K, typename H, typename E, typename A>
|
|
1565
|
+
void swap(F14NodeSet<K, H, E, A>& lhs, F14NodeSet<K, H, E, A>& rhs) noexcept(
|
|
1566
|
+
noexcept(lhs.swap(rhs))) {
|
|
1567
|
+
lhs.swap(rhs);
|
|
1568
|
+
}
|
|
1569
|
+
|
|
1570
|
+
template <typename K, typename H, typename E, typename A>
|
|
1571
|
+
void swap(
|
|
1572
|
+
F14VectorSet<K, H, E, A>& lhs,
|
|
1573
|
+
F14VectorSet<K, H, E, A>& rhs) noexcept(noexcept(lhs.swap(rhs))) {
|
|
1574
|
+
lhs.swap(rhs);
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
template <typename K, typename H, typename E, typename A>
|
|
1578
|
+
void swap(F14FastSet<K, H, E, A>& lhs, F14FastSet<K, H, E, A>& rhs) noexcept(
|
|
1579
|
+
noexcept(lhs.swap(rhs))) {
|
|
1580
|
+
lhs.swap(rhs);
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
template <typename K, typename H, typename E, typename A, typename Pred>
|
|
1584
|
+
std::size_t erase_if(F14ValueSet<K, H, E, A>& c, Pred pred) {
|
|
1585
|
+
return f14::detail::erase_if_impl(c, pred);
|
|
1586
|
+
}
|
|
1587
|
+
|
|
1588
|
+
template <typename K, typename H, typename E, typename A, typename Pred>
|
|
1589
|
+
std::size_t erase_if(F14NodeSet<K, H, E, A>& c, Pred pred) {
|
|
1590
|
+
return f14::detail::erase_if_impl(c, pred);
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
template <typename K, typename H, typename E, typename A, typename Pred>
|
|
1594
|
+
std::size_t erase_if(F14VectorSet<K, H, E, A>& c, Pred pred) {
|
|
1595
|
+
return f14::detail::erase_if_impl(c, pred);
|
|
1596
|
+
}
|
|
1597
|
+
|
|
1598
|
+
template <typename K, typename H, typename E, typename A, typename Pred>
|
|
1599
|
+
std::size_t erase_if(F14FastSet<K, H, E, A>& c, Pred pred) {
|
|
1600
|
+
return f14::detail::erase_if_impl(c, pred);
|
|
1601
|
+
}
|
|
1602
|
+
|
|
1603
|
+
} // namespace folly
|