Chris@16: // Boost.Bimap Chris@16: // Chris@16: // Copyright (c) 2006-2007 Matias Capeletto Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: /// \file detail/generate_index_binder.hpp Chris@16: /// \brief Define macros to help building the set type of definitions Chris@16: Chris@16: Chris@16: #ifndef BOOST_BIMAP_DETAIL_GENERATE_INDEX_BINDER_HPP Chris@16: #define BOOST_BIMAP_DETAIL_GENERATE_INDEX_BINDER_HPP Chris@16: Chris@101: #if defined(_MSC_VER) Chris@16: #pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: Chris@16: /*===========================================================================*/ Chris@16: #define BOOST_BIMAP_GENERATE_INDEX_BINDER_0CP( \ Chris@16: \ Chris@16: MULTI_INDEX_TYPE \ Chris@16: \ Chris@16: ) \ Chris@16: \ Chris@16: template< class KeyExtractor, class Tag > \ Chris@16: struct index_bind \ Chris@16: { \ Chris@16: typedef MULTI_INDEX_TYPE \ Chris@16: < \ Chris@16: multi_index::tag< Tag >, \ Chris@16: KeyExtractor \ Chris@16: \ Chris@16: > type; \ Chris@16: }; Chris@16: /*===========================================================================*/ Chris@16: Chris@16: Chris@16: Chris@16: /*===========================================================================*/ Chris@16: #define BOOST_BIMAP_GENERATE_INDEX_BINDER_1CP( \ Chris@16: \ Chris@16: MULTI_INDEX_TYPE, \ Chris@16: CONFIG_PARAMETER \ Chris@16: \ Chris@16: ) \ Chris@16: \ Chris@16: template< class KeyExtractor, class Tag > \ Chris@16: struct index_bind \ Chris@16: { \ Chris@16: typedef MULTI_INDEX_TYPE \ Chris@16: < \ Chris@16: multi_index::tag< Tag >, \ Chris@16: KeyExtractor, \ Chris@16: CONFIG_PARAMETER \ Chris@16: \ Chris@16: > type; \ Chris@16: }; Chris@16: /*===========================================================================*/ Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: /*===========================================================================*/ Chris@16: #define BOOST_BIMAP_GENERATE_INDEX_BINDER_2CP( \ Chris@16: \ Chris@16: MULTI_INDEX_TYPE, \ Chris@16: CONFIG_PARAMETER_1, \ Chris@16: CONFIG_PARAMETER_2 \ Chris@16: ) \ Chris@16: \ Chris@16: template< class KeyExtractor, class Tag > \ Chris@16: struct index_bind \ Chris@16: { \ Chris@16: typedef MULTI_INDEX_TYPE \ Chris@16: < \ Chris@16: multi_index::tag< Tag >, \ Chris@16: KeyExtractor, \ Chris@16: CONFIG_PARAMETER_1, \ Chris@16: CONFIG_PARAMETER_2 \ Chris@16: \ Chris@16: > type; \ Chris@16: \ Chris@16: }; Chris@16: /*===========================================================================*/ Chris@16: Chris@16: Chris@16: // This is a special registration to allow sequenced and random access indices Chris@16: // to play along smoothly with the other index types. Chris@16: Chris@16: /*===========================================================================*/ Chris@16: #define BOOST_BIMAP_GENERATE_INDEX_BINDER_0CP_NO_EXTRACTOR( \ Chris@16: \ Chris@16: MULTI_INDEX_TYPE \ Chris@16: \ Chris@16: ) \ Chris@16: \ Chris@16: template< class KeyExtractor, class Tag > \ Chris@16: struct index_bind \ Chris@16: { \ Chris@16: typedef MULTI_INDEX_TYPE< multi_index::tag< Tag > > type; \ Chris@16: }; Chris@16: /*===========================================================================*/ Chris@16: Chris@16: Chris@16: // This is yet another special registration to allow unconstrained sets Chris@16: // to play along smoothly with the other index types. Chris@16: Chris@16: /*===========================================================================*/ Chris@16: #define BOOST_BIMAP_GENERATE_INDEX_BINDER_FAKE \ Chris@16: \ Chris@16: template< class KeyExtractor, class Tag > \ Chris@16: struct index_bind \ Chris@16: { \ Chris@16: typedef void type; \ Chris@16: }; \ Chris@16: /*===========================================================================*/ Chris@16: Chris@16: #endif // BOOST_BIMAP_DETAIL_GENERATE_INDEX_BINDER_HPP