diff options
author | Richard Linden <none@none> | 2013-08-19 16:05:03 -0700 |
---|---|---|
committer | Richard Linden <none@none> | 2013-08-19 16:05:03 -0700 |
commit | 9c256611f1814b843e1adc29f8a9185a3519eeaf (patch) | |
tree | 0fa719aa838a7a9b9db3203d60c0bbedf2bde29a /indra/llcommon | |
parent | ea45b8acd25785bd2789c2c1928e223c9a8e2fbd (diff) |
BUILDFIX: removed consideration of some bad overloads in return type evaluation
of unit operators
Diffstat (limited to 'indra/llcommon')
-rw-r--r-- | indra/llcommon/llunit.h | 587 |
1 files changed, 128 insertions, 459 deletions
diff --git a/indra/llcommon/llunit.h b/indra/llcommon/llunit.h index 67810ffabc..8fb53dd94d 100644 --- a/indra/llcommon/llunit.h +++ b/indra/llcommon/llunit.h @@ -46,12 +46,27 @@ struct LLIsSameType<T, T> // workaround for decltype() not existing and typeof() not working inline in gcc 4.2 template<typename S, typename T> -struct LLResultType +struct LLResultTypeAdd { - typedef LL_TYPEOF(S() + T()) add_t; - typedef LL_TYPEOF(S() - T()) subtract_t; - typedef LL_TYPEOF(S() * T()) multiply_t; - typedef LL_TYPEOF(S() / T(1)) divide_t; + typedef LL_TYPEOF(S() + T()) type_t; +}; + +template<typename S, typename T> +struct LLResultTypeSubtract +{ + typedef LL_TYPEOF(S() - T()) type_t; +}; + +template<typename S, typename T> +struct LLResultTypeMultiply +{ + typedef LL_TYPEOF(S() * T()) type_t; +}; + +template<typename S, typename T> +struct LLResultTypeDivide +{ + typedef LL_TYPEOF(S() / T(1)) type_t; }; template<typename STORAGE_TYPE, typename UNIT_TYPE> @@ -262,13 +277,25 @@ LL_FORCE_INLINE void ll_convert_units(LLUnit<S1, T1> in, LLUnit<S2, T2>& out, .. } } +template<typename T> +struct LLStorageType +{ + typedef T type_t; +}; + +template<typename STORAGE_TYPE, typename UNIT_TYPE> +struct LLStorageType<LLUnit<STORAGE_TYPE, UNIT_TYPE> > +{ + typedef STORAGE_TYPE type_t; +}; + // // operator + // template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -LLUnit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::add_t, UNIT_TYPE1> operator + (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) +LLUnit<typename LLResultTypeAdd<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> operator + (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) { - LLUnit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::add_t, UNIT_TYPE1> result(first); + LLUnit<typename LLResultTypeAdd<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> result(first); result += second; return result; } @@ -288,41 +315,42 @@ LLUnit<STORAGE_TYPE, UNIT_TYPE> operator + (UNITLESS first, LLUnit<STORAGE_TYPE, } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::add_t, UNIT_TYPE1> operator + (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) +LLUnitImplicit<typename LLResultTypeAdd<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> operator + (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) { - LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::add_t, UNIT_TYPE1> result(first); + LLUnitImplicit<typename LLResultTypeAdd<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> result(first); result += second; return result; } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::add_t, UNIT_TYPE1> operator + (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) +LLUnitImplicit<typename LLResultTypeAdd<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> operator + (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) { - LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::add_t, UNIT_TYPE1> result(first); + LLUnitImplicit<typename LLResultTypeAdd<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> result(first); result += second; return result; } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::add_t, UNIT_TYPE1> operator + (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) +LLUnitImplicit<typename LLResultTypeAdd<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> operator + (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) { - LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::add_t, UNIT_TYPE1> result(first); + LLUnitImplicit<typename LLResultTypeAdd<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> result(first); result += LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1>(second); return result; } template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::add_t, UNIT_TYPE> operator + (LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) +LLUnitImplicit<typename LLResultTypeAdd<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE> operator + (LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) { - LLUnitImplicit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::add_t, UNIT_TYPE> result(first); + LLUnitImplicit<typename LLResultTypeAdd<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE> result(first); result += second; return result; } template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnitImplicit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::add_t, UNIT_TYPE> operator + (UNITLESS_TYPE first, LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> second) +LLUnitImplicit<typename LLResultTypeAdd<typename LLStorageType<UNITLESS_TYPE>::type_t, STORAGE_TYPE>:: + type_t, UNIT_TYPE> operator + (UNITLESS_TYPE first, LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> second) { - LLUnitImplicit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::add_t, UNIT_TYPE> result(first); + LLUnitImplicit<typename LLResultTypeAdd<typename LLStorageType<UNITLESS_TYPE>::type_t, STORAGE_TYPE>::type_t, UNIT_TYPE> result(first); result += second; return result; } @@ -331,9 +359,9 @@ LLUnitImplicit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::add_t, UNIT_T // operator - // template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -LLUnit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::subtract_t, UNIT_TYPE1> operator - (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) +LLUnit<typename LLResultTypeSubtract<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> operator - (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) { - LLUnit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::subtract_t, UNIT_TYPE1> result(first); + LLUnit<typename LLResultTypeSubtract<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> result(first); result -= second; return result; } @@ -353,41 +381,41 @@ LLUnit<STORAGE_TYPE, UNIT_TYPE> operator - (UNITLESS first, LLUnit<STORAGE_TYPE, } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::subtract_t, UNIT_TYPE1> operator - (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) +LLUnitImplicit<typename LLResultTypeSubtract<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> operator - (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) { - LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::subtract_t, UNIT_TYPE1> result(first); + LLUnitImplicit<typename LLResultTypeSubtract<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> result(first); result -= second; return result; } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::subtract_t, UNIT_TYPE1> operator - (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) +LLUnitImplicit<typename LLResultTypeSubtract<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> operator - (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) { - LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::subtract_t, UNIT_TYPE1> result(first); + LLUnitImplicit<typename LLResultTypeSubtract<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> result(first); result -= second; return result; } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::subtract_t, UNIT_TYPE1> operator - (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) +LLUnitImplicit<typename LLResultTypeSubtract<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> operator - (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) { - LLUnitImplicit<typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::subtract_t, UNIT_TYPE1> result(first); + LLUnitImplicit<typename LLResultTypeSubtract<STORAGE_TYPE1, STORAGE_TYPE2>::type_t, UNIT_TYPE1> result(first); result -= LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1>(second); return result; } template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::subtract_t, UNIT_TYPE> operator - (LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) +LLUnitImplicit<typename LLResultTypeSubtract<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE> operator - (LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) { - LLUnitImplicit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::subtract_t, UNIT_TYPE> result(first); + LLUnitImplicit<typename LLResultTypeSubtract<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE> result(first); result -= second; return result; } template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnitImplicit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::subtract_t, UNIT_TYPE> operator - (UNITLESS_TYPE first, LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> second) +LLUnitImplicit<typename LLResultTypeSubtract<typename LLStorageType<UNITLESS_TYPE>::type_t, STORAGE_TYPE>::type_t, UNIT_TYPE> operator - (UNITLESS_TYPE first, LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> second) { - LLUnitImplicit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::subtract_t, UNIT_TYPE> result(first); + LLUnitImplicit<typename LLResultTypeSubtract<typename LLStorageType<UNITLESS_TYPE>::type_t, STORAGE_TYPE>::type_t, UNIT_TYPE> result(first); result -= second; return result; } @@ -404,15 +432,15 @@ LLUnit<STORAGE_TYPE1, UNIT_TYPE1> operator * (LLUnit<STORAGE_TYPE1, UNIT_TYPE1>, } template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::multiply_t, UNIT_TYPE> operator * (LLUnit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) +LLUnit<typename LLResultTypeMultiply<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE> operator * (LLUnit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) { - return LLUnit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::multiply_t, UNIT_TYPE>(first.value() * second); + return LLUnit<typename LLResultTypeMultiply<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE>(first.value() * second); } template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::multiply_t, UNIT_TYPE> operator * (UNITLESS_TYPE first, LLUnit<STORAGE_TYPE, UNIT_TYPE> second) +LLUnit<typename LLResultTypeMultiply<typename LLStorageType<UNITLESS_TYPE>::type_t, STORAGE_TYPE>::type_t, UNIT_TYPE> operator * (UNITLESS_TYPE first, LLUnit<STORAGE_TYPE, UNIT_TYPE> second) { - return LLUnit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::multiply_t, UNIT_TYPE>(first * second.value()); + return LLUnit<typename LLResultTypeMultiply<typename LLStorageType<UNITLESS_TYPE>::type_t, STORAGE_TYPE>::type_t, UNIT_TYPE>(first * second.value()); } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> @@ -424,15 +452,15 @@ LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> operator * (LLUnitImplicit<STORAGE_TYP } template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::multiply_t, UNIT_TYPE> operator * (LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) +LLUnitImplicit<typename LLResultTypeMultiply<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE> operator * (LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) { - return LLUnitImplicit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::multiply_t, UNIT_TYPE>(first.value() * second); + return LLUnitImplicit<typename LLResultTypeMultiply<STORAGE_TYPE, UNITLESS_TYPE>::type_t, UNIT_TYPE>(first.value() * second); } template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnitImplicit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::multiply_t, UNIT_TYPE> operator * (UNITLESS_TYPE first, LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> second) +LLUnitImplicit<typename LLResultTypeMultiply<typename LLStorageType<UNITLESS_TYPE>::type_t, STORAGE_TYPE>::type_t, UNIT_TYPE> operator * (UNITLESS_TYPE first, LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> second) { - return LLUnitImplicit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::multiply_t, UNIT_TYPE>(first * second.value()); + return LLUnitImplicit<typename LLResultTypeMultiply<typename LLStorageType<UNITLESS_TYPE>::type_t, STORAGE_TYPE>::type_t, UNIT_TYPE>(first * second.value()); } @@ -441,39 +469,39 @@ LLUnitImplicit<typename LLResultType<UNITLESS_TYPE, STORAGE_TYPE>::multiply_t, U // template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::divide_t, UNIT_TYPE> operator / (LLUnit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) +LLUnit<typename LLResultTypeDivide<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE> operator / (LLUnit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) { - return LLUnit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::divide_t, UNIT_TYPE>(first.value() / second); + return LLUnit<typename LLResultTypeDivide<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE>(first.value() / second); } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::divide_t operator / (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) +typename LLResultTypeDivide<STORAGE_TYPE1, STORAGE_TYPE2>::type_t operator / (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) { return first.value() / first.convert(second).value(); } template<typename STORAGE_TYPE, typename UNIT_TYPE, typename UNITLESS_TYPE> -LLUnitImplicit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::divide_t, UNIT_TYPE> operator / (LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) +LLUnitImplicit<typename LLResultTypeDivide<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE> operator / (LLUnitImplicit<STORAGE_TYPE, UNIT_TYPE> first, UNITLESS_TYPE second) { - return LLUnitImplicit<typename LLResultType<STORAGE_TYPE, UNITLESS_TYPE>::divide_t, UNIT_TYPE>(first.value() / second); + return LLUnitImplicit<typename LLResultTypeDivide<STORAGE_TYPE, typename LLStorageType<UNITLESS_TYPE>::type_t>::type_t, UNIT_TYPE>(first.value() / second); } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::divide_t operator / (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) +typename LLResultTypeDivide<STORAGE_TYPE1, STORAGE_TYPE2>::type_t operator / (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) { - return (typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::divide_t)(first.value() / first.convert(second).value()); + return (typename LLResultTypeDivide<STORAGE_TYPE1, STORAGE_TYPE2>::type_t)(first.value() / first.convert(second).value()); } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::divide_t operator / (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) +typename LLResultTypeDivide<STORAGE_TYPE1, STORAGE_TYPE2>::type_t operator / (LLUnit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnitImplicit<STORAGE_TYPE2, UNIT_TYPE2> second) { - return (typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::divide_t)(first.value() / first.convert(second).value()); + return (typename LLResultTypeDivide<STORAGE_TYPE1, STORAGE_TYPE2>::type_t)(first.value() / first.convert(second).value()); } template<typename STORAGE_TYPE1, typename UNIT_TYPE1, typename STORAGE_TYPE2, typename UNIT_TYPE2> -typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::divide_t operator / (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) +typename LLResultTypeDivide<STORAGE_TYPE1, STORAGE_TYPE2>::type_t operator / (LLUnitImplicit<STORAGE_TYPE1, UNIT_TYPE1> first, LLUnit<STORAGE_TYPE2, UNIT_TYPE2> second) { - return (typename LLResultType<STORAGE_TYPE1, STORAGE_TYPE2>::divide_t)(first.value() / first.convert(second).value()); + return (typename LLResultTypeDivide<STORAGE_TYPE1, STORAGE_TYPE2>::type_t)(first.value() / first.convert(second).value()); } // @@ -566,25 +594,25 @@ struct LLUnitLinearOps template<typename T> output_t operator * (T other) { - return typename LLResultType<INPUT_TYPE, OUTPUT_TYPE>::multiply_t(mInput) * other; + return typename LLResultTypeMultiply<INPUT_TYPE, OUTPUT_TYPE>::type_t(mInput) * other; } template<typename T> output_t operator / (T other) { - return typename LLResultType<INPUT_TYPE, OUTPUT_TYPE>::divide_t(mInput) / other; + return typename LLResultTypeDivide<INPUT_TYPE, OUTPUT_TYPE>::type_t(mInput) / other; } template<typename T> output_t operator + (T other) { - return typename LLResultType<INPUT_TYPE, OUTPUT_TYPE>::add_t(mInput) + other; + return typename LLResultTypeAdd<INPUT_TYPE, OUTPUT_TYPE>::type_t(mInput) + other; } template<typename T> output_t operator - (T other) { - return typename LLResultType<INPUT_TYPE, OUTPUT_TYPE>::subtract_t(mInput) - other; + return typename LLResultTypeSubtract<INPUT_TYPE, OUTPUT_TYPE>::type_t(mInput) - other; } }; @@ -603,25 +631,25 @@ struct LLUnitInverseLinearOps template<typename T> output_t operator * (T other) { - return typename LLResultType<INPUT_TYPE, OUTPUT_TYPE>::divide_t(mInput) / other; + return typename LLResultTypeDivide<INPUT_TYPE, OUTPUT_TYPE>::type_t(mInput) / other; } template<typename T> output_t operator / (T other) { - return typename LLResultType<INPUT_TYPE, OUTPUT_TYPE>::multiply_t(mInput) * other; + return typename LLResultTypeMultiply<INPUT_TYPE, OUTPUT_TYPE>::type_t(mInput) * other; } template<typename T> output_t operator + (T other) { - return typename LLResultType<INPUT_TYPE, OUTPUT_TYPE>::subtract_t(mInput) - other; + return typename LLResultTypeAdd<INPUT_TYPE, OUTPUT_TYPE>::type_t(mInput) - other; } template<typename T> output_t operator - (T other) { - return typename LLResultType<INPUT_TYPE, OUTPUT_TYPE>::add_t(mInput) + other; + return typename LLResultTypeSubtract<INPUT_TYPE, OUTPUT_TYPE>::type_t(mInput) + other; } }; @@ -662,6 +690,20 @@ void ll_convert_units(LLUnit<S1, base_unit_name> in, LLUnit<S2, unit_name>& out) out = LLUnit<S2, unit_name>((S2)(LLUnitInverseLinearOps<S1, S2>(in.value()) conversion_operation)); \ } +#define LL_DECLARE_UNIT_TYPEDEFS(ns, unit_name) \ + typedef LLUnit<F32, ns::unit_name> F32##unit_name; \ + typedef LLUnitImplicit<F32, ns::unit_name> F32##unit_name##Implicit;\ + typedef LLUnit<F64, ns::unit_name> F64##unit_name; \ + typedef LLUnitImplicit<F64, ns::unit_name> F64##unit_name##Implicit;\ + typedef LLUnit<S32, ns::unit_name> S32##unit_name; \ + typedef LLUnitImplicit<S32, ns::unit_name> S32##unit_name##Implicit;\ + typedef LLUnit<S64, ns::unit_name> S64##unit_name; \ + typedef LLUnitImplicit<S64, ns::unit_name> S64##unit_name##Implicit;\ + typedef LLUnit<U32, ns::unit_name> U32##unit_name; \ + typedef LLUnitImplicit<U32, ns::unit_name> U32##unit_name##Implicit;\ + typedef LLUnit<U64, ns::unit_name> U64##unit_name; \ + typedef LLUnitImplicit<U64, ns::unit_name> U64##unit_name##Implicit + // // Unit declarations // @@ -675,65 +717,10 @@ LL_DECLARE_DERIVED_UNIT(Kilobytes, * 1024, Megabytes, "MB"); LL_DECLARE_DERIVED_UNIT(Megabytes, * 1024, Gigabytes, "GB"); } -typedef LLUnit<F32, LLUnits::Bytes> F32Bytes; -typedef LLUnit<F32, LLUnits::Kilobytes> F32Kilobytes; -typedef LLUnit<F32, LLUnits::Megabytes> F32Megabytes; -typedef LLUnit<F32, LLUnits::Gigabytes> F32Gigabytes; - -typedef LLUnitImplicit<F32, LLUnits::Bytes> F32BytesImplicit; -typedef LLUnitImplicit<F32, LLUnits::Kilobytes> F32KilobytesImplicit; -typedef LLUnitImplicit<F32, LLUnits::Megabytes> F32MegabytesImplicit; -typedef LLUnitImplicit<F32, LLUnits::Gigabytes> F32GigabytesImplicit; - -typedef LLUnit<F64, LLUnits::Bytes> F64Bytes; -typedef LLUnit<F64, LLUnits::Kilobytes> F64Kilobytes; -typedef LLUnit<F64, LLUnits::Megabytes> F64Megabytes; -typedef LLUnit<F64, LLUnits::Gigabytes> F64Gigabytes; - -typedef LLUnitImplicit<F64, LLUnits::Bytes> F64BytesImplicit; -typedef LLUnitImplicit<F64, LLUnits::Kilobytes> F64KilobytesImplicit; -typedef LLUnitImplicit<F64, LLUnits::Megabytes> F64MegabytesImplicit; -typedef LLUnitImplicit<F64, LLUnits::Gigabytes> F64GigabytesImplicit; - -typedef LLUnit<S32, LLUnits::Bytes> S32Bytes; -typedef LLUnit<S32, LLUnits::Kilobytes> S32Kilobytes; -typedef LLUnit<S32, LLUnits::Megabytes> S32Megabytes; -typedef LLUnit<S32, LLUnits::Gigabytes> S32Gigabytes; - -typedef LLUnitImplicit<S32, LLUnits::Bytes> S32BytesImplicit; -typedef LLUnitImplicit<S32, LLUnits::Kilobytes> S32KilobytesImplicit; -typedef LLUnitImplicit<S32, LLUnits::Megabytes> S32MegabytesImplicit; -typedef LLUnitImplicit<S32, LLUnits::Gigabytes> S32GigabytesImplicit; - -typedef LLUnit<S64, LLUnits::Bytes> S64Bytes; -typedef LLUnit<S64, LLUnits::Kilobytes> S64Kilobytes; -typedef LLUnit<S64, LLUnits::Megabytes> S64Megabytes; -typedef LLUnit<S64, LLUnits::Gigabytes> S64Gigabytes; - -typedef LLUnitImplicit<S64, LLUnits::Bytes> S64BytesImplicit; -typedef LLUnitImplicit<S64, LLUnits::Kilobytes> S64KilobytesImplicit; -typedef LLUnitImplicit<S64, LLUnits::Megabytes> S64MegabytesImplicit; -typedef LLUnitImplicit<S64, LLUnits::Gigabytes> S64GigabytesImplicit; - -typedef LLUnit<U32, LLUnits::Bytes> U32Bytes; -typedef LLUnit<U32, LLUnits::Kilobytes> U32Kilobytes; -typedef LLUnit<U32, LLUnits::Megabytes> U32Megabytes; -typedef LLUnit<U32, LLUnits::Gigabytes> U32Gigabytes; - -typedef LLUnitImplicit<U32, LLUnits::Bytes> U32BytesImplicit; -typedef LLUnitImplicit<U32, LLUnits::Kilobytes> U32KilobytesImplicit; -typedef LLUnitImplicit<U32, LLUnits::Megabytes> U32MegabytesImplicit; -typedef LLUnitImplicit<U32, LLUnits::Gigabytes> U32GigabytesImplicit; - -typedef LLUnit<U64, LLUnits::Bytes> U64Bytes; -typedef LLUnit<U64, LLUnits::Kilobytes> U64Kilobytes; -typedef LLUnit<U64, LLUnits::Megabytes> U64Megabytes; -typedef LLUnit<U64, LLUnits::Gigabytes> U64Gigabytes; - -typedef LLUnitImplicit<U64, LLUnits::Bytes> U64BytesImplicit; -typedef LLUnitImplicit<U64, LLUnits::Kilobytes> U64KilobytesImplicit; -typedef LLUnitImplicit<U64, LLUnits::Megabytes> U64MegabytesImplicit; -typedef LLUnitImplicit<U64, LLUnits::Gigabytes> U64GigabytesImplicit; +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Bytes); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Kilobytes); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Megabytes); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Gigabytes); namespace LLUnits { @@ -744,65 +731,10 @@ LL_DECLARE_DERIVED_UNIT(Kilobits, * 1024, Megabits, "Mb"); LL_DECLARE_DERIVED_UNIT(Megabits, * 1024, Gigabits, "Gb"); } -typedef LLUnit<F32, LLUnits::Bits> F32Bits; -typedef LLUnit<F32, LLUnits::Kilobits> F32Kilobits; -typedef LLUnit<F32, LLUnits::Megabits> F32Megabits; -typedef LLUnit<F32, LLUnits::Gigabits> F32Gigabits; - -typedef LLUnitImplicit<F32, LLUnits::Bits> F32BitsImplicit; -typedef LLUnitImplicit<F32, LLUnits::Kilobits> F32KilobitsImplicit; -typedef LLUnitImplicit<F32, LLUnits::Megabits> F32MegabitsImplicit; -typedef LLUnitImplicit<F32, LLUnits::Gigabits> F32GigabitsImplicit; - -typedef LLUnit<F64, LLUnits::Bits> F64Bits; -typedef LLUnit<F64, LLUnits::Kilobits> F64Kilobits; -typedef LLUnit<F64, LLUnits::Megabits> F64Megabits; -typedef LLUnit<F64, LLUnits::Gigabits> F64Gigabits; - -typedef LLUnitImplicit<F64, LLUnits::Bits> F64BitsImplicit; -typedef LLUnitImplicit<F64, LLUnits::Kilobits> F64KilobitsImplicit; -typedef LLUnitImplicit<F64, LLUnits::Megabits> F64MegabitsImplicit; -typedef LLUnitImplicit<F64, LLUnits::Gigabits> F64GigabitsImplicit; - -typedef LLUnit<S32, LLUnits::Bits> S32Bits; -typedef LLUnit<S32, LLUnits::Kilobits> S32Kilobits; -typedef LLUnit<S32, LLUnits::Megabits> S32Megabits; -typedef LLUnit<S32, LLUnits::Gigabits> S32Gigabits; - -typedef LLUnitImplicit<S32, LLUnits::Bits> S32BitsImplicit; -typedef LLUnitImplicit<S32, LLUnits::Kilobits> S32KilobitsImplicit; -typedef LLUnitImplicit<S32, LLUnits::Megabits> S32MegabitsImplicit; -typedef LLUnitImplicit<S32, LLUnits::Gigabits> S32GigabitsImplicit; - -typedef LLUnit<S64, LLUnits::Bits> S64Bits; -typedef LLUnit<S64, LLUnits::Kilobits> S64Kilobits; -typedef LLUnit<S64, LLUnits::Megabits> S64Megabits; -typedef LLUnit<S64, LLUnits::Gigabits> S64Gigabits; - -typedef LLUnitImplicit<S64, LLUnits::Bits> S64BitsImplicit; -typedef LLUnitImplicit<S64, LLUnits::Kilobits> S64KilobitsImplicit; -typedef LLUnitImplicit<S64, LLUnits::Megabits> S64MegabitsImplicit; -typedef LLUnitImplicit<S64, LLUnits::Gigabits> S64GigabitsImplicit; - -typedef LLUnit<U32, LLUnits::Bits> U32Bits; -typedef LLUnit<U32, LLUnits::Kilobits> U32Kilobits; -typedef LLUnit<U32, LLUnits::Megabits> U32Megabits; -typedef LLUnit<U32, LLUnits::Gigabits> U32Gigabits; - -typedef LLUnitImplicit<U32, LLUnits::Bits> U32BitsImplicit; -typedef LLUnitImplicit<U32, LLUnits::Kilobits> U32KilobitsImplicit; -typedef LLUnitImplicit<U32, LLUnits::Megabits> U32MegabitsImplicit; -typedef LLUnitImplicit<U32, LLUnits::Gigabits> U32GigabitsImplicit; - -typedef LLUnit<U64, LLUnits::Bits> U64Bits; -typedef LLUnit<U64, LLUnits::Kilobits> U64Kilobits; -typedef LLUnit<U64, LLUnits::Megabits> U64Megabits; -typedef LLUnit<U64, LLUnits::Gigabits> U64Gigabits; - -typedef LLUnitImplicit<U64, LLUnits::Bits> U64BitsImplicit; -typedef LLUnitImplicit<U64, LLUnits::Kilobits> U64KilobitsImplicit; -typedef LLUnitImplicit<U64, LLUnits::Megabits> U64MegabitsImplicit; -typedef LLUnitImplicit<U64, LLUnits::Gigabits> U64GigabitsImplicit; +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Bits); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Kilobits); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Megabits); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Gigabits); namespace LLUnits { @@ -815,101 +747,13 @@ LL_DECLARE_DERIVED_UNIT(Milliseconds, / 1000, Microseconds, "\x09\x3cs"); LL_DECLARE_DERIVED_UNIT(Microseconds, / 1000, Nanoseconds, "ns"); } -typedef LLUnit<F32, LLUnits::Seconds> F32Seconds; -typedef LLUnit<F32, LLUnits::Minutes> F32Minutes; -typedef LLUnit<F32, LLUnits::Hours> F32Hours; -typedef LLUnit<F32, LLUnits::Days> F32Days; -typedef LLUnit<F32, LLUnits::Milliseconds> F32Milliseconds; -typedef LLUnit<F32, LLUnits::Microseconds> F32Microseconds; -typedef LLUnit<F32, LLUnits::Nanoseconds> F32Nanoseconds; - -typedef LLUnitImplicit<F32, LLUnits::Seconds> F32SecondsImplicit; -typedef LLUnitImplicit<F32, LLUnits::Minutes> F32MinutesImplicit; -typedef LLUnitImplicit<F32, LLUnits::Hours> F32HoursImplicit; -typedef LLUnitImplicit<F32, LLUnits::Days> F32DaysImplicit; -typedef LLUnitImplicit<F32, LLUnits::Milliseconds> F32MillisecondsImplicit; -typedef LLUnitImplicit<F32, LLUnits::Microseconds> F32MicrosecondsImplicit; -typedef LLUnitImplicit<F32, LLUnits::Nanoseconds> F32NanosecondsImplicit; - -typedef LLUnit<F64, LLUnits::Seconds> F64Seconds; -typedef LLUnit<F64, LLUnits::Minutes> F64Minutes; -typedef LLUnit<F64, LLUnits::Hours> F64Hours; -typedef LLUnit<F64, LLUnits::Days> F64Days; -typedef LLUnit<F64, LLUnits::Milliseconds> F64Milliseconds; -typedef LLUnit<F64, LLUnits::Microseconds> F64Microseconds; -typedef LLUnit<F64, LLUnits::Nanoseconds> F64Nanoseconds; - -typedef LLUnitImplicit<F64, LLUnits::Seconds> F64SecondsImplicit; -typedef LLUnitImplicit<F64, LLUnits::Minutes> F64MinutesImplicit; -typedef LLUnitImplicit<F64, LLUnits::Hours> F64HoursImplicit; -typedef LLUnitImplicit<F64, LLUnits::Days> F64DaysImplicit; -typedef LLUnitImplicit<F64, LLUnits::Milliseconds> F64MillisecondsImplicit; -typedef LLUnitImplicit<F64, LLUnits::Microseconds> F64MicrosecondsImplicit; -typedef LLUnitImplicit<F64, LLUnits::Nanoseconds> F64NanosecondsImplicit; - -typedef LLUnit<S32, LLUnits::Seconds> S32Seconds; -typedef LLUnit<S32, LLUnits::Minutes> S32Minutes; -typedef LLUnit<S32, LLUnits::Hours> S32Hours; -typedef LLUnit<S32, LLUnits::Days> S32Days; -typedef LLUnit<S32, LLUnits::Milliseconds> S32Milliseconds; -typedef LLUnit<S32, LLUnits::Microseconds> S32Microseconds; -typedef LLUnit<S32, LLUnits::Nanoseconds> S32Nanoseconds; - -typedef LLUnitImplicit<S32, LLUnits::Seconds> S32SecondsImplicit; -typedef LLUnitImplicit<S32, LLUnits::Minutes> S32MinutesImplicit; -typedef LLUnitImplicit<S32, LLUnits::Hours> S32HoursImplicit; -typedef LLUnitImplicit<S32, LLUnits::Days> S32DaysImplicit; -typedef LLUnitImplicit<S32, LLUnits::Milliseconds> S32MillisecondsImplicit; -typedef LLUnitImplicit<S32, LLUnits::Microseconds> S32MicrosecondsImplicit; -typedef LLUnitImplicit<S32, LLUnits::Nanoseconds> S32NanosecondsImplicit; - -typedef LLUnit<S64, LLUnits::Seconds> S64Seconds; -typedef LLUnit<S64, LLUnits::Minutes> S64Minutes; -typedef LLUnit<S64, LLUnits::Hours> S64Hours; -typedef LLUnit<S64, LLUnits::Days> S64Days; -typedef LLUnit<S64, LLUnits::Milliseconds> S64Milliseconds; -typedef LLUnit<S64, LLUnits::Microseconds> S64Microseconds; -typedef LLUnit<S64, LLUnits::Nanoseconds> S64Nanoseconds; - -typedef LLUnitImplicit<S64, LLUnits::Seconds> S64SecondsImplicit; -typedef LLUnitImplicit<S64, LLUnits::Minutes> S64MinutesImplicit; -typedef LLUnitImplicit<S64, LLUnits::Hours> S64HoursImplicit; -typedef LLUnitImplicit<S64, LLUnits::Days> S64DaysImplicit; -typedef LLUnitImplicit<S64, LLUnits::Milliseconds> S64MillisecondsImplicit; -typedef LLUnitImplicit<S64, LLUnits::Microseconds> S64MicrosecondsImplicit; -typedef LLUnitImplicit<S64, LLUnits::Nanoseconds> S64NanosecondsImplicit; - -typedef LLUnit<U32, LLUnits::Seconds> U32Seconds; -typedef LLUnit<U32, LLUnits::Minutes> U32Minutes; -typedef LLUnit<U32, LLUnits::Hours> U32Hours; -typedef LLUnit<U32, LLUnits::Days> U32Days; -typedef LLUnit<U32, LLUnits::Milliseconds> U32Milliseconds; -typedef LLUnit<U32, LLUnits::Microseconds> U32Microseconds; -typedef LLUnit<U32, LLUnits::Nanoseconds> U32Nanoseconds; - -typedef LLUnitImplicit<U32, LLUnits::Seconds> U32SecondsImplicit; -typedef LLUnitImplicit<U32, LLUnits::Minutes> U32MinutesImplicit; -typedef LLUnitImplicit<U32, LLUnits::Hours> U32HoursImplicit; -typedef LLUnitImplicit<U32, LLUnits::Days> U32DaysImplicit; -typedef LLUnitImplicit<U32, LLUnits::Milliseconds> U32MillisecondsImplicit; -typedef LLUnitImplicit<U32, LLUnits::Microseconds> U32MicrosecondsImplicit; -typedef LLUnitImplicit<U32, LLUnits::Nanoseconds> U32NanosecondsImplicit; - -typedef LLUnit<U64, LLUnits::Seconds> U64Seconds; -typedef LLUnit<U64, LLUnits::Minutes> U64Minutes; -typedef LLUnit<U64, LLUnits::Hours> U64Hours; -typedef LLUnit<U64, LLUnits::Days> U64Days; -typedef LLUnit<U64, LLUnits::Milliseconds> U64Milliseconds; -typedef LLUnit<U64, LLUnits::Microseconds> U64Microseconds; -typedef LLUnit<U64, LLUnits::Nanoseconds> U64Nanoseconds; - -typedef LLUnitImplicit<U64, LLUnits::Seconds> U64SecondsImplicit; -typedef LLUnitImplicit<U64, LLUnits::Minutes> U64MinutesImplicit; -typedef LLUnitImplicit<U64, LLUnits::Hours> U64HoursImplicit; -typedef LLUnitImplicit<U64, LLUnits::Days> U64DaysImplicit; -typedef LLUnitImplicit<U64, LLUnits::Milliseconds> U64MillisecondsImplicit; -typedef LLUnitImplicit<U64, LLUnits::Microseconds> U64MicrosecondsImplicit; -typedef LLUnitImplicit<U64, LLUnits::Nanoseconds> U64NanosecondsImplicit; +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Seconds); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Minutes); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Hours); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Days); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Milliseconds); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Microseconds); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Nanoseconds); namespace LLUnits { @@ -919,65 +763,10 @@ LL_DECLARE_DERIVED_UNIT(Meters, / 100, Centimeters, "cm"); LL_DECLARE_DERIVED_UNIT(Meters, / 1000, Millimeters, "mm"); } -typedef LLUnit<F32, LLUnits::Meters> F32Meters; -typedef LLUnit<F32, LLUnits::Kilometers> F32Kilometers; -typedef LLUnit<F32, LLUnits::Centimeters> F32Centimeters; -typedef LLUnit<F32, LLUnits::Millimeters> F32Millimeters; - -typedef LLUnitImplicit<F32, LLUnits::Meters> F32MetersImplicit; -typedef LLUnitImplicit<F32, LLUnits::Kilometers> F32KilometersImplicit; -typedef LLUnitImplicit<F32, LLUnits::Centimeters> F32CentimetersImplicit; -typedef LLUnitImplicit<F32, LLUnits::Millimeters> F32MillimetersImplicit; - -typedef LLUnit<F64, LLUnits::Meters> F64Meters; -typedef LLUnit<F64, LLUnits::Kilometers> F64Kilometers; -typedef LLUnit<F64, LLUnits::Centimeters> F64Centimeters; -typedef LLUnit<F64, LLUnits::Millimeters> F64Millimeters; - -typedef LLUnitImplicit<F64, LLUnits::Meters> F64MetersImplicit; -typedef LLUnitImplicit<F64, LLUnits::Kilometers> F64KilometersImplicit; -typedef LLUnitImplicit<F64, LLUnits::Centimeters> F64CentimetersImplicit; -typedef LLUnitImplicit<F64, LLUnits::Millimeters> F64MillimetersImplicit; - -typedef LLUnit<S32, LLUnits::Meters> S32Meters; -typedef LLUnit<S32, LLUnits::Kilometers> S32Kilometers; -typedef LLUnit<S32, LLUnits::Centimeters> S32Centimeters; -typedef LLUnit<S32, LLUnits::Millimeters> S32Millimeters; - -typedef LLUnitImplicit<S32, LLUnits::Meters> S32MetersImplicit; -typedef LLUnitImplicit<S32, LLUnits::Kilometers> S32KilometersImplicit; -typedef LLUnitImplicit<S32, LLUnits::Centimeters> S32CentimetersImplicit; -typedef LLUnitImplicit<S32, LLUnits::Millimeters> S32MillimetersImplicit; - -typedef LLUnit<S64, LLUnits::Meters> S64Meters; -typedef LLUnit<S64, LLUnits::Kilometers> S64Kilometers; -typedef LLUnit<S64, LLUnits::Centimeters> S64Centimeters; -typedef LLUnit<S64, LLUnits::Millimeters> S64Millimeters; - -typedef LLUnitImplicit<S64, LLUnits::Meters> S64MetersImplicit; -typedef LLUnitImplicit<S64, LLUnits::Kilometers> S64KilometersImplicit; -typedef LLUnitImplicit<S64, LLUnits::Centimeters> S64CentimetersImplicit; -typedef LLUnitImplicit<S64, LLUnits::Millimeters> S64MillimetersImplicit; - -typedef LLUnit<U32, LLUnits::Meters> U32Meters; -typedef LLUnit<U32, LLUnits::Kilometers> U32Kilometers; -typedef LLUnit<U32, LLUnits::Centimeters> U32Centimeters; -typedef LLUnit<U32, LLUnits::Millimeters> U32Millimeters; - -typedef LLUnitImplicit<U32, LLUnits::Meters> U32MetersImplicit; -typedef LLUnitImplicit<U32, LLUnits::Kilometers> U32KilometersImplicit; -typedef LLUnitImplicit<U32, LLUnits::Centimeters> U32CentimetersImplicit; -typedef LLUnitImplicit<U32, LLUnits::Millimeters> U32MillimetersImplicit; - -typedef LLUnit<U64, LLUnits::Meters> U64Meters; -typedef LLUnit<U64, LLUnits::Kilometers> U64Kilometers; -typedef LLUnit<U64, LLUnits::Centimeters> U64Centimeters; -typedef LLUnit<U64, LLUnits::Millimeters> U64Millimeters; - -typedef LLUnitImplicit<U64, LLUnits::Meters> U64MetersImplicit; -typedef LLUnitImplicit<U64, LLUnits::Kilometers> U64KilometersImplicit; -typedef LLUnitImplicit<U64, LLUnits::Centimeters> U64CentimetersImplicit; -typedef LLUnitImplicit<U64, LLUnits::Millimeters> U64MillimetersImplicit; +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Meters); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Kilometers); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Centimeters); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Millimeters); namespace LLUnits { @@ -999,136 +788,16 @@ LL_DECLARE_DERIVED_UNIT(Triangles, * 1000, Kilotriangles, "ktris"); } // namespace LLUnits // rare units -typedef LLUnit<F32, LLUnits::Hertz> F32Hertz; -typedef LLUnit<F32, LLUnits::Kilohertz> F32Kilohertz; -typedef LLUnit<F32, LLUnits::Megahertz> F32Megahertz; -typedef LLUnit<F32, LLUnits::Gigahertz> F32Gigahertz; -typedef LLUnit<F32, LLUnits::Radians> F32Radians; -typedef LLUnit<F32, LLUnits::Degrees> F32Degrees; -typedef LLUnit<F32, LLUnits::Percent> F32Percent; -typedef LLUnit<F32, LLUnits::Ratio> F32Ratio; -typedef LLUnit<F32, LLUnits::Triangles> F32Triangles; -typedef LLUnit<F32, LLUnits::Kilotriangles> F32KiloTriangles; - -typedef LLUnitImplicit<F32, LLUnits::Hertz> F32HertzImplicit; -typedef LLUnitImplicit<F32, LLUnits::Kilohertz> F32KilohertzImplicit; -typedef LLUnitImplicit<F32, LLUnits::Megahertz> F32MegahertzImplicit; -typedef LLUnitImplicit<F32, LLUnits::Gigahertz> F32GigahertzImplicit; -typedef LLUnitImplicit<F32, LLUnits::Radians> F32RadiansImplicit; -typedef LLUnitImplicit<F32, LLUnits::Degrees> F32DegreesImplicit; -typedef LLUnitImplicit<F32, LLUnits::Percent> F32PercentImplicit; -typedef LLUnitImplicit<F32, LLUnits::Ratio> F32RatioImplicit; -typedef LLUnitImplicit<F32, LLUnits::Triangles> F32TrianglesImplicit; -typedef LLUnitImplicit<F32, LLUnits::Kilotriangles> F32KiloTrianglesImplicit; - -typedef LLUnit<F64, LLUnits::Hertz> F64Hertz; -typedef LLUnit<F64, LLUnits::Kilohertz> F64Kilohertz; -typedef LLUnit<F64, LLUnits::Megahertz> F64Megahertz; -typedef LLUnit<F64, LLUnits::Gigahertz> F64Gigahertz; -typedef LLUnit<F64, LLUnits::Radians> F64Radians; -typedef LLUnit<F64, LLUnits::Degrees> F64Degrees; -typedef LLUnit<F64, LLUnits::Percent> F64Percent; -typedef LLUnit<F64, LLUnits::Ratio> F64Ratio; -typedef LLUnit<F64, LLUnits::Triangles> F64Triangles; -typedef LLUnit<F64, LLUnits::Kilotriangles> F64KiloTriangles; - -typedef LLUnitImplicit<F64, LLUnits::Hertz> F64HertzImplicit; -typedef LLUnitImplicit<F64, LLUnits::Kilohertz> F64KilohertzImplicit; -typedef LLUnitImplicit<F64, LLUnits::Megahertz> F64MegahertzImplicit; -typedef LLUnitImplicit<F64, LLUnits::Gigahertz> F64GigahertzImplicit; -typedef LLUnitImplicit<F64, LLUnits::Radians> F64RadiansImplicit; -typedef LLUnitImplicit<F64, LLUnits::Degrees> F64DegreesImplicit; -typedef LLUnitImplicit<F64, LLUnits::Percent> F64PercentImplicit; -typedef LLUnitImplicit<F64, LLUnits::Ratio> F64RatioImplicit; -typedef LLUnitImplicit<F64, LLUnits::Triangles> F64TrianglesImplicit; -typedef LLUnitImplicit<F64, LLUnits::Kilotriangles> F64KiloTrianglesImplicit; - -typedef LLUnit<S32, LLUnits::Hertz> S32Hertz; -typedef LLUnit<S32, LLUnits::Kilohertz> S32Kilohertz; -typedef LLUnit<S32, LLUnits::Megahertz> S32Megahertz; -typedef LLUnit<S32, LLUnits::Gigahertz> S32Gigahertz; -typedef LLUnit<S32, LLUnits::Radians> S32Radians; -typedef LLUnit<S32, LLUnits::Degrees> S32Degrees; -typedef LLUnit<S32, LLUnits::Percent> S32Percent; -typedef LLUnit<S32, LLUnits::Ratio> S32Ratio; -typedef LLUnit<S32, LLUnits::Triangles> S32Triangles; -typedef LLUnit<S32, LLUnits::Kilotriangles> S32KiloTriangles; - -typedef LLUnitImplicit<S32, LLUnits::Hertz> S32HertzImplicit; -typedef LLUnitImplicit<S32, LLUnits::Kilohertz> S32KilohertzImplicit; -typedef LLUnitImplicit<S32, LLUnits::Megahertz> S32MegahertzImplicit; -typedef LLUnitImplicit<S32, LLUnits::Gigahertz> S32GigahertzImplicit; -typedef LLUnitImplicit<S32, LLUnits::Radians> S32RadiansImplicit; -typedef LLUnitImplicit<S32, LLUnits::Degrees> S32DegreesImplicit; -typedef LLUnitImplicit<S32, LLUnits::Percent> S32PercentImplicit; -typedef LLUnitImplicit<S32, LLUnits::Ratio> S32RatioImplicit; -typedef LLUnitImplicit<S32, LLUnits::Triangles> S32TrianglesImplicit; -typedef LLUnitImplicit<S32, LLUnits::Kilotriangles> S32KiloTrianglesImplicit; - -typedef LLUnit<S64, LLUnits::Hertz> S64Hertz; -typedef LLUnit<S64, LLUnits::Kilohertz> S64Kilohertz; -typedef LLUnit<S64, LLUnits::Megahertz> S64Megahertz; -typedef LLUnit<S64, LLUnits::Gigahertz> S64Gigahertz; -typedef LLUnit<S64, LLUnits::Radians> S64Radians; -typedef LLUnit<S64, LLUnits::Degrees> S64Degrees; -typedef LLUnit<S64, LLUnits::Percent> S64Percent; -typedef LLUnit<S64, LLUnits::Ratio> S64Ratio; -typedef LLUnit<S64, LLUnits::Triangles> S64Triangles; -typedef LLUnit<S64, LLUnits::Kilotriangles> S64KiloTriangles; - -typedef LLUnitImplicit<S64, LLUnits::Hertz> S64HertzImplicit; -typedef LLUnitImplicit<S64, LLUnits::Kilohertz> S64KilohertzImplicit; -typedef LLUnitImplicit<S64, LLUnits::Megahertz> S64MegahertzImplicit; -typedef LLUnitImplicit<S64, LLUnits::Gigahertz> S64GigahertzImplicit; -typedef LLUnitImplicit<S64, LLUnits::Radians> S64RadiansImplicit; -typedef LLUnitImplicit<S64, LLUnits::Degrees> S64DegreesImplicit; -typedef LLUnitImplicit<S64, LLUnits::Percent> S64PercentImplicit; -typedef LLUnitImplicit<S64, LLUnits::Ratio> S64RatioImplicit; -typedef LLUnitImplicit<S64, LLUnits::Triangles> S64TrianglesImplicit; -typedef LLUnitImplicit<S64, LLUnits::Kilotriangles> S64KiloTrianglesImplicit; - -typedef LLUnit<U32, LLUnits::Hertz> U32Hertz; -typedef LLUnit<U32, LLUnits::Kilohertz> U32Kilohertz; -typedef LLUnit<U32, LLUnits::Megahertz> U32Megahertz; -typedef LLUnit<U32, LLUnits::Gigahertz> U32Gigahertz; -typedef LLUnit<U32, LLUnits::Radians> U32Radians; -typedef LLUnit<U32, LLUnits::Degrees> U32Degrees; -typedef LLUnit<U32, LLUnits::Percent> U32Percent; -typedef LLUnit<U32, LLUnits::Ratio> U32Ratio; -typedef LLUnit<U32, LLUnits::Triangles> U32Triangles; -typedef LLUnit<U32, LLUnits::Kilotriangles> U32KiloTriangles; - -typedef LLUnitImplicit<U32, LLUnits::Hertz> U32HertzImplicit; -typedef LLUnitImplicit<U32, LLUnits::Kilohertz> U32KilohertzImplicit; -typedef LLUnitImplicit<U32, LLUnits::Megahertz> U32MegahertzImplicit; -typedef LLUnitImplicit<U32, LLUnits::Gigahertz> U32GigahertzImplicit; -typedef LLUnitImplicit<U32, LLUnits::Radians> U32RadiansImplicit; -typedef LLUnitImplicit<U32, LLUnits::Degrees> U32DegreesImplicit; -typedef LLUnitImplicit<U32, LLUnits::Percent> U32PercentImplicit; -typedef LLUnitImplicit<U32, LLUnits::Ratio> U32RatioImplicit; -typedef LLUnitImplicit<U32, LLUnits::Triangles> U32TrianglesImplicit; -typedef LLUnitImplicit<U32, LLUnits::Kilotriangles> U32KiloTrianglesImplicit; - -typedef LLUnit<U64, LLUnits::Hertz> U64Hertz; -typedef LLUnit<U64, LLUnits::Kilohertz> U64Kilohertz; -typedef LLUnit<U64, LLUnits::Megahertz> U64Megahertz; -typedef LLUnit<U64, LLUnits::Gigahertz> U64Gigahertz; -typedef LLUnit<U64, LLUnits::Radians> U64Radians; -typedef LLUnit<U64, LLUnits::Degrees> U64Degrees; -typedef LLUnit<U64, LLUnits::Percent> U64Percent; -typedef LLUnit<U64, LLUnits::Ratio> U64Ratio; -typedef LLUnit<U64, LLUnits::Triangles> U64Triangles; -typedef LLUnit<U64, LLUnits::Kilotriangles> U64KiloTriangles; - -typedef LLUnitImplicit<U64, LLUnits::Hertz> U64HertzImplicit; -typedef LLUnitImplicit<U64, LLUnits::Kilohertz> U64KilohertzImplicit; -typedef LLUnitImplicit<U64, LLUnits::Megahertz> U64MegahertzImplicit; -typedef LLUnitImplicit<U64, LLUnits::Gigahertz> U64GigahertzImplicit; -typedef LLUnitImplicit<U64, LLUnits::Radians> U64RadiansImplicit; -typedef LLUnitImplicit<U64, LLUnits::Degrees> U64DegreesImplicit; -typedef LLUnitImplicit<U64, LLUnits::Percent> U64PercentImplicit; -typedef LLUnitImplicit<U64, LLUnits::Ratio> U64RatioImplicit; -typedef LLUnitImplicit<U64, LLUnits::Triangles> U64TrianglesImplicit; -typedef LLUnitImplicit<U64, LLUnits::Kilotriangles> U64KiloTrianglesImplicit; +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Hertz); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Kilohertz); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Megahertz); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Gigahertz); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Radians); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Degrees); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Percent); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Ratio); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Triangles); +LL_DECLARE_UNIT_TYPEDEFS(LLUnits, Kilotriangles); + #endif // LL_LLUNIT_H |