| // Boost.Units - A C++ library for zero-overhead dimensional analysis and |
| // unit/quantity manipulation and conversion |
| // |
| // Copyright (C) 2003-2008 Matthias Christian Schabel |
| // Copyright (C) 2008 Steven Watanabe |
| // |
| // Distributed under the Boost Software License, Version 1.0. (See |
| // accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| |
| #ifndef BOOST_UNITS_DIM_IMPL_HPP |
| #define BOOST_UNITS_DIM_IMPL_HPP |
| |
| #include <boost/mpl/bool.hpp> |
| #include <boost/mpl/less.hpp> |
| |
| #include <boost/units/units_fwd.hpp> |
| |
| /// \file |
| /// \brief Class encapsulating a dimension tag/value pair |
| |
| namespace boost { |
| |
| namespace units { |
| |
| namespace detail { |
| |
| struct dim_tag; |
| |
| } |
| |
| } |
| |
| namespace mpl { |
| |
| /// Less than comparison for sorting @c dim. |
| template<> |
| struct less_impl<boost::units::detail::dim_tag, boost::units::detail::dim_tag> |
| { |
| template<class T0, class T1> |
| struct apply : mpl::less<typename T0::tag_type, typename T1::tag_type> {}; |
| }; |
| |
| } |
| |
| namespace units { |
| |
| template<class Tag, class Exponent> |
| struct dim; |
| |
| template<long N, long D> |
| class static_rational; |
| |
| namespace detail { |
| |
| /// Extract @c tag_type from a @c dim. |
| template<typename T> |
| struct get_tag |
| { |
| typedef typename T::tag_type type; |
| }; |
| |
| /// Extract @c value_type from a @c dim. |
| template<typename T> |
| struct get_value |
| { |
| typedef typename T::value_type type; |
| }; |
| |
| /// Determine if a @c dim is empty (has a zero exponent). |
| template<class T> |
| struct is_empty_dim; |
| |
| template<typename T> |
| struct is_empty_dim< dim<T, static_rational<0, 1> > > : |
| mpl::true_ |
| { }; |
| |
| template<typename T, typename V> |
| struct is_empty_dim< dim<T, V> > : |
| mpl::false_ |
| { }; |
| |
| } // namespace detail |
| |
| } // namespace units |
| |
| } // namespace boost |
| |
| #endif // BOOST_UNITS_DIM_IMPL_HPP |