react-native-windows 0.84.0 → 0.84.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (921) hide show
  1. package/Directory.Build.props +2 -17
  2. package/Folly/ThreadNameStub.cpp +4 -6
  3. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
  4. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
  5. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
  6. package/PropertySheets/CIBuildOptimizations.props +2 -2
  7. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  8. package/PropertySheets/JSEngine.props +1 -1
  9. package/PropertySheets/NuGet.LockFile.props +10 -1
  10. package/PropertySheets/React.Cpp.props +3 -3
  11. package/ReactCommon/ReactCommon.vcxproj +0 -5
  12. package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
  13. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
  14. package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
  15. package/Scripts/creaternwapp.cmd +5 -8
  16. package/Scripts/creaternwlib.cmd +10 -23
  17. package/Shared/Shared.vcxitems +2 -0
  18. package/{Folly → external}/.clang-format +0 -1
  19. package/external/External.vcxitems +10 -0
  20. package/external/fast-float/.syncignore +10 -0
  21. package/external/fast-float/LICENSE-APACHE +190 -0
  22. package/external/fast-float/LICENSE-BOOST +23 -0
  23. package/external/fast-float/LICENSE-MIT +27 -0
  24. package/external/fast-float/README.md +545 -0
  25. package/external/fast-float/cgmanifest.json +15 -0
  26. package/external/fast-float/fast-float.vcxitems +14 -0
  27. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  28. package/external/fast-float/include/fast_float/bigint.h +638 -0
  29. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  30. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  31. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  32. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  33. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  34. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  35. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  36. package/external/fast-float/sync-config.json +8 -0
  37. package/external/fmt/.syncignore +10 -0
  38. package/external/fmt/CONTRIBUTING.md +20 -0
  39. package/external/fmt/LICENSE +27 -0
  40. package/external/fmt/README.md +484 -0
  41. package/external/fmt/doc/ChangeLog-old.md +3290 -0
  42. package/external/fmt/doc/api.md +650 -0
  43. package/external/fmt/doc/fmt.css +61 -0
  44. package/external/fmt/doc/fmt.js +4 -0
  45. package/external/fmt/doc/get-started.md +222 -0
  46. package/external/fmt/doc/index.md +151 -0
  47. package/external/fmt/doc/perf.svg +1 -0
  48. package/external/fmt/doc/python-license.txt +290 -0
  49. package/external/fmt/doc/syntax.md +887 -0
  50. package/external/fmt/fmt.vcxitems +28 -0
  51. package/external/fmt/include/fmt/args.h +228 -0
  52. package/external/fmt/include/fmt/base.h +3077 -0
  53. package/external/fmt/include/fmt/chrono.h +2432 -0
  54. package/external/fmt/include/fmt/color.h +612 -0
  55. package/external/fmt/include/fmt/compile.h +529 -0
  56. package/external/fmt/include/fmt/core.h +5 -0
  57. package/external/fmt/include/fmt/format-inl.h +1928 -0
  58. package/external/fmt/include/fmt/format.h +4427 -0
  59. package/external/fmt/include/fmt/os.h +439 -0
  60. package/external/fmt/include/fmt/ostream.h +211 -0
  61. package/external/fmt/include/fmt/printf.h +656 -0
  62. package/external/fmt/include/fmt/ranges.h +882 -0
  63. package/external/fmt/include/fmt/std.h +699 -0
  64. package/external/fmt/include/fmt/xchar.h +322 -0
  65. package/external/fmt/src/fmt.cc +135 -0
  66. package/external/fmt/src/format.cc +43 -0
  67. package/external/fmt/src/os.cc +403 -0
  68. package/external/fmt/sync-config.json +8 -0
  69. package/external/folly/.syncignore +60 -0
  70. package/external/folly/LICENSE +200 -0
  71. package/external/folly/README.md +263 -0
  72. package/{fmt → external/folly/folly}/.clang-format +0 -1
  73. package/external/folly/folly/AtomicHashArray-inl.h +546 -0
  74. package/external/folly/folly/AtomicHashArray.h +431 -0
  75. package/external/folly/folly/AtomicHashMap-inl.h +653 -0
  76. package/external/folly/folly/AtomicHashMap.h +484 -0
  77. package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
  78. package/external/folly/folly/AtomicLinkedList.h +110 -0
  79. package/external/folly/folly/AtomicUnorderedMap.h +522 -0
  80. package/external/folly/folly/BUCK +1631 -0
  81. package/external/folly/folly/BUILD_MODE.bzl +72 -0
  82. package/external/folly/folly/Benchmark.cpp +986 -0
  83. package/external/folly/folly/Benchmark.h +680 -0
  84. package/external/folly/folly/BenchmarkUtil.h +47 -0
  85. package/external/folly/folly/Bits.h +17 -0
  86. package/external/folly/folly/CMakeLists.txt +110 -0
  87. package/external/folly/folly/CPortability.h +338 -0
  88. package/external/folly/folly/CancellationToken-inl.h +449 -0
  89. package/external/folly/folly/CancellationToken.cpp +250 -0
  90. package/external/folly/folly/CancellationToken.h +365 -0
  91. package/external/folly/folly/Chrono.h +132 -0
  92. package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
  93. package/external/folly/folly/ClockGettimeWrappers.h +29 -0
  94. package/external/folly/folly/ConcurrentBitSet.h +157 -0
  95. package/external/folly/folly/ConcurrentLazy.h +74 -0
  96. package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
  97. package/external/folly/folly/ConcurrentSkipList.h +824 -0
  98. package/external/folly/folly/ConstructorCallbackList.h +158 -0
  99. package/external/folly/folly/Conv.h +2026 -0
  100. package/external/folly/folly/CppAttributes.h +170 -0
  101. package/external/folly/folly/CpuId.h +297 -0
  102. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  103. package/external/folly/folly/Demangle.cpp +255 -0
  104. package/external/folly/folly/Demangle.h +73 -0
  105. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  106. package/external/folly/folly/DynamicConverter.h +17 -0
  107. package/external/folly/folly/Exception.h +150 -0
  108. package/external/folly/folly/ExceptionString.cpp +51 -0
  109. package/external/folly/folly/ExceptionString.h +33 -0
  110. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  111. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  112. package/external/folly/folly/ExceptionWrapper.h +377 -0
  113. package/external/folly/folly/Executor.cpp +111 -0
  114. package/external/folly/folly/Executor.h +351 -0
  115. package/external/folly/folly/Expected.h +1725 -0
  116. package/external/folly/folly/FBString.h +2888 -0
  117. package/external/folly/folly/FBVector.h +17 -0
  118. package/external/folly/folly/File.cpp +180 -0
  119. package/external/folly/folly/File.h +177 -0
  120. package/external/folly/folly/FileUtil.cpp +378 -0
  121. package/external/folly/folly/FileUtil.h +332 -0
  122. package/external/folly/folly/Fingerprint.cpp +135 -0
  123. package/external/folly/folly/Fingerprint.h +289 -0
  124. package/external/folly/folly/FixedString.h +2965 -0
  125. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  126. package/external/folly/folly/FollyMemcpy.h +23 -0
  127. package/external/folly/folly/FollyMemset.cpp +29 -0
  128. package/external/folly/folly/FollyMemset.h +25 -0
  129. package/external/folly/folly/Format-inl.h +1152 -0
  130. package/external/folly/folly/Format.cpp +429 -0
  131. package/external/folly/folly/Format.h +463 -0
  132. package/external/folly/folly/FormatArg.h +285 -0
  133. package/external/folly/folly/FormatTraits.h +65 -0
  134. package/external/folly/folly/Function.h +1159 -0
  135. package/external/folly/folly/GLog.h +85 -0
  136. package/external/folly/folly/GroupVarint.cpp +153 -0
  137. package/external/folly/folly/GroupVarint.h +630 -0
  138. package/external/folly/folly/Hash.h +20 -0
  139. package/external/folly/folly/IPAddress.cpp +490 -0
  140. package/external/folly/folly/IPAddress.h +667 -0
  141. package/external/folly/folly/IPAddressException.h +82 -0
  142. package/external/folly/folly/IPAddressV4.cpp +305 -0
  143. package/external/folly/folly/IPAddressV4.h +495 -0
  144. package/external/folly/folly/IPAddressV6.cpp +541 -0
  145. package/external/folly/folly/IPAddressV6.h +627 -0
  146. package/external/folly/folly/Indestructible.h +164 -0
  147. package/external/folly/folly/IndexedMemPool.h +550 -0
  148. package/external/folly/folly/IntrusiveList.h +17 -0
  149. package/external/folly/folly/Lazy.h +142 -0
  150. package/external/folly/folly/Likely.h +76 -0
  151. package/external/folly/folly/MPMCPipeline.h +280 -0
  152. package/external/folly/folly/MPMCQueue.h +1556 -0
  153. package/external/folly/folly/MacAddress.cpp +188 -0
  154. package/external/folly/folly/MacAddress.h +260 -0
  155. package/external/folly/folly/MapUtil.h +17 -0
  156. package/external/folly/folly/Math.h +258 -0
  157. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  158. package/external/folly/folly/Memory.h +900 -0
  159. package/external/folly/folly/MicroLock.cpp +76 -0
  160. package/external/folly/folly/MicroLock.h +354 -0
  161. package/external/folly/folly/MicroSpinLock.h +17 -0
  162. package/external/folly/folly/MoveWrapper.h +76 -0
  163. package/external/folly/folly/ObserverContainer.h +1026 -0
  164. package/external/folly/folly/Optional.h +743 -0
  165. package/external/folly/folly/Overload.h +325 -0
  166. package/external/folly/folly/PackedSyncPtr.h +147 -0
  167. package/external/folly/folly/Padded.h +464 -0
  168. package/external/folly/folly/Poly-inl.h +230 -0
  169. package/external/folly/folly/Poly.h +1095 -0
  170. package/external/folly/folly/PolyException.h +43 -0
  171. package/external/folly/folly/Portability.h +644 -0
  172. package/external/folly/folly/Preprocessor.h +236 -0
  173. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  174. package/external/folly/folly/RWSpinLock.h +17 -0
  175. package/external/folly/folly/Random-inl.h +86 -0
  176. package/external/folly/folly/Random.cpp +184 -0
  177. package/external/folly/folly/Random.h +434 -0
  178. package/external/folly/folly/Range.h +1772 -0
  179. package/external/folly/folly/Replaceable.h +636 -0
  180. package/external/folly/folly/ScopeGuard.cpp +29 -0
  181. package/external/folly/folly/ScopeGuard.h +420 -0
  182. package/external/folly/folly/SharedMutex.cpp +81 -0
  183. package/external/folly/folly/SharedMutex.h +1751 -0
  184. package/external/folly/folly/Singleton-inl.h +332 -0
  185. package/external/folly/folly/Singleton.cpp +512 -0
  186. package/external/folly/folly/Singleton.h +891 -0
  187. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  188. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  189. package/external/folly/folly/SocketAddress.cpp +786 -0
  190. package/external/folly/folly/SocketAddress.h +768 -0
  191. package/external/folly/folly/SpinLock.h +55 -0
  192. package/external/folly/folly/String-inl.h +668 -0
  193. package/external/folly/folly/String.cpp +777 -0
  194. package/external/folly/folly/String.h +767 -0
  195. package/external/folly/folly/Subprocess.cpp +1142 -0
  196. package/external/folly/folly/Subprocess.h +1055 -0
  197. package/external/folly/folly/Synchronized.h +1833 -0
  198. package/external/folly/folly/SynchronizedPtr.h +106 -0
  199. package/external/folly/folly/ThreadCachedInt.h +175 -0
  200. package/external/folly/folly/ThreadLocal.h +478 -0
  201. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  202. package/external/folly/folly/TimeoutQueue.h +123 -0
  203. package/external/folly/folly/TokenBucket.h +673 -0
  204. package/external/folly/folly/Traits.h +1442 -0
  205. package/external/folly/folly/Try-inl.h +372 -0
  206. package/external/folly/folly/Try.cpp +23 -0
  207. package/external/folly/folly/Try.h +728 -0
  208. package/external/folly/folly/UTF8String.h +56 -0
  209. package/external/folly/folly/Unicode.cpp +201 -0
  210. package/external/folly/folly/Unicode.h +94 -0
  211. package/external/folly/folly/Unit.h +65 -0
  212. package/external/folly/folly/Uri-inl.h +101 -0
  213. package/external/folly/folly/Uri.cpp +190 -0
  214. package/external/folly/folly/Uri.h +142 -0
  215. package/external/folly/folly/Utility.h +932 -0
  216. package/external/folly/folly/VERSION +1 -0
  217. package/external/folly/folly/Varint.h +230 -0
  218. package/external/folly/folly/VirtualExecutor.h +17 -0
  219. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  220. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  221. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  222. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  223. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  224. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  225. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  226. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  227. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  228. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  229. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  230. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  231. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  232. package/external/folly/folly/base64.h +264 -0
  233. package/external/folly/folly/chrono/BUCK +29 -0
  234. package/external/folly/folly/chrono/Clock.h +65 -0
  235. package/external/folly/folly/chrono/Conv.h +712 -0
  236. package/external/folly/folly/chrono/test/BUCK +26 -0
  237. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  238. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  239. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  240. package/external/folly/folly/concurrency/BUCK +170 -0
  241. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  242. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  243. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  244. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  245. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  246. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  247. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  248. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  249. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  250. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  251. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  252. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  253. package/external/folly/folly/concurrency/container/BUCK +77 -0
  254. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  255. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  256. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  257. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  258. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  259. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  260. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  261. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  262. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  263. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  264. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  265. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  266. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  267. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  268. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  269. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  270. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  271. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  272. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  273. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  274. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  275. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  276. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  277. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  278. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  279. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  280. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  281. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  282. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  283. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  284. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  285. package/external/folly/folly/concurrency/test/BUCK +229 -0
  286. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  287. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  288. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  289. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  290. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  291. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  292. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  293. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  294. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  295. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  296. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  297. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  298. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  299. package/external/folly/folly/container/Access.h +57 -0
  300. package/external/folly/folly/container/Array.h +87 -0
  301. package/external/folly/folly/container/BUCK +353 -0
  302. package/external/folly/folly/container/BitIterator.h +203 -0
  303. package/external/folly/folly/container/Enumerate.h +162 -0
  304. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  305. package/external/folly/folly/container/F14.md +300 -0
  306. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  307. package/external/folly/folly/container/F14Map.h +2108 -0
  308. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  309. package/external/folly/folly/container/F14Set.h +1603 -0
  310. package/external/folly/folly/container/FBVector.h +1711 -0
  311. package/external/folly/folly/container/Foreach-inl.h +316 -0
  312. package/external/folly/folly/container/Foreach.h +209 -0
  313. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  314. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  315. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  316. package/external/folly/folly/container/IntrusiveList.h +131 -0
  317. package/external/folly/folly/container/Iterator.h +843 -0
  318. package/external/folly/folly/container/MapUtil.h +376 -0
  319. package/external/folly/folly/container/Merge.h +90 -0
  320. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  321. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  322. package/external/folly/folly/container/Reserve.h +109 -0
  323. package/external/folly/folly/container/SparseByteSet.h +123 -0
  324. package/external/folly/folly/container/View.h +81 -0
  325. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  326. package/external/folly/folly/container/detail/BUCK +115 -0
  327. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  328. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  329. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  330. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  331. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  332. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  333. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  334. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  335. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  336. package/external/folly/folly/container/detail/Util.h +303 -0
  337. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  338. package/external/folly/folly/container/detail/test/BUCK +14 -0
  339. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  340. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  341. package/external/folly/folly/container/range_traits.h +81 -0
  342. package/external/folly/folly/container/small_vector.h +1476 -0
  343. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  344. package/external/folly/folly/container/span.h +408 -0
  345. package/external/folly/folly/container/tape.h +608 -0
  346. package/external/folly/folly/container/test/.clang-tidy +12 -0
  347. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  348. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  349. package/external/folly/folly/container/test/BUCK +568 -0
  350. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  351. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  352. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  353. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  354. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  355. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  356. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  357. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  358. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  359. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  360. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  361. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  362. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  363. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  364. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  365. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  366. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  367. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  368. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  369. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  370. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  371. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  372. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  373. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  374. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  375. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  376. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  377. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  378. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  379. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  380. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  381. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  382. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  383. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  384. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  385. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  386. package/external/folly/folly/container/test/span_test.cpp +520 -0
  387. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  388. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  389. package/external/folly/folly/defs.bzl +238 -0
  390. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  391. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  392. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  393. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  394. package/external/folly/folly/detail/BUCK +406 -0
  395. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  396. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  397. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  398. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  399. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  400. package/external/folly/folly/detail/Futex-inl.h +123 -0
  401. package/external/folly/folly/detail/Futex.cpp +273 -0
  402. package/external/folly/folly/detail/Futex.h +109 -0
  403. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  404. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  405. package/external/folly/folly/detail/IPAddress.h +57 -0
  406. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  407. package/external/folly/folly/detail/Iterators.h +156 -0
  408. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  409. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  410. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  411. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  412. package/external/folly/folly/detail/PerfScoped.h +70 -0
  413. package/external/folly/folly/detail/PolyDetail.h +921 -0
  414. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  415. package/external/folly/folly/detail/RangeCommon.h +93 -0
  416. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  417. package/external/folly/folly/detail/RangeSse42.h +30 -0
  418. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  419. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  420. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  421. package/external/folly/folly/detail/Singleton.h +34 -0
  422. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  423. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  424. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  425. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  426. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  427. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  428. package/external/folly/folly/detail/Sse.cpp +35 -0
  429. package/external/folly/folly/detail/Sse.h +45 -0
  430. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  431. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  432. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  433. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  434. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  435. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  436. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  437. package/external/folly/folly/detail/TypeList.h +551 -0
  438. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  439. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  440. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  441. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  442. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  443. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  444. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  445. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  446. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  447. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  448. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  449. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  450. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  451. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  452. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  453. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  454. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  455. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  456. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  457. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  458. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  459. package/external/folly/folly/detail/test/BUCK +118 -0
  460. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  461. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  462. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  463. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  464. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  465. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  466. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  467. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  468. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  469. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  470. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  471. package/external/folly/folly/docs/AtomicHashMap.md +134 -0
  472. package/external/folly/folly/docs/Benchmark.md +310 -0
  473. package/external/folly/folly/docs/Conv.md +291 -0
  474. package/external/folly/folly/docs/Dynamic.md +220 -0
  475. package/external/folly/folly/docs/DynamicConverter.md +71 -0
  476. package/external/folly/folly/docs/Executors.md +63 -0
  477. package/external/folly/folly/docs/FBString.md +46 -0
  478. package/external/folly/folly/docs/FBVector.md +200 -0
  479. package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
  480. package/external/folly/folly/docs/Format.md +177 -0
  481. package/external/folly/folly/docs/Function.md +92 -0
  482. package/external/folly/folly/docs/Futures.md +263 -0
  483. package/external/folly/folly/docs/GroupVarint.md +46 -0
  484. package/external/folly/folly/docs/Histogram.md +104 -0
  485. package/external/folly/folly/docs/MapUtils.md +80 -0
  486. package/external/folly/folly/docs/Overview.md +263 -0
  487. package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
  488. package/external/folly/folly/docs/Poly.md +500 -0
  489. package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
  490. package/external/folly/folly/docs/Rcu.md +218 -0
  491. package/external/folly/folly/docs/SmallLocks.md +24 -0
  492. package/external/folly/folly/docs/Synchronized.md +793 -0
  493. package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
  494. package/external/folly/folly/docs/ThreadLocal.md +105 -0
  495. package/external/folly/folly/docs/Traits.md +161 -0
  496. package/external/folly/folly/docs/small_vector.md +64 -0
  497. package/external/folly/folly/docs/style.css +23 -0
  498. package/external/folly/folly/dynamic-inl.h +17 -0
  499. package/external/folly/folly/dynamic.h +17 -0
  500. package/external/folly/folly/folly_extended_library.bzl +28 -0
  501. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  502. package/external/folly/folly/functional/BUCK +57 -0
  503. package/external/folly/folly/functional/Invoke.h +880 -0
  504. package/external/folly/folly/functional/Partial.h +130 -0
  505. package/external/folly/folly/functional/protocol.h +203 -0
  506. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  507. package/external/folly/folly/functional/test/BUCK +57 -0
  508. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  509. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  510. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  511. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  512. package/external/folly/folly/functional/traits.h +675 -0
  513. package/external/folly/folly/hash/BUCK +86 -0
  514. package/external/folly/folly/hash/Checksum.cpp +275 -0
  515. package/external/folly/folly/hash/Checksum.h +94 -0
  516. package/external/folly/folly/hash/FarmHash.h +46 -0
  517. package/external/folly/folly/hash/Hash.h +1045 -0
  518. package/external/folly/folly/hash/MurmurHash.h +86 -0
  519. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  520. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  521. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  522. package/external/folly/folly/hash/SpookyHashV2.h +339 -0
  523. package/external/folly/folly/hash/detail/BUCK +26 -0
  524. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  525. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  526. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  527. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  528. package/external/folly/folly/hash/test/BUCK +132 -0
  529. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  530. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  531. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  532. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  533. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  534. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  535. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  536. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  537. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  538. package/external/folly/folly/hash/traits.h +115 -0
  539. package/external/folly/folly/json/BUCK +155 -0
  540. package/external/folly/folly/json/DynamicConverter.h +464 -0
  541. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  542. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  543. package/external/folly/folly/json/DynamicParser.h +394 -0
  544. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  545. package/external/folly/folly/json/JSONSchema.h +73 -0
  546. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  547. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  548. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  549. package/external/folly/folly/json/bser/BUCK +24 -0
  550. package/external/folly/folly/json/bser/Bser.h +107 -0
  551. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  552. package/external/folly/folly/json/bser/Load.cpp +246 -0
  553. package/external/folly/folly/json/bser/test/BUCK +14 -0
  554. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  555. package/external/folly/folly/json/dynamic.cpp +552 -0
  556. package/external/folly/folly/json/dynamic.h +1346 -0
  557. package/external/folly/folly/json/json.h +238 -0
  558. package/external/folly/folly/json/json_patch.cpp +325 -0
  559. package/external/folly/folly/json/json_patch.h +126 -0
  560. package/external/folly/folly/json/json_pointer.cpp +114 -0
  561. package/external/folly/folly/json/json_pointer.h +87 -0
  562. package/external/folly/folly/json/test/BUCK +147 -0
  563. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  564. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  565. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  566. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  567. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  568. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  569. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  570. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  571. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  572. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  573. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  574. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  575. package/external/folly/folly/json/tool/BUCK +13 -0
  576. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  577. package/external/folly/folly/json.h +17 -0
  578. package/external/folly/folly/json_patch.h +17 -0
  579. package/external/folly/folly/json_pointer.h +17 -0
  580. package/external/folly/folly/lang/Access.h +29 -0
  581. package/external/folly/folly/lang/Align.h +240 -0
  582. package/external/folly/folly/lang/Aligned.h +92 -0
  583. package/external/folly/folly/lang/Assume.h +82 -0
  584. package/external/folly/folly/lang/BUCK +287 -0
  585. package/external/folly/folly/lang/Badge.h +108 -0
  586. package/external/folly/folly/lang/Bits.h +570 -0
  587. package/external/folly/folly/lang/BitsClass.h +312 -0
  588. package/external/folly/folly/lang/Builtin.h +74 -0
  589. package/external/folly/folly/lang/CArray.h +34 -0
  590. package/external/folly/folly/lang/CString.cpp +86 -0
  591. package/external/folly/folly/lang/CString.h +55 -0
  592. package/external/folly/folly/lang/Cast.h +51 -0
  593. package/external/folly/folly/lang/CheckedMath.h +253 -0
  594. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  595. package/external/folly/folly/lang/Exception.cpp +822 -0
  596. package/external/folly/folly/lang/Exception.h +716 -0
  597. package/external/folly/folly/lang/Extern.h +55 -0
  598. package/external/folly/folly/lang/Hint-inl.h +144 -0
  599. package/external/folly/folly/lang/Hint.h +238 -0
  600. package/external/folly/folly/lang/Keep.h +98 -0
  601. package/external/folly/folly/lang/New.h +124 -0
  602. package/external/folly/folly/lang/Ordering.h +140 -0
  603. package/external/folly/folly/lang/Pretty.h +159 -0
  604. package/external/folly/folly/lang/PropagateConst.h +413 -0
  605. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  606. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  607. package/external/folly/folly/lang/StaticConst.h +33 -0
  608. package/external/folly/folly/lang/Thunk.h +100 -0
  609. package/external/folly/folly/lang/TypeInfo.h +58 -0
  610. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  611. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  612. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  613. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  614. package/external/folly/folly/lang/test/BUCK +258 -0
  615. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  616. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  617. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  618. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  619. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  620. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  621. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  622. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  623. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  624. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  625. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  626. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  627. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  628. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  629. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  630. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  631. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  632. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  633. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  634. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  635. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  636. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  637. package/external/folly/folly/memcpy.S +292 -0
  638. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  639. package/external/folly/folly/memory/Arena-inl.h +83 -0
  640. package/external/folly/folly/memory/Arena.h +325 -0
  641. package/external/folly/folly/memory/BUCK +191 -0
  642. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  643. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  644. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  645. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  646. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  647. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  648. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  649. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  650. package/external/folly/folly/memory/Malloc.h +551 -0
  651. package/external/folly/folly/memory/MemoryResource.h +57 -0
  652. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  653. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  654. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  655. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  656. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  657. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  658. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  659. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  660. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  661. package/external/folly/folly/memory/detail/BUCK +10 -0
  662. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  663. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  664. package/external/folly/folly/memory/not_null-inl.h +522 -0
  665. package/external/folly/folly/memory/not_null.h +449 -0
  666. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  667. package/external/folly/folly/memory/test/BUCK +146 -0
  668. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  669. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  670. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  671. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  672. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  673. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  674. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  675. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  676. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  677. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  678. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  679. package/external/folly/folly/memset.S +245 -0
  680. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  681. package/external/folly/folly/portability/Asm.h +50 -0
  682. package/external/folly/folly/portability/Atomic.h +31 -0
  683. package/external/folly/folly/portability/BUCK +456 -0
  684. package/external/folly/folly/portability/Builtins.cpp +31 -0
  685. package/external/folly/folly/portability/Builtins.h +161 -0
  686. package/external/folly/folly/portability/Config.h +43 -0
  687. package/external/folly/folly/portability/Constexpr.h +145 -0
  688. package/external/folly/folly/portability/Dirent.cpp +140 -0
  689. package/external/folly/folly/portability/Dirent.h +41 -0
  690. package/external/folly/folly/portability/Event.h +44 -0
  691. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  692. package/external/folly/folly/portability/Fcntl.h +67 -0
  693. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  694. package/external/folly/folly/portability/Filesystem.h +114 -0
  695. package/external/folly/folly/portability/FmtCompile.h +40 -0
  696. package/external/folly/folly/portability/GFlags.h +139 -0
  697. package/external/folly/folly/portability/GMock.h +35 -0
  698. package/external/folly/folly/portability/GTest.h +35 -0
  699. package/external/folly/folly/portability/IOVec.h +34 -0
  700. package/external/folly/folly/portability/Libgen.cpp +59 -0
  701. package/external/folly/folly/portability/Libgen.h +29 -0
  702. package/external/folly/folly/portability/Libunwind.h +21 -0
  703. package/external/folly/folly/portability/Malloc.cpp +31 -0
  704. package/external/folly/folly/portability/Malloc.h +53 -0
  705. package/external/folly/folly/portability/Math.h +90 -0
  706. package/external/folly/folly/portability/Memory.h +26 -0
  707. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  708. package/external/folly/folly/portability/OpenSSL.h +102 -0
  709. package/external/folly/folly/portability/PThread.cpp +697 -0
  710. package/external/folly/folly/portability/PThread.h +148 -0
  711. package/external/folly/folly/portability/README.md +21 -0
  712. package/external/folly/folly/portability/Sched.cpp +41 -0
  713. package/external/folly/folly/portability/Sched.h +45 -0
  714. package/external/folly/folly/portability/Sockets.cpp +245 -0
  715. package/external/folly/folly/portability/Sockets.h +155 -0
  716. package/external/folly/folly/portability/SourceLocation.h +49 -0
  717. package/external/folly/folly/portability/Stdio.cpp +77 -0
  718. package/external/folly/folly/portability/Stdio.h +32 -0
  719. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  720. package/external/folly/folly/portability/Stdlib.h +64 -0
  721. package/external/folly/folly/portability/String.cpp +53 -0
  722. package/external/folly/folly/portability/String.h +39 -0
  723. package/external/folly/folly/portability/SysFile.cpp +46 -0
  724. package/external/folly/folly/portability/SysFile.h +27 -0
  725. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  726. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  727. package/external/folly/folly/portability/SysMman.cpp +242 -0
  728. package/external/folly/folly/portability/SysMman.h +68 -0
  729. package/external/folly/folly/portability/SysResource.cpp +108 -0
  730. package/external/folly/folly/portability/SysResource.h +71 -0
  731. package/external/folly/folly/portability/SysStat.cpp +66 -0
  732. package/external/folly/folly/portability/SysStat.h +52 -0
  733. package/external/folly/folly/portability/SysSyscall.h +73 -0
  734. package/external/folly/folly/portability/SysTime.cpp +62 -0
  735. package/external/folly/folly/portability/SysTime.h +50 -0
  736. package/external/folly/folly/portability/SysTypes.h +44 -0
  737. package/external/folly/folly/portability/SysUio.cpp +179 -0
  738. package/external/folly/folly/portability/SysUio.h +51 -0
  739. package/external/folly/folly/portability/Syslog.h +39 -0
  740. package/external/folly/folly/portability/Time.cpp +357 -0
  741. package/external/folly/folly/portability/Time.h +74 -0
  742. package/external/folly/folly/portability/Unistd.h +111 -0
  743. package/external/folly/folly/portability/Windows.h +108 -0
  744. package/external/folly/folly/portability/openat2.c +30 -0
  745. package/external/folly/folly/portability/openat2.h +39 -0
  746. package/external/folly/folly/portability/test/BUCK +59 -0
  747. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  748. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  749. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  750. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  751. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  752. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  753. package/external/folly/folly/small_vector.h +17 -0
  754. package/external/folly/folly/somerge_defs.bzl +399 -0
  755. package/external/folly/folly/sorted_vector_types.h +17 -0
  756. package/external/folly/folly/stop_watch.h +317 -0
  757. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  758. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  759. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  760. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  761. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  762. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  763. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  764. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  765. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  766. package/external/folly/folly/synchronization/BUCK +418 -0
  767. package/external/folly/folly/synchronization/Baton.h +419 -0
  768. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  769. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  770. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  771. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  772. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  773. package/external/folly/folly/synchronization/EventCount.h +200 -0
  774. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  775. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  776. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  777. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  778. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  779. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  780. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  781. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  782. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  783. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  784. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  785. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  786. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  787. package/external/folly/folly/synchronization/Latch.h +160 -0
  788. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  789. package/external/folly/folly/synchronization/Lock.h +887 -0
  790. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  791. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  792. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  793. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  794. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  795. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  796. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  797. package/external/folly/folly/synchronization/Rcu.h +553 -0
  798. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  799. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  800. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  801. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  802. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  803. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  804. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  805. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  806. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  807. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  808. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  809. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  810. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  811. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  812. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  813. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  814. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  815. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  816. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  817. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  818. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  819. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  820. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  821. package/external/folly/folly/synchronization/example/BUCK +27 -0
  822. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  823. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  824. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  825. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  826. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  827. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  828. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  829. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  830. package/external/folly/folly/synchronization/test/BUCK +495 -0
  831. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  832. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  833. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  834. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  835. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  836. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  837. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  838. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  839. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  840. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  841. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  842. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  843. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  844. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  845. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  846. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  847. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  848. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  849. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  850. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  851. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  852. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  853. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  854. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  855. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  856. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  857. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  858. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  859. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  860. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  861. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  862. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  863. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  864. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  865. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  866. package/external/folly/folly/system/AtFork.cpp +205 -0
  867. package/external/folly/folly/system/AtFork.h +116 -0
  868. package/external/folly/folly/system/AuxVector.h +198 -0
  869. package/external/folly/folly/system/BUCK +144 -0
  870. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  871. package/external/folly/folly/system/EnvUtil.h +113 -0
  872. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  873. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  874. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  875. package/external/folly/folly/system/MemoryMapping.h +287 -0
  876. package/external/folly/folly/system/Pid.cpp +87 -0
  877. package/external/folly/folly/system/Pid.h +34 -0
  878. package/external/folly/folly/system/Shell.cpp +33 -0
  879. package/external/folly/folly/system/Shell.h +93 -0
  880. package/external/folly/folly/system/ThreadId.cpp +89 -0
  881. package/external/folly/folly/system/ThreadId.h +62 -0
  882. package/external/folly/folly/system/ThreadName.cpp +330 -0
  883. package/external/folly/folly/system/ThreadName.h +72 -0
  884. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  885. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  886. package/external/folly/folly/system/test/BUCK +120 -0
  887. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  888. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  889. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  890. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  891. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  892. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  893. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  894. package/external/folly/folly.vcxitems +164 -0
  895. package/external/folly/static/logo.svg +1 -0
  896. package/external/folly/sync-config.json +8 -0
  897. package/package.json +6 -6
  898. package/template/cpp-lib/proj/MyLib.sln +0 -33
  899. package/template/cs-lib/proj/MyLib.sln +0 -33
  900. package/templates/cpp-app/windows/MyApp.sln +0 -33
  901. package/templates/cpp-lib/example/metro.config.js +30 -4
  902. package/templates/cpp-lib/windows/MyLib.sln +0 -33
  903. package/Folly/Folly.vcxproj +0 -378
  904. package/Folly/Folly.vcxproj.filters +0 -558
  905. package/fmt/fmt.vcxproj +0 -153
  906. package/fmt/fmt.vcxproj.filters +0 -59
  907. package/fmt/pch.cpp +0 -4
  908. package/fmt/pch.h +0 -2
  909. /package/{fmt → external/fmt}/cgmanifest.json +0 -0
  910. /package/{Folly → external/folly}/Folly.natvis +0 -0
  911. /package/{Folly → external/folly}/cgmanifest.json +0 -0
  912. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
  913. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
  914. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
  915. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
  916. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
  917. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
  918. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
  919. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
  920. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
  921. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
