react-native-windows 0.81.32 → 0.81.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +2 -17
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +27 -4
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +8 -4
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -3
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +2 -8
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +2 -2
- package/PropertySheets/Bundle.props +3 -3
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +2 -1
- package/PropertySheets/React.Cpp.props +4 -4
- package/ReactCommon/ReactCommon.vcxproj +0 -10
- package/ReactCommon/packages.lock.win32.json +0 -10
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/Warm-RnwFeedCache.ps1 +413 -0
- package/Scripts/creaternwapp.cmd +5 -1
- package/Scripts/creaternwlib.cmd +8 -2
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +11 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +12 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/{fmt → external/fmt}/cgmanifest.json +1 -1
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/{fmt/TEMP_UntilFmtUpdate/core.h → external/fmt/include/fmt/base.h} +1188 -1036
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +61 -0
- package/external/folly/LICENSE +200 -0
- package/{fmt → external/folly/folly}/.clang-format +0 -1
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/hash/SpookyHashV2.h +6 -1
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/sync-config.json +8 -0
- package/package.json +6 -6
- package/template/cpp-app/proj/MyApp.sln +0 -33
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-app/proj/MyApp.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -383
- package/Folly/Folly.vcxproj.filters +0 -558
- package/Folly/Folly.win32.vcxproj +0 -11
- package/Folly/packages.lock.win32.json +0 -20
- package/fmt/fmt.vcxproj +0 -163
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/fmt.win32.vcxproj +0 -10
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,712 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Conversions between std::chrono types and POSIX time types.
|
|
19
|
+
*
|
|
20
|
+
* These conversions will fail with a ConversionError if an overflow would
|
|
21
|
+
* occur performing the conversion. (e.g., if the input value cannot fit in
|
|
22
|
+
* the destination type). However they allow loss of precision (e.g.,
|
|
23
|
+
* converting nanoseconds to a struct timeval which only has microsecond
|
|
24
|
+
* granularity, or a struct timespec to std::chrono::minutes).
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
#pragma once
|
|
28
|
+
|
|
29
|
+
#include <chrono>
|
|
30
|
+
#include <limits>
|
|
31
|
+
#include <type_traits>
|
|
32
|
+
|
|
33
|
+
#include <folly/ConstexprMath.h>
|
|
34
|
+
#include <folly/Conv.h>
|
|
35
|
+
#include <folly/Expected.h>
|
|
36
|
+
#include <folly/Utility.h>
|
|
37
|
+
#include <folly/portability/SysTime.h>
|
|
38
|
+
#include <folly/portability/SysTypes.h>
|
|
39
|
+
|
|
40
|
+
namespace folly {
|
|
41
|
+
namespace detail {
|
|
42
|
+
|
|
43
|
+
template <typename T>
|
|
44
|
+
struct is_duration : std::false_type {};
|
|
45
|
+
template <typename Rep, typename Period>
|
|
46
|
+
struct is_duration<std::chrono::duration<Rep, Period>> : std::true_type {};
|
|
47
|
+
template <typename T>
|
|
48
|
+
struct is_time_point : std::false_type {};
|
|
49
|
+
template <typename Clock, typename Duration>
|
|
50
|
+
struct is_time_point<std::chrono::time_point<Clock, Duration>>
|
|
51
|
+
: std::true_type {};
|
|
52
|
+
template <typename T>
|
|
53
|
+
struct is_std_chrono_type {
|
|
54
|
+
static constexpr bool value =
|
|
55
|
+
is_duration<T>::value || is_time_point<T>::value;
|
|
56
|
+
};
|
|
57
|
+
template <typename T>
|
|
58
|
+
struct is_posix_time_type {
|
|
59
|
+
static constexpr bool value = std::is_same<T, struct timespec>::value ||
|
|
60
|
+
std::is_same<T, struct timeval>::value;
|
|
61
|
+
};
|
|
62
|
+
template <typename Tgt, typename Src>
|
|
63
|
+
struct is_chrono_conversion {
|
|
64
|
+
static constexpr bool value =
|
|
65
|
+
((is_std_chrono_type<Tgt>::value && is_posix_time_type<Src>::value) ||
|
|
66
|
+
(is_posix_time_type<Tgt>::value && is_std_chrono_type<Src>::value));
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* This converts a number in some input type to time_t while ensuring that it
|
|
71
|
+
* fits in the range of numbers representable by time_t.
|
|
72
|
+
*
|
|
73
|
+
* This is similar to the normal folly::tryTo() behavior when converting
|
|
74
|
+
* arthmetic types to an integer type, except that it does not complain about
|
|
75
|
+
* floating point conversions losing precision.
|
|
76
|
+
*/
|
|
77
|
+
template <typename Src>
|
|
78
|
+
Expected<time_t, ConversionCode> chronoRangeCheck(Src value) {
|
|
79
|
+
static_assert(
|
|
80
|
+
std::is_integral_v<time_t> && std::is_signed_v<time_t>,
|
|
81
|
+
"This function is only implemented for time_t that are signed integrals. Please update it if you need to support a different time_t type.");
|
|
82
|
+
if constexpr (std::is_floating_point_v<Src>) {
|
|
83
|
+
// time_t max converted to a floating point does not have
|
|
84
|
+
// an exact representation.
|
|
85
|
+
// 18446742974197923840 <- Largest float before time_t max
|
|
86
|
+
// 18446744073709549568 <- Largest double before time_t max
|
|
87
|
+
// 18446744073709551615 <- time_t max (when time_t is int64_t)
|
|
88
|
+
// 18446744073709551616 <- next representable float or double.
|
|
89
|
+
// The floating point value that gets chosen depends on the floating point
|
|
90
|
+
// implementation. IEEE arthimetic rounds to nearest.
|
|
91
|
+
static_assert(
|
|
92
|
+
std::numeric_limits<Src>::round_style == std::round_to_nearest,
|
|
93
|
+
"This function is only implemented for IEEE round to nearest. Please update it if you need other round styles.");
|
|
94
|
+
if (value >= static_cast<Src>(std::numeric_limits<time_t>::max())) {
|
|
95
|
+
return makeUnexpected(ConversionCode::POSITIVE_OVERFLOW);
|
|
96
|
+
}
|
|
97
|
+
} else {
|
|
98
|
+
constexpr bool isIntegralWithLargerRange = sizeof(Src) > sizeof(time_t) ||
|
|
99
|
+
(sizeof(Src) == sizeof(time_t) && std::is_unsigned_v<Src>);
|
|
100
|
+
if constexpr (isIntegralWithLargerRange) {
|
|
101
|
+
if (value > static_cast<Src>(std::numeric_limits<time_t>::max())) {
|
|
102
|
+
return makeUnexpected(ConversionCode::POSITIVE_OVERFLOW);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (std::is_signed<Src>::value) {
|
|
107
|
+
// int64_t lowest converted to a floating point has
|
|
108
|
+
// has an exact representation because it is a power of 2.
|
|
109
|
+
if (value < std::numeric_limits<time_t>::lowest()) {
|
|
110
|
+
return makeUnexpected(ConversionCode::NEGATIVE_OVERFLOW);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return static_cast<time_t>(value);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Convert a std::chrono::duration with second granularity to a pair of
|
|
119
|
+
* (seconds, subseconds)
|
|
120
|
+
*
|
|
121
|
+
* The SubsecondRatio template parameter specifies what type of subseconds to
|
|
122
|
+
* return. This must have a numerator of 1.
|
|
123
|
+
*/
|
|
124
|
+
template <typename SubsecondRatio, typename Rep>
|
|
125
|
+
static Expected<std::pair<time_t, long>, ConversionCode> durationToPosixTime(
|
|
126
|
+
const std::chrono::duration<Rep, std::ratio<1, 1>>& duration) {
|
|
127
|
+
static_assert(
|
|
128
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
129
|
+
|
|
130
|
+
auto sec = chronoRangeCheck(duration.count());
|
|
131
|
+
if (sec.hasError()) {
|
|
132
|
+
return makeUnexpected(sec.error());
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
time_t secValue = sec.value();
|
|
136
|
+
long subsec = 0L;
|
|
137
|
+
if (std::is_floating_point<Rep>::value) {
|
|
138
|
+
auto fraction = (duration.count() - secValue);
|
|
139
|
+
subsec = static_cast<long>(fraction * SubsecondRatio::den);
|
|
140
|
+
if (duration.count() < 0 && fraction < 0) {
|
|
141
|
+
if (secValue == std::numeric_limits<time_t>::lowest()) {
|
|
142
|
+
return makeUnexpected(ConversionCode::NEGATIVE_OVERFLOW);
|
|
143
|
+
}
|
|
144
|
+
secValue -= 1;
|
|
145
|
+
subsec += SubsecondRatio::den;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return std::pair<time_t, long>{secValue, subsec};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Convert a std::chrono::duration with subsecond granularity to a pair of
|
|
153
|
+
* (seconds, subseconds)
|
|
154
|
+
*/
|
|
155
|
+
template <typename SubsecondRatio, typename Rep, std::intmax_t Denominator>
|
|
156
|
+
static Expected<std::pair<time_t, long>, ConversionCode> durationToPosixTime(
|
|
157
|
+
const std::chrono::duration<Rep, std::ratio<1, Denominator>>& duration) {
|
|
158
|
+
static_assert(Denominator != 1, "special case expecting den != 1");
|
|
159
|
+
static_assert(
|
|
160
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
161
|
+
|
|
162
|
+
auto sec = chronoRangeCheck(duration.count() / Denominator);
|
|
163
|
+
if (sec.hasError()) {
|
|
164
|
+
return makeUnexpected(sec.error());
|
|
165
|
+
}
|
|
166
|
+
auto secTimeT = static_cast<time_t>(sec.value());
|
|
167
|
+
|
|
168
|
+
auto remainder = duration.count() - (secTimeT * Denominator);
|
|
169
|
+
long subsec =
|
|
170
|
+
static_cast<long>((remainder * SubsecondRatio::den) / Denominator);
|
|
171
|
+
if (FOLLY_UNLIKELY(duration.count() < 0) && remainder != 0) {
|
|
172
|
+
if (secTimeT == std::numeric_limits<time_t>::lowest()) {
|
|
173
|
+
return makeUnexpected(ConversionCode::NEGATIVE_OVERFLOW);
|
|
174
|
+
}
|
|
175
|
+
secTimeT -= 1;
|
|
176
|
+
subsec += SubsecondRatio::den;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return std::pair<time_t, long>{secTimeT, subsec};
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Convert a std::chrono::duration with coarser-than-second granularity to a
|
|
184
|
+
* pair of (seconds, subseconds)
|
|
185
|
+
*/
|
|
186
|
+
template <typename SubsecondRatio, typename Rep, std::intmax_t Numerator>
|
|
187
|
+
static Expected<std::pair<time_t, long>, ConversionCode> durationToPosixTime(
|
|
188
|
+
const std::chrono::duration<Rep, std::ratio<Numerator, 1>>& duration) {
|
|
189
|
+
static_assert(Numerator != 1, "special case expecting num!=1");
|
|
190
|
+
static_assert(
|
|
191
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
192
|
+
|
|
193
|
+
constexpr auto maxValue = std::numeric_limits<time_t>::max() / Numerator;
|
|
194
|
+
constexpr auto minValue = std::numeric_limits<time_t>::lowest() / Numerator;
|
|
195
|
+
if (duration.count() > maxValue) {
|
|
196
|
+
return makeUnexpected(ConversionCode::POSITIVE_OVERFLOW);
|
|
197
|
+
}
|
|
198
|
+
if (duration.count() < minValue) {
|
|
199
|
+
return makeUnexpected(ConversionCode::NEGATIVE_OVERFLOW);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Note that we can't use chronoRangeCheck() here since we have to check
|
|
203
|
+
// if (duration.count() * Numerator) would overflow (which we do above).
|
|
204
|
+
auto secOriginalRep = (duration.count() * Numerator);
|
|
205
|
+
auto sec = static_cast<time_t>(secOriginalRep);
|
|
206
|
+
|
|
207
|
+
long subsec = 0L;
|
|
208
|
+
if (std::is_floating_point<Rep>::value) {
|
|
209
|
+
auto fraction = secOriginalRep - sec;
|
|
210
|
+
subsec = static_cast<long>(fraction * SubsecondRatio::den);
|
|
211
|
+
if (duration.count() < 0 && fraction < 0) {
|
|
212
|
+
if (sec == std::numeric_limits<time_t>::lowest()) {
|
|
213
|
+
return makeUnexpected(ConversionCode::NEGATIVE_OVERFLOW);
|
|
214
|
+
}
|
|
215
|
+
sec -= 1;
|
|
216
|
+
subsec += SubsecondRatio::den;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return std::pair<time_t, long>{sec, subsec};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/*
|
|
223
|
+
* Helper classes for picking an intermediate duration type to use
|
|
224
|
+
* when doing conversions to/from durations where neither the numerator nor
|
|
225
|
+
* denominator are 1.
|
|
226
|
+
*/
|
|
227
|
+
template <typename T, bool IsFloatingPoint, bool IsSigned>
|
|
228
|
+
struct IntermediateTimeRep {};
|
|
229
|
+
template <typename T, bool IsSigned>
|
|
230
|
+
struct IntermediateTimeRep<T, true, IsSigned> {
|
|
231
|
+
using type = T;
|
|
232
|
+
};
|
|
233
|
+
template <typename T>
|
|
234
|
+
struct IntermediateTimeRep<T, false, true> {
|
|
235
|
+
using type = intmax_t;
|
|
236
|
+
};
|
|
237
|
+
template <typename T>
|
|
238
|
+
struct IntermediateTimeRep<T, false, false> {
|
|
239
|
+
using type = uintmax_t;
|
|
240
|
+
};
|
|
241
|
+
// For IntermediateDuration we always use 1 as the numerator, and the original
|
|
242
|
+
// Period denominator. This ensures that we do not lose precision when
|
|
243
|
+
// performing the conversion.
|
|
244
|
+
template <typename Rep, typename Period>
|
|
245
|
+
using IntermediateDuration = std::chrono::duration<
|
|
246
|
+
typename IntermediateTimeRep<
|
|
247
|
+
Rep,
|
|
248
|
+
std::is_floating_point<Rep>::value,
|
|
249
|
+
std::is_signed<Rep>::value>::type,
|
|
250
|
+
std::ratio<1, Period::den>>;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Convert a std::chrono::duration to a pair of (seconds, subseconds)
|
|
254
|
+
*
|
|
255
|
+
* This overload is only used for unusual durations where neither the numerator
|
|
256
|
+
* nor denominator are 1.
|
|
257
|
+
*/
|
|
258
|
+
template <typename SubsecondRatio, typename Rep, typename Period>
|
|
259
|
+
Expected<std::pair<time_t, long>, ConversionCode> durationToPosixTime(
|
|
260
|
+
const std::chrono::duration<Rep, Period>& duration) {
|
|
261
|
+
static_assert(Period::num != 1, "should use special-case code when num==1");
|
|
262
|
+
static_assert(Period::den != 1, "should use special-case code when den==1");
|
|
263
|
+
static_assert(
|
|
264
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
265
|
+
|
|
266
|
+
// Perform this conversion by first converting to a duration where the
|
|
267
|
+
// numerator is 1, then convert to the output type.
|
|
268
|
+
using IntermediateType = IntermediateDuration<Rep, Period>;
|
|
269
|
+
using IntermediateRep = typename IntermediateType::rep;
|
|
270
|
+
|
|
271
|
+
// Check to see if we would have overflow converting to the intermediate
|
|
272
|
+
// type.
|
|
273
|
+
constexpr auto maxInput =
|
|
274
|
+
std::numeric_limits<IntermediateRep>::max() / Period::num;
|
|
275
|
+
if (duration.count() > maxInput) {
|
|
276
|
+
return makeUnexpected(ConversionCode::POSITIVE_OVERFLOW);
|
|
277
|
+
}
|
|
278
|
+
constexpr auto minInput =
|
|
279
|
+
std::numeric_limits<IntermediateRep>::min() / Period::num;
|
|
280
|
+
if (duration.count() < minInput) {
|
|
281
|
+
return makeUnexpected(ConversionCode::NEGATIVE_OVERFLOW);
|
|
282
|
+
}
|
|
283
|
+
auto intermediate = IntermediateType{
|
|
284
|
+
static_cast<IntermediateRep>(duration.count()) *
|
|
285
|
+
static_cast<IntermediateRep>(Period::num)};
|
|
286
|
+
|
|
287
|
+
return durationToPosixTime<SubsecondRatio>(intermediate);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Check for overflow when converting to a duration type that is second
|
|
292
|
+
* granularity or finer (e.g., nanoseconds, milliseconds, seconds)
|
|
293
|
+
*
|
|
294
|
+
* This assumes the input is normalized, with subseconds >= 0 and subseconds
|
|
295
|
+
* less than 1 second.
|
|
296
|
+
*/
|
|
297
|
+
template <bool IsFloatingPoint>
|
|
298
|
+
struct CheckOverflowToDuration {
|
|
299
|
+
template <
|
|
300
|
+
typename Tgt,
|
|
301
|
+
typename SubsecondRatio,
|
|
302
|
+
typename Seconds,
|
|
303
|
+
typename Subseconds>
|
|
304
|
+
static ConversionCode check(Seconds seconds, Subseconds subseconds) {
|
|
305
|
+
static_assert(
|
|
306
|
+
Tgt::period::num == 1,
|
|
307
|
+
"this implementation should only be used for subsecond granularity "
|
|
308
|
+
"duration types");
|
|
309
|
+
static_assert(
|
|
310
|
+
!std::is_floating_point<typename Tgt::rep>::value, "incorrect usage");
|
|
311
|
+
static_assert(
|
|
312
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
313
|
+
|
|
314
|
+
if (FOLLY_LIKELY(seconds >= 0)) {
|
|
315
|
+
constexpr auto maxCount = std::numeric_limits<typename Tgt::rep>::max();
|
|
316
|
+
constexpr auto maxSeconds = maxCount / Tgt::period::den;
|
|
317
|
+
|
|
318
|
+
auto unsignedSeconds = to_unsigned(seconds);
|
|
319
|
+
if (FOLLY_LIKELY(unsignedSeconds < maxSeconds)) {
|
|
320
|
+
return ConversionCode::SUCCESS;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if (FOLLY_UNLIKELY(unsignedSeconds == maxSeconds)) {
|
|
324
|
+
constexpr auto maxRemainder =
|
|
325
|
+
maxCount - (maxSeconds * Tgt::period::den);
|
|
326
|
+
constexpr auto maxSubseconds =
|
|
327
|
+
(maxRemainder * SubsecondRatio::den) / Tgt::period::den;
|
|
328
|
+
if (subseconds <= 0) {
|
|
329
|
+
return ConversionCode::SUCCESS;
|
|
330
|
+
}
|
|
331
|
+
if (to_unsigned(subseconds) <= maxSubseconds) {
|
|
332
|
+
return ConversionCode::SUCCESS;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return ConversionCode::POSITIVE_OVERFLOW;
|
|
336
|
+
} else if (std::is_unsigned<typename Tgt::rep>::value) {
|
|
337
|
+
return ConversionCode::NEGATIVE_OVERFLOW;
|
|
338
|
+
} else {
|
|
339
|
+
constexpr auto minCount =
|
|
340
|
+
to_signed(std::numeric_limits<typename Tgt::rep>::lowest());
|
|
341
|
+
constexpr auto minSeconds = (minCount / Tgt::period::den);
|
|
342
|
+
if (FOLLY_LIKELY(seconds >= minSeconds)) {
|
|
343
|
+
return ConversionCode::SUCCESS;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
if (FOLLY_UNLIKELY(seconds == minSeconds - 1)) {
|
|
347
|
+
constexpr auto maxRemainder =
|
|
348
|
+
minCount - (minSeconds * Tgt::period::den) + Tgt::period::den;
|
|
349
|
+
constexpr auto maxSubseconds =
|
|
350
|
+
(maxRemainder * SubsecondRatio::den) / Tgt::period::den;
|
|
351
|
+
if (subseconds <= 0) {
|
|
352
|
+
return ConversionCode::NEGATIVE_OVERFLOW;
|
|
353
|
+
}
|
|
354
|
+
if (subseconds >= maxSubseconds) {
|
|
355
|
+
return ConversionCode::SUCCESS;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return ConversionCode::NEGATIVE_OVERFLOW;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
|
|
363
|
+
template <>
|
|
364
|
+
struct CheckOverflowToDuration<true> {
|
|
365
|
+
template <
|
|
366
|
+
typename Tgt,
|
|
367
|
+
typename SubsecondRatio,
|
|
368
|
+
typename Seconds,
|
|
369
|
+
typename Subseconds>
|
|
370
|
+
static ConversionCode check(
|
|
371
|
+
Seconds /* seconds */, Subseconds /* subseconds */) {
|
|
372
|
+
static_assert(
|
|
373
|
+
std::is_floating_point<typename Tgt::rep>::value, "incorrect usage");
|
|
374
|
+
static_assert(
|
|
375
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
376
|
+
|
|
377
|
+
// We expect floating point types to have much a wider representable range
|
|
378
|
+
// than integer types, so we don't bother actually checking the input
|
|
379
|
+
// integer value here.
|
|
380
|
+
static_assert(
|
|
381
|
+
std::numeric_limits<typename Tgt::rep>::max() >=
|
|
382
|
+
std::numeric_limits<Seconds>::max(),
|
|
383
|
+
"unusually limited floating point type");
|
|
384
|
+
static_assert(
|
|
385
|
+
std::numeric_limits<typename Tgt::rep>::lowest() <=
|
|
386
|
+
std::numeric_limits<Seconds>::lowest(),
|
|
387
|
+
"unusually limited floating point type");
|
|
388
|
+
|
|
389
|
+
return ConversionCode::SUCCESS;
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Convert a timeval or a timespec to a std::chrono::duration with second
|
|
395
|
+
* granularity.
|
|
396
|
+
*
|
|
397
|
+
* The SubsecondRatio template parameter specifies what type of subseconds to
|
|
398
|
+
* return. This must have a numerator of 1.
|
|
399
|
+
*
|
|
400
|
+
* The input must be in normalized form: the subseconds field must be greater
|
|
401
|
+
* than or equal to 0, and less than SubsecondRatio::den (i.e., less than 1
|
|
402
|
+
* second).
|
|
403
|
+
*/
|
|
404
|
+
template <
|
|
405
|
+
typename SubsecondRatio,
|
|
406
|
+
typename Seconds,
|
|
407
|
+
typename Subseconds,
|
|
408
|
+
typename Rep>
|
|
409
|
+
auto posixTimeToDuration(
|
|
410
|
+
Seconds seconds,
|
|
411
|
+
Subseconds subseconds,
|
|
412
|
+
std::chrono::duration<Rep, std::ratio<1, 1>> dummy)
|
|
413
|
+
-> Expected<decltype(dummy), ConversionCode> {
|
|
414
|
+
using Tgt = decltype(dummy);
|
|
415
|
+
static_assert(Tgt::period::num == 1, "special case expecting num==1");
|
|
416
|
+
static_assert(Tgt::period::den == 1, "special case expecting den==1");
|
|
417
|
+
static_assert(
|
|
418
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
419
|
+
|
|
420
|
+
auto outputSeconds = tryTo<typename Tgt::rep>(seconds);
|
|
421
|
+
if (outputSeconds.hasError()) {
|
|
422
|
+
return makeUnexpected(outputSeconds.error());
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
if (std::is_floating_point<typename Tgt::rep>::value) {
|
|
426
|
+
return Tgt{
|
|
427
|
+
typename Tgt::rep(seconds) +
|
|
428
|
+
(typename Tgt::rep(subseconds) / SubsecondRatio::den)};
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// If the value is negative, we have to round up a non-zero subseconds value
|
|
432
|
+
if (FOLLY_UNLIKELY(outputSeconds.value() < 0) && subseconds > 0) {
|
|
433
|
+
if (FOLLY_UNLIKELY(
|
|
434
|
+
outputSeconds.value() ==
|
|
435
|
+
std::numeric_limits<typename Tgt::rep>::lowest())) {
|
|
436
|
+
return makeUnexpected(ConversionCode::NEGATIVE_OVERFLOW);
|
|
437
|
+
}
|
|
438
|
+
return Tgt{outputSeconds.value() + 1};
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
return Tgt{outputSeconds.value()};
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Convert a timeval or a timespec to a std::chrono::duration with subsecond
|
|
446
|
+
* granularity
|
|
447
|
+
*/
|
|
448
|
+
template <
|
|
449
|
+
typename SubsecondRatio,
|
|
450
|
+
typename Seconds,
|
|
451
|
+
typename Subseconds,
|
|
452
|
+
typename Rep,
|
|
453
|
+
std::intmax_t Denominator>
|
|
454
|
+
auto posixTimeToDuration(
|
|
455
|
+
Seconds seconds,
|
|
456
|
+
Subseconds subseconds,
|
|
457
|
+
std::chrono::duration<Rep, std::ratio<1, Denominator>> dummy)
|
|
458
|
+
-> Expected<decltype(dummy), ConversionCode> {
|
|
459
|
+
using Tgt = decltype(dummy);
|
|
460
|
+
static_assert(Tgt::period::num == 1, "special case expecting num==1");
|
|
461
|
+
static_assert(Tgt::period::den != 1, "special case expecting den!=1");
|
|
462
|
+
static_assert(
|
|
463
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
464
|
+
|
|
465
|
+
auto errorCode = detail::CheckOverflowToDuration<
|
|
466
|
+
std::is_floating_point<typename Tgt::rep>::value>::
|
|
467
|
+
template check<Tgt, SubsecondRatio>(seconds, subseconds);
|
|
468
|
+
if (errorCode != ConversionCode::SUCCESS) {
|
|
469
|
+
return makeUnexpected(errorCode);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
if (FOLLY_LIKELY(seconds >= 0)) {
|
|
473
|
+
return std::chrono::duration_cast<Tgt>(
|
|
474
|
+
std::chrono::duration<typename Tgt::rep>{seconds}) +
|
|
475
|
+
std::chrono::duration_cast<Tgt>(
|
|
476
|
+
std::chrono::duration<typename Tgt::rep, SubsecondRatio>{
|
|
477
|
+
subseconds});
|
|
478
|
+
} else {
|
|
479
|
+
// For negative numbers we have to round subseconds up towards zero, even
|
|
480
|
+
// though it is a positive value, since the overall value is negative.
|
|
481
|
+
return std::chrono::duration_cast<Tgt>(
|
|
482
|
+
std::chrono::duration<typename Tgt::rep>{seconds + 1}) -
|
|
483
|
+
std::chrono::duration_cast<Tgt>(
|
|
484
|
+
std::chrono::duration<typename Tgt::rep, SubsecondRatio>{
|
|
485
|
+
SubsecondRatio::den - subseconds});
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Convert a timeval or a timespec to a std::chrono::duration with
|
|
491
|
+
* granularity coarser than 1 second.
|
|
492
|
+
*/
|
|
493
|
+
template <
|
|
494
|
+
typename SubsecondRatio,
|
|
495
|
+
typename Seconds,
|
|
496
|
+
typename Subseconds,
|
|
497
|
+
typename Rep,
|
|
498
|
+
std::intmax_t Numerator>
|
|
499
|
+
auto posixTimeToDuration(
|
|
500
|
+
Seconds seconds,
|
|
501
|
+
Subseconds subseconds,
|
|
502
|
+
std::chrono::duration<Rep, std::ratio<Numerator, 1>> dummy)
|
|
503
|
+
-> Expected<decltype(dummy), ConversionCode> {
|
|
504
|
+
using Tgt = decltype(dummy);
|
|
505
|
+
static_assert(Tgt::period::num != 1, "special case expecting num!=1");
|
|
506
|
+
static_assert(Tgt::period::den == 1, "special case expecting den==1");
|
|
507
|
+
static_assert(
|
|
508
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
509
|
+
|
|
510
|
+
if (FOLLY_UNLIKELY(seconds < 0) && subseconds > 0) {
|
|
511
|
+
// Increment seconds by one to handle truncation of negative numbers
|
|
512
|
+
// properly.
|
|
513
|
+
if (FOLLY_UNLIKELY(seconds == std::numeric_limits<Seconds>::lowest())) {
|
|
514
|
+
return makeUnexpected(ConversionCode::NEGATIVE_OVERFLOW);
|
|
515
|
+
}
|
|
516
|
+
seconds += 1;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
if (std::is_floating_point<typename Tgt::rep>::value) {
|
|
520
|
+
// Convert to the floating point type before performing the division
|
|
521
|
+
return Tgt{static_cast<typename Tgt::rep>(seconds) / Tgt::period::num};
|
|
522
|
+
} else {
|
|
523
|
+
// Perform the division as an integer, and check that the result fits in
|
|
524
|
+
// the output integer type
|
|
525
|
+
auto outputValue = (seconds / Tgt::period::num);
|
|
526
|
+
auto expectedOuput = tryTo<typename Tgt::rep>(outputValue);
|
|
527
|
+
if (expectedOuput.hasError()) {
|
|
528
|
+
return makeUnexpected(expectedOuput.error());
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
return Tgt{expectedOuput.value()};
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Convert a timeval or timespec to a std::chrono::duration
|
|
537
|
+
*
|
|
538
|
+
* This overload is only used for unusual durations where neither the numerator
|
|
539
|
+
* nor denominator are 1.
|
|
540
|
+
*/
|
|
541
|
+
template <
|
|
542
|
+
typename SubsecondRatio,
|
|
543
|
+
typename Seconds,
|
|
544
|
+
typename Subseconds,
|
|
545
|
+
typename Rep,
|
|
546
|
+
std::intmax_t Denominator,
|
|
547
|
+
std::intmax_t Numerator>
|
|
548
|
+
auto posixTimeToDuration(
|
|
549
|
+
Seconds seconds,
|
|
550
|
+
Subseconds subseconds,
|
|
551
|
+
std::chrono::duration<Rep, std::ratio<Numerator, Denominator>> dummy)
|
|
552
|
+
-> Expected<decltype(dummy), ConversionCode> {
|
|
553
|
+
using Tgt = decltype(dummy);
|
|
554
|
+
static_assert(
|
|
555
|
+
Tgt::period::num != 1, "should use special-case code when num==1");
|
|
556
|
+
static_assert(
|
|
557
|
+
Tgt::period::den != 1, "should use special-case code when den==1");
|
|
558
|
+
static_assert(
|
|
559
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
560
|
+
|
|
561
|
+
// Cast through an intermediate type with subsecond granularity.
|
|
562
|
+
// Note that this could fail due to overflow during the initial conversion
|
|
563
|
+
// even if the result is representable in the output POSIX-style types.
|
|
564
|
+
//
|
|
565
|
+
// Note that for integer type conversions going through this intermediate
|
|
566
|
+
// type can result in slight imprecision due to truncating the intermediate
|
|
567
|
+
// calculation to an integer.
|
|
568
|
+
using IntermediateType =
|
|
569
|
+
IntermediateDuration<typename Tgt::rep, typename Tgt::period>;
|
|
570
|
+
auto intermediate = posixTimeToDuration<SubsecondRatio>(
|
|
571
|
+
seconds, subseconds, IntermediateType{});
|
|
572
|
+
if (intermediate.hasError()) {
|
|
573
|
+
return makeUnexpected(intermediate.error());
|
|
574
|
+
}
|
|
575
|
+
// Now convert back to the target duration. Use tryTo() to confirm that the
|
|
576
|
+
// result fits in the target representation type.
|
|
577
|
+
return tryTo<typename Tgt::rep>(
|
|
578
|
+
intermediate.value().count() / Tgt::period::num)
|
|
579
|
+
.then([](typename Tgt::rep tgt) { return Tgt{tgt}; });
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
template <
|
|
583
|
+
typename Tgt,
|
|
584
|
+
typename SubsecondRatio,
|
|
585
|
+
typename Seconds,
|
|
586
|
+
typename Subseconds>
|
|
587
|
+
Expected<Tgt, ConversionCode> tryPosixTimeToDuration(
|
|
588
|
+
Seconds seconds, Subseconds subseconds) {
|
|
589
|
+
static_assert(
|
|
590
|
+
SubsecondRatio::num == 1, "subsecond numerator should always be 1");
|
|
591
|
+
|
|
592
|
+
// Normalize the input if required
|
|
593
|
+
if (FOLLY_UNLIKELY(subseconds < 0)) {
|
|
594
|
+
const auto overflowSeconds = (subseconds / SubsecondRatio::den);
|
|
595
|
+
const auto remainder = (subseconds % SubsecondRatio::den);
|
|
596
|
+
if (std::numeric_limits<Seconds>::lowest() + 1 - overflowSeconds >
|
|
597
|
+
seconds) {
|
|
598
|
+
return makeUnexpected(ConversionCode::NEGATIVE_OVERFLOW);
|
|
599
|
+
}
|
|
600
|
+
seconds = seconds - 1 + overflowSeconds;
|
|
601
|
+
subseconds = to_narrow(remainder + SubsecondRatio::den);
|
|
602
|
+
} else if (FOLLY_UNLIKELY(subseconds >= SubsecondRatio::den)) {
|
|
603
|
+
const auto overflowSeconds = (subseconds / SubsecondRatio::den);
|
|
604
|
+
const auto remainder = (subseconds % SubsecondRatio::den);
|
|
605
|
+
if (std::numeric_limits<Seconds>::max() - overflowSeconds < seconds) {
|
|
606
|
+
return makeUnexpected(ConversionCode::POSITIVE_OVERFLOW);
|
|
607
|
+
}
|
|
608
|
+
seconds += overflowSeconds;
|
|
609
|
+
subseconds = to_narrow(remainder);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
return posixTimeToDuration<SubsecondRatio>(seconds, subseconds, Tgt{});
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
} // namespace detail
|
|
616
|
+
|
|
617
|
+
/**
|
|
618
|
+
* struct timespec to std::chrono::duration
|
|
619
|
+
*/
|
|
620
|
+
template <typename Tgt>
|
|
621
|
+
typename std::enable_if<
|
|
622
|
+
detail::is_duration<Tgt>::value,
|
|
623
|
+
Expected<Tgt, ConversionCode>>::type
|
|
624
|
+
tryTo(const struct timespec& ts) {
|
|
625
|
+
return detail::tryPosixTimeToDuration<Tgt, std::nano>(ts.tv_sec, ts.tv_nsec);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
/**
|
|
629
|
+
* struct timeval to std::chrono::duration
|
|
630
|
+
*/
|
|
631
|
+
template <typename Tgt>
|
|
632
|
+
typename std::enable_if<
|
|
633
|
+
detail::is_duration<Tgt>::value,
|
|
634
|
+
Expected<Tgt, ConversionCode>>::type
|
|
635
|
+
tryTo(const struct timeval& tv) {
|
|
636
|
+
return detail::tryPosixTimeToDuration<Tgt, std::micro>(tv.tv_sec, tv.tv_usec);
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* timespec or timeval to std::chrono::time_point
|
|
641
|
+
*/
|
|
642
|
+
template <typename Tgt, typename Src>
|
|
643
|
+
typename std::enable_if<
|
|
644
|
+
detail::is_time_point<Tgt>::value && detail::is_posix_time_type<Src>::value,
|
|
645
|
+
Expected<Tgt, ConversionCode>>::type
|
|
646
|
+
tryTo(const Src& value) {
|
|
647
|
+
return tryTo<typename Tgt::duration>(value).then(
|
|
648
|
+
[](typename Tgt::duration result) { return Tgt(result); });
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/**
|
|
652
|
+
* std::chrono::duration to struct timespec
|
|
653
|
+
*/
|
|
654
|
+
template <typename Tgt, typename Rep, typename Period>
|
|
655
|
+
typename std::enable_if<
|
|
656
|
+
std::is_same<Tgt, struct timespec>::value,
|
|
657
|
+
Expected<Tgt, ConversionCode>>::type
|
|
658
|
+
tryTo(const std::chrono::duration<Rep, Period>& duration) {
|
|
659
|
+
auto result = detail::durationToPosixTime<std::nano>(duration);
|
|
660
|
+
if (result.hasError()) {
|
|
661
|
+
return makeUnexpected(result.error());
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
struct timespec ts;
|
|
665
|
+
ts.tv_sec = result.value().first;
|
|
666
|
+
ts.tv_nsec = result.value().second;
|
|
667
|
+
return ts;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* std::chrono::duration to struct timeval
|
|
672
|
+
*/
|
|
673
|
+
template <typename Tgt, typename Rep, typename Period>
|
|
674
|
+
typename std::enable_if<
|
|
675
|
+
std::is_same<Tgt, struct timeval>::value,
|
|
676
|
+
Expected<Tgt, ConversionCode>>::type
|
|
677
|
+
tryTo(const std::chrono::duration<Rep, Period>& duration) {
|
|
678
|
+
auto result = detail::durationToPosixTime<std::micro>(duration);
|
|
679
|
+
if (result.hasError()) {
|
|
680
|
+
return makeUnexpected(result.error());
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
struct timeval tv;
|
|
684
|
+
tv.tv_sec = result.value().first;
|
|
685
|
+
tv.tv_usec = result.value().second;
|
|
686
|
+
return tv;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
/**
|
|
690
|
+
* std::chrono::time_point to timespec or timeval
|
|
691
|
+
*/
|
|
692
|
+
template <typename Tgt, typename Clock, typename Duration>
|
|
693
|
+
typename std::enable_if<
|
|
694
|
+
detail::is_posix_time_type<Tgt>::value,
|
|
695
|
+
Expected<Tgt, ConversionCode>>::type
|
|
696
|
+
tryTo(const std::chrono::time_point<Clock, Duration>& timePoint) {
|
|
697
|
+
return tryTo<Tgt>(timePoint.time_since_epoch());
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
/**
|
|
701
|
+
* For all chrono conversions, to() wraps tryTo()
|
|
702
|
+
*/
|
|
703
|
+
template <typename Tgt, typename Src>
|
|
704
|
+
typename std::enable_if<detail::is_chrono_conversion<Tgt, Src>::value, Tgt>::
|
|
705
|
+
type
|
|
706
|
+
to(const Src& value) {
|
|
707
|
+
return tryTo<Tgt>(value).thenOrThrow(
|
|
708
|
+
[](Tgt res) { return res; },
|
|
709
|
+
[&](ConversionCode e) { return makeConversionError(e, StringPiece{}); });
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
} // namespace folly
|