react-native-windows 0.81.34 → 0.81.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +1 -16
- 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/Fabric/Composition/TooltipService.cpp +48 -2
- package/Microsoft.ReactNative/Fabric/WindowsImageManager.cpp +40 -13
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/React.Cpp.props +3 -3
- package/ReactCommon/ReactCommon.vcxproj +0 -10
- package/ReactCommon/packages.lock.win32.json +0 -10
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/creaternwlib.cmd +2 -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 +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/{fmt → external/fmt}/cgmanifest.json +1 -1
- 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/{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 +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/{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/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/package.json +3 -3
- 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/example/metro.config.js +31 -6
- 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/Scripts/Warm-RnwFeedCache.ps1 +0 -413
- 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,212 @@
|
|
|
1
|
+
#ifndef FASTFLOAT_DECIMAL_TO_BINARY_H
|
|
2
|
+
#define FASTFLOAT_DECIMAL_TO_BINARY_H
|
|
3
|
+
|
|
4
|
+
#include "float_common.h"
|
|
5
|
+
#include "fast_table.h"
|
|
6
|
+
#include <cfloat>
|
|
7
|
+
#include <cinttypes>
|
|
8
|
+
#include <cmath>
|
|
9
|
+
#include <cstdint>
|
|
10
|
+
#include <cstdlib>
|
|
11
|
+
#include <cstring>
|
|
12
|
+
|
|
13
|
+
namespace fast_float {
|
|
14
|
+
|
|
15
|
+
// This will compute or rather approximate w * 5**q and return a pair of 64-bit
|
|
16
|
+
// words approximating the result, with the "high" part corresponding to the
|
|
17
|
+
// most significant bits and the low part corresponding to the least significant
|
|
18
|
+
// bits.
|
|
19
|
+
//
|
|
20
|
+
template <int bit_precision>
|
|
21
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 value128
|
|
22
|
+
compute_product_approximation(int64_t q, uint64_t w) {
|
|
23
|
+
int const index = 2 * int(q - powers::smallest_power_of_five);
|
|
24
|
+
// For small values of q, e.g., q in [0,27], the answer is always exact
|
|
25
|
+
// because The line value128 firstproduct = full_multiplication(w,
|
|
26
|
+
// power_of_five_128[index]); gives the exact answer.
|
|
27
|
+
value128 firstproduct =
|
|
28
|
+
full_multiplication(w, powers::power_of_five_128[index]);
|
|
29
|
+
static_assert((bit_precision >= 0) && (bit_precision <= 64),
|
|
30
|
+
" precision should be in (0,64]");
|
|
31
|
+
constexpr uint64_t precision_mask =
|
|
32
|
+
(bit_precision < 64) ? (uint64_t(0xFFFFFFFFFFFFFFFF) >> bit_precision)
|
|
33
|
+
: uint64_t(0xFFFFFFFFFFFFFFFF);
|
|
34
|
+
if ((firstproduct.high & precision_mask) ==
|
|
35
|
+
precision_mask) { // could further guard with (lower + w < lower)
|
|
36
|
+
// regarding the second product, we only need secondproduct.high, but our
|
|
37
|
+
// expectation is that the compiler will optimize this extra work away if
|
|
38
|
+
// needed.
|
|
39
|
+
value128 secondproduct =
|
|
40
|
+
full_multiplication(w, powers::power_of_five_128[index + 1]);
|
|
41
|
+
firstproduct.low += secondproduct.high;
|
|
42
|
+
if (secondproduct.high > firstproduct.low) {
|
|
43
|
+
firstproduct.high++;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return firstproduct;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
namespace detail {
|
|
50
|
+
/**
|
|
51
|
+
* For q in (0,350), we have that
|
|
52
|
+
* f = (((152170 + 65536) * q ) >> 16);
|
|
53
|
+
* is equal to
|
|
54
|
+
* floor(p) + q
|
|
55
|
+
* where
|
|
56
|
+
* p = log(5**q)/log(2) = q * log(5)/log(2)
|
|
57
|
+
*
|
|
58
|
+
* For negative values of q in (-400,0), we have that
|
|
59
|
+
* f = (((152170 + 65536) * q ) >> 16);
|
|
60
|
+
* is equal to
|
|
61
|
+
* -ceil(p) + q
|
|
62
|
+
* where
|
|
63
|
+
* p = log(5**-q)/log(2) = -q * log(5)/log(2)
|
|
64
|
+
*/
|
|
65
|
+
constexpr fastfloat_really_inline int32_t power(int32_t q) noexcept {
|
|
66
|
+
return (((152170 + 65536) * q) >> 16) + 63;
|
|
67
|
+
}
|
|
68
|
+
} // namespace detail
|
|
69
|
+
|
|
70
|
+
// create an adjusted mantissa, biased by the invalid power2
|
|
71
|
+
// for significant digits already multiplied by 10 ** q.
|
|
72
|
+
template <typename binary>
|
|
73
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR14 adjusted_mantissa
|
|
74
|
+
compute_error_scaled(int64_t q, uint64_t w, int lz) noexcept {
|
|
75
|
+
int hilz = int(w >> 63) ^ 1;
|
|
76
|
+
adjusted_mantissa answer;
|
|
77
|
+
answer.mantissa = w << hilz;
|
|
78
|
+
int bias = binary::mantissa_explicit_bits() - binary::minimum_exponent();
|
|
79
|
+
answer.power2 = int32_t(detail::power(int32_t(q)) + bias - hilz - lz - 62 +
|
|
80
|
+
invalid_am_bias);
|
|
81
|
+
return answer;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// w * 10 ** q, without rounding the representation up.
|
|
85
|
+
// the power2 in the exponent will be adjusted by invalid_am_bias.
|
|
86
|
+
template <typename binary>
|
|
87
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 adjusted_mantissa
|
|
88
|
+
compute_error(int64_t q, uint64_t w) noexcept {
|
|
89
|
+
int lz = leading_zeroes(w);
|
|
90
|
+
w <<= lz;
|
|
91
|
+
value128 product =
|
|
92
|
+
compute_product_approximation<binary::mantissa_explicit_bits() + 3>(q, w);
|
|
93
|
+
return compute_error_scaled<binary>(q, product.high, lz);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Computers w * 10 ** q.
|
|
97
|
+
// The returned value should be a valid number that simply needs to be
|
|
98
|
+
// packed. However, in some very rare cases, the computation will fail. In such
|
|
99
|
+
// cases, we return an adjusted_mantissa with a negative power of 2: the caller
|
|
100
|
+
// should recompute in such cases.
|
|
101
|
+
template <typename binary>
|
|
102
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 adjusted_mantissa
|
|
103
|
+
compute_float(int64_t q, uint64_t w) noexcept {
|
|
104
|
+
adjusted_mantissa answer;
|
|
105
|
+
if ((w == 0) || (q < binary::smallest_power_of_ten())) {
|
|
106
|
+
answer.power2 = 0;
|
|
107
|
+
answer.mantissa = 0;
|
|
108
|
+
// result should be zero
|
|
109
|
+
return answer;
|
|
110
|
+
}
|
|
111
|
+
if (q > binary::largest_power_of_ten()) {
|
|
112
|
+
// we want to get infinity:
|
|
113
|
+
answer.power2 = binary::infinite_power();
|
|
114
|
+
answer.mantissa = 0;
|
|
115
|
+
return answer;
|
|
116
|
+
}
|
|
117
|
+
// At this point in time q is in [powers::smallest_power_of_five,
|
|
118
|
+
// powers::largest_power_of_five].
|
|
119
|
+
|
|
120
|
+
// We want the most significant bit of i to be 1. Shift if needed.
|
|
121
|
+
int lz = leading_zeroes(w);
|
|
122
|
+
w <<= lz;
|
|
123
|
+
|
|
124
|
+
// The required precision is binary::mantissa_explicit_bits() + 3 because
|
|
125
|
+
// 1. We need the implicit bit
|
|
126
|
+
// 2. We need an extra bit for rounding purposes
|
|
127
|
+
// 3. We might lose a bit due to the "upperbit" routine (result too small,
|
|
128
|
+
// requiring a shift)
|
|
129
|
+
|
|
130
|
+
value128 product =
|
|
131
|
+
compute_product_approximation<binary::mantissa_explicit_bits() + 3>(q, w);
|
|
132
|
+
// The computed 'product' is always sufficient.
|
|
133
|
+
// Mathematical proof:
|
|
134
|
+
// Noble Mushtak and Daniel Lemire, Fast Number Parsing Without Fallback (to
|
|
135
|
+
// appear) See script/mushtak_lemire.py
|
|
136
|
+
|
|
137
|
+
// The "compute_product_approximation" function can be slightly slower than a
|
|
138
|
+
// branchless approach: value128 product = compute_product(q, w); but in
|
|
139
|
+
// practice, we can win big with the compute_product_approximation if its
|
|
140
|
+
// additional branch is easily predicted. Which is best is data specific.
|
|
141
|
+
int upperbit = int(product.high >> 63);
|
|
142
|
+
int shift = upperbit + 64 - binary::mantissa_explicit_bits() - 3;
|
|
143
|
+
|
|
144
|
+
answer.mantissa = product.high >> shift;
|
|
145
|
+
|
|
146
|
+
answer.power2 = int32_t(detail::power(int32_t(q)) + upperbit - lz -
|
|
147
|
+
binary::minimum_exponent());
|
|
148
|
+
if (answer.power2 <= 0) { // we have a subnormal?
|
|
149
|
+
// Here have that answer.power2 <= 0 so -answer.power2 >= 0
|
|
150
|
+
if (-answer.power2 + 1 >=
|
|
151
|
+
64) { // if we have more than 64 bits below the minimum exponent, you
|
|
152
|
+
// have a zero for sure.
|
|
153
|
+
answer.power2 = 0;
|
|
154
|
+
answer.mantissa = 0;
|
|
155
|
+
// result should be zero
|
|
156
|
+
return answer;
|
|
157
|
+
}
|
|
158
|
+
// next line is safe because -answer.power2 + 1 < 64
|
|
159
|
+
answer.mantissa >>= -answer.power2 + 1;
|
|
160
|
+
// Thankfully, we can't have both "round-to-even" and subnormals because
|
|
161
|
+
// "round-to-even" only occurs for powers close to 0 in the 32-bit and
|
|
162
|
+
// and 64-bit case (with no more than 19 digits).
|
|
163
|
+
answer.mantissa += (answer.mantissa & 1); // round up
|
|
164
|
+
answer.mantissa >>= 1;
|
|
165
|
+
// There is a weird scenario where we don't have a subnormal but just.
|
|
166
|
+
// Suppose we start with 2.2250738585072013e-308, we end up
|
|
167
|
+
// with 0x3fffffffffffff x 2^-1023-53 which is technically subnormal
|
|
168
|
+
// whereas 0x40000000000000 x 2^-1023-53 is normal. Now, we need to round
|
|
169
|
+
// up 0x3fffffffffffff x 2^-1023-53 and once we do, we are no longer
|
|
170
|
+
// subnormal, but we can only know this after rounding.
|
|
171
|
+
// So we only declare a subnormal if we are smaller than the threshold.
|
|
172
|
+
answer.power2 =
|
|
173
|
+
(answer.mantissa < (uint64_t(1) << binary::mantissa_explicit_bits()))
|
|
174
|
+
? 0
|
|
175
|
+
: 1;
|
|
176
|
+
return answer;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// usually, we round *up*, but if we fall right in between and and we have an
|
|
180
|
+
// even basis, we need to round down
|
|
181
|
+
// We are only concerned with the cases where 5**q fits in single 64-bit word.
|
|
182
|
+
if ((product.low <= 1) && (q >= binary::min_exponent_round_to_even()) &&
|
|
183
|
+
(q <= binary::max_exponent_round_to_even()) &&
|
|
184
|
+
((answer.mantissa & 3) == 1)) { // we may fall between two floats!
|
|
185
|
+
// To be in-between two floats we need that in doing
|
|
186
|
+
// answer.mantissa = product.high >> (upperbit + 64 -
|
|
187
|
+
// binary::mantissa_explicit_bits() - 3);
|
|
188
|
+
// ... we dropped out only zeroes. But if this happened, then we can go
|
|
189
|
+
// back!!!
|
|
190
|
+
if ((answer.mantissa << shift) == product.high) {
|
|
191
|
+
answer.mantissa &= ~uint64_t(1); // flip it so that we do not round up
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
answer.mantissa += (answer.mantissa & 1); // round up
|
|
196
|
+
answer.mantissa >>= 1;
|
|
197
|
+
if (answer.mantissa >= (uint64_t(2) << binary::mantissa_explicit_bits())) {
|
|
198
|
+
answer.mantissa = (uint64_t(1) << binary::mantissa_explicit_bits());
|
|
199
|
+
answer.power2++; // undo previous addition
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
answer.mantissa &= ~(uint64_t(1) << binary::mantissa_explicit_bits());
|
|
203
|
+
if (answer.power2 >= binary::infinite_power()) { // infinity
|
|
204
|
+
answer.power2 = binary::infinite_power();
|
|
205
|
+
answer.mantissa = 0;
|
|
206
|
+
}
|
|
207
|
+
return answer;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
} // namespace fast_float
|
|
211
|
+
|
|
212
|
+
#endif
|
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
#ifndef FASTFLOAT_DIGIT_COMPARISON_H
|
|
2
|
+
#define FASTFLOAT_DIGIT_COMPARISON_H
|
|
3
|
+
|
|
4
|
+
#include <algorithm>
|
|
5
|
+
#include <cstdint>
|
|
6
|
+
#include <cstring>
|
|
7
|
+
#include <iterator>
|
|
8
|
+
|
|
9
|
+
#include "float_common.h"
|
|
10
|
+
#include "bigint.h"
|
|
11
|
+
#include "ascii_number.h"
|
|
12
|
+
|
|
13
|
+
namespace fast_float {
|
|
14
|
+
|
|
15
|
+
// 1e0 to 1e19
|
|
16
|
+
constexpr static uint64_t powers_of_ten_uint64[] = {1UL,
|
|
17
|
+
10UL,
|
|
18
|
+
100UL,
|
|
19
|
+
1000UL,
|
|
20
|
+
10000UL,
|
|
21
|
+
100000UL,
|
|
22
|
+
1000000UL,
|
|
23
|
+
10000000UL,
|
|
24
|
+
100000000UL,
|
|
25
|
+
1000000000UL,
|
|
26
|
+
10000000000UL,
|
|
27
|
+
100000000000UL,
|
|
28
|
+
1000000000000UL,
|
|
29
|
+
10000000000000UL,
|
|
30
|
+
100000000000000UL,
|
|
31
|
+
1000000000000000UL,
|
|
32
|
+
10000000000000000UL,
|
|
33
|
+
100000000000000000UL,
|
|
34
|
+
1000000000000000000UL,
|
|
35
|
+
10000000000000000000UL};
|
|
36
|
+
|
|
37
|
+
// calculate the exponent, in scientific notation, of the number.
|
|
38
|
+
// this algorithm is not even close to optimized, but it has no practical
|
|
39
|
+
// effect on performance: in order to have a faster algorithm, we'd need
|
|
40
|
+
// to slow down performance for faster algorithms, and this is still fast.
|
|
41
|
+
template <typename UC>
|
|
42
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR14 int32_t
|
|
43
|
+
scientific_exponent(parsed_number_string_t<UC> &num) noexcept {
|
|
44
|
+
uint64_t mantissa = num.mantissa;
|
|
45
|
+
int32_t exponent = int32_t(num.exponent);
|
|
46
|
+
while (mantissa >= 10000) {
|
|
47
|
+
mantissa /= 10000;
|
|
48
|
+
exponent += 4;
|
|
49
|
+
}
|
|
50
|
+
while (mantissa >= 100) {
|
|
51
|
+
mantissa /= 100;
|
|
52
|
+
exponent += 2;
|
|
53
|
+
}
|
|
54
|
+
while (mantissa >= 10) {
|
|
55
|
+
mantissa /= 10;
|
|
56
|
+
exponent += 1;
|
|
57
|
+
}
|
|
58
|
+
return exponent;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// this converts a native floating-point number to an extended-precision float.
|
|
62
|
+
template <typename T>
|
|
63
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 adjusted_mantissa
|
|
64
|
+
to_extended(T value) noexcept {
|
|
65
|
+
using equiv_uint = equiv_uint_t<T>;
|
|
66
|
+
constexpr equiv_uint exponent_mask = binary_format<T>::exponent_mask();
|
|
67
|
+
constexpr equiv_uint mantissa_mask = binary_format<T>::mantissa_mask();
|
|
68
|
+
constexpr equiv_uint hidden_bit_mask = binary_format<T>::hidden_bit_mask();
|
|
69
|
+
|
|
70
|
+
adjusted_mantissa am;
|
|
71
|
+
int32_t bias = binary_format<T>::mantissa_explicit_bits() -
|
|
72
|
+
binary_format<T>::minimum_exponent();
|
|
73
|
+
equiv_uint bits;
|
|
74
|
+
#if FASTFLOAT_HAS_BIT_CAST
|
|
75
|
+
bits = std::bit_cast<equiv_uint>(value);
|
|
76
|
+
#else
|
|
77
|
+
::memcpy(&bits, &value, sizeof(T));
|
|
78
|
+
#endif
|
|
79
|
+
if ((bits & exponent_mask) == 0) {
|
|
80
|
+
// denormal
|
|
81
|
+
am.power2 = 1 - bias;
|
|
82
|
+
am.mantissa = bits & mantissa_mask;
|
|
83
|
+
} else {
|
|
84
|
+
// normal
|
|
85
|
+
am.power2 = int32_t((bits & exponent_mask) >>
|
|
86
|
+
binary_format<T>::mantissa_explicit_bits());
|
|
87
|
+
am.power2 -= bias;
|
|
88
|
+
am.mantissa = (bits & mantissa_mask) | hidden_bit_mask;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return am;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// get the extended precision value of the halfway point between b and b+u.
|
|
95
|
+
// we are given a native float that represents b, so we need to adjust it
|
|
96
|
+
// halfway between b and b+u.
|
|
97
|
+
template <typename T>
|
|
98
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 adjusted_mantissa
|
|
99
|
+
to_extended_halfway(T value) noexcept {
|
|
100
|
+
adjusted_mantissa am = to_extended(value);
|
|
101
|
+
am.mantissa <<= 1;
|
|
102
|
+
am.mantissa += 1;
|
|
103
|
+
am.power2 -= 1;
|
|
104
|
+
return am;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// round an extended-precision float to the nearest machine float.
|
|
108
|
+
template <typename T, typename callback>
|
|
109
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR14 void round(adjusted_mantissa &am,
|
|
110
|
+
callback cb) noexcept {
|
|
111
|
+
int32_t mantissa_shift = 64 - binary_format<T>::mantissa_explicit_bits() - 1;
|
|
112
|
+
if (-am.power2 >= mantissa_shift) {
|
|
113
|
+
// have a denormal float
|
|
114
|
+
int32_t shift = -am.power2 + 1;
|
|
115
|
+
cb(am, std::min<int32_t>(shift, 64));
|
|
116
|
+
// check for round-up: if rounding-nearest carried us to the hidden bit.
|
|
117
|
+
am.power2 = (am.mantissa <
|
|
118
|
+
(uint64_t(1) << binary_format<T>::mantissa_explicit_bits()))
|
|
119
|
+
? 0
|
|
120
|
+
: 1;
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// have a normal float, use the default shift.
|
|
125
|
+
cb(am, mantissa_shift);
|
|
126
|
+
|
|
127
|
+
// check for carry
|
|
128
|
+
if (am.mantissa >=
|
|
129
|
+
(uint64_t(2) << binary_format<T>::mantissa_explicit_bits())) {
|
|
130
|
+
am.mantissa = (uint64_t(1) << binary_format<T>::mantissa_explicit_bits());
|
|
131
|
+
am.power2++;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// check for infinite: we could have carried to an infinite power
|
|
135
|
+
am.mantissa &= ~(uint64_t(1) << binary_format<T>::mantissa_explicit_bits());
|
|
136
|
+
if (am.power2 >= binary_format<T>::infinite_power()) {
|
|
137
|
+
am.power2 = binary_format<T>::infinite_power();
|
|
138
|
+
am.mantissa = 0;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
template <typename callback>
|
|
143
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR14 void
|
|
144
|
+
round_nearest_tie_even(adjusted_mantissa &am, int32_t shift,
|
|
145
|
+
callback cb) noexcept {
|
|
146
|
+
uint64_t const mask = (shift == 64) ? UINT64_MAX : (uint64_t(1) << shift) - 1;
|
|
147
|
+
uint64_t const halfway = (shift == 0) ? 0 : uint64_t(1) << (shift - 1);
|
|
148
|
+
uint64_t truncated_bits = am.mantissa & mask;
|
|
149
|
+
bool is_above = truncated_bits > halfway;
|
|
150
|
+
bool is_halfway = truncated_bits == halfway;
|
|
151
|
+
|
|
152
|
+
// shift digits into position
|
|
153
|
+
if (shift == 64) {
|
|
154
|
+
am.mantissa = 0;
|
|
155
|
+
} else {
|
|
156
|
+
am.mantissa >>= shift;
|
|
157
|
+
}
|
|
158
|
+
am.power2 += shift;
|
|
159
|
+
|
|
160
|
+
bool is_odd = (am.mantissa & 1) == 1;
|
|
161
|
+
am.mantissa += uint64_t(cb(is_odd, is_halfway, is_above));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR14 void
|
|
165
|
+
round_down(adjusted_mantissa &am, int32_t shift) noexcept {
|
|
166
|
+
if (shift == 64) {
|
|
167
|
+
am.mantissa = 0;
|
|
168
|
+
} else {
|
|
169
|
+
am.mantissa >>= shift;
|
|
170
|
+
}
|
|
171
|
+
am.power2 += shift;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
template <typename UC>
|
|
175
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void
|
|
176
|
+
skip_zeros(UC const *&first, UC const *last) noexcept {
|
|
177
|
+
uint64_t val;
|
|
178
|
+
while (!cpp20_and_in_constexpr() &&
|
|
179
|
+
std::distance(first, last) >= int_cmp_len<UC>()) {
|
|
180
|
+
::memcpy(&val, first, sizeof(uint64_t));
|
|
181
|
+
if (val != int_cmp_zeros<UC>()) {
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
first += int_cmp_len<UC>();
|
|
185
|
+
}
|
|
186
|
+
while (first != last) {
|
|
187
|
+
if (*first != UC('0')) {
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
first++;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// determine if any non-zero digits were truncated.
|
|
195
|
+
// all characters must be valid digits.
|
|
196
|
+
template <typename UC>
|
|
197
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 bool
|
|
198
|
+
is_truncated(UC const *first, UC const *last) noexcept {
|
|
199
|
+
// do 8-bit optimizations, can just compare to 8 literal 0s.
|
|
200
|
+
uint64_t val;
|
|
201
|
+
while (!cpp20_and_in_constexpr() &&
|
|
202
|
+
std::distance(first, last) >= int_cmp_len<UC>()) {
|
|
203
|
+
::memcpy(&val, first, sizeof(uint64_t));
|
|
204
|
+
if (val != int_cmp_zeros<UC>()) {
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
first += int_cmp_len<UC>();
|
|
208
|
+
}
|
|
209
|
+
while (first != last) {
|
|
210
|
+
if (*first != UC('0')) {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
++first;
|
|
214
|
+
}
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
template <typename UC>
|
|
219
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 bool
|
|
220
|
+
is_truncated(span<UC const> s) noexcept {
|
|
221
|
+
return is_truncated(s.ptr, s.ptr + s.len());
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
template <typename UC>
|
|
225
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void
|
|
226
|
+
parse_eight_digits(UC const *&p, limb &value, size_t &counter,
|
|
227
|
+
size_t &count) noexcept {
|
|
228
|
+
value = value * 100000000 + parse_eight_digits_unrolled(p);
|
|
229
|
+
p += 8;
|
|
230
|
+
counter += 8;
|
|
231
|
+
count += 8;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
template <typename UC>
|
|
235
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR14 void
|
|
236
|
+
parse_one_digit(UC const *&p, limb &value, size_t &counter,
|
|
237
|
+
size_t &count) noexcept {
|
|
238
|
+
value = value * 10 + limb(*p - UC('0'));
|
|
239
|
+
p++;
|
|
240
|
+
counter++;
|
|
241
|
+
count++;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void
|
|
245
|
+
add_native(bigint &big, limb power, limb value) noexcept {
|
|
246
|
+
big.mul(power);
|
|
247
|
+
big.add(value);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void
|
|
251
|
+
round_up_bigint(bigint &big, size_t &count) noexcept {
|
|
252
|
+
// need to round-up the digits, but need to avoid rounding
|
|
253
|
+
// ....9999 to ...10000, which could cause a false halfway point.
|
|
254
|
+
add_native(big, 10, 1);
|
|
255
|
+
count++;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// parse the significant digits into a big integer
|
|
259
|
+
template <typename UC>
|
|
260
|
+
inline FASTFLOAT_CONSTEXPR20 void
|
|
261
|
+
parse_mantissa(bigint &result, parsed_number_string_t<UC> &num,
|
|
262
|
+
size_t max_digits, size_t &digits) noexcept {
|
|
263
|
+
// try to minimize the number of big integer and scalar multiplication.
|
|
264
|
+
// therefore, try to parse 8 digits at a time, and multiply by the largest
|
|
265
|
+
// scalar value (9 or 19 digits) for each step.
|
|
266
|
+
size_t counter = 0;
|
|
267
|
+
digits = 0;
|
|
268
|
+
limb value = 0;
|
|
269
|
+
#ifdef FASTFLOAT_64BIT_LIMB
|
|
270
|
+
size_t step = 19;
|
|
271
|
+
#else
|
|
272
|
+
size_t step = 9;
|
|
273
|
+
#endif
|
|
274
|
+
|
|
275
|
+
// process all integer digits.
|
|
276
|
+
UC const *p = num.integer.ptr;
|
|
277
|
+
UC const *pend = p + num.integer.len();
|
|
278
|
+
skip_zeros(p, pend);
|
|
279
|
+
// process all digits, in increments of step per loop
|
|
280
|
+
while (p != pend) {
|
|
281
|
+
while ((std::distance(p, pend) >= 8) && (step - counter >= 8) &&
|
|
282
|
+
(max_digits - digits >= 8)) {
|
|
283
|
+
parse_eight_digits(p, value, counter, digits);
|
|
284
|
+
}
|
|
285
|
+
while (counter < step && p != pend && digits < max_digits) {
|
|
286
|
+
parse_one_digit(p, value, counter, digits);
|
|
287
|
+
}
|
|
288
|
+
if (digits == max_digits) {
|
|
289
|
+
// add the temporary value, then check if we've truncated any digits
|
|
290
|
+
add_native(result, limb(powers_of_ten_uint64[counter]), value);
|
|
291
|
+
bool truncated = is_truncated(p, pend);
|
|
292
|
+
if (num.fraction.ptr != nullptr) {
|
|
293
|
+
truncated |= is_truncated(num.fraction);
|
|
294
|
+
}
|
|
295
|
+
if (truncated) {
|
|
296
|
+
round_up_bigint(result, digits);
|
|
297
|
+
}
|
|
298
|
+
return;
|
|
299
|
+
} else {
|
|
300
|
+
add_native(result, limb(powers_of_ten_uint64[counter]), value);
|
|
301
|
+
counter = 0;
|
|
302
|
+
value = 0;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// add our fraction digits, if they're available.
|
|
307
|
+
if (num.fraction.ptr != nullptr) {
|
|
308
|
+
p = num.fraction.ptr;
|
|
309
|
+
pend = p + num.fraction.len();
|
|
310
|
+
if (digits == 0) {
|
|
311
|
+
skip_zeros(p, pend);
|
|
312
|
+
}
|
|
313
|
+
// process all digits, in increments of step per loop
|
|
314
|
+
while (p != pend) {
|
|
315
|
+
while ((std::distance(p, pend) >= 8) && (step - counter >= 8) &&
|
|
316
|
+
(max_digits - digits >= 8)) {
|
|
317
|
+
parse_eight_digits(p, value, counter, digits);
|
|
318
|
+
}
|
|
319
|
+
while (counter < step && p != pend && digits < max_digits) {
|
|
320
|
+
parse_one_digit(p, value, counter, digits);
|
|
321
|
+
}
|
|
322
|
+
if (digits == max_digits) {
|
|
323
|
+
// add the temporary value, then check if we've truncated any digits
|
|
324
|
+
add_native(result, limb(powers_of_ten_uint64[counter]), value);
|
|
325
|
+
bool truncated = is_truncated(p, pend);
|
|
326
|
+
if (truncated) {
|
|
327
|
+
round_up_bigint(result, digits);
|
|
328
|
+
}
|
|
329
|
+
return;
|
|
330
|
+
} else {
|
|
331
|
+
add_native(result, limb(powers_of_ten_uint64[counter]), value);
|
|
332
|
+
counter = 0;
|
|
333
|
+
value = 0;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
if (counter != 0) {
|
|
339
|
+
add_native(result, limb(powers_of_ten_uint64[counter]), value);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
template <typename T>
|
|
344
|
+
inline FASTFLOAT_CONSTEXPR20 adjusted_mantissa
|
|
345
|
+
positive_digit_comp(bigint &bigmant, int32_t exponent) noexcept {
|
|
346
|
+
FASTFLOAT_ASSERT(bigmant.pow10(uint32_t(exponent)));
|
|
347
|
+
adjusted_mantissa answer;
|
|
348
|
+
bool truncated;
|
|
349
|
+
answer.mantissa = bigmant.hi64(truncated);
|
|
350
|
+
int bias = binary_format<T>::mantissa_explicit_bits() -
|
|
351
|
+
binary_format<T>::minimum_exponent();
|
|
352
|
+
answer.power2 = bigmant.bit_length() - 64 + bias;
|
|
353
|
+
|
|
354
|
+
round<T>(answer, [truncated](adjusted_mantissa &a, int32_t shift) {
|
|
355
|
+
round_nearest_tie_even(
|
|
356
|
+
a, shift,
|
|
357
|
+
[truncated](bool is_odd, bool is_halfway, bool is_above) -> bool {
|
|
358
|
+
return is_above || (is_halfway && truncated) ||
|
|
359
|
+
(is_odd && is_halfway);
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
return answer;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// the scaling here is quite simple: we have, for the real digits `m * 10^e`,
|
|
367
|
+
// and for the theoretical digits `n * 2^f`. Since `e` is always negative,
|
|
368
|
+
// to scale them identically, we do `n * 2^f * 5^-f`, so we now have `m * 2^e`.
|
|
369
|
+
// we then need to scale by `2^(f- e)`, and then the two significant digits
|
|
370
|
+
// are of the same magnitude.
|
|
371
|
+
template <typename T>
|
|
372
|
+
inline FASTFLOAT_CONSTEXPR20 adjusted_mantissa negative_digit_comp(
|
|
373
|
+
bigint &bigmant, adjusted_mantissa am, int32_t exponent) noexcept {
|
|
374
|
+
bigint &real_digits = bigmant;
|
|
375
|
+
int32_t real_exp = exponent;
|
|
376
|
+
|
|
377
|
+
// get the value of `b`, rounded down, and get a bigint representation of b+h
|
|
378
|
+
adjusted_mantissa am_b = am;
|
|
379
|
+
// gcc7 buf: use a lambda to remove the noexcept qualifier bug with
|
|
380
|
+
// -Wnoexcept-type.
|
|
381
|
+
round<T>(am_b,
|
|
382
|
+
[](adjusted_mantissa &a, int32_t shift) { round_down(a, shift); });
|
|
383
|
+
T b;
|
|
384
|
+
to_float(false, am_b, b);
|
|
385
|
+
adjusted_mantissa theor = to_extended_halfway(b);
|
|
386
|
+
bigint theor_digits(theor.mantissa);
|
|
387
|
+
int32_t theor_exp = theor.power2;
|
|
388
|
+
|
|
389
|
+
// scale real digits and theor digits to be same power.
|
|
390
|
+
int32_t pow2_exp = theor_exp - real_exp;
|
|
391
|
+
uint32_t pow5_exp = uint32_t(-real_exp);
|
|
392
|
+
if (pow5_exp != 0) {
|
|
393
|
+
FASTFLOAT_ASSERT(theor_digits.pow5(pow5_exp));
|
|
394
|
+
}
|
|
395
|
+
if (pow2_exp > 0) {
|
|
396
|
+
FASTFLOAT_ASSERT(theor_digits.pow2(uint32_t(pow2_exp)));
|
|
397
|
+
} else if (pow2_exp < 0) {
|
|
398
|
+
FASTFLOAT_ASSERT(real_digits.pow2(uint32_t(-pow2_exp)));
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// compare digits, and use it to director rounding
|
|
402
|
+
int ord = real_digits.compare(theor_digits);
|
|
403
|
+
adjusted_mantissa answer = am;
|
|
404
|
+
round<T>(answer, [ord](adjusted_mantissa &a, int32_t shift) {
|
|
405
|
+
round_nearest_tie_even(
|
|
406
|
+
a, shift, [ord](bool is_odd, bool _, bool __) -> bool {
|
|
407
|
+
(void)_; // not needed, since we've done our comparison
|
|
408
|
+
(void)__; // not needed, since we've done our comparison
|
|
409
|
+
if (ord > 0) {
|
|
410
|
+
return true;
|
|
411
|
+
} else if (ord < 0) {
|
|
412
|
+
return false;
|
|
413
|
+
} else {
|
|
414
|
+
return is_odd;
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
return answer;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// parse the significant digits as a big integer to unambiguously round the
|
|
423
|
+
// the significant digits. here, we are trying to determine how to round
|
|
424
|
+
// an extended float representation close to `b+h`, halfway between `b`
|
|
425
|
+
// (the float rounded-down) and `b+u`, the next positive float. this
|
|
426
|
+
// algorithm is always correct, and uses one of two approaches. when
|
|
427
|
+
// the exponent is positive relative to the significant digits (such as
|
|
428
|
+
// 1234), we create a big-integer representation, get the high 64-bits,
|
|
429
|
+
// determine if any lower bits are truncated, and use that to direct
|
|
430
|
+
// rounding. in case of a negative exponent relative to the significant
|
|
431
|
+
// digits (such as 1.2345), we create a theoretical representation of
|
|
432
|
+
// `b` as a big-integer type, scaled to the same binary exponent as
|
|
433
|
+
// the actual digits. we then compare the big integer representations
|
|
434
|
+
// of both, and use that to direct rounding.
|
|
435
|
+
template <typename T, typename UC>
|
|
436
|
+
inline FASTFLOAT_CONSTEXPR20 adjusted_mantissa
|
|
437
|
+
digit_comp(parsed_number_string_t<UC> &num, adjusted_mantissa am) noexcept {
|
|
438
|
+
// remove the invalid exponent bias
|
|
439
|
+
am.power2 -= invalid_am_bias;
|
|
440
|
+
|
|
441
|
+
int32_t sci_exp = scientific_exponent(num);
|
|
442
|
+
size_t max_digits = binary_format<T>::max_digits();
|
|
443
|
+
size_t digits = 0;
|
|
444
|
+
bigint bigmant;
|
|
445
|
+
parse_mantissa(bigmant, num, max_digits, digits);
|
|
446
|
+
// can't underflow, since digits is at most max_digits.
|
|
447
|
+
int32_t exponent = sci_exp + 1 - int32_t(digits);
|
|
448
|
+
if (exponent >= 0) {
|
|
449
|
+
return positive_digit_comp<T>(bigmant, exponent);
|
|
450
|
+
} else {
|
|
451
|
+
return negative_digit_comp<T>(bigmant, am, exponent);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
} // namespace fast_float
|
|
456
|
+
|
|
457
|
+
#endif
|