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,52 @@
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 "stack.h"
8
+ #include "value.h"
9
+ #include "operations.h"
10
+ #include "story_impl.h"
11
+ #include "globals_impl.h"
12
+ #include "runner.h"
13
+
14
+ #include <iostream>
15
+
16
+ namespace ink::runtime::internal {
17
+
18
+ void operation<Command::READ_COUNT_VAR, value_type::divert, void>::operator()(
19
+ basic_eval_stack& stack, value* vals)
20
+ {
21
+ container_t id;
22
+ bool success = _story.get_container_id(
23
+ _story.instructions() + vals[0].get<value_type::divert>(),
24
+ id);
25
+ inkAssert(success, "failed to find container to read visit count!");
26
+ stack.push(value{}.set<value_type::int32>(
27
+ static_cast<int32_t>(_visit_counts.visits( id )
28
+ )));
29
+ }
30
+
31
+ void operation<Command::TURNS, value_type::divert, void>::operator()(
32
+ basic_eval_stack& stack, value* vals)
33
+ {
34
+ container_t id;
35
+ bool success = _story.get_container_id(
36
+ _story.instructions() + vals[0].get<value_type::divert>(),
37
+ id);
38
+ inkAssert(success, "failed to find container to read turn count!");
39
+ stack.push(value{}.set<value_type::int32>(
40
+ static_cast<int32_t>(_visit_counts.turns(id)
41
+ )));
42
+ }
43
+
44
+ void operation<Command::CHOICE_COUNT, value_type::none, void>::operator()
45
+ (basic_eval_stack& stack, value* vals)
46
+ {
47
+ stack.push(value{}.set<value_type::int32>(static_cast<int32_t>(
48
+ _runner.num_choices()
49
+ )));
50
+ }
51
+
52
+ }
@@ -0,0 +1,34 @@
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
+ namespace ink::runtime::internal {
10
+
11
+ template<>
12
+ class operation<Command::READ_COUNT_VAR, value_type::divert, void> : public operation_base<const story_impl, globals_impl>
13
+ {
14
+ public:
15
+ using operation_base::operation_base;
16
+ void operator()(basic_eval_stack& stack, value* vals);
17
+ };
18
+
19
+ template<>
20
+ class operation<Command::TURNS, value_type::divert, void> : public operation_base<const story_impl, globals_impl>
21
+ {
22
+ public:
23
+ using operation_base::operation_base;
24
+ void operator()(basic_eval_stack& stack, value* vals);
25
+ };
26
+
27
+ template<>
28
+ class operation<Command::CHOICE_COUNT, value_type::none, void> : public operation_base<const runner_interface>
29
+ {
30
+ public:
31
+ using operation_base::operation_base;
32
+ void operator()(basic_eval_stack& stack, value* vals);
33
+ };
34
+ }
@@ -0,0 +1,179 @@
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
+ /// Defines the executioner class which initialize the different operations
10
+ /// and managed the access to them.
11
+ ///
12
+ /// The executer creates a array of pointer to the arguments passed, and pass
13
+ /// them to each operator, so that each operator can grep the needed arguments.
14
+ /// Therefore it is required that each argument has a unique type, so that the
15
+ /// order won't matter.
16
+ ///
17
+ /// When call an operation the executioner iterates through all commands and
18
+ /// after find an command match.
19
+ /// Then pop arguments from the stack as defined in `command_num_args`.
20
+ /// After this iterate through the implementations of that command for different
21
+ /// type until it found the correct type, than execute the operation.
22
+ /// The search is O(n), but the list is only populated with commands which have
23
+ /// at least one implementation, also per command only types listed for which
24
+ /// the command is implemented.
25
+ ///
26
+ /// Improvements: The executioner -> typed_executer could be O(1) when using a
27
+ /// look up table.
28
+
29
+ #include "system.h"
30
+ #include "value.h"
31
+ #include "stack.h"
32
+ #include "operations.h"
33
+
34
+
35
+
36
+ namespace ink::runtime::internal {
37
+
38
+ /**
39
+ * @brief iterates through value_types until it found a matching operator.
40
+ * Matching means a operator which implements the command for the type.
41
+ * @tparam cmd Command to search operation for.
42
+ * @tparam t value type to start search
43
+ * @tparam Offset t + Offset is real start, used because trouble with mscv
44
+ * @return value_type::OP_END, if no "next operation" found
45
+ * @return type which is greater t + Offset and implement the command
46
+ */
47
+ template<Command cmd, value_type t, size_t Offset>
48
+ constexpr value_type next_operatable_type() {
49
+ constexpr value_type ty = t + Offset;
50
+ if constexpr (operation<cmd,ty>::enabled) {
51
+ return ty;
52
+ } else if constexpr (ty >= value_type::OP_END){
53
+ return value_type::OP_END;
54
+ } else {
55
+ return next_operatable_type<cmd,ty,1>();
56
+ }
57
+ }
58
+
59
+ /**
60
+ * @brief Iterates through all existing operations for this Command.
61
+ */
62
+ template<Command cmd, value_type ty = next_operatable_type<cmd,value_type::BEGIN,0>()>
63
+ class typed_executer {
64
+ public:
65
+ static constexpr bool enabled = true;
66
+ template<typename T>
67
+ typed_executer(const T& t) : _typed_exe{t}, _op{t} {}
68
+
69
+ void operator()(value_type t, basic_eval_stack& s, value* v) {
70
+ if (t == ty) { _op(s, v); }
71
+ else { _typed_exe(t, s, v); }
72
+ }
73
+ private:
74
+ // skip command for not implemented types
75
+ typed_executer<cmd, next_operatable_type<cmd,static_cast<value_type>(ty),1>()> _typed_exe;
76
+ operation<cmd, ty> _op;
77
+ };
78
+
79
+ // end of recursion (has no operation attached to it)
80
+ template<Command cmd>
81
+ class typed_executer<cmd, value_type::OP_END> {
82
+ public:
83
+ static constexpr bool enabled = false;
84
+ template<typename T>
85
+ typed_executer(const T& t) {}
86
+
87
+ void operator()(value_type, basic_eval_stack&, value*) {
88
+ inkFail("Operation for value not supported!");
89
+ }
90
+ };
91
+
92
+ /**
93
+ * @brief Find next command which is at least for one type implemented.
94
+ * @tparam c command to start search
95
+ * @tparam Offset offset to start search, used because of trouble with mscv
96
+ * @return Command::OP_END if no next operation is found
97
+ * @return next command witch at least of implementation.
98
+ */
99
+ template<Command c, size_t Offset>
100
+ constexpr Command next_operatable_command() {
101
+ constexpr Command cmd = c + Offset;
102
+ if constexpr (typed_executer<cmd>::enabled) {
103
+ return cmd;
104
+ } else if constexpr (cmd >= Command::OP_END){
105
+ return Command::OP_END;
106
+ } else {
107
+ return next_operatable_command<cmd,1>();
108
+ }
109
+ }
110
+
111
+ /**
112
+ * @brief Iterate through all commands to find correct command.
113
+ * Also instantiates all typed_executer and with them the operations.
114
+ */
115
+ template<Command cmd = next_operatable_command<Command::OP_BEGIN,0>()>
116
+ class executer_imp {
117
+ public:
118
+ template<typename T>
119
+ executer_imp(const T& t) : _exe{t}, _typed_exe{t}{}
120
+
121
+ void operator()(Command c, basic_eval_stack& s) {
122
+ if (c == cmd) {
123
+ static constexpr size_t N = command_num_args(cmd);
124
+ if constexpr (N == 0) {
125
+ value_type ty = casting::common_base<0>(nullptr);
126
+ _typed_exe(ty, s, nullptr);
127
+ } else {
128
+ value args[N];
129
+ for (int i = command_num_args(cmd)-1; i >= 0 ; --i) {
130
+ args[i] = s.pop();
131
+ }
132
+ value_type ty = casting::common_base<N>(args);
133
+ _typed_exe(ty, s, args);
134
+ }
135
+ } else { _exe(c, s); }
136
+ }
137
+ private:
138
+ executer_imp<next_operatable_command<cmd,1>()> _exe;
139
+ typed_executer<cmd> _typed_exe;
140
+ };
141
+
142
+ /// end of recursion
143
+ template<>
144
+ class executer_imp<Command::OP_END> {
145
+ public:
146
+ template<typename T>
147
+ executer_imp(const T& t) {}
148
+ void operator()(Command, basic_eval_stack&) {
149
+ inkFail("requested command was not found!");
150
+ }
151
+ };
152
+
153
+ /**
154
+ * @brief Class which instantiates all operations and give access to them.
155
+ */
156
+ class executer {
157
+ public:
158
+ /**
159
+ * @brief pass all arguments to operations who need them.
160
+ * @attention each type need to be unique for the look up later!
161
+ * @tparam Args argument types
162
+ * @param args arguments
163
+ */
164
+ template<typename ... Args>
165
+ executer(Args& ... args) : _executer{tuple<Args*...>(&args...)} {}
166
+
167
+ /**
168
+ * @brief execute command on stack.
169
+ * @param cmd command to execute
170
+ * @param stack stack to operate on
171
+ */
172
+ void operator()(Command cmd, basic_eval_stack& stack) {
173
+ _executer(cmd, stack);
174
+ }
175
+ private:
176
+ executer_imp<Command::OP_BEGIN> _executer;
177
+ };
178
+ }
179
+
@@ -0,0 +1,86 @@
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 "functional.h"
8
+
9
+ #include "value.h"
10
+ #include "stack.h"
11
+ #include "string_table.h"
12
+
13
+ #ifdef INK_ENABLE_UNREAL
14
+ # include "InkVar.h"
15
+ #endif
16
+
17
+ namespace ink::runtime::internal
18
+ {
19
+ template<>
20
+ ink::runtime::value
21
+ function_base::pop<ink::runtime::value>(basic_eval_stack* stack, list_table& lists)
22
+ {
23
+ value val = stack->pop();
24
+ return val.to_interface_value(lists);
25
+ }
26
+
27
+ template<>
28
+ int32_t function_base::pop<int32_t>(basic_eval_stack* stack, list_table& lists)
29
+ {
30
+ value val = stack->pop();
31
+ inkAssert(val.type() == value_type::int32, "Type missmatch!");
32
+ return val.get<value_type::int32>();
33
+ }
34
+
35
+ template<>
36
+ const char* function_base::pop<const char*>(basic_eval_stack* stack, list_table& lists)
37
+ {
38
+ value val = stack->pop();
39
+ inkAssert(val.type() == value_type::string, "Type missmatch!");
40
+ return val.get<value_type::string>().str;
41
+ }
42
+
43
+ template<>
44
+ void function_base::push<int32_t>(basic_eval_stack* stack, const int32_t& v)
45
+ {
46
+ stack->push(value{}.set<value_type::int32>(v));
47
+ }
48
+
49
+ void function_base::push_void(basic_eval_stack* stack) { stack->push(values::null); }
50
+
51
+ void function_base::push_string(basic_eval_stack* stack, const char* dynamic_string)
52
+ {
53
+ stack->push(value{}.set<value_type::string>(dynamic_string, true));
54
+ }
55
+
56
+ char* function_base::allocate(string_table& strings, size_t len) { return strings.create(len); }
57
+
58
+ // Generate template implementations for all significant types
59
+
60
+ #ifdef INK_ENABLE_STL
61
+ template<>
62
+ std::string function_base::pop<std::string>(basic_eval_stack* stack, list_table& lists)
63
+ {
64
+ return std::string(pop<const char*>(stack, lists));
65
+ }
66
+ #endif
67
+ #ifdef INK_ENABLE_UNREAL
68
+ template<>
69
+ FInkVar function_base::pop<FInkVar>(basic_eval_stack* stack, list_table& lists)
70
+ {
71
+ return FInkVar(stack->pop().to_interface_value(lists));
72
+ }
73
+ #endif
74
+ template<>
75
+ void function_base::push<ink::runtime::value>(
76
+ basic_eval_stack* stack, const ink::runtime::value& value
77
+ )
78
+ {
79
+ internal::value val{};
80
+ if (val.set(value)) {
81
+ stack->push(val);
82
+ } else {
83
+ inkFail("unable to set variable?");
84
+ }
85
+ }
86
+ } // namespace ink::runtime::internal
@@ -0,0 +1,54 @@
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 "functions.h"
8
+
9
+ namespace ink::runtime::internal
10
+ {
11
+ functions::functions()
12
+ : _list(nullptr)
13
+ , _last(nullptr)
14
+ {
15
+ }
16
+
17
+ functions::~functions()
18
+ {
19
+ // clean list
20
+ while (_list) {
21
+ entry* toDelete = _list;
22
+ _list = _list->next;
23
+
24
+ // delete both value and entry
25
+ delete toDelete->value;
26
+ delete toDelete;
27
+ }
28
+ _list = _last = nullptr;
29
+ }
30
+
31
+ void functions::add(hash_t name, function_base* func)
32
+ {
33
+ entry* current = new entry;
34
+ current->name = name;
35
+ current->value = func;
36
+ current->next = nullptr;
37
+
38
+ if (_list == nullptr) {
39
+ _list = _last = current;
40
+ } else {
41
+ _last->next = current;
42
+ _last = current;
43
+ }
44
+ }
45
+
46
+ function_base* functions::find(hash_t name)
47
+ {
48
+ // find entry
49
+ entry* iter = _list;
50
+ while (iter != nullptr && iter->name != name)
51
+ iter = iter->next;
52
+ return iter == nullptr ? nullptr : iter->value;
53
+ }
54
+ } // namespace ink::runtime::internal
@@ -0,0 +1,40 @@
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
+ #include "functional.h"
10
+ #include "system.h"
11
+
12
+ namespace ink::runtime::internal
13
+ {
14
+ class basic_eval_stack;
15
+
16
+ // Stores bound functions
17
+ class functions
18
+ {
19
+ public:
20
+ functions();
21
+ ~functions();
22
+
23
+ // Adds a function to the registry
24
+ void add(hash_t name, function_base* func);
25
+
26
+ // Calls a function (if available)
27
+ function_base* find(hash_t name);
28
+
29
+ private:
30
+ struct entry {
31
+ hash_t name;
32
+ function_base* value;
33
+ entry* next;
34
+ };
35
+
36
+ // TODO: Better than a linked list?
37
+ entry* _list;
38
+ entry* _last;
39
+ };
40
+ } // namespace ink::runtime::internal