File indexing completed on 2025-12-15 10:09:55
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef BOOST_UNITS_MAKE_SYSTEM_HPP
0012 #define BOOST_UNITS_MAKE_SYSTEM_HPP
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include <boost/units/config.hpp>
0025 #include <boost/units/dimensionless_type.hpp>
0026 #include <boost/units/homogeneous_system.hpp>
0027 #include <boost/units/detail/dimension_list.hpp>
0028 #include <boost/units/detail/sort.hpp>
0029
0030 namespace boost {
0031
0032 namespace units {
0033
0034 #ifdef BOOST_UNITS_DOXYGEN
0035
0036 namespace detail {
0037
0038 struct unspecified {};
0039
0040 }
0041
0042
0043
0044
0045
0046
0047 template<class BaseUnit0, class BaseUnit1, class BaseUnit2, ..., class BaseUnitN>
0048 struct make_system
0049 {
0050 typedef homogeneous_system<detail::unspecified> type;
0051 };
0052
0053 #else
0054
0055 struct na {};
0056
0057 template<
0058 class U0 = na,
0059 class U1 = na,
0060 class U2 = na,
0061 class U3 = na,
0062 class U4 = na,
0063 class U5 = na,
0064 class U6 = na,
0065 class U7 = na,
0066 class U8 = na,
0067 class U9 = na
0068 >
0069 struct make_system;
0070
0071 template<>
0072 struct make_system<>
0073 {
0074 typedef homogeneous_system<dimensionless_type> type;
0075 };
0076
0077
0078
0079 template<class T0>
0080 struct make_system<T0, na, na, na, na, na, na, na, na, na>
0081 {
0082 typedef homogeneous_system<list<T0, dimensionless_type> > type;
0083 };
0084
0085 template<class T0, class T1>
0086 struct make_system<T0, T1, na, na, na, na, na, na, na, na>
0087 {
0088 typedef homogeneous_system<typename detail::insertion_sort<list<T0, list<T1, dimensionless_type> > >::type> type;
0089 };
0090
0091 template<class T0, class T1, class T2>
0092 struct make_system<T0, T1, T2, na, na, na, na, na, na, na>
0093 {
0094 typedef homogeneous_system<typename detail::insertion_sort<list<T0, list<T1, list<T2, dimensionless_type> > > >::type> type;
0095 };
0096
0097 template<class T0, class T1, class T2, class T3>
0098 struct make_system<T0, T1, T2, T3, na, na, na, na, na, na>
0099 {
0100 typedef homogeneous_system<typename detail::insertion_sort<list<T0, list<T1, list<T2, list<T3, dimensionless_type> > > > >::type> type;
0101 };
0102
0103 template<class T0, class T1, class T2, class T3, class T4>
0104 struct make_system<T0, T1, T2, T3, T4, na, na, na, na, na>
0105 {
0106 typedef homogeneous_system<typename detail::insertion_sort<list<T0, list<T1, list<T2, list<T3, list<T4, dimensionless_type> > > > > >::type> type;
0107 };
0108
0109 template<class T0, class T1, class T2, class T3, class T4, class T5>
0110 struct make_system<T0, T1, T2, T3, T4, T5, na, na, na, na>
0111 {
0112 typedef homogeneous_system<typename detail::insertion_sort<list<T0, list<T1, list<T2, list<T3, list<T4, list<T5, dimensionless_type> > > > > > >::type> type;
0113 };
0114
0115 template<class T0, class T1, class T2, class T3, class T4, class T5, class T6>
0116 struct make_system<T0, T1, T2, T3, T4, T5, T6, na, na, na>
0117 {
0118 typedef homogeneous_system<typename detail::insertion_sort<list<T0, list<T1, list<T2, list<T3, list<T4, list<T5, list<T6, dimensionless_type> > > > > > > >::type> type;
0119 };
0120
0121 template<class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7>
0122 struct make_system<T0, T1, T2, T3, T4, T5, T6, T7, na, na>
0123 {
0124 typedef homogeneous_system<typename detail::insertion_sort<list<T0, list<T1, list<T2, list<T3, list<T4, list<T5, list<T6, list<T7, dimensionless_type> > > > > > > > >::type> type;
0125 };
0126
0127 template<class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>
0128 struct make_system<T0, T1, T2, T3, T4, T5, T6, T7, T8, na>
0129 {
0130 typedef homogeneous_system<typename detail::insertion_sort<list<T0, list<T1, list<T2, list<T3, list<T4, list<T5, list<T6, list<T7, list<T8, dimensionless_type> > > > > > > > > >::type> type;
0131 };
0132
0133 template<class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
0134 struct make_system
0135 {
0136 typedef homogeneous_system<typename detail::insertion_sort<list<T0, list<T1, list<T2, list<T3, list<T4, list<T5, list<T6, list<T7, list<T8, list<T9, dimensionless_type> > > > > > > > > > >::type> type;
0137 };
0138
0139 #endif
0140
0141 }
0142
0143 }
0144
0145 #endif