inkcpp_rb 0.1.0

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 (273) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-version +1 -0
  3. data/CHANGELOG.md +1 -0
  4. data/Gemfile +10 -0
  5. data/Gemfile.lock +84 -0
  6. data/LICENSE +7 -0
  7. data/README.md +3 -0
  8. data/Rakefile +16 -0
  9. data/bin/console +15 -0
  10. data/bin/setup +10 -0
  11. data/bin/tapioca +29 -0
  12. data/ext/inkcpp_rb/extconf.rb +19 -0
  13. data/ext/inkcpp_rb/inkcpp/.clang-format +99 -0
  14. data/ext/inkcpp_rb/inkcpp/.github/FUNDING.yml +1 -0
  15. data/ext/inkcpp_rb/inkcpp/.github/workflows/build.yml +344 -0
  16. data/ext/inkcpp_rb/inkcpp/.github/workflows/release.yml +49 -0
  17. data/ext/inkcpp_rb/inkcpp/.gitignore +25 -0
  18. data/ext/inkcpp_rb/inkcpp/.gitmodules +9 -0
  19. data/ext/inkcpp_rb/inkcpp/CMakeLists.txt +170 -0
  20. data/ext/inkcpp_rb/inkcpp/CODE_OF_CONDUCT.md +76 -0
  21. data/ext/inkcpp_rb/inkcpp/CONTRIBUTING.md +55 -0
  22. data/ext/inkcpp_rb/inkcpp/Config.cmake.in +2 -0
  23. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/CMakeLists.txt +13 -0
  24. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.c +38 -0
  25. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.cpp +40 -0
  26. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink +8 -0
  27. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink.json +1 -0
  28. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example.zip +0 -0
  29. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/InkCPP_DEMO.zip +0 -0
  30. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/CreateThread.png +0 -0
  31. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/HandleChoice.png +0 -0
  32. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ListElementOf.png +0 -0
  33. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalRuntime.png +0 -0
  34. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalThread.png +0 -0
  35. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ObseverChange.png +0 -0
  36. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/TagListGetValue.png +0 -0
  37. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/YieldResume.png +0 -0
  38. data/ext/inkcpp_rb/inkcpp/Doxyfile +2825 -0
  39. data/ext/inkcpp_rb/inkcpp/LICENSE.txt +22 -0
  40. data/ext/inkcpp_rb/inkcpp/Minimal.runsettings +8 -0
  41. data/ext/inkcpp_rb/inkcpp/README.md +192 -0
  42. data/ext/inkcpp_rb/inkcpp/inkcpp/CMakeLists.txt +67 -0
  43. data/ext/inkcpp_rb/inkcpp/inkcpp/array.h +481 -0
  44. data/ext/inkcpp_rb/inkcpp/inkcpp/avl_array.h +833 -0
  45. data/ext/inkcpp_rb/inkcpp/inkcpp/casting.h +93 -0
  46. data/ext/inkcpp_rb/inkcpp/inkcpp/choice.cpp +54 -0
  47. data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.cpp +124 -0
  48. data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.h +406 -0
  49. data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.cpp +52 -0
  50. data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.h +34 -0
  51. data/ext/inkcpp_rb/inkcpp/inkcpp/executioner.h +179 -0
  52. data/ext/inkcpp_rb/inkcpp/inkcpp/functional.cpp +86 -0
  53. data/ext/inkcpp_rb/inkcpp/inkcpp/functions.cpp +54 -0
  54. data/ext/inkcpp_rb/inkcpp/inkcpp/functions.h +40 -0
  55. data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.cpp +289 -0
  56. data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.h +149 -0
  57. data/ext/inkcpp_rb/inkcpp/inkcpp/header.cpp +44 -0
  58. data/ext/inkcpp_rb/inkcpp/inkcpp/include/choice.h +106 -0
  59. data/ext/inkcpp_rb/inkcpp/inkcpp/include/functional.h +327 -0
  60. data/ext/inkcpp_rb/inkcpp/inkcpp/include/globals.h +196 -0
  61. data/ext/inkcpp_rb/inkcpp/inkcpp/include/list.h +187 -0
  62. data/ext/inkcpp_rb/inkcpp/inkcpp/include/runner.h +291 -0
  63. data/ext/inkcpp_rb/inkcpp/inkcpp/include/snapshot.h +61 -0
  64. data/ext/inkcpp_rb/inkcpp/inkcpp/include/story.h +219 -0
  65. data/ext/inkcpp_rb/inkcpp/inkcpp/include/story_ptr.h +233 -0
  66. data/ext/inkcpp_rb/inkcpp/inkcpp/include/traits.h +270 -0
  67. data/ext/inkcpp_rb/inkcpp/inkcpp/include/types.h +169 -0
  68. data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.cpp +79 -0
  69. data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.h +39 -0
  70. data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.cpp +276 -0
  71. data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.h +356 -0
  72. data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.cpp +841 -0
  73. data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.h +450 -0
  74. data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp +40 -0
  75. data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.h +529 -0
  76. data/ext/inkcpp_rb/inkcpp/inkcpp/operation_bases.h +164 -0
  77. data/ext/inkcpp_rb/inkcpp/inkcpp/operations.h +100 -0
  78. data/ext/inkcpp_rb/inkcpp/inkcpp/output.cpp +528 -0
  79. data/ext/inkcpp_rb/inkcpp/inkcpp/output.h +153 -0
  80. data/ext/inkcpp_rb/inkcpp/inkcpp/platform.h +22 -0
  81. data/ext/inkcpp_rb/inkcpp/inkcpp/random.h +38 -0
  82. data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.cpp +1396 -0
  83. data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.h +336 -0
  84. data/ext/inkcpp_rb/inkcpp/inkcpp/simple_restorable_stack.h +335 -0
  85. data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.cpp +182 -0
  86. data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.h +91 -0
  87. data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_interface.h +57 -0
  88. data/ext/inkcpp_rb/inkcpp/inkcpp/stack.cpp +618 -0
  89. data/ext/inkcpp_rb/inkcpp/inkcpp/stack.h +243 -0
  90. data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.cpp +361 -0
  91. data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.h +92 -0
  92. data/ext/inkcpp_rb/inkcpp/inkcpp/story_ptr.cpp +75 -0
  93. data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.cpp +125 -0
  94. data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.h +67 -0
  95. data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.cpp +149 -0
  96. data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.h +47 -0
  97. data/ext/inkcpp_rb/inkcpp/inkcpp/string_utils.h +207 -0
  98. data/ext/inkcpp_rb/inkcpp/inkcpp/system.cpp +39 -0
  99. data/ext/inkcpp_rb/inkcpp/inkcpp/tuple.hpp +151 -0
  100. data/ext/inkcpp_rb/inkcpp/inkcpp/value.cpp +279 -0
  101. data/ext/inkcpp_rb/inkcpp/inkcpp/value.h +666 -0
  102. data/ext/inkcpp_rb/inkcpp/inkcpp_c/CMakeLists.txt +62 -0
  103. data/ext/inkcpp_rb/inkcpp/inkcpp_c/include/inkcpp.h +393 -0
  104. data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp.cpp +344 -0
  105. data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp_c.pc.in +10 -0
  106. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/ExternalFunction.c +56 -0
  107. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Globals.c +98 -0
  108. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Lists.c +73 -0
  109. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Observer.c +36 -0
  110. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Snapshot.c +65 -0
  111. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/CMakeLists.txt +49 -0
  112. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/inkcpp_cl.cpp +215 -0
  113. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.cpp +209 -0
  114. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.h +8 -0
  115. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/CMakeLists.txt +37 -0
  116. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.cpp +446 -0
  117. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.h +70 -0
  118. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.cpp +166 -0
  119. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.h +79 -0
  120. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/command.cpp +107 -0
  121. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/compiler.cpp +96 -0
  122. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.cpp +62 -0
  123. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.h +104 -0
  124. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compilation_results.h +22 -0
  125. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compiler.h +44 -0
  126. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json.hpp +24596 -0
  127. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.cpp +411 -0
  128. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.h +62 -0
  129. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.cpp +47 -0
  130. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.h +70 -0
  131. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.cpp +107 -0
  132. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.h +55 -0
  133. data/ext/inkcpp_rb/inkcpp/inkcpp_py/CMakeLists.txt +19 -0
  134. data/ext/inkcpp_rb/inkcpp/inkcpp_py/example.py +78 -0
  135. data/ext/inkcpp_rb/inkcpp/inkcpp_py/src/module.cpp +317 -0
  136. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/conftest.py +53 -0
  137. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_ExternalFunctions.py +35 -0
  138. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Globals.py +40 -0
  139. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Lists.py +43 -0
  140. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Observer.py +27 -0
  141. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Snapshot.py +57 -0
  142. data/ext/inkcpp_rb/inkcpp/inkcpp_py/unreal_example.ink +71 -0
  143. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Array.cpp +115 -0
  144. data/ext/inkcpp_rb/inkcpp/inkcpp_test/CMakeLists.txt +117 -0
  145. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Callstack.cpp +392 -0
  146. data/ext/inkcpp_rb/inkcpp/inkcpp_test/EmptyStringForDivert.cpp +36 -0
  147. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ExternalFunctionsExecuteProperly.cpp +34 -0
  148. data/ext/inkcpp_rb/inkcpp/inkcpp_test/FallbackFunction.cpp +77 -0
  149. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Globals.cpp +73 -0
  150. data/ext/inkcpp_rb/inkcpp/inkcpp_test/InkyJson.cpp +34 -0
  151. data/ext/inkcpp_rb/inkcpp/inkcpp_test/LabelCondition.cpp +60 -0
  152. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Lists.cpp +144 -0
  153. data/ext/inkcpp_rb/inkcpp/inkcpp_test/LookaheadSafe.cpp +46 -0
  154. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Main.cpp +7 -0
  155. data/ext/inkcpp_rb/inkcpp/inkcpp_test/MoveTo.cpp +95 -0
  156. data/ext/inkcpp_rb/inkcpp/inkcpp_test/NewLines.cpp +76 -0
  157. data/ext/inkcpp_rb/inkcpp/inkcpp_test/NoEarlyTags.cpp +33 -0
  158. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Observer.cpp +245 -0
  159. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Pointer.cpp +191 -0
  160. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Restorable.cpp +294 -0
  161. data/ext/inkcpp_rb/inkcpp/inkcpp_test/SpaceAfterBracketChoice.cpp +45 -0
  162. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Stack.cpp +224 -0
  163. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Tags.cpp +131 -0
  164. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ThirdTierChoiceAfterBrackets.cpp +38 -0
  165. data/ext/inkcpp_rb/inkcpp/inkcpp_test/UTF8.cpp +56 -0
  166. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Value.cpp +210 -0
  167. data/ext/inkcpp_rb/inkcpp/inkcpp_test/catch.hpp +17970 -0
  168. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/AHF.ink +7 -0
  169. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ChoiceBracketStory.ink +7 -0
  170. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/EmptyStringForDivert.ink +13 -0
  171. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ExternalFunctionsExecuteProperly.ink +11 -0
  172. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/FallBack.ink +15 -0
  173. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/GlobalStory.ink +9 -0
  174. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LabelConditionStory.ink +5 -0
  175. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LinesStory.ink +42 -0
  176. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListLogicStory.ink +40 -0
  177. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListStory.ink +8 -0
  178. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LookaheadSafe.ink +14 -0
  179. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/MoveTo.ink +36 -0
  180. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/NoEarlyTags.ink +19 -0
  181. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ObserverStory.ink +8 -0
  182. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/SimpleStoryFlow.ink +65 -0
  183. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TagsStory.ink +22 -0
  184. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TheIntercept.ink +1686 -0
  185. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ThirdTierChoiceAfterBracketsStory.ink +13 -0
  186. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF-8-demo.txt +212 -0
  187. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF8Story.ink +218 -0
  188. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inklecate.json +154 -0
  189. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inky.json +160 -0
  190. data/ext/inkcpp_rb/inkcpp/notes/ArchitectureNotes.md +54 -0
  191. data/ext/inkcpp_rb/inkcpp/notes/ListNotes.md +69 -0
  192. data/ext/inkcpp_rb/inkcpp/notes/OperationNotes.md +35 -0
  193. data/ext/inkcpp_rb/inkcpp/notes/TagsNotes.md +24 -0
  194. data/ext/inkcpp_rb/inkcpp/notes/WhitespaceNotes.md +28 -0
  195. data/ext/inkcpp_rb/inkcpp/proofing/README.md +3 -0
  196. data/ext/inkcpp_rb/inkcpp/proofing/inkcpp_runtime_driver +12 -0
  197. data/ext/inkcpp_rb/inkcpp/pyproject.toml +63 -0
  198. data/ext/inkcpp_rb/inkcpp/setup.py +166 -0
  199. data/ext/inkcpp_rb/inkcpp/shared/CMakeLists.txt +14 -0
  200. data/ext/inkcpp_rb/inkcpp/shared/private/command.h +172 -0
  201. data/ext/inkcpp_rb/inkcpp/shared/private/header.h +46 -0
  202. data/ext/inkcpp_rb/inkcpp/shared/public/config.h +53 -0
  203. data/ext/inkcpp_rb/inkcpp/shared/public/system.h +307 -0
  204. data/ext/inkcpp_rb/inkcpp/shared/public/version.h +14 -0
  205. data/ext/inkcpp_rb/inkcpp/tests/TestAllSequenceTypes.ink +59 -0
  206. data/ext/inkcpp_rb/inkcpp/tests/TestArithmetic.ink +17 -0
  207. data/ext/inkcpp_rb/inkcpp/tests/TestBasicStringLiterals.ink +8 -0
  208. data/ext/inkcpp_rb/inkcpp/tests/TestBasicTunnel.ink +10 -0
  209. data/ext/inkcpp_rb/inkcpp/tests/TestBlanksInInlineSequences.ink +51 -0
  210. data/ext/inkcpp_rb/inkcpp/tests/TestCallStackEvaluation.ink +15 -0
  211. data/ext/inkcpp_rb/inkcpp/tests/TestChoiceCount.ink +15 -0
  212. data/ext/inkcpp_rb/inkcpp/tests/TestChoiceDivertsToDone.ink +6 -0
  213. data/ext/inkcpp_rb/inkcpp/tests/TestChoiceWithBracketsOnly.ink +9 -0
  214. data/ext/inkcpp_rb/inkcpp/tests/TestCompareDivertTargets.ink +26 -0
  215. data/ext/inkcpp_rb/inkcpp/tests/TestComplexTunnels.ink +22 -0
  216. data/ext/inkcpp_rb/inkcpp/tests/TestConditionalChoiceInWeave.ink +19 -0
  217. data/ext/inkcpp_rb/inkcpp/tests/TestTunnelOnwardsAfterTunnel.ink +17 -0
  218. data/ext/inkcpp_rb/inkcpp/unreal/CMakeLists.txt +51 -0
  219. data/ext/inkcpp_rb/inkcpp/unreal/UE_example.ink +92 -0
  220. data/ext/inkcpp_rb/inkcpp/unreal/blueprint_filter.js +377 -0
  221. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Resources/Icon128.png +0 -0
  222. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkAsset.cpp +47 -0
  223. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkChoice.cpp +40 -0
  224. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkList.cpp +86 -0
  225. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkRuntime.cpp +265 -0
  226. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkThread.cpp +239 -0
  227. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkVar.cpp +143 -0
  228. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/TagList.cpp +95 -0
  229. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/inkcpp.cpp +13 -0
  230. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkAsset.h +50 -0
  231. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkChoice.h +58 -0
  232. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkDelegates.h +139 -0
  233. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkList.h +102 -0
  234. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkRuntime.h +177 -0
  235. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkSnapshot.h +30 -0
  236. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkThread.h +215 -0
  237. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkVar.h +245 -0
  238. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/TagList.h +77 -0
  239. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/inkcpp.h +217 -0
  240. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/inkcpp.Build.cs +62 -0
  241. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.cpp +237 -0
  242. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.h +43 -0
  243. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inkcpp_editor.cpp +13 -0
  244. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inklecate_cmd.cpp.in +24 -0
  245. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Public/inkcpp_editor.h +9 -0
  246. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/inkcpp_editor.Build.cs +61 -0
  247. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/inkcpp.uplugin +44 -0
  248. data/ext/inkcpp_rb/inkcpp/unreal/render.css +1 -0
  249. data/ext/inkcpp_rb/inkcpp_rb.cpp +321 -0
  250. data/inkcpp_rb.gemspec +54 -0
  251. data/rbi/inkcpp_rb.rbi +211 -0
  252. data/sorbet/config +4 -0
  253. data/sorbet/rbi/annotations/.gitattributes +1 -0
  254. data/sorbet/rbi/annotations/minitest.rbi +119 -0
  255. data/sorbet/rbi/gems/.gitattributes +1 -0
  256. data/sorbet/rbi/gems/benchmark@0.4.0.rbi +618 -0
  257. data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
  258. data/sorbet/rbi/gems/minitest@5.25.4.rbi +1547 -0
  259. data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
  260. data/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
  261. data/sorbet/rbi/gems/prism@1.3.0.rbi +40040 -0
  262. data/sorbet/rbi/gems/rake-compiler@1.2.8.rbi +9 -0
  263. data/sorbet/rbi/gems/rake@13.2.1.rbi +3033 -0
  264. data/sorbet/rbi/gems/rbi@0.2.2.rbi +4527 -0
  265. data/sorbet/rbi/gems/rice@4.3.3.rbi +44 -0
  266. data/sorbet/rbi/gems/spoom@1.5.0.rbi +4932 -0
  267. data/sorbet/rbi/gems/tapioca@0.16.7.rbi +3611 -0
  268. data/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
  269. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
  270. data/sorbet/rbi/gems/yard@0.9.37.rbi +18379 -0
  271. data/sorbet/tapioca/config.yml +13 -0
  272. data/sorbet/tapioca/require.rb +4 -0
  273. metadata +400 -0
