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,191 @@
1
+ #include "catch.hpp"
2
+
3
+ #include <story_ptr.h>
4
+
5
+ using namespace ink::runtime;
6
+ using ink::runtime::internal::ref_block;
7
+
8
+ class test_object
9
+ {
10
+ public:
11
+ test_object() { num_objects++; }
12
+ ~test_object() { num_objects--; }
13
+
14
+ int myData = 5;
15
+
16
+ static int num_objects;
17
+ };
18
+
19
+ int test_object::num_objects = 0;
20
+
21
+ typedef story_ptr<test_object> test_object_p;
22
+
23
+ SCENARIO("pointers can be created and destroyed", "[pointer]")
24
+ {
25
+ // ref_block normally held by the story
26
+ ref_block* story = new ref_block();
27
+ story->references = 1;
28
+
29
+ GIVEN("a story pointer")
30
+ {
31
+ {
32
+ // create object and pointer
33
+ test_object* myObject = new test_object();
34
+ test_object_p pointer = test_object_p(myObject, story);
35
+
36
+ THEN("it should be valid")
37
+ {
38
+ REQUIRE(pointer);
39
+ REQUIRE(test_object::num_objects == 1);
40
+ REQUIRE(pointer->myData == 5);
41
+ }
42
+
43
+ THEN("it should increment references to the story object")
44
+ {
45
+ REQUIRE(story->references == 2);
46
+ }
47
+ }
48
+
49
+ WHEN("it goes out of scope")
50
+ {
51
+ THEN("the object should be destroyed")
52
+ {
53
+ REQUIRE(test_object::num_objects == 0);
54
+ }
55
+
56
+ THEN("the story references should decrease")
57
+ {
58
+ REQUIRE(story->references == 1);
59
+ }
60
+ }
61
+ }
62
+
63
+ delete story;
64
+ story = nullptr;
65
+ }
66
+
67
+ SCENARIO("pointers can be copied and assigned", "[pointer]")
68
+ {
69
+ // ref_block normally held by the story
70
+ ref_block* story = new ref_block();
71
+ story->references = 1;
72
+
73
+ GIVEN("a pointer")
74
+ {
75
+ // create object and pointer
76
+ test_object* myObject = new test_object();
77
+ test_object_p pointer = test_object_p(myObject, story);
78
+
79
+ WHEN("we create a copy")
80
+ {
81
+ {
82
+ test_object_p ref = pointer;
83
+
84
+ THEN("there should still only be one object")
85
+ {
86
+ REQUIRE(test_object::num_objects == 1);
87
+ }
88
+ }
89
+
90
+ WHEN("that copy goes out of scope")
91
+ {
92
+ THEN("we should still have one object")
93
+ {
94
+ REQUIRE(test_object::num_objects == 1);
95
+ }
96
+ }
97
+ }
98
+ }
99
+
100
+ GIVEN("two pointers to the same object created by assignment")
101
+ {
102
+ {
103
+ // create object and two pointers
104
+ test_object* myObject = new test_object();
105
+ test_object_p pointer = test_object_p(myObject, story);
106
+ test_object_p ref = pointer;
107
+ }
108
+
109
+ WHEN("both go out of scope")
110
+ {
111
+ THEN("we should have zero instances")
112
+ {
113
+ REQUIRE(test_object::num_objects == 0);
114
+ }
115
+ }
116
+ }
117
+
118
+ GIVEN("two pointers to the same object created by copy-constructors")
119
+ {
120
+ {
121
+ // create object and two pointers
122
+ test_object* myObject = new test_object();
123
+ test_object_p pointer = test_object_p(myObject, story);
124
+ test_object_p ref = test_object_p(pointer);
125
+ }
126
+
127
+ WHEN("both go out of scope")
128
+ {
129
+ THEN("we should have zero instances")
130
+ {
131
+ REQUIRE(test_object::num_objects == 0);
132
+ }
133
+ }
134
+ }
135
+
136
+ GIVEN("two pointers to different objects")
137
+ {
138
+ test_object* myObject = new test_object();
139
+ test_object* myOtherObject = new test_object();
140
+ test_object_p pointerA = test_object_p(myObject, story);
141
+ test_object_p pointerB = test_object_p(myOtherObject, story);
142
+
143
+ THEN("we should have two instances")
144
+ {
145
+ REQUIRE(test_object::num_objects == 2);
146
+ }
147
+
148
+ WHEN("we assign one pointer to the other")
149
+ {
150
+ pointerB = pointerA;
151
+
152
+ THEN("we should only have one object")
153
+ {
154
+ REQUIRE(test_object::num_objects == 1);
155
+ }
156
+ }
157
+ }
158
+
159
+ delete story;
160
+ story = nullptr;
161
+ }
162
+
163
+ SCENARIO("pointers become invalid when the story dies", "[pointer]")
164
+ {
165
+ // ref_block normally held by the story
166
+ ref_block* story = new ref_block();
167
+ story->references = 1;
168
+
169
+ GIVEN("a pointer")
170
+ {
171
+ test_object* myObject = new test_object();
172
+ test_object_p pointer = test_object_p(myObject, story);
173
+
174
+ THEN("it should be valid")
175
+ {
176
+ REQUIRE(pointer);
177
+ }
178
+
179
+ WHEN("the story becomes invalid")
180
+ {
181
+ story->valid = false;
182
+
183
+ THEN("the pointer should be invalid")
184
+ {
185
+ REQUIRE(!pointer);
186
+ }
187
+ }
188
+ }
189
+
190
+ delete story;
191
+ }
@@ -0,0 +1,294 @@
1
+ #include "catch.hpp"
2
+
3
+ #include "../inkcpp/collections/restorable.h"
4
+
5
+ using ink::runtime::internal::restorable;
6
+
7
+ SCENARIO("a restorable collection can operate like a stack", "[restorable]")
8
+ {
9
+ GIVEN("an empty restorable collection")
10
+ {
11
+ // Create the collection
12
+ constexpr size_t size = 128;
13
+ int buffer[size];
14
+ auto collection = restorable(buffer, size);
15
+
16
+ // Lambdas
17
+ auto isNull = [](const int&) { return false; };
18
+
19
+ THEN("it should have zero size") REQUIRE(collection.size(isNull) == 0);
20
+
21
+ WHEN("we push ten elements")
22
+ {
23
+ for (int i = 0; i < 10; i++)
24
+ collection.push(i);
25
+
26
+ THEN("the count should be ten") REQUIRE(collection.size(isNull) == 10);
27
+
28
+ THEN("The top should be nine") REQUIRE(collection.top(isNull) == 9);
29
+
30
+ THEN("We can iterate forward")
31
+ {
32
+ int check = 0;
33
+ collection.for_each([&check](int& elem) { REQUIRE(elem == check++); }, isNull);
34
+ }
35
+
36
+ THEN("We can iterate backward")
37
+ {
38
+ int check = 10;
39
+ collection.reverse_for_each([&check](int& elem) { REQUIRE(elem == --check); }, isNull);
40
+ }
41
+
42
+ THEN("Pop five elements")
43
+ {
44
+ REQUIRE(collection.pop(isNull) == 9);
45
+ REQUIRE(collection.pop(isNull) == 8);
46
+ REQUIRE(collection.pop(isNull) == 7);
47
+ REQUIRE(collection.pop(isNull) == 6);
48
+
49
+ REQUIRE(collection.top(isNull) == 5);
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ void VerifyStack(restorable<int>& stack, const std::vector<int>& expected)
56
+ {
57
+ THEN("it should match the expected array in both directions")
58
+ {
59
+ auto isNull = [](const int& e) { return e == -1; };
60
+
61
+ // Check
62
+ REQUIRE(stack.size(isNull) == expected.size());
63
+
64
+ // Iterate and make sure each element matches
65
+ int counter = 0;
66
+ stack.for_each([&counter, expected](const int& elem) {
67
+ REQUIRE(counter < expected.size());
68
+ REQUIRE(counter >= 0);
69
+ REQUIRE(expected[counter] == elem);
70
+ counter++;
71
+ }, isNull);
72
+
73
+ // Make sure we hit every element in the expected vector
74
+ REQUIRE(counter == expected.size());
75
+
76
+ // Try the other direction
77
+ stack.reverse_for_each([&counter, expected](const int& elem) {
78
+ counter--;
79
+ REQUIRE(counter >= 0);
80
+ REQUIRE(expected[counter] == elem);
81
+ }, isNull);
82
+ REQUIRE(counter == 0);
83
+ }
84
+ }
85
+
86
+ template<typename ElementType>
87
+ void RestoreAndVerifyStack(restorable<ElementType>& stack, const std::vector<ElementType>& expected)
88
+ {
89
+ WHEN("the stack is restored")
90
+ {
91
+ // Restore stack
92
+ stack.restore();
93
+
94
+ VerifyStack(stack, expected);
95
+ }
96
+ }
97
+
98
+ template<typename ElementType, typename NullifyCallback>
99
+ void ForgetAndVerifyStack(restorable<ElementType>& stack, const std::vector<ElementType>& expected, NullifyCallback nullify)
100
+ {
101
+ WHEN("the save state is forgotten")
102
+ {
103
+ // Forget save point
104
+ stack.forget(nullify);
105
+
106
+ VerifyStack(stack, expected);
107
+ }
108
+ }
109
+
110
+ SCENARIO("a collection can be restored no matter how many times you push or pop", "[restorable]")
111
+ {
112
+ // Create the collection
113
+ constexpr size_t size = 128;
114
+ int buffer[size];
115
+ auto collection = restorable(buffer, size);
116
+
117
+ // Lambdas (we'll use negative one for null)
118
+ auto isNull = [](const int& elem) { return elem == -1; };
119
+ auto nullify = [](int& elem) { elem = -1; };
120
+
121
+ GIVEN("a stack with five items that has been saved")
122
+ {
123
+ // Create five elements
124
+ std::vector<int> expected;
125
+ for (int i = 0; i < 5; i++)
126
+ {
127
+ collection.push(i);
128
+ expected.push_back(i);
129
+ }
130
+
131
+ // Create save point
132
+ collection.save();
133
+
134
+ WHEN("more elements are pushed")
135
+ {
136
+ collection.push(10);
137
+ collection.push(11);
138
+ RestoreAndVerifyStack(collection, expected);
139
+ }
140
+
141
+ WHEN("elements are popped")
142
+ {
143
+ collection.pop(isNull);
144
+ collection.pop(isNull);
145
+ RestoreAndVerifyStack(collection, expected);
146
+ }
147
+
148
+ WHEN("elements are popped and pushed")
149
+ {
150
+ collection.pop(isNull);
151
+ collection.pop(isNull);
152
+ collection.push(100);
153
+ collection.push(200);
154
+ collection.push(300);
155
+ RestoreAndVerifyStack(collection, expected);
156
+ }
157
+
158
+ WHEN("all elements are popped")
159
+ {
160
+ for (int i = 0; i < 5; i++) {
161
+ collection.pop(isNull);
162
+ }
163
+ REQUIRE(collection.size(isNull) == 0);
164
+ RestoreAndVerifyStack(collection, expected);
165
+
166
+ THEN("More are pushed")
167
+ {
168
+ collection.push(100); collection.push(200);
169
+ VerifyStack(collection, { 100, 200 });
170
+ }
171
+ }
172
+ }
173
+ }
174
+
175
+ SCENARIO("saving does not disrupt iteration", "[restorable]")
176
+ {
177
+ // Create the collection
178
+ constexpr size_t size = 128;
179
+ int buffer[size];
180
+ auto collection = restorable(buffer, size);
181
+
182
+ // Lambdas (we'll use negative one for null)
183
+ auto isNull = [](const int& elem) { return elem == -1; };
184
+ auto nullify = [](int& elem) { elem = -1; };
185
+
186
+ GIVEN("a stack with five items that has been saved")
187
+ {
188
+ // Create five elements
189
+ std::vector<int> expected;
190
+ for (int i = 0; i < 5; i++)
191
+ {
192
+ collection.push(i);
193
+ expected.push_back(i);
194
+ }
195
+
196
+ // Create save point
197
+ collection.save();
198
+
199
+ WHEN("elements are pushed")
200
+ {
201
+ collection.push(10); expected.push_back(10);
202
+ collection.push(20); expected.push_back(20);
203
+ VerifyStack(collection, expected);
204
+ }
205
+
206
+ WHEN("elements are popped")
207
+ {
208
+ collection.pop(isNull); expected.pop_back();
209
+ collection.pop(isNull); expected.pop_back();
210
+ VerifyStack(collection, expected);
211
+ }
212
+
213
+ WHEN("elements are popped and pushed")
214
+ {
215
+ collection.pop(isNull); expected.pop_back();
216
+ collection.pop(isNull); expected.pop_back();
217
+ collection.push(10); expected.push_back(10);
218
+ collection.push(20); expected.push_back(20);
219
+ VerifyStack(collection, expected);
220
+ }
221
+ }
222
+
223
+ GIVEN("an empty saved stack")
224
+ {
225
+ std::vector<int> expected;
226
+ collection.save();
227
+
228
+ WHEN("elements are pushed")
229
+ {
230
+ collection.push(10); expected.push_back(10);
231
+ collection.push(20); expected.push_back(20);
232
+ VerifyStack(collection, expected);
233
+ }
234
+
235
+ WHEN("elements are pushed then popped")
236
+ {
237
+ collection.push(10); expected.push_back(10);
238
+ collection.push(20); expected.push_back(20);
239
+ collection.pop(isNull); expected.pop_back();
240
+ collection.pop(isNull); expected.pop_back();
241
+ VerifyStack(collection, expected);
242
+ }
243
+ }
244
+ }
245
+
246
+ SCENARIO("save points can be forgotten", "[restorable]")
247
+ {
248
+ // Create the collection
249
+ constexpr size_t size = 128;
250
+ int buffer[size];
251
+ auto collection = restorable(buffer, size);
252
+
253
+ // Lambdas (we'll use negative one for null)
254
+ auto isNull = [](const int& elem) { return elem == -1; };
255
+ auto nullify = [](int& elem) { elem = -1; };
256
+
257
+ GIVEN("a stack with five items that has been saved")
258
+ {
259
+ // Create five elements
260
+ std::vector<int> expected;
261
+ for (int i = 0; i < 5; i++)
262
+ {
263
+ collection.push(i);
264
+ expected.push_back(i);
265
+ }
266
+
267
+ // Create save point
268
+ collection.save();
269
+
270
+ WHEN("elements are pushed")
271
+ {
272
+ collection.push(10); expected.push_back(10);
273
+ collection.push(20); expected.push_back(20);
274
+ ForgetAndVerifyStack(collection, expected, nullify);
275
+ }
276
+
277
+ WHEN("elements are popped")
278
+ {
279
+ collection.pop(isNull); expected.pop_back();
280
+ collection.pop(isNull); expected.pop_back();
281
+ ForgetAndVerifyStack(collection, expected, nullify);
282
+ }
283
+
284
+ WHEN("elements are popped and pushed")
285
+ {
286
+ collection.pop(isNull); expected.pop_back();
287
+ collection.pop(isNull); expected.pop_back();
288
+ collection.push(10); expected.push_back(10);
289
+ collection.push(20); expected.push_back(20);
290
+ collection.push(30); expected.push_back(30);
291
+ ForgetAndVerifyStack(collection, expected, nullify);
292
+ }
293
+ }
294
+ }
@@ -0,0 +1,45 @@
1
+ #include "catch.hpp"
2
+
3
+ #include <story.h>
4
+ #include <globals.h>
5
+ #include <runner.h>
6
+ #include <compiler.h>
7
+
8
+ using namespace ink::runtime;
9
+
10
+ SCENARIO("a story with bracketed choices and spaces can choose correctly", "[choices]")
11
+ {
12
+ GIVEN("a story with line breaks")
13
+ {
14
+ auto ink = story::from_file(INK_TEST_RESOURCE_DIR "ChoiceBracketStory.bin");
15
+ runner thread = ink->new_runner();
16
+ thread->getall();
17
+ WHEN("start thread")
18
+ {
19
+ THEN("thread has choices")
20
+ {
21
+ thread->getall();
22
+ REQUIRE(thread->has_choices());
23
+ }
24
+ WHEN("choose choice 1")
25
+ {
26
+ thread->choose(0);
27
+ thread->getall();
28
+ THEN("still has choices")
29
+ {
30
+ thread->getall();
31
+ REQUIRE(thread->has_choices());
32
+ }
33
+ }
34
+ WHEN("choose choice 2")
35
+ {
36
+ thread->choose(1);
37
+ thread->getall();
38
+ THEN("still has choices")
39
+ {
40
+ REQUIRE(thread->has_choices());
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }