10#define PHYTH_CONCAT_IMPL(a, b) a##b
11#define PHYTH_CONCAT(a, b) PHYTH_CONCAT_IMPL(a, b)
32#define PHYTH_DEFINE_UNIT(dim_type, unit_type, suffix, scale_num, scale_den) \
33 using unit_type = Unit<dim_type, std::ratio<scale_num, scale_den>>; \
35 constexpr auto operator""_##suffix(long double x) { \
36 return Quantity<unit_type>(x); \
39 constexpr auto operator""_##suffix(unsigned long long x) { \
40 return Quantity<unit_type>(x); \
43 static const Phyth::UnitRegistrar<unit_type> PHYTH_CONCAT(registrar_, unit_type)(#unit_type, #suffix);
59#define PHYTH_DEFINE_UNIT_WITH_NAME(dim_type, unit_type, suffix, scale_num, scale_den, symbol) \
60 using unit_type = Unit<dim_type, std::ratio<scale_num, scale_den>>; \
62 constexpr auto operator""_##suffix(long double x) { \
63 return Quantity<unit_type>(x); \
66 constexpr auto operator""_##suffix(unsigned long long x) { \
67 return Quantity<unit_type>(x); \
70 static const Phyth::UnitRegistrar<unit_type> PHYTH_CONCAT(registrar_, unit_type)(#unit_type, symbol);
88#define PHYTH_DEFINE_UNIT_WITH_TAG(dim_type, unit_type, suffix, scale_num, scale_den, symbol, tag) \
89 using unit_type = Unit<dim_type, std::ratio<scale_num, scale_den>, tag>; \
91 constexpr auto operator""_##suffix(long double x) { \
92 return Quantity<unit_type>(x); \
95 constexpr auto operator""_##suffix(unsigned long long x) { \
96 return Quantity<unit_type>(x); \
99 static const Phyth::UnitRegistrar<unit_type> PHYTH_CONCAT(registrar_, unit_type)(#unit_type, symbol);
211#undef PHYTH_DEFINE_UNIT
212#undef PHYTH_DEFINE_UNIT_WITH_NAME
#define PHYTH_DEFINE_UNIT(dim_type, unit_type, suffix, scale_num, scale_den)
Define a unit, literal operator, and registry entry.
#define PHYTH_DEFINE_UNIT_WITH_TAG(dim_type, unit_type, suffix, scale_num, scale_den, symbol, tag)
Define a unit with a tag type for type-safe differentiation.
#define PHYTH_DEFINE_UNIT_WITH_NAME(dim_type, unit_type, suffix, scale_num, scale_den, symbol)
Same as DEFINE_UNIT with custom display symbol.
DimDivT< Mass, Time > DampingCoefficient
DimDivT< Force, Volume > ForceDensity
DimDivT< Energy, Time > Power
DimMulT< Mass, Area > MomentOfInertia
DimDivT< Force, Charge > ElectricFieldIntensity
DimDivT< Dimensionless, Time > Frequency
DimDivT< Force, DimMulT< Length, Length > > Pressure
DimDivT< Voltage, DimDivT< ElectricCurrent, Time > > Inductance
DimDivT< Mass, Volume > MassDensity
DimDivT< Velocity, Time > Acceleration
DimMulT< Voltage, Time > MagneticFlux
DimMulT< Length, Area > Volume
DimMulT< Time, ElectricCurrent > Charge
DimDivT< MagneticFlux, DimMulT< Length, Length > > MagneticFluxDensity
Dimension< std::ratio< 0 >, std::ratio< 0 >, std::ratio< 0 >, std::ratio< 0 >, std::ratio< 0 >, std::ratio< 0 >, std::ratio< 0 > > Dimensionless
DimDivT< Force, Length > TranslationalStiffness
DimMulT< ElectricCurrent, Area > MagneticDipoleMoment
DimMulT< Mass, Acceleration > Force
DimDivT< Charge, Voltage > Capacitance
DimDivT< Charge, Length > LinearChargeDensity
DimDivT< Dimensionless, Time > AngularVelocity
DimDivT< Charge, Area > SurfaceChargeDensity
DimDivT< Charge, Volume > BulkChargeDensity
DimDivT< Length, Time > Velocity
DimDivT< Voltage, ElectricCurrent > Resistance
DimDivT< Capacitance, Length > ElectricPotential
DimMulT< Length, Length > Area
DimMulT< Charge, Length > ElectricDipoleMoment
DimMulT< Force, Length > Energy
DimDivT< Power, ElectricCurrent > Voltage
Compile-time physical dimension as 7 SI base exponents.