From 27fc3fd659f35c199225d5333cc7db77fb888a20 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Wed, 12 Oct 2022 12:18:18 +0200 Subject: [PATCH] nodes: Added out variable access node --- .../source/content/data_processor_nodes.cpp | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/plugins/builtin/source/content/data_processor_nodes.cpp b/plugins/builtin/source/content/data_processor_nodes.cpp index abf3544b2..bd3add798 100644 --- a/plugins/builtin/source/content/data_processor_nodes.cpp +++ b/plugins/builtin/source/content/data_processor_nodes.cpp @@ -7,6 +7,8 @@ #include #include +#include + #include #include @@ -1050,6 +1052,41 @@ namespace hex::plugin::builtin { std::array m_counts = { 0 }; }; + + class NodePatternLanguageOutVariable : public dp::Node { + public: + NodePatternLanguageOutVariable() : Node("hex.builtin.nodes.pattern_language.out_var.header", { dp::Attribute(dp::Attribute::IOType::Out, dp::Attribute::Type::Buffer, "hex.builtin.nodes.common.output") }) { } + + void drawNode() override { + ImGui::InputText("##name", this->m_name); + } + + void process() override { + auto &pl = ProviderExtraData::getCurrent().patternLanguage; + + std::scoped_lock lock(pl.runtimeMutex); + const auto &outVars = pl.runtime->getOutVariables(); + + if (outVars.contains(this->m_name)) { + std::visit(overloaded { + [](const std::string &) {}, + [](pl::ptrn::Pattern *) {}, + [this](auto &&value) { + std::vector buffer(std::min(sizeof(value), 8)); + std::memcpy(buffer.data(), &value, buffer.size()); + + this->setBufferOnOutput(0, buffer); + } + }, outVars.at(this->m_name)); + } else { + throwNodeError(hex::format("Out variable '{}' has not been defined!", this->m_name)); + } + } + + private: + std::string m_name; + }; + void registerDataProcessorNodes() { ContentRegistry::DataProcessorNode::add("hex.builtin.nodes.constants", "hex.builtin.nodes.constants.int"); ContentRegistry::DataProcessorNode::add("hex.builtin.nodes.constants", "hex.builtin.nodes.constants.float"); @@ -1104,6 +1141,8 @@ namespace hex::plugin::builtin { ContentRegistry::DataProcessorNode::add("hex.builtin.nodes.visualizer", "hex.builtin.nodes.visualizer.layered_dist"); ContentRegistry::DataProcessorNode::add("hex.builtin.nodes.visualizer", "hex.builtin.nodes.visualizer.image"); ContentRegistry::DataProcessorNode::add("hex.builtin.nodes.visualizer", "hex.builtin.nodes.visualizer.byte_distribution"); + + ContentRegistry::DataProcessorNode::add("hex.builtin.nodes.pattern_language", "hex.builtin.nodes.pattern_language.out_var"); } } \ No newline at end of file