Quantify
An extensible C++ units library
Loading...
Searching...
No Matches
reduce_rules.cppm File Reference
import quantify.core:preface;
import std;
+ Include dependency graph for reduce_rules.cppm:

Go to the source code of this file.

Namespaces

namespace  quantify
 

Macros

#define TO(...)
 
#define REDUCE_PATTERN(...)
 

Functions

template<typename N>
 quantify::REDUCE_PATTERN (frac< N, N >) TO(no_unit)
 
template<>
 quantify::REDUCE_PATTERN (frac< no_unit, no_unit >) TO(no_unit)
 
template<typename N>
 quantify::REDUCE_PATTERN (frac< N, no_unit >) TO(reduce< N >)
 
template<typename N, typename D>
requires (!is_frac_v<N>)
 quantify::REDUCE_PATTERN (frac< N, frac< N, D > >) TO(reduce< D >)
 
template<typename N, typename D1, typename D2>
requires (!is_frac_v<N>)
 quantify::REDUCE_PATTERN (frac< N, frac< D1, D2 > >) TO(reduce< frac< reduce< mul< reduce< N >
 
template<typename N, typename D>
 quantify::REDUCE_PATTERN (frac< frac< N, D >, no_unit >) TO(reduce< frac< N
 
template<typename N, typename D>
requires (!is_frac_v<N>)
 quantify::REDUCE_PATTERN (frac< frac< N, D >, N >) TO(reduce< frac< no_unit
 
template<typename N, typename D1, typename D2>
requires (!is_frac_v<N>)
 quantify::REDUCE_PATTERN (frac< frac< D1, D2 >, N >) TO(reduce< frac< reduce< D1 >
 
template<typename N1, typename N2, typename D1, typename D2>
requires (!std::is_same_v<N1, D1> || !std::is_same_v<N2, D2>)
 quantify::REDUCE_PATTERN (frac< frac< N1, N2 >, frac< D1, D2 > >) TO(reduce< frac< reduce< mul< reduce< N1 >
 
template<typename N, typename ... Ds>
requires (packtl::Contains<N, Ds...>)
 quantify::REDUCE_PATTERN (frac< N, mul< Ds... > >) TO(reduce< frac< no_unit
 
template<typename D, typename ... Ns>
requires (packtl::Contains<D, Ns...>)
 quantify::REDUCE_PATTERN (frac< mul< Ns... >, D >) TO(reduce< cancel_out< reduce< mul< Ns... > >
 
template<typename M1, typename M2>
requires (is_mul_v<M1> && is_mul_v<M2> && !packtl::share_items<M1, M2>::value)
 quantify::REDUCE_PATTERN (frac< M1, M2 >) TO(frac< M1
 
template<typename M1, typename M2>
requires (is_mul_v<M1> && is_mul_v<M2> && packtl::share_items<M1, M2>::value)
 quantify::REDUCE_PATTERN (frac< M1, M2 >) TO(reduce< frac< reduce< typename cancel_out_many< M1
 
template<>
 quantify::REDUCE_PATTERN (mul<>) TO(no_unit)
 
template<typename P>
 quantify::REDUCE_PATTERN (mul< P >) TO(reduce< P >)
 
template<typename ... Ps>
requires (!packtl::Contains<no_unit, Ps...> && ((!is_mul_v<Ps> && !is_frac_v<Ps>) && ...))
 quantify::REDUCE_PATTERN (mul< Ps... >) TO(mul< Ps... >)
 
template<typename ... Ps>
requires (!packtl::Contains<no_unit, Ps...> && ((is_mul_v<Ps> || is_frac_v<Ps>) || ...))
 quantify::REDUCE_PATTERN (mul< Ps... >) TO(reduce< normalize_t< mul< Ps... > > >)
 
template<typename ... Ps>
requires packtl::Contains<no_unit, Ps...>
 quantify::REDUCE_PATTERN (mul< Ps... >) TO(reduce< cancel_out< mul< Ps... >
 

Variables

 quantify::reduce< D2 >
 
 quantify::reduce< D1 >
 
 quantify::D
 
 quantify::reduce< D >
 
 quantify::reduce< mul< reduce< D2 >, reduce< N > > >
 
 quantify::reduce< mul< reduce< D1 >, reduce< N2 > > >
 
 quantify::reduce< cancel_out< reduce< mul< Ds... > >, N > >
 
 quantify::M2
 
M2 quantify::reduce< typename cancel_out_many< M2, M1 >::type >
 
 quantify::no_unit
 

Macro Definition Documentation

◆ REDUCE_PATTERN

#define REDUCE_PATTERN ( ...)
Value:
struct reduce_impl<__VA_ARGS__>

Definition at line 23 of file reduce_rules.cppm.

◆ TO

#define TO ( ...)
Value:
{ \
using type = __VA_ARGS__; \
}

Definition at line 18 of file reduce_rules.cppm.