1 // Boost.Units - A C++ library for zero-overhead dimensional analysis and
2 // unit/quantity manipulation and conversion
4 // Copyright (C) 2003-2008 Matthias Christian Schabel
5 // Copyright (C) 2008 Steven Watanabe
7 // Distributed under the Boost Software License, Version 1.0. (See
8 // accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
11 #ifndef BOOST_UNITS_MAKE_SYSTEM_HPP
12 #define BOOST_UNITS_MAKE_SYSTEM_HPP
14 #include <boost/units/config.hpp>
15 #include <boost/units/dimensionless_type.hpp>
16 #include <boost/units/homogeneous_system.hpp>
17 #include <boost/units/detail/dimension_list.hpp>
18 #include <boost/units/detail/sort.hpp>
24 #ifdef BOOST_UNITS_DOXYGEN
28 struct unspecified
{};
32 /// Metafunction returning a homogeneous system that can
33 /// represent any combination of the base units. There must
34 /// be no way to represent any of the base units in terms
35 /// of the others. make_system<foot_base_unit, meter_base_unit>::type
36 /// is not allowed, for example.
37 template<class BaseUnit0
, class BaseUnit1
, class BaseUnit2
, ..., class BaseUnitN
>
40 typedef homogeneous_system
<detail::unspecified
> type
;
64 typedef homogeneous_system
<dimensionless_type
> type
;
67 // Codewarrior 9.2 doesn't like using the defaults. Need
68 // to specify na explicitly.
70 struct make_system
<T0
, na
, na
, na
, na
, na
, na
, na
, na
, na
>
72 typedef homogeneous_system
<list
<T0
, dimensionless_type
> > type
;
75 template<class T0
, class T1
>
76 struct make_system
<T0
, T1
, na
, na
, na
, na
, na
, na
, na
, na
>
78 typedef homogeneous_system
<typename
detail::insertion_sort
<list
<T0
, list
<T1
, dimensionless_type
> > >::type
> type
;
81 template<class T0
, class T1
, class T2
>
82 struct make_system
<T0
, T1
, T2
, na
, na
, na
, na
, na
, na
, na
>
84 typedef homogeneous_system
<typename
detail::insertion_sort
<list
<T0
, list
<T1
, list
<T2
, dimensionless_type
> > > >::type
> type
;
87 template<class T0
, class T1
, class T2
, class T3
>
88 struct make_system
<T0
, T1
, T2
, T3
, na
, na
, na
, na
, na
, na
>
90 typedef homogeneous_system
<typename
detail::insertion_sort
<list
<T0
, list
<T1
, list
<T2
, list
<T3
, dimensionless_type
> > > > >::type
> type
;
93 template<class T0
, class T1
, class T2
, class T3
, class T4
>
94 struct make_system
<T0
, T1
, T2
, T3
, T4
, na
, na
, na
, na
, na
>
96 typedef homogeneous_system
<typename
detail::insertion_sort
<list
<T0
, list
<T1
, list
<T2
, list
<T3
, list
<T4
, dimensionless_type
> > > > > >::type
> type
;
99 template<class T0
, class T1
, class T2
, class T3
, class T4
, class T5
>
100 struct make_system
<T0
, T1
, T2
, T3
, T4
, T5
, na
, na
, na
, na
>
102 typedef homogeneous_system
<typename
detail::insertion_sort
<list
<T0
, list
<T1
, list
<T2
, list
<T3
, list
<T4
, list
<T5
, dimensionless_type
> > > > > > >::type
> type
;
105 template<class T0
, class T1
, class T2
, class T3
, class T4
, class T5
, class T6
>
106 struct make_system
<T0
, T1
, T2
, T3
, T4
, T5
, T6
, na
, na
, na
>
108 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
;
111 template<class T0
, class T1
, class T2
, class T3
, class T4
, class T5
, class T6
, class T7
>
112 struct make_system
<T0
, T1
, T2
, T3
, T4
, T5
, T6
, T7
, na
, na
>
114 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
;
117 template<class T0
, class T1
, class T2
, class T3
, class T4
, class T5
, class T6
, class T7
, class T8
>
118 struct make_system
<T0
, T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, na
>
120 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
;
123 template<class T0
, class T1
, class T2
, class T3
, class T4
, class T5
, class T6
, class T7
, class T8
, class T9
>
126 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
;