| // 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 detail/generate_index_binder.hpp |
| /// \brief Define macros to help building the set type of definitions |
| |
| |
| #ifndef BOOST_BIMAP_DETAIL_GENERATE_INDEX_BINDER_HPP |
| #define BOOST_BIMAP_DETAIL_GENERATE_INDEX_BINDER_HPP |
| |
| #if defined(_MSC_VER) && (_MSC_VER>=1200) |
| #pragma once |
| #endif |
| |
| #include <boost/config.hpp> |
| |
| #include <boost/multi_index/tag.hpp> |
| |
| |
| /*===========================================================================*/ |
| #define BOOST_BIMAP_GENERATE_INDEX_BINDER_0CP( \ |
| \ |
| MULTI_INDEX_TYPE \ |
| \ |
| ) \ |
| \ |
| template< class KeyExtractor, class Tag > \ |
| struct index_bind \ |
| { \ |
| typedef MULTI_INDEX_TYPE \ |
| < \ |
| multi_index::tag< Tag >, \ |
| KeyExtractor \ |
| \ |
| > type; \ |
| }; |
| /*===========================================================================*/ |
| |
| |
| |
| /*===========================================================================*/ |
| #define BOOST_BIMAP_GENERATE_INDEX_BINDER_1CP( \ |
| \ |
| MULTI_INDEX_TYPE, \ |
| CONFIG_PARAMETER \ |
| \ |
| ) \ |
| \ |
| template< class KeyExtractor, class Tag > \ |
| struct index_bind \ |
| { \ |
| typedef MULTI_INDEX_TYPE \ |
| < \ |
| multi_index::tag< Tag >, \ |
| KeyExtractor, \ |
| CONFIG_PARAMETER \ |
| \ |
| > type; \ |
| }; |
| /*===========================================================================*/ |
| |
| |
| |
| |
| /*===========================================================================*/ |
| #define BOOST_BIMAP_GENERATE_INDEX_BINDER_2CP( \ |
| \ |
| MULTI_INDEX_TYPE, \ |
| CONFIG_PARAMETER_1, \ |
| CONFIG_PARAMETER_2 \ |
| ) \ |
| \ |
| template< class KeyExtractor, class Tag > \ |
| struct index_bind \ |
| { \ |
| typedef MULTI_INDEX_TYPE \ |
| < \ |
| multi_index::tag< Tag >, \ |
| KeyExtractor, \ |
| CONFIG_PARAMETER_1, \ |
| CONFIG_PARAMETER_2 \ |
| \ |
| > type; \ |
| \ |
| }; |
| /*===========================================================================*/ |
| |
| |
| // This is a special registration to allow sequenced and random access indices |
| // to play along smoothly with the other index types. |
| |
| /*===========================================================================*/ |
| #define BOOST_BIMAP_GENERATE_INDEX_BINDER_0CP_NO_EXTRACTOR( \ |
| \ |
| MULTI_INDEX_TYPE \ |
| \ |
| ) \ |
| \ |
| template< class KeyExtractor, class Tag > \ |
| struct index_bind \ |
| { \ |
| typedef MULTI_INDEX_TYPE< multi_index::tag< Tag > > type; \ |
| }; |
| /*===========================================================================*/ |
| |
| |
| // This is yet another special registration to allow unconstrained sets |
| // to play along smoothly with the other index types. |
| |
| /*===========================================================================*/ |
| #define BOOST_BIMAP_GENERATE_INDEX_BINDER_FAKE \ |
| \ |
| template< class KeyExtractor, class Tag > \ |
| struct index_bind \ |
| { \ |
| typedef void type; \ |
| }; \ |
| /*===========================================================================*/ |
| |
| #endif // BOOST_BIMAP_DETAIL_GENERATE_INDEX_BINDER_HPP |