react-native-windows 0.81.34 → 0.81.35

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 (882) hide show
  1. package/Directory.Build.props +1 -16
  2. package/Folly/ThreadNameStub.cpp +4 -6
  3. package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +1 -1
  4. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +27 -4
  5. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +8 -4
  6. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -3
  7. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
  8. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
  9. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  10. package/PropertySheets/React.Cpp.props +3 -3
  11. package/ReactCommon/ReactCommon.vcxproj +0 -10
  12. package/ReactCommon/packages.lock.win32.json +0 -10
  13. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
  14. package/Shared/Shared.vcxitems +2 -0
  15. package/{Folly → external}/.clang-format +0 -1
  16. package/external/External.vcxitems +10 -0
  17. package/external/fast-float/.syncignore +11 -0
  18. package/external/fast-float/LICENSE-APACHE +190 -0
  19. package/external/fast-float/LICENSE-BOOST +23 -0
  20. package/external/fast-float/LICENSE-MIT +27 -0
  21. package/external/fast-float/cgmanifest.json +15 -0
  22. package/external/fast-float/fast-float.vcxitems +14 -0
  23. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  24. package/external/fast-float/include/fast_float/bigint.h +638 -0
  25. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  26. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  27. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  28. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  29. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  30. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  31. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  32. package/external/fast-float/sync-config.json +8 -0
  33. package/external/fmt/.syncignore +12 -0
  34. package/external/fmt/CONTRIBUTING.md +20 -0
  35. package/external/fmt/LICENSE +27 -0
  36. package/{fmt → external/fmt}/cgmanifest.json +1 -1
  37. package/external/fmt/fmt.vcxitems +28 -0
  38. package/external/fmt/include/fmt/args.h +228 -0
  39. package/{fmt/TEMP_UntilFmtUpdate/core.h → external/fmt/include/fmt/base.h} +1188 -1036
  40. package/external/fmt/include/fmt/chrono.h +2432 -0
  41. package/external/fmt/include/fmt/color.h +612 -0
  42. package/external/fmt/include/fmt/compile.h +529 -0
  43. package/external/fmt/include/fmt/core.h +5 -0
  44. package/external/fmt/include/fmt/format-inl.h +1928 -0
  45. package/external/fmt/include/fmt/format.h +4427 -0
  46. package/external/fmt/include/fmt/os.h +439 -0
  47. package/external/fmt/include/fmt/ostream.h +211 -0
  48. package/external/fmt/include/fmt/printf.h +656 -0
  49. package/external/fmt/include/fmt/ranges.h +882 -0
  50. package/external/fmt/include/fmt/std.h +699 -0
  51. package/external/fmt/include/fmt/xchar.h +322 -0
  52. package/external/fmt/src/fmt.cc +135 -0
  53. package/external/fmt/src/format.cc +43 -0
  54. package/external/fmt/src/os.cc +403 -0
  55. package/external/fmt/sync-config.json +8 -0
  56. package/external/folly/.syncignore +61 -0
  57. package/external/folly/LICENSE +200 -0
  58. package/{fmt → external/folly/folly}/.clang-format +0 -1
  59. package/external/folly/folly/AtomicHashArray-inl.h +546 -0
  60. package/external/folly/folly/AtomicHashArray.h +431 -0
  61. package/external/folly/folly/AtomicHashMap-inl.h +653 -0
  62. package/external/folly/folly/AtomicHashMap.h +484 -0
  63. package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
  64. package/external/folly/folly/AtomicLinkedList.h +110 -0
  65. package/external/folly/folly/AtomicUnorderedMap.h +522 -0
  66. package/external/folly/folly/BUCK +1631 -0
  67. package/external/folly/folly/BUILD_MODE.bzl +72 -0
  68. package/external/folly/folly/Benchmark.cpp +986 -0
  69. package/external/folly/folly/Benchmark.h +680 -0
  70. package/external/folly/folly/BenchmarkUtil.h +47 -0
  71. package/external/folly/folly/Bits.h +17 -0
  72. package/external/folly/folly/CMakeLists.txt +110 -0
  73. package/external/folly/folly/CPortability.h +338 -0
  74. package/external/folly/folly/CancellationToken-inl.h +449 -0
  75. package/external/folly/folly/CancellationToken.cpp +250 -0
  76. package/external/folly/folly/CancellationToken.h +365 -0
  77. package/external/folly/folly/Chrono.h +132 -0
  78. package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
  79. package/external/folly/folly/ClockGettimeWrappers.h +29 -0
  80. package/external/folly/folly/ConcurrentBitSet.h +157 -0
  81. package/external/folly/folly/ConcurrentLazy.h +74 -0
  82. package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
  83. package/external/folly/folly/ConcurrentSkipList.h +824 -0
  84. package/external/folly/folly/ConstructorCallbackList.h +158 -0
  85. package/external/folly/folly/Conv.h +2026 -0
  86. package/external/folly/folly/CppAttributes.h +170 -0
  87. package/external/folly/folly/CpuId.h +297 -0
  88. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  89. package/external/folly/folly/Demangle.cpp +255 -0
  90. package/external/folly/folly/Demangle.h +73 -0
  91. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  92. package/external/folly/folly/DynamicConverter.h +17 -0
  93. package/external/folly/folly/Exception.h +150 -0
  94. package/external/folly/folly/ExceptionString.cpp +51 -0
  95. package/external/folly/folly/ExceptionString.h +33 -0
  96. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  97. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  98. package/external/folly/folly/ExceptionWrapper.h +377 -0
  99. package/external/folly/folly/Executor.cpp +111 -0
  100. package/external/folly/folly/Executor.h +351 -0
  101. package/external/folly/folly/Expected.h +1725 -0
  102. package/external/folly/folly/FBString.h +2888 -0
  103. package/external/folly/folly/FBVector.h +17 -0
  104. package/external/folly/folly/File.cpp +180 -0
  105. package/external/folly/folly/File.h +177 -0
  106. package/external/folly/folly/FileUtil.cpp +378 -0
  107. package/external/folly/folly/FileUtil.h +332 -0
  108. package/external/folly/folly/Fingerprint.cpp +135 -0
  109. package/external/folly/folly/Fingerprint.h +289 -0
  110. package/external/folly/folly/FixedString.h +2965 -0
  111. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  112. package/external/folly/folly/FollyMemcpy.h +23 -0
  113. package/external/folly/folly/FollyMemset.cpp +29 -0
  114. package/external/folly/folly/FollyMemset.h +25 -0
  115. package/external/folly/folly/Format-inl.h +1152 -0
  116. package/external/folly/folly/Format.cpp +429 -0
  117. package/external/folly/folly/Format.h +463 -0
  118. package/external/folly/folly/FormatArg.h +285 -0
  119. package/external/folly/folly/FormatTraits.h +65 -0
  120. package/external/folly/folly/Function.h +1159 -0
  121. package/external/folly/folly/GLog.h +85 -0
  122. package/external/folly/folly/GroupVarint.cpp +153 -0
  123. package/external/folly/folly/GroupVarint.h +630 -0
  124. package/external/folly/folly/Hash.h +20 -0
  125. package/external/folly/folly/IPAddress.cpp +490 -0
  126. package/external/folly/folly/IPAddress.h +667 -0
  127. package/external/folly/folly/IPAddressException.h +82 -0
  128. package/external/folly/folly/IPAddressV4.cpp +305 -0
  129. package/external/folly/folly/IPAddressV4.h +495 -0
  130. package/external/folly/folly/IPAddressV6.cpp +541 -0
  131. package/external/folly/folly/IPAddressV6.h +627 -0
  132. package/external/folly/folly/Indestructible.h +164 -0
  133. package/external/folly/folly/IndexedMemPool.h +550 -0
  134. package/external/folly/folly/IntrusiveList.h +17 -0
  135. package/external/folly/folly/Lazy.h +142 -0
  136. package/external/folly/folly/Likely.h +76 -0
  137. package/external/folly/folly/MPMCPipeline.h +280 -0
  138. package/external/folly/folly/MPMCQueue.h +1556 -0
  139. package/external/folly/folly/MacAddress.cpp +188 -0
  140. package/external/folly/folly/MacAddress.h +260 -0
  141. package/external/folly/folly/MapUtil.h +17 -0
  142. package/external/folly/folly/Math.h +258 -0
  143. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  144. package/external/folly/folly/Memory.h +900 -0
  145. package/external/folly/folly/MicroLock.cpp +76 -0
  146. package/external/folly/folly/MicroLock.h +354 -0
  147. package/external/folly/folly/MicroSpinLock.h +17 -0
  148. package/external/folly/folly/MoveWrapper.h +76 -0
  149. package/external/folly/folly/ObserverContainer.h +1026 -0
  150. package/external/folly/folly/Optional.h +743 -0
  151. package/external/folly/folly/Overload.h +325 -0
  152. package/external/folly/folly/PackedSyncPtr.h +147 -0
  153. package/external/folly/folly/Padded.h +464 -0
  154. package/external/folly/folly/Poly-inl.h +230 -0
  155. package/external/folly/folly/Poly.h +1095 -0
  156. package/external/folly/folly/PolyException.h +43 -0
  157. package/external/folly/folly/Portability.h +644 -0
  158. package/external/folly/folly/Preprocessor.h +236 -0
  159. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  160. package/external/folly/folly/RWSpinLock.h +17 -0
  161. package/external/folly/folly/Random-inl.h +86 -0
  162. package/external/folly/folly/Random.cpp +184 -0
  163. package/external/folly/folly/Random.h +434 -0
  164. package/external/folly/folly/Range.h +1772 -0
  165. package/external/folly/folly/Replaceable.h +636 -0
  166. package/external/folly/folly/ScopeGuard.cpp +29 -0
  167. package/external/folly/folly/ScopeGuard.h +420 -0
  168. package/external/folly/folly/SharedMutex.cpp +81 -0
  169. package/external/folly/folly/SharedMutex.h +1751 -0
  170. package/external/folly/folly/Singleton-inl.h +332 -0
  171. package/external/folly/folly/Singleton.cpp +512 -0
  172. package/external/folly/folly/Singleton.h +891 -0
  173. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  174. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  175. package/external/folly/folly/SocketAddress.cpp +786 -0
  176. package/external/folly/folly/SocketAddress.h +768 -0
  177. package/external/folly/folly/SpinLock.h +55 -0
  178. package/external/folly/folly/String-inl.h +668 -0
  179. package/external/folly/folly/String.cpp +777 -0
  180. package/external/folly/folly/String.h +767 -0
  181. package/external/folly/folly/Subprocess.cpp +1142 -0
  182. package/external/folly/folly/Subprocess.h +1055 -0
  183. package/external/folly/folly/Synchronized.h +1833 -0
  184. package/external/folly/folly/SynchronizedPtr.h +106 -0
  185. package/external/folly/folly/ThreadCachedInt.h +175 -0
  186. package/external/folly/folly/ThreadLocal.h +478 -0
  187. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  188. package/external/folly/folly/TimeoutQueue.h +123 -0
  189. package/external/folly/folly/TokenBucket.h +673 -0
  190. package/external/folly/folly/Traits.h +1442 -0
  191. package/external/folly/folly/Try-inl.h +372 -0
  192. package/external/folly/folly/Try.cpp +23 -0
  193. package/external/folly/folly/Try.h +728 -0
  194. package/external/folly/folly/UTF8String.h +56 -0
  195. package/external/folly/folly/Unicode.cpp +201 -0
  196. package/external/folly/folly/Unicode.h +94 -0
  197. package/external/folly/folly/Unit.h +65 -0
  198. package/external/folly/folly/Uri-inl.h +101 -0
  199. package/external/folly/folly/Uri.cpp +190 -0
  200. package/external/folly/folly/Uri.h +142 -0
  201. package/external/folly/folly/Utility.h +932 -0
  202. package/external/folly/folly/VERSION +1 -0
  203. package/external/folly/folly/Varint.h +230 -0
  204. package/external/folly/folly/VirtualExecutor.h +17 -0
  205. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  206. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  207. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  208. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  209. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  210. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  211. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  212. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  213. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  214. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  215. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  216. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  217. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  218. package/external/folly/folly/base64.h +264 -0
  219. package/external/folly/folly/chrono/BUCK +29 -0
  220. package/external/folly/folly/chrono/Clock.h +65 -0
  221. package/external/folly/folly/chrono/Conv.h +712 -0
  222. package/external/folly/folly/chrono/test/BUCK +26 -0
  223. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  224. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  225. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  226. package/external/folly/folly/concurrency/BUCK +170 -0
  227. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  228. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  229. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  230. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  231. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  232. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  233. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  234. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  235. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  236. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  237. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  238. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  239. package/external/folly/folly/concurrency/container/BUCK +77 -0
  240. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  241. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  242. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  243. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  244. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  245. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  246. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  247. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  248. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  249. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  250. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  251. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  252. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  253. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  254. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  255. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  256. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  257. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  258. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  259. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  260. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  261. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  262. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  263. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  264. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  265. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  266. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  267. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  268. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  269. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  270. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  271. package/external/folly/folly/concurrency/test/BUCK +229 -0
  272. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  273. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  274. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  275. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  276. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  277. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  278. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  279. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  280. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  281. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  282. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  283. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  284. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  285. package/external/folly/folly/container/Access.h +57 -0
  286. package/external/folly/folly/container/Array.h +87 -0
  287. package/external/folly/folly/container/BUCK +353 -0
  288. package/external/folly/folly/container/BitIterator.h +203 -0
  289. package/external/folly/folly/container/Enumerate.h +162 -0
  290. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  291. package/external/folly/folly/container/F14.md +300 -0
  292. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  293. package/external/folly/folly/container/F14Map.h +2108 -0
  294. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  295. package/external/folly/folly/container/F14Set.h +1603 -0
  296. package/external/folly/folly/container/FBVector.h +1711 -0
  297. package/external/folly/folly/container/Foreach-inl.h +316 -0
  298. package/external/folly/folly/container/Foreach.h +209 -0
  299. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  300. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  301. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  302. package/external/folly/folly/container/IntrusiveList.h +131 -0
  303. package/external/folly/folly/container/Iterator.h +843 -0
  304. package/external/folly/folly/container/MapUtil.h +376 -0
  305. package/external/folly/folly/container/Merge.h +90 -0
  306. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  307. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  308. package/external/folly/folly/container/Reserve.h +109 -0
  309. package/external/folly/folly/container/SparseByteSet.h +123 -0
  310. package/external/folly/folly/container/View.h +81 -0
  311. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  312. package/external/folly/folly/container/detail/BUCK +115 -0
  313. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  314. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  315. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  316. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  317. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  318. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  319. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  320. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  321. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  322. package/external/folly/folly/container/detail/Util.h +303 -0
  323. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  324. package/external/folly/folly/container/detail/test/BUCK +14 -0
  325. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  326. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  327. package/external/folly/folly/container/range_traits.h +81 -0
  328. package/external/folly/folly/container/small_vector.h +1476 -0
  329. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  330. package/external/folly/folly/container/span.h +408 -0
  331. package/external/folly/folly/container/tape.h +608 -0
  332. package/external/folly/folly/container/test/.clang-tidy +12 -0
  333. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  334. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  335. package/external/folly/folly/container/test/BUCK +568 -0
  336. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  337. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  338. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  339. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  340. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  341. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  342. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  343. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  344. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  345. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  346. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  347. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  348. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  349. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  350. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  351. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  352. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  353. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  354. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  355. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  356. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  357. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  358. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  359. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  360. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  361. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  362. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  363. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  364. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  365. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  366. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  367. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  368. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  369. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  370. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  371. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  372. package/external/folly/folly/container/test/span_test.cpp +520 -0
  373. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  374. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  375. package/external/folly/folly/defs.bzl +238 -0
  376. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  377. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  378. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  379. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  380. package/external/folly/folly/detail/BUCK +406 -0
  381. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  382. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  383. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  384. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  385. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  386. package/external/folly/folly/detail/Futex-inl.h +123 -0
  387. package/external/folly/folly/detail/Futex.cpp +273 -0
  388. package/external/folly/folly/detail/Futex.h +109 -0
  389. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  390. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  391. package/external/folly/folly/detail/IPAddress.h +57 -0
  392. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  393. package/external/folly/folly/detail/Iterators.h +156 -0
  394. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  395. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  396. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  397. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  398. package/external/folly/folly/detail/PerfScoped.h +70 -0
  399. package/external/folly/folly/detail/PolyDetail.h +921 -0
  400. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  401. package/external/folly/folly/detail/RangeCommon.h +93 -0
  402. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  403. package/external/folly/folly/detail/RangeSse42.h +30 -0
  404. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  405. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  406. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  407. package/external/folly/folly/detail/Singleton.h +34 -0
  408. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  409. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  410. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  411. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  412. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  413. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  414. package/external/folly/folly/detail/Sse.cpp +35 -0
  415. package/external/folly/folly/detail/Sse.h +45 -0
  416. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  417. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  418. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  419. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  420. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  421. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  422. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  423. package/external/folly/folly/detail/TypeList.h +551 -0
  424. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  425. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  426. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  427. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  428. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  429. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  430. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  431. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  432. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  433. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  434. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  435. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  436. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  437. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  438. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  439. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  440. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  441. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  442. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  443. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  444. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  445. package/external/folly/folly/detail/test/BUCK +118 -0
  446. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  447. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  448. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  449. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  450. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  451. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  452. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  453. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  454. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  455. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  456. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  457. package/external/folly/folly/dynamic-inl.h +17 -0
  458. package/external/folly/folly/dynamic.h +17 -0
  459. package/external/folly/folly/folly_extended_library.bzl +28 -0
  460. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  461. package/external/folly/folly/functional/BUCK +57 -0
  462. package/external/folly/folly/functional/Invoke.h +880 -0
  463. package/external/folly/folly/functional/Partial.h +130 -0
  464. package/external/folly/folly/functional/protocol.h +203 -0
  465. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  466. package/external/folly/folly/functional/test/BUCK +57 -0
  467. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  468. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  469. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  470. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  471. package/external/folly/folly/functional/traits.h +675 -0
  472. package/external/folly/folly/hash/BUCK +86 -0
  473. package/external/folly/folly/hash/Checksum.cpp +275 -0
  474. package/external/folly/folly/hash/Checksum.h +94 -0
  475. package/external/folly/folly/hash/FarmHash.h +46 -0
  476. package/external/folly/folly/hash/Hash.h +1045 -0
  477. package/external/folly/folly/hash/MurmurHash.h +86 -0
  478. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  479. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  480. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  481. package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/hash/SpookyHashV2.h +6 -1
  482. package/external/folly/folly/hash/detail/BUCK +26 -0
  483. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  484. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  485. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  486. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  487. package/external/folly/folly/hash/test/BUCK +132 -0
  488. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  489. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  490. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  491. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  492. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  493. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  494. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  495. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  496. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  497. package/external/folly/folly/hash/traits.h +115 -0
  498. package/external/folly/folly/json/BUCK +155 -0
  499. package/external/folly/folly/json/DynamicConverter.h +464 -0
  500. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  501. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  502. package/external/folly/folly/json/DynamicParser.h +394 -0
  503. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  504. package/external/folly/folly/json/JSONSchema.h +73 -0
  505. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  506. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  507. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  508. package/external/folly/folly/json/bser/BUCK +24 -0
  509. package/external/folly/folly/json/bser/Bser.h +107 -0
  510. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  511. package/external/folly/folly/json/bser/Load.cpp +246 -0
  512. package/external/folly/folly/json/bser/test/BUCK +14 -0
  513. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  514. package/external/folly/folly/json/dynamic.cpp +552 -0
  515. package/external/folly/folly/json/dynamic.h +1346 -0
  516. package/external/folly/folly/json/json.h +238 -0
  517. package/external/folly/folly/json/json_patch.cpp +325 -0
  518. package/external/folly/folly/json/json_patch.h +126 -0
  519. package/external/folly/folly/json/json_pointer.cpp +114 -0
  520. package/external/folly/folly/json/json_pointer.h +87 -0
  521. package/external/folly/folly/json/test/BUCK +147 -0
  522. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  523. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  524. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  525. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  526. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  527. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  528. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  529. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  530. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  531. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  532. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  533. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  534. package/external/folly/folly/json/tool/BUCK +13 -0
  535. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  536. package/external/folly/folly/json.h +17 -0
  537. package/external/folly/folly/json_patch.h +17 -0
  538. package/external/folly/folly/json_pointer.h +17 -0
  539. package/external/folly/folly/lang/Access.h +29 -0
  540. package/external/folly/folly/lang/Align.h +240 -0
  541. package/external/folly/folly/lang/Aligned.h +92 -0
  542. package/external/folly/folly/lang/Assume.h +82 -0
  543. package/external/folly/folly/lang/BUCK +287 -0
  544. package/external/folly/folly/lang/Badge.h +108 -0
  545. package/external/folly/folly/lang/Bits.h +570 -0
  546. package/external/folly/folly/lang/BitsClass.h +312 -0
  547. package/external/folly/folly/lang/Builtin.h +74 -0
  548. package/external/folly/folly/lang/CArray.h +34 -0
  549. package/external/folly/folly/lang/CString.cpp +86 -0
  550. package/external/folly/folly/lang/CString.h +55 -0
  551. package/external/folly/folly/lang/Cast.h +51 -0
  552. package/external/folly/folly/lang/CheckedMath.h +253 -0
  553. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  554. package/external/folly/folly/lang/Exception.cpp +822 -0
  555. package/external/folly/folly/lang/Exception.h +716 -0
  556. package/external/folly/folly/lang/Extern.h +55 -0
  557. package/external/folly/folly/lang/Hint-inl.h +144 -0
  558. package/external/folly/folly/lang/Hint.h +238 -0
  559. package/external/folly/folly/lang/Keep.h +98 -0
  560. package/external/folly/folly/lang/New.h +124 -0
  561. package/external/folly/folly/lang/Ordering.h +140 -0
  562. package/external/folly/folly/lang/Pretty.h +159 -0
  563. package/external/folly/folly/lang/PropagateConst.h +413 -0
  564. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  565. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  566. package/external/folly/folly/lang/StaticConst.h +33 -0
  567. package/external/folly/folly/lang/Thunk.h +100 -0
  568. package/external/folly/folly/lang/TypeInfo.h +58 -0
  569. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  570. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  571. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  572. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  573. package/external/folly/folly/lang/test/BUCK +258 -0
  574. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  575. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  576. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  577. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  578. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  579. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  580. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  581. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  582. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  583. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  584. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  585. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  586. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  587. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  588. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  589. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  590. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  591. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  592. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  593. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  594. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  595. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  596. package/external/folly/folly/memcpy.S +292 -0
  597. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  598. package/external/folly/folly/memory/Arena-inl.h +83 -0
  599. package/external/folly/folly/memory/Arena.h +325 -0
  600. package/external/folly/folly/memory/BUCK +191 -0
  601. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  602. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  603. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  604. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  605. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  606. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  607. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  608. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  609. package/external/folly/folly/memory/Malloc.h +551 -0
  610. package/external/folly/folly/memory/MemoryResource.h +57 -0
  611. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  612. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  613. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  614. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  615. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  616. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  617. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  618. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  619. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  620. package/external/folly/folly/memory/detail/BUCK +10 -0
  621. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  622. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  623. package/external/folly/folly/memory/not_null-inl.h +522 -0
  624. package/external/folly/folly/memory/not_null.h +449 -0
  625. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  626. package/external/folly/folly/memory/test/BUCK +146 -0
  627. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  628. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  629. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  630. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  631. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  632. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  633. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  634. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  635. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  636. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  637. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  638. package/external/folly/folly/memset.S +245 -0
  639. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  640. package/external/folly/folly/portability/Asm.h +50 -0
  641. package/external/folly/folly/portability/Atomic.h +31 -0
  642. package/external/folly/folly/portability/BUCK +456 -0
  643. package/external/folly/folly/portability/Builtins.cpp +31 -0
  644. package/external/folly/folly/portability/Builtins.h +161 -0
  645. package/external/folly/folly/portability/Config.h +43 -0
  646. package/external/folly/folly/portability/Constexpr.h +145 -0
  647. package/external/folly/folly/portability/Dirent.cpp +140 -0
  648. package/external/folly/folly/portability/Dirent.h +41 -0
  649. package/external/folly/folly/portability/Event.h +44 -0
  650. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  651. package/external/folly/folly/portability/Fcntl.h +67 -0
  652. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  653. package/external/folly/folly/portability/Filesystem.h +114 -0
  654. package/external/folly/folly/portability/FmtCompile.h +40 -0
  655. package/external/folly/folly/portability/GFlags.h +139 -0
  656. package/external/folly/folly/portability/GMock.h +35 -0
  657. package/external/folly/folly/portability/GTest.h +35 -0
  658. package/external/folly/folly/portability/IOVec.h +34 -0
  659. package/external/folly/folly/portability/Libgen.cpp +59 -0
  660. package/external/folly/folly/portability/Libgen.h +29 -0
  661. package/external/folly/folly/portability/Libunwind.h +21 -0
  662. package/external/folly/folly/portability/Malloc.cpp +31 -0
  663. package/external/folly/folly/portability/Malloc.h +53 -0
  664. package/external/folly/folly/portability/Math.h +90 -0
  665. package/external/folly/folly/portability/Memory.h +26 -0
  666. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  667. package/external/folly/folly/portability/OpenSSL.h +102 -0
  668. package/external/folly/folly/portability/PThread.cpp +697 -0
  669. package/external/folly/folly/portability/PThread.h +148 -0
  670. package/external/folly/folly/portability/README.md +21 -0
  671. package/external/folly/folly/portability/Sched.cpp +41 -0
  672. package/external/folly/folly/portability/Sched.h +45 -0
  673. package/external/folly/folly/portability/Sockets.cpp +245 -0
  674. package/external/folly/folly/portability/Sockets.h +155 -0
  675. package/external/folly/folly/portability/SourceLocation.h +49 -0
  676. package/external/folly/folly/portability/Stdio.cpp +77 -0
  677. package/external/folly/folly/portability/Stdio.h +32 -0
  678. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  679. package/external/folly/folly/portability/Stdlib.h +64 -0
  680. package/external/folly/folly/portability/String.cpp +53 -0
  681. package/external/folly/folly/portability/String.h +39 -0
  682. package/external/folly/folly/portability/SysFile.cpp +46 -0
  683. package/external/folly/folly/portability/SysFile.h +27 -0
  684. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  685. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  686. package/external/folly/folly/portability/SysMman.cpp +242 -0
  687. package/external/folly/folly/portability/SysMman.h +68 -0
  688. package/external/folly/folly/portability/SysResource.cpp +108 -0
  689. package/external/folly/folly/portability/SysResource.h +71 -0
  690. package/external/folly/folly/portability/SysStat.cpp +66 -0
  691. package/external/folly/folly/portability/SysStat.h +52 -0
  692. package/external/folly/folly/portability/SysSyscall.h +73 -0
  693. package/external/folly/folly/portability/SysTime.cpp +62 -0
  694. package/external/folly/folly/portability/SysTime.h +50 -0
  695. package/external/folly/folly/portability/SysTypes.h +44 -0
  696. package/external/folly/folly/portability/SysUio.cpp +179 -0
  697. package/external/folly/folly/portability/SysUio.h +51 -0
  698. package/external/folly/folly/portability/Syslog.h +39 -0
  699. package/external/folly/folly/portability/Time.cpp +357 -0
  700. package/external/folly/folly/portability/Time.h +74 -0
  701. package/external/folly/folly/portability/Unistd.h +111 -0
  702. package/external/folly/folly/portability/Windows.h +108 -0
  703. package/external/folly/folly/portability/openat2.c +30 -0
  704. package/external/folly/folly/portability/openat2.h +39 -0
  705. package/external/folly/folly/portability/test/BUCK +59 -0
  706. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  707. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  708. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  709. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  710. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  711. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  712. package/external/folly/folly/small_vector.h +17 -0
  713. package/external/folly/folly/somerge_defs.bzl +399 -0
  714. package/external/folly/folly/sorted_vector_types.h +17 -0
  715. package/external/folly/folly/stop_watch.h +317 -0
  716. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  717. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  718. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  719. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  720. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  721. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  722. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  723. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  724. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  725. package/external/folly/folly/synchronization/BUCK +418 -0
  726. package/external/folly/folly/synchronization/Baton.h +419 -0
  727. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  728. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  729. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  730. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  731. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  732. package/external/folly/folly/synchronization/EventCount.h +200 -0
  733. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  734. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  735. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  736. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  737. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  738. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  739. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  740. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  741. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  742. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  743. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  744. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  745. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  746. package/external/folly/folly/synchronization/Latch.h +160 -0
  747. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  748. package/external/folly/folly/synchronization/Lock.h +887 -0
  749. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  750. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  751. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  752. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  753. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  754. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  755. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  756. package/external/folly/folly/synchronization/Rcu.h +553 -0
  757. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  758. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  759. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  760. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  761. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  762. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  763. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  764. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  765. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  766. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  767. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  768. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  769. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  770. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  771. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  772. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  773. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  774. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  775. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  776. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  777. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  778. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  779. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  780. package/external/folly/folly/synchronization/example/BUCK +27 -0
  781. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  782. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  783. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  784. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  785. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  786. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  787. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  788. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  789. package/external/folly/folly/synchronization/test/BUCK +495 -0
  790. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  791. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  792. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  793. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  794. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  795. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  796. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  797. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  798. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  799. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  800. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  801. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  802. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  803. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  804. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  805. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  806. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  807. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  808. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  809. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  810. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  811. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  812. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  813. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  814. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  815. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  816. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  817. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  818. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  819. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  820. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  821. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  822. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  823. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  824. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  825. package/external/folly/folly/system/AtFork.cpp +205 -0
  826. package/external/folly/folly/system/AtFork.h +116 -0
  827. package/external/folly/folly/system/AuxVector.h +198 -0
  828. package/external/folly/folly/system/BUCK +144 -0
  829. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  830. package/external/folly/folly/system/EnvUtil.h +113 -0
  831. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  832. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  833. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  834. package/external/folly/folly/system/MemoryMapping.h +287 -0
  835. package/external/folly/folly/system/Pid.cpp +87 -0
  836. package/external/folly/folly/system/Pid.h +34 -0
  837. package/external/folly/folly/system/Shell.cpp +33 -0
  838. package/external/folly/folly/system/Shell.h +93 -0
  839. package/external/folly/folly/system/ThreadId.cpp +89 -0
  840. package/external/folly/folly/system/ThreadId.h +62 -0
  841. package/external/folly/folly/system/ThreadName.cpp +330 -0
  842. package/external/folly/folly/system/ThreadName.h +72 -0
  843. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  844. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  845. package/external/folly/folly/system/test/BUCK +120 -0
  846. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  847. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  848. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  849. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  850. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  851. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  852. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  853. package/external/folly/folly.vcxitems +164 -0
  854. package/external/folly/sync-config.json +8 -0
  855. package/package.json +3 -3
  856. package/template/cpp-app/proj/MyApp.sln +0 -33
  857. package/template/cpp-lib/proj/MyLib.sln +0 -33
  858. package/template/cs-app/proj/MyApp.sln +0 -33
  859. package/template/cs-lib/proj/MyLib.sln +0 -33
  860. package/templates/cpp-app/windows/MyApp.sln +0 -33
  861. package/templates/cpp-lib/windows/MyLib.sln +0 -33
  862. package/Folly/Folly.vcxproj +0 -383
  863. package/Folly/Folly.vcxproj.filters +0 -558
  864. package/Folly/Folly.win32.vcxproj +0 -11
  865. package/Folly/packages.lock.win32.json +0 -20
  866. package/fmt/fmt.vcxproj +0 -163
  867. package/fmt/fmt.vcxproj.filters +0 -59
  868. package/fmt/fmt.win32.vcxproj +0 -10
  869. package/fmt/pch.cpp +0 -4
  870. package/fmt/pch.h +0 -2
  871. /package/{Folly → external/folly}/Folly.natvis +0 -0
  872. /package/{Folly → external/folly}/cgmanifest.json +0 -0
  873. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
  874. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
  875. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
  876. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
  877. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
  878. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
  879. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
  880. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
  881. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
  882. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
