Cpp Utilities 1.2.3
DimensionalAnalysis.hpp
Go to the documentation of this file.
1#ifndef CPP_UTILITIES_DIMENSIONALANALYSIS_HPP
2#define CPP_UTILITIES_DIMENSIONALANALYSIS_HPP
3
4#include <tuple>
5#include <ratio>
6#include <cmath>
7#include "../Common.h"
8
58
68namespace Dimensional {
86template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
87struct Unit
88{
91#if __cplusplus >= 201402L
93 static constexpr std::tuple<int, int, int, int, int, int, int> factors{
94 length, mass, time, current, temperature, amountOfSubstance, luminousIntensity
95 };
96#else
98 static const std::tuple<int, int, int, int, int, int, int> factors;
99#endif
101 static constexpr int factorLength = length;
103 static constexpr int factorMass = mass;
105 static constexpr int factorTime = time;
107 static constexpr int factorCurrent = current;
109 static constexpr int factorTemperature = temperature;
111 static constexpr int factorAmountOfSubstance = amountOfSubstance;
113 static constexpr int factorLuminousIntensity = luminousIntensity;
114};
115#if __cplusplus < 201703L // Definition of static constexpr member is deprecated since C++17.
116#if __cplusplus >= 201402L
117template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
119#else
120template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
122 length, mass, time, current, temperature, amountOfSubstance, luminousIntensity
123};
124#endif
125template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
127template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
129template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
131template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
133template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
135template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
137template<int length, int mass, int time, int current, int temperature, int amountOfSubstance, int luminousIntensity>
139#endif
140
153template<typename Unit1, typename Unit2>
155 Unit1::factorLength + Unit2::factorLength,
156 Unit1::factorMass + Unit2::factorMass,
157 Unit1::factorTime + Unit2::factorTime,
158 Unit1::factorCurrent + Unit2::factorCurrent,
159 Unit1::factorTemperature + Unit2::factorTemperature,
160 Unit1::factorAmountOfSubstance + Unit2::factorAmountOfSubstance,
161 Unit1::factorLuminousIntensity + Unit2::factorLuminousIntensity
162>;
168template<typename Unit1, typename Unit2>
170 Unit1::factorLength - Unit2::factorLength,
171 Unit1::factorMass - Unit2::factorMass,
172 Unit1::factorTime - Unit2::factorTime,
173 Unit1::factorCurrent - Unit2::factorCurrent,
174 Unit1::factorTemperature - Unit2::factorTemperature,
175 Unit1::factorAmountOfSubstance - Unit2::factorAmountOfSubstance,
176 Unit1::factorLuminousIntensity - Unit2::factorLuminousIntensity
177>;
183template<typename U, int n>
184using UnitPow = Unit<
185 U::factorLength * n,
186 U::factorMass * n,
187 U::factorTime * n,
188 U::factorCurrent * n,
189 U::factorTemperature * n,
190 U::factorAmountOfSubstance * n,
191 U::factorLuminousIntensity * n
192>;
198template<typename U, int n>
200 U::factorLength / n,
201 U::factorMass / n,
202 U::factorTime / n,
203 U::factorCurrent / n,
204 U::factorTemperature / n,
205 U::factorAmountOfSubstance / n,
206 U::factorLuminousIntensity / n
207>;
269// TODO radian
270// TODO steradian
372// Forward declarations
373template<typename T, typename Unit, typename Ratio>
374class Quantity;
375template<typename NewRatio, typename T, typename U, typename Ratio>
377
392template<typename T, typename U, typename Ratio = std::ratio<1>>
394{
395public:
399 using value_type = T;
401 using unit_type = U;
403 using ratio_type = Ratio;
404
409 inline explicit Quantity(T x = 0)
410 : v(x)
411 {}
412
417 inline Quantity(const Quantity<T, U, Ratio>& other)
418 : v(other.v)
419 {}
420
426 template<typename OtherRatio>
428 : v(quantity_cast<Ratio>(other).value())
429 {}
430
437 inline T value() const
438 { return v; }
439
445 inline void set_value(T value)
446 { v = value;; }
447
453 inline T standard_value() const
454 { return quantity_cast<std::ratio<1>>(*this).value(); }
455
462 { v = quantity_cast<Ratio>(Quantity<T, U>(value)).value(); }
463
472 template<typename OtherRatio>
475 { v += quantity_cast<Ratio>(other).v; return *this; }
476
484 { v = other.v; return *this; }
485
494 template<typename OtherRatio>
497 { v = quantity_cast<Ratio>(other).v; return *this; }
498
506 template<typename OtherRatio>
507 inline bool operator==(const Quantity<T, U, OtherRatio>& other) const
508 { return v == quantity_cast<Ratio>(other).v; }
509
517 template<typename OtherRatio>
518 inline bool operator!=(const Quantity<T, U, OtherRatio>& other) const
519 { return !(*this == other); }
520
528 template<typename OtherRatio>
529 inline bool operator<(const Quantity<T, U, OtherRatio>& other) const
530 { return v < quantity_cast<Ratio>(other).v; }
531
539 template<typename OtherRatio>
540 inline bool operator<=(const Quantity<T, U, OtherRatio>& other) const
541 { return (*this < other) || (*this == other); }
542
550 template<typename OtherRatio>
551 inline bool operator>(const Quantity<T, U, OtherRatio>& other) const
552 { return !(*this <= other); }
553
561 template<typename OtherRatio>
562 inline bool operator>=(const Quantity<T, U, OtherRatio>& other) const
563 { return !(*this < other); }
564
565private:
566 T v;
567};
568
581template<typename T, typename U, typename Ratio1, typename Ratio2>
582inline Quantity<T, U, Ratio1>
584{
585 return Quantity<T, U, Ratio1>(lhs.value()
586 + quantity_cast<Ratio1>(rhs).value());
587}
588
602template<typename T, typename U, typename Ratio1, typename Ratio2>
605{
606 return Quantity<T, U, Ratio1>(lhs.value()
607 - quantity_cast<Ratio1>(rhs).value());
608}
609
624template<typename T, typename Unit1, typename Ratio1, typename Unit2, typename Ratio2>
627{
628 using dim = UnitMultiply<Unit1, Unit2>;
630 * quantity_cast<Ratio1>(rhs).value());
631}
632
647template<typename T, typename Unit1, typename Ratio1, typename Unit2, typename Ratio2>
650{
651 using dim = UnitDivide<Unit1, Unit2>;
653 / quantity_cast<Ratio1>(rhs).value());
654}
655
667template<int factor, typename T, typename U, typename Ratio>
668inline Quantity<T, UnitPow<U, factor>, std::ratio<1>>
670{
671 return Quantity<
672 T,
673 UnitPow<U, factor>,
674 std::ratio<1>
675 >(std::pow(quantity_cast<std::ratio<1>>(x).value(),
676 factor));
677}
678
690template<int factor, typename T, typename U, typename Ratio>
691inline Quantity<T, UnitRoot<U, factor>, std::ratio<1>>
693{
694 return Quantity<
695 T,
696 UnitRoot<U, factor>,
697 std::ratio<1>
698 >(std::pow(quantity_cast<std::ratio<1>>(x).value(),
699 1.0 / factor));
700}
701
714template<typename NewRatio, typename T, typename U, typename Ratio>
716{
717 using ratio_div = std::ratio_divide<Ratio, NewRatio>;
718 T val = x.value()
719 * (static_cast<long double>(ratio_div::num) / ratio_div::den);
720 return Quantity<T, U, NewRatio>(val);
721}
722
733typedef std::ratio<80813362, 25723692> ratio_PI;
738typedef std::ratio_divide<ratio_PI, std::ratio<180>> ratio_degree;
751typedef std::ratio<500, 1> ratio_length_li;
756typedef std::ratio_divide<ratio_length_li, std::ratio<15>> ratio_yin;
761typedef std::ratio_divide<ratio_yin, std::ratio<10>> ratio_zhang;
766typedef std::ratio_divide<ratio_zhang, std::ratio<2>> ratio_xun;
771typedef std::ratio_divide<ratio_zhang, std::ratio<10>> ratio_chi;
776typedef std::ratio_divide<ratio_chi, std::ratio<10>> ratio_cun;
781typedef std::ratio_divide<ratio_cun, std::ratio<10>> ratio_length_fen;
786typedef std::ratio_divide<ratio_length_fen, std::ratio<10>> ratio_length_li2;
791typedef std::ratio_divide<ratio_length_li2, std::ratio<10>> ratio_length_hao;
796typedef std::ratio_divide<ratio_length_hao, std::ratio<10>> ratio_length_si;
801typedef std::ratio_divide<ratio_length_si, std::ratio<10>> ratio_length_hu;
806typedef std::ratio<200000, 3> ratio_qing;
811typedef std::ratio<2000, 3> ratio_mu;
816typedef std::ratio_divide<ratio_mu, std::ratio<240>> ratio_gong;
821typedef std::ratio<50> ratio_dan;
826typedef std::ratio<1, 2> ratio_jin;
831typedef std::ratio_divide<ratio_jin, std::ratio<10>> ratio_liang;
836typedef std::ratio_divide<ratio_liang, std::ratio<10>> ratio_qian;
841typedef std::ratio_divide<ratio_qian, std::ratio<10>> ratio_mass_fen;
846typedef std::ratio_divide<ratio_mass_fen, std::ratio<10>> ratio_mass_li;
851typedef std::ratio_divide<ratio_mass_li, std::ratio<10>> ratio_mass_hao;
856typedef std::ratio_divide<ratio_mass_hao, std::ratio<10>> ratio_mass_si;
861typedef std::ratio_divide<ratio_mass_si, std::ratio<10>> ratio_mass_hu;
874typedef std::ratio_multiply<std::ratio<1609344ll, 1000000ll>, std::kilo> ratio_mile;
879typedef std::ratio_divide<ratio_mile, std::ratio<8>> ratio_furlong;
884typedef std::ratio_divide<ratio_furlong, std::ratio<10>> ratio_chain;
889typedef std::ratio_divide<ratio_chain, std::ratio<22>> ratio_yard;
894typedef std::ratio_divide<ratio_yard, std::ratio<16>> ratio_nail;
899typedef std::ratio_divide<ratio_yard, std::ratio<3>> ratio_feet;
904typedef std::ratio_divide<ratio_feet, std::ratio<12>> ratio_inch;
909typedef std::ratio_divide<ratio_inch, std::ratio<6>> ratio_pica;
914typedef std::ratio_divide<ratio_pica, std::ratio<12>> ratio_point;
919typedef std::ratio<10160469088, 10000000> ratio_longton;
924typedef std::ratio<90718474, 100000> ratio_shortton;
929typedef std::ratio<5080234544, 100000000> ratio_long_hundredweight;
934typedef std::ratio<45359237, 1000000> ratio_short_hundredweight;
939typedef std::ratio<45359237, 100000000> ratio_pound;
944typedef std::ratio_divide<ratio_pound, std::ratio<16>> ratio_ounce;
949typedef std::ratio_divide<ratio_ounce, std::ratio<16>> ratio_drachm;
954typedef std::ratio_multiply<std::ratio<6479891, 100000ll>, std::micro> ratio_grain;
972typedef std::ratio_multiply<ratio_pound, std::ratio<28>> ratio_en_quarter;
977typedef std::ratio_multiply<ratio_pound, std::ratio<14>> ratio_en_stone;
982typedef std::ratio_multiply<std::ratio<35516328125ll, 10000000000ll>, std::micro> ratio_en_fluid_dram;
987typedef std::ratio_multiply<ratio_en_fluid_dram, std::ratio<8>> ratio_en_fluid_ounce;
992typedef std::ratio_multiply<ratio_en_fluid_ounce, std::ratio<5>> ratio_en_gill;
997typedef std::ratio_multiply<ratio_en_gill, std::ratio<2>> ratio_en_cup;
1002typedef std::ratio_multiply<ratio_en_cup, std::ratio<2>> ratio_en_pint;
1007typedef std::ratio_multiply<ratio_en_pint, std::ratio<2>> ratio_en_quart;
1012typedef std::ratio_multiply<ratio_en_quart, std::ratio<4>> ratio_en_gallon;
1017typedef std::ratio_multiply<ratio_en_gallon, std::ratio<2>> ratio_en_peck;
1022typedef std::ratio_multiply<ratio_en_peck, std::ratio<4>> ratio_en_bushel;
1040typedef std::ratio_multiply<std::ratio<36966911953125ll, 10000000000000ll>, std::micro> ratio_us_fluid_dram;
1045typedef std::ratio_multiply<ratio_us_fluid_dram, std::ratio<8>> ratio_us_fluid_ounce;
1050typedef std::ratio_divide<ratio_us_fluid_ounce, std::ratio<6>> ratio_us_teaspoons;
1055typedef std::ratio_divide<ratio_us_fluid_ounce, std::ratio<2>> ratio_us_tablespoons;
1060typedef std::ratio_multiply<ratio_us_fluid_ounce, std::ratio<4>> ratio_us_gill;
1065typedef std::ratio_multiply<ratio_us_gill, std::ratio<2>> ratio_us_cup;
1070typedef std::ratio_multiply<ratio_us_cup, std::ratio<2>> ratio_us_pint;
1075typedef std::ratio_multiply<ratio_us_pint, std::ratio<2>> ratio_us_quart;
1080typedef std::ratio_multiply<ratio_us_quart, std::ratio<4>> ratio_us_gallon;
1085typedef std::ratio_multiply<std::ratio<5506104713575ll, 10000000000000ll>, std::milli> ratio_us_dry_pint;
1090typedef std::ratio_multiply<ratio_us_dry_pint, std::ratio<2>> ratio_us_dry_quart;
1095typedef std::ratio_multiply<ratio_us_dry_quart, std::ratio<4>> ratio_us_dry_gallon;
1100typedef std::ratio_multiply<ratio_us_dry_gallon, std::ratio<2>> ratio_us_dry_peck;
1105typedef std::ratio_multiply<ratio_us_dry_peck, std::ratio<4>> ratio_us_bushel;
1107} // namespace Dimensional
1111
1114#endif // CPP_UTILITIES_DIMENSIONALANALYSIS_HPP
#define UTILITIES_NAMESPACE_END
Define for end namespace declaration, nothing will be generated if UTILITIES_NAMESPACE isn't defined.
Definition: Common.h:92
#define UTILITIES_NAMESPACE_BEGIN
Define for begin namespace declaration, nothing will be generated if UTILITIES_NAMESPACE isn't define...
Definition: Common.h:91
The Quantity struct is used to describe arithmetic values with units.
Definition: DimensionalAnalysis.hpp:394
std::ratio_divide< ratio_mass_li, std::ratio< 10 > > ratio_mass_hao
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:851
std::ratio_multiply< ratio_en_fluid_dram, std::ratio< 8 > > ratio_en_fluid_ounce
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:987
T value_type
Value type for this quantity struct.
Definition: DimensionalAnalysis.hpp:399
Quantity(const Quantity< T, U, Ratio > &other)
Copy constructor.
Definition: DimensionalAnalysis.hpp:417
std::ratio_multiply< ratio_us_quart, std::ratio< 4 > > ratio_us_gallon
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1080
std::ratio_divide< ratio_inch, std::ratio< 6 > > ratio_pica
Ratio to convert to meter, with symbol pc. .
Definition: DimensionalAnalysis.hpp:909
Quantity< T, U, Ratio1 > operator-(Quantity< T, U, Ratio1 > &lhs, Quantity< T, U, Ratio2 > rhs)
Subtract operator overload, values will be converted to same ratio before calculation,...
Definition: DimensionalAnalysis.hpp:604
bool operator>=(const Quantity< T, U, OtherRatio > &other) const
Larger or equal operator overload, value will be convered to same ratio before comparison.
Definition: DimensionalAnalysis.hpp:562
std::ratio_multiply< ratio_en_quart, std::ratio< 4 > > ratio_en_gallon
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1012
Quantity(T x=0)
Default constructor.
Definition: DimensionalAnalysis.hpp:409
std::ratio_divide< ratio_feet, std::ratio< 12 > > ratio_inch
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:904
std::ratio< 90718474, 100000 > ratio_shortton
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:924
std::ratio_divide< ratio_mass_fen, std::ratio< 10 > > ratio_mass_li
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:846
std::ratio_divide< ratio_yard, std::ratio< 3 > > ratio_feet
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:899
Quantity< T, U, Ratio1 > operator+(Quantity< T, U, Ratio1 > lhs, Quantity< T, U, Ratio2 > rhs)
Plus operator overload, values will be converted to same ratio before calculation,...
Definition: DimensionalAnalysis.hpp:583
ratio_short_hundredweight ratio_us_hundredweight
Ratio to convert to kilogram .
Definition: DimensionalAnalysis.hpp:1035
std::ratio< 1, 2 > ratio_jin
Ratio to convert to kilogram, also called market carry. .
Definition: DimensionalAnalysis.hpp:826
bool operator==(const Quantity< T, U, OtherRatio > &other) const
Equality operator overload, value will be convered to same ratio before comparison.
Definition: DimensionalAnalysis.hpp:507
std::ratio_multiply< ratio_en_peck, std::ratio< 4 > > ratio_en_bushel
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1022
std::ratio_divide< ratio_jin, std::ratio< 10 > > ratio_liang
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:831
std::ratio_multiply< std::ratio< 5506104713575ll, 10000000000000ll >, std::milli > ratio_us_dry_pint
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1085
std::ratio_multiply< ratio_en_cup, std::ratio< 2 > > ratio_en_pint
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1002
void set_value(T value)
Set underlying value of the quantity.
Definition: DimensionalAnalysis.hpp:445
bool operator>(const Quantity< T, U, OtherRatio > &other) const
Larger than operator overload, value will be convered to same ratio before comparison.
Definition: DimensionalAnalysis.hpp:551
Quantity< T, UnitPow< U, factor >, std::ratio< 1 > > pow(const Quantity< T, U, Ratio > &x)
Power calculation, performed both on value and unit, ratio will be casted to std::ratio<1>.
Definition: DimensionalAnalysis.hpp:669
std::ratio< 45359237, 1000000 > ratio_short_hundredweight
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:934
std::ratio_multiply< ratio_en_pint, std::ratio< 2 > > ratio_en_quart
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1007
std::ratio_divide< ratio_us_fluid_ounce, std::ratio< 2 > > ratio_us_tablespoons
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1055
std::ratio_multiply< ratio_pound, std::ratio< 28 > > ratio_en_quarter
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:972
std::ratio_divide< ratio_cun, std::ratio< 10 > > ratio_length_fen
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:781
Quantity< T, U, Ratio > & operator=(const Quantity< T, U, OtherRatio > &other)
Assisgnment operator overload, assign value from same type but different ratio, operand value will be...
Definition: DimensionalAnalysis.hpp:496
Ratio ratio_type
Ratio type for this quantity struct.
Definition: DimensionalAnalysis.hpp:403
std::ratio_multiply< ratio_us_dry_peck, std::ratio< 4 > > ratio_us_bushel
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1105
Quantity< T, U, NewRatio > quantity_cast(Quantity< T, U, Ratio > x)
Cast a quantity to another ratio, value will be converted too. Sample code for convert to standard va...
Definition: DimensionalAnalysis.hpp:715
std::ratio_divide< ratio_mile, std::ratio< 8 > > ratio_furlong
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:879
std::ratio_divide< ratio_zhang, std::ratio< 2 > > ratio_xun
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:766
std::ratio_multiply< ratio_us_dry_quart, std::ratio< 4 > > ratio_us_dry_gallon
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1095
std::ratio_multiply< ratio_us_dry_gallon, std::ratio< 2 > > ratio_us_dry_peck
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1100
std::ratio< 200000, 3 > ratio_qing
Ratio to convert to suqaremeter. .
Definition: DimensionalAnalysis.hpp:806
std::ratio_divide< ratio_yard, std::ratio< 16 > > ratio_nail
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:894
std::ratio_divide< ratio_furlong, std::ratio< 10 > > ratio_chain
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:884
std::ratio_multiply< ratio_pound, std::ratio< 14 > > ratio_en_stone
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:977
bool operator<(const Quantity< T, U, OtherRatio > &other) const
Less than operator overload, value will be convered to same ratio before comparison.
Definition: DimensionalAnalysis.hpp:529
std::ratio_multiply< std::ratio< 35516328125ll, 10000000000ll >, std::micro > ratio_en_fluid_dram
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:982
Quantity< T, UnitRoot< U, factor >, std::ratio< 1 > > root(const Quantity< T, U, Ratio > &x)
Root calculation, performed both on value and unit, ratio will be casted to std::ratio<1>.
Definition: DimensionalAnalysis.hpp:692
Quantity< T, U, Ratio > & operator+=(const Quantity< T, U, OtherRatio > &other)
Add & assignment operator overload, add value from same type with maybe different ratio,...
Definition: DimensionalAnalysis.hpp:474
std::ratio_divide< ratio_length_hao, std::ratio< 10 > > ratio_length_si
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:796
std::ratio_divide< ratio_length_si, std::ratio< 10 > > ratio_length_hu
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:801
std::ratio_divide< ratio_liang, std::ratio< 10 > > ratio_qian
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:836
std::ratio_divide< ratio_mass_si, std::ratio< 10 > > ratio_mass_hu
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:861
bool operator<=(const Quantity< T, U, OtherRatio > &other) const
Less or equal operator overload, value will be convered to same ratio before comparison.
Definition: DimensionalAnalysis.hpp:540
std::ratio_multiply< ratio_en_gill, std::ratio< 2 > > ratio_en_cup
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:997
std::ratio_divide< ratio_PI, std::ratio< 180 > > ratio_degree
Ratio to convert degree into radian, using equation .
Definition: DimensionalAnalysis.hpp:738
std::ratio_multiply< ratio_en_fluid_ounce, std::ratio< 5 > > ratio_en_gill
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:992
Quantity(const Quantity< T, U, OtherRatio > &other)
Copy constructor from same quantity type with different ratio.
Definition: DimensionalAnalysis.hpp:427
std::ratio_multiply< std::ratio< 1609344ll, 1000000ll >, std::kilo > ratio_mile
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:874
std::ratio< 45359237, 100000000 > ratio_pound
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:939
U unit_type
Unit type for this quantity struct.
Definition: DimensionalAnalysis.hpp:401
T value() const
Get underlying value of the quantity, value represented with current unit and ratio will be returned.
Definition: DimensionalAnalysis.hpp:437
std::ratio< 10160469088, 10000000 > ratio_longton
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:919
std::ratio_multiply< std::ratio< 6479891, 100000ll >, std::micro > ratio_grain
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:954
std::ratio_divide< ratio_pica, std::ratio< 12 > > ratio_point
Ratio to convert to meter, with symbol 'pt'. .
Definition: DimensionalAnalysis.hpp:914
std::ratio_divide< ratio_mass_hao, std::ratio< 10 > > ratio_mass_si
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:856
std::ratio< 50 > ratio_dan
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:821
T standard_value() const
Get standard value of the quantity, Ratio is reverted to std::ratio<1>.
Definition: DimensionalAnalysis.hpp:453
std::ratio_multiply< ratio_us_fluid_ounce, std::ratio< 4 > > ratio_us_gill
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1060
std::ratio_multiply< ratio_us_dry_pint, std::ratio< 2 > > ratio_us_dry_quart
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1090
void set_standard_value(T value)
Get standard value of the quantity, Ratio is reverted to std::ratio<1>.
Definition: DimensionalAnalysis.hpp:461
std::ratio_divide< ratio_yin, std::ratio< 10 > > ratio_zhang
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:761
std::ratio_multiply< std::ratio< 36966911953125ll, 10000000000000ll >, std::micro > ratio_us_fluid_dram
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1040
std::ratio< 500, 1 > ratio_length_li
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:751
Quantity< T, UnitMultiply< Unit1, Unit2 >, Ratio1 > operator*(Quantity< T, Unit1, Ratio1 > lhs, Quantity< T, Unit2, Ratio2 > rhs)
Multiply operator overload, values will be converted to same ratio before calculation,...
Definition: DimensionalAnalysis.hpp:626
std::ratio_multiply< ratio_us_fluid_dram, std::ratio< 8 > > ratio_us_fluid_ounce
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1045
std::ratio_divide< ratio_length_fen, std::ratio< 10 > > ratio_length_li2
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:786
std::ratio_divide< ratio_qian, std::ratio< 10 > > ratio_mass_fen
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:841
std::ratio< 2000, 3 > ratio_mu
Ratio to convert to suqaremeter. .
Definition: DimensionalAnalysis.hpp:811
std::ratio< 80813362, 25723692 > ratio_PI
Ratio to display π in approximate fraction, with high presion up to .
Definition: DimensionalAnalysis.hpp:733
std::ratio_divide< ratio_mu, std::ratio< 240 > > ratio_gong
Ratio to convert to suqaremeter. .
Definition: DimensionalAnalysis.hpp:816
std::ratio_divide< ratio_chi, std::ratio< 10 > > ratio_cun
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:776
Quantity< T, U, Ratio > & operator=(const Quantity< T, U, Ratio > &other)
Assisgnment operator overload.
Definition: DimensionalAnalysis.hpp:483
ratio_long_hundredweight ratio_en_hundredweight
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:967
std::ratio< 5080234544, 100000000 > ratio_long_hundredweight
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:929
std::ratio_divide< ratio_zhang, std::ratio< 10 > > ratio_chi
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:771
bool operator!=(const Quantity< T, U, OtherRatio > &other) const
Inequality operator overload, value will be convered to same ratio before comparison.
Definition: DimensionalAnalysis.hpp:518
std::ratio_divide< ratio_us_fluid_ounce, std::ratio< 6 > > ratio_us_teaspoons
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1050
Quantity< T, UnitDivide< Unit1, Unit2 >, Ratio1 > operator/(Quantity< T, Unit1, Ratio1 > lhs, Quantity< T, Unit2, Ratio2 > rhs)
Divide operator overload, values will be converted to same ratio before calculation,...
Definition: DimensionalAnalysis.hpp:649
std::ratio_divide< ratio_length_li2, std::ratio< 10 > > ratio_length_hao
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:791
std::ratio_multiply< ratio_en_gallon, std::ratio< 2 > > ratio_en_peck
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1017
std::ratio_divide< ratio_pound, std::ratio< 16 > > ratio_ounce
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:944
std::ratio_multiply< ratio_us_pint, std::ratio< 2 > > ratio_us_quart
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1075
std::ratio_multiply< ratio_us_gill, std::ratio< 2 > > ratio_us_cup
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1065
std::ratio_divide< ratio_length_li, std::ratio< 15 > > ratio_yin
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:756
std::ratio_divide< ratio_chain, std::ratio< 22 > > ratio_yard
Ratio to convert to meter. .
Definition: DimensionalAnalysis.hpp:889
std::ratio_divide< ratio_ounce, std::ratio< 16 > > ratio_drachm
Ratio to convert to kilogram. .
Definition: DimensionalAnalysis.hpp:949
std::ratio_multiply< ratio_us_cup, std::ratio< 2 > > ratio_us_pint
Ratio to convert to cubicmeter. .
Definition: DimensionalAnalysis.hpp:1070
Namespace for all classes, typedefs and functions of dimensional analyse. See Dimensional Analysis fo...
Quantity< T, U, NewRatio > quantity_cast(Quantity< T, U, Ratio > x)
The Unit struct is used to describe physical units.
Definition: DimensionalAnalysis.hpp:88
Unit< 0, 1, 0, 0, 0, 0, 0 > Mass
Mass unit, called kilogram, with symbol kg.
Definition: DimensionalAnalysis.hpp:227
UnitDivide< Speed, Time > Acceleration
Acceleration unit, derived from .
Definition: DimensionalAnalysis.hpp:263
UnitDivide< Length, Time > Speed
Speed unit, derived from .
Definition: DimensionalAnalysis.hpp:259
UnitDivide< MagneticFlux, Area > MagnetFluxDensity
Magnet flux density unit, called tesla, with symbol T, derived from or .
Definition: DimensionalAnalysis.hpp:334
static constexpr int factorMass
Power factor of length mass unit.
Definition: DimensionalAnalysis.hpp:103
static constexpr int factorCurrent
Power factor of length current unit.
Definition: DimensionalAnalysis.hpp:107
UnitMultiply< Area, Length > Volume
Volume unit, with symbol .
Definition: DimensionalAnalysis.hpp:283
UnitMultiply< Force, Length > Energy
Enegy unit, called joule, with symbol J, derived from or .
Definition: DimensionalAnalysis.hpp:293
UnitDivide< Energy, Mass > EquivalentDose
Equivalent dose unit of ionising radiation, called sievert, with symbol Sv, derived from or .
Definition: DimensionalAnalysis.hpp:364
UnitDivide< Energy, Mass > AbsorbedDose
Absorbed dose unit of ionising radiation, called gray, with symbol Gy, derived from or .
Definition: DimensionalAnalysis.hpp:359
UnitDivide< MagneticFlux, Current > Inductance
Electric unit, called henry, with symbol H, derived from or .
Definition: DimensionalAnalysis.hpp:339
static constexpr int factorLength
Power factor of length unit.
Definition: DimensionalAnalysis.hpp:101
UnitDivide< AmountOfSubstance, Time > CatalyticActivity
Catalytic activity unit called katal, with symbol kat, derived from .
Definition: DimensionalAnalysis.hpp:369
Unit< 0, 0, 0, 0, 0, 0, 1 > LuminousIntensity
Luminous intensity unit, called candela, with symbol cd.
Definition: DimensionalAnalysis.hpp:247
static constexpr int factorTemperature
Power factor of length temperature unit.
Definition: DimensionalAnalysis.hpp:109
UnitDivide< Energy, Time > Power
Power unit, called watt, with symbol W, derived from or .
Definition: DimensionalAnalysis.hpp:298
UnitDivide< Charge, Voltage > ElelctricCapacitance
Elelctric capacitance unit, called farad, with symbol F, derived from or .
Definition: DimensionalAnalysis.hpp:313
LuminousIntensity Luminous
Luminous flux unit, called lumen, with symbol lm, derived from .
Definition: DimensionalAnalysis.hpp:344
UnitMultiply< Time, Current > Charge
Charge unit, called coulomb, with symbol C, derived from .
Definition: DimensionalAnalysis.hpp:303
UnitMultiply< Mass, Acceleration > Force
Force unit, called newton, with symbol N, derived from .
Definition: DimensionalAnalysis.hpp:275
Unit< 0, 0, 0, 0, 1, 0, 0 > Temperature
Thermodynamic temperature unit, called kelvin, with symbol K.
Definition: DimensionalAnalysis.hpp:239
UnitDivide< LuminousIntensity, Area > Illuminance
Illuminance unit, called lux, with symbol ls, derived from or .
Definition: DimensionalAnalysis.hpp:349
UnitDivide< Force, Area > Pressure
Pressure unit, called pascal, with symbol Pa, derived from or .
Definition: DimensionalAnalysis.hpp:288
UnitDivide< Scala, Time > Frenquency
Frequence unit, called hertz, with symbol Hz, derived from .
Definition: DimensionalAnalysis.hpp:268
UnitDivide< Scala, ElectricResistance > ElelctricConductance
Electric conductance unit, called simens, with symbol S, derived from or .
Definition: DimensionalAnalysis.hpp:324
static constexpr std::tuple< int, int, int, int, int, int, int > factors
Power factors of 7 base units.
Definition: DimensionalAnalysis.hpp:93
Unit< 0, 0, 1, 0, 0, 0, 0 > Time
Time unit, called second, with symbol s.
Definition: DimensionalAnalysis.hpp:231
Unit< 0, 0, 0, 0, 0, 0, 0 > Scala
The scala type of non-unit.
Definition: DimensionalAnalysis.hpp:219
UnitMultiply< Voltage, Time > MagneticFlux
Magnetic flux unit, called webber, with symbol Wb**, derived from or .
Definition: DimensionalAnalysis.hpp:329
Unit< 0, 0, 0, 1, 0, 0, 0 > Current
Electric current unit, called ampere, with symbol A.
Definition: DimensionalAnalysis.hpp:235
UnitDivide< Scala, Time > Radioactivity
Radioactivity unit of decays per second, called becquerel, with symbol Bq derived from .
Definition: DimensionalAnalysis.hpp:354
UnitDivide< Power, Current > Voltage
Voltage unit, called volt, with symbol V, derived from or .
Definition: DimensionalAnalysis.hpp:308
static constexpr int factorLuminousIntensity
Power factor of luminous_intensity unit unit.
Definition: DimensionalAnalysis.hpp:113
UnitDivide< Voltage, Current > ElectricResistance
Electric resistance unit, called ohm, with symbol Ω, derived from or .
Definition: DimensionalAnalysis.hpp:318
static constexpr int factorTime
Power factor of length time unit.
Definition: DimensionalAnalysis.hpp:105
UnitMultiply< Length, Length > Area
Area unit, with symbol .
Definition: DimensionalAnalysis.hpp:279
Unit< 0, 0, 0, 0, 0, 1, 0 > AmountOfSubstance
Amount of substance unit, called mole, with symbol mol.
Definition: DimensionalAnalysis.hpp:243
static constexpr int factorAmountOfSubstance
Power factor of amount_of_substance unit unit.
Definition: DimensionalAnalysis.hpp:111
Unit< 1, 0, 0, 0, 0, 0, 0 > Length
Length unit, called meter, with symbol m.
Definition: DimensionalAnalysis.hpp:223