123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- // 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/pair_by.hpp
- /// \brief pair_by<member>(r) function
- #ifndef BOOST_BIMAP_RELATION_SUPPORT_PAIR_BY_HPP
- #define BOOST_BIMAP_RELATION_SUPPORT_PAIR_BY_HPP
- #if defined(_MSC_VER)
- #pragma once
- #endif
- #include <boost/config.hpp>
- #include <boost/bimap/relation/support/pair_type_by.hpp>
- #include <boost/bimap/relation/detail/access_builder.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 Relation >
- BOOST_DEDUCED_TYPENAME result_of::pair_by<Tag,Relation>::type
- pair_by( Relation & rel );
- } // 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 pair_by<Tag,Relation>;
- {
- typedef -unspecified- type;
- };
- } // namespace result_of
- */
- BOOST_BIMAP_SYMMETRIC_ACCESS_RESULT_OF_BUILDER
- (
- pair_by,
- pair_type_by
- )
- // Implementation
- // -------------------------------------------------------------------------
- BOOST_BIMAP_SYMMETRIC_ACCESS_IMPLEMENTATION_BUILDER
- (
- pair_by,
- Relation,
- rel,
- return rel.get_left_pair(),
- return rel.get_right_pair()
- )
- // Interface
- // --------------------------------------------------------------------------
- BOOST_BIMAP_SYMMETRIC_ACCESS_INTERFACE_BUILDER
- (
- pair_by
- )
- } // namespace support
- } // namespace relation
- } // namespace bimaps
- } // namespace boost
- #endif // BOOST_BIMAP_DOXIGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
- #endif // BOOST_BIMAP_RELATION_SUPPORT_PAIR_BY_HPP
|