Quantify
An extensible C++ units library
Loading...
Searching...
No Matches
quantify Namespace Reference

Namespaces

namespace  absorbed_dose
 
namespace  angle
 
namespace  catalytic_activity
 
namespace  distance
 
namespace  dose_equivalent
 
namespace  electric_capacitance
 
namespace  electric_charge
 
namespace  electric_conductance
 
namespace  electric_current
 
namespace  electric_resistance
 
namespace  emf
 
namespace  energy
 
namespace  force
 
namespace  frequency
 
namespace  illuminance
 
namespace  inductance
 
namespace  light_intensity
 
namespace  luminous_flux
 
namespace  magnetic_flux
 
namespace  magnetic_flux_density
 
namespace  mass
 
namespace  power
 
namespace  pressure
 
namespace  radionuclide_activity
 
namespace  solid_angle
 
namespace  speed
 
namespace  substance
 
namespace  temperature
 
namespace  time
 
namespace  volume
 

Classes

struct  frac
 
struct  frac< Numerator, Denominator >
 
struct  is_frac
 
struct  is_frac< frac< Args... > >
 
struct  is_mul
 
struct  is_mul< mul< Args... > >
 
struct  mul
 
struct  mul< Products... >
 
struct  no_scale
 
struct  no_unit
 
struct  quantity
 
struct  ratio
 Static representation of a numerical ratio in the form of a fraction. More...
 
struct  reduce_impl
 
struct  reduce_scale
 
struct  reduce_scale< Scale >
 
struct  scale_conversion_t
 
struct  scale_conversion_t< scales::celsius::scale, scales::fahrenheit::scale >
 
struct  scale_conversion_t< scales::kelvin::scale, scales::celsius::scale >
 
struct  scale_conversion_t< scales::kelvin::scale, scales::fahrenheit::scale >
 
struct  unit_conversion_t
 

Concepts

concept  Convertible
 
concept  ConvertibleScales
 
concept  CompareScales
 
concept  SameScale
 
concept  Quantity
 Unit agnostic type concept for use with the auto keyword.
 
concept  QuantityConcept
 Predicate that checks if a type is a quantity regardless of its unit.
 
concept  has_scale
 Predicate that checks if a type defines a scale for itself.
 

Typedefs

template<typename T>
using quantify::is_quantity
 Predicate that checks if a type is a quantity regardless of its unit.
 
template<typename Expr>
using quantify::reduce = typename reduce_impl<Expr>::type
 
template<typename U, typename T>
using quantify::Q = quantity<U, T>
 

Functions

template<QuantityConcept Q, typename T1>
requires (not QuantityConcept<T1>)
Q quantify::operator/ (const T1 &lhs, const Q &rhs)
 
template<QuantityConcept Q, typename T1>
requires (not QuantityConcept<T1>)
Q quantify::operator* (const T1 &lhs, const Q &rhs)
 
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

template<typename T>
constexpr bool quantify::is_quantity_v = is_quantity<T>::value
 Predicate that checks if a type is a quantity regardless of its unit.
 
template<typename M>
constexpr bool quantify::is_mul_v = is_mul<M>::value
 
template<typename F>
constexpr bool quantify::is_frac_v = is_frac<F>::value
 
template<typename S>
constexpr bool quantify::has_scale_v = has_scale<S>
 See has_scale.
 
 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
 

Typedef Documentation

◆ is_quantity

template<typename T>
using quantify::is_quantity
export

Predicate that checks if a type is a quantity regardless of its unit.

Checks whether the typename T is a specialization of the quantify::quantity class

See also
constexpr boolean: quantify::is_quantity_v
concept: quantify::QuantityConcept
Template Parameters
T

Definition at line 127 of file concepts.cppm.

◆ Q

template<typename U, typename T>
using quantify::Q = quantity<U, T>
export

Definition at line 278 of file quantity.cppm.

◆ reduce

template<typename Expr>
using quantify::reduce = typename reduce_impl<Expr>::type
export

Definition at line 49 of file preface.cppm.

Function Documentation

◆ operator*()

template<QuantityConcept Q, typename T1>
requires (not QuantityConcept<T1>)
Q quantify::operator* ( const T1 & lhs,
const Q & rhs )
export

Definition at line 273 of file quantity.cppm.

◆ operator/()

template<QuantityConcept Q, typename T1>
requires (not QuantityConcept<T1>)
Q quantify::operator/ ( const T1 & lhs,
const Q & rhs )
export

Definition at line 267 of file quantity.cppm.

◆ REDUCE_PATTERN() [1/18]

template<typename N, typename D1, typename D2>
requires (!is_frac_v<N>)
quantify::REDUCE_PATTERN ( frac< frac< D1, D2 >, N > )
export

◆ REDUCE_PATTERN() [2/18]

template<typename N, typename D>
requires (!is_frac_v<N>)
quantify::REDUCE_PATTERN ( frac< frac< N, D >, N > )
export

◆ REDUCE_PATTERN() [3/18]

template<typename N, typename D>
quantify::REDUCE_PATTERN ( frac< frac< N, D >, no_unit > )
export

◆ REDUCE_PATTERN() [4/18]

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 > > )
export

