Skip to content
Snippets Groups Projects
Commit 214b76e1 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add left product of a vector by a scalar

That is
``
R^3 u = (1,2,3);
R^3 v = 2*u;
``
parent 4dfd6450
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -80,6 +80,28 @@ ASTNodeBinaryOperatorExpressionBuilder::ASTNodeBinaryOperatorExpressionBuilder(A
n.m_node_processor = std::make_unique<BinaryExpressionProcessor<OperatorT, DataTA, double>>(n);
break;
}
case ASTNodeDataType::vector_t: {
if constexpr (std::is_same_v<OperatorT, language::multiply_op>) {
switch (data_type_b.dimension()) {
case 1: {
n.m_node_processor = std::make_unique<BinaryExpressionProcessor<OperatorT, DataTA, TinyVector<1>>>(n);
break;
}
case 2: {
n.m_node_processor = std::make_unique<BinaryExpressionProcessor<OperatorT, DataTA, TinyVector<2>>>(n);
break;
}
case 3: {
n.m_node_processor = std::make_unique<BinaryExpressionProcessor<OperatorT, DataTA, TinyVector<3>>>(n);
break;
}
default: {
throw parse_error("unexpected error invalid dimension", std::vector{n.children[0]->begin()});
}
}
break;
}
}
default: {
throw parse_error("undefined operand type for binary operator", std::vector{n.children[1]->begin()});
}
......
......@@ -56,6 +56,9 @@ dataTypePromotion(const ASTNodeDataType& data_type_1, const ASTNodeDataType& dat
} else if ((data_type_1 == ASTNodeDataType::string_t) and (data_type_2 < ASTNodeDataType::string_t) and
(data_type_2 >= ASTNodeDataType::bool_t)) {
return data_type_1;
} else if ((data_type_1 >= ASTNodeDataType::bool_t) and (data_type_1 <= ASTNodeDataType::double_t) and
(data_type_2 == ASTNodeDataType::vector_t)) {
return data_type_2;
} else {
return ASTNodeDataType::undefined_t;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment