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,1346 @@
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_dynamic
19
+ // 1-minute video primer: https://www.youtube.com/watch?v=3XubaLCDYOM
20
+ //
21
+
22
+ /**
23
+ * dynamic is a runtime dynamically typed value. It holds types from a specific
24
+ * predetermined set of types: int, double, bool, nullptr_t, string, array,
25
+ * map. In particular, it can be used as a convenient in-memory representation
26
+ * for complete JSON objects.
27
+ *
28
+ * In general, dynamic can be used as if it were the type it represents
29
+ * (although in some cases with a slightly less complete interface than the raw
30
+ * type). If there is a runtime type mismatch, then dynamic will throw a
31
+ * TypeError.
32
+ *
33
+ * See folly/json.h for serialization and deserialization functions for JSON.
34
+ *
35
+ * Additional documentation is in
36
+ * https://github.com/facebook/folly/blob/main/folly/docs/Dynamic.md
37
+ *
38
+ * @refcode folly/docs/examples/folly/dynamic.cpp
39
+ * @struct folly::dynamic
40
+ */
41
+ /*
42
+ * Some examples:
43
+ *
44
+ * dynamic twelve = 12;
45
+ * dynamic str = "string";
46
+ * dynamic map = dynamic::object;
47
+ * map[str] = twelve;
48
+ * map[str + "another_str"] = dynamic::array("array", "of", 4, "elements");
49
+ * map.insert("null_element", nullptr);
50
+ * ++map[str];
51
+ * assert(map[str] == 13);
52
+ *
53
+ * // Building a complex object with a sub array inline:
54
+ * dynamic d = dynamic::object
55
+ * ("key", "value")
56
+ * ("key2", dynamic::array("a", "array"))
57
+ * ;
58
+ */
59
+
60
+ #pragma once
61
+
62
+ #include <cstdint>
63
+ #include <memory>
64
+ #include <ostream>
65
+ #include <string>
66
+ #include <type_traits>
67
+ #include <utility>
68
+ #include <vector>
69
+
70
+ #include <folly/Expected.h>
71
+ #include <folly/Range.h>
72
+ #include <folly/Traits.h>
73
+ #include <folly/container/Access.h>
74
+ #include <folly/container/F14Map.h>
75
+ #include <folly/json_pointer.h>
76
+
77
+ namespace folly {
78
+
79
+ //////////////////////////////////////////////////////////////////////
80
+
81
+ struct const_dynamic_view;
82
+ struct dynamic;
83
+ struct dynamic_view;
84
+ struct TypeError;
85
+
86
+ //////////////////////////////////////////////////////////////////////
87
+
88
+ namespace dynamic_detail {
89
+ template <typename T>
90
+ using detect_construct_string = decltype(std::string(
91
+ FOLLY_DECLVAL(T const&).data(), FOLLY_DECLVAL(T const&).size()));
92
+ }
93
+
94
+ struct dynamic {
95
+ enum Type {
96
+ NULLT,
97
+ ARRAY,
98
+ BOOL,
99
+ DOUBLE,
100
+ INT64,
101
+ OBJECT,
102
+ STRING,
103
+ };
104
+ template <class T, class Enable = void>
105
+ struct NumericTypeHelper;
106
+
107
+ /*
108
+ * We support direct iteration of arrays, and indirect iteration of objects.
109
+ * See begin(), end(), keys(), values(), and items() for more.
110
+ *
111
+ * Array iterators dereference as the elements in the array.
112
+ * Object key iterators dereference as the keys in the object.
113
+ * Object value iterators dereference as the values in the object.
114
+ * Object item iterators dereference as pairs of (key, value).
115
+ */
116
+ private:
117
+ typedef std::vector<dynamic> Array;
118
+
119
+ /*
120
+ * Violating spec, std::vector<bool>::const_reference is not bool in libcpp:
121
+ * http://howardhinnant.github.io/onvectorbool.html
122
+ *
123
+ * This is used to add a public ctor which is only enabled under libcpp taking
124
+ * std::vector<bool>::const_reference without using the preprocessor.
125
+ */
126
+ struct VectorBoolConstRefFake : std::false_type {};
127
+ using VectorBoolConstRefCtorType = std::conditional_t<
128
+ std::is_same<std::vector<bool>::const_reference, bool>::value,
129
+ VectorBoolConstRefFake,
130
+ std::vector<bool>::const_reference>;
131
+
132
+ public:
133
+ typedef Array::iterator iterator;
134
+ typedef Array::const_iterator const_iterator;
135
+ typedef dynamic value_type;
136
+
137
+ struct const_key_iterator;
138
+ struct const_value_iterator;
139
+ struct const_item_iterator;
140
+
141
+ struct value_iterator;
142
+ struct item_iterator;
143
+
144
+ /*
145
+ * Creation routines for making dynamic objects and arrays. Objects
146
+ * are maps from key to value (so named due to json-related origins
147
+ * here).
148
+ *
149
+ * Example:
150
+ *
151
+ * // Make a fairly complex dynamic:
152
+ * dynamic d = dynamic::object("key", "value1")
153
+ * ("key2", dynamic::array("value",
154
+ * "with",
155
+ * 4,
156
+ * "words"));
157
+ *
158
+ * // Build an object in a few steps:
159
+ * dynamic d = dynamic::object;
160
+ * d["key"] = 12;
161
+ * d["something_else"] = dynamic::array(1, 2, 3, nullptr);
162
+ */
163
+ private:
164
+ struct EmptyArrayTag {};
165
+ struct ObjectMaker;
166
+
167
+ public:
168
+ /**
169
+ * @brief Used with the array-range ctor.
170
+ */
171
+ struct array_range_construct_t {
172
+ private: // forbid implicit construction with {}
173
+ friend dynamic;
174
+ constexpr array_range_construct_t() = default;
175
+ };
176
+ static inline constexpr array_range_construct_t array_range_construct{};
177
+
178
+ /**
179
+ * Do not use.
180
+ *
181
+ * @methodset Array
182
+ */
183
+ static void array(EmptyArrayTag);
184
+
185
+ /**
186
+ * @brief Construct a dynamic array.
187
+ *
188
+ * Special syntax because `dynamic d = { ... }` dispatches to the copy
189
+ * constructor.
190
+ * See D3013423 and
191
+ * [DR95](http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1467).
192
+ *
193
+ * @refcode folly/docs/examples/folly/dynamic/array.cpp
194
+ * @methodset Array
195
+ */
196
+ template <class... Args>
197
+ static dynamic array(Args&&... args);
198
+
199
+ /**
200
+ * Construct a dynamic object.
201
+ *
202
+ * @refcode folly/docs/examples/folly/dynamic/object.cpp
203
+ * @methodset Object
204
+ */
205
+ static ObjectMaker object();
206
+ static ObjectMaker object(dynamic, dynamic);
207
+
208
+ /**
209
+ * Default constructor, initializes with nullptr.
210
+ */
211
+ dynamic();
212
+
213
+ /*
214
+ * String compatibility constructors.
215
+ */
216
+ /// Initializes as an empty string.
217
+ /* implicit */ dynamic(std::nullptr_t);
218
+ /// Initializes with strcpy.
219
+ /* implicit */ dynamic(char const* s);
220
+ /// Initializes as a string.
221
+ /* implicit */ dynamic(std::string s);
222
+ /// Initializes as a string.
223
+ template <
224
+ typename Stringish,
225
+ typename = std::enable_if_t<
226
+ is_detected_v<dynamic_detail::detect_construct_string, Stringish>>>
227
+ /* implicit */ dynamic(Stringish&& s);
228
+
229
+ /*
230
+ * This is part of the plumbing for array() and object(), above.
231
+ * Used to create a new array or object dynamic.
232
+ */
233
+ /// Plumbing for array() construction.
234
+ /* implicit */ dynamic(void (*)(EmptyArrayTag));
235
+ /// Plumbing for object() construction.
236
+ /* implicit */ dynamic(ObjectMaker (*)());
237
+ /// Plumbing for object() construction.
238
+ /* implicit */ dynamic(ObjectMaker const&) = delete;
239
+ /// Plumbing for object() construction.
240
+ /* implicit */ dynamic(ObjectMaker&&);
241
+
242
+ /**
243
+ * Constructor for integral and float types.
244
+ * Other types are SFINAEd out with NumericTypeHelper.
245
+ */
246
+ template <class T, class NumericType = typename NumericTypeHelper<T>::type>
247
+ /* implicit */ dynamic(T t);
248
+
249
+ /**
250
+ * Special handling for vector<bool>.
251
+ *
252
+ * If v is vector<bool>, v[idx] is a proxy object implicitly convertible to
253
+ * bool. Calling a function f(dynamic) with f(v[idx]) would require a double
254
+ * implicit conversion (reference -> bool -> dynamic) which is not allowed,
255
+ * hence we explicitly accept the reference proxy.
256
+ */
257
+ /* implicit */ dynamic(std::vector<bool>::reference b);
258
+ /// Special handling for vector<bool>::const_reference.
259
+ /* implicit */ dynamic(VectorBoolConstRefCtorType b);
260
+
261
+ /**
262
+ * Create a dynamic that is an array of the values from the supplied
263
+ * iterator range. Used to construct a dynamic of array type from a supplied
264
+ * pair of iterators or from a range-like object. Four equivalent forms - see
265
+ * examples.
266
+ *
267
+ * Examples:
268
+ *
269
+ * auto arr1 = dynamic(
270
+ * dynamic::array_range_construct, rng.begin(), rng.end());
271
+ * auto arr2 = dynamic(dynamic::array_range_construct, rng);
272
+ * auto arr3 = dynamic::array_range(rng.begin(), rng.end());
273
+ * auto arr4 = dynamic::array_range(rng);
274
+ */
275
+ template <class Iterator>
276
+ dynamic(array_range_construct_t, Iterator first, Iterator last);
277
+ template <class Range>
278
+ dynamic(array_range_construct_t tag, Range&& range)
279
+ : dynamic(tag, access::begin(range), access::end(range)) {}
280
+ template <class Iterator>
281
+ static dynamic array_range(Iterator first, Iterator last) {
282
+ return dynamic(array_range_construct, first, last);
283
+ }
284
+ template <class Range>
285
+ static dynamic array_range(Range&& range) {
286
+ return dynamic(array_range_construct, std::forward<Range>(range));
287
+ }
288
+
289
+ dynamic(dynamic const&);
290
+ dynamic(dynamic&&) noexcept;
291
+ ~dynamic() noexcept;
292
+
293
+ /**
294
+ * Deep equality comparison. This will compare all the way down
295
+ * an object or array, and is potentially expensive.
296
+ *
297
+ * NOTE: Implicit conversion will be done between ints and doubles, so numeric
298
+ * equality will apply between those cases. Other dynamic value comparisons of
299
+ * different types will always return false.
300
+ */
301
+ friend bool operator==(dynamic const& a, dynamic const& b);
302
+ friend bool operator!=(dynamic const& a, dynamic const& b) {
303
+ return !(a == b);
304
+ }
305
+
306
+ /*
307
+ * For all types except object this returns the natural ordering on
308
+ * those types. For objects, we throw TypeError.
309
+ *
310
+ * NOTE: Implicit conversion will be done between ints and doubles, so numeric
311
+ * ordering will apply between those cases. Other dynamic value comparisons of
312
+ * different types will maintain consistent ordering within a binary run.
313
+ */
314
+ friend bool operator<(dynamic const& a, dynamic const& b);
315
+ friend bool operator>(dynamic const& a, dynamic const& b) { return b < a; }
316
+ friend bool operator<=(dynamic const& a, dynamic const& b) {
317
+ return !(b < a);
318
+ }
319
+ friend bool operator>=(dynamic const& a, dynamic const& b) {
320
+ return !(a < b);
321
+ }
322
+
323
+ /*
324
+ * General operators.
325
+ *
326
+ * These throw TypeError when used with types or type combinations
327
+ * that don't support them.
328
+ *
329
+ * These functions may also throw if you use 64-bit integers with
330
+ * doubles when the integers are too big to fit in a double.
331
+ */
332
+ /// @methodset Op
333
+ dynamic& operator+=(dynamic const&);
334
+ /// @methodset Op
335
+ dynamic& operator-=(dynamic const&);
336
+ /// @methodset Op
337
+ dynamic& operator*=(dynamic const&);
338
+ /// @methodset Op
339
+ dynamic& operator/=(dynamic const&);
340
+ /// @methodset Op
341
+ dynamic& operator%=(dynamic const&);
342
+ /// @methodset Op
343
+ dynamic& operator|=(dynamic const&);
344
+ /// @methodset Op
345
+ dynamic& operator&=(dynamic const&);
346
+ /// @methodset Op
347
+ dynamic& operator^=(dynamic const&);
348
+ /// @methodset Op
349
+ dynamic& operator++();
350
+ /// @methodset Op
351
+ dynamic& operator--();
352
+
353
+ friend dynamic operator+(dynamic const& a, dynamic const& b) {
354
+ return std::move(copy(a) += b);
355
+ }
356
+ friend dynamic operator-(dynamic const& a, dynamic const& b) {
357
+ return std::move(copy(a) -= b);
358
+ }
359
+ friend dynamic operator*(dynamic const& a, dynamic const& b) {
360
+ return std::move(copy(a) *= b);
361
+ }
362
+ friend dynamic operator/(dynamic const& a, dynamic const& b) {
363
+ return std::move(copy(a) /= b);
364
+ }
365
+ friend dynamic operator%(dynamic const& a, dynamic const& b) {
366
+ return std::move(copy(a) %= b);
367
+ }
368
+ friend dynamic operator|(dynamic const& a, dynamic const& b) {
369
+ return std::move(copy(a) |= b);
370
+ }
371
+ friend dynamic operator&(dynamic const& a, dynamic const& b) {
372
+ return std::move(copy(a) &= b);
373
+ }
374
+ friend dynamic operator^(dynamic const& a, dynamic const& b) {
375
+ return std::move(copy(a) ^= b);
376
+ }
377
+
378
+ friend dynamic operator+(dynamic&& a, dynamic const& b) {
379
+ return std::move(a += b);
380
+ }
381
+
382
+ /// @methodset Op
383
+ dynamic operator++(int) {
384
+ auto self = *this;
385
+ return ++*this, self;
386
+ }
387
+ /// @methodset Op
388
+ dynamic operator--(int) {
389
+ auto self = *this;
390
+ return --*this, self;
391
+ }
392
+
393
+ /**
394
+ * Assignment from other dynamics.
395
+ *
396
+ * Because of the implicit conversion to dynamic from its potential types, you
397
+ * can use this to change the type pretty intuitively.
398
+ *
399
+ * Basic guarantee only.
400
+ */
401
+ dynamic& operator=(dynamic const&);
402
+ dynamic& operator=(dynamic&&) noexcept;
403
+
404
+ /*
405
+ * Minor performance optimization: allow assignment from cheap
406
+ * primitive types without creating a temporary dynamic.
407
+ */
408
+ template <class T, class NumericType = typename NumericTypeHelper<T>::type>
409
+ dynamic& operator=(T t);
410
+
411
+ dynamic& operator=(std::nullptr_t);
412
+
413
+ /*
414
+ * For simple dynamics (not arrays or objects), this prints the
415
+ * value to an std::ostream in the expected way. Respects the
416
+ * formatting manipulators that have been sent to the stream
417
+ * already.
418
+ *
419
+ * If the dynamic holds an object or array, this prints them in a
420
+ * format very similar to JSON. (It will in fact actually be JSON
421
+ * as long as the dynamic validly represents a JSON object---i.e. it
422
+ * can't have non-string keys.)
423
+ */
424
+ friend std::ostream& operator<<(std::ostream&, dynamic const&);
425
+
426
+ /**
427
+ * @brief Type test.
428
+ *
429
+ * Returns true if this dynamic is of the specified type.
430
+ *
431
+ * @methodset Typing
432
+ */
433
+ bool isString() const;
434
+ /// @copydoc isString
435
+ bool isObject() const;
436
+ /// @copydoc isString
437
+ bool isBool() const;
438
+ /// @copydoc isString
439
+ bool isNull() const;
440
+ /// @copydoc isString
441
+ bool isArray() const;
442
+ /// @copydoc isString
443
+ bool isDouble() const;
444
+ /// @copydoc isString
445
+ bool isInt() const;
446
+
447
+ /**
448
+ * @copydoc isString
449
+ *
450
+ * @return `isInt() || isDouble()`.
451
+ */
452
+ bool isNumber() const;
453
+
454
+ /**
455
+ * The type of this dynamic.
456
+ *
457
+ * @methodset Typing
458
+ */
459
+ Type type() const;
460
+
461
+ /**
462
+ * The type of this dynamic as a printable string.
463
+ *
464
+ * @methodset Typing
465
+ */
466
+ const char* typeName() const;
467
+
468
+ /**
469
+ * Type conversion.
470
+ *
471
+ * Extract a value while trying to convert to the specified type.
472
+ * Throws exceptions if we cannot convert from the real type to the
473
+ * requested type.
474
+ *
475
+ * C++ will implicitly convert between bools, ints, and doubles; these
476
+ * conversion functions also try to convert between arithmetic types and
477
+ * strings. E.g. dynamic d = "12"; d.asDouble() -> 12.0.
478
+ *
479
+ * Note: you can only use this to access integral types or strings,
480
+ * since arrays and objects are generally best dealt with as a
481
+ * dynamic.
482
+ *
483
+ * @methodset Conversion
484
+ */
485
+ std::string asString() const;
486
+ /// @copydoc asString
487
+ double asDouble() const;
488
+ /// @copydoc asString
489
+ int64_t asInt() const;
490
+ /// @copydoc asString
491
+ bool asBool() const;
492
+
493
+ /**
494
+ * Type extraction.
495
+ *
496
+ * Extract the value stored in this dynamic without type conversion.
497
+ *
498
+ * These will throw a TypeError if the dynamic has a different type.
499
+ *
500
+ * @methodset Extraction
501
+ */
502
+ const std::string& getString() const&;
503
+ /// @copydoc getString
504
+ double getDouble() const&;
505
+ /// @copydoc getString
506
+ int64_t getInt() const&;
507
+ /// @copydoc getString
508
+ bool getBool() const&;
509
+ std::string& getString() &;
510
+ double& getDouble() &;
511
+ int64_t& getInt() &;
512
+ bool& getBool() &;
513
+ std::string&& getString() &&;
514
+ double getDouble() &&;
515
+ int64_t getInt() &&;
516
+ bool getBool() &&;
517
+
518
+ /**
519
+ * Get the c_str pointer.
520
+ *
521
+ * It is occasionally useful to access a string's internal pointer
522
+ * directly, without the type conversion of `asString()`.
523
+ *
524
+ * These will throw a TypeError if the dynamic is not a string.
525
+ *
526
+ * @methodset Extraction
527
+ */
528
+ const char* c_str() const&;
529
+ const char* c_str() && = delete;
530
+ /// @copydoc c_str
531
+ StringPiece stringPiece() const;
532
+
533
+ /**
534
+ * Tests for emptiness.
535
+ *
536
+ * Returns: true if this dynamic is null, an empty array, an empty
537
+ * object, or an empty string.
538
+ *
539
+ * @methodset Container
540
+ */
541
+ bool empty() const;
542
+
543
+ /**
544
+ * Get size.
545
+ *
546
+ * If this is an array or an object, returns the number of elements
547
+ * contained. If it is a string, returns the length. Otherwise
548
+ * throws TypeError.
549
+ *
550
+ * @methodset Container
551
+ */
552
+ std::size_t size() const;
553
+
554
+ /**
555
+ * Array iteration.
556
+ *
557
+ * You can iterate over the values of the array. Calling these on
558
+ * non-arrays will throw a TypeError.
559
+ *
560
+ * @methodset Iteration
561
+ */
562
+ const_iterator begin() const;
563
+ /// @copydoc begin
564
+ const_iterator end() const;
565
+ iterator begin();
566
+ iterator end();
567
+
568
+ private:
569
+ /*
570
+ * Helper object returned by keys(), values(), and items().
571
+ */
572
+ template <class T>
573
+ struct IterableProxy;
574
+
575
+ /*
576
+ * Helper for heterogeneous lookup and mutation on objects: at(), find(),
577
+ * count(), erase(), operator[]
578
+ */
579
+ template <typename K, typename T>
580
+ using IfIsNonStringDynamicConvertible = std::enable_if_t<
581
+ !std::is_convertible<K, StringPiece>::value &&
582
+ std::is_convertible<K, dynamic>::value,
583
+ T>;
584
+
585
+ template <typename K, typename T>
586
+ using IfNotIterator =
587
+ std::enable_if_t<!std::is_convertible<K, iterator>::value, T>;
588
+
589
+ public:
590
+ /*
591
+ * You can iterate over the keys, values, or items (std::pair of key and
592
+ * value) in an object. Calling these on non-objects will throw a TypeError.
593
+ */
594
+ /**
595
+ * Get the keys of an object.
596
+ *
597
+ * Return an iterable interface for the object's keys.
598
+ *
599
+ * @methodset Iteration
600
+ */
601
+ IterableProxy<const_key_iterator> keys() const;
602
+ /**
603
+ * Get the values of an object.
604
+ *
605
+ * Return an iterable interface for the object's values, without their
606
+ * associated key.
607
+ *
608
+ * @methodset Iteration
609
+ */
610
+ IterableProxy<const_value_iterator> values() const;
611
+ /**
612
+ * Get key-value items of an object.
613
+ *
614
+ * Return an iterable interface for the object's key-value pairs.
615
+ * The type of this iterable is `(const dynamic&, dynamic&)`.
616
+ *
617
+ * @methodset Iteration
618
+ */
619
+ IterableProxy<const_item_iterator> items() const;
620
+ IterableProxy<value_iterator> values();
621
+ IterableProxy<item_iterator> items();
622
+
623
+ /**
624
+ * Find by key.
625
+ *
626
+ * AssociativeContainer-style find interface for objects. Throws if
627
+ * this is not an object.
628
+ *
629
+ * @return items().end() if the key is not present, or a
630
+ * const_item_iterator pointing to the item.
631
+ *
632
+ * @methodset Object
633
+ */
634
+ template <typename K>
635
+ IfIsNonStringDynamicConvertible<K, const_item_iterator> find(K&&) const;
636
+ template <typename K>
637
+ IfIsNonStringDynamicConvertible<K, item_iterator> find(K&&);
638
+ const_item_iterator find(StringPiece) const;
639
+ item_iterator find(StringPiece);
640
+
641
+ /**
642
+ * Count by key.
643
+ *
644
+ * If this is an object, returns whether it contains a field with
645
+ * the given name. Otherwise throws TypeError.
646
+ *
647
+ * @methodset Object
648
+ */
649
+ template <typename K>
650
+ IfIsNonStringDynamicConvertible<K, std::size_t> count(K&&) const;
651
+ std::size_t count(StringPiece) const;
652
+
653
+ private:
654
+ dynamic const& atImpl(dynamic const&) const&;
655
+
656
+ public:
657
+ /**
658
+ * Access sub-field or index.
659
+ *
660
+ * For objects or arrays, provides access to sub-fields by index or
661
+ * field name.
662
+ *
663
+ * Using these with dynamic objects that are not arrays or objects
664
+ * will throw a TypeError. Using an index that is out of range or
665
+ * object-element that's not present throws std::out_of_range.
666
+ *
667
+ * @methodset Element access
668
+ */
669
+ template <typename K>
670
+ IfIsNonStringDynamicConvertible<K, dynamic const&> at(K&&) const&;
671
+ template <typename K>
672
+ IfIsNonStringDynamicConvertible<K, dynamic&> at(K&&) &;
673
+ template <typename K>
674
+ IfIsNonStringDynamicConvertible<K, dynamic&&> at(K&&) &&;
675
+
676
+ dynamic const& at(StringPiece) const&;
677
+ dynamic& at(StringPiece) &;
678
+ dynamic&& at(StringPiece) &&;
679
+
680
+ /*
681
+ * Locate element using JSON pointer, per RFC 6901
682
+ */
683
+
684
+ enum class json_pointer_resolution_error_code : uint8_t {
685
+ other = 0,
686
+ // key not found in object
687
+ key_not_found,
688
+ // array index out of bounds
689
+ index_out_of_bounds,
690
+ // special index "-" requesting append
691
+ append_requested,
692
+ // indexes in arrays must be numeric
693
+ index_not_numeric,
694
+ // indexes in arrays should not have leading zero
695
+ index_has_leading_zero,
696
+ // element not subscribable, i.e. neither object or array
697
+ element_not_object_or_array,
698
+ // hit document boundary, but pointer not exhausted yet
699
+ json_pointer_out_of_bounds,
700
+ };
701
+
702
+ template <typename Dynamic>
703
+ struct json_pointer_resolution_error {
704
+ // error code encountered while resolving JSON pointer
705
+ json_pointer_resolution_error_code error_code{};
706
+ // index of the JSON pointer's token that caused the error
707
+ size_t index{0};
708
+ // Last correctly resolved element in object. You can use it,
709
+ // for example, to add last element to the array
710
+ Dynamic* context{nullptr};
711
+ };
712
+
713
+ template <typename Dynamic>
714
+ struct json_pointer_resolved_value {
715
+ // parent element of the value in dynamic, if exist
716
+ Dynamic* parent{nullptr};
717
+ // pointer to the value itself
718
+ Dynamic* value{nullptr};
719
+ // if parent isObject, this is the key in object to get value
720
+ StringPiece parent_key;
721
+ // if parent isArray, this is the index in array to get value
722
+ size_t parent_index{0};
723
+ };
724
+
725
+ // clang-format off
726
+ template <typename Dynamic>
727
+ using resolved_json_pointer = Expected<
728
+ json_pointer_resolved_value<Dynamic>,
729
+ json_pointer_resolution_error<Dynamic>>;
730
+
731
+ /**
732
+ * Get JSON Pointer.
733
+ *
734
+ * See [Relative JSON Pointers RFC 6901](https://json-schema.org/draft/2019-09/relative-json-pointer.html)
735
+ *
736
+ * @methodset Element access
737
+ */
738
+ resolved_json_pointer<dynamic const>
739
+ try_get_ptr(json_pointer const&) const&;
740
+ resolved_json_pointer<dynamic>
741
+ try_get_ptr(json_pointer const&) &;
742
+ resolved_json_pointer<dynamic const>
743
+ try_get_ptr(json_pointer const&) const&& = delete;
744
+ resolved_json_pointer<dynamic const>
745
+ try_get_ptr(json_pointer const&) && = delete;
746
+ // clang-format on
747
+
748
+ /**
749
+ * Nullable access.
750
+ *
751
+ * Like `at` (for objects and arrays) and `try_get_ptr` (for json_pointer
752
+ * lookup), but returns nullptr if the element cannot be found instead of
753
+ * throwing a TypeError.
754
+ *
755
+ * For the JSON Pointer overloads, throws if pointer does not match the shape
756
+ * of the document, e.g. uses string to index in array.
757
+ *
758
+ * @methodset Element access
759
+ */
760
+ const dynamic* get_ptr(json_pointer const&) const&;
761
+ dynamic* get_ptr(json_pointer const&) &;
762
+ const dynamic* get_ptr(json_pointer const&) const&& = delete;
763
+ dynamic* get_ptr(json_pointer const&) && = delete;
764
+
765
+ private:
766
+ const dynamic* get_ptrImpl(dynamic const&) const&;
767
+
768
+ public:
769
+ /*
770
+ * Like 'at', above, except it returns either a pointer to the contained
771
+ * object or nullptr if it wasn't found. This allows a key to be tested for
772
+ * containment and retrieved in one operation. Example:
773
+ *
774
+ * if (auto* found = d.get_ptr(key))
775
+ * // use *found;
776
+ *
777
+ * Using these with dynamic objects that are not arrays or objects
778
+ * will throw a TypeError.
779
+ */
780
+ template <typename K>
781
+ IfIsNonStringDynamicConvertible<K, const dynamic*> get_ptr(K&&) const&;
782
+ template <typename K>
783
+ IfIsNonStringDynamicConvertible<K, dynamic*> get_ptr(K&&) &;
784
+ template <typename K>
785
+ IfIsNonStringDynamicConvertible<K, dynamic*> get_ptr(K&&) && = delete;
786
+
787
+ const dynamic* get_ptr(StringPiece) const&;
788
+ dynamic* get_ptr(StringPiece) &;
789
+ dynamic* get_ptr(StringPiece) && = delete;
790
+
791
+ /**
792
+ * Element lookup.
793
+ *
794
+ * This works for access to both objects and arrays.
795
+ *
796
+ * In the case of an array, the index must be an integer, and this
797
+ * will throw std::out_of_range if it is less than zero or greater
798
+ * than size().
799
+ *
800
+ * In the case of an object, the non-const overload inserts a null
801
+ * value if the key isn't present. The const overload will throw
802
+ * std::out_of_range if the key is not present.
803
+ *
804
+ * These functions do not invalidate iterators except when a null value
805
+ * is inserted into an object as described above.
806
+ *
807
+ * @methodset Element access
808
+ */
809
+ template <typename K>
810
+ IfIsNonStringDynamicConvertible<K, dynamic&> operator[](K&&) &;
811
+ template <typename K>
812
+ IfIsNonStringDynamicConvertible<K, dynamic const&> operator[](K&&) const&;
813
+ template <typename K>
814
+ IfIsNonStringDynamicConvertible<K, dynamic&&> operator[](K&&) &&;
815
+
816
+ dynamic& operator[](StringPiece) &;
817
+ dynamic const& operator[](StringPiece) const&;
818
+ dynamic&& operator[](StringPiece) &&;
819
+
820
+ /**
821
+ * Defaulted lookup.
822
+ *
823
+ * getDefault will return the value associated with the supplied key, the
824
+ * supplied default otherwise.
825
+ *
826
+ * Only defined for objects, throws TypeError otherwise.
827
+ *
828
+ * @methodset Object
829
+ */
830
+ template <typename K>
831
+ IfIsNonStringDynamicConvertible<K, dynamic> getDefault(
832
+ K&& k, const dynamic& v = dynamic::object) const&;
833
+ template <typename K>
834
+ IfIsNonStringDynamicConvertible<K, dynamic> getDefault(
835
+ K&& k, dynamic&& v) const&;
836
+ template <typename K>
837
+ IfIsNonStringDynamicConvertible<K, dynamic> getDefault(
838
+ K&& k, const dynamic& v = dynamic::object) &&;
839
+ template <typename K>
840
+ IfIsNonStringDynamicConvertible<K, dynamic> getDefault(K&& k, dynamic&& v) &&;
841
+
842
+ dynamic getDefault(StringPiece k, const dynamic& v = dynamic::object) const&;
843
+ dynamic getDefault(StringPiece k, dynamic&& v) const&;
844
+ dynamic getDefault(StringPiece k, const dynamic& v = dynamic::object) &&;
845
+ dynamic getDefault(StringPiece k, dynamic&& v) &&;
846
+
847
+ /**
848
+ * Maybe set.
849
+ *
850
+ * setDefault will set the key to the supplied default if it is not yet set,
851
+ * otherwise leaving it. setDefault returns a reference to the existing value
852
+ * if present, the new value otherwise.
853
+ *
854
+ * Only defined for objects, throws TypeError otherwise.
855
+ *
856
+ * @methodset Object
857
+ */
858
+ template <typename K, typename V>
859
+ IfIsNonStringDynamicConvertible<K, dynamic&> setDefault(K&& k, V&& v);
860
+ template <typename V>
861
+ dynamic& setDefault(StringPiece k, V&& v);
862
+ // MSVC 2015 Update 3 needs these extra overloads because if V were a
863
+ // defaulted template parameter, it causes MSVC to consider v an rvalue
864
+ // reference rather than a universal reference, resulting in it not being
865
+ // able to find the correct overload to construct a dynamic with.
866
+ template <typename K>
867
+ IfIsNonStringDynamicConvertible<K, dynamic&> setDefault(K&& k, dynamic&& v);
868
+ template <typename K>
869
+ IfIsNonStringDynamicConvertible<K, dynamic&> setDefault(
870
+ K&& k, const dynamic& v = dynamic::object);
871
+
872
+ dynamic& setDefault(StringPiece k, dynamic&& v);
873
+ dynamic& setDefault(StringPiece k, const dynamic& v = dynamic::object);
874
+
875
+ /**
876
+ * Change size.
877
+ *
878
+ * Resizes an array so it has at n elements, using the supplied
879
+ * default to fill new elements. Throws TypeError if this dynamic
880
+ * is not an array.
881
+ *
882
+ * May invalidate iterators.
883
+ *
884
+ * Post: size() == n
885
+ *
886
+ * @methodset Array
887
+ */
888
+ void resize(std::size_t sz, dynamic const& = nullptr);
889
+
890
+ /**
891
+ * Pre-allocate size.
892
+ *
893
+ * If this is an array, an object, or a string, reserves the requested
894
+ * capacity in the underlying container. Otherwise throws TypeError.
895
+ *
896
+ * May invalidate iterators, and does not give any additional guarantees on
897
+ * iterator invalidation on subsequent insertions; the only purpose is for
898
+ * optimization.
899
+ *
900
+ * @methodset Container
901
+ */
902
+ void reserve(std::size_t capacity);
903
+
904
+ /**
905
+ * @brief Overwriting insertion.
906
+ *
907
+ * Inserts the supplied key-value pair to an object, or throws if
908
+ * it's not an object. If the key already exists, insert will overwrite the
909
+ * value, i.e., similar to insert_or_assign.
910
+ *
911
+ * Invalidates iterators.
912
+ *
913
+ * @methodset Container
914
+ */
915
+ template <class K, class V>
916
+ IfNotIterator<K, void> insert(K&&, V&& val);
917
+
918
+ /**
919
+ * Overwriting emplacement.
920
+ *
921
+ * Inserts an element into an object constructed in-place with the given args
922
+ * if there is no existing element with the key, or throws if it's not an
923
+ * object. Returns a pair consisting of an iterator to the inserted element,
924
+ * or the already existing element if no insertion happened, and a bool
925
+ * denoting whether the insertion took place.
926
+ *
927
+ * Invalidates iterators.
928
+ *
929
+ * @methodset Object
930
+ */
931
+ template <class... Args>
932
+ std::pair<item_iterator, bool> emplace(Args&&... args);
933
+
934
+ /**
935
+ * Non-overwriting emplacement.
936
+ *
937
+ * Inserts an element into an object with the given key and value constructed
938
+ * in-place with the given args if there is no existing element with the key,
939
+ * or throws if it's not an object. Returns a pair consisting of an iterator
940
+ * to the inserted element, or the already existing element if no insertion
941
+ * happened, and a bool denoting whether the insertion took place.
942
+ *
943
+ * Invalidates iterators.
944
+ *
945
+ * @methodset Object
946
+ */
947
+ template <class K, class... Args>
948
+ std::pair<item_iterator, bool> try_emplace(K&& key, Args&&... args);
949
+
950
+ /**
951
+ * Inserts the supplied value into array, or throw if not array.
952
+ * Shifts existing values in the array to the right.
953
+ *
954
+ * Invalidates iterators.
955
+ */
956
+ template <class T>
957
+ iterator insert(const_iterator pos, T&& value);
958
+
959
+ /**
960
+ * Inserts elements from range [first, last) before pos into an array.
961
+ * Throws if the type is not an array.
962
+ *
963
+ * Invalidates iterators.
964
+ */
965
+ template <class InputIt>
966
+ iterator insert(const_iterator pos, InputIt first, InputIt last);
967
+
968
+ /**
969
+ * Merge objects.
970
+ *
971
+ * Merge two folly dynamic objects.
972
+ * The "update" and "update_missing" functions extend the object by
973
+ * inserting the key/value pairs of mergeObj into the current object.
974
+ * For update, if key is duplicated between the two objects, it
975
+ * will overwrite with the value of the object being inserted (mergeObj).
976
+ * For "update_missing", it will prefer the value in the original object
977
+ *
978
+ * The "merge" function creates a new object consisting of the key/value
979
+ * pairs of both mergeObj1 and mergeObj2
980
+ * If the key is duplicated between the two objects,
981
+ * it will prefer value in the second object (mergeObj2)
982
+ *
983
+ * @methodset Object
984
+ */
985
+ void update(const dynamic& mergeObj);
986
+ /// @copydoc update
987
+ void update_missing(const dynamic& mergeObj1);
988
+ /// @copydoc update
989
+ static dynamic merge(const dynamic& mergeObj1, const dynamic& mergeObj2);
990
+
991
+ /**
992
+ * Merge JSON Patch.
993
+ *
994
+ * Implement recursive version of RFC7386: JSON merge patch. This modifies
995
+ * the current object.
996
+ *
997
+ * @methodset Object
998
+ */
999
+ void merge_patch(const dynamic& patch);
1000
+
1001
+ /**
1002
+ * Compute patch.
1003
+ *
1004
+ * Computes JSON merge patch (RFC7386) needed to mutate from source to target
1005
+ *
1006
+ * @methodset Object
1007
+ */
1008
+ static dynamic merge_diff(const dynamic& source, const dynamic& target);
1009
+
1010
+ /**
1011
+ * @brief Erases elements
1012
+ *
1013
+ * Erase an element from a dynamic object, by key.
1014
+ *
1015
+ * Invalidates iterators to the element being erased.
1016
+ *
1017
+ * Returns the number of elements erased (i.e. 1 or 0).
1018
+ *
1019
+ * @methodset Container
1020
+ */
1021
+ template <typename K>
1022
+ IfIsNonStringDynamicConvertible<K, std::size_t> erase(K&&);
1023
+
1024
+ std::size_t erase(StringPiece);
1025
+
1026
+ /**
1027
+ * @brief Erases elements
1028
+ *
1029
+ * Erase an element from a dynamic object or array, using an
1030
+ * iterator or an iterator range.
1031
+ *
1032
+ * In arrays, invalidates iterators to elements after the element
1033
+ * being erased. In objects, invalidates iterators to the elements
1034
+ * being erased.
1035
+ *
1036
+ * Returns a new iterator to the first element beyond any elements
1037
+ * removed, or end() if there are none. (The iteration order does
1038
+ * not change.)
1039
+ *
1040
+ * @methodset Container
1041
+ */
1042
+ iterator erase(const_iterator it);
1043
+ iterator erase(const_iterator first, const_iterator last);
1044
+
1045
+ const_key_iterator erase(const_key_iterator it);
1046
+ const_key_iterator erase(const_key_iterator first, const_key_iterator last);
1047
+
1048
+ value_iterator erase(const_value_iterator it);
1049
+ value_iterator erase(const_value_iterator first, const_value_iterator last);
1050
+
1051
+ item_iterator erase(const_item_iterator it);
1052
+ item_iterator erase(const_item_iterator first, const_item_iterator last);
1053
+
1054
+ /**
1055
+ * Append elements to an array.
1056
+ *
1057
+ * If this is not an array, throws TypeError.
1058
+ *
1059
+ * Invalidates iterators.
1060
+ *
1061
+ * @methodset Array
1062
+ */
1063
+ void push_back(dynamic const&);
1064
+ void push_back(dynamic&&);
1065
+
1066
+ /**
1067
+ * Remove an element from the back of an array.
1068
+ *
1069
+ * If this is not an array, throws TypeError.
1070
+ *
1071
+ * Does not invalidate iterators.
1072
+ *
1073
+ * @methodset Array
1074
+ */
1075
+ void pop_back();
1076
+
1077
+ /**
1078
+ * Return reference to the last element in an array.
1079
+ *
1080
+ * If this is not an array, throws TypeError.
1081
+ *
1082
+ * @methodset Array
1083
+ */
1084
+ const dynamic& back() const;
1085
+
1086
+ /**
1087
+ * Hash self.
1088
+ *
1089
+ * Get a hash code. This function is called by a std::hash<>
1090
+ * specialization.
1091
+ *
1092
+ * Note: an int64_t and double will both produce the same hash if they are
1093
+ * numerically equal before rounding. So the int64_t 2 will have the same hash
1094
+ * as the double 2.0. But no double will intentionally hash to the hash of a
1095
+ * value that only when rounded will compare as equal. E.g. No double will
1096
+ * intentionally hash to the hash of INT64_MAX (2^63 - 1) given that a double
1097
+ * cannot represent this value.
1098
+ */
1099
+ std::size_t hash() const;
1100
+
1101
+ private:
1102
+ friend struct const_dynamic_view;
1103
+ friend struct dynamic_view;
1104
+ friend struct TypeError;
1105
+ struct ObjectImpl;
1106
+ template <class T>
1107
+ struct TypeInfo;
1108
+ template <class T>
1109
+ struct CompareOp;
1110
+ template <class T>
1111
+ struct GetAddrImpl;
1112
+ template <class T>
1113
+ struct PrintImpl;
1114
+
1115
+ explicit dynamic(Array&& r);
1116
+
1117
+ template <class T>
1118
+ T const& get() const;
1119
+ template <class T>
1120
+ T& get();
1121
+
1122
+ template <class T>
1123
+ T* get_nothrow() & noexcept;
1124
+ template <class T>
1125
+ T const* get_nothrow() const& noexcept;
1126
+ template <class T>
1127
+ T* get_nothrow() && noexcept = delete;
1128
+ template <class T>
1129
+ T* getAddress() noexcept;
1130
+ template <class T>
1131
+ T const* getAddress() const noexcept;
1132
+
1133
+ template <class T>
1134
+ T asImpl() const;
1135
+
1136
+ static char const* typeName(Type);
1137
+ // NOTE: like ~dynamic, destroy() leaves type_ and u_ in an invalid state.
1138
+ void destroy() noexcept;
1139
+ void print(std::ostream&) const;
1140
+ void print_as_pseudo_json(std::ostream&) const; // see json.cpp
1141
+
1142
+ private:
1143
+ Type type_;
1144
+ union Data {
1145
+ explicit Data() : nul(nullptr) {}
1146
+ ~Data() {}
1147
+
1148
+ std::nullptr_t nul;
1149
+ Array array;
1150
+ bool boolean;
1151
+ double doubl;
1152
+ int64_t integer;
1153
+ std::string string;
1154
+
1155
+ /*
1156
+ * Objects are placement new'd here. We have to use a char buffer
1157
+ * because we don't know the type here (F14NodeMap<> with
1158
+ * dynamic would be parameterizing a std:: template with an
1159
+ * incomplete type right now). (Note that in contrast we know it
1160
+ * is ok to do this with fbvector because we own it.)
1161
+ */
1162
+ aligned_storage_for_t<F14NodeMap<int, int>> objectBuffer;
1163
+ } u_;
1164
+ };
1165
+
1166
+ //////////////////////////////////////////////////////////////////////
1167
+
1168
+ /**
1169
+ * This is a helper class for traversing an instance of dynamic and accessing
1170
+ * the values within without risking throwing an exception. The primary use case
1171
+ * is to help write cleaner code when using dynamic instances without strict
1172
+ * schemas - eg. where keys may be missing, or present but with null values,
1173
+ * when expecting non-null values.
1174
+ *
1175
+ * Some examples:
1176
+ *
1177
+ * dynamic twelve = 12;
1178
+ * dynamic str = "string";
1179
+ * dynamic map = dynamic::object("str", str)("twelve", 12);
1180
+ *
1181
+ * dynamic_view view{map};
1182
+ * assert(view.descend("str").string_or("bad") == "string");
1183
+ * assert(view.descend("twelve").int_or(-1) == 12);
1184
+ * assert(view.descend("zzz").string_or("aaa") == "aaa");
1185
+ *
1186
+ * dynamic wrapper = dynamic::object("child", map);
1187
+ * dynamic_view wrapper_view{wrapper};
1188
+ *
1189
+ * assert(wrapper_view.descend("child", "str").string_or("bad") == "string");
1190
+ * assert(wrapper_view.descend("wrong", 0, "huh").value_or(nullptr).isNull());
1191
+ */
1192
+ struct const_dynamic_view {
1193
+ // Empty view.
1194
+ const_dynamic_view() noexcept = default;
1195
+
1196
+ // Basic view constructor. Creates a view of the referenced dynamic.
1197
+ /* implicit */ const_dynamic_view(dynamic const& d) noexcept;
1198
+
1199
+ const_dynamic_view(const_dynamic_view const&) noexcept = default;
1200
+ const_dynamic_view& operator=(const_dynamic_view const&) noexcept = default;
1201
+
1202
+ // Allow conversion from mutable to immutable view.
1203
+ /* implicit */ const_dynamic_view(dynamic_view& view) noexcept;
1204
+ /* implicit */ const_dynamic_view& operator=(dynamic_view& view) noexcept;
1205
+
1206
+ // Never view a temporary.
1207
+ explicit const_dynamic_view(dynamic&&) = delete;
1208
+
1209
+ // Returns true if this view is backed by a valid dynamic, false otherwise.
1210
+ explicit operator bool() const noexcept;
1211
+
1212
+ // Returns true if this view is not backed by a dynamic, false otherwise.
1213
+ bool empty() const noexcept;
1214
+
1215
+ // Resets the view to a default constructed state not backed by any dynamic.
1216
+ void reset() noexcept;
1217
+
1218
+ // Traverse a dynamic by repeatedly applying operator[].
1219
+ // If all keys are valid, then the returned view will be backed by the
1220
+ // accessed dynamic, otherwise it will be empty.
1221
+ template <typename Key, typename... Keys>
1222
+ const_dynamic_view descend(
1223
+ Key const& key, Keys const&... keys) const noexcept;
1224
+
1225
+ // Untyped accessor. Returns a copy of the viewed dynamic, or the default
1226
+ // value given if this view is empty, or a null dynamic otherwise.
1227
+ dynamic value_or(dynamic&& val = nullptr) const;
1228
+
1229
+ // The following accessors provide a read-only exception-safe API for
1230
+ // accessing the underlying viewed dynamic. Unlike the main dynamic APIs,
1231
+ // these follow a stricter contract, which also requires a caller-provided
1232
+ // default argument.
1233
+ // - TypeError will not be thrown. primitive accessors further are marked
1234
+ // noexcept.
1235
+ // - No type conversions are performed. If the viewed dynamic does not match
1236
+ // the requested type, the default argument is returned instead.
1237
+ // - If the view is empty, the default argument is returned instead.
1238
+ std::string string_or(char const* val) const;
1239
+ std::string string_or(std::string val) const;
1240
+ template <
1241
+ typename Stringish,
1242
+ typename = std::enable_if_t<
1243
+ is_detected_v<dynamic_detail::detect_construct_string, Stringish>>>
1244
+ std::string string_or(Stringish&& val) const;
1245
+
1246
+ double double_or(double val) const noexcept;
1247
+
1248
+ int64_t int_or(int64_t val) const noexcept;
1249
+
1250
+ bool bool_or(bool val) const noexcept;
1251
+
1252
+ protected:
1253
+ /* implicit */ const_dynamic_view(dynamic const* d) noexcept;
1254
+
1255
+ template <typename Key1, typename Key2, typename... Keys>
1256
+ dynamic const* descend_(
1257
+ Key1 const& key1, Key2 const& key2, Keys const&... keys) const noexcept;
1258
+ template <typename Key>
1259
+ dynamic const* descend_(Key const& key) const noexcept;
1260
+ template <typename Key>
1261
+ dynamic::IfIsNonStringDynamicConvertible<Key, dynamic const*>
1262
+ descend_unchecked_(Key const& key) const noexcept;
1263
+ dynamic const* descend_unchecked_(StringPiece key) const noexcept;
1264
+
1265
+ dynamic const* d_ = nullptr;
1266
+
1267
+ // Internal helper method for accessing a value by a type.
1268
+ template <typename T, typename... Args>
1269
+ T get_copy(Args&&... args) const;
1270
+ };
1271
+
1272
+ struct dynamic_view : public const_dynamic_view {
1273
+ // Empty view.
1274
+ dynamic_view() noexcept = default;
1275
+
1276
+ // dynamic_view can be used to view non-const dynamics only.
1277
+ /* implicit */ dynamic_view(dynamic& d) noexcept;
1278
+
1279
+ dynamic_view(dynamic_view const&) noexcept = default;
1280
+ dynamic_view& operator=(dynamic_view const&) noexcept = default;
1281
+
1282
+ // dynamic_view can not view const dynamics.
1283
+ explicit dynamic_view(dynamic const&) = delete;
1284
+ // dynamic_view can not be initialized from a const_dynamic_view
1285
+ explicit dynamic_view(const_dynamic_view const&) = delete;
1286
+
1287
+ // Like const_dynamic_view, but returns a dynamic_view.
1288
+ template <typename Key, typename... Keys>
1289
+ dynamic_view descend(Key const& key, Keys const&... keys) const noexcept;
1290
+
1291
+ // dynamic_view provides APIs which can mutably access the backed dynamic.
1292
+ // 'mutably access' in this case means extracting the viewed dynamic or
1293
+ // value to omit unnecessary copies. It does not mean writing through to
1294
+ // the backed dynamic - this is still just a view, not a mutator.
1295
+
1296
+ // Moves the viewed dynamic into the returned value via std::move. If the view
1297
+ // is not backed by a dynamic, returns a provided default, or a null dynamic.
1298
+ // Postconditions for the backed dynamic are the same as for any dynamic that
1299
+ // is moved-from. this->empty() == false.
1300
+ dynamic move_value_or(dynamic&& val = nullptr) noexcept;
1301
+
1302
+ // Specific optimization for strings which can allocate, unlike the other
1303
+ // scalar types. If the viewed dynamic is a string, the string value is
1304
+ // std::move'd to initialize a new instance which is returned.
1305
+ std::string move_string_or(std::string val) noexcept;
1306
+ std::string move_string_or(char const* val);
1307
+ template <
1308
+ typename Stringish,
1309
+ typename = std::enable_if_t<
1310
+ is_detected_v<dynamic_detail::detect_construct_string, Stringish>>>
1311
+ std::string move_string_or(Stringish&& val);
1312
+
1313
+ private:
1314
+ template <typename T, typename... Args>
1315
+ T get_move(Args&&... args);
1316
+ };
1317
+
1318
+ // A helper method which returns a contextually-correct dynamic_view for the
1319
+ // given view. If passed a dynamic const&, returns a const_dynamic_view, and
1320
+ // if passed a dynamic&, returns a dynamic_view.
1321
+ inline auto make_dynamic_view(dynamic const& d) {
1322
+ return const_dynamic_view{d};
1323
+ }
1324
+
1325
+ inline auto make_dynamic_view(dynamic& d) {
1326
+ return dynamic_view{d};
1327
+ }
1328
+
1329
+ auto make_dynamic_view(dynamic&&) = delete;
1330
+
1331
+ //////////////////////////////////////////////////////////////////////
1332
+
1333
+ } // namespace folly
1334
+
1335
+ namespace std {
1336
+
1337
+ template <>
1338
+ struct hash<::folly::dynamic> {
1339
+ using folly_is_avalanching = std::true_type;
1340
+
1341
+ size_t operator()(::folly::dynamic const& d) const { return d.hash(); }
1342
+ };
1343
+
1344
+ } // namespace std
1345
+
1346
+ #include <folly/json/dynamic-inl.h>