@@ -0,0 +1,880 @@
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 <functional>
20
+ #include <type_traits>
21
+
22
+ #include <boost/preprocessor/control/expr_iif.hpp>
23
+ #include <boost/preprocessor/facilities/is_empty_variadic.hpp>
24
+ #include <boost/preprocessor/list/for_each.hpp>
25
+ #include <boost/preprocessor/logical/not.hpp>
26
+ #include <boost/preprocessor/tuple/to_list.hpp>
27
+
28
+ #include <folly/CppAttributes.h>
29
+ #include <folly/Portability.h>
30
+ #include <folly/Preprocessor.h>
31
+ #include <folly/Traits.h>
32
+ #include <folly/Utility.h>
33
+ #include <folly/lang/CustomizationPoint.h>
34
+
35
+ #define FOLLY_DETAIL_FORWARD_REF(a) static_cast<decltype(a)&&>(a)
36
+
37
+ /**
38
+ * include or backport:
39
+ * * std::invoke
40
+ * * std::invoke_result
41
+ * * std::invoke_result_t
42
+ * * std::is_invocable
43
+ * * std::is_invocable_v
44
+ * * std::is_invocable_r
45
+ * * std::is_invocable_r_v
46
+ * * std::is_nothrow_invocable
47
+ * * std::is_nothrow_invocable_v
48
+ * * std::is_nothrow_invocable_r
49
+ * * std::is_nothrow_invocable_r_v
50
+ */
51
+
52
+ namespace folly {
53
+
54
+ // invoke_fn
55
+ // invoke
56
+ //
57
+ // mimic: std::invoke, C++17
58
+ struct invoke_fn {
59
+ template <typename F, typename... A>
60
+ FOLLY_ERASE constexpr auto operator()(F&& f, A&&... a) const
61
+ noexcept(noexcept(static_cast<F&&>(f)(static_cast<A&&>(a)...)))
62
+ -> decltype(static_cast<F&&>(f)(static_cast<A&&>(a)...)) {
63
+ return static_cast<F&&>(f)(static_cast<A&&>(a)...);
64
+ }
65
+ template <typename M, typename C, typename... A>
66
+ FOLLY_ERASE constexpr auto operator()(M C::*f, A&&... a) const
67
+ noexcept(noexcept(std::mem_fn(f)(static_cast<A&&>(a)...)))
68
+ -> decltype(std::mem_fn(f)(static_cast<A&&>(a)...)) {
69
+ return std::mem_fn(f)(static_cast<A&&>(a)...);
70
+ }
71
+ };
72
+
73
+ inline constexpr invoke_fn invoke;
74
+
75
+ } // namespace folly
76
+
77
+ namespace folly {
78
+
79
+ namespace invoke_detail {
80
+
81
+ // ok_one_
82
+ //
83
+ // A quoted-metafunction which, when applied to type T, enforces that T is a
84
+ // complete type, (possibly cv-qualified) void, or an array of unknown bound.
85
+ // Substitutes as void if that holds; otherwise fails a static-assert.
86
+ struct ok_one_ {
87
+ template <typename T>
88
+ static constexpr bool pass_v = ( //
89
+ std::is_void_v<T> || //
90
+ std::is_reference_v<T> || //
91
+ std::is_function_v<T> || //
92
+ is_unbounded_array_v<T> || //
93
+ false);
94
+
95
+ // note: void return type with no function body to enforce that, in the
96
+ // typical case of complete non-function types, to minimize the quantity of
97
+ // evaluations and instantiations
98
+ template <typename T, std::size_t = sizeof(T)>
99
+ static void test(int);
100
+
101
+ // note: auto return type with no trailing return type to force the
102
+ // instantiation of the function and, therefore, to force the
103
+ // evaluation of she static-assert
104
+ template <typename T>
105
+ static auto test(...) {
106
+ static_assert(pass_v<T>, "must be complete, cv-void, or unbounded-array");
107
+ return;
108
+ }
109
+
110
+ template <typename T>
111
+ using apply = decltype(test<T>(0));
112
+ };
113
+
114
+ // ok_
115
+ //
116
+ // Enforce that each A... is a complete type, (possibly cv-qualified) void, or
117
+ // an array of unknown bound. Substitutes as T if that holds; otherwise fails a
118
+ // static-assert.
119
+ //
120
+ // The reason to fail a static-assert and not, say, to fail to substitute is
121
+ // to force application to incomplete types to fail the compile rather than to
122
+ // allow the compile to succumb to ODR violation. The failing static-assert is
123
+ // a diagnosis of undefined behavior.
124
+ //
125
+ // See:
126
+ // https://en.cppreference.com/w/cpp/types/is_invocable
127
+ // https://github.com/gcc-mirror/gcc/blob/releases/gcc-13.2.0/libstdc%2B%2B-v3/include/std/type_traits#L272-L287
128
+ template <typename T, typename... A>
129
+ using ok_ = type_t<T, ok_one_::apply<A>...>;
130
+
131
+ template <typename F>
132
+ struct traits {
133
+ template <typename... A>
134
+ using result = decltype( //
135
+ FOLLY_DECLVAL(F&&)(FOLLY_DECLVAL(A&&)...));
136
+ #if defined(_MSC_VER) && defined(__NVCC__)
137
+ template <typename... A>
138
+ using nothrow_t = std::bool_constant<noexcept( //
139
+ FOLLY_DECLVAL(F&&)(FOLLY_DECLVAL(A&&)...))>;
140
+ #else
141
+ template <typename... A>
142
+ static constexpr bool nothrow_v = noexcept( //
143
+ FOLLY_DECLVAL(F&&)(FOLLY_DECLVAL(A&&)...));
144
+ #endif
145
+ };
146
+ template <typename P>
147
+ struct traits_member_ptr {
148
+ template <typename... A>
149
+ using result = decltype( //
150
+ std::mem_fn(FOLLY_DECLVAL(P))(FOLLY_DECLVAL(A&&)...));
151
+ #if defined(_MSC_VER) && defined(__NVCC__)
152
+ template <typename... A>
153
+ using nothrow_t = std::bool_constant<noexcept( //
154
+ std::mem_fn(FOLLY_DECLVAL(P))(FOLLY_DECLVAL(A&&)...))>;
155
+ #else
156
+ template <typename... A>
157
+ static constexpr bool nothrow_v = noexcept( //
158
+ std::mem_fn(FOLLY_DECLVAL(P))(FOLLY_DECLVAL(A&&)...));
159
+ #endif
160
+ };
161
+ template <typename M, typename C>
162
+ struct traits<M C::*> : traits_member_ptr<M C::*> {};
163
+ template <typename M, typename C>
164
+ struct traits<M C::*const> : traits_member_ptr<M C::*> {};
165
+ template <typename M, typename C>
166
+ struct traits<M C::*&> : traits_member_ptr<M C::*> {};
167
+ template <typename M, typename C>
168
+ struct traits<M C::*const&> : traits_member_ptr<M C::*> {};
169
+ template <typename M, typename C>
170
+ struct traits<M C::*&&> : traits_member_ptr<M C::*> {};
171
+ template <typename M, typename C>
172
+ struct traits<M C::*const&&> : traits_member_ptr<M C::*> {};
173
+
174
+ #if defined(_MSC_VER) && defined(__NVCC__)
175
+ template <typename P, typename... A>
176
+ using is_nothrow = traits<P>::template nothrow_t<A...>;
177
+ #else
178
+ template <typename P, typename... A>
179
+ using is_nothrow = std::bool_constant<traits<P>::template nothrow_v<A...>>;
180
+ #endif
181
+
182
+ template <bool IsVoid>
183
+ struct conv_r_;
184
+ template <>
185
+ struct conv_r_<true> {
186
+ template <bool NX, typename R, typename FR>
187
+ using apply = std::true_type;
188
+ };
189
+ template <>
190
+ struct conv_r_<false> {
191
+ template <typename R>
192
+ static void conv(R, decay_t<R>* = nullptr) noexcept;
193
+ template <
194
+ bool NX,
195
+ typename R,
196
+ typename FR,
197
+ bool C = noexcept(conv<R>(FOLLY_DECLVAL(FR)))>
198
+ static std::bool_constant<!NX || C> test(int);
199
+ template <bool NX, typename R, typename FR>
200
+ static std::false_type test(...);
201
+ template <bool NX, typename R, typename FR>
202
+ using apply = decltype(test<NX, R, FR>(0));
203
+ };
204
+
205
+ template <bool NX, typename R, typename FR>
206
+ static inline constexpr bool conv_r_v_ =
207
+ conv_r_<std::is_void_v<R>>::template apply<NX, R, FR>::value;
208
+
209
+ // adapted from: http://en.cppreference.com/w/cpp/types/result_of, CC-BY-SA
210
+
211
+ template <typename F, typename... A>
212
+ using invoke_result_t = typename traits<F>::template result<A...>;
213
+
214
+ template <typename Void, typename F, typename... A>
215
+ struct invoke_result {};
216
+
217
+ template <typename F, typename... A>
218
+ struct invoke_result<void_t<invoke_result_t<F, A...>>, F, A...> {
219
+ using type = invoke_result_t<F, A...>;
220
+ };
221
+
222
+ template <typename Void, typename F, typename... A>
223
+ inline constexpr bool is_invocable_v = ok_<bool, F, A...>{false};
224
+
225
+ template <typename F, typename... A>
226
+ inline constexpr bool
227
+ is_invocable_v<void_t<invoke_result_t<F, A...>>, F, A...> = true;
228
+
229
+ template <typename Void, typename R, typename F, typename... A>
230
+ inline constexpr bool is_invocable_r_v = ok_<bool, R, F, A...>{false};
231
+
232
+ // clang-format off
233
+ template <typename R, typename F, typename... A>
234
+ inline constexpr bool
235
+ is_invocable_r_v<void_t<invoke_result_t<F, A...>>, R, F, A...> =
236
+ conv_r_v_<false, R, invoke_result_t<F, A...>>;
237
+ // clang-format on
238
+
239
+ template <typename Void, typename F, typename... A>
240
+ inline constexpr bool is_nothrow_invocable_v = ok_<bool, F, A...>{false};
241
+
242
+ template <typename F, typename... A>
243
+ inline constexpr bool
244
+ is_nothrow_invocable_v<void_t<invoke_result_t<F, A...>>, F, A...> =
245
+ is_nothrow<F, A...>::value;
246
+
247
+ template <typename Void, typename R, typename F, typename... A>
248
+ inline constexpr bool is_nothrow_invocable_r_v = ok_<bool, R, F, A...>{false};
249
+
250
+ // clang-format off
251
+ template <typename R, typename F, typename... A>
252
+ inline constexpr bool
253
+ is_nothrow_invocable_r_v<void_t<invoke_result_t<F, A...>>, R, F, A...> =
254
+ is_nothrow<F, A...>::value &&
255
+ conv_r_v_<true, R, invoke_result_t<F, A...>>;
256
+ // clang-format on
257
+
258
+ } // namespace invoke_detail
259
+
260
+ // mimic: std::invoke_result, C++17
261
+ template <typename F, typename... A>
262
+ using invoke_result = invoke_detail::invoke_result<void, F, A...>;
263
+
264
+ // mimic: std::invoke_result_t, C++17
265
+ using invoke_detail::invoke_result_t;
266
+
267
+ // mimic: std::is_invocable_v, C++17
268
+ template <typename F, typename... A>
269
+ inline constexpr bool is_invocable_v =
270
+ invoke_detail::is_invocable_v<void, F, A...>;
271
+
272
+ // mimic: std::is_invocable, C++17
273
+ template <typename F, typename... A>
274
+ struct is_invocable : std::bool_constant<is_invocable_v<F, A...>> {};
275
+
276
+ // mimic: std::is_invocable_r_v, C++17
277
+ template <typename R, typename F, typename... A>
278
+ inline constexpr bool is_invocable_r_v =
279
+ invoke_detail::is_invocable_r_v<void, R, F, A...>;
280
+
281
+ // mimic: std::is_invocable_r, C++17
282
+ template <typename R, typename F, typename... A>
283
+ struct is_invocable_r : std::bool_constant<is_invocable_r_v<R, F, A...>> {};
284
+
285
+ // mimic: std::is_nothrow_invocable_v, C++17
286
+ template <typename F, typename... A>
287
+ inline constexpr bool is_nothrow_invocable_v =
288
+ invoke_detail::is_nothrow_invocable_v<void, F, A...>;
289
+
290
+ // mimic: std::is_nothrow_invocable, C++17
291
+ template <typename F, typename... A>
292
+ struct is_nothrow_invocable
293
+ : std::bool_constant<is_nothrow_invocable_v<F, A...>> {};
294
+
295
+ // mimic: std::is_nothrow_invocable_r_v, C++17
296
+ template <typename R, typename F, typename... Args>
297
+ inline constexpr bool is_nothrow_invocable_r_v =
298
+ invoke_detail::is_nothrow_invocable_r_v<void, R, F, Args...>;
299
+
300
+ // mimic: std::is_nothrow_invocable_r, C++17
301
+ template <typename R, typename F, typename... A>
302
+ struct is_nothrow_invocable_r
303
+ : std::bool_constant<is_nothrow_invocable_r_v<R, F, A...>> {};
304
+
305
+ } // namespace folly
306
+
307
+ namespace folly {
308
+
309
+ namespace detail {
310
+
311
+ struct invoke_private_overload;
312
+
313
+ template <bool, typename I>
314
+ struct invoke_traits_base_ {};
315
+ template <typename I>
316
+ struct invoke_traits_base_<false, I> {};
317
+ template <typename I>
318
+ struct invoke_traits_base_<true, I> {
319
+ inline static constexpr I invoke{};
320
+ };
321
+ template <typename I>
322
+ using invoke_traits_base =
323
+ invoke_traits_base_<is_constexpr_default_constructible_v<I>, I>;
324
+
325
+ } // namespace detail
326
+
327
+ // invoke_traits
328
+ //
329
+ // A traits container struct with the following member types, type aliases, and
330
+ // variables:
331
+ //
332
+ // * invoke_result
333
+ // * invoke_result_t
334
+ // * is_invocable
335
+ // * is_invocable_v
336
+ // * is_invocable_r
337
+ // * is_invocable_r_v
338
+ // * is_nothrow_invocable
339
+ // * is_nothrow_invocable_v
340
+ // * is_nothrow_invocable_r
341
+ // * is_nothrow_invocable_r_v
342
+ //
343
+ // These members have behavior matching the behavior of C++17's corresponding
344
+ // invocation traits types, type aliases, and variables, but using invoke_type
345
+ // as the invocable argument passed to the usual nivocation traits.
346
+ //
347
+ // The traits container struct also has a member type alias:
348
+ //
349
+ // * invoke_type
350
+ //
351
+ // And an invocable variable as a default-constructed instance of invoke_type,
352
+ // if the latter is constexpr default-constructible:
353
+ //
354
+ // * invoke
355
+ template <typename I>
356
+ struct invoke_traits : detail::invoke_traits_base<I> {
357
+ public:
358
+ using invoke_type = I;
359
+
360
+ // If invoke_type is constexpr default-constructible:
361
+ //
362
+ // inline static constexpr invoke_type invoke{};
363
+
364
+ template <typename... A>
365
+ using invoke_result = invoke_detail::invoke_result<void, I, A...>;
366
+ template <typename... A>
367
+ using invoke_result_t = invoke_detail::invoke_result_t<I, A...>;
368
+ template <typename... A>
369
+ inline static constexpr bool is_invocable_v =
370
+ invoke_detail::is_invocable_v<void, I, A...>;
371
+ template <typename... A>
372
+ struct is_invocable //
373
+ : std::bool_constant<invoke_detail::is_invocable_v<void, I, A...>> {};
374
+ template <typename R, typename... A>
375
+ inline static constexpr bool is_invocable_r_v =
376
+ invoke_detail::is_invocable_r_v<void, R, I, A...>;
377
+ template <typename R, typename... A>
378
+ struct is_invocable_r //
379
+ : std::bool_constant< //
380
+ invoke_detail::is_invocable_r_v<void, R, I, A...>> {};
381
+ template <typename... A>
382
+ inline static constexpr bool is_nothrow_invocable_v =
383
+ invoke_detail::is_nothrow_invocable_v<void, I, A...>;
384
+ template <typename... A>
385
+ struct is_nothrow_invocable //
386
+ : std::bool_constant<
387
+ invoke_detail::is_nothrow_invocable_v<void, I, A...>> {};
388
+ template <typename R, typename... A>
389
+ inline static constexpr bool is_nothrow_invocable_r_v =
390
+ invoke_detail::is_nothrow_invocable_r_v<void, R, I, A...>;
391
+ template <typename R, typename... A>
392
+ struct is_nothrow_invocable_r //
393
+ : std::bool_constant<
394
+ invoke_detail::is_nothrow_invocable_r_v<void, R, I, A...>> {};
395
+ };
396
+
397
+ // invoke_first_match
398
+ //
399
+ // A composite invoker which delegates to the first invoker parameter matching
400
+ // the call.
401
+ //
402
+ // Example:
403
+ //
404
+ // FOLLY_CREATE_QUAL_INVOKER(invoke_x_fn, x);
405
+ // FOLLY_CREATE_QUAL_INVOKER(invoke_y_fn, y);
406
+ //
407
+ // using invoke_x_or_y_fn = invoke_first_match<invoke_x_fn, invoke_y_fn>;
408
+ // inline constexpr invoke_x_or_y_fn invoke_x_or_y;
409
+ //
410
+ // void go(int a, int b) { invoke_x_or_y(a, b); }
411
+ //
412
+ // In this example, go(...) will delegate to x(...) if it exists and is a match
413
+ // for the arguments, or otherwise will delegate to y(...).
414
+ template <typename... Invoker>
415
+ struct invoke_first_match : private Invoker... {
416
+ private:
417
+ using iseq = std::index_sequence_for<Invoker...>;
418
+ template <size_t Idx>
419
+ using at = type_pack_element_t<Idx, Invoker...>;
420
+ template <size_t... Idx, typename... A>
421
+ static constexpr size_t first_(std::index_sequence<Idx...>, tag_t<A...>) {
422
+ constexpr bool r[] = {is_invocable_v<at<Idx> const&, A...>..., false};
423
+ for (size_t i = 0; i < sizeof...(Invoker); ++i) {
424
+ if (r[i]) {
425
+ return i;
426
+ }
427
+ }
428
+ return sizeof...(Invoker);
429
+ }
430
+ template <typename... A>
431
+ static constexpr size_t first = first_(iseq{}, tag<A...>);
432
+
433
+ public:
434
+ template <typename... A, typename Inv = at<first<A...>>>
435
+ FOLLY_ERASE constexpr auto operator()(A&&... a) const
436
+ noexcept(is_nothrow_invocable_v<Inv const&, A...>)
437
+ -> invoke_result_t<Inv const&, A...> {
438
+ return static_cast<Inv const&>(*this)(static_cast<A&&>(a)...);
439
+ }
440
+ };
441
+
442
+ } // namespace folly
443
+
444
+ #define FOLLY_DETAIL_CREATE_FREE_INVOKE_TRAITS_USING_1(_, funcname, ns) \
445
+ using ns::funcname;
446
+
447
+ #define FOLLY_DETAIL_CREATE_FREE_INVOKE_TRAITS_USING(_, funcname, ...) \
448
+ BOOST_PP_EXPR_IIF( \
449
+ BOOST_PP_NOT(BOOST_PP_IS_EMPTY(__VA_ARGS__)), \
450
+ BOOST_PP_LIST_FOR_EACH( \
451
+ FOLLY_DETAIL_CREATE_FREE_INVOKE_TRAITS_USING_1, \
452
+ funcname, \
453
+ BOOST_PP_TUPLE_TO_LIST((__VA_ARGS__))))
454
+
455
+ /***
456
+ * FOLLY_CREATE_FREE_INVOKER
457
+ *
458
+ * Used to create an invoker type bound to a specific free-invocable name.
459
+ *
460
+ * Example:
461
+ *
462
+ * FOLLY_CREATE_FREE_INVOKER(foo_invoker, foo);
463
+ *
464
+ * The type `foo_invoker` is generated in the current namespace and may be used
465
+ * as follows:
466
+ *
467
+ * namespace Deep {
468
+ * struct CanFoo {};
469
+ * int foo(CanFoo const&, Bar&) { return 1; }
470
+ * int foo(CanFoo&&, Car&&) noexcept { return 2; }
471
+ * }
472
+ *
473
+ * using traits = folly::invoke_traits<foo_invoker>;
474
+ *
475
+ * traits::invoke(Deep::CanFoo{}, Car{}) // 2
476
+ *
477
+ * traits::invoke_result<Deep::CanFoo, Bar&> // has member
478
+ * traits::invoke_result_t<Deep::CanFoo, Bar&> // int
479
+ * traits::invoke_result<Deep::CanFoo, Bar&&> // empty
480
+ * traits::invoke_result_t<Deep::CanFoo, Bar&&> // error
481
+ *
482
+ * traits::is_invocable_v<CanFoo, Bar&> // true
483
+ * traits::is_invocable_v<CanFoo, Bar&&> // false
484
+ *
485
+ * traits::is_invocable_r_v<int, CanFoo, Bar&> // true
486
+ * traits::is_invocable_r_v<char*, CanFoo, Bar&> // false
487
+ *
488
+ * traits::is_nothrow_invocable_v<CanFoo, Bar&> // false
489
+ * traits::is_nothrow_invocable_v<CanFoo, Car&&> // true
490
+ *
491
+ * traits::is_nothrow_invocable_v<int, CanFoo, Bar&> // false
492
+ * traits::is_nothrow_invocable_v<char*, CanFoo, Bar&> // false
493
+ * traits::is_nothrow_invocable_v<int, CanFoo, Car&&> // true
494
+ * traits::is_nothrow_invocable_v<char*, CanFoo, Car&&> // false
495
+ *
496
+ * When a name has one or more primary definition in a fixed set of namespaces
497
+ * and alternate definitions in the namespaces of its arguments, the primary
498
+ * definitions may automatically be found as follows:
499
+ *
500
+ * FOLLY_CREATE_FREE_INVOKER(swap_invoker, swap, std);
501
+ *
502
+ * In this case, `swap_invoke_traits::invoke(int&, int&)` will use the primary
503
+ * definition found in `namespace std` relative to the current namespace, which
504
+ * may be equivalent to `namespace ::std`. In contrast:
505
+ *
506
+ * namespace Deep {
507
+ * struct HasData {};
508
+ * void swap(HasData&, HasData&) { throw 7; }
509
+ * }
510
+ *
511
+ * using traits = invoke_traits<swap_invoker>;
512
+ *
513
+ * HasData a, b;
514
+ * traits::invoke(a, b); // throw 7
515
+ */
516
+ #define FOLLY_CREATE_FREE_INVOKER(classname, funcname, ...) \
517
+ namespace classname##__folly_detail_invoke_ns { \
518
+ [[maybe_unused]] void funcname(::folly::detail::invoke_private_overload&); \
519
+ FOLLY_DETAIL_CREATE_FREE_INVOKE_TRAITS_USING(_, funcname, __VA_ARGS__) \
520
+ struct __folly_detail_invoke_obj { \
521
+ template <typename... Args> \
522
+ [[maybe_unused]] FOLLY_ERASE_HACK_GCC constexpr auto operator()( \
523
+ Args&&... args) const \
524
+ noexcept(noexcept(funcname(static_cast<Args&&>(args)...))) \
525
+ -> decltype(funcname(static_cast<Args&&>(args)...)) { \
526
+ return funcname(static_cast<Args&&>(args)...); \
527
+ } \
528
+ }; \
529
+ } \
530
+ struct classname \
531
+ : classname##__folly_detail_invoke_ns::__folly_detail_invoke_obj {}
532
+
533
+ /***
534
+ * FOLLY_CREATE_FREE_INVOKER_SUITE
535
+ *
536
+ * Used to create an invoker type and associated variable bound to a specific
537
+ * free-invocable name. The invoker variable is named like the free-invocable
538
+ * name and the invoker type is named with a suffix of _fn.
539
+ *
540
+ * See FOLLY_CREATE_FREE_INVOKER.
541
+ */
542
+ #define FOLLY_CREATE_FREE_INVOKER_SUITE(funcname, ...) \
543
+ FOLLY_CREATE_FREE_INVOKER(funcname##_fn, funcname, __VA_ARGS__); \
544
+ [[maybe_unused]] inline constexpr funcname##_fn funcname {}
545
+
546
+ /***
547
+ * FOLLY_CREATE_QUAL_INVOKER
548
+ *
549
+ * Used to create an invoker type bound to a specific free-invocable qualified
550
+ * name. It is permitted that the qualification be empty and that the name be
551
+ * unqualified in practice. This differs from FOLLY_CREATE_FREE_INVOKER in that
552
+ * it is required that the name be in scope and that it is not possible to
553
+ * provide a list of namespaces in which to look up the name..
554
+ */
555
+ #define FOLLY_CREATE_QUAL_INVOKER(classname, funcpath) \
556
+ struct classname { \
557
+ template <typename... A> \
558
+ [[maybe_unused]] FOLLY_ERASE_HACK_GCC constexpr auto operator()(A&&... a) \
559
+ const FOLLY_DETAIL_FORWARD_BODY(funcpath(static_cast<A&&>(a)...)) \
560
+ }
561
+
562
+ /***
563
+ * FOLLY_CREATE_QUAL_INVOKER_SUITE
564
+ *
565
+ * Used to create an invoker type and associated variable bound to a specific
566
+ * free-invocable qualified name.
567
+ *
568
+ * See FOLLY_CREATE_QUAL_INVOKER.
569
+ */
570
+ #define FOLLY_CREATE_QUAL_INVOKER_SUITE(name, funcpath) \
571
+ FOLLY_CREATE_QUAL_INVOKER(name##_fn, funcpath); \
572
+ [[maybe_unused]] inline constexpr name##_fn name {}
573
+
574
+ /***
575
+ * FOLLY_INVOKE_QUAL
576
+ *
577
+ * An invoker expression resulting in an invocable which, when invoked, invokes
578
+ * the free-invocable qualified name with the given arguments.
579
+ */
580
+ #define FOLLY_INVOKE_QUAL(funcpath) \
581
+ [](auto&&... __folly_param_a) constexpr FOLLY_DETAIL_FORWARD_BODY( \
582
+ funcpath(FOLLY_DETAIL_FORWARD_REF(__folly_param_a)...))
583
+
584
+ /***
585
+ * FOLLY_CREATE_MEMBER_INVOKER
586
+ *
587
+ * Used to create an invoker type bound to a specific member-invocable name.
588
+ *
589
+ * Example:
590
+ *
591
+ * FOLLY_CREATE_MEMBER_INVOKER(foo_invoker, foo);
592
+ *
593
+ * The type `foo_invoker` is generated in the current namespace and may be used
594
+ * as follows:
595
+ *
596
+ * struct CanFoo {
597
+ * int foo(Bar&) { return 1; }
598
+ * int foo(Car&&) noexcept { return 2; }
599
+ * };
600
+ *
601
+ * using traits = folly::invoke_traits<foo_invoker>;
602
+ *
603
+ * traits::invoke(CanFoo{}, Car{}) // 2
604
+ *
605
+ * traits::invoke_result<CanFoo, Bar&> // has member
606
+ * traits::invoke_result_t<CanFoo, Bar&> // int
607
+ * traits::invoke_result<CanFoo, Bar&&> // empty
608
+ * traits::invoke_result_t<CanFoo, Bar&&> // error
609
+ *
610
+ * traits::is_invocable_v<CanFoo, Bar&> // true
611
+ * traits::is_invocable_v<CanFoo, Bar&&> // false
612
+ *
613
+ * traits::is_invocable_r_v<int, CanFoo, Bar&> // true
614
+ * traits::is_invocable_r_v<char*, CanFoo, Bar&> // false
615
+ *
616
+ * traits::is_nothrow_invocable_v<CanFoo, Bar&> // false
617
+ * traits::is_nothrow_invocable_v<CanFoo, Car&&> // true
618
+ *
619
+ * traits::is_nothrow_invocable_v<int, CanFoo, Bar&> // false
620
+ * traits::is_nothrow_invocable_v<char*, CanFoo, Bar&> // false
621
+ * traits::is_nothrow_invocable_v<int, CanFoo, Car&&> // true
622
+ * traits::is_nothrow_invocable_v<char*, CanFoo, Car&&> // false
623
+ */
624
+ #define FOLLY_CREATE_MEMBER_INVOKER(classname, membername) \
625
+ struct classname { \
626
+ template <typename O, typename... Args> \
627
+ [[maybe_unused]] FOLLY_ERASE_HACK_GCC constexpr auto operator()( \
628
+ O&& o, Args&&... args) const \
629
+ noexcept(noexcept( \
630
+ static_cast<O&&>(o).membername(static_cast<Args&&>(args)...))) \
631
+ -> decltype(static_cast<O&&>(o).membername( \
632
+ static_cast<Args&&>(args)...)) { \
633
+ return static_cast<O&&>(o).membername(static_cast<Args&&>(args)...); \
634
+ } \
635
+ }
636
+
637
+ /***
638
+ * FOLLY_CREATE_MEMBER_INVOKER_SUITE
639
+ *
640
+ * Used to create an invoker type and associated variable bound to a specific
641
+ * member-invocable name. The invoker variable is named like the member-
642
+ * invocable name and the invoker type is named with a suffix of _fn.
643
+ *
644
+ * See FOLLY_CREATE_MEMBER_INVOKER.
645
+ */
646
+ #define FOLLY_CREATE_MEMBER_INVOKER_SUITE(membername) \
647
+ FOLLY_CREATE_MEMBER_INVOKER(membername##_fn, membername); \
648
+ [[maybe_unused]] inline constexpr membername##_fn membername {}
649
+
650
+ /***
651
+ * FOLLY_INVOKE_MEMBER
652
+ *
653
+ * An invoker expression resulting in an invocable which, when invoked, invokes
654
+ * the member on the object with the given arguments.
655
+ *
656
+ * Example:
657
+ *
658
+ * FOLLY_INVOKE_MEMBER(find)(map, key)
659
+ *
660
+ * Equivalent to:
661
+ *
662
+ * map.find(key)
663
+ *
664
+ * But also equivalent to:
665
+ *
666
+ * std::invoke(FOLLY_INVOKE_MEMBER(find), map, key)
667
+ *
668
+ * As an implementation detail, the resulting callable is a lambda. This has
669
+ * two observable consequences.
670
+ * * Since C++17 only, lambda invocations may be marked constexpr.
671
+ * * Since C++20 only, lambda definitions may appear in an unevaluated context,
672
+ * namely, in an operand to decltype, noexcept, sizeof, or typeid.
673
+ */
674
+ #define FOLLY_INVOKE_MEMBER(membername) \
675
+ [](auto&& __folly_param_o, auto&&... __folly_param_a) constexpr FOLLY_DETAIL_FORWARD_BODY( \
676
+ FOLLY_DETAIL_FORWARD_REF(__folly_param_o) \
677
+ .membername(FOLLY_DETAIL_FORWARD_REF(__folly_param_a)...))
678
+
679
+ /***
680
+ * FOLLY_CREATE_STATIC_MEMBER_INVOKER
681
+ *
682
+ * Used to create an invoker type template bound to a specific static-member-
683
+ * invocable name.
684
+ *
685
+ * Example:
686
+ *
687
+ * FOLLY_CREATE_STATIC_MEMBER_INVOKER(foo_invoker, foo);
688
+ *
689
+ * The type template `foo_invoker` is generated in the current namespace and
690
+ * may be used as follows:
691
+ *
692
+ * struct CanFoo {
693
+ * static int foo(Bar&) { return 1; }
694
+ * static int foo(Car&&) noexcept { return 2; }
695
+ * };
696
+ *
697
+ * using traits = folly::invoke_traits<foo_invoker<CanFoo>>;
698
+ *
699
+ * traits::invoke(Car{}) // 2
700
+ *
701
+ * traits::invoke_result<Bar&> // has member
702
+ * traits::invoke_result_t<Bar&> // int
703
+ * traits::invoke_result<Bar&&> // empty
704
+ * traits::invoke_result_t<Bar&&> // error
705
+ *
706
+ * traits::is_invocable_v<Bar&> // true
707
+ * traits::is_invocable_v<Bar&&> // false
708
+ *
709
+ * traits::is_invocable_r_v<int, Bar&> // true
710
+ * traits::is_invocable_r_v<char*, Bar&> // false
711
+ *
712
+ * traits::is_nothrow_invocable_v<Bar&> // false
713
+ * traits::is_nothrow_invocable_v<Car&&> // true
714
+ *
715
+ * traits::is_nothrow_invocable_v<int, Bar&> // false
716
+ * traits::is_nothrow_invocable_v<char*, Bar&> // false
717
+ * traits::is_nothrow_invocable_v<int, Car&&> // true
718
+ * traits::is_nothrow_invocable_v<char*, Car&&> // false
719
+ */
720
+ #define FOLLY_CREATE_STATIC_MEMBER_INVOKER(classname, membername) \
721
+ template <typename T> \
722
+ struct classname { \
723
+ template <typename... Args, typename U = T> \
724
+ [[maybe_unused]] FOLLY_ERASE_HACK_GCC constexpr auto operator()( \
725
+ Args&&... args) const \
726
+ noexcept(noexcept(U::membername(static_cast<Args&&>(args)...))) \
727
+ -> decltype(U::membername(static_cast<Args&&>(args)...)) { \
728
+ return U::membername(static_cast<Args&&>(args)...); \
729
+ } \
730
+ }
731
+
732
+ /***
733
+ * FOLLY_CREATE_STATIC_MEMBER_INVOKER_SUITE
734
+ *
735
+ * Used to create an invoker type template and associated variable template
736
+ * bound to a specific static-member-invocable name. The invoker variable
737
+ * template is named like the static-member-invocable name and the invoker type
738
+ * template is named with a suffix of _fn.
739
+ *
740
+ * See FOLLY_CREATE_STATIC_MEMBER_INVOKER.
741
+ */
742
+ #define FOLLY_CREATE_STATIC_MEMBER_INVOKER_SUITE(membername) \
743
+ FOLLY_CREATE_STATIC_MEMBER_INVOKER(membername##_fn, membername); \
744
+ template <typename T> \
745
+ [[maybe_unused]] inline constexpr membername##_fn<T> membername {}
746
+
747
+ namespace folly {
748
+
749
+ namespace detail_tag_invoke_fn {
750
+
751
+ void tag_invoke();
752
+
753
+ struct tag_invoke_fn {
754
+ template <typename Tag, typename... Args>
755
+ constexpr auto operator()(Tag tag, Args&&... args) const noexcept(noexcept(
756
+ tag_invoke(static_cast<Tag&&>(tag), static_cast<Args&&>(args)...)))
757
+ -> decltype(tag_invoke(
758
+ static_cast<Tag&&>(tag), static_cast<Args&&>(args)...)) {
759
+ return tag_invoke(static_cast<Tag&&>(tag), static_cast<Args&&>(args)...);
760
+ }
761
+ };
762
+
763
+ // Manually implement the traits here rather than defining them in terms of
764
+ // the corresponding std::invoke_result/is_invocable/is_nothrow_invocable
765
+ // traits to improve compile-times. We don't need all of the generality of
766
+ // the std:: traits and the tag_invoke traits can be used heavily in CPO-based
767
+ // code so optimising them for compile times can make a big difference.
768
+
769
+ // Use the immediately-invoked function-pointer trick here to avoid
770
+ // instantiating the std::declval<T>() template.
771
+
772
+ template <typename Tag, typename... Args>
773
+ using tag_invoke_result_t = decltype(tag_invoke(
774
+ static_cast<Tag && (*)() noexcept>(nullptr)(),
775
+ static_cast<Args && (*)() noexcept>(nullptr)()...));
776
+
777
+ template <typename Tag, typename... Args>
778
+ auto try_tag_invoke(int) noexcept(
779
+ noexcept(tag_invoke(FOLLY_DECLVAL(Tag&&), FOLLY_DECLVAL(Args&&)...)))
780
+ -> decltype(static_cast<void>(tag_invoke(FOLLY_DECLVAL(Tag&&), FOLLY_DECLVAL(Args&&)...)), std::true_type{});
781
+
782
+ template <typename Tag, typename... Args>
783
+ std::false_type try_tag_invoke(...) noexcept(false);
784
+
785
+ template <template <typename...> class T, typename... Args>
786
+ struct defer {
787
+ using type = T<Args...>;
788
+ };
789
+
790
+ struct empty {};
791
+
792
+ } // namespace detail_tag_invoke_fn
793
+
794
+ // The expression folly::tag_invoke(tag, args...) is equivalent to performing
795
+ // a call to the expression tag_invoke(tag, args...) using argument-dependent
796
+ // lookup (ADL).
797
+ //
798
+ // This is intended to be used by customization-point objects, which dispatch
799
+ // a call to the CPO to an ADL call to tag_invoke(cpo, args...), using the type
800
+ // of the first argument to disambiguate between customisations for different
801
+ // CPOs rather than using different ADL names for this.
802
+ //
803
+ // For example: Defining a new CPO in terms of tag_invoke.
804
+ // struct FooCpo {
805
+ // template<typename A, typename B>
806
+ // auto operator()(A&& a, B&& b) const
807
+ // noexcept(folly::is_nothrow_tag_invocable_v<FooCpo, A, B>)
808
+ // -> folly::tag_invoke_result_t<FooCpo, A, B> {
809
+ // return folly::tag_invoke(*this, (A&&)a, (B&&)b);
810
+ // }
811
+ // };
812
+ // FOLLY_DEFINE_CPO(FooCpo, Foo)
813
+ //
814
+ // And then customising the Foo CPO for a particular type:
815
+ // class SomeType {
816
+ // ...
817
+ // template<typename B>
818
+ // friend int tag_invoke(folly::cpo_t<Foo>, const SomeType& a, B&& b) {
819
+ // // implementation goes here
820
+ // }
821
+ // };
822
+ //
823
+ // For more details see the C++ standards proposal: https://wg21.link/P1895R0.
824
+ FOLLY_DEFINE_CPO(detail_tag_invoke_fn::tag_invoke_fn, tag_invoke)
825
+
826
+ // Query if the 'folly::tag_invoke()' CPO can be invoked with a tag and
827
+ // arguments of the the specified types.
828
+ //
829
+ // This checks whether an overload of the free-function tag_invoke() found
830
+ // by ADL can be invoked with the specified types.
831
+
832
+ template <typename Tag, typename... Args>
833
+ inline constexpr bool is_tag_invocable_v =
834
+ decltype(detail_tag_invoke_fn::try_tag_invoke<Tag, Args...>(0))::value;
835
+
836
+ template <typename Tag, typename... Args>
837
+ struct is_tag_invocable //
838
+ : std::bool_constant<is_tag_invocable_v<Tag, Args...>> {};
839
+
840
+ // Query whether the 'folly::tag_invoke()' CPO can be invoked with a tag
841
+ // and arguments of the specified type and that such an invocation is
842
+ // noexcept.
843
+
844
+ template <typename Tag, typename... Args>
845
+ inline constexpr bool is_nothrow_tag_invocable_v =
846
+ noexcept(detail_tag_invoke_fn::try_tag_invoke<Tag, Args...>(0));
847
+
848
+ template <typename Tag, typename... Args>
849
+ struct is_nothrow_tag_invocable
850
+ : std::bool_constant<is_nothrow_tag_invocable_v<Tag, Args...>> {};
851
+
852
+ // Versions of the above that check in addition that the result is
853
+ // convertible to the given return type R.
854
+
855
+ template <typename R, typename Tag, typename... Args>
856
+ using is_tag_invocable_r =
857
+ folly::is_invocable_r<R, decltype(folly::tag_invoke), Tag, Args...>;
858
+
859
+ template <typename R, typename Tag, typename... Args>
860
+ inline constexpr bool is_tag_invocable_r_v =
861
+ is_tag_invocable_r<R, Tag, Args...>::value;
862
+
863
+ template <typename R, typename Tag, typename... Args>
864
+ using is_nothrow_tag_invocable_r =
865
+ folly::is_nothrow_invocable_r<R, decltype(folly::tag_invoke), Tag, Args...>;
866
+
867
+ template <typename R, typename Tag, typename... Args>
868
+ inline constexpr bool is_nothrow_tag_invocable_r_v =
869
+ is_nothrow_tag_invocable_r<R, Tag, Args...>::value;
870
+
871
+ using detail_tag_invoke_fn::tag_invoke_result_t;
872
+
873
+ template <typename Tag, typename... Args>
874
+ struct tag_invoke_result
875
+ : conditional_t<
876
+ is_tag_invocable_v<Tag, Args...>,
877
+ detail_tag_invoke_fn::defer<tag_invoke_result_t, Tag, Args...>,
878
+ detail_tag_invoke_fn::empty> {};
879
+
880
+ } // namespace folly