CORSIKA  @c8_version@
The framework to simulate particle cascades for astroparticle physics
phys::units::quantity< Dims, T > Class Template Reference

class "quantity" is the heart of the library. More...

#include <quantity.hpp>

Inheritance diagram for phys::units::quantity< Dims, T >:

Public Types

typedef Dims dimension_type
 
typedef T value_type
 
typedef quantity< Dims, T > this_type
 

Public Member Functions

template<typename X >
constexpr quantity (detail::magnitude_tag_t, X x)
 public converting initializing constructor; requires magnitude_tag to prevent constructing a quantity from a raw magnitude.
 
template<typename X >
constexpr quantity (quantity< Dims, X > const &x)
 converting copy-assignment constructor.
 
template<typename DX , typename X >
constexpr auto to (quantity< DX, X > const &x) const -> detail::Quotient< Dims, DX, T, X >
 convert to compatible unit, for example: (3._dm).to(meter) gives 0.3; More...
 
constexpr value_type magnitude () const
 the quantity's magnitude.
 
constexpr dimension_type dimension () const
 the quantity's dimensions.
 
template<typename _dim = dimension_type, std::enable_if_t< std::is_same_v< _dim, dimensionless_d >, bool > = true>
 operator double () const
 

Friends

template<typename D , typename X , typename Y >
constexpr quantity< D, X > & operator+= (quantity< D, X > &x, quantity< D, Y > const &y)
 quan += quan
 
template<typename D , typename X >
constexpr quantity< D, X > operator+ (quantity< D, X > const &x)
 
template<typename D , typename X , typename Y >
constexpr quantity< D, detail::PromoteAdd< X, Y > > operator+ (quantity< D, X > const &x, quantity< D, Y > const &y)
 quan + quan
 
template<typename D , typename X , typename Y >
constexpr quantity< D, X > & operator-= (quantity< D, X > &x, quantity< D, Y > const &y)
 quan -= quan
 
template<typename D , typename X >
constexpr quantity< D, X > operator- (quantity< D, X > const &x)
 
template<typename D , typename X , typename Y >
constexpr quantity< D, detail::PromoteAdd< X, Y > > operator- (quantity< D, X > const &x, quantity< D, Y > const &y)
 quan - quan
 
template<typename D , typename X , typename Y >
constexpr quantity< D, X > & operator*= (quantity< D, X > &x, const Y &y)
 quan *= num
 
template<typename D , typename X , typename Y >
constexpr quantity< D, detail::PromoteMul< X, Y > > operator* (quantity< D, X > const &x, const Y &y)
 quan * num
 
template<typename D , typename X , typename Y >
constexpr quantity< D, detail::PromoteMul< X, Y > > operator* (const X &x, quantity< D, Y > const &y)
 num * quan
 
template<typename DX , typename DY , typename X , typename Y >
constexpr detail::Product< DX, DY, X, Y > operator* (quantity< DX, X > const &lhs, quantity< DY, Y > const &rhs)
 quan * quan:
 
template<typename D , typename X , typename Y >
constexpr quantity< D, X > & operator/= (quantity< D, X > &x, const Y &y)
 quan /= num
 
template<typename D , typename X , typename Y >
constexpr quantity< D, detail::PromoteMul< X, Y > > operator/ (quantity< D, X > const &x, const Y &y)
 quan / num
 
template<typename D , typename X , typename Y >
constexpr detail::Reciprocal< D, X, Y > operator/ (const X &x, quantity< D, Y > const &y)
 num / quan
 
template<typename DX , typename DY , typename X , typename Y >
constexpr detail::Quotient< DX, DY, X, Y > operator/ (quantity< DX, X > const &x, quantity< DY, Y > const &y)
 quan / quan:
 
template<typename D , typename X >
constexpr quantity< D, X > abs (quantity< D, X > const &x)
 absolute value.
 
template<int N, typename D , typename X >
constexpr detail::Power< D, N, X > nth_power (quantity< D, X > const &x)
 N-th power.
 
template<typename D , typename X >
constexpr detail::Power< D, 2, X > square (quantity< D, X > const &x)
 square.
 
template<typename D , typename X >
constexpr detail::Power< D, 3, X > cube (quantity< D, X > const &x)
 cube.
 
template<int N, typename D , typename X >
detail::Root< D, N, X > constexpr nth_root (quantity< D, X > const &x)
 n-th root.
 
template<typename D , typename X >
detail::Root< D, 2, X > constexpr sqrt (quantity< D, X > const &x)
 square root.
 
template<typename D , typename X >
detail::Root< D, 3, X > constexpr cbrt (quantity< D, X > const &x)
 cubic root.
 
template<typename D , typename X , typename Y >
constexpr bool operator== (quantity< D, X > const &x, quantity< D, Y > const &y)
 equality.
 
template<typename D , typename X , typename Y >
constexpr bool operator!= (quantity< D, X > const &x, quantity< D, Y > const &y)
 inequality.
 
template<typename D , typename X , typename Y >
constexpr bool operator< (quantity< D, X > const &x, quantity< D, Y > const &y)
 less-than.
 
template<typename D , typename X , typename Y >
constexpr bool operator<= (quantity< D, X > const &x, quantity< D, Y > const &y)
 less-equal.
 
template<typename D , typename X , typename Y >
constexpr bool operator> (quantity< D, X > const &x, quantity< D, Y > const &y)
 greater-than.
 
template<typename D , typename X , typename Y >
constexpr bool operator>= (quantity< D, X > const &x, quantity< D, Y > const &y)
 greater-equal.
 

Detailed Description

template<typename Dims, typename T>
class phys::units::quantity< Dims, T >

class "quantity" is the heart of the library.

It associates dimensions with a single "Rep" data member and protects it from dimensionally inconsistent use.

Definition at line 54 of file quantity.hpp.

Member Function Documentation

◆ infinity()

template<typename Dims, typename T>
static constexpr quantity phys::units::quantity< Dims, T >::infinity ( )
inlinestatic

We also define "infinity" for each type.

RU, Do 7. Jan 02:10:18 CET 2021

Definition at line 367 of file quantity.hpp.

◆ to()

template<typename Dims, typename T>
template<typename DX , typename X >
constexpr auto phys::units::quantity< Dims, T >::to ( quantity< DX, X > const &  x) const -> detail::Quotient<Dims, DX, T, X>
inline

convert to compatible unit, for example: (3._dm).to(meter) gives 0.3;

convert to given unit, for example: (3._dm).to(meter) gives 0.3;

Definition at line 338 of file quantity.hpp.

◆ zero()

template<typename Dims, typename T>
static constexpr quantity phys::units::quantity< Dims, T >::zero ( )
inlinestatic

We need a "zero" of each type – for comparisons, to initialize running totals, etc.

Note: 0 m != 0 kg, since they are of different dimensionality. zero is really just defined for convenience, since quantity< length_d >::zero == 0 * meter, etc.

Definition at line 359 of file quantity.hpp.

Friends And Related Function Documentation

◆ operator+

template<typename Dims, typename T>
template<typename D , typename X >
constexpr quantity<D, X> operator+ ( quantity< D, X > const &  x)
friend
  • quan

Definition at line 528 of file quantity.hpp.

◆ operator-

template<typename Dims, typename T>
template<typename D , typename X >
constexpr quantity<D, X> operator- ( quantity< D, X > const &  x)
friend
  • quan

Definition at line 552 of file quantity.hpp.


The documentation for this class was generated from the following file: