react-native-windows 0.84.0-preview.9 → 0.84.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/CompositionDynamicAutomationProvider.cpp +5 -0
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +91 -23
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +11 -0
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +6 -4
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +28 -6
- package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +80 -0
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.h +17 -0
- 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/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.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 +10 -1
- package/PropertySheets/React.Cpp.props +7 -6
- package/PropertySheets/WinUI.props +2 -2
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/JustMyXaml.ps1 +8 -8
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
- 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 +5 -8
- package/Scripts/creaternwlib.cmd +10 -23
- 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 +7 -7
- 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 -378
- package/Folly/Folly.vcxproj.filters +0 -558
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{fmt → external/fmt}/cgmanifest.json +0 -0
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,932 @@
|
|
|
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 <cstdint>
|
|
20
|
+
#include <limits>
|
|
21
|
+
#include <type_traits>
|
|
22
|
+
#include <utility>
|
|
23
|
+
|
|
24
|
+
#include <folly/CPortability.h>
|
|
25
|
+
#include <folly/Portability.h>
|
|
26
|
+
#include <folly/Traits.h>
|
|
27
|
+
|
|
28
|
+
namespace folly {
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* FOLLY_DECLVAL(T)
|
|
32
|
+
*
|
|
33
|
+
* This macro works like std::declval<T>() but does the same thing in a way
|
|
34
|
+
* that does not require instantiating a function template.
|
|
35
|
+
*
|
|
36
|
+
* Use this macro instead of std::declval<T>() in places that are widely
|
|
37
|
+
* instantiated to reduce compile-time overhead of instantiating function
|
|
38
|
+
* templates.
|
|
39
|
+
*
|
|
40
|
+
* Note that, like std::declval<T>(), this macro can only be used in
|
|
41
|
+
* unevaluated contexts.
|
|
42
|
+
*
|
|
43
|
+
* There are some small differences between this macro and std::declval<T>().
|
|
44
|
+
* - This macro results in a value of type 'T' instead of 'T&&'.
|
|
45
|
+
* - This macro requires the type T to be a complete type at the
|
|
46
|
+
* point of use.
|
|
47
|
+
* If this is a problem then use FOLLY_DECLVAL(T&&) instead, or if T might
|
|
48
|
+
* be 'void', then use FOLLY_DECLVAL(std::add_rvalue_reference_t<T>).
|
|
49
|
+
*/
|
|
50
|
+
#define FOLLY_DECLVAL(...) static_cast<__VA_ARGS__ (*)() noexcept>(nullptr)()
|
|
51
|
+
|
|
52
|
+
namespace detail {
|
|
53
|
+
template <typename T>
|
|
54
|
+
T decay_1_(T const volatile&&);
|
|
55
|
+
template <typename T>
|
|
56
|
+
T decay_1_(T const&);
|
|
57
|
+
template <typename T>
|
|
58
|
+
T* decay_1_(T*);
|
|
59
|
+
|
|
60
|
+
template <typename T>
|
|
61
|
+
auto decay_0_(int) -> decltype(detail::decay_1_(FOLLY_DECLVAL(T&&)));
|
|
62
|
+
template <typename T>
|
|
63
|
+
auto decay_0_(short) -> void;
|
|
64
|
+
|
|
65
|
+
template <typename T>
|
|
66
|
+
using decay_t = decltype(detail::decay_0_<T>(0));
|
|
67
|
+
} // namespace detail
|
|
68
|
+
|
|
69
|
+
// decay_t
|
|
70
|
+
//
|
|
71
|
+
// Like std::decay_t but possibly faster to compile.
|
|
72
|
+
//
|
|
73
|
+
// mimic: std::decay_t, C++14
|
|
74
|
+
using detail::decay_t;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* copy
|
|
78
|
+
*
|
|
79
|
+
* Usable when you have a function with two overloads:
|
|
80
|
+
*
|
|
81
|
+
* class MyData;
|
|
82
|
+
* void something(MyData&&);
|
|
83
|
+
* void something(const MyData&);
|
|
84
|
+
*
|
|
85
|
+
* Where the purpose is to make copies and moves explicit without having to
|
|
86
|
+
* spell out the full type names - in this case, for copies, to invoke copy
|
|
87
|
+
* constructors.
|
|
88
|
+
*
|
|
89
|
+
* When the caller wants to pass a copy of an lvalue, the caller may:
|
|
90
|
+
*
|
|
91
|
+
* void foo() {
|
|
92
|
+
* MyData data;
|
|
93
|
+
* something(folly::copy(data)); // explicit copy
|
|
94
|
+
* something(std::move(data)); // explicit move
|
|
95
|
+
* something(data); // const& - neither move nor copy
|
|
96
|
+
* }
|
|
97
|
+
*
|
|
98
|
+
* Note: If passed an rvalue, invokes the move-ctor, not the copy-ctor. This
|
|
99
|
+
* can be used to to force a move, where just using std::move would not:
|
|
100
|
+
*
|
|
101
|
+
* folly::copy(std::move(data)); // force-move, not just a cast to &&
|
|
102
|
+
*
|
|
103
|
+
* Note: The following text appears in the standard:
|
|
104
|
+
*
|
|
105
|
+
* In several places in this Clause the operation //DECAY_COPY(x)// is
|
|
106
|
+
* used. All such uses mean call the function `decay_copy(x)` and use the
|
|
107
|
+
* result, where `decay_copy` is defined as follows:
|
|
108
|
+
*
|
|
109
|
+
* template <class T> decay_t<T> decay_copy(T&& v)
|
|
110
|
+
* { return std::forward<T>(v); }
|
|
111
|
+
*
|
|
112
|
+
* http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
|
|
113
|
+
* 30.2.6 `decay_copy` [thread.decaycopy].
|
|
114
|
+
*
|
|
115
|
+
* We mimic it, with a `noexcept` specifier for good measure.
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
template <typename T>
|
|
119
|
+
constexpr detail::decay_t<T> copy(T&& value) noexcept(
|
|
120
|
+
noexcept(detail::decay_t<T>(static_cast<T&&>(value)))) {
|
|
121
|
+
return static_cast<T&&>(value);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// mimic: forward_like, p0847r0
|
|
125
|
+
template <typename Src, typename Dst>
|
|
126
|
+
constexpr like_t<Src, Dst>&& forward_like(Dst&& dst) noexcept {
|
|
127
|
+
return std::forward<like_t<Src, Dst>>(static_cast<Dst&&>(dst));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Initializer lists are a powerful compile time syntax introduced in C++11
|
|
132
|
+
* but due to their often conflicting syntax they are not used by APIs for
|
|
133
|
+
* construction.
|
|
134
|
+
*
|
|
135
|
+
* Further standard conforming compilers *strongly* favor an
|
|
136
|
+
* std::initializer_list overload for construction if one exists. The
|
|
137
|
+
* following is a simple tag used to disambiguate construction with
|
|
138
|
+
* initializer lists and regular uniform initialization.
|
|
139
|
+
*
|
|
140
|
+
* For example consider the following case
|
|
141
|
+
*
|
|
142
|
+
* class Something {
|
|
143
|
+
* public:
|
|
144
|
+
* explicit Something(int);
|
|
145
|
+
* Something(std::initializer_list<int>);
|
|
146
|
+
*
|
|
147
|
+
* operator int();
|
|
148
|
+
* };
|
|
149
|
+
*
|
|
150
|
+
* ...
|
|
151
|
+
* Something something{1}; // SURPRISE!!
|
|
152
|
+
*
|
|
153
|
+
* The last call to instantiate the Something object will go to the
|
|
154
|
+
* initializer_list overload. Which may be surprising to users.
|
|
155
|
+
*
|
|
156
|
+
* If however this tag was used to disambiguate such construction it would be
|
|
157
|
+
* easy for users to see which construction overload their code was referring
|
|
158
|
+
* to. For example
|
|
159
|
+
*
|
|
160
|
+
* class Something {
|
|
161
|
+
* public:
|
|
162
|
+
* explicit Something(int);
|
|
163
|
+
* Something(folly::initlist_construct_t, std::initializer_list<int>);
|
|
164
|
+
*
|
|
165
|
+
* operator int();
|
|
166
|
+
* };
|
|
167
|
+
*
|
|
168
|
+
* ...
|
|
169
|
+
* Something something_one{1}; // not the initializer_list overload
|
|
170
|
+
* Something something_two{folly::initlist_construct, {1}}; // correct
|
|
171
|
+
*/
|
|
172
|
+
struct initlist_construct_t {};
|
|
173
|
+
constexpr initlist_construct_t initlist_construct{};
|
|
174
|
+
|
|
175
|
+
// sorted_unique_t, sorted_unique
|
|
176
|
+
//
|
|
177
|
+
// A generic tag type and value to indicate that some constructor or method
|
|
178
|
+
// accepts a container in which the values are sorted and unique.
|
|
179
|
+
//
|
|
180
|
+
// Example:
|
|
181
|
+
//
|
|
182
|
+
// void takes_numbers(folly::sorted_unique_t, std::vector<int> alist) {
|
|
183
|
+
// assert(std::is_sorted(alist.begin(), alist.end()));
|
|
184
|
+
// assert(std::unique(alist.begin(), alist.end()) == alist.end());
|
|
185
|
+
// for (i : alist) {
|
|
186
|
+
// // some behavior which safe only when alist is sorted and unique
|
|
187
|
+
// }
|
|
188
|
+
// }
|
|
189
|
+
// void takes_numbers(std::vector<int> alist) {
|
|
190
|
+
// std::sort(alist.begin(), alist.end());
|
|
191
|
+
// alist.erase(std::unique(alist.begin(), alist.end()), alist.end());
|
|
192
|
+
// takes_numbers(folly::sorted_unique, alist);
|
|
193
|
+
// }
|
|
194
|
+
//
|
|
195
|
+
// mimic: std::sorted_unique_t, std::sorted_unique, p0429r6
|
|
196
|
+
struct sorted_unique_t {};
|
|
197
|
+
constexpr sorted_unique_t sorted_unique{};
|
|
198
|
+
|
|
199
|
+
// sorted_equivalent_t, sorted_equivalent
|
|
200
|
+
//
|
|
201
|
+
// A generic tag type and value to indicate that some constructor or method
|
|
202
|
+
// accepts a container in which the values are sorted but not necessarily
|
|
203
|
+
// unique.
|
|
204
|
+
//
|
|
205
|
+
// Example:
|
|
206
|
+
//
|
|
207
|
+
// void takes_numbers(folly::sorted_equivalent_t, std::vector<int> alist) {
|
|
208
|
+
// assert(std::is_sorted(alist.begin(), alist.end()));
|
|
209
|
+
// for (i : alist) {
|
|
210
|
+
// // some behavior which safe only when alist is sorted
|
|
211
|
+
// }
|
|
212
|
+
// }
|
|
213
|
+
// void takes_numbers(std::vector<int> alist) {
|
|
214
|
+
// std::sort(alist.begin(), alist.end());
|
|
215
|
+
// takes_numbers(folly::sorted_equivalent, alist);
|
|
216
|
+
// }
|
|
217
|
+
//
|
|
218
|
+
// mimic: std::sorted_equivalent_t, std::sorted_equivalent, p0429r6
|
|
219
|
+
struct sorted_equivalent_t {};
|
|
220
|
+
constexpr sorted_equivalent_t sorted_equivalent{};
|
|
221
|
+
|
|
222
|
+
template <typename T>
|
|
223
|
+
struct transparent : T {
|
|
224
|
+
using is_transparent = void;
|
|
225
|
+
using T::T;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* A simple function object that passes its argument through unchanged.
|
|
230
|
+
*
|
|
231
|
+
* Example:
|
|
232
|
+
*
|
|
233
|
+
* int i = 42;
|
|
234
|
+
* int &j = identity(i);
|
|
235
|
+
* assert(&i == &j);
|
|
236
|
+
*
|
|
237
|
+
* Warning: passing a prvalue through identity turns it into an xvalue,
|
|
238
|
+
* which can effect whether lifetime extension occurs or not. For instance:
|
|
239
|
+
*
|
|
240
|
+
* auto&& x = std::make_unique<int>(42);
|
|
241
|
+
* cout << *x ; // OK, x refers to a valid unique_ptr.
|
|
242
|
+
*
|
|
243
|
+
* auto&& y = identity(std::make_unique<int>(42));
|
|
244
|
+
* cout << *y ; // ERROR: y did not lifetime-extend the unique_ptr. It
|
|
245
|
+
* // is no longer valid
|
|
246
|
+
*/
|
|
247
|
+
struct identity_fn {
|
|
248
|
+
template <class T>
|
|
249
|
+
constexpr T&& operator()(T&& x) const noexcept {
|
|
250
|
+
return static_cast<T&&>(x);
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
using Identity = identity_fn;
|
|
254
|
+
inline constexpr identity_fn identity{};
|
|
255
|
+
|
|
256
|
+
/// literal_string
|
|
257
|
+
///
|
|
258
|
+
/// A structural type representing a literal string. A structural type may be
|
|
259
|
+
/// a non-type template argument.
|
|
260
|
+
///
|
|
261
|
+
/// May at times be useful since language-level literal strings are not allowed
|
|
262
|
+
/// as non-type template arguments.
|
|
263
|
+
///
|
|
264
|
+
/// This may typically be used with vtag for passing the literal string as a
|
|
265
|
+
/// constant-expression via a non-type template argument.
|
|
266
|
+
///
|
|
267
|
+
/// Example:
|
|
268
|
+
///
|
|
269
|
+
/// template <size_t N, literal_string<char, N> Str>
|
|
270
|
+
/// void do_something_with_literal_string(vtag_t<Str>);
|
|
271
|
+
///
|
|
272
|
+
/// void do_something() {
|
|
273
|
+
/// do_something_with_literal_string(vtag<literal_string{"foobar"}>);
|
|
274
|
+
/// }
|
|
275
|
+
template <typename C, std::size_t N>
|
|
276
|
+
struct literal_string {
|
|
277
|
+
C buffer[N] = {};
|
|
278
|
+
|
|
279
|
+
FOLLY_CONSTEVAL /* implicit */ literal_string(C const (&buf)[N]) noexcept {
|
|
280
|
+
for (std::size_t i = 0; i < N; ++i) {
|
|
281
|
+
buffer[i] = buf[i];
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
constexpr std::size_t size() const noexcept { return N - 1; }
|
|
286
|
+
constexpr C const* data() const noexcept { return buffer; }
|
|
287
|
+
constexpr C const* c_str() const noexcept { return buffer; }
|
|
288
|
+
|
|
289
|
+
template <
|
|
290
|
+
typename String,
|
|
291
|
+
decltype((void(String(FOLLY_DECLVAL(C const*), N - 1)), 0)) = 0>
|
|
292
|
+
constexpr explicit operator String() const //
|
|
293
|
+
noexcept(noexcept(String(FOLLY_DECLVAL(C const*), N - 1))) {
|
|
294
|
+
return String(data(), N - 1);
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
inline namespace literals {
|
|
299
|
+
inline namespace string_literals {
|
|
300
|
+
|
|
301
|
+
#if FOLLY_CPLUSPLUS >= 202002 && !defined(__NVCC__)
|
|
302
|
+
template <literal_string Str>
|
|
303
|
+
FOLLY_CONSTEVAL decltype(Str) operator""_lit() noexcept {
|
|
304
|
+
return Str;
|
|
305
|
+
}
|
|
306
|
+
template <literal_string Str>
|
|
307
|
+
FOLLY_CONSTEVAL vtag_t<Str> operator""_litv() noexcept {
|
|
308
|
+
return vtag<Str>;
|
|
309
|
+
}
|
|
310
|
+
#endif
|
|
311
|
+
|
|
312
|
+
} // namespace string_literals
|
|
313
|
+
} // namespace literals
|
|
314
|
+
|
|
315
|
+
namespace detail {
|
|
316
|
+
|
|
317
|
+
template <typename T>
|
|
318
|
+
struct inheritable_inherit_ : T {
|
|
319
|
+
using T::T;
|
|
320
|
+
template <
|
|
321
|
+
typename... A,
|
|
322
|
+
std::enable_if_t<std::is_constructible<T, A...>::value, int> = 0>
|
|
323
|
+
/* implicit */ FOLLY_ERASE inheritable_inherit_(A&&... a) noexcept(
|
|
324
|
+
noexcept(T(static_cast<A&&>(a)...)))
|
|
325
|
+
: T(static_cast<A&&>(a)...) {}
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
template <typename T>
|
|
329
|
+
struct inheritable_contain_ {
|
|
330
|
+
T v;
|
|
331
|
+
template <
|
|
332
|
+
typename... A,
|
|
333
|
+
std::enable_if_t<std::is_constructible<T, A...>::value, int> = 0>
|
|
334
|
+
/* implicit */ FOLLY_ERASE inheritable_contain_(A&&... a) noexcept(
|
|
335
|
+
noexcept(T(static_cast<A&&>(a)...)))
|
|
336
|
+
: v(static_cast<A&&>(a)...) {}
|
|
337
|
+
FOLLY_ERASE operator T&() & noexcept { return v; }
|
|
338
|
+
FOLLY_ERASE operator T&&() && noexcept { return static_cast<T&&>(v); }
|
|
339
|
+
FOLLY_ERASE operator T const&() const& noexcept { return v; }
|
|
340
|
+
FOLLY_ERASE operator T const&&() const&& noexcept {
|
|
341
|
+
return static_cast<T const&&>(v);
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
template <bool>
|
|
346
|
+
struct inheritable_;
|
|
347
|
+
template <>
|
|
348
|
+
struct inheritable_<false> {
|
|
349
|
+
template <typename T>
|
|
350
|
+
using apply = inheritable_inherit_<T>;
|
|
351
|
+
};
|
|
352
|
+
template <>
|
|
353
|
+
struct inheritable_<true> {
|
|
354
|
+
template <typename T>
|
|
355
|
+
using apply = inheritable_contain_<T>;
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
// inheritable
|
|
359
|
+
//
|
|
360
|
+
// A class wrapping an arbitrary type T which is always inheritable, and which
|
|
361
|
+
// enables empty-base-optimization when possible.
|
|
362
|
+
template <typename T>
|
|
363
|
+
using inheritable =
|
|
364
|
+
typename inheritable_<std::is_final<T>::value>::template apply<T>;
|
|
365
|
+
|
|
366
|
+
} // namespace detail
|
|
367
|
+
|
|
368
|
+
// Prevent child classes from finding anything in folly:: by ADL.
|
|
369
|
+
namespace moveonly_ {
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Disallow copy but not move in derived types. This is essentially
|
|
373
|
+
* boost::noncopyable (the implementation is almost identical), except:
|
|
374
|
+
* 1) It doesn't delete move constructor and move assignment.
|
|
375
|
+
* 2) It has public methods, enabling aggregate initialization.
|
|
376
|
+
*/
|
|
377
|
+
struct MoveOnly {
|
|
378
|
+
constexpr MoveOnly() noexcept = default;
|
|
379
|
+
~MoveOnly() noexcept = default;
|
|
380
|
+
|
|
381
|
+
MoveOnly(MoveOnly&&) noexcept = default;
|
|
382
|
+
MoveOnly& operator=(MoveOnly&&) noexcept = default;
|
|
383
|
+
MoveOnly(const MoveOnly&) = delete;
|
|
384
|
+
MoveOnly& operator=(const MoveOnly&) = delete;
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Disallow copy and move for derived types. This is essentially
|
|
389
|
+
* boost::noncopyable (the implementation is almost identical), except it has
|
|
390
|
+
* public methods, enabling aggregate initialization.
|
|
391
|
+
*/
|
|
392
|
+
struct NonCopyableNonMovable {
|
|
393
|
+
constexpr NonCopyableNonMovable() noexcept = default;
|
|
394
|
+
~NonCopyableNonMovable() noexcept = default;
|
|
395
|
+
|
|
396
|
+
NonCopyableNonMovable(NonCopyableNonMovable&&) = delete;
|
|
397
|
+
NonCopyableNonMovable& operator=(NonCopyableNonMovable&&) = delete;
|
|
398
|
+
NonCopyableNonMovable(const NonCopyableNonMovable&) = delete;
|
|
399
|
+
NonCopyableNonMovable& operator=(const NonCopyableNonMovable&) = delete;
|
|
400
|
+
};
|
|
401
|
+
|
|
402
|
+
struct Default {};
|
|
403
|
+
|
|
404
|
+
template <bool Copy, bool Move>
|
|
405
|
+
using EnableCopyMove = std::conditional_t<
|
|
406
|
+
Copy,
|
|
407
|
+
Default,
|
|
408
|
+
std::conditional_t<Move, MoveOnly, NonCopyableNonMovable>>;
|
|
409
|
+
|
|
410
|
+
} // namespace moveonly_
|
|
411
|
+
|
|
412
|
+
using moveonly_::MoveOnly;
|
|
413
|
+
using moveonly_::NonCopyableNonMovable;
|
|
414
|
+
|
|
415
|
+
/// variadic_noop
|
|
416
|
+
/// variadic_noop_fn
|
|
417
|
+
///
|
|
418
|
+
/// An invocable object and type that has no side-effects - that does nothing
|
|
419
|
+
/// when invoked regardless of the arguments with which it is invoked - and that
|
|
420
|
+
/// returns void.
|
|
421
|
+
///
|
|
422
|
+
/// May be invoked with any arguments. Returns void.
|
|
423
|
+
struct variadic_noop_fn {
|
|
424
|
+
template <typename... A>
|
|
425
|
+
constexpr void operator()(A&&...) const noexcept {}
|
|
426
|
+
};
|
|
427
|
+
inline constexpr variadic_noop_fn variadic_noop;
|
|
428
|
+
|
|
429
|
+
/// variadic_constant_of
|
|
430
|
+
/// variadic_constant_of_fn
|
|
431
|
+
///
|
|
432
|
+
/// An invocable object and type that has no side-effects - that does nothing
|
|
433
|
+
/// when invoked regardless of the arguments with which it is invoked - and that
|
|
434
|
+
/// returns a constant value.
|
|
435
|
+
template <auto Value>
|
|
436
|
+
struct variadic_constant_of_fn {
|
|
437
|
+
using value_type = decltype(Value);
|
|
438
|
+
static inline constexpr value_type value = Value;
|
|
439
|
+
template <typename... A>
|
|
440
|
+
constexpr value_type operator()(A&&...) const noexcept {
|
|
441
|
+
return value;
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
template <auto Value>
|
|
445
|
+
inline constexpr variadic_constant_of_fn<Value> variadic_constant_of;
|
|
446
|
+
|
|
447
|
+
// unsafe_default_initialized
|
|
448
|
+
// unsafe_default_initialized_cv
|
|
449
|
+
//
|
|
450
|
+
// An object which is explicitly convertible to any default-constructible type
|
|
451
|
+
// and which, upon conversion, yields a default-initialized value of that type.
|
|
452
|
+
//
|
|
453
|
+
// https://en.cppreference.com/w/cpp/language/default_initialization
|
|
454
|
+
//
|
|
455
|
+
// For fundamental types, a default-initialized instance may have indeterminate
|
|
456
|
+
// value. Reading an indeterminate value is undefined behavior but may offer a
|
|
457
|
+
// performance optimization. When using an indeterminate value as a performance
|
|
458
|
+
// optimization, it is best to be explicit.
|
|
459
|
+
//
|
|
460
|
+
// Useful as an escape hatch when enabling warnings or errors:
|
|
461
|
+
// * gcc:
|
|
462
|
+
// * uninitialized
|
|
463
|
+
// * maybe-uninitialized
|
|
464
|
+
// * clang:
|
|
465
|
+
// * uninitialized
|
|
466
|
+
// * conditional-uninitialized
|
|
467
|
+
// * sometimes-uninitialized
|
|
468
|
+
// * uninitialized-const-reference
|
|
469
|
+
// * msvc:
|
|
470
|
+
// * C4701: potentially uninitialized local variable used
|
|
471
|
+
// * C4703: potentially uninitialized local pointer variable used
|
|
472
|
+
//
|
|
473
|
+
// Example:
|
|
474
|
+
//
|
|
475
|
+
// int local = folly::unsafe_default_initialized;
|
|
476
|
+
// store_value_into_int_ptr(&value); // suppresses possible warning
|
|
477
|
+
// use_value(value); // suppresses possible warning
|
|
478
|
+
struct unsafe_default_initialized_cv {
|
|
479
|
+
FOLLY_PUSH_WARNING
|
|
480
|
+
// MSVC requires warning disables to be outside of function definition
|
|
481
|
+
// Uninitialized local variable 'uninit' used
|
|
482
|
+
FOLLY_MSVC_DISABLE_WARNING(4700)
|
|
483
|
+
// Potentially uninitialized local variable 'uninit' used
|
|
484
|
+
FOLLY_MSVC_DISABLE_WARNING(4701)
|
|
485
|
+
// Potentially uninitialized local pointer variable 'uninit' used
|
|
486
|
+
FOLLY_MSVC_DISABLE_WARNING(4703)
|
|
487
|
+
FOLLY_GNU_DISABLE_WARNING("-Wuninitialized")
|
|
488
|
+
// Clang doesn't implement -Wmaybe-uninitialized and warns about it
|
|
489
|
+
FOLLY_GCC_DISABLE_WARNING("-Wmaybe-uninitialized")
|
|
490
|
+
template <typename T>
|
|
491
|
+
FOLLY_ERASE constexpr /* implicit */ operator T() const noexcept {
|
|
492
|
+
#if defined(__cpp_lib_is_constant_evaluated)
|
|
493
|
+
#if __cpp_lib_is_constant_evaluated >= 201811L
|
|
494
|
+
#if (defined(_MSC_VER) && !defined(__MSVC_RUNTIME_CHECKS)) || \
|
|
495
|
+
(defined(__clang__) && !defined(__GNUC__))
|
|
496
|
+
if (!std::is_constant_evaluated()) {
|
|
497
|
+
T uninit;
|
|
498
|
+
return uninit;
|
|
499
|
+
}
|
|
500
|
+
#endif
|
|
501
|
+
#endif
|
|
502
|
+
#endif
|
|
503
|
+
return T();
|
|
504
|
+
}
|
|
505
|
+
FOLLY_POP_WARNING
|
|
506
|
+
};
|
|
507
|
+
inline constexpr unsafe_default_initialized_cv unsafe_default_initialized{};
|
|
508
|
+
|
|
509
|
+
/// to_bool
|
|
510
|
+
/// to_bool_fn
|
|
511
|
+
///
|
|
512
|
+
/// Constructs a boolean from the argument.
|
|
513
|
+
///
|
|
514
|
+
/// Particularly useful for testing sometimes-weak function declarations. They
|
|
515
|
+
/// may be declared weak on some platforms but not on others. GCC likes to warn
|
|
516
|
+
/// about them but the warning is unhelpful.
|
|
517
|
+
struct to_bool_fn {
|
|
518
|
+
template <typename..., typename T>
|
|
519
|
+
FOLLY_ERASE constexpr auto operator()(T const& t) const noexcept
|
|
520
|
+
-> decltype(static_cast<bool>(t)) {
|
|
521
|
+
FOLLY_PUSH_WARNING
|
|
522
|
+
FOLLY_GCC_DISABLE_WARNING("-Waddress")
|
|
523
|
+
FOLLY_GCC_DISABLE_WARNING("-Wnonnull-compare")
|
|
524
|
+
return static_cast<bool>(t);
|
|
525
|
+
FOLLY_POP_WARNING
|
|
526
|
+
}
|
|
527
|
+
};
|
|
528
|
+
inline constexpr to_bool_fn to_bool{};
|
|
529
|
+
|
|
530
|
+
struct to_signed_fn {
|
|
531
|
+
template <typename..., typename T>
|
|
532
|
+
constexpr auto operator()(T const& t) const noexcept ->
|
|
533
|
+
typename std::make_signed<T>::type {
|
|
534
|
+
using S = typename std::make_signed<T>::type;
|
|
535
|
+
// note: static_cast<S>(t) would be more straightforward, but it would also
|
|
536
|
+
// be implementation-defined behavior and that is typically to be avoided;
|
|
537
|
+
// the following code optimized into the same thing, though
|
|
538
|
+
constexpr auto m = static_cast<T>(std::numeric_limits<S>::max());
|
|
539
|
+
return m < t ? -static_cast<S>(~t) + S{-1} : static_cast<S>(t);
|
|
540
|
+
}
|
|
541
|
+
};
|
|
542
|
+
inline constexpr to_signed_fn to_signed{};
|
|
543
|
+
|
|
544
|
+
struct to_unsigned_fn {
|
|
545
|
+
template <typename..., typename T>
|
|
546
|
+
constexpr auto operator()(T const& t) const noexcept ->
|
|
547
|
+
typename std::make_unsigned<T>::type {
|
|
548
|
+
using U = typename std::make_unsigned<T>::type;
|
|
549
|
+
return static_cast<U>(t);
|
|
550
|
+
}
|
|
551
|
+
};
|
|
552
|
+
inline constexpr to_unsigned_fn to_unsigned{};
|
|
553
|
+
|
|
554
|
+
namespace detail {
|
|
555
|
+
template <typename Src, typename Dst>
|
|
556
|
+
inline constexpr bool is_to_narrow_convertible_v =
|
|
557
|
+
(std::is_integral<Dst>::value) &&
|
|
558
|
+
(std::is_signed<Dst>::value == std::is_signed<Src>::value);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
template <typename Src>
|
|
562
|
+
class to_narrow_convertible {
|
|
563
|
+
static_assert(std::is_integral<Src>::value, "not an integer");
|
|
564
|
+
|
|
565
|
+
template <typename Dst>
|
|
566
|
+
struct to_
|
|
567
|
+
: std::bool_constant<detail::is_to_narrow_convertible_v<Src, Dst>> {};
|
|
568
|
+
|
|
569
|
+
public:
|
|
570
|
+
explicit constexpr to_narrow_convertible(Src const& value) noexcept
|
|
571
|
+
: value_(value) {}
|
|
572
|
+
explicit to_narrow_convertible(to_narrow_convertible const&) = default;
|
|
573
|
+
explicit to_narrow_convertible(to_narrow_convertible&&) = default;
|
|
574
|
+
to_narrow_convertible& operator=(to_narrow_convertible const&) = default;
|
|
575
|
+
to_narrow_convertible& operator=(to_narrow_convertible&&) = default;
|
|
576
|
+
|
|
577
|
+
template <typename Dst, std::enable_if_t<to_<Dst>::value, int> = 0>
|
|
578
|
+
/* implicit */ constexpr operator Dst() const noexcept {
|
|
579
|
+
FOLLY_PUSH_WARNING
|
|
580
|
+
FOLLY_MSVC_DISABLE_WARNING(4244) // lossy conversion: arguments
|
|
581
|
+
FOLLY_MSVC_DISABLE_WARNING(4267) // lossy conversion: variables
|
|
582
|
+
FOLLY_GNU_DISABLE_WARNING("-Wconversion")
|
|
583
|
+
return value_;
|
|
584
|
+
FOLLY_POP_WARNING
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
private:
|
|
588
|
+
Src value_;
|
|
589
|
+
};
|
|
590
|
+
|
|
591
|
+
// to_narrow
|
|
592
|
+
//
|
|
593
|
+
// A utility for performing explicit possibly-narrowing integral conversion
|
|
594
|
+
// without specifying the destination type. Does not permit changing signs.
|
|
595
|
+
// Sometimes preferable to static_cast<Dst>(src) to document the intended
|
|
596
|
+
// semantics of the cast.
|
|
597
|
+
//
|
|
598
|
+
// Models explicit conversion with an elided destination type. Sits in between
|
|
599
|
+
// a stricter explicit conversion with a named destination type and a more
|
|
600
|
+
// lenient implicit conversion. Implemented with implicit conversion in order
|
|
601
|
+
// to take advantage of the undefined-behavior sanitizer's inspection of all
|
|
602
|
+
// implicit conversions - it checks for truncation, with suppressions in place
|
|
603
|
+
// for warnings which guard against narrowing implicit conversions.
|
|
604
|
+
struct to_narrow_fn {
|
|
605
|
+
template <typename..., typename Src>
|
|
606
|
+
constexpr auto operator()(Src const& src) const noexcept
|
|
607
|
+
-> to_narrow_convertible<Src> {
|
|
608
|
+
return to_narrow_convertible<Src>{src};
|
|
609
|
+
}
|
|
610
|
+
};
|
|
611
|
+
inline constexpr to_narrow_fn to_narrow{};
|
|
612
|
+
|
|
613
|
+
template <typename Src>
|
|
614
|
+
class to_integral_convertible {
|
|
615
|
+
static_assert(std::is_floating_point<Src>::value, "not a floating-point");
|
|
616
|
+
|
|
617
|
+
template <typename Dst>
|
|
618
|
+
static constexpr bool to_ = std::is_integral<Dst>::value;
|
|
619
|
+
|
|
620
|
+
public:
|
|
621
|
+
explicit constexpr to_integral_convertible(Src const& value) noexcept
|
|
622
|
+
: value_(value) {}
|
|
623
|
+
|
|
624
|
+
explicit to_integral_convertible(to_integral_convertible const&) = default;
|
|
625
|
+
explicit to_integral_convertible(to_integral_convertible&&) = default;
|
|
626
|
+
to_integral_convertible& operator=(to_integral_convertible const&) = default;
|
|
627
|
+
to_integral_convertible& operator=(to_integral_convertible&&) = default;
|
|
628
|
+
|
|
629
|
+
template <typename Dst, std::enable_if_t<to_<Dst>, int> = 0>
|
|
630
|
+
/* implicit */ constexpr operator Dst() const noexcept {
|
|
631
|
+
FOLLY_PUSH_WARNING
|
|
632
|
+
FOLLY_MSVC_DISABLE_WARNING(4244) // lossy conversion: arguments
|
|
633
|
+
FOLLY_MSVC_DISABLE_WARNING(4267) // lossy conversion: variables
|
|
634
|
+
FOLLY_GNU_DISABLE_WARNING("-Wconversion")
|
|
635
|
+
return value_;
|
|
636
|
+
FOLLY_POP_WARNING
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
private:
|
|
640
|
+
Src value_;
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
// to_integral
|
|
644
|
+
//
|
|
645
|
+
// A utility for performing explicit floating-point-to-integral conversion
|
|
646
|
+
// without specifying the destination type. Sometimes preferable to
|
|
647
|
+
// static_cast<Dst>(src) to document the intended semantics of the cast.
|
|
648
|
+
//
|
|
649
|
+
// Models explicit conversion with an elided destination type. Sits in between
|
|
650
|
+
// a stricter explicit conversion with a named destination type and a more
|
|
651
|
+
// lenient implicit conversion. Implemented with implicit conversion in order
|
|
652
|
+
// to take advantage of the undefined-behavior sanitizer's inspection of all
|
|
653
|
+
// implicit conversions.
|
|
654
|
+
struct to_integral_fn {
|
|
655
|
+
template <typename..., typename Src>
|
|
656
|
+
constexpr auto operator()(Src const& src) const noexcept
|
|
657
|
+
-> to_integral_convertible<Src> {
|
|
658
|
+
return to_integral_convertible<Src>{src};
|
|
659
|
+
}
|
|
660
|
+
};
|
|
661
|
+
inline constexpr to_integral_fn to_integral{};
|
|
662
|
+
|
|
663
|
+
template <typename Src>
|
|
664
|
+
class to_floating_point_convertible {
|
|
665
|
+
static_assert(std::is_integral<Src>::value, "not a floating-point");
|
|
666
|
+
|
|
667
|
+
template <typename Dst>
|
|
668
|
+
static constexpr bool to_ = std::is_floating_point<Dst>::value;
|
|
669
|
+
|
|
670
|
+
public:
|
|
671
|
+
explicit constexpr to_floating_point_convertible(Src const& value) noexcept
|
|
672
|
+
: value_(value) {}
|
|
673
|
+
|
|
674
|
+
explicit to_floating_point_convertible(to_floating_point_convertible const&) =
|
|
675
|
+
default;
|
|
676
|
+
explicit to_floating_point_convertible(to_floating_point_convertible&&) =
|
|
677
|
+
default;
|
|
678
|
+
to_floating_point_convertible& operator=(
|
|
679
|
+
to_floating_point_convertible const&) = default;
|
|
680
|
+
to_floating_point_convertible& operator=(to_floating_point_convertible&&) =
|
|
681
|
+
default;
|
|
682
|
+
|
|
683
|
+
template <typename Dst, std::enable_if_t<to_<Dst>, int> = 0>
|
|
684
|
+
/* implicit */ constexpr operator Dst() const noexcept {
|
|
685
|
+
FOLLY_PUSH_WARNING
|
|
686
|
+
FOLLY_GNU_DISABLE_WARNING("-Wconversion")
|
|
687
|
+
return value_;
|
|
688
|
+
FOLLY_POP_WARNING
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
private:
|
|
692
|
+
Src value_;
|
|
693
|
+
};
|
|
694
|
+
|
|
695
|
+
// to_floating_point
|
|
696
|
+
//
|
|
697
|
+
// A utility for performing explicit integral-to-floating-point conversion
|
|
698
|
+
// without specifying the destination type. Sometimes preferable to
|
|
699
|
+
// static_cast<Dst>(src) to document the intended semantics of the cast.
|
|
700
|
+
//
|
|
701
|
+
// Models explicit conversion with an elided destination type. Sits in between
|
|
702
|
+
// a stricter explicit conversion with a named destination type and a more
|
|
703
|
+
// lenient implicit conversion. Implemented with implicit conversion in order
|
|
704
|
+
// to take advantage of the undefined-behavior sanitizer's inspection of all
|
|
705
|
+
// implicit conversions.
|
|
706
|
+
struct to_floating_point_fn {
|
|
707
|
+
template <typename..., typename Src>
|
|
708
|
+
constexpr auto operator()(Src const& src) const noexcept
|
|
709
|
+
-> to_floating_point_convertible<Src> {
|
|
710
|
+
return to_floating_point_convertible<Src>{src};
|
|
711
|
+
}
|
|
712
|
+
};
|
|
713
|
+
inline constexpr to_floating_point_fn to_floating_point{};
|
|
714
|
+
|
|
715
|
+
struct to_underlying_fn {
|
|
716
|
+
template <typename..., class E>
|
|
717
|
+
constexpr std::underlying_type_t<E> operator()(E e) const noexcept {
|
|
718
|
+
static_assert(std::is_enum<E>::value, "not an enum type");
|
|
719
|
+
return static_cast<std::underlying_type_t<E>>(e);
|
|
720
|
+
}
|
|
721
|
+
};
|
|
722
|
+
inline constexpr to_underlying_fn to_underlying{};
|
|
723
|
+
|
|
724
|
+
namespace detail {
|
|
725
|
+
template <typename R>
|
|
726
|
+
using invocable_to_detect = decltype(FOLLY_DECLVAL(R)());
|
|
727
|
+
|
|
728
|
+
template <
|
|
729
|
+
typename F,
|
|
730
|
+
// MSVC 14.16.27023 does not permit these to be in the class body:
|
|
731
|
+
// error C2833: 'operator decltype' is not a recognized operator or type
|
|
732
|
+
// TODO: return these to the class body and remove the static assertions
|
|
733
|
+
typename TML = detected_t<invocable_to_detect, F&>,
|
|
734
|
+
typename TCL = detected_t<invocable_to_detect, F const&>,
|
|
735
|
+
typename TMR = detected_t<invocable_to_detect, F&&>,
|
|
736
|
+
typename TCR = detected_t<invocable_to_detect, F const&&>>
|
|
737
|
+
class invocable_to_convertible : private inheritable<F> {
|
|
738
|
+
private:
|
|
739
|
+
static_assert(std::is_same<F, decay_t<F>>::value, "mismatch");
|
|
740
|
+
|
|
741
|
+
template <typename R>
|
|
742
|
+
using result_t = detected_t<invocable_to_detect, R>;
|
|
743
|
+
template <typename R>
|
|
744
|
+
static constexpr bool detected_v = is_detected_v<invocable_to_detect, R>;
|
|
745
|
+
template <typename R>
|
|
746
|
+
using if_invocable_as_v = std::enable_if_t<detected_v<R>, int>;
|
|
747
|
+
template <typename R>
|
|
748
|
+
static constexpr bool nx_v = noexcept(FOLLY_DECLVAL(R)());
|
|
749
|
+
template <typename G>
|
|
750
|
+
static constexpr bool constructible_v = std::is_constructible<F, G&&>::value;
|
|
751
|
+
|
|
752
|
+
using FML = F&;
|
|
753
|
+
using FCL = F const&;
|
|
754
|
+
using FMR = F&&;
|
|
755
|
+
using FCR = F const&&;
|
|
756
|
+
static_assert(std::is_same<TML, result_t<FML>>::value, "mismatch");
|
|
757
|
+
static_assert(std::is_same<TCL, result_t<FCL>>::value, "mismatch");
|
|
758
|
+
static_assert(std::is_same<TMR, result_t<FMR>>::value, "mismatch");
|
|
759
|
+
static_assert(std::is_same<TCR, result_t<FCR>>::value, "mismatch");
|
|
760
|
+
|
|
761
|
+
public:
|
|
762
|
+
template <typename G, std::enable_if_t<constructible_v<G&&>, int> = 0>
|
|
763
|
+
FOLLY_ERASE explicit constexpr invocable_to_convertible(G&& g) noexcept(
|
|
764
|
+
noexcept(F(static_cast<G&&>(g))))
|
|
765
|
+
: inheritable<F>(static_cast<G&&>(g)) {}
|
|
766
|
+
|
|
767
|
+
template <typename..., typename R = FML, if_invocable_as_v<R> = 0>
|
|
768
|
+
FOLLY_ERASE constexpr operator TML() & noexcept(nx_v<R>) {
|
|
769
|
+
return static_cast<FML>(*this)();
|
|
770
|
+
}
|
|
771
|
+
template <typename..., typename R = FCL, if_invocable_as_v<R> = 0>
|
|
772
|
+
FOLLY_ERASE constexpr operator TCL() const& noexcept(nx_v<R>) {
|
|
773
|
+
return static_cast<FCL>(*this)();
|
|
774
|
+
}
|
|
775
|
+
template <typename..., typename R = FMR, if_invocable_as_v<R> = 0>
|
|
776
|
+
FOLLY_ERASE constexpr operator TMR() && noexcept(nx_v<R>) {
|
|
777
|
+
return static_cast<FMR>(*this)();
|
|
778
|
+
}
|
|
779
|
+
template <typename..., typename R = FCR, if_invocable_as_v<R> = 0>
|
|
780
|
+
FOLLY_ERASE constexpr operator TCR() const&& noexcept(nx_v<R>) {
|
|
781
|
+
return static_cast<FCR>(*this)();
|
|
782
|
+
}
|
|
783
|
+
};
|
|
784
|
+
} // namespace detail
|
|
785
|
+
|
|
786
|
+
// invocable_to
|
|
787
|
+
// invocable_to_fn
|
|
788
|
+
//
|
|
789
|
+
// Given an invocable, returns an object which is implicitly convertible to the
|
|
790
|
+
// type which the invocable returns when invoked with no arguments. Conversion
|
|
791
|
+
// invokes the invocables and returns the value.
|
|
792
|
+
//
|
|
793
|
+
// The return object has unspecified type with the following semantics:
|
|
794
|
+
// * It stores a decay-copy of the passed invocable.
|
|
795
|
+
// * It defines four-way conversion operators. Each conversion operator purely
|
|
796
|
+
// forwards to the invocable as forwarded-like the convertible, and has the
|
|
797
|
+
// same exception specification and the same participation in overload
|
|
798
|
+
// resolution as invocation of the invocable.
|
|
799
|
+
//
|
|
800
|
+
// Example:
|
|
801
|
+
//
|
|
802
|
+
// Given a setup:
|
|
803
|
+
//
|
|
804
|
+
// struct stable {
|
|
805
|
+
// int value = 0;
|
|
806
|
+
// stable() = default;
|
|
807
|
+
// stable(stable const&); // expensive!
|
|
808
|
+
// };
|
|
809
|
+
// std::list<stable const> list;
|
|
810
|
+
//
|
|
811
|
+
// The goal is to insert a stable with a value of 7 to the back of the list.
|
|
812
|
+
//
|
|
813
|
+
// The obvious ways are expensive:
|
|
814
|
+
//
|
|
815
|
+
// stable obj;
|
|
816
|
+
// obj.value = 7;
|
|
817
|
+
// list.push_back(obj); // or variations with emplace_back or std::move
|
|
818
|
+
//
|
|
819
|
+
// With a lambda and copy elision optimization (NRVO), the expense remains:
|
|
820
|
+
//
|
|
821
|
+
// list.push_back(std::invoke([] {
|
|
822
|
+
// stable obj;
|
|
823
|
+
// obj.value = 7;
|
|
824
|
+
// return obj;
|
|
825
|
+
// }));
|
|
826
|
+
//
|
|
827
|
+
// But conversion, as done with this utility, makes this goal achievable.
|
|
828
|
+
//
|
|
829
|
+
// list.emplace_back(folly::invocable_to([] {
|
|
830
|
+
// stable obj;
|
|
831
|
+
// obj.value = 7;
|
|
832
|
+
// return obj;
|
|
833
|
+
// }));
|
|
834
|
+
struct invocable_to_fn {
|
|
835
|
+
template <
|
|
836
|
+
typename F,
|
|
837
|
+
typename...,
|
|
838
|
+
typename D = detail::decay_t<F>,
|
|
839
|
+
typename R = detail::invocable_to_convertible<D>,
|
|
840
|
+
std::enable_if_t<std::is_constructible<D, F&&>::value, int> = 0>
|
|
841
|
+
FOLLY_ERASE constexpr R operator()(F&& f) const
|
|
842
|
+
noexcept(noexcept(R(static_cast<F&&>(f)))) {
|
|
843
|
+
return R(static_cast<F&&>(f));
|
|
844
|
+
}
|
|
845
|
+
};
|
|
846
|
+
inline constexpr invocable_to_fn invocable_to{};
|
|
847
|
+
|
|
848
|
+
#define FOLLY_DETAIL_FORWARD_BODY(...) \
|
|
849
|
+
noexcept(noexcept(__VA_ARGS__))->decltype(__VA_ARGS__) { \
|
|
850
|
+
return __VA_ARGS__; \
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
/// FOLLY_FOR_EACH_THIS_OVERLOAD_IN_CLASS_BODY_DELEGATE
|
|
854
|
+
///
|
|
855
|
+
/// Helper macro to add 4 delegated, qualifier-overloaded methods to a class
|
|
856
|
+
///
|
|
857
|
+
/// Example:
|
|
858
|
+
///
|
|
859
|
+
/// template <typename T>
|
|
860
|
+
/// class optional {
|
|
861
|
+
/// public:
|
|
862
|
+
/// bool has_value() const;
|
|
863
|
+
///
|
|
864
|
+
/// T& value() & {
|
|
865
|
+
/// if (!has_value()) { throw std::bad_optional_access(); }
|
|
866
|
+
/// return m_value;
|
|
867
|
+
/// }
|
|
868
|
+
///
|
|
869
|
+
/// const T& value() const& {
|
|
870
|
+
/// if (!has_value()) { throw std::bad_optional_access(); }
|
|
871
|
+
/// return m_value;
|
|
872
|
+
/// }
|
|
873
|
+
///
|
|
874
|
+
/// T&& value() && {
|
|
875
|
+
/// if (!has_value()) { throw std::bad_optional_access(); }
|
|
876
|
+
/// return std::move(m_value);
|
|
877
|
+
/// }
|
|
878
|
+
///
|
|
879
|
+
/// const T&& value() const&& {
|
|
880
|
+
/// if (!has_value()) { throw std::bad_optional_access(); }
|
|
881
|
+
/// return std::move(m_value);
|
|
882
|
+
/// }
|
|
883
|
+
/// };
|
|
884
|
+
///
|
|
885
|
+
/// This is equivalent to
|
|
886
|
+
///
|
|
887
|
+
/// template <typename T>
|
|
888
|
+
/// class optional {
|
|
889
|
+
/// template <typename Self>
|
|
890
|
+
/// decltype(auto) value_impl(Self&& self) {
|
|
891
|
+
/// if (!self.has_value()) {
|
|
892
|
+
/// throw std::bad_optional_access();
|
|
893
|
+
/// }
|
|
894
|
+
/// return std::forward<Self>(self).m_value;
|
|
895
|
+
/// }
|
|
896
|
+
/// // ...
|
|
897
|
+
///
|
|
898
|
+
/// public:
|
|
899
|
+
/// bool has_value() const;
|
|
900
|
+
///
|
|
901
|
+
/// FOLLY_FOR_EACH_THIS_OVERLOAD_IN_CLASS_BODY_DELEGATE(value,
|
|
902
|
+
/// value_impl);
|
|
903
|
+
/// };
|
|
904
|
+
///
|
|
905
|
+
/// Note: This can be migrated to C++23's deducing this:
|
|
906
|
+
/// https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0847r7.html
|
|
907
|
+
///
|
|
908
|
+
// clang-format off
|
|
909
|
+
#define FOLLY_FOR_EACH_THIS_OVERLOAD_IN_CLASS_BODY_DELEGATE(MEMBER, DELEGATE) \
|
|
910
|
+
template <class... Args> \
|
|
911
|
+
[[maybe_unused]] FOLLY_ERASE_HACK_GCC \
|
|
912
|
+
constexpr auto MEMBER(Args&&... args) & FOLLY_DETAIL_FORWARD_BODY( \
|
|
913
|
+
::folly::remove_cvref_t<decltype(*this)>::DELEGATE( \
|
|
914
|
+
*this, static_cast<Args&&>(args)...)) \
|
|
915
|
+
template <class... Args> \
|
|
916
|
+
[[maybe_unused]] FOLLY_ERASE_HACK_GCC \
|
|
917
|
+
constexpr auto MEMBER(Args&&... args) const& FOLLY_DETAIL_FORWARD_BODY( \
|
|
918
|
+
::folly::remove_cvref_t<decltype(*this)>::DELEGATE( \
|
|
919
|
+
*this, static_cast<Args&&>(args)...)) \
|
|
920
|
+
template <class... Args> \
|
|
921
|
+
[[maybe_unused]] FOLLY_ERASE_HACK_GCC \
|
|
922
|
+
constexpr auto MEMBER(Args&&... args) && FOLLY_DETAIL_FORWARD_BODY( \
|
|
923
|
+
::folly::remove_cvref_t<decltype(*this)>::DELEGATE( \
|
|
924
|
+
std::move(*this), static_cast<Args&&>(args)...)) \
|
|
925
|
+
template <class... Args> \
|
|
926
|
+
[[maybe_unused]] FOLLY_ERASE_HACK_GCC \
|
|
927
|
+
constexpr auto MEMBER(Args&&... args) const&& FOLLY_DETAIL_FORWARD_BODY( \
|
|
928
|
+
::folly::remove_cvref_t<decltype(*this)>::DELEGATE( \
|
|
929
|
+
std::move(*this), static_cast<Args&&>(args)...)) \
|
|
930
|
+
/* enforce semicolon after macro */ static_assert(true)
|
|
931
|
+
// clang-format on
|
|
932
|
+
} // namespace folly
|