react-native-windows 0.81.34 → 0.81.37

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 (928) hide show
  1. package/Directory.Build.props +1 -16
  2. package/Folly/ThreadNameStub.cpp +4 -6
  3. package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +1 -1
  4. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +27 -4
  5. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +8 -4
  6. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -3
  7. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +48 -2
  8. package/Microsoft.ReactNative/Fabric/WindowsImageManager.cpp +40 -13
  9. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
  10. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
  11. package/Microsoft.ReactNative/TurboModulesProvider.cpp +30 -13
  12. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  13. package/PropertySheets/React.Cpp.props +3 -3
  14. package/ReactCommon/ReactCommon.vcxproj +0 -10
  15. package/ReactCommon/packages.lock.win32.json +0 -10
  16. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
  17. package/Scripts/creaternwlib.cmd +2 -2
  18. package/Shared/Shared.vcxitems +2 -0
  19. package/{Folly → external}/.clang-format +0 -1
  20. package/external/External.vcxitems +10 -0
  21. package/external/fast-float/.syncignore +10 -0
  22. package/external/fast-float/LICENSE-APACHE +190 -0
  23. package/external/fast-float/LICENSE-BOOST +23 -0
  24. package/external/fast-float/LICENSE-MIT +27 -0
  25. package/external/fast-float/README.md +545 -0
  26. package/external/fast-float/cgmanifest.json +15 -0
  27. package/external/fast-float/fast-float.vcxitems +14 -0
  28. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  29. package/external/fast-float/include/fast_float/bigint.h +638 -0
  30. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  31. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  32. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  33. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  34. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  35. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  36. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  37. package/external/fast-float/sync-config.json +8 -0
  38. package/external/fmt/.syncignore +10 -0
  39. package/external/fmt/CONTRIBUTING.md +20 -0
  40. package/external/fmt/LICENSE +27 -0
  41. package/external/fmt/README.md +484 -0
  42. package/{fmt → external/fmt}/cgmanifest.json +1 -1
  43. package/external/fmt/doc/ChangeLog-old.md +3290 -0
  44. package/external/fmt/doc/api.md +650 -0
  45. package/external/fmt/doc/fmt.css +61 -0
  46. package/external/fmt/doc/fmt.js +4 -0
  47. package/external/fmt/doc/get-started.md +222 -0
  48. package/external/fmt/doc/index.md +151 -0
  49. package/external/fmt/doc/perf.svg +1 -0
  50. package/external/fmt/doc/python-license.txt +290 -0
  51. package/external/fmt/doc/syntax.md +887 -0
  52. package/external/fmt/fmt.vcxitems +28 -0
  53. package/external/fmt/include/fmt/args.h +228 -0
  54. package/{fmt/TEMP_UntilFmtUpdate/core.h → external/fmt/include/fmt/base.h} +1188 -1036
  55. package/external/fmt/include/fmt/chrono.h +2432 -0
  56. package/external/fmt/include/fmt/color.h +612 -0
  57. package/external/fmt/include/fmt/compile.h +529 -0
  58. package/external/fmt/include/fmt/core.h +5 -0
  59. package/external/fmt/include/fmt/format-inl.h +1928 -0
  60. package/external/fmt/include/fmt/format.h +4427 -0
  61. package/external/fmt/include/fmt/os.h +439 -0
  62. package/external/fmt/include/fmt/ostream.h +211 -0
  63. package/external/fmt/include/fmt/printf.h +656 -0
  64. package/external/fmt/include/fmt/ranges.h +882 -0
  65. package/external/fmt/include/fmt/std.h +699 -0
  66. package/external/fmt/include/fmt/xchar.h +322 -0
  67. package/external/fmt/src/fmt.cc +135 -0
  68. package/external/fmt/src/format.cc +43 -0
  69. package/external/fmt/src/os.cc +403 -0
  70. package/external/fmt/sync-config.json +8 -0
  71. package/external/folly/.syncignore +60 -0
  72. package/external/folly/LICENSE +200 -0
  73. package/external/folly/README.md +263 -0
  74. package/{fmt → external/folly/folly}/.clang-format +0 -1
  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/ConstructorCallbackList.h +158 -0
  101. package/external/folly/folly/Conv.h +2026 -0
  102. package/external/folly/folly/CppAttributes.h +170 -0
  103. package/external/folly/folly/CpuId.h +297 -0
  104. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  105. package/external/folly/folly/Demangle.cpp +255 -0
  106. package/external/folly/folly/Demangle.h +73 -0
  107. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  108. package/external/folly/folly/DynamicConverter.h +17 -0
  109. package/external/folly/folly/Exception.h +150 -0
  110. package/external/folly/folly/ExceptionString.cpp +51 -0
  111. package/external/folly/folly/ExceptionString.h +33 -0
  112. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  113. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  114. package/external/folly/folly/ExceptionWrapper.h +377 -0
  115. package/external/folly/folly/Executor.cpp +111 -0
  116. package/external/folly/folly/Executor.h +351 -0
  117. package/external/folly/folly/Expected.h +1725 -0
  118. package/external/folly/folly/FBString.h +2888 -0
  119. package/external/folly/folly/FBVector.h +17 -0
  120. package/external/folly/folly/File.cpp +180 -0
  121. package/external/folly/folly/File.h +177 -0
  122. package/external/folly/folly/FileUtil.cpp +378 -0
  123. package/external/folly/folly/FileUtil.h +332 -0
  124. package/external/folly/folly/Fingerprint.cpp +135 -0
  125. package/external/folly/folly/Fingerprint.h +289 -0
  126. package/external/folly/folly/FixedString.h +2965 -0
  127. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  128. package/external/folly/folly/FollyMemcpy.h +23 -0
  129. package/external/folly/folly/FollyMemset.cpp +29 -0
  130. package/external/folly/folly/FollyMemset.h +25 -0
  131. package/external/folly/folly/Format-inl.h +1152 -0
  132. package/external/folly/folly/Format.cpp +429 -0
  133. package/external/folly/folly/Format.h +463 -0
  134. package/external/folly/folly/FormatArg.h +285 -0
  135. package/external/folly/folly/FormatTraits.h +65 -0
  136. package/external/folly/folly/Function.h +1159 -0
  137. package/external/folly/folly/GLog.h +85 -0
  138. package/external/folly/folly/GroupVarint.cpp +153 -0
  139. package/external/folly/folly/GroupVarint.h +630 -0
  140. package/external/folly/folly/Hash.h +20 -0
  141. package/external/folly/folly/IPAddress.cpp +490 -0
  142. package/external/folly/folly/IPAddress.h +667 -0
  143. package/external/folly/folly/IPAddressException.h +82 -0
  144. package/external/folly/folly/IPAddressV4.cpp +305 -0
  145. package/external/folly/folly/IPAddressV4.h +495 -0
  146. package/external/folly/folly/IPAddressV6.cpp +541 -0
  147. package/external/folly/folly/IPAddressV6.h +627 -0
  148. package/external/folly/folly/Indestructible.h +164 -0
  149. package/external/folly/folly/IndexedMemPool.h +550 -0
  150. package/external/folly/folly/IntrusiveList.h +17 -0
  151. package/external/folly/folly/Lazy.h +142 -0
  152. package/external/folly/folly/Likely.h +76 -0
  153. package/external/folly/folly/MPMCPipeline.h +280 -0
  154. package/external/folly/folly/MPMCQueue.h +1556 -0
  155. package/external/folly/folly/MacAddress.cpp +188 -0
  156. package/external/folly/folly/MacAddress.h +260 -0
  157. package/external/folly/folly/MapUtil.h +17 -0
  158. package/external/folly/folly/Math.h +258 -0
  159. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  160. package/external/folly/folly/Memory.h +900 -0
  161. package/external/folly/folly/MicroLock.cpp +76 -0
  162. package/external/folly/folly/MicroLock.h +354 -0
  163. package/external/folly/folly/MicroSpinLock.h +17 -0
  164. package/external/folly/folly/MoveWrapper.h +76 -0
  165. package/external/folly/folly/ObserverContainer.h +1026 -0
  166. package/external/folly/folly/Optional.h +743 -0
  167. package/external/folly/folly/Overload.h +325 -0
  168. package/external/folly/folly/PackedSyncPtr.h +147 -0
  169. package/external/folly/folly/Padded.h +464 -0
  170. package/external/folly/folly/Poly-inl.h +230 -0
  171. package/external/folly/folly/Poly.h +1095 -0
  172. package/external/folly/folly/PolyException.h +43 -0
  173. package/external/folly/folly/Portability.h +644 -0
  174. package/external/folly/folly/Preprocessor.h +236 -0
  175. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  176. package/external/folly/folly/RWSpinLock.h +17 -0
  177. package/external/folly/folly/Random-inl.h +86 -0
  178. package/external/folly/folly/Random.cpp +184 -0
  179. package/external/folly/folly/Random.h +434 -0
  180. package/external/folly/folly/Range.h +1772 -0
  181. package/external/folly/folly/Replaceable.h +636 -0
  182. package/external/folly/folly/ScopeGuard.cpp +29 -0
  183. package/external/folly/folly/ScopeGuard.h +420 -0
  184. package/external/folly/folly/SharedMutex.cpp +81 -0
  185. package/external/folly/folly/SharedMutex.h +1751 -0
  186. package/external/folly/folly/Singleton-inl.h +332 -0
  187. package/external/folly/folly/Singleton.cpp +512 -0
  188. package/external/folly/folly/Singleton.h +891 -0
  189. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  190. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  191. package/external/folly/folly/SocketAddress.cpp +786 -0
  192. package/external/folly/folly/SocketAddress.h +768 -0
  193. package/external/folly/folly/SpinLock.h +55 -0
  194. package/external/folly/folly/String-inl.h +668 -0
  195. package/external/folly/folly/String.cpp +777 -0
  196. package/external/folly/folly/String.h +767 -0
  197. package/external/folly/folly/Subprocess.cpp +1142 -0
  198. package/external/folly/folly/Subprocess.h +1055 -0
  199. package/external/folly/folly/Synchronized.h +1833 -0
  200. package/external/folly/folly/SynchronizedPtr.h +106 -0
  201. package/external/folly/folly/ThreadCachedInt.h +175 -0
  202. package/external/folly/folly/ThreadLocal.h +478 -0
  203. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  204. package/external/folly/folly/TimeoutQueue.h +123 -0
  205. package/external/folly/folly/TokenBucket.h +673 -0
  206. package/external/folly/folly/Traits.h +1442 -0
  207. package/external/folly/folly/Try-inl.h +372 -0
  208. package/external/folly/folly/Try.cpp +23 -0
  209. package/external/folly/folly/Try.h +728 -0
  210. package/external/folly/folly/UTF8String.h +56 -0
  211. package/external/folly/folly/Unicode.cpp +201 -0
  212. package/external/folly/folly/Unicode.h +94 -0
  213. package/external/folly/folly/Unit.h +65 -0
  214. package/external/folly/folly/Uri-inl.h +101 -0
  215. package/external/folly/folly/Uri.cpp +190 -0
  216. package/external/folly/folly/Uri.h +142 -0
  217. package/external/folly/folly/Utility.h +932 -0
  218. package/external/folly/folly/VERSION +1 -0
  219. package/external/folly/folly/Varint.h +230 -0
  220. package/external/folly/folly/VirtualExecutor.h +17 -0
  221. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  222. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  223. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  224. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  225. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  226. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  227. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  228. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  229. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  230. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  231. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  232. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  233. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  234. package/external/folly/folly/base64.h +264 -0
  235. package/external/folly/folly/chrono/BUCK +29 -0
  236. package/external/folly/folly/chrono/Clock.h +65 -0
  237. package/external/folly/folly/chrono/Conv.h +712 -0
  238. package/external/folly/folly/chrono/test/BUCK +26 -0
  239. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  240. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  241. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  242. package/external/folly/folly/concurrency/BUCK +170 -0
  243. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  244. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  245. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  246. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  247. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  248. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  249. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  250. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  251. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  252. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  253. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  254. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  255. package/external/folly/folly/concurrency/container/BUCK +77 -0
  256. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  257. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  258. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  259. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  260. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  261. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  262. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  263. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  264. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  265. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  266. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  267. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  268. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  269. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  270. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  271. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  272. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  273. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  274. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  275. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  276. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  277. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  278. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  279. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  280. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  281. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  282. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  283. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  284. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  285. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  286. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  287. package/external/folly/folly/concurrency/test/BUCK +229 -0
  288. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  289. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  290. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  291. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  292. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  293. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  294. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  295. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  296. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  297. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  298. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  299. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  300. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  301. package/external/folly/folly/container/Access.h +57 -0
  302. package/external/folly/folly/container/Array.h +87 -0
  303. package/external/folly/folly/container/BUCK +353 -0
  304. package/external/folly/folly/container/BitIterator.h +203 -0
  305. package/external/folly/folly/container/Enumerate.h +162 -0
  306. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  307. package/external/folly/folly/container/F14.md +300 -0
  308. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  309. package/external/folly/folly/container/F14Map.h +2108 -0
  310. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  311. package/external/folly/folly/container/F14Set.h +1603 -0
  312. package/external/folly/folly/container/FBVector.h +1711 -0
  313. package/external/folly/folly/container/Foreach-inl.h +316 -0
  314. package/external/folly/folly/container/Foreach.h +209 -0
  315. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  316. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  317. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  318. package/external/folly/folly/container/IntrusiveList.h +131 -0
  319. package/external/folly/folly/container/Iterator.h +843 -0
  320. package/external/folly/folly/container/MapUtil.h +376 -0
  321. package/external/folly/folly/container/Merge.h +90 -0
  322. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  323. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  324. package/external/folly/folly/container/Reserve.h +109 -0
  325. package/external/folly/folly/container/SparseByteSet.h +123 -0
  326. package/external/folly/folly/container/View.h +81 -0
  327. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  328. package/external/folly/folly/container/detail/BUCK +115 -0
  329. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  330. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  331. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  332. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  333. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  334. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  335. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  336. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  337. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  338. package/external/folly/folly/container/detail/Util.h +303 -0
  339. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  340. package/external/folly/folly/container/detail/test/BUCK +14 -0
  341. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  342. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  343. package/external/folly/folly/container/range_traits.h +81 -0
  344. package/external/folly/folly/container/small_vector.h +1476 -0
  345. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  346. package/external/folly/folly/container/span.h +408 -0
  347. package/external/folly/folly/container/tape.h +608 -0
  348. package/external/folly/folly/container/test/.clang-tidy +12 -0
  349. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  350. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  351. package/external/folly/folly/container/test/BUCK +568 -0
  352. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  353. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  354. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  355. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  356. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  357. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  358. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  359. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  360. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  361. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  362. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  363. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  364. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  365. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  366. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  367. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  368. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  369. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  370. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  371. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  372. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  373. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  374. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  375. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  376. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  377. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  378. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  379. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  380. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  381. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  382. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  383. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  384. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  385. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  386. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  387. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  388. package/external/folly/folly/container/test/span_test.cpp +520 -0
  389. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  390. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  391. package/external/folly/folly/defs.bzl +238 -0
  392. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  393. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  394. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  395. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  396. package/external/folly/folly/detail/BUCK +406 -0
  397. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  398. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  399. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  400. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  401. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  402. package/external/folly/folly/detail/Futex-inl.h +123 -0
  403. package/external/folly/folly/detail/Futex.cpp +273 -0
  404. package/external/folly/folly/detail/Futex.h +109 -0
  405. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  406. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  407. package/external/folly/folly/detail/IPAddress.h +57 -0
  408. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  409. package/external/folly/folly/detail/Iterators.h +156 -0
  410. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  411. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  412. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  413. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  414. package/external/folly/folly/detail/PerfScoped.h +70 -0
  415. package/external/folly/folly/detail/PolyDetail.h +921 -0
  416. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  417. package/external/folly/folly/detail/RangeCommon.h +93 -0
  418. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  419. package/external/folly/folly/detail/RangeSse42.h +30 -0
  420. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  421. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  422. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  423. package/external/folly/folly/detail/Singleton.h +34 -0
  424. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  425. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  426. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  427. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  428. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  429. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  430. package/external/folly/folly/detail/Sse.cpp +35 -0
  431. package/external/folly/folly/detail/Sse.h +45 -0
  432. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  433. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  434. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  435. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  436. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  437. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  438. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  439. package/external/folly/folly/detail/TypeList.h +551 -0
  440. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  441. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  442. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  443. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  444. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  445. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  446. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  447. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  448. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  449. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  450. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  451. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  452. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  453. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  454. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  455. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  456. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  457. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  458. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  459. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  460. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  461. package/external/folly/folly/detail/test/BUCK +118 -0
  462. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  463. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  464. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  465. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  466. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  467. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  468. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  469. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  470. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  471. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  472. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  473. package/external/folly/folly/docs/AtomicHashMap.md +134 -0
  474. package/external/folly/folly/docs/Benchmark.md +310 -0
  475. package/external/folly/folly/docs/Conv.md +291 -0
  476. package/external/folly/folly/docs/Dynamic.md +220 -0
  477. package/external/folly/folly/docs/DynamicConverter.md +71 -0
  478. package/external/folly/folly/docs/Executors.md +63 -0
  479. package/external/folly/folly/docs/FBString.md +46 -0
  480. package/external/folly/folly/docs/FBVector.md +200 -0
  481. package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
  482. package/external/folly/folly/docs/Format.md +177 -0
  483. package/external/folly/folly/docs/Function.md +92 -0
  484. package/external/folly/folly/docs/Futures.md +263 -0
  485. package/external/folly/folly/docs/GroupVarint.md +46 -0
  486. package/external/folly/folly/docs/Histogram.md +104 -0
  487. package/external/folly/folly/docs/MapUtils.md +80 -0
  488. package/external/folly/folly/docs/Overview.md +263 -0
  489. package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
  490. package/external/folly/folly/docs/Poly.md +500 -0
  491. package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
  492. package/external/folly/folly/docs/Rcu.md +218 -0
  493. package/external/folly/folly/docs/SmallLocks.md +24 -0
  494. package/external/folly/folly/docs/Synchronized.md +793 -0
  495. package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
  496. package/external/folly/folly/docs/ThreadLocal.md +105 -0
  497. package/external/folly/folly/docs/Traits.md +161 -0
  498. package/external/folly/folly/docs/small_vector.md +64 -0
  499. package/external/folly/folly/docs/style.css +23 -0
  500. package/external/folly/folly/dynamic-inl.h +17 -0
  501. package/external/folly/folly/dynamic.h +17 -0
  502. package/external/folly/folly/folly_extended_library.bzl +28 -0
  503. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  504. package/external/folly/folly/functional/BUCK +57 -0
  505. package/external/folly/folly/functional/Invoke.h +880 -0
  506. package/external/folly/folly/functional/Partial.h +130 -0
  507. package/external/folly/folly/functional/protocol.h +203 -0
  508. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  509. package/external/folly/folly/functional/test/BUCK +57 -0
  510. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  511. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  512. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  513. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  514. package/external/folly/folly/functional/traits.h +675 -0
  515. package/external/folly/folly/hash/BUCK +86 -0
  516. package/external/folly/folly/hash/Checksum.cpp +275 -0
  517. package/external/folly/folly/hash/Checksum.h +94 -0
  518. package/external/folly/folly/hash/FarmHash.h +46 -0
  519. package/external/folly/folly/hash/Hash.h +1045 -0
  520. package/external/folly/folly/hash/MurmurHash.h +86 -0
  521. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  522. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  523. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  524. package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/hash/SpookyHashV2.h +6 -1
  525. package/external/folly/folly/hash/detail/BUCK +26 -0
  526. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  527. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  528. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  529. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  530. package/external/folly/folly/hash/test/BUCK +132 -0
  531. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  532. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  533. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  534. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  535. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  536. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  537. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  538. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  539. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  540. package/external/folly/folly/hash/traits.h +115 -0
  541. package/external/folly/folly/json/BUCK +155 -0
  542. package/external/folly/folly/json/DynamicConverter.h +464 -0
  543. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  544. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  545. package/external/folly/folly/json/DynamicParser.h +394 -0
  546. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  547. package/external/folly/folly/json/JSONSchema.h +73 -0
  548. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  549. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  550. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  551. package/external/folly/folly/json/bser/BUCK +24 -0
  552. package/external/folly/folly/json/bser/Bser.h +107 -0
  553. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  554. package/external/folly/folly/json/bser/Load.cpp +246 -0
  555. package/external/folly/folly/json/bser/test/BUCK +14 -0
  556. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  557. package/external/folly/folly/json/dynamic.cpp +552 -0
  558. package/external/folly/folly/json/dynamic.h +1346 -0
  559. package/external/folly/folly/json/json.h +238 -0
  560. package/external/folly/folly/json/json_patch.cpp +325 -0
  561. package/external/folly/folly/json/json_patch.h +126 -0
  562. package/external/folly/folly/json/json_pointer.cpp +114 -0
  563. package/external/folly/folly/json/json_pointer.h +87 -0
  564. package/external/folly/folly/json/test/BUCK +147 -0
  565. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  566. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  567. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  568. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  569. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  570. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  571. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  572. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  573. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  574. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  575. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  576. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  577. package/external/folly/folly/json/tool/BUCK +13 -0
  578. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  579. package/external/folly/folly/json.h +17 -0
  580. package/external/folly/folly/json_patch.h +17 -0
  581. package/external/folly/folly/json_pointer.h +17 -0
  582. package/external/folly/folly/lang/Access.h +29 -0
  583. package/external/folly/folly/lang/Align.h +240 -0
  584. package/external/folly/folly/lang/Aligned.h +92 -0
  585. package/external/folly/folly/lang/Assume.h +82 -0
  586. package/external/folly/folly/lang/BUCK +287 -0
  587. package/external/folly/folly/lang/Badge.h +108 -0
  588. package/external/folly/folly/lang/Bits.h +570 -0
  589. package/external/folly/folly/lang/BitsClass.h +312 -0
  590. package/external/folly/folly/lang/Builtin.h +74 -0
  591. package/external/folly/folly/lang/CArray.h +34 -0
  592. package/external/folly/folly/lang/CString.cpp +86 -0
  593. package/external/folly/folly/lang/CString.h +55 -0
  594. package/external/folly/folly/lang/Cast.h +51 -0
  595. package/external/folly/folly/lang/CheckedMath.h +253 -0
  596. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  597. package/external/folly/folly/lang/Exception.cpp +822 -0
  598. package/external/folly/folly/lang/Exception.h +716 -0
  599. package/external/folly/folly/lang/Extern.h +55 -0
  600. package/external/folly/folly/lang/Hint-inl.h +144 -0
  601. package/external/folly/folly/lang/Hint.h +238 -0
  602. package/external/folly/folly/lang/Keep.h +98 -0
  603. package/external/folly/folly/lang/New.h +124 -0
  604. package/external/folly/folly/lang/Ordering.h +140 -0
  605. package/external/folly/folly/lang/Pretty.h +159 -0
  606. package/external/folly/folly/lang/PropagateConst.h +413 -0
  607. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  608. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  609. package/external/folly/folly/lang/StaticConst.h +33 -0
  610. package/external/folly/folly/lang/Thunk.h +100 -0
  611. package/external/folly/folly/lang/TypeInfo.h +58 -0
  612. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  613. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  614. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  615. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  616. package/external/folly/folly/lang/test/BUCK +258 -0
  617. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  618. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  619. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  620. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  621. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  622. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  623. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  624. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  625. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  626. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  627. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  628. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  629. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  630. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  631. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  632. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  633. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  634. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  635. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  636. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  637. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  638. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  639. package/external/folly/folly/memcpy.S +292 -0
  640. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  641. package/external/folly/folly/memory/Arena-inl.h +83 -0
  642. package/external/folly/folly/memory/Arena.h +325 -0
  643. package/external/folly/folly/memory/BUCK +191 -0
  644. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  645. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  646. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  647. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  648. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  649. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  650. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  651. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  652. package/external/folly/folly/memory/Malloc.h +551 -0
  653. package/external/folly/folly/memory/MemoryResource.h +57 -0
  654. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  655. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  656. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  657. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  658. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  659. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  660. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  661. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  662. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  663. package/external/folly/folly/memory/detail/BUCK +10 -0
  664. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  665. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  666. package/external/folly/folly/memory/not_null-inl.h +522 -0
  667. package/external/folly/folly/memory/not_null.h +449 -0
  668. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  669. package/external/folly/folly/memory/test/BUCK +146 -0
  670. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  671. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  672. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  673. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  674. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  675. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  676. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  677. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  678. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  679. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  680. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  681. package/external/folly/folly/memset.S +245 -0
  682. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  683. package/external/folly/folly/portability/Asm.h +50 -0
  684. package/external/folly/folly/portability/Atomic.h +31 -0
  685. package/external/folly/folly/portability/BUCK +456 -0
  686. package/external/folly/folly/portability/Builtins.cpp +31 -0
  687. package/external/folly/folly/portability/Builtins.h +161 -0
  688. package/external/folly/folly/portability/Config.h +43 -0
  689. package/external/folly/folly/portability/Constexpr.h +145 -0
  690. package/external/folly/folly/portability/Dirent.cpp +140 -0
  691. package/external/folly/folly/portability/Dirent.h +41 -0
  692. package/external/folly/folly/portability/Event.h +44 -0
  693. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  694. package/external/folly/folly/portability/Fcntl.h +67 -0
  695. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  696. package/external/folly/folly/portability/Filesystem.h +114 -0
  697. package/external/folly/folly/portability/FmtCompile.h +40 -0
  698. package/external/folly/folly/portability/GFlags.h +139 -0
  699. package/external/folly/folly/portability/GMock.h +35 -0
  700. package/external/folly/folly/portability/GTest.h +35 -0
  701. package/external/folly/folly/portability/IOVec.h +34 -0
  702. package/external/folly/folly/portability/Libgen.cpp +59 -0
  703. package/external/folly/folly/portability/Libgen.h +29 -0
  704. package/external/folly/folly/portability/Libunwind.h +21 -0
  705. package/external/folly/folly/portability/Malloc.cpp +31 -0
  706. package/external/folly/folly/portability/Malloc.h +53 -0
  707. package/external/folly/folly/portability/Math.h +90 -0
  708. package/external/folly/folly/portability/Memory.h +26 -0
  709. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  710. package/external/folly/folly/portability/OpenSSL.h +102 -0
  711. package/external/folly/folly/portability/PThread.cpp +697 -0
  712. package/external/folly/folly/portability/PThread.h +148 -0
  713. package/external/folly/folly/portability/README.md +21 -0
  714. package/external/folly/folly/portability/Sched.cpp +41 -0
  715. package/external/folly/folly/portability/Sched.h +45 -0
  716. package/external/folly/folly/portability/Sockets.cpp +245 -0
  717. package/external/folly/folly/portability/Sockets.h +155 -0
  718. package/external/folly/folly/portability/SourceLocation.h +49 -0
  719. package/external/folly/folly/portability/Stdio.cpp +77 -0
  720. package/external/folly/folly/portability/Stdio.h +32 -0
  721. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  722. package/external/folly/folly/portability/Stdlib.h +64 -0
  723. package/external/folly/folly/portability/String.cpp +53 -0
  724. package/external/folly/folly/portability/String.h +39 -0
  725. package/external/folly/folly/portability/SysFile.cpp +46 -0
  726. package/external/folly/folly/portability/SysFile.h +27 -0
  727. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  728. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  729. package/external/folly/folly/portability/SysMman.cpp +242 -0
  730. package/external/folly/folly/portability/SysMman.h +68 -0
  731. package/external/folly/folly/portability/SysResource.cpp +108 -0
  732. package/external/folly/folly/portability/SysResource.h +71 -0
  733. package/external/folly/folly/portability/SysStat.cpp +66 -0
  734. package/external/folly/folly/portability/SysStat.h +52 -0
  735. package/external/folly/folly/portability/SysSyscall.h +73 -0
  736. package/external/folly/folly/portability/SysTime.cpp +62 -0
  737. package/external/folly/folly/portability/SysTime.h +50 -0
  738. package/external/folly/folly/portability/SysTypes.h +44 -0
  739. package/external/folly/folly/portability/SysUio.cpp +179 -0
  740. package/external/folly/folly/portability/SysUio.h +51 -0
  741. package/external/folly/folly/portability/Syslog.h +39 -0
  742. package/external/folly/folly/portability/Time.cpp +357 -0
  743. package/external/folly/folly/portability/Time.h +74 -0
  744. package/external/folly/folly/portability/Unistd.h +111 -0
  745. package/external/folly/folly/portability/Windows.h +108 -0
  746. package/external/folly/folly/portability/openat2.c +30 -0
  747. package/external/folly/folly/portability/openat2.h +39 -0
  748. package/external/folly/folly/portability/test/BUCK +59 -0
  749. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  750. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  751. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  752. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  753. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  754. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  755. package/external/folly/folly/small_vector.h +17 -0
  756. package/external/folly/folly/somerge_defs.bzl +399 -0
  757. package/external/folly/folly/sorted_vector_types.h +17 -0
  758. package/external/folly/folly/stop_watch.h +317 -0
  759. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  760. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  761. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  762. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  763. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  764. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  765. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  766. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  767. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  768. package/external/folly/folly/synchronization/BUCK +418 -0
  769. package/external/folly/folly/synchronization/Baton.h +419 -0
  770. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  771. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  772. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  773. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  774. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  775. package/external/folly/folly/synchronization/EventCount.h +200 -0
  776. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  777. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  778. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  779. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  780. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  781. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  782. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  783. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  784. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  785. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  786. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  787. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  788. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  789. package/external/folly/folly/synchronization/Latch.h +160 -0
  790. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  791. package/external/folly/folly/synchronization/Lock.h +887 -0
  792. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  793. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  794. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  795. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  796. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  797. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  798. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  799. package/external/folly/folly/synchronization/Rcu.h +553 -0
  800. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  801. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  802. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  803. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  804. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  805. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  806. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  807. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  808. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  809. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  810. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  811. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  812. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  813. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  814. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  815. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  816. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  817. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  818. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  819. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  820. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  821. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  822. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  823. package/external/folly/folly/synchronization/example/BUCK +27 -0
  824. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  825. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  826. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  827. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  828. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  829. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  830. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  831. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  832. package/external/folly/folly/synchronization/test/BUCK +495 -0
  833. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  834. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  835. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  836. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  837. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  838. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  839. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  840. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  841. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  842. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  843. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  844. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  845. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  846. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  847. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  848. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  849. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  850. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  851. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  852. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  853. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  854. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  855. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  856. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  857. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  858. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  859. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  860. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  861. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  862. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  863. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  864. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  865. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  866. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  867. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  868. package/external/folly/folly/system/AtFork.cpp +205 -0
  869. package/external/folly/folly/system/AtFork.h +116 -0
  870. package/external/folly/folly/system/AuxVector.h +198 -0
  871. package/external/folly/folly/system/BUCK +144 -0
  872. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  873. package/external/folly/folly/system/EnvUtil.h +113 -0
  874. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  875. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  876. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  877. package/external/folly/folly/system/MemoryMapping.h +287 -0
  878. package/external/folly/folly/system/Pid.cpp +87 -0
  879. package/external/folly/folly/system/Pid.h +34 -0
  880. package/external/folly/folly/system/Shell.cpp +33 -0
  881. package/external/folly/folly/system/Shell.h +93 -0
  882. package/external/folly/folly/system/ThreadId.cpp +89 -0
  883. package/external/folly/folly/system/ThreadId.h +62 -0
  884. package/external/folly/folly/system/ThreadName.cpp +330 -0
  885. package/external/folly/folly/system/ThreadName.h +72 -0
  886. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  887. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  888. package/external/folly/folly/system/test/BUCK +120 -0
  889. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  890. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  891. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  892. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  893. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  894. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  895. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  896. package/external/folly/folly.vcxitems +164 -0
  897. package/external/folly/static/logo.svg +1 -0
  898. package/external/folly/sync-config.json +8 -0
  899. package/package.json +3 -3
  900. package/template/cpp-app/proj/MyApp.sln +0 -33
  901. package/template/cpp-lib/proj/MyLib.sln +0 -33
  902. package/template/cs-app/proj/MyApp.sln +0 -33
  903. package/template/cs-lib/proj/MyLib.sln +0 -33
  904. package/templates/cpp-app/windows/MyApp.sln +0 -33
  905. package/templates/cpp-lib/example/metro.config.js +31 -6
  906. package/templates/cpp-lib/windows/MyLib.sln +0 -33
  907. package/Folly/Folly.vcxproj +0 -383
  908. package/Folly/Folly.vcxproj.filters +0 -558
  909. package/Folly/Folly.win32.vcxproj +0 -11
  910. package/Folly/packages.lock.win32.json +0 -20
  911. package/Scripts/Warm-RnwFeedCache.ps1 +0 -413
  912. package/fmt/fmt.vcxproj +0 -163
  913. package/fmt/fmt.vcxproj.filters +0 -59
  914. package/fmt/fmt.win32.vcxproj +0 -10
  915. package/fmt/pch.cpp +0 -4
  916. package/fmt/pch.h +0 -2
  917. /package/{Folly → external/folly}/Folly.natvis +0 -0
  918. /package/{Folly → external/folly}/cgmanifest.json +0 -0
  919. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
  920. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
  921. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
  922. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
  923. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
  924. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
  925. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
  926. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
  927. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
  928. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
