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,887 @@
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 <chrono>
20
+ #include <mutex>
21
+ #include <shared_mutex>
22
+ #include <system_error>
23
+ #include <type_traits>
24
+
25
+ #include <folly/Portability.h>
26
+ #include <folly/Traits.h>
27
+ #include <folly/functional/Invoke.h>
28
+ #include <folly/lang/Exception.h>
29
+ #include <folly/lang/Hint.h>
30
+
31
+ namespace folly {
32
+
33
+ namespace access {
34
+
35
+ // locks and unlocks
36
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(lock);
37
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock);
38
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_for);
39
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_until);
40
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock);
41
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(lock_shared);
42
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_shared);
43
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_shared_for);
44
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_shared_until);
45
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_shared);
46
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(lock_upgrade);
47
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_upgrade);
48
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_upgrade_for);
49
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_lock_upgrade_until);
50
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_upgrade);
51
+
52
+ // transitions
53
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_and_lock_shared);
54
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_and_lock_upgrade);
55
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock);
56
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_for);
57
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_until);
58
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_upgrade);
59
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_upgrade_for);
60
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_shared_and_lock_upgrade_until);
61
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_upgrade_and_lock);
62
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_upgrade_and_lock);
63
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_upgrade_and_lock_for);
64
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(try_unlock_upgrade_and_lock_until);
65
+ FOLLY_CREATE_MEMBER_INVOKER_SUITE(unlock_upgrade_and_lock_shared);
66
+
67
+ } // namespace access
68
+
69
+ namespace detail {
70
+
71
+ // A lock base class with a mostly-complete implementation suitable for either
72
+ // unique, shared, or upgrade lock base classes. However, each particular base
73
+ // class specific to each lock category must still be its own class to avoid
74
+ // overly permissive overloads of member and free swap.
75
+ template <typename Mutex, typename Policy>
76
+ class lock_base {
77
+ public:
78
+ using mutex_type = Mutex;
79
+ using state_type = invoke_result_t<typename Policy::lock_fn, mutex_type&>;
80
+
81
+ static_assert(
82
+ std::is_same<state_type, std::decay_t<state_type>>::value,
83
+ "state_type, if not void, must be a value type");
84
+ static_assert(
85
+ std::is_void<state_type>::value ||
86
+ (std::is_nothrow_default_constructible<state_type>::value &&
87
+ std::is_nothrow_copy_constructible<state_type>::value &&
88
+ std::is_nothrow_copy_assignable<state_type>::value &&
89
+ std::is_nothrow_destructible<state_type>::value),
90
+ "state_type, if not void, must be noexcept-semiregular");
91
+ static_assert(
92
+ std::is_void<state_type>::value ||
93
+ std::is_constructible<bool, state_type>::value,
94
+ "state_type, if not void, must explicitly convert to bool");
95
+
96
+ private:
97
+ static constexpr bool has_state_ = !std::is_void<state_type>::value;
98
+ using owner_type = conditional_t<has_state_, state_type, bool>;
99
+ template <bool C, typename V = int>
100
+ using if_ = std::enable_if_t<C, V>;
101
+
102
+ static bool owner_true_(tag_t<bool>) noexcept { return true; }
103
+ static owner_type owner_true_(tag_t<state_type>) noexcept { return {}; }
104
+
105
+ mutex_type* mutex_{};
106
+ owner_type state_{};
107
+
108
+ public:
109
+ FOLLY_NODISCARD lock_base() = default;
110
+ FOLLY_NODISCARD lock_base(lock_base&& that) noexcept
111
+ : mutex_{std::exchange(that.mutex_, nullptr)},
112
+ state_{std::exchange(that.state_, owner_type{})} {}
113
+ template <typename M = mutex_type, if_<!has_state_, M>* = nullptr>
114
+ FOLLY_NODISCARD lock_base(type_t<M>& mutex, std::adopt_lock_t)
115
+ : mutex_{std::addressof(mutex)}, state_{owner_true_(tag<owner_type>)} {}
116
+ template <typename M = mutex_type, if_<has_state_, M>* = nullptr>
117
+ FOLLY_NODISCARD lock_base(
118
+ type_t<M>& mutex, std::adopt_lock_t, owner_type const& state)
119
+ : mutex_{std::addressof(mutex)}, state_{state} {
120
+ state_ || (check_fail_<true>(), 0);
121
+ }
122
+ FOLLY_NODISCARD explicit lock_base(mutex_type& mutex)
123
+ : mutex_{std::addressof(mutex)} {
124
+ lock();
125
+ }
126
+ lock_base(mutex_type& mutex, std::defer_lock_t) noexcept
127
+ : mutex_{std::addressof(mutex)} {}
128
+ FOLLY_NODISCARD lock_base(mutex_type& mutex, std::try_to_lock_t)
129
+ : mutex_{std::addressof(mutex)} {
130
+ try_lock();
131
+ }
132
+ template <typename Rep, typename Period>
133
+ FOLLY_NODISCARD lock_base(
134
+ mutex_type& mutex, std::chrono::duration<Rep, Period> const& timeout)
135
+ : mutex_{std::addressof(mutex)} {
136
+ try_lock_for(timeout);
137
+ }
138
+ template <typename Clock, typename Duration>
139
+ FOLLY_NODISCARD lock_base(
140
+ mutex_type& mutex,
141
+ std::chrono::time_point<Clock, Duration> const& deadline)
142
+ : mutex_{std::addressof(mutex)} {
143
+ try_lock_until(deadline);
144
+ }
145
+
146
+ ~lock_base() {
147
+ if (owns_lock()) {
148
+ unlock();
149
+ }
150
+ }
151
+
152
+ lock_base& operator=(lock_base&& that) noexcept {
153
+ if (owns_lock()) {
154
+ unlock();
155
+ }
156
+ mutex_ = std::exchange(that.mutex_, nullptr);
157
+ state_ = std::exchange(that.state_, owner_type{});
158
+ return *this;
159
+ }
160
+
161
+ void lock() {
162
+ check<false>();
163
+ if constexpr (has_state_) {
164
+ state_ = typename Policy::lock_fn{}(*mutex_);
165
+ } else {
166
+ typename Policy::lock_fn{}(*mutex_);
167
+ state_ = true;
168
+ }
169
+ }
170
+
171
+ bool try_lock() {
172
+ check<false>();
173
+ state_ = typename Policy::try_lock_fn{}(*mutex_);
174
+ return !!state_;
175
+ }
176
+
177
+ template <typename Rep, typename Period>
178
+ bool try_lock_for(std::chrono::duration<Rep, Period> const& timeout) {
179
+ check<false>();
180
+ state_ = typename Policy::try_lock_for_fn{}(*mutex_, timeout);
181
+ return !!state_;
182
+ }
183
+
184
+ template <typename Clock, typename Duration>
185
+ bool try_lock_until(
186
+ std::chrono::time_point<Clock, Duration> const& deadline) {
187
+ check<false>();
188
+ state_ = typename Policy::try_lock_until_fn{}(*mutex_, deadline);
189
+ return !!state_;
190
+ }
191
+
192
+ void unlock() {
193
+ check<true>();
194
+ if constexpr (has_state_) {
195
+ auto const& state = state_; // prohibit unlock to mutate state_
196
+ typename Policy::unlock_fn{}(*mutex_, state);
197
+ } else {
198
+ typename Policy::unlock_fn{}(*mutex_);
199
+ }
200
+ state_ = decltype(state_){};
201
+ }
202
+
203
+ mutex_type* release() noexcept {
204
+ state_ = {};
205
+ return std::exchange(mutex_, nullptr);
206
+ }
207
+
208
+ mutex_type* mutex() const noexcept { return mutex_; }
209
+
210
+ template <bool C = has_state_, if_<C> = 0>
211
+ state_type state() const noexcept {
212
+ return state_;
213
+ }
214
+
215
+ bool owns_lock() const noexcept { return !!state_; }
216
+
217
+ explicit operator bool() const noexcept { return !!state_; }
218
+
219
+ protected:
220
+ void swap(lock_base& that) noexcept {
221
+ std::swap(mutex_, that.mutex_);
222
+ std::swap(state_, that.state_);
223
+ }
224
+
225
+ private:
226
+ template <bool Owns>
227
+ void check() {
228
+ if (!mutex_ || !state_ == Owns) {
229
+ check_fail_<Owns>();
230
+ }
231
+ }
232
+
233
+ template <bool Owns>
234
+ [[noreturn]] FOLLY_NOINLINE void check_fail_() {
235
+ auto perm = std::errc::operation_not_permitted;
236
+ auto dead = std::errc::resource_deadlock_would_occur;
237
+ auto code = !mutex_ || !state_ ? perm : dead;
238
+ throw_exception<std::system_error>(std::make_error_code(code));
239
+ }
240
+ };
241
+
242
+ template <typename Mutex, typename Policy>
243
+ class lock_guard_base
244
+ : unsafe_for_async_usage_if<!is_coro_aware_mutex_v<Mutex>> {
245
+ private:
246
+ using lock_type_ = lock_base<Mutex, Policy>;
247
+ using lock_state_type_ = typename lock_type_::state_type;
248
+
249
+ static constexpr bool has_state_ = !std::is_void<lock_state_type_>::value;
250
+ using state_type_ = conditional_t<has_state_, lock_state_type_, bool>;
251
+ template <bool C>
252
+ using if_ = std::enable_if_t<C, int>;
253
+
254
+ public:
255
+ using mutex_type = Mutex;
256
+
257
+ lock_guard_base(lock_guard_base const&) = delete;
258
+ lock_guard_base(lock_guard_base&&) = delete;
259
+ explicit lock_guard_base(mutex_type& mutex) : lock_{mutex} {}
260
+ template <bool C = has_state_, if_<!C> = 0>
261
+ lock_guard_base(mutex_type& mutex, std::adopt_lock_t)
262
+ : lock_{mutex, std::adopt_lock} {}
263
+ template <bool C = has_state_, if_<C> = 0>
264
+ lock_guard_base(
265
+ mutex_type& mutex, std::adopt_lock_t, state_type_ const& state)
266
+ : lock_{mutex, std::adopt_lock, state} {}
267
+
268
+ void operator=(lock_guard_base const&) = delete;
269
+ void operator=(lock_guard_base&&) = delete;
270
+
271
+ private:
272
+ lock_type_ lock_;
273
+ };
274
+
275
+ struct lock_policy_unique {
276
+ using lock_fn = access::lock_fn;
277
+ using try_lock_fn = access::try_lock_fn;
278
+ using try_lock_for_fn = access::try_lock_for_fn;
279
+ using try_lock_until_fn = access::try_lock_until_fn;
280
+ using unlock_fn = access::unlock_fn;
281
+ };
282
+
283
+ struct lock_policy_shared {
284
+ using lock_fn = access::lock_shared_fn;
285
+ using try_lock_fn = access::try_lock_shared_fn;
286
+ using try_lock_for_fn = access::try_lock_shared_for_fn;
287
+ using try_lock_until_fn = access::try_lock_shared_until_fn;
288
+ using unlock_fn = access::unlock_shared_fn;
289
+ };
290
+
291
+ struct lock_policy_upgrade {
292
+ using lock_fn = access::lock_upgrade_fn;
293
+ using try_lock_fn = access::try_lock_upgrade_fn;
294
+ using try_lock_for_fn = access::try_lock_upgrade_for_fn;
295
+ using try_lock_until_fn = access::try_lock_upgrade_until_fn;
296
+ using unlock_fn = access::unlock_upgrade_fn;
297
+ };
298
+
299
+ template <typename Mutex>
300
+ using lock_policy_hybrid = conditional_t<
301
+ is_invocable_v<access::lock_shared_fn, Mutex&>,
302
+ lock_policy_shared,
303
+ lock_policy_unique>;
304
+
305
+ template <typename Mutex>
306
+ using lock_base_unique = lock_base<Mutex, lock_policy_unique>;
307
+
308
+ template <typename Mutex>
309
+ using lock_base_shared = lock_base<Mutex, lock_policy_shared>;
310
+
311
+ template <typename Mutex>
312
+ using lock_base_upgrade = lock_base<Mutex, lock_policy_upgrade>;
313
+
314
+ template <typename Mutex>
315
+ using lock_base_hybrid = lock_base<Mutex, lock_policy_hybrid<Mutex>>;
316
+
317
+ } // namespace detail
318
+
319
+ // unique_lock_base
320
+ //
321
+ // A lock-holder base which holds exclusive locks, usable with any mutex type.
322
+ //
323
+ // Works with both lockable mutex types and lockable-with-state mutex types.
324
+ //
325
+ // When defining lockable-with-state mutex types, specialize std::unique_lock
326
+ // to derive this. See the example with upgrade_lock.
327
+ //
328
+ // A lockable-with-state mutex type is signalled by the return type of mutex
329
+ // member function lock. Members try_lock, try_lock_for, and try_lock_until
330
+ // all return this type and member unlock accepts this type.
331
+ template <typename Mutex>
332
+ class unique_lock_base : public detail::lock_base_unique<Mutex> {
333
+ private:
334
+ using base = detail::lock_base_unique<Mutex>;
335
+ using self = unique_lock_base;
336
+
337
+ public:
338
+ using base::base;
339
+
340
+ void swap(self& that) noexcept { base::swap(that); }
341
+
342
+ friend void swap(self& a, self& b) noexcept { a.swap(b); }
343
+ };
344
+
345
+ // shared_lock_base
346
+ //
347
+ // A lock-holder base which holds shared locks, usable with any shared mutex
348
+ // type.
349
+ //
350
+ // Works with both shared-lockable mutex types and shared-lockable-with-state
351
+ // mutex types.
352
+ //
353
+ // When defining shared-lockable-with-state mutex types, specialize
354
+ // std::shared_lock to derive this. See the example with upgrade_lock.
355
+ //
356
+ // A shared-lockable-with-state mutex type is signalled by the return type of
357
+ // mutex member function lock_shared. Members try_lock_shared,
358
+ // try_lock_shared_for, and try_lock_shared_until all return this type and
359
+ // member unlock_shared accepts this type. Likewise for mutex member
360
+ // transition functions.
361
+ template <typename Mutex>
362
+ class shared_lock_base : public detail::lock_base_shared<Mutex> {
363
+ private:
364
+ using base = detail::lock_base_shared<Mutex>;
365
+ using self = shared_lock_base;
366
+
367
+ public:
368
+ using base::base;
369
+
370
+ void swap(self& that) noexcept { base::swap(that); }
371
+
372
+ friend void swap(self& a, self& b) noexcept { a.swap(b); }
373
+ };
374
+
375
+ // upgrade_lock_base
376
+ //
377
+ // A lock-holder base which holds upgrade locks, usable with any upgrade mutex
378
+ // type.
379
+ //
380
+ // Works with both upgrade-lockable mutex types and upgrade-lockable-with-state
381
+ // mutex types.
382
+ //
383
+ // There are no use-cases except the one below.
384
+ //
385
+ // An upgrade-lockable-with-state mutex type is signalled by the return type of
386
+ // mutex member function lock_upgrade. Members try_lock_upgrade,
387
+ // try_lock_upgrade_for, and try_lock_upgrade_until all return this type and
388
+ // member unlock_upgrade accepts this type. Likewise for mutex member
389
+ // transition functions.
390
+ template <typename Mutex>
391
+ class upgrade_lock_base : public detail::lock_base_upgrade<Mutex> {
392
+ private:
393
+ using base = detail::lock_base_upgrade<Mutex>;
394
+ using self = upgrade_lock_base;
395
+
396
+ public:
397
+ using base::base;
398
+
399
+ void swap(self& that) noexcept { base::swap(that); }
400
+
401
+ friend void swap(self& a, self& b) noexcept { a.swap(b); }
402
+ };
403
+
404
+ // hybrid_lock_base
405
+ //
406
+ // A lock-holder base which holds shared locks for shared mutex types or
407
+ // exclusive locks otherwise.
408
+ //
409
+ // See unique_lock_base and shared_lock_base.
410
+ template <typename Mutex>
411
+ class hybrid_lock_base : public detail::lock_base_hybrid<Mutex> {
412
+ private:
413
+ using base = detail::lock_base_hybrid<Mutex>;
414
+ using self = hybrid_lock_base;
415
+
416
+ public:
417
+ using base::base;
418
+
419
+ void swap(self& that) noexcept { base::swap(that); }
420
+
421
+ friend void swap(self& a, self& b) noexcept { a.swap(b); }
422
+ };
423
+
424
+ // unique_lock
425
+ //
426
+ // Alias to std::unique_lock.
427
+ using std::unique_lock;
428
+
429
+ // shared_lock
430
+ //
431
+ // Alias to std::shared_lock.
432
+ using std::shared_lock;
433
+
434
+ // upgrade_lock
435
+ //
436
+ // A lock-holder type which holds upgrade locks, usable with any upgrade mutex
437
+ // type. An upgrade mutex is a shared mutex which supports the upgrade state.
438
+ //
439
+ // Works with both upgrade-lockable mutex types and upgrade-lockable-with-state
440
+ // mutex types.
441
+ //
442
+ // Upgrade locks are not useful by themselves; they are primarily useful since
443
+ // upgrade locks may be transitioned atomically to exclusive locks. This lock-
444
+ // holder type works with the transition_to_... functions below to facilitate
445
+ // atomic transition from ugprade lock to exclusive lock.
446
+ template <typename Mutex>
447
+ class upgrade_lock : public upgrade_lock_base<Mutex> {
448
+ public:
449
+ using upgrade_lock_base<Mutex>::upgrade_lock_base;
450
+ };
451
+
452
+ template <typename Mutex, typename... A>
453
+ explicit upgrade_lock(Mutex&, A const&...) -> upgrade_lock<Mutex>;
454
+
455
+ // hybrid_lock
456
+ //
457
+ // A lock-holder type which holds shared locks for shared mutex types or
458
+ // exclusive locks otherwise.
459
+ //
460
+ // See unique_lock and shared_lock.
461
+ template <typename Mutex>
462
+ class hybrid_lock : public hybrid_lock_base<Mutex> {
463
+ public:
464
+ using hybrid_lock_base<Mutex>::hybrid_lock_base;
465
+ };
466
+
467
+ template <typename Mutex, typename... A>
468
+ explicit hybrid_lock(Mutex&, A const&...) -> hybrid_lock<Mutex>;
469
+
470
+ // lock_guard_base
471
+ //
472
+ // A lock-guard which holds exclusive locks, usable with any mutex type.
473
+ //
474
+ // Works with both lockable mutex types and lockable-with-state mutex types.
475
+ //
476
+ // When defining lockable-with-state mutex types, specialize std::lock_guard
477
+ // to derive this.
478
+ template <typename Mutex>
479
+ class unique_lock_guard_base
480
+ : public detail::lock_guard_base<Mutex, detail::lock_policy_unique> {
481
+ private:
482
+ using base = detail::lock_guard_base<Mutex, detail::lock_policy_unique>;
483
+
484
+ public:
485
+ using base::base;
486
+ };
487
+
488
+ // unique_lock_guard
489
+ //
490
+ // Alias to std::lock_guard.
491
+ template <typename Mutex>
492
+ using unique_lock_guard = std::lock_guard<Mutex>;
493
+
494
+ // shared_lock_guard
495
+ //
496
+ // A lock-guard which holds shared locks, usable with any shared mutex type.
497
+ //
498
+ // Works with both lockable mutex types and lockable-with-state mutex types.
499
+ template <typename Mutex>
500
+ class shared_lock_guard
501
+ : public detail::lock_guard_base<Mutex, detail::lock_policy_shared> {
502
+ private:
503
+ using base = detail::lock_guard_base<Mutex, detail::lock_policy_shared>;
504
+
505
+ public:
506
+ using base::base;
507
+ };
508
+
509
+ // hybrid_lock_guard
510
+ //
511
+ // For shared mutex types, effectively shared_lock_guard; otherwise,
512
+ // effectively unique_lock_guard.
513
+ template <typename Mutex>
514
+ class hybrid_lock_guard
515
+ : public detail::lock_guard_base<Mutex, detail::lock_policy_hybrid<Mutex>> {
516
+ private:
517
+ using base =
518
+ detail::lock_guard_base<Mutex, detail::lock_policy_hybrid<Mutex>>;
519
+
520
+ public:
521
+ using base::base;
522
+ };
523
+
524
+ template <typename Mutex, typename... A>
525
+ explicit hybrid_lock_guard(Mutex&, A const&...) -> hybrid_lock_guard<Mutex>;
526
+
527
+ } // namespace folly
528
+
529
+ FOLLY_NAMESPACE_STD_BEGIN
530
+
531
+ template <typename Mutex, typename LockFn = ::folly::access::lock_fn>
532
+ unique_lock(Mutex&, adopt_lock_t, invoke_result_t<LockFn, Mutex&> const&)
533
+ -> unique_lock<Mutex>;
534
+
535
+ template <typename Mutex, typename LockFn = ::folly::access::lock_shared_fn>
536
+ shared_lock(Mutex&, adopt_lock_t, invoke_result_t<LockFn, Mutex&> const&)
537
+ -> shared_lock<Mutex>;
538
+
539
+ template <typename Mutex, typename LockFn = ::folly::access::lock_upgrade_fn>
540
+ lock_guard(Mutex&, adopt_lock_t, invoke_result_t<LockFn, Mutex&> const&)
541
+ -> lock_guard<Mutex>;
542
+
543
+ FOLLY_NAMESPACE_STD_END
544
+
545
+ namespace folly {
546
+
547
+ namespace detail {
548
+
549
+ template <typename L>
550
+ using lock_state_type_of_t_ = typename L::state_type;
551
+ template <typename L>
552
+ using lock_state_type_of_t = detected_or_t<void, lock_state_type_of_t_, L>;
553
+
554
+ template <typename State>
555
+ struct transition_lock_result_ {
556
+ template <typename Transition, typename Mutex, typename... A>
557
+ using apply = invoke_result_t<Transition, Mutex&, State const&, A const&...>;
558
+ };
559
+ template <>
560
+ struct transition_lock_result_<void> {
561
+ template <typename Transition, typename Mutex, typename... A>
562
+ using apply = invoke_result_t<Transition, Mutex&, A const&...>;
563
+ };
564
+ template <typename From, typename Transition, typename... A>
565
+ using transition_lock_result_t_ =
566
+ typename transition_lock_result_<lock_state_type_of_t<From>>::
567
+ template apply<Transition, typename From::mutex_type&, A...>;
568
+
569
+ template <typename From, typename Transition, typename... A>
570
+ auto transition_lock_2_(From& lock, Transition transition, A const&... a) {
571
+ using FromState = lock_state_type_of_t<From>;
572
+ if constexpr (std::is_void_v<FromState>) {
573
+ // release() may check or mutate mutex state to support the dissociation;
574
+ // call it before performing the transition.
575
+ return transition(*lock.release(), a...);
576
+ } else {
577
+ auto state = lock.state();
578
+ // release() may check or mutate mutex state to support the dissociation;
579
+ // call it before performing the transition.
580
+ return transition(*lock.release(), std::move(state), a...);
581
+ }
582
+ }
583
+ template <typename From, typename Transition, typename... A>
584
+ auto transition_lock_1_(From& lock, Transition transition, A const&... a) {
585
+ using Result = transition_lock_result_t_<From, Transition, A...>;
586
+ if constexpr (std::is_void_v<Result>) {
587
+ return detail::transition_lock_2_(lock, transition, a...), true;
588
+ } else {
589
+ return detail::transition_lock_2_(lock, transition, a...);
590
+ }
591
+ }
592
+ template <typename To, typename From, typename Transition, typename... A>
593
+ auto transition_lock_0_(From& lock, Transition transition, A const&... a) {
594
+ using ToState = lock_state_type_of_t<To>;
595
+ auto& mutex = *lock.mutex();
596
+ auto s = detail::transition_lock_1_(lock, transition, a...);
597
+ if constexpr (std::is_void_v<ToState>) {
598
+ return !s ? To{} : To{mutex, std::adopt_lock};
599
+ } else {
600
+ return !s ? To{} : To{mutex, std::adopt_lock, s};
601
+ }
602
+ }
603
+ template <
604
+ template <typename>
605
+ class To,
606
+ template <typename>
607
+ class From,
608
+ typename Mutex,
609
+ typename Transition,
610
+ typename... A>
611
+ auto transition_lock_(From<Mutex>& lock, Transition transition, A const&... a) {
612
+ // clang-format off
613
+ return
614
+ !lock.mutex() ? To<Mutex>{} :
615
+ !lock.owns_lock() ? To<Mutex>{*lock.release(), std::defer_lock} :
616
+ detail::transition_lock_0_<To<Mutex>>(lock, transition, a...);
617
+ // clang-format on
618
+ }
619
+
620
+ template <typename, typename>
621
+ struct transition_lock_policy;
622
+
623
+ template <typename Mutex>
624
+ struct transition_lock_policy<unique_lock<Mutex>, shared_lock<Mutex>> {
625
+ using transition_fn = access::unlock_and_lock_shared_fn;
626
+ };
627
+ template <typename Mutex>
628
+ struct transition_lock_policy<unique_lock<Mutex>, upgrade_lock<Mutex>> {
629
+ using transition_fn = access::unlock_and_lock_upgrade_fn;
630
+ };
631
+ template <typename Mutex>
632
+ struct transition_lock_policy<shared_lock<Mutex>, unique_lock<Mutex>> {
633
+ using try_transition_fn = access::try_unlock_shared_and_lock_fn;
634
+ using try_transition_for_fn = access::try_unlock_shared_and_lock_for_fn;
635
+ using try_transition_until_fn = access::try_unlock_shared_and_lock_until_fn;
636
+ };
637
+ template <typename Mutex>
638
+ struct transition_lock_policy<shared_lock<Mutex>, upgrade_lock<Mutex>> {
639
+ using try_transition_fn = access::try_unlock_shared_and_lock_upgrade_fn;
640
+ using try_transition_for_fn =
641
+ access::try_unlock_shared_and_lock_upgrade_for_fn;
642
+ using try_transition_until_fn =
643
+ access::try_unlock_shared_and_lock_upgrade_until_fn;
644
+ };
645
+ template <typename Mutex>
646
+ struct transition_lock_policy<upgrade_lock<Mutex>, unique_lock<Mutex>> {
647
+ using transition_fn = access::unlock_upgrade_and_lock_fn;
648
+ using try_transition_fn = access::try_unlock_upgrade_and_lock_fn;
649
+ using try_transition_for_fn = access::try_unlock_upgrade_and_lock_for_fn;
650
+ using try_transition_until_fn = access::try_unlock_upgrade_and_lock_until_fn;
651
+ };
652
+ template <typename Mutex>
653
+ struct transition_lock_policy<upgrade_lock<Mutex>, shared_lock<Mutex>> {
654
+ using transition_fn = access::unlock_upgrade_and_lock_shared_fn;
655
+ };
656
+
657
+ } // namespace detail
658
+
659
+ // transition_lock
660
+ //
661
+ // Represents an atomic transition from the from-lock to the to-lock. Waits
662
+ // unboundedly for the transition to become available.
663
+ template <
664
+ template <typename>
665
+ class ToLock,
666
+ typename Mutex,
667
+ template <typename>
668
+ class FromLock>
669
+ ToLock<Mutex> transition_lock(FromLock<Mutex>& lock) {
670
+ using policy = detail::transition_lock_policy<FromLock<Mutex>, ToLock<Mutex>>;
671
+ auto _ = typename policy::transition_fn{};
672
+ return detail::transition_lock_<ToLock>(lock, _);
673
+ }
674
+
675
+ // try_transition_lock
676
+ //
677
+ // Represents an atomic transition attempt from the from-lock to the to-lock.
678
+ // Does not wait if the transition is not immediately available.
679
+ template <
680
+ template <typename>
681
+ class ToLock,
682
+ typename Mutex,
683
+ template <typename>
684
+ class FromLock>
685
+ ToLock<Mutex> try_transition_lock(FromLock<Mutex>& lock) {
686
+ using policy = detail::transition_lock_policy<FromLock<Mutex>, ToLock<Mutex>>;
687
+ auto _ = typename policy::try_transition_fn{};
688
+ return detail::transition_lock_<ToLock>(lock, _);
689
+ }
690
+
691
+ // try_transition_lock_for
692
+ //
693
+ // Represents an atomic transition attempt from the from-lock to the to-lock
694
+ // bounded by a timeout. Waits up to the timeout for the transition to become
695
+ // available.
696
+ template <
697
+ template <typename>
698
+ class ToLock,
699
+ typename Mutex,
700
+ template <typename>
701
+ class FromLock,
702
+ typename Rep,
703
+ typename Period>
704
+ ToLock<Mutex> try_transition_lock_for(
705
+ FromLock<Mutex>& lock, std::chrono::duration<Rep, Period> const& timeout) {
706
+ using policy = detail::transition_lock_policy<FromLock<Mutex>, ToLock<Mutex>>;
707
+ auto _ = typename policy::try_transition_for_fn{};
708
+ return detail::transition_lock_<ToLock>(lock, _, timeout);
709
+ }
710
+
711
+ // try_transition_lock_until
712
+ //
713
+ // Represents an atomic transition attempt from the from-lock to the to-lock
714
+ // bounded by a deadline. Waits up to the deadline for the transition to become
715
+ // available.
716
+ template <
717
+ template <typename>
718
+ class ToLock,
719
+ typename Mutex,
720
+ template <typename>
721
+ class FromLock,
722
+ typename Clock,
723
+ typename Duration>
724
+ ToLock<Mutex> try_transition_lock_until(
725
+ FromLock<Mutex>& lock,
726
+ std::chrono::time_point<Clock, Duration> const& deadline) {
727
+ using policy = detail::transition_lock_policy<FromLock<Mutex>, ToLock<Mutex>>;
728
+ auto _ = typename policy::try_transition_until_fn{};
729
+ return detail::transition_lock_<ToLock>(lock, _, deadline);
730
+ }
731
+
732
+ // transition_to_shared_lock(unique_lock)
733
+ //
734
+ // Wraps mutex member function unlock_and_lock_shared.
735
+ //
736
+ // Represents an immediate atomic downgrade transition from exclusive lock to
737
+ // to shared lock.
738
+ template <typename Mutex>
739
+ shared_lock<Mutex> transition_to_shared_lock(unique_lock<Mutex>& lock) {
740
+ return transition_lock<shared_lock>(lock);
741
+ }
742
+
743
+ // transition_to_shared_lock(upgrade_lock)
744
+ //
745
+ // Wraps mutex member function unlock_upgrade_and_lock_shared.
746
+ //
747
+ // Represents an immediate atomic downgrade transition from upgrade lock to
748
+ // shared lock.
749
+ template <typename Mutex>
750
+ shared_lock<Mutex> transition_to_shared_lock(upgrade_lock<Mutex>& lock) {
751
+ return transition_lock<shared_lock>(lock);
752
+ }
753
+
754
+ // transition_to_upgrade_lock(unique_lock)
755
+ //
756
+ // Wraps mutex member function unlock_and_lock_upgrade.
757
+ //
758
+ // Represents an immediate atomic downgrade transition from unique lock to
759
+ // upgrade lock.
760
+ template <typename Mutex>
761
+ upgrade_lock<Mutex> transition_to_upgrade_lock(unique_lock<Mutex>& lock) {
762
+ return transition_lock<upgrade_lock>(lock);
763
+ }
764
+
765
+ // transition_to_unique_lock(upgrade_lock)
766
+ //
767
+ // Wraps mutex member function unlock_upgrade_and_lock.
768
+ //
769
+ // Represents an eventual atomic upgrade transition from upgrade lock to unique
770
+ // lock.
771
+ template <typename Mutex>
772
+ unique_lock<Mutex> transition_to_unique_lock(upgrade_lock<Mutex>& lock) {
773
+ return transition_lock<unique_lock>(lock);
774
+ }
775
+
776
+ // try_transition_to_unique_lock(upgrade_lock)
777
+ //
778
+ // Wraps mutex member function try_unlock_upgrade_and_lock.
779
+ //
780
+ // Represents an immediate attempted atomic upgrade transition from upgrade
781
+ // lock to unique lock.
782
+ template <typename Mutex>
783
+ unique_lock<Mutex> try_transition_to_unique_lock(upgrade_lock<Mutex>& lock) {
784
+ return transition_lock<unique_lock>(lock);
785
+ }
786
+
787
+ // try_transition_to_unique_lock_for(upgrade_lock)
788
+ //
789
+ // Wraps mutex member function try_unlock_upgrade_and_lock_for.
790
+ //
791
+ // Represents an eventual attempted atomic upgrade transition from upgrade
792
+ // lock to unique lock.
793
+ template <typename Mutex, typename Rep, typename Period>
794
+ unique_lock<Mutex> try_transition_to_unique_lock_for(
795
+ upgrade_lock<Mutex>& lock,
796
+ std::chrono::duration<Rep, Period> const& timeout) {
797
+ return try_transition_lock_for<unique_lock>(lock, timeout);
798
+ }
799
+
800
+ // try_transition_to_unique_lock_until(upgrade_lock)
801
+ //
802
+ // Wraps mutex member function try_unlock_upgrade_and_lock_until.
803
+ //
804
+ // Represents an eventual attempted atomic upgrade transition from upgrade
805
+ // lock to unique lock.
806
+ template <typename Mutex, typename Clock, typename Duration>
807
+ unique_lock<Mutex> try_transition_to_unique_lock_until(
808
+ upgrade_lock<Mutex>& lock,
809
+ std::chrono::time_point<Clock, Duration> const& deadline) {
810
+ return try_transition_lock_until<unique_lock>(lock, deadline);
811
+ }
812
+
813
+ // try_transition_to_unique_lock(shared_lock)
814
+ //
815
+ // Wraps mutex member function try_unlock_shared_and_lock.
816
+ //
817
+ // Represents an immediate attempted atomic upgrade transition from shared
818
+ // lock to unique lock.
819
+ template <typename Mutex>
820
+ unique_lock<Mutex> try_transition_to_unique_lock(shared_lock<Mutex>& lock) {
821
+ return try_transition_lock<unique_lock>(lock);
822
+ }
823
+
824
+ // try_transition_to_unique_lock_for(shared_lock)
825
+ //
826
+ // Wraps mutex member function try_unlock_shared_and_lock_for.
827
+ //
828
+ // Represents an eventual attempted atomic upgrade transition from shared
829
+ // lock to unique lock.
830
+ template <typename Mutex, typename Rep, typename Period>
831
+ unique_lock<Mutex> try_transition_to_unique_lock_for(
832
+ shared_lock<Mutex>& lock,
833
+ std::chrono::duration<Rep, Period> const& timeout) {
834
+ return try_transition_lock_for<unique_lock>(lock, timeout);
835
+ }
836
+
837
+ // try_transition_to_unique_lock_until(shared_lock)
838
+ //
839
+ // Wraps mutex member function try_unlock_shared_and_lock_until.
840
+ //
841
+ // Represents an eventual attempted atomic upgrade transition from shared
842
+ // lock to unique lock.
843
+ template <typename Mutex, typename Clock, typename Duration>
844
+ unique_lock<Mutex> try_transition_to_unique_lock_until(
845
+ shared_lock<Mutex>& lock,
846
+ std::chrono::time_point<Clock, Duration> const& deadline) {
847
+ return try_transition_lock_until<unique_lock>(lock, deadline);
848
+ }
849
+
850
+ // try_transition_to_upgrade_lock(shared_lock)
851
+ //
852
+ // Wraps mutex member function try_unlock_shared_and_lock_upgrade.
853
+ //
854
+ // Represents an immediate attempted atomic upgrade transition from shared
855
+ // lock to upgrade lock.
856
+ template <typename Mutex>
857
+ upgrade_lock<Mutex> try_transition_to_upgrade_lock(shared_lock<Mutex>& lock) {
858
+ return try_transition_lock<upgrade_lock>(lock);
859
+ }
860
+
861
+ // try_transition_to_upgrade_lock_for(shared_lock)
862
+ //
863
+ // Wraps mutex member function try_unlock_shared_and_lock_upgrade_for.
864
+ //
865
+ // Represents an eventual attempted atomic upgrade transition from shared
866
+ // lock to upgrade lock.
867
+ template <typename Mutex, typename Rep, typename Period>
868
+ upgrade_lock<Mutex> try_transition_to_upgrade_lock_for(
869
+ shared_lock<Mutex>& lock,
870
+ std::chrono::duration<Rep, Period> const& timeout) {
871
+ return try_transition_lock_for<upgrade_lock>(lock, timeout);
872
+ }
873
+
874
+ // try_transition_to_upgrade_lock_until(shared_lock)
875
+ //
876
+ // Wraps mutex member function try_unlock_shared_and_lock_upgrade_until.
877
+ //
878
+ // Represents an eventual attempted atomic upgrade transition from shared
879
+ // lock to upgrade lock.
880
+ template <typename Mutex, typename Clock, typename Duration>
881
+ upgrade_lock<Mutex> try_transition_to_upgrade_lock_until(
882
+ shared_lock<Mutex>& lock,
883
+ std::chrono::time_point<Clock, Duration> const& deadline) {
884
+ return try_transition_lock_until<upgrade_lock>(lock, deadline);
885
+ }
886
+
887
+ } // namespace folly