react-native-windows 0.81.34 → 0.81.36

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 (927) 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/PropertySheets/Generated/PackageVersion.g.props +3 -3
  12. package/PropertySheets/React.Cpp.props +3 -3
  13. package/ReactCommon/ReactCommon.vcxproj +0 -10
  14. package/ReactCommon/packages.lock.win32.json +0 -10
  15. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
  16. package/Scripts/creaternwlib.cmd +2 -2
  17. package/Shared/Shared.vcxitems +2 -0
  18. package/{Folly → external}/.clang-format +0 -1
  19. package/external/External.vcxitems +10 -0
  20. package/external/fast-float/.syncignore +10 -0
  21. package/external/fast-float/LICENSE-APACHE +190 -0
  22. package/external/fast-float/LICENSE-BOOST +23 -0
  23. package/external/fast-float/LICENSE-MIT +27 -0
  24. package/external/fast-float/README.md +545 -0
  25. package/external/fast-float/cgmanifest.json +15 -0
  26. package/external/fast-float/fast-float.vcxitems +14 -0
  27. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  28. package/external/fast-float/include/fast_float/bigint.h +638 -0
  29. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  30. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  31. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  32. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  33. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  34. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  35. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  36. package/external/fast-float/sync-config.json +8 -0
  37. package/external/fmt/.syncignore +10 -0
  38. package/external/fmt/CONTRIBUTING.md +20 -0
  39. package/external/fmt/LICENSE +27 -0
  40. package/external/fmt/README.md +484 -0
  41. package/{fmt → external/fmt}/cgmanifest.json +1 -1
  42. package/external/fmt/doc/ChangeLog-old.md +3290 -0
  43. package/external/fmt/doc/api.md +650 -0
  44. package/external/fmt/doc/fmt.css +61 -0
  45. package/external/fmt/doc/fmt.js +4 -0
  46. package/external/fmt/doc/get-started.md +222 -0
  47. package/external/fmt/doc/index.md +151 -0
  48. package/external/fmt/doc/perf.svg +1 -0
  49. package/external/fmt/doc/python-license.txt +290 -0
  50. package/external/fmt/doc/syntax.md +887 -0
  51. package/external/fmt/fmt.vcxitems +28 -0
  52. package/external/fmt/include/fmt/args.h +228 -0
  53. package/{fmt/TEMP_UntilFmtUpdate/core.h → external/fmt/include/fmt/base.h} +1188 -1036
  54. package/external/fmt/include/fmt/chrono.h +2432 -0
  55. package/external/fmt/include/fmt/color.h +612 -0
  56. package/external/fmt/include/fmt/compile.h +529 -0
  57. package/external/fmt/include/fmt/core.h +5 -0
  58. package/external/fmt/include/fmt/format-inl.h +1928 -0
  59. package/external/fmt/include/fmt/format.h +4427 -0
  60. package/external/fmt/include/fmt/os.h +439 -0
  61. package/external/fmt/include/fmt/ostream.h +211 -0
  62. package/external/fmt/include/fmt/printf.h +656 -0
  63. package/external/fmt/include/fmt/ranges.h +882 -0
  64. package/external/fmt/include/fmt/std.h +699 -0
  65. package/external/fmt/include/fmt/xchar.h +322 -0
  66. package/external/fmt/src/fmt.cc +135 -0
  67. package/external/fmt/src/format.cc +43 -0
  68. package/external/fmt/src/os.cc +403 -0
  69. package/external/fmt/sync-config.json +8 -0
  70. package/external/folly/.syncignore +60 -0
  71. package/external/folly/LICENSE +200 -0
  72. package/external/folly/README.md +263 -0
  73. package/{fmt → external/folly/folly}/.clang-format +0 -1
  74. package/external/folly/folly/AtomicHashArray-inl.h +546 -0
  75. package/external/folly/folly/AtomicHashArray.h +431 -0
  76. package/external/folly/folly/AtomicHashMap-inl.h +653 -0
  77. package/external/folly/folly/AtomicHashMap.h +484 -0
  78. package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
  79. package/external/folly/folly/AtomicLinkedList.h +110 -0
  80. package/external/folly/folly/AtomicUnorderedMap.h +522 -0
  81. package/external/folly/folly/BUCK +1631 -0
  82. package/external/folly/folly/BUILD_MODE.bzl +72 -0
  83. package/external/folly/folly/Benchmark.cpp +986 -0
  84. package/external/folly/folly/Benchmark.h +680 -0
  85. package/external/folly/folly/BenchmarkUtil.h +47 -0
  86. package/external/folly/folly/Bits.h +17 -0
  87. package/external/folly/folly/CMakeLists.txt +110 -0
  88. package/external/folly/folly/CPortability.h +338 -0
  89. package/external/folly/folly/CancellationToken-inl.h +449 -0
  90. package/external/folly/folly/CancellationToken.cpp +250 -0
  91. package/external/folly/folly/CancellationToken.h +365 -0
  92. package/external/folly/folly/Chrono.h +132 -0
  93. package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
  94. package/external/folly/folly/ClockGettimeWrappers.h +29 -0
  95. package/external/folly/folly/ConcurrentBitSet.h +157 -0
  96. package/external/folly/folly/ConcurrentLazy.h +74 -0
  97. package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
  98. package/external/folly/folly/ConcurrentSkipList.h +824 -0
  99. package/external/folly/folly/ConstructorCallbackList.h +158 -0
  100. package/external/folly/folly/Conv.h +2026 -0
  101. package/external/folly/folly/CppAttributes.h +170 -0
  102. package/external/folly/folly/CpuId.h +297 -0
  103. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  104. package/external/folly/folly/Demangle.cpp +255 -0
  105. package/external/folly/folly/Demangle.h +73 -0
  106. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  107. package/external/folly/folly/DynamicConverter.h +17 -0
  108. package/external/folly/folly/Exception.h +150 -0
  109. package/external/folly/folly/ExceptionString.cpp +51 -0
  110. package/external/folly/folly/ExceptionString.h +33 -0
  111. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  112. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  113. package/external/folly/folly/ExceptionWrapper.h +377 -0
  114. package/external/folly/folly/Executor.cpp +111 -0
  115. package/external/folly/folly/Executor.h +351 -0
  116. package/external/folly/folly/Expected.h +1725 -0
  117. package/external/folly/folly/FBString.h +2888 -0
  118. package/external/folly/folly/FBVector.h +17 -0
  119. package/external/folly/folly/File.cpp +180 -0
  120. package/external/folly/folly/File.h +177 -0
  121. package/external/folly/folly/FileUtil.cpp +378 -0
  122. package/external/folly/folly/FileUtil.h +332 -0
  123. package/external/folly/folly/Fingerprint.cpp +135 -0
  124. package/external/folly/folly/Fingerprint.h +289 -0
  125. package/external/folly/folly/FixedString.h +2965 -0
  126. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  127. package/external/folly/folly/FollyMemcpy.h +23 -0
  128. package/external/folly/folly/FollyMemset.cpp +29 -0
  129. package/external/folly/folly/FollyMemset.h +25 -0
  130. package/external/folly/folly/Format-inl.h +1152 -0
  131. package/external/folly/folly/Format.cpp +429 -0
  132. package/external/folly/folly/Format.h +463 -0
  133. package/external/folly/folly/FormatArg.h +285 -0
  134. package/external/folly/folly/FormatTraits.h +65 -0
  135. package/external/folly/folly/Function.h +1159 -0
  136. package/external/folly/folly/GLog.h +85 -0
  137. package/external/folly/folly/GroupVarint.cpp +153 -0
  138. package/external/folly/folly/GroupVarint.h +630 -0
  139. package/external/folly/folly/Hash.h +20 -0
  140. package/external/folly/folly/IPAddress.cpp +490 -0
  141. package/external/folly/folly/IPAddress.h +667 -0
  142. package/external/folly/folly/IPAddressException.h +82 -0
  143. package/external/folly/folly/IPAddressV4.cpp +305 -0
  144. package/external/folly/folly/IPAddressV4.h +495 -0
  145. package/external/folly/folly/IPAddressV6.cpp +541 -0
  146. package/external/folly/folly/IPAddressV6.h +627 -0
  147. package/external/folly/folly/Indestructible.h +164 -0
  148. package/external/folly/folly/IndexedMemPool.h +550 -0
  149. package/external/folly/folly/IntrusiveList.h +17 -0
  150. package/external/folly/folly/Lazy.h +142 -0
  151. package/external/folly/folly/Likely.h +76 -0
  152. package/external/folly/folly/MPMCPipeline.h +280 -0
  153. package/external/folly/folly/MPMCQueue.h +1556 -0
  154. package/external/folly/folly/MacAddress.cpp +188 -0
  155. package/external/folly/folly/MacAddress.h +260 -0
  156. package/external/folly/folly/MapUtil.h +17 -0
  157. package/external/folly/folly/Math.h +258 -0
  158. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  159. package/external/folly/folly/Memory.h +900 -0
  160. package/external/folly/folly/MicroLock.cpp +76 -0
  161. package/external/folly/folly/MicroLock.h +354 -0
  162. package/external/folly/folly/MicroSpinLock.h +17 -0
  163. package/external/folly/folly/MoveWrapper.h +76 -0
  164. package/external/folly/folly/ObserverContainer.h +1026 -0
  165. package/external/folly/folly/Optional.h +743 -0
  166. package/external/folly/folly/Overload.h +325 -0
  167. package/external/folly/folly/PackedSyncPtr.h +147 -0
  168. package/external/folly/folly/Padded.h +464 -0
  169. package/external/folly/folly/Poly-inl.h +230 -0
  170. package/external/folly/folly/Poly.h +1095 -0
  171. package/external/folly/folly/PolyException.h +43 -0
  172. package/external/folly/folly/Portability.h +644 -0
  173. package/external/folly/folly/Preprocessor.h +236 -0
  174. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  175. package/external/folly/folly/RWSpinLock.h +17 -0
  176. package/external/folly/folly/Random-inl.h +86 -0
  177. package/external/folly/folly/Random.cpp +184 -0
  178. package/external/folly/folly/Random.h +434 -0
  179. package/external/folly/folly/Range.h +1772 -0
  180. package/external/folly/folly/Replaceable.h +636 -0
  181. package/external/folly/folly/ScopeGuard.cpp +29 -0
  182. package/external/folly/folly/ScopeGuard.h +420 -0
  183. package/external/folly/folly/SharedMutex.cpp +81 -0
  184. package/external/folly/folly/SharedMutex.h +1751 -0
  185. package/external/folly/folly/Singleton-inl.h +332 -0
  186. package/external/folly/folly/Singleton.cpp +512 -0
  187. package/external/folly/folly/Singleton.h +891 -0
  188. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  189. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  190. package/external/folly/folly/SocketAddress.cpp +786 -0
  191. package/external/folly/folly/SocketAddress.h +768 -0
  192. package/external/folly/folly/SpinLock.h +55 -0
  193. package/external/folly/folly/String-inl.h +668 -0
  194. package/external/folly/folly/String.cpp +777 -0
  195. package/external/folly/folly/String.h +767 -0
  196. package/external/folly/folly/Subprocess.cpp +1142 -0
  197. package/external/folly/folly/Subprocess.h +1055 -0
  198. package/external/folly/folly/Synchronized.h +1833 -0
  199. package/external/folly/folly/SynchronizedPtr.h +106 -0
  200. package/external/folly/folly/ThreadCachedInt.h +175 -0
  201. package/external/folly/folly/ThreadLocal.h +478 -0
  202. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  203. package/external/folly/folly/TimeoutQueue.h +123 -0
  204. package/external/folly/folly/TokenBucket.h +673 -0
  205. package/external/folly/folly/Traits.h +1442 -0
  206. package/external/folly/folly/Try-inl.h +372 -0
  207. package/external/folly/folly/Try.cpp +23 -0
  208. package/external/folly/folly/Try.h +728 -0
  209. package/external/folly/folly/UTF8String.h +56 -0
  210. package/external/folly/folly/Unicode.cpp +201 -0
  211. package/external/folly/folly/Unicode.h +94 -0
  212. package/external/folly/folly/Unit.h +65 -0
  213. package/external/folly/folly/Uri-inl.h +101 -0
  214. package/external/folly/folly/Uri.cpp +190 -0
  215. package/external/folly/folly/Uri.h +142 -0
  216. package/external/folly/folly/Utility.h +932 -0
  217. package/external/folly/folly/VERSION +1 -0
  218. package/external/folly/folly/Varint.h +230 -0
  219. package/external/folly/folly/VirtualExecutor.h +17 -0
  220. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  221. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  222. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  223. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  224. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  225. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  226. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  227. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  228. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  229. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  230. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  231. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  232. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  233. package/external/folly/folly/base64.h +264 -0
  234. package/external/folly/folly/chrono/BUCK +29 -0
  235. package/external/folly/folly/chrono/Clock.h +65 -0
  236. package/external/folly/folly/chrono/Conv.h +712 -0
  237. package/external/folly/folly/chrono/test/BUCK +26 -0
  238. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  239. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  240. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  241. package/external/folly/folly/concurrency/BUCK +170 -0
  242. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  243. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  244. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  245. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  246. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  247. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  248. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  249. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  250. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  251. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  252. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  253. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  254. package/external/folly/folly/concurrency/container/BUCK +77 -0
  255. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  256. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  257. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  258. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  259. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  260. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  261. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  262. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  263. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  264. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  265. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  266. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  267. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  268. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  269. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  270. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  271. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  272. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  273. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  274. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  275. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  276. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  277. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  278. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  279. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  280. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  281. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  282. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  283. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  284. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  285. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  286. package/external/folly/folly/concurrency/test/BUCK +229 -0
  287. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  288. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  289. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  290. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  291. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  292. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  293. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  294. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  295. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  296. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  297. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  298. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  299. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  300. package/external/folly/folly/container/Access.h +57 -0
  301. package/external/folly/folly/container/Array.h +87 -0
  302. package/external/folly/folly/container/BUCK +353 -0
  303. package/external/folly/folly/container/BitIterator.h +203 -0
  304. package/external/folly/folly/container/Enumerate.h +162 -0
  305. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  306. package/external/folly/folly/container/F14.md +300 -0
  307. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  308. package/external/folly/folly/container/F14Map.h +2108 -0
  309. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  310. package/external/folly/folly/container/F14Set.h +1603 -0
  311. package/external/folly/folly/container/FBVector.h +1711 -0
  312. package/external/folly/folly/container/Foreach-inl.h +316 -0
  313. package/external/folly/folly/container/Foreach.h +209 -0
  314. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  315. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  316. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  317. package/external/folly/folly/container/IntrusiveList.h +131 -0
  318. package/external/folly/folly/container/Iterator.h +843 -0
  319. package/external/folly/folly/container/MapUtil.h +376 -0
  320. package/external/folly/folly/container/Merge.h +90 -0
  321. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  322. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  323. package/external/folly/folly/container/Reserve.h +109 -0
  324. package/external/folly/folly/container/SparseByteSet.h +123 -0
  325. package/external/folly/folly/container/View.h +81 -0
  326. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  327. package/external/folly/folly/container/detail/BUCK +115 -0
  328. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  329. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  330. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  331. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  332. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  333. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  334. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  335. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  336. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  337. package/external/folly/folly/container/detail/Util.h +303 -0
  338. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  339. package/external/folly/folly/container/detail/test/BUCK +14 -0
  340. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  341. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  342. package/external/folly/folly/container/range_traits.h +81 -0
  343. package/external/folly/folly/container/small_vector.h +1476 -0
  344. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  345. package/external/folly/folly/container/span.h +408 -0
  346. package/external/folly/folly/container/tape.h +608 -0
  347. package/external/folly/folly/container/test/.clang-tidy +12 -0
  348. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  349. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  350. package/external/folly/folly/container/test/BUCK +568 -0
  351. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  352. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  353. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  354. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  355. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  356. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  357. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  358. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  359. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  360. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  361. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  362. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  363. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  364. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  365. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  366. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  367. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  368. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  369. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  370. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  371. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  372. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  373. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  374. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  375. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  376. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  377. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  378. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  379. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  380. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  381. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  382. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  383. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  384. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  385. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  386. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  387. package/external/folly/folly/container/test/span_test.cpp +520 -0
  388. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  389. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  390. package/external/folly/folly/defs.bzl +238 -0
  391. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  392. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  393. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  394. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  395. package/external/folly/folly/detail/BUCK +406 -0
  396. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  397. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  398. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  399. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  400. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  401. package/external/folly/folly/detail/Futex-inl.h +123 -0
  402. package/external/folly/folly/detail/Futex.cpp +273 -0
  403. package/external/folly/folly/detail/Futex.h +109 -0
  404. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  405. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  406. package/external/folly/folly/detail/IPAddress.h +57 -0
  407. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  408. package/external/folly/folly/detail/Iterators.h +156 -0
  409. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  410. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  411. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  412. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  413. package/external/folly/folly/detail/PerfScoped.h +70 -0
  414. package/external/folly/folly/detail/PolyDetail.h +921 -0
  415. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  416. package/external/folly/folly/detail/RangeCommon.h +93 -0
  417. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  418. package/external/folly/folly/detail/RangeSse42.h +30 -0
  419. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  420. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  421. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  422. package/external/folly/folly/detail/Singleton.h +34 -0
  423. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  424. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  425. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  426. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  427. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  428. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  429. package/external/folly/folly/detail/Sse.cpp +35 -0
  430. package/external/folly/folly/detail/Sse.h +45 -0
  431. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  432. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  433. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  434. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  435. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  436. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  437. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  438. package/external/folly/folly/detail/TypeList.h +551 -0
  439. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  440. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  441. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  442. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  443. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  444. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  445. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  446. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  447. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  448. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  449. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  450. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  451. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  452. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  453. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  454. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  455. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  456. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  457. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  458. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  459. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  460. package/external/folly/folly/detail/test/BUCK +118 -0
  461. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  462. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  463. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  464. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  465. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  466. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  467. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  468. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  469. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  470. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  471. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  472. package/external/folly/folly/docs/AtomicHashMap.md +134 -0
  473. package/external/folly/folly/docs/Benchmark.md +310 -0
  474. package/external/folly/folly/docs/Conv.md +291 -0
  475. package/external/folly/folly/docs/Dynamic.md +220 -0
  476. package/external/folly/folly/docs/DynamicConverter.md +71 -0
  477. package/external/folly/folly/docs/Executors.md +63 -0
  478. package/external/folly/folly/docs/FBString.md +46 -0
  479. package/external/folly/folly/docs/FBVector.md +200 -0
  480. package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
  481. package/external/folly/folly/docs/Format.md +177 -0
  482. package/external/folly/folly/docs/Function.md +92 -0
  483. package/external/folly/folly/docs/Futures.md +263 -0
  484. package/external/folly/folly/docs/GroupVarint.md +46 -0
  485. package/external/folly/folly/docs/Histogram.md +104 -0
  486. package/external/folly/folly/docs/MapUtils.md +80 -0
  487. package/external/folly/folly/docs/Overview.md +263 -0
  488. package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
  489. package/external/folly/folly/docs/Poly.md +500 -0
  490. package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
  491. package/external/folly/folly/docs/Rcu.md +218 -0
  492. package/external/folly/folly/docs/SmallLocks.md +24 -0
  493. package/external/folly/folly/docs/Synchronized.md +793 -0
  494. package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
  495. package/external/folly/folly/docs/ThreadLocal.md +105 -0
  496. package/external/folly/folly/docs/Traits.md +161 -0
  497. package/external/folly/folly/docs/small_vector.md +64 -0
  498. package/external/folly/folly/docs/style.css +23 -0
  499. package/external/folly/folly/dynamic-inl.h +17 -0
  500. package/external/folly/folly/dynamic.h +17 -0
  501. package/external/folly/folly/folly_extended_library.bzl +28 -0
  502. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  503. package/external/folly/folly/functional/BUCK +57 -0
  504. package/external/folly/folly/functional/Invoke.h +880 -0
  505. package/external/folly/folly/functional/Partial.h +130 -0
  506. package/external/folly/folly/functional/protocol.h +203 -0
  507. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  508. package/external/folly/folly/functional/test/BUCK +57 -0
  509. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  510. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  511. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  512. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  513. package/external/folly/folly/functional/traits.h +675 -0
  514. package/external/folly/folly/hash/BUCK +86 -0
  515. package/external/folly/folly/hash/Checksum.cpp +275 -0
  516. package/external/folly/folly/hash/Checksum.h +94 -0
  517. package/external/folly/folly/hash/FarmHash.h +46 -0
  518. package/external/folly/folly/hash/Hash.h +1045 -0
  519. package/external/folly/folly/hash/MurmurHash.h +86 -0
  520. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  521. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  522. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  523. package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/hash/SpookyHashV2.h +6 -1
  524. package/external/folly/folly/hash/detail/BUCK +26 -0
  525. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  526. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  527. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  528. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  529. package/external/folly/folly/hash/test/BUCK +132 -0
  530. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  531. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  532. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  533. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  534. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  535. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  536. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  537. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  538. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  539. package/external/folly/folly/hash/traits.h +115 -0
  540. package/external/folly/folly/json/BUCK +155 -0
  541. package/external/folly/folly/json/DynamicConverter.h +464 -0
  542. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  543. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  544. package/external/folly/folly/json/DynamicParser.h +394 -0
  545. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  546. package/external/folly/folly/json/JSONSchema.h +73 -0
  547. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  548. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  549. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  550. package/external/folly/folly/json/bser/BUCK +24 -0
  551. package/external/folly/folly/json/bser/Bser.h +107 -0
  552. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  553. package/external/folly/folly/json/bser/Load.cpp +246 -0
  554. package/external/folly/folly/json/bser/test/BUCK +14 -0
  555. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  556. package/external/folly/folly/json/dynamic.cpp +552 -0
  557. package/external/folly/folly/json/dynamic.h +1346 -0
  558. package/external/folly/folly/json/json.h +238 -0
  559. package/external/folly/folly/json/json_patch.cpp +325 -0
  560. package/external/folly/folly/json/json_patch.h +126 -0
  561. package/external/folly/folly/json/json_pointer.cpp +114 -0
  562. package/external/folly/folly/json/json_pointer.h +87 -0
  563. package/external/folly/folly/json/test/BUCK +147 -0
  564. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  565. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  566. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  567. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  568. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  569. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  570. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  571. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  572. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  573. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  574. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  575. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  576. package/external/folly/folly/json/tool/BUCK +13 -0
  577. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  578. package/external/folly/folly/json.h +17 -0
  579. package/external/folly/folly/json_patch.h +17 -0
  580. package/external/folly/folly/json_pointer.h +17 -0
  581. package/external/folly/folly/lang/Access.h +29 -0
  582. package/external/folly/folly/lang/Align.h +240 -0
  583. package/external/folly/folly/lang/Aligned.h +92 -0
  584. package/external/folly/folly/lang/Assume.h +82 -0
  585. package/external/folly/folly/lang/BUCK +287 -0
  586. package/external/folly/folly/lang/Badge.h +108 -0
  587. package/external/folly/folly/lang/Bits.h +570 -0
  588. package/external/folly/folly/lang/BitsClass.h +312 -0
  589. package/external/folly/folly/lang/Builtin.h +74 -0
  590. package/external/folly/folly/lang/CArray.h +34 -0
  591. package/external/folly/folly/lang/CString.cpp +86 -0
  592. package/external/folly/folly/lang/CString.h +55 -0
  593. package/external/folly/folly/lang/Cast.h +51 -0
  594. package/external/folly/folly/lang/CheckedMath.h +253 -0
  595. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  596. package/external/folly/folly/lang/Exception.cpp +822 -0
  597. package/external/folly/folly/lang/Exception.h +716 -0
  598. package/external/folly/folly/lang/Extern.h +55 -0
  599. package/external/folly/folly/lang/Hint-inl.h +144 -0
  600. package/external/folly/folly/lang/Hint.h +238 -0
  601. package/external/folly/folly/lang/Keep.h +98 -0
  602. package/external/folly/folly/lang/New.h +124 -0
  603. package/external/folly/folly/lang/Ordering.h +140 -0
  604. package/external/folly/folly/lang/Pretty.h +159 -0
  605. package/external/folly/folly/lang/PropagateConst.h +413 -0
  606. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  607. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  608. package/external/folly/folly/lang/StaticConst.h +33 -0
  609. package/external/folly/folly/lang/Thunk.h +100 -0
  610. package/external/folly/folly/lang/TypeInfo.h +58 -0
  611. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  612. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  613. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  614. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  615. package/external/folly/folly/lang/test/BUCK +258 -0
  616. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  617. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  618. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  619. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  620. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  621. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  622. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  623. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  624. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  625. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  626. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  627. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  628. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  629. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  630. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  631. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  632. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  633. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  634. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  635. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  636. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  637. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  638. package/external/folly/folly/memcpy.S +292 -0
  639. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  640. package/external/folly/folly/memory/Arena-inl.h +83 -0
  641. package/external/folly/folly/memory/Arena.h +325 -0
  642. package/external/folly/folly/memory/BUCK +191 -0
  643. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  644. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  645. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  646. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  647. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  648. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  649. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  650. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  651. package/external/folly/folly/memory/Malloc.h +551 -0
  652. package/external/folly/folly/memory/MemoryResource.h +57 -0
  653. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  654. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  655. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  656. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  657. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  658. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  659. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  660. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  661. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  662. package/external/folly/folly/memory/detail/BUCK +10 -0
  663. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  664. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  665. package/external/folly/folly/memory/not_null-inl.h +522 -0
  666. package/external/folly/folly/memory/not_null.h +449 -0
  667. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  668. package/external/folly/folly/memory/test/BUCK +146 -0
  669. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  670. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  671. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  672. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  673. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  674. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  675. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  676. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  677. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  678. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  679. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  680. package/external/folly/folly/memset.S +245 -0
  681. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  682. package/external/folly/folly/portability/Asm.h +50 -0
  683. package/external/folly/folly/portability/Atomic.h +31 -0
  684. package/external/folly/folly/portability/BUCK +456 -0
  685. package/external/folly/folly/portability/Builtins.cpp +31 -0
  686. package/external/folly/folly/portability/Builtins.h +161 -0
  687. package/external/folly/folly/portability/Config.h +43 -0
  688. package/external/folly/folly/portability/Constexpr.h +145 -0
  689. package/external/folly/folly/portability/Dirent.cpp +140 -0
  690. package/external/folly/folly/portability/Dirent.h +41 -0
  691. package/external/folly/folly/portability/Event.h +44 -0
  692. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  693. package/external/folly/folly/portability/Fcntl.h +67 -0
  694. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  695. package/external/folly/folly/portability/Filesystem.h +114 -0
  696. package/external/folly/folly/portability/FmtCompile.h +40 -0
  697. package/external/folly/folly/portability/GFlags.h +139 -0
  698. package/external/folly/folly/portability/GMock.h +35 -0
  699. package/external/folly/folly/portability/GTest.h +35 -0
  700. package/external/folly/folly/portability/IOVec.h +34 -0
  701. package/external/folly/folly/portability/Libgen.cpp +59 -0
  702. package/external/folly/folly/portability/Libgen.h +29 -0
  703. package/external/folly/folly/portability/Libunwind.h +21 -0
  704. package/external/folly/folly/portability/Malloc.cpp +31 -0
  705. package/external/folly/folly/portability/Malloc.h +53 -0
  706. package/external/folly/folly/portability/Math.h +90 -0
  707. package/external/folly/folly/portability/Memory.h +26 -0
  708. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  709. package/external/folly/folly/portability/OpenSSL.h +102 -0
  710. package/external/folly/folly/portability/PThread.cpp +697 -0
  711. package/external/folly/folly/portability/PThread.h +148 -0
  712. package/external/folly/folly/portability/README.md +21 -0
  713. package/external/folly/folly/portability/Sched.cpp +41 -0
  714. package/external/folly/folly/portability/Sched.h +45 -0
  715. package/external/folly/folly/portability/Sockets.cpp +245 -0
  716. package/external/folly/folly/portability/Sockets.h +155 -0
  717. package/external/folly/folly/portability/SourceLocation.h +49 -0
  718. package/external/folly/folly/portability/Stdio.cpp +77 -0
  719. package/external/folly/folly/portability/Stdio.h +32 -0
  720. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  721. package/external/folly/folly/portability/Stdlib.h +64 -0
  722. package/external/folly/folly/portability/String.cpp +53 -0
  723. package/external/folly/folly/portability/String.h +39 -0
  724. package/external/folly/folly/portability/SysFile.cpp +46 -0
  725. package/external/folly/folly/portability/SysFile.h +27 -0
  726. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  727. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  728. package/external/folly/folly/portability/SysMman.cpp +242 -0
  729. package/external/folly/folly/portability/SysMman.h +68 -0
  730. package/external/folly/folly/portability/SysResource.cpp +108 -0
  731. package/external/folly/folly/portability/SysResource.h +71 -0
  732. package/external/folly/folly/portability/SysStat.cpp +66 -0
  733. package/external/folly/folly/portability/SysStat.h +52 -0
  734. package/external/folly/folly/portability/SysSyscall.h +73 -0
  735. package/external/folly/folly/portability/SysTime.cpp +62 -0
  736. package/external/folly/folly/portability/SysTime.h +50 -0
  737. package/external/folly/folly/portability/SysTypes.h +44 -0
  738. package/external/folly/folly/portability/SysUio.cpp +179 -0
  739. package/external/folly/folly/portability/SysUio.h +51 -0
  740. package/external/folly/folly/portability/Syslog.h +39 -0
  741. package/external/folly/folly/portability/Time.cpp +357 -0
  742. package/external/folly/folly/portability/Time.h +74 -0
  743. package/external/folly/folly/portability/Unistd.h +111 -0
  744. package/external/folly/folly/portability/Windows.h +108 -0
  745. package/external/folly/folly/portability/openat2.c +30 -0
  746. package/external/folly/folly/portability/openat2.h +39 -0
  747. package/external/folly/folly/portability/test/BUCK +59 -0
  748. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  749. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  750. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  751. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  752. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  753. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  754. package/external/folly/folly/small_vector.h +17 -0
  755. package/external/folly/folly/somerge_defs.bzl +399 -0
  756. package/external/folly/folly/sorted_vector_types.h +17 -0
  757. package/external/folly/folly/stop_watch.h +317 -0
  758. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  759. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  760. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  761. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  762. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  763. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  764. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  765. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  766. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  767. package/external/folly/folly/synchronization/BUCK +418 -0
  768. package/external/folly/folly/synchronization/Baton.h +419 -0
  769. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  770. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  771. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  772. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  773. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  774. package/external/folly/folly/synchronization/EventCount.h +200 -0
  775. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  776. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  777. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  778. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  779. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  780. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  781. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  782. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  783. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  784. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  785. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  786. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  787. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  788. package/external/folly/folly/synchronization/Latch.h +160 -0
  789. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  790. package/external/folly/folly/synchronization/Lock.h +887 -0
  791. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  792. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  793. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  794. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  795. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  796. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  797. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  798. package/external/folly/folly/synchronization/Rcu.h +553 -0
  799. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  800. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  801. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  802. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  803. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  804. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  805. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  806. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  807. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  808. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  809. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  810. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  811. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  812. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  813. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  814. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  815. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  816. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  817. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  818. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  819. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  820. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  821. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  822. package/external/folly/folly/synchronization/example/BUCK +27 -0
  823. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  824. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  825. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  826. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  827. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  828. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  829. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  830. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  831. package/external/folly/folly/synchronization/test/BUCK +495 -0
  832. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  833. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  834. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  835. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  836. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  837. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  838. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  839. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  840. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  841. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  842. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  843. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  844. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  845. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  846. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  847. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  848. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  849. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  850. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  851. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  852. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  853. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  854. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  855. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  856. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  857. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  858. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  859. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  860. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  861. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  862. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  863. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  864. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  865. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  866. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  867. package/external/folly/folly/system/AtFork.cpp +205 -0
  868. package/external/folly/folly/system/AtFork.h +116 -0
  869. package/external/folly/folly/system/AuxVector.h +198 -0
  870. package/external/folly/folly/system/BUCK +144 -0
  871. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  872. package/external/folly/folly/system/EnvUtil.h +113 -0
  873. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  874. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  875. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  876. package/external/folly/folly/system/MemoryMapping.h +287 -0
  877. package/external/folly/folly/system/Pid.cpp +87 -0
  878. package/external/folly/folly/system/Pid.h +34 -0
  879. package/external/folly/folly/system/Shell.cpp +33 -0
  880. package/external/folly/folly/system/Shell.h +93 -0
  881. package/external/folly/folly/system/ThreadId.cpp +89 -0
  882. package/external/folly/folly/system/ThreadId.h +62 -0
  883. package/external/folly/folly/system/ThreadName.cpp +330 -0
  884. package/external/folly/folly/system/ThreadName.h +72 -0
  885. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  886. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  887. package/external/folly/folly/system/test/BUCK +120 -0
  888. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  889. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  890. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  891. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  892. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  893. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  894. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  895. package/external/folly/folly.vcxitems +164 -0
  896. package/external/folly/static/logo.svg +1 -0
  897. package/external/folly/sync-config.json +8 -0
  898. package/package.json +3 -3
  899. package/template/cpp-app/proj/MyApp.sln +0 -33
  900. package/template/cpp-lib/proj/MyLib.sln +0 -33
  901. package/template/cs-app/proj/MyApp.sln +0 -33
  902. package/template/cs-lib/proj/MyLib.sln +0 -33
  903. package/templates/cpp-app/windows/MyApp.sln +0 -33
  904. package/templates/cpp-lib/example/metro.config.js +31 -6
  905. package/templates/cpp-lib/windows/MyLib.sln +0 -33
  906. package/Folly/Folly.vcxproj +0 -383
  907. package/Folly/Folly.vcxproj.filters +0 -558
  908. package/Folly/Folly.win32.vcxproj +0 -11
  909. package/Folly/packages.lock.win32.json +0 -20
  910. package/Scripts/Warm-RnwFeedCache.ps1 +0 -413
  911. package/fmt/fmt.vcxproj +0 -163
  912. package/fmt/fmt.vcxproj.filters +0 -59
  913. package/fmt/fmt.win32.vcxproj +0 -10
  914. package/fmt/pch.cpp +0 -4
  915. package/fmt/pch.h +0 -2
  916. /package/{Folly → external/folly}/Folly.natvis +0 -0
  917. /package/{Folly → external/folly}/cgmanifest.json +0 -0
  918. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
  919. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
  920. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
  921. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
  922. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
  923. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
  924. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
  925. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
  926. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
  927. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
