EVOLUTION-MANAGER
Edit File: dimension_list.hpp
// 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_DIMENSION_LIST_HPP #define BOOST_UNITS_DIMENSION_LIST_HPP #include <boost/mpl/next.hpp> #include <boost/mpl/deref.hpp> #include <boost/mpl/push_front_fwd.hpp> #include <boost/mpl/pop_front_fwd.hpp> #include <boost/mpl/size_fwd.hpp> #include <boost/mpl/begin_end_fwd.hpp> #include <boost/mpl/front_fwd.hpp> #include <boost/units/config.hpp> namespace boost { namespace units { struct dimensionless_type; namespace detail { struct dimension_list_tag { }; } // namespace detail template<class Item, class Next> struct list { typedef detail::dimension_list_tag tag; typedef list type; typedef Item item; typedef Next next; typedef typename mpl::next<typename Next::size>::type size; }; } // namespace units namespace mpl { // INTERNAL ONLY template<> struct size_impl<units::detail::dimension_list_tag> { template<class L> struct apply : public L::size { }; }; // INTERNAL ONLY template<> struct begin_impl<units::detail::dimension_list_tag> { template<class L> struct apply { typedef L type; }; }; // INTERNAL ONLY template<> struct end_impl<units::detail::dimension_list_tag> { template<class L> struct apply { typedef units::dimensionless_type type; }; }; // INTERNAL ONLY template<> struct push_front_impl<units::detail::dimension_list_tag> { template<class L, class T> struct apply { typedef units::list<T, L> type; }; }; // INTERNAL ONLY template<> struct pop_front_impl<units::detail::dimension_list_tag> { template<class L> struct apply { typedef typename L::next type; }; }; // INTERNAL ONLY template<> struct front_impl<units::detail::dimension_list_tag> { template<class L> struct apply { typedef typename L::item type; }; }; // INTERNAL ONLY template<class Item, class Next> struct deref<units::list<Item, Next> > { typedef Item type; }; } // namespace mpl } // namespace boost #if BOOST_UNITS_HAS_BOOST_TYPEOF #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() BOOST_TYPEOF_REGISTER_TEMPLATE(boost::units::list, 2) #endif #include <boost/units/dimensionless_type.hpp> #endif // BOOST_UNITS_DIMENSION_LIST_HPP