react-native-windows 0.83.0 → 0.83.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/unicode.cpp +36 -0
- package/Common/unicode.h +8 -0
- package/Directory.Build.props +2 -17
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +17 -4
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +6 -4
- package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +8 -4
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +1 -1
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +4 -9
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/Microsoft.ReactNative/ReactNativeAppBuilder.idl +3 -0
- package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +33 -25
- package/Microsoft.ReactNative/Utils/LocalBundleReader.h +5 -3
- package/Microsoft.ReactNative/Utils/UwpScriptStore.cpp +2 -2
- package/Microsoft.ReactNative/Utils/UwpScriptStore.h +3 -2
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +16 -0
- package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +3 -3
- package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +10 -10
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml +1 -1
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml +1 -1
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +9 -1
- package/PropertySheets/React.Cpp.props +7 -6
- package/PropertySheets/WinUI.props +4 -3
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/ConfigureYarnPackageAgeGate.ps1 +25 -0
- package/Scripts/EnableInternalWinAppSDKFeed.ps1 +12 -5
- package/Scripts/JustMyXaml.ps1 +8 -8
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +103 -6
- package/Scripts/RunRnwInitWindows.js +37 -0
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/UnitTest.ps1 +3 -1
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +35 -12
- package/Scripts/creaternwlib.cmd +41 -18
- package/Scripts/rnw-dependencies.ps1 +15 -16
- package/Shared/DevSupportManager.cpp +55 -48
- package/Shared/DevSupportManager.h +0 -1
- package/Shared/Modules/IWebSocketModuleContentHandler.h +15 -0
- package/Shared/Modules/WebSocketModule.cpp +8 -3
- package/Shared/Networking/DefaultBlobResource.cpp +37 -0
- package/Shared/Networking/DefaultBlobResource.h +12 -0
- package/Shared/Networking/WinRTWebSocketResource.h +5 -1
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/external/fmt/include/fmt/base.h +3077 -0
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/{fmt → external/folly/folly}/.clang-format +0 -1
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/external/folly/folly/hash/SpookyHashV2.h +339 -0
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/just-task.js +13 -2
- package/package.json +6 -6
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +1 -1
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/example/metro.config.js +30 -4
- package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +1 -1
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -376
- package/Folly/Folly.vcxproj.filters +0 -558
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{fmt → external/fmt}/cgmanifest.json +0 -0
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,843 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <functional>
|
|
20
|
+
#include <iterator>
|
|
21
|
+
#include <memory>
|
|
22
|
+
#include <tuple>
|
|
23
|
+
#include <type_traits>
|
|
24
|
+
#include <utility>
|
|
25
|
+
|
|
26
|
+
#include <folly/Traits.h>
|
|
27
|
+
#include <folly/Utility.h>
|
|
28
|
+
#include <folly/container/Access.h>
|
|
29
|
+
#include <folly/functional/Invoke.h>
|
|
30
|
+
#include <folly/lang/RValueReferenceWrapper.h>
|
|
31
|
+
|
|
32
|
+
namespace folly {
|
|
33
|
+
|
|
34
|
+
// iterator_has_known_distance_v
|
|
35
|
+
//
|
|
36
|
+
// Whether std::distance over a pair of iterators is reasonably known to give
|
|
37
|
+
// the distance without advancing the iterators or copies of them.
|
|
38
|
+
template <typename Iter, typename SentinelIter>
|
|
39
|
+
inline constexpr bool iterator_has_known_distance_v =
|
|
40
|
+
!require_sizeof<Iter> || !require_sizeof<SentinelIter>;
|
|
41
|
+
template <typename Iter>
|
|
42
|
+
inline constexpr bool iterator_has_known_distance_v<Iter, Iter> =
|
|
43
|
+
std::is_base_of<
|
|
44
|
+
std::random_access_iterator_tag,
|
|
45
|
+
typename std::iterator_traits<Iter>::iterator_category>::value;
|
|
46
|
+
|
|
47
|
+
// range_has_known_distance_v
|
|
48
|
+
//
|
|
49
|
+
// Whether std::distance over the begin and end iterators is reasonably known
|
|
50
|
+
// to give the distance without advancing the iterators or copies of them.
|
|
51
|
+
//
|
|
52
|
+
// Useful for conditionally reserving memory in advance of iterating the range.
|
|
53
|
+
//
|
|
54
|
+
// Note: Many use-cases are better served by range-v3 or std::ranges.
|
|
55
|
+
//
|
|
56
|
+
// Example:
|
|
57
|
+
//
|
|
58
|
+
// std::vector<result_type> results;
|
|
59
|
+
// auto elems = /* some range */;
|
|
60
|
+
// auto const elemsb = folly::access::begin(elems);
|
|
61
|
+
// auto const elemse = folly::access::end(elems);
|
|
62
|
+
//
|
|
63
|
+
// if constexpr (range_has_known_distance_v<decltype(elems)>) {
|
|
64
|
+
// auto const dist = std::distance(elemsb, elemse);
|
|
65
|
+
// results.reserve(static_cast<std::size_t>(dist));
|
|
66
|
+
// }
|
|
67
|
+
//
|
|
68
|
+
// for (auto elemsi = elemsb; elemsi != elemsi; ++i) {
|
|
69
|
+
// results.push_back(do_work(*elemsi));
|
|
70
|
+
// }
|
|
71
|
+
// return results;
|
|
72
|
+
template <typename Range>
|
|
73
|
+
inline constexpr bool range_has_known_distance_v =
|
|
74
|
+
iterator_has_known_distance_v<
|
|
75
|
+
invoke_result_t<access::begin_fn, Range>,
|
|
76
|
+
invoke_result_t<access::end_fn, Range>>;
|
|
77
|
+
|
|
78
|
+
// iterator_category_t
|
|
79
|
+
//
|
|
80
|
+
// Extracts iterator_category from an iterator.
|
|
81
|
+
template <typename Iter>
|
|
82
|
+
using iterator_category_t =
|
|
83
|
+
typename std::iterator_traits<Iter>::iterator_category;
|
|
84
|
+
|
|
85
|
+
namespace detail {
|
|
86
|
+
|
|
87
|
+
template <typename Iter, typename Category, typename = void>
|
|
88
|
+
inline constexpr bool iterator_category_matches_v_ =
|
|
89
|
+
!require_sizeof<Iter> || !require_sizeof<Category>;
|
|
90
|
+
template <typename Iter, typename Category>
|
|
91
|
+
inline constexpr bool iterator_category_matches_v_<
|
|
92
|
+
Iter,
|
|
93
|
+
Category,
|
|
94
|
+
void_t<iterator_category_t<Iter>>> =
|
|
95
|
+
std::is_convertible<iterator_category_t<Iter>, Category>::value;
|
|
96
|
+
|
|
97
|
+
} // namespace detail
|
|
98
|
+
|
|
99
|
+
// iterator_category_matches_v
|
|
100
|
+
//
|
|
101
|
+
// Whether an iterator's category matches Category (std::input_iterator_tag,
|
|
102
|
+
// std::output_iterator_tag, etc). Defined for non-iterator types as well.
|
|
103
|
+
//
|
|
104
|
+
// Useful for containers deduction guides implementation.
|
|
105
|
+
template <typename Iter, typename Category>
|
|
106
|
+
inline constexpr bool iterator_category_matches_v =
|
|
107
|
+
detail::iterator_category_matches_v_<Iter, Category>;
|
|
108
|
+
|
|
109
|
+
// iterator_value_type_t
|
|
110
|
+
//
|
|
111
|
+
// Extracts a value type from an iterator.
|
|
112
|
+
template <typename Iter>
|
|
113
|
+
using iterator_value_type_t = typename std::iterator_traits<Iter>::value_type;
|
|
114
|
+
|
|
115
|
+
// iterator_reference_type_t
|
|
116
|
+
//
|
|
117
|
+
// Extracts reference from an iterator (C++20 iter_reference_t backported)
|
|
118
|
+
template <typename Iter>
|
|
119
|
+
using iterator_reference_t = decltype(*std::declval<Iter&>());
|
|
120
|
+
|
|
121
|
+
// iterator_key_type_t
|
|
122
|
+
//
|
|
123
|
+
// Extracts a key type from an iterator, leverages the knowledge that
|
|
124
|
+
// key/value containers usually use std::pair<const K, V> as a value_type.
|
|
125
|
+
template <typename Iter>
|
|
126
|
+
using iterator_key_type_t =
|
|
127
|
+
remove_cvref_t<typename iterator_value_type_t<Iter>::first_type>;
|
|
128
|
+
|
|
129
|
+
// iterator_mapped_type_t
|
|
130
|
+
//
|
|
131
|
+
// Extracts a mapped type from an iterator.
|
|
132
|
+
template <typename Iter>
|
|
133
|
+
using iterator_mapped_type_t =
|
|
134
|
+
typename iterator_value_type_t<Iter>::second_type;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Argument tuple for variadic emplace/constructor calls. Stores arguments by
|
|
138
|
+
* (decayed) value. Restores original argument types with reference qualifiers
|
|
139
|
+
* and adornments at unpack time to emulate perfect forwarding.
|
|
140
|
+
*
|
|
141
|
+
* Uses inheritance instead of a type alias to std::tuple so that emplace
|
|
142
|
+
* iterators with implicit unpacking disabled can distinguish between
|
|
143
|
+
* emplace_args and std::tuple parameters.
|
|
144
|
+
*
|
|
145
|
+
* @seealso folly::make_emplace_args
|
|
146
|
+
* @seealso folly::get_emplace_arg
|
|
147
|
+
*/
|
|
148
|
+
template <typename... Args>
|
|
149
|
+
struct emplace_args : public std::tuple<std::decay_t<Args>...> {
|
|
150
|
+
using storage_type = std::tuple<std::decay_t<Args>...>;
|
|
151
|
+
using storage_type::storage_type;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Pack arguments in a tuple for assignment to a folly::emplace_iterator,
|
|
156
|
+
* folly::front_emplace_iterator, or folly::back_emplace_iterator. The
|
|
157
|
+
* iterator's operator= will unpack the tuple and pass the unpacked arguments
|
|
158
|
+
* to the container's emplace function, which in turn forwards the arguments to
|
|
159
|
+
* the (multi-argument) constructor of the target class.
|
|
160
|
+
*
|
|
161
|
+
* Argument tuples generated with folly::make_emplace_args will be unpacked
|
|
162
|
+
* before being passed to the container's emplace function, even for iterators
|
|
163
|
+
* where implicit_unpack is set to false (so they will not implicitly unpack
|
|
164
|
+
* std::pair or std::tuple arguments to operator=).
|
|
165
|
+
*
|
|
166
|
+
* Arguments are copied (lvalues) or moved (rvalues). To avoid copies and moves,
|
|
167
|
+
* wrap references using std::ref(), std::cref(), and folly::rref(). Beware of
|
|
168
|
+
* dangling references, especially references to temporary objects created with
|
|
169
|
+
* folly::rref().
|
|
170
|
+
*
|
|
171
|
+
* Note that an argument pack created with folly::make_emplace_args is different
|
|
172
|
+
* from an argument pack created with std::make_pair or std::make_tuple.
|
|
173
|
+
* Specifically, passing a std::pair&& or std::tuple&& to an emplace iterator's
|
|
174
|
+
* operator= will pass rvalue references to all fields of that tuple to the
|
|
175
|
+
* container's emplace function, while passing an emplace_args&& to operator=
|
|
176
|
+
* will cast those field references to the exact argument types as passed to
|
|
177
|
+
* folly::make_emplace_args previously. If all arguments have been wrapped by
|
|
178
|
+
* std::reference_wrappers or folly::rvalue_reference_wrappers, the result will
|
|
179
|
+
* be the same as if the container's emplace function had been called directly
|
|
180
|
+
* (perfect forwarding), with no temporary copies of the arguments.
|
|
181
|
+
*
|
|
182
|
+
* @seealso folly::rref
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* class Widget { Widget(int, int); };
|
|
186
|
+
* std::vector<Widget> makeWidgets(const std::vector<int>& in) {
|
|
187
|
+
* std::vector<Widget> out;
|
|
188
|
+
* std::transform(
|
|
189
|
+
* in.begin(),
|
|
190
|
+
* in.end(),
|
|
191
|
+
* folly::back_emplacer(out),
|
|
192
|
+
* [](int i) { return folly::make_emplace_args(i, i); });
|
|
193
|
+
* return out;
|
|
194
|
+
* }
|
|
195
|
+
*/
|
|
196
|
+
template <typename... Args>
|
|
197
|
+
emplace_args<Args...> make_emplace_args(Args&&... args) noexcept(
|
|
198
|
+
noexcept(emplace_args<Args...>(std::forward<Args>(args)...))) {
|
|
199
|
+
return emplace_args<Args...>(std::forward<Args>(args)...);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
namespace detail {
|
|
203
|
+
template <typename Arg>
|
|
204
|
+
decltype(auto) unwrap_emplace_arg(Arg&& arg) noexcept {
|
|
205
|
+
return std::forward<Arg>(arg);
|
|
206
|
+
}
|
|
207
|
+
template <typename Arg>
|
|
208
|
+
decltype(auto) unwrap_emplace_arg(std::reference_wrapper<Arg> arg) noexcept {
|
|
209
|
+
return arg.get();
|
|
210
|
+
}
|
|
211
|
+
template <typename Arg>
|
|
212
|
+
decltype(auto) unwrap_emplace_arg(
|
|
213
|
+
folly::rvalue_reference_wrapper<Arg> arg) noexcept {
|
|
214
|
+
return std::move(arg).get();
|
|
215
|
+
}
|
|
216
|
+
} // namespace detail
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Getter function for unpacking a single emplace argument.
|
|
220
|
+
*
|
|
221
|
+
* Calling get_emplace_arg on an emplace_args rvalue reference results in
|
|
222
|
+
* perfect forwarding of the original input types. A special case are
|
|
223
|
+
* std::reference_wrapper and folly::rvalue_reference_wrapper objects within
|
|
224
|
+
* folly::emplace_args. These are also unwrapped so that the bare reference is
|
|
225
|
+
* returned.
|
|
226
|
+
*
|
|
227
|
+
* std::get is not a customization point in the standard library, so the
|
|
228
|
+
* cleanest solution was to define our own getter function.
|
|
229
|
+
*/
|
|
230
|
+
template <size_t I, typename... Args>
|
|
231
|
+
decltype(auto) get_emplace_arg(emplace_args<Args...>&& args) noexcept {
|
|
232
|
+
using Out = std::tuple<Args...>;
|
|
233
|
+
return detail::unwrap_emplace_arg(
|
|
234
|
+
std::forward<std::tuple_element_t<I, Out>>(std::get<I>(args)));
|
|
235
|
+
}
|
|
236
|
+
template <size_t I, typename... Args>
|
|
237
|
+
decltype(auto) get_emplace_arg(emplace_args<Args...>& args) noexcept {
|
|
238
|
+
return detail::unwrap_emplace_arg(std::get<I>(args));
|
|
239
|
+
}
|
|
240
|
+
template <size_t I, typename... Args>
|
|
241
|
+
decltype(auto) get_emplace_arg(const emplace_args<Args...>& args) noexcept {
|
|
242
|
+
return detail::unwrap_emplace_arg(std::get<I>(args));
|
|
243
|
+
}
|
|
244
|
+
template <size_t I, typename Args>
|
|
245
|
+
decltype(auto) get_emplace_arg(Args&& args) noexcept {
|
|
246
|
+
return std::get<I>(std::move(args));
|
|
247
|
+
}
|
|
248
|
+
template <size_t I, typename Args>
|
|
249
|
+
decltype(auto) get_emplace_arg(Args& args) noexcept {
|
|
250
|
+
return std::get<I>(args);
|
|
251
|
+
}
|
|
252
|
+
template <size_t I, typename Args>
|
|
253
|
+
decltype(auto) get_emplace_arg(const Args& args) noexcept {
|
|
254
|
+
return std::get<I>(args);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
namespace detail {
|
|
258
|
+
/**
|
|
259
|
+
* Emplace implementation class for folly::emplace_iterator.
|
|
260
|
+
*/
|
|
261
|
+
template <typename Container>
|
|
262
|
+
struct Emplace {
|
|
263
|
+
Emplace(Container& c, typename Container::iterator i)
|
|
264
|
+
: container(std::addressof(c)), iter(std::move(i)) {}
|
|
265
|
+
template <typename... Args>
|
|
266
|
+
void emplace(Args&&... args) {
|
|
267
|
+
iter = container->emplace(iter, std::forward<Args>(args)...);
|
|
268
|
+
++iter;
|
|
269
|
+
}
|
|
270
|
+
Container* container;
|
|
271
|
+
typename Container::iterator iter;
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Emplace implementation class for folly::hint_emplace_iterator.
|
|
276
|
+
*/
|
|
277
|
+
template <typename Container>
|
|
278
|
+
struct EmplaceHint {
|
|
279
|
+
EmplaceHint(Container& c, typename Container::iterator i)
|
|
280
|
+
: container(std::addressof(c)), iter(std::move(i)) {}
|
|
281
|
+
template <typename... Args>
|
|
282
|
+
void emplace(Args&&... args) {
|
|
283
|
+
iter = container->emplace_hint(iter, std::forward<Args>(args)...);
|
|
284
|
+
++iter;
|
|
285
|
+
}
|
|
286
|
+
Container* container;
|
|
287
|
+
typename Container::iterator iter;
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Emplace implementation class for folly::front_emplace_iterator.
|
|
292
|
+
*/
|
|
293
|
+
template <typename Container>
|
|
294
|
+
struct EmplaceFront {
|
|
295
|
+
explicit EmplaceFront(Container& c) : container(std::addressof(c)) {}
|
|
296
|
+
template <typename... Args>
|
|
297
|
+
void emplace(Args&&... args) {
|
|
298
|
+
container->emplace_front(std::forward<Args>(args)...);
|
|
299
|
+
}
|
|
300
|
+
Container* container;
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Emplace implementation class for folly::back_emplace_iterator.
|
|
305
|
+
*/
|
|
306
|
+
template <typename Container>
|
|
307
|
+
struct EmplaceBack {
|
|
308
|
+
explicit EmplaceBack(Container& c) : container(std::addressof(c)) {}
|
|
309
|
+
template <typename... Args>
|
|
310
|
+
void emplace(Args&&... args) {
|
|
311
|
+
container->emplace_back(std::forward<Args>(args)...);
|
|
312
|
+
}
|
|
313
|
+
Container* container;
|
|
314
|
+
};
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Generic base class and implementation of all emplace iterator classes.
|
|
318
|
+
*
|
|
319
|
+
* Uses the curiously recurring template pattern (CRTP) to cast `this*` to
|
|
320
|
+
* `Derived*`; i.e., to implement covariant return types in a generic manner.
|
|
321
|
+
*/
|
|
322
|
+
template <typename Derived, typename EmplaceImpl, bool implicit_unpack>
|
|
323
|
+
class emplace_iterator_base;
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Partial specialization of emplace_iterator_base with implicit unpacking
|
|
327
|
+
* disabled.
|
|
328
|
+
*/
|
|
329
|
+
template <typename Derived, typename EmplaceImpl>
|
|
330
|
+
class emplace_iterator_base<Derived, EmplaceImpl, false>
|
|
331
|
+
: protected EmplaceImpl /* protected implementation inheritance */ {
|
|
332
|
+
public:
|
|
333
|
+
// Iterator traits.
|
|
334
|
+
using iterator_category = std::output_iterator_tag;
|
|
335
|
+
using value_type = void;
|
|
336
|
+
using difference_type = void;
|
|
337
|
+
using pointer = void;
|
|
338
|
+
using reference = void;
|
|
339
|
+
using container_type =
|
|
340
|
+
std::remove_reference_t<decltype(*EmplaceImpl::container)>;
|
|
341
|
+
|
|
342
|
+
using EmplaceImpl::EmplaceImpl;
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Canonical output operator. Forwards single argument straight to container's
|
|
346
|
+
* emplace function.
|
|
347
|
+
*/
|
|
348
|
+
template <typename T>
|
|
349
|
+
Derived& operator=(T&& arg) {
|
|
350
|
+
this->emplace(std::forward<T>(arg));
|
|
351
|
+
return static_cast<Derived&>(*this);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Special output operator for packed arguments. Unpacks args and performs
|
|
356
|
+
* variadic call to container's emplace function.
|
|
357
|
+
*/
|
|
358
|
+
template <typename... Args>
|
|
359
|
+
Derived& operator=(emplace_args<Args...>& args) {
|
|
360
|
+
return unpackAndEmplace(args, std::index_sequence_for<Args...>{});
|
|
361
|
+
}
|
|
362
|
+
template <typename... Args>
|
|
363
|
+
Derived& operator=(const emplace_args<Args...>& args) {
|
|
364
|
+
return unpackAndEmplace(args, std::index_sequence_for<Args...>{});
|
|
365
|
+
}
|
|
366
|
+
template <typename... Args>
|
|
367
|
+
Derived& operator=(emplace_args<Args...>&& args) {
|
|
368
|
+
return unpackAndEmplace(
|
|
369
|
+
std::move(args), std::index_sequence_for<Args...>{});
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// No-ops.
|
|
373
|
+
Derived& operator*() { return static_cast<Derived&>(*this); }
|
|
374
|
+
Derived& operator++() { return static_cast<Derived&>(*this); }
|
|
375
|
+
Derived& operator++(int) { return static_cast<Derived&>(*this); }
|
|
376
|
+
|
|
377
|
+
// We need all of these explicit defaults because the custom operator=
|
|
378
|
+
// overloads disable implicit generation of these functions.
|
|
379
|
+
emplace_iterator_base(const emplace_iterator_base&) = default;
|
|
380
|
+
emplace_iterator_base(emplace_iterator_base&&) noexcept = default;
|
|
381
|
+
emplace_iterator_base& operator=(emplace_iterator_base&) = default;
|
|
382
|
+
emplace_iterator_base& operator=(const emplace_iterator_base&) = default;
|
|
383
|
+
emplace_iterator_base& operator=(emplace_iterator_base&&) noexcept = default;
|
|
384
|
+
|
|
385
|
+
protected:
|
|
386
|
+
template <typename Args, std::size_t... I>
|
|
387
|
+
Derived& unpackAndEmplace(Args& args, std::index_sequence<I...>) {
|
|
388
|
+
this->emplace(get_emplace_arg<I>(args)...);
|
|
389
|
+
return static_cast<Derived&>(*this);
|
|
390
|
+
}
|
|
391
|
+
template <typename Args, std::size_t... I>
|
|
392
|
+
Derived& unpackAndEmplace(const Args& args, std::index_sequence<I...>) {
|
|
393
|
+
this->emplace(get_emplace_arg<I>(args)...);
|
|
394
|
+
return static_cast<Derived&>(*this);
|
|
395
|
+
}
|
|
396
|
+
template <typename Args, std::size_t... I>
|
|
397
|
+
Derived& unpackAndEmplace(Args&& args, std::index_sequence<I...>) {
|
|
398
|
+
this->emplace(get_emplace_arg<I>(std::move(args))...);
|
|
399
|
+
return static_cast<Derived&>(*this);
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Partial specialization of emplace_iterator_base with implicit unpacking
|
|
405
|
+
* enabled.
|
|
406
|
+
*
|
|
407
|
+
* Uses inheritance rather than SFINAE. operator= requires a single argument,
|
|
408
|
+
* which makes it very tricky to use std::enable_if or similar.
|
|
409
|
+
*/
|
|
410
|
+
template <typename Derived, typename EmplaceImpl>
|
|
411
|
+
class emplace_iterator_base<Derived, EmplaceImpl, true>
|
|
412
|
+
: public emplace_iterator_base<Derived, EmplaceImpl, false> {
|
|
413
|
+
private:
|
|
414
|
+
using Base = emplace_iterator_base<Derived, EmplaceImpl, false>;
|
|
415
|
+
|
|
416
|
+
public:
|
|
417
|
+
using Base::Base;
|
|
418
|
+
using Base::operator=;
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Special output operator for arguments packed into a std::pair. Unpacks
|
|
422
|
+
* the pair and performs variadic call to container's emplace function.
|
|
423
|
+
*/
|
|
424
|
+
template <typename... Args>
|
|
425
|
+
Derived& operator=(std::pair<Args...>& args) {
|
|
426
|
+
return this->unpackAndEmplace(args, std::index_sequence_for<Args...>{});
|
|
427
|
+
}
|
|
428
|
+
template <typename... Args>
|
|
429
|
+
Derived& operator=(const std::pair<Args...>& args) {
|
|
430
|
+
return this->unpackAndEmplace(args, std::index_sequence_for<Args...>{});
|
|
431
|
+
}
|
|
432
|
+
template <typename... Args>
|
|
433
|
+
Derived& operator=(std::pair<Args...>&& args) {
|
|
434
|
+
return this->unpackAndEmplace(
|
|
435
|
+
std::move(args), std::index_sequence_for<Args...>{});
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Special output operator for arguments packed into a std::tuple. Unpacks
|
|
440
|
+
* the tuple and performs variadic call to container's emplace function.
|
|
441
|
+
*/
|
|
442
|
+
template <typename... Args>
|
|
443
|
+
Derived& operator=(std::tuple<Args...>& args) {
|
|
444
|
+
return this->unpackAndEmplace(args, std::index_sequence_for<Args...>{});
|
|
445
|
+
}
|
|
446
|
+
template <typename... Args>
|
|
447
|
+
Derived& operator=(const std::tuple<Args...>& args) {
|
|
448
|
+
return this->unpackAndEmplace(args, std::index_sequence_for<Args...>{});
|
|
449
|
+
}
|
|
450
|
+
template <typename... Args>
|
|
451
|
+
Derived& operator=(std::tuple<Args...>&& args) {
|
|
452
|
+
return this->unpackAndEmplace(
|
|
453
|
+
std::move(args), std::index_sequence_for<Args...>{});
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// We need all of these explicit defaults because the custom operator=
|
|
457
|
+
// overloads disable implicit generation of these functions.
|
|
458
|
+
emplace_iterator_base(const emplace_iterator_base&) = default;
|
|
459
|
+
emplace_iterator_base(emplace_iterator_base&&) noexcept = default;
|
|
460
|
+
emplace_iterator_base& operator=(emplace_iterator_base&) = default;
|
|
461
|
+
emplace_iterator_base& operator=(const emplace_iterator_base&) = default;
|
|
462
|
+
emplace_iterator_base& operator=(emplace_iterator_base&&) noexcept = default;
|
|
463
|
+
};
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Concrete instantiation of emplace_iterator_base. All emplace iterator
|
|
467
|
+
* classes; folly::emplace_iterator, folly::hint_emplace_iterator,
|
|
468
|
+
* folly::front_emplace_iterator, and folly::back_emplace_iterator; are just
|
|
469
|
+
* type aliases of this class.
|
|
470
|
+
*
|
|
471
|
+
* It is not possible to alias emplace_iterator_base directly, because type
|
|
472
|
+
* aliases cannot be used for CRTP.
|
|
473
|
+
*/
|
|
474
|
+
template <
|
|
475
|
+
template <typename>
|
|
476
|
+
class EmplaceImplT,
|
|
477
|
+
typename Container,
|
|
478
|
+
bool implicit_unpack>
|
|
479
|
+
class emplace_iterator_impl
|
|
480
|
+
: public emplace_iterator_base<
|
|
481
|
+
emplace_iterator_impl<EmplaceImplT, Container, implicit_unpack>,
|
|
482
|
+
EmplaceImplT<Container>,
|
|
483
|
+
implicit_unpack> {
|
|
484
|
+
private:
|
|
485
|
+
using Base = emplace_iterator_base<
|
|
486
|
+
emplace_iterator_impl,
|
|
487
|
+
EmplaceImplT<Container>,
|
|
488
|
+
implicit_unpack>;
|
|
489
|
+
|
|
490
|
+
public:
|
|
491
|
+
using Base::Base;
|
|
492
|
+
using Base::operator=;
|
|
493
|
+
|
|
494
|
+
// We need all of these explicit defaults because the custom operator=
|
|
495
|
+
// overloads disable implicit generation of these functions.
|
|
496
|
+
emplace_iterator_impl(const emplace_iterator_impl&) = default;
|
|
497
|
+
emplace_iterator_impl(emplace_iterator_impl&&) noexcept = default;
|
|
498
|
+
emplace_iterator_impl& operator=(emplace_iterator_impl&) = default;
|
|
499
|
+
emplace_iterator_impl& operator=(const emplace_iterator_impl&) = default;
|
|
500
|
+
emplace_iterator_impl& operator=(emplace_iterator_impl&&) noexcept = default;
|
|
501
|
+
};
|
|
502
|
+
} // namespace detail
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Behaves just like std::insert_iterator except that it calls emplace()
|
|
506
|
+
* instead of insert(). Uses perfect forwarding.
|
|
507
|
+
*/
|
|
508
|
+
template <typename Container, bool implicit_unpack = true>
|
|
509
|
+
using emplace_iterator =
|
|
510
|
+
detail::emplace_iterator_impl<detail::Emplace, Container, implicit_unpack>;
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Behaves just like std::insert_iterator except that it calls emplace_hint()
|
|
514
|
+
* instead of insert(). Uses perfect forwarding.
|
|
515
|
+
*/
|
|
516
|
+
template <typename Container, bool implicit_unpack = true>
|
|
517
|
+
using hint_emplace_iterator = detail::
|
|
518
|
+
emplace_iterator_impl<detail::EmplaceHint, Container, implicit_unpack>;
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* Behaves just like std::front_insert_iterator except that it calls
|
|
522
|
+
* emplace_front() instead of insert(). Uses perfect forwarding.
|
|
523
|
+
*/
|
|
524
|
+
template <typename Container, bool implicit_unpack = true>
|
|
525
|
+
using front_emplace_iterator = detail::
|
|
526
|
+
emplace_iterator_impl<detail::EmplaceFront, Container, implicit_unpack>;
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* Behaves just like std::back_insert_iterator except that it calls
|
|
530
|
+
* emplace_back() instead of insert(). Uses perfect forwarding.
|
|
531
|
+
*/
|
|
532
|
+
template <typename Container, bool implicit_unpack = true>
|
|
533
|
+
using back_emplace_iterator = detail::
|
|
534
|
+
emplace_iterator_impl<detail::EmplaceBack, Container, implicit_unpack>;
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Convenience function to construct a folly::emplace_iterator, analogous to
|
|
538
|
+
* std::inserter().
|
|
539
|
+
*
|
|
540
|
+
* Setting implicit_unpack to false will disable implicit unpacking of
|
|
541
|
+
* single std::pair and std::tuple arguments to the iterator's operator=. That
|
|
542
|
+
* may be desirable in case of constructors that expect a std::pair or
|
|
543
|
+
* std::tuple argument.
|
|
544
|
+
*/
|
|
545
|
+
template <bool implicit_unpack = true, typename Container>
|
|
546
|
+
emplace_iterator<Container, implicit_unpack> emplacer(
|
|
547
|
+
Container& c, typename Container::iterator i) {
|
|
548
|
+
return emplace_iterator<Container, implicit_unpack>(c, std::move(i));
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* Convenience function to construct a folly::hint_emplace_iterator, analogous
|
|
553
|
+
* to std::inserter().
|
|
554
|
+
*
|
|
555
|
+
* Setting implicit_unpack to false will disable implicit unpacking of
|
|
556
|
+
* single std::pair and std::tuple arguments to the iterator's operator=. That
|
|
557
|
+
* may be desirable in case of constructors that expect a std::pair or
|
|
558
|
+
* std::tuple argument.
|
|
559
|
+
*/
|
|
560
|
+
template <bool implicit_unpack = true, typename Container>
|
|
561
|
+
hint_emplace_iterator<Container, implicit_unpack> hint_emplacer(
|
|
562
|
+
Container& c, typename Container::iterator i) {
|
|
563
|
+
return hint_emplace_iterator<Container, implicit_unpack>(c, std::move(i));
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Convenience function to construct a folly::front_emplace_iterator, analogous
|
|
568
|
+
* to std::front_inserter().
|
|
569
|
+
*
|
|
570
|
+
* Setting implicit_unpack to false will disable implicit unpacking of
|
|
571
|
+
* single std::pair and std::tuple arguments to the iterator's operator=. That
|
|
572
|
+
* may be desirable in case of constructors that expect a std::pair or
|
|
573
|
+
* std::tuple argument.
|
|
574
|
+
*/
|
|
575
|
+
template <bool implicit_unpack = true, typename Container>
|
|
576
|
+
front_emplace_iterator<Container, implicit_unpack> front_emplacer(
|
|
577
|
+
Container& c) {
|
|
578
|
+
return front_emplace_iterator<Container, implicit_unpack>(c);
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* Convenience function to construct a folly::back_emplace_iterator, analogous
|
|
583
|
+
* to std::back_inserter().
|
|
584
|
+
*
|
|
585
|
+
* Setting implicit_unpack to false will disable implicit unpacking of
|
|
586
|
+
* single std::pair and std::tuple arguments to the iterator's operator=. That
|
|
587
|
+
* may be desirable in case of constructors that expect a std::pair or
|
|
588
|
+
* std::tuple argument.
|
|
589
|
+
*/
|
|
590
|
+
template <bool implicit_unpack = true, typename Container>
|
|
591
|
+
back_emplace_iterator<Container, implicit_unpack> back_emplacer(Container& c) {
|
|
592
|
+
return back_emplace_iterator<Container, implicit_unpack>(c);
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
namespace detail {
|
|
596
|
+
|
|
597
|
+
// An accepted way to make operator-> work
|
|
598
|
+
// https://quuxplusone.github.io/blog/2019/02/06/arrow-proxy/
|
|
599
|
+
template <typename Ref>
|
|
600
|
+
struct arrow_proxy {
|
|
601
|
+
Ref res;
|
|
602
|
+
Ref* operator->() { return &res; }
|
|
603
|
+
|
|
604
|
+
explicit arrow_proxy(Ref* ref) : res(*ref) {}
|
|
605
|
+
};
|
|
606
|
+
|
|
607
|
+
struct index_iterator_access_at {
|
|
608
|
+
template <typename Container, typename Index>
|
|
609
|
+
constexpr decltype(auto) operator()(Container& container, Index index) const {
|
|
610
|
+
if constexpr (folly::is_tag_invocable_v<
|
|
611
|
+
index_iterator_access_at,
|
|
612
|
+
Container&,
|
|
613
|
+
Index>) {
|
|
614
|
+
return folly::tag_invoke(*this, container, index);
|
|
615
|
+
} else {
|
|
616
|
+
return container[index];
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
};
|
|
620
|
+
|
|
621
|
+
} // namespace detail
|
|
622
|
+
|
|
623
|
+
FOLLY_DEFINE_CPO(detail::index_iterator_access_at, index_iterator_access_at)
|
|
624
|
+
|
|
625
|
+
/**
|
|
626
|
+
* index_iterator
|
|
627
|
+
*
|
|
628
|
+
* An iterator class for random access data structures that provide an
|
|
629
|
+
* access by index via `operator[](size_type)`.
|
|
630
|
+
*
|
|
631
|
+
* Requires a `value_type` defined in a container (we cannot
|
|
632
|
+
* get the value type from reference).
|
|
633
|
+
*
|
|
634
|
+
* Example:
|
|
635
|
+
* class Container {
|
|
636
|
+
* public:
|
|
637
|
+
* using value_type = <*>; // we need value_type to be defined.
|
|
638
|
+
* using iterator = folly::index_iterator<Container>;
|
|
639
|
+
* using const_iterator = folly::index_iterator<const Container>;
|
|
640
|
+
* using reverse_iterator = std::reverse_iterator<iterator>;
|
|
641
|
+
* using const_reverse_iterator = std::reverse_iterator<const_iterator>;
|
|
642
|
+
*
|
|
643
|
+
* some_ref_type operator[](std::size_t index);
|
|
644
|
+
* some_cref_type operator[](std::size_t index) const;
|
|
645
|
+
* ...
|
|
646
|
+
* };
|
|
647
|
+
*
|
|
648
|
+
* Note that `some_ref_type` can be any proxy reference, as long as the
|
|
649
|
+
* algorithms support that (for example from range-v3).
|
|
650
|
+
*
|
|
651
|
+
* NOTE: if `operator[]` doesn't work for you for some reason
|
|
652
|
+
* you can specify:
|
|
653
|
+
*
|
|
654
|
+
* ```
|
|
655
|
+
* friend some_ref_type tag_invoke(
|
|
656
|
+
* folly::cpo_t<index_iterator_access_at>,
|
|
657
|
+
* Container& c,
|
|
658
|
+
* std::size_t index);
|
|
659
|
+
*
|
|
660
|
+
* friend some_cref_type tag_invoke(
|
|
661
|
+
* folly::cpo_t<index_iterator_access_at>,
|
|
662
|
+
* const Container& c,
|
|
663
|
+
* std::size_t index);
|
|
664
|
+
* ```
|
|
665
|
+
**/
|
|
666
|
+
|
|
667
|
+
template <typename Container>
|
|
668
|
+
class index_iterator {
|
|
669
|
+
template <typename T>
|
|
670
|
+
using get_size_type_t = typename std::remove_cv_t<T>::size_type;
|
|
671
|
+
|
|
672
|
+
template <typename T>
|
|
673
|
+
using get_difference_type_t = typename std::remove_cv_t<T>::difference_type;
|
|
674
|
+
|
|
675
|
+
template <typename IndexType>
|
|
676
|
+
constexpr static decltype(auto) get_reference_by_index(
|
|
677
|
+
Container& container, IndexType index) {
|
|
678
|
+
return index_iterator_access_at(container, index);
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
public:
|
|
682
|
+
// index iterator specific types
|
|
683
|
+
|
|
684
|
+
using container_type = Container;
|
|
685
|
+
using size_type = detected_or_t<std::size_t, get_size_type_t, Container>;
|
|
686
|
+
|
|
687
|
+
// iterator types
|
|
688
|
+
|
|
689
|
+
using value_type = typename std::remove_const_t<container_type>::value_type;
|
|
690
|
+
using iterator_category = std::random_access_iterator_tag;
|
|
691
|
+
using reference = decltype(get_reference_by_index(
|
|
692
|
+
FOLLY_DECLVAL(container_type&), size_type{}));
|
|
693
|
+
using difference_type =
|
|
694
|
+
detected_or_t<std::ptrdiff_t, get_difference_type_t, Container>;
|
|
695
|
+
|
|
696
|
+
using pointer = std::conditional_t<
|
|
697
|
+
std::is_reference<reference>::value,
|
|
698
|
+
std::remove_reference_t<reference>*,
|
|
699
|
+
detail::arrow_proxy<reference>>;
|
|
700
|
+
|
|
701
|
+
static_assert(
|
|
702
|
+
std::is_signed<difference_type>::value, "difference_type must be signed");
|
|
703
|
+
|
|
704
|
+
// accessors
|
|
705
|
+
|
|
706
|
+
// instance of `index_iterator_accessor`
|
|
707
|
+
container_type* get_container() const { return container_; }
|
|
708
|
+
difference_type get_index() const { return index_; }
|
|
709
|
+
|
|
710
|
+
constexpr index_iterator() = default;
|
|
711
|
+
|
|
712
|
+
constexpr index_iterator(container_type& container, size_type index)
|
|
713
|
+
: container_(&container), index_(index) {}
|
|
714
|
+
|
|
715
|
+
// converting constructors --
|
|
716
|
+
|
|
717
|
+
template <
|
|
718
|
+
typename OtherContainer,
|
|
719
|
+
typename = std::enable_if_t<
|
|
720
|
+
std::is_same<std::remove_const_t<container_type>, OtherContainer>::
|
|
721
|
+
value &&
|
|
722
|
+
std::is_const<container_type>::value>>
|
|
723
|
+
/* implicit */ constexpr index_iterator(index_iterator<OtherContainer> other)
|
|
724
|
+
: container_(other.get_container()), index_(other.get_index()) {}
|
|
725
|
+
|
|
726
|
+
// access ---
|
|
727
|
+
|
|
728
|
+
constexpr reference operator*() const {
|
|
729
|
+
return get_reference_by_index(*container_, index_);
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
pointer operator->() const {
|
|
733
|
+
// It's equivalent to pointer{&**this} but compiler stops
|
|
734
|
+
// compilation on taking an address of a temporary.
|
|
735
|
+
// In this case `arrow_proxy` will copy the temporary and there is no
|
|
736
|
+
// issue.
|
|
737
|
+
auto&& ref = **this;
|
|
738
|
+
pointer res{&ref};
|
|
739
|
+
return res;
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
constexpr reference operator[](difference_type n) const {
|
|
743
|
+
return *(*this + n);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
// operator++/--
|
|
747
|
+
|
|
748
|
+
constexpr index_iterator& operator++() {
|
|
749
|
+
++index_;
|
|
750
|
+
return *this;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
constexpr index_iterator operator++(int) {
|
|
754
|
+
auto tmp = *this;
|
|
755
|
+
++*this;
|
|
756
|
+
return tmp;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
constexpr index_iterator& operator--() {
|
|
760
|
+
--index_;
|
|
761
|
+
return *this;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
constexpr index_iterator operator--(int) {
|
|
765
|
+
auto tmp = *this;
|
|
766
|
+
--*this;
|
|
767
|
+
return tmp;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
// operator+/-
|
|
771
|
+
|
|
772
|
+
constexpr index_iterator& operator+=(difference_type n) {
|
|
773
|
+
auto signed_index = static_cast<difference_type>(index_) + n;
|
|
774
|
+
index_ = static_cast<size_type>(signed_index);
|
|
775
|
+
return *this;
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
constexpr index_iterator& operator-=(difference_type n) {
|
|
779
|
+
index_ += -n;
|
|
780
|
+
return *this;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
constexpr friend index_iterator operator+(
|
|
784
|
+
index_iterator x, difference_type n) {
|
|
785
|
+
return x += n;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
constexpr friend index_iterator operator+(
|
|
789
|
+
difference_type n, index_iterator x) {
|
|
790
|
+
return x + n;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
constexpr friend index_iterator operator-(
|
|
794
|
+
index_iterator x, difference_type n) {
|
|
795
|
+
return x -= n;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
constexpr friend difference_type operator-(
|
|
799
|
+
index_iterator x, index_iterator y) {
|
|
800
|
+
assert(x.container_ == y.container_);
|
|
801
|
+
return static_cast<difference_type>(x.index_) -
|
|
802
|
+
static_cast<difference_type>(y.index_);
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
// comparisons
|
|
806
|
+
friend constexpr bool operator==(
|
|
807
|
+
const index_iterator& x, const index_iterator& y) {
|
|
808
|
+
assert(x.container_ == y.container_);
|
|
809
|
+
return x.index_ == y.index_;
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
friend constexpr bool operator!=(
|
|
813
|
+
const index_iterator& x, const index_iterator& y) {
|
|
814
|
+
return !(x == y);
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
friend constexpr bool operator<(
|
|
818
|
+
const index_iterator& x, const index_iterator& y) {
|
|
819
|
+
assert(x.container_ == y.container_);
|
|
820
|
+
return x.index_ < y.index_;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
friend constexpr bool operator<=(
|
|
824
|
+
const index_iterator& x, const index_iterator& y) {
|
|
825
|
+
return !(y < x);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
friend constexpr bool operator>=(
|
|
829
|
+
const index_iterator& x, const index_iterator& y) {
|
|
830
|
+
return !(x < y);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
friend constexpr bool operator>(
|
|
834
|
+
const index_iterator& x, const index_iterator& y) {
|
|
835
|
+
return y < x;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
private:
|
|
839
|
+
container_type* container_ = nullptr;
|
|
840
|
+
size_type index_ = 0;
|
|
841
|
+
};
|
|
842
|
+
|
|
843
|
+
} // namespace folly
|