Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/units/homogeneous_system.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/units/homogeneous_system.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,105 @@ +// 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_HOMOGENEOUS_SYSTEM_HPP_INCLUDED +#define BOOST_UNITS_HOMOGENEOUS_SYSTEM_HPP_INCLUDED + +#include <boost/mpl/bool.hpp> + +#include <boost/units/config.hpp> +#include <boost/units/static_rational.hpp> + +#ifdef BOOST_UNITS_CHECK_HOMOGENEOUS_UNITS + +#include <boost/type_traits/is_same.hpp> +#include <boost/mpl/not.hpp> + +#include <boost/units/detail/linear_algebra.hpp> + +#endif + +namespace boost { + +namespace units { + +/// A system that can uniquely represent any unit +/// which can be composed from a linearly independent set +/// of base units. It is safe to rebind a unit with +/// such a system to different dimensions. +/// +/// Do not construct this template directly. Use +/// make_system instead. +template<class L> +struct homogeneous_system { + /// INTERNAL ONLY + typedef L type; +}; + +template<class T, class E> +struct static_power; + +template<class T, class R> +struct static_root; + +/// INTERNAL ONLY +template<class L, long N, long D> +struct static_power<homogeneous_system<L>, static_rational<N,D> > +{ + typedef homogeneous_system<L> type; +}; + +/// INTERNAL ONLY +template<class L, long N, long D> +struct static_root<homogeneous_system<L>, static_rational<N,D> > +{ + typedef homogeneous_system<L> type; +}; + +namespace detail { + +template<class System, class Dimensions> +struct check_system; + +#ifdef BOOST_UNITS_CHECK_HOMOGENEOUS_UNITS + +template<class L, class Dimensions> +struct check_system<homogeneous_system<L>, Dimensions> : + boost::mpl::not_< + boost::is_same< + typename calculate_base_unit_exponents< + L, + Dimensions + >::type, + inconsistent + > + > {}; + +#else + +template<class L, class Dimensions> +struct check_system<homogeneous_system<L>, Dimensions> : mpl::true_ {}; + +#endif + +} // namespace detail + +} // namespace units + +} // namespace boost + +#if BOOST_UNITS_HAS_BOOST_TYPEOF + +#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() + +BOOST_TYPEOF_REGISTER_TEMPLATE(boost::units::homogeneous_system, (class)) + +#endif + +#endif