Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/bimap/relation/symmetrical_base.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/bimap/relation/symmetrical_base.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,97 @@ +// Boost.Bimap +// +// Copyright (c) 2006-2007 Matias Capeletto +// +// 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) + +/// \file relation/symmetrical_base.hpp +/// \brief Base class for symmetrical types + +#ifndef BOOST_BIMAP_RELATION_SYMMETRICAL_BASE_HPP +#define BOOST_BIMAP_RELATION_SYMMETRICAL_BASE_HPP + +#if defined(_MSC_VER) && (_MSC_VER>=1200) +#pragma once +#endif + +#include <boost/config.hpp> + +#include <boost/mpl/if.hpp> +#include <boost/type_traits/remove_const.hpp> + +// Boost.Bimap +#include <boost/bimap/tags/tagged.hpp> +#include <boost/bimap/tags/support/default_tagged.hpp> + +#include <boost/bimap/relation/member_at.hpp> + + +namespace boost { +namespace bimaps { +namespace relation { + +/// \brief Base of symetrical tagged types. +/** + + **/ + +template< class TA, class TB, bool force_mutable = false > +class symmetrical_base +{ + + public: + + typedef BOOST_DEDUCED_TYPENAME tags::support::default_tagged + < + TA, + member_at::left + + >::type tagged_left_type; + + typedef BOOST_DEDUCED_TYPENAME tags::support::default_tagged + < + TB, + member_at::right + + >::type tagged_right_type; + + public: + + //@{ + /// The type stored in the relation + + typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c< force_mutable, + + BOOST_DEDUCED_TYPENAME ::boost::remove_const< + BOOST_DEDUCED_TYPENAME tagged_left_type::value_type >::type, + BOOST_DEDUCED_TYPENAME tagged_left_type::value_type + + >::type left_value_type; + + typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c< force_mutable, + + BOOST_DEDUCED_TYPENAME ::boost::remove_const< + BOOST_DEDUCED_TYPENAME tagged_right_type::value_type >::type, + BOOST_DEDUCED_TYPENAME tagged_right_type::value_type + + >::type right_value_type; + //@} + + //@{ + /// The tag of the member. By default it is \c member_at::{side} + typedef BOOST_DEDUCED_TYPENAME tagged_left_type ::tag left_tag; + typedef BOOST_DEDUCED_TYPENAME tagged_right_type::tag right_tag; + //@} +}; + + + +} // namespace relation +} // namespace bimaps +} // namespace boost + + +#endif // BOOST_BIMAP_RELATION_SYMMETRICAL_BASE_HPP +