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,891 @@
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 <atomic>
20
+ #include <chrono>
21
+ #include <memory>
22
+
23
+ #include <glog/logging.h>
24
+
25
+ #include <folly/ConstexprMath.h>
26
+ #include <folly/Optional.h>
27
+ #include <folly/Traits.h>
28
+ #include <folly/concurrency/CacheLocality.h>
29
+ #include <folly/lang/Align.h>
30
+ #include <folly/synchronization/Hazptr.h>
31
+ #include <folly/synchronization/SaturatingSemaphore.h>
32
+ #include <folly/synchronization/WaitOptions.h>
33
+ #include <folly/synchronization/detail/Spin.h>
34
+
35
+ namespace folly {
36
+
37
+ /// UnboundedQueue supports a variety of options for unbounded
38
+ /// dynamically expanding an shrinking queues, including variations of:
39
+ /// - Single vs. multiple producers
40
+ /// - Single vs. multiple consumers
41
+ /// - Blocking vs. spin-waiting
42
+ /// - Non-waiting, timed, and waiting consumer operations.
43
+ /// Producer operations never wait or fail (unless out-of-memory).
44
+ ///
45
+ /// Template parameters:
46
+ /// - T: element type
47
+ /// - SingleProducer: true if there can be only one producer at a
48
+ /// time.
49
+ /// - SingleConsumer: true if there can be only one consumer at a
50
+ /// time.
51
+ /// - MayBlock: true if consumers may block, false if they only
52
+ /// spin. A performance tuning parameter.
53
+ /// - LgSegmentSize (default 8): Log base 2 of number of elements per
54
+ /// segment. A performance tuning parameter. See below.
55
+ /// - LgAlign (default 7): Log base 2 of alignment directive; can be
56
+ /// used to balance scalability (avoidance of false sharing) with
57
+ /// memory efficiency.
58
+ ///
59
+ /// When to use UnboundedQueue:
60
+ /// - If a small bound may lead to deadlock or performance degradation
61
+ /// under bursty patterns.
62
+ /// - If there is no risk of the queue growing too much.
63
+ ///
64
+ /// When not to use UnboundedQueue:
65
+ /// - If there is risk of the queue growing too much and a large bound
66
+ /// is acceptable, then use DynamicBoundedQueue.
67
+ /// - If the queue must not allocate on enqueue or it must have a
68
+ /// small bound, then use fixed-size MPMCQueue or (if non-blocking
69
+ /// SPSC) ProducerConsumerQueue.
70
+ ///
71
+ /// Template Aliases:
72
+ /// USPSCQueue<T, MayBlock, LgSegmentSize, LgAlign>
73
+ /// UMPSCQueue<T, MayBlock, LgSegmentSize, LgAlign>
74
+ /// USPMCQueue<T, MayBlock, LgSegmentSize, LgAlign>
75
+ /// UMPMCQueue<T, MayBlock, LgSegmentSize, LgAlign>
76
+ ///
77
+ /// Functions:
78
+ /// Producer operations never wait or fail (unless OOM)
79
+ /// void enqueue(const T&);
80
+ /// void enqueue(T&&);
81
+ /// Adds an element to the end of the queue.
82
+ ///
83
+ /// Consumer operations:
84
+ /// void dequeue(T&);
85
+ /// T dequeue();
86
+ /// Extracts an element from the front of the queue. Waits
87
+ /// until an element is available if needed.
88
+ /// bool try_dequeue(T&);
89
+ /// folly::Optional<T> try_dequeue();
90
+ /// Tries to extract an element from the front of the queue
91
+ /// if available.
92
+ /// bool try_dequeue_until(T&, time_point& deadline);
93
+ /// folly::Optional<T> try_dequeue_until(time_point& deadline);
94
+ /// Tries to extract an element from the front of the queue
95
+ /// if available until the specified deadline.
96
+ /// bool try_dequeue_for(T&, duration&);
97
+ /// folly::Optional<T> try_dequeue_for(duration&);
98
+ /// Tries to extract an element from the front of the queue if
99
+ /// available until the expiration of the specified duration.
100
+ /// const T* try_peek();
101
+ /// Returns pointer to the element at the front of the queue
102
+ /// if available, or nullptr if the queue is empty. Only for
103
+ /// SPSC and MPSC.
104
+ ///
105
+ /// Secondary functions:
106
+ /// size_t size();
107
+ /// Returns an estimate of the size of the queue.
108
+ /// bool empty();
109
+ /// Returns true only if the queue was empty during the call.
110
+ /// Note: size() and empty() are guaranteed to be accurate only if
111
+ /// the queue is not changed concurrently.
112
+ ///
113
+ /// Usage examples:
114
+ /// @code
115
+ /// /* UMPSC, doesn't block, 1024 int elements per segment */
116
+ /// UMPSCQueue<int, false, 10> q;
117
+ /// q.enqueue(1);
118
+ /// q.enqueue(2);
119
+ /// q.enqueue(3);
120
+ /// ASSERT_FALSE(q.empty());
121
+ /// ASSERT_EQ(q.size(), 3);
122
+ /// int v;
123
+ /// q.dequeue(v);
124
+ /// ASSERT_EQ(v, 1);
125
+ /// ASSERT_TRUE(try_dequeue(v));
126
+ /// ASSERT_EQ(v, 2);
127
+ /// ASSERT_TRUE(try_dequeue_until(v, now() + seconds(1)));
128
+ /// ASSERT_EQ(v, 3);
129
+ /// ASSERT_TRUE(q.empty());
130
+ /// ASSERT_EQ(q.size(), 0);
131
+ /// ASSERT_FALSE(try_dequeue(v));
132
+ /// ASSERT_FALSE(try_dequeue_for(v, microseconds(100)));
133
+ /// @endcode
134
+ ///
135
+ /// Design:
136
+ /// - The queue is composed of one or more segments. Each segment has
137
+ /// a fixed size of 2^LgSegmentSize entries. Each segment is used
138
+ /// exactly once.
139
+ /// - Each entry is composed of a futex and a single element.
140
+ /// - Each segment's array of entries is strided to avoid false sharing.
141
+ /// I.e., to reduce any cacheline contention that might be induced by
142
+ /// concurrent mutations to the queue that might happen to affect
143
+ /// otherwise-adjacent locations that might happen to share cacheline.
144
+ /// - The queue contains two 64-bit ticket variables. The producer
145
+ /// ticket counts the number of producer tickets issued so far, and
146
+ /// the same for the consumer ticket. Each ticket number corresponds
147
+ /// to a specific entry in a specific segment.
148
+ /// - The queue maintains two pointers, head and tail. Head points to
149
+ /// the segment that corresponds to the current consumer
150
+ /// ticket. Similarly, tail pointer points to the segment that
151
+ /// corresponds to the producer ticket.
152
+ /// - Segments are organized as a singly linked list.
153
+ /// - The producer with the first ticket in the current producer
154
+ /// segment has primary responsibility for allocating and linking
155
+ /// the next segment. Other producers and connsumers may help do so
156
+ /// when needed if that thread is delayed.
157
+ /// - The producer with the last ticket in the current producer
158
+ /// segment is primarily responsible for advancing the tail pointer
159
+ /// to the next segment. Other producers and consumers may help do
160
+ /// so when needed if that thread is delayed.
161
+ /// - Similarly, the consumer with the last ticket in the current
162
+ /// consumer segment is primarily responsible for advancing the head
163
+ /// pointer to the next segment. Other consumers may help do so when
164
+ /// needed if that thread is delayed.
165
+ /// - The tail pointer must not lag behind the head pointer.
166
+ /// Otherwise, the algorithm cannot be certain about the removal of
167
+ /// segment and would have to incur higher costs to ensure safe
168
+ /// reclamation. Consumers must ensure that head never overtakes
169
+ /// tail.
170
+ ///
171
+ /// Memory Usage:
172
+ /// - An empty queue contains one segment. A nonempty queue contains
173
+ /// one or two more segment than fits its contents.
174
+ /// - Removed segments are not reclaimed until there are no threads,
175
+ /// producers or consumers, with references to them or their
176
+ /// predecessors. That is, a lagging thread may delay the reclamation
177
+ /// of a chain of removed segments.
178
+ /// - The template parameter LgAlign can be used to reduce memory usage
179
+ /// at the cost of increased chance of false sharing.
180
+ ///
181
+ /// Performance considerations:
182
+ /// - All operations take constant time, excluding the costs of
183
+ /// allocation, reclamation, interference from other threads, and
184
+ /// waiting for actions by other threads.
185
+ /// - In general, using the single producer and or single consumer
186
+ /// variants yield better performance than the MP and MC
187
+ /// alternatives.
188
+ /// - SPSC without blocking is the fastest configuration. It doesn't
189
+ /// include any read-modify-write atomic operations, full fences, or
190
+ /// system calls in the critical path.
191
+ /// - MP adds a fetch_add to the critical path of each producer operation.
192
+ /// - MC adds a fetch_add or compare_exchange to the critical path of
193
+ /// each consumer operation.
194
+ /// - The possibility of consumers blocking, even if they never do,
195
+ /// adds a compare_exchange to the critical path of each producer
196
+ /// operation.
197
+ /// - MPMC, SPMC, MPSC require the use of a deferred reclamation
198
+ /// mechanism to guarantee that segments removed from the linked
199
+ /// list, i.e., unreachable from the head pointer, are reclaimed
200
+ /// only after they are no longer needed by any lagging producers or
201
+ /// consumers.
202
+ /// - The overheads of segment allocation and reclamation are intended
203
+ /// to be mostly out of the critical path of the queue's throughput.
204
+ /// - If the template parameter LgSegmentSize is changed, it should be
205
+ /// set adequately high to keep the amortized cost of allocation and
206
+ /// reclamation low.
207
+ /// - It is recommended to measure performance with different variants
208
+ /// when applicable, e.g., UMPMC vs UMPSC. Depending on the use
209
+ /// case, sometimes the variant with the higher sequential overhead
210
+ /// may yield better results due to, for example, more favorable
211
+ /// producer-consumer balance or favorable timing for avoiding
212
+ /// costly blocking.
213
+ ///
214
+ /// Guarantees:
215
+ /// - The queues are linearizable:
216
+ /// - For two enqueue operations q(A) and q(B), if q(A) < q(B) in
217
+ /// the happens-before relation, then A precedes B in the queue.
218
+ /// - For two dequeue operations d(A) and d(B), if d(A) < d(B) in
219
+ /// the happens-before relation, then A preceded B in the queue.
220
+
221
+ template <
222
+ typename T,
223
+ bool SingleProducer,
224
+ bool SingleConsumer,
225
+ bool MayBlock,
226
+ size_t LgSegmentSize = 8,
227
+ size_t LgAlign = constexpr_log2(hardware_destructive_interference_size),
228
+ template <typename> class Atom = std::atomic>
229
+ class UnboundedQueue {
230
+ using Ticket = uint64_t;
231
+ class Entry;
232
+ class Segment;
233
+
234
+ static constexpr bool SPSC = SingleProducer && SingleConsumer;
235
+ static constexpr size_t Stride = SPSC || (LgSegmentSize <= 1) ? 1 : 27;
236
+ static constexpr size_t SegmentSize = 1u << LgSegmentSize;
237
+ static constexpr size_t Align = 1u << LgAlign;
238
+
239
+ static_assert(
240
+ std::is_nothrow_destructible<T>::value, "T must be nothrow_destructible");
241
+ static_assert((Stride & 1) == 1, "Stride must be odd");
242
+ static_assert(LgSegmentSize < 32, "LgSegmentSize must be < 32");
243
+ static_assert(LgAlign < 16, "LgAlign must be < 16");
244
+
245
+ using Sem = folly::SaturatingSemaphore<MayBlock, Atom>;
246
+
247
+ struct Consumer {
248
+ Atom<Segment*> head;
249
+ Atom<Ticket> ticket;
250
+ hazptr_obj_cohort<Atom> cohort;
251
+ explicit Consumer(Segment* s) : head(s), ticket(0) {
252
+ s->set_cohort_no_tag(&cohort); // defined in hazptr_obj
253
+ }
254
+ };
255
+ struct Producer {
256
+ Atom<Segment*> tail;
257
+ Atom<Ticket> ticket;
258
+ explicit Producer(Segment* s) : tail(s), ticket(0) {}
259
+ };
260
+
261
+ alignas(Align) Consumer c_;
262
+ alignas(Align) Producer p_;
263
+
264
+ public:
265
+ using value_type = T;
266
+ using size_type = size_t;
267
+
268
+ /** constructor */
269
+ UnboundedQueue()
270
+ : c_(new Segment(0)), p_(c_.head.load(std::memory_order_relaxed)) {}
271
+
272
+ /** destructor */
273
+ ~UnboundedQueue() {
274
+ cleanUpRemainingItems();
275
+ reclaimRemainingSegments();
276
+ }
277
+
278
+ /** enqueue */
279
+ FOLLY_ALWAYS_INLINE void enqueue(const T& arg) { enqueueImpl(arg); }
280
+
281
+ FOLLY_ALWAYS_INLINE void enqueue(T&& arg) { enqueueImpl(std::move(arg)); }
282
+
283
+ /** dequeue */
284
+ FOLLY_ALWAYS_INLINE void dequeue(T& item) noexcept { item = dequeueImpl(); }
285
+
286
+ FOLLY_ALWAYS_INLINE T dequeue() noexcept { return dequeueImpl(); }
287
+
288
+ /** try_dequeue */
289
+ FOLLY_ALWAYS_INLINE bool try_dequeue(T& item) noexcept {
290
+ auto o = try_dequeue();
291
+ if (FOLLY_LIKELY(o.has_value())) {
292
+ item = std::move(*o);
293
+ return true;
294
+ }
295
+ return false;
296
+ }
297
+
298
+ FOLLY_ALWAYS_INLINE folly::Optional<T> try_dequeue() noexcept {
299
+ return tryDequeueUntil(std::chrono::steady_clock::time_point::min());
300
+ }
301
+
302
+ /** try_dequeue_until */
303
+ template <typename Clock, typename Duration>
304
+ FOLLY_ALWAYS_INLINE bool try_dequeue_until(
305
+ T& item,
306
+ const std::chrono::time_point<Clock, Duration>& deadline) noexcept {
307
+ folly::Optional<T> o = try_dequeue_until(deadline);
308
+
309
+ if (FOLLY_LIKELY(o.has_value())) {
310
+ item = std::move(*o);
311
+ return true;
312
+ }
313
+
314
+ return false;
315
+ }
316
+
317
+ template <typename Clock, typename Duration>
318
+ FOLLY_ALWAYS_INLINE folly::Optional<T> try_dequeue_until(
319
+ const std::chrono::time_point<Clock, Duration>& deadline) noexcept {
320
+ return tryDequeueUntil(deadline);
321
+ }
322
+
323
+ /** try_dequeue_for */
324
+ template <typename Rep, typename Period>
325
+ FOLLY_ALWAYS_INLINE bool try_dequeue_for(
326
+ T& item, const std::chrono::duration<Rep, Period>& duration) noexcept {
327
+ folly::Optional<T> o = try_dequeue_for(duration);
328
+
329
+ if (FOLLY_LIKELY(o.has_value())) {
330
+ item = std::move(*o);
331
+ return true;
332
+ }
333
+
334
+ return false;
335
+ }
336
+
337
+ template <typename Rep, typename Period>
338
+ FOLLY_ALWAYS_INLINE folly::Optional<T> try_dequeue_for(
339
+ const std::chrono::duration<Rep, Period>& duration) noexcept {
340
+ folly::Optional<T> o = try_dequeue();
341
+ if (FOLLY_LIKELY(o.has_value())) {
342
+ return o;
343
+ }
344
+ return tryDequeueUntil(std::chrono::steady_clock::now() + duration);
345
+ }
346
+
347
+ /** try_peek */
348
+ FOLLY_ALWAYS_INLINE const T* try_peek() noexcept {
349
+ static_assert(SingleConsumer, "not single-consumer");
350
+ return tryPeekUntil(std::chrono::steady_clock::time_point::min());
351
+ }
352
+
353
+ /** size */
354
+ size_t size() const noexcept {
355
+ auto p = producerTicket();
356
+ auto c = consumerTicket();
357
+ return p > c ? p - c : 0;
358
+ }
359
+
360
+ /** empty */
361
+ bool empty() const noexcept {
362
+ auto c = consumerTicket();
363
+ auto p = producerTicket();
364
+ return p <= c;
365
+ }
366
+
367
+ private:
368
+ /** enqueueImpl */
369
+ template <typename Arg>
370
+ FOLLY_ALWAYS_INLINE void enqueueImpl(Arg&& arg) {
371
+ if (SPSC) {
372
+ Segment* s = tail();
373
+ enqueueCommon(s, std::forward<Arg>(arg));
374
+ } else {
375
+ // Using hazptr_holder instead of hazptr_local because it is
376
+ // possible that the T ctor happens to use hazard pointers.
377
+ hazptr_holder<Atom> hptr = make_hazard_pointer<Atom>();
378
+ Segment* s = hptr.protect(p_.tail);
379
+ enqueueCommon(s, std::forward<Arg>(arg));
380
+ }
381
+ }
382
+
383
+ /** enqueueCommon */
384
+ template <typename Arg>
385
+ FOLLY_ALWAYS_INLINE void enqueueCommon(Segment* s, Arg&& arg) {
386
+ Ticket t = fetchIncrementProducerTicket();
387
+ if (!SingleProducer) {
388
+ s = findSegment(s, t);
389
+ }
390
+ DCHECK_GE(t, s->minTicket());
391
+ DCHECK_LT(t, s->minTicket() + SegmentSize);
392
+ size_t idx = index(t);
393
+ Entry& e = s->entry(idx);
394
+ e.putItem(std::forward<Arg>(arg));
395
+ if (responsibleForAlloc(t)) {
396
+ allocNextSegment(s);
397
+ }
398
+ if (responsibleForAdvance(t)) {
399
+ advanceTail(s);
400
+ }
401
+ }
402
+
403
+ /** dequeueImpl */
404
+ FOLLY_ALWAYS_INLINE T dequeueImpl() noexcept {
405
+ if (SPSC) {
406
+ Segment* s = head();
407
+ return dequeueCommon(s);
408
+ } else {
409
+ // Using hazptr_holder instead of hazptr_local because it is
410
+ // possible to call the T dtor and it may happen to use hazard
411
+ // pointers.
412
+ hazptr_holder<Atom> hptr = make_hazard_pointer<Atom>();
413
+ Segment* s = hptr.protect(c_.head);
414
+ return dequeueCommon(s);
415
+ }
416
+ }
417
+
418
+ /** dequeueCommon */
419
+ FOLLY_ALWAYS_INLINE T dequeueCommon(Segment* s) noexcept {
420
+ Ticket t = fetchIncrementConsumerTicket();
421
+ if (!SingleConsumer) {
422
+ s = findSegment(s, t);
423
+ }
424
+ size_t idx = index(t);
425
+ Entry& e = s->entry(idx);
426
+ auto res = e.takeItem();
427
+ if (responsibleForAdvance(t)) {
428
+ advanceHead(s);
429
+ }
430
+ return res;
431
+ }
432
+
433
+ /** tryDequeueUntil */
434
+ template <typename Clock, typename Duration>
435
+ FOLLY_ALWAYS_INLINE folly::Optional<T> tryDequeueUntil(
436
+ const std::chrono::time_point<Clock, Duration>& deadline) noexcept {
437
+ if (SingleConsumer) {
438
+ Segment* s = head();
439
+ return tryDequeueUntilSC(s, deadline);
440
+ } else {
441
+ // Using hazptr_holder instead of hazptr_local because it is
442
+ // possible to call ~T() and it may happen to use hazard pointers.
443
+ hazptr_holder<Atom> hptr = make_hazard_pointer<Atom>();
444
+ Segment* s = hptr.protect(c_.head);
445
+ return tryDequeueUntilMC(s, deadline);
446
+ }
447
+ }
448
+
449
+ /** tryDequeueUntilSC */
450
+ template <typename Clock, typename Duration>
451
+ FOLLY_ALWAYS_INLINE folly::Optional<T> tryDequeueUntilSC(
452
+ Segment* s,
453
+ const std::chrono::time_point<Clock, Duration>& deadline) noexcept {
454
+ Ticket t = consumerTicket();
455
+ DCHECK_GE(t, s->minTicket());
456
+ DCHECK_LT(t, (s->minTicket() + SegmentSize));
457
+ size_t idx = index(t);
458
+ Entry& e = s->entry(idx);
459
+ if (FOLLY_UNLIKELY(!tryDequeueWaitElem(e, t, deadline))) {
460
+ return folly::Optional<T>();
461
+ }
462
+ setConsumerTicket(t + 1);
463
+ folly::Optional<T> ret = e.takeItem();
464
+ if (responsibleForAdvance(t)) {
465
+ advanceHead(s);
466
+ }
467
+ return ret;
468
+ }
469
+
470
+ /** tryDequeueUntilMC */
471
+ template <typename Clock, typename Duration>
472
+ FOLLY_ALWAYS_INLINE folly::Optional<T> tryDequeueUntilMC(
473
+ Segment* s,
474
+ const std::chrono::time_point<Clock, Duration>& deadline) noexcept {
475
+ while (true) {
476
+ Ticket t = consumerTicket();
477
+ if (FOLLY_UNLIKELY(t >= (s->minTicket() + SegmentSize))) {
478
+ s = getAllocNextSegment(s, t);
479
+ DCHECK(s);
480
+ continue;
481
+ }
482
+ size_t idx = index(t);
483
+ Entry& e = s->entry(idx);
484
+ if (FOLLY_UNLIKELY(!tryDequeueWaitElem(e, t, deadline))) {
485
+ return folly::Optional<T>();
486
+ }
487
+ if (!c_.ticket.compare_exchange_weak(
488
+ t, t + 1, std::memory_order_acq_rel, std::memory_order_acquire)) {
489
+ continue;
490
+ }
491
+ folly::Optional<T> ret = e.takeItem();
492
+ if (responsibleForAdvance(t)) {
493
+ advanceHead(s);
494
+ }
495
+ return ret;
496
+ }
497
+ }
498
+
499
+ /** tryDequeueWaitElem */
500
+ template <typename Clock, typename Duration>
501
+ FOLLY_ALWAYS_INLINE bool tryDequeueWaitElem(
502
+ Entry& e,
503
+ Ticket t,
504
+ const std::chrono::time_point<Clock, Duration>& deadline) noexcept {
505
+ if (FOLLY_LIKELY(e.tryWaitUntil(deadline))) {
506
+ return true;
507
+ }
508
+ return t < producerTicket();
509
+ }
510
+
511
+ /** tryPeekUntil */
512
+ template <typename Clock, typename Duration>
513
+ FOLLY_ALWAYS_INLINE const T* tryPeekUntil(
514
+ const std::chrono::time_point<Clock, Duration>& deadline) noexcept {
515
+ // This function is supported only for USPSC and UMPSC queues.
516
+ DCHECK(SingleConsumer);
517
+ Segment* s = head();
518
+ Ticket t = consumerTicket();
519
+ DCHECK_GE(t, s->minTicket());
520
+ DCHECK_LT(t, (s->minTicket() + SegmentSize));
521
+ size_t idx = index(t);
522
+ Entry& e = s->entry(idx);
523
+ if (FOLLY_UNLIKELY(!tryDequeueWaitElem(e, t, deadline))) {
524
+ return nullptr;
525
+ }
526
+ return e.peekItem();
527
+ }
528
+
529
+ /** findSegment */
530
+ FOLLY_ALWAYS_INLINE
531
+ Segment* findSegment(Segment* s, const Ticket t) noexcept {
532
+ while (FOLLY_UNLIKELY(t >= (s->minTicket() + SegmentSize))) {
533
+ s = getAllocNextSegment(s, t);
534
+ DCHECK(s);
535
+ }
536
+ return s;
537
+ }
538
+
539
+ /** getAllocNextSegment */
540
+ Segment* getAllocNextSegment(Segment* s, Ticket t) noexcept {
541
+ Segment* next = s->nextSegment();
542
+ if (!next) {
543
+ DCHECK_GE(t, s->minTicket() + SegmentSize);
544
+ auto diff = t - (s->minTicket() + SegmentSize);
545
+ if (diff > 0) {
546
+ auto dur = std::chrono::microseconds(diff);
547
+ auto deadline = std::chrono::steady_clock::now() + dur;
548
+ WaitOptions opt;
549
+ opt.spin_max(dur);
550
+ detail::spin_pause_until(
551
+ deadline, opt, [s] { return s->nextSegment(); });
552
+ next = s->nextSegment();
553
+ if (next) {
554
+ return next;
555
+ }
556
+ }
557
+ next = allocNextSegment(s);
558
+ }
559
+ DCHECK(next);
560
+ return next;
561
+ }
562
+
563
+ /** allocNextSegment */
564
+ Segment* allocNextSegment(Segment* s) {
565
+ auto t = s->minTicket() + SegmentSize;
566
+ Segment* next = new Segment(t);
567
+ next->set_cohort_no_tag(&c_.cohort); // defined in hazptr_obj
568
+ next->acquire_ref_safe(); // defined in hazptr_obj_base_linked
569
+ if (!s->casNextSegment(next)) {
570
+ delete next;
571
+ next = s->nextSegment();
572
+ }
573
+ DCHECK(next);
574
+ return next;
575
+ }
576
+
577
+ /** advanceTail */
578
+ void advanceTail(Segment* s) noexcept {
579
+ if (SPSC) {
580
+ Segment* next = s->nextSegment();
581
+ DCHECK(next);
582
+ setTail(next);
583
+ } else {
584
+ Ticket t = s->minTicket() + SegmentSize;
585
+ advanceTailToTicket(t);
586
+ }
587
+ }
588
+
589
+ /** advanceTailToTicket */
590
+ void advanceTailToTicket(Ticket t) noexcept {
591
+ Segment* s = tail();
592
+ while (s->minTicket() < t) {
593
+ Segment* next = s->nextSegment();
594
+ if (!next) {
595
+ next = allocNextSegment(s);
596
+ }
597
+ DCHECK(next);
598
+ casTail(s, next);
599
+ s = tail();
600
+ }
601
+ }
602
+
603
+ /** advanceHead */
604
+ void advanceHead(Segment* s) noexcept {
605
+ if (SPSC) {
606
+ while (tail() == s) {
607
+ /* Wait for producer to advance tail. */
608
+ asm_volatile_pause();
609
+ }
610
+ Segment* next = s->nextSegment();
611
+ DCHECK(next);
612
+ setHead(next);
613
+ reclaimSegment(s);
614
+ } else {
615
+ Ticket t = s->minTicket() + SegmentSize;
616
+ advanceHeadToTicket(t);
617
+ }
618
+ }
619
+
620
+ /** advanceHeadToTicket */
621
+ void advanceHeadToTicket(Ticket t) noexcept {
622
+ /* Tail must not lag behind head. Otherwise, the algorithm cannot
623
+ be certain about removal of segments. */
624
+ advanceTailToTicket(t);
625
+ Segment* s = head();
626
+ if (SingleConsumer) {
627
+ DCHECK_EQ(s->minTicket() + SegmentSize, t);
628
+ Segment* next = s->nextSegment();
629
+ DCHECK(next);
630
+ setHead(next);
631
+ reclaimSegment(s);
632
+ } else {
633
+ while (s->minTicket() < t) {
634
+ Segment* next = s->nextSegment();
635
+ DCHECK(next);
636
+ if (casHead(s, next)) {
637
+ reclaimSegment(s);
638
+ s = next;
639
+ }
640
+ }
641
+ }
642
+ }
643
+
644
+ /** reclaimSegment */
645
+ void reclaimSegment(Segment* s) noexcept {
646
+ if (SPSC) {
647
+ delete s;
648
+ } else {
649
+ s->retire(); // defined in hazptr_obj_base_linked
650
+ }
651
+ }
652
+
653
+ /** cleanUpRemainingItems */
654
+ void cleanUpRemainingItems() {
655
+ auto end = producerTicket();
656
+ auto s = head();
657
+ for (auto t = consumerTicket(); t < end; ++t) {
658
+ if (t >= s->minTicket() + SegmentSize) {
659
+ s = s->nextSegment();
660
+ }
661
+ DCHECK_LT(t, (s->minTicket() + SegmentSize));
662
+ auto idx = index(t);
663
+ auto& e = s->entry(idx);
664
+ e.destroyItem();
665
+ }
666
+ }
667
+
668
+ /** reclaimRemainingSegments */
669
+ void reclaimRemainingSegments() {
670
+ auto h = head();
671
+ auto s = h->nextSegment();
672
+ h->setNextSegment(nullptr);
673
+ reclaimSegment(h);
674
+ while (s) {
675
+ auto next = s->nextSegment();
676
+ delete s;
677
+ s = next;
678
+ }
679
+ }
680
+
681
+ FOLLY_ALWAYS_INLINE size_t index(Ticket t) const noexcept {
682
+ return (t * Stride) & (SegmentSize - 1);
683
+ }
684
+
685
+ FOLLY_ALWAYS_INLINE bool responsibleForAlloc(Ticket t) const noexcept {
686
+ return (t & (SegmentSize - 1)) == 0;
687
+ }
688
+
689
+ FOLLY_ALWAYS_INLINE bool responsibleForAdvance(Ticket t) const noexcept {
690
+ return (t & (SegmentSize - 1)) == (SegmentSize - 1);
691
+ }
692
+
693
+ FOLLY_ALWAYS_INLINE Segment* head() const noexcept {
694
+ return c_.head.load(std::memory_order_acquire);
695
+ }
696
+
697
+ FOLLY_ALWAYS_INLINE Segment* tail() const noexcept {
698
+ return p_.tail.load(std::memory_order_acquire);
699
+ }
700
+
701
+ FOLLY_ALWAYS_INLINE Ticket producerTicket() const noexcept {
702
+ return p_.ticket.load(std::memory_order_acquire);
703
+ }
704
+
705
+ FOLLY_ALWAYS_INLINE Ticket consumerTicket() const noexcept {
706
+ return c_.ticket.load(std::memory_order_acquire);
707
+ }
708
+
709
+ void setHead(Segment* s) noexcept {
710
+ DCHECK(SingleConsumer);
711
+ c_.head.store(s, std::memory_order_relaxed);
712
+ }
713
+
714
+ void setTail(Segment* s) noexcept {
715
+ DCHECK(SPSC);
716
+ p_.tail.store(s, std::memory_order_release);
717
+ }
718
+
719
+ bool casHead(Segment*& s, Segment* next) noexcept {
720
+ DCHECK(!SingleConsumer);
721
+ return c_.head.compare_exchange_strong(
722
+ s, next, std::memory_order_release, std::memory_order_acquire);
723
+ }
724
+
725
+ void casTail(Segment*& s, Segment* next) noexcept {
726
+ DCHECK(!SPSC);
727
+ p_.tail.compare_exchange_strong(
728
+ s, next, std::memory_order_release, std::memory_order_relaxed);
729
+ }
730
+
731
+ FOLLY_ALWAYS_INLINE void setProducerTicket(Ticket t) noexcept {
732
+ p_.ticket.store(t, std::memory_order_release);
733
+ }
734
+
735
+ FOLLY_ALWAYS_INLINE void setConsumerTicket(Ticket t) noexcept {
736
+ c_.ticket.store(t, std::memory_order_release);
737
+ }
738
+
739
+ FOLLY_ALWAYS_INLINE Ticket fetchIncrementConsumerTicket() noexcept {
740
+ if (SingleConsumer) {
741
+ Ticket oldval = consumerTicket();
742
+ setConsumerTicket(oldval + 1);
743
+ return oldval;
744
+ } else { // MC
745
+ return c_.ticket.fetch_add(1, std::memory_order_acq_rel);
746
+ }
747
+ }
748
+
749
+ FOLLY_ALWAYS_INLINE Ticket fetchIncrementProducerTicket() noexcept {
750
+ if (SingleProducer) {
751
+ Ticket oldval = producerTicket();
752
+ setProducerTicket(oldval + 1);
753
+ return oldval;
754
+ } else { // MP
755
+ return p_.ticket.fetch_add(1, std::memory_order_acq_rel);
756
+ }
757
+ }
758
+
759
+ /**
760
+ * Entry
761
+ */
762
+ class Entry {
763
+ Sem flag_;
764
+ aligned_storage_for_t<T> item_;
765
+
766
+ public:
767
+ template <typename Arg>
768
+ FOLLY_ALWAYS_INLINE void putItem(Arg&& arg) {
769
+ new (&item_) T(std::forward<Arg>(arg));
770
+ flag_.post();
771
+ }
772
+
773
+ FOLLY_ALWAYS_INLINE T takeItem() noexcept {
774
+ flag_.wait();
775
+ return getItem();
776
+ }
777
+
778
+ FOLLY_ALWAYS_INLINE const T* peekItem() noexcept {
779
+ flag_.wait();
780
+ return itemPtr();
781
+ }
782
+
783
+ template <typename Clock, typename Duration>
784
+ FOLLY_EXPORT FOLLY_ALWAYS_INLINE bool tryWaitUntil(
785
+ const std::chrono::time_point<Clock, Duration>& deadline) noexcept {
786
+ // wait-options from benchmarks on contended queues:
787
+ static constexpr auto const opt =
788
+ Sem::wait_options().spin_max(std::chrono::microseconds(10));
789
+ return flag_.try_wait_until(deadline, opt);
790
+ }
791
+
792
+ FOLLY_ALWAYS_INLINE void destroyItem() noexcept { itemPtr()->~T(); }
793
+
794
+ private:
795
+ FOLLY_ALWAYS_INLINE T getItem() noexcept {
796
+ T ret = std::move(*(itemPtr()));
797
+ destroyItem();
798
+ return ret;
799
+ }
800
+
801
+ FOLLY_ALWAYS_INLINE T* itemPtr() noexcept {
802
+ return static_cast<T*>(static_cast<void*>(&item_));
803
+ }
804
+ }; // Entry
805
+
806
+ /**
807
+ * Segment
808
+ */
809
+ class Segment : public hazptr_obj_base_linked<Segment, Atom> {
810
+ Atom<Segment*> next_{nullptr};
811
+ const Ticket min_;
812
+ alignas(Align) Entry b_[SegmentSize];
813
+
814
+ public:
815
+ explicit Segment(const Ticket t) noexcept : min_(t) {}
816
+
817
+ Segment* nextSegment() const noexcept {
818
+ return next_.load(std::memory_order_acquire);
819
+ }
820
+
821
+ void setNextSegment(Segment* next) {
822
+ next_.store(next, std::memory_order_relaxed);
823
+ }
824
+
825
+ bool casNextSegment(Segment* next) noexcept {
826
+ Segment* expected = nullptr;
827
+ return next_.compare_exchange_strong(
828
+ expected, next, std::memory_order_release, std::memory_order_relaxed);
829
+ }
830
+
831
+ FOLLY_ALWAYS_INLINE Ticket minTicket() const noexcept {
832
+ DCHECK_EQ((min_ & (SegmentSize - 1)), Ticket(0));
833
+ return min_;
834
+ }
835
+
836
+ FOLLY_ALWAYS_INLINE Entry& entry(size_t index) noexcept {
837
+ return b_[index];
838
+ }
839
+
840
+ template <typename S>
841
+ void push_links(bool m, S& s) {
842
+ if (m == false) { // next_ is immutable
843
+ auto p = nextSegment();
844
+ if (p) {
845
+ s.push(p);
846
+ }
847
+ }
848
+ }
849
+ }; // Segment
850
+
851
+ }; // UnboundedQueue
852
+
853
+ /* Aliases */
854
+
855
+ template <
856
+ typename T,
857
+ bool MayBlock,
858
+ size_t LgSegmentSize = 8,
859
+ size_t LgAlign = constexpr_log2(hardware_destructive_interference_size),
860
+ template <typename> class Atom = std::atomic>
861
+ using USPSCQueue =
862
+ UnboundedQueue<T, true, true, MayBlock, LgSegmentSize, LgAlign, Atom>;
863
+
864
+ template <
865
+ typename T,
866
+ bool MayBlock,
867
+ size_t LgSegmentSize = 8,
868
+ size_t LgAlign = constexpr_log2(hardware_destructive_interference_size),
869
+ template <typename> class Atom = std::atomic>
870
+ using UMPSCQueue =
871
+ UnboundedQueue<T, false, true, MayBlock, LgSegmentSize, LgAlign, Atom>;
872
+
873
+ template <
874
+ typename T,
875
+ bool MayBlock,
876
+ size_t LgSegmentSize = 8,
877
+ size_t LgAlign = constexpr_log2(hardware_destructive_interference_size),
878
+ template <typename> class Atom = std::atomic>
879
+ using USPMCQueue =
880
+ UnboundedQueue<T, true, false, MayBlock, LgSegmentSize, LgAlign, Atom>;
881
+
882
+ template <
883
+ typename T,
884
+ bool MayBlock,
885
+ size_t LgSegmentSize = 8,
886
+ size_t LgAlign = constexpr_log2(hardware_destructive_interference_size),
887
+ template <typename> class Atom = std::atomic>
888
+ using UMPMCQueue =
889
+ UnboundedQueue<T, false, false, MayBlock, LgSegmentSize, LgAlign, Atom>;
890
+
891
+ } // namespace folly