react-native-windows 0.83.2 → 0.83.3

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.
Files changed (926) hide show
  1. package/Directory.Build.props +2 -17
  2. package/Folly/ThreadNameStub.cpp +4 -6
  3. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +17 -4
  4. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +8 -4
  5. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
  6. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
  7. package/PropertySheets/CIBuildOptimizations.props +2 -2
  8. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  9. package/PropertySheets/JSEngine.props +1 -1
  10. package/PropertySheets/NuGet.LockFile.props +9 -1
  11. package/PropertySheets/React.Cpp.props +3 -3
  12. package/PropertySheets/WinUI.props +2 -1
  13. package/ReactCommon/ReactCommon.vcxproj +0 -5
  14. package/Scripts/ConfigureYarnPackageAgeGate.ps1 +25 -0
  15. package/Scripts/EnableInternalWinAppSDKFeed.ps1 +12 -5
  16. package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +103 -6
  17. package/Scripts/RunRnwInitWindows.js +37 -0
  18. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
  19. package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
  20. package/Scripts/creaternwapp.cmd +30 -17
  21. package/Scripts/creaternwlib.cmd +36 -23
  22. package/Shared/Shared.vcxitems +2 -0
  23. package/{Folly → external}/.clang-format +0 -1
  24. package/external/External.vcxitems +10 -0
  25. package/external/fast-float/.syncignore +10 -0
  26. package/external/fast-float/LICENSE-APACHE +190 -0
  27. package/external/fast-float/LICENSE-BOOST +23 -0
  28. package/external/fast-float/LICENSE-MIT +27 -0
  29. package/external/fast-float/README.md +545 -0
  30. package/external/fast-float/cgmanifest.json +15 -0
  31. package/external/fast-float/fast-float.vcxitems +14 -0
  32. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  33. package/external/fast-float/include/fast_float/bigint.h +638 -0
  34. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  35. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  36. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  37. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  38. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  39. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  40. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  41. package/external/fast-float/sync-config.json +8 -0
  42. package/external/fmt/.syncignore +10 -0
  43. package/external/fmt/CONTRIBUTING.md +20 -0
  44. package/external/fmt/LICENSE +27 -0
  45. package/external/fmt/README.md +484 -0
  46. package/external/fmt/doc/ChangeLog-old.md +3290 -0
  47. package/external/fmt/doc/api.md +650 -0
  48. package/external/fmt/doc/fmt.css +61 -0
  49. package/external/fmt/doc/fmt.js +4 -0
  50. package/external/fmt/doc/get-started.md +222 -0
  51. package/external/fmt/doc/index.md +151 -0
  52. package/external/fmt/doc/perf.svg +1 -0
  53. package/external/fmt/doc/python-license.txt +290 -0
  54. package/external/fmt/doc/syntax.md +887 -0
  55. package/external/fmt/fmt.vcxitems +28 -0
  56. package/external/fmt/include/fmt/args.h +228 -0
  57. package/external/fmt/include/fmt/base.h +3077 -0
  58. package/external/fmt/include/fmt/chrono.h +2432 -0
  59. package/external/fmt/include/fmt/color.h +612 -0
  60. package/external/fmt/include/fmt/compile.h +529 -0
  61. package/external/fmt/include/fmt/core.h +5 -0
  62. package/external/fmt/include/fmt/format-inl.h +1928 -0
  63. package/external/fmt/include/fmt/format.h +4427 -0
  64. package/external/fmt/include/fmt/os.h +439 -0
  65. package/external/fmt/include/fmt/ostream.h +211 -0
  66. package/external/fmt/include/fmt/printf.h +656 -0
  67. package/external/fmt/include/fmt/ranges.h +882 -0
  68. package/external/fmt/include/fmt/std.h +699 -0
  69. package/external/fmt/include/fmt/xchar.h +322 -0
  70. package/external/fmt/src/fmt.cc +135 -0
  71. package/external/fmt/src/format.cc +43 -0
  72. package/external/fmt/src/os.cc +403 -0
  73. package/external/fmt/sync-config.json +8 -0
  74. package/external/folly/.syncignore +60 -0
  75. package/external/folly/LICENSE +200 -0
  76. package/external/folly/README.md +263 -0
  77. package/{fmt → external/folly/folly}/.clang-format +0 -1
  78. package/external/folly/folly/AtomicHashArray-inl.h +546 -0
  79. package/external/folly/folly/AtomicHashArray.h +431 -0
  80. package/external/folly/folly/AtomicHashMap-inl.h +653 -0
  81. package/external/folly/folly/AtomicHashMap.h +484 -0
  82. package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
  83. package/external/folly/folly/AtomicLinkedList.h +110 -0
  84. package/external/folly/folly/AtomicUnorderedMap.h +522 -0
  85. package/external/folly/folly/BUCK +1631 -0
  86. package/external/folly/folly/BUILD_MODE.bzl +72 -0
  87. package/external/folly/folly/Benchmark.cpp +986 -0
  88. package/external/folly/folly/Benchmark.h +680 -0
  89. package/external/folly/folly/BenchmarkUtil.h +47 -0
  90. package/external/folly/folly/Bits.h +17 -0
  91. package/external/folly/folly/CMakeLists.txt +110 -0
  92. package/external/folly/folly/CPortability.h +338 -0
  93. package/external/folly/folly/CancellationToken-inl.h +449 -0
  94. package/external/folly/folly/CancellationToken.cpp +250 -0
  95. package/external/folly/folly/CancellationToken.h +365 -0
  96. package/external/folly/folly/Chrono.h +132 -0
  97. package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
  98. package/external/folly/folly/ClockGettimeWrappers.h +29 -0
  99. package/external/folly/folly/ConcurrentBitSet.h +157 -0
  100. package/external/folly/folly/ConcurrentLazy.h +74 -0
  101. package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
  102. package/external/folly/folly/ConcurrentSkipList.h +824 -0
  103. package/external/folly/folly/ConstructorCallbackList.h +158 -0
  104. package/external/folly/folly/Conv.h +2026 -0
  105. package/external/folly/folly/CppAttributes.h +170 -0
  106. package/external/folly/folly/CpuId.h +297 -0
  107. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  108. package/external/folly/folly/Demangle.cpp +255 -0
  109. package/external/folly/folly/Demangle.h +73 -0
  110. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  111. package/external/folly/folly/DynamicConverter.h +17 -0
  112. package/external/folly/folly/Exception.h +150 -0
  113. package/external/folly/folly/ExceptionString.cpp +51 -0
  114. package/external/folly/folly/ExceptionString.h +33 -0
  115. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  116. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  117. package/external/folly/folly/ExceptionWrapper.h +377 -0
  118. package/external/folly/folly/Executor.cpp +111 -0
  119. package/external/folly/folly/Executor.h +351 -0
  120. package/external/folly/folly/Expected.h +1725 -0
  121. package/external/folly/folly/FBString.h +2888 -0
  122. package/external/folly/folly/FBVector.h +17 -0
  123. package/external/folly/folly/File.cpp +180 -0
  124. package/external/folly/folly/File.h +177 -0
  125. package/external/folly/folly/FileUtil.cpp +378 -0
  126. package/external/folly/folly/FileUtil.h +332 -0
  127. package/external/folly/folly/Fingerprint.cpp +135 -0
  128. package/external/folly/folly/Fingerprint.h +289 -0
  129. package/external/folly/folly/FixedString.h +2965 -0
  130. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  131. package/external/folly/folly/FollyMemcpy.h +23 -0
  132. package/external/folly/folly/FollyMemset.cpp +29 -0
  133. package/external/folly/folly/FollyMemset.h +25 -0
  134. package/external/folly/folly/Format-inl.h +1152 -0
  135. package/external/folly/folly/Format.cpp +429 -0
  136. package/external/folly/folly/Format.h +463 -0
  137. package/external/folly/folly/FormatArg.h +285 -0
  138. package/external/folly/folly/FormatTraits.h +65 -0
  139. package/external/folly/folly/Function.h +1159 -0
  140. package/external/folly/folly/GLog.h +85 -0
  141. package/external/folly/folly/GroupVarint.cpp +153 -0
  142. package/external/folly/folly/GroupVarint.h +630 -0
  143. package/external/folly/folly/Hash.h +20 -0
  144. package/external/folly/folly/IPAddress.cpp +490 -0
  145. package/external/folly/folly/IPAddress.h +667 -0
  146. package/external/folly/folly/IPAddressException.h +82 -0
  147. package/external/folly/folly/IPAddressV4.cpp +305 -0
  148. package/external/folly/folly/IPAddressV4.h +495 -0
  149. package/external/folly/folly/IPAddressV6.cpp +541 -0
  150. package/external/folly/folly/IPAddressV6.h +627 -0
  151. package/external/folly/folly/Indestructible.h +164 -0
  152. package/external/folly/folly/IndexedMemPool.h +550 -0
  153. package/external/folly/folly/IntrusiveList.h +17 -0
  154. package/external/folly/folly/Lazy.h +142 -0
  155. package/external/folly/folly/Likely.h +76 -0
  156. package/external/folly/folly/MPMCPipeline.h +280 -0
  157. package/external/folly/folly/MPMCQueue.h +1556 -0
  158. package/external/folly/folly/MacAddress.cpp +188 -0
  159. package/external/folly/folly/MacAddress.h +260 -0
  160. package/external/folly/folly/MapUtil.h +17 -0
  161. package/external/folly/folly/Math.h +258 -0
  162. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  163. package/external/folly/folly/Memory.h +900 -0
  164. package/external/folly/folly/MicroLock.cpp +76 -0
  165. package/external/folly/folly/MicroLock.h +354 -0
  166. package/external/folly/folly/MicroSpinLock.h +17 -0
  167. package/external/folly/folly/MoveWrapper.h +76 -0
  168. package/external/folly/folly/ObserverContainer.h +1026 -0
  169. package/external/folly/folly/Optional.h +743 -0
  170. package/external/folly/folly/Overload.h +325 -0
  171. package/external/folly/folly/PackedSyncPtr.h +147 -0
  172. package/external/folly/folly/Padded.h +464 -0
  173. package/external/folly/folly/Poly-inl.h +230 -0
  174. package/external/folly/folly/Poly.h +1095 -0
  175. package/external/folly/folly/PolyException.h +43 -0
  176. package/external/folly/folly/Portability.h +644 -0
  177. package/external/folly/folly/Preprocessor.h +236 -0
  178. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  179. package/external/folly/folly/RWSpinLock.h +17 -0
  180. package/external/folly/folly/Random-inl.h +86 -0
  181. package/external/folly/folly/Random.cpp +184 -0
  182. package/external/folly/folly/Random.h +434 -0
  183. package/external/folly/folly/Range.h +1772 -0
  184. package/external/folly/folly/Replaceable.h +636 -0
  185. package/external/folly/folly/ScopeGuard.cpp +29 -0
  186. package/external/folly/folly/ScopeGuard.h +420 -0
  187. package/external/folly/folly/SharedMutex.cpp +81 -0
  188. package/external/folly/folly/SharedMutex.h +1751 -0
  189. package/external/folly/folly/Singleton-inl.h +332 -0
  190. package/external/folly/folly/Singleton.cpp +512 -0
  191. package/external/folly/folly/Singleton.h +891 -0
  192. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  193. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  194. package/external/folly/folly/SocketAddress.cpp +786 -0
  195. package/external/folly/folly/SocketAddress.h +768 -0
  196. package/external/folly/folly/SpinLock.h +55 -0
  197. package/external/folly/folly/String-inl.h +668 -0
  198. package/external/folly/folly/String.cpp +777 -0
  199. package/external/folly/folly/String.h +767 -0
  200. package/external/folly/folly/Subprocess.cpp +1142 -0
  201. package/external/folly/folly/Subprocess.h +1055 -0
  202. package/external/folly/folly/Synchronized.h +1833 -0
  203. package/external/folly/folly/SynchronizedPtr.h +106 -0
  204. package/external/folly/folly/ThreadCachedInt.h +175 -0
  205. package/external/folly/folly/ThreadLocal.h +478 -0
  206. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  207. package/external/folly/folly/TimeoutQueue.h +123 -0
  208. package/external/folly/folly/TokenBucket.h +673 -0
  209. package/external/folly/folly/Traits.h +1442 -0
  210. package/external/folly/folly/Try-inl.h +372 -0
  211. package/external/folly/folly/Try.cpp +23 -0
  212. package/external/folly/folly/Try.h +728 -0
  213. package/external/folly/folly/UTF8String.h +56 -0
  214. package/external/folly/folly/Unicode.cpp +201 -0
  215. package/external/folly/folly/Unicode.h +94 -0
  216. package/external/folly/folly/Unit.h +65 -0
  217. package/external/folly/folly/Uri-inl.h +101 -0
  218. package/external/folly/folly/Uri.cpp +190 -0
  219. package/external/folly/folly/Uri.h +142 -0
  220. package/external/folly/folly/Utility.h +932 -0
  221. package/external/folly/folly/VERSION +1 -0
  222. package/external/folly/folly/Varint.h +230 -0
  223. package/external/folly/folly/VirtualExecutor.h +17 -0
  224. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  225. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  226. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  227. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  228. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  229. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  230. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  231. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  232. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  233. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  234. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  235. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  236. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  237. package/external/folly/folly/base64.h +264 -0
  238. package/external/folly/folly/chrono/BUCK +29 -0
  239. package/external/folly/folly/chrono/Clock.h +65 -0
  240. package/external/folly/folly/chrono/Conv.h +712 -0
  241. package/external/folly/folly/chrono/test/BUCK +26 -0
  242. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  243. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  244. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  245. package/external/folly/folly/concurrency/BUCK +170 -0
  246. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  247. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  248. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  249. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  250. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  251. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  252. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  253. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  254. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  255. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  256. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  257. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  258. package/external/folly/folly/concurrency/container/BUCK +77 -0
  259. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  260. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  261. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  262. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  263. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  264. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  265. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  266. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  267. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  268. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  269. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  270. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  271. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  272. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  273. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  274. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  275. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  276. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  277. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  278. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  279. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  280. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  281. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  282. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  283. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  284. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  285. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  286. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  287. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  288. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  289. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  290. package/external/folly/folly/concurrency/test/BUCK +229 -0
  291. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  292. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  293. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  294. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  295. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  296. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  297. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  298. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  299. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  300. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  301. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  302. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  303. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  304. package/external/folly/folly/container/Access.h +57 -0
  305. package/external/folly/folly/container/Array.h +87 -0
  306. package/external/folly/folly/container/BUCK +353 -0
  307. package/external/folly/folly/container/BitIterator.h +203 -0
  308. package/external/folly/folly/container/Enumerate.h +162 -0
  309. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  310. package/external/folly/folly/container/F14.md +300 -0
  311. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  312. package/external/folly/folly/container/F14Map.h +2108 -0
  313. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  314. package/external/folly/folly/container/F14Set.h +1603 -0
  315. package/external/folly/folly/container/FBVector.h +1711 -0
  316. package/external/folly/folly/container/Foreach-inl.h +316 -0
  317. package/external/folly/folly/container/Foreach.h +209 -0
  318. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  319. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  320. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  321. package/external/folly/folly/container/IntrusiveList.h +131 -0
  322. package/external/folly/folly/container/Iterator.h +843 -0
  323. package/external/folly/folly/container/MapUtil.h +376 -0
  324. package/external/folly/folly/container/Merge.h +90 -0
  325. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  326. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  327. package/external/folly/folly/container/Reserve.h +109 -0
  328. package/external/folly/folly/container/SparseByteSet.h +123 -0
  329. package/external/folly/folly/container/View.h +81 -0
  330. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  331. package/external/folly/folly/container/detail/BUCK +115 -0
  332. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  333. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  334. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  335. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  336. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  337. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  338. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  339. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  340. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  341. package/external/folly/folly/container/detail/Util.h +303 -0
  342. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  343. package/external/folly/folly/container/detail/test/BUCK +14 -0
  344. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  345. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  346. package/external/folly/folly/container/range_traits.h +81 -0
  347. package/external/folly/folly/container/small_vector.h +1476 -0
  348. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  349. package/external/folly/folly/container/span.h +408 -0
  350. package/external/folly/folly/container/tape.h +608 -0
  351. package/external/folly/folly/container/test/.clang-tidy +12 -0
  352. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  353. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  354. package/external/folly/folly/container/test/BUCK +568 -0
  355. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  356. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  357. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  358. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  359. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  360. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  361. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  362. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  363. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  364. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  365. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  366. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  367. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  368. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  369. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  370. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  371. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  372. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  373. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  374. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  375. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  376. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  377. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  378. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  379. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  380. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  381. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  382. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  383. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  384. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  385. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  386. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  387. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  388. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  389. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  390. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  391. package/external/folly/folly/container/test/span_test.cpp +520 -0
  392. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  393. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  394. package/external/folly/folly/defs.bzl +238 -0
  395. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  396. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  397. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  398. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  399. package/external/folly/folly/detail/BUCK +406 -0
  400. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  401. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  402. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  403. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  404. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  405. package/external/folly/folly/detail/Futex-inl.h +123 -0
  406. package/external/folly/folly/detail/Futex.cpp +273 -0
  407. package/external/folly/folly/detail/Futex.h +109 -0
  408. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  409. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  410. package/external/folly/folly/detail/IPAddress.h +57 -0
  411. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  412. package/external/folly/folly/detail/Iterators.h +156 -0
  413. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  414. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  415. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  416. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  417. package/external/folly/folly/detail/PerfScoped.h +70 -0
  418. package/external/folly/folly/detail/PolyDetail.h +921 -0
  419. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  420. package/external/folly/folly/detail/RangeCommon.h +93 -0
  421. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  422. package/external/folly/folly/detail/RangeSse42.h +30 -0
  423. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  424. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  425. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  426. package/external/folly/folly/detail/Singleton.h +34 -0
  427. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  428. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  429. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  430. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  431. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  432. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  433. package/external/folly/folly/detail/Sse.cpp +35 -0
  434. package/external/folly/folly/detail/Sse.h +45 -0
  435. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  436. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  437. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  438. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  439. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  440. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  441. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  442. package/external/folly/folly/detail/TypeList.h +551 -0
  443. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  444. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  445. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  446. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  447. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  448. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  449. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  450. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  451. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  452. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  453. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  454. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  455. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  456. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  457. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  458. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  459. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  460. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  461. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  462. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  463. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  464. package/external/folly/folly/detail/test/BUCK +118 -0
  465. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  466. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  467. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  468. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  469. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  470. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  471. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  472. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  473. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  474. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  475. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  476. package/external/folly/folly/docs/AtomicHashMap.md +134 -0
  477. package/external/folly/folly/docs/Benchmark.md +310 -0
  478. package/external/folly/folly/docs/Conv.md +291 -0
  479. package/external/folly/folly/docs/Dynamic.md +220 -0
  480. package/external/folly/folly/docs/DynamicConverter.md +71 -0
  481. package/external/folly/folly/docs/Executors.md +63 -0
  482. package/external/folly/folly/docs/FBString.md +46 -0
  483. package/external/folly/folly/docs/FBVector.md +200 -0
  484. package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
  485. package/external/folly/folly/docs/Format.md +177 -0
  486. package/external/folly/folly/docs/Function.md +92 -0
  487. package/external/folly/folly/docs/Futures.md +263 -0
  488. package/external/folly/folly/docs/GroupVarint.md +46 -0
  489. package/external/folly/folly/docs/Histogram.md +104 -0
  490. package/external/folly/folly/docs/MapUtils.md +80 -0
  491. package/external/folly/folly/docs/Overview.md +263 -0
  492. package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
  493. package/external/folly/folly/docs/Poly.md +500 -0
  494. package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
  495. package/external/folly/folly/docs/Rcu.md +218 -0
  496. package/external/folly/folly/docs/SmallLocks.md +24 -0
  497. package/external/folly/folly/docs/Synchronized.md +793 -0
  498. package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
  499. package/external/folly/folly/docs/ThreadLocal.md +105 -0
  500. package/external/folly/folly/docs/Traits.md +161 -0
  501. package/external/folly/folly/docs/small_vector.md +64 -0
  502. package/external/folly/folly/docs/style.css +23 -0
  503. package/external/folly/folly/dynamic-inl.h +17 -0
  504. package/external/folly/folly/dynamic.h +17 -0
  505. package/external/folly/folly/folly_extended_library.bzl +28 -0
  506. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  507. package/external/folly/folly/functional/BUCK +57 -0
  508. package/external/folly/folly/functional/Invoke.h +880 -0
  509. package/external/folly/folly/functional/Partial.h +130 -0
  510. package/external/folly/folly/functional/protocol.h +203 -0
  511. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  512. package/external/folly/folly/functional/test/BUCK +57 -0
  513. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  514. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  515. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  516. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  517. package/external/folly/folly/functional/traits.h +675 -0
  518. package/external/folly/folly/hash/BUCK +86 -0
  519. package/external/folly/folly/hash/Checksum.cpp +275 -0
  520. package/external/folly/folly/hash/Checksum.h +94 -0
  521. package/external/folly/folly/hash/FarmHash.h +46 -0
  522. package/external/folly/folly/hash/Hash.h +1045 -0
  523. package/external/folly/folly/hash/MurmurHash.h +86 -0
  524. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  525. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  526. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  527. package/external/folly/folly/hash/SpookyHashV2.h +339 -0
  528. package/external/folly/folly/hash/detail/BUCK +26 -0
  529. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  530. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  531. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  532. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  533. package/external/folly/folly/hash/test/BUCK +132 -0
  534. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  535. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  536. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  537. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  538. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  539. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  540. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  541. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  542. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  543. package/external/folly/folly/hash/traits.h +115 -0
  544. package/external/folly/folly/json/BUCK +155 -0
  545. package/external/folly/folly/json/DynamicConverter.h +464 -0
  546. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  547. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  548. package/external/folly/folly/json/DynamicParser.h +394 -0
  549. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  550. package/external/folly/folly/json/JSONSchema.h +73 -0
  551. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  552. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  553. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  554. package/external/folly/folly/json/bser/BUCK +24 -0
  555. package/external/folly/folly/json/bser/Bser.h +107 -0
  556. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  557. package/external/folly/folly/json/bser/Load.cpp +246 -0
  558. package/external/folly/folly/json/bser/test/BUCK +14 -0
  559. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  560. package/external/folly/folly/json/dynamic.cpp +552 -0
  561. package/external/folly/folly/json/dynamic.h +1346 -0
  562. package/external/folly/folly/json/json.h +238 -0
  563. package/external/folly/folly/json/json_patch.cpp +325 -0
  564. package/external/folly/folly/json/json_patch.h +126 -0
  565. package/external/folly/folly/json/json_pointer.cpp +114 -0
  566. package/external/folly/folly/json/json_pointer.h +87 -0
  567. package/external/folly/folly/json/test/BUCK +147 -0
  568. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  569. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  570. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  571. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  572. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  573. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  574. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  575. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  576. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  577. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  578. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  579. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  580. package/external/folly/folly/json/tool/BUCK +13 -0
  581. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  582. package/external/folly/folly/json.h +17 -0
  583. package/external/folly/folly/json_patch.h +17 -0
  584. package/external/folly/folly/json_pointer.h +17 -0
  585. package/external/folly/folly/lang/Access.h +29 -0
  586. package/external/folly/folly/lang/Align.h +240 -0
  587. package/external/folly/folly/lang/Aligned.h +92 -0
  588. package/external/folly/folly/lang/Assume.h +82 -0
  589. package/external/folly/folly/lang/BUCK +287 -0
  590. package/external/folly/folly/lang/Badge.h +108 -0
  591. package/external/folly/folly/lang/Bits.h +570 -0
  592. package/external/folly/folly/lang/BitsClass.h +312 -0
  593. package/external/folly/folly/lang/Builtin.h +74 -0
  594. package/external/folly/folly/lang/CArray.h +34 -0
  595. package/external/folly/folly/lang/CString.cpp +86 -0
  596. package/external/folly/folly/lang/CString.h +55 -0
  597. package/external/folly/folly/lang/Cast.h +51 -0
  598. package/external/folly/folly/lang/CheckedMath.h +253 -0
  599. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  600. package/external/folly/folly/lang/Exception.cpp +822 -0
  601. package/external/folly/folly/lang/Exception.h +716 -0
  602. package/external/folly/folly/lang/Extern.h +55 -0
  603. package/external/folly/folly/lang/Hint-inl.h +144 -0
  604. package/external/folly/folly/lang/Hint.h +238 -0
  605. package/external/folly/folly/lang/Keep.h +98 -0
  606. package/external/folly/folly/lang/New.h +124 -0
  607. package/external/folly/folly/lang/Ordering.h +140 -0
  608. package/external/folly/folly/lang/Pretty.h +159 -0
  609. package/external/folly/folly/lang/PropagateConst.h +413 -0
  610. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  611. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  612. package/external/folly/folly/lang/StaticConst.h +33 -0
  613. package/external/folly/folly/lang/Thunk.h +100 -0
  614. package/external/folly/folly/lang/TypeInfo.h +58 -0
  615. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  616. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  617. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  618. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  619. package/external/folly/folly/lang/test/BUCK +258 -0
  620. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  621. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  622. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  623. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  624. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  625. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  626. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  627. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  628. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  629. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  630. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  631. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  632. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  633. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  634. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  635. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  636. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  637. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  638. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  639. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  640. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  641. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  642. package/external/folly/folly/memcpy.S +292 -0
  643. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  644. package/external/folly/folly/memory/Arena-inl.h +83 -0
  645. package/external/folly/folly/memory/Arena.h +325 -0
  646. package/external/folly/folly/memory/BUCK +191 -0
  647. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  648. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  649. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  650. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  651. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  652. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  653. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  654. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  655. package/external/folly/folly/memory/Malloc.h +551 -0
  656. package/external/folly/folly/memory/MemoryResource.h +57 -0
  657. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  658. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  659. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  660. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  661. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  662. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  663. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  664. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  665. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  666. package/external/folly/folly/memory/detail/BUCK +10 -0
  667. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  668. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  669. package/external/folly/folly/memory/not_null-inl.h +522 -0
  670. package/external/folly/folly/memory/not_null.h +449 -0
  671. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  672. package/external/folly/folly/memory/test/BUCK +146 -0
  673. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  674. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  675. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  676. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  677. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  678. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  679. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  680. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  681. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  682. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  683. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  684. package/external/folly/folly/memset.S +245 -0
  685. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  686. package/external/folly/folly/portability/Asm.h +50 -0
  687. package/external/folly/folly/portability/Atomic.h +31 -0
  688. package/external/folly/folly/portability/BUCK +456 -0
  689. package/external/folly/folly/portability/Builtins.cpp +31 -0
  690. package/external/folly/folly/portability/Builtins.h +161 -0
  691. package/external/folly/folly/portability/Config.h +43 -0
  692. package/external/folly/folly/portability/Constexpr.h +145 -0
  693. package/external/folly/folly/portability/Dirent.cpp +140 -0
  694. package/external/folly/folly/portability/Dirent.h +41 -0
  695. package/external/folly/folly/portability/Event.h +44 -0
  696. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  697. package/external/folly/folly/portability/Fcntl.h +67 -0
  698. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  699. package/external/folly/folly/portability/Filesystem.h +114 -0
  700. package/external/folly/folly/portability/FmtCompile.h +40 -0
  701. package/external/folly/folly/portability/GFlags.h +139 -0
  702. package/external/folly/folly/portability/GMock.h +35 -0
  703. package/external/folly/folly/portability/GTest.h +35 -0
  704. package/external/folly/folly/portability/IOVec.h +34 -0
  705. package/external/folly/folly/portability/Libgen.cpp +59 -0
  706. package/external/folly/folly/portability/Libgen.h +29 -0
  707. package/external/folly/folly/portability/Libunwind.h +21 -0
  708. package/external/folly/folly/portability/Malloc.cpp +31 -0
  709. package/external/folly/folly/portability/Malloc.h +53 -0
  710. package/external/folly/folly/portability/Math.h +90 -0
  711. package/external/folly/folly/portability/Memory.h +26 -0
  712. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  713. package/external/folly/folly/portability/OpenSSL.h +102 -0
  714. package/external/folly/folly/portability/PThread.cpp +697 -0
  715. package/external/folly/folly/portability/PThread.h +148 -0
  716. package/external/folly/folly/portability/README.md +21 -0
  717. package/external/folly/folly/portability/Sched.cpp +41 -0
  718. package/external/folly/folly/portability/Sched.h +45 -0
  719. package/external/folly/folly/portability/Sockets.cpp +245 -0
  720. package/external/folly/folly/portability/Sockets.h +155 -0
  721. package/external/folly/folly/portability/SourceLocation.h +49 -0
  722. package/external/folly/folly/portability/Stdio.cpp +77 -0
  723. package/external/folly/folly/portability/Stdio.h +32 -0
  724. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  725. package/external/folly/folly/portability/Stdlib.h +64 -0
  726. package/external/folly/folly/portability/String.cpp +53 -0
  727. package/external/folly/folly/portability/String.h +39 -0
  728. package/external/folly/folly/portability/SysFile.cpp +46 -0
  729. package/external/folly/folly/portability/SysFile.h +27 -0
  730. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  731. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  732. package/external/folly/folly/portability/SysMman.cpp +242 -0
  733. package/external/folly/folly/portability/SysMman.h +68 -0
  734. package/external/folly/folly/portability/SysResource.cpp +108 -0
  735. package/external/folly/folly/portability/SysResource.h +71 -0
  736. package/external/folly/folly/portability/SysStat.cpp +66 -0
  737. package/external/folly/folly/portability/SysStat.h +52 -0
  738. package/external/folly/folly/portability/SysSyscall.h +73 -0
  739. package/external/folly/folly/portability/SysTime.cpp +62 -0
  740. package/external/folly/folly/portability/SysTime.h +50 -0
  741. package/external/folly/folly/portability/SysTypes.h +44 -0
  742. package/external/folly/folly/portability/SysUio.cpp +179 -0
  743. package/external/folly/folly/portability/SysUio.h +51 -0
  744. package/external/folly/folly/portability/Syslog.h +39 -0
  745. package/external/folly/folly/portability/Time.cpp +357 -0
  746. package/external/folly/folly/portability/Time.h +74 -0
  747. package/external/folly/folly/portability/Unistd.h +111 -0
  748. package/external/folly/folly/portability/Windows.h +108 -0
  749. package/external/folly/folly/portability/openat2.c +30 -0
  750. package/external/folly/folly/portability/openat2.h +39 -0
  751. package/external/folly/folly/portability/test/BUCK +59 -0
  752. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  753. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  754. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  755. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  756. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  757. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  758. package/external/folly/folly/small_vector.h +17 -0
  759. package/external/folly/folly/somerge_defs.bzl +399 -0
  760. package/external/folly/folly/sorted_vector_types.h +17 -0
  761. package/external/folly/folly/stop_watch.h +317 -0
  762. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  763. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  764. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  765. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  766. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  767. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  768. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  769. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  770. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  771. package/external/folly/folly/synchronization/BUCK +418 -0
  772. package/external/folly/folly/synchronization/Baton.h +419 -0
  773. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  774. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  775. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  776. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  777. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  778. package/external/folly/folly/synchronization/EventCount.h +200 -0
  779. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  780. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  781. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  782. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  783. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  784. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  785. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  786. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  787. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  788. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  789. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  790. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  791. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  792. package/external/folly/folly/synchronization/Latch.h +160 -0
  793. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  794. package/external/folly/folly/synchronization/Lock.h +887 -0
  795. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  796. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  797. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  798. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  799. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  800. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  801. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  802. package/external/folly/folly/synchronization/Rcu.h +553 -0
  803. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  804. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  805. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  806. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  807. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  808. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  809. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  810. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  811. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  812. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  813. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  814. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  815. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  816. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  817. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  818. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  819. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  820. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  821. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  822. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  823. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  824. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  825. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  826. package/external/folly/folly/synchronization/example/BUCK +27 -0
  827. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  828. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  829. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  830. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  831. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  832. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  833. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  834. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  835. package/external/folly/folly/synchronization/test/BUCK +495 -0
  836. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  837. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  838. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  839. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  840. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  841. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  842. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  843. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  844. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  845. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  846. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  847. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  848. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  849. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  850. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  851. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  852. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  853. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  854. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  855. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  856. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  857. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  858. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  859. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  860. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  861. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  862. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  863. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  864. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  865. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  866. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  867. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  868. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  869. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  870. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  871. package/external/folly/folly/system/AtFork.cpp +205 -0
  872. package/external/folly/folly/system/AtFork.h +116 -0
  873. package/external/folly/folly/system/AuxVector.h +198 -0
  874. package/external/folly/folly/system/BUCK +144 -0
  875. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  876. package/external/folly/folly/system/EnvUtil.h +113 -0
  877. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  878. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  879. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  880. package/external/folly/folly/system/MemoryMapping.h +287 -0
  881. package/external/folly/folly/system/Pid.cpp +87 -0
  882. package/external/folly/folly/system/Pid.h +34 -0
  883. package/external/folly/folly/system/Shell.cpp +33 -0
  884. package/external/folly/folly/system/Shell.h +93 -0
  885. package/external/folly/folly/system/ThreadId.cpp +89 -0
  886. package/external/folly/folly/system/ThreadId.h +62 -0
  887. package/external/folly/folly/system/ThreadName.cpp +330 -0
  888. package/external/folly/folly/system/ThreadName.h +72 -0
  889. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  890. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  891. package/external/folly/folly/system/test/BUCK +120 -0
  892. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  893. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  894. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  895. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  896. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  897. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  898. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  899. package/external/folly/folly.vcxitems +164 -0
  900. package/external/folly/static/logo.svg +1 -0
  901. package/external/folly/sync-config.json +8 -0
  902. package/package.json +5 -5
  903. package/template/cpp-lib/proj/MyLib.sln +0 -33
  904. package/template/cs-lib/proj/MyLib.sln +0 -33
  905. package/templates/cpp-app/windows/MyApp.sln +0 -33
  906. package/templates/cpp-lib/example/metro.config.js +30 -4
  907. package/templates/cpp-lib/windows/MyLib.sln +0 -33
  908. package/Folly/Folly.vcxproj +0 -376
  909. package/Folly/Folly.vcxproj.filters +0 -558
  910. package/fmt/fmt.vcxproj +0 -153
  911. package/fmt/fmt.vcxproj.filters +0 -59
  912. package/fmt/pch.cpp +0 -4
  913. package/fmt/pch.h +0 -2
  914. /package/{fmt → external/fmt}/cgmanifest.json +0 -0
  915. /package/{Folly → external/folly}/Folly.natvis +0 -0
  916. /package/{Folly → external/folly}/cgmanifest.json +0 -0
  917. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
  918. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
  919. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
  920. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
  921. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
  922. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
  923. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
  924. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
  925. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
  926. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
