Skip to content
Snippets Groups Projects
Select Git revision
  • 667d164bee2c0cab008b50e9c96e97533f11cdb7
  • develop default protected
  • feature/advection
  • feature/composite-scheme-other-fluxes
  • origin/stage/bouguettaia
  • save_clemence
  • feature/local-dt-fsi
  • feature/variational-hydro
  • feature/gmsh-reader
  • feature/reconstruction
  • feature/kinetic-schemes
  • feature/composite-scheme-sources
  • feature/serraille
  • feature/composite-scheme
  • hyperplastic
  • feature/polynomials
  • feature/gks
  • feature/implicit-solver-o2
  • feature/coupling_module
  • feature/implicit-solver
  • feature/merge-local-dt-fsi
  • v0.5.0 protected
  • v0.4.1 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0 protected
  • Kidder
  • v0.0.4 protected
  • v0.0.3 protected
  • v0.0.2 protected
  • v0 protected
  • v0.0.1 protected
33 results

AffectationProcessor.hpp

Blame
  • ASTNodeFunctionExpressionBuilder.cpp 27.95 KiB
    #include <language/ast/ASTNodeFunctionExpressionBuilder.hpp>
    
    #include <language/PEGGrammar.hpp>
    #include <language/ast/ASTNodeDataTypeFlattener.hpp>
    #include <language/node_processor/FunctionProcessor.hpp>
    #include <language/node_processor/TupleToTinyMatrixProcessor.hpp>
    #include <language/node_processor/TupleToTinyVectorProcessor.hpp>
    #include <language/utils/ASTNodeNaturalConversionChecker.hpp>
    #include <language/utils/FunctionTable.hpp>
    #include <language/utils/SymbolTable.hpp>
    #include <utils/Exceptions.hpp>
    
    template <typename SymbolType>
    std::unique_ptr<IFunctionArgumentConverter>
    ASTNodeFunctionExpressionBuilder::_getArgumentConverter(SymbolType& parameter_symbol,
                                                            const ASTNodeSubDataType& node_sub_data_type)
    {
      const size_t parameter_id = std::get<size_t>(parameter_symbol.attributes().value());
    
      ASTNodeNaturalConversionChecker{node_sub_data_type, parameter_symbol.attributes().dataType()};
    
      auto get_function_argument_converter_for =
        [&](const auto& parameter_v) -> std::unique_ptr<IFunctionArgumentConverter> {
        using ParameterT = std::decay_t<decltype(parameter_v)>;
        switch (node_sub_data_type.m_data_type) {
        case ASTNodeDataType::bool_t: {
          return std::make_unique<FunctionArgumentConverter<ParameterT, bool>>(parameter_id);
        }
        case ASTNodeDataType::unsigned_int_t: {
          return std::make_unique<FunctionArgumentConverter<ParameterT, uint64_t>>(parameter_id);
        }
        case ASTNodeDataType::int_t: {
          return std::make_unique<FunctionArgumentConverter<ParameterT, int64_t>>(parameter_id);
        }
        case ASTNodeDataType::double_t: {
          return std::make_unique<FunctionArgumentConverter<ParameterT, double>>(parameter_id);
        }
          // LCOV_EXCL_START
        default: {
          throw ParseError("unexpected error: invalid argument type",
                           std::vector{node_sub_data_type.m_parent_node.begin()});
        }
          // LCOV_EXCL_STOP
        }
      };
    
      auto get_function_argument_converter_for_type_id =
        [&](const std::string& type_id_name) -> std::unique_ptr<IFunctionArgumentConverter> {
        switch (node_sub_data_type.m_data_type) {
        case ASTNodeDataType::type_id_t: {
          if (node_sub_data_type.m_data_type.nameOfTypeId() == type_id_name) {
            return std::make_unique<FunctionArgumentConverter<EmbeddedData, EmbeddedData>>(parameter_id);
          } else {
            // LCOV_EXCL_START
            throw ParseError("unexpected error: invalid argument type",
                             std::vector{node_sub_data_type.m_parent_node.begin()});
            // LCOV_EXCL_STOP
          }
        }
          // LCOV_EXCL_START
        default: {
          throw ParseError("unexpected error: invalid argument type",
                           std::vector{node_sub_data_type.m_parent_node.begin()});
        }
          // LCOV_EXCL_STOP
        }
      };
    
      auto get_function_argument_converter_for_vector =
        [&](const auto& parameter_v) -> std::unique_ptr<IFunctionArgumentConverter> {