diff --git a/include/dimensional/dimensional.hpp b/include/dimensional/dimensional.hpp index 37cb5d4f..8ae100ea 100644 --- a/include/dimensional/dimensional.hpp +++ b/include/dimensional/dimensional.hpp @@ -1,11 +1,11 @@ #ifndef MITAMA_DIMENSIONAL_HPP #define MITAMA_DIMENSIONAL_HPP -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include namespace mitama::mitamagic { diff --git a/include/dimensional/math/all.hpp b/include/dimensional/math/all.hpp deleted file mode 100644 index 43bbc03e..00000000 --- a/include/dimensional/math/all.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef MITAMA_DIMENSIONAL_MATH_ALL_HPP -#define MITAMA_DIMENSIONAL_MATH_ALL_HPP - -#include -#include -#include -#include -#include -#include -#include -#include - -#endif \ No newline at end of file diff --git a/include/dimensional/quantity.hpp b/include/dimensional/quantity.hpp index 4333acd9..24d9ab55 100644 --- a/include/dimensional/quantity.hpp +++ b/include/dimensional/quantity.hpp @@ -1,7 +1,7 @@ #ifndef MITAMA_DIMENSIONAL_QUANTITY_HPP #define MITAMA_DIMENSIONAL_QUANTITY_HPP -#include -#include +#include +#include namespace mitama { diff --git a/include/dimensional/systems/si/all.hpp b/include/dimensional/systems/si/all.hpp deleted file mode 100644 index 3eaa4dcd..00000000 --- a/include/dimensional/systems/si/all.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef MITAMA_DIMENSIONAL_SI_ALL_HPP -#define MITAMA_DIMENSIONAL_SI_ALL_HPP -#include -#include -#include -#include -#include -#include -#include -#endif diff --git a/include/dimensional/systems/si/base_units/all.hpp b/include/dimensional/systems/si/base_units/all.hpp deleted file mode 100644 index 760147c8..00000000 --- a/include/dimensional/systems/si/base_units/all.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef MITAMA_DIMENSIONAL_SI_ALL_HPP -#define MITAMA_DIMENSIONAL_SI_ALL_HPP -#include -#include -#include -#include -#include -#include -#include -#endif diff --git a/include/dimensional/systems/si/base_units/ampere.hpp b/include/dimensional/systems/si/base_units/ampere.hpp index 88ddf491..0ec2ecdb 100644 --- a/include/dimensional/systems/si/base_units/ampere.hpp +++ b/include/dimensional/systems/si/base_units/ampere.hpp @@ -1,8 +1,8 @@ #ifndef MITAMA_DIMENSIONAL_SI_UNITS_AMPERE_HPP #define MITAMA_DIMENSIONAL_SI_UNITS_AMPERE_HPP -#include -#include -#include +#include +#include +#include namespace mitama::systems::si { diff --git a/include/dimensional/systems/si/base_units/fwd/si_base_units.hpp b/include/dimensional/systems/si/base_units/fwd/si_base_units.hpp index a7d1a749..3636d4b5 100644 --- a/include/dimensional/systems/si/base_units/fwd/si_base_units.hpp +++ b/include/dimensional/systems/si/base_units/fwd/si_base_units.hpp @@ -1,16 +1,16 @@ #ifndef MITAMA_DIMENSIONAL_SI_BASE_UNITS_FWD_HPP #define MITAMA_DIMENSIONAL_SI_BASE_UNITS_FWD_HPP -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace mitama::systems::si { using ampere_base_unit = base_units; diff --git a/include/dimensional/systems/si/literals/all.hpp b/include/dimensional/systems/si/literals/all.hpp deleted file mode 100644 index eba38932..00000000 --- a/include/dimensional/systems/si/literals/all.hpp +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef MITAMA_DIMENSIONAL_SYSTEMS_SI_BASE_UNITS_LITERALS_ALL_HPP -#define MITAMA_DIMENSIONAL_SYSTEMS_SI_BASE_UNITS_LITERALS_ALL_HPP -#include -#include -#include -#endif diff --git a/include/dimensional/arithmetic.hpp b/include/mitama/dimensional/arithmetic.hpp similarity index 97% rename from include/dimensional/arithmetic.hpp rename to include/mitama/dimensional/arithmetic.hpp index b49c1867..b50223ee 100644 --- a/include/dimensional/arithmetic.hpp +++ b/include/mitama/dimensional/arithmetic.hpp @@ -1,8 +1,8 @@ #ifndef MITAMA_DIMENSIONAL_ARITHMETIC_HPP #define MITAMA_DIMENSIONAL_ARITHMETIC_HPP -#include -#include -#include +#include +#include +#include namespace mitama { diff --git a/include/dimensional/delta.hpp b/include/mitama/dimensional/delta.hpp similarity index 97% rename from include/dimensional/delta.hpp rename to include/mitama/dimensional/delta.hpp index 2907f2be..72bcc0da 100644 --- a/include/dimensional/delta.hpp +++ b/include/mitama/dimensional/delta.hpp @@ -1,8 +1,8 @@ #ifndef MITAMA_DIMENSIONAL_DELTA_HPP #define MITAMA_DIMENSIONAL_DELTA_HPP -#include -#include -#include +#include +#include +#include #include namespace mitama { diff --git a/include/mitama/dimensional/dimensional.hpp b/include/mitama/dimensional/dimensional.hpp new file mode 100644 index 00000000..8ae100ea --- /dev/null +++ b/include/mitama/dimensional/dimensional.hpp @@ -0,0 +1,63 @@ +#ifndef MITAMA_DIMENSIONAL_HPP +#define MITAMA_DIMENSIONAL_HPP +#include +#include +#include +#include +#include +#include +#include + +namespace mitama::mitamagic { +template +inline constexpr std::size_t dimension_count_v = + (static_cast(std::is_same_v) + + ... + std::size_t{}); // type count meta-function +} // namespace mitama::mitamagic + +namespace mitama { + +template < class > +struct si_base_units {}; + +template struct dimension_tag {}; + +template +struct dimensional_t : private Units::tag... // for Dimensional tags +{ + template < class T > + struct is_wildcard : std::is_same> {}; + // sanity check for duplicate + static_assert(std::conjunction_v == 1)>...>, + "same dimension is not allowed"); + // sanity check for system + static_assert(mitamagic::tlist_all_same_v< + mitamagic::tlist_remove_if_t>>, + "different units within a dimension"); + static constexpr std::size_t value = sizeof...(Units); + using system_type + = mitamagic::tlist_element_t<0, + std::conditional_t< + std::is_same_v< + mitamagic::type_list<>, + mitamagic::tlist_remove_if_t + > + >, + mitamagic::type_list>, + mitamagic::tlist_remove_if_t + > + > + >; +}; + +template +using make_dimensional_t = si_base_units>; + + +} // namespace mitama +#endif diff --git a/include/dimensional/dimensional_traits.hpp b/include/mitama/dimensional/dimensional_traits.hpp similarity index 96% rename from include/dimensional/dimensional_traits.hpp rename to include/mitama/dimensional/dimensional_traits.hpp index f0d51a20..bc71a194 100644 --- a/include/dimensional/dimensional_traits.hpp +++ b/include/mitama/dimensional/dimensional_traits.hpp @@ -1,12 +1,12 @@ #ifndef MITAMA_DIMENSIONAL_DIMENSIONAL_TRAITS_HPP #define MITAMA_DIMENSIONAL_DIMENSIONAL_TRAITS_HPP -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include -#include +#include namespace mitama { // quantity_t traits diff --git a/include/dimensional/fwd/dimensional_fwd.hpp b/include/mitama/dimensional/fwd/dimensional_fwd.hpp similarity index 100% rename from include/dimensional/fwd/dimensional_fwd.hpp rename to include/mitama/dimensional/fwd/dimensional_fwd.hpp diff --git a/include/dimensional/fwd/expr_fwd.hpp b/include/mitama/dimensional/fwd/expr_fwd.hpp similarity index 100% rename from include/dimensional/fwd/expr_fwd.hpp rename to include/mitama/dimensional/fwd/expr_fwd.hpp diff --git a/include/dimensional/fwd/quantity_fwd.hpp b/include/mitama/dimensional/fwd/quantity_fwd.hpp similarity index 89% rename from include/dimensional/fwd/quantity_fwd.hpp rename to include/mitama/dimensional/fwd/quantity_fwd.hpp index 564d63cb..2ecce022 100644 --- a/include/dimensional/fwd/quantity_fwd.hpp +++ b/include/mitama/dimensional/fwd/quantity_fwd.hpp @@ -1,6 +1,6 @@ #ifndef MITAMA_DIMENSIONAL_FWD_QUANTITY_FWD_HPP #define MITAMA_DIMENSIONAL_FWD_QUANTITY_FWD_HPP -#include +#include namespace mitama { diff --git a/include/dimensional/fwd/system.hpp b/include/mitama/dimensional/fwd/system.hpp similarity index 100% rename from include/dimensional/fwd/system.hpp rename to include/mitama/dimensional/fwd/system.hpp diff --git a/include/dimensional/fwd/units_fwd.hpp b/include/mitama/dimensional/fwd/units_fwd.hpp similarity index 84% rename from include/dimensional/fwd/units_fwd.hpp rename to include/mitama/dimensional/fwd/units_fwd.hpp index 6ad10223..d01d86f2 100644 --- a/include/dimensional/fwd/units_fwd.hpp +++ b/include/mitama/dimensional/fwd/units_fwd.hpp @@ -1,7 +1,7 @@ #ifndef MITAMA_DIMENSIONAL_FWD_UNITS_FWD_HPP #define MITAMA_DIMENSIONAL_FWD_UNITS_FWD_HPP #include -#include +#include namespace mitama { template , class = std::ratio<1>, class = system<>> diff --git a/include/dimensional/io.hpp b/include/mitama/dimensional/io.hpp similarity index 97% rename from include/dimensional/io.hpp rename to include/mitama/dimensional/io.hpp index 9e104015..87ea75fd 100644 --- a/include/dimensional/io.hpp +++ b/include/mitama/dimensional/io.hpp @@ -1,8 +1,8 @@ #ifndef MITAMA_DIMENSIONAL_IO_HPP #define MITAMA_DIMENSIONAL_IO_HPP -#include -#include -#include +#include +#include +#include #include #include #include diff --git a/include/dimensional/math/abs.hpp b/include/mitama/dimensional/math/abs.hpp similarity index 89% rename from include/dimensional/math/abs.hpp rename to include/mitama/dimensional/math/abs.hpp index 28ff3742..8fecca34 100644 --- a/include/dimensional/math/abs.hpp +++ b/include/mitama/dimensional/math/abs.hpp @@ -2,7 +2,7 @@ #define MITAMA_DIMENSIONAL_MATH_ABS_HPP #include -#include +#include namespace mitama { diff --git a/include/mitama/dimensional/math/all.hpp b/include/mitama/dimensional/math/all.hpp new file mode 100644 index 00000000..439e969a --- /dev/null +++ b/include/mitama/dimensional/math/all.hpp @@ -0,0 +1,13 @@ +#ifndef MITAMA_DIMENSIONAL_MATH_ALL_HPP +#define MITAMA_DIMENSIONAL_MATH_ALL_HPP + +#include +#include +#include +#include +#include +#include +#include +#include + +#endif \ No newline at end of file diff --git a/include/dimensional/math/logarithm.hpp b/include/mitama/dimensional/math/logarithm.hpp similarity index 93% rename from include/dimensional/math/logarithm.hpp rename to include/mitama/dimensional/math/logarithm.hpp index 057aca3c..d39a117c 100644 --- a/include/dimensional/math/logarithm.hpp +++ b/include/mitama/dimensional/math/logarithm.hpp @@ -1,8 +1,8 @@ #ifndef MITAMA_DIMENSIONAL_MATH_LOGATITHM_HPP #define MITAMA_DIMENSIONAL_MATH_LOGATITHM_HPP #include -#include -#include +#include +#include namespace mitama { template