Program Listing for File Time.hpp

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

#ifndef LOULIB_TIME_HPP
#define LOULIB_TIME_HPP

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

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

        //base unit
        constexpr Time SECOND(1.0);

        //metrix units
        constexpr Time DECISECOND = SECOND * 0.1;
        constexpr Time CENTISECOND = SECOND * 0.01;
        constexpr Time MILLISECOND = SECOND * 0.001;

        //other units
        constexpr Time MINUTE = SECOND * 60;
        constexpr Time HOUR = MINUTE * 60;

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

            CREATE_TIME_STRING_LITERAL(_s, SECOND);
            CREATE_TIME_STRING_LITERAL(_ds, DECISECOND);
            CREATE_TIME_STRING_LITERAL(_cs, CENTISECOND);
            CREATE_TIME_STRING_LITERAL(_ms, MILLISECOND);
            CREATE_TIME_STRING_LITERAL(_min, MINUTE);
            CREATE_TIME_STRING_LITERAL(_hr, HOUR);
        }
    }
}

#endif //LOULIB_TIME_HPP