@@ -0,0 +1,151 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #pragma once
8
+
9
+ /// very basic flat tuple implementation, only use for trivial data types.
10
+
11
+ #include "traits.h"
12
+
13
+ namespace ink::runtime::internal
14
+ {
15
+ namespace tuple_internal
16
+ {
17
+ /// data member of tuple
18
+ template<size_t I, typename T>
19
+ class tuple_leaf
20
+ {
21
+ public:
22
+ tuple_leaf()
23
+ : _value(){};
24
+
25
+ template<typename U>
26
+ explicit tuple_leaf(U&& u)
27
+ : _value(std::forward<U>(u))
28
+ {
29
+ }
30
+
31
+ T& get() { return _value; }
32
+
33
+ const T& get() const { return _value; }
34
+
35
+ private:
36
+ T _value;
37
+ tuple_leaf(const tuple_leaf& tl) = delete;
38
+ tuple_leaf& operator=(const tuple_leaf&) = delete;
39
+ };
40
+
41
+ // handle indexing
42
+ template<size_t... Is>
43
+ struct tuple_indexes {
44
+ };
45
+
46
+ // create tuple_indexes in [Start,End[
47
+ template<size_t End, size_t Start = 0, size_t... Is>
48
+ struct make_tuple_indexes {
49
+ using type = typename make_tuple_indexes<End, Start + 1, Is..., Start>::type;
50
+ };
51
+
52
+ template<size_t End, size_t... Is>
53
+ struct make_tuple_indexes<End, End, Is...> {
54
+ using type = tuple_indexes<Is...>;
55
+ };
56
+
57
+ /// get the index of first appearance of an type in tuple
58
+ template<typename T, size_t I, typename U, typename... Tys>
59
+ struct type_index_imp : type_index_imp<T, I + 1, Tys...> {
60
+ };
61
+
62
+ template<typename T, size_t I, typename... Tys>
63
+ struct type_index_imp<T, I, T, Tys...> {
64
+ static constexpr size_t value = I;
65
+ };
66
+
67
+ template<typename T, typename... Tys>
68
+ constexpr size_t type_index = type_index_imp<T, 0, Tys...>::value;
69
+
70
+
71
+ /// implementation class to extract indices
72
+ template<typename Indexes, typename... Tys>
73
+ struct tuple_imp;
74
+
75
+ template<size_t... Is, typename... Tys>
76
+ struct tuple_imp<tuple_indexes<Is...>, Tys...> : public tuple_leaf<Is, Tys>... {
77
+ template<typename... Us>
78
+ tuple_imp(Us&&... us)
79
+ : tuple_leaf<Is, Tys>(std::forward<Us>(us))...
80
+ {
81
+ static_assert(
82
+ sizeof...(Us) == sizeof...(Tys),
83
+ "Tuple must be initialized with same amount of arguments"
84
+ ", then types!"
85
+ );
86
+ }
87
+ };
88
+ } // namespace tuple_internal
89
+
90
+ /// minimal tuple class, only for simple data types!
91
+ /// flat tuple implementation
92
+ template<typename... Tys>
93
+ class tuple
94
+ : public tuple_internal::tuple_imp<
95
+ typename tuple_internal::make_tuple_indexes<sizeof...(Tys)>::type, Tys...>
96
+ {
97
+ using base = tuple_internal::tuple_imp<
98
+ typename tuple_internal::make_tuple_indexes<sizeof...(Tys)>::type, Tys...>;
99
+ using this_type = tuple<Tys...>;
100
+
101
+ public:
102
+ template<size_t I>
103
+ using element_type = typename get_ith_type<I, Tys...>::type;
104
+ template<typename T>
105
+ static constexpr size_t type_index = tuple_internal::type_index<T, Tys...>;
106
+
107
+ template<typename... Us>
108
+ tuple(Us&&... us)
109
+ : base(std::forward<Us>(us)...)
110
+ {
111
+ }
112
+ };
113
+
114
+ /// access tuple element by index
115
+ template<size_t I, typename T>
116
+ constexpr const auto& get(const T& t)
117
+ {
118
+ return static_cast<const tuple_internal::tuple_leaf<I, typename T::template element_type<I>>&>(t)
119
+ .get();
120
+ };
121
+
122
+ /// access tuple element by type. First of this type
123
+ template<typename T, typename Tuple>
124
+ constexpr const T& get(const Tuple& t)
125
+ {
126
+ return get<Tuple::template type_index<T>, Tuple>(t);
127
+ };
128
+
129
+ template<>
130
+ class tuple<>
131
+ {
132
+ public:
133
+ tuple() {}
134
+ };
135
+
136
+ /// check if tuple contains type
137
+ template<typename T, typename Tuple>
138
+ struct has_type;
139
+
140
+ template<typename T>
141
+ struct has_type<T, tuple<>> : false_type {
142
+ };
143
+
144
+ template<typename T, typename U, typename... Tys>
145
+ struct has_type<T, tuple<U, Tys...>> : has_type<T, tuple<Tys...>> {
146
+ };
147
+
148
+ template<typename T, typename... Tys>
149
+ struct has_type<T, tuple<T, Tys...>> : true_type {
150
+ };
151
+ } // namespace ink::runtime::internal
@@ -0,0 +1,279 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #include "value.h"
8
+
9
+ #include "list_impl.h"
10
+ #include "output.h"
11
+ #include "list_table.h"
12
+ #include "string_utils.h"
13
+ #include "string_table.h"
14
+ #include "system.h"
15
+
16
+ namespace ink::runtime::internal
17
+ {
18
+
19
+ template<value_type = value_type::OP_BEGIN>
20
+ bool truthy_impl(const value& v, const list_table& lists);
21
+
22
+ template<>
23
+ bool truthy_impl<value_type::OP_END>(const value& v, const list_table& lists)
24
+ {
25
+ inkFail("Type was not found in operational types or it has no conversion to boolean");
26
+ return false;
27
+ }
28
+
29
+ template<>
30
+ bool truthy_impl<value_type::string>(const value& v, const list_table& lists)
31
+ {
32
+ if (v.type() == value_type::string) {
33
+ // if string is not empty
34
+ return *v.get<value_type::string>().str != 0;
35
+ } else {
36
+ return truthy_impl<value_type::string + 1>(v, lists);
37
+ }
38
+ }
39
+
40
+ template<>
41
+ bool truthy_impl<value_type::list_flag>(const value& v, const list_table& lists)
42
+ {
43
+ // if list is not empty -> valid flag -> filled list
44
+ if (v.type() == value_type::list_flag) {
45
+ return lists.to_bool(v.get<value_type::list_flag>());
46
+ } else {
47
+ return truthy_impl<value_type::list_flag + 1>(v, lists);
48
+ }
49
+ }
50
+
51
+ template<>
52
+ bool truthy_impl<value_type::list>(const value& v, const list_table& lists)
53
+ {
54
+ // if list is not empty
55
+ if (v.type() == value_type::list) {
56
+ return lists.to_bool(v.get<value_type::list>());
57
+ } else {
58
+ return truthy_impl<value_type::list + 1>(v, lists);
59
+ }
60
+ }
61
+
62
+ template<>
63
+ bool truthy_impl<value_type::float32>(const value& v, const list_table& lists)
64
+ {
65
+ if (v.type() == value_type::float32) {
66
+ return v.get<value_type::float32>() != 0.0f;
67
+ } else {
68
+ return truthy_impl<value_type::float32 + 1>(v, lists);
69
+ }
70
+ }
71
+
72
+ template<>
73
+ bool truthy_impl<value_type::int32>(const value& v, const list_table& lists)
74
+ {
75
+ if (v.type() == value_type::int32) {
76
+ return v.get<value_type::int32>() != 0;
77
+ } else {
78
+ return truthy_impl<value_type::int32 + 1>(v, lists);
79
+ }
80
+ }
81
+
82
+ template<>
83
+ bool truthy_impl<value_type::uint32>(const value& v, const list_table& lists)
84
+ {
85
+ if (v.type() == value_type::uint32) {
86
+ return v.get<value_type::uint32>() != 0;
87
+ } else {
88
+ return truthy_impl<value_type::uint32 + 1>(v, lists);
89
+ }
90
+ }
91
+
92
+ template<>
93
+ bool truthy_impl<value_type::boolean>(const value& v, const list_table& lists)
94
+ {
95
+ if (v.type() == value_type::boolean) {
96
+ return v.get<value_type::boolean>();
97
+ } else {
98
+ return truthy_impl<value_type::boolean + 1>(v, lists);
99
+ }
100
+ }
101
+
102
+ template<>
103
+ bool truthy_impl<value_type::divert>(const value& v, const list_table& lists)
104
+ {
105
+ if (v.type() == value_type::divert) {
106
+ inkFail("Divert can not be evaluated to boolean");
107
+ return false;
108
+ } else {
109
+ return truthy_impl<value_type::divert + 1>(v, lists);
110
+ }
111
+ }
112
+
113
+ bool value::truthy(const list_table& lists) const { return truthy_impl(*this, lists); }
114
+
115
+
116
+ #ifdef INK_ENABLE_STL
117
+ template<value_type ty = value_type::PRINT_BEGIN>
118
+ void append(std::ostream& os, const value& val, const list_table* lists)
119
+ {
120
+ if constexpr (ty != value_type::PRINT_END) {
121
+ if (ty == val.type()) {
122
+ os << val.get<ty>();
123
+ } else {
124
+ append<ty + 1>(os, val, lists);
125
+ }
126
+ }
127
+ }
128
+
129
+ template<>
130
+ void append<value_type::list_flag>(std::ostream& os, const value& val, const list_table* lists)
131
+ {
132
+ if (val.type() == value_type::list_flag) {
133
+ inkAssert(lists, "to stringify lists, we need a list_table");
134
+ os << lists->toString(val.get<value_type::list_flag>());
135
+ } else {
136
+ append<value_type::list_flag + 1>(os, val, lists);
137
+ }
138
+ }
139
+
140
+ template<>
141
+ void append<value_type::list>(std::ostream& os, const value& val, const list_table* lists)
142
+ {
143
+ if (val.type() == value_type::list) {
144
+ inkAssert(lists, "to stringify lists, we need a list_table");
145
+ lists->write(os, val.get<value_type::list>());
146
+ } else {
147
+ append<value_type::list + 1>(os, val, lists);
148
+ }
149
+ }
150
+
151
+ template<>
152
+ void append<value_type::float32>(std::ostream& os, const value& val, const list_table* lists)
153
+ {
154
+ if (val.type() == value_type::float32) {
155
+ char number[32];
156
+ ink::runtime::internal::toStr(number, 32, val.get<value_type::float32>());
157
+ os << number;
158
+ } else {
159
+ append<value_type::float32 + 1>(os, val, lists);
160
+ }
161
+ }
162
+
163
+ template<>
164
+ void append<value_type::boolean>(std::ostream& os, const value& val, const list_table* lists)
165
+ {
166
+ if (val.type() == value_type::boolean) {
167
+ os << (val.get<value_type::boolean>() ? "true" : "false");
168
+ } else {
169
+ append<value_type::boolean + 1>(os, val, lists);
170
+ }
171
+ }
172
+
173
+ std::ostream& value::write(std::ostream& os, const list_table* lists) const
174
+ {
175
+ if (type() < value_type::PRINT_BEGIN || type() >= value_type::PRINT_END) {
176
+ throw ink_exception("printing this type is not supported");
177
+ }
178
+ append(os, *this, lists);
179
+ return os;
180
+ }
181
+ #endif
182
+
183
+ basic_stream& operator<<(basic_stream& os, const value& val)
184
+ {
185
+ os.append(val);
186
+ return os;
187
+ }
188
+
189
+ value::value(const ink::runtime::value& val)
190
+ : value()
191
+ {
192
+ using types = ink::runtime::value::Type;
193
+ switch (val.type) {
194
+ case types::Bool: set<value_type::boolean>(val.get<types::Bool>()); break;
195
+ case types::Uint32: set<value_type::uint32>(val.get<types::Uint32>()); break;
196
+ case types::Int32: set<value_type::int32>(val.get<types::Int32>()); break;
197
+ case types::String: set<value_type::string>(val.get<types::String>()); break;
198
+ case types::Float: set<value_type::float32>(val.get<types::Float>()); break;
199
+ case types::List:
200
+ set<value_type::list>(list_table::list{
201
+ static_cast<list_impl*>(val.get<types::List>())->get_lid()});
202
+ }
203
+ }
204
+
205
+ bool value::set(const ink::runtime::value& val)
206
+ {
207
+ auto var = value(val);
208
+ if (type() == value_type::none || var.type() == type()) {
209
+ *this = var;
210
+ return true;
211
+ }
212
+ return false;
213
+ }
214
+
215
+ ink::runtime::value value::to_interface_value(list_table& table) const
216
+ {
217
+ using val = ink::runtime::value;
218
+ if (type() == value_type::boolean) {
219
+ return val(get<value_type::boolean>());
220
+ } else if (type() == value_type::uint32) {
221
+ return val(get<value_type::uint32>());
222
+ } else if (type() == value_type::int32) {
223
+ return val(get<value_type::int32>());
224
+ } else if (type() == value_type::string) {
225
+ return val(get<value_type::string>().str);
226
+ } else if (type() == value_type::float32) {
227
+ return val(get<value_type::float32>());
228
+ } else if (type() == value_type::list_flag) {
229
+ auto v = table.create();
230
+ v = table.add(v, get<value_type::list_flag>());
231
+ return val(table.handout_list(v));
232
+ } else if (type() == value_type::list) {
233
+ return val(table.handout_list(get<value_type::list>()));
234
+ }
235
+ inkFail("No valid type to convert to interface value!");
236
+ return val();
237
+ }
238
+
239
+ size_t value::snap(unsigned char* data, const snapper& snapper) const
240
+ {
241
+ unsigned char* ptr = data;
242
+ bool should_write = data != nullptr;
243
+ ptr = snap_write(ptr, _type, should_write);
244
+ if (_type == value_type::string) {
245
+ unsigned char buf[max_value_size];
246
+ string_type* res = reinterpret_cast<string_type*>(buf);
247
+ auto str = get<value_type::string>();
248
+ res->allocated = str.allocated;
249
+ if (str.allocated) {
250
+ res->str = reinterpret_cast<const char*>(
251
+ static_cast<std::uintptr_t>(snapper.strings.get_id(str.str))
252
+ );
253
+ } else {
254
+ res->str = reinterpret_cast<const char*>(
255
+ static_cast<std::uintptr_t>(str.str - snapper.story_string_table)
256
+ );
257
+ }
258
+ ptr = snap_write(ptr, buf, should_write);
259
+ } else {
260
+ // TODO more space efficent?
261
+ ptr = snap_write(ptr, &bool_value, max_value_size, should_write);
262
+ }
263
+ return ptr - data;
264
+ }
265
+
266
+ const unsigned char* value::snap_load(const unsigned char* ptr, const loader& loader)
267
+ {
268
+ ptr = snap_read(ptr, _type);
269
+ ptr = snap_read(ptr, &bool_value, max_value_size);
270
+ if (_type == value_type::string) {
271
+ if (string_value.allocated) {
272
+ string_value.str = loader.string_table[(std::uintptr_t)(string_value.str)];
273
+ } else {
274
+ string_value.str = loader.story_string_table + (std::uintptr_t)(string_value.str);
275
+ }
276
+ }
277
+ return ptr;
278
+ }
279
+ } // namespace ink::runtime::internal