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,666 @@
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
+ /// The value class contains the information which type its hold and a small
10
+ /// piece of information to access the data.
11
+ /// use explicit getter and setter to make access more uniform.
12
+ /// define different value_types, and the mapping between type and data.
13
+
14
+ #include "system.h"
15
+ #include "command.h"
16
+ #include "list_table.h"
17
+ #include "snapshot_impl.h"
18
+ #include "tuple.hpp"
19
+ #include "types.h"
20
+
21
+ #ifdef INK_ENABLE_STL
22
+ # include <iosfwd>
23
+ #endif
24
+
25
+
26
+ namespace ink::runtime::internal
27
+ {
28
+ class basic_stream;
29
+
30
+ /// different existing value_types
31
+ enum class value_type {
32
+ BEGIN, // To find the start of list
33
+ none = BEGIN, // no type -> invalid
34
+ OP_BEGIN, // first type to operate on
35
+ divert = OP_BEGIN, // divert to different story position
36
+ PRINT_BEGIN, // first printable value
37
+ boolean = PRINT_BEGIN, // boolean variable
38
+ uint32, // 32bit unsigned integer variable
39
+ int32, // 32bit integer variable
40
+ float32, // 32bit floating point value
41
+ list, // id of list in list_table
42
+ list_flag, // a single list flag
43
+ string, // Pointer to string
44
+ OP_END, // END of types where we can operate on
45
+ newline = OP_END, // newline symbol
46
+ PRINT_END, // END of printable values
47
+ marker = PRINT_END, // special marker (used in output stream)
48
+ value_pointer, // a pointer to an value
49
+ glue, // glue symbol
50
+ func_start, // start of function marker
51
+ func_end, // end of function marker
52
+ null, // void value, for function returns
53
+ ex_fn_not_found, // value for failed external function calls
54
+ tunnel_frame, // return from tunnel
55
+ function_frame, // return from function
56
+ thread_frame, // return from thread
57
+ thread_start, // start of thread frame
58
+ thread_end, // end of thread frame
59
+ jump_marker // callstack jump
60
+ };
61
+
62
+ // add operator for value_type (to simplify usage templates).
63
+ constexpr value_type operator+(value_type t, int i)
64
+ {
65
+ return static_cast<value_type>(static_cast<int>(t) + i);
66
+ }
67
+
68
+ // add operator for Command (to simplify usage in templates).
69
+ constexpr Command operator+(Command c, int i)
70
+ {
71
+ return static_cast<Command>(static_cast<int>(c) + i);
72
+ }
73
+
74
+ struct string_type {
75
+ constexpr string_type(const char* string, bool allocated)
76
+ : str{string}
77
+ , allocated{allocated}
78
+ {
79
+ }
80
+
81
+ constexpr string_type(const char* string)
82
+ : str{string}
83
+ , allocated{true}
84
+ {
85
+ }
86
+
87
+ operator const char*() const { return str; }
88
+
89
+ const char* str;
90
+ bool allocated;
91
+ };
92
+
93
+ class value;
94
+
95
+ template<value_type ty, typename T, typename ENV>
96
+ class redefine
97
+ {
98
+ public:
99
+ redefine(const ENV&) {}
100
+
101
+ value operator()(const T& lh, const T& rh);
102
+ };
103
+
104
+ /**
105
+ * @brief class to wrap stack value to common type.
106
+ */
107
+ class value : public snapshot_interface
108
+ {
109
+ public:
110
+ // snapshot interface
111
+ size_t snap(unsigned char* data, const snapper&) const;
112
+ const unsigned char* snap_load(const unsigned char* data, const loader&);
113
+
114
+ /// help struct to determine cpp type which represent the value_type
115
+ template<value_type>
116
+ struct ret {
117
+ using type = void;
118
+ };
119
+
120
+ constexpr value()
121
+ : snapshot_interface()
122
+ , bool_value{0}
123
+ , _type{value_type::none}
124
+ {
125
+ }
126
+
127
+ constexpr explicit value(value_type type)
128
+ : bool_value{0}
129
+ , _type{type}
130
+ {
131
+ }
132
+
133
+ explicit value(const ink::runtime::value& val);
134
+ bool set(const ink::runtime::value& val);
135
+ ink::runtime::value to_interface_value(list_table&) const;
136
+
137
+ /// get value of the type (if possible)
138
+ template<value_type ty>
139
+ typename ret<ty>::type get() const
140
+ {
141
+ static_assert(ty != ty, "No getter for this type defined!");
142
+ }
143
+
144
+ /// check if value evaluates to true
145
+ bool truthy(const list_table& lists) const;
146
+
147
+ /// set value of type (if possible)
148
+ template<value_type ty, typename... Args>
149
+ constexpr value& set(Args... args)
150
+ {
151
+ static_assert(sizeof...(Args) != sizeof...(Args), "No setter for this type defined!");
152
+ return *this;
153
+ }
154
+
155
+ /// get type of value
156
+ constexpr value_type type() const { return _type; }
157
+
158
+ /// returns if type is printable (see value_type)
159
+ constexpr bool printable() const
160
+ {
161
+ return _type >= value_type::PRINT_BEGIN && _type < value_type::PRINT_END;
162
+ }
163
+
164
+ friend basic_stream& operator<<(basic_stream& os, const value&);
165
+ // friend basic_stream& operator>>(basic_stream& is, value&); // TODO: implement
166
+ #ifdef INK_ENABLE_STL
167
+ /** write value string to ostream
168
+ * @param lists may set to list_table if list serelasation needed
169
+ */
170
+ std::ostream& write(std::ostream&, const list_table* lists = nullptr) const;
171
+ #endif
172
+
173
+ /// execute the type exclusive overwrite function and return a new value with
174
+ /// this new type
175
+ template<typename... T>
176
+ value redefine(const value& oth, T&... env) const;
177
+
178
+ private:
179
+ template<value_type ty, typename... T>
180
+ value redefine(const value& oth, const tuple<T*...>& env) const
181
+ {
182
+ if constexpr (ty == value_type::OP_END) {
183
+ inkFail("Can't redefine value with this type! (It is not an variable type!)");
184
+ return value{};
185
+ } else if (ty != type()) {
186
+ return redefine<ty + 1>(oth, env);
187
+ } else {
188
+ return internal::redefine<ty, typename ret<ty>::type, tuple<T*...>>(env
189
+ )(get<ty>(), oth.get<ty>());
190
+ }
191
+ }
192
+
193
+ /// actual storage
194
+ union {
195
+ bool bool_value;
196
+ int32_t int32_value;
197
+ string_type string_value;
198
+ uint32_t uint32_value;
199
+ float float_value;
200
+
201
+ struct {
202
+ uint32_t jump;
203
+ uint32_t thread_id;
204
+ } jump;
205
+
206
+ list_table::list list_value;
207
+ list_flag list_flag_value;
208
+
209
+ struct {
210
+ uint32_t addr;
211
+ bool eval; // was eval mode active in frame above
212
+ } frame_value;
213
+
214
+ struct {
215
+ hash_t name;
216
+ int ci;
217
+ } pointer;
218
+ };
219
+
220
+ static constexpr size_t max_value_size = sizeof_largest_type<
221
+ decltype(bool_value), decltype(int32_value), decltype(string_value), decltype(uint32_value),
222
+ decltype(float_value), decltype(jump), decltype(list_value), decltype(list_flag_value),
223
+ decltype(frame_value), decltype(pointer)>();
224
+ value_type _type;
225
+ };
226
+
227
+ template<value_type ty, typename T, typename ENV>
228
+ value redefine<ty, T, ENV>::operator()(const T& lh, const T& rh)
229
+ {
230
+ return value{}.set<ty>(rh);
231
+ }
232
+
233
+ // define get and set for int32
234
+ template<>
235
+ struct value::ret<value_type::int32> {
236
+ using type = int32_t;
237
+ };
238
+
239
+ template<>
240
+ inline int32_t value::get<value_type::int32>() const
241
+ {
242
+ return int32_value;
243
+ }
244
+
245
+ template<>
246
+ inline constexpr value& value::set<value_type::int32, int32_t>(int32_t v)
247
+ {
248
+ int32_value = v;
249
+ _type = value_type::int32;
250
+ return *this;
251
+ }
252
+
253
+ // define get and set for uint32
254
+ template<>
255
+ struct value::ret<value_type::uint32> {
256
+ using type = uint32_t;
257
+ };
258
+
259
+ template<>
260
+ inline uint32_t value::get<value_type::uint32>() const
261
+ {
262
+ return uint32_value;
263
+ }
264
+
265
+ template<>
266
+ inline constexpr value& value::set<value_type::uint32, uint32_t>(uint32_t v)
267
+ {
268
+ uint32_value = v;
269
+ _type = value_type::uint32;
270
+ return *this;
271
+ }
272
+
273
+ // define get and set for divert
274
+ template<>
275
+ struct value::ret<value_type::divert> {
276
+ using type = uint32_t;
277
+ };
278
+
279
+ template<>
280
+ inline uint32_t value::get<value_type::divert>() const
281
+ {
282
+ return uint32_value;
283
+ }
284
+
285
+ template<>
286
+ inline constexpr value& value::set<value_type::divert, uint32_t>(uint32_t v)
287
+ {
288
+ uint32_value = v;
289
+ _type = value_type::divert;
290
+ return *this;
291
+ }
292
+
293
+ // define get and set for float
294
+ template<>
295
+ struct value::ret<value_type::float32> {
296
+ using type = float;
297
+ };
298
+
299
+ template<>
300
+ inline float value::get<value_type::float32>() const
301
+ {
302
+ return float_value;
303
+ }
304
+
305
+ template<>
306
+ inline constexpr value& value::set<value_type::float32, float>(float v)
307
+ {
308
+ float_value = v;
309
+ _type = value_type::float32;
310
+ return *this;
311
+ }
312
+
313
+ // define get and set for boolean
314
+ template<>
315
+ struct value::ret<value_type::boolean> {
316
+ using type = bool;
317
+ };
318
+
319
+ template<>
320
+ inline bool value::get<value_type::boolean>() const
321
+ {
322
+ return bool_value;
323
+ }
324
+
325
+ template<>
326
+ inline constexpr value& value::set<value_type::boolean, bool>(bool v)
327
+ {
328
+ bool_value = v;
329
+ _type = value_type::boolean;
330
+ return *this;
331
+ }
332
+
333
+ template<>
334
+ inline constexpr value& value::set<value_type::boolean, int>(int v)
335
+ {
336
+ bool_value = static_cast<bool>(v);
337
+ _type = value_type::boolean;
338
+ return *this;
339
+ }
340
+
341
+ // define get and set for list
342
+ template<>
343
+ struct value::ret<value_type::list> {
344
+ using type = list_table::list;
345
+ };
346
+
347
+ template<>
348
+ inline list_table::list value::get<value_type::list>() const
349
+ {
350
+ return list_value;
351
+ }
352
+
353
+ template<>
354
+ inline constexpr value& value::set<value_type::list, list_table::list>(list_table::list list)
355
+ {
356
+ list_value = list;
357
+ _type = value_type::list;
358
+ return *this;
359
+ }
360
+
361
+ // define get and set for list_flag
362
+ template<>
363
+ struct value::ret<value_type::list_flag> {
364
+ using type = list_flag;
365
+ };
366
+
367
+ template<>
368
+ inline list_flag value::get<value_type::list_flag>() const
369
+ {
370
+ return list_flag_value;
371
+ }
372
+
373
+ template<>
374
+ inline constexpr value& value::set<value_type::list_flag, list_flag>(list_flag flag)
375
+ {
376
+ list_flag_value = flag;
377
+ _type = value_type::list_flag;
378
+ return *this;
379
+ }
380
+
381
+ // define get and set for string
382
+ template<>
383
+ struct value::ret<value_type::string> {
384
+ using type = string_type;
385
+ };
386
+
387
+ template<>
388
+ inline string_type value::get<value_type::string>() const
389
+ {
390
+ return string_value;
391
+ }
392
+
393
+ template<>
394
+ inline constexpr value& value::set<value_type::string, const char*>(const char* v)
395
+ {
396
+ string_value = {v};
397
+ _type = value_type::string;
398
+ return *this;
399
+ }
400
+
401
+ template<>
402
+ inline constexpr value& value::set<value_type::string, char*>(char* v)
403
+ {
404
+ string_value = {v};
405
+ _type = value_type::string;
406
+ return *this;
407
+ }
408
+
409
+ template<>
410
+ inline constexpr value&
411
+ value::set<value_type::string, const char*, bool>(const char* v, bool allocated)
412
+ {
413
+ string_value = {v, allocated};
414
+ _type = value_type::string;
415
+ return *this;
416
+ }
417
+
418
+ template<>
419
+ inline constexpr value& value::set<value_type::string, char*, bool>(char* v, bool allocated)
420
+ {
421
+ string_value = {v, allocated};
422
+ _type = value_type::string;
423
+ return *this;
424
+ }
425
+
426
+ template<>
427
+ inline constexpr value& value::set<value_type::string, string_type>(string_type str)
428
+ {
429
+ string_value = str;
430
+ _type = value_type::string;
431
+ return *this;
432
+ }
433
+
434
+ // define get and set for pointer
435
+ template<>
436
+ struct value::ret<value_type::value_pointer> {
437
+ using type = decltype(value::pointer);
438
+ };
439
+
440
+ template<>
441
+ inline value::ret<value_type::value_pointer>::type value::get<value_type::value_pointer>() const
442
+ {
443
+ return pointer;
444
+ }
445
+
446
+ template<>
447
+ inline constexpr value& value::set<value_type::value_pointer, hash_t, int>(hash_t name, int ci)
448
+ {
449
+ _type = value_type::value_pointer;
450
+ pointer.name = name;
451
+ pointer.ci = ci;
452
+ return *this;
453
+ }
454
+
455
+ // define getter and setter for jump_marker
456
+ template<>
457
+ struct value::ret<value_type::jump_marker> {
458
+ using type = decltype(value::jump);
459
+ };
460
+
461
+ template<>
462
+ inline value::ret<value_type::jump_marker>::type value::get<value_type::jump_marker>() const
463
+ {
464
+ return jump;
465
+ }
466
+
467
+ template<>
468
+ inline constexpr value&
469
+ value::set<value_type::jump_marker, decltype(value::jump)>(decltype(value::jump) v)
470
+ {
471
+ jump = v;
472
+ _type = value_type::jump_marker;
473
+ return *this;
474
+ }
475
+
476
+ template<>
477
+ inline constexpr value&
478
+ value::set<value_type::jump_marker, uint32_t, uint32_t>(uint32_t v, uint32_t j)
479
+ {
480
+ jump.jump = v;
481
+ jump.thread_id = j;
482
+ _type = value_type::jump_marker;
483
+ return *this;
484
+ }
485
+
486
+ // define getter and setter for thread_start
487
+ template<>
488
+ struct value::ret<value_type::thread_start> {
489
+ using type = decltype(value::jump);
490
+ };
491
+
492
+ template<>
493
+ inline value::ret<value_type::thread_start>::type value::get<value_type::thread_start>() const
494
+ {
495
+ return jump;
496
+ }
497
+
498
+ template<>
499
+ inline constexpr value&
500
+ value::set<value_type::thread_start, decltype(value::jump)>(decltype(value::jump) v)
501
+ {
502
+ jump = v;
503
+ _type = value_type::thread_start;
504
+ return *this;
505
+ }
506
+
507
+ template<>
508
+ inline constexpr value&
509
+ value::set<value_type::thread_start, uint32_t, uint32_t>(uint32_t v, uint32_t j)
510
+ {
511
+ jump.jump = v;
512
+ jump.thread_id = j;
513
+ _type = value_type::thread_start;
514
+ return *this;
515
+ }
516
+
517
+ // define getter and setter for thread_end
518
+ template<>
519
+ struct value::ret<value_type::thread_end> {
520
+ using type = uint32_t;
521
+ };
522
+
523
+ template<>
524
+ inline uint32_t value::get<value_type::thread_end>() const
525
+ {
526
+ return uint32_value;
527
+ }
528
+
529
+ template<>
530
+ inline constexpr value& value::set<value_type::thread_end, uint32_t>(uint32_t v)
531
+ {
532
+ uint32_value = v;
533
+ _type = value_type::thread_end;
534
+ return *this;
535
+ }
536
+
537
+ // define setter for values without storage
538
+ template<>
539
+ inline constexpr value& value::set<value_type::marker>()
540
+ {
541
+ _type = value_type::marker;
542
+ return *this;
543
+ }
544
+
545
+ template<>
546
+ inline constexpr value& value::set<value_type::glue>()
547
+ {
548
+ _type = value_type::glue;
549
+ return *this;
550
+ }
551
+
552
+ template<>
553
+ inline constexpr value& value::set<value_type::ex_fn_not_found>()
554
+ {
555
+ _type = value_type::ex_fn_not_found;
556
+ return *this;
557
+ }
558
+
559
+ template<>
560
+ inline constexpr value& value::set<value_type::newline>()
561
+ {
562
+ _type = value_type::newline;
563
+ return *this;
564
+ }
565
+
566
+ template<>
567
+ struct value::ret<value_type::newline> {
568
+ using type = const char*;
569
+ };
570
+
571
+ template<>
572
+ inline const char* value::get<value_type::newline>() const
573
+ {
574
+ static const char line_break[] = "\n";
575
+ return line_break;
576
+ }
577
+
578
+ template<>
579
+ inline constexpr value& value::set<value_type::func_start>()
580
+ {
581
+ _type = value_type::func_start;
582
+ return *this;
583
+ }
584
+
585
+ template<>
586
+ inline constexpr value& value::set<value_type::func_end>()
587
+ {
588
+ _type = value_type::func_end;
589
+ return *this;
590
+ }
591
+
592
+ template<>
593
+ inline constexpr value& value::set<value_type::null>()
594
+ {
595
+ _type = value_type::null;
596
+ return *this;
597
+ }
598
+
599
+ template<>
600
+ inline constexpr value& value::set<value_type::none>()
601
+ {
602
+ _type = value_type::none;
603
+ return *this;
604
+ }
605
+
606
+ // getter and setter for different frame types
607
+ // FIXME: the getter are not used?
608
+ template<>
609
+ struct value::ret<value_type::function_frame> {
610
+ using type = decltype(frame_value);
611
+ };
612
+
613
+ template<>
614
+ inline typename value::ret<value_type::function_frame>::type
615
+ value::get<value_type::function_frame>() const
616
+ {
617
+ return frame_value;
618
+ }
619
+
620
+ template<>
621
+ inline constexpr value& value::set<value_type::function_frame, uint32_t>(uint32_t v, bool evalOn)
622
+ {
623
+ frame_value.addr = v;
624
+ frame_value.eval = evalOn;
625
+ _type = value_type::function_frame;
626
+ return *this;
627
+ }
628
+
629
+ // FIXME: the getter are not used?
630
+ /* template<> struct value::ret<value_type::tunnel_frame>{ using type = uint32_t; }; */
631
+ /* template<> inline uint32_t value::get<value_type::tunnel_frame>() const { return uint32_value; }
632
+ */
633
+ template<>
634
+ inline constexpr value& value::set<value_type::tunnel_frame, uint32_t>(uint32_t v, bool evalOn)
635
+ {
636
+ frame_value.addr = v;
637
+ frame_value.eval = evalOn;
638
+ _type = value_type::tunnel_frame;
639
+ return *this;
640
+ }
641
+
642
+ // FIXME: the getter are not used?
643
+ /* template<> struct value::ret<value_type::thread_frame>{ using type = uint32_t; }; */
644
+ /* template<> inline uint32_t value::get<value_type::thread_frame>() const { return uint32_value; }
645
+ */
646
+ template<>
647
+ inline constexpr value& value::set<value_type::thread_frame, uint32_t>(uint32_t v, bool evalOn)
648
+ {
649
+ frame_value.addr = v;
650
+ frame_value.eval = evalOn;
651
+ _type = value_type::thread_frame;
652
+ return *this;
653
+ }
654
+
655
+ // static constexpr instantiations of flag values
656
+ namespace values
657
+ {
658
+ static constexpr value marker = value(value_type::marker);
659
+ static constexpr value glue = value(value_type::glue);
660
+ static constexpr value newline = value(value_type::newline);
661
+ static constexpr value func_start = value(value_type::func_start);
662
+ static constexpr value func_end = value(value_type::func_end);
663
+ static constexpr value null = value(value_type::null);
664
+ static constexpr value ex_fn_not_found = value(value_type::ex_fn_not_found);
665
+ } // namespace values
666
+ } // namespace ink::runtime::internal
@@ -0,0 +1,62 @@
1
+ add_library(inkcpp_c inkcpp.cpp
2
+ $<TARGET_OBJECTS:inkcpp_o>
3
+ $<TARGET_OBJECTS:inkcpp_compiler_o> )
4
+ target_include_directories(inkcpp_c PUBLIC
5
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
6
+ $<INSTALL_INTERFACE:include>
7
+ )
8
+ target_include_directories(inkcpp_c PUBLIC
9
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
10
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/inkcpp/include>
11
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/inkcpp_compiler/include>
12
+ $<INSTALL_INTERFACE:include>
13
+ )
14
+ set_target_properties(inkcpp_c PROPERTIES PUBLIC_HEADER "include/inkcpp.h")
15
+ target_link_libraries(inkcpp_c PRIVATE inkcpp_shared)
16
+ target_compile_definitions(inkcpp_c PRIVATE INK_BUILD_CLIB)
17
+
18
+ install(TARGETS inkcpp_c
19
+ EXPORT inkcppTarget
20
+ ARCHIVE DESTINATION "lib/ink"
21
+ COMPONENT lib EXCLUDE_FROM_ALL
22
+ PUBLIC_HEADER DESTINATION "include/ink/c"
23
+ COMPONENT lib EXCLUDE_FROM_ALL
24
+ )
25
+
26
+ install(TARGETS inkcpp_c inkcpp_shared
27
+ EXPORT inkcpp_cTarget
28
+ ARCHIVE DESTINATION "lib/ink"
29
+ COMPONENT clib EXCLUDE_FROM_ALL
30
+ PUBLIC_HEADER DESTINATION "include/ink/"
31
+ COMPONENT clib EXCLUDE_FROM_ALL)
32
+
33
+ include(CMakePackageConfigHelpers)
34
+ configure_package_config_file(${PROJECT_SOURCE_DIR}/Config.cmake.in
35
+ "${CMAKE_CURRENT_BINARY_DIR}/inkcppConfig.cmake"
36
+ INSTALL_DESTINATION "lib/cmake/inkcpp"
37
+ NO_SET_AND_CHECK_MACRO
38
+ NO_CHECK_REQUIRED_COMPONENTS_MACRO)
39
+ write_basic_package_version_file(
40
+ "${CMAKE_CURRENT_BINARY_DIR}/inkcppConfigVersion.cmake"
41
+ VERSION "${inkcpp_VERSION_MAJOR}.${inkcpp_VERSION_MINOR}"
42
+ COMPATIBILITY AnyNewerVersion)
43
+ install(FILES
44
+ ${CMAKE_CURRENT_BINARY_DIR}/inkcppConfig.cmake
45
+ ${CMAKE_CURRENT_BINARY_DIR}/inkcppConfigVersion.cmake
46
+ DESTINATION lib/cmake/inkcpp COMPONENT clib EXCLUDE_FROM_ALL)
47
+ export(EXPORT inkcpp_cTarget
48
+ FILE "${CMAKE_CURRENT_BINARY_DIR}/inkcppTargets.cmake")
49
+ install(EXPORT inkcpp_cTarget
50
+ FILE inkcppTargets.cmake DESTINATION "lib/cmake/inkcpp"
51
+ COMPONENT clib EXCLUDE_FROM_ALL)
52
+
53
+ # configure in two steps to get the current installation prefix
54
+ set(PREFIX "@PREFIX@")
55
+ configure_file(
56
+ ${CMAKE_CURRENT_SOURCE_DIR}/inkcpp_c.pc.in
57
+ ${CMAKE_BINARY_DIR}/inkcpp_c.pc.in
58
+ @ONLY)
59
+ install(CODE [[
60
+ get_filename_component(PREFIX ${CMAKE_INSTALL_PREFIX} ABSOLUTE)
61
+ configure_file(inkcpp_c.pc.in ${PREFIX}/lib/pkgconfig/inkcpp.pc @ONLY)
62
+ ]] COMPONENT clib EXCLUDE_FROM_ALL)