pythonnative 0.40.0__cp313-cp313-win_amd64.whl

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 (418) hide show
  1. pythonnative/__init__.py +411 -0
  2. pythonnative/_ios_log.py +92 -0
  3. pythonnative/_yoga.cp313-win_amd64.pyd +0 -0
  4. pythonnative/alerts.py +236 -0
  5. pythonnative/animated.py +1687 -0
  6. pythonnative/animation_graph.py +78 -0
  7. pythonnative/appearance.py +124 -0
  8. pythonnative/bootstrap.py +100 -0
  9. pythonnative/bridge/__init__.py +302 -0
  10. pythonnative/bridge/android.py +78 -0
  11. pythonnative/bridge/codec.py +170 -0
  12. pythonnative/bridge/commits.py +114 -0
  13. pythonnative/bridge/fake.py +243 -0
  14. pythonnative/bridge/ios.py +138 -0
  15. pythonnative/bridge/web.py +489 -0
  16. pythonnative/cli/__init__.py +7 -0
  17. pythonnative/cli/pn.py +1214 -0
  18. pythonnative/component.py +271 -0
  19. pythonnative/components/__init__.py +111 -0
  20. pythonnative/components/_base.py +166 -0
  21. pythonnative/components/controls.py +521 -0
  22. pythonnative/components/layout.py +518 -0
  23. pythonnative/components/lists.py +785 -0
  24. pythonnative/components/media.py +204 -0
  25. pythonnative/components/overlays.py +107 -0
  26. pythonnative/components/pressable.py +252 -0
  27. pythonnative/components/structural.py +167 -0
  28. pythonnative/components/text.py +291 -0
  29. pythonnative/devclient.py +824 -0
  30. pythonnative/devserver/__init__.py +34 -0
  31. pythonnative/devserver/server.py +718 -0
  32. pythonnative/devserver/static/animation_graph.js +82 -0
  33. pythonnative/devserver/static/bridge.js +147 -0
  34. pythonnative/devserver/static/colors.js +70 -0
  35. pythonnative/devserver/static/host.js +552 -0
  36. pythonnative/devserver/static/index.html +60 -0
  37. pythonnative/devserver/static/layout.js +85 -0
  38. pythonnative/devserver/static/preview.css +415 -0
  39. pythonnative/devserver/static/renderer.js +1994 -0
  40. pythonnative/devserver/static/shell.js +345 -0
  41. pythonnative/devserver/static/yoga/LICENSE +21 -0
  42. pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +75 -0
  43. pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +189 -0
  44. pythonnative/devserver/static/yoga/src/generated/YGEnums.js +211 -0
  45. pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +1 -0
  46. pythonnative/devserver/static/yoga/src/index.d.ts +12 -0
  47. pythonnative/devserver/static/yoga/src/index.js +16 -0
  48. pythonnative/devserver/static/yoga/src/index.js.map +1 -0
  49. pythonnative/devserver/static/yoga/src/load.d.ts +11 -0
  50. pythonnative/devserver/static/yoga/src/load.js +17 -0
  51. pythonnative/devserver/static/yoga/src/load.js.map +1 -0
  52. pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +155 -0
  53. pythonnative/devserver/static/yoga/src/wrapAssembly.js +125 -0
  54. pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +1 -0
  55. pythonnative/devserver/watcher.py +267 -0
  56. pythonnative/devserver/ws.py +421 -0
  57. pythonnative/diagnostics.py +241 -0
  58. pythonnative/element.py +159 -0
  59. pythonnative/equality.py +19 -0
  60. pythonnative/events.py +231 -0
  61. pythonnative/gestures.py +1333 -0
  62. pythonnative/hooks.py +1621 -0
  63. pythonnative/hosts/__init__.py +63 -0
  64. pythonnative/hosts/base.py +596 -0
  65. pythonnative/hosts/native.py +302 -0
  66. pythonnative/hot_reload.py +585 -0
  67. pythonnative/layout.py +328 -0
  68. pythonnative/mutations.py +142 -0
  69. pythonnative/native/android/build.gradle +52 -0
  70. pythonnative/native/android/gradle.properties +3 -0
  71. pythonnative/native/android/settings.gradle +12 -0
  72. pythonnative/native/android/src/main/AndroidManifest.xml +11 -0
  73. pythonnative/native/android/src/main/cpp/CMakeLists.txt +9 -0
  74. pythonnative/native/android/src/main/cpp/yoga_jni.cpp +52 -0
  75. pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +5 -0
  76. pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +3705 -0
  77. pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +129 -0
  78. pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +261 -0
  79. pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +20 -0
  80. pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +108 -0
  81. pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +141 -0
  82. pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +257 -0
  83. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +106 -0
  84. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +175 -0
  85. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +40 -0
  86. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +33 -0
  87. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +82 -0
  88. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +80 -0
  89. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +117 -0
  90. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +74 -0
  91. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +37 -0
  92. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +32 -0
  93. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +213 -0
  94. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +69 -0
  95. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +186 -0
  96. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +123 -0
  97. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +141 -0
  98. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +162 -0
  99. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +134 -0
  100. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +201 -0
  101. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +86 -0
  102. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +55 -0
  103. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +122 -0
  104. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +110 -0
  105. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +214 -0
  106. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +113 -0
  107. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +52 -0
  108. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +131 -0
  109. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +250 -0
  110. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +233 -0
  111. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +355 -0
  112. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +159 -0
  113. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +149 -0
  114. pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +233 -0
  115. pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +127 -0
  116. pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +527 -0
  117. pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +145 -0
  118. pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +29 -0
  119. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +73 -0
  120. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +316 -0
  121. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +61 -0
  122. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +200 -0
  123. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +158 -0
  124. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +100 -0
  125. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +99 -0
  126. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +89 -0
  127. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +178 -0
  128. pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +16 -0
  129. pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +188 -0
  130. pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +80 -0
  131. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +48 -0
  132. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +76 -0
  133. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +18 -0
  134. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +49 -0
  135. pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +75 -0
  136. pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +197 -0
  137. pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +47 -0
  138. pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +78 -0
  139. pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +89 -0
  140. pythonnative/native/ios/Package.swift +23 -0
  141. pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +199 -0
  142. pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +312 -0
  143. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +255 -0
  144. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +104 -0
  145. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +142 -0
  146. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +166 -0
  147. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +53 -0
  148. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +207 -0
  149. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +173 -0
  150. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +183 -0
  151. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +56 -0
  152. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +281 -0
  153. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +222 -0
  154. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +243 -0
  155. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +114 -0
  156. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +107 -0
  157. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +197 -0
  158. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +106 -0
  159. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +297 -0
  160. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +230 -0
  161. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +82 -0
  162. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +86 -0
  163. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +87 -0
  164. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +340 -0
  165. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +155 -0
  166. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +124 -0
  167. pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +1 -0
  168. pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +3775 -0
  169. pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +46 -0
  170. pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +260 -0
  171. pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +173 -0
  172. pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +92 -0
  173. pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +80 -0
  174. pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +174 -0
  175. pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +177 -0
  176. pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +168 -0
  177. pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +266 -0
  178. pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +251 -0
  179. pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +8 -0
  180. pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +46 -0
  181. pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +237 -0
  182. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +46 -0
  183. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +173 -0
  184. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +47 -0
  185. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +51 -0
  186. pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +26 -0
  187. pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +50 -0
  188. pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +86 -0
  189. pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +101 -0
  190. pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +126 -0
  191. pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +111 -0
  192. pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +91 -0
  193. pythonnative/native/yoga/LICENSE +21 -0
  194. pythonnative/native/yoga/Package.swift +9 -0
  195. pythonnative/native/yoga/VENDORED.md +2 -0
  196. pythonnative/native/yoga/include/PNStyle.h +10 -0
  197. pythonnative/native/yoga/include/module.modulemap +5 -0
  198. pythonnative/native/yoga/include/yoga/YGConfig.h +158 -0
  199. pythonnative/native/yoga/include/yoga/YGEnums.h +142 -0
  200. pythonnative/native/yoga/include/yoga/YGMacros.h +99 -0
  201. pythonnative/native/yoga/include/yoga/YGNode.h +304 -0
  202. pythonnative/native/yoga/include/yoga/YGNodeLayout.h +35 -0
  203. pythonnative/native/yoga/include/yoga/YGNodeStyle.h +130 -0
  204. pythonnative/native/yoga/include/yoga/YGPixelGrid.h +29 -0
  205. pythonnative/native/yoga/include/yoga/YGValue.h +84 -0
  206. pythonnative/native/yoga/include/yoga/Yoga.h +21 -0
  207. pythonnative/native/yoga/python.cpp +16 -0
  208. pythonnative/native/yoga/style.cpp +272 -0
  209. pythonnative/native/yoga/yoga/CMakeLists.txt +41 -0
  210. pythonnative/native/yoga/yoga/YGConfig.cpp +92 -0
  211. pythonnative/native/yoga/yoga/YGConfig.h +158 -0
  212. pythonnative/native/yoga/yoga/YGEnums.cpp +262 -0
  213. pythonnative/native/yoga/yoga/YGEnums.h +142 -0
  214. pythonnative/native/yoga/yoga/YGMacros.h +99 -0
  215. pythonnative/native/yoga/yoga/YGNode.cpp +366 -0
  216. pythonnative/native/yoga/yoga/YGNode.h +304 -0
  217. pythonnative/native/yoga/yoga/YGNodeLayout.cpp +92 -0
  218. pythonnative/native/yoga/yoga/YGNodeLayout.h +35 -0
  219. pythonnative/native/yoga/yoga/YGNodeStyle.cpp +405 -0
  220. pythonnative/native/yoga/yoga/YGNodeStyle.h +130 -0
  221. pythonnative/native/yoga/yoga/YGPixelGrid.cpp +22 -0
  222. pythonnative/native/yoga/yoga/YGPixelGrid.h +29 -0
  223. pythonnative/native/yoga/yoga/YGValue.cpp +20 -0
  224. pythonnative/native/yoga/yoga/YGValue.h +84 -0
  225. pythonnative/native/yoga/yoga/Yoga.h +21 -0
  226. pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +563 -0
  227. pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +41 -0
  228. pythonnative/native/yoga/yoga/algorithm/Align.h +72 -0
  229. pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +78 -0
  230. pythonnative/native/yoga/yoga/algorithm/Baseline.h +21 -0
  231. pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +79 -0
  232. pythonnative/native/yoga/yoga/algorithm/Cache.cpp +121 -0
  233. pythonnative/native/yoga/yoga/algorithm/Cache.h +30 -0
  234. pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +2428 -0
  235. pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +38 -0
  236. pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +120 -0
  237. pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +124 -0
  238. pythonnative/native/yoga/yoga/algorithm/FlexLine.h +75 -0
  239. pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +132 -0
  240. pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +29 -0
  241. pythonnative/native/yoga/yoga/algorithm/SizingMode.h +73 -0
  242. pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +44 -0
  243. pythonnative/native/yoga/yoga/config/Config.cpp +135 -0
  244. pythonnative/native/yoga/yoga/config/Config.h +92 -0
  245. pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +53 -0
  246. pythonnative/native/yoga/yoga/debug/AssertFatal.h +29 -0
  247. pythonnative/native/yoga/yoga/debug/Log.cpp +107 -0
  248. pythonnative/native/yoga/yoga/debug/Log.h +34 -0
  249. pythonnative/native/yoga/yoga/enums/Align.h +47 -0
  250. pythonnative/native/yoga/yoga/enums/BoxSizing.h +40 -0
  251. pythonnative/native/yoga/yoga/enums/Dimension.h +40 -0
  252. pythonnative/native/yoga/yoga/enums/Direction.h +41 -0
  253. pythonnative/native/yoga/yoga/enums/Display.h +41 -0
  254. pythonnative/native/yoga/yoga/enums/Edge.h +47 -0
  255. pythonnative/native/yoga/yoga/enums/Errata.h +41 -0
  256. pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +39 -0
  257. pythonnative/native/yoga/yoga/enums/FlexDirection.h +42 -0
  258. pythonnative/native/yoga/yoga/enums/Gutter.h +41 -0
  259. pythonnative/native/yoga/yoga/enums/Justify.h +44 -0
  260. pythonnative/native/yoga/yoga/enums/LogLevel.h +44 -0
  261. pythonnative/native/yoga/yoga/enums/MeasureMode.h +41 -0
  262. pythonnative/native/yoga/yoga/enums/NodeType.h +40 -0
  263. pythonnative/native/yoga/yoga/enums/Overflow.h +41 -0
  264. pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +21 -0
  265. pythonnative/native/yoga/yoga/enums/PositionType.h +41 -0
  266. pythonnative/native/yoga/yoga/enums/Unit.h +42 -0
  267. pythonnative/native/yoga/yoga/enums/Wrap.h +41 -0
  268. pythonnative/native/yoga/yoga/enums/YogaEnums.h +85 -0
  269. pythonnative/native/yoga/yoga/event/event.cpp +87 -0
  270. pythonnative/native/yoga/yoga/event/event.h +130 -0
  271. pythonnative/native/yoga/yoga/module.modulemap +21 -0
  272. pythonnative/native/yoga/yoga/node/CachedMeasurement.h +53 -0
  273. pythonnative/native/yoga/yoga/node/LayoutResults.cpp +48 -0
  274. pythonnative/native/yoga/yoga/node/LayoutResults.h +122 -0
  275. pythonnative/native/yoga/yoga/node/LayoutableChildren.h +148 -0
  276. pythonnative/native/yoga/yoga/node/Node.cpp +443 -0
  277. pythonnative/native/yoga/yoga/node/Node.h +337 -0
  278. pythonnative/native/yoga/yoga/numeric/Comparison.h +81 -0
  279. pythonnative/native/yoga/yoga/numeric/FloatOptional.h +93 -0
  280. pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +133 -0
  281. pythonnative/native/yoga/yoga/style/Style.h +757 -0
  282. pythonnative/native/yoga/yoga/style/StyleLength.h +107 -0
  283. pythonnative/native/yoga/yoga/style/StyleValueHandle.h +98 -0
  284. pythonnative/native/yoga/yoga/style/StyleValuePool.h +127 -0
  285. pythonnative/native_modules/__init__.py +124 -0
  286. pythonnative/native_modules/app_state.py +99 -0
  287. pythonnative/native_modules/battery.py +75 -0
  288. pythonnative/native_modules/biometrics.py +42 -0
  289. pythonnative/native_modules/camera.py +65 -0
  290. pythonnative/native_modules/clipboard.py +46 -0
  291. pythonnative/native_modules/fallback.py +324 -0
  292. pythonnative/native_modules/file_system.py +145 -0
  293. pythonnative/native_modules/haptics.py +75 -0
  294. pythonnative/native_modules/linking.py +123 -0
  295. pythonnative/native_modules/location.py +75 -0
  296. pythonnative/native_modules/net_info.py +112 -0
  297. pythonnative/native_modules/notifications.py +129 -0
  298. pythonnative/native_modules/permissions.py +108 -0
  299. pythonnative/native_modules/registry.py +526 -0
  300. pythonnative/native_modules/secure_store.py +52 -0
  301. pythonnative/native_modules/share.py +51 -0
  302. pythonnative/native_views/__init__.py +375 -0
  303. pythonnative/native_views/base.py +316 -0
  304. pythonnative/native_views/bridge_backend.py +277 -0
  305. pythonnative/navigation/__init__.py +103 -0
  306. pythonnative/navigation/container.py +154 -0
  307. pythonnative/navigation/handle.py +540 -0
  308. pythonnative/navigation/hooks.py +133 -0
  309. pythonnative/navigation/host.py +58 -0
  310. pythonnative/navigation/linking.py +200 -0
  311. pythonnative/navigation/navigators.py +659 -0
  312. pythonnative/navigation/screen.py +149 -0
  313. pythonnative/navigation/state.py +269 -0
  314. pythonnative/net.py +248 -0
  315. pythonnative/platform.py +166 -0
  316. pythonnative/platform_metrics.py +252 -0
  317. pythonnative/preview.py +287 -0
  318. pythonnative/profiling.py +101 -0
  319. pythonnative/project/__init__.py +68 -0
  320. pythonnative/project/android.py +557 -0
  321. pythonnative/project/builder.py +817 -0
  322. pythonnative/project/config.py +773 -0
  323. pythonnative/project/deps.py +719 -0
  324. pythonnative/project/devices.py +304 -0
  325. pythonnative/project/doctor.py +283 -0
  326. pythonnative/project/fingerprint.py +171 -0
  327. pythonnative/project/icons.py +247 -0
  328. pythonnative/project/ios.py +325 -0
  329. pythonnative/project/lockfile.py +100 -0
  330. pythonnative/project/permissions.py +361 -0
  331. pythonnative/project/plugins.py +519 -0
  332. pythonnative/project/runtime_assets.py +183 -0
  333. pythonnative/py.typed +0 -0
  334. pythonnative/query.py +153 -0
  335. pythonnative/reconciler/__init__.py +29 -0
  336. pythonnative/reconciler/boundaries.py +375 -0
  337. pythonnative/reconciler/children.py +88 -0
  338. pythonnative/reconciler/core.py +1165 -0
  339. pythonnative/reconciler/layout_pass.py +393 -0
  340. pythonnative/reconciler/vnode.py +266 -0
  341. pythonnative/refresh.py +55 -0
  342. pythonnative/runtime.py +306 -0
  343. pythonnative/scheduler.py +159 -0
  344. pythonnative/sdk/__init__.py +153 -0
  345. pythonnative/sdk/_components.py +427 -0
  346. pythonnative/sdk/builtins.py +91 -0
  347. pythonnative/sdk/codegen.py +149 -0
  348. pythonnative/sdk/module_codegen.py +184 -0
  349. pythonnative/sdk/schema.py +224 -0
  350. pythonnative/sdk/templates/contracts.kt +46 -0
  351. pythonnative/sdk/templates/contracts.swift +46 -0
  352. pythonnative/storage.py +184 -0
  353. pythonnative/style.py +841 -0
  354. pythonnative/suspense.py +183 -0
  355. pythonnative/templates/android_template/app/build.gradle +75 -0
  356. pythonnative/templates/android_template/app/proguard-rules.pro +21 -0
  357. pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +24 -0
  358. pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +7 -0
  359. pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +32 -0
  360. pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +130 -0
  361. pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +13 -0
  362. pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
  363. pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +30 -0
  364. pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +10 -0
  365. pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +6 -0
  366. pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +6 -0
  367. pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  368. pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  369. pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  370. pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  371. pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  372. pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  373. pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  374. pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  375. pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  376. pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  377. pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +22 -0
  378. pythonnative/templates/android_template/app/src/main/res/values/colors.xml +5 -0
  379. pythonnative/templates/android_template/app/src/main/res/values/strings.xml +5 -0
  380. pythonnative/templates/android_template/app/src/main/res/values/themes.xml +9 -0
  381. pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +7 -0
  382. pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +13 -0
  383. pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +19 -0
  384. pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +17 -0
  385. pythonnative/templates/android_template/build.gradle +10 -0
  386. pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  387. pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +6 -0
  388. pythonnative/templates/android_template/gradle.properties +23 -0
  389. pythonnative/templates/android_template/gradlew +185 -0
  390. pythonnative/templates/android_template/gradlew.bat +89 -0
  391. pythonnative/templates/android_template/settings.gradle +17 -0
  392. pythonnative/templates/ios_template/ios_template/AppDelegate.swift +51 -0
  393. pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  394. pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +13 -0
  395. pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +6 -0
  396. pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +25 -0
  397. pythonnative/templates/ios_template/ios_template/BridgingHeader.h +14 -0
  398. pythonnative/templates/ios_template/ios_template/Info.plist +28 -0
  399. pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +390 -0
  400. pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +61 -0
  401. pythonnative/templates/ios_template/ios_template/ViewController.swift +23 -0
  402. pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +745 -0
  403. pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  404. pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +36 -0
  405. pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +41 -0
  406. pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +32 -0
  407. pythonnative/testing/__init__.py +53 -0
  408. pythonnative/testing/backend.py +276 -0
  409. pythonnative/testing/harness.py +369 -0
  410. pythonnative/utils.py +145 -0
  411. pythonnative-0.40.0.dist-info/DELVEWHEEL +2 -0
  412. pythonnative-0.40.0.dist-info/METADATA +150 -0
  413. pythonnative-0.40.0.dist-info/RECORD +418 -0
  414. pythonnative-0.40.0.dist-info/WHEEL +5 -0
  415. pythonnative-0.40.0.dist-info/entry_points.txt +2 -0
  416. pythonnative-0.40.0.dist-info/licenses/LICENSE +21 -0
  417. pythonnative-0.40.0.dist-info/top_level.txt +1 -0
  418. pythonnative.libs/msvcp140-a4c2229bdc2a2a630acdc095b4d86008.dll +0 -0
