Program Listing for File Area.hpp

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

#ifndef LOULIB_AREA_HPP
#define LOULIB_AREA_HPP

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

namespace LouLib{
    namespace Units{
        DEFINE_NEW_UNIT(2, 0, 0, 0, 0, 0, 0, 0, Area);

        constexpr Area SQUARE_METER = METER * METER;
        constexpr Area SQUARE_DECIMETER = DECIMETER * DECIMETER;
        constexpr Area SQUARE_CENTIMETER = CENTIMETER * CENTIMETER;
        constexpr Area SQUARE_MILLIMETER = MILLIMETER * MILLIMETER;
        constexpr Area SQUARE_INCH = INCH * INCH;
        constexpr Area SQUARE_FOOT = FOOT * FOOT;
        constexpr Area SQUARE_YARD = YARD * YARD;
        constexpr Area SQUARE_TILE = TILE * TILE;

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

            CREATE_AREA_STRING_LITERAL(_m2, SQUARE_METER);
            CREATE_AREA_STRING_LITERAL(_dm2, SQUARE_DECIMETER);
            CREATE_AREA_STRING_LITERAL(_cm2, SQUARE_CENTIMETER);
            CREATE_AREA_STRING_LITERAL(_mm2, SQUARE_MILLIMETER);
            CREATE_AREA_STRING_LITERAL(_in2, SQUARE_INCH);
            CREATE_AREA_STRING_LITERAL(_ft2, SQUARE_FOOT);
            CREATE_AREA_STRING_LITERAL(_yd2, SQUARE_YARD);
            CREATE_AREA_STRING_LITERAL(_tl2, SQUARE_TILE);
        }
    }
}

#endif //LOULIB_AREA_HPP