123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- // 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/support/get.hpp
- /// \brief get<tag>(r) function
- #ifndef BOOST_BIMAP_RELATION_SUPPORT_GET_HPP
- #define BOOST_BIMAP_RELATION_SUPPORT_GET_HPP
- #if defined(_MSC_VER)
- #pragma once
- #endif
- #include <boost/config.hpp>
- #include <boost/bimap/relation/support/value_type_of.hpp>
- #include <boost/bimap/relation/detail/access_builder.hpp>
- #include <boost/mpl/if.hpp>
- #include <boost/type_traits/is_same.hpp>
- #include <boost/type_traits/is_const.hpp>
- #ifdef BOOST_BIMAP_ONLY_DOXYGEN_WILL_PROCESS_THE_FOLLOWING_LINES
- namespace boost {
- namespace bimaps {
- namespace relation {
- namespace support {
- /** \brief Gets a pair view of the relation.
- \ingroup relation_group
- **/
- template< class Tag, class SymmetricType >
- BOOST_DEDUCED_TYPENAME result_of::get<Tag,SymmetricType>::type
- get( SymmetricType & );
- } // namespace support
- } // namespace relation
- } // namespace bimaps
- } // namespace boost
- #endif // BOOST_BIMAP_ONLY_DOXYGEN_WILL_PROCESS_THE_FOLLOWING_LINES
- #ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
- namespace boost {
- namespace bimaps {
- namespace relation {
- namespace support {
- // Since it is very error-prone to directly write the hole bunch
- // of relation accesor. They are built from little macro blocks that
- // are both more readable, leading to self docummenting code and a
- // lot more easier to understand and maintain.
- // It is very important to note that the three building blocks have
- // to laid in the same namespace in order to work. There is also
- // important to keep them in order.
- // The forward declaration are not necessary but they help a lot to
- // the reader, as they undercover what is the signature of the
- // result code.
- // In the end, it is not quicker to do it in this way because you
- // write a lot. But this code has no complexity at all and almost
- // every word writed is for documentation.
- // Result of
- // -------------------------------------------------------------------------
- /*
- namespace result_of {
- template< class Tag, class Relation >
- struct get<Tag,Relation>;
- {
- typedef -unspecified- type;
- };
- } // namespace result_of
- */
- BOOST_BIMAP_SYMMETRIC_ACCESS_RESULT_OF_BUILDER
- (
- get,
- value_type_of
- )
- // Implementation
- // -------------------------------------------------------------------------
- BOOST_BIMAP_SYMMETRIC_ACCESS_IMPLEMENTATION_BUILDER
- (
- get,
- SymmetricType,
- st,
- return st.get_left(),
- return st.get_right()
- )
- namespace detail {
- template< class SymmetricType >
- BOOST_DEDUCED_TYPENAME result_of::get<
- ::boost::bimaps::relation::member_at::info, SymmetricType >::type
- get(::boost::bimaps::relation::member_at::info, SymmetricType & rel)
- {
- return rel.info;
- }
- } // namespace detail
- // Interface
- //----------------------------------------------------------------------------
- BOOST_BIMAP_SYMMETRIC_ACCESS_INTERFACE_BUILDER
- (
- get
- )
- } // namespace support
- } // namespace relation
- } // namespace bimaps
- } // namespace boost
- #endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
- #endif // BOOST_BIMAP_RELATION_SUPPORT_GET_HPP
|