2020-04-19 17:03:54 +02:00

82 lines
1.5 KiB
C++

#pragma once
#include <utility>
#include "Variable.h"
class Term
{
public:
Term( const Variable& variable, double coefficient = 1.0 )
: m_variable( variable )
, m_coefficient( coefficient )
{
}
// to facilitate efficient map -> vector copies
Term( const std::pair< const Variable, double >& pair )
: m_variable( pair.first )
, m_coefficient( pair.second )
{
}
const Variable& variable() const
{
return m_variable;
}
double coefficient() const
{
return m_coefficient;
}
double value() const
{
return m_coefficient * m_variable.value();
}
private:
Variable m_variable;
double m_coefficient;
};
inline Term operator*( const Variable& variable, double coefficient )
{
return Term( variable, coefficient );
}
inline Term operator/( const Variable& variable, double denominator )
{
return variable * ( 1.0 / denominator );
}
inline Term operator-( const Variable& variable )
{
return variable * -1.0;
}
inline Term operator*( const Term& term, double coefficient )
{
return Term( term.variable(), term.coefficient() * coefficient );
}
inline Term operator/( const Term& term, double denominator )
{
return term * ( 1.0 / denominator );
}
inline Term operator-( const Term& term )
{
return term * -1.0;
}
inline Term operator*( double coefficient, const Term& term )
{
return term * coefficient;
}
inline Term operator*( double coefficient, const Variable& variable )
{
return variable * coefficient;
}