#ifndef __JMATH__JCALCULATOR__ #define __JMATH__JCALCULATOR__ /** * \author mdejong */ namespace JMATH {} namespace JPP { using namespace JMATH; } namespace JMATH { /** * Auxiliary class for arithmetic operations on objects. */ template struct JCalculator : public T // object { /** * Set calculator value. * * \param value value * \return this calculator */ JCalculator& set(const T& value) { static_cast(*this) = value; return *this; } static JCalculator calculator; // calculator }; /** * Calculator. */ template JCalculator JCalculator::calculator; /** * Product evaluation of objects. * * \param first first object * \param second second object * \return calculator */ template inline const JCalculator& operator*(const T& first, const T& second) { JCalculator::calculator.mul(first, second); return JCalculator::calculator; } /** * Recursive product evaluation of objects. * * \param first first object * \param second second object * \return calculator */ template inline const JCalculator& operator*(const T& first, const JCalculator& second) { JCalculator::calculator.mul(first, second); return JCalculator::calculator; } /** * Recursive product evaluation of objects. * * \param first first object * \param second second object * \return calculator */ template inline const JCalculator& operator*(const JCalculator& first, const T& second) { JCalculator::calculator.mul(first, second); return JCalculator::calculator; } } #endif