From 4a0f5faae3156f3a2a34f7b99ec4b9eefd387fcc Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Fri, 25 Oct 2024 12:27:55 +0200 Subject: [PATCH] move functions to cpp --- .../modelConverter/convertorVisitor.cpp | 132 +++++++++++++++ .../solver/modelConverter/convertorVisitor.h | 153 +++--------------- 2 files changed, 154 insertions(+), 131 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 577ef25771..34940116a5 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -23,5 +23,137 @@ namespace Antares::Solver::ModelConverter { +ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, + const ObjectModel::Model& model): + registry_(registry), + model_(model) +{ +} + +antlrcpp::Any ConvertorVisitor::visitChildren(antlr4::tree::ParseTree* node) +{ + for (auto child: node->children) + { + child->accept(this); + } + return antlrcpp::Any(); +} + +std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) +{ + return tree->accept(this); +} + +std::any ConvertorVisitor::visitTerminal(antlr4::tree::TerminalNode* node) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitErrorNode(antlr4::tree::ErrorNode* node) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) +{ + bool is_parameter = false; + for (const auto& [name, parameter]: model_.Parameters()) + { + if (name == context->getText()) + { + is_parameter = true; + break; + } + } + if (is_parameter) + { + return static_cast( + registry_.create(context->getText())); + } + else + { + return static_cast( + registry_.create(context->getText())); + } +} + +std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) +{ + // Meh + // Having to know the underlying type of the node is not great. We can eitgher return + // expression node containing the concrete node to be able to always anycast Or + // we can return a pair Node/type (difficult to return a type in c++) + auto toNodePtr = [](const auto& x) + { return std::any_cast(x); }; + auto* left = toNodePtr(visit(context->expr(0))); + auto* right = toNodePtr(visit(context->expr(1))); + auto mult_node = registry_.create(left, right); + return dynamic_cast(mult_node); +} + +std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitShift(ExprParser::ShiftContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitNegation(ExprParser::NegationContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitExpression(ExprParser::ExpressionContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitAddsub(ExprParser::AddsubContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitPortField(ExprParser::PortFieldContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitTimeIndex(ExprParser::TimeIndexContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitTimeShift(ExprParser::TimeShiftContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitFunction(ExprParser::FunctionContext* context) +{ + return std::any(); +} + +/* std::any ConvertorVisitor::visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any ConvertorVisitor::visitTimeRange(ExprParser::TimeRangeContext* context) */ +/* { */ +/* return std::any(); */ +/* } */ } // namespace Antares::Solver::ModelConverter diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 063202d047..b81460a4a6 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -35,137 +35,28 @@ class ConvertorVisitor: public ExprVisitor { public: ConvertorVisitor(Antares::Solver::Registry& registry, - const ObjectModel::Model& model): - registry_(registry), - model_(model) - { - } - - virtual antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override - { - for (auto child: node->children) - { - child->accept(this); - } - return antlrcpp::Any(); - } - - std::any visit(antlr4::tree::ParseTree* tree) override - { - return tree->accept(this); - } - - std::any visitTerminal(antlr4::tree::TerminalNode* node) override - { - return std::any(); - } - - std::any visitErrorNode(antlr4::tree::ErrorNode* node) override - { - return std::any(); - } - - std::any visitIdentifier(ExprParser::IdentifierContext* context) override - { - bool is_parameter = false; - for (const auto& [name, parameter]: model_.Parameters()) - { - if (name == context->getText()) - { - is_parameter = true; - break; - } - } - if (is_parameter) - { - return static_cast( - registry_.create(context->getText())); - } - else - { - return static_cast( - registry_.create(context->getText())); - } - } - - std::any visitMuldiv(ExprParser::MuldivContext* context) override - { - // Meh - // Having to know the underlying type of the node is not great. We can eitgher return - // expression node containing the concrete node to be able to always anycast Or - // we can return a pair Node/type (difficult to return a type in c++) - auto toNodePtr = [](const auto& x) - { return std::any_cast(x); }; - auto* left = toNodePtr(visit(context->expr(0))); - auto* right = toNodePtr(visit(context->expr(1))); - auto mult_node = registry_.create(left, right); - return dynamic_cast(mult_node); - } - - std::any visitFullexpr(ExprParser::FullexprContext* context) override - { - return std::any(); - } - - std::any visitShift(ExprParser::ShiftContext* context) override - { - return std::any(); - } - - std::any visitNegation(ExprParser::NegationContext* context) override - { - return std::any(); - } - - std::any visitExpression(ExprParser::ExpressionContext* context) override - { - return std::any(); - } - - std::any visitComparison(ExprParser::ComparisonContext* context) override - { - return std::any(); - } - - std::any visitAddsub(ExprParser::AddsubContext* context) override - { - return std::any(); - } - - std::any visitPortField(ExprParser::PortFieldContext* context) override - { - return std::any(); - } - - std::any visitNumber(ExprParser::NumberContext* context) override - { - return std::any(); - } - - std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override - { - return std::any(); - } - - std::any visitTimeShift(ExprParser::TimeShiftContext* context) override - { - return std::any(); - } - - std::any visitFunction(ExprParser::FunctionContext* context) override - { - return std::any(); - } - - /* std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) override */ - /* { */ - /* return std::any(); */ - /* } */ - - /* std::any visitTimeRange(ExprParser::TimeRangeContext* context) override */ - /* { */ - /* return std::any(); */ - /* } */ + const ObjectModel::Model& model); + + virtual antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override; + + std::any visit(antlr4::tree::ParseTree* tree) override; + std::any visitTerminal(antlr4::tree::TerminalNode* node) override; + std::any visitErrorNode(antlr4::tree::ErrorNode* node) override; + std::any visitIdentifier(ExprParser::IdentifierContext* context) override; + std::any visitMuldiv(ExprParser::MuldivContext* context) override; + std::any visitFullexpr(ExprParser::FullexprContext* context) override; + std::any visitShift(ExprParser::ShiftContext* context) override; + std::any visitNegation(ExprParser::NegationContext* context) override; + std::any visitExpression(ExprParser::ExpressionContext* context) override; + std::any visitComparison(ExprParser::ComparisonContext* context) override; + std::any visitAddsub(ExprParser::AddsubContext* context) override; + std::any visitPortField(ExprParser::PortFieldContext* context) override; + std::any visitNumber(ExprParser::NumberContext* context) override; + std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override; + std::any visitTimeShift(ExprParser::TimeShiftContext* context) override; + std::any visitFunction(ExprParser::FunctionContext* context) override; + /* std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) override; */ + /* std::any visitTimeRange(ExprParser::TimeRangeContext* context) override; */ Antares::Solver::Registry& registry_; const ObjectModel::Model& model_;