Program Listing for File Angle.hpp

Return to documentation for file (src/LouLib/Units/Angle.hpp)

#ifndef LOULIB_ANGLE_HPP
#define LOULIB_ANGLE_HPP

#include "BaseUnit.hpp"
#include "UnitMath.hpp"

namespace LouLib {
    namespace Units {
        DEFINE_NEW_UNIT(0, 0, 0, 0, 0, 0, 0, 1, Angle);

        //base unit
        constexpr Angle RADIAN(1.0);

        //degree units
        constexpr Angle DEGREE = RADIAN * static_cast<double>(M_PI/180.0);
        constexpr Angle DECIDEGREE = DEGREE * 0.1;
        constexpr Angle CENTIDEGREE = DEGREE * 0.01;

        inline namespace literals{
            #define CREATE_ANGLE_STRING_LITERAL(literal, unit)               \
            constexpr Angle operator"" literal(long double x){               \
                return static_cast<double>(x)*unit;                          \
            }                                                                \
            constexpr Angle operator"" literal(unsigned long long int x){    \
                return static_cast<double>(x)*unit;                          \
            }

            CREATE_ANGLE_STRING_LITERAL(_rad, RADIAN);
            CREATE_ANGLE_STRING_LITERAL(_deg, DEGREE);
            CREATE_ANGLE_STRING_LITERAL(_ddeg, DECIDEGREE);
            CREATE_ANGLE_STRING_LITERAL(_cdeg, CENTIDEGREE);
        }
    }
}

#endif //LOULIB_ANGLE_HPP