react-native-windows 0.85.0-preview.1 → 0.85.0-preview.2

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 (910) hide show
  1. package/Directory.Build.props +1 -1
  2. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +28 -46
  3. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +0 -3
  4. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +19 -13
  5. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +107 -0
  6. package/Microsoft.ReactNative/Fabric/Composition/SelectionItemAutomationEvent.h +73 -0
  7. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +105 -32
  8. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +7 -2
  9. package/PropertySheets/CIBuildOptimizations.props +2 -2
  10. package/PropertySheets/Generated/PackageVersion.g.props +2 -2
  11. package/PropertySheets/JSEngine.props +1 -1
  12. package/PropertySheets/NuGet.LockFile.props +2 -9
  13. package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +54 -5
  14. package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
  15. package/Scripts/creaternwapp.cmd +29 -9
  16. package/Scripts/creaternwlib.cmd +31 -15
  17. package/external/.clang-format +1 -0
  18. package/external/External.vcxitems +10 -0
  19. package/external/fast-float/.syncignore +10 -0
  20. package/external/fast-float/LICENSE-APACHE +190 -0
  21. package/external/fast-float/LICENSE-BOOST +23 -0
  22. package/external/fast-float/LICENSE-MIT +27 -0
  23. package/external/fast-float/README.md +545 -0
  24. package/external/fast-float/cgmanifest.json +15 -0
  25. package/external/fast-float/fast-float.vcxitems +14 -0
  26. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  27. package/external/fast-float/include/fast_float/bigint.h +638 -0
  28. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  29. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  30. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  31. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  32. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  33. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  34. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  35. package/external/fast-float/sync-config.json +8 -0
  36. package/external/fmt/.syncignore +10 -0
  37. package/external/fmt/CONTRIBUTING.md +20 -0
  38. package/external/fmt/LICENSE +27 -0
  39. package/external/fmt/README.md +484 -0
  40. package/external/fmt/cgmanifest.json +15 -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/Folly.natvis +25 -0
  71. package/external/folly/LICENSE +200 -0
  72. package/external/folly/README.md +263 -0
  73. package/external/folly/cgmanifest.json +25 -0
  74. package/external/folly/folly/.clang-format +1 -0
  75. package/external/folly/folly/AtomicHashArray-inl.h +546 -0
  76. package/external/folly/folly/AtomicHashArray.h +431 -0
  77. package/external/folly/folly/AtomicHashMap-inl.h +653 -0
  78. package/external/folly/folly/AtomicHashMap.h +484 -0
  79. package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
  80. package/external/folly/folly/AtomicLinkedList.h +110 -0
  81. package/external/folly/folly/AtomicUnorderedMap.h +522 -0
  82. package/external/folly/folly/BUCK +1631 -0
  83. package/external/folly/folly/BUILD_MODE.bzl +72 -0
  84. package/external/folly/folly/Benchmark.cpp +986 -0
  85. package/external/folly/folly/Benchmark.h +680 -0
  86. package/external/folly/folly/BenchmarkUtil.h +47 -0
  87. package/external/folly/folly/Bits.h +17 -0
  88. package/external/folly/folly/CMakeLists.txt +110 -0
  89. package/external/folly/folly/CPortability.h +338 -0
  90. package/external/folly/folly/CancellationToken-inl.h +449 -0
  91. package/external/folly/folly/CancellationToken.cpp +250 -0
  92. package/external/folly/folly/CancellationToken.h +365 -0
  93. package/external/folly/folly/Chrono.h +132 -0
  94. package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
  95. package/external/folly/folly/ClockGettimeWrappers.h +29 -0
  96. package/external/folly/folly/ConcurrentBitSet.h +157 -0
  97. package/external/folly/folly/ConcurrentLazy.h +74 -0
  98. package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
  99. package/external/folly/folly/ConcurrentSkipList.h +824 -0
  100. package/external/folly/folly/ConstexprMath.h +978 -0
  101. package/external/folly/folly/ConstructorCallbackList.h +158 -0
  102. package/external/folly/folly/Conv.cpp +1205 -0
  103. package/external/folly/folly/Conv.h +2026 -0
  104. package/external/folly/folly/CppAttributes.h +170 -0
  105. package/external/folly/folly/CpuId.h +297 -0
  106. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  107. package/external/folly/folly/Demangle.cpp +255 -0
  108. package/external/folly/folly/Demangle.h +73 -0
  109. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  110. package/external/folly/folly/DynamicConverter.h +17 -0
  111. package/external/folly/folly/Exception.h +150 -0
  112. package/external/folly/folly/ExceptionString.cpp +51 -0
  113. package/external/folly/folly/ExceptionString.h +33 -0
  114. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  115. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  116. package/external/folly/folly/ExceptionWrapper.h +377 -0
  117. package/external/folly/folly/Executor.cpp +111 -0
  118. package/external/folly/folly/Executor.h +351 -0
  119. package/external/folly/folly/Expected.h +1725 -0
  120. package/external/folly/folly/FBString.h +2888 -0
  121. package/external/folly/folly/FBVector.h +17 -0
  122. package/external/folly/folly/File.cpp +180 -0
  123. package/external/folly/folly/File.h +177 -0
  124. package/external/folly/folly/FileUtil.cpp +378 -0
  125. package/external/folly/folly/FileUtil.h +332 -0
  126. package/external/folly/folly/Fingerprint.cpp +135 -0
  127. package/external/folly/folly/Fingerprint.h +289 -0
  128. package/external/folly/folly/FixedString.h +2965 -0
  129. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  130. package/external/folly/folly/FollyMemcpy.h +23 -0
  131. package/external/folly/folly/FollyMemset.cpp +29 -0
  132. package/external/folly/folly/FollyMemset.h +25 -0
  133. package/external/folly/folly/Format-inl.h +1152 -0
  134. package/external/folly/folly/Format.cpp +429 -0
  135. package/external/folly/folly/Format.h +463 -0
  136. package/external/folly/folly/FormatArg.h +285 -0
  137. package/external/folly/folly/FormatTraits.h +65 -0
  138. package/external/folly/folly/Function.h +1159 -0
  139. package/external/folly/folly/GLog.h +85 -0
  140. package/external/folly/folly/GroupVarint.cpp +153 -0
  141. package/external/folly/folly/GroupVarint.h +630 -0
  142. package/external/folly/folly/Hash.h +20 -0
  143. package/external/folly/folly/IPAddress.cpp +490 -0
  144. package/external/folly/folly/IPAddress.h +667 -0
  145. package/external/folly/folly/IPAddressException.h +82 -0
  146. package/external/folly/folly/IPAddressV4.cpp +305 -0
  147. package/external/folly/folly/IPAddressV4.h +495 -0
  148. package/external/folly/folly/IPAddressV6.cpp +541 -0
  149. package/external/folly/folly/IPAddressV6.h +627 -0
  150. package/external/folly/folly/Indestructible.h +164 -0
  151. package/external/folly/folly/IndexedMemPool.h +550 -0
  152. package/external/folly/folly/IntrusiveList.h +17 -0
  153. package/external/folly/folly/Lazy.h +142 -0
  154. package/external/folly/folly/Likely.h +76 -0
  155. package/external/folly/folly/MPMCPipeline.h +280 -0
  156. package/external/folly/folly/MPMCQueue.h +1556 -0
  157. package/external/folly/folly/MacAddress.cpp +188 -0
  158. package/external/folly/folly/MacAddress.h +260 -0
  159. package/external/folly/folly/MapUtil.h +17 -0
  160. package/external/folly/folly/Math.h +258 -0
  161. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  162. package/external/folly/folly/Memory.h +900 -0
  163. package/external/folly/folly/MicroLock.cpp +76 -0
  164. package/external/folly/folly/MicroLock.h +354 -0
  165. package/external/folly/folly/MicroSpinLock.h +17 -0
  166. package/external/folly/folly/MoveWrapper.h +76 -0
  167. package/external/folly/folly/ObserverContainer.h +1026 -0
  168. package/external/folly/folly/Optional.h +743 -0
  169. package/external/folly/folly/Overload.h +325 -0
  170. package/external/folly/folly/PackedSyncPtr.h +147 -0
  171. package/external/folly/folly/Padded.h +464 -0
  172. package/external/folly/folly/Poly-inl.h +230 -0
  173. package/external/folly/folly/Poly.h +1095 -0
  174. package/external/folly/folly/PolyException.h +43 -0
  175. package/external/folly/folly/Portability.h +644 -0
  176. package/external/folly/folly/Preprocessor.h +236 -0
  177. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  178. package/external/folly/folly/RWSpinLock.h +17 -0
  179. package/external/folly/folly/Random-inl.h +86 -0
  180. package/external/folly/folly/Random.cpp +184 -0
  181. package/external/folly/folly/Random.h +434 -0
  182. package/external/folly/folly/Range.h +1772 -0
  183. package/external/folly/folly/Replaceable.h +636 -0
  184. package/external/folly/folly/ScopeGuard.cpp +29 -0
  185. package/external/folly/folly/ScopeGuard.h +420 -0
  186. package/external/folly/folly/SharedMutex.cpp +81 -0
  187. package/external/folly/folly/SharedMutex.h +1751 -0
  188. package/external/folly/folly/Singleton-inl.h +332 -0
  189. package/external/folly/folly/Singleton.cpp +512 -0
  190. package/external/folly/folly/Singleton.h +891 -0
  191. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  192. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  193. package/external/folly/folly/SocketAddress.cpp +786 -0
  194. package/external/folly/folly/SocketAddress.h +768 -0
  195. package/external/folly/folly/SpinLock.h +55 -0
  196. package/external/folly/folly/String-inl.h +668 -0
  197. package/external/folly/folly/String.cpp +777 -0
  198. package/external/folly/folly/String.h +767 -0
  199. package/external/folly/folly/Subprocess.cpp +1142 -0
  200. package/external/folly/folly/Subprocess.h +1055 -0
  201. package/external/folly/folly/Synchronized.h +1833 -0
  202. package/external/folly/folly/SynchronizedPtr.h +106 -0
  203. package/external/folly/folly/ThreadCachedInt.h +175 -0
  204. package/external/folly/folly/ThreadLocal.h +478 -0
  205. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  206. package/external/folly/folly/TimeoutQueue.h +123 -0
  207. package/external/folly/folly/TokenBucket.h +673 -0
  208. package/external/folly/folly/Traits.h +1442 -0
  209. package/external/folly/folly/Try-inl.h +372 -0
  210. package/external/folly/folly/Try.cpp +23 -0
  211. package/external/folly/folly/Try.h +728 -0
  212. package/external/folly/folly/UTF8String.h +56 -0
  213. package/external/folly/folly/Unicode.cpp +201 -0
  214. package/external/folly/folly/Unicode.h +94 -0
  215. package/external/folly/folly/Unit.h +65 -0
  216. package/external/folly/folly/Uri-inl.h +101 -0
  217. package/external/folly/folly/Uri.cpp +190 -0
  218. package/external/folly/folly/Uri.h +142 -0
  219. package/external/folly/folly/Utility.h +932 -0
  220. package/external/folly/folly/VERSION +1 -0
  221. package/external/folly/folly/Varint.h +230 -0
  222. package/external/folly/folly/VirtualExecutor.h +17 -0
  223. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  224. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  225. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  226. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  227. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  228. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  229. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  230. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  231. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  232. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  233. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  234. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  235. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  236. package/external/folly/folly/base64.h +264 -0
  237. package/external/folly/folly/chrono/BUCK +29 -0
  238. package/external/folly/folly/chrono/Clock.h +65 -0
  239. package/external/folly/folly/chrono/Conv.h +712 -0
  240. package/external/folly/folly/chrono/Hardware.h +155 -0
  241. package/external/folly/folly/chrono/test/BUCK +26 -0
  242. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  243. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  244. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  245. package/external/folly/folly/concurrency/BUCK +170 -0
  246. package/external/folly/folly/concurrency/CacheLocality.cpp +633 -0
  247. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  248. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  249. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  250. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  251. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  252. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  253. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  254. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  255. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  256. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  257. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  258. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  259. package/external/folly/folly/concurrency/container/BUCK +77 -0
  260. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  261. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  262. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  263. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  264. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  265. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  266. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  267. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  268. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  269. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  270. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  271. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  272. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  273. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  274. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  275. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  276. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  277. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  278. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  279. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  280. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  281. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  282. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  283. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  284. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  285. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  286. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  287. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  288. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  289. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  290. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  291. package/external/folly/folly/concurrency/test/BUCK +229 -0
  292. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  293. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  294. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  295. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  296. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  297. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  298. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  299. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  300. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  301. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  302. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  303. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  304. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  305. package/external/folly/folly/container/Access.h +57 -0
  306. package/external/folly/folly/container/Array.h +87 -0
  307. package/external/folly/folly/container/BUCK +353 -0
  308. package/external/folly/folly/container/BitIterator.h +203 -0
  309. package/external/folly/folly/container/Enumerate.h +162 -0
  310. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  311. package/external/folly/folly/container/F14.md +300 -0
  312. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  313. package/external/folly/folly/container/F14Map.h +2108 -0
  314. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  315. package/external/folly/folly/container/F14Set.h +1603 -0
  316. package/external/folly/folly/container/FBVector.h +1711 -0
  317. package/external/folly/folly/container/Foreach-inl.h +316 -0
  318. package/external/folly/folly/container/Foreach.h +209 -0
  319. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  320. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  321. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  322. package/external/folly/folly/container/IntrusiveList.h +131 -0
  323. package/external/folly/folly/container/Iterator.h +843 -0
  324. package/external/folly/folly/container/MapUtil.h +376 -0
  325. package/external/folly/folly/container/Merge.h +90 -0
  326. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  327. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  328. package/external/folly/folly/container/Reserve.h +109 -0
  329. package/external/folly/folly/container/SparseByteSet.h +123 -0
  330. package/external/folly/folly/container/View.h +81 -0
  331. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  332. package/external/folly/folly/container/detail/BUCK +115 -0
  333. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  334. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  335. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  336. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  337. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  338. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  339. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  340. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  341. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  342. package/external/folly/folly/container/detail/Util.h +303 -0
  343. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  344. package/external/folly/folly/container/detail/test/BUCK +14 -0
  345. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  346. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  347. package/external/folly/folly/container/range_traits.h +81 -0
  348. package/external/folly/folly/container/small_vector.h +1476 -0
  349. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  350. package/external/folly/folly/container/span.h +408 -0
  351. package/external/folly/folly/container/tape.h +608 -0
  352. package/external/folly/folly/container/test/.clang-tidy +12 -0
  353. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  354. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  355. package/external/folly/folly/container/test/BUCK +568 -0
  356. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  357. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  358. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  359. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  360. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  361. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  362. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  363. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  364. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  365. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  366. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  367. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  368. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  369. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  370. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  371. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  372. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  373. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  374. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  375. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  376. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  377. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  378. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  379. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  380. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  381. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  382. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  383. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  384. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  385. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  386. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  387. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  388. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  389. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  390. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  391. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  392. package/external/folly/folly/container/test/span_test.cpp +520 -0
  393. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  394. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  395. package/external/folly/folly/defs.bzl +238 -0
  396. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  397. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  398. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  399. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  400. package/external/folly/folly/detail/BUCK +406 -0
  401. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  402. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  403. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  404. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  405. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  406. package/external/folly/folly/detail/Futex-inl.h +123 -0
  407. package/external/folly/folly/detail/Futex.cpp +273 -0
  408. package/external/folly/folly/detail/Futex.h +109 -0
  409. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  410. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  411. package/external/folly/folly/detail/IPAddress.h +57 -0
  412. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  413. package/external/folly/folly/detail/Iterators.h +156 -0
  414. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  415. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  416. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  417. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  418. package/external/folly/folly/detail/PerfScoped.h +70 -0
  419. package/external/folly/folly/detail/PolyDetail.h +921 -0
  420. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  421. package/external/folly/folly/detail/RangeCommon.h +93 -0
  422. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  423. package/external/folly/folly/detail/RangeSse42.h +30 -0
  424. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  425. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  426. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  427. package/external/folly/folly/detail/Singleton.h +34 -0
  428. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  429. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  430. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  431. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  432. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  433. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  434. package/external/folly/folly/detail/Sse.cpp +35 -0
  435. package/external/folly/folly/detail/Sse.h +45 -0
  436. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  437. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  438. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  439. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  440. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  441. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  442. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  443. package/external/folly/folly/detail/TypeList.h +551 -0
  444. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  445. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  446. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  447. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  448. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  449. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  450. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  451. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  452. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  453. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  454. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  455. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  456. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  457. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  458. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  459. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  460. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  461. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  462. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  463. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  464. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  465. package/external/folly/folly/detail/test/BUCK +118 -0
  466. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  467. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  468. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  469. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  470. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  471. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  472. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  473. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  474. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  475. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  476. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  477. package/external/folly/folly/docs/AtomicHashMap.md +134 -0
  478. package/external/folly/folly/docs/Benchmark.md +310 -0
  479. package/external/folly/folly/docs/Conv.md +291 -0
  480. package/external/folly/folly/docs/Dynamic.md +220 -0
  481. package/external/folly/folly/docs/DynamicConverter.md +71 -0
  482. package/external/folly/folly/docs/Executors.md +63 -0
  483. package/external/folly/folly/docs/FBString.md +46 -0
  484. package/external/folly/folly/docs/FBVector.md +200 -0
  485. package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
  486. package/external/folly/folly/docs/Format.md +177 -0
  487. package/external/folly/folly/docs/Function.md +92 -0
  488. package/external/folly/folly/docs/Futures.md +263 -0
  489. package/external/folly/folly/docs/GroupVarint.md +46 -0
  490. package/external/folly/folly/docs/Histogram.md +104 -0
  491. package/external/folly/folly/docs/MapUtils.md +80 -0
  492. package/external/folly/folly/docs/Overview.md +263 -0
  493. package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
  494. package/external/folly/folly/docs/Poly.md +500 -0
  495. package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
  496. package/external/folly/folly/docs/Rcu.md +218 -0
  497. package/external/folly/folly/docs/SmallLocks.md +24 -0
  498. package/external/folly/folly/docs/Synchronized.md +793 -0
  499. package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
  500. package/external/folly/folly/docs/ThreadLocal.md +105 -0
  501. package/external/folly/folly/docs/Traits.md +161 -0
  502. package/external/folly/folly/docs/small_vector.md +64 -0
  503. package/external/folly/folly/docs/style.css +23 -0
  504. package/external/folly/folly/dynamic-inl.h +17 -0
  505. package/external/folly/folly/dynamic.h +17 -0
  506. package/external/folly/folly/folly_extended_library.bzl +28 -0
  507. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  508. package/external/folly/folly/functional/BUCK +57 -0
  509. package/external/folly/folly/functional/Invoke.h +880 -0
  510. package/external/folly/folly/functional/Partial.h +130 -0
  511. package/external/folly/folly/functional/protocol.h +203 -0
  512. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  513. package/external/folly/folly/functional/test/BUCK +57 -0
  514. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  515. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  516. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  517. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  518. package/external/folly/folly/functional/traits.h +675 -0
  519. package/external/folly/folly/hash/BUCK +86 -0
  520. package/external/folly/folly/hash/Checksum.cpp +275 -0
  521. package/external/folly/folly/hash/Checksum.h +94 -0
  522. package/external/folly/folly/hash/FarmHash.h +46 -0
  523. package/external/folly/folly/hash/Hash.h +1045 -0
  524. package/external/folly/folly/hash/MurmurHash.h +86 -0
  525. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  526. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  527. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  528. package/external/folly/folly/hash/SpookyHashV2.h +339 -0
  529. package/external/folly/folly/hash/detail/BUCK +26 -0
  530. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  531. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  532. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  533. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  534. package/external/folly/folly/hash/test/BUCK +132 -0
  535. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  536. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  537. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  538. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  539. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  540. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  541. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  542. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  543. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  544. package/external/folly/folly/hash/traits.h +115 -0
  545. package/external/folly/folly/json/BUCK +155 -0
  546. package/external/folly/folly/json/DynamicConverter.h +464 -0
  547. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  548. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  549. package/external/folly/folly/json/DynamicParser.h +394 -0
  550. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  551. package/external/folly/folly/json/JSONSchema.h +73 -0
  552. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  553. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  554. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  555. package/external/folly/folly/json/bser/BUCK +24 -0
  556. package/external/folly/folly/json/bser/Bser.h +107 -0
  557. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  558. package/external/folly/folly/json/bser/Load.cpp +246 -0
  559. package/external/folly/folly/json/bser/test/BUCK +14 -0
  560. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  561. package/external/folly/folly/json/dynamic-inl.h +1438 -0
  562. package/external/folly/folly/json/dynamic.cpp +552 -0
  563. package/external/folly/folly/json/dynamic.h +1346 -0
  564. package/external/folly/folly/json/json.cpp +1118 -0
  565. package/external/folly/folly/json/json.h +238 -0
  566. package/external/folly/folly/json/json_patch.cpp +325 -0
  567. package/external/folly/folly/json/json_patch.h +126 -0
  568. package/external/folly/folly/json/json_pointer.cpp +114 -0
  569. package/external/folly/folly/json/json_pointer.h +87 -0
  570. package/external/folly/folly/json/test/BUCK +147 -0
  571. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  572. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  573. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  574. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  575. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  576. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  577. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  578. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  579. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  580. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  581. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  582. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  583. package/external/folly/folly/json/tool/BUCK +13 -0
  584. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  585. package/external/folly/folly/json.h +17 -0
  586. package/external/folly/folly/json_patch.h +17 -0
  587. package/external/folly/folly/json_pointer.h +17 -0
  588. package/external/folly/folly/lang/Access.h +29 -0
  589. package/external/folly/folly/lang/Align.h +240 -0
  590. package/external/folly/folly/lang/Aligned.h +92 -0
  591. package/external/folly/folly/lang/Assume.h +82 -0
  592. package/external/folly/folly/lang/BUCK +287 -0
  593. package/external/folly/folly/lang/Badge.h +108 -0
  594. package/external/folly/folly/lang/Bits.h +570 -0
  595. package/external/folly/folly/lang/BitsClass.h +312 -0
  596. package/external/folly/folly/lang/Builtin.h +74 -0
  597. package/external/folly/folly/lang/CArray.h +34 -0
  598. package/external/folly/folly/lang/CString.cpp +86 -0
  599. package/external/folly/folly/lang/CString.h +55 -0
  600. package/external/folly/folly/lang/Cast.h +51 -0
  601. package/external/folly/folly/lang/CheckedMath.h +253 -0
  602. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  603. package/external/folly/folly/lang/Exception.cpp +822 -0
  604. package/external/folly/folly/lang/Exception.h +716 -0
  605. package/external/folly/folly/lang/Extern.h +55 -0
  606. package/external/folly/folly/lang/Hint-inl.h +144 -0
  607. package/external/folly/folly/lang/Hint.h +238 -0
  608. package/external/folly/folly/lang/Keep.h +98 -0
  609. package/external/folly/folly/lang/New.h +124 -0
  610. package/external/folly/folly/lang/Ordering.h +140 -0
  611. package/external/folly/folly/lang/Pretty.h +159 -0
  612. package/external/folly/folly/lang/PropagateConst.h +413 -0
  613. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  614. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  615. package/external/folly/folly/lang/SafeAssert.h +188 -0
  616. package/external/folly/folly/lang/StaticConst.h +33 -0
  617. package/external/folly/folly/lang/Thunk.h +100 -0
  618. package/external/folly/folly/lang/ToAscii.cpp +348 -0
  619. package/external/folly/folly/lang/ToAscii.h +182 -0
  620. package/external/folly/folly/lang/TypeInfo.h +58 -0
  621. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  622. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  623. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  624. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  625. package/external/folly/folly/lang/test/BUCK +258 -0
  626. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  627. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  628. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  629. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  630. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  631. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  632. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  633. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  634. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  635. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  636. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  637. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  638. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  639. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  640. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  641. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  642. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  643. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  644. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  645. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  646. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  647. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  648. package/external/folly/folly/memcpy.S +292 -0
  649. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  650. package/external/folly/folly/memory/Arena-inl.h +83 -0
  651. package/external/folly/folly/memory/Arena.h +325 -0
  652. package/external/folly/folly/memory/BUCK +191 -0
  653. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  654. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  655. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  656. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  657. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  658. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  659. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  660. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  661. package/external/folly/folly/memory/Malloc.h +551 -0
  662. package/external/folly/folly/memory/MemoryResource.h +57 -0
  663. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  664. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  665. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  666. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  667. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  668. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  669. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  670. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  671. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  672. package/external/folly/folly/memory/detail/BUCK +10 -0
  673. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  674. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  675. package/external/folly/folly/memory/not_null-inl.h +522 -0
  676. package/external/folly/folly/memory/not_null.h +449 -0
  677. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  678. package/external/folly/folly/memory/test/BUCK +146 -0
  679. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  680. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  681. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  682. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  683. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  684. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  685. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  686. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  687. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  688. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  689. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  690. package/external/folly/folly/memset.S +245 -0
  691. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  692. package/external/folly/folly/portability/Asm.h +50 -0
  693. package/external/folly/folly/portability/Atomic.h +31 -0
  694. package/external/folly/folly/portability/BUCK +456 -0
  695. package/external/folly/folly/portability/Builtins.cpp +31 -0
  696. package/external/folly/folly/portability/Builtins.h +161 -0
  697. package/external/folly/folly/portability/Config.h +43 -0
  698. package/external/folly/folly/portability/Constexpr.h +145 -0
  699. package/external/folly/folly/portability/Dirent.cpp +140 -0
  700. package/external/folly/folly/portability/Dirent.h +41 -0
  701. package/external/folly/folly/portability/Event.h +44 -0
  702. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  703. package/external/folly/folly/portability/Fcntl.h +67 -0
  704. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  705. package/external/folly/folly/portability/Filesystem.h +114 -0
  706. package/external/folly/folly/portability/FmtCompile.h +40 -0
  707. package/external/folly/folly/portability/GFlags.h +139 -0
  708. package/external/folly/folly/portability/GMock.h +35 -0
  709. package/external/folly/folly/portability/GTest.h +35 -0
  710. package/external/folly/folly/portability/IOVec.h +34 -0
  711. package/external/folly/folly/portability/Libgen.cpp +59 -0
  712. package/external/folly/folly/portability/Libgen.h +29 -0
  713. package/external/folly/folly/portability/Libunwind.h +21 -0
  714. package/external/folly/folly/portability/Malloc.cpp +31 -0
  715. package/external/folly/folly/portability/Malloc.h +53 -0
  716. package/external/folly/folly/portability/Math.h +90 -0
  717. package/external/folly/folly/portability/Memory.h +26 -0
  718. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  719. package/external/folly/folly/portability/OpenSSL.h +102 -0
  720. package/external/folly/folly/portability/PThread.cpp +697 -0
  721. package/external/folly/folly/portability/PThread.h +148 -0
  722. package/external/folly/folly/portability/README.md +21 -0
  723. package/external/folly/folly/portability/Sched.cpp +41 -0
  724. package/external/folly/folly/portability/Sched.h +45 -0
  725. package/external/folly/folly/portability/Sockets.cpp +245 -0
  726. package/external/folly/folly/portability/Sockets.h +155 -0
  727. package/external/folly/folly/portability/SourceLocation.h +49 -0
  728. package/external/folly/folly/portability/Stdio.cpp +77 -0
  729. package/external/folly/folly/portability/Stdio.h +32 -0
  730. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  731. package/external/folly/folly/portability/Stdlib.h +64 -0
  732. package/external/folly/folly/portability/String.cpp +53 -0
  733. package/external/folly/folly/portability/String.h +39 -0
  734. package/external/folly/folly/portability/SysFile.cpp +46 -0
  735. package/external/folly/folly/portability/SysFile.h +27 -0
  736. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  737. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  738. package/external/folly/folly/portability/SysMman.cpp +242 -0
  739. package/external/folly/folly/portability/SysMman.h +68 -0
  740. package/external/folly/folly/portability/SysResource.cpp +108 -0
  741. package/external/folly/folly/portability/SysResource.h +71 -0
  742. package/external/folly/folly/portability/SysStat.cpp +66 -0
  743. package/external/folly/folly/portability/SysStat.h +52 -0
  744. package/external/folly/folly/portability/SysSyscall.h +73 -0
  745. package/external/folly/folly/portability/SysTime.cpp +62 -0
  746. package/external/folly/folly/portability/SysTime.h +50 -0
  747. package/external/folly/folly/portability/SysTypes.h +44 -0
  748. package/external/folly/folly/portability/SysUio.cpp +179 -0
  749. package/external/folly/folly/portability/SysUio.h +51 -0
  750. package/external/folly/folly/portability/Syslog.h +39 -0
  751. package/external/folly/folly/portability/Time.cpp +357 -0
  752. package/external/folly/folly/portability/Time.h +74 -0
  753. package/external/folly/folly/portability/Unistd.cpp +33 -0
  754. package/external/folly/folly/portability/Unistd.h +111 -0
  755. package/external/folly/folly/portability/Windows.h +108 -0
  756. package/external/folly/folly/portability/openat2.c +30 -0
  757. package/external/folly/folly/portability/openat2.h +39 -0
  758. package/external/folly/folly/portability/test/BUCK +59 -0
  759. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  760. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  761. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  762. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  763. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  764. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  765. package/external/folly/folly/small_vector.h +17 -0
  766. package/external/folly/folly/somerge_defs.bzl +399 -0
  767. package/external/folly/folly/sorted_vector_types.h +17 -0
  768. package/external/folly/folly/stop_watch.h +317 -0
  769. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  770. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  771. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  772. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  773. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  774. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  775. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  776. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  777. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  778. package/external/folly/folly/synchronization/BUCK +418 -0
  779. package/external/folly/folly/synchronization/Baton.h +419 -0
  780. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  781. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  782. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  783. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  784. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  785. package/external/folly/folly/synchronization/EventCount.h +200 -0
  786. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  787. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  788. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  789. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  790. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  791. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  792. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  793. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  794. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  795. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  796. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  797. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  798. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  799. package/external/folly/folly/synchronization/Latch.h +160 -0
  800. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  801. package/external/folly/folly/synchronization/Lock.h +887 -0
  802. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  803. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  804. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  805. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  806. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  807. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  808. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  809. package/external/folly/folly/synchronization/Rcu.h +553 -0
  810. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  811. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  812. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  813. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  814. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  815. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  816. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  817. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  818. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  819. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  820. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  821. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  822. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  823. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  824. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  825. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  826. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  827. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  828. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  829. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  830. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  831. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  832. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  833. package/external/folly/folly/synchronization/example/BUCK +27 -0
  834. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  835. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  836. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  837. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  838. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  839. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  840. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  841. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  842. package/external/folly/folly/synchronization/test/BUCK +495 -0
  843. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  844. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  845. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  846. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  847. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  848. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  849. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  850. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  851. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  852. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  853. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  854. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  855. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  856. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  857. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  858. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  859. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  860. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  861. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  862. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  863. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  864. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  865. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  866. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  867. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  868. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  869. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  870. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  871. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  872. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  873. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  874. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  875. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  876. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  877. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  878. package/external/folly/folly/system/AtFork.cpp +205 -0
  879. package/external/folly/folly/system/AtFork.h +116 -0
  880. package/external/folly/folly/system/AuxVector.h +198 -0
  881. package/external/folly/folly/system/BUCK +144 -0
  882. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  883. package/external/folly/folly/system/EnvUtil.h +113 -0
  884. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  885. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  886. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  887. package/external/folly/folly/system/MemoryMapping.h +287 -0
  888. package/external/folly/folly/system/Pid.cpp +87 -0
  889. package/external/folly/folly/system/Pid.h +34 -0
  890. package/external/folly/folly/system/Shell.cpp +33 -0
  891. package/external/folly/folly/system/Shell.h +93 -0
  892. package/external/folly/folly/system/ThreadId.cpp +89 -0
  893. package/external/folly/folly/system/ThreadId.h +62 -0
  894. package/external/folly/folly/system/ThreadName.cpp +330 -0
  895. package/external/folly/folly/system/ThreadName.h +72 -0
  896. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  897. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  898. package/external/folly/folly/system/test/BUCK +120 -0
  899. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  900. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  901. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  902. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  903. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  904. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  905. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  906. package/external/folly/folly.vcxitems +164 -0
  907. package/external/folly/static/logo.svg +1 -0
  908. package/external/folly/sync-config.json +8 -0
  909. package/package.json +3 -3
  910. package/templates/cpp-lib/example/metro.config.js +18 -2
@@ -0,0 +1,900 @@
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 <cassert>
20
+ #include <cerrno>
21
+ #include <cstddef>
22
+ #include <cstdlib>
23
+ #include <exception>
24
+ #include <limits>
25
+ #include <memory>
26
+ #include <stdexcept>
27
+ #include <type_traits>
28
+ #include <utility>
29
+
30
+ #include <folly/ConstexprMath.h>
31
+ #include <folly/Likely.h>
32
+ #include <folly/Portability.h>
33
+ #include <folly/Traits.h>
34
+ #include <folly/Utility.h>
35
+ #include <folly/functional/Invoke.h>
36
+ #include <folly/lang/Align.h>
37
+ #include <folly/lang/Exception.h>
38
+ #include <folly/lang/Thunk.h>
39
+ #include <folly/memory/Malloc.h>
40
+ #include <folly/portability/Config.h>
41
+ #include <folly/portability/Constexpr.h>
42
+ #include <folly/portability/Malloc.h>
43
+
44
+ namespace folly {
45
+
46
+ namespace access {
47
+
48
+ /// to_address_fn
49
+ /// to_address
50
+ ///
51
+ /// mimic: std::to_address (C++20)
52
+ ///
53
+ /// adapted from: https://en.cppreference.com/w/cpp/memory/to_address, CC-BY-SA
54
+ struct to_address_fn {
55
+ private:
56
+ template <template <typename...> typename T, typename A, typename... B>
57
+ static tag_t<A> get_first_arg(tag_t<T<A, B...>>);
58
+ template <typename T>
59
+ using first_arg_of = type_list_element_t<0, decltype(get_first_arg(tag<T>))>;
60
+ template <typename T>
61
+ using detect_element_type = typename T::element_type;
62
+ template <typename T>
63
+ using element_type_of =
64
+ detected_or_t<first_arg_of<T>, detect_element_type, T>;
65
+
66
+ template <typename T>
67
+ using detect_to_address =
68
+ decltype(std::pointer_traits<T>::to_address(FOLLY_DECLVAL(T const&)));
69
+
70
+ template <typename T>
71
+ static inline constexpr bool use_pointer_traits_to_address = Conjunction<
72
+ is_detected<element_type_of, T>,
73
+ is_detected<detect_to_address, T>>::value;
74
+
75
+ public:
76
+ template <typename T>
77
+ constexpr T* operator()(T* p) const noexcept {
78
+ static_assert(!std::is_function_v<T>);
79
+ return p;
80
+ }
81
+
82
+ template <typename T>
83
+ constexpr auto operator()(T const& p) const noexcept {
84
+ if constexpr (use_pointer_traits_to_address<T>) {
85
+ static_assert(noexcept(std::pointer_traits<T>::to_address(p)));
86
+ return std::pointer_traits<T>::to_address(p);
87
+ } else {
88
+ static_assert(noexcept(operator()(p.operator->())));
89
+ return operator()(p.operator->());
90
+ }
91
+ }
92
+ };
93
+ inline constexpr to_address_fn to_address;
94
+
95
+ } // namespace access
96
+
97
+ #if (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) || \
98
+ (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600) || \
99
+ (defined(__ANDROID__) && (__ANDROID_API__ > 16)) || \
100
+ (defined(__APPLE__)) || defined(__FreeBSD__) || defined(__wasm32__)
101
+
102
+ inline void* aligned_malloc(size_t size, size_t align) {
103
+ // use posix_memalign, but mimic the behaviour of memalign
104
+ void* ptr = nullptr;
105
+ int rc = posix_memalign(&ptr, align, size);
106
+ return rc == 0 ? (errno = 0, ptr) : (errno = rc, nullptr);
107
+ }
108
+
109
+ inline void aligned_free(void* aligned_ptr) {
110
+ free(aligned_ptr);
111
+ }
112
+
113
+ #elif defined(_WIN32)
114
+
115
+ inline void* aligned_malloc(size_t size, size_t align) {
116
+ return _aligned_malloc(size, align);
117
+ }
118
+
119
+ inline void aligned_free(void* aligned_ptr) {
120
+ _aligned_free(aligned_ptr);
121
+ }
122
+
123
+ #else
124
+
125
+ inline void* aligned_malloc(size_t size, size_t align) {
126
+ return memalign(align, size);
127
+ }
128
+
129
+ inline void aligned_free(void* aligned_ptr) {
130
+ free(aligned_ptr);
131
+ }
132
+
133
+ #endif
134
+
135
+ namespace detail {
136
+ template <typename Alloc, size_t kAlign, bool kAllocate>
137
+ void rawOverAlignedImpl(Alloc const& alloc, size_t n, void*& raw) {
138
+ static_assert((kAlign & (kAlign - 1)) == 0, "Align must be a power of 2");
139
+
140
+ using AllocTraits = std::allocator_traits<Alloc>;
141
+ using T = typename AllocTraits::value_type;
142
+
143
+ constexpr bool kCanBypass = std::is_same<Alloc, std::allocator<T>>::value;
144
+
145
+ // BaseType is a type that gives us as much alignment as we need if
146
+ // we can get it naturally, otherwise it is aligned as max_align_t.
147
+ // kBaseAlign is both the alignment and size of this type.
148
+ constexpr size_t kBaseAlign = constexpr_min(kAlign, alignof(max_align_t));
149
+ using BaseType = folly::aligned_storage_t<kBaseAlign, kBaseAlign>;
150
+ using BaseAllocTraits =
151
+ typename AllocTraits::template rebind_traits<BaseType>;
152
+ using BaseAlloc = typename BaseAllocTraits::allocator_type;
153
+ static_assert(
154
+ sizeof(BaseType) == kBaseAlign && alignof(BaseType) == kBaseAlign, "");
155
+
156
+ #if defined(__cpp_sized_deallocation)
157
+ if (kCanBypass && kAlign == kBaseAlign) {
158
+ // until std::allocator uses sized deallocation, it is worth the
159
+ // effort to bypass it when we are able
160
+ if (kAllocate) {
161
+ raw = ::operator new(n * sizeof(T));
162
+ } else {
163
+ ::operator delete(raw, n * sizeof(T));
164
+ }
165
+ return;
166
+ }
167
+ #endif
168
+
169
+ if (kCanBypass && kAlign > kBaseAlign) {
170
+ // allocating as BaseType isn't sufficient to get alignment, but
171
+ // since we can bypass Alloc we can use something like posix_memalign.
172
+ if (kAllocate) {
173
+ raw = aligned_malloc(n * sizeof(T), kAlign);
174
+ } else {
175
+ aligned_free(raw);
176
+ }
177
+ return;
178
+ }
179
+
180
+ // we're not allowed to bypass Alloc, or we don't want to
181
+ BaseAlloc a(alloc);
182
+
183
+ // allocation size is counted in sizeof(BaseType)
184
+ size_t quanta = (n * sizeof(T) + kBaseAlign - 1) / sizeof(BaseType);
185
+ if (kAlign <= kBaseAlign) {
186
+ // rebinding Alloc to BaseType is sufficient to get us the alignment
187
+ // we want, happy path
188
+ if (kAllocate) {
189
+ raw = static_cast<void*>(
190
+ std::addressof(*BaseAllocTraits::allocate(a, quanta)));
191
+ } else {
192
+ BaseAllocTraits::deallocate(
193
+ a,
194
+ std::pointer_traits<typename BaseAllocTraits::pointer>::pointer_to(
195
+ *static_cast<BaseType*>(raw)),
196
+ quanta);
197
+ }
198
+ return;
199
+ }
200
+
201
+ // Overaligned and custom allocator, our only option is to
202
+ // overallocate and store a delta to the actual allocation just
203
+ // before the returned ptr.
204
+ //
205
+ // If we give ourselves kAlign extra bytes, then since
206
+ // sizeof(BaseType) divides kAlign we can meet alignment while
207
+ // getting a prefix of one BaseType. If we happen to get a
208
+ // kAlign-aligned block, then we can return a pointer to underlying
209
+ // + kAlign, otherwise there will be at least kBaseAlign bytes in
210
+ // the unused prefix of the first kAlign-aligned block.
211
+ if (kAllocate) {
212
+ char* base = reinterpret_cast<char*>(std::addressof(
213
+ *BaseAllocTraits::allocate(a, quanta + kAlign / sizeof(BaseType))));
214
+ size_t byteDelta =
215
+ kAlign - (reinterpret_cast<uintptr_t>(base) & (kAlign - 1));
216
+ raw = static_cast<void*>(base + byteDelta);
217
+ static_cast<size_t*>(raw)[-1] = byteDelta;
218
+ } else {
219
+ size_t byteDelta = static_cast<size_t*>(raw)[-1];
220
+ char* base = static_cast<char*>(raw) - byteDelta;
221
+ BaseAllocTraits::deallocate(
222
+ a,
223
+ std::pointer_traits<typename BaseAllocTraits::pointer>::pointer_to(
224
+ *reinterpret_cast<BaseType*>(base)),
225
+ quanta + kAlign / sizeof(BaseType));
226
+ }
227
+ }
228
+ } // namespace detail
229
+
230
+ // Works like std::allocator_traits<Alloc>::allocate, but handles
231
+ // over-aligned types. Feel free to manually specify any power of two as
232
+ // the Align template arg. Must be matched with deallocateOverAligned.
233
+ // allocationBytesForOverAligned will give you the number of bytes that
234
+ // this function actually requests.
235
+ template <
236
+ typename Alloc,
237
+ size_t kAlign = alignof(typename std::allocator_traits<Alloc>::value_type)>
238
+ typename std::allocator_traits<Alloc>::pointer allocateOverAligned(
239
+ Alloc const& alloc, size_t n) {
240
+ void* raw = nullptr;
241
+ detail::rawOverAlignedImpl<Alloc, kAlign, true>(alloc, n, raw);
242
+ return std::pointer_traits<typename std::allocator_traits<Alloc>::pointer>::
243
+ pointer_to(
244
+ *static_cast<typename std::allocator_traits<Alloc>::value_type*>(
245
+ raw));
246
+ }
247
+
248
+ template <
249
+ typename Alloc,
250
+ size_t kAlign = alignof(typename std::allocator_traits<Alloc>::value_type)>
251
+ void deallocateOverAligned(
252
+ Alloc const& alloc,
253
+ typename std::allocator_traits<Alloc>::pointer ptr,
254
+ size_t n) {
255
+ void* raw = static_cast<void*>(std::addressof(*ptr));
256
+ detail::rawOverAlignedImpl<Alloc, kAlign, false>(alloc, n, raw);
257
+ }
258
+
259
+ template <
260
+ typename Alloc,
261
+ size_t kAlign = alignof(typename std::allocator_traits<Alloc>::value_type)>
262
+ size_t allocationBytesForOverAligned(size_t n) {
263
+ static_assert((kAlign & (kAlign - 1)) == 0, "Align must be a power of 2");
264
+
265
+ using AllocTraits = std::allocator_traits<Alloc>;
266
+ using T = typename AllocTraits::value_type;
267
+
268
+ constexpr size_t kBaseAlign = constexpr_min(kAlign, alignof(max_align_t));
269
+
270
+ if (kAlign > kBaseAlign && std::is_same<Alloc, std::allocator<T>>::value) {
271
+ return n * sizeof(T);
272
+ } else {
273
+ size_t quanta = (n * sizeof(T) + kBaseAlign - 1) / kBaseAlign;
274
+ if (kAlign > kBaseAlign) {
275
+ quanta += kAlign / kBaseAlign;
276
+ }
277
+ return quanta * kBaseAlign;
278
+ }
279
+ }
280
+
281
+ /**
282
+ * static_function_deleter
283
+ *
284
+ * So you can write this:
285
+ *
286
+ * using RSA_deleter = folly::static_function_deleter<RSA, &RSA_free>;
287
+ * auto rsa = std::unique_ptr<RSA, RSA_deleter>(RSA_new());
288
+ * RSA_generate_key_ex(rsa.get(), bits, exponent, nullptr);
289
+ * rsa = nullptr; // calls RSA_free(rsa.get())
290
+ *
291
+ * This would be sweet as well for BIO, but unfortunately BIO_free has signature
292
+ * int(BIO*) while we require signature void(BIO*). So you would need to make a
293
+ * wrapper for it:
294
+ *
295
+ * inline void BIO_free_fb(BIO* bio) { CHECK_EQ(1, BIO_free(bio)); }
296
+ * using BIO_deleter = folly::static_function_deleter<BIO, &BIO_free_fb>;
297
+ * auto buf = std::unique_ptr<BIO, BIO_deleter>(BIO_new(BIO_s_mem()));
298
+ * buf = nullptr; // calls BIO_free(buf.get())
299
+ */
300
+
301
+ template <typename T, void (*f)(T*)>
302
+ struct static_function_deleter {
303
+ void operator()(T* t) const { f(t); }
304
+ };
305
+
306
+ /**
307
+ * to_shared_ptr
308
+ *
309
+ * Convert unique_ptr to shared_ptr without specifying the template type
310
+ * parameter and letting the compiler deduce it.
311
+ *
312
+ * So you can write this:
313
+ *
314
+ * auto sptr = to_shared_ptr(getSomethingUnique<T>());
315
+ *
316
+ * Instead of this:
317
+ *
318
+ * auto sptr = shared_ptr<T>(getSomethingUnique<T>());
319
+ *
320
+ * Useful when `T` is long, such as:
321
+ *
322
+ * using T = foobar::FooBarAsyncClient;
323
+ */
324
+ template <typename T, typename D>
325
+ std::shared_ptr<T> to_shared_ptr(std::unique_ptr<T, D>&& ptr) {
326
+ return std::shared_ptr<T>(std::move(ptr));
327
+ }
328
+
329
+ /**
330
+ * to_shared_ptr_aliasing
331
+ */
332
+ template <typename T, typename U>
333
+ std::shared_ptr<U> to_shared_ptr_aliasing(std::shared_ptr<T> const& r, U* ptr) {
334
+ return std::shared_ptr<U>(r, ptr);
335
+ }
336
+
337
+ /**
338
+ * to_weak_ptr
339
+ *
340
+ * Make a weak_ptr and return it from a shared_ptr without specifying the
341
+ * template type parameter and letting the compiler deduce it.
342
+ *
343
+ * So you can write this:
344
+ *
345
+ * auto wptr = to_weak_ptr(getSomethingShared<T>());
346
+ *
347
+ * Instead of this:
348
+ *
349
+ * auto wptr = weak_ptr<T>(getSomethingShared<T>());
350
+ *
351
+ * Useful when `T` is long, such as:
352
+ *
353
+ * using T = foobar::FooBarAsyncClient;
354
+ */
355
+ template <typename T>
356
+ std::weak_ptr<T> to_weak_ptr(const std::shared_ptr<T>& ptr) {
357
+ return ptr;
358
+ }
359
+
360
+ #if defined(__GLIBCXX__)
361
+ namespace detail {
362
+ void weak_ptr_set_stored_ptr(std::weak_ptr<void>& w, void* ptr);
363
+
364
+ template <typename Tag, void* std::__weak_ptr<void>::*WeakPtr_Ptr_Field>
365
+ struct GenerateWeakPtrInternalsAccessor {
366
+ friend void weak_ptr_set_stored_ptr(std::weak_ptr<void>& w, void* ptr) {
367
+ w.*WeakPtr_Ptr_Field = ptr;
368
+ }
369
+ };
370
+
371
+ // Each template instantiation of GenerateWeakPtrInternalsAccessor must
372
+ // be a new type, to avoid ODR problems. We do this by tagging it with
373
+ // a type from an anon namespace.
374
+ namespace {
375
+ struct MemoryAnonTag {};
376
+ } // namespace
377
+
378
+ template struct GenerateWeakPtrInternalsAccessor<
379
+ MemoryAnonTag,
380
+ &std::__weak_ptr<void>::_M_ptr>;
381
+ } // namespace detail
382
+ #endif
383
+
384
+ /**
385
+ * to_weak_ptr_aliasing
386
+ *
387
+ * Like to_weak_ptr, but arranges that lock().get() on the returned
388
+ * pointer points to ptr rather than r.get().
389
+ *
390
+ * Equivalent to:
391
+ *
392
+ * to_weak_ptr(std::shared_ptr<U>(r, ptr))
393
+ *
394
+ * For libstdc++, ABI-specific tricks are used to optimize the
395
+ * implementation.
396
+ */
397
+ template <typename T, typename U>
398
+ std::weak_ptr<U> to_weak_ptr_aliasing(const std::shared_ptr<T>& r, U* ptr) {
399
+ #if defined(__GLIBCXX__)
400
+ std::weak_ptr<void> wv(r);
401
+ detail::weak_ptr_set_stored_ptr(wv, ptr);
402
+ FOLLY_PUSH_WARNING
403
+ FOLLY_GCC_DISABLE_WARNING("-Wstrict-aliasing")
404
+ return reinterpret_cast<std::weak_ptr<U>&&>(wv);
405
+ FOLLY_POP_WARNING
406
+ #else
407
+ return std::shared_ptr<U>(r, ptr);
408
+ #endif
409
+ }
410
+
411
+ /**
412
+ * copy_to_unique_ptr
413
+ *
414
+ * Move or copy the argument to the heap and return it owned by a unique_ptr.
415
+ *
416
+ * Like std::make_unique, but deduces the type of the owned object.
417
+ */
418
+ template <typename T>
419
+ std::unique_ptr<remove_cvref_t<T>> copy_to_unique_ptr(T&& t) {
420
+ return std::make_unique<remove_cvref_t<T>>(static_cast<T&&>(t));
421
+ }
422
+
423
+ /**
424
+ * copy_to_shared_ptr
425
+ *
426
+ * Move or copy the argument to the heap and return it owned by a shared_ptr.
427
+ *
428
+ * Like make_shared, but deduces the type of the owned object.
429
+ */
430
+ template <typename T>
431
+ std::shared_ptr<remove_cvref_t<T>> copy_to_shared_ptr(T&& t) {
432
+ return std::make_shared<remove_cvref_t<T>>(static_cast<T&&>(t));
433
+ }
434
+
435
+ /**
436
+ * copy_through_unique_ptr
437
+ *
438
+ * If the argument is nonnull, allocates a copy of its pointee.
439
+ */
440
+ template <typename T>
441
+ std::unique_ptr<T> copy_through_unique_ptr(const std::unique_ptr<T>& t) {
442
+ static_assert(
443
+ !std::is_polymorphic<T>::value || std::is_final<T>::value,
444
+ "possibly slicing");
445
+ return t ? std::make_unique<T>(*t) : nullptr;
446
+ }
447
+
448
+ // erased_unique_ptr
449
+ //
450
+ // A type-erased smart-ptr with unique ownership to a heap-allocated object.
451
+ using erased_unique_ptr = std::unique_ptr<void, void (*)(void*)>;
452
+
453
+ namespace detail {
454
+ // for erased_unique_ptr with types that specialize default_delete
455
+ template <typename T>
456
+ void erased_unique_ptr_delete(void* ptr) {
457
+ std::default_delete<T>()(static_cast<T*>(ptr));
458
+ }
459
+ } // namespace detail
460
+
461
+ // to_erased_unique_ptr
462
+ //
463
+ // Converts an owning pointer to an object to an erased_unique_ptr.
464
+ template <typename T>
465
+ erased_unique_ptr to_erased_unique_ptr(T* const ptr) noexcept {
466
+ return {ptr, detail::erased_unique_ptr_delete<T>};
467
+ }
468
+
469
+ // to_erased_unique_ptr
470
+ //
471
+ // Converts an owning std::unique_ptr to an erased_unique_ptr.
472
+ template <typename T>
473
+ erased_unique_ptr to_erased_unique_ptr(std::unique_ptr<T> ptr) noexcept {
474
+ return to_erased_unique_ptr(ptr.release());
475
+ }
476
+
477
+ // make_erased_unique
478
+ //
479
+ // Allocate an object of the T on the heap, constructed with a..., and return
480
+ // an owning erased_unique_ptr to it.
481
+ template <typename T, typename... A>
482
+ erased_unique_ptr make_erased_unique(A&&... a) {
483
+ return to_erased_unique_ptr(std::make_unique<T>(static_cast<A&&>(a)...));
484
+ }
485
+
486
+ // copy_to_erased_unique_ptr
487
+ //
488
+ // Copy an object to the heap and return an owning erased_unique_ptr to it.
489
+ template <typename T>
490
+ erased_unique_ptr copy_to_erased_unique_ptr(T&& obj) {
491
+ return to_erased_unique_ptr(copy_to_unique_ptr(static_cast<T&&>(obj)));
492
+ }
493
+
494
+ // empty_erased_unique_ptr
495
+ //
496
+ // Return an empty erased_unique_ptr.
497
+ inline erased_unique_ptr empty_erased_unique_ptr() {
498
+ return {nullptr, nullptr};
499
+ }
500
+
501
+ /**
502
+ * SysAllocator
503
+ *
504
+ * Resembles std::allocator, the default Allocator, but wraps std::malloc and
505
+ * std::free.
506
+ */
507
+ template <typename T>
508
+ class SysAllocator {
509
+ private:
510
+ using Self = SysAllocator<T>;
511
+
512
+ public:
513
+ using value_type = T;
514
+
515
+ constexpr SysAllocator() = default;
516
+
517
+ constexpr SysAllocator(SysAllocator const&) = default;
518
+
519
+ template <typename U, std::enable_if_t<!std::is_same<U, T>::value, int> = 0>
520
+ constexpr SysAllocator(SysAllocator<U> const&) noexcept {}
521
+
522
+ T* allocate(size_t count) {
523
+ auto const p = std::malloc(sizeof(T) * count);
524
+ if (!p) {
525
+ throw_exception<std::bad_alloc>();
526
+ }
527
+ return static_cast<T*>(p);
528
+ }
529
+ void deallocate(T* p, size_t count) { sizedFree(p, count * sizeof(T)); }
530
+
531
+ friend bool operator==(Self const&, Self const&) noexcept { return true; }
532
+ friend bool operator!=(Self const&, Self const&) noexcept { return false; }
533
+ };
534
+
535
+ class DefaultAlign {
536
+ private:
537
+ using Self = DefaultAlign;
538
+ std::size_t align_;
539
+
540
+ public:
541
+ explicit DefaultAlign(std::size_t align) noexcept : align_(align) {
542
+ assert(!(align_ < sizeof(void*)) && bool("bad align: too small"));
543
+ assert(!(align_ & (align_ - 1)) && bool("bad align: not power-of-two"));
544
+ }
545
+ std::size_t operator()() const noexcept { return align_; }
546
+
547
+ friend bool operator==(Self const& a, Self const& b) noexcept {
548
+ return a.align_ == b.align_;
549
+ }
550
+ friend bool operator!=(Self const& a, Self const& b) noexcept {
551
+ return a.align_ != b.align_;
552
+ }
553
+ };
554
+
555
+ template <std::size_t Align>
556
+ class FixedAlign {
557
+ private:
558
+ static_assert(!(Align < sizeof(void*)), "bad align: too small");
559
+ static_assert(!(Align & (Align - 1)), "bad align: not power-of-two");
560
+ using Self = FixedAlign<Align>;
561
+
562
+ public:
563
+ constexpr std::size_t operator()() const noexcept { return Align; }
564
+
565
+ friend bool operator==(Self const&, Self const&) noexcept { return true; }
566
+ friend bool operator!=(Self const&, Self const&) noexcept { return false; }
567
+ };
568
+
569
+ /**
570
+ * AlignedSysAllocator
571
+ *
572
+ * Resembles std::allocator, the default Allocator, but wraps aligned_malloc and
573
+ * aligned_free.
574
+ *
575
+ * Accepts a policy parameter for providing the alignment, which must:
576
+ * * be invocable as std::size_t(std::size_t) noexcept
577
+ * * taking the type alignment and returning the allocation alignment
578
+ * * be noexcept-copy-constructible
579
+ * * have noexcept operator==
580
+ * * have noexcept operator!=
581
+ * * not be final
582
+ *
583
+ * DefaultAlign and FixedAlign<std::size_t>, provided above, are valid policies.
584
+ */
585
+ template <typename T, typename Align = DefaultAlign>
586
+ class AlignedSysAllocator : private Align {
587
+ private:
588
+ using Self = AlignedSysAllocator<T, Align>;
589
+
590
+ template <typename, typename>
591
+ friend class AlignedSysAllocator;
592
+
593
+ constexpr Align const& align() const { return *this; }
594
+
595
+ public:
596
+ static_assert(std::is_nothrow_copy_constructible<Align>::value, "");
597
+ static_assert(is_nothrow_invocable_r_v<std::size_t, Align>, "");
598
+
599
+ using value_type = T;
600
+
601
+ using propagate_on_container_copy_assignment = std::true_type;
602
+ using propagate_on_container_move_assignment = std::true_type;
603
+ using propagate_on_container_swap = std::true_type;
604
+
605
+ using Align::Align;
606
+
607
+ // TODO: remove this ctor, which is is no longer required as of under gcc7
608
+ template <
609
+ typename S = Align,
610
+ std::enable_if_t<std::is_default_constructible<S>::value, int> = 0>
611
+ constexpr AlignedSysAllocator() noexcept(noexcept(Align())) : Align() {}
612
+
613
+ constexpr AlignedSysAllocator(AlignedSysAllocator const&) = default;
614
+
615
+ template <typename U, std::enable_if_t<!std::is_same<U, T>::value, int> = 0>
616
+ constexpr AlignedSysAllocator(
617
+ AlignedSysAllocator<U, Align> const& other) noexcept
618
+ : Align(other.align()) {}
619
+
620
+ T* allocate(size_t count) {
621
+ auto const a = align()() < alignof(T) ? alignof(T) : align()();
622
+ auto const p = aligned_malloc(sizeof(T) * count, a);
623
+ if (!p) {
624
+ if (FOLLY_UNLIKELY(errno != ENOMEM)) {
625
+ std::terminate();
626
+ }
627
+ throw_exception<std::bad_alloc>();
628
+ }
629
+ return static_cast<T*>(p);
630
+ }
631
+ void deallocate(T* p, size_t /* count */) { aligned_free(p); }
632
+
633
+ friend bool operator==(Self const& a, Self const& b) noexcept {
634
+ return a.align() == b.align();
635
+ }
636
+ friend bool operator!=(Self const& a, Self const& b) noexcept {
637
+ return a.align() != b.align();
638
+ }
639
+ };
640
+
641
+ /**
642
+ * CxxAllocatorAdaptor
643
+ *
644
+ * A type conforming to C++ concept Allocator, delegating operations to an
645
+ * unowned Inner which has this required interface:
646
+ *
647
+ * void* allocate(std::size_t)
648
+ * void deallocate(void*, std::size_t)
649
+ *
650
+ * Note that Inner is *not* a C++ Allocator.
651
+ */
652
+ template <typename T, class Inner, bool FallbackToStdAlloc = false>
653
+ class CxxAllocatorAdaptor : private std::allocator<T> {
654
+ private:
655
+ using Self = CxxAllocatorAdaptor<T, Inner, FallbackToStdAlloc>;
656
+
657
+ template <typename U, typename UInner, bool UFallback>
658
+ friend class CxxAllocatorAdaptor;
659
+
660
+ Inner* inner_ = nullptr;
661
+
662
+ public:
663
+ using value_type = T;
664
+
665
+ using propagate_on_container_copy_assignment = std::true_type;
666
+ using propagate_on_container_move_assignment = std::true_type;
667
+ using propagate_on_container_swap = std::true_type;
668
+
669
+ template <bool X = FallbackToStdAlloc, std::enable_if_t<X, int> = 0>
670
+ constexpr explicit CxxAllocatorAdaptor() {}
671
+
672
+ constexpr explicit CxxAllocatorAdaptor(Inner& ref) : inner_(&ref) {}
673
+
674
+ constexpr CxxAllocatorAdaptor(CxxAllocatorAdaptor const&) = default;
675
+
676
+ template <typename U, std::enable_if_t<!std::is_same<U, T>::value, int> = 0>
677
+ constexpr CxxAllocatorAdaptor(
678
+ CxxAllocatorAdaptor<U, Inner, FallbackToStdAlloc> const& other)
679
+ : inner_(other.inner_) {}
680
+
681
+ CxxAllocatorAdaptor& operator=(CxxAllocatorAdaptor const& other) = default;
682
+
683
+ template <typename U, std::enable_if_t<!std::is_same<U, T>::value, int> = 0>
684
+ CxxAllocatorAdaptor& operator=(
685
+ CxxAllocatorAdaptor<U, Inner, FallbackToStdAlloc> const& other) noexcept {
686
+ inner_ = other.inner_;
687
+ return *this;
688
+ }
689
+
690
+ T* allocate(std::size_t n) {
691
+ if (FallbackToStdAlloc && inner_ == nullptr) {
692
+ return std::allocator<T>::allocate(n);
693
+ }
694
+ return static_cast<T*>(inner_->allocate(sizeof(T) * n));
695
+ }
696
+
697
+ void deallocate(T* p, std::size_t n) {
698
+ if (inner_ != nullptr) {
699
+ inner_->deallocate(p, sizeof(T) * n);
700
+ } else {
701
+ assert(FallbackToStdAlloc);
702
+ std::allocator<T>::deallocate(p, n);
703
+ }
704
+ }
705
+
706
+ friend bool operator==(Self const& a, Self const& b) noexcept {
707
+ return a.inner_ == b.inner_;
708
+ }
709
+ friend bool operator!=(Self const& a, Self const& b) noexcept {
710
+ return a.inner_ != b.inner_;
711
+ }
712
+
713
+ template <typename U>
714
+ struct rebind {
715
+ using other = CxxAllocatorAdaptor<U, Inner, FallbackToStdAlloc>;
716
+ };
717
+ };
718
+
719
+ /*
720
+ * allocator_delete
721
+ *
722
+ * A deleter which automatically works with a given allocator.
723
+ *
724
+ * Derives from the allocator to take advantage of the empty base
725
+ * optimization when possible.
726
+ */
727
+ template <typename Alloc>
728
+ class allocator_delete : private std::remove_reference<Alloc>::type {
729
+ private:
730
+ using allocator_type = typename std::remove_reference<Alloc>::type;
731
+ using allocator_traits = std::allocator_traits<allocator_type>;
732
+ using value_type = typename allocator_traits::value_type;
733
+ using pointer = typename allocator_traits::pointer;
734
+
735
+ public:
736
+ allocator_delete() = default;
737
+ allocator_delete(allocator_delete const&) = default;
738
+ allocator_delete(allocator_delete&&) = default;
739
+ allocator_delete& operator=(allocator_delete const&) = default;
740
+ allocator_delete& operator=(allocator_delete&&) = default;
741
+
742
+ explicit allocator_delete(const allocator_type& alloc)
743
+ : allocator_type(alloc) {}
744
+
745
+ explicit allocator_delete(allocator_type&& alloc)
746
+ : allocator_type(std::move(alloc)) {}
747
+
748
+ template <typename U>
749
+ allocator_delete(const allocator_delete<U>& other)
750
+ : allocator_type(other.get_allocator()) {}
751
+
752
+ allocator_type const& get_allocator() const { return *this; }
753
+
754
+ void operator()(pointer p) const {
755
+ auto alloc = get_allocator();
756
+ allocator_traits::destroy(alloc, p);
757
+ allocator_traits::deallocate(alloc, p, 1);
758
+ }
759
+ };
760
+
761
+ /**
762
+ * allocate_unique, like std::allocate_shared but for std::unique_ptr
763
+ */
764
+ template <typename T, typename Alloc, typename... Args>
765
+ std::unique_ptr<
766
+ T,
767
+ allocator_delete<
768
+ typename std::allocator_traits<Alloc>::template rebind_alloc<T>>>
769
+ allocate_unique(Alloc const& alloc, Args&&... args) {
770
+ using TAlloc =
771
+ typename std::allocator_traits<Alloc>::template rebind_alloc<T>;
772
+
773
+ using traits = std::allocator_traits<TAlloc>;
774
+ struct DeferCondDeallocate {
775
+ bool& cond;
776
+ TAlloc& copy;
777
+ T* p;
778
+ ~DeferCondDeallocate() {
779
+ if (FOLLY_UNLIKELY(!cond)) {
780
+ traits::deallocate(copy, p, 1);
781
+ }
782
+ }
783
+ };
784
+ auto copy = TAlloc(alloc);
785
+ auto const p = traits::allocate(copy, 1);
786
+ {
787
+ bool constructed = false;
788
+ DeferCondDeallocate handler{constructed, copy, p};
789
+ traits::construct(copy, p, static_cast<Args&&>(args)...);
790
+ constructed = true;
791
+ }
792
+ return {p, allocator_delete<TAlloc>(std::move(copy))};
793
+ }
794
+
795
+ struct SysBufferDeleter {
796
+ void operator()(void* ptr) { std::free(ptr); }
797
+ };
798
+ using SysBufferUniquePtr = std::unique_ptr<void, SysBufferDeleter>;
799
+
800
+ inline SysBufferUniquePtr allocate_sys_buffer(std::size_t size) {
801
+ auto p = std::malloc(size);
802
+ if (!p) {
803
+ throw_exception<std::bad_alloc>();
804
+ }
805
+ return {p, {}};
806
+ }
807
+
808
+ /**
809
+ * AllocatorHasTrivialDeallocate
810
+ *
811
+ * Unambiguously inherits std::integral_constant<bool, V> for some bool V.
812
+ *
813
+ * Describes whether a C++ Aallocator has trivial, i.e. no-op, deallocate().
814
+ *
815
+ * Also may be used to describe types which may be used with
816
+ * CxxAllocatorAdaptor.
817
+ */
818
+ template <typename Alloc>
819
+ struct AllocatorHasTrivialDeallocate : std::false_type {};
820
+
821
+ template <typename T, class Alloc>
822
+ struct AllocatorHasTrivialDeallocate<CxxAllocatorAdaptor<T, Alloc>>
823
+ : AllocatorHasTrivialDeallocate<Alloc> {};
824
+
825
+ namespace detail {
826
+ // note that construct and destroy here are methods, not short names for
827
+ // the constructor and destructor
828
+ FOLLY_CREATE_MEMBER_INVOKER(AllocatorConstruct_, construct);
829
+ FOLLY_CREATE_MEMBER_INVOKER(AllocatorDestroy_, destroy);
830
+
831
+ template <typename Void, typename Alloc, typename... Args>
832
+ struct AllocatorCustomizesConstruct_
833
+ : folly::is_invocable<AllocatorConstruct_, Alloc, Args...> {};
834
+
835
+ template <typename Alloc, typename... Args>
836
+ struct AllocatorCustomizesConstruct_<
837
+ void_t<typename Alloc::folly_has_default_object_construct>,
838
+ Alloc,
839
+ Args...> : Negation<typename Alloc::folly_has_default_object_construct> {};
840
+
841
+ template <typename Void, typename Alloc, typename... Args>
842
+ struct AllocatorCustomizesDestroy_
843
+ : folly::is_invocable<AllocatorDestroy_, Alloc, Args...> {};
844
+
845
+ template <typename Alloc, typename... Args>
846
+ struct AllocatorCustomizesDestroy_<
847
+ void_t<typename Alloc::folly_has_default_object_destroy>,
848
+ Alloc,
849
+ Args...> : Negation<typename Alloc::folly_has_default_object_destroy> {};
850
+ } // namespace detail
851
+
852
+ /**
853
+ * AllocatorHasDefaultObjectConstruct
854
+ *
855
+ * AllocatorHasDefaultObjectConstruct<A, T, Args...> unambiguously
856
+ * inherits std::integral_constant<bool, V>, where V will be true iff
857
+ * the effect of std::allocator_traits<A>::construct(a, p, args...) is
858
+ * the same as new (static_cast<void*>(p)) T(args...). If true then
859
+ * any optimizations applicable to object construction (relying on
860
+ * std::is_trivially_copyable<T>, for example) can be applied to objects
861
+ * in an allocator-aware container using an allocation of type A.
862
+ *
863
+ * Allocator types can override V by declaring a type alias for
864
+ * folly_has_default_object_construct. It is helpful to do this if you
865
+ * define a custom allocator type that defines a construct method, but
866
+ * that method doesn't do anything except call placement new.
867
+ */
868
+ template <typename Alloc, typename T, typename... Args>
869
+ struct AllocatorHasDefaultObjectConstruct
870
+ : Negation<
871
+ detail::AllocatorCustomizesConstruct_<void, Alloc, T*, Args...>> {};
872
+
873
+ template <typename Value, typename T, typename... Args>
874
+ struct AllocatorHasDefaultObjectConstruct<std::allocator<Value>, T, Args...>
875
+ : std::true_type {};
876
+
877
+ /**
878
+ * AllocatorHasDefaultObjectDestroy
879
+ *
880
+ * AllocatorHasDefaultObjectDestroy<A, T> unambiguously inherits
881
+ * std::integral_constant<bool, V>, where V will be true iff the effect
882
+ * of std::allocator_traits<A>::destroy(a, p) is the same as p->~T().
883
+ * If true then optimizations applicable to object destruction (relying
884
+ * on std::is_trivially_destructible<T>, for example) can be applied to
885
+ * objects in an allocator-aware container using an allocator of type A.
886
+ *
887
+ * Allocator types can override V by declaring a type alias for
888
+ * folly_has_default_object_destroy. It is helpful to do this if you
889
+ * define a custom allocator type that defines a destroy method, but that
890
+ * method doesn't do anything except call the object's destructor.
891
+ */
892
+ template <typename Alloc, typename T>
893
+ struct AllocatorHasDefaultObjectDestroy
894
+ : Negation<detail::AllocatorCustomizesDestroy_<void, Alloc, T*>> {};
895
+
896
+ template <typename Value, typename T>
897
+ struct AllocatorHasDefaultObjectDestroy<std::allocator<Value>, T>
898
+ : std::true_type {};
899
+
900
+ } // namespace folly