@@ -0,0 +1,337 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <cstdint>
11
+ #include <cstdio>
12
+ #include <vector>
13
+
14
+ #include <yoga/Yoga.h>
15
+ #include <yoga/node/LayoutableChildren.h>
16
+
17
+ #include <yoga/config/Config.h>
18
+ #include <yoga/enums/Dimension.h>
19
+ #include <yoga/enums/Direction.h>
20
+ #include <yoga/enums/Edge.h>
21
+ #include <yoga/enums/Errata.h>
22
+ #include <yoga/enums/MeasureMode.h>
23
+ #include <yoga/enums/NodeType.h>
24
+ #include <yoga/enums/PhysicalEdge.h>
25
+ #include <yoga/node/LayoutResults.h>
26
+ #include <yoga/style/Style.h>
27
+
28
+ // Tag struct used to form the opaque YGNodeRef for the public C API
29
+ struct YGNode {};
30
+
31
+ namespace facebook::yoga {
32
+
33
+ class YG_EXPORT Node : public ::YGNode {
34
+ public:
35
+ using LayoutableChildren = yoga::LayoutableChildren<Node>;
36
+ Node();
37
+ explicit Node(const Config* config);
38
+
39
+ Node(Node&& node) noexcept;
40
+
41
+ // Does not expose true value semantics, as children are not cloned eagerly.
42
+ // Should we remove this?
43
+ Node(const Node& node) = default;
44
+
45
+ // assignment means potential leaks of existing children, or alternatively
46
+ // freeing unowned memory, double free, or freeing stack memory.
47
+ Node& operator=(const Node&) = delete;
48
+
49
+ // Getters
50
+ void* getContext() const {
51
+ return context_;
52
+ }
53
+
54
+ bool alwaysFormsContainingBlock() const {
55
+ return alwaysFormsContainingBlock_;
56
+ }
57
+
58
+ bool getHasNewLayout() const {
59
+ return hasNewLayout_;
60
+ }
61
+
62
+ NodeType getNodeType() const {
63
+ return nodeType_;
64
+ }
65
+
66
+ bool hasMeasureFunc() const noexcept {
67
+ return measureFunc_ != nullptr;
68
+ }
69
+
70
+ YGSize measure(
71
+ float availableWidth,
72
+ MeasureMode widthMode,
73
+ float availableHeight,
74
+ MeasureMode heightMode);
75
+
76
+ bool hasBaselineFunc() const noexcept {
77
+ return baselineFunc_ != nullptr;
78
+ }
79
+
80
+ float baseline(float width, float height) const;
81
+
82
+ float dimensionWithMargin(FlexDirection axis, float widthSize);
83
+
84
+ bool isLayoutDimensionDefined(FlexDirection axis);
85
+
86
+ /**
87
+ * Whether the node has a "definite length" along the given axis.
88
+ * https://www.w3.org/TR/css-sizing-3/#definite
89
+ */
90
+ inline bool hasDefiniteLength(Dimension dimension, float ownerSize) {
91
+ auto usedValue = getProcessedDimension(dimension).resolve(ownerSize);
92
+ return usedValue.isDefined() && usedValue.unwrap() >= 0.0f;
93
+ }
94
+
95
+ bool hasErrata(Errata errata) const {
96
+ return config_->hasErrata(errata);
97
+ }
98
+
99
+ YGDirtiedFunc getDirtiedFunc() const {
100
+ return dirtiedFunc_;
101
+ }
102
+
103
+ // For Performance reasons passing as reference.
104
+ Style& style() {
105
+ return style_;
106
+ }
107
+
108
+ const Style& style() const {
109
+ return style_;
110
+ }
111
+
112
+ // For Performance reasons passing as reference.
113
+ LayoutResults& getLayout() {
114
+ return layout_;
115
+ }
116
+
117
+ const LayoutResults& getLayout() const {
118
+ return layout_;
119
+ }
120
+
121
+ size_t getLineIndex() const {
122
+ return lineIndex_;
123
+ }
124
+
125
+ bool isReferenceBaseline() const {
126
+ return isReferenceBaseline_;
127
+ }
128
+
129
+ // returns the Node that owns this Node. An owner is used to identify
130
+ // the YogaTree that a Node belongs to. This method will return the parent
131
+ // of the Node when a Node only belongs to one YogaTree or nullptr when
132
+ // the Node is shared between two or more YogaTrees.
133
+ Node* getOwner() const {
134
+ return owner_;
135
+ }
136
+
137
+ const std::vector<Node*>& getChildren() const {
138
+ return children_;
139
+ }
140
+
141
+ Node* getChild(size_t index) const {
142
+ return children_.at(index);
143
+ }
144
+
145
+ size_t getChildCount() const {
146
+ return children_.size();
147
+ }
148
+
149
+ LayoutableChildren getLayoutChildren() const {
150
+ return LayoutableChildren(this);
151
+ }
152
+
153
+ size_t getLayoutChildCount() const {
154
+ if (contentsChildrenCount_ == 0) {
155
+ return children_.size();
156
+ } else {
157
+ size_t count = 0;
158
+ for (auto iter = getLayoutChildren().begin();
159
+ iter != getLayoutChildren().end();
160
+ iter++) {
161
+ count++;
162
+ }
163
+ return count;
164
+ }
165
+ }
166
+
167
+ const Config* getConfig() const {
168
+ return config_;
169
+ }
170
+
171
+ bool isDirty() const {
172
+ return isDirty_;
173
+ }
174
+
175
+ Style::Length getProcessedDimension(Dimension dimension) const {
176
+ return processedDimensions_[static_cast<size_t>(dimension)];
177
+ }
178
+
179
+ FloatOptional getResolvedDimension(
180
+ Direction direction,
181
+ Dimension dimension,
182
+ float referenceLength,
183
+ float ownerWidth) const {
184
+ FloatOptional value =
185
+ getProcessedDimension(dimension).resolve(referenceLength);
186
+ if (style_.boxSizing() == BoxSizing::BorderBox) {
187
+ return value;
188
+ }
189
+
190
+ FloatOptional dimensionPaddingAndBorder =
191
+ FloatOptional{style_.computePaddingAndBorderForDimension(
192
+ direction, dimension, ownerWidth)};
193
+
194
+ return value +
195
+ (dimensionPaddingAndBorder.isDefined() ? dimensionPaddingAndBorder
196
+ : FloatOptional{0.0});
197
+ }
198
+
199
+ // Setters
200
+
201
+ void setContext(void* context) {
202
+ context_ = context;
203
+ }
204
+
205
+ void setAlwaysFormsContainingBlock(bool alwaysFormsContainingBlock) {
206
+ alwaysFormsContainingBlock_ = alwaysFormsContainingBlock;
207
+ }
208
+
209
+ void setHasNewLayout(bool hasNewLayout) {
210
+ hasNewLayout_ = hasNewLayout;
211
+ }
212
+
213
+ void setNodeType(NodeType nodeType) {
214
+ nodeType_ = nodeType;
215
+ }
216
+
217
+ void setMeasureFunc(YGMeasureFunc measureFunc);
218
+
219
+ void setBaselineFunc(YGBaselineFunc baseLineFunc) {
220
+ baselineFunc_ = baseLineFunc;
221
+ }
222
+
223
+ void setDirtiedFunc(YGDirtiedFunc dirtiedFunc) {
224
+ dirtiedFunc_ = dirtiedFunc;
225
+ }
226
+
227
+ void setStyle(const Style& style) {
228
+ style_ = style;
229
+ }
230
+
231
+ void setLayout(const LayoutResults& layout) {
232
+ layout_ = layout;
233
+ }
234
+
235
+ void setLineIndex(size_t lineIndex) {
236
+ lineIndex_ = lineIndex;
237
+ }
238
+
239
+ void setIsReferenceBaseline(bool isReferenceBaseline) {
240
+ isReferenceBaseline_ = isReferenceBaseline;
241
+ }
242
+
243
+ void setOwner(Node* owner) {
244
+ owner_ = owner;
245
+ }
246
+
247
+ void setChildren(const std::vector<Node*>& children) {
248
+ children_ = children;
249
+ }
250
+
251
+ // TODO: rvalue override for setChildren
252
+
253
+ void setConfig(Config* config);
254
+
255
+ void setDirty(bool isDirty);
256
+ void setLayoutLastOwnerDirection(Direction direction);
257
+ void setLayoutComputedFlexBasis(FloatOptional computedFlexBasis);
258
+ void setLayoutComputedFlexBasisGeneration(
259
+ uint32_t computedFlexBasisGeneration);
260
+ void setLayoutMeasuredDimension(float measuredDimension, Dimension dimension);
261
+ void setLayoutHadOverflow(bool hadOverflow);
262
+ void setLayoutDimension(float LengthValue, Dimension dimension);
263
+ void setLayoutDirection(Direction direction);
264
+ void setLayoutMargin(float margin, PhysicalEdge edge);
265
+ void setLayoutBorder(float border, PhysicalEdge edge);
266
+ void setLayoutPadding(float padding, PhysicalEdge edge);
267
+ void setLayoutPosition(float position, PhysicalEdge edge);
268
+ void setPosition(Direction direction, float ownerWidth, float ownerHeight);
269
+
270
+ // Other methods
271
+ Style::Length processFlexBasis() const;
272
+ FloatOptional resolveFlexBasis(
273
+ Direction direction,
274
+ FlexDirection flexDirection,
275
+ float referenceLength,
276
+ float ownerWidth) const;
277
+ void processDimensions();
278
+ Direction resolveDirection(Direction ownerDirection);
279
+ void clearChildren();
280
+ /// Replaces the occurrences of oldChild with newChild
281
+ void replaceChild(Node* oldChild, Node* newChild);
282
+ void replaceChild(Node* child, size_t index);
283
+ void insertChild(Node* child, size_t index);
284
+ /// Removes the first occurrence of child
285
+ bool removeChild(Node* child);
286
+ void removeChild(size_t index);
287
+
288
+ void cloneChildrenIfNeeded();
289
+ void markDirtyAndPropagate();
290
+ float resolveFlexGrow() const;
291
+ float resolveFlexShrink() const;
292
+ bool isNodeFlexible();
293
+ void reset();
294
+
295
+ private:
296
+ // Used to allow resetting the node
297
+ Node& operator=(Node&&) noexcept = default;
298
+
299
+ float relativePosition(
300
+ FlexDirection axis,
301
+ Direction direction,
302
+ float axisSize) const;
303
+
304
+ void useWebDefaults() {
305
+ style_.setFlexDirection(FlexDirection::Row);
306
+ style_.setAlignContent(Align::Stretch);
307
+ }
308
+
309
+ bool hasNewLayout_ : 1 = true;
310
+ bool isReferenceBaseline_ : 1 = false;
311
+ bool isDirty_ : 1 = true;
312
+ bool alwaysFormsContainingBlock_ : 1 = false;
313
+ NodeType nodeType_ : bitCount<NodeType>() = NodeType::Default;
314
+ void* context_ = nullptr;
315
+ YGMeasureFunc measureFunc_ = nullptr;
316
+ YGBaselineFunc baselineFunc_ = nullptr;
317
+ YGDirtiedFunc dirtiedFunc_ = nullptr;
318
+ Style style_;
319
+ LayoutResults layout_;
320
+ size_t lineIndex_ = 0;
321
+ size_t contentsChildrenCount_ = 0;
322
+ Node* owner_ = nullptr;
323
+ std::vector<Node*> children_;
324
+ const Config* config_;
325
+ std::array<Style::Length, 2> processedDimensions_{
326
+ {StyleLength::undefined(), StyleLength::undefined()}};
327
+ };
328
+
329
+ inline Node* resolveRef(const YGNodeRef ref) {
330
+ return static_cast<Node*>(ref);
331
+ }
332
+
333
+ inline const Node* resolveRef(const YGNodeConstRef ref) {
334
+ return static_cast<const Node*>(ref);
335
+ }
336
+
337
+ } // namespace facebook::yoga
@@ -0,0 +1,81 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <algorithm>
11
+ #include <array>
12
+ #include <cmath>
13
+ #include <concepts>
14
+
15
+ #include <yoga/Yoga.h>
16
+
17
+ namespace facebook::yoga {
18
+
19
+ constexpr bool isUndefined(std::floating_point auto value) {
20
+ return value != value;
21
+ }
22
+
23
+ constexpr bool isDefined(std::floating_point auto value) {
24
+ return !isUndefined(value);
25
+ }
26
+
27
+ /**
28
+ * Constexpr version of `std::isinf` before C++ 23
29
+ */
30
+ constexpr bool isinf(auto value) {
31
+ return value == +std::numeric_limits<decltype(value)>::infinity() ||
32
+ value == -std::numeric_limits<decltype(value)>::infinity();
33
+ }
34
+
35
+ constexpr auto maxOrDefined(
36
+ std::floating_point auto a,
37
+ std::floating_point auto b) {
38
+ if (yoga::isDefined(a) && yoga::isDefined(b)) {
39
+ return std::max(a, b);
40
+ }
41
+ return yoga::isUndefined(a) ? b : a;
42
+ }
43
+
44
+ constexpr auto minOrDefined(
45
+ std::floating_point auto a,
46
+ std::floating_point auto b) {
47
+ if (yoga::isDefined(a) && yoga::isDefined(b)) {
48
+ return std::min(a, b);
49
+ }
50
+
51
+ return yoga::isUndefined(a) ? b : a;
52
+ }
53
+
54
+ // Custom equality functions using a hardcoded epsilon of 0.0001f, or returning
55
+ // true if both floats are NaN.
56
+ inline bool inexactEquals(float a, float b) {
57
+ if (yoga::isDefined(a) && yoga::isDefined(b)) {
58
+ return std::abs(a - b) < 0.0001f;
59
+ }
60
+ return yoga::isUndefined(a) && yoga::isUndefined(b);
61
+ }
62
+
63
+ inline bool inexactEquals(double a, double b) {
64
+ if (yoga::isDefined(a) && yoga::isDefined(b)) {
65
+ return std::abs(a - b) < 0.0001;
66
+ }
67
+ return yoga::isUndefined(a) && yoga::isUndefined(b);
68
+ }
69
+
70
+ template <std::size_t Size, typename ElementT>
71
+ bool inexactEquals(
72
+ const std::array<ElementT, Size>& val1,
73
+ const std::array<ElementT, Size>& val2) {
74
+ bool areEqual = true;
75
+ for (std::size_t i = 0; i < Size && areEqual; ++i) {
76
+ areEqual = inexactEquals(val1[i], val2[i]);
77
+ }
78
+ return areEqual;
79
+ }
80
+
81
+ } // namespace facebook::yoga
@@ -0,0 +1,93 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <yoga/numeric/Comparison.h>
11
+ #include <limits>
12
+
13
+ namespace facebook::yoga {
14
+
15
+ struct FloatOptional {
16
+ private:
17
+ float value_ = std::numeric_limits<float>::quiet_NaN();
18
+
19
+ public:
20
+ explicit constexpr FloatOptional(float value) : value_(value) {}
21
+ constexpr FloatOptional() = default;
22
+
23
+ // returns the wrapped value, or a value x with YGIsUndefined(x) == true
24
+ constexpr float unwrap() const {
25
+ return value_;
26
+ }
27
+
28
+ constexpr float unwrapOrDefault(float defaultValue) const {
29
+ return isUndefined() ? defaultValue : value_;
30
+ }
31
+
32
+ constexpr bool isUndefined() const {
33
+ return yoga::isUndefined(value_);
34
+ }
35
+
36
+ constexpr bool isDefined() const {
37
+ return yoga::isDefined(value_);
38
+ }
39
+ };
40
+
41
+ // operators take FloatOptional by value, as it is a 32bit value
42
+
43
+ constexpr bool operator==(FloatOptional lhs, FloatOptional rhs) {
44
+ return lhs.unwrap() == rhs.unwrap() ||
45
+ (lhs.isUndefined() && rhs.isUndefined());
46
+ }
47
+ constexpr bool operator!=(FloatOptional lhs, FloatOptional rhs) {
48
+ return !(lhs == rhs);
49
+ }
50
+
51
+ constexpr bool operator==(FloatOptional lhs, float rhs) {
52
+ return lhs == FloatOptional{rhs};
53
+ }
54
+ constexpr bool operator!=(FloatOptional lhs, float rhs) {
55
+ return !(lhs == rhs);
56
+ }
57
+
58
+ constexpr bool operator==(float lhs, FloatOptional rhs) {
59
+ return rhs == lhs;
60
+ }
61
+ constexpr bool operator!=(float lhs, FloatOptional rhs) {
62
+ return !(lhs == rhs);
63
+ }
64
+
65
+ constexpr FloatOptional operator+(FloatOptional lhs, FloatOptional rhs) {
66
+ return FloatOptional{lhs.unwrap() + rhs.unwrap()};
67
+ }
68
+
69
+ constexpr bool operator>(FloatOptional lhs, FloatOptional rhs) {
70
+ return lhs.unwrap() > rhs.unwrap();
71
+ }
72
+
73
+ constexpr bool operator<(FloatOptional lhs, FloatOptional rhs) {
74
+ return lhs.unwrap() < rhs.unwrap();
75
+ }
76
+
77
+ constexpr bool operator>=(FloatOptional lhs, FloatOptional rhs) {
78
+ return lhs > rhs || lhs == rhs;
79
+ }
80
+
81
+ constexpr bool operator<=(FloatOptional lhs, FloatOptional rhs) {
82
+ return lhs < rhs || lhs == rhs;
83
+ }
84
+
85
+ constexpr FloatOptional maxOrDefined(FloatOptional lhs, FloatOptional rhs) {
86
+ return FloatOptional{yoga::maxOrDefined(lhs.unwrap(), rhs.unwrap())};
87
+ }
88
+
89
+ inline bool inexactEquals(FloatOptional lhs, FloatOptional rhs) {
90
+ return yoga::inexactEquals(lhs.unwrap(), rhs.unwrap());
91
+ }
92
+
93
+ } // namespace facebook::yoga
@@ -0,0 +1,133 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <array>
11
+ #include <bitset>
12
+ #include <cassert>
13
+ #include <cstdint>
14
+ #include <memory>
15
+ #include <vector>
16
+
17
+ namespace facebook::yoga {
18
+
19
+ // Container which allows storing 32 or 64 bit integer values, whose index may
20
+ // never change. Values are first stored in a fixed buffer of `BufferSize`
21
+ // 32-bit chunks, before falling back to heap allocation.
22
+ template <size_t BufferSize>
23
+ class SmallValueBuffer {
24
+ public:
25
+ SmallValueBuffer() = default;
26
+ SmallValueBuffer(const SmallValueBuffer& other) {
27
+ *this = other;
28
+ }
29
+ SmallValueBuffer(SmallValueBuffer&& other) noexcept = default;
30
+
31
+ // Add a new element to the buffer, returning the index of the element
32
+ uint16_t push(uint32_t value) {
33
+ const auto index = count_++;
34
+ assert(index < 4096 && "SmallValueBuffer can only hold up to 4096 chunks");
35
+ if (index < buffer_.size()) {
36
+ buffer_[index] = value;
37
+ return index;
38
+ }
39
+
40
+ if (overflow_ == nullptr) {
41
+ overflow_ = std::make_unique<SmallValueBuffer::Overflow>();
42
+ }
43
+
44
+ overflow_->buffer_.push_back(value);
45
+ overflow_->wideElements_.push_back(false);
46
+ return index;
47
+ }
48
+
49
+ uint16_t push(uint64_t value) {
50
+ const auto lsb = static_cast<uint32_t>(value & 0xFFFFFFFF);
51
+ const auto msb = static_cast<uint32_t>(value >> 32);
52
+
53
+ const auto lsbIndex = push(lsb);
54
+ [[maybe_unused]] const auto msbIndex = push(msb);
55
+ assert(
56
+ msbIndex < 4096 && "SmallValueBuffer can only hold up to 4096 chunks");
57
+
58
+ if (lsbIndex < buffer_.size()) {
59
+ wideElements_[lsbIndex] = true;
60
+ } else {
61
+ overflow_->wideElements_[lsbIndex - buffer_.size()] = true;
62
+ }
63
+ return lsbIndex;
64
+ }
65
+
66
+ // Replace an existing element in the buffer with a new value. A new index
67
+ // may be returned, e.g. if a new value is wider than the previous.
68
+ [[nodiscard]] uint16_t replace(uint16_t index, uint32_t value) {
69
+ if (index < buffer_.size()) {
70
+ buffer_[index] = value;
71
+ } else {
72
+ overflow_->buffer_.at(index - buffer_.size()) = value;
73
+ }
74
+
75
+ return index;
76
+ }
77
+
78
+ [[nodiscard]] uint16_t replace(uint16_t index, uint64_t value) {
79
+ const bool isWide = index < wideElements_.size()
80
+ ? wideElements_[index]
81
+ : overflow_->wideElements_.at(index - buffer_.size());
82
+
83
+ if (isWide) {
84
+ const auto lsb = static_cast<uint32_t>(value & 0xFFFFFFFF);
85
+ const auto msb = static_cast<uint32_t>(value >> 32);
86
+
87
+ [[maybe_unused]] auto lsbIndex = replace(index, lsb);
88
+ [[maybe_unused]] auto msbIndex = replace(index + 1, msb);
89
+ return index;
90
+ } else {
91
+ return push(value);
92
+ }
93
+ }
94
+
95
+ // Get a value of a given width
96
+ uint32_t get32(uint16_t index) const {
97
+ if (index < buffer_.size()) {
98
+ return buffer_[index];
99
+ } else {
100
+ return overflow_->buffer_.at(index - buffer_.size());
101
+ }
102
+ }
103
+
104
+ uint64_t get64(uint16_t index) const {
105
+ const auto lsb = get32(index);
106
+ const auto msb = get32(index + 1);
107
+ return (static_cast<uint64_t>(msb) << 32) | lsb;
108
+ }
109
+
110
+ SmallValueBuffer& operator=(const SmallValueBuffer& other) {
111
+ count_ = other.count_;
112
+ buffer_ = other.buffer_;
113
+ wideElements_ = other.wideElements_;
114
+ overflow_ = other.overflow_ ? std::make_unique<Overflow>(*other.overflow_)
115
+ : nullptr;
116
+ return *this;
117
+ }
118
+
119
+ SmallValueBuffer& operator=(SmallValueBuffer&& other) noexcept = default;
120
+
121
+ private:
122
+ struct Overflow {
123
+ std::vector<uint32_t> buffer_;
124
+ std::vector<bool> wideElements_;
125
+ };
126
+
127
+ uint16_t count_{0};
128
+ std::array<uint32_t, BufferSize> buffer_{};
129
+ std::bitset<BufferSize> wideElements_;
130
+ std::unique_ptr<Overflow> overflow_;
131
+ };
132
+
133
+ } // namespace facebook::yoga