@@ -0,0 +1,1045 @@
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_hash
19
+ //
20
+
21
+ /**
22
+ * folly::hash provides hashing algorithms, as well as algorithms to combine
23
+ * multiple hashes/hashable objects together.
24
+ *
25
+ * @refcode folly/docs/examples/folly/hash/Hash.cpp
26
+ * @file hash/Hash.h
27
+ */
28
+
29
+ #pragma once
30
+
31
+ #include <cstdint>
32
+ #include <cstring>
33
+ #include <limits>
34
+ #include <memory>
35
+ #include <string>
36
+ #include <string_view>
37
+ #include <tuple>
38
+ #include <type_traits>
39
+ #include <utility>
40
+
41
+ #include <folly/CPortability.h>
42
+ #include <folly/Portability.h>
43
+ #include <folly/Traits.h>
44
+ #include <folly/Utility.h>
45
+ #include <folly/functional/ApplyTuple.h>
46
+ #include <folly/hash/MurmurHash.h>
47
+ #include <folly/hash/SpookyHashV1.h>
48
+ #include <folly/hash/SpookyHashV2.h>
49
+ #include <folly/lang/Bits.h>
50
+
51
+ namespace folly {
52
+ namespace hash {
53
+
54
+ namespace detail {
55
+
56
+ namespace {
57
+
58
+ template <typename T>
59
+ constexpr bool is_hashable_byte_v = false;
60
+ template <>
61
+ constexpr bool is_hashable_byte_v<char> = true;
62
+ template <>
63
+ constexpr bool is_hashable_byte_v<signed char> = true;
64
+ template <>
65
+ constexpr bool is_hashable_byte_v<unsigned char> = true;
66
+
67
+ } // namespace
68
+
69
+ } // namespace detail
70
+
71
+ /**
72
+ * Reduce two 64-bit hashes into one.
73
+ *
74
+ * hash_128_to_64 uses the Hash128to64 function from Google's cityhash (under
75
+ * the MIT License).
76
+ */
77
+ FOLLY_DISABLE_UNDEFINED_BEHAVIOR_SANITIZER("unsigned-integer-overflow")
78
+ constexpr uint64_t hash_128_to_64(
79
+ const uint64_t upper, const uint64_t lower) noexcept {
80
+ // Murmur-inspired hashing.
81
+ const uint64_t kMul = 0x9ddfea08eb382d69ULL;
82
+ uint64_t a = (lower ^ upper) * kMul;
83
+ a ^= (a >> 47);
84
+ uint64_t b = (upper ^ a) * kMul;
85
+ b ^= (b >> 47);
86
+ b *= kMul;
87
+ return b;
88
+ }
89
+
90
+ /**
91
+ * Order-independent reduction of two 64-bit hashes into one.
92
+ *
93
+ * Commutative accumulator taken from this paper:
94
+ * https://www.preprints.org/manuscript/201710.0192/v1/download
95
+ */
96
+ FOLLY_DISABLE_UNDEFINED_BEHAVIOR_SANITIZER("unsigned-integer-overflow")
97
+ constexpr uint64_t commutative_hash_128_to_64(
98
+ const uint64_t upper, const uint64_t lower) noexcept {
99
+ return 3860031 + (upper + lower) * 2779 + (upper * lower * 2);
100
+ }
101
+
102
+ /**
103
+ * Thomas Wang 64 bit mix hash function.
104
+ *
105
+ * @methodset twang
106
+ */
107
+ FOLLY_DISABLE_UNDEFINED_BEHAVIOR_SANITIZER("unsigned-integer-overflow")
108
+ constexpr uint64_t twang_mix64(uint64_t key) noexcept {
109
+ key = (~key) + (key << 21); // key *= (1 << 21) - 1; key -= 1;
110
+ key = key ^ (key >> 24);
111
+ key = key + (key << 3) + (key << 8); // key *= 1 + (1 << 3) + (1 << 8)
112
+ key = key ^ (key >> 14);
113
+ key = key + (key << 2) + (key << 4); // key *= 1 + (1 << 2) + (1 << 4)
114
+ key = key ^ (key >> 28);
115
+ key = key + (key << 31); // key *= 1 + (1 << 31)
116
+ return key;
117
+ }
118
+
119
+ /**
120
+ * Inverse of twang_mix64.
121
+ *
122
+ * @methodset twang
123
+ */
124
+ constexpr uint64_t twang_unmix64(uint64_t key) noexcept {
125
+ // See the comments in jenkins_rev_unmix32 for an explanation as to how this
126
+ // was generated
127
+ key *= 4611686016279904257U;
128
+ key ^= (key >> 28) ^ (key >> 56);
129
+ key *= 14933078535860113213U;
130
+ key ^= (key >> 14) ^ (key >> 28) ^ (key >> 42) ^ (key >> 56);
131
+ key *= 15244667743933553977U;
132
+ key ^= (key >> 24) ^ (key >> 48);
133
+ key = (key + 1) * 9223367638806167551U;
134
+ return key;
135
+ }
136
+
137
+ /**
138
+ * Thomas Wang downscaling hash function.
139
+ *
140
+ * @methodset twang
141
+ */
142
+ constexpr uint32_t twang_32from64(uint64_t key) noexcept {
143
+ key = (~key) + (key << 18);
144
+ key = key ^ (key >> 31);
145
+ key = key * 21;
146
+ key = key ^ (key >> 11);
147
+ key = key + (key << 6);
148
+ key = key ^ (key >> 22);
149
+ return static_cast<uint32_t>(key);
150
+ }
151
+
152
+ /**
153
+ * Robert Jenkins' reversible 32 bit mix hash function.
154
+ *
155
+ * @methodset jenkins
156
+ */
157
+ constexpr uint32_t jenkins_rev_mix32(uint32_t key) noexcept {
158
+ key += (key << 12); // key *= (1 + (1 << 12))
159
+ key ^= (key >> 22);
160
+ key += (key << 4); // key *= (1 + (1 << 4))
161
+ key ^= (key >> 9);
162
+ key += (key << 10); // key *= (1 + (1 << 10))
163
+ key ^= (key >> 2);
164
+ // key *= (1 + (1 << 7)) * (1 + (1 << 12))
165
+ key += (key << 7);
166
+ key += (key << 12);
167
+ return key;
168
+ }
169
+
170
+ /**
171
+ * Inverse of jenkins_rev_mix32.
172
+ *
173
+ * @methodset jenkins
174
+ */
175
+ constexpr uint32_t jenkins_rev_unmix32(uint32_t key) noexcept {
176
+ // These are the modular multiplicative inverses (in Z_2^32) of the
177
+ // multiplication factors in jenkins_rev_mix32, in reverse order. They were
178
+ // computed using the Extended Euclidean algorithm, see
179
+ // http://en.wikipedia.org/wiki/Modular_multiplicative_inverse
180
+ key *= 2364026753U;
181
+
182
+ // The inverse of a ^= (a >> n) is
183
+ // b = a
184
+ // for (int i = n; i < 32; i += n) {
185
+ // b ^= (a >> i);
186
+ // }
187
+ key ^= (key >> 2) ^ (key >> 4) ^ (key >> 6) ^ (key >> 8) ^ (key >> 10) ^
188
+ (key >> 12) ^ (key >> 14) ^ (key >> 16) ^ (key >> 18) ^ (key >> 20) ^
189
+ (key >> 22) ^ (key >> 24) ^ (key >> 26) ^ (key >> 28) ^ (key >> 30);
190
+ key *= 3222273025U;
191
+ key ^= (key >> 9) ^ (key >> 18) ^ (key >> 27);
192
+ key *= 4042322161U;
193
+ key ^= (key >> 22);
194
+ key *= 16773121U;
195
+ return key;
196
+ }
197
+
198
+ // fnv
199
+ //
200
+ // Fowler / Noll / Vo (FNV) Hash
201
+ // http://www.isthe.com/chongo/tech/comp/fnv/
202
+ //
203
+ // Discouraged for poor performance in the smhasher suite.
204
+
205
+ constexpr uint32_t fnv32_hash_start = 2166136261UL;
206
+ constexpr uint64_t fnv64_hash_start = 14695981039346656037ULL;
207
+ constexpr uint64_t fnva64_hash_start = 14695981039346656037ULL;
208
+
209
+ /**
210
+ * Append byte to FNV hash.
211
+ *
212
+ * @see fnv32
213
+ * @methodset fnv
214
+ */
215
+ constexpr uint32_t fnv32_append_byte(uint32_t hash, uint8_t c) {
216
+ hash = hash //
217
+ + (hash << 1) //
218
+ + (hash << 4) //
219
+ + (hash << 7) //
220
+ + (hash << 8) //
221
+ + (hash << 24);
222
+ // forcing signed char, since other platforms can use unsigned
223
+ hash ^= static_cast<int8_t>(c);
224
+ return hash;
225
+ }
226
+
227
+ /**
228
+ * FNV hash of a byte-range.
229
+ *
230
+ * @param hash The initial hash seed.
231
+ *
232
+ * @see fnv32
233
+ * @methodset fnv
234
+ */
235
+ template <typename C, std::enable_if_t<detail::is_hashable_byte_v<C>, int> = 0>
236
+ constexpr uint32_t fnv32_buf(
237
+ const C* buf, size_t n, uint32_t hash = fnv32_hash_start) noexcept {
238
+ for (size_t i = 0; i < n; ++i) {
239
+ hash = fnv32_append_byte(hash, static_cast<uint8_t>(buf[i]));
240
+ }
241
+ return hash;
242
+ }
243
+ inline uint32_t fnv32_buf(
244
+ const void* buf, size_t n, uint32_t hash = fnv32_hash_start) noexcept {
245
+ return fnv32_buf(reinterpret_cast<const uint8_t*>(buf), n, hash);
246
+ }
247
+
248
+ /**
249
+ * FNV hash of a c-str.
250
+ *
251
+ * Continues hashing until a null byte is reached.
252
+ *
253
+ * @param hash The initial hash seed.
254
+ *
255
+ * @methodset fnv
256
+ */
257
+ constexpr uint32_t fnv32(
258
+ const char* buf, uint32_t hash = fnv32_hash_start) noexcept {
259
+ for (; *buf; ++buf) {
260
+ hash = fnv32_append_byte(hash, static_cast<uint8_t>(*buf));
261
+ }
262
+ return hash;
263
+ }
264
+
265
+ /**
266
+ * @overloadbrief FNV hash of a string.
267
+ *
268
+ * FNV is the Fowler / Noll / Vo Hash:
269
+ * http://www.isthe.com/chongo/tech/comp/fnv/
270
+ *
271
+ * Discouraged for poor performance in the smhasher suite.
272
+ *
273
+ * @param hash The initial hash seed.
274
+ *
275
+ * @methodset fnv
276
+ */
277
+ inline uint32_t fnv32(
278
+ const std::string& str, uint32_t hash = fnv32_hash_start) noexcept {
279
+ return fnv32_buf(str.data(), str.size(), hash);
280
+ }
281
+
282
+ /**
283
+ * Append a byte to FNV hash.
284
+ *
285
+ * @see fnv32
286
+ * @methodset fnv
287
+ */
288
+ constexpr uint64_t fnv64_append_byte(uint64_t hash, uint8_t c) {
289
+ hash = hash //
290
+ + (hash << 1) //
291
+ + (hash << 4) //
292
+ + (hash << 5) //
293
+ + (hash << 7) //
294
+ + (hash << 8) //
295
+ + (hash << 40);
296
+ // forcing signed char, since other platforms can use unsigned
297
+ hash ^= static_cast<int8_t>(c);
298
+ return hash;
299
+ }
300
+
301
+ /**
302
+ * FNV hash of a byte-range.
303
+ *
304
+ * @param hash The initial hash seed.
305
+ *
306
+ * @see fnv32
307
+ * @methodset fnv
308
+ */
309
+ template <typename C, std::enable_if_t<detail::is_hashable_byte_v<C>, int> = 0>
310
+ constexpr uint64_t fnv64_buf(
311
+ const C* buf, size_t n, uint64_t hash = fnv64_hash_start) noexcept {
312
+ for (size_t i = 0; i < n; ++i) {
313
+ hash = fnv64_append_byte(hash, static_cast<uint8_t>(buf[i]));
314
+ }
315
+ return hash;
316
+ }
317
+ inline uint64_t fnv64_buf(
318
+ const void* buf, size_t n, uint64_t hash = fnv64_hash_start) noexcept {
319
+ return fnv64_buf(reinterpret_cast<const uint8_t*>(buf), n, hash);
320
+ }
321
+
322
+ /**
323
+ * FNV hash of a c-str.
324
+ *
325
+ * Continues hashing until a null byte is reached.
326
+ *
327
+ * @param hash The initial hash seed.
328
+ *
329
+ * @see fnv32
330
+ * @methodset fnv
331
+ */
332
+ constexpr uint64_t fnv64(
333
+ const char* buf, uint64_t hash = fnv64_hash_start) noexcept {
334
+ for (; *buf; ++buf) {
335
+ hash = fnv64_append_byte(hash, static_cast<uint8_t>(*buf));
336
+ }
337
+ return hash;
338
+ }
339
+
340
+ /**
341
+ * @overloadbrief FNV hash of a string.
342
+ *
343
+ * FNV is the Fowler / Noll / Vo Hash:
344
+ * http://www.isthe.com/chongo/tech/comp/fnv/
345
+ *
346
+ * Discouraged for poor performance in the smhasher suite.
347
+ *
348
+ * @param hash The initial hash seed.
349
+ *
350
+ * @see fnv32
351
+ * @methodset fnv
352
+ */
353
+ inline uint64_t fnv64(
354
+ const std::string& str, uint64_t hash = fnv64_hash_start) noexcept {
355
+ return fnv64_buf(str.data(), str.size(), hash);
356
+ }
357
+
358
+ /**
359
+ * Append a byte to FNVA hash.
360
+ *
361
+ * @see fnv32
362
+ * @methodset fnv
363
+ */
364
+ constexpr uint64_t fnva64_append_byte(uint64_t hash, uint8_t c) {
365
+ hash ^= c;
366
+ hash = hash //
367
+ + (hash << 1) //
368
+ + (hash << 4) //
369
+ + (hash << 5) //
370
+ + (hash << 7) //
371
+ + (hash << 8) //
372
+ + (hash << 40);
373
+ return hash;
374
+ }
375
+
376
+ /**
377
+ * FNVA hash of a byte-range.
378
+ *
379
+ * @param hash The initial hash seed.
380
+ *
381
+ * @see fnv32
382
+ * @methodset fnv
383
+ */
384
+ template <typename C, std::enable_if_t<detail::is_hashable_byte_v<C>, int> = 0>
385
+ constexpr uint64_t fnva64_buf(
386
+ const C* buf, size_t n, uint64_t hash = fnva64_hash_start) noexcept {
387
+ for (size_t i = 0; i < n; ++i) {
388
+ hash = fnva64_append_byte(hash, static_cast<uint8_t>(buf[i]));
389
+ }
390
+ return hash;
391
+ }
392
+ inline uint64_t fnva64_buf(
393
+ const void* buf, size_t n, uint64_t hash = fnva64_hash_start) noexcept {
394
+ return fnva64_buf(reinterpret_cast<const uint8_t*>(buf), n, hash);
395
+ }
396
+
397
+ /**
398
+ * FNVA hash of a string.
399
+ *
400
+ * @param hash The initial hash seed.
401
+ *
402
+ * @see fnv32
403
+ * @methodset fnv
404
+ */
405
+ inline uint64_t fnva64(
406
+ const std::string& str, uint64_t hash = fnva64_hash_start) noexcept {
407
+ return fnva64_buf(str.data(), str.size(), hash);
408
+ }
409
+
410
+ // hsieh
411
+ //
412
+ // Paul Hsieh: http://www.azillionmonkeys.com/qed/hash.html
413
+
414
+ #define get16bits(d) folly::loadUnaligned<uint16_t>(d)
415
+
416
+ /**
417
+ * hsieh hash a byte-range.
418
+ *
419
+ * @see hsieh_hash32_str
420
+ * @methodset hsieh
421
+ */
422
+ inline constexpr uint32_t hsieh_hash32_buf_constexpr(
423
+ const unsigned char* buf, size_t len) noexcept {
424
+ // forcing signed char, since other platforms can use unsigned
425
+ const unsigned char* s = buf;
426
+ uint32_t hash = static_cast<uint32_t>(len);
427
+ uint32_t tmp = 0;
428
+ size_t rem = 0;
429
+
430
+ if (len <= 0 || buf == nullptr) {
431
+ return 0;
432
+ }
433
+
434
+ rem = len & 3;
435
+ len >>= 2;
436
+
437
+ /* Main loop */
438
+ for (; len > 0; len--) {
439
+ hash += get16bits(s);
440
+ tmp = (get16bits(s + 2) << 11) ^ hash;
441
+ hash = (hash << 16) ^ tmp;
442
+ s += 2 * sizeof(uint16_t);
443
+ hash += hash >> 11;
444
+ }
445
+
446
+ /* Handle end cases */
447
+ switch (rem) {
448
+ case 3:
449
+ hash += get16bits(s);
450
+ hash ^= hash << 16;
451
+ hash ^= s[sizeof(uint16_t)] << 18;
452
+ hash += hash >> 11;
453
+ break;
454
+ case 2:
455
+ hash += get16bits(s);
456
+ hash ^= hash << 11;
457
+ hash += hash >> 17;
458
+ break;
459
+ case 1:
460
+ hash += *s;
461
+ hash ^= hash << 10;
462
+ hash += hash >> 1;
463
+ }
464
+
465
+ /* Force "avalanching" of final 127 bits */
466
+ hash ^= hash << 3;
467
+ hash += hash >> 5;
468
+ hash ^= hash << 4;
469
+ hash += hash >> 17;
470
+ hash ^= hash << 25;
471
+ hash += hash >> 6;
472
+
473
+ return hash;
474
+ }
475
+
476
+ #undef get16bits
477
+
478
+ /**
479
+ * hsieh hash a void* byte-range.
480
+ *
481
+ * @see hsieh_hash32_str
482
+ * @methodset hsieh
483
+ */
484
+ inline uint32_t hsieh_hash32_buf(const void* buf, size_t len) noexcept {
485
+ return hsieh_hash32_buf_constexpr(
486
+ reinterpret_cast<const unsigned char*>(buf), len);
487
+ }
488
+
489
+ /**
490
+ * hsieh hash a c-str.
491
+ *
492
+ * Computes the strlen of the input, then byte-range hashes it.
493
+ *
494
+ * @see hsieh_hash32_str
495
+ * @methodset hsieh
496
+ */
497
+ inline uint32_t hsieh_hash32(const char* s) noexcept {
498
+ return hsieh_hash32_buf(s, std::strlen(s));
499
+ }
500
+
501
+ /**
502
+ * hsieh hash a string.
503
+ *
504
+ * Paul Hsieh: http://www.azillionmonkeys.com/qed/hash.html
505
+ *
506
+ * @methodset hsieh
507
+ */
508
+ inline uint32_t hsieh_hash32_str(const std::string& str) noexcept {
509
+ return hsieh_hash32_buf(str.data(), str.size());
510
+ }
511
+
512
+ } // namespace hash
513
+
514
+ namespace detail {
515
+
516
+ template <typename Int>
517
+ struct integral_hasher {
518
+ using folly_is_avalanching =
519
+ std::bool_constant<(sizeof(Int) >= 8 || sizeof(size_t) == 4)>;
520
+
521
+ constexpr size_t operator()(Int const& i) const noexcept {
522
+ static_assert(sizeof(Int) <= 16, "Input type is too wide");
523
+ /* constexpr */ if (sizeof(Int) <= 4) {
524
+ auto const i32 = static_cast<int32_t>(i); // impl accident: sign-extends
525
+ auto const u32 = static_cast<uint32_t>(i32);
526
+ return static_cast<size_t>(hash::jenkins_rev_mix32(u32));
527
+ } else if (sizeof(Int) <= 8) {
528
+ auto const u64 = static_cast<uint64_t>(i);
529
+ return static_cast<size_t>(hash::twang_mix64(u64));
530
+ } else {
531
+ auto const u = to_unsigned(i);
532
+ auto const hi = static_cast<uint64_t>(u >> sizeof(Int) * 4);
533
+ auto const lo = static_cast<uint64_t>(u);
534
+ return static_cast<size_t>(hash::hash_128_to_64(hi, lo));
535
+ }
536
+ }
537
+ };
538
+
539
+ template <typename F>
540
+ struct float_hasher {
541
+ using folly_is_avalanching = std::true_type;
542
+
543
+ size_t operator()(F const& f) const noexcept {
544
+ static_assert(sizeof(F) <= 8, "Input type is too wide");
545
+
546
+ if (f == F{}) { // Ensure 0 and -0 get the same hash.
547
+ return 0;
548
+ }
549
+
550
+ uint64_t u64 = 0;
551
+ memcpy(&u64, &f, sizeof(F));
552
+ return static_cast<size_t>(hash::twang_mix64(u64));
553
+ }
554
+ };
555
+
556
+ } // namespace detail
557
+
558
+ template <class Key, class Enable = void>
559
+ struct hasher;
560
+
561
+ struct Hash {
562
+ template <class T>
563
+ constexpr size_t operator()(const T& v) const
564
+ noexcept(noexcept(hasher<T>()(v))) {
565
+ return hasher<T>()(v);
566
+ }
567
+
568
+ template <class T, class... Ts>
569
+ constexpr size_t operator()(const T& t, const Ts&... ts) const {
570
+ return hash::hash_128_to_64((*this)(t), (*this)(ts...));
571
+ }
572
+
573
+ constexpr size_t operator()() const noexcept { return 0; }
574
+ };
575
+
576
+ // IsAvalanchingHasher<H, K> extends std::integral_constant<bool, V>.
577
+ // V will be true if it is known that when a hasher of type H computes
578
+ // the hash of a key of type K, any subset of B bits from the resulting
579
+ // hash value is usable in a context that can tolerate a collision rate
580
+ // of about 1/2^B. (Input bits lost implicitly converting between K and
581
+ // the argument of H::operator() are not considered here; K is separate
582
+ // to handle the case of generic hashers like folly::Hash).
583
+ //
584
+ // If std::hash<T> or folly::hasher<T> is specialized for a new type T and
585
+ // the implementation avalanches input entropy across all of the bits of a
586
+ // std::size_t result, the specialization should be marked as avalanching.
587
+ // This can be done either by adding a member type folly_is_avalanching
588
+ // to the functor H that contains a constexpr bool value of true, or by
589
+ // specializing IsAvalanchingHasher<H, K>. The member type mechanism is
590
+ // more convenient, but specializing IsAvalanchingHasher may be required
591
+ // if a hasher is polymorphic on the key type or if its definition cannot
592
+ // be modified.
593
+ //
594
+ // The standard's definition of hash quality is based on the chance hash
595
+ // collisions using the entire hash value. No requirement is made that
596
+ // this property holds for subsets of the bits. In addition, hashed keys
597
+ // in real-world workloads are not chosen uniformly from the entire domain
598
+ // of keys, which can further increase the collision rate for a subset
599
+ // of bits. For example, std::hash<uint64_t> in libstdc++-v3 and libc++
600
+ // is the identity function. This hash function has no collisions when
601
+ // considering hash values in their entirety, but for real-world workloads
602
+ // the high bits are likely to always be zero.
603
+ //
604
+ // Some hash functions provide a stronger guarantee -- the standard's
605
+ // collision property is also preserved for subsets of the output bits and
606
+ // for sub-domains of keys. Another way to say this is that each bit of
607
+ // the hash value contains entropy from the entire input, changes to the
608
+ // input avalanche across all of the bits of the output. The distinction
609
+ // is useful when mapping the hash value onto a smaller space efficiently
610
+ // (such as when implementing a hash table).
611
+ template <typename Hasher, typename Key>
612
+ struct IsAvalanchingHasher;
613
+
614
+ namespace detail {
615
+ template <typename Hasher, typename Void = void>
616
+ struct IsAvalanchingHasherFromMemberType
617
+ : std::bool_constant<!require_sizeof<Hasher>> {};
618
+
619
+ template <typename Hasher>
620
+ struct IsAvalanchingHasherFromMemberType<
621
+ Hasher,
622
+ void_t<typename Hasher::folly_is_avalanching>>
623
+ : std::bool_constant<Hasher::folly_is_avalanching::value> {};
624
+ } // namespace detail
625
+
626
+ template <typename Hasher, typename Key>
627
+ struct IsAvalanchingHasher : detail::IsAvalanchingHasherFromMemberType<Hasher> {
628
+ };
629
+
630
+ // It's ugly to put this here, but folly::transparent isn't hash specific
631
+ // so it seems even more ugly to put this near its declaration
632
+ template <typename H, typename K>
633
+ struct IsAvalanchingHasher<transparent<H>, K> : IsAvalanchingHasher<H, K> {};
634
+
635
+ template <typename K>
636
+ struct IsAvalanchingHasher<Hash, K> : IsAvalanchingHasher<hasher<K>, K> {};
637
+
638
+ template <>
639
+ struct hasher<bool> {
640
+ using folly_is_avalanching = std::true_type;
641
+
642
+ constexpr size_t operator()(bool key) const noexcept {
643
+ // Make sure that all the output bits depend on the input.
644
+ return key ? std::numeric_limits<size_t>::max() : 0;
645
+ }
646
+ };
647
+ template <typename K>
648
+ struct IsAvalanchingHasher<hasher<bool>, K> : std::true_type {};
649
+
650
+ template <>
651
+ struct hasher<unsigned long long>
652
+ : detail::integral_hasher<unsigned long long> {};
653
+
654
+ template <>
655
+ struct hasher<signed long long> : detail::integral_hasher<signed long long> {};
656
+
657
+ template <>
658
+ struct hasher<unsigned long> : detail::integral_hasher<unsigned long> {};
659
+
660
+ template <>
661
+ struct hasher<signed long> : detail::integral_hasher<signed long> {};
662
+
663
+ template <>
664
+ struct hasher<unsigned int> : detail::integral_hasher<unsigned int> {};
665
+
666
+ template <>
667
+ struct hasher<signed int> : detail::integral_hasher<signed int> {};
668
+
669
+ template <>
670
+ struct hasher<unsigned short> : detail::integral_hasher<unsigned short> {};
671
+
672
+ template <>
673
+ struct hasher<signed short> : detail::integral_hasher<signed short> {};
674
+
675
+ template <>
676
+ struct hasher<unsigned char> : detail::integral_hasher<unsigned char> {};
677
+
678
+ template <>
679
+ struct hasher<signed char> : detail::integral_hasher<signed char> {};
680
+
681
+ template <> // char is a different type from both signed char and unsigned char
682
+ struct hasher<char> : detail::integral_hasher<char> {};
683
+
684
+ #if FOLLY_HAVE_INT128_T
685
+ template <>
686
+ struct hasher<signed __int128> : detail::integral_hasher<signed __int128> {};
687
+
688
+ template <>
689
+ struct hasher<unsigned __int128> : detail::integral_hasher<unsigned __int128> {
690
+ };
691
+ #endif
692
+
693
+ template <>
694
+ struct hasher<float> : detail::float_hasher<float> {};
695
+
696
+ template <>
697
+ struct hasher<double> : detail::float_hasher<double> {};
698
+
699
+ template <>
700
+ struct hasher<std::string> {
701
+ using folly_is_avalanching = std::true_type;
702
+
703
+ size_t operator()(const std::string& key) const {
704
+ return static_cast<size_t>(
705
+ hash::SpookyHashV2::Hash64(key.data(), key.size(), 0));
706
+ }
707
+ };
708
+ template <typename K>
709
+ struct IsAvalanchingHasher<hasher<std::string>, K> : std::true_type {};
710
+
711
+ template <>
712
+ struct hasher<std::string_view> {
713
+ using folly_is_avalanching = std::true_type;
714
+
715
+ size_t operator()(const std::string_view& key) const {
716
+ return static_cast<size_t>(
717
+ hash::SpookyHashV2::Hash64(key.data(), key.size(), 0));
718
+ }
719
+ };
720
+ template <typename K>
721
+ struct IsAvalanchingHasher<hasher<std::string_view>, K> : std::true_type {};
722
+
723
+ template <typename T>
724
+ struct hasher<T, std::enable_if_t<std::is_enum<T>::value>> {
725
+ size_t operator()(T key) const noexcept { return Hash()(to_underlying(key)); }
726
+ };
727
+
728
+ template <typename T, typename K>
729
+ struct IsAvalanchingHasher<
730
+ hasher<T, std::enable_if_t<std::is_enum<T>::value>>,
731
+ K> : IsAvalanchingHasher<hasher<std::underlying_type_t<T>>, K> {};
732
+
733
+ template <typename T1, typename T2>
734
+ struct hasher<std::pair<T1, T2>> {
735
+ using folly_is_avalanching = std::true_type;
736
+
737
+ size_t operator()(const std::pair<T1, T2>& key) const {
738
+ return Hash()(key.first, key.second);
739
+ }
740
+ };
741
+
742
+ template <typename... Ts>
743
+ struct hasher<std::tuple<Ts...>> {
744
+ size_t operator()(const std::tuple<Ts...>& key) const {
745
+ return apply(Hash(), key);
746
+ }
747
+ };
748
+
749
+ template <typename T>
750
+ struct hasher<T*> {
751
+ using folly_is_avalanching = hasher<std::uintptr_t>::folly_is_avalanching;
752
+
753
+ size_t operator()(T* key) const {
754
+ return Hash()(folly::bit_cast<std::uintptr_t>(key));
755
+ }
756
+ };
757
+
758
+ template <typename T>
759
+ struct hasher<std::unique_ptr<T>> {
760
+ using folly_is_avalanching = typename hasher<T*>::folly_is_avalanching;
761
+
762
+ size_t operator()(const std::unique_ptr<T>& key) const {
763
+ return Hash()(key.get());
764
+ }
765
+ };
766
+
767
+ template <typename T>
768
+ struct hasher<std::shared_ptr<T>> {
769
+ using folly_is_avalanching = typename hasher<T*>::folly_is_avalanching;
770
+
771
+ size_t operator()(const std::shared_ptr<T>& key) const {
772
+ return Hash()(key.get());
773
+ }
774
+ };
775
+
776
+ // combiner for multi-arg tuple also mixes bits
777
+ template <typename T, typename K>
778
+ struct IsAvalanchingHasher<hasher<std::tuple<T>>, K>
779
+ : IsAvalanchingHasher<hasher<T>, K> {};
780
+ template <typename T1, typename T2, typename... Ts, typename K>
781
+ struct IsAvalanchingHasher<hasher<std::tuple<T1, T2, Ts...>>, K>
782
+ : std::true_type {};
783
+
784
+ namespace hash {
785
+
786
+ // Compatible with std::hash implementation of hashing for std::string_view.
787
+ // We use hash::murmurHash64 as a replacement of libstdc++ implementation
788
+ // for better performance, for other implementations of C++ Standard Libraries
789
+ // we fallback to std::hash.
790
+ #if defined(_GLIBCXX_STRING) && FOLLY_X64
791
+ FOLLY_ALWAYS_INLINE size_t stdCompatibleHash(std::string_view sv) noexcept {
792
+ static_assert(sizeof(size_t) == sizeof(uint64_t));
793
+ constexpr uint64_t kSeed = 0xc70f6907ULL;
794
+ return hash::murmurHash64(sv.data(), sv.size(), kSeed);
795
+ }
796
+ #else
797
+ FOLLY_ALWAYS_INLINE size_t stdCompatibleHash(std::string_view sv) noexcept(
798
+ noexcept(std::hash<std::string_view>{}(sv))) {
799
+ return std::hash<std::string_view>{}(sv);
800
+ }
801
+ #endif // defined(_GLIBCXX_STRING) && FOLLY_X64
802
+
803
+ // Simply uses std::hash to hash. Note that std::hash is not guaranteed
804
+ // to be a very good hash function; provided std::hash doesn't collide on
805
+ // the individual inputs, you are fine, but that won't be true for, say,
806
+ // strings or pairs
807
+ class StdHasher {
808
+ public:
809
+ // The standard requires all explicit and partial specializations of std::hash
810
+ // supplied by either the standard library or by users to be default
811
+ // constructible.
812
+ template <typename T>
813
+ size_t operator()(const T& t) const noexcept(noexcept(std::hash<T>()(t))) {
814
+ return std::hash<T>()(t);
815
+ }
816
+
817
+ size_t operator()(std::string_view sv) const
818
+ noexcept(noexcept(stdCompatibleHash(sv))) {
819
+ return stdCompatibleHash(sv);
820
+ }
821
+
822
+ size_t operator()(const std::string& s) const
823
+ noexcept(noexcept(stdCompatibleHash(s))) {
824
+ return stdCompatibleHash(s);
825
+ }
826
+ };
827
+
828
+ // This is a general-purpose way to create a single hash from multiple
829
+ // hashable objects. hash_combine_generic takes a class Hasher implementing
830
+ // hash<T>; hash_combine uses a default hasher StdHasher that uses std::hash.
831
+ // hash_combine_generic hashes each argument and combines those hashes in
832
+ // an order-dependent way to yield a new hash; hash_range does so (also in an
833
+ // order-dependent way) for items in the range [first, last);
834
+ // commutative_hash_combine_* hashes values but combines them in an
835
+ // order-independent way to yield a new hash.
836
+
837
+ /**
838
+ * Hash a value, and combine it with a seed. Commutative.
839
+ *
840
+ * @param hasher The function/callable which will hash the value.
841
+ *
842
+ * @methodset ranges
843
+ */
844
+ template <class Hash, class Value>
845
+ uint64_t commutative_hash_combine_value_generic(
846
+ uint64_t seed, Hash const& hasher, Value const& value) {
847
+ auto const x = hasher(value);
848
+ auto const y = IsAvalanchingHasher<Hash, Value>::value ? x : twang_mix64(x);
849
+ return commutative_hash_128_to_64(seed, y);
850
+ }
851
+
852
+ /**
853
+ * Combine hashes of items in the range [first, last), order-dependently.
854
+ *
855
+ * For order-independent hashing, such as for hashing an unordered container
856
+ * (e.g. folly::dynamic::object) use commutative_hash_combine_range instead.
857
+ *
858
+ * @param hash The base-case hash to use.
859
+ * @param hasher The function/callable which will hash the value.
860
+ *
861
+ * @methodset ranges
862
+ */
863
+ template <
864
+ class Iter,
865
+ class Hash = std::hash<typename std::iterator_traits<Iter>::value_type>>
866
+ uint64_t hash_range(
867
+ Iter begin, Iter end, uint64_t hash = 0, Hash hasher = Hash()) {
868
+ for (; begin != end; ++begin) {
869
+ hash = hash_128_to_64(hash, hasher(*begin));
870
+ }
871
+ return hash;
872
+ }
873
+
874
+ /**
875
+ * Create a hash from multiple hashable objects, order-independently.
876
+ *
877
+ * For order-dependent hashing use hash_range.
878
+ *
879
+ * @param seed The base-case hash to use.
880
+ * @param hasher The function/callable which will hash the value.
881
+ *
882
+ * @methodset ranges
883
+ */
884
+ template <class Hash, class Iter>
885
+ uint64_t commutative_hash_combine_range_generic(
886
+ uint64_t seed, Hash const& hasher, Iter first, Iter last) {
887
+ while (first != last) {
888
+ seed = commutative_hash_combine_value_generic(seed, hasher, *first++);
889
+ }
890
+ return seed;
891
+ }
892
+
893
+ /**
894
+ * Create a hash from multiple hashable objects, order-independently.
895
+ *
896
+ * @methodset ranges
897
+ */
898
+ template <class Iter>
899
+ uint64_t commutative_hash_combine_range(Iter first, Iter last) {
900
+ return commutative_hash_combine_range_generic(0, Hash{}, first, last);
901
+ }
902
+
903
+ namespace detail {
904
+ using c_array_size_t = size_t[];
905
+ } // namespace detail
906
+
907
+ // Never used, but gcc demands it.
908
+ template <class Hasher>
909
+ inline size_t hash_combine_generic(const Hasher&) noexcept {
910
+ return 0;
911
+ }
912
+
913
+ /**
914
+ * Combine hashes of multiple items, order-dependently.
915
+ *
916
+ * @param h The function/callable which will hash the value.
917
+ *
918
+ * @methodset ranges
919
+ */
920
+ template <class Hasher, typename T, typename... Ts>
921
+ size_t hash_combine_generic(
922
+ const Hasher& h,
923
+ const T& t,
924
+ const Ts&... ts) noexcept(noexcept(detail::c_array_size_t{
925
+ h(t), h(ts)...})) {
926
+ size_t seed = h(t);
927
+ if (sizeof...(ts) == 0) {
928
+ return seed;
929
+ }
930
+ size_t remainder = hash_combine_generic(h, ts...);
931
+ if /* constexpr */ (sizeof(size_t) == sizeof(uint32_t)) {
932
+ return twang_32from64((uint64_t(seed) << 32) | remainder);
933
+ } else {
934
+ return static_cast<size_t>(hash_128_to_64(seed, remainder));
935
+ }
936
+ }
937
+
938
+ /**
939
+ * Combine hashes of multiple items, order-independently.
940
+ *
941
+ * @param hasher The function/callable which will hash the value.
942
+ *
943
+ * @methodset ranges
944
+ */
945
+ template <typename Hash, typename... Value>
946
+ uint64_t commutative_hash_combine_generic(
947
+ uint64_t seed, Hash const& hasher, Value const&... value) {
948
+ // variadic foreach:
949
+ uint64_t _[] = {
950
+ 0, seed = commutative_hash_combine_value_generic(seed, hasher, value)...};
951
+ (void)_;
952
+ return seed;
953
+ }
954
+
955
+ /**
956
+ * Combine hashes of multiple items, order-dependently.
957
+ *
958
+ * @methodset ranges
959
+ */
960
+ template <typename T, typename... Ts>
961
+ FOLLY_NODISCARD size_t hash_combine(const T& t, const Ts&... ts) noexcept(
962
+ noexcept(hash_combine_generic(StdHasher{}, t, ts...))) {
963
+ return hash_combine_generic(StdHasher{}, t, ts...);
964
+ }
965
+
966
+ /**
967
+ * Combine hashes of multiple items, order-independently.
968
+ *
969
+ */
970
+ template <typename... Value>
971
+ uint64_t commutative_hash_combine(Value const&... value) {
972
+ return commutative_hash_combine_generic(0, Hash{}, value...);
973
+ }
974
+ } // namespace hash
975
+
976
+ // recursion
977
+ template <size_t index, typename... Ts>
978
+ struct TupleHasher {
979
+ size_t operator()(std::tuple<Ts...> const& key) const {
980
+ return hash::hash_combine(
981
+ TupleHasher<index - 1, Ts...>()(key), std::get<index>(key));
982
+ }
983
+ };
984
+
985
+ // base
986
+ template <typename... Ts>
987
+ struct TupleHasher<0, Ts...> {
988
+ size_t operator()(std::tuple<Ts...> const& key) const {
989
+ // we could do std::hash here directly, but hash_combine hides all the
990
+ // ugly templating implicitly
991
+ return hash::hash_combine(std::get<0>(key));
992
+ }
993
+ };
994
+
995
+ } // namespace folly
996
+
997
+ // Custom hash functions.
998
+ namespace std {
999
+ // Hash function for pairs. Requires default hash functions for both
1000
+ // items in the pair.
1001
+ template <typename T1, typename T2>
1002
+ struct hash<std::pair<T1, T2>> {
1003
+ using folly_is_avalanching = std::true_type;
1004
+
1005
+ size_t operator()(const std::pair<T1, T2>& x) const {
1006
+ return folly::hash::hash_combine(x.first, x.second);
1007
+ }
1008
+ };
1009
+
1010
+ // Hash function for tuples. Requires default hash functions for all types.
1011
+ template <typename... Ts>
1012
+ struct hash<std::tuple<Ts...>> {
1013
+ private:
1014
+ using FirstT = std::decay_t<std::tuple_element_t<0, std::tuple<Ts..., bool>>>;
1015
+
1016
+ public:
1017
+ using folly_is_avalanching = std::bool_constant<(
1018
+ sizeof...(Ts) != 1 ||
1019
+ folly::IsAvalanchingHasher<std::hash<FirstT>, FirstT>::value)>;
1020
+
1021
+ size_t operator()(std::tuple<Ts...> const& key) const {
1022
+ folly::TupleHasher<
1023
+ sizeof...(Ts) - 1, // start index
1024
+ Ts...>
1025
+ hasher;
1026
+
1027
+ return hasher(key);
1028
+ }
1029
+ };
1030
+ } // namespace std
1031
+
1032
+ namespace folly {
1033
+
1034
+ // std::hash<std::string> is avalanching on libstdc++-v3 (code checked),
1035
+ // libc++ (code checked), and MSVC (based on online information).
1036
+ // std::hash for float and double on libstdc++-v3 are avalanching,
1037
+ // but they are not on libc++. std::hash for integral types is not
1038
+ // avalanching for libstdc++-v3 or libc++. We're conservative here and
1039
+ // just mark std::string as avalanching. std::string_view will also be
1040
+ // so, once it exists.
1041
+ template <typename... Args, typename K>
1042
+ struct IsAvalanchingHasher<std::hash<std::basic_string<Args...>>, K>
1043
+ : std::true_type {};
1044
+
1045
+ } // namespace folly