react-native-windows 0.84.0-preview.9 → 0.84.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/unicode.cpp +36 -0
- package/Common/unicode.h +8 -0
- package/Directory.Build.props +2 -17
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +5 -0
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +91 -23
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +11 -0
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +6 -4
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +28 -6
- package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +80 -0
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.h +17 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +1 -1
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +4 -9
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +33 -25
- package/Microsoft.ReactNative/Utils/LocalBundleReader.h +5 -3
- package/Microsoft.ReactNative/Utils/UwpScriptStore.cpp +2 -2
- package/Microsoft.ReactNative/Utils/UwpScriptStore.h +3 -2
- package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +3 -3
- package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +10 -10
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml +1 -1
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml +1 -1
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +10 -1
- package/PropertySheets/React.Cpp.props +7 -6
- package/PropertySheets/WinUI.props +2 -2
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/JustMyXaml.ps1 +8 -8
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/UnitTest.ps1 +3 -1
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +5 -8
- package/Scripts/creaternwlib.cmd +10 -23
- package/Scripts/rnw-dependencies.ps1 +15 -16
- package/Shared/DevSupportManager.cpp +55 -48
- package/Shared/DevSupportManager.h +0 -1
- package/Shared/Modules/IWebSocketModuleContentHandler.h +15 -0
- package/Shared/Modules/WebSocketModule.cpp +8 -3
- package/Shared/Networking/DefaultBlobResource.cpp +37 -0
- package/Shared/Networking/DefaultBlobResource.h +12 -0
- package/Shared/Networking/WinRTWebSocketResource.h +5 -1
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/external/fmt/include/fmt/base.h +3077 -0
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/{fmt → external/folly/folly}/.clang-format +0 -1
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/external/folly/folly/hash/SpookyHashV2.h +339 -0
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/just-task.js +13 -2
- package/package.json +7 -7
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +1 -1
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/example/metro.config.js +30 -4
- package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +1 -1
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -378
- package/Folly/Folly.vcxproj.filters +0 -558
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{fmt → external/fmt}/cgmanifest.json +0 -0
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
`folly/Conv.h`
|
|
2
|
+
-------------
|
|
3
|
+
|
|
4
|
+
`folly/Conv.h` is a one-stop-shop for converting values across
|
|
5
|
+
types. Its main features are simplicity of the API (only the
|
|
6
|
+
names `to` and `toAppend` must be memorized), speed
|
|
7
|
+
(folly is significantly faster, sometimes by an order of magnitude,
|
|
8
|
+
than comparable APIs), and correctness.
|
|
9
|
+
|
|
10
|
+
### Synopsis
|
|
11
|
+
***
|
|
12
|
+
|
|
13
|
+
All examples below are assume to have included `folly/Conv.h`
|
|
14
|
+
and issued `using namespace folly;` You will need:
|
|
15
|
+
|
|
16
|
+
``` Cpp
|
|
17
|
+
// To format as text and append to a string, use toAppend.
|
|
18
|
+
fbstring str;
|
|
19
|
+
toAppend(2.5, &str);
|
|
20
|
+
CHECK_EQ(str, "2.5");
|
|
21
|
+
|
|
22
|
+
// Multiple arguments are okay, too. Just put the pointer to string at the end.
|
|
23
|
+
toAppend(" is ", 2, " point ", 5, &str);
|
|
24
|
+
CHECK_EQ(str, "2.5 is 2 point 5");
|
|
25
|
+
|
|
26
|
+
// You don't need to use fbstring (although it's much faster for conversions and in general).
|
|
27
|
+
std::string stdStr;
|
|
28
|
+
toAppend("Pi is about ", 22.0 / 7, &stdStr);
|
|
29
|
+
// In general, just use to<TargetType>(sourceValue). It returns its result by value.
|
|
30
|
+
stdStr = to<std::string>("Variadic ", "arguments also accepted.");
|
|
31
|
+
|
|
32
|
+
// to<fbstring> is 2.5x faster than to<std::string> for typical workloads.
|
|
33
|
+
str = to<fbstring>("Variadic ", "arguments also accepted.");
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Integral-to-integral conversion
|
|
37
|
+
***
|
|
38
|
+
|
|
39
|
+
Using `to<Target>(value)` to convert one integral type to another
|
|
40
|
+
will behave as follows:
|
|
41
|
+
|
|
42
|
+
* If the target type can accommodate all possible values of the
|
|
43
|
+
source value, the value is implicitly converted. No further
|
|
44
|
+
action is taken. Example:
|
|
45
|
+
|
|
46
|
+
``` Cpp
|
|
47
|
+
short x;
|
|
48
|
+
unsigned short y;
|
|
49
|
+
...
|
|
50
|
+
auto a = to<int>(x); // zero overhead conversion
|
|
51
|
+
auto b = to<int>(y); // zero overhead conversion
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
* Otherwise, `to` inserts bounds checks and throws
|
|
55
|
+
`std::range_error` if the target type cannot accommodate the
|
|
56
|
+
source value. Example:
|
|
57
|
+
|
|
58
|
+
``` Cpp
|
|
59
|
+
short x;
|
|
60
|
+
unsigned short y;
|
|
61
|
+
long z;
|
|
62
|
+
...
|
|
63
|
+
x = 123;
|
|
64
|
+
auto a = to<unsigned short>(x); // fine
|
|
65
|
+
x = -1;
|
|
66
|
+
a = to<unsigned short>(x); // THROWS
|
|
67
|
+
z = 2000000000;
|
|
68
|
+
auto b = to<int>(z); // fine
|
|
69
|
+
z += 1000000000;
|
|
70
|
+
b = to<int>(z); // THROWS
|
|
71
|
+
auto b = to<unsigned int>(z); // fine
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Anything-to-string conversion
|
|
75
|
+
***
|
|
76
|
+
|
|
77
|
+
As mentioned, there are two primitives for converting anything to
|
|
78
|
+
string: `to` and `toAppend`. They support the same set of source
|
|
79
|
+
types, literally by definition (`to` is implemented in terms of
|
|
80
|
+
`toAppend` for all types). The call `toAppend(value, &str)`
|
|
81
|
+
formats and appends `value` to `str` whereas
|
|
82
|
+
`to<StringType>(value)` formats `value` as a `StringType` and
|
|
83
|
+
returns the result by value. Currently, the supported
|
|
84
|
+
`StringType`s are `std::string` and `fbstring`
|
|
85
|
+
|
|
86
|
+
Both `toAppend` and `to` with a string type as a target support
|
|
87
|
+
variadic arguments. Each argument is converted in turn. For
|
|
88
|
+
`toAppend` the last argument in a variadic list must be the
|
|
89
|
+
address of a supported string type (no need to specify the string
|
|
90
|
+
type as a template argument).
|
|
91
|
+
|
|
92
|
+
#### Integral-to-string conversion
|
|
93
|
+
|
|
94
|
+
Nothing special here - integrals are converted to strings in
|
|
95
|
+
decimal format, with a '-' prefix for negative values. Example:
|
|
96
|
+
|
|
97
|
+
``` Cpp
|
|
98
|
+
auto a = to<fbstring>(123);
|
|
99
|
+
assert(a == "123");
|
|
100
|
+
a = to<fbstring>(-456);
|
|
101
|
+
assert(a == "-456");
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
The conversion implementation is aggressively optimized. It
|
|
105
|
+
converts two digits at a time assisted by fixed-size tables.
|
|
106
|
+
Converting a `long` to an `fbstring` is 3.6x faster than using
|
|
107
|
+
`boost::lexical_cast` and 2.5x faster than using `sprintf` even
|
|
108
|
+
though the latter is used in conjunction with a stack-allocated
|
|
109
|
+
constant-size buffer.
|
|
110
|
+
|
|
111
|
+
Note that converting integral types to `fbstring` has a
|
|
112
|
+
particular advantage compared to converting to `std::string`
|
|
113
|
+
No integral type (<= 64 bits) has more than 20 decimal digits
|
|
114
|
+
including sign. Since `fbstring` employs the small string
|
|
115
|
+
optimization for up to 23 characters, converting an integral
|
|
116
|
+
to `fbstring` is guaranteed to not allocate memory, resulting
|
|
117
|
+
in significant speed and memory locality gains. Benchmarks
|
|
118
|
+
reveal a 2x gain on a typical workload.
|
|
119
|
+
|
|
120
|
+
#### `char` to string conversion
|
|
121
|
+
|
|
122
|
+
Although `char` is technically an integral type, most of the time
|
|
123
|
+
you want the string representation of `'a'` to be `"a"`, not `96`
|
|
124
|
+
That's why `folly/Conv.h` handles `char` as a special case that
|
|
125
|
+
does the expected thing. Note that `signed char` and `unsigned
|
|
126
|
+
char` are still considered integral types.
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
#### Floating point to string conversion
|
|
130
|
+
|
|
131
|
+
`folly/Conv.h` uses [V8's double conversion](http://code.google.com/p/double-conversion/)
|
|
132
|
+
routines. They are accurate and fast; on typical workloads,
|
|
133
|
+
`to<fbstring>(doubleValue)` is 1.9x faster than `sprintf` and
|
|
134
|
+
5.5x faster than `boost::lexical_cast` (It is also 1.3x faster
|
|
135
|
+
than `to<std::string>(doubleValue)`
|
|
136
|
+
|
|
137
|
+
#### `const char*` to string conversion
|
|
138
|
+
|
|
139
|
+
For completeness, `folly/Conv.h` supports `const char*` including
|
|
140
|
+
i.e. string literals. The "conversion" consists, of course, of
|
|
141
|
+
the string itself. Example:
|
|
142
|
+
|
|
143
|
+
``` Cpp
|
|
144
|
+
auto s = to<fbstring>("Hello, world");
|
|
145
|
+
assert(s == "Hello, world");
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### Anything from string conversion (i.e. parsing)
|
|
149
|
+
***
|
|
150
|
+
|
|
151
|
+
`folly/Conv.h` includes three kinds of parsing routines:
|
|
152
|
+
|
|
153
|
+
* `to<Type>(const char* begin, const char* end)` rigidly
|
|
154
|
+
converts the range [begin, end) to `Type` These routines have
|
|
155
|
+
drastic restrictions (e.g. allow no leading or trailing
|
|
156
|
+
whitespace) and are intended as an efficient back-end for more
|
|
157
|
+
tolerant routines.
|
|
158
|
+
* `to<Type>(stringy)` converts `stringy` to `Type` Value
|
|
159
|
+
`stringy` may be of type `const char*`, `StringPiece`,
|
|
160
|
+
`std::string`, or `fbstring` (Technically, the requirement is
|
|
161
|
+
that `stringy` implicitly converts to a `StringPiece`
|
|
162
|
+
* `to<Type>(&stringPiece)` parses with progress information:
|
|
163
|
+
given `stringPiece` of type `StringPiece` it parses as much
|
|
164
|
+
as possible from it as type `Type` and alters `stringPiece`
|
|
165
|
+
to remove the munched characters. This is easiest clarified
|
|
166
|
+
by an example:
|
|
167
|
+
|
|
168
|
+
``` Cpp
|
|
169
|
+
fbstring s = " 1234 angels on a pin";
|
|
170
|
+
StringPiece pc(s);
|
|
171
|
+
auto x = to<int>(&pc);
|
|
172
|
+
assert(x == 1234);
|
|
173
|
+
assert(pc == " angels on a pin";
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Note how the routine ate the leading space but not the trailing one.
|
|
177
|
+
|
|
178
|
+
#### Parsing integral types
|
|
179
|
+
|
|
180
|
+
Parsing integral types is unremarkable - decimal format is
|
|
181
|
+
expected, optional `'+'` or `'-'` sign for signed types, but no
|
|
182
|
+
optional `'+'` is allowed for unsigned types. The one remarkable
|
|
183
|
+
element is speed - parsing typical `long` values is 6x faster than
|
|
184
|
+
`sscanf`. `folly/Conv.h` uses aggressive loop unrolling and
|
|
185
|
+
table-assisted SIMD-style code arrangement that avoids integral
|
|
186
|
+
division (slow) and data dependencies across operations
|
|
187
|
+
(ILP-unfriendly). Example:
|
|
188
|
+
|
|
189
|
+
``` Cpp
|
|
190
|
+
fbstring str = " 12345 ";
|
|
191
|
+
assert(to<int>(str) == 12345);
|
|
192
|
+
str = " 12345six seven eight";
|
|
193
|
+
StringPiece pc(str);
|
|
194
|
+
assert(to<int>(&pc) == 12345);
|
|
195
|
+
assert(str == "six seven eight");
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
#### Parsing floating-point types
|
|
199
|
+
|
|
200
|
+
`folly/Conv.h` uses, again, [V8's double-conversion](http://code.google.com/p/double-conversion/)
|
|
201
|
+
routines as back-end. The speed is 3x faster than `sscanf` and
|
|
202
|
+
1.7x faster than in-home routines such as `parse<double>` But
|
|
203
|
+
the more important detail is accuracy - even if you do code a
|
|
204
|
+
routine that works faster than `to<double>` chances are it is
|
|
205
|
+
incorrect and will fail in a variety of corner cases. Using
|
|
206
|
+
`to<double>` is strongly recommended.
|
|
207
|
+
|
|
208
|
+
Note that if the string "NaN" (with any capitalization) is passed to
|
|
209
|
+
`to<double>` then `NaN` is returned, which can be tested for as follows:
|
|
210
|
+
|
|
211
|
+
``` Cpp
|
|
212
|
+
fbstring str = "nan"; // "NaN", "NAN", etc.
|
|
213
|
+
double d = to<double>(str);
|
|
214
|
+
if (std::isnan(d)) {
|
|
215
|
+
// string was a valid representation of the double value NaN
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Note that passing "-NaN" (with any capitalization) to `to<double>` also returns
|
|
220
|
+
`NaN`.
|
|
221
|
+
|
|
222
|
+
Note that if the strings "inf" or "infinity" (with any capitalization) are
|
|
223
|
+
passed to `to<double>` then `infinity` is returned, which can be tested for
|
|
224
|
+
as follows:
|
|
225
|
+
|
|
226
|
+
``` Cpp
|
|
227
|
+
fbstring str = "inf"; // "Inf", "INF", "infinity", "Infinity", etc.
|
|
228
|
+
double d = to<double>(str);
|
|
229
|
+
if (std::isinf(d)) {
|
|
230
|
+
// string was a valid representation of one of the double values +Infinity
|
|
231
|
+
// or -Infinity
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Note that passing "-inf" or "-infinity" (with any capitalization) to
|
|
236
|
+
`to<double>` returns `-infinity` rather than `+infinity`. The sign of the
|
|
237
|
+
`infinity` can be tested for as follows:
|
|
238
|
+
|
|
239
|
+
``` Cpp
|
|
240
|
+
fbstring str = "-inf"; // or "inf", "-Infinity", "+Infinity", etc.
|
|
241
|
+
double d = to<double>(str);
|
|
242
|
+
if (d == std::numeric_limits<double>::infinity()) {
|
|
243
|
+
// string was a valid representation of the double value +Infinity
|
|
244
|
+
} else if (d == -std::numeric_limits<double>::infinity()) {
|
|
245
|
+
// string was a valid representation of the double value -Infinity
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Note that if an unparseable string is passed to `to<double>` then an exception
|
|
250
|
+
is thrown, rather than `NaN` being returned. This can be tested for as follows:
|
|
251
|
+
|
|
252
|
+
``` Cpp
|
|
253
|
+
fbstring str = "not-a-double"; // Or "1.1.1", "", "$500.00", etc.
|
|
254
|
+
double d;
|
|
255
|
+
try {
|
|
256
|
+
d = to<double>(str);
|
|
257
|
+
} catch (const std::range_error &) {
|
|
258
|
+
// string could not be parsed
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Note that the empty string (`""`) is an unparseable value, and will cause
|
|
263
|
+
`to<double>` to throw an exception.
|
|
264
|
+
|
|
265
|
+
#### Non-throwing interfaces
|
|
266
|
+
|
|
267
|
+
`tryTo<T>` is the non-throwing variant of `to<T>`. It returns
|
|
268
|
+
an `Expected<T, ConversionCode>`. You can think of `Expected`
|
|
269
|
+
as like an `Optional<T>`, but if the conversion failed, `Expected`
|
|
270
|
+
stores an error code instead of a `T`.
|
|
271
|
+
|
|
272
|
+
`tryTo<T>` has similar performance as `to<T>` when the
|
|
273
|
+
conversion is successful. On the error path, you can expect
|
|
274
|
+
`tryTo<T>` to be roughly three orders of magnitude faster than
|
|
275
|
+
the throwing `to<T>` and to completely avoid any lock contention
|
|
276
|
+
arising from stack unwinding.
|
|
277
|
+
|
|
278
|
+
Here is how to use non-throwing conversions:
|
|
279
|
+
|
|
280
|
+
``` Cpp
|
|
281
|
+
auto t1 = tryTo<int>(str);
|
|
282
|
+
if (t1.hasValue()) {
|
|
283
|
+
use(t1.value());
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
`Expected` has a composability feature to make the above pattern simpler.
|
|
288
|
+
|
|
289
|
+
``` Cpp
|
|
290
|
+
tryTo<int>(str).then([](int i) { use(i); });
|
|
291
|
+
```
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
`folly/dynamic.h`
|
|
2
|
+
-----------------
|
|
3
|
+
|
|
4
|
+
`folly/dynamic.h` provides a runtime dynamically typed value for
|
|
5
|
+
C++, similar to the way languages with runtime type systems work
|
|
6
|
+
(e.g. Python). It can hold types from a predetermined set of types
|
|
7
|
+
(ints, bools, arrays of other dynamics, etc), similar to something like
|
|
8
|
+
`std::variant`, but the syntax is intended to be a little more like
|
|
9
|
+
using the native type directly.
|
|
10
|
+
|
|
11
|
+
### Overview
|
|
12
|
+
***
|
|
13
|
+
|
|
14
|
+
Here are some code samples to get started (assumes a `using
|
|
15
|
+
folly::dynamic;` was used):
|
|
16
|
+
|
|
17
|
+
``` Cpp
|
|
18
|
+
dynamic twelve = 12; // creates a dynamic that holds an integer
|
|
19
|
+
dynamic str = "string"; // yep, this one is an fbstring
|
|
20
|
+
|
|
21
|
+
// A few other types.
|
|
22
|
+
dynamic nul = nullptr;
|
|
23
|
+
dynamic boolean = false;
|
|
24
|
+
|
|
25
|
+
// Arrays can be initialized with dynamic::array.
|
|
26
|
+
dynamic array = dynamic::array("array ", "of ", 4, " elements");
|
|
27
|
+
assert(array.size() == 4);
|
|
28
|
+
dynamic emptyArray = dynamic::array;
|
|
29
|
+
assert(emptyArray.empty());
|
|
30
|
+
|
|
31
|
+
// Maps from dynamics to dynamics are called objects. The
|
|
32
|
+
// dynamic::object constant is how you make an empty map from dynamics
|
|
33
|
+
// to dynamics.
|
|
34
|
+
dynamic map = dynamic::object;
|
|
35
|
+
map["something"] = 12;
|
|
36
|
+
map["another_something"] = map["something"] * 2;
|
|
37
|
+
|
|
38
|
+
// Dynamic objects may be initialized this way
|
|
39
|
+
dynamic map2 = dynamic::object("something", 12)("another_something", 24);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Runtime Type Checking and Conversions
|
|
43
|
+
***
|
|
44
|
+
|
|
45
|
+
Any operation on a dynamic requires checking at runtime that the
|
|
46
|
+
type is compatible with the operation. If it isn't, you'll get a
|
|
47
|
+
`folly::TypeError`. Other exceptions can also be thrown if
|
|
48
|
+
you try to do something impossible (e.g. if you put a very large
|
|
49
|
+
64-bit integer in and try to read it out as a double).
|
|
50
|
+
|
|
51
|
+
More examples should hopefully clarify this:
|
|
52
|
+
|
|
53
|
+
``` Cpp
|
|
54
|
+
dynamic dint = 42;
|
|
55
|
+
|
|
56
|
+
dynamic str = "foo";
|
|
57
|
+
dynamic anotherStr = str + "something"; // fine
|
|
58
|
+
dynamic thisThrows = str + dint; // TypeError is raised
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Explicit type conversions can be requested for some of the basic types:
|
|
62
|
+
|
|
63
|
+
``` Cpp
|
|
64
|
+
dynamic dint = 12345678;
|
|
65
|
+
dynamic doub = dint.asDouble(); // doub will hold 12345678.0
|
|
66
|
+
dynamic str = dint.asString(); // str == "12345678"
|
|
67
|
+
|
|
68
|
+
dynamic hugeInt = std::numeric_limits<int64_t>::max();
|
|
69
|
+
dynamic hugeDoub = hugeInt.asDouble(); // throws a folly/Conv.h error,
|
|
70
|
+
// since it can't fit in a double
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
For more complicated conversions, see [DynamicConverter](DynamicConverter.md).
|
|
74
|
+
|
|
75
|
+
### Comparison Operators and Hashing
|
|
76
|
+
#### Equality Operators
|
|
77
|
+
Equality operators (`==`, `!=`) are supported for all types.
|
|
78
|
+
|
|
79
|
+
For dynamics of the same type, the underlying equality operator shall apply.
|
|
80
|
+
|
|
81
|
+
For comparisons between different numeric types (double and int64), numeric
|
|
82
|
+
equality will apply - thus `2.0 == 2`.
|
|
83
|
+
|
|
84
|
+
Values of any other different types will be deemed to not be equal.
|
|
85
|
+
|
|
86
|
+
#### Ordering operators
|
|
87
|
+
Ordering operators (`<`, `<=`, `>`, `>=`) are supported for all types, except
|
|
88
|
+
`dynamic::object` which will throw if it is involved in an ordering operator.
|
|
89
|
+
|
|
90
|
+
For dynamics of the same type, the underlying ordering operator shall apply.
|
|
91
|
+
|
|
92
|
+
For comparisons between different numeric types (double and int64), numeric
|
|
93
|
+
ordering will apply - thus `1.5 < 2`.
|
|
94
|
+
|
|
95
|
+
Ordering of values between other different types will maintain total ordering
|
|
96
|
+
properties and be consistent within a given binary run, and thus safe for use in
|
|
97
|
+
e.g. `std::set`. The actual ordering is undefined and could change across
|
|
98
|
+
versions, thus a dependency should not be taken outside of the total ordering
|
|
99
|
+
property within a given binary.
|
|
100
|
+
|
|
101
|
+
#### Hashing
|
|
102
|
+
Hashing is supported by all types, and the hashes of two values will match if
|
|
103
|
+
they are equal per `dynamic::operator==`.
|
|
104
|
+
|
|
105
|
+
As a result, numerical types have the same numerical hashing regardless of int64
|
|
106
|
+
vs double - so e.g. `std::hash<dynamic>()(2)` will give the same value as
|
|
107
|
+
`std::hash<dynamic>()(2.0)`.
|
|
108
|
+
|
|
109
|
+
### Iteration and Lookup
|
|
110
|
+
***
|
|
111
|
+
|
|
112
|
+
You can iterate over dynamic arrays as you would over any C++ sequence container.
|
|
113
|
+
|
|
114
|
+
``` Cpp
|
|
115
|
+
dynamic array = dynamic::array(2, 3, "foo");
|
|
116
|
+
|
|
117
|
+
for (auto& val : array) {
|
|
118
|
+
doSomethingWith(val);
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
You can iterate over dynamic maps by calling `items()`, `keys()`,
|
|
123
|
+
`values()`, which behave similarly to the homonymous methods of Python
|
|
124
|
+
dictionaries.
|
|
125
|
+
|
|
126
|
+
``` Cpp
|
|
127
|
+
dynamic obj = dynamic::object(2, 3)("hello", "world")("x", 4);
|
|
128
|
+
|
|
129
|
+
for (auto& pair : obj.items()) {
|
|
130
|
+
// Key is pair.first, value is pair.second
|
|
131
|
+
processKey(pair.first);
|
|
132
|
+
processValue(pair.second);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
for (auto& key : obj.keys()) {
|
|
136
|
+
processKey(key);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
for (auto& value : obj.values()) {
|
|
140
|
+
processValue(value);
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
You can find an element by key in a dynamic map using the `find()` method,
|
|
145
|
+
which returns an iterator compatible with `items()`:
|
|
146
|
+
|
|
147
|
+
``` Cpp
|
|
148
|
+
dynamic obj = dynamic::object(2, 3)("hello", "world")("x", 4);
|
|
149
|
+
|
|
150
|
+
auto pos = obj.find("hello");
|
|
151
|
+
// pos->first is "hello"
|
|
152
|
+
// pos->second is "world"
|
|
153
|
+
|
|
154
|
+
auto pos = obj.find("no_such_key");
|
|
155
|
+
// pos == obj.items().end()
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
### Use for JSON
|
|
160
|
+
***
|
|
161
|
+
|
|
162
|
+
The original motivation for implementing this type was to try to
|
|
163
|
+
make dealing with json documents in C++ almost as easy as it is
|
|
164
|
+
in languages with dynamic type systems (php or javascript, etc).
|
|
165
|
+
The reader can judge whether we're anywhere near that goal, but
|
|
166
|
+
here's what it looks like:
|
|
167
|
+
|
|
168
|
+
``` Cpp
|
|
169
|
+
// Parsing JSON strings and using them.
|
|
170
|
+
std::string jsonDocument = R"({"key":12,"key2":[false, null, true, "yay"]})";
|
|
171
|
+
dynamic parsed = folly::parseJson(jsonDocument);
|
|
172
|
+
assert(parsed["key"] == 12);
|
|
173
|
+
assert(parsed["key2"][0] == false);
|
|
174
|
+
assert(parsed["key2"][1] == nullptr);
|
|
175
|
+
|
|
176
|
+
// Building the same document programmatically.
|
|
177
|
+
dynamic sonOfAJ = dynamic::object
|
|
178
|
+
("key", 12)
|
|
179
|
+
("key2", dynamic::array(false, nullptr, true, "yay"));
|
|
180
|
+
|
|
181
|
+
// Printing. (See also folly::toPrettyJson)
|
|
182
|
+
auto str = folly::toJson(sonOfAJ);
|
|
183
|
+
assert(jsonDocument.compare(str) == 0);
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Performance
|
|
187
|
+
***
|
|
188
|
+
|
|
189
|
+
Dynamic typing is more expensive than static typing, even when
|
|
190
|
+
you do it in C++. ;)
|
|
191
|
+
|
|
192
|
+
However, some effort has been made to keep `folly::dynamic` and
|
|
193
|
+
the json (de)serialization at least reasonably performant for
|
|
194
|
+
common cases. The heap is only used for arrays and objects, and
|
|
195
|
+
move construction is fully supported. String formatting
|
|
196
|
+
internally also uses the highly performant `folly::to<>` (see
|
|
197
|
+
`folly/Conv.h`).
|
|
198
|
+
|
|
199
|
+
A trade off to keep in mind though, is that
|
|
200
|
+
`sizeof(folly::dynamic)` is 64 bytes. You probably don't want to
|
|
201
|
+
use it if you need to allocate large numbers of them (prefer
|
|
202
|
+
static types, etc).
|
|
203
|
+
|
|
204
|
+
### Some Design Rationale
|
|
205
|
+
***
|
|
206
|
+
|
|
207
|
+
**Q. Why doesn't a dynamic string support begin(), end(), and operator[]?**
|
|
208
|
+
|
|
209
|
+
The value_type of a dynamic iterator is `dynamic`, and `operator[]`
|
|
210
|
+
(or the `at()` function) has to return a reference to a dynamic. If
|
|
211
|
+
we wanted this to work for strings, this would mean we'd have to
|
|
212
|
+
support dynamics with a character type, and moreover that the internal
|
|
213
|
+
representation of strings would be such that we can hand out
|
|
214
|
+
references to dynamic as accessors on individual characters. There
|
|
215
|
+
are a lot of potential efficiency drawbacks with this, and it seems
|
|
216
|
+
like a feature that is not needed too often in practice.
|
|
217
|
+
|
|
218
|
+
**Q. Isn't this just a poor imitation of the C# language feature?**
|
|
219
|
+
|
|
220
|
+
Pretty much.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
`folly/DynamicConverter.h`
|
|
2
|
+
--------------------------
|
|
3
|
+
|
|
4
|
+
When dynamic objects contain data of a known type, it is sometimes
|
|
5
|
+
useful to have its well-typed representation. A broad set of
|
|
6
|
+
type-conversions are contained in `DynamicConverter.h`, and
|
|
7
|
+
facilitate the transformation of dynamic objects into their well-typed
|
|
8
|
+
format.
|
|
9
|
+
|
|
10
|
+
### Usage
|
|
11
|
+
***
|
|
12
|
+
|
|
13
|
+
Simply pass a dynamic into a templated convertTo:
|
|
14
|
+
|
|
15
|
+
```cpp
|
|
16
|
+
dynamic d = { { 1, 2, 3 }, { 4, 5 } }; // a vector of vector of int
|
|
17
|
+
auto vvi = convertTo<fbvector<fbvector<int>>>(d);
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Supported Types
|
|
21
|
+
***
|
|
22
|
+
|
|
23
|
+
convertTo naturally supports conversions to
|
|
24
|
+
|
|
25
|
+
1. arithmetic types (such as int64_t, unsigned short, bool, and double)
|
|
26
|
+
2. fbstring, std::string
|
|
27
|
+
3. containers and map-containers
|
|
28
|
+
|
|
29
|
+
NOTE:
|
|
30
|
+
|
|
31
|
+
convertTo<Type> will assume that Type is a container if
|
|
32
|
+
* it has a Type::value_type, and
|
|
33
|
+
* it has a Type::iterator, and
|
|
34
|
+
* it has a constructor that accepts two InputIterators
|
|
35
|
+
|
|
36
|
+
Additionally, convertTo<Type> will assume that Type is a map if
|
|
37
|
+
* it has a Type::key_type, and
|
|
38
|
+
* it has a Type::mapped_type, and
|
|
39
|
+
* value_type is a pair of const key_type and mapped_type
|
|
40
|
+
|
|
41
|
+
If Type meets the container criteria, then it will be constructed
|
|
42
|
+
by calling its InputIterator constructor.
|
|
43
|
+
|
|
44
|
+
### Customization
|
|
45
|
+
***
|
|
46
|
+
|
|
47
|
+
If you want to use convertTo to convert dynamics into your own custom
|
|
48
|
+
class, then all you have to do is provide a template specialization
|
|
49
|
+
of DynamicConverter with the static method convert. Make sure you put it
|
|
50
|
+
in namespace folly.
|
|
51
|
+
|
|
52
|
+
Example:
|
|
53
|
+
|
|
54
|
+
``` Cpp
|
|
55
|
+
struct Token {
|
|
56
|
+
int kind_;
|
|
57
|
+
fbstring lexeme_;
|
|
58
|
+
|
|
59
|
+
explicit Token(int kind, const fbstring& lexeme)
|
|
60
|
+
: kind_(kind), lexeme_(lexeme) {}
|
|
61
|
+
};
|
|
62
|
+
namespace folly {
|
|
63
|
+
template <> struct DynamicConverter<Token> {
|
|
64
|
+
static Token convert(const dynamic& d) {
|
|
65
|
+
int k = convertTo<int>(d["KIND"]);
|
|
66
|
+
fbstring lex = convertTo<fbstring>(d["LEXEME"]);
|
|
67
|
+
return Token(k, lex);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<section class="dex_document"><h1>Thread pools & Executors</h1><p class="dex_introduction">Run your concurrent code in a performant way</p><h2 id="all-about-thread-pools">All about thread pools <a href="#all-about-thread-pools" class="headerLink">#</a></h2>
|
|
2
|
+
|
|
3
|
+
<h3 id="how-do-i-use-the-thread">How do I use the thread pools? <a href="#how-do-i-use-the-thread" class="headerLink">#</a></h3>
|
|
4
|
+
|
|
5
|
+
<p>Wangle provides two concrete thread pools (IOThreadPoolExecutor, CPUThreadPoolExecutor) as well as building them in as part of a complete async framework. Generally you might want to grab the global executor, and use it with a future, like this:</p>
|
|
6
|
+
|
|
7
|
+
<div class="remarkup-code-block" data-code-lang="php"><pre class="remarkup-code"><span class="no">auto</span> <span class="no">f</span> <span class="o">=</span> <span class="nf" data-symbol-name="someFutureFunction">someFutureFunction</span><span class="o">().</span><span class="nf" data-symbol-name="via">via</span><span class="o">(</span><span class="nf" data-symbol-name="getCPUExecutor">getCPUExecutor</span><span class="o">()).</span><span class="nf" data-symbol-name="then">then</span><span class="o">(...)</span></pre></div>
|
|
8
|
+
|
|
9
|
+
<p>Or maybe you need to construct a thrift/memcache client, and need an event base:</p>
|
|
10
|
+
|
|
11
|
+
<div class="remarkup-code-block" data-code-lang="php"><pre class="remarkup-code"><span class="no">auto</span> <span class="no">f</span> <span class="o">=</span> <span class="nf" data-symbol-name="getClient">getClient</span><span class="o">(</span><span class="nf" data-symbol-name="getIOExecutor">getIOExecutor</span><span class="o">()-></span><span class="na" data-symbol-name="getEventBase">getEventBase</span><span class="o">())-></span><span class="na" data-symbol-name="callSomeFunction">callSomeFunction</span><span class="o">(</span><span class="no">args</span><span class="o">...)</span>
|
|
12
|
+
<span class="o">.</span><span class="nf" data-symbol-name="via">via</span><span class="o">(</span><span class="nf" data-symbol-name="getCPUExecutor">getCPUExecutor</span><span class="o">())</span>
|
|
13
|
+
<span class="o">.</span><span class="nf" data-symbol-name="then">then</span><span class="o">([](</span><span class="no">Result</span> <span class="no">r</span><span class="o">){</span> <span class="o">....</span> <span class="k">do</span> <span class="no">something</span> <span class="no">with</span> <span class="no">result</span><span class="o">});</span></pre></div>
|
|
14
|
+
|
|
15
|
+
<h3 id="vs-c-11-s-std-launch">vs. C++11's std::launch <a href="#vs-c-11-s-std-launch" class="headerLink">#</a></h3>
|
|
16
|
+
|
|
17
|
+
<p>The current C++11 std::launch only has two modes: async or deferred. In a production system, neither is what you want: async will launch a new thread for every launch without limit, while deferred will defer the work until it is needed lazily, but then do the work <strong>in the current thread synchronously</strong> when it is needed.</p>
|
|
18
|
+
|
|
19
|
+
<p>Wangle's thread pools always launch work as soon as possible, have limits to the maximum number of tasks / threads allowed, so we will never use more threads than absolutely needed. See implementation details below about each type of executor.</p>
|
|
20
|
+
|
|
21
|
+
<h3 id="why-do-we-need-yet-anoth">Why do we need yet another set of thread pools? <a href="#why-do-we-need-yet-anoth" class="headerLink">#</a></h3>
|
|
22
|
+
|
|
23
|
+
<p>Unfortunately none of the existing thread pools had every feature needed - things based on pipes are too slow. Several older ones didn't support std::function.</p>
|
|
24
|
+
|
|
25
|
+
<h3 id="why-do-we-need-several-d">Why do we need several different types of thread pools? <a href="#why-do-we-need-several-d" class="headerLink">#</a></h3>
|
|
26
|
+
|
|
27
|
+
<p>If you want epoll support, you need an fd - event_fd is the latest notification hotness. Unfortunately, an active fd triggers all the epoll loops it is in, leading to thundering herd - so if you want a fair queue (one queue total vs. one queue per worker thread), you need to use some kind of semaphore. Unfortunately semaphores can't be put in epoll loops, so they are incompatible with IO. Fortunately, you usually want to separate the IO and CPU bound work anyway to give stronger tail latency guarantees on IO.</p>
|
|
28
|
+
|
|
29
|
+
<h3 id="iothreadpoolexecutor">IOThreadPoolExecutor <a href="#iothreadpoolexecutor" class="headerLink">#</a></h3>
|
|
30
|
+
|
|
31
|
+
<ul>
|
|
32
|
+
<li>Uses event_fd for notification, and waking an epoll loop.</li>
|
|
33
|
+
<li>There is one queue (NotificationQueue specifically) per thread/epoll.</li>
|
|
34
|
+
<li>If the thread is already running and not waiting on epoll, we don't make any additional syscalls to wake up the loop, just put the new task in the queue.</li>
|
|
35
|
+
<li>If any thread has been waiting for more than a few seconds, its stack is madvised away. Currently however tasks are scheduled round robin on the queues, so unless there is <strong>no</strong> work going on, this isn't very effective.</li>
|
|
36
|
+
<li>::getEventBase() will return an EventBase you can schedule IO work on directly, chosen round-robin.</li>
|
|
37
|
+
<li>Since there is one queue per thread, there is hardly any contention on the queues - so a simple spinlock around an std::deque is used for the tasks. There is no max queue size.</li>
|
|
38
|
+
<li>By default, there is one thread per core - it usually doesn't make sense to have more IO threads than this, assuming they don't block.</li>
|
|
39
|
+
</ul>
|
|
40
|
+
|
|
41
|
+
<h3 id="cputhreadpoolexecutor">CPUThreadPoolExecutor <a href="#cputhreadpoolexecutor" class="headerLink">#</a></h3>
|
|
42
|
+
|
|
43
|
+
<ul>
|
|
44
|
+
<li>A single queue backed by folly/LifoSem and folly/MPMC queue. Since there is only a single queue, contention can be quite high, since all the worker threads and all the producer threads hit the same queue. MPMC queue excels in this situation. MPMC queue dictates a max queue size.</li>
|
|
45
|
+
<li>LifoSem wakes up threads in Lifo order - i.e. there are only few threads as necessary running, and we always try to reuse the same few threads for better cache locality.</li>
|
|
46
|
+
<li>Inactive threads have their stack madvised away. This works quite well in combination with Lifosem - it almost doesn't matter if more threads than are necessary are specified at startup.</li>
|
|
47
|
+
<li>stop() will finish all outstanding tasks at exit</li>
|
|
48
|
+
<li>Supports priorities - priorities are implemented as multiple queues - each worker thread checks the highest priority queue first. Threads themselves don't have priorities set, so a series of long running low priority tasks could still hog all the threads. (at last check pthreads thread priorities didn't work very well)</li>
|
|
49
|
+
</ul>
|
|
50
|
+
|
|
51
|
+
<h3 id="threadpoolexecutor">ThreadPoolExecutor <a href="#threadpoolexecutor" class="headerLink">#</a></h3>
|
|
52
|
+
|
|
53
|
+
<p>Base class that contains the thread startup/shutdown/stats logic, since this is pretty disjoint from how tasks are actually run</p>
|
|
54
|
+
|
|
55
|
+
<h3 id="observers">Observers <a href="#observers" class="headerLink">#</a></h3>
|
|
56
|
+
|
|
57
|
+
<p>An observer interface is provided to listen for thread start/stop events. This is useful to create objects that should be one-per-thread, but also have them work correctly if threads are added/removed from the thread pool.</p>
|
|
58
|
+
|
|
59
|
+
<h3 id="stats">Stats <a href="#stats" class="headerLink">#</a></h3>
|
|
60
|
+
|
|
61
|
+
<p>PoolStats are provided to get task count, running time, waiting time, etc.</p>
|
|
62
|
+
</section>
|
|
63
|
+
|