react-native-windows 0.81.34 → 0.81.37

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 (928) hide show
  1. package/Directory.Build.props +1 -16
  2. package/Folly/ThreadNameStub.cpp +4 -6
  3. package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +1 -1
  4. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +27 -4
  5. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +8 -4
  6. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -3
  7. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +48 -2
  8. package/Microsoft.ReactNative/Fabric/WindowsImageManager.cpp +40 -13
  9. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
  10. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
  11. package/Microsoft.ReactNative/TurboModulesProvider.cpp +30 -13
  12. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  13. package/PropertySheets/React.Cpp.props +3 -3
  14. package/ReactCommon/ReactCommon.vcxproj +0 -10
  15. package/ReactCommon/packages.lock.win32.json +0 -10
  16. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
  17. package/Scripts/creaternwlib.cmd +2 -2
  18. package/Shared/Shared.vcxitems +2 -0
  19. package/{Folly → external}/.clang-format +0 -1
  20. package/external/External.vcxitems +10 -0
  21. package/external/fast-float/.syncignore +10 -0
  22. package/external/fast-float/LICENSE-APACHE +190 -0
  23. package/external/fast-float/LICENSE-BOOST +23 -0
  24. package/external/fast-float/LICENSE-MIT +27 -0
  25. package/external/fast-float/README.md +545 -0
  26. package/external/fast-float/cgmanifest.json +15 -0
  27. package/external/fast-float/fast-float.vcxitems +14 -0
  28. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  29. package/external/fast-float/include/fast_float/bigint.h +638 -0
  30. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  31. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  32. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  33. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  34. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  35. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  36. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  37. package/external/fast-float/sync-config.json +8 -0
  38. package/external/fmt/.syncignore +10 -0
  39. package/external/fmt/CONTRIBUTING.md +20 -0
  40. package/external/fmt/LICENSE +27 -0
  41. package/external/fmt/README.md +484 -0
  42. package/{fmt → external/fmt}/cgmanifest.json +1 -1
  43. package/external/fmt/doc/ChangeLog-old.md +3290 -0
  44. package/external/fmt/doc/api.md +650 -0
  45. package/external/fmt/doc/fmt.css +61 -0
  46. package/external/fmt/doc/fmt.js +4 -0
  47. package/external/fmt/doc/get-started.md +222 -0
  48. package/external/fmt/doc/index.md +151 -0
  49. package/external/fmt/doc/perf.svg +1 -0
  50. package/external/fmt/doc/python-license.txt +290 -0
  51. package/external/fmt/doc/syntax.md +887 -0
  52. package/external/fmt/fmt.vcxitems +28 -0
  53. package/external/fmt/include/fmt/args.h +228 -0
  54. package/{fmt/TEMP_UntilFmtUpdate/core.h → external/fmt/include/fmt/base.h} +1188 -1036
  55. package/external/fmt/include/fmt/chrono.h +2432 -0
  56. package/external/fmt/include/fmt/color.h +612 -0
  57. package/external/fmt/include/fmt/compile.h +529 -0
  58. package/external/fmt/include/fmt/core.h +5 -0
  59. package/external/fmt/include/fmt/format-inl.h +1928 -0
  60. package/external/fmt/include/fmt/format.h +4427 -0
  61. package/external/fmt/include/fmt/os.h +439 -0
  62. package/external/fmt/include/fmt/ostream.h +211 -0
  63. package/external/fmt/include/fmt/printf.h +656 -0
  64. package/external/fmt/include/fmt/ranges.h +882 -0
  65. package/external/fmt/include/fmt/std.h +699 -0
  66. package/external/fmt/include/fmt/xchar.h +322 -0
  67. package/external/fmt/src/fmt.cc +135 -0
  68. package/external/fmt/src/format.cc +43 -0
  69. package/external/fmt/src/os.cc +403 -0
  70. package/external/fmt/sync-config.json +8 -0
  71. package/external/folly/.syncignore +60 -0
  72. package/external/folly/LICENSE +200 -0
  73. package/external/folly/README.md +263 -0
  74. package/{fmt → external/folly/folly}/.clang-format +0 -1
  75. package/external/folly/folly/AtomicHashArray-inl.h +546 -0
  76. package/external/folly/folly/AtomicHashArray.h +431 -0
  77. package/external/folly/folly/AtomicHashMap-inl.h +653 -0
  78. package/external/folly/folly/AtomicHashMap.h +484 -0
  79. package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
  80. package/external/folly/folly/AtomicLinkedList.h +110 -0
  81. package/external/folly/folly/AtomicUnorderedMap.h +522 -0
  82. package/external/folly/folly/BUCK +1631 -0
  83. package/external/folly/folly/BUILD_MODE.bzl +72 -0
  84. package/external/folly/folly/Benchmark.cpp +986 -0
  85. package/external/folly/folly/Benchmark.h +680 -0
  86. package/external/folly/folly/BenchmarkUtil.h +47 -0
  87. package/external/folly/folly/Bits.h +17 -0
  88. package/external/folly/folly/CMakeLists.txt +110 -0
  89. package/external/folly/folly/CPortability.h +338 -0
  90. package/external/folly/folly/CancellationToken-inl.h +449 -0
  91. package/external/folly/folly/CancellationToken.cpp +250 -0
  92. package/external/folly/folly/CancellationToken.h +365 -0
  93. package/external/folly/folly/Chrono.h +132 -0
  94. package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
  95. package/external/folly/folly/ClockGettimeWrappers.h +29 -0
  96. package/external/folly/folly/ConcurrentBitSet.h +157 -0
  97. package/external/folly/folly/ConcurrentLazy.h +74 -0
  98. package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
  99. package/external/folly/folly/ConcurrentSkipList.h +824 -0
  100. package/external/folly/folly/ConstructorCallbackList.h +158 -0
  101. package/external/folly/folly/Conv.h +2026 -0
  102. package/external/folly/folly/CppAttributes.h +170 -0
  103. package/external/folly/folly/CpuId.h +297 -0
  104. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  105. package/external/folly/folly/Demangle.cpp +255 -0
  106. package/external/folly/folly/Demangle.h +73 -0
  107. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  108. package/external/folly/folly/DynamicConverter.h +17 -0
  109. package/external/folly/folly/Exception.h +150 -0
  110. package/external/folly/folly/ExceptionString.cpp +51 -0
  111. package/external/folly/folly/ExceptionString.h +33 -0
  112. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  113. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  114. package/external/folly/folly/ExceptionWrapper.h +377 -0
  115. package/external/folly/folly/Executor.cpp +111 -0
  116. package/external/folly/folly/Executor.h +351 -0
  117. package/external/folly/folly/Expected.h +1725 -0
  118. package/external/folly/folly/FBString.h +2888 -0
  119. package/external/folly/folly/FBVector.h +17 -0
  120. package/external/folly/folly/File.cpp +180 -0
  121. package/external/folly/folly/File.h +177 -0
  122. package/external/folly/folly/FileUtil.cpp +378 -0
  123. package/external/folly/folly/FileUtil.h +332 -0
  124. package/external/folly/folly/Fingerprint.cpp +135 -0
  125. package/external/folly/folly/Fingerprint.h +289 -0
  126. package/external/folly/folly/FixedString.h +2965 -0
  127. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  128. package/external/folly/folly/FollyMemcpy.h +23 -0
  129. package/external/folly/folly/FollyMemset.cpp +29 -0
  130. package/external/folly/folly/FollyMemset.h +25 -0
  131. package/external/folly/folly/Format-inl.h +1152 -0
  132. package/external/folly/folly/Format.cpp +429 -0
  133. package/external/folly/folly/Format.h +463 -0
  134. package/external/folly/folly/FormatArg.h +285 -0
  135. package/external/folly/folly/FormatTraits.h +65 -0
  136. package/external/folly/folly/Function.h +1159 -0
  137. package/external/folly/folly/GLog.h +85 -0
  138. package/external/folly/folly/GroupVarint.cpp +153 -0
  139. package/external/folly/folly/GroupVarint.h +630 -0
  140. package/external/folly/folly/Hash.h +20 -0
  141. package/external/folly/folly/IPAddress.cpp +490 -0
  142. package/external/folly/folly/IPAddress.h +667 -0
  143. package/external/folly/folly/IPAddressException.h +82 -0
  144. package/external/folly/folly/IPAddressV4.cpp +305 -0
  145. package/external/folly/folly/IPAddressV4.h +495 -0
  146. package/external/folly/folly/IPAddressV6.cpp +541 -0
  147. package/external/folly/folly/IPAddressV6.h +627 -0
  148. package/external/folly/folly/Indestructible.h +164 -0
  149. package/external/folly/folly/IndexedMemPool.h +550 -0
  150. package/external/folly/folly/IntrusiveList.h +17 -0
  151. package/external/folly/folly/Lazy.h +142 -0
  152. package/external/folly/folly/Likely.h +76 -0
  153. package/external/folly/folly/MPMCPipeline.h +280 -0
  154. package/external/folly/folly/MPMCQueue.h +1556 -0
  155. package/external/folly/folly/MacAddress.cpp +188 -0
  156. package/external/folly/folly/MacAddress.h +260 -0
  157. package/external/folly/folly/MapUtil.h +17 -0
  158. package/external/folly/folly/Math.h +258 -0
  159. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  160. package/external/folly/folly/Memory.h +900 -0
  161. package/external/folly/folly/MicroLock.cpp +76 -0
  162. package/external/folly/folly/MicroLock.h +354 -0
  163. package/external/folly/folly/MicroSpinLock.h +17 -0
  164. package/external/folly/folly/MoveWrapper.h +76 -0
  165. package/external/folly/folly/ObserverContainer.h +1026 -0
  166. package/external/folly/folly/Optional.h +743 -0
  167. package/external/folly/folly/Overload.h +325 -0
  168. package/external/folly/folly/PackedSyncPtr.h +147 -0
  169. package/external/folly/folly/Padded.h +464 -0
  170. package/external/folly/folly/Poly-inl.h +230 -0
  171. package/external/folly/folly/Poly.h +1095 -0
  172. package/external/folly/folly/PolyException.h +43 -0
  173. package/external/folly/folly/Portability.h +644 -0
  174. package/external/folly/folly/Preprocessor.h +236 -0
  175. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  176. package/external/folly/folly/RWSpinLock.h +17 -0
  177. package/external/folly/folly/Random-inl.h +86 -0
  178. package/external/folly/folly/Random.cpp +184 -0
  179. package/external/folly/folly/Random.h +434 -0
  180. package/external/folly/folly/Range.h +1772 -0
  181. package/external/folly/folly/Replaceable.h +636 -0
  182. package/external/folly/folly/ScopeGuard.cpp +29 -0
  183. package/external/folly/folly/ScopeGuard.h +420 -0
  184. package/external/folly/folly/SharedMutex.cpp +81 -0
  185. package/external/folly/folly/SharedMutex.h +1751 -0
  186. package/external/folly/folly/Singleton-inl.h +332 -0
  187. package/external/folly/folly/Singleton.cpp +512 -0
  188. package/external/folly/folly/Singleton.h +891 -0
  189. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  190. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  191. package/external/folly/folly/SocketAddress.cpp +786 -0
  192. package/external/folly/folly/SocketAddress.h +768 -0
  193. package/external/folly/folly/SpinLock.h +55 -0
  194. package/external/folly/folly/String-inl.h +668 -0
  195. package/external/folly/folly/String.cpp +777 -0
  196. package/external/folly/folly/String.h +767 -0
  197. package/external/folly/folly/Subprocess.cpp +1142 -0
  198. package/external/folly/folly/Subprocess.h +1055 -0
  199. package/external/folly/folly/Synchronized.h +1833 -0
  200. package/external/folly/folly/SynchronizedPtr.h +106 -0
  201. package/external/folly/folly/ThreadCachedInt.h +175 -0
  202. package/external/folly/folly/ThreadLocal.h +478 -0
  203. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  204. package/external/folly/folly/TimeoutQueue.h +123 -0
  205. package/external/folly/folly/TokenBucket.h +673 -0
  206. package/external/folly/folly/Traits.h +1442 -0
  207. package/external/folly/folly/Try-inl.h +372 -0
  208. package/external/folly/folly/Try.cpp +23 -0
  209. package/external/folly/folly/Try.h +728 -0
  210. package/external/folly/folly/UTF8String.h +56 -0
  211. package/external/folly/folly/Unicode.cpp +201 -0
  212. package/external/folly/folly/Unicode.h +94 -0
  213. package/external/folly/folly/Unit.h +65 -0
  214. package/external/folly/folly/Uri-inl.h +101 -0
  215. package/external/folly/folly/Uri.cpp +190 -0
  216. package/external/folly/folly/Uri.h +142 -0
  217. package/external/folly/folly/Utility.h +932 -0
  218. package/external/folly/folly/VERSION +1 -0
  219. package/external/folly/folly/Varint.h +230 -0
  220. package/external/folly/folly/VirtualExecutor.h +17 -0
  221. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  222. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  223. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  224. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  225. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  226. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  227. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  228. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  229. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  230. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  231. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  232. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  233. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  234. package/external/folly/folly/base64.h +264 -0
  235. package/external/folly/folly/chrono/BUCK +29 -0
  236. package/external/folly/folly/chrono/Clock.h +65 -0
  237. package/external/folly/folly/chrono/Conv.h +712 -0
  238. package/external/folly/folly/chrono/test/BUCK +26 -0
  239. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  240. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  241. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  242. package/external/folly/folly/concurrency/BUCK +170 -0
  243. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  244. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  245. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  246. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  247. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  248. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  249. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  250. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  251. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  252. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  253. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  254. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  255. package/external/folly/folly/concurrency/container/BUCK +77 -0
  256. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  257. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  258. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  259. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  260. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  261. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  262. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  263. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  264. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  265. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  266. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  267. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  268. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  269. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  270. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  271. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  272. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  273. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  274. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  275. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  276. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  277. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  278. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  279. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  280. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  281. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  282. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  283. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  284. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  285. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  286. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  287. package/external/folly/folly/concurrency/test/BUCK +229 -0
  288. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  289. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  290. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  291. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  292. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  293. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  294. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  295. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  296. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  297. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  298. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  299. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  300. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  301. package/external/folly/folly/container/Access.h +57 -0
  302. package/external/folly/folly/container/Array.h +87 -0
  303. package/external/folly/folly/container/BUCK +353 -0
  304. package/external/folly/folly/container/BitIterator.h +203 -0
  305. package/external/folly/folly/container/Enumerate.h +162 -0
  306. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  307. package/external/folly/folly/container/F14.md +300 -0
  308. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  309. package/external/folly/folly/container/F14Map.h +2108 -0
  310. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  311. package/external/folly/folly/container/F14Set.h +1603 -0
  312. package/external/folly/folly/container/FBVector.h +1711 -0
  313. package/external/folly/folly/container/Foreach-inl.h +316 -0
  314. package/external/folly/folly/container/Foreach.h +209 -0
  315. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  316. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  317. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  318. package/external/folly/folly/container/IntrusiveList.h +131 -0
  319. package/external/folly/folly/container/Iterator.h +843 -0
  320. package/external/folly/folly/container/MapUtil.h +376 -0
  321. package/external/folly/folly/container/Merge.h +90 -0
  322. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  323. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  324. package/external/folly/folly/container/Reserve.h +109 -0
  325. package/external/folly/folly/container/SparseByteSet.h +123 -0
  326. package/external/folly/folly/container/View.h +81 -0
  327. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  328. package/external/folly/folly/container/detail/BUCK +115 -0
  329. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  330. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  331. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  332. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  333. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  334. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  335. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  336. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  337. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  338. package/external/folly/folly/container/detail/Util.h +303 -0
  339. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  340. package/external/folly/folly/container/detail/test/BUCK +14 -0
  341. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  342. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  343. package/external/folly/folly/container/range_traits.h +81 -0
  344. package/external/folly/folly/container/small_vector.h +1476 -0
  345. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  346. package/external/folly/folly/container/span.h +408 -0
  347. package/external/folly/folly/container/tape.h +608 -0
  348. package/external/folly/folly/container/test/.clang-tidy +12 -0
  349. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  350. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  351. package/external/folly/folly/container/test/BUCK +568 -0
  352. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  353. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  354. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  355. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  356. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  357. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  358. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  359. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  360. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  361. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  362. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  363. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  364. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  365. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  366. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  367. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  368. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  369. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  370. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  371. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  372. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  373. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  374. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  375. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  376. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  377. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  378. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  379. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  380. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  381. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  382. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  383. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  384. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  385. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  386. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  387. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  388. package/external/folly/folly/container/test/span_test.cpp +520 -0
  389. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  390. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  391. package/external/folly/folly/defs.bzl +238 -0
  392. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  393. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  394. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  395. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  396. package/external/folly/folly/detail/BUCK +406 -0
  397. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  398. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  399. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  400. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  401. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  402. package/external/folly/folly/detail/Futex-inl.h +123 -0
  403. package/external/folly/folly/detail/Futex.cpp +273 -0
  404. package/external/folly/folly/detail/Futex.h +109 -0
  405. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  406. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  407. package/external/folly/folly/detail/IPAddress.h +57 -0
  408. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  409. package/external/folly/folly/detail/Iterators.h +156 -0
  410. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  411. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  412. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  413. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  414. package/external/folly/folly/detail/PerfScoped.h +70 -0
  415. package/external/folly/folly/detail/PolyDetail.h +921 -0
  416. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  417. package/external/folly/folly/detail/RangeCommon.h +93 -0
  418. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  419. package/external/folly/folly/detail/RangeSse42.h +30 -0
  420. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  421. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  422. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  423. package/external/folly/folly/detail/Singleton.h +34 -0
  424. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  425. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  426. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  427. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  428. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  429. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  430. package/external/folly/folly/detail/Sse.cpp +35 -0
  431. package/external/folly/folly/detail/Sse.h +45 -0
  432. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  433. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  434. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  435. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  436. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  437. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  438. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  439. package/external/folly/folly/detail/TypeList.h +551 -0
  440. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  441. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  442. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  443. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  444. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  445. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  446. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  447. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  448. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  449. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  450. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  451. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  452. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  453. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  454. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  455. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  456. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  457. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  458. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  459. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  460. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  461. package/external/folly/folly/detail/test/BUCK +118 -0
  462. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  463. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  464. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  465. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  466. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  467. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  468. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  469. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  470. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  471. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  472. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  473. package/external/folly/folly/docs/AtomicHashMap.md +134 -0
  474. package/external/folly/folly/docs/Benchmark.md +310 -0
  475. package/external/folly/folly/docs/Conv.md +291 -0
  476. package/external/folly/folly/docs/Dynamic.md +220 -0
  477. package/external/folly/folly/docs/DynamicConverter.md +71 -0
  478. package/external/folly/folly/docs/Executors.md +63 -0
  479. package/external/folly/folly/docs/FBString.md +46 -0
  480. package/external/folly/folly/docs/FBVector.md +200 -0
  481. package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
  482. package/external/folly/folly/docs/Format.md +177 -0
  483. package/external/folly/folly/docs/Function.md +92 -0
  484. package/external/folly/folly/docs/Futures.md +263 -0
  485. package/external/folly/folly/docs/GroupVarint.md +46 -0
  486. package/external/folly/folly/docs/Histogram.md +104 -0
  487. package/external/folly/folly/docs/MapUtils.md +80 -0
  488. package/external/folly/folly/docs/Overview.md +263 -0
  489. package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
  490. package/external/folly/folly/docs/Poly.md +500 -0
  491. package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
  492. package/external/folly/folly/docs/Rcu.md +218 -0
  493. package/external/folly/folly/docs/SmallLocks.md +24 -0
  494. package/external/folly/folly/docs/Synchronized.md +793 -0
  495. package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
  496. package/external/folly/folly/docs/ThreadLocal.md +105 -0
  497. package/external/folly/folly/docs/Traits.md +161 -0
  498. package/external/folly/folly/docs/small_vector.md +64 -0
  499. package/external/folly/folly/docs/style.css +23 -0
  500. package/external/folly/folly/dynamic-inl.h +17 -0
  501. package/external/folly/folly/dynamic.h +17 -0
  502. package/external/folly/folly/folly_extended_library.bzl +28 -0
  503. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  504. package/external/folly/folly/functional/BUCK +57 -0
  505. package/external/folly/folly/functional/Invoke.h +880 -0
  506. package/external/folly/folly/functional/Partial.h +130 -0
  507. package/external/folly/folly/functional/protocol.h +203 -0
  508. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  509. package/external/folly/folly/functional/test/BUCK +57 -0
  510. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  511. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  512. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  513. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  514. package/external/folly/folly/functional/traits.h +675 -0
  515. package/external/folly/folly/hash/BUCK +86 -0
  516. package/external/folly/folly/hash/Checksum.cpp +275 -0
  517. package/external/folly/folly/hash/Checksum.h +94 -0
  518. package/external/folly/folly/hash/FarmHash.h +46 -0
  519. package/external/folly/folly/hash/Hash.h +1045 -0
  520. package/external/folly/folly/hash/MurmurHash.h +86 -0
  521. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  522. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  523. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  524. package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/hash/SpookyHashV2.h +6 -1
  525. package/external/folly/folly/hash/detail/BUCK +26 -0
  526. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  527. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  528. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  529. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  530. package/external/folly/folly/hash/test/BUCK +132 -0
  531. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  532. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  533. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  534. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  535. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  536. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  537. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  538. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  539. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  540. package/external/folly/folly/hash/traits.h +115 -0
  541. package/external/folly/folly/json/BUCK +155 -0
  542. package/external/folly/folly/json/DynamicConverter.h +464 -0
  543. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  544. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  545. package/external/folly/folly/json/DynamicParser.h +394 -0
  546. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  547. package/external/folly/folly/json/JSONSchema.h +73 -0
  548. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  549. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  550. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  551. package/external/folly/folly/json/bser/BUCK +24 -0
  552. package/external/folly/folly/json/bser/Bser.h +107 -0
  553. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  554. package/external/folly/folly/json/bser/Load.cpp +246 -0
  555. package/external/folly/folly/json/bser/test/BUCK +14 -0
  556. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  557. package/external/folly/folly/json/dynamic.cpp +552 -0
  558. package/external/folly/folly/json/dynamic.h +1346 -0
  559. package/external/folly/folly/json/json.h +238 -0
  560. package/external/folly/folly/json/json_patch.cpp +325 -0
  561. package/external/folly/folly/json/json_patch.h +126 -0
  562. package/external/folly/folly/json/json_pointer.cpp +114 -0
  563. package/external/folly/folly/json/json_pointer.h +87 -0
  564. package/external/folly/folly/json/test/BUCK +147 -0
  565. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  566. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  567. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  568. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  569. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  570. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  571. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  572. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  573. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  574. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  575. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  576. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  577. package/external/folly/folly/json/tool/BUCK +13 -0
  578. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  579. package/external/folly/folly/json.h +17 -0
  580. package/external/folly/folly/json_patch.h +17 -0
  581. package/external/folly/folly/json_pointer.h +17 -0
  582. package/external/folly/folly/lang/Access.h +29 -0
  583. package/external/folly/folly/lang/Align.h +240 -0
  584. package/external/folly/folly/lang/Aligned.h +92 -0
  585. package/external/folly/folly/lang/Assume.h +82 -0
  586. package/external/folly/folly/lang/BUCK +287 -0
  587. package/external/folly/folly/lang/Badge.h +108 -0
  588. package/external/folly/folly/lang/Bits.h +570 -0
  589. package/external/folly/folly/lang/BitsClass.h +312 -0
  590. package/external/folly/folly/lang/Builtin.h +74 -0
  591. package/external/folly/folly/lang/CArray.h +34 -0
  592. package/external/folly/folly/lang/CString.cpp +86 -0
  593. package/external/folly/folly/lang/CString.h +55 -0
  594. package/external/folly/folly/lang/Cast.h +51 -0
  595. package/external/folly/folly/lang/CheckedMath.h +253 -0
  596. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  597. package/external/folly/folly/lang/Exception.cpp +822 -0
  598. package/external/folly/folly/lang/Exception.h +716 -0
  599. package/external/folly/folly/lang/Extern.h +55 -0
  600. package/external/folly/folly/lang/Hint-inl.h +144 -0
  601. package/external/folly/folly/lang/Hint.h +238 -0
  602. package/external/folly/folly/lang/Keep.h +98 -0
  603. package/external/folly/folly/lang/New.h +124 -0
  604. package/external/folly/folly/lang/Ordering.h +140 -0
  605. package/external/folly/folly/lang/Pretty.h +159 -0
  606. package/external/folly/folly/lang/PropagateConst.h +413 -0
  607. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  608. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  609. package/external/folly/folly/lang/StaticConst.h +33 -0
  610. package/external/folly/folly/lang/Thunk.h +100 -0
  611. package/external/folly/folly/lang/TypeInfo.h +58 -0
  612. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  613. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  614. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  615. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  616. package/external/folly/folly/lang/test/BUCK +258 -0
  617. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  618. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  619. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  620. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  621. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  622. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  623. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  624. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  625. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  626. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  627. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  628. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  629. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  630. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  631. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  632. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  633. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  634. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  635. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  636. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  637. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  638. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  639. package/external/folly/folly/memcpy.S +292 -0
  640. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  641. package/external/folly/folly/memory/Arena-inl.h +83 -0
  642. package/external/folly/folly/memory/Arena.h +325 -0
  643. package/external/folly/folly/memory/BUCK +191 -0
  644. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  645. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  646. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  647. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  648. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  649. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  650. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  651. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  652. package/external/folly/folly/memory/Malloc.h +551 -0
  653. package/external/folly/folly/memory/MemoryResource.h +57 -0
  654. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  655. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  656. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  657. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  658. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  659. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  660. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  661. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  662. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  663. package/external/folly/folly/memory/detail/BUCK +10 -0
  664. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  665. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  666. package/external/folly/folly/memory/not_null-inl.h +522 -0
  667. package/external/folly/folly/memory/not_null.h +449 -0
  668. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  669. package/external/folly/folly/memory/test/BUCK +146 -0
  670. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  671. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  672. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  673. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  674. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  675. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  676. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  677. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  678. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  679. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  680. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  681. package/external/folly/folly/memset.S +245 -0
  682. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  683. package/external/folly/folly/portability/Asm.h +50 -0
  684. package/external/folly/folly/portability/Atomic.h +31 -0
  685. package/external/folly/folly/portability/BUCK +456 -0
  686. package/external/folly/folly/portability/Builtins.cpp +31 -0
  687. package/external/folly/folly/portability/Builtins.h +161 -0
  688. package/external/folly/folly/portability/Config.h +43 -0
  689. package/external/folly/folly/portability/Constexpr.h +145 -0
  690. package/external/folly/folly/portability/Dirent.cpp +140 -0
  691. package/external/folly/folly/portability/Dirent.h +41 -0
  692. package/external/folly/folly/portability/Event.h +44 -0
  693. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  694. package/external/folly/folly/portability/Fcntl.h +67 -0
  695. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  696. package/external/folly/folly/portability/Filesystem.h +114 -0
  697. package/external/folly/folly/portability/FmtCompile.h +40 -0
  698. package/external/folly/folly/portability/GFlags.h +139 -0
  699. package/external/folly/folly/portability/GMock.h +35 -0
  700. package/external/folly/folly/portability/GTest.h +35 -0
  701. package/external/folly/folly/portability/IOVec.h +34 -0
  702. package/external/folly/folly/portability/Libgen.cpp +59 -0
  703. package/external/folly/folly/portability/Libgen.h +29 -0
  704. package/external/folly/folly/portability/Libunwind.h +21 -0
  705. package/external/folly/folly/portability/Malloc.cpp +31 -0
  706. package/external/folly/folly/portability/Malloc.h +53 -0
  707. package/external/folly/folly/portability/Math.h +90 -0
  708. package/external/folly/folly/portability/Memory.h +26 -0
  709. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  710. package/external/folly/folly/portability/OpenSSL.h +102 -0
  711. package/external/folly/folly/portability/PThread.cpp +697 -0
  712. package/external/folly/folly/portability/PThread.h +148 -0
  713. package/external/folly/folly/portability/README.md +21 -0
  714. package/external/folly/folly/portability/Sched.cpp +41 -0
  715. package/external/folly/folly/portability/Sched.h +45 -0
  716. package/external/folly/folly/portability/Sockets.cpp +245 -0
  717. package/external/folly/folly/portability/Sockets.h +155 -0
  718. package/external/folly/folly/portability/SourceLocation.h +49 -0
  719. package/external/folly/folly/portability/Stdio.cpp +77 -0
  720. package/external/folly/folly/portability/Stdio.h +32 -0
  721. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  722. package/external/folly/folly/portability/Stdlib.h +64 -0
  723. package/external/folly/folly/portability/String.cpp +53 -0
  724. package/external/folly/folly/portability/String.h +39 -0
  725. package/external/folly/folly/portability/SysFile.cpp +46 -0
  726. package/external/folly/folly/portability/SysFile.h +27 -0
  727. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  728. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  729. package/external/folly/folly/portability/SysMman.cpp +242 -0
  730. package/external/folly/folly/portability/SysMman.h +68 -0
  731. package/external/folly/folly/portability/SysResource.cpp +108 -0
  732. package/external/folly/folly/portability/SysResource.h +71 -0
  733. package/external/folly/folly/portability/SysStat.cpp +66 -0
  734. package/external/folly/folly/portability/SysStat.h +52 -0
  735. package/external/folly/folly/portability/SysSyscall.h +73 -0
  736. package/external/folly/folly/portability/SysTime.cpp +62 -0
  737. package/external/folly/folly/portability/SysTime.h +50 -0
  738. package/external/folly/folly/portability/SysTypes.h +44 -0
  739. package/external/folly/folly/portability/SysUio.cpp +179 -0
  740. package/external/folly/folly/portability/SysUio.h +51 -0
  741. package/external/folly/folly/portability/Syslog.h +39 -0
  742. package/external/folly/folly/portability/Time.cpp +357 -0
  743. package/external/folly/folly/portability/Time.h +74 -0
  744. package/external/folly/folly/portability/Unistd.h +111 -0
  745. package/external/folly/folly/portability/Windows.h +108 -0
  746. package/external/folly/folly/portability/openat2.c +30 -0
  747. package/external/folly/folly/portability/openat2.h +39 -0
  748. package/external/folly/folly/portability/test/BUCK +59 -0
  749. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  750. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  751. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  752. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  753. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  754. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  755. package/external/folly/folly/small_vector.h +17 -0
  756. package/external/folly/folly/somerge_defs.bzl +399 -0
  757. package/external/folly/folly/sorted_vector_types.h +17 -0
  758. package/external/folly/folly/stop_watch.h +317 -0
  759. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  760. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  761. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  762. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  763. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  764. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  765. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  766. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  767. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  768. package/external/folly/folly/synchronization/BUCK +418 -0
  769. package/external/folly/folly/synchronization/Baton.h +419 -0
  770. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  771. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  772. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  773. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  774. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  775. package/external/folly/folly/synchronization/EventCount.h +200 -0
  776. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  777. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  778. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  779. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  780. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  781. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  782. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  783. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  784. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  785. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  786. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  787. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  788. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  789. package/external/folly/folly/synchronization/Latch.h +160 -0
  790. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  791. package/external/folly/folly/synchronization/Lock.h +887 -0
  792. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  793. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  794. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  795. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  796. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  797. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  798. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  799. package/external/folly/folly/synchronization/Rcu.h +553 -0
  800. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  801. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  802. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  803. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  804. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  805. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  806. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  807. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  808. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  809. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  810. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  811. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  812. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  813. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  814. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  815. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  816. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  817. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  818. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  819. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  820. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  821. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  822. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  823. package/external/folly/folly/synchronization/example/BUCK +27 -0
  824. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  825. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  826. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  827. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  828. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  829. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  830. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  831. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  832. package/external/folly/folly/synchronization/test/BUCK +495 -0
  833. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  834. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  835. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  836. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  837. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  838. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  839. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  840. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  841. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  842. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  843. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  844. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  845. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  846. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  847. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  848. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  849. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  850. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  851. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  852. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  853. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  854. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  855. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  856. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  857. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  858. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  859. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  860. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  861. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  862. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  863. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  864. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  865. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  866. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  867. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  868. package/external/folly/folly/system/AtFork.cpp +205 -0
  869. package/external/folly/folly/system/AtFork.h +116 -0
  870. package/external/folly/folly/system/AuxVector.h +198 -0
  871. package/external/folly/folly/system/BUCK +144 -0
  872. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  873. package/external/folly/folly/system/EnvUtil.h +113 -0
  874. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  875. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  876. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  877. package/external/folly/folly/system/MemoryMapping.h +287 -0
  878. package/external/folly/folly/system/Pid.cpp +87 -0
  879. package/external/folly/folly/system/Pid.h +34 -0
  880. package/external/folly/folly/system/Shell.cpp +33 -0
  881. package/external/folly/folly/system/Shell.h +93 -0
  882. package/external/folly/folly/system/ThreadId.cpp +89 -0
  883. package/external/folly/folly/system/ThreadId.h +62 -0
  884. package/external/folly/folly/system/ThreadName.cpp +330 -0
  885. package/external/folly/folly/system/ThreadName.h +72 -0
  886. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  887. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  888. package/external/folly/folly/system/test/BUCK +120 -0
  889. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  890. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  891. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  892. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  893. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  894. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  895. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  896. package/external/folly/folly.vcxitems +164 -0
  897. package/external/folly/static/logo.svg +1 -0
  898. package/external/folly/sync-config.json +8 -0
  899. package/package.json +3 -3
  900. package/template/cpp-app/proj/MyApp.sln +0 -33
  901. package/template/cpp-lib/proj/MyLib.sln +0 -33
  902. package/template/cs-app/proj/MyApp.sln +0 -33
  903. package/template/cs-lib/proj/MyLib.sln +0 -33
  904. package/templates/cpp-app/windows/MyApp.sln +0 -33
  905. package/templates/cpp-lib/example/metro.config.js +31 -6
  906. package/templates/cpp-lib/windows/MyLib.sln +0 -33
  907. package/Folly/Folly.vcxproj +0 -383
  908. package/Folly/Folly.vcxproj.filters +0 -558
  909. package/Folly/Folly.win32.vcxproj +0 -11
  910. package/Folly/packages.lock.win32.json +0 -20
  911. package/Scripts/Warm-RnwFeedCache.ps1 +0 -413
  912. package/fmt/fmt.vcxproj +0 -163
  913. package/fmt/fmt.vcxproj.filters +0 -59
  914. package/fmt/fmt.win32.vcxproj +0 -10
  915. package/fmt/pch.cpp +0 -4
  916. package/fmt/pch.h +0 -2
  917. /package/{Folly → external/folly}/Folly.natvis +0 -0
  918. /package/{Folly → external/folly}/cgmanifest.json +0 -0
  919. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
  920. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
  921. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
  922. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
  923. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
  924. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
  925. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
  926. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
  927. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
  928. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
