5#ifndef OASIS_MULTIPLY_HPP
6#define OASIS_MULTIPLY_HPP
13template <IExpression MultiplicandT, IExpression MultiplierT>
18class Multiply<Expression, Expression> :
public BinaryExpression<Multiply> {
22 [[nodiscard]]
auto Simplify() const ->
std::unique_ptr<Expression> final;
24 [[nodiscard]] auto
Differentiate(const Expression& differentiationVariable) const ->
std::unique_ptr<Expression> final;
26 [[nodiscard]] auto
Integrate(const Expression& integrationVariable) const ->
std::unique_ptr<Expression> final;
39template <IExpression MultiplicandT = Expression, IExpression MultiplierT = MultiplicandT>
48 Multiply(
const MultiplicandT& addend1,
const MultiplierT& addend2)
#define EXPRESSION_CATEGORY(category)
Definition Expression.hpp:192
#define EXPRESSION_TYPE(type)
Definition Expression.hpp:181
A binary expression.
Definition BinaryExpression.hpp:79
auto Simplify() const -> std::unique_ptr< Expression > override
Simplifies this expression.
Definition BinaryExpression.hpp:200
auto Differentiate(const Expression &differentiationVariable) const -> std::unique_ptr< Expression > override
Tries to differentiate this function.
Definition BinaryExpression.hpp:128
auto Integrate(const Expression &integrationVariable) const -> std::unique_ptr< Expression > override
Attempts to integrate this expression using integration rules.
Definition BinaryExpression.hpp:205
BinaryExpression()=default
The Multiply expression multiplies two expressions.
Definition Multiply.hpp:40
Multiply(const MultiplicandT &addend1, const MultiplierT &addend2)
Definition Multiply.hpp:48
auto operator=(const Multiply &other) -> Multiply &=default
Multiply(const Multiply< MultiplicandT, MultiplierT > &other)
Definition Multiply.hpp:43
@ Commutative
Definition Expression.hpp:44
@ Associative
Definition Expression.hpp:43
@ BinExp
Definition Expression.hpp:45