]> git.sesse.net Git - casparcg/blob - dependencies/boost/boost/bimap/detail/generate_index_binder.hpp
Manually merged pull request #222
[casparcg] / dependencies / boost / boost / bimap / detail / generate_index_binder.hpp
1 // Boost.Bimap
2 //
3 // Copyright (c) 2006-2007 Matias Capeletto
4 //
5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8
9 /// \file detail/generate_index_binder.hpp
10 /// \brief Define macros to help building the set type of definitions
11
12
13 #ifndef BOOST_BIMAP_DETAIL_GENERATE_INDEX_BINDER_HPP
14 #define BOOST_BIMAP_DETAIL_GENERATE_INDEX_BINDER_HPP
15
16 #if defined(_MSC_VER) && (_MSC_VER>=1200)
17 #pragma once
18 #endif
19
20 #include <boost/config.hpp>
21
22 #include <boost/multi_index/tag.hpp>
23
24
25 /*===========================================================================*/
26 #define BOOST_BIMAP_GENERATE_INDEX_BINDER_0CP(                                \
27                                                                               \
28     MULTI_INDEX_TYPE                                                          \
29                                                                               \
30 )                                                                             \
31                                                                               \
32 template< class KeyExtractor, class Tag >                                     \
33 struct index_bind                                                             \
34 {                                                                             \
35     typedef MULTI_INDEX_TYPE                                                  \
36     <                                                                         \
37         multi_index::tag< Tag >,                                              \
38         KeyExtractor                                                          \
39                                                                               \
40     > type;                                                                   \
41 };
42 /*===========================================================================*/
43
44
45
46 /*===========================================================================*/
47 #define BOOST_BIMAP_GENERATE_INDEX_BINDER_1CP(                                \
48                                                                               \
49     MULTI_INDEX_TYPE,                                                         \
50     CONFIG_PARAMETER                                                          \
51                                                                               \
52 )                                                                             \
53                                                                               \
54 template< class KeyExtractor, class Tag >                                     \
55 struct index_bind                                                             \
56 {                                                                             \
57     typedef MULTI_INDEX_TYPE                                                  \
58     <                                                                         \
59         multi_index::tag< Tag >,                                              \
60         KeyExtractor,                                                         \
61         CONFIG_PARAMETER                                                      \
62                                                                               \
63     > type;                                                                   \
64 };
65 /*===========================================================================*/
66
67
68
69
70 /*===========================================================================*/
71 #define BOOST_BIMAP_GENERATE_INDEX_BINDER_2CP(                                \
72                                                                               \
73     MULTI_INDEX_TYPE,                                                         \
74     CONFIG_PARAMETER_1,                                                       \
75     CONFIG_PARAMETER_2                                                        \
76 )                                                                             \
77                                                                               \
78 template< class KeyExtractor, class Tag >                                     \
79 struct index_bind                                                             \
80 {                                                                             \
81     typedef MULTI_INDEX_TYPE                                                  \
82     <                                                                         \
83         multi_index::tag< Tag >,                                              \
84         KeyExtractor,                                                         \
85         CONFIG_PARAMETER_1,                                                   \
86         CONFIG_PARAMETER_2                                                    \
87                                                                               \
88     > type;                                                                   \
89                                                                               \
90 };
91 /*===========================================================================*/
92
93
94 // This is a special registration to allow sequenced and random access indices
95 // to play along smoothly with the other index types.
96
97 /*===========================================================================*/
98 #define BOOST_BIMAP_GENERATE_INDEX_BINDER_0CP_NO_EXTRACTOR(                   \
99                                                                               \
100     MULTI_INDEX_TYPE                                                          \
101                                                                               \
102 )                                                                             \
103                                                                               \
104 template< class KeyExtractor, class Tag >                                     \
105 struct index_bind                                                             \
106 {                                                                             \
107     typedef MULTI_INDEX_TYPE< multi_index::tag< Tag > > type;                 \
108 };
109 /*===========================================================================*/
110
111
112 // This is yet another special registration to allow unconstrained sets
113 // to play along smoothly with the other index types.
114
115 /*===========================================================================*/
116 #define BOOST_BIMAP_GENERATE_INDEX_BINDER_FAKE                                \
117                                                                               \
118 template< class KeyExtractor, class Tag >                                     \
119 struct index_bind                                                             \
120 {                                                                             \
121     typedef void type;                                                        \
122 };                                                                            \
123 /*===========================================================================*/
124
125 #endif // BOOST_BIMAP_DETAIL_GENERATE_INDEX_BINDER_HPP