DryChem 1.0.0
A generic, compile-time C++ toolbox with no dependencies for the modern computational chemistry project.
Loading...
Searching...
No Matches
CppUnits::PhysicalQuantity< BaseDimensionality > Class Template Reference

#include <physicalQuantity.hpp>

Inheritance diagram for CppUnits::PhysicalQuantity< BaseDimensionality >:

Public Types

using DimensionalityType = typename BaseDimensionality::Type
 

Public Member Functions

constexpr PhysicalQuantity () noexcept=default
 
constexpr PhysicalQuantity (long double Magnitude) noexcept
 
constexpr PhysicalQuantity (const std::string &Magnitude)
 
constexpr long double getMagnitude () const noexcept
 
constexpr void setMagnitude (long double Magnitude) noexcept
 
constexpr auto operator+= (const PhysicalQuantity< BaseDimensionality > &rhs) noexcept
 Arithmetic Operators.
 
constexpr auto operator+ (const PhysicalQuantity< BaseDimensionality > &rhs) const noexcept
 
constexpr auto operator-= (const PhysicalQuantity< BaseDimensionality > &rhs) noexcept
 
constexpr auto operator- (const PhysicalQuantity< BaseDimensionality > &rhs) const noexcept
 
constexpr auto operator- () noexcept
 
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
constexpr auto operator* (T rhs) const noexcept
 
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
constexpr auto operator*= (T rhs) noexcept
 
constexpr auto operator*= (const PhysicalQuantity< Dimensionality<> > &rhs) noexcept
 
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
constexpr auto operator/ (T rhs) const noexcept
 
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
constexpr auto operator/= (T rhs) noexcept
 
constexpr auto operator/= (const PhysicalQuantity< Dimensionality<> > &rhs) noexcept
 

Private Attributes

long double magnitude {0.0l}
 

Friends

constexpr friend bool operator== (const PhysicalQuantity< BaseDimensionality > &lhs, const PhysicalQuantity< BaseDimensionality > &rhs) noexcept
 Comparison Operators.
 
constexpr friend bool operator< (const PhysicalQuantity< BaseDimensionality > &lhs, const PhysicalQuantity< BaseDimensionality > &rhs) noexcept
 
constexpr friend std::ostream & operator<< (std::ostream &stream, const PhysicalQuantity< BaseDimensionality > &rhs)
 Output Stream Operators.
 

Detailed Description

template<typename BaseDimensionality>
class CppUnits::PhysicalQuantity< BaseDimensionality >

A class representing a physical quantity with dimensionality based off the SI units system. Since these units are designed to work with user-defined literals, the internal data type must be a long double.

Template Parameters
BaseDimensionality- Dimensionality of the given physical quantity in SI units
Note
Physical quantities and dimensionless quantities can only be multiplied or divided by each other, adding or subtracting is an error due to a dimensionality mismatch.

Member Typedef Documentation

◆ DimensionalityType

template<typename BaseDimensionality>
using CppUnits::PhysicalQuantity< BaseDimensionality >::DimensionalityType = typename BaseDimensionality::Type

Constructor & Destructor Documentation

◆ PhysicalQuantity() [1/3]

template<typename BaseDimensionality>
CppUnits::PhysicalQuantity< BaseDimensionality >::PhysicalQuantity ( )
constexprdefaultnoexcept

◆ PhysicalQuantity() [2/3]

template<typename BaseDimensionality>
CppUnits::PhysicalQuantity< BaseDimensionality >::PhysicalQuantity ( long double Magnitude)
inlineexplicitconstexprnoexcept

◆ PhysicalQuantity() [3/3]

template<typename BaseDimensionality>
CppUnits::PhysicalQuantity< BaseDimensionality >::PhysicalQuantity ( const std::string & Magnitude)
inlineexplicitconstexpr

Allow strings to be parsed as physical quantities if they can first be parsed as long doubles.

Exceptions
std::invalid_argumentIf we can't convert the string to a long double our constructor will throw

Member Function Documentation

◆ getMagnitude()

template<typename BaseDimensionality>
long double CppUnits::PhysicalQuantity< BaseDimensionality >::getMagnitude ( ) const
inlineconstexprnoexcept

◆ setMagnitude()

template<typename BaseDimensionality>
void CppUnits::PhysicalQuantity< BaseDimensionality >::setMagnitude ( long double Magnitude)
inlineconstexprnoexcept

Referenced by GTEST_TEST().

◆ operator+=()

template<typename BaseDimensionality>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator+= ( const PhysicalQuantity< BaseDimensionality > & rhs)
inlineconstexprnoexcept

◆ operator+()

template<typename BaseDimensionality>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator+ ( const PhysicalQuantity< BaseDimensionality > & rhs) const
inlineconstexprnoexcept

◆ operator-=()

template<typename BaseDimensionality>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator-= ( const PhysicalQuantity< BaseDimensionality > & rhs)
inlineconstexprnoexcept

◆ operator-() [1/2]

template<typename BaseDimensionality>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator- ( const PhysicalQuantity< BaseDimensionality > & rhs) const
inlineconstexprnoexcept

◆ operator-() [2/2]

template<typename BaseDimensionality>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator- ( )
inlineconstexprnoexcept

◆ operator*()

template<typename BaseDimensionality>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator* ( T rhs) const
inlineconstexprnoexcept

◆ operator*=() [1/2]

template<typename BaseDimensionality>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator*= ( T rhs)
inlineconstexprnoexcept

◆ operator*=() [2/2]

template<typename BaseDimensionality>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator*= ( const PhysicalQuantity< Dimensionality<> > & rhs)
inlineconstexprnoexcept

◆ operator/()

template<typename BaseDimensionality>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator/ ( T rhs) const
inlineconstexprnoexcept

◆ operator/=() [1/2]

template<typename BaseDimensionality>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator/= ( T rhs)
inlineconstexprnoexcept

◆ operator/=() [2/2]

template<typename BaseDimensionality>
auto CppUnits::PhysicalQuantity< BaseDimensionality >::operator/= ( const PhysicalQuantity< Dimensionality<> > & rhs)
inlineconstexprnoexcept

Friends And Related Symbol Documentation

◆ operator==

template<typename BaseDimensionality>
friend bool operator== ( const PhysicalQuantity< BaseDimensionality > & lhs,
const PhysicalQuantity< BaseDimensionality > & rhs )
friend

◆ operator<

template<typename BaseDimensionality>
friend bool operator< ( const PhysicalQuantity< BaseDimensionality > & lhs,
const PhysicalQuantity< BaseDimensionality > & rhs )
friend

◆ operator<<

template<typename BaseDimensionality>
friend std::ostream & operator<< ( std::ostream & stream,
const PhysicalQuantity< BaseDimensionality > & rhs )
friend

Member Data Documentation

◆ magnitude

template<typename BaseDimensionality>
long double CppUnits::PhysicalQuantity< BaseDimensionality >::magnitude {0.0l}
private

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