@@ -0,0 +1,1603 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ //
18
+ // Docs: https://fburl.com/fbcref_f14nodeset
19
+ //
20
+
21
+ #pragma once
22
+
23
+ /**
24
+ * F14NodeSet, F14ValueSet, and F14VectorSet
25
+ *
26
+ * F14FastSet conditionally works like F14ValueSet or F14VectorSet
27
+ *
28
+ * See F14.md
29
+ */
30
+
31
+ #include <cstddef>
32
+ #include <initializer_list>
33
+ #include <tuple>
34
+
35
+ #include <folly/Portability.h>
36
+ #include <folly/container/View.h>
37
+ #include <folly/lang/SafeAssert.h>
38
+
39
+ #include <folly/container/F14Set-fwd.h>
40
+ #include <folly/container/Iterator.h>
41
+ #include <folly/container/detail/F14Policy.h>
42
+ #include <folly/container/detail/F14SetFallback.h>
43
+ #include <folly/container/detail/F14Table.h>
44
+ #include <folly/container/detail/Util.h>
45
+
46
+ namespace folly {
47
+
48
+ #if FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
49
+
50
+ //////// Common case for supported platforms
51
+
52
+ namespace f14 {
53
+ namespace detail {
54
+
55
+ template <typename Policy>
56
+ class F14BasicSet {
57
+ template <typename K, typename T>
58
+ using EnableHeterogeneousFind = std::enable_if_t<
59
+ ::folly::detail::EligibleForHeterogeneousFind<
60
+ typename Policy::Value,
61
+ typename Policy::Hasher,
62
+ typename Policy::KeyEqual,
63
+ K>::value,
64
+ T>;
65
+
66
+ template <typename K, typename T>
67
+ using EnableHeterogeneousInsert = std::enable_if_t<
68
+ ::folly::detail::EligibleForHeterogeneousInsert<
69
+ typename Policy::Value,
70
+ typename Policy::Hasher,
71
+ typename Policy::KeyEqual,
72
+ K>::value,
73
+ T>;
74
+
75
+ template <typename K>
76
+ using IsIter = std::is_same<typename Policy::Iter, remove_cvref_t<K>>;
77
+
78
+ template <typename K, typename T>
79
+ using EnableHeterogeneousErase = std::enable_if_t<
80
+ ::folly::detail::EligibleForHeterogeneousFind<
81
+ typename Policy::Value,
82
+ typename Policy::Hasher,
83
+ typename Policy::KeyEqual,
84
+ std::conditional_t<IsIter<K>::value, typename Policy::Value, K>>::
85
+ value &&
86
+ !IsIter<K>::value,
87
+ T>;
88
+
89
+ public:
90
+ //// PUBLIC - Member types
91
+
92
+ using key_type = typename Policy::Value;
93
+ using value_type = key_type;
94
+ using size_type = std::size_t;
95
+ using difference_type = std::ptrdiff_t;
96
+ using hash_token_type = F14HashToken;
97
+ using hasher = typename Policy::Hasher;
98
+ using key_equal = typename Policy::KeyEqual;
99
+ using allocator_type = typename Policy::Alloc;
100
+ using reference = value_type&;
101
+ using const_reference = value_type const&;
102
+ using pointer = typename Policy::AllocTraits::pointer;
103
+ using const_pointer = typename Policy::AllocTraits::const_pointer;
104
+ using iterator = typename Policy::Iter;
105
+ using const_iterator = iterator;
106
+
107
+ private:
108
+ using ItemIter = typename Policy::ItemIter;
109
+
110
+ public:
111
+ //// PUBLIC - Member functions
112
+
113
+ F14BasicSet() noexcept(Policy::kDefaultConstructIsNoexcept) : table_{} {}
114
+
115
+ explicit F14BasicSet(
116
+ std::size_t initialCapacity,
117
+ hasher const& hash = hasher{},
118
+ key_equal const& eq = key_equal{},
119
+ allocator_type const& alloc = allocator_type{})
120
+ : table_{initialCapacity, hash, eq, alloc} {}
121
+
122
+ explicit F14BasicSet(std::size_t initialCapacity, allocator_type const& alloc)
123
+ : F14BasicSet(initialCapacity, hasher{}, key_equal{}, alloc) {}
124
+
125
+ explicit F14BasicSet(
126
+ std::size_t initialCapacity,
127
+ hasher const& hash,
128
+ allocator_type const& alloc)
129
+ : F14BasicSet(initialCapacity, hash, key_equal{}, alloc) {}
130
+
131
+ explicit F14BasicSet(allocator_type const& alloc)
132
+ : F14BasicSet(0, hasher{}, key_equal{}, alloc) {}
133
+
134
+ template <typename InputIt>
135
+ F14BasicSet(
136
+ InputIt first,
137
+ InputIt last,
138
+ std::size_t initialCapacity = 0,
139
+ hasher const& hash = hasher{},
140
+ key_equal const& eq = key_equal{},
141
+ allocator_type const& alloc = allocator_type{})
142
+ : table_{initialCapacity, hash, eq, alloc} {
143
+ initialInsert(first, last, initialCapacity);
144
+ }
145
+
146
+ template <typename InputIt>
147
+ F14BasicSet(
148
+ InputIt first,
149
+ InputIt last,
150
+ std::size_t initialCapacity,
151
+ allocator_type const& alloc)
152
+ : table_{initialCapacity, hasher{}, key_equal{}, alloc} {
153
+ initialInsert(first, last, initialCapacity);
154
+ }
155
+
156
+ template <typename InputIt>
157
+ F14BasicSet(
158
+ InputIt first,
159
+ InputIt last,
160
+ std::size_t initialCapacity,
161
+ hasher const& hash,
162
+ allocator_type const& alloc)
163
+ : table_{initialCapacity, hash, key_equal{}, alloc} {
164
+ initialInsert(first, last, initialCapacity);
165
+ }
166
+
167
+ F14BasicSet(F14BasicSet const& rhs) = default;
168
+
169
+ F14BasicSet(F14BasicSet const& rhs, allocator_type const& alloc)
170
+ : table_(rhs.table_, alloc) {}
171
+
172
+ F14BasicSet(F14BasicSet&& rhs) = default;
173
+
174
+ F14BasicSet(F14BasicSet&& rhs, allocator_type const& alloc) noexcept(
175
+ Policy::kAllocIsAlwaysEqual)
176
+ : table_{std::move(rhs.table_), alloc} {}
177
+
178
+ /* implicit */ F14BasicSet(
179
+ std::initializer_list<value_type> init,
180
+ std::size_t initialCapacity = 0,
181
+ hasher const& hash = hasher{},
182
+ key_equal const& eq = key_equal{},
183
+ allocator_type const& alloc = allocator_type{})
184
+ : table_{initialCapacity, hash, eq, alloc} {
185
+ initialInsert(init.begin(), init.end(), initialCapacity);
186
+ }
187
+
188
+ F14BasicSet(
189
+ std::initializer_list<value_type> init,
190
+ std::size_t initialCapacity,
191
+ allocator_type const& alloc)
192
+ : table_{initialCapacity, hasher{}, key_equal{}, alloc} {
193
+ initialInsert(init.begin(), init.end(), initialCapacity);
194
+ }
195
+
196
+ F14BasicSet(
197
+ std::initializer_list<value_type> init,
198
+ std::size_t initialCapacity,
199
+ hasher const& hash,
200
+ allocator_type const& alloc)
201
+ : table_{initialCapacity, hash, key_equal{}, alloc} {
202
+ initialInsert(init.begin(), init.end(), initialCapacity);
203
+ }
204
+
205
+ F14BasicSet& operator=(F14BasicSet const&) = default;
206
+
207
+ F14BasicSet& operator=(F14BasicSet&&) = default;
208
+
209
+ F14BasicSet& operator=(std::initializer_list<value_type> ilist) {
210
+ clear();
211
+ bulkInsert(ilist.begin(), ilist.end(), true);
212
+ return *this;
213
+ }
214
+
215
+ /// Get the allocator for this container.
216
+ allocator_type get_allocator() const noexcept { return table_.alloc(); }
217
+
218
+ //// PUBLIC - Iterators
219
+
220
+ /// @methodset Iterators
221
+ iterator begin() noexcept { return cbegin(); }
222
+ const_iterator begin() const noexcept { return cbegin(); }
223
+ /// @methodset Iterators
224
+ const_iterator cbegin() const noexcept {
225
+ return table_.makeIter(table_.begin());
226
+ }
227
+
228
+ /// @methodset Iterators
229
+ iterator end() noexcept { return cend(); }
230
+ const_iterator end() const noexcept { return cend(); }
231
+ /// @methodset Iterators
232
+ const_iterator cend() const noexcept { return table_.makeIter(table_.end()); }
233
+
234
+ //// PUBLIC - Capacity
235
+
236
+ /**
237
+ * Check if this container has any elements.
238
+ * @methodset Capacity
239
+ */
240
+ bool empty() const noexcept { return table_.empty(); }
241
+
242
+ /**
243
+ * Number of elements in this container.
244
+ * @methodset Capacity
245
+ */
246
+ std::size_t size() const noexcept { return table_.size(); }
247
+
248
+ /**
249
+ * The maximum size of this container.
250
+ * @methodset Capacity
251
+ */
252
+ std::size_t max_size() const noexcept { return table_.max_size(); }
253
+
254
+ //// PUBLIC - Modifiers
255
+
256
+ /**
257
+ * Remove all elements.
258
+ *
259
+ * Frees heap-allocated memory; bucket_count is returned to 0.
260
+ *
261
+ * @methodset Modifiers
262
+ */
263
+ void clear() noexcept { table_.clear(); }
264
+
265
+ /**
266
+ * Add a single element.
267
+ *
268
+ * @overloadbrief Add elements.
269
+ * @methodset Modifiers
270
+ */
271
+ std::pair<iterator, bool> insert(value_type const& value) {
272
+ return emplace(value);
273
+ }
274
+
275
+ /// Add a single element.
276
+ std::pair<iterator, bool> insert(value_type&& value) {
277
+ return emplace(std::move(value));
278
+ }
279
+
280
+ /**
281
+ * Add a single element, with a locational hint.
282
+ *
283
+ * std::unordered_set's hinted insertion API is misleading. No implementation
284
+ * I've seen actually uses the hint. Code restructuring by the caller to use
285
+ * the hinted API is at best unnecessary, and at worst a pessimization. It is
286
+ * used, however, so we provide it.
287
+ */
288
+ iterator insert(const_iterator /*hint*/, value_type const& value) {
289
+ return insert(value).first;
290
+ }
291
+
292
+ /// Add a single element, with a locational hint.
293
+ iterator insert(const_iterator /*hint*/, value_type&& value) {
294
+ return insert(std::move(value)).first;
295
+ }
296
+
297
+ /// Add a single element, of a heterognous type.
298
+ template <typename K>
299
+ EnableHeterogeneousInsert<K, std::pair<iterator, bool>> insert(K&& value) {
300
+ return emplace(std::forward<K>(value));
301
+ }
302
+
303
+ private:
304
+ template <class InputIt>
305
+ FOLLY_ALWAYS_INLINE void bulkInsert(
306
+ InputIt first, InputIt last, bool autoReserve) {
307
+ if (autoReserve) {
308
+ auto n = std::distance(first, last);
309
+ if (n == 0) {
310
+ return;
311
+ }
312
+ table_.reserveForInsert(n);
313
+ }
314
+ while (first != last) {
315
+ insert(*first);
316
+ ++first;
317
+ }
318
+ }
319
+
320
+ template <class InputIt>
321
+ void initialInsert(InputIt first, InputIt last, std::size_t initialCapacity) {
322
+ FOLLY_SAFE_DCHECK(empty() && bucket_count() >= initialCapacity, "");
323
+
324
+ // It's possible that there are a lot of duplicates in first..last and
325
+ // so we will oversize ourself. The common case, however, is that
326
+ // we can avoid a lot of rehashing if we pre-expand. The behavior
327
+ // is easy to disable at a particular call site by asking for an
328
+ // initialCapacity of 1.
329
+ bool autoReserve =
330
+ std::is_base_of<
331
+ std::random_access_iterator_tag,
332
+ typename std::iterator_traits<InputIt>::iterator_category>::value &&
333
+ initialCapacity == 0;
334
+ bulkInsert(first, last, autoReserve);
335
+ }
336
+
337
+ public:
338
+ /// Add a range of elements.
339
+ template <class InputIt>
340
+ void insert(InputIt first, InputIt last) {
341
+ // Bulk reserve is a heuristic choice, so it can backfire. We restrict
342
+ // ourself to situations that mimic bulk construction without an
343
+ // explicit initialCapacity.
344
+ bool autoReserve =
345
+ std::is_base_of<
346
+ std::random_access_iterator_tag,
347
+ typename std::iterator_traits<InputIt>::iterator_category>::value &&
348
+ bucket_count() == 0;
349
+ bulkInsert(first, last, autoReserve);
350
+ }
351
+
352
+ /// Add elements from an initializer list.
353
+ void insert(std::initializer_list<value_type> ilist) {
354
+ insert(ilist.begin(), ilist.end());
355
+ }
356
+
357
+ private:
358
+ template <typename Arg>
359
+ using UsableAsKey = ::folly::detail::
360
+ EligibleForHeterogeneousFind<key_type, hasher, key_equal, Arg>;
361
+
362
+ public:
363
+ /**
364
+ * Add an element by constructing it in-place.
365
+ *
366
+ * @overloadbrief Add elements in-place.
367
+ * @methodset Modifiers
368
+ */
369
+ template <class... Args>
370
+ std::pair<iterator, bool> emplace(Args&&... args) {
371
+ auto rv = folly::detail::callWithConstructedKey<key_type, UsableAsKey>(
372
+ table_.alloc(),
373
+ [&](auto&&... inner) {
374
+ return table_.tryEmplaceValue(
375
+ std::forward<decltype(inner)>(inner)...);
376
+ },
377
+ std::forward<Args>(args)...);
378
+ return std::make_pair(table_.makeIter(rv.first), rv.second);
379
+ }
380
+
381
+ // Emplace with prehash token
382
+ template <class... Args>
383
+ std::pair<iterator, bool> emplace_token(
384
+ F14HashToken const& token, Args&&... args) {
385
+ auto rv = folly::detail::callWithConstructedKey<key_type, UsableAsKey>(
386
+ table_.alloc(),
387
+ [&](auto&&... inner) {
388
+ return table_.tryEmplaceValueWithToken(
389
+ token, std::forward<decltype(inner)>(inner)...);
390
+ },
391
+ std::forward<Args>(args)...);
392
+ return std::make_pair(table_.makeIter(rv.first), rv.second);
393
+ }
394
+
395
+ /// Emplace with hint.
396
+ template <class... Args>
397
+ iterator emplace_hint(const_iterator /*hint*/, Args&&... args) {
398
+ return emplace(std::forward<Args>(args)...).first;
399
+ }
400
+
401
+ /**
402
+ * Remove element at a specific position (iterator).
403
+ * @overloadbrief Remove elements.
404
+ * @methodset Modifiers
405
+ */
406
+ FOLLY_ALWAYS_INLINE iterator erase(const_iterator pos) {
407
+ return eraseInto(pos, variadic_noop);
408
+ }
409
+
410
+ /// Remove a range of elements.
411
+ iterator erase(const_iterator first, const_iterator last) {
412
+ return eraseInto(first, last, variadic_noop);
413
+ }
414
+
415
+ /// Remove a specific key.
416
+ size_type erase(key_type const& key) { return eraseInto(key, variadic_noop); }
417
+
418
+ /// Remove a key, using a heterogeneous representation.
419
+ template <typename K>
420
+ EnableHeterogeneousErase<K, size_type> erase(K const& key) {
421
+ return eraseInto(key, variadic_noop);
422
+ }
423
+
424
+ /**
425
+ * Callback-erase a single iterator.
426
+ *
427
+ * Like erase, but with an additional callback argument which is called with
428
+ * an rvalue reference to the item directly before it is destroyed. This can
429
+ * be used to extract an item out of a F14Set while avoiding a copy.
430
+ *
431
+ * @overloadbrief Erase with pre-destruction callback.
432
+ * @methodset Modifiers
433
+ */
434
+ template <typename BeforeDestroy>
435
+ FOLLY_ALWAYS_INLINE iterator
436
+ eraseInto(const_iterator pos, BeforeDestroy&& beforeDestroy) {
437
+ auto itemPos = table_.unwrapIter(pos);
438
+ table_.eraseIterInto(itemPos, beforeDestroy);
439
+
440
+ // If we are inlined then gcc and clang can optimize away all of the
441
+ // work of ++pos if the caller discards it.
442
+ itemPos.advanceLikelyDead();
443
+ return table_.makeIter(itemPos);
444
+ }
445
+
446
+ /// Callback-erase a range of values.
447
+ template <typename BeforeDestroy>
448
+ iterator eraseInto(
449
+ const_iterator first,
450
+ const_iterator last,
451
+ BeforeDestroy&& beforeDestroy) {
452
+ while (first != last) {
453
+ first = eraseInto(first, beforeDestroy);
454
+ }
455
+ return first;
456
+ }
457
+
458
+ /// Callback-erase a specific key.
459
+ template <typename BeforeDestroy>
460
+ size_type eraseInto(key_type const& key, BeforeDestroy&& beforeDestroy) {
461
+ return table_.eraseKeyInto(key, beforeDestroy);
462
+ }
463
+
464
+ /// Callback-erase a specific key, using a heterogeneous representation.
465
+ template <typename K, typename BeforeDestroy>
466
+ EnableHeterogeneousErase<K, size_type> eraseInto(
467
+ K const& key, BeforeDestroy&& beforeDestroy) {
468
+ return table_.eraseKeyInto(key, beforeDestroy);
469
+ }
470
+
471
+ //// PUBLIC - Lookup
472
+
473
+ /**
474
+ * Number of elements matching the given key.
475
+ * @methodset Lookup
476
+ */
477
+ FOLLY_ALWAYS_INLINE size_type count(key_type const& key) const {
478
+ return contains(key) ? 1 : 0;
479
+ }
480
+
481
+ template <typename K>
482
+ FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, size_type> count(
483
+ K const& key) const {
484
+ return contains(key) ? 1 : 0;
485
+ }
486
+
487
+ /**
488
+ * @overloadbrief Prehash a key.
489
+ * @methodset Lookup
490
+ *
491
+ * prehash(key) does the work of evaluating hash_function()(key)
492
+ * (including additional bit-mixing for non-avalanching hash functions),
493
+ * and wraps the result of that work in a token for later reuse.
494
+ *
495
+ * The returned token may be used at any time, may be used more than
496
+ * once, and may be used in other F14 sets and maps. Tokens are
497
+ * transferrable between any F14 containers (maps and sets) with the
498
+ * same key_type and equal hash_function()s.
499
+ *
500
+ * Hash tokens are not hints -- it is a bug to call any method on this
501
+ * class with a token t and key k where t isn't the result of a call
502
+ * to prehash(k2) with k2 == k.
503
+ */
504
+ F14HashToken prehash(key_type const& key) const {
505
+ return table_.prehash(key);
506
+ }
507
+ /// @copydoc prehash
508
+ F14HashToken prehash(key_type const& key, std::size_t hash) const {
509
+ return table_.prehash(key, hash);
510
+ }
511
+
512
+ /// @copydoc prehash
513
+ template <typename K>
514
+ EnableHeterogeneousFind<K, F14HashToken> prehash(K const& key) const {
515
+ return table_.prehash(key);
516
+ }
517
+ /// @copydoc prehash
518
+ template <typename K>
519
+ EnableHeterogeneousFind<K, F14HashToken> prehash(
520
+ K const& key, std::size_t hash) const {
521
+ return table_.prehash(key, hash);
522
+ }
523
+
524
+ /**
525
+ * @overloadbrief Prefetch cachelines associated with a key.
526
+ * @methodset Lookup
527
+ *
528
+ * prefetch(token) begins prefetching the first steps of looking for key into
529
+ * the local CPU cache.
530
+ *
531
+ * Example Scenario: Loading 2 values from a cold map.
532
+ * You have a map that is cold, meaning it is out of the local CPU cache,
533
+ * and you want to load two values from the map. This can be extended to
534
+ * load N values, but we're loading 2 for simplicity.
535
+ *
536
+ * When the map is cold the dominating factor in the latency is loading the
537
+ * cache line of the entry into the local CPU cache. Using prehash() will
538
+ * issue these cache line fetches in parallel. That means that by the time we
539
+ * finish map.find(token1, key1) the cache lines needed by map.find(token2,
540
+ * key2) may already be in the local CPU cache. In the best case this will
541
+ * half the latency.
542
+ *
543
+ * It is always okay to call prefetch() before a find() or other lookup
544
+ * operation, as it only prefetches cache lines that are guaranteed to be
545
+ * needed by the lookup.
546
+ *
547
+ * std::pair<iterator, iterator> find2(
548
+ * auto& set, key_type const& key1, key_type const& key2) {
549
+ * auto const token1 = set.prehash(key1);
550
+ * set.prefetch(token1);
551
+ * auto const token2 = set.prehash(key2);
552
+ * set.prefetch(token2);
553
+ * return std::make_pair(set.find(token1, key1), set.find(token2, key2));
554
+ * }
555
+ */
556
+ void prefetch(F14HashToken const& token) const { table_.prefetch(token); }
557
+
558
+ /**
559
+ * @overloadbrief Get the iterator for a key.
560
+ * @methodset Lookup
561
+ */
562
+ FOLLY_ALWAYS_INLINE iterator find(key_type const& key) {
563
+ return const_cast<F14BasicSet const*>(this)->find(key);
564
+ }
565
+
566
+ FOLLY_ALWAYS_INLINE const_iterator find(key_type const& key) const {
567
+ return table_.makeIter(table_.find(key));
568
+ }
569
+
570
+ FOLLY_ALWAYS_INLINE iterator
571
+ find(F14HashToken const& token, key_type const& key) {
572
+ return const_cast<F14BasicSet const*>(this)->find(token, key);
573
+ }
574
+
575
+ FOLLY_ALWAYS_INLINE iterator
576
+ find(const F14HashedKey<key_type, hasher>& hashedKey) {
577
+ return const_cast<F14BasicSet const*>(this)->find(
578
+ hashedKey.getHashToken(), hashedKey.getKey());
579
+ }
580
+
581
+ FOLLY_ALWAYS_INLINE const_iterator
582
+ find(F14HashToken const& token, key_type const& key) const {
583
+ return table_.makeIter(table_.find(token, key));
584
+ }
585
+
586
+ FOLLY_ALWAYS_INLINE const_iterator
587
+ find(const F14HashedKey<key_type, hasher>& hashedKey) const {
588
+ return table_.makeIter(
589
+ table_.find(hashedKey.getHashToken(), hashedKey.getKey()));
590
+ }
591
+
592
+ template <typename K>
593
+ FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, iterator> find(K const& key) {
594
+ return const_cast<F14BasicSet const*>(this)->find(key);
595
+ }
596
+
597
+ template <typename K>
598
+ FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, const_iterator> find(
599
+ K const& key) const {
600
+ return table_.makeIter(table_.find(key));
601
+ }
602
+
603
+ template <typename K>
604
+ FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, iterator> find(
605
+ F14HashToken const& token, K const& key) {
606
+ return const_cast<F14BasicSet const*>(this)->find(token, key);
607
+ }
608
+
609
+ template <typename K>
610
+ FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, const_iterator> find(
611
+ F14HashToken const& token, K const& key) const {
612
+ return table_.makeIter(table_.find(token, key));
613
+ }
614
+
615
+ /**
616
+ * @overloadbrief Checks if the container contains an element with the
617
+ * specific key.
618
+ * @methodset Lookup
619
+ */
620
+ FOLLY_ALWAYS_INLINE bool contains(key_type const& key) const {
621
+ return !table_.find(key).atEnd();
622
+ }
623
+
624
+ template <typename K>
625
+ FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, bool> contains(
626
+ K const& key) const {
627
+ return !table_.find(key).atEnd();
628
+ }
629
+
630
+ FOLLY_ALWAYS_INLINE bool contains(
631
+ F14HashToken const& token, key_type const& key) const {
632
+ return !table_.find(token, key).atEnd();
633
+ }
634
+
635
+ FOLLY_ALWAYS_INLINE bool contains(
636
+ const F14HashedKey<key_type, hasher>& hashedKey) const {
637
+ return !table_.find(hashedKey.getHashToken(), hashedKey.getKey()).atEnd();
638
+ }
639
+
640
+ template <typename K>
641
+ FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, bool> contains(
642
+ F14HashToken const& token, K const& key) const {
643
+ return !table_.find(token, key).atEnd();
644
+ }
645
+
646
+ /**
647
+ * @overloadbrief Returns the range of elements matching a specific key.
648
+ * @methodset Lookup
649
+ */
650
+ std::pair<iterator, iterator> equal_range(key_type const& key) {
651
+ return equal_range(*this, key);
652
+ }
653
+
654
+ std::pair<const_iterator, const_iterator> equal_range(
655
+ key_type const& key) const {
656
+ return equal_range(*this, key);
657
+ }
658
+
659
+ template <typename K>
660
+ EnableHeterogeneousFind<K, std::pair<iterator, iterator>> equal_range(
661
+ K const& key) {
662
+ return equal_range(*this, key);
663
+ }
664
+
665
+ template <typename K>
666
+ EnableHeterogeneousFind<K, std::pair<const_iterator, const_iterator>>
667
+ equal_range(K const& key) const {
668
+ return equal_range(*this, key);
669
+ }
670
+
671
+ //// PUBLIC - Bucket interface
672
+
673
+ /**
674
+ * The number of buckets in this container.
675
+ * @methodset Bucket interface
676
+ */
677
+ std::size_t bucket_count() const noexcept { return table_.bucket_count(); }
678
+
679
+ /**
680
+ * The maximum number of buckets for this container.
681
+ * @methodset Bucket interface
682
+ */
683
+ std::size_t max_bucket_count() const noexcept {
684
+ return table_.max_bucket_count();
685
+ }
686
+
687
+ //// PUBLIC - Hash policy
688
+
689
+ /**
690
+ * Load factor of the underlying hashtable.
691
+ * @methodset Hash policy
692
+ */
693
+ float load_factor() const noexcept { return table_.load_factor(); }
694
+
695
+ /**
696
+ * @overloadbrief Load factor control.
697
+ * Get the maximum load factor for this container.
698
+ * @methodset Hash policy
699
+ */
700
+ float max_load_factor() const noexcept { return table_.max_load_factor(); }
701
+
702
+ /**
703
+ * Set the maximum load factor for this container.
704
+ * @methodset Hash policy
705
+ */
706
+ void max_load_factor(float v) { table_.max_load_factor(v); }
707
+
708
+ /**
709
+ * Rehash this container.
710
+ *
711
+ * This function is provided for compliance with C++'s requirements for
712
+ * hashtables, but is no better than a simple `reserve` call for F14.
713
+ *
714
+ * @param bucketCapcity The desired capacity across all buckets.
715
+ *
716
+ * @methodset Hash policy
717
+ */
718
+ void rehash(std::size_t bucketCapacity) {
719
+ // The standard's rehash() requires understanding the max load factor,
720
+ // which is easy to get wrong. Since we don't actually allow adjustment
721
+ // of max_load_factor there is no difference.
722
+ reserve(bucketCapacity);
723
+ }
724
+
725
+ /**
726
+ * Pre-allocate space for at least this many elements.
727
+ *
728
+ * @param capacity The number of elements to pre-allocate space for.
729
+ *
730
+ * @methodset Capacity
731
+ */
732
+ void reserve(std::size_t capacity) { table_.reserve(capacity); }
733
+
734
+ //// PUBLIC - Observers
735
+
736
+ /**
737
+ * Get the hasher.
738
+ * @methodset Observers
739
+ */
740
+ hasher hash_function() const { return table_.hasher(); }
741
+
742
+ /**
743
+ * Get the key_equal.
744
+ * @methodset Observers
745
+ */
746
+ key_equal key_eq() const { return table_.keyEqual(); }
747
+
748
+ //// PUBLIC - F14 Extensions
749
+
750
+ /**
751
+ * Checks for a value using operator==
752
+ *
753
+ * returns true iff there is an element in the set
754
+ * that compares equal to key using operator==. It is undefined
755
+ * behavior to call this function if operator== on key_type can ever
756
+ * return true when the same keys passed to key_eq() would return false
757
+ * (the opposite is allowed). When using the default key_eq this function
758
+ * is equivalent to contains().
759
+ *
760
+ * @methodset Lookup
761
+ */
762
+ bool containsEqualValue(value_type const& value) const {
763
+ return !table_.findMatching(value, [&](auto& k) { return value == k; })
764
+ .atEnd();
765
+ }
766
+
767
+ /**
768
+ * Get memory footprint, not including sizeof(*this).
769
+ * @methodset Capacity
770
+ */
771
+ std::size_t getAllocatedMemorySize() const {
772
+ return table_.getAllocatedMemorySize();
773
+ }
774
+
775
+ /**
776
+ * In-depth memory analysis.
777
+ *
778
+ * Enumerates classes of allocated memory blocks currently owned
779
+ * by this table, calling visitor(allocationSize, allocationCount).
780
+ * This can be used to get a more accurate indication of memory footprint
781
+ * than getAllocatedMemorySize() if you have some way of computing the
782
+ * internal fragmentation of the allocator, such as JEMalloc's nallocx.
783
+ * The visitor might be called twice with the same allocationSize. The
784
+ * visitor's computation should produce the same result for visitor(8,
785
+ * 2) as for two calls to visitor(8, 1), for example. The visitor may
786
+ * be called with a zero allocationCount.
787
+ *
788
+ * @methodset Capacity
789
+ */
790
+ template <typename V>
791
+ void visitAllocationClasses(V&& visitor) const {
792
+ return table_.visitAllocationClasses(visitor);
793
+ }
794
+
795
+ /**
796
+ * Visit contiguous ranges of elements.
797
+ *
798
+ * Calls visitor with two value_type const*, b and e, such that every
799
+ * entry in the table is included in exactly one of the ranges [b,e).
800
+ * This can be used to efficiently iterate elements in bulk when crossing
801
+ * an API boundary that supports contiguous blocks of items.
802
+ *
803
+ * @methodset Iterators
804
+ */
805
+ template <typename V>
806
+ void visitContiguousRanges(V&& visitor) const;
807
+
808
+ /**
809
+ * Get stats.
810
+ * @methodset Hash policy
811
+ */
812
+ F14TableStats computeStats() const noexcept { return table_.computeStats(); }
813
+
814
+ private:
815
+ template <typename Self, typename K>
816
+ static auto equal_range(Self& self, K const& key) {
817
+ auto first = self.find(key);
818
+ auto last = first;
819
+ if (last != self.end()) {
820
+ ++last;
821
+ }
822
+ return std::make_pair(first, last);
823
+ }
824
+
825
+ protected:
826
+ F14Table<Policy> table_;
827
+ };
828
+ } // namespace detail
829
+ } // namespace f14
830
+
831
+ template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
832
+ class F14ValueSet
833
+ : public f14::detail::F14BasicSet<f14::detail::SetPolicyWithDefaults<
834
+ f14::detail::ValueContainerPolicy,
835
+ Key,
836
+ Hasher,
837
+ KeyEqual,
838
+ Alloc>> {
839
+ protected:
840
+ friend struct F14ValueSetTester;
841
+ using Policy = f14::detail::SetPolicyWithDefaults<
842
+ f14::detail::ValueContainerPolicy,
843
+ Key,
844
+ Hasher,
845
+ KeyEqual,
846
+ Alloc>;
847
+
848
+ private:
849
+ using Super = f14::detail::F14BasicSet<Policy>;
850
+
851
+ public:
852
+ using typename Super::value_type;
853
+
854
+ F14ValueSet() = default;
855
+
856
+ using Super::Super;
857
+
858
+ F14ValueSet& operator=(std::initializer_list<value_type> ilist) {
859
+ Super::operator=(ilist);
860
+ return *this;
861
+ }
862
+
863
+ void swap(F14ValueSet& rhs) noexcept(Policy::kSwapIsNoexcept) {
864
+ this->table_.swap(rhs.table_);
865
+ }
866
+
867
+ template <typename V>
868
+ void visitContiguousRanges(V&& visitor) const {
869
+ this->table_.visitContiguousItemRanges(std::forward<V>(visitor));
870
+ }
871
+ };
872
+ #endif // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
873
+
874
+ template <
875
+ typename InputIt,
876
+ typename Hasher = f14::DefaultHasher<iterator_value_type_t<InputIt>>,
877
+ typename KeyEqual = f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
878
+ typename Alloc = f14::DefaultAlloc<iterator_value_type_t<InputIt>>,
879
+ typename = detail::RequireInputIterator<InputIt>,
880
+ typename = detail::RequireNotAllocator<Hasher>,
881
+ typename = detail::RequireNotAllocator<KeyEqual>,
882
+ typename = detail::RequireAllocator<Alloc>>
883
+ F14ValueSet(
884
+ InputIt, InputIt, std::size_t = {}, Hasher = {}, KeyEqual = {}, Alloc = {})
885
+ -> F14ValueSet<iterator_value_type_t<InputIt>, Hasher, KeyEqual, Alloc>;
886
+
887
+ template <
888
+ typename InputIt,
889
+ typename Alloc,
890
+ typename = detail::RequireInputIterator<InputIt>,
891
+ typename = detail::RequireAllocator<Alloc>>
892
+ F14ValueSet(InputIt, InputIt, std::size_t, Alloc)
893
+ -> F14ValueSet<
894
+ iterator_value_type_t<InputIt>,
895
+ f14::DefaultHasher<iterator_value_type_t<InputIt>>,
896
+ f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
897
+ Alloc>;
898
+
899
+ template <
900
+ typename InputIt,
901
+ typename Hasher,
902
+ typename Alloc,
903
+ typename = detail::RequireInputIterator<InputIt>,
904
+ typename = detail::RequireNotAllocator<Hasher>,
905
+ typename = detail::RequireAllocator<Alloc>>
906
+ F14ValueSet(InputIt, InputIt, std::size_t, Hasher, Alloc)
907
+ -> F14ValueSet<
908
+ iterator_value_type_t<InputIt>,
909
+ Hasher,
910
+ f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
911
+ Alloc>;
912
+
913
+ template <
914
+ typename Key,
915
+ typename Hasher = f14::DefaultHasher<Key>,
916
+ typename KeyEqual = f14::DefaultKeyEqual<Key>,
917
+ typename Alloc = f14::DefaultAlloc<Key>,
918
+ typename = detail::RequireNotAllocator<Hasher>,
919
+ typename = detail::RequireNotAllocator<KeyEqual>,
920
+ typename = detail::RequireAllocator<Alloc>>
921
+ F14ValueSet(
922
+ std::initializer_list<Key>,
923
+ std::size_t = {},
924
+ Hasher = {},
925
+ KeyEqual = {},
926
+ Alloc = {}) -> F14ValueSet<Key, Hasher, KeyEqual, Alloc>;
927
+
928
+ template <
929
+ typename Key,
930
+ typename Alloc,
931
+ typename = detail::RequireAllocator<Alloc>>
932
+ F14ValueSet(std::initializer_list<Key>, std::size_t, Alloc)
933
+ -> F14ValueSet<
934
+ Key,
935
+ f14::DefaultHasher<Key>,
936
+ f14::DefaultKeyEqual<Key>,
937
+ Alloc>;
938
+
939
+ template <
940
+ typename Key,
941
+ typename Hasher,
942
+ typename Alloc,
943
+ typename = detail::RequireAllocator<Alloc>>
944
+ F14ValueSet(std::initializer_list<Key>, std::size_t, Hasher, Alloc)
945
+ -> F14ValueSet<Key, Hasher, f14::DefaultKeyEqual<Key>, Alloc>;
946
+
947
+ #if FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
948
+ template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
949
+ class F14NodeSet
950
+ : public f14::detail::F14BasicSet<f14::detail::SetPolicyWithDefaults<
951
+ f14::detail::NodeContainerPolicy,
952
+ Key,
953
+ Hasher,
954
+ KeyEqual,
955
+ Alloc>> {
956
+ protected:
957
+ using Policy = f14::detail::SetPolicyWithDefaults<
958
+ f14::detail::NodeContainerPolicy,
959
+ Key,
960
+ Hasher,
961
+ KeyEqual,
962
+ Alloc>;
963
+
964
+ private:
965
+ using Super = f14::detail::F14BasicSet<Policy>;
966
+
967
+ public:
968
+ using typename Super::value_type;
969
+
970
+ F14NodeSet() = default;
971
+
972
+ using Super::Super;
973
+
974
+ F14NodeSet& operator=(std::initializer_list<value_type> ilist) {
975
+ Super::operator=(ilist);
976
+ return *this;
977
+ }
978
+
979
+ void swap(F14NodeSet& rhs) noexcept(Policy::kSwapIsNoexcept) {
980
+ this->table_.swap(rhs.table_);
981
+ }
982
+
983
+ template <typename V>
984
+ void visitContiguousRanges(V&& visitor) const {
985
+ this->table_.visitItems([&](typename Policy::Item ptr) {
986
+ value_type const* b = std::addressof(*ptr);
987
+ visitor(b, b + 1);
988
+ });
989
+ }
990
+ };
991
+ #endif // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
992
+
993
+ template <
994
+ typename InputIt,
995
+ typename Hasher = f14::DefaultHasher<iterator_value_type_t<InputIt>>,
996
+ typename KeyEqual = f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
997
+ typename Alloc = f14::DefaultAlloc<iterator_value_type_t<InputIt>>,
998
+ typename = detail::RequireInputIterator<InputIt>,
999
+ typename = detail::RequireNotAllocator<Hasher>,
1000
+ typename = detail::RequireNotAllocator<KeyEqual>,
1001
+ typename = detail::RequireAllocator<Alloc>>
1002
+ F14NodeSet(
1003
+ InputIt, InputIt, std::size_t = {}, Hasher = {}, KeyEqual = {}, Alloc = {})
1004
+ -> F14NodeSet<iterator_value_type_t<InputIt>, Hasher, KeyEqual, Alloc>;
1005
+
1006
+ template <
1007
+ typename InputIt,
1008
+ typename Alloc,
1009
+ typename = detail::RequireInputIterator<InputIt>,
1010
+ typename = detail::RequireAllocator<Alloc>>
1011
+ F14NodeSet(InputIt, InputIt, std::size_t, Alloc)
1012
+ -> F14NodeSet<
1013
+ iterator_value_type_t<InputIt>,
1014
+ f14::DefaultHasher<iterator_value_type_t<InputIt>>,
1015
+ f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
1016
+ Alloc>;
1017
+
1018
+ template <
1019
+ typename InputIt,
1020
+ typename Hasher,
1021
+ typename Alloc,
1022
+ typename = detail::RequireInputIterator<InputIt>,
1023
+ typename = detail::RequireNotAllocator<Hasher>,
1024
+ typename = detail::RequireAllocator<Alloc>>
1025
+ F14NodeSet(InputIt, InputIt, std::size_t, Hasher, Alloc)
1026
+ -> F14NodeSet<
1027
+ iterator_value_type_t<InputIt>,
1028
+ Hasher,
1029
+ f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
1030
+ Alloc>;
1031
+
1032
+ template <
1033
+ typename Key,
1034
+ typename Hasher = f14::DefaultHasher<Key>,
1035
+ typename KeyEqual = f14::DefaultKeyEqual<Key>,
1036
+ typename Alloc = f14::DefaultAlloc<Key>,
1037
+ typename = detail::RequireNotAllocator<Hasher>,
1038
+ typename = detail::RequireNotAllocator<KeyEqual>,
1039
+ typename = detail::RequireAllocator<Alloc>>
1040
+ F14NodeSet(
1041
+ std::initializer_list<Key>,
1042
+ std::size_t = {},
1043
+ Hasher = {},
1044
+ KeyEqual = {},
1045
+ Alloc = {}) -> F14NodeSet<Key, Hasher, KeyEqual, Alloc>;
1046
+
1047
+ template <
1048
+ typename Key,
1049
+ typename Alloc,
1050
+ typename = detail::RequireAllocator<Alloc>>
1051
+ F14NodeSet(std::initializer_list<Key>, std::size_t, Alloc)
1052
+ -> F14NodeSet<
1053
+ Key,
1054
+ f14::DefaultHasher<Key>,
1055
+ f14::DefaultKeyEqual<Key>,
1056
+ Alloc>;
1057
+
1058
+ template <
1059
+ typename Key,
1060
+ typename Hasher,
1061
+ typename Alloc,
1062
+ typename = detail::RequireAllocator<Alloc>>
1063
+ F14NodeSet(std::initializer_list<Key>, std::size_t, Hasher, Alloc)
1064
+ -> F14NodeSet<Key, Hasher, f14::DefaultKeyEqual<Key>, Alloc>;
1065
+
1066
+ #if FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
1067
+ namespace f14 {
1068
+ namespace detail {
1069
+ template <
1070
+ typename Key,
1071
+ typename Hasher,
1072
+ typename KeyEqual,
1073
+ typename Alloc,
1074
+ typename EligibleForPerturbedInsertionOrder>
1075
+ class F14VectorSetImpl : public F14BasicSet<SetPolicyWithDefaults<
1076
+ VectorContainerPolicy,
1077
+ Key,
1078
+ Hasher,
1079
+ KeyEqual,
1080
+ Alloc,
1081
+ EligibleForPerturbedInsertionOrder>> {
1082
+ protected:
1083
+ using Policy = SetPolicyWithDefaults<
1084
+ VectorContainerPolicy,
1085
+ Key,
1086
+ Hasher,
1087
+ KeyEqual,
1088
+ Alloc,
1089
+ EligibleForPerturbedInsertionOrder>;
1090
+
1091
+ private:
1092
+ using Super = F14BasicSet<Policy>;
1093
+
1094
+ template <typename K>
1095
+ using IsIter = Disjunction<
1096
+ std::is_same<typename Policy::Iter, remove_cvref_t<K>>,
1097
+ std::is_same<typename Policy::ReverseIter, remove_cvref_t<K>>>;
1098
+
1099
+ template <typename K, typename T>
1100
+ using EnableHeterogeneousVectorErase = std::enable_if_t<
1101
+ ::folly::detail::EligibleForHeterogeneousFind<
1102
+ typename Policy::Value,
1103
+ typename Policy::Hasher,
1104
+ typename Policy::KeyEqual,
1105
+ std::conditional_t<IsIter<K>::value, typename Policy::Value, K>>::
1106
+ value &&
1107
+ !IsIter<K>::value,
1108
+ T>;
1109
+
1110
+ public:
1111
+ using typename Super::const_iterator;
1112
+ using typename Super::iterator;
1113
+ using typename Super::key_type;
1114
+ using typename Super::value_type;
1115
+
1116
+ F14VectorSetImpl() = default;
1117
+
1118
+ using Super::Super;
1119
+
1120
+ F14VectorSetImpl& operator=(std::initializer_list<value_type> ilist) {
1121
+ Super::operator=(ilist);
1122
+ return *this;
1123
+ }
1124
+
1125
+ iterator begin() { return cbegin(); }
1126
+ const_iterator begin() const { return cbegin(); }
1127
+ const_iterator cbegin() const {
1128
+ return this->table_.linearBegin(this->size());
1129
+ }
1130
+
1131
+ iterator end() { return cend(); }
1132
+ const_iterator end() const { return cend(); }
1133
+ const_iterator cend() const { return this->table_.linearEnd(); }
1134
+
1135
+ private:
1136
+ template <typename BeforeDestroy>
1137
+ void eraseUnderlying(
1138
+ typename Policy::ItemIter underlying, BeforeDestroy&& beforeDestroy) {
1139
+ Alloc& a = this->table_.alloc();
1140
+ auto values = this->table_.values_;
1141
+
1142
+ // destroy the value and remove the ptr from the base table
1143
+ auto index = underlying.item();
1144
+ this->table_.eraseIterInto(underlying, beforeDestroy);
1145
+ Policy::AllocTraits::destroy(a, std::addressof(values[index]));
1146
+
1147
+ // move the last element in values_ down and fix up the inbound index
1148
+ auto tailIndex = this->size();
1149
+ if (tailIndex != index) {
1150
+ auto tail = this->table_.find(
1151
+ VectorContainerIndexSearch{static_cast<uint32_t>(tailIndex)});
1152
+ tail.item() = index;
1153
+ auto p = std::addressof(values[index]);
1154
+ assume(p != nullptr);
1155
+ this->table_.transfer(a, std::addressof(values[tailIndex]), p, 1);
1156
+ }
1157
+ }
1158
+
1159
+ template <typename K, typename BeforeDestroy>
1160
+ std::size_t eraseUnderlyingKey(K const& key, BeforeDestroy&& beforeDestroy) {
1161
+ auto underlying = this->table_.find(key);
1162
+ if (underlying.atEnd()) {
1163
+ return 0;
1164
+ } else {
1165
+ eraseUnderlying(underlying, beforeDestroy);
1166
+ return 1;
1167
+ }
1168
+ }
1169
+
1170
+ public:
1171
+ FOLLY_ALWAYS_INLINE iterator erase(const_iterator pos) {
1172
+ return eraseInto(pos, variadic_noop);
1173
+ }
1174
+
1175
+ iterator erase(const_iterator first, const_iterator last) {
1176
+ return eraseInto(first, last, variadic_noop);
1177
+ }
1178
+
1179
+ std::size_t erase(key_type const& key) {
1180
+ return eraseInto(key, variadic_noop);
1181
+ }
1182
+
1183
+ template <typename K>
1184
+ EnableHeterogeneousVectorErase<K, std::size_t> erase(K const& key) {
1185
+ return eraseInto(key, variadic_noop);
1186
+ }
1187
+
1188
+ template <typename BeforeDestroy>
1189
+ FOLLY_ALWAYS_INLINE iterator
1190
+ eraseInto(const_iterator pos, BeforeDestroy&& beforeDestroy) {
1191
+ auto underlying = this->table_.find(
1192
+ VectorContainerIndexSearch{this->table_.iterToIndex(pos)});
1193
+ eraseUnderlying(underlying, beforeDestroy);
1194
+ return ++pos;
1195
+ }
1196
+
1197
+ template <typename BeforeDestroy>
1198
+ iterator eraseInto(
1199
+ const_iterator first,
1200
+ const_iterator last,
1201
+ BeforeDestroy&& beforeDestroy) {
1202
+ while (first != last) {
1203
+ first = eraseInto(first, beforeDestroy);
1204
+ }
1205
+ return first;
1206
+ }
1207
+
1208
+ template <typename BeforeDestroy>
1209
+ std::size_t eraseInto(key_type const& key, BeforeDestroy&& beforeDestroy) {
1210
+ return eraseUnderlyingKey(key, beforeDestroy);
1211
+ }
1212
+
1213
+ template <typename K, typename BeforeDestroy>
1214
+ EnableHeterogeneousVectorErase<K, std::size_t> eraseInto(
1215
+ K const& key, BeforeDestroy&& beforeDestroy) {
1216
+ return eraseUnderlyingKey(key, beforeDestroy);
1217
+ }
1218
+
1219
+ template <typename V>
1220
+ void visitContiguousRanges(V&& visitor) const {
1221
+ auto n = this->table_.size();
1222
+ if (n > 0) {
1223
+ value_type const* b = std::addressof(this->table_.values_[0]);
1224
+ visitor(b, b + n);
1225
+ }
1226
+ }
1227
+ };
1228
+ } // namespace detail
1229
+ } // namespace f14
1230
+
1231
+ template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
1232
+ class F14VectorSet
1233
+ : public f14::detail::
1234
+ F14VectorSetImpl<Key, Hasher, KeyEqual, Alloc, std::false_type> {
1235
+ using Super = f14::detail::
1236
+ F14VectorSetImpl<Key, Hasher, KeyEqual, Alloc, std::false_type>;
1237
+
1238
+ public:
1239
+ using typename Super::const_iterator;
1240
+ using typename Super::iterator;
1241
+ using typename Super::value_type;
1242
+ using reverse_iterator = typename Super::Policy::ReverseIter;
1243
+ using const_reverse_iterator = reverse_iterator;
1244
+
1245
+ F14VectorSet() = default;
1246
+
1247
+ using Super::Super;
1248
+
1249
+ F14VectorSet& operator=(std::initializer_list<value_type> ilist) {
1250
+ Super::operator=(ilist);
1251
+ return *this;
1252
+ }
1253
+
1254
+ void swap(F14VectorSet& rhs) noexcept(Super::Policy::kSwapIsNoexcept) {
1255
+ this->table_.swap(rhs.table_);
1256
+ }
1257
+
1258
+ // ITERATION ORDER
1259
+ //
1260
+ // Deterministic iteration order for insert-only workloads is part of
1261
+ // F14VectorSet's supported API: iterator is LIFO and reverse_iterator
1262
+ // is FIFO.
1263
+ //
1264
+ // If there have been no calls to erase() then iterator and
1265
+ // const_iterator enumerate entries in the opposite of insertion order.
1266
+ // begin()->first is the key most recently inserted. reverse_iterator
1267
+ // and reverse_const_iterator, therefore, enumerate in LIFO (insertion)
1268
+ // order for insert-only workloads. Deterministic iteration order is
1269
+ // only guaranteed if no keys were removed since the last time the
1270
+ // set was empty. Iteration order is preserved across rehashes and
1271
+ // F14VectorSet copies and moves.
1272
+ //
1273
+ // iterator uses LIFO order so that erasing while iterating with begin()
1274
+ // and end() is safe using the erase(it++) idiom, which is supported
1275
+ // by std::set and std::unordered_set. erase(iter) invalidates iter
1276
+ // and all iterators before iter in the non-reverse iteration order.
1277
+ // Every successful erase invalidates all reverse iterators.
1278
+ //
1279
+ // No erase is provided for reverse_iterator (AKA const_reverse_iterator)
1280
+ // to make it harder to shoot yourself in the foot by erasing while
1281
+ // reverse-iterating. You can write that as set.erase(set.iter(riter))
1282
+ // if you need it.
1283
+
1284
+ reverse_iterator rbegin() { return this->table_.values_; }
1285
+ const_reverse_iterator rbegin() const { return crbegin(); }
1286
+ const_reverse_iterator crbegin() const { return this->table_.values_; }
1287
+
1288
+ reverse_iterator rend() { return this->table_.values_ + this->table_.size(); }
1289
+ const_reverse_iterator rend() const { return crend(); }
1290
+ const_reverse_iterator crend() const {
1291
+ return this->table_.values_ + this->table_.size();
1292
+ }
1293
+
1294
+ // explicit conversions between iterator and reverse_iterator
1295
+ iterator iter(reverse_iterator riter) { return this->table_.iter(riter); }
1296
+ const_iterator iter(const_reverse_iterator riter) const {
1297
+ return this->table_.iter(riter);
1298
+ }
1299
+
1300
+ reverse_iterator riter(iterator it) { return this->table_.riter(it); }
1301
+ const_reverse_iterator riter(const_iterator it) const {
1302
+ return this->table_.riter(it);
1303
+ }
1304
+
1305
+ friend Range<const_reverse_iterator> tag_invoke(
1306
+ order_preserving_reinsertion_view_fn, F14VectorSet const& c) noexcept {
1307
+ return {c.rbegin(), c.rend()};
1308
+ }
1309
+ };
1310
+ #endif // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
1311
+
1312
+ template <
1313
+ typename InputIt,
1314
+ typename Hasher = f14::DefaultHasher<iterator_value_type_t<InputIt>>,
1315
+ typename KeyEqual = f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
1316
+ typename Alloc = f14::DefaultAlloc<iterator_value_type_t<InputIt>>,
1317
+ typename = detail::RequireInputIterator<InputIt>,
1318
+ typename = detail::RequireNotAllocator<Hasher>,
1319
+ typename = detail::RequireNotAllocator<KeyEqual>,
1320
+ typename = detail::RequireAllocator<Alloc>>
1321
+ F14VectorSet(
1322
+ InputIt, InputIt, std::size_t = {}, Hasher = {}, KeyEqual = {}, Alloc = {})
1323
+ -> F14VectorSet<iterator_value_type_t<InputIt>, Hasher, KeyEqual, Alloc>;
1324
+
1325
+ template <
1326
+ typename InputIt,
1327
+ typename Alloc,
1328
+ typename = detail::RequireInputIterator<InputIt>,
1329
+ typename = detail::RequireAllocator<Alloc>>
1330
+ F14VectorSet(InputIt, InputIt, std::size_t, Alloc)
1331
+ -> F14VectorSet<
1332
+ iterator_value_type_t<InputIt>,
1333
+ f14::DefaultHasher<iterator_value_type_t<InputIt>>,
1334
+ f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
1335
+ Alloc>;
1336
+
1337
+ template <
1338
+ typename InputIt,
1339
+ typename Hasher,
1340
+ typename Alloc,
1341
+ typename = detail::RequireInputIterator<InputIt>,
1342
+ typename = detail::RequireNotAllocator<Hasher>,
1343
+ typename = detail::RequireAllocator<Alloc>>
1344
+ F14VectorSet(InputIt, InputIt, std::size_t, Hasher, Alloc)
1345
+ -> F14VectorSet<
1346
+ iterator_value_type_t<InputIt>,
1347
+ Hasher,
1348
+ f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
1349
+ Alloc>;
1350
+
1351
+ template <
1352
+ typename Key,
1353
+ typename Hasher = f14::DefaultHasher<Key>,
1354
+ typename KeyEqual = f14::DefaultKeyEqual<Key>,
1355
+ typename Alloc = f14::DefaultAlloc<Key>,
1356
+ typename = detail::RequireNotAllocator<Hasher>,
1357
+ typename = detail::RequireNotAllocator<KeyEqual>,
1358
+ typename = detail::RequireAllocator<Alloc>>
1359
+ F14VectorSet(
1360
+ std::initializer_list<Key>,
1361
+ std::size_t = {},
1362
+ Hasher = {},
1363
+ KeyEqual = {},
1364
+ Alloc = {}) -> F14VectorSet<Key, Hasher, KeyEqual, Alloc>;
1365
+
1366
+ template <
1367
+ typename Key,
1368
+ typename Alloc,
1369
+ typename = detail::RequireAllocator<Alloc>>
1370
+ F14VectorSet(std::initializer_list<Key>, std::size_t, Alloc)
1371
+ -> F14VectorSet<
1372
+ Key,
1373
+ f14::DefaultHasher<Key>,
1374
+ f14::DefaultKeyEqual<Key>,
1375
+ Alloc>;
1376
+
1377
+ template <
1378
+ typename Key,
1379
+ typename Hasher,
1380
+ typename Alloc,
1381
+ typename = detail::RequireAllocator<Alloc>>
1382
+ F14VectorSet(std::initializer_list<Key>, std::size_t, Hasher, Alloc)
1383
+ -> F14VectorSet<Key, Hasher, f14::DefaultKeyEqual<Key>, Alloc>;
1384
+
1385
+ #if FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
1386
+ template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
1387
+ class F14FastSet
1388
+ : public std::conditional_t<
1389
+ sizeof(Key) < 24,
1390
+ F14ValueSet<Key, Hasher, KeyEqual, Alloc>,
1391
+ f14::detail::
1392
+ F14VectorSetImpl<Key, Hasher, KeyEqual, Alloc, std::true_type>> {
1393
+ using Super = std::conditional_t<
1394
+ sizeof(Key) < 24,
1395
+ F14ValueSet<Key, Hasher, KeyEqual, Alloc>,
1396
+ f14::detail::
1397
+ F14VectorSetImpl<Key, Hasher, KeyEqual, Alloc, std::true_type>>;
1398
+
1399
+ public:
1400
+ using typename Super::value_type;
1401
+
1402
+ F14FastSet() = default;
1403
+
1404
+ using Super::Super;
1405
+
1406
+ F14FastSet& operator=(std::initializer_list<value_type> ilist) {
1407
+ Super::operator=(ilist);
1408
+ return *this;
1409
+ }
1410
+
1411
+ void swap(F14FastSet& rhs) noexcept(Super::Policy::kSwapIsNoexcept) {
1412
+ this->table_.swap(rhs.table_);
1413
+ }
1414
+ };
1415
+ #endif // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
1416
+
1417
+ template <
1418
+ typename InputIt,
1419
+ typename Hasher = f14::DefaultHasher<iterator_value_type_t<InputIt>>,
1420
+ typename KeyEqual = f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
1421
+ typename Alloc = f14::DefaultAlloc<iterator_value_type_t<InputIt>>,
1422
+ typename = detail::RequireInputIterator<InputIt>,
1423
+ typename = detail::RequireNotAllocator<Hasher>,
1424
+ typename = detail::RequireNotAllocator<KeyEqual>,
1425
+ typename = detail::RequireAllocator<Alloc>>
1426
+ F14FastSet(
1427
+ InputIt, InputIt, std::size_t = {}, Hasher = {}, KeyEqual = {}, Alloc = {})
1428
+ -> F14FastSet<iterator_value_type_t<InputIt>, Hasher, KeyEqual, Alloc>;
1429
+
1430
+ template <
1431
+ typename InputIt,
1432
+ typename Alloc,
1433
+ typename = detail::RequireInputIterator<InputIt>,
1434
+ typename = detail::RequireAllocator<Alloc>>
1435
+ F14FastSet(InputIt, InputIt, std::size_t, Alloc)
1436
+ -> F14FastSet<
1437
+ iterator_value_type_t<InputIt>,
1438
+ f14::DefaultHasher<iterator_value_type_t<InputIt>>,
1439
+ f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
1440
+ Alloc>;
1441
+
1442
+ template <
1443
+ typename InputIt,
1444
+ typename Hasher,
1445
+ typename Alloc,
1446
+ typename = detail::RequireInputIterator<InputIt>,
1447
+ typename = detail::RequireNotAllocator<Hasher>,
1448
+ typename = detail::RequireAllocator<Alloc>>
1449
+ F14FastSet(InputIt, InputIt, std::size_t, Hasher, Alloc)
1450
+ -> F14FastSet<
1451
+ iterator_value_type_t<InputIt>,
1452
+ Hasher,
1453
+ f14::DefaultKeyEqual<iterator_value_type_t<InputIt>>,
1454
+ Alloc>;
1455
+
1456
+ template <
1457
+ typename Key,
1458
+ typename Hasher = f14::DefaultHasher<Key>,
1459
+ typename KeyEqual = f14::DefaultKeyEqual<Key>,
1460
+ typename Alloc = f14::DefaultAlloc<Key>,
1461
+ typename = detail::RequireNotAllocator<Hasher>,
1462
+ typename = detail::RequireNotAllocator<KeyEqual>,
1463
+ typename = detail::RequireAllocator<Alloc>>
1464
+ F14FastSet(
1465
+ std::initializer_list<Key>,
1466
+ std::size_t = {},
1467
+ Hasher = {},
1468
+ KeyEqual = {},
1469
+ Alloc = {}) -> F14FastSet<Key, Hasher, KeyEqual, Alloc>;
1470
+
1471
+ template <
1472
+ typename Key,
1473
+ typename Alloc,
1474
+ typename = detail::RequireAllocator<Alloc>>
1475
+ F14FastSet(std::initializer_list<Key>, std::size_t, Alloc)
1476
+ -> F14FastSet<
1477
+ Key,
1478
+ f14::DefaultHasher<Key>,
1479
+ f14::DefaultKeyEqual<Key>,
1480
+ Alloc>;
1481
+
1482
+ template <
1483
+ typename Key,
1484
+ typename Hasher,
1485
+ typename Alloc,
1486
+ typename = detail::RequireAllocator<Alloc>>
1487
+ F14FastSet(std::initializer_list<Key>, std::size_t, Hasher, Alloc)
1488
+ -> F14FastSet<Key, Hasher, f14::DefaultKeyEqual<Key>, Alloc>;
1489
+
1490
+ } // namespace folly
1491
+
1492
+ namespace folly {
1493
+ namespace f14 {
1494
+ namespace detail {
1495
+ template <typename S>
1496
+ bool setsEqual(S const& lhs, S const& rhs) {
1497
+ if (lhs.size() != rhs.size()) {
1498
+ return false;
1499
+ }
1500
+ for (auto& k : lhs) {
1501
+ if (!rhs.containsEqualValue(k)) {
1502
+ return false;
1503
+ }
1504
+ }
1505
+ return true;
1506
+ }
1507
+ } // namespace detail
1508
+ } // namespace f14
1509
+
1510
+ template <typename K, typename H, typename E, typename A>
1511
+ bool operator==(
1512
+ F14ValueSet<K, H, E, A> const& lhs, F14ValueSet<K, H, E, A> const& rhs) {
1513
+ return setsEqual(lhs, rhs);
1514
+ }
1515
+
1516
+ template <typename K, typename H, typename E, typename A>
1517
+ bool operator!=(
1518
+ F14ValueSet<K, H, E, A> const& lhs, F14ValueSet<K, H, E, A> const& rhs) {
1519
+ return !(lhs == rhs);
1520
+ }
1521
+
1522
+ template <typename K, typename H, typename E, typename A>
1523
+ bool operator==(
1524
+ F14NodeSet<K, H, E, A> const& lhs, F14NodeSet<K, H, E, A> const& rhs) {
1525
+ return setsEqual(lhs, rhs);
1526
+ }
1527
+
1528
+ template <typename K, typename H, typename E, typename A>
1529
+ bool operator!=(
1530
+ F14NodeSet<K, H, E, A> const& lhs, F14NodeSet<K, H, E, A> const& rhs) {
1531
+ return !(lhs == rhs);
1532
+ }
1533
+
1534
+ template <typename K, typename H, typename E, typename A>
1535
+ bool operator==(
1536
+ F14VectorSet<K, H, E, A> const& lhs, F14VectorSet<K, H, E, A> const& rhs) {
1537
+ return setsEqual(lhs, rhs);
1538
+ }
1539
+
1540
+ template <typename K, typename H, typename E, typename A>
1541
+ bool operator!=(
1542
+ F14VectorSet<K, H, E, A> const& lhs, F14VectorSet<K, H, E, A> const& rhs) {
1543
+ return !(lhs == rhs);
1544
+ }
1545
+
1546
+ template <typename K, typename H, typename E, typename A>
1547
+ bool operator==(
1548
+ F14FastSet<K, H, E, A> const& lhs, F14FastSet<K, H, E, A> const& rhs) {
1549
+ return setsEqual(lhs, rhs);
1550
+ }
1551
+
1552
+ template <typename K, typename H, typename E, typename A>
1553
+ bool operator!=(
1554
+ F14FastSet<K, H, E, A> const& lhs, F14FastSet<K, H, E, A> const& rhs) {
1555
+ return !(lhs == rhs);
1556
+ }
1557
+
1558
+ template <typename K, typename H, typename E, typename A>
1559
+ void swap(F14ValueSet<K, H, E, A>& lhs, F14ValueSet<K, H, E, A>& rhs) noexcept(
1560
+ noexcept(lhs.swap(rhs))) {
1561
+ lhs.swap(rhs);
1562
+ }
1563
+
1564
+ template <typename K, typename H, typename E, typename A>
1565
+ void swap(F14NodeSet<K, H, E, A>& lhs, F14NodeSet<K, H, E, A>& rhs) noexcept(
1566
+ noexcept(lhs.swap(rhs))) {
1567
+ lhs.swap(rhs);
1568
+ }
1569
+
1570
+ template <typename K, typename H, typename E, typename A>
1571
+ void swap(
1572
+ F14VectorSet<K, H, E, A>& lhs,
1573
+ F14VectorSet<K, H, E, A>& rhs) noexcept(noexcept(lhs.swap(rhs))) {
1574
+ lhs.swap(rhs);
1575
+ }
1576
+
1577
+ template <typename K, typename H, typename E, typename A>
1578
+ void swap(F14FastSet<K, H, E, A>& lhs, F14FastSet<K, H, E, A>& rhs) noexcept(
1579
+ noexcept(lhs.swap(rhs))) {
1580
+ lhs.swap(rhs);
1581
+ }
1582
+
1583
+ template <typename K, typename H, typename E, typename A, typename Pred>
1584
+ std::size_t erase_if(F14ValueSet<K, H, E, A>& c, Pred pred) {
1585
+ return f14::detail::erase_if_impl(c, pred);
1586
+ }
1587
+
1588
+ template <typename K, typename H, typename E, typename A, typename Pred>
1589
+ std::size_t erase_if(F14NodeSet<K, H, E, A>& c, Pred pred) {
1590
+ return f14::detail::erase_if_impl(c, pred);
1591
+ }
1592
+
1593
+ template <typename K, typename H, typename E, typename A, typename Pred>
1594
+ std::size_t erase_if(F14VectorSet<K, H, E, A>& c, Pred pred) {
1595
+ return f14::detail::erase_if_impl(c, pred);
1596
+ }
1597
+
1598
+ template <typename K, typename H, typename E, typename A, typename Pred>
1599
+ std::size_t erase_if(F14FastSet<K, H, E, A>& c, Pred pred) {
1600
+ return f14::detail::erase_if_impl(c, pred);
1601
+ }
1602
+
1603
+ } // namespace folly