koffi 0.9.4 → 0.9.7

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 (823) hide show
  1. package/LICENSE.txt +661 -0
  2. package/README.md +50 -8
  3. package/package.json +24 -6
  4. package/src/call.hh +2 -1
  5. package/src/call_arm32.cc +498 -0
  6. package/src/call_arm32_fwd.S +108 -0
  7. package/src/call_arm64.cc +57 -57
  8. package/src/call_arm64_fwd.S +24 -29
  9. package/src/call_x64_sysv.cc +29 -43
  10. package/src/call_x64_win.cc +37 -40
  11. package/src/call_x86.cc +46 -59
  12. package/src/ffi.cc +29 -27
  13. package/src/ffi.hh +19 -12
  14. package/src/util.cc +58 -24
  15. package/src/util.hh +103 -19
  16. package/test/qemu/.gitkeep +0 -0
  17. package/test/registry/machines.json +112 -0
  18. package/test/registry/sha256sum.txt +21 -0
  19. package/test/test.js +493 -0
  20. package/vendor/dragonbox/CMakeLists.txt +122 -122
  21. package/vendor/dragonbox/LICENSE-Apache2-LLVM +218 -218
  22. package/vendor/dragonbox/LICENSE-Boost +23 -23
  23. package/vendor/dragonbox/README.md +277 -277
  24. package/vendor/dragonbox/cmake/dragonboxConfig.cmake +1 -1
  25. package/vendor/dragonbox/include/dragonbox/dragonbox.h +6 -2
  26. package/vendor/dragonbox/include/dragonbox/dragonbox_to_chars.h +108 -108
  27. package/vendor/dragonbox/other_files/Dragonbox.pdf +0 -0
  28. package/vendor/dragonbox/other_files/unknown_win64_vc2019.html +539 -539
  29. package/vendor/dragonbox/source/dragonbox_to_chars.cpp +303 -303
  30. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/CMakeLists.txt +23 -23
  31. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.cpp +238 -238
  32. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.h +95 -95
  33. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/grisu_exact.h +2666 -2666
  34. package/vendor/dragonbox/subproject/3rdparty/ryu/CMakeLists.txt +16 -16
  35. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/common.h +114 -114
  36. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s.c +509 -509
  37. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_full_table.h +367 -367
  38. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_intrinsics.h +357 -357
  39. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/digit_table.h +35 -35
  40. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s.c +345 -345
  41. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_full_table.h +55 -55
  42. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_intrinsics.h +128 -128
  43. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/ryu.h +46 -46
  44. package/vendor/dragonbox/subproject/3rdparty/schubfach/CMakeLists.txt +21 -21
  45. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.cc +699 -699
  46. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.h +31 -31
  47. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.cc +1354 -1354
  48. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.h +31 -31
  49. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/example_shaded_plots.m +68 -68
  50. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/license.txt +25 -25
  51. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution.m +92 -92
  52. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution_prctile.m +121 -121
  53. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_histogram_shaded.m +99 -99
  54. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_shaded.m +93 -93
  55. package/vendor/dragonbox/subproject/benchmark/CMakeLists.txt +64 -64
  56. package/vendor/dragonbox/subproject/benchmark/include/benchmark.h +40 -40
  57. package/vendor/dragonbox/subproject/benchmark/matlab/plot_benchmarks.m +21 -21
  58. package/vendor/dragonbox/subproject/benchmark/matlab/plot_digit_benchmark.m +78 -78
  59. package/vendor/dragonbox/subproject/benchmark/matlab/plot_uniform_benchmark.m +95 -95
  60. package/vendor/dragonbox/subproject/benchmark/source/benchmark.cpp +237 -237
  61. package/vendor/dragonbox/subproject/benchmark/source/dragonbox.cpp +30 -30
  62. package/vendor/dragonbox/subproject/benchmark/source/grisu_exact.cpp +36 -36
  63. package/vendor/dragonbox/subproject/benchmark/source/ryu.cpp +27 -27
  64. package/vendor/dragonbox/subproject/benchmark/source/schubfach.cpp +31 -31
  65. package/vendor/dragonbox/subproject/common/CMakeLists.txt +41 -41
  66. package/vendor/dragonbox/subproject/common/include/best_rational_approx.h +96 -96
  67. package/vendor/dragonbox/subproject/common/include/big_uint.h +217 -217
  68. package/vendor/dragonbox/subproject/common/include/continued_fractions.h +173 -173
  69. package/vendor/dragonbox/subproject/common/include/good_rational_approx.h +266 -266
  70. package/vendor/dragonbox/subproject/common/include/random_float.h +182 -182
  71. package/vendor/dragonbox/subproject/common/include/rational_continued_fractions.h +56 -56
  72. package/vendor/dragonbox/subproject/common/source/big_uint.cpp +601 -601
  73. package/vendor/dragonbox/subproject/meta/CMakeLists.txt +40 -40
  74. package/vendor/dragonbox/subproject/meta/results/binary32_generated_cache.txt +81 -81
  75. package/vendor/dragonbox/subproject/meta/results/binary64_compressed_cache_error_table.txt +9 -9
  76. package/vendor/dragonbox/subproject/meta/results/binary64_generated_cache.txt +622 -622
  77. package/vendor/dragonbox/subproject/meta/source/generate_cache.cpp +126 -126
  78. package/vendor/dragonbox/subproject/meta/source/live_test.cpp +81 -81
  79. package/vendor/dragonbox/subproject/meta/source/perf_test.cpp +104 -104
  80. package/vendor/dragonbox/subproject/meta/source/sandbox.cpp +20 -20
  81. package/vendor/dragonbox/subproject/test/CMakeLists.txt +69 -69
  82. package/vendor/dragonbox/subproject/test/results/plot_required_bits.m +17 -17
  83. package/vendor/dragonbox/subproject/test/source/test_all_shorter_interval_cases.cpp +88 -88
  84. package/vendor/dragonbox/subproject/test/source/uniform_random_test.cpp +95 -95
  85. package/vendor/dragonbox/subproject/test/source/verify_cache_precision.cpp +337 -337
  86. package/vendor/dragonbox/subproject/test/source/verify_compressed_cache.cpp +154 -154
  87. package/vendor/dragonbox/subproject/test/source/verify_fast_multiplication.cpp +168 -168
  88. package/vendor/dragonbox/subproject/test/source/verify_log_computation.cpp +251 -251
  89. package/vendor/dragonbox/subproject/test/source/verify_magic_division.cpp +113 -113
  90. package/vendor/libcc/libcc.cc +36 -18
  91. package/vendor/libcc/libcc.hh +23 -1
  92. package/vendor/raylib/BINDINGS.md +123 -0
  93. package/vendor/raylib/CHANGELOG +1495 -0
  94. package/vendor/raylib/CMakeLists.txt +33 -0
  95. package/vendor/raylib/CMakeOptions.txt +87 -0
  96. package/vendor/raylib/CONTRIBUTING.md +76 -0
  97. package/vendor/raylib/CONTRIBUTORS.md +63 -0
  98. package/vendor/raylib/CONVENTIONS.md +95 -0
  99. package/vendor/raylib/HISTORY.md +364 -0
  100. package/vendor/raylib/LICENSE +16 -0
  101. package/vendor/raylib/README.md +141 -0
  102. package/vendor/raylib/ROADMAP.md +76 -0
  103. package/vendor/raylib/SPONSORS.md +68 -0
  104. package/vendor/raylib/cmake/AddIfFlagCompiles.cmake +12 -0
  105. package/vendor/raylib/cmake/BuildOptions.cmake +18 -0
  106. package/vendor/raylib/cmake/CompileDefinitions.cmake +110 -0
  107. package/vendor/raylib/cmake/CompilerFlags.cmake +79 -0
  108. package/vendor/raylib/cmake/EnumOption.cmake +9 -0
  109. package/vendor/raylib/cmake/GlfwImport.cmake +34 -0
  110. package/vendor/raylib/cmake/InstallConfigurations.cmake +29 -0
  111. package/vendor/raylib/cmake/JoinPaths.cmake +26 -0
  112. package/vendor/raylib/cmake/LibraryConfigurations.cmake +108 -0
  113. package/vendor/raylib/cmake/LibraryPathToLinkerFlags.cmake +24 -0
  114. package/vendor/raylib/cmake/PackConfigurations.cmake +13 -0
  115. package/vendor/raylib/cmake/PopulateConfigVariablesLocally.cmake +11 -0
  116. package/vendor/raylib/cmake/raylib-config-version.cmake +21 -0
  117. package/vendor/raylib/cmake/raylib-config.cmake +76 -0
  118. package/vendor/raylib/examples/CMakeLists.txt +139 -0
  119. package/vendor/raylib/examples/Makefile +565 -0
  120. package/vendor/raylib/examples/Makefile.Android +405 -0
  121. package/vendor/raylib/examples/Makefile.Web +1053 -0
  122. package/vendor/raylib/examples/README.md +203 -0
  123. package/vendor/raylib/examples/audio/audio_module_playing.c +146 -0
  124. package/vendor/raylib/examples/audio/audio_module_playing.png +0 -0
  125. package/vendor/raylib/examples/audio/audio_multichannel_sound.c +73 -0
  126. package/vendor/raylib/examples/audio/audio_multichannel_sound.png +0 -0
  127. package/vendor/raylib/examples/audio/audio_music_stream.c +93 -0
  128. package/vendor/raylib/examples/audio/audio_music_stream.png +0 -0
  129. package/vendor/raylib/examples/audio/audio_raw_stream.c +167 -0
  130. package/vendor/raylib/examples/audio/audio_raw_stream.png +0 -0
  131. package/vendor/raylib/examples/audio/audio_sound_loading.c +64 -0
  132. package/vendor/raylib/examples/audio/audio_sound_loading.png +0 -0
  133. package/vendor/raylib/examples/audio/resources/LICENSE.md +10 -0
  134. package/vendor/raylib/examples/audio/resources/coin.wav +0 -0
  135. package/vendor/raylib/examples/audio/resources/country.mp3 +0 -0
  136. package/vendor/raylib/examples/audio/resources/mini1111.xm +0 -0
  137. package/vendor/raylib/examples/audio/resources/sound.wav +0 -0
  138. package/vendor/raylib/examples/audio/resources/spring.wav +0 -0
  139. package/vendor/raylib/examples/audio/resources/target.flac +0 -0
  140. package/vendor/raylib/examples/audio/resources/target.ogg +0 -0
  141. package/vendor/raylib/examples/audio/resources/weird.wav +0 -0
  142. package/vendor/raylib/examples/build.zig +86 -0
  143. package/vendor/raylib/examples/core/core_2d_camera.c +132 -0
  144. package/vendor/raylib/examples/core/core_2d_camera.png +0 -0
  145. package/vendor/raylib/examples/core/core_2d_camera_platformer.c +293 -0
  146. package/vendor/raylib/examples/core/core_2d_camera_platformer.png +0 -0
  147. package/vendor/raylib/examples/core/core_2d_camera_smooth_pixelperfect.png +0 -0
  148. package/vendor/raylib/examples/core/core_3d_camera_first_person.c +97 -0
  149. package/vendor/raylib/examples/core/core_3d_camera_first_person.png +0 -0
  150. package/vendor/raylib/examples/core/core_3d_camera_free.c +83 -0
  151. package/vendor/raylib/examples/core/core_3d_camera_free.png +0 -0
  152. package/vendor/raylib/examples/core/core_3d_camera_mode.c +73 -0
  153. package/vendor/raylib/examples/core/core_3d_camera_mode.png +0 -0
  154. package/vendor/raylib/examples/core/core_3d_picking.c +107 -0
  155. package/vendor/raylib/examples/core/core_3d_picking.png +0 -0
  156. package/vendor/raylib/examples/core/core_basic_screen_manager.c +150 -0
  157. package/vendor/raylib/examples/core/core_basic_screen_manager.png +0 -0
  158. package/vendor/raylib/examples/core/core_basic_window.c +62 -0
  159. package/vendor/raylib/examples/core/core_basic_window.png +0 -0
  160. package/vendor/raylib/examples/core/core_basic_window_web.c +85 -0
  161. package/vendor/raylib/examples/core/core_custom_frame_control.c +125 -0
  162. package/vendor/raylib/examples/core/core_custom_frame_control.png +0 -0
  163. package/vendor/raylib/examples/core/core_custom_logging.c +84 -0
  164. package/vendor/raylib/examples/core/core_custom_logging.png +0 -0
  165. package/vendor/raylib/examples/core/core_drop_files.c +76 -0
  166. package/vendor/raylib/examples/core/core_drop_files.png +0 -0
  167. package/vendor/raylib/examples/core/core_input_gamepad.c +195 -0
  168. package/vendor/raylib/examples/core/core_input_gamepad.png +0 -0
  169. package/vendor/raylib/examples/core/core_input_gestures.c +115 -0
  170. package/vendor/raylib/examples/core/core_input_gestures.png +0 -0
  171. package/vendor/raylib/examples/core/core_input_keys.c +59 -0
  172. package/vendor/raylib/examples/core/core_input_keys.png +0 -0
  173. package/vendor/raylib/examples/core/core_input_mouse.c +65 -0
  174. package/vendor/raylib/examples/core/core_input_mouse.png +0 -0
  175. package/vendor/raylib/examples/core/core_input_mouse_wheel.c +58 -0
  176. package/vendor/raylib/examples/core/core_input_mouse_wheel.png +0 -0
  177. package/vendor/raylib/examples/core/core_input_multitouch.c +70 -0
  178. package/vendor/raylib/examples/core/core_input_multitouch.png +0 -0
  179. package/vendor/raylib/examples/core/core_loading_thread.c +147 -0
  180. package/vendor/raylib/examples/core/core_loading_thread.png +0 -0
  181. package/vendor/raylib/examples/core/core_quat_conversion.c +132 -0
  182. package/vendor/raylib/examples/core/core_quat_conversion.png +0 -0
  183. package/vendor/raylib/examples/core/core_random_values.c +67 -0
  184. package/vendor/raylib/examples/core/core_random_values.png +0 -0
  185. package/vendor/raylib/examples/core/core_scissor_test.c +71 -0
  186. package/vendor/raylib/examples/core/core_scissor_test.png +0 -0
  187. package/vendor/raylib/examples/core/core_smooth_pixelperfect.c +117 -0
  188. package/vendor/raylib/examples/core/core_smooth_pixelperfect.png +0 -0
  189. package/vendor/raylib/examples/core/core_split_screen.c +155 -0
  190. package/vendor/raylib/examples/core/core_split_screen.png +0 -0
  191. package/vendor/raylib/examples/core/core_storage_values.c +87 -0
  192. package/vendor/raylib/examples/core/core_storage_values.png +0 -0
  193. package/vendor/raylib/examples/core/core_vr_simulator.c +143 -0
  194. package/vendor/raylib/examples/core/core_vr_simulator.png +0 -0
  195. package/vendor/raylib/examples/core/core_window_flags.c +191 -0
  196. package/vendor/raylib/examples/core/core_window_flags.png +0 -0
  197. package/vendor/raylib/examples/core/core_window_letterbox.c +112 -0
  198. package/vendor/raylib/examples/core/core_window_letterbox.png +0 -0
  199. package/vendor/raylib/examples/core/core_world_screen.c +78 -0
  200. package/vendor/raylib/examples/core/core_world_screen.png +0 -0
  201. package/vendor/raylib/examples/core/resources/LICENSE.md +4 -0
  202. package/vendor/raylib/examples/core/resources/distortion100.fs +52 -0
  203. package/vendor/raylib/examples/core/resources/distortion330.fs +53 -0
  204. package/vendor/raylib/examples/core/resources/ps3.png +0 -0
  205. package/vendor/raylib/examples/core/resources/xbox.png +0 -0
  206. package/vendor/raylib/examples/examples_template.c +100 -0
  207. package/vendor/raylib/examples/models/models_animation.c +114 -0
  208. package/vendor/raylib/examples/models/models_animation.png +0 -0
  209. package/vendor/raylib/examples/models/models_billboard.c +75 -0
  210. package/vendor/raylib/examples/models/models_billboard.png +0 -0
  211. package/vendor/raylib/examples/models/models_box_collisions.c +121 -0
  212. package/vendor/raylib/examples/models/models_box_collisions.png +0 -0
  213. package/vendor/raylib/examples/models/models_cubicmap.c +87 -0
  214. package/vendor/raylib/examples/models/models_cubicmap.png +0 -0
  215. package/vendor/raylib/examples/models/models_first_person_maze.c +122 -0
  216. package/vendor/raylib/examples/models/models_first_person_maze.png +0 -0
  217. package/vendor/raylib/examples/models/models_geometric_shapes.c +80 -0
  218. package/vendor/raylib/examples/models/models_geometric_shapes.png +0 -0
  219. package/vendor/raylib/examples/models/models_heightmap.c +82 -0
  220. package/vendor/raylib/examples/models/models_heightmap.png +0 -0
  221. package/vendor/raylib/examples/models/models_loading.c +146 -0
  222. package/vendor/raylib/examples/models/models_loading.png +0 -0
  223. package/vendor/raylib/examples/models/models_loading_gltf.c +105 -0
  224. package/vendor/raylib/examples/models/models_loading_gltf.png +0 -0
  225. package/vendor/raylib/examples/models/models_loading_vox.c +130 -0
  226. package/vendor/raylib/examples/models/models_loading_vox.png +0 -0
  227. package/vendor/raylib/examples/models/models_mesh_generation.c +179 -0
  228. package/vendor/raylib/examples/models/models_mesh_generation.png +0 -0
  229. package/vendor/raylib/examples/models/models_mesh_picking.c +223 -0
  230. package/vendor/raylib/examples/models/models_mesh_picking.png +0 -0
  231. package/vendor/raylib/examples/models/models_orthographic_projection.c +99 -0
  232. package/vendor/raylib/examples/models/models_orthographic_projection.png +0 -0
  233. package/vendor/raylib/examples/models/models_rlgl_solar_system.c +172 -0
  234. package/vendor/raylib/examples/models/models_rlgl_solar_system.png +0 -0
  235. package/vendor/raylib/examples/models/models_skybox.c +262 -0
  236. package/vendor/raylib/examples/models/models_skybox.png +0 -0
  237. package/vendor/raylib/examples/models/models_waving_cubes.c +112 -0
  238. package/vendor/raylib/examples/models/models_waving_cubes.png +0 -0
  239. package/vendor/raylib/examples/models/models_yaw_pitch_roll.c +117 -0
  240. package/vendor/raylib/examples/models/models_yaw_pitch_roll.png +0 -0
  241. package/vendor/raylib/examples/models/resources/LICENSE.md +23 -0
  242. package/vendor/raylib/examples/models/resources/billboard.png +0 -0
  243. package/vendor/raylib/examples/models/resources/cubicmap.png +0 -0
  244. package/vendor/raylib/examples/models/resources/cubicmap_atlas.png +0 -0
  245. package/vendor/raylib/examples/models/resources/dresden_square_1k.hdr +0 -0
  246. package/vendor/raylib/examples/models/resources/dresden_square_2k.hdr +0 -0
  247. package/vendor/raylib/examples/models/resources/heightmap.png +0 -0
  248. package/vendor/raylib/examples/models/resources/models/gltf/AnimatedMorphCube.glb +0 -0
  249. package/vendor/raylib/examples/models/resources/models/gltf/AnimatedTriangle.gltf +118 -0
  250. package/vendor/raylib/examples/models/resources/models/gltf/BoxAnimated.glb +0 -0
  251. package/vendor/raylib/examples/models/resources/models/gltf/LICENSE +23 -0
  252. package/vendor/raylib/examples/models/resources/models/gltf/girl.glb +0 -0
  253. package/vendor/raylib/examples/models/resources/models/gltf/raylib_32x32.glb +0 -0
  254. package/vendor/raylib/examples/models/resources/models/gltf/rigged_figure.glb +0 -0
  255. package/vendor/raylib/examples/models/resources/models/gltf/vertex_colored_object.glb +0 -0
  256. package/vendor/raylib/examples/models/resources/models/iqm/guy.blend +0 -0
  257. package/vendor/raylib/examples/models/resources/models/iqm/guy.iqm +0 -0
  258. package/vendor/raylib/examples/models/resources/models/iqm/guyanim.iqm +0 -0
  259. package/vendor/raylib/examples/models/resources/models/iqm/guytex.png +0 -0
  260. package/vendor/raylib/examples/models/resources/models/iqm/vertex_colored_object.iqm +0 -0
  261. package/vendor/raylib/examples/models/resources/models/obj/bridge.obj +1725 -0
  262. package/vendor/raylib/examples/models/resources/models/obj/bridge_diffuse.png +0 -0
  263. package/vendor/raylib/examples/models/resources/models/obj/castle.obj +12919 -0
  264. package/vendor/raylib/examples/models/resources/models/obj/castle_diffuse.png +0 -0
  265. package/vendor/raylib/examples/models/resources/models/obj/cube.obj +68 -0
  266. package/vendor/raylib/examples/models/resources/models/obj/cube_diffuse.png +0 -0
  267. package/vendor/raylib/examples/models/resources/models/obj/house.obj +4564 -0
  268. package/vendor/raylib/examples/models/resources/models/obj/house_diffuse.png +0 -0
  269. package/vendor/raylib/examples/models/resources/models/obj/market.obj +7301 -0
  270. package/vendor/raylib/examples/models/resources/models/obj/market_diffuse.png +0 -0
  271. package/vendor/raylib/examples/models/resources/models/obj/plane.obj +10858 -0
  272. package/vendor/raylib/examples/models/resources/models/obj/plane_diffuse.png +0 -0
  273. package/vendor/raylib/examples/models/resources/models/obj/turret.obj +1888 -0
  274. package/vendor/raylib/examples/models/resources/models/obj/turret_diffuse.png +0 -0
  275. package/vendor/raylib/examples/models/resources/models/obj/well.obj +1030 -0
  276. package/vendor/raylib/examples/models/resources/models/obj/well_diffuse.png +0 -0
  277. package/vendor/raylib/examples/models/resources/models/vox/LICENSE +9 -0
  278. package/vendor/raylib/examples/models/resources/models/vox/chr_knight.vox +0 -0
  279. package/vendor/raylib/examples/models/resources/models/vox/chr_sword.vox +0 -0
  280. package/vendor/raylib/examples/models/resources/models/vox/monu9.vox +0 -0
  281. package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.fs +29 -0
  282. package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.vs +20 -0
  283. package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.fs +31 -0
  284. package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.vs +24 -0
  285. package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.fs +30 -0
  286. package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.vs +20 -0
  287. package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.fs +30 -0
  288. package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.vs +24 -0
  289. package/vendor/raylib/examples/models/resources/skybox.png +0 -0
  290. package/vendor/raylib/examples/models/rlights.h +183 -0
  291. package/vendor/raylib/examples/others/easings.h +263 -0
  292. package/vendor/raylib/examples/others/easings_testbed.c +227 -0
  293. package/vendor/raylib/examples/others/embedded_files_loading.c +103 -0
  294. package/vendor/raylib/examples/others/external/include/GLFW/glfw3.h +5538 -0
  295. package/vendor/raylib/examples/others/external/include/GLFW/glfw3native.h +572 -0
  296. package/vendor/raylib/examples/others/external/include/glad.h +5466 -0
  297. package/vendor/raylib/examples/others/external/lib/libglfw3.a +0 -0
  298. package/vendor/raylib/examples/others/raudio_standalone.c +152 -0
  299. package/vendor/raylib/examples/others/raylib_opengl_interop.c +152 -0
  300. package/vendor/raylib/examples/others/raylib_opengl_interop.png +0 -0
  301. package/vendor/raylib/examples/others/resources/audio/country.mp3 +0 -0
  302. package/vendor/raylib/examples/others/resources/audio/target.ogg +0 -0
  303. package/vendor/raylib/examples/others/resources/audio/weird.wav +0 -0
  304. package/vendor/raylib/examples/others/resources/audio_data.h +4893 -0
  305. package/vendor/raylib/examples/others/resources/image_data.h +9848 -0
  306. package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.fs +16 -0
  307. package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.vs +24 -0
  308. package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.fs +17 -0
  309. package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.vs +24 -0
  310. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol.glsl +41 -0
  311. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_render.glsl +29 -0
  312. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_transfert.glsl +51 -0
  313. package/vendor/raylib/examples/others/rlgl_compute_shader.c +173 -0
  314. package/vendor/raylib/examples/others/rlgl_standalone.c +469 -0
  315. package/vendor/raylib/examples/physics/physics_demo.c +128 -0
  316. package/vendor/raylib/examples/physics/physics_demo.png +0 -0
  317. package/vendor/raylib/examples/physics/physics_friction.c +142 -0
  318. package/vendor/raylib/examples/physics/physics_friction.png +0 -0
  319. package/vendor/raylib/examples/physics/physics_movement.c +128 -0
  320. package/vendor/raylib/examples/physics/physics_movement.png +0 -0
  321. package/vendor/raylib/examples/physics/physics_restitution.c +129 -0
  322. package/vendor/raylib/examples/physics/physics_restitution.png +0 -0
  323. package/vendor/raylib/examples/physics/physics_shatter.c +111 -0
  324. package/vendor/raylib/examples/physics/physics_shatter.png +0 -0
  325. package/vendor/raylib/examples/raylib_compile_execute.bat +32 -0
  326. package/vendor/raylib/examples/raylib_makefile_example.bat +27 -0
  327. package/vendor/raylib/examples/shaders/resources/LICENSE.md +11 -0
  328. package/vendor/raylib/examples/shaders/resources/fudesumi.png +0 -0
  329. package/vendor/raylib/examples/shaders/resources/mask.png +0 -0
  330. package/vendor/raylib/examples/shaders/resources/models/barracks.obj +22251 -0
  331. package/vendor/raylib/examples/shaders/resources/models/barracks_diffuse.png +0 -0
  332. package/vendor/raylib/examples/shaders/resources/models/church.obj +5116 -0
  333. package/vendor/raylib/examples/shaders/resources/models/church_diffuse.png +0 -0
  334. package/vendor/raylib/examples/shaders/resources/models/watermill.obj +5316 -0
  335. package/vendor/raylib/examples/shaders/resources/models/watermill_diffuse.png +0 -0
  336. package/vendor/raylib/examples/shaders/resources/plasma.png +0 -0
  337. package/vendor/raylib/examples/shaders/resources/raysan.png +0 -0
  338. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.fs +23 -0
  339. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.vs +26 -0
  340. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting.vs +59 -0
  341. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting_instanced.vs +36 -0
  342. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/bloom.fs +39 -0
  343. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/blur.fs +34 -0
  344. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/color_mix.fs +26 -0
  345. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_hatching.fs +47 -0
  346. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_stitching.fs +57 -0
  347. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cubes_panning.fs +60 -0
  348. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/depth.fs +26 -0
  349. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/distortion.fs +54 -0
  350. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/dream_vision.fs +37 -0
  351. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/eratosthenes.fs +60 -0
  352. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fisheye.fs +43 -0
  353. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fog.fs +94 -0
  354. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/grayscale.fs +25 -0
  355. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs +83 -0
  356. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/lighting.fs +81 -0
  357. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/mask.fs +24 -0
  358. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/outline.fs +34 -0
  359. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/palette_switch.fs +41 -0
  360. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/pixelizer.fs +32 -0
  361. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/posterization.fs +29 -0
  362. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/predator.fs +31 -0
  363. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/raymarching.fs +431 -0
  364. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/reload.fs +39 -0
  365. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/scanlines.fs +44 -0
  366. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/sobel.fs +40 -0
  367. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/spotlight.fs +77 -0
  368. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/swirl.fs +46 -0
  369. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/wave.fs +36 -0
  370. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.fs +22 -0
  371. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.vs +26 -0
  372. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base_lighting.vs +59 -0
  373. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/bloom.fs +37 -0
  374. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/blur.fs +32 -0
  375. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_hatching.fs +45 -0
  376. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_stitching.fs +55 -0
  377. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/distortion.fs +52 -0
  378. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/dream_vision.fs +35 -0
  379. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fisheye.fs +41 -0
  380. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fog.fs +92 -0
  381. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/grayscale.fs +23 -0
  382. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/palette_switch.fs +27 -0
  383. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/pixelizer.fs +30 -0
  384. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/posterization.fs +27 -0
  385. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/predator.fs +29 -0
  386. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/scanlines.fs +42 -0
  387. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/sobel.fs +38 -0
  388. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/swirl.fs +44 -0
  389. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.fs +25 -0
  390. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.vs +26 -0
  391. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting.vs +32 -0
  392. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting_instanced.vs +36 -0
  393. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/bloom.fs +40 -0
  394. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/blur.fs +35 -0
  395. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/color_mix.fs +27 -0
  396. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_hatching.fs +48 -0
  397. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_stitching.fs +59 -0
  398. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cubes_panning.fs +61 -0
  399. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/depth.fs +27 -0
  400. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/distortion.fs +56 -0
  401. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/dream_vision.fs +34 -0
  402. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/eratosthenes.fs +59 -0
  403. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fisheye.fs +40 -0
  404. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fog.fs +95 -0
  405. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/grayscale.fs +26 -0
  406. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs +81 -0
  407. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/lighting.fs +82 -0
  408. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/mask.fs +22 -0
  409. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/outline.fs +35 -0
  410. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/overdraw.fs +26 -0
  411. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/palette_switch.fs +30 -0
  412. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/pixelizer.fs +33 -0
  413. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/posterization.fs +31 -0
  414. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/predator.fs +32 -0
  415. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/raymarching.fs +430 -0
  416. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/reload.fs +40 -0
  417. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/scanlines.fs +49 -0
  418. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/sobel.fs +41 -0
  419. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/spotlight.fs +65 -0
  420. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/swirl.fs +47 -0
  421. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/wave.fs +37 -0
  422. package/vendor/raylib/examples/shaders/resources/space.png +0 -0
  423. package/vendor/raylib/examples/shaders/resources/texel_checker.png +0 -0
  424. package/vendor/raylib/examples/shaders/rlights.h +183 -0
  425. package/vendor/raylib/examples/shaders/shaders_basic_lighting.c +152 -0
  426. package/vendor/raylib/examples/shaders/shaders_basic_lighting.png +0 -0
  427. package/vendor/raylib/examples/shaders/shaders_custom_uniform.c +127 -0
  428. package/vendor/raylib/examples/shaders/shaders_custom_uniform.png +0 -0
  429. package/vendor/raylib/examples/shaders/shaders_eratosthenes.c +92 -0
  430. package/vendor/raylib/examples/shaders/shaders_eratosthenes.png +0 -0
  431. package/vendor/raylib/examples/shaders/shaders_fog.c +160 -0
  432. package/vendor/raylib/examples/shaders/shaders_fog.png +0 -0
  433. package/vendor/raylib/examples/shaders/shaders_hot_reloading.c +130 -0
  434. package/vendor/raylib/examples/shaders/shaders_hot_reloading.png +0 -0
  435. package/vendor/raylib/examples/shaders/shaders_julia_set.c +191 -0
  436. package/vendor/raylib/examples/shaders/shaders_julia_set.png +0 -0
  437. package/vendor/raylib/examples/shaders/shaders_mesh_instancing.c +224 -0
  438. package/vendor/raylib/examples/shaders/shaders_mesh_instancing.png +0 -0
  439. package/vendor/raylib/examples/shaders/shaders_model_shader.c +103 -0
  440. package/vendor/raylib/examples/shaders/shaders_model_shader.png +0 -0
  441. package/vendor/raylib/examples/shaders/shaders_multi_sample2d.c +105 -0
  442. package/vendor/raylib/examples/shaders/shaders_multi_sample2d.png +0 -0
  443. package/vendor/raylib/examples/shaders/shaders_palette_switch.c +147 -0
  444. package/vendor/raylib/examples/shaders/shaders_palette_switch.png +0 -0
  445. package/vendor/raylib/examples/shaders/shaders_postprocessing.c +170 -0
  446. package/vendor/raylib/examples/shaders/shaders_postprocessing.png +0 -0
  447. package/vendor/raylib/examples/shaders/shaders_raymarching.c +113 -0
  448. package/vendor/raylib/examples/shaders/shaders_raymarching.png +0 -0
  449. package/vendor/raylib/examples/shaders/shaders_shapes_textures.c +116 -0
  450. package/vendor/raylib/examples/shaders/shaders_shapes_textures.png +0 -0
  451. package/vendor/raylib/examples/shaders/shaders_simple_mask.c +144 -0
  452. package/vendor/raylib/examples/shaders/shaders_simple_mask.png +0 -0
  453. package/vendor/raylib/examples/shaders/shaders_spotlight.c +254 -0
  454. package/vendor/raylib/examples/shaders/shaders_spotlight.png +0 -0
  455. package/vendor/raylib/examples/shaders/shaders_texture_drawing.c +80 -0
  456. package/vendor/raylib/examples/shaders/shaders_texture_drawing.png +0 -0
  457. package/vendor/raylib/examples/shaders/shaders_texture_outline.c +97 -0
  458. package/vendor/raylib/examples/shaders/shaders_texture_outline.png +0 -0
  459. package/vendor/raylib/examples/shaders/shaders_texture_waves.c +110 -0
  460. package/vendor/raylib/examples/shaders/shaders_texture_waves.png +0 -0
  461. package/vendor/raylib/examples/shapes/shapes_basic_shapes.c +78 -0
  462. package/vendor/raylib/examples/shapes/shapes_basic_shapes.png +0 -0
  463. package/vendor/raylib/examples/shapes/shapes_bouncing_ball.c +76 -0
  464. package/vendor/raylib/examples/shapes/shapes_bouncing_ball.png +0 -0
  465. package/vendor/raylib/examples/shapes/shapes_collision_area.c +108 -0
  466. package/vendor/raylib/examples/shapes/shapes_collision_area.png +0 -0
  467. package/vendor/raylib/examples/shapes/shapes_colors_palette.c +99 -0
  468. package/vendor/raylib/examples/shapes/shapes_colors_palette.png +0 -0
  469. package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.c +83 -0
  470. package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.png +0 -0
  471. package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.c +89 -0
  472. package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.png +0 -0
  473. package/vendor/raylib/examples/shapes/shapes_draw_ring.c +96 -0
  474. package/vendor/raylib/examples/shapes/shapes_draw_ring.png +0 -0
  475. package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.c +110 -0
  476. package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.png +0 -0
  477. package/vendor/raylib/examples/shapes/shapes_easings_box_anim.c +136 -0
  478. package/vendor/raylib/examples/shapes/shapes_easings_box_anim.png +0 -0
  479. package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.c +118 -0
  480. package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.png +0 -0
  481. package/vendor/raylib/examples/shapes/shapes_following_eyes.c +104 -0
  482. package/vendor/raylib/examples/shapes/shapes_following_eyes.png +0 -0
  483. package/vendor/raylib/examples/shapes/shapes_lines_bezier.c +59 -0
  484. package/vendor/raylib/examples/shapes/shapes_lines_bezier.png +0 -0
  485. package/vendor/raylib/examples/shapes/shapes_logo_raylib.c +56 -0
  486. package/vendor/raylib/examples/shapes/shapes_logo_raylib.png +0 -0
  487. package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.c +160 -0
  488. package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.png +0 -0
  489. package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.c +94 -0
  490. package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.png +0 -0
  491. package/vendor/raylib/examples/text/resources/KAISG.ttf +0 -0
  492. package/vendor/raylib/examples/text/resources/LICENSE.md +20 -0
  493. package/vendor/raylib/examples/text/resources/anonymous_pro_bold.ttf +0 -0
  494. package/vendor/raylib/examples/text/resources/custom_alagard.png +0 -0
  495. package/vendor/raylib/examples/text/resources/custom_jupiter_crash.png +0 -0
  496. package/vendor/raylib/examples/text/resources/custom_mecha.png +0 -0
  497. package/vendor/raylib/examples/text/resources/dejavu.fnt +1115 -0
  498. package/vendor/raylib/examples/text/resources/dejavu.png +0 -0
  499. package/vendor/raylib/examples/text/resources/fonts/alagard.png +0 -0
  500. package/vendor/raylib/examples/text/resources/fonts/alpha_beta.png +0 -0
  501. package/vendor/raylib/examples/text/resources/fonts/jupiter_crash.png +0 -0
  502. package/vendor/raylib/examples/text/resources/fonts/mecha.png +0 -0
  503. package/vendor/raylib/examples/text/resources/fonts/pixantiqua.png +0 -0
  504. package/vendor/raylib/examples/text/resources/fonts/pixelplay.png +0 -0
  505. package/vendor/raylib/examples/text/resources/fonts/romulus.png +0 -0
  506. package/vendor/raylib/examples/text/resources/fonts/setback.png +0 -0
  507. package/vendor/raylib/examples/text/resources/noto_cjk.fnt +580 -0
  508. package/vendor/raylib/examples/text/resources/noto_cjk.png +0 -0
  509. package/vendor/raylib/examples/text/resources/pixantiqua.fnt +188 -0
  510. package/vendor/raylib/examples/text/resources/pixantiqua.png +0 -0
  511. package/vendor/raylib/examples/text/resources/pixantiqua.ttf +0 -0
  512. package/vendor/raylib/examples/text/resources/shaders/glsl100/alpha_discard.fs +20 -0
  513. package/vendor/raylib/examples/text/resources/shaders/glsl100/sdf.fs +25 -0
  514. package/vendor/raylib/examples/text/resources/shaders/glsl330/alpha_discard.fs +19 -0
  515. package/vendor/raylib/examples/text/resources/shaders/glsl330/sdf.fs +26 -0
  516. package/vendor/raylib/examples/text/resources/symbola.fnt +191 -0
  517. package/vendor/raylib/examples/text/resources/symbola.png +0 -0
  518. package/vendor/raylib/examples/text/text_draw_3d.c +739 -0
  519. package/vendor/raylib/examples/text/text_draw_3d.png +0 -0
  520. package/vendor/raylib/examples/text/text_font_filters.c +134 -0
  521. package/vendor/raylib/examples/text/text_font_filters.png +0 -0
  522. package/vendor/raylib/examples/text/text_font_loading.c +91 -0
  523. package/vendor/raylib/examples/text/text_font_loading.png +0 -0
  524. package/vendor/raylib/examples/text/text_font_sdf.c +141 -0
  525. package/vendor/raylib/examples/text/text_font_sdf.png +0 -0
  526. package/vendor/raylib/examples/text/text_font_spritefont.c +85 -0
  527. package/vendor/raylib/examples/text/text_font_spritefont.png +0 -0
  528. package/vendor/raylib/examples/text/text_format_text.c +62 -0
  529. package/vendor/raylib/examples/text/text_format_text.png +0 -0
  530. package/vendor/raylib/examples/text/text_input_box.c +127 -0
  531. package/vendor/raylib/examples/text/text_input_box.png +0 -0
  532. package/vendor/raylib/examples/text/text_raylib_fonts.c +105 -0
  533. package/vendor/raylib/examples/text/text_raylib_fonts.png +0 -0
  534. package/vendor/raylib/examples/text/text_rectangle_bounds.c +264 -0
  535. package/vendor/raylib/examples/text/text_rectangle_bounds.png +0 -0
  536. package/vendor/raylib/examples/text/text_unicode.c +465 -0
  537. package/vendor/raylib/examples/text/text_unicode.png +0 -0
  538. package/vendor/raylib/examples/text/text_writing_anim.c +62 -0
  539. package/vendor/raylib/examples/text/text_writing_anim.png +0 -0
  540. package/vendor/raylib/examples/textures/resources/KAISG.ttf +0 -0
  541. package/vendor/raylib/examples/textures/resources/LICENSE.md +18 -0
  542. package/vendor/raylib/examples/textures/resources/boom.wav +0 -0
  543. package/vendor/raylib/examples/textures/resources/button.png +0 -0
  544. package/vendor/raylib/examples/textures/resources/buttonfx.wav +0 -0
  545. package/vendor/raylib/examples/textures/resources/cat.png +0 -0
  546. package/vendor/raylib/examples/textures/resources/custom_jupiter_crash.png +0 -0
  547. package/vendor/raylib/examples/textures/resources/cyberpunk_street_background.png +0 -0
  548. package/vendor/raylib/examples/textures/resources/cyberpunk_street_foreground.png +0 -0
  549. package/vendor/raylib/examples/textures/resources/cyberpunk_street_midground.png +0 -0
  550. package/vendor/raylib/examples/textures/resources/explosion.png +0 -0
  551. package/vendor/raylib/examples/textures/resources/fudesumi.png +0 -0
  552. package/vendor/raylib/examples/textures/resources/fudesumi.raw +0 -0
  553. package/vendor/raylib/examples/textures/resources/ninepatch_button.png +0 -0
  554. package/vendor/raylib/examples/textures/resources/parrots.png +0 -0
  555. package/vendor/raylib/examples/textures/resources/patterns.png +0 -0
  556. package/vendor/raylib/examples/textures/resources/raylib_logo.png +0 -0
  557. package/vendor/raylib/examples/textures/resources/scarfy.png +0 -0
  558. package/vendor/raylib/examples/textures/resources/spark_flame.png +0 -0
  559. package/vendor/raylib/examples/textures/resources/wabbit_alpha.png +0 -0
  560. package/vendor/raylib/examples/textures/textures_background_scrolling.c +87 -0
  561. package/vendor/raylib/examples/textures/textures_background_scrolling.png +0 -0
  562. package/vendor/raylib/examples/textures/textures_blend_modes.c +93 -0
  563. package/vendor/raylib/examples/textures/textures_blend_modes.png +0 -0
  564. package/vendor/raylib/examples/textures/textures_bunnymark.c +120 -0
  565. package/vendor/raylib/examples/textures/textures_bunnymark.png +0 -0
  566. package/vendor/raylib/examples/textures/textures_draw_tiled.c +165 -0
  567. package/vendor/raylib/examples/textures/textures_draw_tiled.png +0 -0
  568. package/vendor/raylib/examples/textures/textures_image_drawing.c +91 -0
  569. package/vendor/raylib/examples/textures/textures_image_drawing.png +0 -0
  570. package/vendor/raylib/examples/textures/textures_image_generation.c +102 -0
  571. package/vendor/raylib/examples/textures/textures_image_generation.png +0 -0
  572. package/vendor/raylib/examples/textures/textures_image_loading.c +64 -0
  573. package/vendor/raylib/examples/textures/textures_image_loading.png +0 -0
  574. package/vendor/raylib/examples/textures/textures_image_processing.c +169 -0
  575. package/vendor/raylib/examples/textures/textures_image_processing.png +0 -0
  576. package/vendor/raylib/examples/textures/textures_image_text.c +83 -0
  577. package/vendor/raylib/examples/textures/textures_image_text.png +0 -0
  578. package/vendor/raylib/examples/textures/textures_logo_raylib.c +57 -0
  579. package/vendor/raylib/examples/textures/textures_logo_raylib.png +0 -0
  580. package/vendor/raylib/examples/textures/textures_mouse_painting.c +221 -0
  581. package/vendor/raylib/examples/textures/textures_mouse_painting.png +0 -0
  582. package/vendor/raylib/examples/textures/textures_npatch_drawing.c +109 -0
  583. package/vendor/raylib/examples/textures/textures_npatch_drawing.png +0 -0
  584. package/vendor/raylib/examples/textures/textures_particles_blending.c +135 -0
  585. package/vendor/raylib/examples/textures/textures_particles_blending.png +0 -0
  586. package/vendor/raylib/examples/textures/textures_polygon.c +100 -0
  587. package/vendor/raylib/examples/textures/textures_polygon.png +0 -0
  588. package/vendor/raylib/examples/textures/textures_raw_data.c +99 -0
  589. package/vendor/raylib/examples/textures/textures_raw_data.png +0 -0
  590. package/vendor/raylib/examples/textures/textures_rectangle.c +99 -0
  591. package/vendor/raylib/examples/textures/textures_rectangle.png +0 -0
  592. package/vendor/raylib/examples/textures/textures_sprite_button.c +97 -0
  593. package/vendor/raylib/examples/textures/textures_sprite_button.png +0 -0
  594. package/vendor/raylib/examples/textures/textures_sprite_explosion.c +120 -0
  595. package/vendor/raylib/examples/textures/textures_sprite_explosion.png +0 -0
  596. package/vendor/raylib/examples/textures/textures_srcrec_dstrec.c +82 -0
  597. package/vendor/raylib/examples/textures/textures_srcrec_dstrec.png +0 -0
  598. package/vendor/raylib/examples/textures/textures_to_image.c +68 -0
  599. package/vendor/raylib/examples/textures/textures_to_image.png +0 -0
  600. package/vendor/raylib/logo/raylib.ico +0 -0
  601. package/vendor/raylib/logo/raylib_128x128.png +0 -0
  602. package/vendor/raylib/logo/raylib_144x144.png +0 -0
  603. package/vendor/raylib/logo/raylib_16x16.png +0 -0
  604. package/vendor/raylib/logo/raylib_180x180.png +0 -0
  605. package/vendor/raylib/logo/raylib_24x24.png +0 -0
  606. package/vendor/raylib/logo/raylib_256x256.png +0 -0
  607. package/vendor/raylib/logo/raylib_32x32.png +0 -0
  608. package/vendor/raylib/logo/raylib_36x36.png +0 -0
  609. package/vendor/raylib/logo/raylib_48x48.png +0 -0
  610. package/vendor/raylib/logo/raylib_512x512.png +0 -0
  611. package/vendor/raylib/logo/raylib_64x64.png +0 -0
  612. package/vendor/raylib/logo/raylib_72x72.png +0 -0
  613. package/vendor/raylib/logo/raylib_96x96.png +0 -0
  614. package/vendor/raylib/logo/raylib_logo_animation.gif +0 -0
  615. package/vendor/raylib/parser/LICENSE +16 -0
  616. package/vendor/raylib/parser/README.md +63 -0
  617. package/vendor/raylib/parser/raylib_api.json +6668 -0
  618. package/vendor/raylib/parser/raylib_api.txt +3568 -0
  619. package/vendor/raylib/parser/raylib_api.xml +2509 -0
  620. package/vendor/raylib/parser/raylib_parser.c +1003 -0
  621. package/vendor/raylib/projects/4coder/Makefile +401 -0
  622. package/vendor/raylib/projects/4coder/Makefile.Android +300 -0
  623. package/vendor/raylib/projects/4coder/main.c +39 -0
  624. package/vendor/raylib/projects/4coder/project.4coder +54 -0
  625. package/vendor/raylib/projects/Builder/README.md +24 -0
  626. package/vendor/raylib/projects/Builder/examples/README.md +1 -0
  627. package/vendor/raylib/projects/Builder/examples/meson.build +25 -0
  628. package/vendor/raylib/projects/Builder/meson.build +25 -0
  629. package/vendor/raylib/projects/CMake/CMakeLists.txt +44 -0
  630. package/vendor/raylib/projects/CMake/core_basic_window.c +62 -0
  631. package/vendor/raylib/projects/CodeBlocks/README.md +22 -0
  632. package/vendor/raylib/projects/CodeBlocks/compiler_settings.png +0 -0
  633. package/vendor/raylib/projects/CodeBlocks/core_basic_window.c +58 -0
  634. package/vendor/raylib/projects/CodeBlocks/core_basic_window.cbp +137 -0
  635. package/vendor/raylib/projects/Geany/core_basic_window.c +52 -0
  636. package/vendor/raylib/projects/Geany/raylib.c.tags +452 -0
  637. package/vendor/raylib/projects/Geany/raylib_compile_execute.bat +21 -0
  638. package/vendor/raylib/projects/Geany/raylib_compile_sources.bat +42 -0
  639. package/vendor/raylib/projects/Geany/raylib_project.geany +41 -0
  640. package/vendor/raylib/projects/Notepad++/README.md +19 -0
  641. package/vendor/raylib/projects/Notepad++/c_raylib.xml +3104 -0
  642. package/vendor/raylib/projects/Notepad++/npes_saved_mingw.txt +0 -0
  643. package/vendor/raylib/projects/Notepad++/npes_saved_tcc.txt +0 -0
  644. package/vendor/raylib/projects/Notepad++/npes_saved_w64devkit.txt +0 -0
  645. package/vendor/raylib/projects/Notepad++/npes_saved_zig.txt +0 -0
  646. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp.xml +3060 -0
  647. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp_parser.c +150 -0
  648. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_to_parse.h +631 -0
  649. package/vendor/raylib/projects/README.md +18 -0
  650. package/vendor/raylib/projects/SublimeText/README.md +13 -0
  651. package/vendor/raylib/projects/SublimeText/raylib.sublime-build +13 -0
  652. package/vendor/raylib/projects/SublimeText/raylib.sublime-project +8 -0
  653. package/vendor/raylib/projects/VS2019/raylib/raylib.rc +0 -0
  654. package/vendor/raylib/projects/VS2019/raylib/resource.h +14 -0
  655. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.c +437 -0
  656. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.h +344 -0
  657. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/main.c +64 -0
  658. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/AndroidManifest.xml +22 -0
  659. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/build.xml +90 -0
  660. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/project.properties +3 -0
  661. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/raylib_android.Packaging.androidproj +134 -0
  662. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/res/values/strings.xml +4 -0
  663. package/vendor/raylib/projects/VSCode/.vscode/c_cpp_properties.json +63 -0
  664. package/vendor/raylib/projects/VSCode/.vscode/launch.json +60 -0
  665. package/vendor/raylib/projects/VSCode/.vscode/settings.json +11 -0
  666. package/vendor/raylib/projects/VSCode/.vscode/tasks.json +71 -0
  667. package/vendor/raylib/projects/VSCode/Makefile +408 -0
  668. package/vendor/raylib/projects/VSCode/Makefile.Android +300 -0
  669. package/vendor/raylib/projects/VSCode/main.c +83 -0
  670. package/vendor/raylib/projects/VSCode/main.code-workspace +16 -0
  671. package/vendor/raylib/projects/scripts/README.md +68 -0
  672. package/vendor/raylib/projects/scripts/build-linux.sh +169 -0
  673. package/vendor/raylib/projects/scripts/build-osx.sh +171 -0
  674. package/vendor/raylib/projects/scripts/build-rpi.sh +169 -0
  675. package/vendor/raylib/projects/scripts/build-windows.bat +219 -0
  676. package/vendor/raylib/projects/scripts/core_basic_window.c +61 -0
  677. package/vendor/raylib/raylib.pc.in +13 -0
  678. package/vendor/raylib/src/CMakeLists.txt +121 -0
  679. package/vendor/raylib/src/Makefile +696 -0
  680. package/vendor/raylib/src/build.zig +60 -0
  681. package/vendor/raylib/src/config.h +230 -0
  682. package/vendor/raylib/src/external/cgltf.h +6501 -0
  683. package/vendor/raylib/src/external/dirent.h +183 -0
  684. package/vendor/raylib/src/external/dr_flac.h +12269 -0
  685. package/vendor/raylib/src/external/dr_mp3.h +4787 -0
  686. package/vendor/raylib/src/external/dr_wav.h +8019 -0
  687. package/vendor/raylib/src/external/glad.h +8640 -0
  688. package/vendor/raylib/src/external/glfw/.mailmap +10 -0
  689. package/vendor/raylib/src/external/glfw/CMake/GenerateMappings.cmake +33 -0
  690. package/vendor/raylib/src/external/glfw/CMake/Info.plist.in +38 -0
  691. package/vendor/raylib/src/external/glfw/CMake/MacOSXBundleInfo.plist.in +38 -0
  692. package/vendor/raylib/src/external/glfw/CMake/cmake_uninstall.cmake.in +29 -0
  693. package/vendor/raylib/src/external/glfw/CMake/glfw3.pc.in +13 -0
  694. package/vendor/raylib/src/external/glfw/CMake/glfw3Config.cmake.in +3 -0
  695. package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32-clang.cmake +13 -0
  696. package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32.cmake +13 -0
  697. package/vendor/raylib/src/external/glfw/CMake/modules/FindEpollShim.cmake +17 -0
  698. package/vendor/raylib/src/external/glfw/CMake/modules/FindOSMesa.cmake +18 -0
  699. package/vendor/raylib/src/external/glfw/CMake/modules/FindWaylandProtocols.cmake +26 -0
  700. package/vendor/raylib/src/external/glfw/CMake/modules/FindXKBCommon.cmake +34 -0
  701. package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32-clang.cmake +13 -0
  702. package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32.cmake +13 -0
  703. package/vendor/raylib/src/external/glfw/CMakeLists.txt +323 -0
  704. package/vendor/raylib/src/external/glfw/LICENSE.md +23 -0
  705. package/vendor/raylib/src/external/glfw/README.md +477 -0
  706. package/vendor/raylib/src/external/glfw/deps/getopt.c +230 -0
  707. package/vendor/raylib/src/external/glfw/deps/getopt.h +57 -0
  708. package/vendor/raylib/src/external/glfw/deps/glad/gl.h +3840 -0
  709. package/vendor/raylib/src/external/glfw/deps/glad/khrplatform.h +282 -0
  710. package/vendor/raylib/src/external/glfw/deps/glad/vk_platform.h +92 -0
  711. package/vendor/raylib/src/external/glfw/deps/glad/vulkan.h +3480 -0
  712. package/vendor/raylib/src/external/glfw/deps/glad_gl.c +1791 -0
  713. package/vendor/raylib/src/external/glfw/deps/glad_vulkan.c +593 -0
  714. package/vendor/raylib/src/external/glfw/deps/mingw/_mingw_dxhelper.h +117 -0
  715. package/vendor/raylib/src/external/glfw/deps/mingw/dinput.h +2467 -0
  716. package/vendor/raylib/src/external/glfw/deps/mingw/xinput.h +239 -0
  717. package/vendor/raylib/src/external/glfw/deps/vs2008/stdint.h +247 -0
  718. package/vendor/raylib/src/external/glfw/include/GLFW/glfw3.h +6075 -0
  719. package/vendor/raylib/src/external/glfw/include/GLFW/glfw3native.h +530 -0
  720. package/vendor/raylib/src/external/glfw/src/CMakeLists.txt +246 -0
  721. package/vendor/raylib/src/external/glfw/src/cocoa_init.m +620 -0
  722. package/vendor/raylib/src/external/glfw/src/cocoa_joystick.h +46 -0
  723. package/vendor/raylib/src/external/glfw/src/cocoa_joystick.m +483 -0
  724. package/vendor/raylib/src/external/glfw/src/cocoa_monitor.m +631 -0
  725. package/vendor/raylib/src/external/glfw/src/cocoa_platform.h +206 -0
  726. package/vendor/raylib/src/external/glfw/src/cocoa_time.c +62 -0
  727. package/vendor/raylib/src/external/glfw/src/cocoa_window.m +1923 -0
  728. package/vendor/raylib/src/external/glfw/src/context.c +756 -0
  729. package/vendor/raylib/src/external/glfw/src/egl_context.c +846 -0
  730. package/vendor/raylib/src/external/glfw/src/egl_context.h +229 -0
  731. package/vendor/raylib/src/external/glfw/src/glfw.rc.in +30 -0
  732. package/vendor/raylib/src/external/glfw/src/glfw_config.h.in +58 -0
  733. package/vendor/raylib/src/external/glfw/src/glx_context.c +699 -0
  734. package/vendor/raylib/src/external/glfw/src/glx_context.h +181 -0
  735. package/vendor/raylib/src/external/glfw/src/init.c +357 -0
  736. package/vendor/raylib/src/external/glfw/src/input.c +1406 -0
  737. package/vendor/raylib/src/external/glfw/src/internal.h +799 -0
  738. package/vendor/raylib/src/external/glfw/src/linux_joystick.c +428 -0
  739. package/vendor/raylib/src/external/glfw/src/linux_joystick.h +59 -0
  740. package/vendor/raylib/src/external/glfw/src/mappings.h +1550 -0
  741. package/vendor/raylib/src/external/glfw/src/mappings.h.in +73 -0
  742. package/vendor/raylib/src/external/glfw/src/monitor.c +542 -0
  743. package/vendor/raylib/src/external/glfw/src/nsgl_context.h +66 -0
  744. package/vendor/raylib/src/external/glfw/src/nsgl_context.m +369 -0
  745. package/vendor/raylib/src/external/glfw/src/null_init.c +57 -0
  746. package/vendor/raylib/src/external/glfw/src/null_joystick.c +53 -0
  747. package/vendor/raylib/src/external/glfw/src/null_joystick.h +31 -0
  748. package/vendor/raylib/src/external/glfw/src/null_monitor.c +159 -0
  749. package/vendor/raylib/src/external/glfw/src/null_platform.h +89 -0
  750. package/vendor/raylib/src/external/glfw/src/null_window.c +670 -0
  751. package/vendor/raylib/src/external/glfw/src/osmesa_context.c +372 -0
  752. package/vendor/raylib/src/external/glfw/src/osmesa_context.h +90 -0
  753. package/vendor/raylib/src/external/glfw/src/posix_thread.c +105 -0
  754. package/vendor/raylib/src/external/glfw/src/posix_thread.h +51 -0
  755. package/vendor/raylib/src/external/glfw/src/posix_time.c +90 -0
  756. package/vendor/raylib/src/external/glfw/src/posix_time.h +44 -0
  757. package/vendor/raylib/src/external/glfw/src/vulkan.c +332 -0
  758. package/vendor/raylib/src/external/glfw/src/wgl_context.c +798 -0
  759. package/vendor/raylib/src/external/glfw/src/wgl_context.h +160 -0
  760. package/vendor/raylib/src/external/glfw/src/win32_init.c +636 -0
  761. package/vendor/raylib/src/external/glfw/src/win32_joystick.c +753 -0
  762. package/vendor/raylib/src/external/glfw/src/win32_joystick.h +53 -0
  763. package/vendor/raylib/src/external/glfw/src/win32_monitor.c +537 -0
  764. package/vendor/raylib/src/external/glfw/src/win32_platform.h +462 -0
  765. package/vendor/raylib/src/external/glfw/src/win32_thread.c +99 -0
  766. package/vendor/raylib/src/external/glfw/src/win32_time.c +76 -0
  767. package/vendor/raylib/src/external/glfw/src/win32_window.c +2405 -0
  768. package/vendor/raylib/src/external/glfw/src/window.c +1114 -0
  769. package/vendor/raylib/src/external/glfw/src/wl_init.c +1310 -0
  770. package/vendor/raylib/src/external/glfw/src/wl_monitor.c +231 -0
  771. package/vendor/raylib/src/external/glfw/src/wl_platform.h +352 -0
  772. package/vendor/raylib/src/external/glfw/src/wl_window.c +1814 -0
  773. package/vendor/raylib/src/external/glfw/src/x11_init.c +1500 -0
  774. package/vendor/raylib/src/external/glfw/src/x11_monitor.c +614 -0
  775. package/vendor/raylib/src/external/glfw/src/x11_platform.h +798 -0
  776. package/vendor/raylib/src/external/glfw/src/x11_window.c +3310 -0
  777. package/vendor/raylib/src/external/glfw/src/xkb_unicode.c +942 -0
  778. package/vendor/raylib/src/external/glfw/src/xkb_unicode.h +28 -0
  779. package/vendor/raylib/src/external/jar_mod.h +1596 -0
  780. package/vendor/raylib/src/external/jar_xm.h +2470 -0
  781. package/vendor/raylib/src/external/miniaudio.h +70273 -0
  782. package/vendor/raylib/src/external/msf_gif.h +717 -0
  783. package/vendor/raylib/src/external/par_shapes.h +2155 -0
  784. package/vendor/raylib/src/external/sdefl.h +696 -0
  785. package/vendor/raylib/src/external/sinfl.h +584 -0
  786. package/vendor/raylib/src/external/stb_image.h +7897 -0
  787. package/vendor/raylib/src/external/stb_image_resize.h +2634 -0
  788. package/vendor/raylib/src/external/stb_image_write.h +1724 -0
  789. package/vendor/raylib/src/external/stb_rect_pack.h +623 -0
  790. package/vendor/raylib/src/external/stb_truetype.h +5077 -0
  791. package/vendor/raylib/src/external/stb_vorbis.h +5475 -0
  792. package/vendor/raylib/src/external/tinyobj_loader_c.h +1589 -0
  793. package/vendor/raylib/src/external/vox_loader.h +710 -0
  794. package/vendor/raylib/src/extras/easings.h +263 -0
  795. package/vendor/raylib/src/extras/physac.h +1977 -0
  796. package/vendor/raylib/src/extras/raygui.h +4342 -0
  797. package/vendor/raylib/src/extras/rmem.h +751 -0
  798. package/vendor/raylib/src/raudio.c +2380 -0
  799. package/vendor/raylib/src/raudio.h +198 -0
  800. package/vendor/raylib/src/raylib.dll.rc +27 -0
  801. package/vendor/raylib/src/raylib.dll.rc.data +0 -0
  802. package/vendor/raylib/src/raylib.h +1536 -0
  803. package/vendor/raylib/src/raylib.ico +0 -0
  804. package/vendor/raylib/src/raylib.rc +27 -0
  805. package/vendor/raylib/src/raylib.rc.data +0 -0
  806. package/vendor/raylib/src/raymath.h +1853 -0
  807. package/vendor/raylib/src/rcamera.h +567 -0
  808. package/vendor/raylib/src/rcore.c +6772 -0
  809. package/vendor/raylib/src/rgestures.h +566 -0
  810. package/vendor/raylib/src/rglfw.c +126 -0
  811. package/vendor/raylib/src/rlgl.h +4677 -0
  812. package/vendor/raylib/src/rmodels.c +5041 -0
  813. package/vendor/raylib/src/rshapes.c +1759 -0
  814. package/vendor/raylib/src/rtext.c +1790 -0
  815. package/vendor/raylib/src/rtextures.c +4761 -0
  816. package/vendor/raylib/src/shell.html +328 -0
  817. package/vendor/raylib/src/utils.c +433 -0
  818. package/vendor/raylib/src/utils.h +81 -0
  819. package/vendor/sqlite3/shell.c +23487 -0
  820. package/vendor/sqlite3/sqlite3.c +239246 -0
  821. package/vendor/sqlite3/sqlite3.h +12802 -0
  822. package/vendor/sqlite3/sqlite3ext.h +689 -0
  823. package/CMakeLists.txt +0 -60
