forked from mpusz/mp-units
Merge branch 'master' into chiphogg/switch-to-mag
This commit is contained in:
@@ -27,12 +27,12 @@
|
||||
|
||||
namespace units::detail {
|
||||
|
||||
// same_scaled_units
|
||||
// compatible_units
|
||||
template<typename ExpList, Unit... Us>
|
||||
inline constexpr bool same_scaled_units = false;
|
||||
inline constexpr bool compatible_units = false;
|
||||
|
||||
template<typename... Es, Unit... Us>
|
||||
inline constexpr bool same_scaled_units<exponent_list<Es...>, Us...> = (UnitOf<Us, typename Es::dimension> && ...);
|
||||
inline constexpr bool compatible_units<exponent_list<Es...>, Us...> = (UnitOf<Us, typename Es::dimension> && ...);
|
||||
|
||||
// derived_scaled_unit
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ constexpr auto operator_text()
|
||||
if constexpr (Divide && NegativeExpCount == 1) {
|
||||
return basic_fixed_string("/");
|
||||
} else {
|
||||
return basic_symbol_text(" ⋅ ", " ");
|
||||
return basic_symbol_text("⋅", " ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -449,6 +449,9 @@ template<typename D, typename U, typename Rep>
|
||||
explicit(false) quantity(Rep&&)->quantity<D, U, Rep>;
|
||||
#endif
|
||||
|
||||
template<typename D, typename U, typename Rep>
|
||||
explicit(false) quantity(quantity<D, U, Rep>)->quantity<D, U, Rep>;
|
||||
|
||||
template<Representation Rep>
|
||||
explicit(false) quantity(Rep)->quantity<dim_one, one, Rep>;
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ struct derived_unit : downcast_dispatch<Child, scaled_unit<as_magnitude<1>(), Ch
|
||||
* @tparam URest the units for the rest of dimensions from the recipe
|
||||
*/
|
||||
template<typename Child, DerivedDimension Dim, NamedUnit U, NamedUnit... URest>
|
||||
requires detail::same_scaled_units<typename Dim::recipe, U, URest...>
|
||||
requires detail::compatible_units<typename Dim::recipe, U, URest...>
|
||||
struct derived_scaled_unit : downcast_dispatch<Child, detail::derived_scaled_unit<Dim, U, URest...>> {
|
||||
static constexpr auto symbol = detail::derived_symbol_text<Dim, U, URest...>();
|
||||
};
|
||||
|
||||
@@ -26,11 +26,11 @@
|
||||
|
||||
namespace units::isq::iec80000 {
|
||||
|
||||
struct kibi : units::prefix<kibi, "Ki", ratio(1'024)> {};
|
||||
struct mebi : units::prefix<mebi, "Mi", ratio(1'048'576)> {};
|
||||
struct gibi : units::prefix<gibi, "Gi", ratio(1'073'741'824)> {};
|
||||
struct tebi : units::prefix<tebi, "Ti", ratio(1'099'511'627'776)> {};
|
||||
struct pebi : units::prefix<pebi, "Pi", ratio(1'125'899'906'842'624)> {};
|
||||
struct exbi : units::prefix<exbi, "Ei", ratio(1'152'921'504'606'846'976)> {};
|
||||
struct kibi : prefix<kibi, "Ki", ratio(1'024)> {};
|
||||
struct mebi : prefix<mebi, "Mi", ratio(1'048'576)> {};
|
||||
struct gibi : prefix<gibi, "Gi", ratio(1'073'741'824)> {};
|
||||
struct tebi : prefix<tebi, "Ti", ratio(1'099'511'627'776)> {};
|
||||
struct pebi : prefix<pebi, "Pi", ratio(1'125'899'906'842'624)> {};
|
||||
struct exbi : prefix<exbi, "Ei", ratio(1'152'921'504'606'846'976)> {};
|
||||
|
||||
} // namespace units::isq::iec80000
|
||||
|
||||
@@ -49,6 +49,7 @@ add_units_module(
|
||||
include/units/isq/dimensions/inductance.h
|
||||
include/units/isq/dimensions/length.h
|
||||
include/units/isq/dimensions/luminance.h
|
||||
include/units/isq/dimensions/luminous_flux.h
|
||||
include/units/isq/dimensions/luminous_intensity.h
|
||||
include/units/isq/dimensions/magnetic_flux.h
|
||||
include/units/isq/dimensions/magnetic_induction.h
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
#include <units/isq/dimensions/inductance.h>
|
||||
#include <units/isq/dimensions/length.h>
|
||||
#include <units/isq/dimensions/luminance.h>
|
||||
#include <units/isq/dimensions/luminous_flux.h>
|
||||
#include <units/isq/dimensions/luminous_intensity.h>
|
||||
#include <units/isq/dimensions/magnetic_flux.h>
|
||||
#include <units/isq/dimensions/magnetic_induction.h>
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
// The MIT License (MIT)
|
||||
//
|
||||
// Copyright (c) 2018 Mateusz Pusz
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <units/concepts.h>
|
||||
#include <units/isq/dimensions/power.h>
|
||||
|
||||
namespace units::isq {
|
||||
|
||||
template<typename Child, Unit U, typename... Dims>
|
||||
using dim_luminous_flux = dim_power<Child, U, Dims...>;
|
||||
|
||||
template<typename T>
|
||||
concept LuminousFlux = QuantityOfT<T, dim_luminous_flux>;
|
||||
|
||||
} // namespace units::isq
|
||||
@@ -50,6 +50,7 @@ add_units_module(
|
||||
include/units/isq/si/inductance.h
|
||||
include/units/isq/si/length.h
|
||||
include/units/isq/si/luminance.h
|
||||
include/units/isq/si/luminous_flux.h
|
||||
include/units/isq/si/luminous_intensity.h
|
||||
include/units/isq/si/magnetic_flux.h
|
||||
include/units/isq/si/magnetic_induction.h
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <units/isq/si/electric_charge.h>
|
||||
#include <units/isq/si/energy.h>
|
||||
#include <units/isq/si/frequency.h>
|
||||
#include <units/isq/si/luminous_flux.h>
|
||||
#include <units/isq/si/power.h>
|
||||
#include <units/isq/si/speed.h>
|
||||
#include <units/isq/si/thermodynamic_temperature.h>
|
||||
@@ -51,10 +52,10 @@ template<Representation Rep = double>
|
||||
inline constexpr auto speed_of_light = speed<metre_per_second, Rep>(299'792'458);
|
||||
|
||||
template<Representation Rep = double>
|
||||
inline constexpr auto hyperfine_structure_transition_frequency = frequency<hertz, Rep>(9'192'631'770);
|
||||
inline constexpr auto hyperfine_structure_transition_frequency = frequency<hertz, Rep>(Rep{9'192'631'770});
|
||||
|
||||
// template<Representation Rep = double>
|
||||
// inline constexpr auto luminous_efficacy = 683_q_lm / 1_q_W;
|
||||
template<Representation Rep = double>
|
||||
inline constexpr auto luminous_efficacy = luminous_flux<lumen, Rep>(683) / power<watt, Rep>(1);
|
||||
|
||||
template<Representation Rep = double>
|
||||
inline constexpr auto standard_gravity = acceleration<metre_per_second_sq, Rep>(9.80665);
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
// The MIT License (MIT)
|
||||
//
|
||||
// Copyright (c) 2018 Mateusz Pusz
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
#pragma once
|
||||
|
||||
// IWYU pragma: begin_exports
|
||||
#include <units/isq/si/power.h>
|
||||
#include <units/quantity.h>
|
||||
#include <units/reference.h>
|
||||
#include <units/symbol_text.h>
|
||||
// IWYU pragma: end_exports
|
||||
|
||||
#include <units/isq/si/prefixes.h>
|
||||
#include <units/unit.h>
|
||||
|
||||
namespace units::isq::si {
|
||||
|
||||
// TODO Is this correct? Should we account for steradian here? How?
|
||||
|
||||
struct lumen : named_scaled_unit<lumen, "lm", ratio(1, 683), watt> {};
|
||||
|
||||
using dim_luminous_flux = dim_power;
|
||||
|
||||
template<UnitOf<dim_luminous_flux> U, Representation Rep = double>
|
||||
using luminous_flux = power<U, Rep>;
|
||||
|
||||
#ifndef UNITS_NO_LITERALS
|
||||
|
||||
inline namespace literals {
|
||||
|
||||
// lm
|
||||
constexpr auto operator"" _q_lm(unsigned long long l)
|
||||
{
|
||||
gsl_ExpectsAudit(std::in_range<std::int64_t>(l));
|
||||
return luminous_flux<lumen, std::int64_t>(static_cast<std::int64_t>(l));
|
||||
}
|
||||
constexpr auto operator"" _q_lm(long double l) { return luminous_flux<lumen, long double>(l); }
|
||||
|
||||
} // namespace literals
|
||||
|
||||
#endif // UNITS_NO_LITERALS
|
||||
|
||||
#ifndef UNITS_NO_REFERENCES
|
||||
|
||||
namespace luminous_flux_references {
|
||||
|
||||
inline constexpr auto lm = reference<dim_luminous_flux, lumen>{};
|
||||
|
||||
} // namespace luminous_flux_references
|
||||
|
||||
namespace references {
|
||||
|
||||
using namespace luminous_flux_references;
|
||||
|
||||
} // namespace references
|
||||
|
||||
#endif // UNITS_NO_REFERENCES
|
||||
|
||||
} // namespace units::isq::si
|
||||
|
||||
#ifndef UNITS_NO_ALIASES
|
||||
|
||||
namespace units::aliases::isq::si::inline luminous_flux {
|
||||
|
||||
template<Representation Rep = double>
|
||||
using lm = units::isq::si::luminous_flux<units::isq::si::lumen, Rep>;
|
||||
|
||||
} // namespace units::aliases::isq::si::inline luminous_flux
|
||||
|
||||
#endif // UNITS_NO_ALIASES
|
||||
@@ -27,26 +27,26 @@
|
||||
namespace units::isq::si {
|
||||
|
||||
// clang-format off
|
||||
struct yocto : units::prefix<yocto, "y", ratio(1, 1, -24)> {};
|
||||
struct zepto : units::prefix<zepto, "z", ratio(1, 1, -21)> {};
|
||||
struct atto : units::prefix<atto, "a", ratio(1, 1, -18)> {};
|
||||
struct femto : units::prefix<femto, "f", ratio(1, 1, -15)> {};
|
||||
struct pico : units::prefix<pico, "p", ratio(1, 1, -12)> {};
|
||||
struct nano : units::prefix<nano, "n", ratio(1, 1, -9)> {};
|
||||
struct micro : units::prefix<micro, basic_symbol_text{"\u00b5", "u"}, ratio(1, 1, -6)> {};
|
||||
struct milli : units::prefix<milli, "m", ratio(1, 1, -3)> {};
|
||||
struct centi : units::prefix<centi, "c", ratio(1, 1, -2)> {};
|
||||
struct deci : units::prefix<deci, "d", ratio(1, 1, -1)> {};
|
||||
struct deca : units::prefix<deca, "da", ratio(1, 1, 1)> {};
|
||||
struct hecto : units::prefix<hecto, "h", ratio(1, 1, 2)> {};
|
||||
struct kilo : units::prefix<kilo, "k", ratio(1, 1, 3)> {};
|
||||
struct mega : units::prefix<mega, "M", ratio(1, 1, 6)> {};
|
||||
struct giga : units::prefix<giga, "G", ratio(1, 1, 9)> {};
|
||||
struct tera : units::prefix<tera, "T", ratio(1, 1, 12)> {};
|
||||
struct peta : units::prefix<peta, "P", ratio(1, 1, 15)> {};
|
||||
struct exa : units::prefix<exa, "E", ratio(1, 1, 18)> {};
|
||||
struct zetta : units::prefix<zetta, "Z", ratio(1, 1, 21)> {};
|
||||
struct yotta : units::prefix<yotta, "Y", ratio(1, 1, 24)> {};
|
||||
struct yocto : prefix<yocto, "y", ratio(1, 1, -24)> {};
|
||||
struct zepto : prefix<zepto, "z", ratio(1, 1, -21)> {};
|
||||
struct atto : prefix<atto, "a", ratio(1, 1, -18)> {};
|
||||
struct femto : prefix<femto, "f", ratio(1, 1, -15)> {};
|
||||
struct pico : prefix<pico, "p", ratio(1, 1, -12)> {};
|
||||
struct nano : prefix<nano, "n", ratio(1, 1, -9)> {};
|
||||
struct micro : prefix<micro, basic_symbol_text{"\u00b5", "u"}, ratio(1, 1, -6)> {};
|
||||
struct milli : prefix<milli, "m", ratio(1, 1, -3)> {};
|
||||
struct centi : prefix<centi, "c", ratio(1, 1, -2)> {};
|
||||
struct deci : prefix<deci, "d", ratio(1, 1, -1)> {};
|
||||
struct deca : prefix<deca, "da", ratio(1, 1, 1)> {};
|
||||
struct hecto : prefix<hecto, "h", ratio(1, 1, 2)> {};
|
||||
struct kilo : prefix<kilo, "k", ratio(1, 1, 3)> {};
|
||||
struct mega : prefix<mega, "M", ratio(1, 1, 6)> {};
|
||||
struct giga : prefix<giga, "G", ratio(1, 1, 9)> {};
|
||||
struct tera : prefix<tera, "T", ratio(1, 1, 12)> {};
|
||||
struct peta : prefix<peta, "P", ratio(1, 1, 15)> {};
|
||||
struct exa : prefix<exa, "E", ratio(1, 1, 18)> {};
|
||||
struct zetta : prefix<zetta, "Z", ratio(1, 1, 21)> {};
|
||||
struct yotta : prefix<yotta, "Y", ratio(1, 1, 24)> {};
|
||||
// clang-format on
|
||||
|
||||
} // namespace units::isq::si
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <units/isq/si/charge_density.h>
|
||||
#include <units/isq/si/concentration.h>
|
||||
#include <units/isq/si/conductance.h>
|
||||
#include <units/isq/si/constants.h>
|
||||
#include <units/isq/si/current_density.h>
|
||||
#include <units/isq/si/density.h>
|
||||
#include <units/isq/si/dynamic_viscosity.h>
|
||||
@@ -40,35 +41,37 @@
|
||||
#include <units/isq/si/electric_current.h>
|
||||
#include <units/isq/si/electric_field_strength.h>
|
||||
#include <units/isq/si/energy.h>
|
||||
#include <units/isq/si/length.h>
|
||||
#include <units/isq/si/luminous_intensity.h>
|
||||
#include <units/isq/si/mass.h>
|
||||
#include <units/isq/si/thermodynamic_temperature.h>
|
||||
#include <units/isq/si/time.h>
|
||||
// TODO Add when downcasting issue is solved (collides with pressure)
|
||||
// #include <units/isq/si/energy_density.h>
|
||||
#include <units/isq/si/force.h>
|
||||
#include <units/isq/si/frequency.h>
|
||||
#include <units/isq/si/heat_capacity.h>
|
||||
#include <units/isq/si/inductance.h>
|
||||
#include <units/isq/si/length.h>
|
||||
#include <units/isq/si/luminance.h>
|
||||
#include <units/isq/si/luminous_flux.h>
|
||||
#include <units/isq/si/luminous_intensity.h>
|
||||
#include <units/isq/si/magnetic_flux.h>
|
||||
#include <units/isq/si/magnetic_induction.h>
|
||||
#include <units/isq/si/mass.h>
|
||||
#include <units/isq/si/molar_energy.h>
|
||||
#include <units/isq/si/momentum.h>
|
||||
#include <units/isq/si/permeability.h>
|
||||
#include <units/isq/si/permittivity.h>
|
||||
#include <units/isq/si/power.h>
|
||||
#include <units/isq/si/pressure.h>
|
||||
// TODO Add when downcasting issue is solved (collides with frequency)
|
||||
// #include <units/isq/si/radioactivity.h>
|
||||
#include <units/isq/si/constants.h>
|
||||
#include <units/isq/si/prefixes.h>
|
||||
#include <units/isq/si/pressure.h>
|
||||
#include <units/isq/si/resistance.h>
|
||||
#include <units/isq/si/speed.h>
|
||||
#include <units/isq/si/surface_tension.h>
|
||||
#include <units/isq/si/thermal_conductivity.h>
|
||||
#include <units/isq/si/thermodynamic_temperature.h>
|
||||
#include <units/isq/si/time.h>
|
||||
#include <units/isq/si/torque.h>
|
||||
#include <units/isq/si/voltage.h>
|
||||
#include <units/isq/si/volume.h>
|
||||
// IWYU pragma: end_exports
|
||||
|
||||
// TODO Add when downcasting issue is solved (collides with pressure)
|
||||
// #include <units/isq/si/energy_density.h>
|
||||
|
||||
// TODO Add when downcasting issue is solved (collides with frequency)
|
||||
// #include <units/isq/si/radioactivity.h>
|
||||
|
||||
Reference in New Issue
Block a user