react-native-windows 0.84.0 → 0.84.2
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/TextInput/WindowsTextInputComponentView.cpp +1 -1
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -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 +10 -1
- package/PropertySheets/React.Cpp.props +3 -3
- package/PropertySheets/WinUI.props +2 -1
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/EnableInternalWinAppSDKFeed.ps1 +12 -5
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +5 -8
- package/Scripts/creaternwlib.cmd +10 -23
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/external/fmt/include/fmt/base.h +3077 -0
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/{fmt → external/folly/folly}/.clang-format +0 -1
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/external/folly/folly/hash/SpookyHashV2.h +339 -0
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/package.json +6 -6
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/example/metro.config.js +30 -4
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -378
- package/Folly/Folly.vcxproj.filters +0 -558
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{fmt → external/fmt}/cgmanifest.json +0 -0
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,900 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <cassert>
|
|
20
|
+
#include <cerrno>
|
|
21
|
+
#include <cstddef>
|
|
22
|
+
#include <cstdlib>
|
|
23
|
+
#include <exception>
|
|
24
|
+
#include <limits>
|
|
25
|
+
#include <memory>
|
|
26
|
+
#include <stdexcept>
|
|
27
|
+
#include <type_traits>
|
|
28
|
+
#include <utility>
|
|
29
|
+
|
|
30
|
+
#include <folly/ConstexprMath.h>
|
|
31
|
+
#include <folly/Likely.h>
|
|
32
|
+
#include <folly/Portability.h>
|
|
33
|
+
#include <folly/Traits.h>
|
|
34
|
+
#include <folly/Utility.h>
|
|
35
|
+
#include <folly/functional/Invoke.h>
|
|
36
|
+
#include <folly/lang/Align.h>
|
|
37
|
+
#include <folly/lang/Exception.h>
|
|
38
|
+
#include <folly/lang/Thunk.h>
|
|
39
|
+
#include <folly/memory/Malloc.h>
|
|
40
|
+
#include <folly/portability/Config.h>
|
|
41
|
+
#include <folly/portability/Constexpr.h>
|
|
42
|
+
#include <folly/portability/Malloc.h>
|
|
43
|
+
|
|
44
|
+
namespace folly {
|
|
45
|
+
|
|
46
|
+
namespace access {
|
|
47
|
+
|
|
48
|
+
/// to_address_fn
|
|
49
|
+
/// to_address
|
|
50
|
+
///
|
|
51
|
+
/// mimic: std::to_address (C++20)
|
|
52
|
+
///
|
|
53
|
+
/// adapted from: https://en.cppreference.com/w/cpp/memory/to_address, CC-BY-SA
|
|
54
|
+
struct to_address_fn {
|
|
55
|
+
private:
|
|
56
|
+
template <template <typename...> typename T, typename A, typename... B>
|
|
57
|
+
static tag_t<A> get_first_arg(tag_t<T<A, B...>>);
|
|
58
|
+
template <typename T>
|
|
59
|
+
using first_arg_of = type_list_element_t<0, decltype(get_first_arg(tag<T>))>;
|
|
60
|
+
template <typename T>
|
|
61
|
+
using detect_element_type = typename T::element_type;
|
|
62
|
+
template <typename T>
|
|
63
|
+
using element_type_of =
|
|
64
|
+
detected_or_t<first_arg_of<T>, detect_element_type, T>;
|
|
65
|
+
|
|
66
|
+
template <typename T>
|
|
67
|
+
using detect_to_address =
|
|
68
|
+
decltype(std::pointer_traits<T>::to_address(FOLLY_DECLVAL(T const&)));
|
|
69
|
+
|
|
70
|
+
template <typename T>
|
|
71
|
+
static inline constexpr bool use_pointer_traits_to_address = Conjunction<
|
|
72
|
+
is_detected<element_type_of, T>,
|
|
73
|
+
is_detected<detect_to_address, T>>::value;
|
|
74
|
+
|
|
75
|
+
public:
|
|
76
|
+
template <typename T>
|
|
77
|
+
constexpr T* operator()(T* p) const noexcept {
|
|
78
|
+
static_assert(!std::is_function_v<T>);
|
|
79
|
+
return p;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
template <typename T>
|
|
83
|
+
constexpr auto operator()(T const& p) const noexcept {
|
|
84
|
+
if constexpr (use_pointer_traits_to_address<T>) {
|
|
85
|
+
static_assert(noexcept(std::pointer_traits<T>::to_address(p)));
|
|
86
|
+
return std::pointer_traits<T>::to_address(p);
|
|
87
|
+
} else {
|
|
88
|
+
static_assert(noexcept(operator()(p.operator->())));
|
|
89
|
+
return operator()(p.operator->());
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
inline constexpr to_address_fn to_address;
|
|
94
|
+
|
|
95
|
+
} // namespace access
|
|
96
|
+
|
|
97
|
+
#if (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) || \
|
|
98
|
+
(defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600) || \
|
|
99
|
+
(defined(__ANDROID__) && (__ANDROID_API__ > 16)) || \
|
|
100
|
+
(defined(__APPLE__)) || defined(__FreeBSD__) || defined(__wasm32__)
|
|
101
|
+
|
|
102
|
+
inline void* aligned_malloc(size_t size, size_t align) {
|
|
103
|
+
// use posix_memalign, but mimic the behaviour of memalign
|
|
104
|
+
void* ptr = nullptr;
|
|
105
|
+
int rc = posix_memalign(&ptr, align, size);
|
|
106
|
+
return rc == 0 ? (errno = 0, ptr) : (errno = rc, nullptr);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
inline void aligned_free(void* aligned_ptr) {
|
|
110
|
+
free(aligned_ptr);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
#elif defined(_WIN32)
|
|
114
|
+
|
|
115
|
+
inline void* aligned_malloc(size_t size, size_t align) {
|
|
116
|
+
return _aligned_malloc(size, align);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
inline void aligned_free(void* aligned_ptr) {
|
|
120
|
+
_aligned_free(aligned_ptr);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
#else
|
|
124
|
+
|
|
125
|
+
inline void* aligned_malloc(size_t size, size_t align) {
|
|
126
|
+
return memalign(align, size);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
inline void aligned_free(void* aligned_ptr) {
|
|
130
|
+
free(aligned_ptr);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
#endif
|
|
134
|
+
|
|
135
|
+
namespace detail {
|
|
136
|
+
template <typename Alloc, size_t kAlign, bool kAllocate>
|
|
137
|
+
void rawOverAlignedImpl(Alloc const& alloc, size_t n, void*& raw) {
|
|
138
|
+
static_assert((kAlign & (kAlign - 1)) == 0, "Align must be a power of 2");
|
|
139
|
+
|
|
140
|
+
using AllocTraits = std::allocator_traits<Alloc>;
|
|
141
|
+
using T = typename AllocTraits::value_type;
|
|
142
|
+
|
|
143
|
+
constexpr bool kCanBypass = std::is_same<Alloc, std::allocator<T>>::value;
|
|
144
|
+
|
|
145
|
+
// BaseType is a type that gives us as much alignment as we need if
|
|
146
|
+
// we can get it naturally, otherwise it is aligned as max_align_t.
|
|
147
|
+
// kBaseAlign is both the alignment and size of this type.
|
|
148
|
+
constexpr size_t kBaseAlign = constexpr_min(kAlign, alignof(max_align_t));
|
|
149
|
+
using BaseType = folly::aligned_storage_t<kBaseAlign, kBaseAlign>;
|
|
150
|
+
using BaseAllocTraits =
|
|
151
|
+
typename AllocTraits::template rebind_traits<BaseType>;
|
|
152
|
+
using BaseAlloc = typename BaseAllocTraits::allocator_type;
|
|
153
|
+
static_assert(
|
|
154
|
+
sizeof(BaseType) == kBaseAlign && alignof(BaseType) == kBaseAlign, "");
|
|
155
|
+
|
|
156
|
+
#if defined(__cpp_sized_deallocation)
|
|
157
|
+
if (kCanBypass && kAlign == kBaseAlign) {
|
|
158
|
+
// until std::allocator uses sized deallocation, it is worth the
|
|
159
|
+
// effort to bypass it when we are able
|
|
160
|
+
if (kAllocate) {
|
|
161
|
+
raw = ::operator new(n * sizeof(T));
|
|
162
|
+
} else {
|
|
163
|
+
::operator delete(raw, n * sizeof(T));
|
|
164
|
+
}
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
#endif
|
|
168
|
+
|
|
169
|
+
if (kCanBypass && kAlign > kBaseAlign) {
|
|
170
|
+
// allocating as BaseType isn't sufficient to get alignment, but
|
|
171
|
+
// since we can bypass Alloc we can use something like posix_memalign.
|
|
172
|
+
if (kAllocate) {
|
|
173
|
+
raw = aligned_malloc(n * sizeof(T), kAlign);
|
|
174
|
+
} else {
|
|
175
|
+
aligned_free(raw);
|
|
176
|
+
}
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// we're not allowed to bypass Alloc, or we don't want to
|
|
181
|
+
BaseAlloc a(alloc);
|
|
182
|
+
|
|
183
|
+
// allocation size is counted in sizeof(BaseType)
|
|
184
|
+
size_t quanta = (n * sizeof(T) + kBaseAlign - 1) / sizeof(BaseType);
|
|
185
|
+
if (kAlign <= kBaseAlign) {
|
|
186
|
+
// rebinding Alloc to BaseType is sufficient to get us the alignment
|
|
187
|
+
// we want, happy path
|
|
188
|
+
if (kAllocate) {
|
|
189
|
+
raw = static_cast<void*>(
|
|
190
|
+
std::addressof(*BaseAllocTraits::allocate(a, quanta)));
|
|
191
|
+
} else {
|
|
192
|
+
BaseAllocTraits::deallocate(
|
|
193
|
+
a,
|
|
194
|
+
std::pointer_traits<typename BaseAllocTraits::pointer>::pointer_to(
|
|
195
|
+
*static_cast<BaseType*>(raw)),
|
|
196
|
+
quanta);
|
|
197
|
+
}
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Overaligned and custom allocator, our only option is to
|
|
202
|
+
// overallocate and store a delta to the actual allocation just
|
|
203
|
+
// before the returned ptr.
|
|
204
|
+
//
|
|
205
|
+
// If we give ourselves kAlign extra bytes, then since
|
|
206
|
+
// sizeof(BaseType) divides kAlign we can meet alignment while
|
|
207
|
+
// getting a prefix of one BaseType. If we happen to get a
|
|
208
|
+
// kAlign-aligned block, then we can return a pointer to underlying
|
|
209
|
+
// + kAlign, otherwise there will be at least kBaseAlign bytes in
|
|
210
|
+
// the unused prefix of the first kAlign-aligned block.
|
|
211
|
+
if (kAllocate) {
|
|
212
|
+
char* base = reinterpret_cast<char*>(std::addressof(
|
|
213
|
+
*BaseAllocTraits::allocate(a, quanta + kAlign / sizeof(BaseType))));
|
|
214
|
+
size_t byteDelta =
|
|
215
|
+
kAlign - (reinterpret_cast<uintptr_t>(base) & (kAlign - 1));
|
|
216
|
+
raw = static_cast<void*>(base + byteDelta);
|
|
217
|
+
static_cast<size_t*>(raw)[-1] = byteDelta;
|
|
218
|
+
} else {
|
|
219
|
+
size_t byteDelta = static_cast<size_t*>(raw)[-1];
|
|
220
|
+
char* base = static_cast<char*>(raw) - byteDelta;
|
|
221
|
+
BaseAllocTraits::deallocate(
|
|
222
|
+
a,
|
|
223
|
+
std::pointer_traits<typename BaseAllocTraits::pointer>::pointer_to(
|
|
224
|
+
*reinterpret_cast<BaseType*>(base)),
|
|
225
|
+
quanta + kAlign / sizeof(BaseType));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
} // namespace detail
|
|
229
|
+
|
|
230
|
+
// Works like std::allocator_traits<Alloc>::allocate, but handles
|
|
231
|
+
// over-aligned types. Feel free to manually specify any power of two as
|
|
232
|
+
// the Align template arg. Must be matched with deallocateOverAligned.
|
|
233
|
+
// allocationBytesForOverAligned will give you the number of bytes that
|
|
234
|
+
// this function actually requests.
|
|
235
|
+
template <
|
|
236
|
+
typename Alloc,
|
|
237
|
+
size_t kAlign = alignof(typename std::allocator_traits<Alloc>::value_type)>
|
|
238
|
+
typename std::allocator_traits<Alloc>::pointer allocateOverAligned(
|
|
239
|
+
Alloc const& alloc, size_t n) {
|
|
240
|
+
void* raw = nullptr;
|
|
241
|
+
detail::rawOverAlignedImpl<Alloc, kAlign, true>(alloc, n, raw);
|
|
242
|
+
return std::pointer_traits<typename std::allocator_traits<Alloc>::pointer>::
|
|
243
|
+
pointer_to(
|
|
244
|
+
*static_cast<typename std::allocator_traits<Alloc>::value_type*>(
|
|
245
|
+
raw));
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
template <
|
|
249
|
+
typename Alloc,
|
|
250
|
+
size_t kAlign = alignof(typename std::allocator_traits<Alloc>::value_type)>
|
|
251
|
+
void deallocateOverAligned(
|
|
252
|
+
Alloc const& alloc,
|
|
253
|
+
typename std::allocator_traits<Alloc>::pointer ptr,
|
|
254
|
+
size_t n) {
|
|
255
|
+
void* raw = static_cast<void*>(std::addressof(*ptr));
|
|
256
|
+
detail::rawOverAlignedImpl<Alloc, kAlign, false>(alloc, n, raw);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
template <
|
|
260
|
+
typename Alloc,
|
|
261
|
+
size_t kAlign = alignof(typename std::allocator_traits<Alloc>::value_type)>
|
|
262
|
+
size_t allocationBytesForOverAligned(size_t n) {
|
|
263
|
+
static_assert((kAlign & (kAlign - 1)) == 0, "Align must be a power of 2");
|
|
264
|
+
|
|
265
|
+
using AllocTraits = std::allocator_traits<Alloc>;
|
|
266
|
+
using T = typename AllocTraits::value_type;
|
|
267
|
+
|
|
268
|
+
constexpr size_t kBaseAlign = constexpr_min(kAlign, alignof(max_align_t));
|
|
269
|
+
|
|
270
|
+
if (kAlign > kBaseAlign && std::is_same<Alloc, std::allocator<T>>::value) {
|
|
271
|
+
return n * sizeof(T);
|
|
272
|
+
} else {
|
|
273
|
+
size_t quanta = (n * sizeof(T) + kBaseAlign - 1) / kBaseAlign;
|
|
274
|
+
if (kAlign > kBaseAlign) {
|
|
275
|
+
quanta += kAlign / kBaseAlign;
|
|
276
|
+
}
|
|
277
|
+
return quanta * kBaseAlign;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* static_function_deleter
|
|
283
|
+
*
|
|
284
|
+
* So you can write this:
|
|
285
|
+
*
|
|
286
|
+
* using RSA_deleter = folly::static_function_deleter<RSA, &RSA_free>;
|
|
287
|
+
* auto rsa = std::unique_ptr<RSA, RSA_deleter>(RSA_new());
|
|
288
|
+
* RSA_generate_key_ex(rsa.get(), bits, exponent, nullptr);
|
|
289
|
+
* rsa = nullptr; // calls RSA_free(rsa.get())
|
|
290
|
+
*
|
|
291
|
+
* This would be sweet as well for BIO, but unfortunately BIO_free has signature
|
|
292
|
+
* int(BIO*) while we require signature void(BIO*). So you would need to make a
|
|
293
|
+
* wrapper for it:
|
|
294
|
+
*
|
|
295
|
+
* inline void BIO_free_fb(BIO* bio) { CHECK_EQ(1, BIO_free(bio)); }
|
|
296
|
+
* using BIO_deleter = folly::static_function_deleter<BIO, &BIO_free_fb>;
|
|
297
|
+
* auto buf = std::unique_ptr<BIO, BIO_deleter>(BIO_new(BIO_s_mem()));
|
|
298
|
+
* buf = nullptr; // calls BIO_free(buf.get())
|
|
299
|
+
*/
|
|
300
|
+
|
|
301
|
+
template <typename T, void (*f)(T*)>
|
|
302
|
+
struct static_function_deleter {
|
|
303
|
+
void operator()(T* t) const { f(t); }
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* to_shared_ptr
|
|
308
|
+
*
|
|
309
|
+
* Convert unique_ptr to shared_ptr without specifying the template type
|
|
310
|
+
* parameter and letting the compiler deduce it.
|
|
311
|
+
*
|
|
312
|
+
* So you can write this:
|
|
313
|
+
*
|
|
314
|
+
* auto sptr = to_shared_ptr(getSomethingUnique<T>());
|
|
315
|
+
*
|
|
316
|
+
* Instead of this:
|
|
317
|
+
*
|
|
318
|
+
* auto sptr = shared_ptr<T>(getSomethingUnique<T>());
|
|
319
|
+
*
|
|
320
|
+
* Useful when `T` is long, such as:
|
|
321
|
+
*
|
|
322
|
+
* using T = foobar::FooBarAsyncClient;
|
|
323
|
+
*/
|
|
324
|
+
template <typename T, typename D>
|
|
325
|
+
std::shared_ptr<T> to_shared_ptr(std::unique_ptr<T, D>&& ptr) {
|
|
326
|
+
return std::shared_ptr<T>(std::move(ptr));
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* to_shared_ptr_aliasing
|
|
331
|
+
*/
|
|
332
|
+
template <typename T, typename U>
|
|
333
|
+
std::shared_ptr<U> to_shared_ptr_aliasing(std::shared_ptr<T> const& r, U* ptr) {
|
|
334
|
+
return std::shared_ptr<U>(r, ptr);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* to_weak_ptr
|
|
339
|
+
*
|
|
340
|
+
* Make a weak_ptr and return it from a shared_ptr without specifying the
|
|
341
|
+
* template type parameter and letting the compiler deduce it.
|
|
342
|
+
*
|
|
343
|
+
* So you can write this:
|
|
344
|
+
*
|
|
345
|
+
* auto wptr = to_weak_ptr(getSomethingShared<T>());
|
|
346
|
+
*
|
|
347
|
+
* Instead of this:
|
|
348
|
+
*
|
|
349
|
+
* auto wptr = weak_ptr<T>(getSomethingShared<T>());
|
|
350
|
+
*
|
|
351
|
+
* Useful when `T` is long, such as:
|
|
352
|
+
*
|
|
353
|
+
* using T = foobar::FooBarAsyncClient;
|
|
354
|
+
*/
|
|
355
|
+
template <typename T>
|
|
356
|
+
std::weak_ptr<T> to_weak_ptr(const std::shared_ptr<T>& ptr) {
|
|
357
|
+
return ptr;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
#if defined(__GLIBCXX__)
|
|
361
|
+
namespace detail {
|
|
362
|
+
void weak_ptr_set_stored_ptr(std::weak_ptr<void>& w, void* ptr);
|
|
363
|
+
|
|
364
|
+
template <typename Tag, void* std::__weak_ptr<void>::*WeakPtr_Ptr_Field>
|
|
365
|
+
struct GenerateWeakPtrInternalsAccessor {
|
|
366
|
+
friend void weak_ptr_set_stored_ptr(std::weak_ptr<void>& w, void* ptr) {
|
|
367
|
+
w.*WeakPtr_Ptr_Field = ptr;
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
// Each template instantiation of GenerateWeakPtrInternalsAccessor must
|
|
372
|
+
// be a new type, to avoid ODR problems. We do this by tagging it with
|
|
373
|
+
// a type from an anon namespace.
|
|
374
|
+
namespace {
|
|
375
|
+
struct MemoryAnonTag {};
|
|
376
|
+
} // namespace
|
|
377
|
+
|
|
378
|
+
template struct GenerateWeakPtrInternalsAccessor<
|
|
379
|
+
MemoryAnonTag,
|
|
380
|
+
&std::__weak_ptr<void>::_M_ptr>;
|
|
381
|
+
} // namespace detail
|
|
382
|
+
#endif
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* to_weak_ptr_aliasing
|
|
386
|
+
*
|
|
387
|
+
* Like to_weak_ptr, but arranges that lock().get() on the returned
|
|
388
|
+
* pointer points to ptr rather than r.get().
|
|
389
|
+
*
|
|
390
|
+
* Equivalent to:
|
|
391
|
+
*
|
|
392
|
+
* to_weak_ptr(std::shared_ptr<U>(r, ptr))
|
|
393
|
+
*
|
|
394
|
+
* For libstdc++, ABI-specific tricks are used to optimize the
|
|
395
|
+
* implementation.
|
|
396
|
+
*/
|
|
397
|
+
template <typename T, typename U>
|
|
398
|
+
std::weak_ptr<U> to_weak_ptr_aliasing(const std::shared_ptr<T>& r, U* ptr) {
|
|
399
|
+
#if defined(__GLIBCXX__)
|
|
400
|
+
std::weak_ptr<void> wv(r);
|
|
401
|
+
detail::weak_ptr_set_stored_ptr(wv, ptr);
|
|
402
|
+
FOLLY_PUSH_WARNING
|
|
403
|
+
FOLLY_GCC_DISABLE_WARNING("-Wstrict-aliasing")
|
|
404
|
+
return reinterpret_cast<std::weak_ptr<U>&&>(wv);
|
|
405
|
+
FOLLY_POP_WARNING
|
|
406
|
+
#else
|
|
407
|
+
return std::shared_ptr<U>(r, ptr);
|
|
408
|
+
#endif
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* copy_to_unique_ptr
|
|
413
|
+
*
|
|
414
|
+
* Move or copy the argument to the heap and return it owned by a unique_ptr.
|
|
415
|
+
*
|
|
416
|
+
* Like std::make_unique, but deduces the type of the owned object.
|
|
417
|
+
*/
|
|
418
|
+
template <typename T>
|
|
419
|
+
std::unique_ptr<remove_cvref_t<T>> copy_to_unique_ptr(T&& t) {
|
|
420
|
+
return std::make_unique<remove_cvref_t<T>>(static_cast<T&&>(t));
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* copy_to_shared_ptr
|
|
425
|
+
*
|
|
426
|
+
* Move or copy the argument to the heap and return it owned by a shared_ptr.
|
|
427
|
+
*
|
|
428
|
+
* Like make_shared, but deduces the type of the owned object.
|
|
429
|
+
*/
|
|
430
|
+
template <typename T>
|
|
431
|
+
std::shared_ptr<remove_cvref_t<T>> copy_to_shared_ptr(T&& t) {
|
|
432
|
+
return std::make_shared<remove_cvref_t<T>>(static_cast<T&&>(t));
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* copy_through_unique_ptr
|
|
437
|
+
*
|
|
438
|
+
* If the argument is nonnull, allocates a copy of its pointee.
|
|
439
|
+
*/
|
|
440
|
+
template <typename T>
|
|
441
|
+
std::unique_ptr<T> copy_through_unique_ptr(const std::unique_ptr<T>& t) {
|
|
442
|
+
static_assert(
|
|
443
|
+
!std::is_polymorphic<T>::value || std::is_final<T>::value,
|
|
444
|
+
"possibly slicing");
|
|
445
|
+
return t ? std::make_unique<T>(*t) : nullptr;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// erased_unique_ptr
|
|
449
|
+
//
|
|
450
|
+
// A type-erased smart-ptr with unique ownership to a heap-allocated object.
|
|
451
|
+
using erased_unique_ptr = std::unique_ptr<void, void (*)(void*)>;
|
|
452
|
+
|
|
453
|
+
namespace detail {
|
|
454
|
+
// for erased_unique_ptr with types that specialize default_delete
|
|
455
|
+
template <typename T>
|
|
456
|
+
void erased_unique_ptr_delete(void* ptr) {
|
|
457
|
+
std::default_delete<T>()(static_cast<T*>(ptr));
|
|
458
|
+
}
|
|
459
|
+
} // namespace detail
|
|
460
|
+
|
|
461
|
+
// to_erased_unique_ptr
|
|
462
|
+
//
|
|
463
|
+
// Converts an owning pointer to an object to an erased_unique_ptr.
|
|
464
|
+
template <typename T>
|
|
465
|
+
erased_unique_ptr to_erased_unique_ptr(T* const ptr) noexcept {
|
|
466
|
+
return {ptr, detail::erased_unique_ptr_delete<T>};
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// to_erased_unique_ptr
|
|
470
|
+
//
|
|
471
|
+
// Converts an owning std::unique_ptr to an erased_unique_ptr.
|
|
472
|
+
template <typename T>
|
|
473
|
+
erased_unique_ptr to_erased_unique_ptr(std::unique_ptr<T> ptr) noexcept {
|
|
474
|
+
return to_erased_unique_ptr(ptr.release());
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// make_erased_unique
|
|
478
|
+
//
|
|
479
|
+
// Allocate an object of the T on the heap, constructed with a..., and return
|
|
480
|
+
// an owning erased_unique_ptr to it.
|
|
481
|
+
template <typename T, typename... A>
|
|
482
|
+
erased_unique_ptr make_erased_unique(A&&... a) {
|
|
483
|
+
return to_erased_unique_ptr(std::make_unique<T>(static_cast<A&&>(a)...));
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// copy_to_erased_unique_ptr
|
|
487
|
+
//
|
|
488
|
+
// Copy an object to the heap and return an owning erased_unique_ptr to it.
|
|
489
|
+
template <typename T>
|
|
490
|
+
erased_unique_ptr copy_to_erased_unique_ptr(T&& obj) {
|
|
491
|
+
return to_erased_unique_ptr(copy_to_unique_ptr(static_cast<T&&>(obj)));
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// empty_erased_unique_ptr
|
|
495
|
+
//
|
|
496
|
+
// Return an empty erased_unique_ptr.
|
|
497
|
+
inline erased_unique_ptr empty_erased_unique_ptr() {
|
|
498
|
+
return {nullptr, nullptr};
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* SysAllocator
|
|
503
|
+
*
|
|
504
|
+
* Resembles std::allocator, the default Allocator, but wraps std::malloc and
|
|
505
|
+
* std::free.
|
|
506
|
+
*/
|
|
507
|
+
template <typename T>
|
|
508
|
+
class SysAllocator {
|
|
509
|
+
private:
|
|
510
|
+
using Self = SysAllocator<T>;
|
|
511
|
+
|
|
512
|
+
public:
|
|
513
|
+
using value_type = T;
|
|
514
|
+
|
|
515
|
+
constexpr SysAllocator() = default;
|
|
516
|
+
|
|
517
|
+
constexpr SysAllocator(SysAllocator const&) = default;
|
|
518
|
+
|
|
519
|
+
template <typename U, std::enable_if_t<!std::is_same<U, T>::value, int> = 0>
|
|
520
|
+
constexpr SysAllocator(SysAllocator<U> const&) noexcept {}
|
|
521
|
+
|
|
522
|
+
T* allocate(size_t count) {
|
|
523
|
+
auto const p = std::malloc(sizeof(T) * count);
|
|
524
|
+
if (!p) {
|
|
525
|
+
throw_exception<std::bad_alloc>();
|
|
526
|
+
}
|
|
527
|
+
return static_cast<T*>(p);
|
|
528
|
+
}
|
|
529
|
+
void deallocate(T* p, size_t count) { sizedFree(p, count * sizeof(T)); }
|
|
530
|
+
|
|
531
|
+
friend bool operator==(Self const&, Self const&) noexcept { return true; }
|
|
532
|
+
friend bool operator!=(Self const&, Self const&) noexcept { return false; }
|
|
533
|
+
};
|
|
534
|
+
|
|
535
|
+
class DefaultAlign {
|
|
536
|
+
private:
|
|
537
|
+
using Self = DefaultAlign;
|
|
538
|
+
std::size_t align_;
|
|
539
|
+
|
|
540
|
+
public:
|
|
541
|
+
explicit DefaultAlign(std::size_t align) noexcept : align_(align) {
|
|
542
|
+
assert(!(align_ < sizeof(void*)) && bool("bad align: too small"));
|
|
543
|
+
assert(!(align_ & (align_ - 1)) && bool("bad align: not power-of-two"));
|
|
544
|
+
}
|
|
545
|
+
std::size_t operator()() const noexcept { return align_; }
|
|
546
|
+
|
|
547
|
+
friend bool operator==(Self const& a, Self const& b) noexcept {
|
|
548
|
+
return a.align_ == b.align_;
|
|
549
|
+
}
|
|
550
|
+
friend bool operator!=(Self const& a, Self const& b) noexcept {
|
|
551
|
+
return a.align_ != b.align_;
|
|
552
|
+
}
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
template <std::size_t Align>
|
|
556
|
+
class FixedAlign {
|
|
557
|
+
private:
|
|
558
|
+
static_assert(!(Align < sizeof(void*)), "bad align: too small");
|
|
559
|
+
static_assert(!(Align & (Align - 1)), "bad align: not power-of-two");
|
|
560
|
+
using Self = FixedAlign<Align>;
|
|
561
|
+
|
|
562
|
+
public:
|
|
563
|
+
constexpr std::size_t operator()() const noexcept { return Align; }
|
|
564
|
+
|
|
565
|
+
friend bool operator==(Self const&, Self const&) noexcept { return true; }
|
|
566
|
+
friend bool operator!=(Self const&, Self const&) noexcept { return false; }
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* AlignedSysAllocator
|
|
571
|
+
*
|
|
572
|
+
* Resembles std::allocator, the default Allocator, but wraps aligned_malloc and
|
|
573
|
+
* aligned_free.
|
|
574
|
+
*
|
|
575
|
+
* Accepts a policy parameter for providing the alignment, which must:
|
|
576
|
+
* * be invocable as std::size_t(std::size_t) noexcept
|
|
577
|
+
* * taking the type alignment and returning the allocation alignment
|
|
578
|
+
* * be noexcept-copy-constructible
|
|
579
|
+
* * have noexcept operator==
|
|
580
|
+
* * have noexcept operator!=
|
|
581
|
+
* * not be final
|
|
582
|
+
*
|
|
583
|
+
* DefaultAlign and FixedAlign<std::size_t>, provided above, are valid policies.
|
|
584
|
+
*/
|
|
585
|
+
template <typename T, typename Align = DefaultAlign>
|
|
586
|
+
class AlignedSysAllocator : private Align {
|
|
587
|
+
private:
|
|
588
|
+
using Self = AlignedSysAllocator<T, Align>;
|
|
589
|
+
|
|
590
|
+
template <typename, typename>
|
|
591
|
+
friend class AlignedSysAllocator;
|
|
592
|
+
|
|
593
|
+
constexpr Align const& align() const { return *this; }
|
|
594
|
+
|
|
595
|
+
public:
|
|
596
|
+
static_assert(std::is_nothrow_copy_constructible<Align>::value, "");
|
|
597
|
+
static_assert(is_nothrow_invocable_r_v<std::size_t, Align>, "");
|
|
598
|
+
|
|
599
|
+
using value_type = T;
|
|
600
|
+
|
|
601
|
+
using propagate_on_container_copy_assignment = std::true_type;
|
|
602
|
+
using propagate_on_container_move_assignment = std::true_type;
|
|
603
|
+
using propagate_on_container_swap = std::true_type;
|
|
604
|
+
|
|
605
|
+
using Align::Align;
|
|
606
|
+
|
|
607
|
+
// TODO: remove this ctor, which is is no longer required as of under gcc7
|
|
608
|
+
template <
|
|
609
|
+
typename S = Align,
|
|
610
|
+
std::enable_if_t<std::is_default_constructible<S>::value, int> = 0>
|
|
611
|
+
constexpr AlignedSysAllocator() noexcept(noexcept(Align())) : Align() {}
|
|
612
|
+
|
|
613
|
+
constexpr AlignedSysAllocator(AlignedSysAllocator const&) = default;
|
|
614
|
+
|
|
615
|
+
template <typename U, std::enable_if_t<!std::is_same<U, T>::value, int> = 0>
|
|
616
|
+
constexpr AlignedSysAllocator(
|
|
617
|
+
AlignedSysAllocator<U, Align> const& other) noexcept
|
|
618
|
+
: Align(other.align()) {}
|
|
619
|
+
|
|
620
|
+
T* allocate(size_t count) {
|
|
621
|
+
auto const a = align()() < alignof(T) ? alignof(T) : align()();
|
|
622
|
+
auto const p = aligned_malloc(sizeof(T) * count, a);
|
|
623
|
+
if (!p) {
|
|
624
|
+
if (FOLLY_UNLIKELY(errno != ENOMEM)) {
|
|
625
|
+
std::terminate();
|
|
626
|
+
}
|
|
627
|
+
throw_exception<std::bad_alloc>();
|
|
628
|
+
}
|
|
629
|
+
return static_cast<T*>(p);
|
|
630
|
+
}
|
|
631
|
+
void deallocate(T* p, size_t /* count */) { aligned_free(p); }
|
|
632
|
+
|
|
633
|
+
friend bool operator==(Self const& a, Self const& b) noexcept {
|
|
634
|
+
return a.align() == b.align();
|
|
635
|
+
}
|
|
636
|
+
friend bool operator!=(Self const& a, Self const& b) noexcept {
|
|
637
|
+
return a.align() != b.align();
|
|
638
|
+
}
|
|
639
|
+
};
|
|
640
|
+
|
|
641
|
+
/**
|
|
642
|
+
* CxxAllocatorAdaptor
|
|
643
|
+
*
|
|
644
|
+
* A type conforming to C++ concept Allocator, delegating operations to an
|
|
645
|
+
* unowned Inner which has this required interface:
|
|
646
|
+
*
|
|
647
|
+
* void* allocate(std::size_t)
|
|
648
|
+
* void deallocate(void*, std::size_t)
|
|
649
|
+
*
|
|
650
|
+
* Note that Inner is *not* a C++ Allocator.
|
|
651
|
+
*/
|
|
652
|
+
template <typename T, class Inner, bool FallbackToStdAlloc = false>
|
|
653
|
+
class CxxAllocatorAdaptor : private std::allocator<T> {
|
|
654
|
+
private:
|
|
655
|
+
using Self = CxxAllocatorAdaptor<T, Inner, FallbackToStdAlloc>;
|
|
656
|
+
|
|
657
|
+
template <typename U, typename UInner, bool UFallback>
|
|
658
|
+
friend class CxxAllocatorAdaptor;
|
|
659
|
+
|
|
660
|
+
Inner* inner_ = nullptr;
|
|
661
|
+
|
|
662
|
+
public:
|
|
663
|
+
using value_type = T;
|
|
664
|
+
|
|
665
|
+
using propagate_on_container_copy_assignment = std::true_type;
|
|
666
|
+
using propagate_on_container_move_assignment = std::true_type;
|
|
667
|
+
using propagate_on_container_swap = std::true_type;
|
|
668
|
+
|
|
669
|
+
template <bool X = FallbackToStdAlloc, std::enable_if_t<X, int> = 0>
|
|
670
|
+
constexpr explicit CxxAllocatorAdaptor() {}
|
|
671
|
+
|
|
672
|
+
constexpr explicit CxxAllocatorAdaptor(Inner& ref) : inner_(&ref) {}
|
|
673
|
+
|
|
674
|
+
constexpr CxxAllocatorAdaptor(CxxAllocatorAdaptor const&) = default;
|
|
675
|
+
|
|
676
|
+
template <typename U, std::enable_if_t<!std::is_same<U, T>::value, int> = 0>
|
|
677
|
+
constexpr CxxAllocatorAdaptor(
|
|
678
|
+
CxxAllocatorAdaptor<U, Inner, FallbackToStdAlloc> const& other)
|
|
679
|
+
: inner_(other.inner_) {}
|
|
680
|
+
|
|
681
|
+
CxxAllocatorAdaptor& operator=(CxxAllocatorAdaptor const& other) = default;
|
|
682
|
+
|
|
683
|
+
template <typename U, std::enable_if_t<!std::is_same<U, T>::value, int> = 0>
|
|
684
|
+
CxxAllocatorAdaptor& operator=(
|
|
685
|
+
CxxAllocatorAdaptor<U, Inner, FallbackToStdAlloc> const& other) noexcept {
|
|
686
|
+
inner_ = other.inner_;
|
|
687
|
+
return *this;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
T* allocate(std::size_t n) {
|
|
691
|
+
if (FallbackToStdAlloc && inner_ == nullptr) {
|
|
692
|
+
return std::allocator<T>::allocate(n);
|
|
693
|
+
}
|
|
694
|
+
return static_cast<T*>(inner_->allocate(sizeof(T) * n));
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
void deallocate(T* p, std::size_t n) {
|
|
698
|
+
if (inner_ != nullptr) {
|
|
699
|
+
inner_->deallocate(p, sizeof(T) * n);
|
|
700
|
+
} else {
|
|
701
|
+
assert(FallbackToStdAlloc);
|
|
702
|
+
std::allocator<T>::deallocate(p, n);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
friend bool operator==(Self const& a, Self const& b) noexcept {
|
|
707
|
+
return a.inner_ == b.inner_;
|
|
708
|
+
}
|
|
709
|
+
friend bool operator!=(Self const& a, Self const& b) noexcept {
|
|
710
|
+
return a.inner_ != b.inner_;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
template <typename U>
|
|
714
|
+
struct rebind {
|
|
715
|
+
using other = CxxAllocatorAdaptor<U, Inner, FallbackToStdAlloc>;
|
|
716
|
+
};
|
|
717
|
+
};
|
|
718
|
+
|
|
719
|
+
/*
|
|
720
|
+
* allocator_delete
|
|
721
|
+
*
|
|
722
|
+
* A deleter which automatically works with a given allocator.
|
|
723
|
+
*
|
|
724
|
+
* Derives from the allocator to take advantage of the empty base
|
|
725
|
+
* optimization when possible.
|
|
726
|
+
*/
|
|
727
|
+
template <typename Alloc>
|
|
728
|
+
class allocator_delete : private std::remove_reference<Alloc>::type {
|
|
729
|
+
private:
|
|
730
|
+
using allocator_type = typename std::remove_reference<Alloc>::type;
|
|
731
|
+
using allocator_traits = std::allocator_traits<allocator_type>;
|
|
732
|
+
using value_type = typename allocator_traits::value_type;
|
|
733
|
+
using pointer = typename allocator_traits::pointer;
|
|
734
|
+
|
|
735
|
+
public:
|
|
736
|
+
allocator_delete() = default;
|
|
737
|
+
allocator_delete(allocator_delete const&) = default;
|
|
738
|
+
allocator_delete(allocator_delete&&) = default;
|
|
739
|
+
allocator_delete& operator=(allocator_delete const&) = default;
|
|
740
|
+
allocator_delete& operator=(allocator_delete&&) = default;
|
|
741
|
+
|
|
742
|
+
explicit allocator_delete(const allocator_type& alloc)
|
|
743
|
+
: allocator_type(alloc) {}
|
|
744
|
+
|
|
745
|
+
explicit allocator_delete(allocator_type&& alloc)
|
|
746
|
+
: allocator_type(std::move(alloc)) {}
|
|
747
|
+
|
|
748
|
+
template <typename U>
|
|
749
|
+
allocator_delete(const allocator_delete<U>& other)
|
|
750
|
+
: allocator_type(other.get_allocator()) {}
|
|
751
|
+
|
|
752
|
+
allocator_type const& get_allocator() const { return *this; }
|
|
753
|
+
|
|
754
|
+
void operator()(pointer p) const {
|
|
755
|
+
auto alloc = get_allocator();
|
|
756
|
+
allocator_traits::destroy(alloc, p);
|
|
757
|
+
allocator_traits::deallocate(alloc, p, 1);
|
|
758
|
+
}
|
|
759
|
+
};
|
|
760
|
+
|
|
761
|
+
/**
|
|
762
|
+
* allocate_unique, like std::allocate_shared but for std::unique_ptr
|
|
763
|
+
*/
|
|
764
|
+
template <typename T, typename Alloc, typename... Args>
|
|
765
|
+
std::unique_ptr<
|
|
766
|
+
T,
|
|
767
|
+
allocator_delete<
|
|
768
|
+
typename std::allocator_traits<Alloc>::template rebind_alloc<T>>>
|
|
769
|
+
allocate_unique(Alloc const& alloc, Args&&... args) {
|
|
770
|
+
using TAlloc =
|
|
771
|
+
typename std::allocator_traits<Alloc>::template rebind_alloc<T>;
|
|
772
|
+
|
|
773
|
+
using traits = std::allocator_traits<TAlloc>;
|
|
774
|
+
struct DeferCondDeallocate {
|
|
775
|
+
bool& cond;
|
|
776
|
+
TAlloc& copy;
|
|
777
|
+
T* p;
|
|
778
|
+
~DeferCondDeallocate() {
|
|
779
|
+
if (FOLLY_UNLIKELY(!cond)) {
|
|
780
|
+
traits::deallocate(copy, p, 1);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
};
|
|
784
|
+
auto copy = TAlloc(alloc);
|
|
785
|
+
auto const p = traits::allocate(copy, 1);
|
|
786
|
+
{
|
|
787
|
+
bool constructed = false;
|
|
788
|
+
DeferCondDeallocate handler{constructed, copy, p};
|
|
789
|
+
traits::construct(copy, p, static_cast<Args&&>(args)...);
|
|
790
|
+
constructed = true;
|
|
791
|
+
}
|
|
792
|
+
return {p, allocator_delete<TAlloc>(std::move(copy))};
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
struct SysBufferDeleter {
|
|
796
|
+
void operator()(void* ptr) { std::free(ptr); }
|
|
797
|
+
};
|
|
798
|
+
using SysBufferUniquePtr = std::unique_ptr<void, SysBufferDeleter>;
|
|
799
|
+
|
|
800
|
+
inline SysBufferUniquePtr allocate_sys_buffer(std::size_t size) {
|
|
801
|
+
auto p = std::malloc(size);
|
|
802
|
+
if (!p) {
|
|
803
|
+
throw_exception<std::bad_alloc>();
|
|
804
|
+
}
|
|
805
|
+
return {p, {}};
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
* AllocatorHasTrivialDeallocate
|
|
810
|
+
*
|
|
811
|
+
* Unambiguously inherits std::integral_constant<bool, V> for some bool V.
|
|
812
|
+
*
|
|
813
|
+
* Describes whether a C++ Aallocator has trivial, i.e. no-op, deallocate().
|
|
814
|
+
*
|
|
815
|
+
* Also may be used to describe types which may be used with
|
|
816
|
+
* CxxAllocatorAdaptor.
|
|
817
|
+
*/
|
|
818
|
+
template <typename Alloc>
|
|
819
|
+
struct AllocatorHasTrivialDeallocate : std::false_type {};
|
|
820
|
+
|
|
821
|
+
template <typename T, class Alloc>
|
|
822
|
+
struct AllocatorHasTrivialDeallocate<CxxAllocatorAdaptor<T, Alloc>>
|
|
823
|
+
: AllocatorHasTrivialDeallocate<Alloc> {};
|
|
824
|
+
|
|
825
|
+
namespace detail {
|
|
826
|
+
// note that construct and destroy here are methods, not short names for
|
|
827
|
+
// the constructor and destructor
|
|
828
|
+
FOLLY_CREATE_MEMBER_INVOKER(AllocatorConstruct_, construct);
|
|
829
|
+
FOLLY_CREATE_MEMBER_INVOKER(AllocatorDestroy_, destroy);
|
|
830
|
+
|
|
831
|
+
template <typename Void, typename Alloc, typename... Args>
|
|
832
|
+
struct AllocatorCustomizesConstruct_
|
|
833
|
+
: folly::is_invocable<AllocatorConstruct_, Alloc, Args...> {};
|
|
834
|
+
|
|
835
|
+
template <typename Alloc, typename... Args>
|
|
836
|
+
struct AllocatorCustomizesConstruct_<
|
|
837
|
+
void_t<typename Alloc::folly_has_default_object_construct>,
|
|
838
|
+
Alloc,
|
|
839
|
+
Args...> : Negation<typename Alloc::folly_has_default_object_construct> {};
|
|
840
|
+
|
|
841
|
+
template <typename Void, typename Alloc, typename... Args>
|
|
842
|
+
struct AllocatorCustomizesDestroy_
|
|
843
|
+
: folly::is_invocable<AllocatorDestroy_, Alloc, Args...> {};
|
|
844
|
+
|
|
845
|
+
template <typename Alloc, typename... Args>
|
|
846
|
+
struct AllocatorCustomizesDestroy_<
|
|
847
|
+
void_t<typename Alloc::folly_has_default_object_destroy>,
|
|
848
|
+
Alloc,
|
|
849
|
+
Args...> : Negation<typename Alloc::folly_has_default_object_destroy> {};
|
|
850
|
+
} // namespace detail
|
|
851
|
+
|
|
852
|
+
/**
|
|
853
|
+
* AllocatorHasDefaultObjectConstruct
|
|
854
|
+
*
|
|
855
|
+
* AllocatorHasDefaultObjectConstruct<A, T, Args...> unambiguously
|
|
856
|
+
* inherits std::integral_constant<bool, V>, where V will be true iff
|
|
857
|
+
* the effect of std::allocator_traits<A>::construct(a, p, args...) is
|
|
858
|
+
* the same as new (static_cast<void*>(p)) T(args...). If true then
|
|
859
|
+
* any optimizations applicable to object construction (relying on
|
|
860
|
+
* std::is_trivially_copyable<T>, for example) can be applied to objects
|
|
861
|
+
* in an allocator-aware container using an allocation of type A.
|
|
862
|
+
*
|
|
863
|
+
* Allocator types can override V by declaring a type alias for
|
|
864
|
+
* folly_has_default_object_construct. It is helpful to do this if you
|
|
865
|
+
* define a custom allocator type that defines a construct method, but
|
|
866
|
+
* that method doesn't do anything except call placement new.
|
|
867
|
+
*/
|
|
868
|
+
template <typename Alloc, typename T, typename... Args>
|
|
869
|
+
struct AllocatorHasDefaultObjectConstruct
|
|
870
|
+
: Negation<
|
|
871
|
+
detail::AllocatorCustomizesConstruct_<void, Alloc, T*, Args...>> {};
|
|
872
|
+
|
|
873
|
+
template <typename Value, typename T, typename... Args>
|
|
874
|
+
struct AllocatorHasDefaultObjectConstruct<std::allocator<Value>, T, Args...>
|
|
875
|
+
: std::true_type {};
|
|
876
|
+
|
|
877
|
+
/**
|
|
878
|
+
* AllocatorHasDefaultObjectDestroy
|
|
879
|
+
*
|
|
880
|
+
* AllocatorHasDefaultObjectDestroy<A, T> unambiguously inherits
|
|
881
|
+
* std::integral_constant<bool, V>, where V will be true iff the effect
|
|
882
|
+
* of std::allocator_traits<A>::destroy(a, p) is the same as p->~T().
|
|
883
|
+
* If true then optimizations applicable to object destruction (relying
|
|
884
|
+
* on std::is_trivially_destructible<T>, for example) can be applied to
|
|
885
|
+
* objects in an allocator-aware container using an allocator of type A.
|
|
886
|
+
*
|
|
887
|
+
* Allocator types can override V by declaring a type alias for
|
|
888
|
+
* folly_has_default_object_destroy. It is helpful to do this if you
|
|
889
|
+
* define a custom allocator type that defines a destroy method, but that
|
|
890
|
+
* method doesn't do anything except call the object's destructor.
|
|
891
|
+
*/
|
|
892
|
+
template <typename Alloc, typename T>
|
|
893
|
+
struct AllocatorHasDefaultObjectDestroy
|
|
894
|
+
: Negation<detail::AllocatorCustomizesDestroy_<void, Alloc, T*>> {};
|
|
895
|
+
|
|
896
|
+
template <typename Value, typename T>
|
|
897
|
+
struct AllocatorHasDefaultObjectDestroy<std::allocator<Value>, T>
|
|
898
|
+
: std::true_type {};
|
|
899
|
+
|
|
900
|
+
} // namespace folly
|