Program Listing for File Mass.hpp

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

#ifndef LOULIB_MASS_HPP
#define LOULIB_MASS_HPP

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

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

        //base unit
        constexpr Mass KILOGRAM(1.0);

        //metric units
        constexpr Mass HECTOGRAM = KILOGRAM * 0.1;
        constexpr Mass DECAGRAM = KILOGRAM * 0.01;
        constexpr Mass GRAM = KILOGRAM * 0.001;

        //imperial units
        constexpr Mass OUNCE = KILOGRAM * 0.02834952;
        constexpr Mass POUND = OUNCE * 16.0;

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

            CREATE_MASS_STRING_LITERAL(_kg, KILOGRAM);
            CREATE_MASS_STRING_LITERAL(_hg, HECTOGRAM);
            CREATE_MASS_STRING_LITERAL(_dag, DECAGRAM);
            CREATE_MASS_STRING_LITERAL(_g, GRAM);
            CREATE_MASS_STRING_LITERAL(_oz, OUNCE);
            CREATE_MASS_STRING_LITERAL(_lb, POUND);
        }
    }
}

#endif //LOULIB_MASS_HPP