diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 23f48c5c..b27e605c 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -19,6 +19,7 @@ - feat: `modulation_rate` support added (thanks [@go2sh](https://github.com/go2sh)) - feat: SI prefixes for `isq::iec80000` support added (thanks [@go2sh](https://github.com/go2sh)) - feat: a possibility to disable quantity UDLs support with `UNITS_NO_LITERALS` preprocessor define + - feat: a support to define ISQ derived dimensions in terms of different number or order of components - perf: preconditions check do not influence the runtime performance of a Release build - perf: `quantity_cast()` generates less assembly instructions - perf: temporary string creation removed from `quantity::op<<()` diff --git a/src/systems/isq/include/units/isq/dimensions/absorbed_dose.h b/src/systems/isq/include/units/isq/dimensions/absorbed_dose.h index 8dcb1e6c..633af9a7 100644 --- a/src/systems/isq/include/units/isq/dimensions/absorbed_dose.h +++ b/src/systems/isq/include/units/isq/dimensions/absorbed_dose.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_absorbed_dose; + template E, DimensionOfT M> -struct dim_absorbed_dose : derived_dimension, exponent> {}; +struct dim_absorbed_dose : derived_dimension, exponent> {}; template concept AbsorbedDose = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/acceleration.h b/src/systems/isq/include/units/isq/dimensions/acceleration.h index b639fcca..a122ec6d 100644 --- a/src/systems/isq/include/units/isq/dimensions/acceleration.h +++ b/src/systems/isq/include/units/isq/dimensions/acceleration.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_acceleration; + template L, DimensionOfT T> -struct dim_acceleration : derived_dimension, exponent> {}; +struct dim_acceleration : derived_dimension, exponent> {}; template concept Acceleration = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/angular_velocity.h b/src/systems/isq/include/units/isq/dimensions/angular_velocity.h index dfea55d1..1554dced 100644 --- a/src/systems/isq/include/units/isq/dimensions/angular_velocity.h +++ b/src/systems/isq/include/units/isq/dimensions/angular_velocity.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_angular_velocity; + template A, DimensionOfT T> -struct dim_angular_velocity : derived_dimension, exponent> {}; +struct dim_angular_velocity : derived_dimension, exponent> {}; template concept AngularVelocity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/area.h b/src/systems/isq/include/units/isq/dimensions/area.h index c122a00a..f03a4209 100644 --- a/src/systems/isq/include/units/isq/dimensions/area.h +++ b/src/systems/isq/include/units/isq/dimensions/area.h @@ -27,8 +27,11 @@ namespace units::isq { +template +struct dim_area; + template L> -struct dim_area : derived_dimension> {}; +struct dim_area : derived_dimension> {}; template concept Area = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/capacitance.h b/src/systems/isq/include/units/isq/dimensions/capacitance.h index 8a7f1c72..8f474587 100644 --- a/src/systems/isq/include/units/isq/dimensions/capacitance.h +++ b/src/systems/isq/include/units/isq/dimensions/capacitance.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_capacitance; + template C, DimensionOfT V> -struct dim_capacitance : derived_dimension, exponent> {}; +struct dim_capacitance : derived_dimension, exponent> {}; template concept Capacitance = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/catalytic_activity.h b/src/systems/isq/include/units/isq/dimensions/catalytic_activity.h index 82b21dc1..8a07c879 100644 --- a/src/systems/isq/include/units/isq/dimensions/catalytic_activity.h +++ b/src/systems/isq/include/units/isq/dimensions/catalytic_activity.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_catalytic_activity; + template T, DimensionOfT M> -struct dim_catalytic_activity : derived_dimension, exponent> {}; +struct dim_catalytic_activity : derived_dimension, exponent> {}; template concept CatalyticActivity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/charge_density.h b/src/systems/isq/include/units/isq/dimensions/charge_density.h index 4e2d58b5..8625665a 100644 --- a/src/systems/isq/include/units/isq/dimensions/charge_density.h +++ b/src/systems/isq/include/units/isq/dimensions/charge_density.h @@ -28,11 +28,17 @@ namespace units::isq { -template Q, DimensionOfT L> -struct dim_charge_density : derived_dimension, exponent> {}; +template +struct dim_charge_density; template Q, DimensionOfT L> -struct dim_surface_charge_density : derived_dimension, exponent> {}; +struct dim_charge_density : derived_dimension, exponent> {}; + +template +struct dim_surface_charge_density; + +template Q, DimensionOfT L> +struct dim_surface_charge_density : derived_dimension, exponent> {}; template concept ChargeDensity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/concentration.h b/src/systems/isq/include/units/isq/dimensions/concentration.h index f1a82a08..f8592d98 100644 --- a/src/systems/isq/include/units/isq/dimensions/concentration.h +++ b/src/systems/isq/include/units/isq/dimensions/concentration.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_concentration; + template M, DimensionOfT L> -struct dim_concentration : derived_dimension, exponent> {}; +struct dim_concentration : derived_dimension, exponent> {}; template concept Concentration = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/conductance.h b/src/systems/isq/include/units/isq/dimensions/conductance.h index 0dea42ff..6d7a71fd 100644 --- a/src/systems/isq/include/units/isq/dimensions/conductance.h +++ b/src/systems/isq/include/units/isq/dimensions/conductance.h @@ -27,8 +27,11 @@ namespace units::isq { +template +struct dim_conductance; + template R> -struct dim_conductance : derived_dimension> {}; +struct dim_conductance : derived_dimension> {}; template concept Conductance = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/current_density.h b/src/systems/isq/include/units/isq/dimensions/current_density.h index e6e1420a..f097de77 100644 --- a/src/systems/isq/include/units/isq/dimensions/current_density.h +++ b/src/systems/isq/include/units/isq/dimensions/current_density.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_current_density; + template I, DimensionOfT L> -struct dim_current_density : derived_dimension, exponent> {}; +struct dim_current_density : derived_dimension, exponent> {}; template concept CurrentDensity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/density.h b/src/systems/isq/include/units/isq/dimensions/density.h index 3b05b5ea..cb5196d9 100644 --- a/src/systems/isq/include/units/isq/dimensions/density.h +++ b/src/systems/isq/include/units/isq/dimensions/density.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_density; + template M, DimensionOfT L> -struct dim_density : derived_dimension, exponent> {}; +struct dim_density : derived_dimension, exponent> {}; template concept Density = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/dynamic_viscosity.h b/src/systems/isq/include/units/isq/dimensions/dynamic_viscosity.h index 43add26c..ceac79e5 100644 --- a/src/systems/isq/include/units/isq/dimensions/dynamic_viscosity.h +++ b/src/systems/isq/include/units/isq/dimensions/dynamic_viscosity.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_dynamic_viscosity; + template P, DimensionOfT T> -struct dim_dynamic_viscosity : derived_dimension, exponent> {}; +struct dim_dynamic_viscosity : derived_dimension, exponent> {}; template concept DynamicViscosity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/electric_charge.h b/src/systems/isq/include/units/isq/dimensions/electric_charge.h index 3f409c87..2c7db791 100644 --- a/src/systems/isq/include/units/isq/dimensions/electric_charge.h +++ b/src/systems/isq/include/units/isq/dimensions/electric_charge.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_electric_charge; + template T, DimensionOfT C> -struct dim_electric_charge : derived_dimension, exponent> {}; +struct dim_electric_charge : derived_dimension, exponent> {}; template concept ElectricCharge = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/electric_field_strength.h b/src/systems/isq/include/units/isq/dimensions/electric_field_strength.h index 358e8203..4bcd78f6 100644 --- a/src/systems/isq/include/units/isq/dimensions/electric_field_strength.h +++ b/src/systems/isq/include/units/isq/dimensions/electric_field_strength.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_electric_field_strength; + template V, DimensionOfT L> -struct dim_electric_field_strength : derived_dimension, exponent> {}; +struct dim_electric_field_strength : derived_dimension, exponent> {}; template concept ElectricFieldStrength = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/energy_density.h b/src/systems/isq/include/units/isq/dimensions/energy_density.h index 41fe8a12..aa63cbca 100644 --- a/src/systems/isq/include/units/isq/dimensions/energy_density.h +++ b/src/systems/isq/include/units/isq/dimensions/energy_density.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_energy_density; + template E, DimensionOfT V> -struct dim_energy_density : derived_dimension, exponent> {}; +struct dim_energy_density : derived_dimension, exponent> {}; template concept EnergyDensity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/force.h b/src/systems/isq/include/units/isq/dimensions/force.h index 92fdeb56..c8f11d75 100644 --- a/src/systems/isq/include/units/isq/dimensions/force.h +++ b/src/systems/isq/include/units/isq/dimensions/force.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_force; + template M, DimensionOfT A> -struct dim_force : derived_dimension, exponent> {}; +struct dim_force : derived_dimension, exponent> {}; template concept Force = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/frequency.h b/src/systems/isq/include/units/isq/dimensions/frequency.h index 827e72c1..4b3dc285 100644 --- a/src/systems/isq/include/units/isq/dimensions/frequency.h +++ b/src/systems/isq/include/units/isq/dimensions/frequency.h @@ -27,8 +27,11 @@ namespace units::isq { +template +struct dim_frequency; + template T> -struct dim_frequency : derived_dimension> {}; +struct dim_frequency : derived_dimension> {}; template concept Frequency = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/heat_capacity.h b/src/systems/isq/include/units/isq/dimensions/heat_capacity.h index c838491e..6d96fb40 100644 --- a/src/systems/isq/include/units/isq/dimensions/heat_capacity.h +++ b/src/systems/isq/include/units/isq/dimensions/heat_capacity.h @@ -30,14 +30,23 @@ namespace units::isq { +template +struct dim_heat_capacity; + template E, DimensionOfT T> -struct dim_heat_capacity : derived_dimension, exponent> {}; +struct dim_heat_capacity : derived_dimension, exponent> {}; + +template +struct dim_specific_heat_capacity; template C, DimensionOfT M> -struct dim_specific_heat_capacity : derived_dimension, exponent> {}; +struct dim_specific_heat_capacity : derived_dimension, exponent> {}; + +template +struct dim_molar_heat_capacity; template C, DimensionOfT M> -struct dim_molar_heat_capacity : derived_dimension, exponent> {}; +struct dim_molar_heat_capacity : derived_dimension, exponent> {}; template concept HeatCapacity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/inductance.h b/src/systems/isq/include/units/isq/dimensions/inductance.h index 6e6ccbea..90ae21cd 100644 --- a/src/systems/isq/include/units/isq/dimensions/inductance.h +++ b/src/systems/isq/include/units/isq/dimensions/inductance.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_inductance; + template F, DimensionOfT I> -struct dim_inductance : derived_dimension, exponent> {}; +struct dim_inductance : derived_dimension, exponent> {}; template concept Inductance = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/luminance.h b/src/systems/isq/include/units/isq/dimensions/luminance.h index 6167591a..5e665d58 100644 --- a/src/systems/isq/include/units/isq/dimensions/luminance.h +++ b/src/systems/isq/include/units/isq/dimensions/luminance.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_luminance; + template I, DimensionOfT L> -struct dim_luminance : derived_dimension, exponent> {}; +struct dim_luminance : derived_dimension, exponent> {}; template concept Luminance = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/magnetic_flux.h b/src/systems/isq/include/units/isq/dimensions/magnetic_flux.h index 2708d0d4..67fe78e2 100644 --- a/src/systems/isq/include/units/isq/dimensions/magnetic_flux.h +++ b/src/systems/isq/include/units/isq/dimensions/magnetic_flux.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_magnetic_flux; + template B, DimensionOfT A> -struct dim_magnetic_flux : derived_dimension, exponent> {}; +struct dim_magnetic_flux : derived_dimension, exponent> {}; template concept MagneticFlux = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/magnetic_induction.h b/src/systems/isq/include/units/isq/dimensions/magnetic_induction.h index 7bd59e41..023fa2fa 100644 --- a/src/systems/isq/include/units/isq/dimensions/magnetic_induction.h +++ b/src/systems/isq/include/units/isq/dimensions/magnetic_induction.h @@ -29,8 +29,11 @@ namespace units::isq { +template +struct dim_magnetic_induction; + template V, DimensionOfT T, DimensionOfT L> -struct dim_magnetic_induction : derived_dimension, exponent, exponent> {}; +struct dim_magnetic_induction : derived_dimension, exponent, exponent> {}; template concept MagneticInduction = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/molar_energy.h b/src/systems/isq/include/units/isq/dimensions/molar_energy.h index b1c18e96..a60bb3df 100644 --- a/src/systems/isq/include/units/isq/dimensions/molar_energy.h +++ b/src/systems/isq/include/units/isq/dimensions/molar_energy.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_molar_energy; + template E, DimensionOfT M> -struct dim_molar_energy : derived_dimension, exponent> {}; +struct dim_molar_energy : derived_dimension, exponent> {}; template concept MolarEnergy = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/momentum.h b/src/systems/isq/include/units/isq/dimensions/momentum.h index 5f3fad25..f7240259 100644 --- a/src/systems/isq/include/units/isq/dimensions/momentum.h +++ b/src/systems/isq/include/units/isq/dimensions/momentum.h @@ -27,8 +27,11 @@ namespace units::isq { +template +struct dim_momentum; + template M, DimensionOfT V> -struct dim_momentum : derived_dimension, exponent> {}; +struct dim_momentum : derived_dimension, exponent> {}; template concept Momentum = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/permeability.h b/src/systems/isq/include/units/isq/dimensions/permeability.h index 8bd2da53..01543a57 100644 --- a/src/systems/isq/include/units/isq/dimensions/permeability.h +++ b/src/systems/isq/include/units/isq/dimensions/permeability.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_permeability; + template H, DimensionOfT L> -struct dim_permeability : derived_dimension, exponent> {}; +struct dim_permeability : derived_dimension, exponent> {}; template concept Permeability = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/permittivity.h b/src/systems/isq/include/units/isq/dimensions/permittivity.h index 4d0cb155..78b0bb44 100644 --- a/src/systems/isq/include/units/isq/dimensions/permittivity.h +++ b/src/systems/isq/include/units/isq/dimensions/permittivity.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_permittivity; + template C, DimensionOfT L> -struct dim_permittivity : derived_dimension, exponent> {}; +struct dim_permittivity : derived_dimension, exponent> {}; template concept Permittivity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/pressure.h b/src/systems/isq/include/units/isq/dimensions/pressure.h index 6f5f8934..48858a28 100644 --- a/src/systems/isq/include/units/isq/dimensions/pressure.h +++ b/src/systems/isq/include/units/isq/dimensions/pressure.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_pressure; + template F, DimensionOfT A> -struct dim_pressure : derived_dimension, exponent> {}; +struct dim_pressure : derived_dimension, exponent> {}; template concept Pressure = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/radioactivity.h b/src/systems/isq/include/units/isq/dimensions/radioactivity.h index 3457153a..591a1da9 100644 --- a/src/systems/isq/include/units/isq/dimensions/radioactivity.h +++ b/src/systems/isq/include/units/isq/dimensions/radioactivity.h @@ -27,8 +27,11 @@ namespace units::isq { +template +struct dim_radioactivity; + template T> -struct dim_radioactivity : derived_dimension> {}; +struct dim_radioactivity : derived_dimension> {}; template concept Radioactivity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/resistance.h b/src/systems/isq/include/units/isq/dimensions/resistance.h index 7ec09111..3af040cd 100644 --- a/src/systems/isq/include/units/isq/dimensions/resistance.h +++ b/src/systems/isq/include/units/isq/dimensions/resistance.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_resistance; + template V, DimensionOfT C> -struct dim_resistance : derived_dimension, exponent> {}; +struct dim_resistance : derived_dimension, exponent> {}; template concept Resistance = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/speed.h b/src/systems/isq/include/units/isq/dimensions/speed.h index e226fb04..d681420a 100644 --- a/src/systems/isq/include/units/isq/dimensions/speed.h +++ b/src/systems/isq/include/units/isq/dimensions/speed.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_speed; + template L, DimensionOfT T> -struct dim_speed : derived_dimension, exponent> {}; +struct dim_speed : derived_dimension, exponent> {}; template concept Speed = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/surface_tension.h b/src/systems/isq/include/units/isq/dimensions/surface_tension.h index db46257a..52cdd3f3 100644 --- a/src/systems/isq/include/units/isq/dimensions/surface_tension.h +++ b/src/systems/isq/include/units/isq/dimensions/surface_tension.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_surface_tension; + template F, DimensionOfT L> -struct dim_surface_tension : derived_dimension, exponent> {}; +struct dim_surface_tension : derived_dimension, exponent> {}; template concept SurfaceTension = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/thermal_conductivity.h b/src/systems/isq/include/units/isq/dimensions/thermal_conductivity.h index b71c37af..f7da8411 100644 --- a/src/systems/isq/include/units/isq/dimensions/thermal_conductivity.h +++ b/src/systems/isq/include/units/isq/dimensions/thermal_conductivity.h @@ -29,8 +29,11 @@ namespace units::isq { +template +struct dim_thermal_conductivity; + template P, DimensionOfT L, DimensionOfT T> -struct dim_thermal_conductivity : derived_dimension, exponent, exponent> {}; +struct dim_thermal_conductivity : derived_dimension, exponent, exponent> {}; template concept ThermalConductivity = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/torque.h b/src/systems/isq/include/units/isq/dimensions/torque.h index 0109b822..3a0c3697 100644 --- a/src/systems/isq/include/units/isq/dimensions/torque.h +++ b/src/systems/isq/include/units/isq/dimensions/torque.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_torque; + template F, DimensionOfT L, DimensionOfT A> -struct dim_torque : derived_dimension, exponent, exponent> {}; +struct dim_torque : derived_dimension, exponent, exponent> {}; template concept Torque = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/voltage.h b/src/systems/isq/include/units/isq/dimensions/voltage.h index fd0ba06b..187d5808 100644 --- a/src/systems/isq/include/units/isq/dimensions/voltage.h +++ b/src/systems/isq/include/units/isq/dimensions/voltage.h @@ -28,8 +28,11 @@ namespace units::isq { +template +struct dim_voltage; + template P, DimensionOfT C> -struct dim_voltage : derived_dimension, exponent> {}; +struct dim_voltage : derived_dimension, exponent> {}; template concept Voltage = QuantityOfT; diff --git a/src/systems/isq/include/units/isq/dimensions/volume.h b/src/systems/isq/include/units/isq/dimensions/volume.h index 0972a00f..e8c3149d 100644 --- a/src/systems/isq/include/units/isq/dimensions/volume.h +++ b/src/systems/isq/include/units/isq/dimensions/volume.h @@ -27,8 +27,11 @@ namespace units::isq { +template +struct dim_volume; + template L> -struct dim_volume : derived_dimension> {}; +struct dim_volume : derived_dimension> {}; template concept Volume = QuantityOfT;