@@ -1,602 +1,602 @@
1
- // Copyright 2022 Junekey Jeon
2
- //
3
- // The contents of this file may be used under the terms of
4
- // the Apache License v2.0 with LLVM Exceptions.
5
- //
6
- // (See accompanying file LICENSE-Apache or copy at
7
- // https://llvm.org/foundation/relicensing/LICENSE.txt)
8
- //
9
- // Alternatively, the contents of this file may be used under the terms of
10
- // the Boost Software License, Version 1.0.
11
- // (See accompanying file LICENSE-Boost or copy at
12
- // https://www.boost.org/LICENSE_1_0.txt)
13
- //
14
- // Unless required by applicable law or agreed to in writing, this software
15
- // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
- // KIND, either express or implied.
17
-
18
- #include "big_uint.h"
19
- #include "dragonbox/dragonbox.h"
20
- #include <cassert>
21
- #include <limits>
22
-
23
- namespace jkj {
24
- static constexpr std::size_t log2p1(std::uint64_t x) noexcept {
25
- // C++20 std::log2p1 is not yet supported
26
- // return std::log2p1(x);
27
-
28
- std::size_t ret = 0;
29
- auto inspect = [&x, &ret](int shft) {
30
- if ((x >> shft) != 0) {
31
- x >>= shft;
32
- ret += shft;
33
- }
34
- };
35
-
36
- inspect(32);
37
- inspect(16);
38
- inspect(8);
39
- inspect(4);
40
- inspect(2);
41
- inspect(1);
42
-
43
- return ret + x;
44
- }
45
-
46
- std::size_t log2p1(big_uint const& n) noexcept {
47
- if (n.is_zero()) {
48
- return 0;
49
- }
50
- return (n.elements.size() - 1) * big_uint::element_number_of_bits +
51
- log2p1(n.elements.back());
52
- }
53
-
54
- big_uint big_uint::power_of_2(std::size_t k) {
55
- auto number_of_elmts = k / element_number_of_bits + 1;
56
- big_uint ret_val;
57
- ret_val.elements.resize(number_of_elmts, 0);
58
- ret_val.elements.back() = (element_type(1) << (k % element_number_of_bits));
59
- return ret_val;
60
- }
61
-
62
- big_uint big_uint::pow(big_uint base, std::size_t k) {
63
- big_uint result{1};
64
- while (true) {
65
- if (k % 2 != 0) {
66
- result *= base;
67
- }
68
- k /= 2;
69
- if (k == 0) {
70
- break;
71
- }
72
- base *= base;
73
- }
74
-
75
- return result;
76
- }
77
-
78
- std::size_t big_uint::multiply_2_until(big_uint const& n) {
79
- assert(elements.size() != 0);
80
-
81
- std::size_t number_of_multiplications = 0;
82
-
83
- // Perform left-shift to match the leading-1 position.
84
- // Perform element-wise shift first.
85
- assert(elements.size() <= n.elements.size());
86
- auto element_pos_offset = n.elements.size() - elements.size();
87
- if (element_pos_offset > 0) {
88
- number_of_multiplications = element_pos_offset * element_number_of_bits;
89
- auto old_size = elements.size();
90
- elements.resize(n.elements.size());
91
-
92
- std::move_backward(std::begin(elements), std::begin(elements) + old_size,
93
- std::begin(elements) + elements.size());
94
-
95
- std::fill_n(std::begin(elements), element_pos_offset, 0);
96
- }
97
- // And then perform bit-wise shift.
98
- auto new_bit_pos = log2p1(elements.back());
99
- auto bit_pos_offset =
100
- std::ptrdiff_t(log2p1(n.elements.back())) - std::ptrdiff_t(new_bit_pos);
101
- assert(element_pos_offset > 0 || (element_pos_offset == 0 && bit_pos_offset >= 0));
102
- number_of_multiplications += bit_pos_offset;
103
- if (bit_pos_offset > 0) {
104
- // Left-shfit
105
- auto shft = std::size_t(bit_pos_offset);
106
- auto remaining_bits = element_number_of_bits - shft;
107
- for (auto idx = elements.size() - 1; idx > 0; --idx) {
108
- auto bits_to_transfer = elements[idx - 1] >> remaining_bits;
109
-
110
- elements[idx] <<= shft;
111
- elements[idx] |= bits_to_transfer;
112
- }
113
- elements[0] <<= shft;
114
- }
115
- else if (bit_pos_offset < 0) {
116
- // Right-shift
117
- auto shft = std::size_t(-bit_pos_offset);
118
- auto remaining_bits = element_number_of_bits - shft;
119
- elements[0] >>= shft;
120
- for (std::size_t idx = 1; idx < elements.size(); ++idx) {
121
- auto bits_to_transfer = elements[idx] << remaining_bits;
122
-
123
- elements[idx - 1] |= bits_to_transfer;
124
- elements[idx] >>= shft;
125
- }
126
- }
127
-
128
- // Compare the shifted number with the given number.
129
- bool is_bigger_than_or_equal_to = true;
130
- for (auto idx = std::ptrdiff_t(elements.size()) - 1; idx >= 0; --idx) {
131
- if (elements[idx] > n.elements[idx])
132
- break;
133
- else if (elements[idx] < n.elements[idx]) {
134
- is_bigger_than_or_equal_to = false;
135
- break;
136
- }
137
- }
138
-
139
- // If our number is still less,
140
- if (!is_bigger_than_or_equal_to) {
141
- // Shift one more bit.
142
- ++number_of_multiplications;
143
- if (new_bit_pos == element_number_of_bits) {
144
- elements.resize(elements.size() + 1);
145
- }
146
-
147
- constexpr auto remaining_bits = element_number_of_bits - 1;
148
- for (auto idx = elements.size() - 1; idx > 0; --idx) {
149
- elements[idx] <<= 1;
150
- elements[idx] |= (elements[idx - 1] >> remaining_bits);
151
- }
152
- elements[0] <<= 1;
153
- }
154
-
155
- return number_of_multiplications;
156
- }
157
-
158
- std::size_t big_uint::multiply_2_while(big_uint const& n) {
159
- assert(elements.size() != 0);
160
-
161
- std::size_t number_of_multiplications = 0;
162
-
163
- // Perform left-shift to match the leading-1 position.
164
- // Perform element-wise shift first.
165
- assert(elements.size() <= n.elements.size());
166
- auto element_pos_offset = n.elements.size() - elements.size();
167
- if (element_pos_offset > 0) {
168
- number_of_multiplications = element_pos_offset * element_number_of_bits;
169
- auto old_size = elements.size();
170
- elements.resize(n.elements.size());
171
-
172
- std::move_backward(std::begin(elements), std::begin(elements) + old_size,
173
- std::begin(elements) + elements.size());
174
-
175
- std::fill_n(std::begin(elements), element_pos_offset, 0);
176
- }
177
- // And then perform bit-wise shift.
178
- auto new_bit_pos = log2p1(elements.back());
179
- auto bit_pos_offset =
180
- std::ptrdiff_t(log2p1(n.elements.back())) - std::ptrdiff_t(new_bit_pos);
181
- assert(element_pos_offset > 0 || (element_pos_offset == 0 && bit_pos_offset >= 0));
182
- number_of_multiplications += bit_pos_offset;
183
- if (bit_pos_offset > 0) {
184
- // Left-shfit
185
- auto shft = std::size_t(bit_pos_offset);
186
- auto remaining_bits = element_number_of_bits - shft;
187
- for (auto idx = elements.size() - 1; idx > 0; --idx) {
188
- auto bits_to_transfer = elements[idx - 1] >> remaining_bits;
189
-
190
- elements[idx] <<= shft;
191
- elements[idx] |= bits_to_transfer;
192
- }
193
- elements[0] <<= shft;
194
- }
195
- else if (bit_pos_offset < 0) {
196
- // Right-shift
197
- auto shft = std::size_t(-bit_pos_offset);
198
- auto remaining_bits = element_number_of_bits - shft;
199
- elements[0] >>= shft;
200
- for (std::size_t idx = 1; idx < elements.size(); ++idx) {
201
- auto bits_to_transfer = elements[idx] << remaining_bits;
202
-
203
- elements[idx - 1] |= bits_to_transfer;
204
- elements[idx] >>= shft;
205
- }
206
- }
207
-
208
- // Compare the shifted number with the given number.
209
- bool is_strictly_bigger = true;
210
- for (auto idx = std::ptrdiff_t(elements.size()) - 1; idx >= 0; --idx) {
211
- if (elements[idx] > n.elements[idx])
212
- break;
213
- else if (elements[idx] <= n.elements[idx]) {
214
- is_strictly_bigger = false;
215
- break;
216
- }
217
- }
218
-
219
- // If our number is strictly bigger,
220
- if (is_strictly_bigger) {
221
- // Shift one bit back.
222
- assert(number_of_multiplications > 0);
223
- --number_of_multiplications;
224
-
225
- constexpr auto remaining_bits = element_number_of_bits - 1;
226
- for (auto idx = 0; idx < elements.size() - 1; ++idx) {
227
- elements[idx] >>= 1;
228
- elements[idx] |= (elements[idx + 1] << remaining_bits);
229
- }
230
- elements.back() >>= 1;
231
-
232
- if (elements.back() == 0) {
233
- elements.pop_back();
234
- }
235
- }
236
-
237
- return number_of_multiplications;
238
- }
239
-
240
- void big_uint::multiply_2() & {
241
- // Shift to left by 1.
242
- element_type carry = 0;
243
- for (std::size_t idx = 0; idx < elements.size(); ++idx) {
244
- auto new_element = (elements[idx] << 1) | carry;
245
-
246
- // Keep the carry.
247
- carry = (elements[idx] >> (element_number_of_bits - 1));
248
-
249
- elements[idx] = new_element;
250
- }
251
-
252
- if (carry != 0) {
253
- elements.push_back(1);
254
- }
255
- }
256
-
257
- void big_uint::multiply_5() & {
258
- if (elements.size() == 0) {
259
- return;
260
- }
261
-
262
- element_type upper_2_bits = 0;
263
- element_type carry = 0;
264
- for (std::size_t idx = 0; idx < elements.size(); ++idx) {
265
- auto times_4 = (elements[idx] << 2) | upper_2_bits;
266
- upper_2_bits = (elements[idx] >> (element_number_of_bits - 2));
267
-
268
- element_type new_carry = 0;
269
- // Add *this with *this * 4.
270
- elements[idx] += times_4;
271
- // If carry happens,
272
- if (elements[idx] < times_4) {
273
- new_carry = 1;
274
- // Add the carry from the previous element.
275
- elements[idx] += carry;
276
- }
277
- // If no carry happens,
278
- else {
279
- // Add the carry from the previous element.
280
- elements[idx] += carry;
281
- // If carry happens,
282
- if (elements[idx] < carry) {
283
- new_carry = 1;
284
- }
285
- }
286
- carry = new_carry;
287
- }
288
-
289
- upper_2_bits += carry;
290
- if (upper_2_bits != 0) {
291
- elements.push_back(upper_2_bits);
292
- }
293
- }
294
-
295
- int big_uint::comparison_common(big_uint const& n) const noexcept {
296
- if (elements.size() < n.elements.size()) {
297
- return -1;
298
- }
299
- else if (elements.size() > n.elements.size()) {
300
- return +1;
301
- }
302
- else {
303
- for (auto idx_p1 = elements.size(); idx_p1 > 0; --idx_p1) {
304
- if (elements[idx_p1 - 1] < n.elements[idx_p1 - 1]) {
305
- return -1;
306
- }
307
- else if (elements[idx_p1 - 1] > n.elements[idx_p1 - 1]) {
308
- return +1;
309
- }
310
- }
311
- return 0;
312
- }
313
- }
314
-
315
- big_uint& big_uint::operator+=(big_uint const& n) & {
316
- std::size_t min_size;
317
- if (elements.size() >= n.elements.size()) {
318
- min_size = n.elements.size();
319
- }
320
- else {
321
- min_size = elements.size();
322
- elements.insert(elements.cend(), n.elements.cbegin() + min_size, n.elements.cend());
323
- }
324
-
325
- unsigned int carry = 0;
326
- for (std::size_t idx = 0; idx < min_size; ++idx) {
327
- auto with_carry = elements[idx] + carry;
328
- unsigned int first_carry = (with_carry < elements[idx]) ? 1 : 0;
329
-
330
- auto n_element = n.elements[idx];
331
- elements[idx] = with_carry + n_element;
332
- carry = first_carry | ((elements[idx] < n_element) ? 1 : 0);
333
- }
334
-
335
- if (carry != 0) {
336
- for (std::size_t idx = min_size; idx < elements.size(); ++idx) {
337
- ++elements[idx];
338
- if (elements[idx] != 0) {
339
- return *this;
340
- }
341
- }
342
- elements.push_back(1);
343
- }
344
-
345
- return *this;
346
- }
347
-
348
- big_uint& big_uint::operator+=(element_type n) & {
349
- if (is_zero()) {
350
- elements.push_back(n);
351
- return *this;
352
- }
353
-
354
- elements[0] += n;
355
-
356
- // If carry happens,
357
- if (elements[0] < n) {
358
- // Propagate carry.
359
- for (std::size_t idx = 1; idx < elements.size(); ++idx) {
360
- ++elements[idx];
361
- if (elements[idx] != 0) {
362
- return *this;
363
- }
364
- }
365
- elements.push_back(1);
366
- }
367
- return *this;
368
- }
369
-
370
- big_uint& big_uint::operator-=(big_uint const& n) & {
371
- // Underflow!
372
- assert(elements.size() >= n.elements.size());
373
-
374
- unsigned int borrow = 0;
375
- for (std::size_t idx = 0; idx < n.elements.size(); ++idx) {
376
- auto with_borrow = elements[idx] - borrow;
377
- unsigned int first_borrow = (with_borrow > elements[idx]) ? 1 : 0;
378
-
379
- auto n_element = n.elements[idx];
380
- elements[idx] = with_borrow - n_element;
381
- borrow = first_borrow | ((elements[idx] > with_borrow) ? 1 : 0);
382
- }
383
-
384
- if (borrow != 0) {
385
- for (std::size_t idx = n.elements.size(); idx < elements.size(); ++idx) {
386
- --elements[idx];
387
- if (elements[idx] != std::numeric_limits<element_type>::max()) {
388
- goto remove_leading_zeros;
389
- }
390
- }
391
- // Underflow!
392
- assert(elements.back() != std::numeric_limits<element_type>::max());
393
- }
394
-
395
- remove_leading_zeros:
396
- auto itr = elements.end();
397
- for (; itr != elements.begin(); --itr) {
398
- if (*(itr - 1) != 0) {
399
- break;
400
- }
401
- }
402
- elements.erase(itr, elements.end());
403
-
404
- return *this;
405
- }
406
-
407
- big_uint& big_uint::operator--() & {
408
- // Underflow!
409
- assert(!is_zero());
410
-
411
- for (std::size_t idx = 0; idx < elements.size(); ++idx) {
412
- --elements[idx];
413
- if (elements[idx] != std::numeric_limits<element_type>::max()) {
414
- break;
415
- }
416
- }
417
-
418
- // Remove leading zeros
419
- auto itr = elements.end();
420
- for (; itr != elements.begin(); --itr) {
421
- if (*(itr - 1) != 0) {
422
- break;
423
- }
424
- }
425
- elements.erase(itr, elements.end());
426
-
427
- return *this;
428
- }
429
-
430
- big_uint& big_uint::operator*=(element_type n) & {
431
- if (n == 0) {
432
- elements.clear();
433
- return *this;
434
- }
435
-
436
- element_type carry = 0;
437
- for (std::size_t idx = 0; idx < elements.size(); ++idx) {
438
- auto mul = jkj::dragonbox::detail::wuint::umul128(elements[idx], n);
439
- elements[idx] = mul.low() + carry;
440
- carry = mul.high() + (elements[idx] < mul.low() ? 1 : 0);
441
- }
442
- if (carry != 0) {
443
- elements.push_back(carry);
444
- }
445
-
446
- return *this;
447
- }
448
-
449
- big_uint operator*(big_uint const& x, big_uint const& y) {
450
- if (x.is_zero() || y.is_zero()) {
451
- return big_uint();
452
- }
453
-
454
- big_uint result;
455
- result.elements.resize(x.elements.size() + y.elements.size(), 0);
456
- decltype(x.elements) temp(x.elements.size());
457
-
458
- for (std::size_t y_idx = 0; y_idx < y.elements.size(); ++y_idx) {
459
- // Compute y.elements[y_idx] * x and accumulate it into the result
460
- for (std::size_t x_idx = 0; x_idx < x.elements.size(); ++x_idx) {
461
- auto mul = jkj::dragonbox::detail::wuint::umul128(x.elements[x_idx], y.elements[y_idx]);
462
-
463
- // Add the first half
464
- result.elements[x_idx + y_idx] += mul.low();
465
- unsigned int carry = result.elements[x_idx + y_idx] < mul.low() ? 1 : 0;
466
-
467
- // Add the second half
468
- auto with_carry = mul.high() + carry;
469
- carry = with_carry < mul.high() ? 1 : 0;
470
- result.elements[x_idx + y_idx + 1] += with_carry;
471
-
472
- // If there is carry,
473
- if (result.elements[x_idx + y_idx + 1] < with_carry) {
474
- // Propagate.
475
- assert(x_idx + y_idx + 2 < result.elements.size());
476
- for (auto idx = x_idx + y_idx + 2; idx < result.elements.size(); ++idx) {
477
- ++result.elements[idx];
478
- if (result.elements[idx] != 0) {
479
- break;
480
- }
481
- }
482
- }
483
- }
484
- }
485
-
486
- // Remove the last element if it is zero.
487
- if (result.elements.back() == 0) {
488
- result.elements.pop_back();
489
- }
490
-
491
- return result;
492
- }
493
-
494
- big_uint big_uint::long_division(big_uint const& n) {
495
- assert(!n.is_zero());
496
-
497
- if (this == &n) {
498
- elements.clear();
499
- return big_uint(1);
500
- }
501
-
502
- big_uint quotient;
503
- big_uint n_shifted;
504
-
505
- while (true) {
506
- // Break if *this is smaller than n.
507
- if (elements.size() < n.elements.size()) {
508
- break;
509
- }
510
-
511
- // Shift n element-wise first.
512
- n_shifted.elements.resize(elements.size());
513
- std::fill_n(n_shifted.elements.begin(), (elements.size() - n.elements.size()), 0);
514
- std::copy(n.elements.cbegin(), n.elements.cend(),
515
- n_shifted.elements.begin() + (elements.size() - n.elements.size()));
516
-
517
- std::size_t total_shift_amount =
518
- element_number_of_bits * (elements.size() - n.elements.size());
519
-
520
- // Shift n bit-wise to match the leading 1 position.
521
- auto leading_1_pos = log2p1(elements.back());
522
- auto n_leading_1_pos = log2p1(n_shifted.elements.back());
523
-
524
- if (leading_1_pos > n_leading_1_pos) {
525
- // Shift left.
526
- auto shift_amount = leading_1_pos - n_leading_1_pos;
527
- total_shift_amount += shift_amount;
528
-
529
- element_type carry = 0;
530
- for (std::size_t idx = elements.size() - n.elements.size(); idx < elements.size();
531
- ++idx) {
532
- auto new_element = (n_shifted.elements[idx] << shift_amount) | carry;
533
- carry = (n_shifted.elements[idx] >> (element_number_of_bits - shift_amount));
534
- n_shifted.elements[idx] = new_element;
535
- }
536
- assert(carry == 0);
537
- }
538
- else if (leading_1_pos < n_leading_1_pos) {
539
- // Break if *this is smaller than n.
540
- if (total_shift_amount == 0) {
541
- break;
542
- }
543
-
544
- // Shift right.
545
- auto shift_amount = n_leading_1_pos - leading_1_pos;
546
- assert(total_shift_amount > shift_amount);
547
- total_shift_amount -= shift_amount;
548
- for (std::size_t idx = elements.size() - n.elements.size(); idx < elements.size();
549
- ++idx) {
550
- n_shifted.elements[idx - 1] |=
551
- (n_shifted.elements[idx] << (element_number_of_bits - shift_amount));
552
- n_shifted.elements[idx] >>= shift_amount;
553
- }
554
- }
555
-
556
- // Check if n_shifted is bigger than *this; if that's the case, shift one bit to right.
557
- if (n_shifted > *this) {
558
- // If we actually didn't shift anything,
559
- if (total_shift_amount == 0) {
560
- // *this is smaller than n.
561
- break;
562
- }
563
-
564
- // Shift right.
565
- --total_shift_amount;
566
- n_shifted.elements[0] >>= 1;
567
- for (std::size_t idx = 1; idx < elements.size(); ++idx) {
568
- n_shifted.elements[idx - 1] |=
569
- (n_shifted.elements[idx] << (element_number_of_bits - 1));
570
- n_shifted.elements[idx] >>= 1;
571
- }
572
- }
573
-
574
- // Subtract n_shifted from *this.
575
- *this -= n_shifted;
576
-
577
- // Update the quotient.
578
- auto quotient_element_idx = total_shift_amount / element_number_of_bits;
579
- auto quotient_bit_idx = total_shift_amount % element_number_of_bits;
580
- if (quotient.elements.size() <= quotient_element_idx) {
581
- quotient.elements.resize(quotient_element_idx + 1);
582
- }
583
- quotient.elements[quotient_element_idx] |= (element_type(1) << quotient_bit_idx);
584
- }
585
-
586
- return quotient;
587
- }
588
-
589
- std::vector<std::uint64_t> big_uint::to_decimal() const {
590
- std::vector<std::uint64_t> ret;
591
- auto n = *this;
592
- auto divisor = big_uint{1000'0000'0000'0000'0000};
593
-
594
- do {
595
- auto quotient = n.long_division(divisor);
596
- ret.push_back(n.is_zero() ? 0 : n[0]);
597
- n = quotient;
598
- } while (!n.is_zero());
599
-
600
- return ret;
601
- }
1
+ // Copyright 2022 Junekey Jeon
2
+ //
3
+ // The contents of this file may be used under the terms of
4
+ // the Apache License v2.0 with LLVM Exceptions.
5
+ //
6
+ // (See accompanying file LICENSE-Apache or copy at
7
+ // https://llvm.org/foundation/relicensing/LICENSE.txt)
8
+ //
9
+ // Alternatively, the contents of this file may be used under the terms of
10
+ // the Boost Software License, Version 1.0.
11
+ // (See accompanying file LICENSE-Boost or copy at
12
+ // https://www.boost.org/LICENSE_1_0.txt)
13
+ //
14
+ // Unless required by applicable law or agreed to in writing, this software
15
+ // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ // KIND, either express or implied.
17
+
18
+ #include "big_uint.h"
19
+ #include "dragonbox/dragonbox.h"
20
+ #include <cassert>
21
+ #include <limits>
22
+
23
+ namespace jkj {
24
+ static constexpr std::size_t log2p1(std::uint64_t x) noexcept {
25
+ // C++20 std::log2p1 is not yet supported
26
+ // return std::log2p1(x);
27
+
28
+ std::size_t ret = 0;
29
+ auto inspect = [&x, &ret](int shft) {
30
+ if ((x >> shft) != 0) {
31
+ x >>= shft;
32
+ ret += shft;
33
+ }
34
+ };
35
+
36
+ inspect(32);
37
+ inspect(16);
38
+ inspect(8);
39
+ inspect(4);
40
+ inspect(2);
41
+ inspect(1);
42
+
43
+ return ret + x;
44
+ }
45
+
46
+ std::size_t log2p1(big_uint const& n) noexcept {
47
+ if (n.is_zero()) {
48
+ return 0;
49
+ }
50
+ return (n.elements.size() - 1) * big_uint::element_number_of_bits +
51
+ log2p1(n.elements.back());
52
+ }
53
+
54
+ big_uint big_uint::power_of_2(std::size_t k) {
55
+ auto number_of_elmts = k / element_number_of_bits + 1;
56
+ big_uint ret_val;
57
+ ret_val.elements.resize(number_of_elmts, 0);
58
+ ret_val.elements.back() = (element_type(1) << (k % element_number_of_bits));
59
+ return ret_val;
60
+ }
61
+
62
+ big_uint big_uint::pow(big_uint base, std::size_t k) {
63
+ big_uint result{1};
64
+ while (true) {
65
+ if (k % 2 != 0) {
66
+ result *= base;
67
+ }
68
+ k /= 2;
69
+ if (k == 0) {
70
+ break;
71
+ }
72
+ base *= base;
73
+ }
74
+
75
+ return result;
76
+ }
77
+
78
+ std::size_t big_uint::multiply_2_until(big_uint const& n) {
79
+ assert(elements.size() != 0);
80
+
81
+ std::size_t number_of_multiplications = 0;
82
+
83
+ // Perform left-shift to match the leading-1 position.
84
+ // Perform element-wise shift first.
85
+ assert(elements.size() <= n.elements.size());
86
+ auto element_pos_offset = n.elements.size() - elements.size();
87
+ if (element_pos_offset > 0) {
88
+ number_of_multiplications = element_pos_offset * element_number_of_bits;
89
+ auto old_size = elements.size();
90
+ elements.resize(n.elements.size());
91
+
92
+ std::move_backward(std::begin(elements), std::begin(elements) + old_size,
93
+ std::begin(elements) + elements.size());
94
+
95
+ std::fill_n(std::begin(elements), element_pos_offset, 0);
96
+ }
97
+ // And then perform bit-wise shift.
98
+ auto new_bit_pos = log2p1(elements.back());
99
+ auto bit_pos_offset =
100
+ std::ptrdiff_t(log2p1(n.elements.back())) - std::ptrdiff_t(new_bit_pos);
101
+ assert(element_pos_offset > 0 || (element_pos_offset == 0 && bit_pos_offset >= 0));
102
+ number_of_multiplications += bit_pos_offset;
103
+ if (bit_pos_offset > 0) {
104
+ // Left-shfit
105
+ auto shft = std::size_t(bit_pos_offset);
106
+ auto remaining_bits = element_number_of_bits - shft;
107
+ for (auto idx = elements.size() - 1; idx > 0; --idx) {
108
+ auto bits_to_transfer = elements[idx - 1] >> remaining_bits;
109
+
110
+ elements[idx] <<= shft;
111
+ elements[idx] |= bits_to_transfer;
112
+ }
113
+ elements[0] <<= shft;
114
+ }
115
+ else if (bit_pos_offset < 0) {
116
+ // Right-shift
117
+ auto shft = std::size_t(-bit_pos_offset);
118
+ auto remaining_bits = element_number_of_bits - shft;
119
+ elements[0] >>= shft;
120
+ for (std::size_t idx = 1; idx < elements.size(); ++idx) {
121
+ auto bits_to_transfer = elements[idx] << remaining_bits;
122
+
123
+ elements[idx - 1] |= bits_to_transfer;
124
+ elements[idx] >>= shft;
125
+ }
126
+ }
127
+
128
+ // Compare the shifted number with the given number.
129
+ bool is_bigger_than_or_equal_to = true;
130
+ for (auto idx = std::ptrdiff_t(elements.size()) - 1; idx >= 0; --idx) {
131
+ if (elements[idx] > n.elements[idx])
132
+ break;
133
+ else if (elements[idx] < n.elements[idx]) {
134
+ is_bigger_than_or_equal_to = false;
135
+ break;
136
+ }
137
+ }
138
+
139
+ // If our number is still less,
140
+ if (!is_bigger_than_or_equal_to) {
141
+ // Shift one more bit.
142
+ ++number_of_multiplications;
143
+ if (new_bit_pos == element_number_of_bits) {
144
+ elements.resize(elements.size() + 1);
145
+ }
146
+
147
+ constexpr auto remaining_bits = element_number_of_bits - 1;
148
+ for (auto idx = elements.size() - 1; idx > 0; --idx) {
149
+ elements[idx] <<= 1;
150
+ elements[idx] |= (elements[idx - 1] >> remaining_bits);
151
+ }
152
+ elements[0] <<= 1;
153
+ }
154
+
155
+ return number_of_multiplications;
156
+ }
157
+
158
+ std::size_t big_uint::multiply_2_while(big_uint const& n) {
159
+ assert(elements.size() != 0);
160
+
161
+ std::size_t number_of_multiplications = 0;
162
+
163
+ // Perform left-shift to match the leading-1 position.
164
+ // Perform element-wise shift first.
165
+ assert(elements.size() <= n.elements.size());
166
+ auto element_pos_offset = n.elements.size() - elements.size();
167
+ if (element_pos_offset > 0) {
168
+ number_of_multiplications = element_pos_offset * element_number_of_bits;
169
+ auto old_size = elements.size();
170
+ elements.resize(n.elements.size());
171
+
172
+ std::move_backward(std::begin(elements), std::begin(elements) + old_size,
173
+ std::begin(elements) + elements.size());
174
+
175
+ std::fill_n(std::begin(elements), element_pos_offset, 0);
176
+ }
177
+ // And then perform bit-wise shift.
178
+ auto new_bit_pos = log2p1(elements.back());
179
+ auto bit_pos_offset =
180
+ std::ptrdiff_t(log2p1(n.elements.back())) - std::ptrdiff_t(new_bit_pos);
181
+ assert(element_pos_offset > 0 || (element_pos_offset == 0 && bit_pos_offset >= 0));
182
+ number_of_multiplications += bit_pos_offset;
183
+ if (bit_pos_offset > 0) {
184
+ // Left-shfit
185
+ auto shft = std::size_t(bit_pos_offset);
186
+ auto remaining_bits = element_number_of_bits - shft;
187
+ for (auto idx = elements.size() - 1; idx > 0; --idx) {
188
+ auto bits_to_transfer = elements[idx - 1] >> remaining_bits;
189
+
190
+ elements[idx] <<= shft;
191
+ elements[idx] |= bits_to_transfer;
192
+ }
193
+ elements[0] <<= shft;
194
+ }
195
+ else if (bit_pos_offset < 0) {
196
+ // Right-shift
197
+ auto shft = std::size_t(-bit_pos_offset);
198
+ auto remaining_bits = element_number_of_bits - shft;
199
+ elements[0] >>= shft;
200
+ for (std::size_t idx = 1; idx < elements.size(); ++idx) {
201
+ auto bits_to_transfer = elements[idx] << remaining_bits;
202
+
203
+ elements[idx - 1] |= bits_to_transfer;
204
+ elements[idx] >>= shft;
205
+ }
206
+ }
207
+
208
+ // Compare the shifted number with the given number.
209
+ bool is_strictly_bigger = true;
210
+ for (auto idx = std::ptrdiff_t(elements.size()) - 1; idx >= 0; --idx) {
211
+ if (elements[idx] > n.elements[idx])
212
+ break;
213
+ else if (elements[idx] <= n.elements[idx]) {
214
+ is_strictly_bigger = false;
215
+ break;
216
+ }
217
+ }
218
+
219
+ // If our number is strictly bigger,
220
+ if (is_strictly_bigger) {
221
+ // Shift one bit back.
222
+ assert(number_of_multiplications > 0);
223
+ --number_of_multiplications;
224
+
225
+ constexpr auto remaining_bits = element_number_of_bits - 1;
226
+ for (auto idx = 0; idx < elements.size() - 1; ++idx) {
227
+ elements[idx] >>= 1;
228
+ elements[idx] |= (elements[idx + 1] << remaining_bits);
229
+ }
230
+ elements.back() >>= 1;
231
+
232
+ if (elements.back() == 0) {
233
+ elements.pop_back();
234
+ }
235
+ }
236
+
237
+ return number_of_multiplications;
238
+ }
239
+
240
+ void big_uint::multiply_2() & {
241
+ // Shift to left by 1.
242
+ element_type carry = 0;
243
+ for (std::size_t idx = 0; idx < elements.size(); ++idx) {
244
+ auto new_element = (elements[idx] << 1) | carry;
245
+
246
+ // Keep the carry.
247
+ carry = (elements[idx] >> (element_number_of_bits - 1));
248
+
249
+ elements[idx] = new_element;
250
+ }
251
+
252
+ if (carry != 0) {
253
+ elements.push_back(1);
254
+ }
255
+ }
256
+
257
+ void big_uint::multiply_5() & {
258
+ if (elements.size() == 0) {
259
+ return;
260
+ }
261
+
262
+ element_type upper_2_bits = 0;
263
+ element_type carry = 0;
264
+ for (std::size_t idx = 0; idx < elements.size(); ++idx) {
265
+ auto times_4 = (elements[idx] << 2) | upper_2_bits;
266
+ upper_2_bits = (elements[idx] >> (element_number_of_bits - 2));
267
+
268
+ element_type new_carry = 0;
269
+ // Add *this with *this * 4.
270
+ elements[idx] += times_4;
271
+ // If carry happens,
272
+ if (elements[idx] < times_4) {
273
+ new_carry = 1;
274
+ // Add the carry from the previous element.
275
+ elements[idx] += carry;
276
+ }
277
+ // If no carry happens,
278
+ else {
279
+ // Add the carry from the previous element.
280
+ elements[idx] += carry;
281
+ // If carry happens,
282
+ if (elements[idx] < carry) {
283
+ new_carry = 1;
284
+ }
285
+ }
286
+ carry = new_carry;
287
+ }
288
+
289
+ upper_2_bits += carry;
290
+ if (upper_2_bits != 0) {
291
+ elements.push_back(upper_2_bits);
292
+ }
293
+ }
294
+
295
+ int big_uint::comparison_common(big_uint const& n) const noexcept {
296
+ if (elements.size() < n.elements.size()) {
297
+ return -1;
298
+ }
299
+ else if (elements.size() > n.elements.size()) {
300
+ return +1;
301
+ }
302
+ else {
303
+ for (auto idx_p1 = elements.size(); idx_p1 > 0; --idx_p1) {
304
+ if (elements[idx_p1 - 1] < n.elements[idx_p1 - 1]) {
305
+ return -1;
306
+ }
307
+ else if (elements[idx_p1 - 1] > n.elements[idx_p1 - 1]) {
308
+ return +1;
309
+ }
310
+ }
311
+ return 0;
312
+ }
313
+ }
314
+
315
+ big_uint& big_uint::operator+=(big_uint const& n) & {
316
+ std::size_t min_size;
317
+ if (elements.size() >= n.elements.size()) {
318
+ min_size = n.elements.size();
319
+ }
320
+ else {
321
+ min_size = elements.size();
322
+ elements.insert(elements.cend(), n.elements.cbegin() + min_size, n.elements.cend());
323
+ }
324
+
325
+ unsigned int carry = 0;
326
+ for (std::size_t idx = 0; idx < min_size; ++idx) {
327
+ auto with_carry = elements[idx] + carry;
328
+ unsigned int first_carry = (with_carry < elements[idx]) ? 1 : 0;
329
+
330
+ auto n_element = n.elements[idx];
331
+ elements[idx] = with_carry + n_element;
332
+ carry = first_carry | ((elements[idx] < n_element) ? 1 : 0);
333
+ }
334
+
335
+ if (carry != 0) {
336
+ for (std::size_t idx = min_size; idx < elements.size(); ++idx) {
337
+ ++elements[idx];
338
+ if (elements[idx] != 0) {
339
+ return *this;
340
+ }
341
+ }
342
+ elements.push_back(1);
343
+ }
344
+
345
+ return *this;
346
+ }
347
+
348
+ big_uint& big_uint::operator+=(element_type n) & {
349
+ if (is_zero()) {
350
+ elements.push_back(n);
351
+ return *this;
352
+ }
353
+
354
+ elements[0] += n;
355
+
356
+ // If carry happens,
357
+ if (elements[0] < n) {
358
+ // Propagate carry.
359
+ for (std::size_t idx = 1; idx < elements.size(); ++idx) {
360
+ ++elements[idx];
361
+ if (elements[idx] != 0) {
362
+ return *this;
363
+ }
364
+ }
365
+ elements.push_back(1);
366
+ }
367
+ return *this;
368
+ }
369
+
370
+ big_uint& big_uint::operator-=(big_uint const& n) & {
371
+ // Underflow!
372
+ assert(elements.size() >= n.elements.size());
373
+
374
+ unsigned int borrow = 0;
375
+ for (std::size_t idx = 0; idx < n.elements.size(); ++idx) {
376
+ auto with_borrow = elements[idx] - borrow;
377
+ unsigned int first_borrow = (with_borrow > elements[idx]) ? 1 : 0;
378
+
379
+ auto n_element = n.elements[idx];
380
+ elements[idx] = with_borrow - n_element;
381
+ borrow = first_borrow | ((elements[idx] > with_borrow) ? 1 : 0);
382
+ }
383
+
384
+ if (borrow != 0) {
385
+ for (std::size_t idx = n.elements.size(); idx < elements.size(); ++idx) {
386
+ --elements[idx];
387
+ if (elements[idx] != std::numeric_limits<element_type>::max()) {
388
+ goto remove_leading_zeros;
389
+ }
390
+ }
391
+ // Underflow!
392
+ assert(elements.back() != std::numeric_limits<element_type>::max());
393
+ }
394
+
395
+ remove_leading_zeros:
396
+ auto itr = elements.end();
397
+ for (; itr != elements.begin(); --itr) {
398
+ if (*(itr - 1) != 0) {
399
+ break;
400
+ }
401
+ }
402
+ elements.erase(itr, elements.end());
403
+
404
+ return *this;
405
+ }
406
+
407
+ big_uint& big_uint::operator--() & {
408
+ // Underflow!
409
+ assert(!is_zero());
410
+
411
+ for (std::size_t idx = 0; idx < elements.size(); ++idx) {
412
+ --elements[idx];
413
+ if (elements[idx] != std::numeric_limits<element_type>::max()) {
414
+ break;
415
+ }
416
+ }
417
+
418
+ // Remove leading zeros
419
+ auto itr = elements.end();
420
+ for (; itr != elements.begin(); --itr) {
421
+ if (*(itr - 1) != 0) {
422
+ break;
423
+ }
424
+ }
425
+ elements.erase(itr, elements.end());
426
+
427
+ return *this;
428
+ }
429
+
430
+ big_uint& big_uint::operator*=(element_type n) & {
431
+ if (n == 0) {
432
+ elements.clear();
433
+ return *this;
434
+ }
435
+
436
+ element_type carry = 0;
437
+ for (std::size_t idx = 0; idx < elements.size(); ++idx) {
438
+ auto mul = jkj::dragonbox::detail::wuint::umul128(elements[idx], n);
439
+ elements[idx] = mul.low() + carry;
440
+ carry = mul.high() + (elements[idx] < mul.low() ? 1 : 0);
441
+ }
442
+ if (carry != 0) {
443
+ elements.push_back(carry);
444
+ }
445
+
446
+ return *this;
447
+ }
448
+
449
+ big_uint operator*(big_uint const& x, big_uint const& y) {
450
+ if (x.is_zero() || y.is_zero()) {
451
+ return big_uint();
452
+ }
453
+
454
+ big_uint result;
455
+ result.elements.resize(x.elements.size() + y.elements.size(), 0);
456
+ decltype(x.elements) temp(x.elements.size());
457
+
458
+ for (std::size_t y_idx = 0; y_idx < y.elements.size(); ++y_idx) {
459
+ // Compute y.elements[y_idx] * x and accumulate it into the result
460
+ for (std::size_t x_idx = 0; x_idx < x.elements.size(); ++x_idx) {
461
+ auto mul = jkj::dragonbox::detail::wuint::umul128(x.elements[x_idx], y.elements[y_idx]);
462
+
463
+ // Add the first half
464
+ result.elements[x_idx + y_idx] += mul.low();
465
+ unsigned int carry = result.elements[x_idx + y_idx] < mul.low() ? 1 : 0;
466
+
467
+ // Add the second half
468
+ auto with_carry = mul.high() + carry;
469
+ carry = with_carry < mul.high() ? 1 : 0;
470
+ result.elements[x_idx + y_idx + 1] += with_carry;
471
+
472
+ // If there is carry,
473
+ if (result.elements[x_idx + y_idx + 1] < with_carry) {
474
+ // Propagate.
475
+ assert(x_idx + y_idx + 2 < result.elements.size());
476
+ for (auto idx = x_idx + y_idx + 2; idx < result.elements.size(); ++idx) {
477
+ ++result.elements[idx];
478
+ if (result.elements[idx] != 0) {
479
+ break;
480
+ }
481
+ }
482
+ }
483
+ }
484
+ }
485
+
486
+ // Remove the last element if it is zero.
487
+ if (result.elements.back() == 0) {
488
+ result.elements.pop_back();
489
+ }
490
+
491
+ return result;
492
+ }
493
+
494
+ big_uint big_uint::long_division(big_uint const& n) {
495
+ assert(!n.is_zero());
496
+
497
+ if (this == &n) {
498
+ elements.clear();
499
+ return big_uint(1);
500
+ }
501
+
502
+ big_uint quotient;
503
+ big_uint n_shifted;
504
+
505
+ while (true) {
506
+ // Break if *this is smaller than n.
507
+ if (elements.size() < n.elements.size()) {
508
+ break;
509
+ }
510
+
511
+ // Shift n element-wise first.
512
+ n_shifted.elements.resize(elements.size());
513
+ std::fill_n(n_shifted.elements.begin(), (elements.size() - n.elements.size()), 0);
514
+ std::copy(n.elements.cbegin(), n.elements.cend(),
515
+ n_shifted.elements.begin() + (elements.size() - n.elements.size()));
516
+
517
+ std::size_t total_shift_amount =
518
+ element_number_of_bits * (elements.size() - n.elements.size());
519
+
520
+ // Shift n bit-wise to match the leading 1 position.
521
+ auto leading_1_pos = log2p1(elements.back());
522
+ auto n_leading_1_pos = log2p1(n_shifted.elements.back());
523
+
524
+ if (leading_1_pos > n_leading_1_pos) {
525
+ // Shift left.
526
+ auto shift_amount = leading_1_pos - n_leading_1_pos;
527
+ total_shift_amount += shift_amount;
528
+
529
+ element_type carry = 0;
530
+ for (std::size_t idx = elements.size() - n.elements.size(); idx < elements.size();
531
+ ++idx) {
532
+ auto new_element = (n_shifted.elements[idx] << shift_amount) | carry;
533
+ carry = (n_shifted.elements[idx] >> (element_number_of_bits - shift_amount));
534
+ n_shifted.elements[idx] = new_element;
535
+ }
536
+ assert(carry == 0);
537
+ }
538
+ else if (leading_1_pos < n_leading_1_pos) {
539
+ // Break if *this is smaller than n.
540
+ if (total_shift_amount == 0) {
541
+ break;
542
+ }
543
+
544
+ // Shift right.
545
+ auto shift_amount = n_leading_1_pos - leading_1_pos;
546
+ assert(total_shift_amount > shift_amount);
547
+ total_shift_amount -= shift_amount;
548
+ for (std::size_t idx = elements.size() - n.elements.size(); idx < elements.size();
549
+ ++idx) {
550
+ n_shifted.elements[idx - 1] |=
551
+ (n_shifted.elements[idx] << (element_number_of_bits - shift_amount));
552
+ n_shifted.elements[idx] >>= shift_amount;
553
+ }
554
+ }
555
+
556
+ // Check if n_shifted is bigger than *this; if that's the case, shift one bit to right.
557
+ if (n_shifted > *this) {
558
+ // If we actually didn't shift anything,
559
+ if (total_shift_amount == 0) {
560
+ // *this is smaller than n.
561
+ break;
562
+ }
563
+
564
+ // Shift right.
565
+ --total_shift_amount;
566
+ n_shifted.elements[0] >>= 1;
567
+ for (std::size_t idx = 1; idx < elements.size(); ++idx) {
568
+ n_shifted.elements[idx - 1] |=
569
+ (n_shifted.elements[idx] << (element_number_of_bits - 1));
570
+ n_shifted.elements[idx] >>= 1;
571
+ }
572
+ }
573
+
574
+ // Subtract n_shifted from *this.
575
+ *this -= n_shifted;
576
+
577
+ // Update the quotient.
578
+ auto quotient_element_idx = total_shift_amount / element_number_of_bits;
579
+ auto quotient_bit_idx = total_shift_amount % element_number_of_bits;
580
+ if (quotient.elements.size() <= quotient_element_idx) {
581
+ quotient.elements.resize(quotient_element_idx + 1);
582
+ }
583
+ quotient.elements[quotient_element_idx] |= (element_type(1) << quotient_bit_idx);
584
+ }
585
+
586
+ return quotient;
587
+ }
588
+
589
+ std::vector<std::uint64_t> big_uint::to_decimal() const {
590
+ std::vector<std::uint64_t> ret;
591
+ auto n = *this;
592
+ auto divisor = big_uint{1000'0000'0000'0000'0000};
593
+
594
+ do {
595
+ auto quotient = n.long_division(divisor);
596
+ ret.push_back(n.is_zero() ? 0 : n[0]);
597
+ n = quotient;
598
+ } while (!n.is_zero());
599
+
600
+ return ret;
601
+ }
602
602
  }