@@ -0,0 +1,419 @@
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
+ //
18
+ // Docs: https://fburl.com/fbcref_baton
19
+ //
20
+
21
+ #pragma once
22
+
23
+ #include <assert.h>
24
+ #include <errno.h>
25
+ #include <stdint.h>
26
+
27
+ #include <atomic>
28
+ #include <thread>
29
+
30
+ #include <folly/Likely.h>
31
+ #include <folly/detail/AsyncTrace.h>
32
+ #include <folly/detail/Futex.h>
33
+ #include <folly/detail/MemoryIdler.h>
34
+ #include <folly/portability/Asm.h>
35
+ #include <folly/synchronization/AtomicUtil.h>
36
+ #include <folly/synchronization/WaitOptions.h>
37
+ #include <folly/synchronization/detail/Spin.h>
38
+
39
+ namespace folly {
40
+
41
+ /// A Baton allows a thread to block once and be awoken. Captures a
42
+ /// single handoff, and during its lifecycle (from construction/reset
43
+ /// to destruction/reset) a baton must either be post()ed and wait()ed
44
+ /// exactly once each, or not at all.
45
+ ///
46
+ /// Baton includes no internal padding, and is only 4 bytes in size.
47
+ /// Any alignment or padding to avoid false sharing is up to the user.
48
+ ///
49
+ /// This is basically a stripped-down semaphore that supports only a
50
+ /// single call to sem_post and a single call to sem_wait.
51
+ ///
52
+ /// The non-blocking version (MayBlock == false) provides more speed
53
+ /// by using only load acquire and store release operations in the
54
+ /// critical path, at the cost of disallowing blocking.
55
+ ///
56
+ /// The current posix semaphore sem_t isn't too bad, but this provides
57
+ /// a bit more speed, inlining, smaller size, a guarantee that
58
+ /// the implementation won't change, and compatibility with
59
+ /// DeterministicSchedule. A much more restrictive lifecycle allows for adding
60
+ /// a bunch of assertions that can help to catch race conditions ahead of time.
61
+ ///
62
+ /// Baton post with MayBlock == false is async-signal-safe.
63
+ /// When MayBlock == true, Baton post is async-signal-safe if
64
+ /// Futex wake is so.
65
+ ///
66
+ /// @refcode folly/docs/examples/folly/synchronization/Baton.cpp
67
+ ///
68
+ template <bool MayBlock = true, template <typename> class Atom = std::atomic>
69
+ class Baton {
70
+ public:
71
+ /// @methodset Settings
72
+ ///
73
+ /// Gets default wait options for controlling wait behaviour
74
+ FOLLY_ALWAYS_INLINE static constexpr WaitOptions wait_options() { return {}; }
75
+
76
+ constexpr Baton() noexcept : state_(INIT) {}
77
+
78
+ Baton(Baton const&) = delete;
79
+ Baton& operator=(Baton const&) = delete;
80
+
81
+ /// It is an error to destroy a Baton on which a thread is currently
82
+ /// wait()ing. In practice this means that the waiter usually takes
83
+ /// responsibility for destroying the Baton.
84
+ ~Baton() noexcept {
85
+ // The docblock for this function says that it can't be called when
86
+ // there is a concurrent waiter. We assume a strong version of this
87
+ // requirement in which the caller must _know_ that this is true, they
88
+ // are not allowed to be merely lucky. If two threads are involved,
89
+ // the destroying thread must actually have synchronized with the
90
+ // waiting thread after wait() returned. To convey causality the
91
+ // waiting thread must have used release semantics and the destroying
92
+ // thread must have used acquire semantics for that communication,
93
+ // so we are guaranteed to see the post-wait() value of state_,
94
+ // which cannot be WAITING.
95
+ //
96
+ // Note that since we only care about a single memory location,
97
+ // the only two plausible memory orders here are relaxed and seq_cst.
98
+ assert(state_.load(std::memory_order_relaxed) != WAITING);
99
+ }
100
+
101
+ /// @methodset Operations
102
+ ///
103
+ /// Non blocking check whether a baton has been posted.
104
+ //
105
+ /// Okay to call before or after any call to try_wait, try_wait_for,
106
+ /// try_wait_until, or wait.
107
+ ///
108
+ /// @return True if baton has been posted, false otherwise
109
+ FOLLY_ALWAYS_INLINE bool ready() const noexcept {
110
+ auto s = state_.load(std::memory_order_acquire);
111
+ return FOLLY_LIKELY(s == EARLY_DELIVERY || s == LATE_DELIVERY);
112
+ }
113
+
114
+ /// @methodset Operations
115
+ ///
116
+ /// Equivalent to destroying the Baton and creating a new one. It is
117
+ /// a bug to call this while there is a waiting thread, so in practice
118
+ /// the waiter will be the one that resets the baton.
119
+ void reset() noexcept {
120
+ // See ~Baton for a discussion about why relaxed is okay here
121
+ assert(state_.load(std::memory_order_relaxed) != WAITING);
122
+
123
+ // We use a similar argument to justify the use of a relaxed store
124
+ // here. Since both wait() and post() are required to be called
125
+ // only once per lifetime, no thread can actually call those methods
126
+ // correctly after a reset() unless it synchronizes with the thread
127
+ // that performed the reset(). If a post() or wait() on another thread
128
+ // didn't synchronize, then regardless of what operation we performed
129
+ // here there would be a race on proper use of the Baton's spec
130
+ // (although not on any particular load and store). Put another way,
131
+ // we don't need to synchronize here because anybody that might rely
132
+ // on such synchronization is required by the baton rules to perform
133
+ // an additional synchronization that has the desired effect anyway.
134
+ //
135
+ // There is actually a similar argument to be made about the
136
+ // constructor, in which the fenceless constructor initialization
137
+ // of state_ is piggybacked on whatever synchronization mechanism
138
+ // distributes knowledge of the Baton's existence
139
+ state_.store(INIT, std::memory_order_relaxed);
140
+ }
141
+
142
+ /// @methodset Operations
143
+ ///
144
+ /// Causes wait() to wake up. For each lifetime of a Baton (where a
145
+ /// lifetime starts at construction or reset() and ends at
146
+ /// destruction or reset()) there can be at most one call to post(),
147
+ /// in the single poster version. Any thread may call post().
148
+ void post() noexcept {
149
+ if (!MayBlock) {
150
+ /// Spin-only version
151
+ ///
152
+ assert(
153
+ ((1 << state_.load(std::memory_order_relaxed)) &
154
+ ((1 << INIT) | (1 << EARLY_DELIVERY))) != 0);
155
+ state_.store(EARLY_DELIVERY, std::memory_order_release);
156
+ return;
157
+ }
158
+
159
+ /// May-block versions
160
+ ///
161
+ uint32_t before = state_.load(std::memory_order_acquire);
162
+
163
+ assert(before == INIT || before == WAITING || before == TIMED_OUT);
164
+
165
+ if (before == INIT &&
166
+ state_.compare_exchange_strong(
167
+ before,
168
+ EARLY_DELIVERY,
169
+ std::memory_order_release,
170
+ std::memory_order_relaxed)) {
171
+ return;
172
+ }
173
+
174
+ assert(before == WAITING || before == TIMED_OUT);
175
+
176
+ if (before == TIMED_OUT) {
177
+ return;
178
+ }
179
+
180
+ assert(before == WAITING);
181
+ state_.store(LATE_DELIVERY, std::memory_order_release);
182
+ detail::futexWake(&state_, 1);
183
+ }
184
+
185
+ /// @methodset Operations
186
+ ///
187
+ /// Waits until post() has been called in the current Baton lifetime.
188
+ /// May be called at most once during a Baton lifetime (construction
189
+ /// |reset until destruction|reset). If post is called before wait in
190
+ /// the current lifetime then this method returns immediately.
191
+ ///
192
+ /// The restriction that there can be at most one wait() per lifetime
193
+ /// could be relaxed somewhat without any perf or size regressions,
194
+ /// but making this condition very restrictive can provide better checking in
195
+ /// debug builds.
196
+ ///
197
+ /// @param opt Options for controlling wait behaviour
198
+ FOLLY_ALWAYS_INLINE
199
+ void wait(const WaitOptions& opt = wait_options()) noexcept {
200
+ if (try_wait()) {
201
+ return;
202
+ }
203
+
204
+ auto const deadline = std::chrono::steady_clock::time_point::max();
205
+ tryWaitSlow(deadline, opt);
206
+ }
207
+
208
+ /// @methodset Operations
209
+ ///
210
+ /// Similar to wait, but doesn't block the thread if it hasn't been posted.
211
+ ///
212
+ /// try_wait has the following semantics:
213
+ /// - It is ok to call try_wait any number times on the same baton until
214
+ /// try_wait reports that the baton has been posted.
215
+ /// - It is ok to call timed_wait or wait on the same baton if try_wait
216
+ /// reports that baton hasn't been posted.
217
+ /// - If try_wait indicates that the baton has been posted, it is invalid to
218
+ /// call wait, try_wait or timed_wait on the same baton without resetting
219
+ ///
220
+ /// @return True if baton has been posted, false othewise
221
+ FOLLY_ALWAYS_INLINE bool try_wait() noexcept {
222
+ auto s = state_.load(std::memory_order_acquire);
223
+ assert(s == INIT || s == EARLY_DELIVERY);
224
+ return FOLLY_LIKELY(s == EARLY_DELIVERY);
225
+ }
226
+
227
+ /// @methodset Operations
228
+ ///
229
+ /// Similar to wait, but with a timeout. The thread is unblocked if the
230
+ /// timeout expires.
231
+ /// Note: Only a single call to wait/try_wait_for/try_wait_until is allowed
232
+ /// during a baton's life-cycle (from ctor/reset to dtor/reset). In other
233
+ /// words, after try_wait_for the caller can't invoke
234
+ /// wait/try_wait/try_wait_for/try_wait_until
235
+ /// again on the same baton without resetting it.
236
+ ///
237
+ /// @param timeout Time until which the thread can block
238
+ /// @param opt Options for controlling wait behaviour
239
+ /// @return True if the baton was posted to before timeout,
240
+ /// False otherwise
241
+ template <typename Rep, typename Period>
242
+ FOLLY_ALWAYS_INLINE bool try_wait_for(
243
+ const std::chrono::duration<Rep, Period>& timeout,
244
+ const WaitOptions& opt = wait_options()) noexcept {
245
+ if (try_wait()) {
246
+ return true;
247
+ }
248
+
249
+ auto const deadline = std::chrono::steady_clock::now() + timeout;
250
+ return tryWaitSlow(deadline, opt);
251
+ }
252
+
253
+ /// @methodset Operations
254
+ ///
255
+ /// Similar to wait, but with a deadline. The thread is unblocked if the
256
+ /// deadline expires.
257
+ /// Note: Only a single call to wait/try_wait_for/try_wait_until is allowed
258
+ /// during a baton's life-cycle (from ctor/reset to dtor/reset). In other
259
+ /// words, after try_wait_until the caller can't invoke
260
+ /// wait/try_wait/try_wait_for/try_wait_until
261
+ /// again on the same baton without resetting it.
262
+ ///
263
+ /// @param deadline Time until which the thread can block
264
+ /// @param opt Options for controlling wait behaviour
265
+ /// @return True if the baton was posted to before deadline,
266
+ /// False otherwise
267
+ template <typename Clock, typename Duration>
268
+ FOLLY_ALWAYS_INLINE bool try_wait_until(
269
+ const std::chrono::time_point<Clock, Duration>& deadline,
270
+ const WaitOptions& opt = wait_options()) noexcept {
271
+ if (try_wait()) {
272
+ return true;
273
+ }
274
+
275
+ return tryWaitSlow(deadline, opt);
276
+ }
277
+
278
+ /// @methodset Deprecated
279
+ ///
280
+ /// @overloadbrief Aliases to try_wait_for and try_wait_until
281
+ ///
282
+ /// Alias to try_wait_for. Deprecated.
283
+ template <typename Rep, typename Period>
284
+ FOLLY_ALWAYS_INLINE bool timed_wait(
285
+ const std::chrono::duration<Rep, Period>& timeout) noexcept {
286
+ return try_wait_for(timeout);
287
+ }
288
+
289
+ /// @methodset Deprecated
290
+ ///
291
+ /// Alias to try_wait_until. Deprecated.
292
+ template <typename Clock, typename Duration>
293
+ FOLLY_ALWAYS_INLINE bool timed_wait(
294
+ const std::chrono::time_point<Clock, Duration>& deadline) noexcept {
295
+ return try_wait_until(deadline);
296
+ }
297
+
298
+ private:
299
+ enum State : uint32_t {
300
+ INIT = 0,
301
+ EARLY_DELIVERY = 1,
302
+ WAITING = 2,
303
+ LATE_DELIVERY = 3,
304
+ TIMED_OUT = 4,
305
+ };
306
+
307
+ template <typename Clock, typename Duration>
308
+ FOLLY_NOINLINE bool tryWaitSlow(
309
+ const std::chrono::time_point<Clock, Duration>& deadline,
310
+ const WaitOptions& opt) noexcept {
311
+ if (opt.logging_enabled()) {
312
+ folly::async_tracing::logBlockingOperation(
313
+ std::chrono::duration_cast<std::chrono::milliseconds>(
314
+ deadline - Clock::now()));
315
+ }
316
+
317
+ switch (
318
+ detail::spin_pause_until(deadline, opt, [this] { return ready(); })) {
319
+ case detail::spin_result::success:
320
+ return true;
321
+ case detail::spin_result::timeout:
322
+ return false;
323
+ case detail::spin_result::advance:
324
+ break;
325
+ }
326
+
327
+ if (!MayBlock) {
328
+ switch (detail::spin_yield_until(deadline, [this] { return ready(); })) {
329
+ case detail::spin_result::success:
330
+ return true;
331
+ case detail::spin_result::timeout:
332
+ return false;
333
+ case detail::spin_result::advance:
334
+ break;
335
+ }
336
+ }
337
+
338
+ // Try transitioning from the spinning phase to the blocking phase via a CAS
339
+ // on state_.
340
+ //
341
+ // The transition may conceptually be interrupted by a post, i.e., race with
342
+ // a post and lose, in which case the wait operation succeeds and so returns
343
+ // true.
344
+ //
345
+ // The memory orders in this CAS seem backwards but are correct: CAS failure
346
+ // immediately precedes return-true and return-true requires an immediately-
347
+ // preceding load-acquire on state_ to protect the caller, which is about to
348
+ // use whatever memory this baton guards. Therefore, CAS failure must have a
349
+ // load-acquire attached to it.
350
+ //
351
+ // CAS success means that the transition from spinning to blocking finished.
352
+ // After blocking, there is a load-acquire immediately preceding return-true
353
+ // corresponding to the store-release in post, so no success load-acquire is
354
+ // needed here.
355
+ //
356
+ // No success store-release is needed either since only the same thread will
357
+ // load the state, which happens later in wait during and after blocking.
358
+ uint32_t expected = INIT;
359
+ if (!folly::atomic_compare_exchange_strong_explicit<Atom>(
360
+ &state_,
361
+ &expected,
362
+ WAITING,
363
+ std::memory_order_relaxed,
364
+ std::memory_order_acquire)) {
365
+ // CAS failed. The baton must have been posted between the last spin and
366
+ // the CAS, so it is not necessary to transition from the spinning phase
367
+ // to the blocking phase. Therefore the wait succeeds.
368
+ //
369
+ // Match the post store-release with the CAS failure load-acquire above.
370
+ assert(expected == EARLY_DELIVERY);
371
+ return true;
372
+ }
373
+
374
+ while (true) {
375
+ auto rv = detail::MemoryIdler::futexWaitUntil(state_, WAITING, deadline);
376
+
377
+ // Awoken by the deadline passing.
378
+ if (rv == detail::FutexResult::TIMEDOUT) {
379
+ assert(deadline != (std::chrono::time_point<Clock, Duration>::max()));
380
+ state_.store(TIMED_OUT, std::memory_order_relaxed);
381
+ return false;
382
+ }
383
+
384
+ // Probably awoken by a matching wake event, but could also by awoken
385
+ // by an asynchronous signal or by a spurious wakeup.
386
+ //
387
+ // state_ is the truth even if FUTEX_WAIT reported a matching
388
+ // FUTEX_WAKE, since we aren't using type-stable storage and we
389
+ // don't guarantee reuse. The scenario goes like this: thread
390
+ // A's last touch of a Baton is a call to post(), which stores
391
+ // LATE_DELIVERY and gets an unlucky context switch before delivering
392
+ // the corresponding futexWake. Thread B sees LATE_DELIVERY
393
+ // without consuming a futex event, because it calls futexWait
394
+ // with an expected value of WAITING and hence doesn't go to sleep.
395
+ // B returns, so the Baton's memory is reused and becomes another
396
+ // Baton (or a reuse of this one). B calls futexWait on the new
397
+ // Baton lifetime, then A wakes up and delivers a spurious futexWake
398
+ // to the same memory location. B's futexWait will then report a
399
+ // consumed wake event even though state_ is still WAITING.
400
+ //
401
+ // It would be possible to add an extra state_ dance to communicate
402
+ // that the futexWake has been sent so that we can be sure to consume
403
+ // it before returning, but that would be a perf and complexity hit.
404
+ uint32_t s = state_.load(std::memory_order_acquire);
405
+ assert(s == WAITING || s == LATE_DELIVERY);
406
+ if (s == LATE_DELIVERY) {
407
+ // The baton was posted and this is not just a spurious wakeup.
408
+ // Therefore the wait succeeds.
409
+ //
410
+ // Match the post store-release with the simple load-acquire above.
411
+ return true;
412
+ }
413
+ }
414
+ }
415
+
416
+ detail::Futex<Atom> state_;
417
+ };
418
+
419
+ } // namespace folly
@@ -0,0 +1,263 @@
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
+ //
18
+ // Docs: https://fburl.com/fbcref_callonce
19
+ //
20
+
21
+ #pragma once
22
+
23
+ #include <atomic>
24
+ #include <utility>
25
+
26
+ #include <folly/Likely.h>
27
+ #include <folly/MicroLock.h>
28
+ #include <folly/Portability.h>
29
+ #include <folly/SharedMutex.h>
30
+ #include <folly/functional/Invoke.h>
31
+
32
+ namespace folly {
33
+
34
+ /**
35
+ * The flag template to be used with call_once. Parameterizable by the mutex
36
+ * type and atomic template. The mutex type is required to mimic std::mutex and
37
+ * the atomic type is required to mimic std::atomic.
38
+ */
39
+ template <typename Mutex, template <typename> class Atom = std::atomic>
40
+ class basic_once_flag;
41
+
42
+ /**
43
+ * An alternative flag template that can be used with call_once that uses only
44
+ * 1 byte. Internally, compact_once_flag uses folly::MicroLock and its data
45
+ * storage API.
46
+ */
47
+ class compact_once_flag;
48
+
49
+ /**
50
+ * Drop-in replacement for std::call_once.
51
+ *
52
+ * The libstdc++ implementation has two flaws:
53
+ * * it lacks a fast path, and
54
+ * * it deadlocks (in explicit violation of the standard) when invoked twice
55
+ * with a given flag, and the callable passed to the first invocation throws.
56
+ *
57
+ * This implementation corrects both flaws.
58
+ *
59
+ * The tradeoff is a slightly larger once_flag struct at 8 bytes, vs 4 bytes
60
+ * with libstdc++ on Linux/x64. However, you may use folly::compact_once_flag
61
+ * which is 1 byte.
62
+ *
63
+ * Does not work with std::once_flag.
64
+ *
65
+ * mimic: std::call_once
66
+ */
67
+ template <typename OnceFlag, typename F, typename... Args>
68
+ FOLLY_ALWAYS_INLINE void call_once(OnceFlag& flag, F&& f, Args&&... args) {
69
+ if (FOLLY_LIKELY(flag.test_once())) {
70
+ return;
71
+ }
72
+ flag.call_once_slow(std::forward<F>(f), std::forward<Args>(args)...);
73
+ }
74
+
75
+ /**
76
+ * Like call_once, but using a boolean return type to signal pass/fail rather
77
+ * than throwing exceptions.
78
+ *
79
+ * Returns true if any previous call to try_call_once with the same once_flag
80
+ * has returned true or if any previous call to call_once with the same
81
+ * once_flag has completed without throwing an exception or if the function
82
+ * passed as an argument returns true; otherwise returns false.
83
+ *
84
+ * Note: This has no parallel in the std::once_flag interface.
85
+ */
86
+ template <typename OnceFlag, typename F, typename... Args>
87
+ FOLLY_NODISCARD FOLLY_ALWAYS_INLINE bool try_call_once(
88
+ OnceFlag& flag, F&& f, Args&&... args) noexcept {
89
+ static_assert(is_nothrow_invocable_v<F, Args...>, "must be noexcept");
90
+ if (FOLLY_LIKELY(flag.test_once())) {
91
+ return true;
92
+ }
93
+ return flag.try_call_once_slow(
94
+ std::forward<F>(f), std::forward<Args>(args)...);
95
+ }
96
+
97
+ /**
98
+ * Tests whether any invocation to call_once with the given flag has succeeded.
99
+ *
100
+ * May help with space usage in certain esoteric scenarios compared with caller
101
+ * code tracking a separate and possibly-padded bool.
102
+ *
103
+ * Note: This has no parallel in the std::once_flag interface.
104
+ */
105
+ template <typename OnceFlag>
106
+ FOLLY_ALWAYS_INLINE bool test_once(OnceFlag const& flag) noexcept {
107
+ return flag.test_once();
108
+ }
109
+
110
+ /**
111
+ * Resets a flag.
112
+ *
113
+ * Warning: unsafe to call concurrently with any other flag operations.
114
+ */
115
+ template <typename OnceFlag>
116
+ FOLLY_ALWAYS_INLINE void reset_once(OnceFlag& flag) noexcept {
117
+ return flag.reset_once();
118
+ }
119
+
120
+ /**
121
+ * Sets a flag, as if call_once(flag, [] {}) was called.
122
+ *
123
+ * Warning: unsafe to call concurrently with any other flag operations.
124
+ */
125
+ template <typename OnceFlag>
126
+ FOLLY_ALWAYS_INLINE void set_once(OnceFlag& flag) noexcept {
127
+ return flag.set_once();
128
+ }
129
+
130
+ template <typename Mutex, template <typename> class Atom>
131
+ class basic_once_flag {
132
+ public:
133
+ constexpr basic_once_flag() noexcept = default;
134
+ basic_once_flag(const basic_once_flag&) = delete;
135
+ basic_once_flag& operator=(const basic_once_flag&) = delete;
136
+
137
+ private:
138
+ template <typename OnceFlag, typename F, typename... Args>
139
+ friend void call_once(OnceFlag&, F&&, Args&&...);
140
+
141
+ template <typename OnceFlag>
142
+ friend bool test_once(OnceFlag const& flag) noexcept;
143
+
144
+ template <typename OnceFlag>
145
+ friend void reset_once(OnceFlag&) noexcept;
146
+
147
+ template <typename OnceFlag>
148
+ friend void set_once(OnceFlag&) noexcept;
149
+
150
+ template <typename F, typename... Args>
151
+ FOLLY_NOINLINE void call_once_slow(F&& f, Args&&... args) {
152
+ std::lock_guard<Mutex> lock(mutex_);
153
+ if (called_.load(std::memory_order_relaxed)) {
154
+ return;
155
+ }
156
+ invoke(std::forward<F>(f), std::forward<Args>(args)...);
157
+ called_.store(true, std::memory_order_release);
158
+ }
159
+
160
+ template <typename OnceFlag, typename F, typename... Args>
161
+ friend bool try_call_once(OnceFlag&, F&&, Args&&...) noexcept;
162
+
163
+ template <typename F, typename... Args>
164
+ FOLLY_NOINLINE bool try_call_once_slow(F&& f, Args&&... args) noexcept {
165
+ std::lock_guard<Mutex> lock(mutex_);
166
+ if (called_.load(std::memory_order_relaxed)) {
167
+ return true;
168
+ }
169
+ auto const pass = invoke(std::forward<F>(f), std::forward<Args>(args)...);
170
+ called_.store(pass, std::memory_order_release);
171
+ return pass;
172
+ }
173
+
174
+ FOLLY_ALWAYS_INLINE bool test_once() const noexcept {
175
+ return called_.load(std::memory_order_acquire);
176
+ }
177
+
178
+ FOLLY_ALWAYS_INLINE void reset_once() noexcept {
179
+ called_.store(false, std::memory_order_relaxed);
180
+ }
181
+
182
+ FOLLY_ALWAYS_INLINE void set_once() noexcept {
183
+ called_.store(true, std::memory_order_relaxed);
184
+ }
185
+
186
+ Atom<bool> called_{false};
187
+ Mutex mutex_;
188
+ };
189
+
190
+ class compact_once_flag {
191
+ public:
192
+ compact_once_flag() = default;
193
+ compact_once_flag(const compact_once_flag&) = delete;
194
+ compact_once_flag& operator=(const compact_once_flag&) = delete;
195
+
196
+ private:
197
+ template <typename OnceFlag, typename F, typename... Args>
198
+ friend void call_once(OnceFlag&, F&&, Args&&...);
199
+
200
+ template <typename OnceFlag>
201
+ friend bool test_once(OnceFlag const& flag) noexcept;
202
+
203
+ template <typename OnceFlag>
204
+ friend void reset_once(OnceFlag&) noexcept;
205
+
206
+ template <typename OnceFlag>
207
+ friend void set_once(OnceFlag&) noexcept;
208
+
209
+ template <typename F, typename... Args>
210
+ FOLLY_NOINLINE void call_once_slow(F&& f, Args&&... args) {
211
+ folly::MicroLock::LockGuardWithData guard(mutex_);
212
+ if (guard.loadedValue() != 0) {
213
+ return;
214
+ }
215
+ invoke(std::forward<F>(f), std::forward<Args>(args)...);
216
+ guard.storeValue(1);
217
+ }
218
+
219
+ template <typename OnceFlag, typename F, typename... Args>
220
+ friend bool try_call_once(OnceFlag&, F&&, Args&&...) noexcept;
221
+
222
+ template <typename F, typename... Args>
223
+ FOLLY_NOINLINE bool try_call_once_slow(F&& f, Args&&... args) noexcept {
224
+ folly::MicroLock::LockGuardWithData guard(mutex_);
225
+ if (guard.loadedValue() != 0) {
226
+ return true;
227
+ }
228
+ const auto pass = static_cast<bool>(
229
+ invoke(std::forward<F>(f), std::forward<Args>(args)...));
230
+ guard.storeValue(pass ? 1 : 0);
231
+ return pass;
232
+ }
233
+
234
+ FOLLY_ALWAYS_INLINE bool test_once() const noexcept {
235
+ return mutex_.load(std::memory_order_acquire) != 0;
236
+ }
237
+
238
+ FOLLY_ALWAYS_INLINE void reset_once() noexcept {
239
+ folly::MicroLock::LockGuardWithData guard(mutex_);
240
+ guard.storeValue(0);
241
+ }
242
+
243
+ FOLLY_ALWAYS_INLINE void set_once() noexcept {
244
+ folly::MicroLock::LockGuardWithData guard(mutex_);
245
+ guard.storeValue(1);
246
+ }
247
+
248
+ folly::MicroLock mutex_;
249
+ };
250
+
251
+ static_assert(
252
+ sizeof(compact_once_flag) == 1, "compact_once_flag should be 1 byte");
253
+
254
+ /**
255
+ * The flag type to be used with call_once. An instance of basic_once_flag.
256
+ *
257
+ * Does not work with std::call_once.
258
+ *
259
+ * mimic: std::once_flag
260
+ */
261
+ using once_flag = basic_once_flag<SharedMutex>;
262
+
263
+ } // namespace folly