@@ -0,0 +1,1442 @@
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 <cstddef>
20
+ #include <cstdint>
21
+ #include <functional>
22
+ #include <limits>
23
+ #include <memory>
24
+ #include <tuple>
25
+ #include <type_traits>
26
+
27
+ #include <folly/Portability.h>
28
+
29
+ namespace folly {
30
+
31
+ #if defined(__cpp_lib_type_identity) && __cpp_lib_type_identity >= 201806L
32
+
33
+ using std::type_identity;
34
+ using std::type_identity_t;
35
+
36
+ #else
37
+
38
+ /// type_identity_t
39
+ /// type_identity
40
+ ///
41
+ /// mimic: std::type_identity_t, std::type_identity, c++20
42
+ template <typename T>
43
+ struct type_identity {
44
+ using type = T;
45
+ };
46
+ template <typename T>
47
+ using type_identity_t = typename type_identity<T>::type;
48
+
49
+ #endif
50
+
51
+ /// tag_t
52
+ /// tag
53
+ ///
54
+ /// A generic type-list value type and value.
55
+ ///
56
+ /// A type-list is a class template parameterized by a pack of types.
57
+ template <typename...>
58
+ struct tag_t {};
59
+ template <typename... T>
60
+ inline constexpr tag_t<T...> tag{};
61
+
62
+ /// vtag_t
63
+ /// vtag
64
+ ///
65
+ /// A generic value-list value type and value.
66
+ ///
67
+ /// A value-list is a class template parameterized by a pack of values.
68
+ template <auto...>
69
+ struct vtag_t {};
70
+ template <auto... V>
71
+ inline constexpr vtag_t<V...> vtag{};
72
+
73
+ template <std::size_t I>
74
+ using index_constant = std::integral_constant<std::size_t, I>;
75
+
76
+ /// always_false
77
+ ///
78
+ /// A variable template that is always false but requires template arguments to
79
+ /// be provided (which are then ignored). This is useful in very specific cases
80
+ /// where we want type-dependent expressions to defer static_assert's.
81
+ ///
82
+ /// A common use-case is for exhaustive constexpr if branches:
83
+ ///
84
+ /// template <typename T>
85
+ /// void foo(T value) {
86
+ /// if constexpr (std::is_integral_v<T>) foo_integral(value);
87
+ /// else if constexpr (std::is_same_v<T, std::string>) foo_string(value);
88
+ /// else static_assert(always_false<T>, "Unsupported type");
89
+ /// }
90
+ ///
91
+ /// If we had used static_assert(false), then this would always fail to compile,
92
+ /// even if foo is never instantiated!
93
+ ///
94
+ /// Another use case is if a template that is expected to always be specialized
95
+ /// is erroneously instantiated with the base template.
96
+ ///
97
+ /// template <typename T>
98
+ /// struct Foo {
99
+ /// static_assert(always_false<T>, "Unsupported type");
100
+ /// };
101
+ /// template <>
102
+ /// struct Foo<int> {};
103
+ ///
104
+ /// Foo<int> a; // fine
105
+ /// Foo<std::string> b; // fails! And you get a nice (custom) error message
106
+ ///
107
+ /// This is similar to leaving the base template undefined but we get a nicer
108
+ /// compiler error message with static_assert.
109
+ template <typename...>
110
+ inline constexpr bool always_false = false;
111
+
112
+ namespace detail {
113
+
114
+ template <typename Void, typename T>
115
+ struct require_sizeof_ {
116
+ static_assert(always_false<T>, "application of sizeof fails substitution");
117
+ };
118
+ template <typename T>
119
+ struct require_sizeof_<decltype(void(sizeof(T))), T> {
120
+ template <typename V>
121
+ using apply_t = V;
122
+
123
+ static constexpr std::size_t size = sizeof(T);
124
+ };
125
+
126
+ } // namespace detail
127
+
128
+ /// require_sizeof
129
+ ///
130
+ /// Equivalent to sizeof, but with a static_assert enforcing that application of
131
+ /// sizeof would not fail substitution.
132
+ template <typename T>
133
+ constexpr std::size_t require_sizeof = detail::require_sizeof_<void, T>::size;
134
+
135
+ /// is_unbounded_array_v
136
+ /// is_unbounded_array
137
+ ///
138
+ /// A trait variable and type to check if a given type is an unbounded array.
139
+ ///
140
+ /// mimic: std::is_unbounded_array_d, std::is_unbounded_array (C++20)
141
+ template <typename T>
142
+ inline constexpr bool is_unbounded_array_v = false;
143
+ template <typename T>
144
+ inline constexpr bool is_unbounded_array_v<T[]> = true;
145
+ template <typename T>
146
+ struct is_unbounded_array : std::bool_constant<is_unbounded_array_v<T>> {};
147
+
148
+ /// is_bounded_array_v
149
+ /// is_bounded_array
150
+ ///
151
+ /// A trait variable and type to check if a given type is a bounded array.
152
+ ///
153
+ /// mimic: std::is_bounded_array_d, std::is_bounded_array (C++20)
154
+ template <typename T>
155
+ inline constexpr bool is_bounded_array_v = false;
156
+ template <typename T, std::size_t S>
157
+ inline constexpr bool is_bounded_array_v<T[S]> = true;
158
+ template <typename T>
159
+ struct is_bounded_array : std::bool_constant<is_bounded_array_v<T>> {};
160
+
161
+ /// is_instantiation_of_v
162
+ /// is_instantiation_of
163
+ /// instantiated_from
164
+ /// uncvref_instantiated_from
165
+ ///
166
+ /// A trait variable and type to check if a given type is an instantiation of a
167
+ /// class template. And corresponding concepts.
168
+ ///
169
+ /// Note that this only works with type template parameters. It does not work
170
+ /// with non-type template parameters, template template parameters, or alias
171
+ /// templates.
172
+ template <template <typename...> class, typename>
173
+ inline constexpr bool is_instantiation_of_v = false;
174
+ template <template <typename...> class C, typename... T>
175
+ inline constexpr bool is_instantiation_of_v<C, C<T...>> = true;
176
+ template <template <typename...> class C, typename... T>
177
+ struct is_instantiation_of
178
+ : std::bool_constant<is_instantiation_of_v<C, T...>> {};
179
+
180
+ #if defined(__cpp_concepts)
181
+
182
+ template <typename T, template <typename...> class Templ>
183
+ concept instantiated_from = is_instantiation_of_v<Templ, T>;
184
+
185
+ template <typename T, template <typename...> class Templ>
186
+ concept uncvref_instantiated_from =
187
+ is_instantiation_of_v<Templ, std::remove_cvref_t<T>>;
188
+
189
+ #endif
190
+
191
+ /// member_pointer_traits
192
+ ///
193
+ /// For a member-pointer, reveals its constituent member-type and object-type.
194
+ ///
195
+ /// Works for both member-object-pointer and member-function-pointer.
196
+ template <typename>
197
+ struct member_pointer_traits;
198
+ template <typename M, typename O>
199
+ struct member_pointer_traits<M O::*> {
200
+ using member_type = M;
201
+ using object_type = O;
202
+ };
203
+
204
+ namespace detail {
205
+
206
+ struct is_constexpr_default_constructible_ {
207
+ template <typename T>
208
+ static constexpr auto make(tag_t<T>) -> decltype(void(T()), 0) {
209
+ return (void(T()), 0);
210
+ }
211
+ // second param should just be: int = (void(T()), 0)
212
+ // but under clang 10, crash: https://bugs.llvm.org/show_bug.cgi?id=47620
213
+ // and, with assertions disabled, expectation failures showing compiler
214
+ // deviation from the language spec
215
+ // xcode renumbers clang versions so detection is tricky, but, if detection
216
+ // were desired, a combination of __apple_build_version__ and __clang_major__
217
+ // may be used to reduce frontend overhead under correct compilers: clang 12
218
+ // under xcode and clang 10 otherwise
219
+ template <typename T, int = make(tag<T>)>
220
+ static std::true_type sfinae(T*);
221
+ static std::false_type sfinae(void*);
222
+ template <typename T>
223
+ static constexpr bool apply =
224
+ !require_sizeof<T> || decltype(sfinae(static_cast<T*>(nullptr)))::value;
225
+ };
226
+
227
+ } // namespace detail
228
+
229
+ /// is_constexpr_default_constructible_v
230
+ /// is_constexpr_default_constructible
231
+ ///
232
+ /// A trait variable and type which determines whether the type parameter is
233
+ /// constexpr default-constructible, that is, default-constructible in a
234
+ /// constexpr context.
235
+ template <typename T>
236
+ inline constexpr bool is_constexpr_default_constructible_v =
237
+ detail::is_constexpr_default_constructible_::apply<T>;
238
+ template <typename T>
239
+ struct is_constexpr_default_constructible
240
+ : std::bool_constant<is_constexpr_default_constructible_v<T>> {};
241
+
242
+ /***
243
+ * _t
244
+ *
245
+ * Instead of:
246
+ *
247
+ * using decayed = typename std::decay<T>::type;
248
+ *
249
+ * With the C++14 standard trait aliases, we could use:
250
+ *
251
+ * using decayed = std::decay_t<T>;
252
+ *
253
+ * Without them, we could use:
254
+ *
255
+ * using decayed = _t<std::decay<T>>;
256
+ *
257
+ * Also useful for any other library with template types having dependent
258
+ * member types named `type`, like the standard trait types.
259
+ */
260
+ template <typename T>
261
+ using _t = typename T::type;
262
+
263
+ /**
264
+ * A type trait to remove all const volatile and reference qualifiers on a
265
+ * type T
266
+ */
267
+ template <typename T>
268
+ struct remove_cvref {
269
+ using type =
270
+ typename std::remove_cv<typename std::remove_reference<T>::type>::type;
271
+ };
272
+ template <typename T>
273
+ using remove_cvref_t = typename remove_cvref<T>::type;
274
+
275
+ namespace detail {
276
+ template <typename Src>
277
+ struct like_ {
278
+ template <typename Dst>
279
+ using apply = Dst;
280
+ };
281
+ template <typename Src>
282
+ struct like_<Src const> {
283
+ template <typename Dst>
284
+ using apply = Dst const;
285
+ };
286
+ template <typename Src>
287
+ struct like_<Src volatile> {
288
+ template <typename Dst>
289
+ using apply = Dst volatile;
290
+ };
291
+ template <typename Src>
292
+ struct like_<Src const volatile> {
293
+ template <typename Dst>
294
+ using apply = Dst const volatile;
295
+ };
296
+ template <typename Src>
297
+ struct like_<Src&> {
298
+ template <typename Dst>
299
+ using apply = typename like_<Src>::template apply<Dst>&;
300
+ };
301
+ template <typename Src>
302
+ struct like_<Src&&> {
303
+ template <typename Dst>
304
+ using apply = typename like_<Src>::template apply<Dst>&&;
305
+ };
306
+ } // namespace detail
307
+
308
+ // mimic: like_t, p0847r0
309
+ template <typename Src, typename Dst>
310
+ using like_t = typename detail::like_<Src>::template apply<remove_cvref_t<Dst>>;
311
+
312
+ // mimic: like, p0847r0
313
+ template <typename Src, typename Dst>
314
+ struct like {
315
+ using type = like_t<Src, Dst>;
316
+ };
317
+
318
+ #if defined(__cpp_concepts)
319
+
320
+ /**
321
+ * Concept to check that a type is same as a given type,
322
+ * when stripping qualifiers and refernces.
323
+ * Especially useful for perfect forwarding of a specific type.
324
+ *
325
+ * Example:
326
+ *
327
+ * void foo(folly::uncvref_same_as<std::vector<int>> auto&& vec);
328
+ *
329
+ */
330
+ template <typename Ref, typename To>
331
+ concept uncvref_same_as = std::is_same_v<std::remove_cvref_t<Ref>, To>;
332
+
333
+ #endif
334
+
335
+ /**
336
+ * type_t
337
+ *
338
+ * A type alias for the first template type argument. `type_t` is useful for
339
+ * controlling class-template and function-template partial specialization.
340
+ *
341
+ * Example:
342
+ *
343
+ * template <typename Value>
344
+ * class Container {
345
+ * public:
346
+ * template <typename... Args>
347
+ * Container(
348
+ * type_t<in_place_t, decltype(Value(std::declval<Args>()...))>,
349
+ * Args&&...);
350
+ * };
351
+ *
352
+ * void_t
353
+ *
354
+ * A type alias for `void`. `void_t` is useful for controlling class-template
355
+ * and function-template partial specialization.
356
+ *
357
+ * Example:
358
+ *
359
+ * // has_value_type<T>::value is true if T has a nested type `value_type`
360
+ * template <class T, class = void>
361
+ * struct has_value_type
362
+ * : std::false_type {};
363
+ *
364
+ * template <class T>
365
+ * struct has_value_type<T, folly::void_t<typename T::value_type>>
366
+ * : std::true_type {};
367
+ */
368
+
369
+ /**
370
+ * There is a bug in libstdc++, libc++, and MSVC's STL that causes it to
371
+ * ignore unused template parameter arguments in template aliases and does not
372
+ * cause substitution failures. This defect has been recorded here:
373
+ * http://open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1558.
374
+ *
375
+ * This causes the implementation of std::void_t to be buggy, as it is likely
376
+ * defined as something like the following:
377
+ *
378
+ * template <typename...>
379
+ * using void_t = void;
380
+ *
381
+ * This causes the compiler to ignore all the template arguments and does not
382
+ * help when one wants to cause substitution failures. Rather declarations
383
+ * which have void_t in orthogonal specializations are treated as the same.
384
+ * For example, assuming the possible `T` types are only allowed to have
385
+ * either the alias `one` or `two` and never both or none:
386
+ *
387
+ * template <typename T,
388
+ * typename std::void_t<std::decay_t<T>::one>* = nullptr>
389
+ * void foo(T&&) {}
390
+ * template <typename T,
391
+ * typename std::void_t<std::decay_t<T>::two>* = nullptr>
392
+ * void foo(T&&) {}
393
+ *
394
+ * The second foo() will be a redefinition because it conflicts with the first
395
+ * one; void_t does not cause substitution failures - the template types are
396
+ * just ignored.
397
+ */
398
+
399
+ namespace traits_detail {
400
+ template <class T, class...>
401
+ struct type_t_ {
402
+ using type = T;
403
+ };
404
+ } // namespace traits_detail
405
+
406
+ template <class T, class... Ts>
407
+ using type_t = typename traits_detail::type_t_<T, Ts...>::type;
408
+ template <class... Ts>
409
+ using void_t = type_t<void, Ts...>;
410
+
411
+ /// nonesuch
412
+ ///
413
+ /// A tag type which traits may use to indicate lack of a result type.
414
+ ///
415
+ /// Similar to void in that no values of this type may be constructed. Different
416
+ /// from void in that no functions may be defined with this return type and no
417
+ /// complete expressions may evaluate with this expression type.
418
+ ///
419
+ /// mimic: std::experimental::nonesuch, Library Fundamentals TS v2
420
+ struct nonesuch {
421
+ ~nonesuch() = delete;
422
+ nonesuch(nonesuch const&) = delete;
423
+ void operator=(nonesuch const&) = delete;
424
+ };
425
+
426
+ namespace detail {
427
+
428
+ template <typename Void, typename D, template <typename...> class, typename...>
429
+ struct detected_ {
430
+ using value_t = std::false_type;
431
+ using type = D;
432
+ };
433
+ template <typename D, template <typename...> class T, typename... A>
434
+ struct detected_<void_t<T<A...>>, D, T, A...> {
435
+ using value_t = std::true_type;
436
+ using type = T<A...>;
437
+ };
438
+
439
+ } // namespace detail
440
+
441
+ /// detected_or
442
+ ///
443
+ /// If T<A...> substitutes, has member type alias value_t as std::true_type
444
+ /// and has member type alias type as T<A...>. Otherwise, has member type
445
+ /// alias value_t as std::false_type and has member type alias type as D.
446
+ ///
447
+ /// mimic: std::experimental::detected_or, Library Fundamentals TS v2
448
+ ///
449
+ /// Note: not resilient against incomplete types; may violate ODR.
450
+ template <typename D, template <typename...> class T, typename... A>
451
+ using detected_or = detail::detected_<void, D, T, A...>;
452
+
453
+ /// detected_or_t
454
+ ///
455
+ /// A trait type alias which results in T<A...> if substitution would succeed
456
+ /// and in D otherwise.
457
+ ///
458
+ /// Equivalent to detected_or<D, T, A...>::type.
459
+ ///
460
+ /// mimic: std::experimental::detected_or_t, Library Fundamentals TS v2
461
+ ///
462
+ /// Note: not resilient against incomplete types; may violate ODR.
463
+ template <typename D, template <typename...> class T, typename... A>
464
+ using detected_or_t = typename detected_or<D, T, A...>::type;
465
+
466
+ /// detected_t
467
+ ///
468
+ /// A trait type alias which results in T<A...> if substitution would succeed
469
+ /// and in nonesuch otherwise.
470
+ ///
471
+ /// Equivalent to detected_or_t<nonesuch, T, A...>.
472
+ ///
473
+ /// mimic: std::experimental::detected_t, Library Fundamentals TS v2
474
+ ///
475
+ /// Note: not resilient against incomplete types; may violate ODR.
476
+ template <template <typename...> class T, typename... A>
477
+ using detected_t = detected_or_t<nonesuch, T, A...>;
478
+
479
+ // is_detected_v
480
+ // is_detected
481
+ //
482
+ // A trait variable and type to test whether some metafunction from types to
483
+ // types would succeed or fail in substitution over a given set of arguments.
484
+ //
485
+ // The trait variable is_detected_v<T, A...> is equivalent to
486
+ // detected_or<nonesuch, T, A...>::value_t::value.
487
+ // The trait type is_detected<T, A...> unambiguously inherits
488
+ // std::bool_constant<V> where V is is_detected_v<T, A...>.
489
+ //
490
+ // mimic: std::experimental::is_detected, std::experimental::is_detected_v,
491
+ // Library Fundamentals TS v2
492
+ //
493
+ // Note: not resilient against incomplete types; may violate ODR.
494
+ //
495
+ // Note: the trait type is_detected differs here by being deferred.
496
+ template <template <typename...> class T, typename... A>
497
+ inline constexpr bool is_detected_v =
498
+ detected_or<nonesuch, T, A...>::value_t::value;
499
+ template <template <typename...> class T, typename... A>
500
+ struct is_detected : detected_or<nonesuch, T, A...>::value_t {};
501
+
502
+ namespace detail {
503
+ constexpr std::size_t aligned_storage_default_align(std::size_t len) {
504
+ // Match std::aligned_storage default: the most stringent fundamental
505
+ // alignment for any type whose size is no greater than len.
506
+ // Compute bit_floor(min(len, alignof(max_align_t))): propagate the highest
507
+ // set bit to all lower positions, then isolate it. O(log(bits)) steps.
508
+ len = len < alignof(std::max_align_t) ? len : alignof(std::max_align_t);
509
+ len |= len >> 1;
510
+ len |= len >> 2;
511
+ len |= len >> 4;
512
+ len |= len >> 8;
513
+ if constexpr (sizeof(std::size_t) > 2) {
514
+ len |= len >> 16;
515
+ }
516
+ if constexpr (sizeof(std::size_t) > 4) {
517
+ // Split as >>16>>16: this non-template function still compiles the
518
+ // discarded branch, so a bare >>32 trips MSVC C4293 (/WX) on 32-bit.
519
+ len |= len >> 16 >> 16;
520
+ }
521
+ return len - (len >> 1);
522
+ }
523
+
524
+ template <std::size_t Len, std::size_t Align>
525
+ struct aligned_storage {
526
+ struct type {
527
+ alignas(Align) std::byte data[Len];
528
+ };
529
+ };
530
+ } // namespace detail
531
+
532
+ template <
533
+ std::size_t Len,
534
+ std::size_t Align = detail::aligned_storage_default_align(Len)>
535
+ using aligned_storage_t = typename detail::aligned_storage<Len, Align>::type;
536
+
537
+ template <typename T>
538
+ using aligned_storage_for_t = aligned_storage_t<sizeof(T), alignof(T)>;
539
+
540
+ // ----
541
+
542
+ namespace fallback {
543
+ template <typename From, typename To>
544
+ inline constexpr bool is_nothrow_convertible_v =
545
+ (std::is_void<From>::value && std::is_void<To>::value) ||
546
+ ( //
547
+ std::is_convertible<From, To>::value &&
548
+ std::is_nothrow_constructible<To, From>::value);
549
+ template <typename From, typename To>
550
+ struct is_nothrow_convertible
551
+ : std::bool_constant<is_nothrow_convertible_v<From, To>> {};
552
+ } // namespace fallback
553
+
554
+ // is_nothrow_convertible
555
+ // is_nothrow_convertible_v
556
+ //
557
+ // Import or backport:
558
+ // * std::is_nothrow_convertible
559
+ // * std::is_nothrow_convertible_v
560
+ //
561
+ // mimic: is_nothrow_convertible, C++20
562
+ #if defined(__cpp_lib_is_nothrow_convertible) && \
563
+ __cpp_lib_is_nothrow_convertible >= 201806L
564
+ using std::is_nothrow_convertible;
565
+ using std::is_nothrow_convertible_v;
566
+ #else
567
+ using fallback::is_nothrow_convertible;
568
+ using fallback::is_nothrow_convertible_v;
569
+ #endif
570
+
571
+ /**
572
+ * IsRelocatable<T>::value describes the ability of moving around
573
+ * memory a value of type T by using memcpy (as opposed to the
574
+ * conservative approach of calling the copy constructor and then
575
+ * destroying the old temporary. Essentially for a relocatable type,
576
+ * the following two sequences of code should be semantically
577
+ * equivalent:
578
+ *
579
+ * void move1(T * from, T * to) {
580
+ * new(to) T(from);
581
+ * (*from).~T();
582
+ * }
583
+ *
584
+ * void move2(T * from, T * to) {
585
+ * memcpy(to, from, sizeof(T));
586
+ * }
587
+ *
588
+ * Most C++ types are relocatable; the ones that aren't would include
589
+ * internal pointers or (very rarely) would need to update remote
590
+ * pointers to pointers tracking them. All C++ primitive types and
591
+ * type constructors are relocatable.
592
+ *
593
+ * This property can be used in a variety of optimizations. Currently
594
+ * fbvector uses this property intensively.
595
+ *
596
+ * The default conservatively assumes the type is not
597
+ * relocatable. Several specializations are defined for known
598
+ * types. You may want to add your own specializations. Do so in
599
+ * namespace folly and make sure you keep the specialization of
600
+ * IsRelocatable<SomeStruct> in the same header as SomeStruct.
601
+ *
602
+ * You may also declare a type to be relocatable by including
603
+ * `typedef std::true_type IsRelocatable;`
604
+ * in the class header.
605
+ *
606
+ * It may be unset in a base class by overriding the typedef to false_type.
607
+ */
608
+ /*
609
+ * IsZeroInitializable describes the property that value-initialization
610
+ * is the same as memset(dst, 0, sizeof(T)).
611
+ */
612
+
613
+ namespace traits_detail {
614
+
615
+ #define FOLLY_HAS_TRUE_XXX(name) \
616
+ template <typename T> \
617
+ using detect_##name = typename T::name; \
618
+ template <class T> \
619
+ struct name##_is_true : std::is_same<typename T::name, std::true_type> {}; \
620
+ template <class T> \
621
+ struct has_true_##name : std::conditional< \
622
+ is_detected_v<detect_##name, T>, \
623
+ name##_is_true<T>, \
624
+ std::false_type>::type {}
625
+
626
+ FOLLY_HAS_TRUE_XXX(IsRelocatable);
627
+ FOLLY_HAS_TRUE_XXX(IsZeroInitializable);
628
+
629
+ #undef FOLLY_HAS_TRUE_XXX
630
+
631
+ } // namespace traits_detail
632
+
633
+ struct Ignore {
634
+ Ignore() = default;
635
+ template <class T>
636
+ constexpr /* implicit */ Ignore(const T&) {}
637
+ template <class T>
638
+ const Ignore& operator=(T const&) const {
639
+ return *this;
640
+ }
641
+ };
642
+
643
+ template <class...>
644
+ using Ignored = Ignore;
645
+
646
+ namespace traits_detail_IsEqualityComparable {
647
+ Ignore operator==(Ignore, Ignore);
648
+
649
+ template <class T, class U = T>
650
+ struct IsEqualityComparable
651
+ : std::is_convertible<
652
+ decltype(std::declval<T>() == std::declval<U>()),
653
+ bool> {};
654
+ } // namespace traits_detail_IsEqualityComparable
655
+
656
+ /* using override */ using traits_detail_IsEqualityComparable::
657
+ IsEqualityComparable;
658
+
659
+ namespace traits_detail_IsLessThanComparable {
660
+ Ignore operator<(Ignore, Ignore);
661
+
662
+ template <class T, class U = T>
663
+ struct IsLessThanComparable
664
+ : std::is_convertible<
665
+ decltype(std::declval<T>() < std::declval<U>()),
666
+ bool> {};
667
+ } // namespace traits_detail_IsLessThanComparable
668
+
669
+ /* using override */ using traits_detail_IsLessThanComparable::
670
+ IsLessThanComparable;
671
+
672
+ template <class T>
673
+ struct IsRelocatable
674
+ : std::conditional<
675
+ !require_sizeof<T> ||
676
+ is_detected_v<traits_detail::detect_IsRelocatable, T>,
677
+ traits_detail::has_true_IsRelocatable<T>,
678
+ #if defined(__cpp_lib_is_trivially_relocatable) // P1144
679
+ std::is_trivially_relocatable<T>
680
+ #else
681
+ std::is_trivially_copyable<T>
682
+ #endif
683
+ >::type {
684
+ };
685
+
686
+ template <class T>
687
+ struct IsZeroInitializable
688
+ : std::conditional<
689
+ !require_sizeof<T> ||
690
+ is_detected_v<traits_detail::detect_IsZeroInitializable, T>,
691
+ traits_detail::has_true_IsZeroInitializable<T>,
692
+ std::bool_constant< //
693
+ !std::is_class<T>::value && //
694
+ !std::is_union<T>::value && //
695
+ !std::is_member_object_pointer<T>::value && // itanium
696
+ true>>::type {};
697
+
698
+ namespace detail {
699
+ template <bool>
700
+ struct conditional_;
701
+ template <>
702
+ struct conditional_<false> {
703
+ template <typename, typename T>
704
+ using apply = T;
705
+ };
706
+ template <>
707
+ struct conditional_<true> {
708
+ template <typename T, typename>
709
+ using apply = T;
710
+ };
711
+ } // namespace detail
712
+
713
+ /// conditional_t
714
+ ///
715
+ /// Like std::conditional_t but with only two total class template instances,
716
+ /// rather than as many class template instances as there are uses.
717
+ ///
718
+ /// As one effect, the result can be used in deducible contexts, allowing
719
+ /// deduction of conditional_t<V, T, F> to work when T or F is a template param.
720
+ template <bool V, typename T, typename F>
721
+ using conditional_t = typename detail::conditional_<V>::template apply<T, F>;
722
+
723
+ template <typename...>
724
+ struct Conjunction : std::true_type {};
725
+ template <typename T>
726
+ struct Conjunction<T> : T {};
727
+ template <typename T, typename... TList>
728
+ struct Conjunction<T, TList...>
729
+ : std::conditional<T::value, Conjunction<TList...>, T>::type {};
730
+
731
+ template <typename...>
732
+ struct Disjunction : std::false_type {};
733
+ template <typename T>
734
+ struct Disjunction<T> : T {};
735
+ template <typename T, typename... TList>
736
+ struct Disjunction<T, TList...>
737
+ : std::conditional<T::value, T, Disjunction<TList...>>::type {};
738
+
739
+ template <typename T>
740
+ struct Negation : std::bool_constant<!T::value> {};
741
+
742
+ template <bool... Bs>
743
+ struct Bools {
744
+ using valid_type = bool;
745
+ static constexpr std::size_t size() { return sizeof...(Bs); }
746
+ };
747
+
748
+ // Lighter-weight than Conjunction, but evaluates all sub-conditions eagerly.
749
+ template <class... Ts>
750
+ struct StrictConjunction
751
+ : std::is_same<Bools<Ts::value...>, Bools<(Ts::value || true)...>> {};
752
+
753
+ template <class... Ts>
754
+ struct StrictDisjunction
755
+ : Negation<
756
+ std::is_same<Bools<Ts::value...>, Bools<(Ts::value && false)...>>> {};
757
+
758
+ namespace detail {
759
+ template <typename T>
760
+ using is_transparent_ = typename T::is_transparent;
761
+ } // namespace detail
762
+
763
+ /// is_transparent_v
764
+ /// is_transparent
765
+ ///
766
+ /// A trait variable and type to test whether a less, equal-to, or hash type
767
+ /// follows the is-transparent protocol used by containers with optional
768
+ /// heterogeneous access.
769
+ template <typename T>
770
+ inline constexpr bool is_transparent_v =
771
+ is_detected_v<detail::is_transparent_, T>;
772
+ template <typename T>
773
+ struct is_transparent : std::bool_constant<is_transparent_v<T>> {};
774
+
775
+ namespace detail {
776
+
777
+ template <typename T, typename = void>
778
+ inline constexpr bool is_allocator_ = !require_sizeof<T>;
779
+ template <typename T>
780
+ inline constexpr bool is_allocator_<
781
+ T,
782
+ void_t<
783
+ typename T::value_type,
784
+ decltype(std::declval<T&>().allocate(std::size_t{})),
785
+ decltype(std::declval<T&>().deallocate(
786
+ static_cast<typename T::value_type*>(nullptr), std::size_t{}))>> =
787
+ true;
788
+
789
+ } // namespace detail
790
+
791
+ /// is_allocator_v
792
+ /// is_allocator
793
+ ///
794
+ /// A trait variable and type to test whether a type is an allocator according
795
+ /// to the minimum protocol required by std::allocator_traits.
796
+ template <typename T>
797
+ inline constexpr bool is_allocator_v = detail::is_allocator_<T>;
798
+ template <typename T>
799
+ struct is_allocator : std::bool_constant<is_allocator_v<T>> {};
800
+
801
+ } // namespace folly
802
+
803
+ /**
804
+ * Use this macro ONLY inside namespace folly. When using it with a
805
+ * regular type, use it like this:
806
+ *
807
+ * // Make sure you're at namespace ::folly scope
808
+ * template <> FOLLY_ASSUME_RELOCATABLE(MyType)
809
+ *
810
+ * When using it with a template type, use it like this:
811
+ *
812
+ * // Make sure you're at namespace ::folly scope
813
+ * template <class T1, class T2>
814
+ * FOLLY_ASSUME_RELOCATABLE(MyType<T1, T2>)
815
+ */
816
+ #define FOLLY_ASSUME_RELOCATABLE(...) \
817
+ struct IsRelocatable<__VA_ARGS__> : std::true_type {}
818
+
819
+ /**
820
+ * The FOLLY_ASSUME_FBVECTOR_COMPATIBLE* macros below encode the
821
+ * assumption that the type is relocatable per IsRelocatable
822
+ * above. Many types can be assumed to satisfy this condition, but
823
+ * it is the responsibility of the user to state that assumption.
824
+ * User-defined classes will not be optimized for use with
825
+ * fbvector (see FBVector.h) unless they state that assumption.
826
+ *
827
+ * Use FOLLY_ASSUME_FBVECTOR_COMPATIBLE with regular types like this:
828
+ *
829
+ * FOLLY_ASSUME_FBVECTOR_COMPATIBLE(MyType)
830
+ *
831
+ * The versions FOLLY_ASSUME_FBVECTOR_COMPATIBLE_1, _2, _3, and _4
832
+ * allow using the macro for describing templatized classes with 1, 2,
833
+ * 3, and 4 template parameters respectively. For template classes
834
+ * just use the macro with the appropriate number and pass the name of
835
+ * the template to it. Example:
836
+ *
837
+ * template <class T1, class T2> class MyType { ... };
838
+ * ...
839
+ * // Make sure you're at global scope
840
+ * FOLLY_ASSUME_FBVECTOR_COMPATIBLE_2(MyType)
841
+ */
842
+
843
+ // Use this macro ONLY at global level (no namespace)
844
+ #define FOLLY_ASSUME_FBVECTOR_COMPATIBLE(...) \
845
+ namespace folly { \
846
+ template <> \
847
+ FOLLY_ASSUME_RELOCATABLE(__VA_ARGS__); \
848
+ }
849
+ // Use this macro ONLY at global level (no namespace)
850
+ #define FOLLY_ASSUME_FBVECTOR_COMPATIBLE_1(...) \
851
+ namespace folly { \
852
+ template <class T1> \
853
+ FOLLY_ASSUME_RELOCATABLE(__VA_ARGS__<T1>); \
854
+ }
855
+ // Use this macro ONLY at global level (no namespace)
856
+ #define FOLLY_ASSUME_FBVECTOR_COMPATIBLE_2(...) \
857
+ namespace folly { \
858
+ template <class T1, class T2> \
859
+ FOLLY_ASSUME_RELOCATABLE(__VA_ARGS__<T1, T2>); \
860
+ }
861
+ // Use this macro ONLY at global level (no namespace)
862
+ #define FOLLY_ASSUME_FBVECTOR_COMPATIBLE_3(...) \
863
+ namespace folly { \
864
+ template <class T1, class T2, class T3> \
865
+ FOLLY_ASSUME_RELOCATABLE(__VA_ARGS__<T1, T2, T3>); \
866
+ }
867
+ // Use this macro ONLY at global level (no namespace)
868
+ #define FOLLY_ASSUME_FBVECTOR_COMPATIBLE_4(...) \
869
+ namespace folly { \
870
+ template <class T1, class T2, class T3, class T4> \
871
+ FOLLY_ASSUME_RELOCATABLE(__VA_ARGS__<T1, T2, T3, T4>); \
872
+ }
873
+
874
+ namespace folly {
875
+
876
+ // STL commonly-used types
877
+ template <class T, class U>
878
+ struct IsRelocatable<std::pair<T, U>>
879
+ : std::bool_constant<IsRelocatable<T>::value && IsRelocatable<U>::value> {};
880
+
881
+ // Is T one of T1, T2, ..., Tn?
882
+ template <typename T, typename... Ts>
883
+ using IsOneOf = StrictDisjunction<std::is_same<T, Ts>...>;
884
+
885
+ /*
886
+ * Complementary type traits for integral comparisons.
887
+ *
888
+ * For instance, `if(x < 0)` yields an error in clang for unsigned types
889
+ * when -Werror is used due to -Wtautological-compare
890
+ */
891
+
892
+ // same as `x < 0`
893
+ template <typename T>
894
+ constexpr bool is_negative(T x) {
895
+ return std::is_signed<T>::value && x < T(0);
896
+ }
897
+
898
+ // same as `x <= 0`
899
+ template <typename T>
900
+ constexpr bool is_non_positive(T x) {
901
+ return !x || folly::is_negative(x);
902
+ }
903
+
904
+ // same as `x > 0`
905
+ template <typename T>
906
+ constexpr bool is_positive(T x) {
907
+ return !is_non_positive(x);
908
+ }
909
+
910
+ // same as `x >= 0`
911
+ template <typename T>
912
+ constexpr bool is_non_negative(T x) {
913
+ return !x || is_positive(x);
914
+ }
915
+
916
+ namespace detail {
917
+
918
+ // folly::to integral specializations can end up generating code
919
+ // inside what are really static ifs (not executed because of the templated
920
+ // types) that violate -Wsign-compare and/or -Wbool-compare so suppress them
921
+ // in order to not prevent all calling code from using it.
922
+ FOLLY_PUSH_WARNING
923
+ FOLLY_GNU_DISABLE_WARNING("-Wsign-compare")
924
+ FOLLY_GCC_DISABLE_WARNING("-Wbool-compare")
925
+ FOLLY_MSVC_DISABLE_WARNING(4287) // unsigned/negative constant mismatch
926
+ FOLLY_MSVC_DISABLE_WARNING(4388) // sign-compare
927
+ FOLLY_MSVC_DISABLE_WARNING(4804) // bool-compare
928
+
929
+ template <typename RHS, RHS rhs, typename LHS>
930
+ bool less_than_impl(LHS const lhs) {
931
+ // clang-format off
932
+ return
933
+ // Ensure signed and unsigned values won't be compared directly.
934
+ (!std::is_signed<RHS>::value && is_negative(lhs)) ? true :
935
+ (!std::is_signed<LHS>::value && is_negative(rhs)) ? false :
936
+ rhs > std::numeric_limits<LHS>::max() ? true :
937
+ rhs <= std::numeric_limits<LHS>::lowest() ? false :
938
+ lhs < rhs;
939
+ // clang-format on
940
+ }
941
+
942
+ template <typename RHS, RHS rhs, typename LHS>
943
+ bool greater_than_impl(LHS const lhs) {
944
+ // clang-format off
945
+ return
946
+ // Ensure signed and unsigned values won't be compared directly.
947
+ (!std::is_signed<RHS>::value && is_negative(lhs)) ? false :
948
+ (!std::is_signed<LHS>::value && is_negative(rhs)) ? true :
949
+ rhs > std::numeric_limits<LHS>::max() ? false :
950
+ rhs < std::numeric_limits<LHS>::lowest() ? true :
951
+ lhs > rhs;
952
+ // clang-format on
953
+ }
954
+
955
+ FOLLY_POP_WARNING
956
+
957
+ } // namespace detail
958
+
959
+ template <typename RHS, RHS rhs, typename LHS>
960
+ bool less_than(LHS const lhs) {
961
+ return detail::
962
+ less_than_impl<RHS, rhs, typename std::remove_reference<LHS>::type>(lhs);
963
+ }
964
+
965
+ template <typename RHS, RHS rhs, typename LHS>
966
+ bool greater_than(LHS const lhs) {
967
+ return detail::
968
+ greater_than_impl<RHS, rhs, typename std::remove_reference<LHS>::type>(
969
+ lhs);
970
+ }
971
+ } // namespace folly
972
+
973
+ // Assume nothing when compiling with MSVC.
974
+ #ifndef _MSC_VER
975
+ FOLLY_ASSUME_FBVECTOR_COMPATIBLE_2(std::unique_ptr)
976
+ FOLLY_ASSUME_FBVECTOR_COMPATIBLE_1(std::shared_ptr)
977
+ #endif
978
+
979
+ namespace folly {
980
+
981
+ // Some compilers have signed __int128 and unsigned __int128 types, and some
982
+ // libraries with some compilers have traits for those types. It's a mess.
983
+ // Import things into folly and then fill in whatever is missing.
984
+ //
985
+ // The aliases:
986
+ // int128_t
987
+ // uint128_t
988
+ //
989
+ // The traits:
990
+ // is_arithmetic
991
+ // is_arithmetic_v
992
+ // is_integral
993
+ // is_integral_v
994
+ // is_signed
995
+ // is_signed_v
996
+ // is_unsigned
997
+ // is_unsigned_v
998
+ // make_signed
999
+ // make_signed_t
1000
+ // make_unsigned
1001
+ // make_unsigned_t
1002
+
1003
+ template <typename T>
1004
+ struct is_arithmetic : std::is_arithmetic<T> {};
1005
+ template <typename T>
1006
+ inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
1007
+
1008
+ template <typename T>
1009
+ struct is_integral : std::is_integral<T> {};
1010
+ template <typename T>
1011
+ inline constexpr bool is_integral_v = is_integral<T>::value;
1012
+
1013
+ template <typename T>
1014
+ struct is_signed : std::is_signed<T> {};
1015
+ template <typename T>
1016
+ inline constexpr bool is_signed_v = is_signed<T>::value;
1017
+
1018
+ template <typename T>
1019
+ struct is_unsigned : std::is_unsigned<T> {};
1020
+ template <typename T>
1021
+ inline constexpr bool is_unsigned_v = is_unsigned<T>::value;
1022
+
1023
+ template <typename T>
1024
+ struct make_signed : std::make_signed<T> {};
1025
+ template <typename T>
1026
+ using make_signed_t = typename make_signed<T>::type;
1027
+
1028
+ template <typename T>
1029
+ struct make_unsigned : std::make_unsigned<T> {};
1030
+ template <typename T>
1031
+ using make_unsigned_t = typename make_unsigned<T>::type;
1032
+
1033
+ #if FOLLY_HAVE_INT128_T
1034
+
1035
+ using int128_t = signed __int128;
1036
+ using uint128_t = unsigned __int128;
1037
+
1038
+ template <>
1039
+ struct is_arithmetic<int128_t> : std::true_type {};
1040
+ template <>
1041
+ struct is_arithmetic<uint128_t> : std::true_type {};
1042
+
1043
+ template <>
1044
+ struct is_integral<int128_t> : std::true_type {};
1045
+ template <>
1046
+ struct is_integral<uint128_t> : std::true_type {};
1047
+
1048
+ template <>
1049
+ struct is_signed<int128_t> : std::true_type {};
1050
+ template <>
1051
+ struct is_signed<uint128_t> : std::false_type {};
1052
+ template <>
1053
+ struct is_unsigned<int128_t> : std::false_type {};
1054
+ template <>
1055
+ struct is_unsigned<uint128_t> : std::true_type {};
1056
+
1057
+ template <>
1058
+ struct make_signed<int128_t> {
1059
+ using type = int128_t;
1060
+ };
1061
+ template <>
1062
+ struct make_signed<uint128_t> {
1063
+ using type = int128_t;
1064
+ };
1065
+
1066
+ template <>
1067
+ struct make_unsigned<int128_t> {
1068
+ using type = uint128_t;
1069
+ };
1070
+ template <>
1071
+ struct make_unsigned<uint128_t> {
1072
+ using type = uint128_t;
1073
+ };
1074
+ #endif // FOLLY_HAVE_INT128_T
1075
+
1076
+ namespace traits_detail {
1077
+ template <std::size_t>
1078
+ struct uint_bits_t_ {};
1079
+ template <>
1080
+ struct uint_bits_t_<8> : type_t_<std::uint8_t> {};
1081
+ template <>
1082
+ struct uint_bits_t_<16> : type_t_<std::uint16_t> {};
1083
+ template <>
1084
+ struct uint_bits_t_<32> : type_t_<std::uint32_t> {};
1085
+ template <>
1086
+ struct uint_bits_t_<64> : type_t_<std::uint64_t> {};
1087
+ #if FOLLY_HAVE_INT128_T
1088
+ template <>
1089
+ struct uint_bits_t_<128> : type_t_<uint128_t> {};
1090
+ #endif // FOLLY_HAVE_INT128_T
1091
+ } // namespace traits_detail
1092
+
1093
+ template <std::size_t bits>
1094
+ using uint_bits_t = _t<traits_detail::uint_bits_t_<bits>>;
1095
+
1096
+ template <std::size_t lg_bits>
1097
+ using uint_bits_lg_t = uint_bits_t<(1u << lg_bits)>;
1098
+
1099
+ template <std::size_t bits>
1100
+ using int_bits_t = make_signed_t<uint_bits_t<bits>>;
1101
+
1102
+ template <std::size_t lg_bits>
1103
+ using int_bits_lg_t = make_signed_t<uint_bits_lg_t<lg_bits>>;
1104
+
1105
+ namespace traits_detail {
1106
+
1107
+ template <std::size_t I, typename T>
1108
+ struct type_pack_element_indexed_type {
1109
+ using type = T;
1110
+ };
1111
+
1112
+ template <typename, typename...>
1113
+ struct type_pack_element_set;
1114
+ template <std::size_t... I, typename... T>
1115
+ struct type_pack_element_set<std::index_sequence<I...>, T...>
1116
+ : type_pack_element_indexed_type<I, T>... {};
1117
+ template <typename... T>
1118
+ using type_pack_element_set_t =
1119
+ type_pack_element_set<std::index_sequence_for<T...>, T...>;
1120
+
1121
+ template <std::size_t I>
1122
+ struct type_pack_element_test {
1123
+ template <typename T>
1124
+ static type_pack_element_indexed_type<I, T> impl(
1125
+ type_pack_element_indexed_type<I, T>*);
1126
+ };
1127
+
1128
+ template <std::size_t I, typename... Ts>
1129
+ using type_pack_element_fallback = _t<decltype(type_pack_element_test<I>::impl(
1130
+ static_cast<type_pack_element_set_t<Ts...>*>(nullptr)))>;
1131
+
1132
+ } // namespace traits_detail
1133
+
1134
+ /// type_pack_element_t
1135
+ ///
1136
+ /// In the type pack Ts..., the Ith element.
1137
+ ///
1138
+ /// Wraps the builtin __type_pack_element where the builtin is available; where
1139
+ /// not, implemented directly.
1140
+ ///
1141
+ /// Under gcc, the builtin is available but does not mangle. Therefore, this
1142
+ /// trait must not be used anywhere it might be subject to mangling, such as in
1143
+ /// a return-type expression.
1144
+
1145
+ #if FOLLY_HAS_BUILTIN(__type_pack_element)
1146
+
1147
+ template <std::size_t I, typename... Ts>
1148
+ using type_pack_element_t = __type_pack_element<I, Ts...>;
1149
+
1150
+ #else
1151
+
1152
+ template <std::size_t I, typename... Ts>
1153
+ using type_pack_element_t = traits_detail::type_pack_element_fallback<I, Ts...>;
1154
+
1155
+ #endif
1156
+
1157
+ /// type_pack_size_v
1158
+ ///
1159
+ /// The size of a type pack.
1160
+ ///
1161
+ /// A metafunction around sizeof...(Ts).
1162
+ template <typename... Ts>
1163
+ inline constexpr std::size_t type_pack_size_v = sizeof...(Ts);
1164
+
1165
+ /// type_pack_size_t
1166
+ ///
1167
+ /// The size of a type pack.
1168
+ ///
1169
+ /// A metafunction around index_constant<sizeof...(Ts)>.
1170
+ template <typename... Ts>
1171
+ using type_pack_size_t = index_constant<sizeof...(Ts)>;
1172
+
1173
+ namespace traits_detail {
1174
+
1175
+ template <std::size_t I, template <typename...> class List, typename... T>
1176
+ type_identity<type_pack_element_t<I, T...>> type_list_element_(
1177
+ List<T...> const*);
1178
+
1179
+ template <template <typename...> class List, typename... T>
1180
+ index_constant<sizeof...(T)> type_list_size_(List<T...> const*);
1181
+
1182
+ } // namespace traits_detail
1183
+
1184
+ /// type_list_element_t
1185
+ ///
1186
+ /// In the type list List<T...>, where List has kind template <typename...> and
1187
+ /// T... is a type-pack, equivalent to type_pack_element_t<I, T...>.
1188
+ template <std::size_t I, typename List>
1189
+ using type_list_element_t = _t<decltype(traits_detail::type_list_element_<I>(
1190
+ static_cast<List const*>(nullptr)))>;
1191
+
1192
+ /// type_list_size_v
1193
+ ///
1194
+ /// The size of a type list.
1195
+ ///
1196
+ /// For List<T...>, equivalent to type_pack_size_v<T...>.
1197
+ template <typename List>
1198
+ inline constexpr std::size_t type_list_size_v =
1199
+ decltype(traits_detail::type_list_size_(
1200
+ static_cast<List const*>(nullptr)))::value;
1201
+
1202
+ /// type_list_size_t
1203
+ ///
1204
+ /// The size of a type list.
1205
+ ///
1206
+ /// For List<T...>, equivalent to type_pack_size_t<T...>.
1207
+ template <typename List>
1208
+ using type_list_size_t =
1209
+ decltype(traits_detail::type_list_size_(static_cast<List const*>(nullptr)));
1210
+
1211
+ namespace detail {
1212
+
1213
+ // The arguments to this "error" type help the user debug bad invocations.
1214
+ // It is purposely undefined to cause a compile error.
1215
+ template <typename...>
1216
+ struct error_list_concat_params_should_be_non_cvref;
1217
+
1218
+ // The primary template is only invoked for invalid parameters.
1219
+ template <template <typename...> class Out, typename... T>
1220
+ inline constexpr auto type_list_concat_ =
1221
+ error_list_concat_params_should_be_non_cvref<T...>{};
1222
+
1223
+ template <template <typename...> class Out>
1224
+ inline constexpr type_identity<Out<>> type_list_concat_<Out>;
1225
+
1226
+ template <
1227
+ template <typename...>
1228
+ class Out,
1229
+ template <typename...>
1230
+ class In,
1231
+ typename... T>
1232
+ inline constexpr auto type_list_concat_<Out, In<T...>> =
1233
+ type_identity<Out<T...>>{};
1234
+
1235
+ template <
1236
+ template <typename...>
1237
+ class Out,
1238
+ // Allow input lists to come from heterogeneous templates.
1239
+ template <typename...>
1240
+ class InA,
1241
+ typename... A,
1242
+ template <typename...>
1243
+ class InB,
1244
+ typename... B,
1245
+ typename... Tail>
1246
+ inline constexpr auto type_list_concat_<Out, InA<A...>, InB<B...>, Tail...> =
1247
+ // Avoid instantiating the `In*` or `Out` types for the intermediate
1248
+ // lists, since those types may be invalid, or expensive. Per my tests
1249
+ // on clang using `tag_t` for the intermediate list is no more expensive
1250
+ // than using a dedicated incomplete list type.
1251
+ type_list_concat_<Out, tag_t<A..., B...>, Tail...>;
1252
+
1253
+ } // namespace detail
1254
+
1255
+ /// type_list_concat_t
1256
+ ///
1257
+ /// Each `List` is a type list of the form `InK<TypeK...>`, where the
1258
+ /// templates `InK` are potentially heterogeneous. Concatenates these
1259
+ /// `List`s into a single type list `Out<Type1..., Type2..., ...>`.
1260
+ template <template <typename...> class Out, typename... List>
1261
+ using type_list_concat_t =
1262
+ typename decltype(detail::type_list_concat_<Out, List...>)::type;
1263
+
1264
+ namespace traits_detail {
1265
+
1266
+ template <decltype(auto) V>
1267
+ struct value_pack_constant {
1268
+ inline static constexpr decltype(V) value = V;
1269
+ };
1270
+
1271
+ } // namespace traits_detail
1272
+
1273
+ /// value_pack_size_v
1274
+ ///
1275
+ /// The size of a value pack.
1276
+ ///
1277
+ /// A metafunction around sizeof...(V).
1278
+ template <auto... V>
1279
+ inline constexpr std::size_t value_pack_size_v = sizeof...(V);
1280
+
1281
+ /// value_pack_size_t
1282
+ ///
1283
+ /// The size of a value pack.
1284
+ ///
1285
+ /// A metafunction around index_constant<sizeof...(V)>.
1286
+ template <auto... V>
1287
+ using value_pack_size_t = index_constant<sizeof...(V)>;
1288
+
1289
+ /// value_pack_element_type_t
1290
+ ///
1291
+ /// In the value pack V..., the type of the Ith element.
1292
+ template <std::size_t I, auto... V>
1293
+ using value_pack_element_type_t = type_pack_element_t<I, decltype(V)...>;
1294
+
1295
+ /// value_pack_element_type_t
1296
+ ///
1297
+ /// In the value pack V..., the Ith element.
1298
+ template <std::size_t I, auto... V>
1299
+ inline constexpr value_pack_element_type_t<I, V...> value_pack_element_v =
1300
+ type_pack_element_t<I, traits_detail::value_pack_constant<V>...>::value;
1301
+
1302
+ namespace traits_detail {
1303
+
1304
+ template <typename List>
1305
+ struct value_list_traits_;
1306
+ template <template <auto...> class List, auto... V>
1307
+ struct value_list_traits_<List<V...>> {
1308
+ static constexpr std::size_t size = sizeof...(V);
1309
+ template <std::size_t I>
1310
+ using element_type = value_pack_element_type_t<I, V...>;
1311
+ template <std::size_t I>
1312
+ static constexpr value_pack_element_type_t<I, V...> element =
1313
+ value_pack_element_v<I, V...>;
1314
+ };
1315
+
1316
+ } // namespace traits_detail
1317
+
1318
+ /// value_list_size_v
1319
+ ///
1320
+ /// The size of a value list.
1321
+ ///
1322
+ /// For List<V...>, equivalent to value_pack_size_v<V...>.
1323
+ template <typename List>
1324
+ inline constexpr std::size_t value_list_size_v =
1325
+ traits_detail::value_list_traits_<List>::size;
1326
+
1327
+ /// value_list_size_t
1328
+ ///
1329
+ /// The size of a value list.
1330
+ ///
1331
+ /// For List<V...>, equivalent to value_pack_size_t<V...>.
1332
+ template <typename List>
1333
+ using value_list_size_t = index_constant<value_list_size_v<List>>;
1334
+
1335
+ /// value_list_element_type_t
1336
+ ///
1337
+ /// For List<V...>, the type of the Ith element.
1338
+ template <std::size_t I, typename List>
1339
+ using value_list_element_type_t =
1340
+ typename traits_detail::value_list_traits_<List>::template element_type<I>;
1341
+
1342
+ /// value_list_element_v
1343
+ ///
1344
+ /// For List<V...>, the Ith element.
1345
+ template <std::size_t I, typename List>
1346
+ inline constexpr value_list_element_type_t<I, List> value_list_element_v =
1347
+ traits_detail::value_list_traits_<List>::template element<I>;
1348
+
1349
+ namespace detail {
1350
+
1351
+ // The primary template is only invoked for invalid parameters.
1352
+ template <template <auto...> class Out, typename... T>
1353
+ inline constexpr auto value_list_concat_ =
1354
+ error_list_concat_params_should_be_non_cvref<T...>{};
1355
+
1356
+ template <template <auto...> class Out>
1357
+ inline constexpr type_identity<Out<>> value_list_concat_<Out>;
1358
+
1359
+ template <template <auto...> class Out, template <auto...> class In, auto... V>
1360
+ inline constexpr auto value_list_concat_<Out, In<V...>> =
1361
+ type_identity<Out<V...>>{};
1362
+
1363
+ template <
1364
+ template <auto...>
1365
+ class Out,
1366
+ // Allow input lists to come from heterogeneous templates.
1367
+ template <auto...>
1368
+ class InA,
1369
+ auto... A,
1370
+ template <auto...>
1371
+ class InB,
1372
+ auto... B,
1373
+ typename... Tail>
1374
+ inline constexpr auto value_list_concat_<Out, InA<A...>, InB<B...>, Tail...> =
1375
+ // The use of `vtag_t` is explained in the analogous `type_list_concat_.
1376
+ value_list_concat_<Out, vtag_t<A..., B...>, Tail...>;
1377
+
1378
+ } // namespace detail
1379
+
1380
+ /// value_list_concat_t
1381
+ ///
1382
+ /// Each `List` is a value list of the form `InK<ValK...>`, where the
1383
+ /// templates `InK` are potentially heterogeneous. Concatenates these
1384
+ /// `List`s into a single value list `Out<Val1..., Val2..., ...>`.
1385
+ template <template <auto...> class Out, typename... List>
1386
+ using value_list_concat_t =
1387
+ typename decltype(detail::value_list_concat_<Out, List...>)::type;
1388
+
1389
+ namespace detail {
1390
+
1391
+ template <typename V, typename... T>
1392
+ constexpr std::size_t type_pack_find_() {
1393
+ bool eq[] = {std::is_same_v<V, T>..., true};
1394
+ for (size_t i = 0; i < sizeof...(T); ++i) {
1395
+ if (eq[i]) {
1396
+ return i;
1397
+ }
1398
+ }
1399
+ return sizeof...(T);
1400
+ }
1401
+
1402
+ template <typename>
1403
+ struct type_list_find_;
1404
+ template <template <typename...> class List, typename... T>
1405
+ struct type_list_find_<List<T...>> {
1406
+ template <typename V>
1407
+ static inline constexpr std::size_t apply = type_pack_find_<V, T...>();
1408
+ };
1409
+
1410
+ } // namespace detail
1411
+
1412
+ /// type_pack_find_v
1413
+ ///
1414
+ /// The index of the element of the type pack which is identical to the given
1415
+ /// type, or the size of the pack if there is no such element.
1416
+ template <typename V, typename... T>
1417
+ inline constexpr std::size_t type_pack_find_v =
1418
+ detail::type_pack_find_<V, T...>();
1419
+
1420
+ /// type_pack_find_t
1421
+ ///
1422
+ /// The index of the element of the type pack which is identical to the given
1423
+ /// type, or the size of the pack if there is no such element.
1424
+ template <typename V, typename... T>
1425
+ using type_pack_find_t = index_constant<type_pack_find_v<V, T...>>;
1426
+
1427
+ /// type_list_find_v
1428
+ ///
1429
+ /// The index of the element of the type list which is identical to the given
1430
+ /// type, or the size of the list if there is no such element.
1431
+ template <typename V, typename List>
1432
+ inline constexpr std::size_t type_list_find_v =
1433
+ detail::type_list_find_<List>::template apply<V>;
1434
+
1435
+ /// type_list_find_t
1436
+ ///
1437
+ /// The index of the element of the type list which is identical to the given
1438
+ /// type, or the size of the list if there is no such element.
1439
+ template <typename V, typename List>
1440
+ using type_list_find_t = index_constant<type_list_find_v<V, List>>;
1441
+
1442
+ } // namespace folly