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.
- checksums.yaml +7 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +1 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +84 -0
- data/LICENSE +7 -0
- data/README.md +3 -0
- data/Rakefile +16 -0
- data/bin/console +15 -0
- data/bin/setup +10 -0
- data/bin/tapioca +29 -0
- data/ext/inkcpp_rb/extconf.rb +19 -0
- data/ext/inkcpp_rb/inkcpp/.clang-format +99 -0
- data/ext/inkcpp_rb/inkcpp/.github/FUNDING.yml +1 -0
- data/ext/inkcpp_rb/inkcpp/.github/workflows/build.yml +344 -0
- data/ext/inkcpp_rb/inkcpp/.github/workflows/release.yml +49 -0
- data/ext/inkcpp_rb/inkcpp/.gitignore +25 -0
- data/ext/inkcpp_rb/inkcpp/.gitmodules +9 -0
- data/ext/inkcpp_rb/inkcpp/CMakeLists.txt +170 -0
- data/ext/inkcpp_rb/inkcpp/CODE_OF_CONDUCT.md +76 -0
- data/ext/inkcpp_rb/inkcpp/CONTRIBUTING.md +55 -0
- data/ext/inkcpp_rb/inkcpp/Config.cmake.in +2 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/CMakeLists.txt +13 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.c +38 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.cpp +40 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink.json +1 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example.zip +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/InkCPP_DEMO.zip +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/CreateThread.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/HandleChoice.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ListElementOf.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalRuntime.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalThread.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ObseverChange.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/TagListGetValue.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/YieldResume.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Doxyfile +2825 -0
- data/ext/inkcpp_rb/inkcpp/LICENSE.txt +22 -0
- data/ext/inkcpp_rb/inkcpp/Minimal.runsettings +8 -0
- data/ext/inkcpp_rb/inkcpp/README.md +192 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/CMakeLists.txt +67 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/array.h +481 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/avl_array.h +833 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/casting.h +93 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/choice.cpp +54 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.cpp +124 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.h +406 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.cpp +52 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.h +34 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/executioner.h +179 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/functional.cpp +86 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/functions.cpp +54 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/functions.h +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.cpp +289 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.h +149 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/header.cpp +44 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/choice.h +106 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/functional.h +327 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/globals.h +196 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/list.h +187 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/runner.h +291 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/snapshot.h +61 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/story.h +219 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/story_ptr.h +233 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/traits.h +270 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/types.h +169 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.cpp +79 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.h +39 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.cpp +276 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.h +356 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.cpp +841 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.h +450 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.h +529 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/operation_bases.h +164 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/operations.h +100 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/output.cpp +528 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/output.h +153 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/platform.h +22 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/random.h +38 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.cpp +1396 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.h +336 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/simple_restorable_stack.h +335 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.cpp +182 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.h +91 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_interface.h +57 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/stack.cpp +618 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/stack.h +243 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.cpp +361 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.h +92 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/story_ptr.cpp +75 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.cpp +125 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.h +67 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.cpp +149 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.h +47 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_utils.h +207 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/system.cpp +39 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/tuple.hpp +151 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/value.cpp +279 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/value.h +666 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/CMakeLists.txt +62 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/include/inkcpp.h +393 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp.cpp +344 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp_c.pc.in +10 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/ExternalFunction.c +56 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Globals.c +98 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Lists.c +73 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Observer.c +36 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Snapshot.c +65 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/CMakeLists.txt +49 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/inkcpp_cl.cpp +215 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.cpp +209 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.h +8 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/CMakeLists.txt +37 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.cpp +446 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.h +70 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.cpp +166 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.h +79 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/command.cpp +107 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/compiler.cpp +96 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.cpp +62 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.h +104 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compilation_results.h +22 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compiler.h +44 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json.hpp +24596 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.cpp +411 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.h +62 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.cpp +47 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.h +70 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.cpp +107 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.h +55 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/CMakeLists.txt +19 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/example.py +78 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/src/module.cpp +317 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/conftest.py +53 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_ExternalFunctions.py +35 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Globals.py +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Lists.py +43 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Observer.py +27 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Snapshot.py +57 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/unreal_example.ink +71 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Array.cpp +115 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/CMakeLists.txt +117 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Callstack.cpp +392 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/EmptyStringForDivert.cpp +36 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ExternalFunctionsExecuteProperly.cpp +34 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/FallbackFunction.cpp +77 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Globals.cpp +73 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/InkyJson.cpp +34 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/LabelCondition.cpp +60 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Lists.cpp +144 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/LookaheadSafe.cpp +46 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Main.cpp +7 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/MoveTo.cpp +95 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/NewLines.cpp +76 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/NoEarlyTags.cpp +33 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Observer.cpp +245 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Pointer.cpp +191 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Restorable.cpp +294 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/SpaceAfterBracketChoice.cpp +45 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Stack.cpp +224 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Tags.cpp +131 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ThirdTierChoiceAfterBrackets.cpp +38 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/UTF8.cpp +56 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Value.cpp +210 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/catch.hpp +17970 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/AHF.ink +7 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ChoiceBracketStory.ink +7 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/EmptyStringForDivert.ink +13 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ExternalFunctionsExecuteProperly.ink +11 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/FallBack.ink +15 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/GlobalStory.ink +9 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LabelConditionStory.ink +5 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LinesStory.ink +42 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListLogicStory.ink +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListStory.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LookaheadSafe.ink +14 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/MoveTo.ink +36 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/NoEarlyTags.ink +19 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ObserverStory.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/SimpleStoryFlow.ink +65 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TagsStory.ink +22 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TheIntercept.ink +1686 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ThirdTierChoiceAfterBracketsStory.ink +13 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF-8-demo.txt +212 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF8Story.ink +218 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inklecate.json +154 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inky.json +160 -0
- data/ext/inkcpp_rb/inkcpp/notes/ArchitectureNotes.md +54 -0
- data/ext/inkcpp_rb/inkcpp/notes/ListNotes.md +69 -0
- data/ext/inkcpp_rb/inkcpp/notes/OperationNotes.md +35 -0
- data/ext/inkcpp_rb/inkcpp/notes/TagsNotes.md +24 -0
- data/ext/inkcpp_rb/inkcpp/notes/WhitespaceNotes.md +28 -0
- data/ext/inkcpp_rb/inkcpp/proofing/README.md +3 -0
- data/ext/inkcpp_rb/inkcpp/proofing/inkcpp_runtime_driver +12 -0
- data/ext/inkcpp_rb/inkcpp/pyproject.toml +63 -0
- data/ext/inkcpp_rb/inkcpp/setup.py +166 -0
- data/ext/inkcpp_rb/inkcpp/shared/CMakeLists.txt +14 -0
- data/ext/inkcpp_rb/inkcpp/shared/private/command.h +172 -0
- data/ext/inkcpp_rb/inkcpp/shared/private/header.h +46 -0
- data/ext/inkcpp_rb/inkcpp/shared/public/config.h +53 -0
- data/ext/inkcpp_rb/inkcpp/shared/public/system.h +307 -0
- data/ext/inkcpp_rb/inkcpp/shared/public/version.h +14 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestAllSequenceTypes.ink +59 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestArithmetic.ink +17 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestBasicStringLiterals.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestBasicTunnel.ink +10 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestBlanksInInlineSequences.ink +51 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestCallStackEvaluation.ink +15 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestChoiceCount.ink +15 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestChoiceDivertsToDone.ink +6 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestChoiceWithBracketsOnly.ink +9 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestCompareDivertTargets.ink +26 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestComplexTunnels.ink +22 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestConditionalChoiceInWeave.ink +19 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestTunnelOnwardsAfterTunnel.ink +17 -0
- data/ext/inkcpp_rb/inkcpp/unreal/CMakeLists.txt +51 -0
- data/ext/inkcpp_rb/inkcpp/unreal/UE_example.ink +92 -0
- data/ext/inkcpp_rb/inkcpp/unreal/blueprint_filter.js +377 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Resources/Icon128.png +0 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkAsset.cpp +47 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkChoice.cpp +40 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkList.cpp +86 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkRuntime.cpp +265 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkThread.cpp +239 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkVar.cpp +143 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/TagList.cpp +95 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/inkcpp.cpp +13 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkAsset.h +50 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkChoice.h +58 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkDelegates.h +139 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkList.h +102 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkRuntime.h +177 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkSnapshot.h +30 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkThread.h +215 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkVar.h +245 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/TagList.h +77 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/inkcpp.h +217 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/inkcpp.Build.cs +62 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.cpp +237 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.h +43 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inkcpp_editor.cpp +13 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inklecate_cmd.cpp.in +24 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Public/inkcpp_editor.h +9 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/inkcpp_editor.Build.cs +61 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/inkcpp.uplugin +44 -0
- data/ext/inkcpp_rb/inkcpp/unreal/render.css +1 -0
- data/ext/inkcpp_rb/inkcpp_rb.cpp +321 -0
- data/inkcpp_rb.gemspec +54 -0
- data/rbi/inkcpp_rb.rbi +211 -0
- data/sorbet/config +4 -0
- data/sorbet/rbi/annotations/.gitattributes +1 -0
- data/sorbet/rbi/annotations/minitest.rbi +119 -0
- data/sorbet/rbi/gems/.gitattributes +1 -0
- data/sorbet/rbi/gems/benchmark@0.4.0.rbi +618 -0
- data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
- data/sorbet/rbi/gems/minitest@5.25.4.rbi +1547 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
- data/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
- data/sorbet/rbi/gems/prism@1.3.0.rbi +40040 -0
- data/sorbet/rbi/gems/rake-compiler@1.2.8.rbi +9 -0
- data/sorbet/rbi/gems/rake@13.2.1.rbi +3033 -0
- data/sorbet/rbi/gems/rbi@0.2.2.rbi +4527 -0
- data/sorbet/rbi/gems/rice@4.3.3.rbi +44 -0
- data/sorbet/rbi/gems/spoom@1.5.0.rbi +4932 -0
- data/sorbet/rbi/gems/tapioca@0.16.7.rbi +3611 -0
- data/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
- data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
- data/sorbet/rbi/gems/yard@0.9.37.rbi +18379 -0
- data/sorbet/tapioca/config.yml +13 -0
- data/sorbet/tapioca/require.rb +4 -0
- 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
|