From c6c8bf96b6da96425b3cfa6f08aef0ba1fe5ada4 Mon Sep 17 00:00:00 2001 From: falsycat Date: Fri, 25 Nov 2022 20:56:26 +0900 Subject: [PATCH] improve Node/ExprTk to detect input type by the value dynamically --- file/node_exprtk.cc | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/file/node_exprtk.cc b/file/node_exprtk.cc index f73d8b8..6aeea2b 100644 --- a/file/node_exprtk.cc +++ b/file/node_exprtk.cc @@ -206,18 +206,21 @@ class ExprTk::Lambda final : public nf7::Node::Lambda, vars_.clear(); vars_.reserve(inputs.size()); for (const auto& name : f_->mem_->inputs) { - if (name.starts_with("v_")) { - auto itr = std::find_if( - inputs_.begin(), inputs_.end(), [&](auto& x) { return x.first == name; }); - assert(itr != inputs_.end()); + auto itr = std::find_if( + inputs_.begin(), inputs_.end(), [&](auto& x) { return x.first == name; }); + assert(itr != inputs_.end()); - const auto n = itr->second.tuple()->size(); + const auto& v = itr->second; + if (v.isTuple()) { + const auto n = v.tuple()->size(); if (n == 0) { - throw nf7::Exception {"got empty tuple: "+name}; + throw nf7::Exception {"got an empty tuple: "+name}; } vars_.emplace_back(name, std::vector(n)); - } else if (name.starts_with("s_")) { + + } else if (v.isString()) { vars_.emplace_back(name, std::string {}); + } else { vars_.emplace_back(name, Scalar {0}); }