◆ REDUCE_PATTERN() [5/18]

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 > )
export

◆ REDUCE_PATTERN() [6/18]

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 > )
export

◆ REDUCE_PATTERN() [7/18]

template<typename D, typename ... Ns>
requires (packtl::Contains<D, Ns...>)
quantify::REDUCE_PATTERN ( frac< mul< Ns... >, D > )
export
+ Here is the call graph for this function:

◆ REDUCE_PATTERN() [8/18]

template<typename N, typename D1, typename D2>
requires (!is_frac_v<N>)
quantify::REDUCE_PATTERN ( frac< N, frac< D1, D2 > > )
export

◆ REDUCE_PATTERN() [9/18]

template<typename N, typename D>
requires (!is_frac_v<N>)
quantify::REDUCE_PATTERN ( frac< N, frac< N, D > > )
export

◆ REDUCE_PATTERN() [10/18]

template<typename N, typename ... Ds>
requires (packtl::Contains<N, Ds...>)
quantify::REDUCE_PATTERN ( frac< N, mul< Ds... > > )
export

◆ REDUCE_PATTERN() [11/18]

template<typename N>
quantify::REDUCE_PATTERN ( frac< N, N > )
export
+ Here is the caller graph for this function:

◆ REDUCE_PATTERN() [12/18]

template<typename N>
quantify::REDUCE_PATTERN ( frac< N, no_unit > )
export

◆ REDUCE_PATTERN() [13/18]

template<>
quantify::REDUCE_PATTERN ( frac< no_unit, no_unit > )
export

◆ REDUCE_PATTERN() [14/18]

template<typename P>
quantify::REDUCE_PATTERN ( mul< P > )
export
+ Here is the call graph for this function:

◆ REDUCE_PATTERN() [15/18]

template<typename ... Ps>
requires (!packtl::Contains<no_unit, Ps...> && ((!is_mul_v<Ps> && !is_frac_v<Ps>) && ...))
quantify::REDUCE_PATTERN ( mul< Ps... > )
export
+ Here is the call graph for this function:

◆ REDUCE_PATTERN() [16/18]

template<typename ... Ps>
requires packtl::Contains<no_unit, Ps...>
quantify::REDUCE_PATTERN ( mul< Ps... > )
export
+ Here is the call graph for this function:

◆ REDUCE_PATTERN() [17/18]

template<typename ... Ps>
requires (!packtl::Contains<no_unit, Ps...> && ((is_mul_v<Ps> || is_frac_v<Ps>) || ...))
quantify::REDUCE_PATTERN ( mul< Ps... > )
export
+ Here is the call graph for this function:

◆ REDUCE_PATTERN() [18/18]

template<>
quantify::REDUCE_PATTERN ( mul<> )
export
+ Here is the call graph for this function:

Variable Documentation

◆ D

quantify::D
export

Definition at line 49 of file reduce_rules.cppm.

◆ has_scale_v

template<typename S>
bool quantify::has_scale_v = has_scale<S>
constexprexport

See has_scale.

Definition at line 103 of file preface.cppm.

◆ is_frac_v

template<typename F>
bool quantify::is_frac_v = is_frac<F>::value
constexprexport

Definition at line 89 of file preface.cppm.

◆ is_mul_v

template<typename M>
bool quantify::is_mul_v = is_mul<M>::value
constexprexport

Definition at line 80 of file preface.cppm.

◆ is_quantity_v

template<typename T>
bool quantify::is_quantity_v = is_quantity<T>::value
constexprexport

Predicate that checks if a type is a quantity regardless of its unit.

Checks whether the typename T is a specialization of the quantify::quantity class

See also
predicate struct: quantify::is_quantity
concept: quantify::QuantityConcept
Template Parameters
T

Definition at line 139 of file concepts.cppm.

◆ M2

quantify::M2
export

Definition at line 82 of file reduce_rules.cppm.

◆ no_unit

quantify::no_unit
export

Definition at line 105 of file reduce_rules.cppm.

◆ reduce< cancel_out< reduce< mul< Ds... > >, N > >

quantify::reduce< cancel_out< reduce< mul< Ds... > >, N > >
export

Definition at line 66 of file reduce_rules.cppm.

◆ reduce< D >

quantify::reduce< D >
export

Definition at line 53 of file reduce_rules.cppm.

◆ reduce< D1 >

quantify::reduce< D1 >
export

Definition at line 46 of file reduce_rules.cppm.

◆ reduce< D2 >

quantify::reduce< D2 >
export

Definition at line 46 of file reduce_rules.cppm.

◆ reduce< mul< reduce< D1 >, reduce< N2 > > >

quantify::reduce< mul< reduce< D1 >, reduce< N2 > > >
export

Definition at line 61 of file reduce_rules.cppm.

◆ reduce< mul< reduce< D2 >, reduce< N > > >

quantify::reduce< mul< reduce< D2 >, reduce< N > > >
export

Definition at line 57 of file reduce_rules.cppm.

◆ reduce< typename cancel_out_many< M2, M1 >::type >

M2 quantify::reduce< typename cancel_out_many< M2, M1 >::type >
export

Definition at line 86 of file reduce_rules.cppm.