@@ -0,0 +1,445 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #pragma once
18
+
19
+ #include <folly/Portability.h>
20
+ #include <folly/algorithm/simd/Ignore.h>
21
+ #include <folly/algorithm/simd/Movemask.h>
22
+ #include <folly/algorithm/simd/detail/SimdPlatform.h>
23
+ #include <folly/lang/Bits.h>
24
+
25
+ #include <array>
26
+
27
+ #if FOLLY_X64 && FOLLY_SSE_PREREQ(4, 2)
28
+ #include <immintrin.h>
29
+ #endif
30
+
31
+ #if FOLLY_AARCH64
32
+ #include <arm_neon.h>
33
+ #endif
34
+
35
+ namespace folly {
36
+ namespace simd::detail {
37
+
38
+ /**
39
+ * SimdPlatform<T>
40
+ *
41
+ * Common interface for some SIMD operations between: sse4.2, avx2,
42
+ * arm-neon.
43
+ *
44
+ * Supported types for T at the moment are uint8_16/uint16_t/uint32_t/uint64_t
45
+ *
46
+ * If it's not one of the supported platforms:
47
+ * std::same_as<SimdPlatform<T>, void>
48
+ * There is also a macro: FOLLY_DETAIL_HAS_SIMD_PLATFORM set to 1 or 0
49
+ *
50
+ **/
51
+
52
+ #if FOLLY_X64 && FOLLY_SSE_PREREQ(4, 2) || FOLLY_AARCH64
53
+
54
+ template <typename Platform>
55
+ struct SimdPlatformCommon {
56
+ /**
57
+ * sclar_t - type of scalar we operate on (uint8_t, uint16_t etc)
58
+ * reg_t - type of a simd register (__m128i)
59
+ * logical_t - type of a simd logical register (matches reg_t so far)
60
+ **/
61
+ using scalar_t = typename Platform::scalar_t;
62
+ using reg_t = typename Platform::reg_t;
63
+ using logical_t = typename Platform::logical_t;
64
+
65
+ static constexpr int kCardinal = sizeof(reg_t) / sizeof(scalar_t);
66
+
67
+ /**
68
+ * loads:
69
+ * precondition: at least one element should be not ignored.
70
+ *
71
+ * loada - load from an aligned (to sizeof(reg_t)) address
72
+ * loadu - load from an unaligned address
73
+ * unsafeLoadu - load from an unaligned address that disables sanitizers.
74
+ * This is for reading a register within a page
75
+ * but maybe outside of the array's boundary.
76
+ *
77
+ * Ignored values can be garbage.
78
+ **/
79
+ template <typename Ignore>
80
+ static reg_t loada(const scalar_t* ptr, Ignore);
81
+ static reg_t loadu(const scalar_t* ptr, ignore_none);
82
+ static reg_t unsafeLoadu(const scalar_t* ptr, ignore_none);
83
+
84
+ /**
85
+ * Comparing reg_t against the scalar.
86
+ *
87
+ * NOTE: less_equal only implemented for uint8_t
88
+ * for now.
89
+ **/
90
+ static logical_t equal(reg_t reg, scalar_t x);
91
+ static logical_t less_equal(reg_t reg, scalar_t x);
92
+
93
+ /**
94
+ * logical reduction
95
+ **/
96
+ template <typename Ignore>
97
+ static bool any(logical_t logical, Ignore ignore);
98
+
99
+ /**
100
+ * logical operations
101
+ **/
102
+ static logical_t logical_or(logical_t x, logical_t y);
103
+
104
+ /**
105
+ * Converting register to an array for debugging
106
+ **/
107
+ static auto toArray(reg_t x);
108
+ };
109
+
110
+ template <typename Platform>
111
+ template <typename Ignore>
112
+ FOLLY_ERASE auto SimdPlatformCommon<Platform>::loada(
113
+ const scalar_t* ptr, Ignore) -> reg_t {
114
+ if constexpr (std::is_same_v<ignore_none, Ignore>) {
115
+ // There is not point to aligned load instructions
116
+ // on modern cpus. Arm doesn't even have any.
117
+ return loadu(ptr, ignore_none{});
118
+ } else {
119
+ // We have a precondition: at least one element is loaded.
120
+ // From this we can prove that we can unsafely load from
121
+ // and aligned address.
122
+ //
123
+ // Here is an explanation from Stephen Canon:
124
+ // https://stackoverflow.com/questions/25566302/vectorized-strlen-getting-away-with-reading-unallocated-memory
125
+ return unsafeLoadu(ptr, ignore_none{});
126
+ }
127
+ }
128
+
129
+ template <typename Platform>
130
+ FOLLY_ERASE auto SimdPlatformCommon<Platform>::loadu(
131
+ const scalar_t* ptr, ignore_none) -> reg_t {
132
+ return Platform::loadu(ptr);
133
+ }
134
+
135
+ template <typename Platform>
136
+ FOLLY_ERASE auto SimdPlatformCommon<Platform>::unsafeLoadu(
137
+ const scalar_t* ptr, ignore_none) -> reg_t {
138
+ return Platform::unsafeLoadu(ptr);
139
+ }
140
+
141
+ template <typename Platform>
142
+ FOLLY_ERASE auto SimdPlatformCommon<Platform>::equal(reg_t reg, scalar_t x)
143
+ -> logical_t {
144
+ return Platform::equal(reg, Platform::broadcast(x));
145
+ }
146
+
147
+ template <typename Platform>
148
+ FOLLY_ERASE auto SimdPlatformCommon<Platform>::less_equal(reg_t reg, scalar_t x)
149
+ -> logical_t {
150
+ static_assert(std::is_same_v<scalar_t, std::uint8_t>, "not implemented");
151
+ return Platform::less_equal(reg, Platform::broadcast(x));
152
+ }
153
+
154
+ template <typename Platform>
155
+ template <typename Ignore>
156
+ FOLLY_ERASE bool SimdPlatformCommon<Platform>::any(
157
+ logical_t logical, Ignore ignore) {
158
+ if constexpr (std::is_same_v<Ignore, ignore_none>) {
159
+ return Platform::any(logical);
160
+ } else {
161
+ return movemask<scalar_t>(logical, ignore).first;
162
+ }
163
+ }
164
+
165
+ template <typename Platform>
166
+ FOLLY_ERASE auto SimdPlatformCommon<Platform>::logical_or(
167
+ logical_t x, logical_t y) -> logical_t {
168
+ return Platform::logical_or(x, y);
169
+ }
170
+
171
+ template <typename Platform>
172
+ FOLLY_ERASE auto SimdPlatformCommon<Platform>::toArray(reg_t x) {
173
+ std::array<scalar_t, kCardinal> res;
174
+ std::memcpy(&res, &x, sizeof(x));
175
+ return res;
176
+ }
177
+
178
+ #endif
179
+
180
+ #if FOLLY_X64 && FOLLY_SSE_PREREQ(4, 2)
181
+
182
+ template <typename T>
183
+ struct SimdSse42PlatformSpecific {
184
+ using scalar_t = T;
185
+ using reg_t = __m128i;
186
+ using logical_t = reg_t;
187
+
188
+ FOLLY_ERASE
189
+ static reg_t loadu(const scalar_t* p) {
190
+ return _mm_loadu_si128(reinterpret_cast<const reg_t*>(p));
191
+ }
192
+
193
+ FOLLY_DISABLE_SANITIZERS
194
+ FOLLY_ERASE
195
+ static reg_t unsafeLoadu(const scalar_t* p) {
196
+ return _mm_loadu_si128(reinterpret_cast<const reg_t*>(p));
197
+ }
198
+
199
+ FOLLY_ERASE
200
+ static reg_t broadcast(scalar_t x) {
201
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
202
+ return _mm_set1_epi8(x);
203
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
204
+ return _mm_set1_epi16(x);
205
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
206
+ return _mm_set1_epi32(x);
207
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
208
+ return _mm_set1_epi64x(x);
209
+ }
210
+ }
211
+
212
+ FOLLY_ERASE
213
+ static logical_t equal(reg_t x, reg_t y) {
214
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
215
+ return _mm_cmpeq_epi8(x, y);
216
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
217
+ return _mm_cmpeq_epi16(x, y);
218
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
219
+ return _mm_cmpeq_epi32(x, y);
220
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
221
+ return _mm_cmpeq_epi64(x, y);
222
+ }
223
+ }
224
+
225
+ FOLLY_ERASE
226
+ static logical_t less_equal(reg_t x, reg_t y) {
227
+ static_assert(
228
+ std::is_same_v<std::uint8_t, scalar_t>, "other types not implemented");
229
+ // No unsigned comparisons on x86
230
+ // less equal <=> equal (min)
231
+ reg_t min = _mm_min_epu8(x, y);
232
+ return equal(x, min);
233
+ }
234
+
235
+ FOLLY_ERASE
236
+ static logical_t logical_or(logical_t x, logical_t y) {
237
+ return _mm_or_si128(x, y);
238
+ }
239
+
240
+ FOLLY_ERASE
241
+ static bool any(logical_t log) { return movemask<std::uint8_t>(log).first; }
242
+ };
243
+
244
+ #define FOLLY_DETAIL_HAS_SIMD_PLATFORM 1
245
+
246
+ template <typename T>
247
+ using SimdSse42Platform = SimdPlatformCommon<SimdSse42PlatformSpecific<T>>;
248
+
249
+ #if defined(__AVX2__)
250
+
251
+ template <typename T>
252
+ struct SimdAvx2PlatformSpecific {
253
+ using scalar_t = T;
254
+ using reg_t = __m256i;
255
+ using logical_t = reg_t;
256
+
257
+ FOLLY_ERASE
258
+ static reg_t loadu(const scalar_t* p) {
259
+ return _mm256_loadu_si256(reinterpret_cast<const reg_t*>(p));
260
+ }
261
+
262
+ FOLLY_DISABLE_SANITIZERS
263
+ FOLLY_ERASE
264
+ static reg_t unsafeLoadu(const scalar_t* p) {
265
+ return _mm256_loadu_si256(reinterpret_cast<const reg_t*>(p));
266
+ }
267
+
268
+ FOLLY_ERASE
269
+ static reg_t broadcast(scalar_t x) {
270
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
271
+ return _mm256_set1_epi8(x);
272
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
273
+ return _mm256_set1_epi16(x);
274
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
275
+ return _mm256_set1_epi32(x);
276
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
277
+ return _mm256_set1_epi64x(x);
278
+ }
279
+ }
280
+
281
+ FOLLY_ERASE
282
+ static logical_t equal(reg_t x, reg_t y) {
283
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
284
+ return _mm256_cmpeq_epi8(x, y);
285
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
286
+ return _mm256_cmpeq_epi16(x, y);
287
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
288
+ return _mm256_cmpeq_epi32(x, y);
289
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
290
+ return _mm256_cmpeq_epi64(x, y);
291
+ }
292
+ }
293
+
294
+ FOLLY_ERASE
295
+ static logical_t less_equal(reg_t x, reg_t y) {
296
+ static_assert(
297
+ std::is_same_v<std::uint8_t, scalar_t>, "other types not implemented");
298
+ // See SSE comment
299
+ reg_t min = _mm256_min_epu8(x, y);
300
+ return _mm256_cmpeq_epi8(x, min);
301
+ }
302
+
303
+ FOLLY_ERASE
304
+ static logical_t logical_or(logical_t x, logical_t y) {
305
+ return _mm256_or_si256(x, y);
306
+ }
307
+
308
+ FOLLY_ERASE
309
+ static bool any(logical_t log) {
310
+ return simd::movemask<std::uint8_t>(log).first;
311
+ }
312
+ };
313
+
314
+ template <typename T>
315
+ using SimdAvx2Platform = SimdPlatformCommon<SimdAvx2PlatformSpecific<T>>;
316
+
317
+ template <typename T>
318
+ using SimdPlatform = SimdAvx2Platform<T>;
319
+
320
+ #else
321
+
322
+ template <typename T>
323
+ using SimdPlatform = SimdPlatformCommon<SimdSse42PlatformSpecific<T>>;
324
+
325
+ #endif
326
+
327
+ #elif FOLLY_AARCH64
328
+
329
+ template <typename T>
330
+ struct SimdAarch64PlatformSpecific {
331
+ using scalar_t = T;
332
+
333
+ FOLLY_ERASE
334
+ static auto loadu(const scalar_t* p) {
335
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
336
+ return vld1q_u8(p);
337
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
338
+ return vld1q_u16(p);
339
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
340
+ return vld1q_u32(p);
341
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
342
+ return vld1q_u64(p);
343
+ }
344
+ }
345
+
346
+ using reg_t = decltype(loadu(nullptr));
347
+ using logical_t = reg_t;
348
+
349
+ FOLLY_DISABLE_SANITIZERS
350
+ FOLLY_ERASE
351
+ static reg_t unsafeLoadu(const scalar_t* p) {
352
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
353
+ return vld1q_u8(p);
354
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
355
+ return vld1q_u16(p);
356
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
357
+ return vld1q_u32(p);
358
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
359
+ return vld1q_u64(p);
360
+ }
361
+ }
362
+
363
+ FOLLY_ERASE
364
+ static reg_t broadcast(scalar_t x) {
365
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
366
+ return vdupq_n_u8(x);
367
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
368
+ return vdupq_n_u16(x);
369
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
370
+ return vdupq_n_u32(x);
371
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
372
+ return vdupq_n_u64(x);
373
+ }
374
+ }
375
+
376
+ FOLLY_ERASE
377
+ static logical_t equal(reg_t x, reg_t y) {
378
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
379
+ return vceqq_u8(x, y);
380
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
381
+ return vceqq_u16(x, y);
382
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
383
+ return vceqq_u32(x, y);
384
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
385
+ return vceqq_u64(x, y);
386
+ }
387
+ }
388
+
389
+ FOLLY_ERASE
390
+ static logical_t less_equal(reg_t x, reg_t y) {
391
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
392
+ return vcleq_u8(x, y);
393
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
394
+ return vcleq_u16(x, y);
395
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
396
+ return vcleq_u32(x, y);
397
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
398
+ return vcleq_u64(x, y);
399
+ }
400
+ }
401
+
402
+ FOLLY_ALWAYS_INLINE
403
+ static logical_t logical_or(logical_t x, logical_t y) {
404
+ if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
405
+ return vorrq_u8(x, y);
406
+ } else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
407
+ return vorrq_u16(x, y);
408
+ } else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
409
+ return vorrq_u32(x, y);
410
+ } else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
411
+ return vorrq_u64(x, y);
412
+ }
413
+ }
414
+
415
+ FOLLY_ALWAYS_INLINE
416
+ static bool any(logical_t log) {
417
+ // https://github.com/dotnet/runtime/pull/75864
418
+ auto u32 = bit_cast<uint32x4_t>(log);
419
+ u32 = vpmaxq_u32(u32, u32);
420
+ auto u64 = bit_cast<uint64x2_t>(u32);
421
+ return vgetq_lane_u64(u64, 0);
422
+ }
423
+ };
424
+
425
+ #define FOLLY_DETAIL_HAS_SIMD_PLATFORM 1
426
+
427
+ template <typename T>
428
+ using SimdAarch64Platform = SimdPlatformCommon<SimdAarch64PlatformSpecific<T>>;
429
+
430
+ template <typename T>
431
+ using SimdPlatform = SimdAarch64Platform<T>;
432
+
433
+ #define FOLLY_DETAIL_HAS_SIMD_PLATFORM 1
434
+
435
+ #else
436
+
437
+ #define FOLLY_DETAIL_HAS_SIMD_PLATFORM 0
438
+
439
+ template <typename T>
440
+ using SimdPlatform = void;
441
+
442
+ #endif
443
+
444
+ } // namespace simd::detail
445
+ } // namespace folly
@@ -0,0 +1,125 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #pragma once
18
+
19
+ #include <folly/CPortability.h>
20
+ #include <folly/Memory.h>
21
+ #include <folly/Traits.h>
22
+ #include <folly/container/span.h>
23
+
24
+ #include <concepts>
25
+ #include <type_traits>
26
+
27
+ namespace folly::simd::detail {
28
+
29
+ template <typename T>
30
+ auto findSimdFriendlyEquivalent() {
31
+ if constexpr (std::is_enum_v<T>) {
32
+ return findSimdFriendlyEquivalent<std::underlying_type_t<T>>();
33
+ } else if constexpr (std::is_pointer_v<T>) {
34
+ // We use signed numbers for pointers because x86 support for signed
35
+ // numbers is better and we can get away with it, in terms of correctness.
36
+ return int_bits_t<sizeof(T) * 8>{};
37
+ } else if constexpr (std::is_floating_point_v<T>) {
38
+ if constexpr (sizeof(T) == 4) {
39
+ return float{};
40
+ } else {
41
+ return double{};
42
+ }
43
+ } else if constexpr (std::is_signed_v<T>) {
44
+ return int_bits_t<sizeof(T) * 8>{};
45
+ } else if constexpr (std::is_unsigned_v<T>) {
46
+ return uint_bits_t<sizeof(T) * 8>{};
47
+ }
48
+ }
49
+
50
+ template <typename T>
51
+ constexpr bool has_simd_friendly_equivalent_scalar =
52
+ !std::is_same_v<void, decltype(findSimdFriendlyEquivalent<T>())>;
53
+
54
+ template <typename T>
55
+ using simd_friendly_equivalent_scalar_t = std::enable_if_t<
56
+ has_simd_friendly_equivalent_scalar<T>,
57
+ like_t<T, decltype(findSimdFriendlyEquivalent<std::remove_const_t<T>>())>>;
58
+
59
+ template <typename T>
60
+ constexpr bool has_integral_simd_friendly_equivalent_scalar_v =
61
+ std::is_integral_v< // void will return false
62
+ decltype(findSimdFriendlyEquivalent<std::remove_const_t<T>>())>;
63
+
64
+ template <typename T>
65
+ using unsigned_simd_friendly_equivalent_scalar_t = std::enable_if_t<
66
+ has_integral_simd_friendly_equivalent_scalar_v<T>,
67
+ like_t<T, uint_bits_t<sizeof(T) * 8>>>;
68
+
69
+ template <typename R>
70
+ using span_for = decltype(folly::span(std::declval<const R&>()));
71
+
72
+ struct AsSimdFriendlyFn {
73
+ template <typename T, std::size_t extent>
74
+ FOLLY_ERASE auto operator()(folly::span<T, extent> s) const
75
+ -> folly::span<simd_friendly_equivalent_scalar_t<T>, extent> {
76
+ return reinterpret_span_cast<simd_friendly_equivalent_scalar_t<T>>(s);
77
+ }
78
+
79
+ template <typename R>
80
+ FOLLY_ERASE auto operator()(R&& r) const
81
+ -> decltype(operator()(span_for<R>(r))) {
82
+ return operator()(folly::span(r));
83
+ }
84
+
85
+ template <typename T>
86
+ FOLLY_ERASE constexpr auto operator()(T x) const
87
+ -> simd_friendly_equivalent_scalar_t<T> {
88
+ using res_t = simd_friendly_equivalent_scalar_t<T>;
89
+ if constexpr (!std::is_pointer_v<T>) {
90
+ return static_cast<res_t>(x);
91
+ } else {
92
+ return reinterpret_cast<res_t>(x);
93
+ }
94
+ }
95
+ };
96
+ inline constexpr AsSimdFriendlyFn asSimdFriendly;
97
+
98
+ struct AsSimdFriendlyUintFn {
99
+ template <typename T, std::size_t extent>
100
+ FOLLY_ERASE auto operator()(folly::span<T, extent> s) const
101
+ -> folly::span<unsigned_simd_friendly_equivalent_scalar_t<T>, extent> {
102
+ return reinterpret_span_cast<unsigned_simd_friendly_equivalent_scalar_t<T>>(
103
+ s);
104
+ }
105
+
106
+ template <typename R>
107
+ FOLLY_ERASE auto operator()(R&& r) const
108
+ -> decltype(operator()(span_for<R>(r))) {
109
+ return operator()(folly::span(r));
110
+ }
111
+
112
+ template <typename T>
113
+ FOLLY_ERASE constexpr auto operator()(T x) const
114
+ -> unsigned_simd_friendly_equivalent_scalar_t<T> {
115
+ using res_t = unsigned_simd_friendly_equivalent_scalar_t<T>;
116
+ if constexpr (!std::is_pointer_v<T>) {
117
+ return static_cast<res_t>(x);
118
+ } else {
119
+ return reinterpret_cast<res_t>(x);
120
+ }
121
+ }
122
+ };
123
+ inline constexpr AsSimdFriendlyUintFn asSimdFriendlyUint;
124
+
125
+ } // namespace folly::simd::detail
@@ -0,0 +1,126 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #pragma once
18
+
19
+ #include <folly/Portability.h>
20
+ #include <folly/Traits.h>
21
+
22
+ #include <array>
23
+ #include <type_traits>
24
+
25
+ namespace folly::simd::detail {
26
+
27
+ /**
28
+ * UnrollUtils
29
+ *
30
+ * Unfortunately compilers often don't unroll the loops with small
31
+ * fixed number of iterations and/or not unroll them properly.
32
+ *
33
+ * This is a collection of helpers that use templates to do some
34
+ * common unrolled loops.
35
+ */
36
+ struct UnrollUtils {
37
+ public:
38
+ /**
39
+ * arrayMap(x, op)
40
+ *
41
+ * Typical "map" from functional languages: apply op for each element,
42
+ * return an array of results.
43
+ */
44
+ template <typename T, std::size_t N, typename Op>
45
+ FOLLY_NODISCARD FOLLY_ALWAYS_INLINE static constexpr auto arrayMap(
46
+ const std::array<T, N>& x, Op op) {
47
+ return arrayMapImpl(x, op, std::make_index_sequence<N>());
48
+ }
49
+
50
+ /**
51
+ * arrayReduce(x, op)
52
+ *
53
+ * std::reduce(x.begin(), x.end(), op) but unrolled and orders operations
54
+ * to minimize dependencies.
55
+ *
56
+ * (a + b) + (c + d)
57
+ */
58
+ template <typename T, std::size_t N, typename Op>
59
+ FOLLY_NODISCARD FOLLY_ALWAYS_INLINE static constexpr T arrayReduce(
60
+ const std::array<T, N>& x, Op op) {
61
+ return arrayReduceImpl<0, N>(x, op);
62
+ }
63
+
64
+ /**
65
+ * unrollUntil<N>(op)
66
+ *
67
+ * Do operation N times or until it returns true to break.
68
+ * Op accepts integral_constant<i> so it can keep track of a step begin
69
+ * executed.
70
+ *
71
+ * Returns wether true if it was interrupted (you can know if the op breaked)
72
+ */
73
+ template <std::size_t N, typename Op>
74
+ FOLLY_ALWAYS_INLINE static constexpr bool unrollUntil(Op op) {
75
+ return unrollUntilImpl(op, std::make_index_sequence<N>{});
76
+ }
77
+
78
+ private:
79
+ template <typename T, std::size_t N, typename Op, std::size_t... i>
80
+ FOLLY_ALWAYS_INLINE static constexpr auto arrayMapImpl(
81
+ const std::array<T, N>& x, Op op, std::index_sequence<i...>) {
82
+ using U = decltype(op(std::declval<const T&>()));
83
+
84
+ FOLLY_PUSH_WARNING
85
+ // This is a very common gcc issue,
86
+ // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97222 apparently discarding
87
+ // it here is fine and done through out.
88
+ FOLLY_GCC_DISABLE_WARNING("-Wignored-attributes")
89
+ std::array<U, N> res{{op(x[i])...}};
90
+ FOLLY_POP_WARNING
91
+ return res;
92
+ }
93
+
94
+ template <
95
+ std::size_t f,
96
+ std::size_t l,
97
+ typename T,
98
+ std::size_t N,
99
+ typename Op>
100
+ FOLLY_ALWAYS_INLINE static constexpr std::enable_if_t<l - f == 1, T>
101
+ arrayReduceImpl(std::array<T, N> const& x, Op) {
102
+ return x[f];
103
+ }
104
+
105
+ template <
106
+ std::size_t f,
107
+ std::size_t l,
108
+ typename T,
109
+ std::size_t N,
110
+ typename Op>
111
+ FOLLY_ALWAYS_INLINE static constexpr std::enable_if_t<l - f != 1, T>
112
+ arrayReduceImpl(std::array<T, N> const& x, Op op) {
113
+ constexpr std::size_t n = l - f;
114
+ T leftSum = arrayReduceImpl<f, f + n / 2>(x, op);
115
+ T rightSum = arrayReduceImpl<f + n / 2, l>(x, op);
116
+ return op(leftSum, rightSum);
117
+ }
118
+
119
+ template <typename Op, std::size_t... i>
120
+ FOLLY_ALWAYS_INLINE static constexpr bool unrollUntilImpl(
121
+ Op op, std::index_sequence<i...>) {
122
+ return (... || op(index_constant<i>{}));
123
+ }
124
+ };
125
+
126
+ } // namespace folly::simd::detail